 <?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://docs.analytica.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Ldavidson</id>
	<title>Analytica Docs - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://docs.analytica.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Ldavidson"/>
	<link rel="alternate" type="text/html" href="https://docs.analytica.com/index.php/Special:Contributions/Ldavidson"/>
	<updated>2026-05-20T08:59:40Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.35.9</generator>
	<entry>
		<id>https://docs.analytica.com/index.php?title=Sys_EnableFixedFont&amp;diff=54681</id>
		<title>Sys EnableFixedFont</title>
		<link rel="alternate" type="text/html" href="https://docs.analytica.com/index.php?title=Sys_EnableFixedFont&amp;diff=54681"/>
		<updated>2020-06-20T22:38:15Z</updated>

		<summary type="html">&lt;p&gt;Ldavidson: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This system variable has the values 0 (false) or 1 (true). When it is true, Analytica will display expressions in expressions fields such as definitions in object windows or the attribute pane using a fixed font, for example Courier. When it is false, Analytica will use a variable font as it has always used before.&lt;br /&gt;
&lt;br /&gt;
A fixed font is only used in expression fields. In other fields, such as title fields, Analytica will use a variable font no matter what the setting of this variable is.&lt;br /&gt;
&lt;br /&gt;
Table cells also make use of fixed font, when enabled, in edit table cells, though variable font is used in result cells. Similarly, list uses fixed font, if enabled, but list of text uses variable font.&lt;br /&gt;
&lt;br /&gt;
At startup, Analytica queries the Windows system for a series of fixed fonts that are found on many systems. If these are not found on a particular system, Analytica uses the backup variable font that is used in other fields, such as title fields.&lt;br /&gt;
&lt;br /&gt;
For information that might help putting this in context see [[Syntax coloring and fonts and error underlining]].&lt;/div&gt;</summary>
		<author><name>Ldavidson</name></author>
	</entry>
	<entry>
		<id>https://docs.analytica.com/index.php?title=Sys_EnableSyntaxColo&amp;diff=54680</id>
		<title>Sys EnableSyntaxColo</title>
		<link rel="alternate" type="text/html" href="https://docs.analytica.com/index.php?title=Sys_EnableSyntaxColo&amp;diff=54680"/>
		<updated>2020-06-20T22:37:35Z</updated>

		<summary type="html">&lt;p&gt;Ldavidson: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Set this system variable to 1 if you want the parser to color fields of different syntactic types it finds in definitions and other attribute fields that take parseable expressions. Set to 0 if you do not want to see coloring.&lt;br /&gt;
&lt;br /&gt;
For information that might help putting this in context see [[Syntax coloring and fonts and error underlining]].&lt;/div&gt;</summary>
		<author><name>Ldavidson</name></author>
	</entry>
	<entry>
		<id>https://docs.analytica.com/index.php?title=Sys_SyntaxColors&amp;diff=54679</id>
		<title>Sys SyntaxColors</title>
		<link rel="alternate" type="text/html" href="https://docs.analytica.com/index.php?title=Sys_SyntaxColors&amp;diff=54679"/>
		<updated>2020-06-20T22:36:46Z</updated>

		<summary type="html">&lt;p&gt;Ldavidson: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This system variable is a one dimensional table that you can edit to control syntax coloring in expression fields such as definitions in object windows and in the attribute pane. This is indexed by [[Sys TokenType]]. The table is stored in the registry and read from there at startup. Any editing changes you make will update the registry, if these changes are valid.&lt;br /&gt;
&lt;br /&gt;
Here is the table with initial default values:&lt;br /&gt;
&lt;br /&gt;
[[image:syntax colors.png]]&lt;br /&gt;
&lt;br /&gt;
The row headers are not editable, and you cannot add any rows. Only the data cells can be changed, and these cells only allow either hexadecimal specifications of RGB values of form 0xaarrggbb or color names known to Analytica, where aa = transparency or opaqueness and rr, gg, bb are the RGB values, in range 00 - FF. Unrecognized color names will result in an error popup, which will suggest that you either reread the original values or go back to the edited version as you left it and correct it.&lt;br /&gt;
&lt;br /&gt;
The syntax categories are:&lt;br /&gt;
&lt;br /&gt;
comments - Analytica comments, of the forms /* comment text */ or { comment text }&lt;br /&gt;
&lt;br /&gt;
text literals - strings enclosed in quotes, of the forms 'text ' or &amp;quot; text &amp;quot;&lt;br /&gt;
&lt;br /&gt;
keywords - reserved words in Analytica such as if, then, else, do, local, etc.&lt;br /&gt;
&lt;br /&gt;
undefined - these are words that are not keywords and not declared local variables and not identifiers of any Analytica nodes or functions; by default, these are lighter colored than identifiers and help you spot typos from failing to type resolved names correctly or else spot intended names that you typed before having actually defined them. These will always result in errors in parsing.&lt;br /&gt;
&lt;br /&gt;
user object identifiers - these are resolved identifiers of user defined Analytica nodes or functions&lt;br /&gt;
&lt;br /&gt;
system object identifiers - these are identifiers of built in system variables or functions, e.g., time.&lt;br /&gt;
&lt;br /&gt;
local variables - these are local variables declared by using keywords such as var, local, etc.&lt;br /&gt;
&lt;br /&gt;
Note that syntax coloring is continuously updated as you type into expression fields.&lt;br /&gt;
&lt;br /&gt;
For information that might help putting this in context see [[Syntax coloring and fonts and error underlining]].&lt;/div&gt;</summary>
		<author><name>Ldavidson</name></author>
	</entry>
	<entry>
		<id>https://docs.analytica.com/index.php?title=Sys_EnableErrorUnder&amp;diff=54678</id>
		<title>Sys EnableErrorUnder</title>
		<link rel="alternate" type="text/html" href="https://docs.analytica.com/index.php?title=Sys_EnableErrorUnder&amp;diff=54678"/>
		<updated>2020-06-20T22:35:42Z</updated>

		<summary type="html">&lt;p&gt;Ldavidson: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The system variable identifier is Sys_EnableErrorUnder, and the more readable name is Enable error underlining. This has possible values 0 (false) and 1 (true). When true, this applies to expression fields such as definitions in object windows or the attribute pane, and the underlining is intended to indicate errors that the Intellisense parser detects. These error indications are continuously updated as you type in expression fields. You can turn this off if the underlining is too distracting. Note that the Intellisense parser does not do full analysis, and so there are errors in definitions - such as unrecognized identifiers that are not the identifiers of any nodes in your model or names of any existing functions - that are not flagged as errors when you type. When you finally use the green checkmark or close the object window or attribute pane or attempt to evaluate a node complete checking will be done that will pinpoint errors not already flagged in a preliminary way during editing.&lt;br /&gt;
&lt;br /&gt;
Note that syntax coloring will distinguish between identifiers that successfully refer and identifiers that are not resolvable. The latter are termed &amp;quot;variables&amp;quot; in the edit table for [[Sys SyntaxColors]].&lt;br /&gt;
&lt;br /&gt;
For information that might help putting this in context see [[Syntax coloring and fonts and error underlining]].&lt;/div&gt;</summary>
		<author><name>Ldavidson</name></author>
	</entry>
	<entry>
		<id>https://docs.analytica.com/index.php?title=What%27s_new_in_Analytica_5.4%3F&amp;diff=54675</id>
		<title>What's new in Analytica 5.4?</title>
		<link rel="alternate" type="text/html" href="https://docs.analytica.com/index.php?title=What%27s_new_in_Analytica_5.4%3F&amp;diff=54675"/>
		<updated>2020-06-19T21:29:26Z</updated>

		<summary type="html">&lt;p&gt;Ldavidson: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Analytica 5.4 will be the next future release of Analytica. It is currently under development. The current release is [[Analytica 5.3]]. This page is under construction, but will list the enhancements that are new to Analytica 5.4 since [[Analytica 5.3]].  If you have an Analytica subscription, you will be able to test drive a preliminary version when [[Analytica 5.4]] goes beta -- check the [[Beta Tester Page]] for status.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[image:Analytica-5.4.jpg]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Syntax coloring and fonts in expressions ==&lt;br /&gt;
&lt;br /&gt;
The big improvement in Release 5.4 is the way it shows expressions in a Definition attribute (also Check, OnClick, OnChange and other attributes showing expressions). Here's an example:&lt;br /&gt;
&lt;br /&gt;
[[File:Analytica_definition.jpg]]&lt;br /&gt;
&lt;br /&gt;
# it colors the text to distinguish identifiers of variables or functions, keywords (like IF, FOR, AND...), comments, text literals, and more.&lt;br /&gt;
# it uses a mono space font (each character has the same width as in typewriters), which is more common for code editors&lt;br /&gt;
# it underlines any syntax error with red wavy lines.&lt;br /&gt;
&lt;br /&gt;
You can modify color scheme, fonts, and syntax notification or revert to the previous look. See [[Syntax coloring and fonts and error underlining]] for details.&lt;br /&gt;
&lt;br /&gt;
===Module color inheritance===&lt;br /&gt;
&lt;br /&gt;
Module nodes now inherit their color from the Node style default rather than their containing module. See [[Sys UseLegacyColors]]  if you want to revert back to the legacy behavior that inherited color from the containing module.&lt;br /&gt;
&lt;br /&gt;
=== Multichoice option ===&lt;br /&gt;
&lt;br /&gt;
The ''expr'' pulldown menu for an index node now includes [[MultiChoice]] -- very useful when you want to be able to select one, several, or all options.  This was available before but not on the menu.&lt;br /&gt;
&lt;br /&gt;
== Graphing ==&lt;br /&gt;
=== Custom graph axis/key titles===&lt;br /&gt;
&lt;br /&gt;
You can now modify or hide the title for each graph axis and the Key instead of showing the title of the variable (or Index).  On the graph (in edit mode), right click on the title or axis you want to change, and select '''Change axis title''' or '''Change key title'''. The dialog lets you edit the title -- or enter blank to hide it.  For example, it's kind of redundant to show title Years (e.g. 2010, 2020, 2030) as &amp;quot;Years&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
The dialog has a checkbox to let you to set the revised title (or hidden title) for every graph that uses that index or variable as an axis or key. &lt;br /&gt;
&lt;br /&gt;
==== '''Axis/Key Title''' attribute====&lt;br /&gt;
&lt;br /&gt;
You can also see and set nondefault text used for axes and key titles for a variable or index with the '''Axis/Key Title''' attribute in the [[Object window]] or [[Attribute panel]].  You first need to set this attribute to show from the [[Attribute panel]]. This will apply to all graphs using the variable. But, it's usually easier to use the right-click menu on the title described above.&lt;br /&gt;
&lt;br /&gt;
====How the default axis/key title is determined====&lt;br /&gt;
&lt;br /&gt;
There are rules about how the default title is determined. If you have changed the axis/key title for all graphs using the index or variable, then the default is what you changed this to. If you have not changed the axis/key title then the default is the title of the index or variable, or, if that title is blank, the default is the identifier of the index or variable.&lt;br /&gt;
&lt;br /&gt;
However, if you have checked the checkbox referred to above then blanked out the title, this resets any change you made for all graphs and the default is the title of the index or variable or, if that title is blank, the default is the identifier of the index or variable.&lt;br /&gt;
&lt;br /&gt;
The popup &amp;quot;Use default axis title?&amp;quot; (or key title) will tell you what the default will be. You will see words in one of these three variations:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Do you want to use the default axis title for Revenue, which is Annual revenue (global axis title override)?&amp;quot; - This indicates that the default is the axis title &amp;quot;Annual revenue&amp;quot; that has been designated to be used in all graphs using the index or variable Revenue. &lt;br /&gt;
&lt;br /&gt;
&amp;quot;Do you want to use the default axis title for Revenue, which is Revenue (Title attribute)?&amp;quot; - This indicates that the default is the title &amp;quot;Revenue&amp;quot; of the index or variable Revenue.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Do you want to use the default axis title for Revenue, which is Revenue (identifier)?&amp;quot; - This indicates that Revenue has no title and the default is the identifier of the index or variable Revenue.&lt;br /&gt;
&lt;br /&gt;
=== Exceedance probability ===&lt;br /&gt;
&lt;br /&gt;
There is a new '''Exceedance probability''' option in the [[Uncertainty views]] for each result. It shows the probability that the value of an uncertain variable is greater than each value. It's the complement (1 - p) of the Cumulative probability (CDF).  In some fields, like cybersecurity risk, many people prefer exceedance probability distributions to CDFs. &lt;br /&gt;
&lt;br /&gt;
[[File:Exceedance probability in Uncertainty view.png|400px]]&lt;br /&gt;
&lt;br /&gt;
== Tables ==&lt;br /&gt;
* Shift+Space now extends the selected cells to include the entire row(s).&lt;br /&gt;
* Ctrl+Space now extends the selected cells to include the entire column(s).&lt;br /&gt;
&lt;br /&gt;
== Built-in Functions ==&lt;br /&gt;
=== Changes to existing functions ===&lt;br /&gt;
* The [[UncertainLMH]] distribution has been changed to use the Hadlock-Bickel-Johnson Quantile Parameterized Distribution by default, rather than the Keelin SPT distribution. The HBJ-QPD is preferred since it is maximally feasible.  This impacts [[UncertainLMH]], [[DensUncertainLMH]], [[CumUncertainLMH]] and [[CumUncertainLMHInv]] functions.&lt;br /&gt;
** A new system variable has been added: [[UncertainLMH_Method]], which selects the default algorithm used by these functions. If you need backward compatibility with 5.3 with this distribution, your can set this to 2. But note: Due to a small improvement, [[DensUncertainLMH]] with keelin algorithm is slightly more accurate, so numbers may differ out around the 9th decimal point compared to previously.&lt;br /&gt;
** A new optional parameter, «method», was added to each of these functions, which you can use to select the algorithm (HBJ-QPD or K-SPT) for the specific call. &lt;br /&gt;
* [[AskMsgText]] and [[AskMsgNumber]]: Added an option to include a checkbox on the dialog.&lt;br /&gt;
* [[Cdf]] Added an option to return the exceedance curve.&lt;br /&gt;
* Eliminated a spurious &amp;quot;dynamic-loop cyclic dependency&amp;quot; error message that appeared in a 2-D [[Dynamic]] loop. This is a case where there wasn't really a cyclic dependency, so the error message was a false positive. A 2-D dynamic loop is where two dynamic loops on different dynamic indexes intersect, so that the nodes in that loop have to iterate over two dynamic indexes (fairly rare).&lt;br /&gt;
* A «condition» parameter was added to [[Flatten]]. Makes it easy to include only the items that satisfy the «condition» in the flattened result.&lt;br /&gt;
&lt;br /&gt;
=== New functions ===&lt;br /&gt;
* [[COMEnumerate]] -- enumerates the elements of an enumerable COM object.&lt;br /&gt;
&lt;br /&gt;
=== Evaluation engine ===&lt;br /&gt;
* When the outermost function of a variable's Definition is [[Mid]]() or [[Sample]](), the evaluation occurs slightly differently than before, which ensures that the mid-value and sample-value are the same when the Definition contains a random component. When the engine sees [[Mid]]() at the outer level, it tells it that this variable should only be evaluated in mid-mode. The sample value will share the same mid value. This results in a difference from previous releases when the Definition contains a random component, such as:&lt;br /&gt;
*::&amp;lt;code&amp;gt;[[Mid]](Random())&amp;lt;/code&amp;gt;&lt;br /&gt;
Previously, children that used its sample-value would see a different value than children who used its mid-value, and there wasn't any convenient way to tell it to use the same value for both mid- and sample-values. &lt;br /&gt;
** The same idea applies to expressions inside a call to [[Dynamic]], for example &amp;lt;code&amp;gt;[[Dynamic]](0, Mid(Random()+Self[Time-1]))&amp;lt;/code&amp;gt;.&lt;br /&gt;
** If you want the legacy behavior (because you want identical random sequences if you find this changes them), press F12 to open the typescript window and type: &amp;lt;code&amp;gt;[[RandomLegacyRelease]]:50300&amp;lt;/code&amp;gt;.&lt;br /&gt;
** The above descriptions apply symmetrically when the definition has [[Sample]]() as the outer function.&lt;br /&gt;
&lt;br /&gt;
== Other Misc ==&lt;br /&gt;
* It now omits the currency symbol for non-finite values -- e.g. it shows &amp;lt;code&amp;gt;INF&amp;lt;/code&amp;gt; instead of &amp;lt;code&amp;gt;$INF&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;NAN&amp;lt;/code&amp;gt; instead of &amp;lt;code&amp;gt;$NAN&amp;lt;/code&amp;gt; -- when you have selected currency in [[Number format]].&lt;br /&gt;
* A new attribute, [[NodeBorderColor]], can be set to get a non-black node border color. You can set this on a class object to change the default border color. There is no GUI for this yet, it has to be changed via typescript.&lt;/div&gt;</summary>
		<author><name>Ldavidson</name></author>
	</entry>
	<entry>
		<id>https://docs.analytica.com/index.php?title=Syntax_coloring_and_fonts_and_error_underlining&amp;diff=54674</id>
		<title>Syntax coloring and fonts and error underlining</title>
		<link rel="alternate" type="text/html" href="https://docs.analytica.com/index.php?title=Syntax_coloring_and_fonts_and_error_underlining&amp;diff=54674"/>
		<updated>2020-06-19T21:29:07Z</updated>

		<summary type="html">&lt;p&gt;Ldavidson: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Syntax coloring, a fixed font option, and error underlining are new 5.4 features that apply to fields like definitions that make use of expressions. Here is an example illustrating how these features affect the appearance of a definition:&lt;br /&gt;
&lt;br /&gt;
[[File:Analytica_definition.jpg]]&lt;br /&gt;
&lt;br /&gt;
You can change syntax colors for the various syntax categories and turn all three features on or off using system variables as described below, with links to separate pages for these system variables:&lt;br /&gt;
&lt;br /&gt;
#  Set the syntax colors using system variable '''Syntax colors''' from ''Definition / System variables / Settings / Syntax colors'' (see [[Sys_SyntaxColors]])&lt;br /&gt;
# You can turn syntax coloring on and off using system variable '''Enable syntax coloring''' from ''Definition / System variables / Settings / Enable syntax coloring'' (see [[Sys_EnableSyntaxColo]])&lt;br /&gt;
#  Go back to variable width font using system variable '''Enable fixed font''' back from 1 to 0 from ''Definition / System variables / Settings / Enable fixed font'' (see [[Sys_EnableFixedFont]])&lt;br /&gt;
# Disable error underlining with system variable '''Enable error underlining''', accessible from ''Definition / System variables / Settings / Enable error underlining'' (see [[Sys_EnableErrorUnder]])&lt;/div&gt;</summary>
		<author><name>Ldavidson</name></author>
	</entry>
	<entry>
		<id>https://docs.analytica.com/index.php?title=Definitions&amp;diff=54669</id>
		<title>Definitions</title>
		<link rel="alternate" type="text/html" href="https://docs.analytica.com/index.php?title=Definitions&amp;diff=54669"/>
		<updated>2020-06-17T21:51:02Z</updated>

		<summary type="html">&lt;p&gt;Ldavidson: /* Sections */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Analytica User Guide]]&lt;br /&gt;
[[Category: Definitions]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;breadcrumbs&amp;gt;Analytica User Guide &amp;gt; {{PAGENAME}}&amp;lt;/breadcrumbs&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This chapter introduces the tools for creating and editing mathematical models by giving each variable a formula that defines how to compute its value in its '''''definition'''''. The definition of a variable can be a simple number, text, a probability distribution, or a more complicated expression. It can also be a list or table of numbers or other expressions. Subsequent chapters present more details about using mathematical expressions, arrays, and probability distributions.&lt;br /&gt;
&lt;br /&gt;
==Sections==&lt;br /&gt;
* [[Creating or editing a definition]]&lt;br /&gt;
* [[The Expression popup menu]]&lt;br /&gt;
* [[Expression Assist]]&lt;br /&gt;
* [[Object Finder dialog]]&lt;br /&gt;
* [[Definition menu]]&lt;br /&gt;
* [[The domain of possible values]]&lt;br /&gt;
* [[Check attribute]]&lt;br /&gt;
* [[Syntax coloring and fonts and error_underlining]]&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
* [[Definition menu]]&lt;br /&gt;
* [[Definition menu (more)]]&lt;br /&gt;
* [[Writing Array-Abstractable Definitions]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;footer&amp;gt;Graphs / {{PAGENAME}} / Expressions&amp;lt;/footer&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ldavidson</name></author>
	</entry>
	<entry>
		<id>https://docs.analytica.com/index.php?title=Syntax_coloring_and_fonts_and_error_underlining&amp;diff=54668</id>
		<title>Syntax coloring and fonts and error underlining</title>
		<link rel="alternate" type="text/html" href="https://docs.analytica.com/index.php?title=Syntax_coloring_and_fonts_and_error_underlining&amp;diff=54668"/>
		<updated>2020-06-17T21:47:15Z</updated>

		<summary type="html">&lt;p&gt;Ldavidson: Created page with &amp;quot;Refer to What%27s_new_in_Analytica_5.4%3F#Syntax_coloring_and_fonts_in_expressions for the announcement of new features discussed here.  Here is a recapitulation of the in...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Refer to [[What%27s_new_in_Analytica_5.4%3F#Syntax_coloring_and_fonts_in_expressions]] for the announcement of new features discussed here.&lt;br /&gt;
&lt;br /&gt;
Here is a recapitulation of the information on the What's New page that tells you what the various sys vars are for controlling these features. Links are provided to the sys vars where you can get more detailed information for working with them. Note that each of these sys var values are preserved in the Windows registry in the User area, and do not change from model to model.&lt;br /&gt;
&lt;br /&gt;
#  Set the syntax colors using system variable '''Syntax colors''' from ''Definition / System variables / Settings / Syntax colors'' (see [[Sys_SyntaxColors]])&lt;br /&gt;
# You can turn syntax coloring on and off using system variable '''Enable syntax coloring''' from ''Definition / System variables / Settings / Enable syntax coloring'' (see [[Sys_EnableSyntaxColo]])&lt;br /&gt;
#  Go back to variable width font using system variable '''Enable fixed font''' back from 1 to 0 from ''Definition / System variables / Settings / Enable fixed font'' (see [[Sys_EnableFixedFont]])&lt;br /&gt;
# Disable error underlining with system variable '''Enable error underlining''', accessible from ''Definition / System variables / Settings / Enable error underlining'' (see [[Sys_EnableErrorUnder]])&lt;/div&gt;</summary>
		<author><name>Ldavidson</name></author>
	</entry>
	<entry>
		<id>https://docs.analytica.com/index.php?title=Sys_SyntaxColors&amp;diff=54666</id>
		<title>Sys SyntaxColors</title>
		<link rel="alternate" type="text/html" href="https://docs.analytica.com/index.php?title=Sys_SyntaxColors&amp;diff=54666"/>
		<updated>2020-06-17T21:36:22Z</updated>

		<summary type="html">&lt;p&gt;Ldavidson: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This system variable is a one dimensional table that you can edit to control syntax coloring in expression fields such as definitions in object windows and in the attribute pane. This is indexed by [[Sys TokenType]]. The table is stored in the registry and read from there at startup. Any editing changes you make will update the registry, if these changes are valid.&lt;br /&gt;
&lt;br /&gt;
Here is the table with initial default values:&lt;br /&gt;
&lt;br /&gt;
[[image:syntax colors.png]]&lt;br /&gt;
&lt;br /&gt;
The row headers are not editable, and you cannot add any rows. Only the data cells can be changed, and these cells only allow either hexadecimal specifications of RGB values of form 0xaarrggbb or color names known to Analytica, where aa = transparency or opaqueness and rr, gg, bb are the RGB values, in range 00 - FF. Unrecognized color names will result in an error popup, which will suggest that you either reread the original values or go back to the edited version as you left it and correct it.&lt;br /&gt;
&lt;br /&gt;
The syntax categories are:&lt;br /&gt;
&lt;br /&gt;
comments - Analytica comments, of the forms /* comment text */ or { comment text }&lt;br /&gt;
&lt;br /&gt;
text literals - strings enclosed in quotes, of the forms 'text ' or &amp;quot; text &amp;quot;&lt;br /&gt;
&lt;br /&gt;
keywords - reserved words in Analytica such as if, then, else, do, local, etc.&lt;br /&gt;
&lt;br /&gt;
undefined - these are words that are not keywords and not declared local variables and not identifiers of any Analytica nodes or functions; by default, these are lighter colored than identifiers and help you spot typos from failing to type resolved names correctly or else spot intended names that you typed before having actually defined them. These will always result in errors in parsing.&lt;br /&gt;
&lt;br /&gt;
user object identifiers - these are resolved identifiers of user defined Analytica nodes or functions&lt;br /&gt;
&lt;br /&gt;
system object identifiers - these are identifiers of built in system variables or functions, e.g., time.&lt;br /&gt;
&lt;br /&gt;
local variables - these are local variables declared by using keywords such as var, local, etc.&lt;br /&gt;
&lt;br /&gt;
Note that syntax coloring is continuously updated as you type into expression fields.&lt;/div&gt;</summary>
		<author><name>Ldavidson</name></author>
	</entry>
	<entry>
		<id>https://docs.analytica.com/index.php?title=File:Analytica_definition.jpg&amp;diff=54664</id>
		<title>File:Analytica definition.jpg</title>
		<link rel="alternate" type="text/html" href="https://docs.analytica.com/index.php?title=File:Analytica_definition.jpg&amp;diff=54664"/>
		<updated>2020-06-16T18:23:23Z</updated>

		<summary type="html">&lt;p&gt;Ldavidson: Ldavidson uploaded a new version of File:Analytica definition.jpg&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Ldavidson</name></author>
	</entry>
	<entry>
		<id>https://docs.analytica.com/index.php?title=File:Analytica_definition.jpg&amp;diff=54663</id>
		<title>File:Analytica definition.jpg</title>
		<link rel="alternate" type="text/html" href="https://docs.analytica.com/index.php?title=File:Analytica_definition.jpg&amp;diff=54663"/>
		<updated>2020-06-16T18:16:06Z</updated>

		<summary type="html">&lt;p&gt;Ldavidson: Ldavidson uploaded a new version of File:Analytica definition.jpg&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Ldavidson</name></author>
	</entry>
	<entry>
		<id>https://docs.analytica.com/index.php?title=File:Analytica_definition.jpg&amp;diff=54662</id>
		<title>File:Analytica definition.jpg</title>
		<link rel="alternate" type="text/html" href="https://docs.analytica.com/index.php?title=File:Analytica_definition.jpg&amp;diff=54662"/>
		<updated>2020-06-16T18:07:52Z</updated>

		<summary type="html">&lt;p&gt;Ldavidson: Ldavidson uploaded a new version of File:Analytica definition.jpg&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Ldavidson</name></author>
	</entry>
	<entry>
		<id>https://docs.analytica.com/index.php?title=What%27s_new_in_Analytica_5.4%3F&amp;diff=54661</id>
		<title>What's new in Analytica 5.4?</title>
		<link rel="alternate" type="text/html" href="https://docs.analytica.com/index.php?title=What%27s_new_in_Analytica_5.4%3F&amp;diff=54661"/>
		<updated>2020-06-16T17:11:14Z</updated>

		<summary type="html">&lt;p&gt;Ldavidson: /* Syntax coloring and fonts in expressions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Analytica 5.4 will be the next future release of Analytica. It is currently under development. The current release is [[Analytica 5.3]]. This page is under construction, but will list the enhancements that are new to Analytica 5.4 since [[Analytica 5.3]].  If you have an Analytica subscription, you will be able to test drive a preliminary version when [[Analytica 5.4]] goes beta -- check the [[Beta Tester Page]] for status.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[image:Analytica-5.4.jpg]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Syntax coloring and fonts in expressions ==&lt;br /&gt;
&lt;br /&gt;
The big improvement in Release 5.4 is the way it shows expressions in a Definition attribute (also Check, OnClick, OnChange and other attributes showing expressions). Here's an example:&lt;br /&gt;
&lt;br /&gt;
[[File:Analytica_definition.jpg]]&lt;br /&gt;
&lt;br /&gt;
# it colors the text to distinguish identifiers of variables or functions, keywords (like IF, FOR, AND...), comments, text literals, and more.&lt;br /&gt;
# it uses a mono space font (each character has the same width as in typewriters), which is more common for code editors&lt;br /&gt;
# it underlines any syntax error with red wavy lines.&lt;br /&gt;
&lt;br /&gt;
If you don't think these are improvements, you can revert each back to its original look using a system variable accessible from the '''Definition''' menu:&lt;br /&gt;
#  Set the syntax colors using system variable '''Syntax colors''' from ''Definition / System variables / Settings / Syntax colors'' (see [[Sys_SyntaxColors]])&lt;br /&gt;
# You can turn syntax coloring on and off using system variable '''Enable syntax coloring''' from ''Definition / System variables / Settings / Enable syntax coloring'' (see [[Sys_EnableSyntaxColo]])&lt;br /&gt;
#  Go back to variable width font using system variable '''Enable fixed font''' back from 1 to 0 from ''Definition / System variables / Settings / Enable fixed font'' (see [[Sys_EnableFixedFont]])&lt;br /&gt;
# Disable error underlining with system variable '''Enable error underlining''', accessible from ''Definition / System variables / Settings / Enable error underlining'' (see [[Sys_EnableErrorUnder]])&lt;br /&gt;
&lt;br /&gt;
===Module color inheritance===&lt;br /&gt;
&lt;br /&gt;
Module nodes now inherit their color from the Node style default rather than their containing module. See [[Sys UseLegacyColors]]  if you want to revert back to the legacy behavior that inherited color from the containing module.&lt;br /&gt;
&lt;br /&gt;
=== Multichoice option ===&lt;br /&gt;
&lt;br /&gt;
The ''expr'' pulldown menu for an index node now includes [[MultiChoice]] -- very useful when you want to be able to select one, several, or all options.  This was available before but not on the menu.&lt;br /&gt;
&lt;br /&gt;
== Graphing ==&lt;br /&gt;
=== Custom graph axis/key titles===&lt;br /&gt;
&lt;br /&gt;
You can now modify or hide the title for each graph axis and the Key instead of showing the title of the variable (or Index).  On the graph (in edit mode), right click on the title or axis you want to change, and select '''Change axis title''' or '''Change key title'''. The dialog lets you edit the title -- or enter blank to hide it.  For example, it's kind of redundant to show title Years (e.g. 2010, 2020, 2030) as &amp;quot;Years&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
The dialog has a checkbox to let you to set the revised title (or hidden title) for every graph that uses that index or variable as an axis or key. &lt;br /&gt;
&lt;br /&gt;
==== '''Axis/Key Title''' attribute====&lt;br /&gt;
&lt;br /&gt;
You can also see and set nondefault text used for axes and key titles for a variable or index with the '''Axis/Key Title''' attribute in the [[Object window]] or [[Attribute panel]].  You first need to set this attribute to show from the [[Attribute panel]]. This will apply to all graphs using the variable. But, it's usually easier to use the right-click menu on the title described above.&lt;br /&gt;
&lt;br /&gt;
====How the default axis/key title is determined====&lt;br /&gt;
&lt;br /&gt;
There are rules about how the default title is determined. If you have changed the axis/key title for all graphs using the index or variable, then the default is what you changed this to. If you have not changed the axis/key title then the default is the title of the index or variable, or, if that title is blank, the default is the identifier of the index or variable.&lt;br /&gt;
&lt;br /&gt;
However, if you have checked the checkbox referred to above then blanked out the title, this resets any change you made for all graphs and the default is the title of the index or variable or, if that title is blank, the default is the identifier of the index or variable.&lt;br /&gt;
&lt;br /&gt;
The popup &amp;quot;Use default axis title?&amp;quot; (or key title) will tell you what the default will be. You will see words in one of these three variations:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Do you want to use the default axis title for Revenue, which is Annual revenue (global axis title override)?&amp;quot; - This indicates that the default is the axis title &amp;quot;Annual revenue&amp;quot; that has been designated to be used in all graphs using the index or variable Revenue. &lt;br /&gt;
&lt;br /&gt;
&amp;quot;Do you want to use the default axis title for Revenue, which is Revenue (Title attribute)?&amp;quot; - This indicates that the default is the title &amp;quot;Revenue&amp;quot; of the index or variable Revenue.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Do you want to use the default axis title for Revenue, which is Revenue (identifier)?&amp;quot; - This indicates that Revenue has no title and the default is the identifier of the index or variable Revenue.&lt;br /&gt;
&lt;br /&gt;
=== Exceedance probability ===&lt;br /&gt;
&lt;br /&gt;
There is a new '''Exceedance probability''' option in the [[Uncertainty views]] for each result. It shows the probability that the value of an uncertain variable is greater than each value. It's the complement (1 - p) of the Cumulative probability (CDF).  In some fields, like cybersecurity risk, many people prefer exceedance probability distributions to CDFs. &lt;br /&gt;
&lt;br /&gt;
[[File:Exceedance probability in Uncertainty view.png|400px]]&lt;br /&gt;
&lt;br /&gt;
== Tables ==&lt;br /&gt;
* Shift+Space now extends the selected cells to include the entire row(s).&lt;br /&gt;
* Ctrl+Space now extends the selected cells to include the entire column(s).&lt;br /&gt;
&lt;br /&gt;
== Built-in Functions ==&lt;br /&gt;
=== Changes to existing functions ===&lt;br /&gt;
* The [[UncertainLMH]] distribution has been changed to use the Hadlock-Bickel-Johnson Quantile Parameterized Distribution by default, rather than the Keelin SPT distribution. The HBJ-QPD is preferred since it is maximally feasible.  This impacts [[UncertainLMH]], [[DensUncertainLMH]], [[CumUncertainLMH]] and [[CumUncertainLMHInv]] functions.&lt;br /&gt;
** A new system variable has been added: [[UncertainLMH_Method]], which selects the default algorithm used by these functions. If you need backward compatibility with 5.3 with this distribution, your can set this to 2. But note: Due to a small improvement, [[DensUncertainLMH]] with keelin algorithm is slightly more accurate, so numbers may differ out around the 9th decimal point compared to previously.&lt;br /&gt;
** A new optional parameter, «method», was added to each of these functions, which you can use to select the algorithm (HBJ-QPD or K-SPT) for the specific call. &lt;br /&gt;
* [[AskMsgText]] and [[AskMsgNumber]]: Added an option to include a checkbox on the dialog.&lt;br /&gt;
* [[Cdf]] Added an option to return the exceedance curve.&lt;br /&gt;
* Eliminated a spurious &amp;quot;dynamic-loop cyclic dependency&amp;quot; error message that appeared in a 2-D [[Dynamic]] loop. This is a case where there wasn't really a cyclic dependency, so the error message was a false positive. A 2-D dynamic loop is where two dynamic loops on different dynamic indexes intersect, so that the nodes in that loop have to iterate over two dynamic indexes (fairly rare).&lt;br /&gt;
* A «condition» parameter was added to [[Flatten]]. Makes it easy to include only the items that satisfy the «condition» in the flattened result.&lt;br /&gt;
&lt;br /&gt;
=== New functions ===&lt;br /&gt;
* [[COMEnumerate]] -- enumerates the elements of an enumerable COM object.&lt;br /&gt;
&lt;br /&gt;
=== Evaluation engine ===&lt;br /&gt;
* When the outermost function of a variable's Definition is [[Mid]]() or [[Sample]](), the evaluation occurs slightly differently than before, which ensures that the mid-value and sample-value are the same when the Definition contains a random component. When the engine sees [[Mid]]() at the outer level, it tells it that this variable should only be evaluated in mid-mode. The sample value will share the same mid value. This results in a difference from previous releases when the Definition contains a random component, such as:&lt;br /&gt;
*::&amp;lt;code&amp;gt;[[Mid]](Random())&amp;lt;/code&amp;gt;&lt;br /&gt;
Previously, children that used its sample-value would see a different value than children who used its mid-value, and there wasn't any convenient way to tell it to use the same value for both mid- and sample-values. &lt;br /&gt;
** The same idea applies to expressions inside a call to [[Dynamic]], for example &amp;lt;code&amp;gt;[[Dynamic]](0, Mid(Random()+Self[Time-1]))&amp;lt;/code&amp;gt;.&lt;br /&gt;
** If you want the legacy behavior (because you want identical random sequences if you find this changes them), press F12 to open the typescript window and type: &amp;lt;code&amp;gt;[[RandomLegacyRelease]]:50300&amp;lt;/code&amp;gt;.&lt;br /&gt;
** The above descriptions apply symmetrically when the definition has [[Sample]]() as the outer function.&lt;br /&gt;
&lt;br /&gt;
== Other Misc ==&lt;br /&gt;
* It now omits the currency symbol for non-finite values -- e.g. it shows &amp;lt;code&amp;gt;INF&amp;lt;/code&amp;gt; instead of &amp;lt;code&amp;gt;$INF&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;NAN&amp;lt;/code&amp;gt; instead of &amp;lt;code&amp;gt;$NAN&amp;lt;/code&amp;gt; -- when you have selected currency in [[Number format]].&lt;br /&gt;
* A new attribute, [[NodeBorderColor]], can be set to get a non-black node border color. You can set this on a class object to change the default border color. There is no GUI for this yet, it has to be changed via typescript.&lt;/div&gt;</summary>
		<author><name>Ldavidson</name></author>
	</entry>
	<entry>
		<id>https://docs.analytica.com/index.php?title=What%27s_new_in_Analytica_5.4%3F&amp;diff=54660</id>
		<title>What's new in Analytica 5.4?</title>
		<link rel="alternate" type="text/html" href="https://docs.analytica.com/index.php?title=What%27s_new_in_Analytica_5.4%3F&amp;diff=54660"/>
		<updated>2020-06-15T20:53:21Z</updated>

		<summary type="html">&lt;p&gt;Ldavidson: /* Syntax coloring and fonts in expressions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Analytica 5.4 will be the next future release of Analytica. It is currently under development. The current release is [[Analytica 5.3]]. This page is under construction, but will list the enhancements that are new to Analytica 5.4 since [[Analytica 5.3]].  If you have an Analytica subscription, you will be able to test drive a preliminary version when [[Analytica 5.4]] goes beta -- check the [[Beta Tester Page]] for status.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[image:Analytica-5.4.jpg]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Syntax coloring and fonts in expressions ==&lt;br /&gt;
&lt;br /&gt;
The big improvement in Release 5.4 is the way it shows expressions in a Definition attribute (also Check, OnClick, OnChange and other attributes showing expressions). Here's an example:&lt;br /&gt;
&lt;br /&gt;
[[File:Analytica_definition.jpg]]&lt;br /&gt;
&lt;br /&gt;
# it colors the text to distinguish identifiers of variables or functions, keywords (like IF, FOR, AND...), comments, text literals, and more.&lt;br /&gt;
# it uses a mono space font (each character has the same width as in typewriters), which is more common for code editors&lt;br /&gt;
# it underlines any syntax error with red wavy lines.&lt;br /&gt;
&lt;br /&gt;
If you don't think these are improvements, you can revert each back to its original look using a system variable accessible from the '''Definition''' menu:&lt;br /&gt;
#  Set the syntax colors using system variable &amp;quot;Syntax colors&amp;quot; from ''Definition / System variables / Settings / Syntax colors'' (see [[Sys_SyntaxColors]])&lt;br /&gt;
# You can turn syntax coloring on and off using system variable &amp;quot;Enable syntax coloring&amp;quot; from ''Definition / System variables / Settings / Enable syntax coloring'' (see [[Sys_EnableSyntaxColo]])&lt;br /&gt;
#  Go back to variable width font using system variable '''Enable fixed font''' back from 1 to 0 from ''Definition / System variables / Settings / Enable fixed font'' (see [[Sys_EnableFixedFont]])&lt;br /&gt;
# Disable error underlining with [[Sys EnableErrorUnder]], accessible from ''Definition / System variables / Settings / Enable error underlining'' (see [[Sys_EnableErrorUnder]])&lt;br /&gt;
&lt;br /&gt;
===Module color inheritance===&lt;br /&gt;
&lt;br /&gt;
Module nodes now inherit their color from the Node style default rather than their containing module. See [[Sys UseLegacyColors]]  if you want to revert back to the legacy behavior that inherited color from the containing module.&lt;br /&gt;
&lt;br /&gt;
=== Multichoice option ===&lt;br /&gt;
&lt;br /&gt;
The ''expr'' pulldown menu for an index node now includes [[MultiChoice]] -- very useful when you want to be able to select one, several, or all options.  This was available before but not on the menu.&lt;br /&gt;
&lt;br /&gt;
== Graphing ==&lt;br /&gt;
=== Custom graph axis/key titles===&lt;br /&gt;
&lt;br /&gt;
You can now modify or hide the title for each graph axis and the Key instead of showing the title of the variable (or Index).  On the graph (in edit mode), right click on the title or axis you want to change, and select '''Change axis title''' or '''Change key title'''. The dialog lets you edit the title -- or enter blank to hide it.  For example, it's kind of redundant to show title Years (e.g. 2010, 2020, 2030) as &amp;quot;Years&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
The dialog has a checkbox to let you to set the revised title (or hidden title) for every graph that uses that index or variable as an axis or key. &lt;br /&gt;
&lt;br /&gt;
==== '''Axis/Key Title''' attribute====&lt;br /&gt;
&lt;br /&gt;
You can also see and set nondefault text used for axes and key titles for a variable or index with the '''Axis/Key Title''' attribute in the [[Object window]] or [[Attribute panel]].  You first need to set this attribute to show from the [[Attribute panel]]. This will apply to all graphs using the variable. But, it's usually easier to use the right-click menu on the title described above.&lt;br /&gt;
&lt;br /&gt;
====How the default axis/key title is determined====&lt;br /&gt;
&lt;br /&gt;
There are rules about how the default title is determined. If you have changed the axis/key title for all graphs using the index or variable, then the default is what you changed this to. If you have not changed the axis/key title then the default is the title of the index or variable, or, if that title is blank, the default is the identifier of the index or variable.&lt;br /&gt;
&lt;br /&gt;
However, if you have checked the checkbox referred to above then blanked out the title, this resets any change you made for all graphs and the default is the title of the index or variable or, if that title is blank, the default is the identifier of the index or variable.&lt;br /&gt;
&lt;br /&gt;
The popup &amp;quot;Use default axis title?&amp;quot; (or key title) will tell you what the default will be. You will see words in one of these three variations:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Do you want to use the default axis title for Revenue, which is Annual revenue (global axis title override)?&amp;quot; - This indicates that the default is the axis title &amp;quot;Annual revenue&amp;quot; that has been designated to be used in all graphs using the index or variable Revenue. &lt;br /&gt;
&lt;br /&gt;
&amp;quot;Do you want to use the default axis title for Revenue, which is Revenue (Title attribute)?&amp;quot; - This indicates that the default is the title &amp;quot;Revenue&amp;quot; of the index or variable Revenue.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Do you want to use the default axis title for Revenue, which is Revenue (identifier)?&amp;quot; - This indicates that Revenue has no title and the default is the identifier of the index or variable Revenue.&lt;br /&gt;
&lt;br /&gt;
=== Exceedance probability ===&lt;br /&gt;
&lt;br /&gt;
There is a new '''Exceedance probability''' option in the [[Uncertainty views]] for each result. It shows the probability that the value of an uncertain variable is greater than each value. It's the complement (1 - p) of the Cumulative probability (CDF).  In some fields, like cybersecurity risk, many people prefer exceedance probability distributions to CDFs. &lt;br /&gt;
&lt;br /&gt;
[[File:Exceedance probability in Uncertainty view.png|400px]]&lt;br /&gt;
&lt;br /&gt;
== Tables ==&lt;br /&gt;
* Shift+Space now extends the selected cells to include the entire row(s).&lt;br /&gt;
* Ctrl+Space now extends the selected cells to include the entire column(s).&lt;br /&gt;
&lt;br /&gt;
== Built-in Functions ==&lt;br /&gt;
=== Changes to existing functions ===&lt;br /&gt;
* The [[UncertainLMH]] distribution has been changed to use the Hadlock-Bickel-Johnson Quantile Parameterized Distribution by default, rather than the Keelin SPT distribution. The HBJ-QPD is preferred since it is maximally feasible.  This impacts [[UncertainLMH]], [[DensUncertainLMH]], [[CumUncertainLMH]] and [[CumUncertainLMHInv]] functions.&lt;br /&gt;
** A new system variable has been added: [[UncertainLMH_Method]], which selects the default algorithm used by these functions. If you need backward compatibility with 5.3 with this distribution, your can set this to 2. But note: Due to a small improvement, [[DensUncertainLMH]] with keelin algorithm is slightly more accurate, so numbers may differ out around the 9th decimal point compared to previously.&lt;br /&gt;
** A new optional parameter, «method», was added to each of these functions, which you can use to select the algorithm (HBJ-QPD or K-SPT) for the specific call. &lt;br /&gt;
* [[AskMsgText]] and [[AskMsgNumber]]: Added an option to include a checkbox on the dialog.&lt;br /&gt;
* [[Cdf]] Added an option to return the exceedance curve.&lt;br /&gt;
* Eliminated a spurious &amp;quot;dynamic-loop cyclic dependency&amp;quot; error message that appeared in a 2-D [[Dynamic]] loop. This is a case where there wasn't really a cyclic dependency, so the error message was a false positive. A 2-D dynamic loop is where two dynamic loops on different dynamic indexes intersect, so that the nodes in that loop have to iterate over two dynamic indexes (fairly rare).&lt;br /&gt;
* A «condition» parameter was added to [[Flatten]]. Makes it easy to include only the items that satisfy the «condition» in the flattened result.&lt;br /&gt;
&lt;br /&gt;
=== New functions ===&lt;br /&gt;
* [[COMEnumerate]] -- enumerates the elements of an enumerable COM object.&lt;br /&gt;
&lt;br /&gt;
=== Evaluation engine ===&lt;br /&gt;
* When the outermost function of a variable's Definition is [[Mid]]() or [[Sample]](), the evaluation occurs slightly differently than before, which ensures that the mid-value and sample-value are the same when the Definition contains a random component. When the engine sees [[Mid]]() at the outer level, it tells it that this variable should only be evaluated in mid-mode. The sample value will share the same mid value. This results in a difference from previous releases when the Definition contains a random component, such as:&lt;br /&gt;
*::&amp;lt;code&amp;gt;[[Mid]](Random())&amp;lt;/code&amp;gt;&lt;br /&gt;
Previously, children that used its sample-value would see a different value than children who used its mid-value, and there wasn't any convenient way to tell it to use the same value for both mid- and sample-values. &lt;br /&gt;
** The same idea applies to expressions inside a call to [[Dynamic]], for example &amp;lt;code&amp;gt;[[Dynamic]](0, Mid(Random()+Self[Time-1]))&amp;lt;/code&amp;gt;.&lt;br /&gt;
** If you want the legacy behavior (because you want identical random sequences if you find this changes them), press F12 to open the typescript window and type: &amp;lt;code&amp;gt;[[RandomLegacyRelease]]:50300&amp;lt;/code&amp;gt;.&lt;br /&gt;
** The above descriptions apply symmetrically when the definition has [[Sample]]() as the outer function.&lt;br /&gt;
&lt;br /&gt;
== Other Misc ==&lt;br /&gt;
* It now omits the currency symbol for non-finite values -- e.g. it shows &amp;lt;code&amp;gt;INF&amp;lt;/code&amp;gt; instead of &amp;lt;code&amp;gt;$INF&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;NAN&amp;lt;/code&amp;gt; instead of &amp;lt;code&amp;gt;$NAN&amp;lt;/code&amp;gt; -- when you have selected currency in [[Number format]].&lt;br /&gt;
* A new attribute, [[NodeBorderColor]], can be set to get a non-black node border color. You can set this on a class object to change the default border color. There is no GUI for this yet, it has to be changed via typescript.&lt;/div&gt;</summary>
		<author><name>Ldavidson</name></author>
	</entry>
	<entry>
		<id>https://docs.analytica.com/index.php?title=What%27s_new_in_Analytica_5.4%3F&amp;diff=54659</id>
		<title>What's new in Analytica 5.4?</title>
		<link rel="alternate" type="text/html" href="https://docs.analytica.com/index.php?title=What%27s_new_in_Analytica_5.4%3F&amp;diff=54659"/>
		<updated>2020-06-15T20:16:14Z</updated>

		<summary type="html">&lt;p&gt;Ldavidson: /* Syntax coloring and fonts in expressions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Analytica 5.4 will be the next future release of Analytica. It is currently under development. The current release is [[Analytica 5.3]]. This page is under construction, but will list the enhancements that are new to Analytica 5.4 since [[Analytica 5.3]].  If you have an Analytica subscription, you will be able to test drive a preliminary version when [[Analytica 5.4]] goes beta -- check the [[Beta Tester Page]] for status.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[image:Analytica-5.4.jpg]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Syntax coloring and fonts in expressions ==&lt;br /&gt;
&lt;br /&gt;
The big improvement in Release 5.4 is the way it shows expressions in a Definition attribute (also Check, OnClick, OnChange and other attributes showing expressions). Here's an example:&lt;br /&gt;
&lt;br /&gt;
[[File:Analytica_definition.jpg]]&lt;br /&gt;
&lt;br /&gt;
# it colors the text to distinguish identifiers of variables or functions, keywords (like IF, FOR, AND...), comments, text literals, and more.&lt;br /&gt;
# it uses a mono space font (each character has the same width as in typewriters), which is more common for code editors&lt;br /&gt;
# it underlines any syntax error with red wavy lines.&lt;br /&gt;
&lt;br /&gt;
If you don't think these are improvements, you can revert each back to its original look using a system variable accessible from the '''Definition''' menu:&lt;br /&gt;
#  Set the syntax colors using system variable &amp;quot;Syntax colors&amp;quot; from ''Definition / System variables / Settings / Syntax colors'' (see [[Sys_SyntaxColors]])'&lt;br /&gt;
# You can turn syntax coloring on and off using system variable &amp;quot;Enable syntax coloring&amp;quot; from ''Definition / System variables / Settings / Enable syntax coloring'' (see [[Sys_EnableSyntaxColo]])'&lt;br /&gt;
#  Go back to variable width font using system variable '''Enable fixed font''' back from 1 to 0 from ''Definition / System variables / Settings / Enable fixed font'' (see [[Sys_EnableFixedFont]])'&lt;br /&gt;
# Disable error underlining with [[Sys EnableErrorUnder]], accessible from ''Definition / System variables / Settings / Enable error underlining'' (see [[Sys_EnableErrorUnder]])'.&lt;br /&gt;
&lt;br /&gt;
===Module color inheritance===&lt;br /&gt;
&lt;br /&gt;
Module nodes now inherit their color from the Node style default rather than their containing module. See [[Sys UseLegacyColors]]  if you want to revert back to the legacy behavior that inherited color from the containing module.&lt;br /&gt;
&lt;br /&gt;
=== Multichoice option ===&lt;br /&gt;
&lt;br /&gt;
The ''expr'' pulldown menu for an index node now includes [[MultiChoice]] -- very useful when you want to be able to select one, several, or all options.  This was available before but not on the menu.&lt;br /&gt;
&lt;br /&gt;
== Graphing ==&lt;br /&gt;
=== Custom graph axis/key titles===&lt;br /&gt;
&lt;br /&gt;
You can now modify or hide the title for each graph axis and the Key instead of showing the title of the variable (or Index).  On the graph (in edit mode), right click on the title or axis you want to change, and select '''Change axis title''' or '''Change key title'''. The dialog lets you edit the title -- or enter blank to hide it.  For example, it's kind of redundant to show title Years (e.g. 2010, 2020, 2030) as &amp;quot;Years&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
The dialog has a checkbox to let you to set the revised title (or hidden title) for every graph that uses that index or variable as an axis or key. &lt;br /&gt;
&lt;br /&gt;
==== '''Axis/Key Title''' attribute====&lt;br /&gt;
&lt;br /&gt;
You can also see and set nondefault text used for axes and key titles for a variable or index with the '''Axis/Key Title''' attribute in the [[Object window]] or [[Attribute panel]].  You first need to set this attribute to show from the [[Attribute panel]]. This will apply to all graphs using the variable. But, it's usually easier to use the right-click menu on the title described above.&lt;br /&gt;
&lt;br /&gt;
====How the default axis/key title is determined====&lt;br /&gt;
&lt;br /&gt;
There are rules about how the default title is determined. If you have changed the axis/key title for all graphs using the index or variable, then the default is what you changed this to. If you have not changed the axis/key title then the default is the title of the index or variable, or, if that title is blank, the default is the identifier of the index or variable.&lt;br /&gt;
&lt;br /&gt;
However, if you have checked the checkbox referred to above then blanked out the title, this resets any change you made for all graphs and the default is the title of the index or variable or, if that title is blank, the default is the identifier of the index or variable.&lt;br /&gt;
&lt;br /&gt;
The popup &amp;quot;Use default axis title?&amp;quot; (or key title) will tell you what the default will be. You will see words in one of these three variations:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Do you want to use the default axis title for Revenue, which is Annual revenue (global axis title override)?&amp;quot; - This indicates that the default is the axis title &amp;quot;Annual revenue&amp;quot; that has been designated to be used in all graphs using the index or variable Revenue. &lt;br /&gt;
&lt;br /&gt;
&amp;quot;Do you want to use the default axis title for Revenue, which is Revenue (Title attribute)?&amp;quot; - This indicates that the default is the title &amp;quot;Revenue&amp;quot; of the index or variable Revenue.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Do you want to use the default axis title for Revenue, which is Revenue (identifier)?&amp;quot; - This indicates that Revenue has no title and the default is the identifier of the index or variable Revenue.&lt;br /&gt;
&lt;br /&gt;
=== Exceedance probability ===&lt;br /&gt;
&lt;br /&gt;
There is a new '''Exceedance probability''' option in the [[Uncertainty views]] for each result. It shows the probability that the value of an uncertain variable is greater than each value. It's the complement (1 - p) of the Cumulative probability (CDF).  In some fields, like cybersecurity risk, many people prefer exceedance probability distributions to CDFs. &lt;br /&gt;
&lt;br /&gt;
[[File:Exceedance probability in Uncertainty view.png|400px]]&lt;br /&gt;
&lt;br /&gt;
== Tables ==&lt;br /&gt;
* Shift+Space now extends the selected cells to include the entire row(s).&lt;br /&gt;
* Ctrl+Space now extends the selected cells to include the entire column(s).&lt;br /&gt;
&lt;br /&gt;
== Built-in Functions ==&lt;br /&gt;
=== Changes to existing functions ===&lt;br /&gt;
* The [[UncertainLMH]] distribution has been changed to use the Hadlock-Bickel-Johnson Quantile Parameterized Distribution by default, rather than the Keelin SPT distribution. The HBJ-QPD is preferred since it is maximally feasible.  This impacts [[UncertainLMH]], [[DensUncertainLMH]], [[CumUncertainLMH]] and [[CumUncertainLMHInv]] functions.&lt;br /&gt;
** A new system variable has been added: [[UncertainLMH_Method]], which selects the default algorithm used by these functions. If you need backward compatibility with 5.3 with this distribution, your can set this to 2. But note: Due to a small improvement, [[DensUncertainLMH]] with keelin algorithm is slightly more accurate, so numbers may differ out around the 9th decimal point compared to previously.&lt;br /&gt;
** A new optional parameter, «method», was added to each of these functions, which you can use to select the algorithm (HBJ-QPD or K-SPT) for the specific call. &lt;br /&gt;
* [[AskMsgText]] and [[AskMsgNumber]]: Added an option to include a checkbox on the dialog.&lt;br /&gt;
* [[Cdf]] Added an option to return the exceedance curve.&lt;br /&gt;
* Eliminated a spurious &amp;quot;dynamic-loop cyclic dependency&amp;quot; error message that appeared in a 2-D [[Dynamic]] loop. This is a case where there wasn't really a cyclic dependency, so the error message was a false positive. A 2-D dynamic loop is where two dynamic loops on different dynamic indexes intersect, so that the nodes in that loop have to iterate over two dynamic indexes (fairly rare).&lt;br /&gt;
* A «condition» parameter was added to [[Flatten]]. Makes it easy to include only the items that satisfy the «condition» in the flattened result.&lt;br /&gt;
&lt;br /&gt;
=== New functions ===&lt;br /&gt;
* [[COMEnumerate]] -- enumerates the elements of an enumerable COM object.&lt;br /&gt;
&lt;br /&gt;
=== Evaluation engine ===&lt;br /&gt;
* When the outermost function of a variable's Definition is [[Mid]]() or [[Sample]](), the evaluation occurs slightly differently than before, which ensures that the mid-value and sample-value are the same when the Definition contains a random component. When the engine sees [[Mid]]() at the outer level, it tells it that this variable should only be evaluated in mid-mode. The sample value will share the same mid value. This results in a difference from previous releases when the Definition contains a random component, such as:&lt;br /&gt;
*::&amp;lt;code&amp;gt;[[Mid]](Random())&amp;lt;/code&amp;gt;&lt;br /&gt;
Previously, children that used its sample-value would see a different value than children who used its mid-value, and there wasn't any convenient way to tell it to use the same value for both mid- and sample-values. &lt;br /&gt;
** The same idea applies to expressions inside a call to [[Dynamic]], for example &amp;lt;code&amp;gt;[[Dynamic]](0, Mid(Random()+Self[Time-1]))&amp;lt;/code&amp;gt;.&lt;br /&gt;
** If you want the legacy behavior (because you want identical random sequences if you find this changes them), press F12 to open the typescript window and type: &amp;lt;code&amp;gt;[[RandomLegacyRelease]]:50300&amp;lt;/code&amp;gt;.&lt;br /&gt;
** The above descriptions apply symmetrically when the definition has [[Sample]]() as the outer function.&lt;br /&gt;
&lt;br /&gt;
== Other Misc ==&lt;br /&gt;
* It now omits the currency symbol for non-finite values -- e.g. it shows &amp;lt;code&amp;gt;INF&amp;lt;/code&amp;gt; instead of &amp;lt;code&amp;gt;$INF&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;NAN&amp;lt;/code&amp;gt; instead of &amp;lt;code&amp;gt;$NAN&amp;lt;/code&amp;gt; -- when you have selected currency in [[Number format]].&lt;br /&gt;
* A new attribute, [[NodeBorderColor]], can be set to get a non-black node border color. You can set this on a class object to change the default border color. There is no GUI for this yet, it has to be changed via typescript.&lt;/div&gt;</summary>
		<author><name>Ldavidson</name></author>
	</entry>
	<entry>
		<id>https://docs.analytica.com/index.php?title=What%27s_new_in_Analytica_5.4%3F&amp;diff=54658</id>
		<title>What's new in Analytica 5.4?</title>
		<link rel="alternate" type="text/html" href="https://docs.analytica.com/index.php?title=What%27s_new_in_Analytica_5.4%3F&amp;diff=54658"/>
		<updated>2020-06-15T20:14:21Z</updated>

		<summary type="html">&lt;p&gt;Ldavidson: /* Syntax coloring and fonts in expressions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Analytica 5.4 will be the next future release of Analytica. It is currently under development. The current release is [[Analytica 5.3]]. This page is under construction, but will list the enhancements that are new to Analytica 5.4 since [[Analytica 5.3]].  If you have an Analytica subscription, you will be able to test drive a preliminary version when [[Analytica 5.4]] goes beta -- check the [[Beta Tester Page]] for status.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[image:Analytica-5.4.jpg]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Syntax coloring and fonts in expressions ==&lt;br /&gt;
&lt;br /&gt;
The big improvement in Release 5.4 is the way it shows expressions in a Definition attribute (also Check, OnClick, OnChange and other attributes showing expressions). Here's an example:&lt;br /&gt;
&lt;br /&gt;
[[File:Analytica_definition.jpg]]&lt;br /&gt;
&lt;br /&gt;
# it colors the text to distinguish identifiers of variables or functions, keywords (like IF, FOR, AND...), comments, text literals, and more.&lt;br /&gt;
# it uses a mono space font (each character has the same width as in typewriters), which is more common for code editors&lt;br /&gt;
# it underlines any syntax error with red wavy lines.&lt;br /&gt;
&lt;br /&gt;
If you don't think these are improvements, you can revert each back to its original look using a system variable accessible from the '''Definition''' menu:&lt;br /&gt;
#  Set the syntax colors using system variable &amp;quot;Syntax colors&amp;quot; from ''Definition / System variables / Settings / Syntax colors'' (see [[Sys_SyntaxColors]])' &lt;br /&gt;
# You can turn syntax coloring on and off using system variable &amp;quot;Enable syntax coloring&amp;quot; from ''Definition / System variables / Settings / Enable syntax coloring'' (see [[Sys_EnableSyntaxColo]])'&lt;br /&gt;
#  Go back to variable width font using system variable '''Enable fixed font''' back from 1 to 0 from ''Definition / System variables / Settings / Enable fixed font'' (see [[Sys_EnableFixedFont]])'&lt;br /&gt;
# Disable error underlining with [[Sys EnableErrorUnder]], accessible from ''Definition / System variables / Settings / Enable error underlining'' (see [[Sys_EnableErrorUnder]])'.&lt;br /&gt;
&lt;br /&gt;
===Module color inheritance===&lt;br /&gt;
&lt;br /&gt;
Module nodes now inherit their color from the Node style default rather than their containing module. See [[Sys UseLegacyColors]]  if you want to revert back to the legacy behavior that inherited color from the containing module.&lt;br /&gt;
&lt;br /&gt;
=== Multichoice option ===&lt;br /&gt;
&lt;br /&gt;
The ''expr'' pulldown menu for an index node now includes [[MultiChoice]] -- very useful when you want to be able to select one, several, or all options.  This was available before but not on the menu.&lt;br /&gt;
&lt;br /&gt;
== Graphing ==&lt;br /&gt;
=== Custom graph axis/key titles===&lt;br /&gt;
&lt;br /&gt;
You can now modify or hide the title for each graph axis and the Key instead of showing the title of the variable (or Index).  On the graph (in edit mode), right click on the title or axis you want to change, and select '''Change axis title''' or '''Change key title'''. The dialog lets you edit the title -- or enter blank to hide it.  For example, it's kind of redundant to show title Years (e.g. 2010, 2020, 2030) as &amp;quot;Years&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
The dialog has a checkbox to let you to set the revised title (or hidden title) for every graph that uses that index or variable as an axis or key. &lt;br /&gt;
&lt;br /&gt;
==== '''Axis/Key Title''' attribute====&lt;br /&gt;
&lt;br /&gt;
You can also see and set nondefault text used for axes and key titles for a variable or index with the '''Axis/Key Title''' attribute in the [[Object window]] or [[Attribute panel]].  You first need to set this attribute to show from the [[Attribute panel]]. This will apply to all graphs using the variable. But, it's usually easier to use the right-click menu on the title described above.&lt;br /&gt;
&lt;br /&gt;
====How the default axis/key title is determined====&lt;br /&gt;
&lt;br /&gt;
There are rules about how the default title is determined. If you have changed the axis/key title for all graphs using the index or variable, then the default is what you changed this to. If you have not changed the axis/key title then the default is the title of the index or variable, or, if that title is blank, the default is the identifier of the index or variable.&lt;br /&gt;
&lt;br /&gt;
However, if you have checked the checkbox referred to above then blanked out the title, this resets any change you made for all graphs and the default is the title of the index or variable or, if that title is blank, the default is the identifier of the index or variable.&lt;br /&gt;
&lt;br /&gt;
The popup &amp;quot;Use default axis title?&amp;quot; (or key title) will tell you what the default will be. You will see words in one of these three variations:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Do you want to use the default axis title for Revenue, which is Annual revenue (global axis title override)?&amp;quot; - This indicates that the default is the axis title &amp;quot;Annual revenue&amp;quot; that has been designated to be used in all graphs using the index or variable Revenue. &lt;br /&gt;
&lt;br /&gt;
&amp;quot;Do you want to use the default axis title for Revenue, which is Revenue (Title attribute)?&amp;quot; - This indicates that the default is the title &amp;quot;Revenue&amp;quot; of the index or variable Revenue.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Do you want to use the default axis title for Revenue, which is Revenue (identifier)?&amp;quot; - This indicates that Revenue has no title and the default is the identifier of the index or variable Revenue.&lt;br /&gt;
&lt;br /&gt;
=== Exceedance probability ===&lt;br /&gt;
&lt;br /&gt;
There is a new '''Exceedance probability''' option in the [[Uncertainty views]] for each result. It shows the probability that the value of an uncertain variable is greater than each value. It's the complement (1 - p) of the Cumulative probability (CDF).  In some fields, like cybersecurity risk, many people prefer exceedance probability distributions to CDFs. &lt;br /&gt;
&lt;br /&gt;
[[File:Exceedance probability in Uncertainty view.png|400px]]&lt;br /&gt;
&lt;br /&gt;
== Tables ==&lt;br /&gt;
* Shift+Space now extends the selected cells to include the entire row(s).&lt;br /&gt;
* Ctrl+Space now extends the selected cells to include the entire column(s).&lt;br /&gt;
&lt;br /&gt;
== Built-in Functions ==&lt;br /&gt;
=== Changes to existing functions ===&lt;br /&gt;
* The [[UncertainLMH]] distribution has been changed to use the Hadlock-Bickel-Johnson Quantile Parameterized Distribution by default, rather than the Keelin SPT distribution. The HBJ-QPD is preferred since it is maximally feasible.  This impacts [[UncertainLMH]], [[DensUncertainLMH]], [[CumUncertainLMH]] and [[CumUncertainLMHInv]] functions.&lt;br /&gt;
** A new system variable has been added: [[UncertainLMH_Method]], which selects the default algorithm used by these functions. If you need backward compatibility with 5.3 with this distribution, your can set this to 2. But note: Due to a small improvement, [[DensUncertainLMH]] with keelin algorithm is slightly more accurate, so numbers may differ out around the 9th decimal point compared to previously.&lt;br /&gt;
** A new optional parameter, «method», was added to each of these functions, which you can use to select the algorithm (HBJ-QPD or K-SPT) for the specific call. &lt;br /&gt;
* [[AskMsgText]] and [[AskMsgNumber]]: Added an option to include a checkbox on the dialog.&lt;br /&gt;
* [[Cdf]] Added an option to return the exceedance curve.&lt;br /&gt;
* Eliminated a spurious &amp;quot;dynamic-loop cyclic dependency&amp;quot; error message that appeared in a 2-D [[Dynamic]] loop. This is a case where there wasn't really a cyclic dependency, so the error message was a false positive. A 2-D dynamic loop is where two dynamic loops on different dynamic indexes intersect, so that the nodes in that loop have to iterate over two dynamic indexes (fairly rare).&lt;br /&gt;
* A «condition» parameter was added to [[Flatten]]. Makes it easy to include only the items that satisfy the «condition» in the flattened result.&lt;br /&gt;
&lt;br /&gt;
=== New functions ===&lt;br /&gt;
* [[COMEnumerate]] -- enumerates the elements of an enumerable COM object.&lt;br /&gt;
&lt;br /&gt;
=== Evaluation engine ===&lt;br /&gt;
* When the outermost function of a variable's Definition is [[Mid]]() or [[Sample]](), the evaluation occurs slightly differently than before, which ensures that the mid-value and sample-value are the same when the Definition contains a random component. When the engine sees [[Mid]]() at the outer level, it tells it that this variable should only be evaluated in mid-mode. The sample value will share the same mid value. This results in a difference from previous releases when the Definition contains a random component, such as:&lt;br /&gt;
*::&amp;lt;code&amp;gt;[[Mid]](Random())&amp;lt;/code&amp;gt;&lt;br /&gt;
Previously, children that used its sample-value would see a different value than children who used its mid-value, and there wasn't any convenient way to tell it to use the same value for both mid- and sample-values. &lt;br /&gt;
** The same idea applies to expressions inside a call to [[Dynamic]], for example &amp;lt;code&amp;gt;[[Dynamic]](0, Mid(Random()+Self[Time-1]))&amp;lt;/code&amp;gt;.&lt;br /&gt;
** If you want the legacy behavior (because you want identical random sequences if you find this changes them), press F12 to open the typescript window and type: &amp;lt;code&amp;gt;[[RandomLegacyRelease]]:50300&amp;lt;/code&amp;gt;.&lt;br /&gt;
** The above descriptions apply symmetrically when the definition has [[Sample]]() as the outer function.&lt;br /&gt;
&lt;br /&gt;
== Other Misc ==&lt;br /&gt;
* It now omits the currency symbol for non-finite values -- e.g. it shows &amp;lt;code&amp;gt;INF&amp;lt;/code&amp;gt; instead of &amp;lt;code&amp;gt;$INF&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;NAN&amp;lt;/code&amp;gt; instead of &amp;lt;code&amp;gt;$NAN&amp;lt;/code&amp;gt; -- when you have selected currency in [[Number format]].&lt;br /&gt;
* A new attribute, [[NodeBorderColor]], can be set to get a non-black node border color. You can set this on a class object to change the default border color. There is no GUI for this yet, it has to be changed via typescript.&lt;/div&gt;</summary>
		<author><name>Ldavidson</name></author>
	</entry>
	<entry>
		<id>https://docs.analytica.com/index.php?title=What%27s_new_in_Analytica_5.4%3F&amp;diff=54657</id>
		<title>What's new in Analytica 5.4?</title>
		<link rel="alternate" type="text/html" href="https://docs.analytica.com/index.php?title=What%27s_new_in_Analytica_5.4%3F&amp;diff=54657"/>
		<updated>2020-06-15T20:10:30Z</updated>

		<summary type="html">&lt;p&gt;Ldavidson: /* Syntax coloring and fonts in expressions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Analytica 5.4 will be the next future release of Analytica. It is currently under development. The current release is [[Analytica 5.3]]. This page is under construction, but will list the enhancements that are new to Analytica 5.4 since [[Analytica 5.3]].  If you have an Analytica subscription, you will be able to test drive a preliminary version when [[Analytica 5.4]] goes beta -- check the [[Beta Tester Page]] for status.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[image:Analytica-5.4.jpg]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Syntax coloring and fonts in expressions ==&lt;br /&gt;
&lt;br /&gt;
The big improvement in Release 5.4 is the way it shows expressions in a Definition attribute (also Check, OnClick, OnChange and other attributes showing expressions). Here's an example:&lt;br /&gt;
&lt;br /&gt;
[[File:Analytica_definition.jpg]]&lt;br /&gt;
&lt;br /&gt;
# it colors the text to distinguish identifiers of variables or functions, keywords (like IF, FOR, AND...), comments, text literals, and more.&lt;br /&gt;
# it uses a mono space font (each character has the same width as in typewriters), which is more common for code editors&lt;br /&gt;
# it underlines any syntax error with red wavy lines.&lt;br /&gt;
&lt;br /&gt;
If you don't think these are improvements, you can revert each back to its original look using a system variable accessible from the '''Definition''' menu:&lt;br /&gt;
#  Set the syntax colors using system variable &amp;quot;Syntax colors&amp;quot; from ''Definition / System variables / Settings / Syntax colors'' (see [[Sys_SyntaxColors]])' &lt;br /&gt;
# You can turn syntax coloring on and off using system variable &amp;quot;Enable syntax coloring&amp;quot; from ''Definition / System variables / Settings / Enable syntax coloring'' (see [[Sys_EnableSyntaxColo]])&lt;br /&gt;
#  Go back to variable width font using system variable '''Enable fixed font''' back from 1 to 0 from ''Definition / System variables / Settings / Enable fixed font'' (see [[Sys_EnableFixedFont]])'&lt;br /&gt;
# Disable error underlining with [[Sys EnableErrorUnder]], accessible from ''Definition / System variables / Settings / Enable error underlining'' (see [[Sys_EnableErrorUnder]])'.&lt;br /&gt;
&lt;br /&gt;
===Module color inheritance===&lt;br /&gt;
&lt;br /&gt;
Module nodes now inherit their color from the Node style default rather than their containing module. See [[Sys UseLegacyColors]]  if you want to revert back to the legacy behavior that inherited color from the containing module.&lt;br /&gt;
&lt;br /&gt;
=== Multichoice option ===&lt;br /&gt;
&lt;br /&gt;
The ''expr'' pulldown menu for an index node now includes [[MultiChoice]] -- very useful when you want to be able to select one, several, or all options.  This was available before but not on the menu.&lt;br /&gt;
&lt;br /&gt;
== Graphing ==&lt;br /&gt;
=== Custom graph axis/key titles===&lt;br /&gt;
&lt;br /&gt;
You can now modify or hide the title for each graph axis and the Key instead of showing the title of the variable (or Index).  On the graph (in edit mode), right click on the title or axis you want to change, and select '''Change axis title''' or '''Change key title'''. The dialog lets you edit the title -- or enter blank to hide it.  For example, it's kind of redundant to show title Years (e.g. 2010, 2020, 2030) as &amp;quot;Years&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
The dialog has a checkbox to let you to set the revised title (or hidden title) for every graph that uses that index or variable as an axis or key. &lt;br /&gt;
&lt;br /&gt;
==== '''Axis/Key Title''' attribute====&lt;br /&gt;
&lt;br /&gt;
You can also see and set nondefault text used for axes and key titles for a variable or index with the '''Axis/Key Title''' attribute in the [[Object window]] or [[Attribute panel]].  You first need to set this attribute to show from the [[Attribute panel]]. This will apply to all graphs using the variable. But, it's usually easier to use the right-click menu on the title described above.&lt;br /&gt;
&lt;br /&gt;
====How the default axis/key title is determined====&lt;br /&gt;
&lt;br /&gt;
There are rules about how the default title is determined. If you have changed the axis/key title for all graphs using the index or variable, then the default is what you changed this to. If you have not changed the axis/key title then the default is the title of the index or variable, or, if that title is blank, the default is the identifier of the index or variable.&lt;br /&gt;
&lt;br /&gt;
However, if you have checked the checkbox referred to above then blanked out the title, this resets any change you made for all graphs and the default is the title of the index or variable or, if that title is blank, the default is the identifier of the index or variable.&lt;br /&gt;
&lt;br /&gt;
The popup &amp;quot;Use default axis title?&amp;quot; (or key title) will tell you what the default will be. You will see words in one of these three variations:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Do you want to use the default axis title for Revenue, which is Annual revenue (global axis title override)?&amp;quot; - This indicates that the default is the axis title &amp;quot;Annual revenue&amp;quot; that has been designated to be used in all graphs using the index or variable Revenue. &lt;br /&gt;
&lt;br /&gt;
&amp;quot;Do you want to use the default axis title for Revenue, which is Revenue (Title attribute)?&amp;quot; - This indicates that the default is the title &amp;quot;Revenue&amp;quot; of the index or variable Revenue.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Do you want to use the default axis title for Revenue, which is Revenue (identifier)?&amp;quot; - This indicates that Revenue has no title and the default is the identifier of the index or variable Revenue.&lt;br /&gt;
&lt;br /&gt;
=== Exceedance probability ===&lt;br /&gt;
&lt;br /&gt;
There is a new '''Exceedance probability''' option in the [[Uncertainty views]] for each result. It shows the probability that the value of an uncertain variable is greater than each value. It's the complement (1 - p) of the Cumulative probability (CDF).  In some fields, like cybersecurity risk, many people prefer exceedance probability distributions to CDFs. &lt;br /&gt;
&lt;br /&gt;
[[File:Exceedance probability in Uncertainty view.png|400px]]&lt;br /&gt;
&lt;br /&gt;
== Tables ==&lt;br /&gt;
* Shift+Space now extends the selected cells to include the entire row(s).&lt;br /&gt;
* Ctrl+Space now extends the selected cells to include the entire column(s).&lt;br /&gt;
&lt;br /&gt;
== Built-in Functions ==&lt;br /&gt;
=== Changes to existing functions ===&lt;br /&gt;
* The [[UncertainLMH]] distribution has been changed to use the Hadlock-Bickel-Johnson Quantile Parameterized Distribution by default, rather than the Keelin SPT distribution. The HBJ-QPD is preferred since it is maximally feasible.  This impacts [[UncertainLMH]], [[DensUncertainLMH]], [[CumUncertainLMH]] and [[CumUncertainLMHInv]] functions.&lt;br /&gt;
** A new system variable has been added: [[UncertainLMH_Method]], which selects the default algorithm used by these functions. If you need backward compatibility with 5.3 with this distribution, your can set this to 2. But note: Due to a small improvement, [[DensUncertainLMH]] with keelin algorithm is slightly more accurate, so numbers may differ out around the 9th decimal point compared to previously.&lt;br /&gt;
** A new optional parameter, «method», was added to each of these functions, which you can use to select the algorithm (HBJ-QPD or K-SPT) for the specific call. &lt;br /&gt;
* [[AskMsgText]] and [[AskMsgNumber]]: Added an option to include a checkbox on the dialog.&lt;br /&gt;
* [[Cdf]] Added an option to return the exceedance curve.&lt;br /&gt;
* Eliminated a spurious &amp;quot;dynamic-loop cyclic dependency&amp;quot; error message that appeared in a 2-D [[Dynamic]] loop. This is a case where there wasn't really a cyclic dependency, so the error message was a false positive. A 2-D dynamic loop is where two dynamic loops on different dynamic indexes intersect, so that the nodes in that loop have to iterate over two dynamic indexes (fairly rare).&lt;br /&gt;
* A «condition» parameter was added to [[Flatten]]. Makes it easy to include only the items that satisfy the «condition» in the flattened result.&lt;br /&gt;
&lt;br /&gt;
=== New functions ===&lt;br /&gt;
* [[COMEnumerate]] -- enumerates the elements of an enumerable COM object.&lt;br /&gt;
&lt;br /&gt;
=== Evaluation engine ===&lt;br /&gt;
* When the outermost function of a variable's Definition is [[Mid]]() or [[Sample]](), the evaluation occurs slightly differently than before, which ensures that the mid-value and sample-value are the same when the Definition contains a random component. When the engine sees [[Mid]]() at the outer level, it tells it that this variable should only be evaluated in mid-mode. The sample value will share the same mid value. This results in a difference from previous releases when the Definition contains a random component, such as:&lt;br /&gt;
*::&amp;lt;code&amp;gt;[[Mid]](Random())&amp;lt;/code&amp;gt;&lt;br /&gt;
Previously, children that used its sample-value would see a different value than children who used its mid-value, and there wasn't any convenient way to tell it to use the same value for both mid- and sample-values. &lt;br /&gt;
** The same idea applies to expressions inside a call to [[Dynamic]], for example &amp;lt;code&amp;gt;[[Dynamic]](0, Mid(Random()+Self[Time-1]))&amp;lt;/code&amp;gt;.&lt;br /&gt;
** If you want the legacy behavior (because you want identical random sequences if you find this changes them), press F12 to open the typescript window and type: &amp;lt;code&amp;gt;[[RandomLegacyRelease]]:50300&amp;lt;/code&amp;gt;.&lt;br /&gt;
** The above descriptions apply symmetrically when the definition has [[Sample]]() as the outer function.&lt;br /&gt;
&lt;br /&gt;
== Other Misc ==&lt;br /&gt;
* It now omits the currency symbol for non-finite values -- e.g. it shows &amp;lt;code&amp;gt;INF&amp;lt;/code&amp;gt; instead of &amp;lt;code&amp;gt;$INF&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;NAN&amp;lt;/code&amp;gt; instead of &amp;lt;code&amp;gt;$NAN&amp;lt;/code&amp;gt; -- when you have selected currency in [[Number format]].&lt;br /&gt;
* A new attribute, [[NodeBorderColor]], can be set to get a non-black node border color. You can set this on a class object to change the default border color. There is no GUI for this yet, it has to be changed via typescript.&lt;/div&gt;</summary>
		<author><name>Ldavidson</name></author>
	</entry>
	<entry>
		<id>https://docs.analytica.com/index.php?title=Sys_EnableSyntaxColo&amp;diff=54656</id>
		<title>Sys EnableSyntaxColo</title>
		<link rel="alternate" type="text/html" href="https://docs.analytica.com/index.php?title=Sys_EnableSyntaxColo&amp;diff=54656"/>
		<updated>2020-06-15T20:09:09Z</updated>

		<summary type="html">&lt;p&gt;Ldavidson: Created page with &amp;quot;Set this system variable to 1 if you want the parser to color fields of different syntactic types it finds in definitions and other attribute fields that take parseable expres...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Set this system variable to 1 if you want the parser to color fields of different syntactic types it finds in definitions and other attribute fields that take parseable expressions. Set to 0 if you do not want to see coloring.&lt;/div&gt;</summary>
		<author><name>Ldavidson</name></author>
	</entry>
	<entry>
		<id>https://docs.analytica.com/index.php?title=File:Analytica_definition.jpg&amp;diff=54655</id>
		<title>File:Analytica definition.jpg</title>
		<link rel="alternate" type="text/html" href="https://docs.analytica.com/index.php?title=File:Analytica_definition.jpg&amp;diff=54655"/>
		<updated>2020-06-15T19:54:51Z</updated>

		<summary type="html">&lt;p&gt;Ldavidson: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Ldavidson</name></author>
	</entry>
	<entry>
		<id>https://docs.analytica.com/index.php?title=Sys_RedGreenBlue&amp;diff=54276</id>
		<title>Sys RedGreenBlue</title>
		<link rel="alternate" type="text/html" href="https://docs.analytica.com/index.php?title=Sys_RedGreenBlue&amp;diff=54276"/>
		<updated>2020-03-03T19:23:54Z</updated>

		<summary type="html">&lt;p&gt;Ldavidson: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Note: this has been deprecated, and is no longer an index for SyntaxColors. But it might be present in an older version of Analytica.&lt;br /&gt;
&lt;br /&gt;
This system variable is one index for the system variable SyntaxColors (see [[Sys SyntaxColors]]). This indexes the RGB values of colors in the columns of the SyntaxColors table. This cannot be changed. The members of this index are strings red, green, and blue.&lt;/div&gt;</summary>
		<author><name>Ldavidson</name></author>
	</entry>
	<entry>
		<id>https://docs.analytica.com/index.php?title=Sys_TokenType&amp;diff=54275</id>
		<title>Sys TokenType</title>
		<link rel="alternate" type="text/html" href="https://docs.analytica.com/index.php?title=Sys_TokenType&amp;diff=54275"/>
		<updated>2020-03-03T19:21:54Z</updated>

		<summary type="html">&lt;p&gt;Ldavidson: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This system variable is one index for the system variable SyntaxColors (see [[Sys SyntaxColors]]). This indexes the token types values of colors in the rows of the SyntaxColors table. This cannot be changed. The members of this index are comments, text literals, keywords, undefined, user object identifiers, system object identifiers, local variables. Here is what these mean:&lt;br /&gt;
&lt;br /&gt;
comments - Analytica comments, of the forms /* comment text */ or { comment text } &lt;br /&gt;
&lt;br /&gt;
text literals - strings enclosed in quotes, of the forms '[text ' or &amp;quot; text &amp;quot; &lt;br /&gt;
&lt;br /&gt;
keywords - reserved words in Analytica such as if, then, else, do, local, etc. &lt;br /&gt;
&lt;br /&gt;
undefined - these are words that are not keywords and not declared local variables and not identifiers of any Analytica nodes or functions; by default, these are lighter colored than identifiers and help you spot typos from failing to type resolved names correctly or else spot intended names that you typed before having actually defined them. These will always result in errors in parsing. &lt;br /&gt;
&lt;br /&gt;
user object identifiers - these are resolved identifiers of user defined Analytica nodes or functions &lt;br /&gt;
&lt;br /&gt;
system object identifiers - these are identifiers of built in system variables or functions, e.g., time.&lt;br /&gt;
 &lt;br /&gt;
local variables - these are local variables declared by using keywords such as var, local, etc.&lt;/div&gt;</summary>
		<author><name>Ldavidson</name></author>
	</entry>
	<entry>
		<id>https://docs.analytica.com/index.php?title=Sys_SyntaxColors&amp;diff=54274</id>
		<title>Sys SyntaxColors</title>
		<link rel="alternate" type="text/html" href="https://docs.analytica.com/index.php?title=Sys_SyntaxColors&amp;diff=54274"/>
		<updated>2020-03-03T19:19:48Z</updated>

		<summary type="html">&lt;p&gt;Ldavidson: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This system variable is a one dimensional table that you can edit to control syntax coloring in expression fields such as definitions in object windows and in the attribute pane. This is indexed by [[Sys TokenType]]. The table is stored in the registry and read from there at startup. Any editing changes you make will update the registry, if these changes are valid.&lt;br /&gt;
&lt;br /&gt;
Here is the table with initial default values:&lt;br /&gt;
&lt;br /&gt;
[[image:syntax colors.png]]&lt;br /&gt;
&lt;br /&gt;
The row headers are not editable, and you cannot add any rows. Only the data cells can be changed, and these cells only allow either hexadecimal specifications of RGB values of form 0xaarrggbb or color names known to Analytica, where aa = transparency or opaqueness and rr, gg, bb are the RGB values, in range 00 - FF. Unrecognized color names will result in an error popup, which will suggest that you either reread the original values or go back to the edited version as you left it and correct it.&lt;br /&gt;
&lt;br /&gt;
The syntax categories are:&lt;br /&gt;
&lt;br /&gt;
comments - Analytica comments, of the forms /* comment text */ or { comment text }&lt;br /&gt;
&lt;br /&gt;
text literals - strings enclosed in quotes, of the forms '[text ' or &amp;quot; text &amp;quot;&lt;br /&gt;
&lt;br /&gt;
keywords - reserved words in Analytica such as if, then, else, do, local, etc.&lt;br /&gt;
&lt;br /&gt;
undefined - these are words that are not keywords and not declared local variables and not identifiers of any Analytica nodes or functions; by default, these are lighter colored than identifiers and help you spot typos from failing to type resolved names correctly or else spot intended names that you typed before having actually defined them. These will always result in errors in parsing.&lt;br /&gt;
&lt;br /&gt;
user object identifiers - these are resolved identifiers of user defined Analytica nodes or functions&lt;br /&gt;
&lt;br /&gt;
system object identifiers - these are identifiers of built in system variables or functions, e.g., time.&lt;br /&gt;
&lt;br /&gt;
local variables - these are local variables declared by using keywords such as var, local, etc.&lt;br /&gt;
&lt;br /&gt;
Note that syntax coloring is continuously updated as you type into expression fields.&lt;/div&gt;</summary>
		<author><name>Ldavidson</name></author>
	</entry>
	<entry>
		<id>https://docs.analytica.com/index.php?title=File:Syntax_colors.png&amp;diff=54273</id>
		<title>File:Syntax colors.png</title>
		<link rel="alternate" type="text/html" href="https://docs.analytica.com/index.php?title=File:Syntax_colors.png&amp;diff=54273"/>
		<updated>2020-03-03T19:18:35Z</updated>

		<summary type="html">&lt;p&gt;Ldavidson: Ldavidson uploaded a new version of File:Syntax colors.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Ldavidson</name></author>
	</entry>
	<entry>
		<id>https://docs.analytica.com/index.php?title=What%27s_new_in_Analytica_5.4%3F&amp;diff=54247</id>
		<title>What's new in Analytica 5.4?</title>
		<link rel="alternate" type="text/html" href="https://docs.analytica.com/index.php?title=What%27s_new_in_Analytica_5.4%3F&amp;diff=54247"/>
		<updated>2020-02-20T17:38:51Z</updated>

		<summary type="html">&lt;p&gt;Ldavidson: /* Custom axis/key titles */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Analytica 5.4 will be the next future release of Analytica. It is currently under development. The current release is [[Analytica 5.3]]. This page is under construction, but will list the enhancements that are new to Analytica 5.4 since [[Analytica 5.3]].  If you have an Analytica subscription, you will be able to test drive a preliminary version when [[Analytica 5.4]] goes beta -- check the [[Beta Tester Page]] for status.&lt;br /&gt;
&lt;br /&gt;
== Editing expressions ==&lt;br /&gt;
&lt;br /&gt;
===Fixed-spaced font=== &lt;br /&gt;
Attributes that hold expressions such as Definition, Check, OnClick, etc., are now shown in a fixed-width font.&lt;br /&gt;
&lt;br /&gt;
There is a user-preference setting to turn this off: Definition / System variables / Settings / Enable fixed font&lt;br /&gt;
===Syntax coloration=== &lt;br /&gt;
Coloration is now used within an expression to differentiate identifiers, keywords, comments, text literals, etc.&lt;br /&gt;
&lt;br /&gt;
Customize the actual colors used at '''Definition / System variables / Settings / Syntax colors'''. Changes here apply to your computer only, and are not saved with the model.&lt;br /&gt;
&lt;br /&gt;
===Error underlining=== &lt;br /&gt;
Syntax errors within an expression are underlined in red while editing.&lt;br /&gt;
&lt;br /&gt;
You can turn this on and off using [[Sys EnableErrorUnder]]. Access the system variable using Definition / System variables / Settings / Enable error underlining.&lt;br /&gt;
&lt;br /&gt;
===Module color inheritance===&lt;br /&gt;
There is a change in 5.4 in how module nodes inherit their colors. Now instead of using a containing module, modules use Node style default. This doesn't have to affect module colors in pre-5,4 legacy models. See [[Sys UseLegacyColors]] for details.&lt;br /&gt;
&lt;br /&gt;
=== Multichoice option ===&lt;br /&gt;
On the definition-type pulldown for an index node, the options now include [[MultiChoice]]. This is very useful for &amp;quot;selected scenario&amp;quot; indexes.&lt;br /&gt;
&lt;br /&gt;
== Graphing ==&lt;br /&gt;
=== Custom axis/key titles===&lt;br /&gt;
By default, Analytica uses a variable's title and units to form the axis or key title as it appears on the graph. But you can now override this, and use different text for your axis title or key title on the graph. Just right-click (in edit mode) on the key title or axis title and select '''Change axis title''' or '''Change key title'''.&lt;br /&gt;
&lt;br /&gt;
When you type the new title, there is a checkbox that allows you to set your new text as the title for every graph that uses the given index or variable as an axis or key. Or, you can clear the title text entire to either hide the title, or reset to the default title.&lt;br /&gt;
&lt;br /&gt;
You can also set the text used for axes and key titles for a specific object, in all graphs where that variable is used, from the [[Object window]] or [[Attribute panel]] by setting the '''Axis/Key Title''' attribute.  You need to show this attribute first from the [[Attribute panel]]. However, you can also change this as described in the previous paragraph.&lt;br /&gt;
&lt;br /&gt;
====How the default axis/key title is determined====&lt;br /&gt;
There are rules about how the default title is determined. If you have changed the axis/key title for all graphs using the index or variable, then the default is what you changed this to. If you have not changed the axis/key title then the default is the title of the index or variable, or, if that title is blank, the default is the identifier of the index or variable.&lt;br /&gt;
&lt;br /&gt;
However, if you have checked the checkbox referred to above then blanked out the title, this resets any change you made for all graphs and the default is the title of the index or variable or, if that title is blank, the default is the identifier of the index or variable.&lt;br /&gt;
&lt;br /&gt;
The popup &amp;quot;Use default axis title?&amp;quot; (or key title) will tell you what the default will be. You will see words in one of these three variations:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Do you want to use the default axis title for Revenue, which is Annual revenue (global axis title override)?&amp;quot; - This indicates that the default is the axis title &amp;quot;Annual revenue&amp;quot; that has been designated to be used in all graphs using the index or variable Revenue. &lt;br /&gt;
&lt;br /&gt;
&amp;quot;Do you want to use the default axis title for Revenue, which is Revenue (Title attribute)?&amp;quot; - This indicates that the default is the title &amp;quot;Revenue&amp;quot; of the index or variable Revenue.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Do you want to use the default axis title for Revenue, which is Revenue (identifier)?&amp;quot; - This indicates that Revenue has no title and the default is the identifier of the index or variable Revenue.&lt;br /&gt;
&lt;br /&gt;
=== Exceedance probability ===&lt;br /&gt;
The '''Exceedance probability''' (at &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt;) of an uncertain quantity is the probability the outcome is greater than or equal to &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt;. This is a dual to the cumulative probability, which is the probability that the outcome is less than or equal to &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt;. Some fields prefer the use of Exceedance probability to CDFs.&lt;br /&gt;
&lt;br /&gt;
Exceedance probability has been added to the available uncertainty views.&lt;br /&gt;
&lt;br /&gt;
== Built-in Functions ==&lt;br /&gt;
=== Changes to existing functions ===&lt;br /&gt;
* The [[UncertainLMH]] distribution has been changed to use the Hadlock-Bickel-Johnson Quantile Parameterized Distribution by default, rather than the Keelin SPT distribution. The HBJ-QPD is preferred since it is maximally feasible.  This impacts [[UncertainLMH]], [[DensUncertainLMH]], [[CumUncertainLMH]] and [[CumUncertainLMHInv]] functions.&lt;br /&gt;
** A new system variable has been added: [[UncertainLMH_Method]], which selects the default algorithm used by these functions. If you need backward compatibility with 5.3 with this distribution, your can set this to 2. But note: Due to a small improvement, [[DensUncertainLMH]] with keelin algorithm is slightly more accurate, so numbers may differ out around the 9th decimal point compared to previously.&lt;br /&gt;
** A new optional parameter, «method», was added to each of these functions, which you can use to select the algorithm (HBJ-QPD or K-SPT) for the specific call. &lt;br /&gt;
* [[AskMsgText]] and [[AskMsgNumber]]: Added an option to include a checkbox on the dialog.&lt;br /&gt;
* [[Cdf]] Added an option to return the exceedance curve.&lt;br /&gt;
* Eliminated a spurious &amp;quot;dynamic-loop cyclic dependency&amp;quot; error message that appeared in a 2-D [[Dynamic]] loop. This is a case where there wasn't really a cyclic dependency, so the error message was a false positive. A 2-D dynamic loop is where two dynamic loops on different dynamic indexes intersect, so that the nodes in that loop have to iterate over two dynamic indexes (fairly rare).&lt;br /&gt;
* A «condition» parameter was added to [[Flatten]]. Makes it easy to include only the items that satisfy the «condition» in the flattened result.&lt;br /&gt;
&lt;br /&gt;
=== New functions ===&lt;br /&gt;
* [[COMEnumerate]] -- enumerates the elements of an enumerable COM object.&lt;br /&gt;
&lt;br /&gt;
== Other Misc ==&lt;br /&gt;
* When you have currency turned on in the number format, it now omits the currency symbol for non-finite values, i.e., it prints &amp;lt;code&amp;gt;INF&amp;lt;/code&amp;gt; instead of &amp;lt;code&amp;gt;$INF&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;NAN&amp;lt;/code&amp;gt; instead of &amp;lt;code&amp;gt;$NAN&amp;lt;/code&amp;gt;.&lt;/div&gt;</summary>
		<author><name>Ldavidson</name></author>
	</entry>
	<entry>
		<id>https://docs.analytica.com/index.php?title=What%27s_new_in_Analytica_5.4%3F&amp;diff=54228</id>
		<title>What's new in Analytica 5.4?</title>
		<link rel="alternate" type="text/html" href="https://docs.analytica.com/index.php?title=What%27s_new_in_Analytica_5.4%3F&amp;diff=54228"/>
		<updated>2020-02-12T21:26:17Z</updated>

		<summary type="html">&lt;p&gt;Ldavidson: Edited the Error underlining section and added the Module color inheritance section.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Analytica 5.4 will be the next future release of Analytica. It is currently under development. The current release is [[Analytica 5.3]]. This page is under construction, but will list the enhancements that are new to Analytica 5.4 since [[Analytica 5.3]].  If you have an Analytica subscription, you will be able to test drive a preliminary version when [[Analytica 5.4]] goes beta -- check the [[Beta Tester Page]] for status.&lt;br /&gt;
&lt;br /&gt;
== Editing expressions ==&lt;br /&gt;
&lt;br /&gt;
===Fixed-spaced font=== &lt;br /&gt;
Attributes that hold expressions such as Definition, Check, OnClick, etc., are now shown in a fixed-width font.&lt;br /&gt;
&lt;br /&gt;
There is a user-preference setting to turn this off: Definition / System variables / Settings / Enable fixed font&lt;br /&gt;
===Syntax coloration=== &lt;br /&gt;
Coloration is now used within an expression to differentiate identifiers, keywords, comments, text literals, etc.&lt;br /&gt;
&lt;br /&gt;
Customize the actual colors used at '''Definition / System variables / Settings / Syntax colors'''. Changes here apply to your computer only, and are not saved with the model.&lt;br /&gt;
&lt;br /&gt;
===Error underlining=== &lt;br /&gt;
Syntax errors within an expression are underlined in red while editing.&lt;br /&gt;
&lt;br /&gt;
You can turn this on and off using [[Sys EnableErrorUnder]]. Access the system variable using Definition / System variables / Settings / Enable error underlining.&lt;br /&gt;
&lt;br /&gt;
===Module color inheritance===&lt;br /&gt;
There is a change in 5.4 in how module nodes inherit their colors. Now instead of using a containing module, modules use Node style default. This doesn't have to affect module colors in pre-5,4 legacy models. See [[Sys UseLegacyColors]] for details.&lt;br /&gt;
&lt;br /&gt;
=== Multichoice option ===&lt;br /&gt;
On the definition-type pulldown for an index node, the options now include [[MultiChoice]]. This is very useful for &amp;quot;selected scenario&amp;quot; indexes.&lt;br /&gt;
&lt;br /&gt;
== Graphing ==&lt;br /&gt;
=== Custom axis/key titles===&lt;br /&gt;
By default, Analytica uses a variable's title and units to form the axis or key title as it appears on the graph. But you can now override this, and use different text for your axis title or key title on the graph. Just right-click (in edit mode) on the key title or axis title and select '''Change axis title''' or '''Change key title'''.&lt;br /&gt;
&lt;br /&gt;
When you type the new title, there is a checkbox that allows you to set your new text as the title for every graph that uses the given index or variable as an axis or key. Or, you can clear the title text entire to either hide the title, or reset to the default title.&lt;br /&gt;
&lt;br /&gt;
You can also set the text used for axes and key titles for a specific object, in all graphs where that variable is used, from the [[Object window]] or [[Attribute panel]] by setting the '''Axis/Key Title''' attribute.  You need to show this attribute first from the [[Attribute panel]]. However, you can also change this as described in the previous paragraph.&lt;br /&gt;
&lt;br /&gt;
=== Exceedance probability ===&lt;br /&gt;
The '''Exceedance probability''' (at &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt;) of an uncertain quantity is the probability the outcome is greater than or equal to &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt;. This is a dual to the cumulative probability, which is the probability that the outcome is less than or equal to &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt;. Some fields prefer the use of Exceedance probability to CDFs.&lt;br /&gt;
&lt;br /&gt;
Exceedance probability has been added to the available uncertainty views.&lt;br /&gt;
&lt;br /&gt;
== Built-in Functions ==&lt;br /&gt;
=== Changes to existing functions ===&lt;br /&gt;
* The [[UncertainLMH]] distribution has been changed to use the Hadlock-Bickel-Johnson Quantile Parameterized Distribution by default, rather than the Keelin SPT distribution. The HBJ-QPD is preferred since it is maximally feasible.  This impacts [[UncertainLMH]], [[DensUncertainLMH]], [[CumUncertainLMH]] and [[CumUncertainLMHInv]] functions.&lt;br /&gt;
** A new system variable has been added: [[UncertainLMH_Method]], which selects the default algorithm used by these functions. If you need backward compatibility with 5.3 with this distribution, your can set this to 2. But note: Due to a small improvement, [[DensUncertainLMH]] with keelin algorithm is slightly more accurate, so numbers may differ out around the 9th decimal point compared to previously.&lt;br /&gt;
** A new optional parameter, «method», was added to each of these functions, which you can use to select the algorithm (HBJ-QPD or K-SPT) for the specific call. &lt;br /&gt;
* [[AskMsgText]] and [[AskMsgNumber]]: Added an option to include a checkbox on the dialog.&lt;br /&gt;
* [[Cdf]] Added an option to return the exceedance curve.&lt;br /&gt;
* Eliminated a spurious &amp;quot;dynamic-loop cyclic dependency&amp;quot; error message that appeared in a 2-D [[Dynamic]] loop. This is a case where there wasn't really a cyclic dependency, so the error message was a false positive. A 2-D dynamic loop is where two dynamic loops on different dynamic indexes intersect, so that the nodes in that loop have to iterate over two dynamic indexes (fairly rare).&lt;br /&gt;
&lt;br /&gt;
=== New functions ===&lt;br /&gt;
* [[COMEnumerate]] -- enumerates the elements of an enumerable COM object.&lt;br /&gt;
&lt;br /&gt;
== Other Misc ==&lt;br /&gt;
* When you have currency turned on in the number format, it now omits the currency symbol for non-finite values, i.e., it prints &amp;lt;code&amp;gt;INF&amp;lt;/code&amp;gt; instead of &amp;lt;code&amp;gt;$INF&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;NAN&amp;lt;/code&amp;gt; instead of &amp;lt;code&amp;gt;$NAN&amp;lt;/code&amp;gt;.&lt;/div&gt;</summary>
		<author><name>Ldavidson</name></author>
	</entry>
	<entry>
		<id>https://docs.analytica.com/index.php?title=What%27s_new_in_Analytica_5.4%3F&amp;diff=54227</id>
		<title>What's new in Analytica 5.4?</title>
		<link rel="alternate" type="text/html" href="https://docs.analytica.com/index.php?title=What%27s_new_in_Analytica_5.4%3F&amp;diff=54227"/>
		<updated>2020-02-12T21:22:36Z</updated>

		<summary type="html">&lt;p&gt;Ldavidson: /* Error underlining */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Analytica 5.4 will be the next future release of Analytica. It is currently under development. The current release is [[Analytica 5.3]]. This page is under construction, but will list the enhancements that are new to Analytica 5.4 since [[Analytica 5.3]].  If you have an Analytica subscription, you will be able to test drive a preliminary version when [[Analytica 5.4]] goes beta -- check the [[Beta Tester Page]] for status.&lt;br /&gt;
&lt;br /&gt;
== Editing expressions ==&lt;br /&gt;
&lt;br /&gt;
===Fixed-spaced font=== &lt;br /&gt;
Attributes that hold expressions such as Definition, Check, OnClick, etc., are now shown in a fixed-width font.&lt;br /&gt;
&lt;br /&gt;
There is a user-preference setting to turn this off: Definition / System variables / Settings / Enable fixed font&lt;br /&gt;
===Syntax coloration=== &lt;br /&gt;
Coloration is now used within an expression to differentiate identifiers, keywords, comments, text literals, etc.&lt;br /&gt;
&lt;br /&gt;
Customize the actual colors used at '''Definition / System variables / Settings / Syntax colors'''. Changes here apply to your computer only, and are not saved with the model.&lt;br /&gt;
&lt;br /&gt;
===Error underlining=== &lt;br /&gt;
Syntax errors within an expression are underlined in red while editing.&lt;br /&gt;
&lt;br /&gt;
You can turn this on and off using [[Sys EnableErrorUnder]]. Access the system variable using Definition / System variables / Settings / Enable error underlining.&lt;br /&gt;
&lt;br /&gt;
=== Multichoice option ===&lt;br /&gt;
On the definition-type pulldown for an index node, the options now include [[MultiChoice]]. This is very useful for &amp;quot;selected scenario&amp;quot; indexes.&lt;br /&gt;
&lt;br /&gt;
== Graphing ==&lt;br /&gt;
=== Custom axis/key titles===&lt;br /&gt;
By default, Analytica uses a variable's title and units to form the axis or key title as it appears on the graph. But you can now override this, and use different text for your axis title or key title on the graph. Just right-click (in edit mode) on the key title or axis title and select '''Change axis title''' or '''Change key title'''.&lt;br /&gt;
&lt;br /&gt;
When you type the new title, there is a checkbox that allows you to set your new text as the title for every graph that uses the given index or variable as an axis or key. Or, you can clear the title text entire to either hide the title, or reset to the default title.&lt;br /&gt;
&lt;br /&gt;
You can also set the text used for axes and key titles for a specific object, in all graphs where that variable is used, from the [[Object window]] or [[Attribute panel]] by setting the '''Axis/Key Title''' attribute.  You need to show this attribute first from the [[Attribute panel]]. However, you can also change this as described in the previous paragraph.&lt;br /&gt;
&lt;br /&gt;
=== Exceedance probability ===&lt;br /&gt;
The '''Exceedance probability''' (at &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt;) of an uncertain quantity is the probability the outcome is greater than or equal to &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt;. This is a dual to the cumulative probability, which is the probability that the outcome is less than or equal to &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt;. Some fields prefer the use of Exceedance probability to CDFs.&lt;br /&gt;
&lt;br /&gt;
Exceedance probability has been added to the available uncertainty views.&lt;br /&gt;
&lt;br /&gt;
== Built-in Functions ==&lt;br /&gt;
=== Changes to existing functions ===&lt;br /&gt;
* The [[UncertainLMH]] distribution has been changed to use the Hadlock-Bickel-Johnson Quantile Parameterized Distribution by default, rather than the Keelin SPT distribution. The HBJ-QPD is preferred since it is maximally feasible.  This impacts [[UncertainLMH]], [[DensUncertainLMH]], [[CumUncertainLMH]] and [[CumUncertainLMHInv]] functions.&lt;br /&gt;
** A new system variable has been added: [[UncertainLMH_Method]], which selects the default algorithm used by these functions. If you need backward compatibility with 5.3 with this distribution, your can set this to 2. But note: Due to a small improvement, [[DensUncertainLMH]] with keelin algorithm is slightly more accurate, so numbers may differ out around the 9th decimal point compared to previously.&lt;br /&gt;
** A new optional parameter, «method», was added to each of these functions, which you can use to select the algorithm (HBJ-QPD or K-SPT) for the specific call. &lt;br /&gt;
* [[AskMsgText]] and [[AskMsgNumber]]: Added an option to include a checkbox on the dialog.&lt;br /&gt;
* [[Cdf]] Added an option to return the exceedance curve.&lt;br /&gt;
* Eliminated a spurious &amp;quot;dynamic-loop cyclic dependency&amp;quot; error message that appeared in a 2-D [[Dynamic]] loop. This is a case where there wasn't really a cyclic dependency, so the error message was a false positive. A 2-D dynamic loop is where two dynamic loops on different dynamic indexes intersect, so that the nodes in that loop have to iterate over two dynamic indexes (fairly rare).&lt;br /&gt;
&lt;br /&gt;
=== New functions ===&lt;br /&gt;
* [[COMEnumerate]] -- enumerates the elements of an enumerable COM object.&lt;br /&gt;
&lt;br /&gt;
== Other Misc ==&lt;br /&gt;
* When you have currency turned on in the number format, it now omits the currency symbol for non-finite values, i.e., it prints &amp;lt;code&amp;gt;INF&amp;lt;/code&amp;gt; instead of &amp;lt;code&amp;gt;$INF&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;NAN&amp;lt;/code&amp;gt; instead of &amp;lt;code&amp;gt;$NAN&amp;lt;/code&amp;gt;.&lt;/div&gt;</summary>
		<author><name>Ldavidson</name></author>
	</entry>
	<entry>
		<id>https://docs.analytica.com/index.php?title=What%27s_new_in_Analytica_5.4%3F&amp;diff=54226</id>
		<title>What's new in Analytica 5.4?</title>
		<link rel="alternate" type="text/html" href="https://docs.analytica.com/index.php?title=What%27s_new_in_Analytica_5.4%3F&amp;diff=54226"/>
		<updated>2020-02-12T21:20:13Z</updated>

		<summary type="html">&lt;p&gt;Ldavidson: /* Error underlining */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Analytica 5.4 will be the next future release of Analytica. It is currently under development. The current release is [[Analytica 5.3]]. This page is under construction, but will list the enhancements that are new to Analytica 5.4 since [[Analytica 5.3]].  If you have an Analytica subscription, you will be able to test drive a preliminary version when [[Analytica 5.4]] goes beta -- check the [[Beta Tester Page]] for status.&lt;br /&gt;
&lt;br /&gt;
== Editing expressions ==&lt;br /&gt;
&lt;br /&gt;
===Fixed-spaced font=== &lt;br /&gt;
Attributes that hold expressions such as Definition, Check, OnClick, etc., are now shown in a fixed-width font.&lt;br /&gt;
&lt;br /&gt;
There is a user-preference setting to turn this off: Definition / System variables / Settings / Enable fixed font&lt;br /&gt;
===Syntax coloration=== &lt;br /&gt;
Coloration is now used within an expression to differentiate identifiers, keywords, comments, text literals, etc.&lt;br /&gt;
&lt;br /&gt;
Customize the actual colors used at '''Definition / System variables / Settings / Syntax colors'''. Changes here apply to your computer only, and are not saved with the model.&lt;br /&gt;
&lt;br /&gt;
===Error underlining=== &lt;br /&gt;
Syntax errors within an expression are underlined in red while editing.&lt;br /&gt;
&lt;br /&gt;
You can turn this on and off using [[Sys EnableErrorUnder]].&lt;br /&gt;
&lt;br /&gt;
=== Multichoice option ===&lt;br /&gt;
On the definition-type pulldown for an index node, the options now include [[MultiChoice]]. This is very useful for &amp;quot;selected scenario&amp;quot; indexes.&lt;br /&gt;
&lt;br /&gt;
== Graphing ==&lt;br /&gt;
=== Custom axis/key titles===&lt;br /&gt;
By default, Analytica uses a variable's title and units to form the axis or key title as it appears on the graph. But you can now override this, and use different text for your axis title or key title on the graph. Just right-click (in edit mode) on the key title or axis title and select '''Change axis title''' or '''Change key title'''.&lt;br /&gt;
&lt;br /&gt;
When you type the new title, there is a checkbox that allows you to set your new text as the title for every graph that uses the given index or variable as an axis or key. Or, you can clear the title text entire to either hide the title, or reset to the default title.&lt;br /&gt;
&lt;br /&gt;
You can also set the text used for axes and key titles for a specific object, in all graphs where that variable is used, from the [[Object window]] or [[Attribute panel]] by setting the '''Axis/Key Title''' attribute.  You need to show this attribute first from the [[Attribute panel]]. However, you can also change this as described in the previous paragraph.&lt;br /&gt;
&lt;br /&gt;
=== Exceedance probability ===&lt;br /&gt;
The '''Exceedance probability''' (at &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt;) of an uncertain quantity is the probability the outcome is greater than or equal to &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt;. This is a dual to the cumulative probability, which is the probability that the outcome is less than or equal to &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt;. Some fields prefer the use of Exceedance probability to CDFs.&lt;br /&gt;
&lt;br /&gt;
Exceedance probability has been added to the available uncertainty views.&lt;br /&gt;
&lt;br /&gt;
== Built-in Functions ==&lt;br /&gt;
=== Changes to existing functions ===&lt;br /&gt;
* The [[UncertainLMH]] distribution has been changed to use the Hadlock-Bickel-Johnson Quantile Parameterized Distribution by default, rather than the Keelin SPT distribution. The HBJ-QPD is preferred since it is maximally feasible.  This impacts [[UncertainLMH]], [[DensUncertainLMH]], [[CumUncertainLMH]] and [[CumUncertainLMHInv]] functions.&lt;br /&gt;
** A new system variable has been added: [[UncertainLMH_Method]], which selects the default algorithm used by these functions. If you need backward compatibility with 5.3 with this distribution, your can set this to 2. But note: Due to a small improvement, [[DensUncertainLMH]] with keelin algorithm is slightly more accurate, so numbers may differ out around the 9th decimal point compared to previously.&lt;br /&gt;
** A new optional parameter, «method», was added to each of these functions, which you can use to select the algorithm (HBJ-QPD or K-SPT) for the specific call. &lt;br /&gt;
* [[AskMsgText]] and [[AskMsgNumber]]: Added an option to include a checkbox on the dialog.&lt;br /&gt;
* [[Cdf]] Added an option to return the exceedance curve.&lt;br /&gt;
* Eliminated a spurious &amp;quot;dynamic-loop cyclic dependency&amp;quot; error message that appeared in a 2-D [[Dynamic]] loop. This is a case where there wasn't really a cyclic dependency, so the error message was a false positive. A 2-D dynamic loop is where two dynamic loops on different dynamic indexes intersect, so that the nodes in that loop have to iterate over two dynamic indexes (fairly rare).&lt;br /&gt;
&lt;br /&gt;
=== New functions ===&lt;br /&gt;
* [[COMEnumerate]] -- enumerates the elements of an enumerable COM object.&lt;br /&gt;
&lt;br /&gt;
== Other Misc ==&lt;br /&gt;
* When you have currency turned on in the number format, it now omits the currency symbol for non-finite values, i.e., it prints &amp;lt;code&amp;gt;INF&amp;lt;/code&amp;gt; instead of &amp;lt;code&amp;gt;$INF&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;NAN&amp;lt;/code&amp;gt; instead of &amp;lt;code&amp;gt;$NAN&amp;lt;/code&amp;gt;.&lt;/div&gt;</summary>
		<author><name>Ldavidson</name></author>
	</entry>
	<entry>
		<id>https://docs.analytica.com/index.php?title=Sys_UseLegacyColors&amp;diff=54225</id>
		<title>Sys UseLegacyColors</title>
		<link rel="alternate" type="text/html" href="https://docs.analytica.com/index.php?title=Sys_UseLegacyColors&amp;diff=54225"/>
		<updated>2020-02-12T20:54:07Z</updated>

		<summary type="html">&lt;p&gt;Ldavidson: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This system variables has the values 0 (false) and 1 (true). In 5.4 we have changed our scheme for how a module node inherits its color.&lt;br /&gt;
&lt;br /&gt;
The old inheritance scheme: pre-5.4 a module would inherit its color from a containing module.&lt;br /&gt;
&lt;br /&gt;
The new inheritance scheme: in 5.4 and after a module inherits its color from the color of the module class as set in Node style defaults, which make module color inheritance consistent with non-module node color inheritance.&lt;br /&gt;
&lt;br /&gt;
However, there are legacy pre-5.4 models still usable in 5.4 and, in case bringing them up in 5.4 is expected to have them use the same colors as before, we provide this system variable to control which scheme is used. If this is set to true, we use the new scheme. If this is set to false, we use the old scheme.&lt;br /&gt;
&lt;br /&gt;
If we bring up a model that indicates it was last saved before 5.4, we set this variable to true and if this model is saved in 5.4, we save the value of this variable as true with the model, so we have a permanent indication that it is a legacy model.&lt;br /&gt;
&lt;br /&gt;
If we bring up a model that was saved in 5.4, the last value of this variable has been saved in the model file, so this handles both cases, of models created in 5.3 or before and saved in 5.4 or created and saved in 5.4.&lt;br /&gt;
&lt;br /&gt;
You can of course change this back to false to get the new inheritance scheme. But you can then change it back to true to get the old.&lt;br /&gt;
&lt;br /&gt;
To make this user friendly, if your model is recognized as being created in 5.3 or earlier, but you use Node style defaults to set the color of any module type, we automatically set this variable to false so that your setting in Node style default takes over. You can always set the variable to true again to back this out.&lt;/div&gt;</summary>
		<author><name>Ldavidson</name></author>
	</entry>
	<entry>
		<id>https://docs.analytica.com/index.php?title=Sys_UseLegacyColors&amp;diff=54224</id>
		<title>Sys UseLegacyColors</title>
		<link rel="alternate" type="text/html" href="https://docs.analytica.com/index.php?title=Sys_UseLegacyColors&amp;diff=54224"/>
		<updated>2020-02-12T20:53:37Z</updated>

		<summary type="html">&lt;p&gt;Ldavidson: Created page with &amp;quot;This system variables has the values 0 (false) and 1 (true). In 5.4 we have changed our scheme for how a module node inherits its color.  The old inheritance scheme: pre-5.4 a...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This system variables has the values 0 (false) and 1 (true). In 5.4 we have changed our scheme for how a module node inherits its color.&lt;br /&gt;
&lt;br /&gt;
The old inheritance scheme: pre-5.4 a module would inherit its color from a containing module.&lt;br /&gt;
&lt;br /&gt;
The new inheritance scheme: in 5.4 and after a module inherits its color from the color of the module class as set in Node style defaults, which make module color inheritance consistent with non-module node color inheritance.&lt;br /&gt;
&lt;br /&gt;
However, there are legacy pre-5.4 models still usable in 5.4 and, in case bringing them up in 5.4 is expected to have them use the same colors as before, we provide this system variable to control which scheme is used. If this is set to true, we use the new scheme. If this is set to false, we use the old scheme.&lt;br /&gt;
&lt;br /&gt;
If we bring up a model that indicates it was last saved before 5.4, we set this variable to true and if this model is saved in 5.4, we save the value of this variable as true with the model, so we have a permanent indication that it is a legacy model.&lt;br /&gt;
&lt;br /&gt;
If we bring up a model that was saved in 5.4, the last value of this variable has been saved in the model file, so this handles both cases, of models created in 5.3 or before and saved in 5.4 or created and saved in 5.4.&lt;br /&gt;
&lt;br /&gt;
You can of course change this back to false to get the new inheritance scheme. But you can then change it back to true to get the old.&lt;br /&gt;
&lt;br /&gt;
To make this user friendly, if your model is recognized as being created in 5.3 or earlier, but you use Node style defaults to set the color of any module type, we automatically set this variable to false to that your setting in Node style default takes over. You can always set the variable to true again to back this out.&lt;/div&gt;</summary>
		<author><name>Ldavidson</name></author>
	</entry>
	<entry>
		<id>https://docs.analytica.com/index.php?title=Sys_TokenType&amp;diff=54223</id>
		<title>Sys TokenType</title>
		<link rel="alternate" type="text/html" href="https://docs.analytica.com/index.php?title=Sys_TokenType&amp;diff=54223"/>
		<updated>2020-02-12T20:42:27Z</updated>

		<summary type="html">&lt;p&gt;Ldavidson: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This system variable is one index for the system variable SyntaxColors (see [[Sys SyntaxColors]]). This indexes the token types values of colors in the rows of the SyntaxColors table. This cannot be changed. The members of this index are comments, text literals, keywords, variables, identifiers. Here is what these mean:&lt;br /&gt;
&lt;br /&gt;
comments - Analytica comments, of the forms /* comment text */ or { comment text }&lt;br /&gt;
&lt;br /&gt;
text literals - strings enclosed in quotes, of the forms '[text ' or &amp;quot; text &amp;quot;&lt;br /&gt;
&lt;br /&gt;
keywords - reserved words in Analytica such as if, then, else, do, local, etc.&lt;br /&gt;
&lt;br /&gt;
variables - these are words that are not keywords and not declared variables and not identifiers of any Analytica nodes or functions; by default, these are lighter colored than identifiers and help you spot typos from failing to type resolved names correctly or else spot intended names that you typed before having actually defined them&lt;br /&gt;
&lt;br /&gt;
identifiers - these are declared variables or else resolved identifiers of Analytica nodes or functions&lt;/div&gt;</summary>
		<author><name>Ldavidson</name></author>
	</entry>
	<entry>
		<id>https://docs.analytica.com/index.php?title=Sys_SyntaxColors&amp;diff=54222</id>
		<title>Sys SyntaxColors</title>
		<link rel="alternate" type="text/html" href="https://docs.analytica.com/index.php?title=Sys_SyntaxColors&amp;diff=54222"/>
		<updated>2020-02-12T20:40:03Z</updated>

		<summary type="html">&lt;p&gt;Ldavidson: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This system variable is a two dimensional table that you can edit to control syntax coloring in expression fields such as definitions in object windows and in the attribute pane. This is indexed by [[Sys TokenType]] and [[Sys RedGreenBlue]]. The table is stored in the registry and read from there at startup. Any editing changes you make will update the registry, if these changes are valid.&lt;br /&gt;
&lt;br /&gt;
Here is the table with initial default values:&lt;br /&gt;
&lt;br /&gt;
[[image:syntax colors.png]]&lt;br /&gt;
&lt;br /&gt;
The row and column headers are not editable, and you cannot add any rows or columns. Only the data cells can be changed, and these cells only allow integer values between 0 and 255, inclusive. Any other values will cause an error and you will get an error popup explaining these rules and suggesting that you correct your error. If you say yes, go back to editing, the edit table will revert back to was it was before.&lt;br /&gt;
&lt;br /&gt;
The rows give the RGB components of the colors used in expression fields for various syntactic categories. Here are the categories:&lt;br /&gt;
&lt;br /&gt;
comments - Analytica comments, of the forms /* comment text */ or { comment text }&lt;br /&gt;
&lt;br /&gt;
text literals - strings enclosed in quotes, of the forms '[text ' or &amp;quot; text &amp;quot;&lt;br /&gt;
&lt;br /&gt;
keywords - reserved words in Analytica such as if, then, else, do, local, etc.&lt;br /&gt;
&lt;br /&gt;
variables - these are words that are not keywords and not declared variables and not identifiers of any Analytica nodes or functions; by default, these are lighter colored than identifiers and help you spot typos from failing to type resolved names correctly or else spot intended names that you typed before having actually defined them&lt;br /&gt;
&lt;br /&gt;
identifiers - these are declared variables or else resolved identifiers of Analytica nodes or functions&lt;br /&gt;
&lt;br /&gt;
Note that syntax coloring is continuously updated as you type into expression fields.&lt;/div&gt;</summary>
		<author><name>Ldavidson</name></author>
	</entry>
	<entry>
		<id>https://docs.analytica.com/index.php?title=File:Syntax_colors.png&amp;diff=54221</id>
		<title>File:Syntax colors.png</title>
		<link rel="alternate" type="text/html" href="https://docs.analytica.com/index.php?title=File:Syntax_colors.png&amp;diff=54221"/>
		<updated>2020-02-12T20:28:12Z</updated>

		<summary type="html">&lt;p&gt;Ldavidson: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Ldavidson</name></author>
	</entry>
	<entry>
		<id>https://docs.analytica.com/index.php?title=Sys_SyntaxColors&amp;diff=54220</id>
		<title>Sys SyntaxColors</title>
		<link rel="alternate" type="text/html" href="https://docs.analytica.com/index.php?title=Sys_SyntaxColors&amp;diff=54220"/>
		<updated>2020-02-12T20:18:54Z</updated>

		<summary type="html">&lt;p&gt;Ldavidson: Created page with &amp;quot;This system variable is a two dimensional table that you can edit to control syntax coloring in expression fields such as definitions in object windows and in the attribute pa...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This system variable is a two dimensional table that you can edit to control syntax coloring in expression fields such as definitions in object windows and in the attribute pane. This is indexed by [[Sys TokenType]] and [[Sys RedGreenBlue]]. The table is stored in the registry and read from there at startup. Any editing changes you make will update the registry, if these changes are valid.&lt;br /&gt;
&lt;br /&gt;
Here is the table with initial values:&lt;br /&gt;
&lt;br /&gt;
                        red	       green	blue&lt;br /&gt;
comments	0	       255	        0&lt;br /&gt;
text literals	255	       0	        0&lt;br /&gt;
keywords	0	       0	       255&lt;br /&gt;
variables	191	       0	       191&lt;br /&gt;
identifiers	127	       0	       127&lt;br /&gt;
&lt;br /&gt;
The row and column headers are not editable, and you cannot add any rows or columns. Only the data cells can be changed, and these cells only allow integer values between 0 and 255, inclusive. Any other values will cause an error and you will get an error popup explaining these rules and suggesting that you correct your error. If you say yes, go back to editing, the edit table will revert back to was it was before.&lt;br /&gt;
&lt;br /&gt;
The rows give the RGB components of the colors used in expression fields for various syntactic categories.&lt;/div&gt;</summary>
		<author><name>Ldavidson</name></author>
	</entry>
	<entry>
		<id>https://docs.analytica.com/index.php?title=Sys_EnableFixedFont&amp;diff=54219</id>
		<title>Sys EnableFixedFont</title>
		<link rel="alternate" type="text/html" href="https://docs.analytica.com/index.php?title=Sys_EnableFixedFont&amp;diff=54219"/>
		<updated>2020-02-12T20:04:03Z</updated>

		<summary type="html">&lt;p&gt;Ldavidson: Created page with &amp;quot;This system variable has the values 0 (false) or 1 (true). When it is true, Analytica will display expressions in expressions fields such as definitions in object windows or t...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This system variable has the values 0 (false) or 1 (true). When it is true, Analytica will display expressions in expressions fields such as definitions in object windows or the attribute pane using a fixed font, for example Courier. When it is false, Analytica will use a variable font as it has always used before.&lt;br /&gt;
&lt;br /&gt;
A fixed font is only used in expression fields. In other fields, such as title fields, Analytica will use a variable font no matter what the setting of this variable is.&lt;br /&gt;
&lt;br /&gt;
Table cells also make use of fixed font, when enabled, in edit table cells, though variable font is used in result cells. Similarly, list uses fixed font, if enabled, but list of text uses variable font.&lt;br /&gt;
&lt;br /&gt;
At startup, Analytica queries the Windows system for a series of fixed fonts that are found on many systems. If these are not found on a particular system, Analytica uses the backup variable font that is used in other fields, such as title fields.&lt;/div&gt;</summary>
		<author><name>Ldavidson</name></author>
	</entry>
	<entry>
		<id>https://docs.analytica.com/index.php?title=Sys_EnableErrorUnder&amp;diff=54218</id>
		<title>Sys EnableErrorUnder</title>
		<link rel="alternate" type="text/html" href="https://docs.analytica.com/index.php?title=Sys_EnableErrorUnder&amp;diff=54218"/>
		<updated>2020-02-12T19:56:50Z</updated>

		<summary type="html">&lt;p&gt;Ldavidson: Created page with &amp;quot;The system variable identifier is Sys_EnableErrorUnder, and the more readable name is Enable error underlining. This has possible values 0 (false) and 1 (true). When true, thi...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The system variable identifier is Sys_EnableErrorUnder, and the more readable name is Enable error underlining. This has possible values 0 (false) and 1 (true). When true, this applies to expression fields such as definitions in object windows or the attribute pane, and the underlining is intended to indicate errors that the Intellisense parser detects. These error indications are continuously updated as you type in expression fields. You can turn this off if the underlining is too distracting. Note that the Intellisense parser does not do full analysis, and so there are errors in definitions - such as unrecognized identifiers that are not the identifiers of any nodes in your model or names of any existing functions - that are not flagged as errors when you type. When you finally use the green checkmark or close the object window or attribute pane or attempt to evaluate a node complete checking will be done that will pinpoint errors not already flagged in a preliminary way during editing.&lt;br /&gt;
&lt;br /&gt;
Note that syntax coloring will distinguish between identifiers that successfully refer and identifiers that are not resolvable. The latter are termed &amp;quot;variables&amp;quot; in the edit table for [[Sys SyntaxColors]].&lt;/div&gt;</summary>
		<author><name>Ldavidson</name></author>
	</entry>
	<entry>
		<id>https://docs.analytica.com/index.php?title=Sys_TokenType&amp;diff=54217</id>
		<title>Sys TokenType</title>
		<link rel="alternate" type="text/html" href="https://docs.analytica.com/index.php?title=Sys_TokenType&amp;diff=54217"/>
		<updated>2020-02-12T17:33:12Z</updated>

		<summary type="html">&lt;p&gt;Ldavidson: Created page with &amp;quot;This system variable is one index for the system variable SyntaxColors (see Sys SyntaxColors). This indexes the token types values of colors in the rows of the SyntaxColor...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This system variable is one index for the system variable SyntaxColors (see [[Sys SyntaxColors]]). This indexes the token types values of colors in the rows of the SyntaxColors table. This cannot be changed. The members of this index are comments, text literals, keywords, variables, identifiers. Here is what these mean:&lt;br /&gt;
&lt;br /&gt;
comments - comments using /*...*/ or {...}&lt;br /&gt;
text literals - quoted text '...' or &amp;quot;...&amp;quot;&lt;br /&gt;
keywords - reserved words like table, if, then, do, local, etc.&lt;br /&gt;
variables - these are identifiers that are unresolved, that are not declared variables or identifiers of nodes&lt;br /&gt;
identifiers - identifiers of nodes or declared variables&lt;/div&gt;</summary>
		<author><name>Ldavidson</name></author>
	</entry>
	<entry>
		<id>https://docs.analytica.com/index.php?title=Sys_RedGreenBlue&amp;diff=54215</id>
		<title>Sys RedGreenBlue</title>
		<link rel="alternate" type="text/html" href="https://docs.analytica.com/index.php?title=Sys_RedGreenBlue&amp;diff=54215"/>
		<updated>2020-02-12T17:22:45Z</updated>

		<summary type="html">&lt;p&gt;Ldavidson: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This system variable is one index for the system variable SyntaxColors (see [[Sys SyntaxColors]]). This indexes the RGB values of colors in the columns of the SyntaxColors table. This cannot be changed. The members of this index are strings red, green, and blue.&lt;/div&gt;</summary>
		<author><name>Ldavidson</name></author>
	</entry>
	<entry>
		<id>https://docs.analytica.com/index.php?title=Sys_RedGreenBlue&amp;diff=54214</id>
		<title>Sys RedGreenBlue</title>
		<link rel="alternate" type="text/html" href="https://docs.analytica.com/index.php?title=Sys_RedGreenBlue&amp;diff=54214"/>
		<updated>2020-02-12T17:17:00Z</updated>

		<summary type="html">&lt;p&gt;Ldavidson: Created page with &amp;quot;This system variable is one index for the system variable SyntaxColors (see [Sys SyntaxColors])&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This system variable is one index for the system variable SyntaxColors (see [Sys SyntaxColors])&lt;/div&gt;</summary>
		<author><name>Ldavidson</name></author>
	</entry>
	<entry>
		<id>https://docs.analytica.com/index.php?title=Error_Messages/UnsavedLinkSources&amp;diff=53963</id>
		<title>Error Messages/UnsavedLinkSources</title>
		<link rel="alternate" type="text/html" href="https://docs.analytica.com/index.php?title=Error_Messages/UnsavedLinkSources&amp;diff=53963"/>
		<updated>2019-10-03T19:33:06Z</updated>

		<summary type="html">&lt;p&gt;Ldavidson: Added this new page to correspond to a new message box in Analytica&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;quot;Unsaved OLE link sources warning&amp;quot; is a message that might pop up when you try to close a model or quit Analytica. Here is the main text of the message:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Unsaved OLE link sources exist in your model. You will not be able to reestablish connections when you reopen the model without taking action. Yes = close anyway. No = keep open and save link sources or break links.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
When you quit or close, Analytica goes through the list of OLE links in the model, and uses this message to alert you if you have links that were established with data sources that were not saved when the links were established, or not saved before you last closed the model. An example would be a new Excel spreadsheet that you copy data from and use paste special to link to an Analytica table. If you try to close the model before saving the spreadsheet, there is no file backing the spreadsheet and if you go ahead and close, the next time you reopen, Analytica will not have an Excel file name to search the system for in order to reestablish the connection.&lt;br /&gt;
&lt;br /&gt;
You can answer Yes and close Analytica anyway. Or you can answer No and keep Analytica open and use the OLE Links option under Edit to see your list of links in order to identify which links the message is referring to. If your Excel spreadsheet is still open, if you save it Analytica will automatically update the link sources. Otherwise, you can break the links before closing. Or you can simply close the model without taking any action.&lt;br /&gt;
&lt;br /&gt;
If you close the model first and save Excel afterwards, this will not update the link in the model. And if you keep the unsaved Excel spreadsheet open and reopen the model, this will not reestablish the connection either. In any case, you can always break the link at any time, as it isn't doing anything for you. The data copied into Analytica, of course, will remain.&lt;/div&gt;</summary>
		<author><name>Ldavidson</name></author>
	</entry>
	<entry>
		<id>https://docs.analytica.com/index.php?title=Analytica_5.3_beta_Release_Notes/Changes_in_5.3.1&amp;diff=53915</id>
		<title>Analytica 5.3 beta Release Notes/Changes in 5.3.1</title>
		<link rel="alternate" type="text/html" href="https://docs.analytica.com/index.php?title=Analytica_5.3_beta_Release_Notes/Changes_in_5.3.1&amp;diff=53915"/>
		<updated>2019-09-26T17:53:50Z</updated>

		<summary type="html">&lt;p&gt;Ldavidson: Added note about fix for 19457 concerning OLE links.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page lists all changes in the beta build 5.3.1 that have occurred since the previous beta build 5.3.0.&lt;br /&gt;
&lt;br /&gt;
== Branding ==&lt;br /&gt;
* Updated the icons used for &amp;lt;code&amp;gt;*.ana&amp;lt;/code&amp;gt; files and for the application itself on the Windows task bar to be the newer logos.&lt;br /&gt;
&lt;br /&gt;
== Graphing ==&lt;br /&gt;
* Enhancement: Added an option to the Step line style that enables you to control where the step transition occurs. Previously it stepped only at the midpoint of adjacent data points. Now you can step immediately after a data point (left), at the mid point (Mid) or just before each data point (right). A new option, ''Where steps transition'' appears on the Graph Setup dialog.&lt;br /&gt;
&lt;br /&gt;
== Built-in functions ==&lt;br /&gt;
* An enhancement was added to [[StepInterp]] to enable you to find the nearest point to your datum.  &lt;br /&gt;
** Previously, an optional «leftLookup» boolean parameter let you lookup either the point before (left) or the point after (right).&lt;br /&gt;
** «leftLookup» was replaced with an optional parameter named «use» that takes the values &amp;lt;code&amp;gt;'Left'&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;'Nearest'&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;'Right'&amp;lt;/code&amp;gt;. To control tie breaking, there are also options &amp;lt;code&amp;gt;'NearestL'&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;'NearestR'&amp;lt;/code&amp;gt;.&lt;br /&gt;
** Although «leftLookup» is now hidden, it still works (for backward compatibility).&lt;br /&gt;
* [[GetArrowsOnDiagram]] was including arrows into/out of a module when it should not have -- specifically, when the Diagram Style has arrows to/from Modules turned off.&lt;br /&gt;
* [[GetArrowsOnDiagram]] was including an extra arrow from a variable to its alias when both were in the same module.&lt;br /&gt;
&lt;br /&gt;
== Evaluation ==&lt;br /&gt;
* A function parameter with the qualifier &amp;lt;code&amp;gt;Index&amp;lt;/code&amp;gt; expects an index identifier -- either a global identifier or a local alias to an index. However, if you pass a handle to and index to an index parameter, Analytica doesn't complain since what you intend is unambiguous (e.g., a local declared via [[MetaVar..Do]] or [[Local..Do]] instead of [[LocalAlias..Do]]. However, it was discovered that array parameters declared as having the index did not array abstract correctly. This was fixed.&lt;br /&gt;
** The fix to this bug also fixed a memory corruption and crashing bug&lt;br /&gt;
&lt;br /&gt;
== Undo ==&lt;br /&gt;
* Fixed a crash that occurred from: Resize node, Ctrl+Y, undo (i.e., undo resize).&lt;br /&gt;
&lt;br /&gt;
== Command line parameters ==&lt;br /&gt;
* Unrecognized command line parameters to Analytica64.exe put the application into an odd state.&lt;br /&gt;
&lt;br /&gt;
== Example models ==&lt;br /&gt;
* The Bond model background was displaying as white instead of legacy gray.&lt;br /&gt;
&lt;br /&gt;
== Licensing ==&lt;br /&gt;
* Upgraded the licensing libraries to Reprise Software's latest v13 release.&lt;br /&gt;
* Fixed an odd and incorrect error message when a license was bad, where it reported &amp;quot;This module uses features that require Analytica Professional&amp;quot; when Analytica is first launched.&lt;br /&gt;
* In a beta build, the &amp;quot;»Add license from *.lic file&amp;quot; option incorrectly reported that a beta license is required (in fact, the beta release accepts an active, non-beta subscription).&lt;br /&gt;
&lt;br /&gt;
== Intro screen ==&lt;br /&gt;
* The search wiki feature wasn't working correctly when your wiki credentials weren't entered. It was appending the letters &amp;quot;Null&amp;quot; to your query.&lt;br /&gt;
&lt;br /&gt;
== Copy/Paste ==&lt;br /&gt;
* Case where a cell pasted into Excel in Suffix format when when it shouldn't have (Excel doesn't understand Suffix).&lt;br /&gt;
* When copying a certain module (with lots of nodes inside), numerous message boxes (errors) were being reported that should not have.&lt;br /&gt;
* Copied Null cells were pasting into Excel as Null instead of blank cells.&lt;br /&gt;
&lt;br /&gt;
== Node class styles ==&lt;br /&gt;
* The font for an user input or user output node doesn't inherit from the FormNode class (it inherits from its original variable). So the Node Style dialog, when used from the Default Node Styles settings page, now hides the font settings when changing the Form Node default styles. Also, when multiple nodes are selected include the FormNode class and you change the font, it reports this fact that the font is not applied to the FormNode.&lt;br /&gt;
&lt;br /&gt;
== Tables ==&lt;br /&gt;
* In a large table, selected body cells were missing the dark blue border that is supposed to surround the selection.&lt;br /&gt;
* Fixed a situation in which the index for an edit table is changed, which an error in the new definition. During this bad state, the user edits the table in textual view. When the index was fixed, the table lost track of the index length.&lt;br /&gt;
* When you paste special linked there are certain errors that lead you to cancel or just do ordinary paste without a link. In these cases, the OLE link list would show the link you didn't actually make. In these error cases a fix prevents that happening.&lt;/div&gt;</summary>
		<author><name>Ldavidson</name></author>
	</entry>
	<entry>
		<id>https://docs.analytica.com/index.php?title=Verbosity&amp;diff=53086</id>
		<title>Verbosity</title>
		<link rel="alternate" type="text/html" href="https://docs.analytica.com/index.php?title=Verbosity&amp;diff=53086"/>
		<updated>2019-05-21T20:32:20Z</updated>

		<summary type="html">&lt;p&gt;Ldavidson: /* Example */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:System Variables]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Verbosity]] is an Analytica [[System variables|system variable]] that controls how much feedback the system gives to users about the processes it is executing, and is therefore useful with [[Debugging Hints|debugging]].&lt;br /&gt;
&lt;br /&gt;
The variable contains a bit field that controls various functions. The &amp;lt;code&amp;gt;verbosity: 2&amp;lt;/code&amp;gt; bit should always be set: it controls whether certain error messages are reported when parsing definitions. &lt;br /&gt;
&lt;br /&gt;
The value of [[Verbosity]] can be set in the [[Typescript]] window which opens when you press ''Ctrl+' '' (control comma) or the ''F12'' key.&lt;br /&gt;
&lt;br /&gt;
[[Syntax]]:&lt;br /&gt;
:&amp;lt;code&amp;gt;'''verbosity''': &amp;lt;value&amp;gt;&amp;lt;/code&amp;gt;  or  &amp;lt;code&amp;gt;'''verb''': &amp;lt;value&amp;gt;&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Possible values:&lt;br /&gt;
:&amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; verbose;  controls whether certain error messages are reported when parsing definitions&lt;br /&gt;
:&amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt; fixing: does not print tables unless explicitly requested&lt;br /&gt;
:&amp;lt;code&amp;gt;4&amp;lt;/code&amp;gt; evalTrace: causes each variable evaluation to be printed out&lt;br /&gt;
:&amp;lt;code&amp;gt;8&amp;lt;/code&amp;gt; fileTrace: setting disables certain messages about file operations such as reading, clearing enables those messages&lt;br /&gt;
:&amp;lt;code&amp;gt;16&amp;lt;/code&amp;gt; debug: catch-all mode for messages useful in debugging that don't fit the other categories&lt;br /&gt;
:&amp;lt;code&amp;gt;32&amp;lt;/code&amp;gt; evaluating: this is mostly set internally in code; this gets rid of certain messages about undefined variables etc. if set  &lt;br /&gt;
:&amp;lt;code&amp;gt;64&amp;lt;/code&amp;gt; fixingTrace: gives some extra output for processing of definitions &lt;br /&gt;
:&amp;lt;code&amp;gt;128&amp;lt;/code&amp;gt; indentTrace: causes the evaluating trace to be indented to show evaluation depth&lt;br /&gt;
:&amp;lt;code&amp;gt;134&amp;lt;/code&amp;gt; = 2 + 4 + 128: starts verbose tracing with indentation indicating the evaluation depth. This  reveals where in the loop each variable evaluation was called from&lt;br /&gt;
:&amp;lt;code&amp;gt;256&amp;lt;/code&amp;gt; (''new to [[Analytica 5.0]]''): Sticky. Starting with 5.0, changes made to Verbosity in a model file are ignored while the model is being loaded, and are not saved with your model, unless the value has this bit set.  This prevents accidental changes to verbosity that are saved with your model from causing odd behavior.&lt;br /&gt;
&lt;br /&gt;
==Example==&lt;br /&gt;
Let's assume that you get a [[Error Messages/40938|stack overflow error]] when [[Evaluate|evaluating]] a model that contains some recursive [[User-Defined Function|user-defined function]] (a UDF that calls itself) because the termination condition of the function is not satisfied, and you would like to find out where exactly the infinite loop is occurring. To do that,&lt;br /&gt;
&lt;br /&gt;
# Press ''Ctrl+' '' or ''F12'' to open the [[Typescript]] Window.&lt;br /&gt;
# In the Typescript window, type  &amp;lt;code&amp;gt;Verbosity: 134&amp;lt;/code&amp;gt; to start verbose tracing&lt;br /&gt;
# Re-evaluate the model until the stack overflow error appears again.&lt;br /&gt;
# Examine the trace in the Typescript window.&lt;br /&gt;
# Turn tracing back off by typing &amp;lt;code&amp;gt;Verbosity: 2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If your trace is too long to view in the Typescript window, then use these steps:&lt;br /&gt;
# Press ''Ctrl+' '' or ''F12'' to open the Typescript Window.&lt;br /&gt;
# In the Typescript window, type &lt;br /&gt;
#: &amp;lt;code&amp;gt;Photo &amp;quot;C:\log.txt&amp;quot;&amp;lt;/code&amp;gt;  { the [[Photo]] command logs output that is printed to the Typescript window, to a file; pick your own filename }&lt;br /&gt;
#: &amp;lt;code&amp;gt;Verbosity: 134 &amp;lt;/code&amp;gt; to start verbose tracing &lt;br /&gt;
# Evaluate the model until the stack overflow error reappears.  After the stack overflow has occurred, press ''Ctrl+' '' or ''F12'' again to return to the Typescript window.&lt;br /&gt;
# In Typescript, type:&lt;br /&gt;
#: &amp;lt;code&amp;gt;EndPhoto&amp;lt;/code&amp;gt; to stop logging to the log file&lt;br /&gt;
#: &amp;lt;code&amp;gt;Verbosity: 2&amp;lt;/code&amp;gt;  to turn tracing back off and to restore the original value of Verbosity&lt;br /&gt;
# Open the log file, &amp;quot;C:\Temp\log.txt&amp;quot;, in a text editor such as Notepad. The log will contain a series of lines with a number of dots preceding them. Each dot of indentation will indicate one level of recursion, e.g.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;background:white; border:white; margin-left: 2em;&amp;quot;&amp;gt;&lt;br /&gt;
....Evaluating Spinning_Reserves_Di[Time=1801] dloop=263 .&lt;br /&gt;
.....Evaluating Minimum_Operating_L3.&lt;br /&gt;
.....Evaluating Net_Spinning_Reserve[Time=1801] (dynamic) dloop=263 .&lt;br /&gt;
......Evaluating Net_Spinning_Reserve[Time=1800] (dynamic) dloop=263 .&lt;br /&gt;
.......Evaluating Net_Spinning_Reserve[Time=1799] (dynamic) dloop=263 .&lt;br /&gt;
........Evaluating Net_Spinning_Reserve[Time=1798] (dynamic) dloop=263 .&lt;br /&gt;
.........Evaluating Net_Spinning_Reserve[Time=1797] (dynamic) dloop=263 .&lt;br /&gt;
..........Evaluating Net_Spinning_Reserve[Time=1796] (dynamic) dloop=263 .&lt;br /&gt;
...........Evaluating Net_Spinning_Reserve[Time=1795] (dynamic) dloop=263 .&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
* [[System variables]]&lt;br /&gt;
* [[File_System_Typescript_Commands#Photo|Photo]]&lt;br /&gt;
* [[Typescript]]&lt;br /&gt;
* [[Inspection Commands]]&lt;br /&gt;
* [[Debugging Hints]]&lt;br /&gt;
* [[Error_Messages/41108]]&lt;br /&gt;
* [[Error_Messages/40938]]&lt;/div&gt;</summary>
		<author><name>Ldavidson</name></author>
	</entry>
	<entry>
		<id>https://docs.analytica.com/index.php?title=Verbosity&amp;diff=53085</id>
		<title>Verbosity</title>
		<link rel="alternate" type="text/html" href="https://docs.analytica.com/index.php?title=Verbosity&amp;diff=53085"/>
		<updated>2019-05-21T17:53:47Z</updated>

		<summary type="html">&lt;p&gt;Ldavidson: /* Example */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:System Variables]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Verbosity]] is an Analytica [[System variables|system variable]] that controls how much feedback the system gives to users about the processes it is executing, and is therefore useful with [[Debugging Hints|debugging]].&lt;br /&gt;
&lt;br /&gt;
The variable contains a bit field that controls various functions. The &amp;lt;code&amp;gt;verbosity: 2&amp;lt;/code&amp;gt; bit should always be set: it controls whether certain error messages are reported when parsing definitions. &lt;br /&gt;
&lt;br /&gt;
The value of [[Verbosity]] can be set in the [[Typescript]] window which opens when you press ''Ctrl+' '' (control comma) or the ''F12'' key.&lt;br /&gt;
&lt;br /&gt;
[[Syntax]]:&lt;br /&gt;
:&amp;lt;code&amp;gt;'''verbosity''': &amp;lt;value&amp;gt;&amp;lt;/code&amp;gt;  or  &amp;lt;code&amp;gt;'''verb''': &amp;lt;value&amp;gt;&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Possible values:&lt;br /&gt;
:&amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; verbose;  controls whether certain error messages are reported when parsing definitions&lt;br /&gt;
:&amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt; fixing: does not print tables unless explicitly requested&lt;br /&gt;
:&amp;lt;code&amp;gt;4&amp;lt;/code&amp;gt; evalTrace: causes each variable evaluation to be printed out&lt;br /&gt;
:&amp;lt;code&amp;gt;8&amp;lt;/code&amp;gt; fileTrace: setting disables certain messages about file operations such as reading, clearing enables those messages&lt;br /&gt;
:&amp;lt;code&amp;gt;16&amp;lt;/code&amp;gt; debug: catch-all mode for messages useful in debugging that don't fit the other categories&lt;br /&gt;
:&amp;lt;code&amp;gt;32&amp;lt;/code&amp;gt; evaluating:  &lt;br /&gt;
:&amp;lt;code&amp;gt;64&amp;lt;/code&amp;gt; fixingTrace: gives some extra output for processing of definitions &lt;br /&gt;
:&amp;lt;code&amp;gt;128&amp;lt;/code&amp;gt; indentTrace: causes the evaluating trace to be indented to show evaluation depth&lt;br /&gt;
:&amp;lt;code&amp;gt;134&amp;lt;/code&amp;gt; = 2 + 4 + 128: starts verbose tracing with indentation indicating the evaluation depth. This  reveals where in the loop each variable evaluation was called from&lt;br /&gt;
:&amp;lt;code&amp;gt;256&amp;lt;/code&amp;gt; (''new to [[Analytica 5.0]]''): Sticky. Starting with 5.0, changes made to Verbosity in a model file are ignored while the model is being loaded, and are not saved with your model, unless the value has this bit set.  This prevents accidental changes to verbosity that are saved with your model from causing odd behavior.&lt;br /&gt;
&lt;br /&gt;
==Example==&lt;br /&gt;
Let's assume that you get a [[Error Messages/40938|stack overflow error]] when [[Evaluate|evaluating]] a model that contains some recursive [[User-Defined Function|user-defined function]] (a UDF that calls itself) because the termination condition of the function is not satisfied, and you would like to find out where exactly the infinite loop is occurring. To do that,&lt;br /&gt;
&lt;br /&gt;
# Press ''Ctrl+' '' or ''F12'' to open the [[Typescript]] Window.&lt;br /&gt;
# In the Typescript window, type  &amp;lt;code&amp;gt;Verbosity: 134&amp;lt;/code&amp;gt; to start verbose tracing&lt;br /&gt;
# Re-evaluate the model until the stack overflow error appears again.&lt;br /&gt;
# Examine the trace in the Typescript window.&lt;br /&gt;
# Turn tracing back off by typing &amp;lt;code&amp;gt;Verbosity: 2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If your trace is too long to view in the Typescript window, then use these steps:&lt;br /&gt;
# Press ''Ctrl+' '' or ''F12'' to open the Typescript Window.&lt;br /&gt;
# In the Typescript window, type &lt;br /&gt;
#: &amp;lt;code&amp;gt;Photo &amp;quot;C:\log.txt&amp;quot;&amp;lt;/code&amp;gt;  { the [[Photo]] command logs output that is printed to the Typescript window, to a file; pick your own filename }&lt;br /&gt;
#: &amp;lt;code&amp;gt;Verbosity: 134 &amp;lt;/code&amp;gt; to start verbose tracing &lt;br /&gt;
# Evaluate the model until the stack overflow error reappears.  After the stack overflow has occurred, press ''Ctrl+' '' or ''F12'' again to return to the Typescript window.&lt;br /&gt;
# In Typescript, type:&lt;br /&gt;
#: &amp;lt;code&amp;gt;EndPhoto&amp;lt;/code&amp;gt; to stop logging to the log file&lt;br /&gt;
#: &amp;lt;code&amp;gt;Verbosity: 2&amp;lt;/code&amp;gt;  to turn tracing back off and to restore the original value of Verbosity&lt;br /&gt;
# Open the log file, &amp;quot;C:\Temp\log.txt&amp;quot;, in a text editor such as Notepad. The log will contain a series of lines with a number of dots preceding them. Each dot of indentation will indicate one level of recursion, e.g.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;background:white; border:white; margin-left: 2em;&amp;quot;&amp;gt;&lt;br /&gt;
....Evaluating Spinning_Reserves_Di[Time=1801] dloop=263 .&lt;br /&gt;
.....Evaluating Minimum_Operating_L3.&lt;br /&gt;
.....Evaluating Net_Spinning_Reserve[Time=1801] (dynamic) dloop=263 .&lt;br /&gt;
......Evaluating Net_Spinning_Reserve[Time=1800] (dynamic) dloop=263 .&lt;br /&gt;
.......Evaluating Net_Spinning_Reserve[Time=1799] (dynamic) dloop=263 .&lt;br /&gt;
........Evaluating Net_Spinning_Reserve[Time=1798] (dynamic) dloop=263 .&lt;br /&gt;
.........Evaluating Net_Spinning_Reserve[Time=1797] (dynamic) dloop=263 .&lt;br /&gt;
..........Evaluating Net_Spinning_Reserve[Time=1796] (dynamic) dloop=263 .&lt;br /&gt;
...........Evaluating Net_Spinning_Reserve[Time=1795] (dynamic) dloop=263 .&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
* [[System variables]]&lt;br /&gt;
* [[File_System_Typescript_Commands#Photo|Photo]]&lt;br /&gt;
* [[Typescript]]&lt;br /&gt;
* [[Inspection Commands]]&lt;br /&gt;
* [[Debugging Hints]]&lt;br /&gt;
* [[Error_Messages/41108]]&lt;br /&gt;
* [[Error_Messages/40938]]&lt;/div&gt;</summary>
		<author><name>Ldavidson</name></author>
	</entry>
	<entry>
		<id>https://docs.analytica.com/index.php?title=Verbosity&amp;diff=53084</id>
		<title>Verbosity</title>
		<link rel="alternate" type="text/html" href="https://docs.analytica.com/index.php?title=Verbosity&amp;diff=53084"/>
		<updated>2019-05-21T17:39:14Z</updated>

		<summary type="html">&lt;p&gt;Ldavidson: /* Example */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:System Variables]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Verbosity]] is an Analytica [[System variables|system variable]] that controls how much feedback the system gives to users about the processes it is executing, and is therefore useful with [[Debugging Hints|debugging]].&lt;br /&gt;
&lt;br /&gt;
The variable contains a bit field that controls various functions. The &amp;lt;code&amp;gt;verbosity: 2&amp;lt;/code&amp;gt; bit should always be set: it controls whether certain error messages are reported when parsing definitions. &lt;br /&gt;
&lt;br /&gt;
The value of [[Verbosity]] can be set in the [[Typescript]] window which opens when you press ''Ctrl+' '' (control comma) or the ''F12'' key.&lt;br /&gt;
&lt;br /&gt;
[[Syntax]]:&lt;br /&gt;
:&amp;lt;code&amp;gt;'''verbosity''': &amp;lt;value&amp;gt;&amp;lt;/code&amp;gt;  or  &amp;lt;code&amp;gt;'''verb''': &amp;lt;value&amp;gt;&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Possible values:&lt;br /&gt;
:&amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; verbose;  controls whether certain error messages are reported when parsing definitions&lt;br /&gt;
:&amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt; fixing: does not print tables unless explicitly requested&lt;br /&gt;
:&amp;lt;code&amp;gt;4&amp;lt;/code&amp;gt; evalTrace: causes each variable evaluation to be printed out&lt;br /&gt;
:&amp;lt;code&amp;gt;8&amp;lt;/code&amp;gt; fileTrace: setting disables certain messages about file operations such as reading, clearing enables those messages&lt;br /&gt;
:&amp;lt;code&amp;gt;16&amp;lt;/code&amp;gt; debug: catch-all mode for messages useful in debugging that don't fit the other categories&lt;br /&gt;
:&amp;lt;code&amp;gt;32&amp;lt;/code&amp;gt; evaluating: &lt;br /&gt;
:&amp;lt;code&amp;gt;64&amp;lt;/code&amp;gt; fixingTrace: &lt;br /&gt;
:&amp;lt;code&amp;gt;128&amp;lt;/code&amp;gt; indentTrace: causes the evaluating trace to be indented to show evaluation depth&lt;br /&gt;
:&amp;lt;code&amp;gt;134&amp;lt;/code&amp;gt; = 2 + 4 + 128: starts verbose tracing with indentation indicating the evaluation depth. This  reveals where in the loop each variable evaluation was called from&lt;br /&gt;
:&amp;lt;code&amp;gt;256&amp;lt;/code&amp;gt; (''new to [[Analytica 5.0]]''): Sticky. Starting with 5.0, changes made to Verbosity in a model file are ignored while the model is being loaded, and are not saved with your model, unless the value has this bit set.  This prevents accidental changes to verbosity that are saved with your model from causing odd behavior.&lt;br /&gt;
&lt;br /&gt;
==Example==&lt;br /&gt;
Let's assume that you get a [[Error Messages/40938|stack overflow error]] when [[Evaluate|evaluating]] a model that contains some recursive [[User-Defined Function|user-defined function]] (a UDF that calls itself) because the termination condition of the function is not satisfied, and you would like to find out where exactly the infinite loop is occurring. To do that,&lt;br /&gt;
&lt;br /&gt;
# Press ''Ctrl+' '' or ''F12'' to open the [[Typescript]] Window.&lt;br /&gt;
# In the Typescript window, type  &amp;lt;code&amp;gt;Verbosity: 134&amp;lt;/code&amp;gt; to start verbose tracing&lt;br /&gt;
# Re-evaluate the model until the stack overflow error appears again.&lt;br /&gt;
# Examine the trace in the Typescript window.&lt;br /&gt;
# Turn tracing back off by typing &amp;lt;code&amp;gt;Verbosity: 2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If your trace is too long to view in the Typescript window, then use these steps:&lt;br /&gt;
# Press ''Ctrl+' '' or ''F12'' to open the Typescript Window.&lt;br /&gt;
# In the Typescript window, type &lt;br /&gt;
#: &amp;lt;code&amp;gt;Photo &amp;quot;C:\log.txt&amp;quot;&amp;lt;/code&amp;gt;  { the [[Photo]] command logs output that is printed to the Typescript window, to a file; pick your own filename }&lt;br /&gt;
#: &amp;lt;code&amp;gt;Verbosity: 134 &amp;lt;/code&amp;gt; to start verbose tracing &lt;br /&gt;
# Evaluate the model until the stack overflow error reappears.  After the stack overflow has occurred, press ''Ctrl+' '' or ''F12'' again to return to the Typescript window.&lt;br /&gt;
# In Typescript, type:&lt;br /&gt;
#: &amp;lt;code&amp;gt;EndPhoto&amp;lt;/code&amp;gt; to stop logging to the log file&lt;br /&gt;
#: &amp;lt;code&amp;gt;Verbosity: 2&amp;lt;/code&amp;gt;  to turn tracing back off and to restore the original value of Verbosity&lt;br /&gt;
# Open the log file, &amp;quot;C:\Temp\log.txt&amp;quot;, in a text editor such as Notepad. The log will contain a series of lines with a number of dots preceding them. Each dot of indentation will indicate one level of recursion, e.g.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;background:white; border:white; margin-left: 2em;&amp;quot;&amp;gt;&lt;br /&gt;
....Evaluating Spinning_Reserves_Di[Time=1801] dloop=263 .&lt;br /&gt;
.....Evaluating Minimum_Operating_L3.&lt;br /&gt;
.....Evaluating Net_Spinning_Reserve[Time=1801] (dynamic) dloop=263 .&lt;br /&gt;
......Evaluating Net_Spinning_Reserve[Time=1800] (dynamic) dloop=263 .&lt;br /&gt;
.......Evaluating Net_Spinning_Reserve[Time=1799] (dynamic) dloop=263 .&lt;br /&gt;
........Evaluating Net_Spinning_Reserve[Time=1798] (dynamic) dloop=263 .&lt;br /&gt;
.........Evaluating Net_Spinning_Reserve[Time=1797] (dynamic) dloop=263 .&lt;br /&gt;
..........Evaluating Net_Spinning_Reserve[Time=1796] (dynamic) dloop=263 .&lt;br /&gt;
...........Evaluating Net_Spinning_Reserve[Time=1795] (dynamic) dloop=263 .&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
* [[System variables]]&lt;br /&gt;
* [[File_System_Typescript_Commands#Photo|Photo]]&lt;br /&gt;
* [[Typescript]]&lt;br /&gt;
* [[Inspection Commands]]&lt;br /&gt;
* [[Debugging Hints]]&lt;br /&gt;
* [[Error_Messages/41108]]&lt;br /&gt;
* [[Error_Messages/40938]]&lt;/div&gt;</summary>
		<author><name>Ldavidson</name></author>
	</entry>
	<entry>
		<id>https://docs.analytica.com/index.php?title=Verbosity&amp;diff=53083</id>
		<title>Verbosity</title>
		<link rel="alternate" type="text/html" href="https://docs.analytica.com/index.php?title=Verbosity&amp;diff=53083"/>
		<updated>2019-05-21T17:35:40Z</updated>

		<summary type="html">&lt;p&gt;Ldavidson: /* Example */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:System Variables]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Verbosity]] is an Analytica [[System variables|system variable]] that controls how much feedback the system gives to users about the processes it is executing, and is therefore useful with [[Debugging Hints|debugging]].&lt;br /&gt;
&lt;br /&gt;
The variable contains a bit field that controls various functions. The &amp;lt;code&amp;gt;verbosity: 2&amp;lt;/code&amp;gt; bit should always be set: it controls whether certain error messages are reported when parsing definitions. &lt;br /&gt;
&lt;br /&gt;
The value of [[Verbosity]] can be set in the [[Typescript]] window which opens when you press ''Ctrl+' '' (control comma) or the ''F12'' key.&lt;br /&gt;
&lt;br /&gt;
[[Syntax]]:&lt;br /&gt;
:&amp;lt;code&amp;gt;'''verbosity''': &amp;lt;value&amp;gt;&amp;lt;/code&amp;gt;  or  &amp;lt;code&amp;gt;'''verb''': &amp;lt;value&amp;gt;&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Possible values:&lt;br /&gt;
:&amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; verbose;  controls whether certain error messages are reported when parsing definitions&lt;br /&gt;
:&amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt; fixing: does not print tables unless explicitly requested&lt;br /&gt;
:&amp;lt;code&amp;gt;4&amp;lt;/code&amp;gt; evalTrace: causes each variable evaluation to be printed out&lt;br /&gt;
:&amp;lt;code&amp;gt;8&amp;lt;/code&amp;gt; fileTrace: setting disables certain messages about file operations such as reading, clearing enables those messages&lt;br /&gt;
:&amp;lt;code&amp;gt;16&amp;lt;/code&amp;gt; debug: catch-all mode for messages useful in debugging that don't fit the other categories&lt;br /&gt;
:&amp;lt;code&amp;gt;128&amp;lt;/code&amp;gt; indentTrace: causes the evaluating trace to be indented to show evaluation depth&lt;br /&gt;
:&amp;lt;code&amp;gt;134&amp;lt;/code&amp;gt; = 2 + 4 + 128: starts verbose tracing with indentation indicating the evaluation depth. This  reveals where in the loop each variable evaluation was called from&lt;br /&gt;
:&amp;lt;code&amp;gt;256&amp;lt;/code&amp;gt; (''new to [[Analytica 5.0]]''): Sticky. Starting with 5.0, changes made to Verbosity in a model file are ignored while the model is being loaded, and are not saved with your model, unless the value has this bit set.  This prevents accidental changes to verbosity that are saved with your model from causing odd behavior.&lt;br /&gt;
&lt;br /&gt;
==Example==&lt;br /&gt;
Let's assume that you get a [[Error Messages/40938|stack overflow error]] when [[Evaluate|evaluating]] a model that contains some recursive [[User-Defined Function|user-defined function]] (a UDF that calls itself) because the termination condition of the function is not satisfied, and you would like to find out where exactly the infinite loop is occurring. To do that,&lt;br /&gt;
&lt;br /&gt;
# Press ''Ctrl+' '' or ''F12'' to open the [[Typescript]] Window.&lt;br /&gt;
# In the Typescript window, type  &amp;lt;code&amp;gt;Verbosity: 134&amp;lt;/code&amp;gt; to start verbose tracing&lt;br /&gt;
# Re-evaluate the model until the stack overflow error appears again.&lt;br /&gt;
# Examine the trace in the Typescript window.&lt;br /&gt;
# Turn tracing back off by typing &amp;lt;code&amp;gt;Verbosity: 2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If your trace is too long to view in the Typescript window, then use these steps:&lt;br /&gt;
# Press ''Ctrl+' '' or ''F12'' to open the Typescript Window.&lt;br /&gt;
# In the Typescript window, type &lt;br /&gt;
#: &amp;lt;code&amp;gt;Photo &amp;quot;C:\log.txt&amp;quot;&amp;lt;/code&amp;gt;  { the [[Photo]] command logs output that is printed to the Typescript window, to a file; pick your own filename }&lt;br /&gt;
#: &amp;lt;code&amp;gt;Verbosity: 134 &amp;lt;/code&amp;gt; to start verbose tracing &lt;br /&gt;
# Evaluate the model until the stack overflow error reappears.  After the stack overflow has occurred, press ''Ctrl+' '' or ''F12'' again to return to the Typescript window.&lt;br /&gt;
# In Typescript, type:&lt;br /&gt;
#: &amp;lt;code&amp;gt;EndPhoto&amp;lt;/code&amp;gt; to stop logging to the log file&lt;br /&gt;
#: &amp;lt;code&amp;gt;Verbosity: 2&amp;lt;/code&amp;gt;  to turn tracing back off and to restore the original value of Verbosity&lt;br /&gt;
# Open the log file, &amp;quot;C:\Temp\log.txt&amp;quot;, in a text editor such as Notepad. The log will contain a series of lines with a number of dots preceding them. Each dot of indentation will indicate one level of recursion, e.g.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;background:white; border:white; margin-left: 2em;&amp;quot;&amp;gt;&lt;br /&gt;
....Evaluating Spinning_Reserves_Di[Time=1801] dloop=263 .&lt;br /&gt;
.....Evaluating Minimum_Operating_L3.&lt;br /&gt;
.....Evaluating Net_Spinning_Reserve[Time=1801] (dynamic) dloop=263 .&lt;br /&gt;
......Evaluating Net_Spinning_Reserve[Time=1800] (dynamic) dloop=263 .&lt;br /&gt;
.......Evaluating Net_Spinning_Reserve[Time=1799] (dynamic) dloop=263 .&lt;br /&gt;
........Evaluating Net_Spinning_Reserve[Time=1798] (dynamic) dloop=263 .&lt;br /&gt;
.........Evaluating Net_Spinning_Reserve[Time=1797] (dynamic) dloop=263 .&lt;br /&gt;
..........Evaluating Net_Spinning_Reserve[Time=1796] (dynamic) dloop=263 .&lt;br /&gt;
...........Evaluating Net_Spinning_Reserve[Time=1795] (dynamic) dloop=263 .&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
* [[System variables]]&lt;br /&gt;
* [[File_System_Typescript_Commands#Photo|Photo]]&lt;br /&gt;
* [[Typescript]]&lt;br /&gt;
* [[Inspection Commands]]&lt;br /&gt;
* [[Debugging Hints]]&lt;br /&gt;
* [[Error_Messages/41108]]&lt;br /&gt;
* [[Error_Messages/40938]]&lt;/div&gt;</summary>
		<author><name>Ldavidson</name></author>
	</entry>
	<entry>
		<id>https://docs.analytica.com/index.php?title=Error_Messages/40826&amp;diff=53082</id>
		<title>Error Messages/40826</title>
		<link rel="alternate" type="text/html" href="https://docs.analytica.com/index.php?title=Error_Messages/40826&amp;diff=53082"/>
		<updated>2019-05-21T15:53:56Z</updated>

		<summary type="html">&lt;p&gt;Ldavidson: /* Changing Security Policy */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category: Error messages]]&lt;br /&gt;
&lt;br /&gt;
== Error Message Examples ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;background:white; border:white; margin-left: 1em; font-style:italic&amp;quot;&amp;gt;&lt;br /&gt;
 You cannot evaluate a call to RunConsoleProcess directly from an input variable.&lt;br /&gt;
 Variable CallProcess has an input node associated with it, so you cannot enter a&lt;br /&gt;
 call to RunConsoleProcess directly into the input of CallProcess.&lt;br /&gt;
&lt;br /&gt;
 Evaluation of Function DbWrite is not allowed from within an input variable.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Cause ==&lt;br /&gt;
&lt;br /&gt;
You cannot call the function [[RunConsoleProcess]] from a variable with an input node.&lt;br /&gt;
&lt;br /&gt;
You cannot call the function [[RunConsoleProcess]] by entering it into an input of a variable.&lt;br /&gt;
&lt;br /&gt;
This limitation is imposed for security reasons.  You don't want users of a model to be able to run arbitrary processes on your computer (these would have to be users of Analytica Power Player).  Hence, Analytica doesn't allow calls to [[RunConsoleProcess]] to be evaluated directly from a node that a Player/Power Player user can change.&lt;br /&gt;
&lt;br /&gt;
If you have an external process that you want your model to run when being used by an end-user, then make sure it is in a variable that does not have an input node.  &lt;br /&gt;
&lt;br /&gt;
You should always be somewhat security conscious.  You could design a model that allows a Power Player end user to run arbitrary processes.  For example:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;Variable cmd   { An variable with an input }&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;Variable RunIt := RunConsoleProcess(cmd,...)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This would be highly non-recommended.  You should keep control over what the cmd is being executed inside your model.&lt;br /&gt;
&lt;br /&gt;
== Remedies ==&lt;br /&gt;
&lt;br /&gt;
Remove the input node for the object that calls the [[RunConsoleProcess]] function.&lt;br /&gt;
&lt;br /&gt;
=== Changing Security Policy ===&lt;br /&gt;
&lt;br /&gt;
''new to [[Analytica 4.4]]''&lt;br /&gt;
&lt;br /&gt;
For each built-in Analytica function, the policy for allowing or disallowing calls to the function can be configured to any of the following:&lt;br /&gt;
* Always allow&lt;br /&gt;
* Disallow from input variables&lt;br /&gt;
* Disallow (also) from [[UDF]]s that are called from input variables&lt;br /&gt;
* Disable always&lt;br /&gt;
The one exception to this is [[RunConsoleProcess]], which cannot be lowered more liberally than &amp;quot;Disallow from input variables&amp;quot;.  The security policy here is specific to your computer, not to the model you are running.  Functions like [[DbWrite]] could be susceptible to SQL injection attacks, so these are restricted in input nodes in general.  On a web server that allows models to be uploaded, you may want to disable [[RunConsoleProcess]] in all cases from [[ADE]].&lt;br /&gt;
&lt;br /&gt;
These security policies are configured in the &amp;lt;code&amp;gt;Analytica.ini&amp;lt;/code&amp;gt; file.  This file is located in the Analytica or ADE install directory.&lt;br /&gt;
&lt;br /&gt;
If you install Analytica or [[ADE]] as a system admin, then you can also configure policies that differ by user account.  In the ADE case, you could, for example, have the account that ADE is run as from a web page configured with a different policy than ADE from your user account.  To do this, you need to add a string value named &amp;lt;code&amp;gt;Preferences&amp;lt;/code&amp;gt; to the &amp;lt;code&amp;gt;HKCU/Software/Lumina Decision Systems/ADE/4.4x64&amp;lt;/code&amp;gt; hive (or &amp;lt;code&amp;gt;ADE/4.4&amp;lt;/code&amp;gt; for 32-bit ADE, or &amp;lt;code&amp;gt;Analytica/4.4&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;Analytica/4.4x64&amp;lt;/code&amp;gt;).  For the value, enter a path to another &amp;lt;code&amp;gt;Preference.ini&amp;lt;/code&amp;gt; file that you create.  Then in that file, modify the security policy as you want it for that user, e.g.:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;Att_whenDisallowed RunConsoleProcess: 4  { Always }&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The possible values for &amp;lt;code&amp;gt;Att_whenDisallowed&amp;lt;/code&amp;gt; are:&lt;br /&gt;
:&amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; = Disallow from input variables, but allow from [[UDF]]s called by input variables.&lt;br /&gt;
:&amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt; = Disallow from input variables and from UDFs called from input variables&lt;br /&gt;
:&amp;lt;code&amp;gt;4&amp;lt;/code&amp;gt; = Always disallow&lt;br /&gt;
&lt;br /&gt;
If you are extremely security conscious, then you may want to restrict functions that allow users to read the contents of files on your computer.  Generally user would need to know where to look for a file to find it, but you may want to remove that theoretical possibility.  To do this, consider restricting: [[ReadTextFile]], [[SpreadsheetOpen]], and [[DbQuery]].&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
* [[RunConsoleProcess]]&lt;br /&gt;
* [[ReadTextFile]]&lt;br /&gt;
* [[SpreadsheetOpen]]&lt;br /&gt;
* [[DbWrite]]&lt;br /&gt;
* [[DbQuery]]&lt;br /&gt;
* [[Configuring Personalized Defaults]]&lt;br /&gt;
* [[What%27s_new_in_Analytica_4.4%3F#Security|Security]]&lt;br /&gt;
* [[Error Messages/42644]]&lt;/div&gt;</summary>
		<author><name>Ldavidson</name></author>
	</entry>
	<entry>
		<id>https://docs.analytica.com/index.php?title=What%27s_new_in_Analytica_5.2%3F&amp;diff=52424</id>
		<title>What's new in Analytica 5.2?</title>
		<link rel="alternate" type="text/html" href="https://docs.analytica.com/index.php?title=What%27s_new_in_Analytica_5.2%3F&amp;diff=52424"/>
		<updated>2018-12-21T18:28:32Z</updated>

		<summary type="html">&lt;p&gt;Ldavidson: Added description of new Remove quotes and Add quotes options for editing description and definition fields&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The current release is [[Analytica 5.1]]. Analytica 5.2 is currently under development -- and so is this page. &lt;br /&gt;
&lt;br /&gt;
These are improvements in Analytica and ADE release 5.2. (As usual, we don't list bug fixes except the most notable cases.)&lt;br /&gt;
&lt;br /&gt;
== Graphing ==&lt;br /&gt;
Graphs have some new interactive manual scaling and a new polygon fill feature, as described below.&lt;br /&gt;
&lt;br /&gt;
=== Interactive zooming ===&lt;br /&gt;
* Drag the mouse horizontally to zoom to a manually-scaled x-axis interval:&lt;br /&gt;
::[[image:graph_zoom_horiz.png]] &amp;amp;rarr; [[image:graph_zoom_horiz_after.png]]&lt;br /&gt;
::Transparent blue selection rectangle appears while dragging. After drag, Y is still autoscaled, but now to the data in the selected range.&lt;br /&gt;
* Drag the mouse diagonally to zoom to manually-scaled intervals on both axes:&lt;br /&gt;
::[[image:graph_zoom_diag.png]] &amp;amp;rarr; [[image:graph_zoom_diag_after.png]]&lt;br /&gt;
* When you move the mouse over a zoomed graph, autoscale hover icon buttons appear. Click on one to auto-scale that axis.&lt;br /&gt;
::[[image:graph_zoom_autoscale.png]] &amp;amp;rarr; [[image:graph_zoom_autoscaley_after.png]]&lt;br /&gt;
::Clicked on the vertical axis autoscale hover icon. Horizontal axis is still manually scaled.&lt;br /&gt;
* Drag vertically to zoom to a manually-scaled y-axis interval.&lt;br /&gt;
::[[image:graph_zoom_vert.png]] &amp;amp;rarr; [[image:graph_zoom_vert_after.png]]&lt;br /&gt;
* Zooming has the same effect as changing the manual scale range in Graph Setup. In fact, it records your selected end points there.&lt;br /&gt;
::[[image:graph_zoom_graphsetup_after.png]]&lt;br /&gt;
&lt;br /&gt;
=== Key item visibility states ===&lt;br /&gt;
[[Analytica 5.1]] introduced a feature to toggle the visibility of individual curves on a graph by clicking on its corresponding key item. Analytica 5.2 includes some further enhancement to this popular feature.&lt;br /&gt;
&lt;br /&gt;
==== Turn on all, Turn off all ====&lt;br /&gt;
Right-click on a graph key and you'll see the options '''Turn on all key items''' and '''Turn off all key items'''. These can save you many clicks when there are a lot of key items and you want to turn almost all of them off.&lt;br /&gt;
&lt;br /&gt;
==== Toggle line, symbol visibility ====&lt;br /&gt;
&lt;br /&gt;
::[[image:Line and point graph.png]]&lt;br /&gt;
In the preceding graph, the points in a data set appear as symbols without any lines connecting them, and a best-fit line appears appears on the same graph without symbols. This is done by starting with a Line+Symbol plot style, like this:&lt;br /&gt;
:[[image:How to line and point graph.png]]&lt;br /&gt;
Notice that in the starting line+symbol plot, each key item has a line and a symbol. When you click on one of them multiple times in a row, the key item toggles from line+symbol &amp;amp;rarr; off &amp;amp;rarr; line-only &amp;amp;rarr; symbol-only &amp;amp;rarr; line+symbol. So with just a few clicks on the key items, you get to the line only and symbols only series on the same plot.&lt;br /&gt;
&lt;br /&gt;
When you have multiple keys, with the line, symbol or symbol size each depicting different information, each key toggles through three states: On &amp;amp;rarr; Off &amp;amp;rarr; Partial &amp;amp;rarr; On. In the full off state, the data is fully hidden -- so if you hide a line, the symbols for that curve are also hidden, or if you hide a symbol, the line segments to and from that symbol hide. When a item in a line key is partial, the curve's line isn't shown, but its symbols continue to show. When an item in a symbol key is partial, the line to that datum remains, but the symbol does not appear.  &lt;br /&gt;
&lt;br /&gt;
::[[image:graph_key_symbol_partial.png]]&lt;br /&gt;
&lt;br /&gt;
In the above graph, the 2 points corresponding to '''Least''' would appear at x=2 in the fully-on graph, but fit_err=Least is been clicked once, putting it into the off state. As a result, there is a gap in the lines at x=2. In the symbol size key (x cat), the x_cat=8 item is in the partial state. The points corresponding to x_cat=8 appear at x=8. In this case the lines pass through the points, but the symbols are hidden. &lt;br /&gt;
&lt;br /&gt;
When fit_graph=y in the line key is off, all the red &amp;quot;ink&amp;quot; on the graph disappears. But when it is in the partial state, the line disappears but the symbols continue to show, as illustrated here:&lt;br /&gt;
::[[image:graph_key_line_partial.png]]&lt;br /&gt;
&lt;br /&gt;
==== Save visibility states ====&lt;br /&gt;
Changes to key item visibility reset by default when you close and re-open a graph anew. If you want your current visibility state to be saved as the starting point next time the graph is opened, select '''Save key item visibilities''' from the right-mouse menu.&lt;br /&gt;
&lt;br /&gt;
=== Polygon fill plots ===&lt;br /&gt;
When you plot a curve in an X-Y plot, there is now a polygon fill option that fills the interior of the polygon(s). For example, starting with this data, already plotted as Latitude vs Longitude&lt;br /&gt;
::[[image:California_unfilled_plot.png]]&lt;br /&gt;
you can use the new Polygon fill type (the Fill type option is new).&lt;br /&gt;
::[[image:Graph_setup_polygon_filltype.png]]&lt;br /&gt;
The difference between alternate and solid arises when a curve crosses itself. In this example with a state outline, that doesn't happen so they are equivalent.  Polygon fill closes each curve segment (null data starts a new segment) and fills the interior.&lt;br /&gt;
::[[image:California_filled_plot.png]]&lt;br /&gt;
and viola!&lt;br /&gt;
::[[image:Red state blue state.png]]&lt;br /&gt;
&lt;br /&gt;
=== Other graphing ===&lt;br /&gt;
&lt;br /&gt;
* Bug fix impacting marginal abatement graphs&lt;br /&gt;
* Changing symbol size role less likely to swap other roles, less confusing&lt;br /&gt;
&lt;br /&gt;
== Expression language &amp;amp; Engine ==&lt;br /&gt;
&lt;br /&gt;
=== Declaring local identifiers ===&lt;br /&gt;
&lt;br /&gt;
==== Omission of initial value====&lt;br /&gt;
&lt;br /&gt;
When declaring a local, you can now omit its initial value, so that &lt;br /&gt;
:&amp;lt;code&amp;gt;[[Local]] x;&amp;lt;/code&amp;gt;&lt;br /&gt;
is equivalent to &lt;br /&gt;
:&amp;lt;code&amp;gt;[[Local]] x := Null&amp;lt;/code&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
==== Multiple locals in one declaration ====&lt;br /&gt;
&lt;br /&gt;
You can declare multiple local identifiers in the same Local declaration. For example,&lt;br /&gt;
:&amp;lt;code&amp;gt;Local a, b := 5, c[ J ], d[ ] := Va1;&amp;lt;/code&amp;gt;&lt;br /&gt;
This is then equivalent to four separate declarations as follows&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
:[[Local]] a:=[[Null]];&lt;br /&gt;
:[[Local]] b:=5;&lt;br /&gt;
:[[Local]] c[ J ] := [[Null]];&lt;br /&gt;
:[[Local]] d[ ] := Va1;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Capture of multiple return values ====&lt;br /&gt;
&lt;br /&gt;
Functions can now return multiple values, each with different dimensionality. This is covered below in [[#Multiple return values]]. These values can be captured by [[Local]] (or the other declaration constructs like [[For]], etc.) by placing the declared identifiers inside parentheses, as illustrated here:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;[[Local]] (u,w,v) := [[SingularValueDecomp]]( a, I, J, J2 );&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where the function, [[SingularValueDecomp]] returns three matrices, each with a different dimensionality. With dimensional restrictions, this could also be declared as&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;[[Local]] (u[I,J], w[J,J2], v[J,J2]) := [[SingularValueDecomp]]( a, I, J, J2 );&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that [[SingularValueDecomp]] is called a single time, and returns three separate values. This function, as well as [[EigenDecomp]], behave differently when multiple return values are captured compared to when only the main value is used, which is done for backward compatibility with their legacy behavior. Previously, the returned a data structure with 3 [[references]] to the 3 matricies, which required some work to unpack. They illustrate that the capability to return multiple values isn't entirely new, but is far more convenient. These two functions are the only functions that change their behavior. For all other functions, when only the main value is used, the secondary return values are simply dropped (and are usually not computed in the first place). For example, in addition to reading the contents of a file, you can also capture the file name selected by the user using&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;[[Local]] ( txt, filename ) := [[ReadTextFile]](&amp;quot;&amp;quot;);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
but you don't need to capture filename if you don't need it, and can simple use&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;[[Local]] txt := [[ReadTextFile]](&amp;quot;&amp;quot;);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Reduced keyword ====&lt;br /&gt;
&lt;br /&gt;
As with previous releases, you can declare the indexes that the value named by a local identifier is allowed to have using brackets, such as &lt;br /&gt;
:&amp;lt;code&amp;gt;[[Local]] x[I, J, K] := Z;&amp;lt;/code&amp;gt;&lt;br /&gt;
When declared in this fashion, and expressions you include in the body (i.e., the lexical scope of these local identifiers) can be treated as if it does not contain any indexes not listed. The new keyword &amp;quot;&amp;lt;code&amp;gt;reduced&amp;lt;/code&amp;gt;&amp;quot; also restricts the dimensionality of a local variable, but in a somewhat different way. The same qualifier exists for [[Function parameter qualifiers|function parameter declarations]] and in fact works in exactly the same way here.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;[[Local]] ( a[ ], b reduced ) := _( X, Y );&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Since &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; might need to be iterated over the indexes of &amp;lt;code&amp;gt;X&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;b&amp;lt;/code&amp;gt; will have the indexes of &amp;lt;code&amp;gt;Y&amp;lt;/code&amp;gt; that are not also indexes of &amp;lt;code&amp;gt;X&amp;lt;/code&amp;gt;. In addition, the slice of X or Y named by a or b is coordinated. When a names &amp;lt;code&amp;gt;X[J=3]&amp;lt;/code&amp;gt;, then &amp;lt;code&amp;gt;b&amp;lt;/code&amp;gt; also names &amp;lt;code&amp;gt;Y[J=3]&amp;lt;/code&amp;gt;.  This leads to some convenient new iteration constructs. For example, you may have seen expressions such as this one:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
:[[For]] n := @I Do (&lt;br /&gt;
::[[Local]] ii := I[@I=n]&lt;br /&gt;
::[[Local]] x_i := X[@I=n];&lt;br /&gt;
::…&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
the ensuing looped body code makes use of the index position (n), the index label (ii), and the array slice (x_i), and so it has to extract two of the items from the loop variable. This can now be condensed to a single looping structure,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
:[[For]] (n[], ii[], x_i reduced) := _(@I, I, X) Do ( …&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Note: In many cases, the word [[Local]] can be used in place of [[For]] here. Note that &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; names each position of &amp;lt;code&amp;gt;I&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ii&amp;lt;/code&amp;gt; names each label of &amp;lt;code&amp;gt;I&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;x_i&amp;lt;/code&amp;gt; names the slice of &amp;lt;code&amp;gt;X&amp;lt;/code&amp;gt; corresponding to &amp;lt;code&amp;gt;[@I=n]&amp;lt;/code&amp;gt;. This is similar to calling a function with &amp;lt;code&amp;gt;F(@I, I, X)&amp;lt;/code&amp;gt; with has Parameters declared as &lt;br /&gt;
:Function F(n,i : [] ; x_i : reduced)&lt;br /&gt;
&lt;br /&gt;
==== Iterating over repeated parameters (Local xi := repeated x Do) ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Preservation of local name instead of local1, local2 ====&lt;br /&gt;
&lt;br /&gt;
=== Multiple return values ===&lt;br /&gt;
&lt;br /&gt;
Functions can now return multiple values, each with potentially different indexes, not just a single value or array, as previously.  An expression calling the function can use only the first returned value, or it can use some or all of the vales.  Several built-in functions have been enhanced to return additional information in the second and third return values.&lt;br /&gt;
&lt;br /&gt;
==== Built-in functions that return multiple values ====&lt;br /&gt;
&lt;br /&gt;
These built-in functions read information from a file and return its contents in one way or other in the main value. Each has now been enhanced to return the file name that was opened as a second parameter. Since in each case, a user might potentially select a file from a file selector dialog, you would otherwise not knowing which file was actually read.  The primary return value is the same as in previous releases, the second return value is new.&lt;br /&gt;
&lt;br /&gt;
* [[ReadTextFile]]: Returns ( file_contents, filename )&lt;br /&gt;
* [[SpreadsheetOpen]]: Returns ( workbook, filename )&lt;br /&gt;
* [[ReadExportFile]]: Returns ( array, filename )&lt;br /&gt;
* [[ReadBinaryFile]]: Returns (date, filename)&lt;br /&gt;
* [[ReadImageFile]]: Returns (image, filename)&lt;br /&gt;
&lt;br /&gt;
TO DO: Look up -- do the Write functions return filenames?&lt;br /&gt;
&lt;br /&gt;
The function [[SingularValueDecomp]] computes three matrices, each with a different dimensionality. Formerly, there were returned as a vector of 3 [[reference]]s. You would then usually unpack this, extracting the three items. With the ability for it to return three return values, the call is more convenient, namely:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;(u, w, v) := [[SingularValueDecomp]]( a, I, J, J2)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
eliminating the ugly unpacking code. To ensure backward compatibility with code that used the 3-reference data structure, it is able to detect when you are capturing multiple return values and return the 3-reference structure when you are not.  &lt;br /&gt;
&lt;br /&gt;
A similar enhancement applies to the [[EigenDecomp]] function, which returns a vector of eigen values and 2-D matrix of eigen vectors. Formerly, these were bundled using a reference for the eigen vectors, but with multiple return values it is convenient to immediately separate these, e.g.,&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;(eigenVals, eigenVecs) := [[EigenDecomp]](a, I, J)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[EigenDecomp]] also retains its legacy behavior when you are not capturing multiple return values.&lt;br /&gt;
&lt;br /&gt;
==== Capturing multiple return values ====&lt;br /&gt;
When a function returns multiple return values, you have to capture these values. There are two ways of doing this: In a local declaration, or via the assignment operator (:=).&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;[[Local]]( x, y, z ) := FuncWithMultiple(  );&amp;lt;/code&amp;gt;&lt;br /&gt;
or&lt;br /&gt;
:&amp;lt;code&amp;gt;(a, b, c) := FuncWithMultiple( );&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
When assignment is used, each destination (a, b and c) can be anything that could appear on the left-hand side of an normal assignment operator. This includes local identifiers, global variables (in contexts where a side-effect is legal), a slice of a local variable, an attribute of an object, etc. &lt;br /&gt;
&lt;br /&gt;
Although I'm showing the local declaration example using [[Local..Do]], you can also use other local declaration constructs in the same way, including [[For]] and [[LocalAlias]], or the legacy [[Var..Do]], [[Using..Do]], [[MetaVar..Do]], etc. &lt;br /&gt;
&lt;br /&gt;
When you capture a return value that isn't actually returned by the function, it is equivalent to capturing null. For example:&lt;br /&gt;
:&amp;lt;code&amp;gt;( x,y ) := [[Sqrt]](5)&amp;lt;/code&amp;gt;&lt;br /&gt;
sets &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt; to 5 and &amp;lt;code&amp;gt;y&amp;lt;/code&amp;gt; to null.&lt;br /&gt;
&lt;br /&gt;
==== Returning multiple values from a UDF ====&lt;br /&gt;
To return multiple values from your own UDFs, simple return &lt;br /&gt;
:&amp;lt;code&amp;gt;[[MultiResult]]( v1, v2, v3, v4 )&amp;lt;/code&amp;gt;&lt;br /&gt;
where &amp;lt;code&amp;gt;v1, v2, …&amp;lt;/code&amp;gt; are the expressions whose result is to be returned. Be aware that any of these values that are not captured by the caller, the corresponding expression will not be evaluated. You can use that to your advantage by placing any time-consuming code not shared by v1 in the expression for v2, so that when the caller uses only v1, no wasted computation ensues. &lt;br /&gt;
&lt;br /&gt;
There is a synonymous syntax, &amp;lt;code&amp;gt;_( v1, v2, v3, v4 )&amp;lt;/code&amp;gt; that can be used. When returning values from a UDF, we feel that it clearer to call [[MultiResult]]. However, the underscore function is convenient when using a multiple assignment directly, such as &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;[[Local]] (key[], val[]) := _( dict.Key, dict );&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This example combines &amp;lt;code&amp;gt;_( ) &amp;lt;/code&amp;gt; is combined with [[Repeated parameter forwarding]] to accomplish something that would have taken four lines of code otherwise.&lt;br /&gt;
:&amp;lt;code&amp;gt;[[Local]] (x,y,z) := _( ...[[ParseNumber]]( [[SplitText]]( &amp;quot;10, 20, 3&amp;quot;, &amp;quot;,&amp;quot; ) ) );&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Emergent iteration constructs ====&lt;br /&gt;
&lt;br /&gt;
Some new convenient forms of iteration constructs emerge from the introduction of multiple return values. For example, when iterating over an index, you can simultaneously grab the index position and the index labels in the loop declaration.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
:[[For]] ( pos, label ) := _( @J, J ) Do …&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A 1-D array with an index containing labels is called as associative array in other programming languages. The index values are the keys and the array values are the values. Your iteration can conveniently name both the current key and the current value.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
:[[For]] ( key[], val reduced ) := _( I, a ) Do …&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Assignment ===&lt;br /&gt;
* (Definition of X := array) -- setting cell expressions&lt;br /&gt;
* new ParseExpression() function&lt;br /&gt;
* Capturing multiple values&lt;br /&gt;
=== Multithreading ===&lt;br /&gt;
Added finer-grained control over which multi-threaded algorithms are enabled or disabled.  This is so that if you encounter a multi-threading-related problem with one particular algorithm, you can disable it without having to sacrifice all multi-threading.&lt;br /&gt;
&lt;br /&gt;
* [[DisableMultithreaded]]: New system variable that contains the flags.&lt;br /&gt;
* [[SetEvaluationFlag]]('multithreaded'): Function for turning on or off only within one expression.&lt;br /&gt;
&lt;br /&gt;
=== Experimental ===&lt;br /&gt;
You should not rely on experimental features while they are still experimental. They are subject to change or even cancellation in future releases, and are less thoroughly tested.&lt;br /&gt;
&lt;br /&gt;
==== Sparse arrays ====&lt;br /&gt;
Analytica has long had support for a certain form of sparsity, which we call constant sparsity (or just const sparsity for short). When the values along a slice of an array don't vary (are constant), Analytica is often able to store the single value only, and also avoid an iteration during computations. However, many sparse arrays can't take advantage of const sparseness. We've been experimenting with fully sparse multi-dimensional arrays. With these, it is possible to have multidimensional cubes with large numbers of dimensions and immense numbers of distinct coordinates as long as the number of cell with actual data is relatively small. Such sparsity is often seen in [[MdTable]] relational-to-array transformations. &lt;br /&gt;
&lt;br /&gt;
You can use the same Analytica operators and functions on sparse arrays as you would on any other Analytica arrays, but when possible, Analytica will attempt to use sparse algorithms to process the only values that are present and produce a sparse array, maintaining fast and low-memory computation. With this we have been able to demonstrate some real-life computations on sparse BI hypercubes that were not previously possible (and which are not realistically possible with a relational table representation). &lt;br /&gt;
&lt;br /&gt;
Some operations produce non-sparse results, even when applied to sparse arrays. [[Cumulate]] applied to an array with a non-zero default value is one obvious example. This is a serious &amp;quot;gotcha&amp;quot;, because if you are manipulating arrays with quadrillions of cells, one application of a function like that and you've just created a multi-petabyte array.&lt;br /&gt;
&lt;br /&gt;
At present, only a subset of operations and functions that could have sparse-array-aware algorithms actually do; however, many of the ones that are present are the most common operations. But this incompleteness is one reason this is classified as an experimental feature.&lt;br /&gt;
&lt;br /&gt;
In addition, the sparse algorithms are at this point quite new and not battle tested, so it not unlikely that bugs may be lurking, including bugs that might produce incorrect results. One of the reasons we are including it as an experimental feature is to promote testing of the algorithms.&lt;br /&gt;
&lt;br /&gt;
===== Using sparse arrays =====&lt;br /&gt;
The use of sparse arrays is enabled by setting the system variable [[EnableSparse]] to 1.  Or, you can enable the production of a sparse array from a specific expression by using &amp;lt;code&amp;gt;[[SetEvaluationFlag]]('sparse', true', «expr»)&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[MdTable]] is able to return a sparse array from a relational table, provided [[EnableSparse]] is set, or the sparse evaluation flag is on, or you set the optional «sparse» parameter to true. From there, the sparseness will propagate as you slice, add, and so on. &lt;br /&gt;
&lt;br /&gt;
Expressions like &amp;lt;code&amp;gt;a = b&amp;lt;/code&amp;gt; are often sparse, but will only return a sparse result when the evaluation context allows it. When these produce dense arrays, and those dense arrays are combined with sparse arrays, a lot of sparsity is often lost.&lt;br /&gt;
&lt;br /&gt;
== Built-in functions ==&lt;br /&gt;
=== with Multiple return values ===&lt;br /&gt;
The following built-in functions now return multiple results: [[ReadTextFile]], [[ReadImageFile]], [[ReadBinaryFile]], [[SpreadsheetOpen]], [[ReadExportFile]], [[SingularValueDecomp]], [[EigenDecomp]].&lt;br /&gt;
&lt;br /&gt;
See [[#Multiple return values]] above.&lt;br /&gt;
&lt;br /&gt;
=== New optional parameters to existing functions ===&lt;br /&gt;
* Added an optional parameter named «initially» parameter to [[ComputedBy]]. This provides an initial value for the parent variable, and retains the value assigned by the called in the definition. (But only when the value is a simple atom). For example, if you want to remember what file a user selected, you could use:&amp;lt;code&amp;gt;&lt;br /&gt;
 Variable filename := [[ComputedBy]](wb,&amp;quot;&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
 Variable wb := &lt;br /&gt;
      Local tmp; &lt;br /&gt;
      (tmp,filename) := [[SpreadsheetOpen]](filename); &lt;br /&gt;
      tmp&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Added an optional Boolean parameter, «w1D» parameter to [[SingularValueDecomp]]. When false or omitted, it the resulting W is a square diagonal matrix. When set to true, the returned W is a vector (the diagonal).&lt;br /&gt;
&lt;br /&gt;
* Added an optional «except» parameter to [[IndexesOf]], which accepts any number of index identifiers. For example, the following sums over every index of array A  except for &amp;lt;code&amp;gt;I&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;J&amp;lt;/code&amp;gt;.&lt;br /&gt;
:::&amp;lt;code&amp;gt;[[Sum]]( A, …[[IndexesOf]](A, except:I,J) )&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Added a «first» parameter to [[ArgMin]], [[Argmax]], [[SubIndex]], and [[PositionInIndex]]. When omitted or false, in the event of a tie these return the ''last'' occurrence. When set to true, they return the position of the first occurrence of the tie.&lt;br /&gt;
&lt;br /&gt;
::In addition, it was previously less obvious which tie was identified by [[ArgMin]] or [[Argmax]] in the multi-dimensional case. Now it is the first or last occurrence in the natural ordering of the supplied index parameters.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== For sparse arrays ====&lt;br /&gt;
* Added an optional boolean parameter «sparse» to [[MdTable]]. Experimental. See [[#Sparse arrays]].&lt;br /&gt;
* The optional Boolean «sparseCount» parameter to [[Size]]. When true, counts the actual number of values (including default values) in the sparse array.&lt;br /&gt;
&lt;br /&gt;
=== Analytic distribution functions ===&lt;br /&gt;
The analytic probability functions for all built-in distributions are now also built-in functions. For example, corresponding to the [[Triangular]] distribution function there are also the [[DensTriangular]], [[CumTriangular]] and [[CumTriangularInv]] functions. Previously, to use these functions you have to add the [[Distribution Densities Library]] to your model.&lt;br /&gt;
&lt;br /&gt;
The general naming pattern for these functions is (where «dist» is the name of the distribution):&lt;br /&gt;
* &amp;lt;code&amp;gt;Dens«dist»&amp;lt;/code&amp;gt;: The ''probability density function'' for a continuous distribution. Returns the density at «x».&lt;br /&gt;
* &amp;lt;code&amp;gt;Prob«dist»&amp;lt;/code&amp;gt;: The ''discrete probability function'' for a discrete distribution. Returns the probability of «x».&lt;br /&gt;
* &amp;lt;code&amp;gt;Cum«dist»&amp;lt;/code&amp;gt;: The cumulative probability function, also known as the ''probability function'' and ''cumulative density function''. Returns the probability of being less than or equal to «x».&lt;br /&gt;
*&amp;lt;code&amp;gt;Cum«dist»Inv&amp;lt;/code&amp;gt;: The inverse cumulative probability function, also called the ''quantile function''. Returns the «p»th fractile/percentile/quartile.&lt;br /&gt;
&lt;br /&gt;
A few of these analytic functions were already built in previously, but all of the following were added:&lt;br /&gt;
* [[DensBeta]], [[DensChiSquared]], [[DensCumDist]], [[DensExponential]], [[DensFDist]], [[DensGamma]], [[DensLogistic]], [[DensProbDist]], [[DensStudentT]], [[DensTriangular]], [[DensWeibull]].&lt;br /&gt;
* [[ProbBernoulli]], [[ProbBinomial]], [[ProbGeometric]], [[ProbHyperGeometric]], [[ProbNegativeBinomial]], [[ProbPoisson]], [[ProbUniform]]&lt;br /&gt;
* [[CumBernoulli]], [[CumBeta]], [[CumChiSquared]], [[CumCumDist]], [[CumExponential]], [[CumFDist]], [[CumGamma]], [[CumGeometric]], [[CumHyperGeometric]], [[CumLogistic]], [[CumNegativeBinomial]], [[CumProbDist]], [[CumStudentT]], [[CumTriangular]], [[CumUniform]], [[CumWeibull]].&lt;br /&gt;
* [[CumBernoulliInv]], [[CumBetaInv]], [[CumChiSquaredInv]], [[CumCumDistInv]], [[CumExponentialInv]], [[CumFDistInv]], [[CumGammaInv]], [[CumGeometricInv]], [[CumHyperGeometricInv]], [[CumLogisticInv]], [[CumNegativeBinomInv]], [[CumProbDistInv]], [[CumStudentTInv]], [[CumTriangularInv]], [[CumUniformInv]], [[CumWeibullInv]].&lt;br /&gt;
&lt;br /&gt;
=== New built-in functions ===&lt;br /&gt;
* The preceding section covered the many newly built-in analytic distribution functions.&lt;br /&gt;
&lt;br /&gt;
* The [[F-distribution]] was added as a built-in function (functions [[FDist]], [[DensFDist]], [[CumFDist]] and [[CumFDistInv]]).&lt;br /&gt;
&lt;br /&gt;
* [[ParseExpression]]: Returns a parse tree for an Analytica expression. When this is assigned to a global variable, the edit table cells are Analytica expressions. &lt;br /&gt;
&lt;br /&gt;
* [[MultiResult]](..) and [[MultiResult|_]](…) return multiple values. See [[#Returning multiple values from a UDF]].&lt;br /&gt;
&lt;br /&gt;
* [[ChangeArraySparsity]]: (experimental) converts between a sparse and standard multi-dimensional array representation.&lt;br /&gt;
&lt;br /&gt;
=== Enhancements to existing functions ===&lt;br /&gt;
* [[MakeJSON]] handles the encoding of multidimensional arrays better, with better control over nesting orders and ability to map some indexes to JSON objects and others to JSON arrays.&lt;br /&gt;
* Added the «expect» parameter to the [[IndexesOf]] function.&lt;br /&gt;
* Added the «first» parameter to [[SubIndex]], [[ArgMin]], [[ArgMax]], [[SubIndex]] and [[PositionInIndex]]&lt;br /&gt;
* [[CellOnClick]] allows local variables in expression and supplies several new local variables to the expression. See below.&lt;br /&gt;
&lt;br /&gt;
== File saving and loading ==&lt;br /&gt;
* The save author and save date are no longer written as part of the model file. These were inconvenient when tracking a model in a source control system (like git or svn) because they changed every time, and collided every time when merges were required. When a model file is read that does not have the save date, the SaveDate attribute is now set to the file system's last-modified time stamp.&lt;br /&gt;
&lt;br /&gt;
== Cell Formats ==&lt;br /&gt;
=== CellOnClick ===&lt;br /&gt;
* The «expr» inside a [[CellOnClick]] now has access to the coordinates of the cell that was clicked. From «expr», evaluating any of the index identifiers in a value context returns the coordinate of that index at the clicked cell. &lt;br /&gt;
* All the special local variables available in the [[Cell Format Expression]] attribute in general are now available inside «expr» when it is run, plus two more locals can be used: &lt;br /&gt;
** &amp;lt;code&amp;gt;TotalIndexes&amp;lt;/code&amp;gt;: A list of handles containing all indexes that are being summed over for the clicked cell.&lt;br /&gt;
** &amp;lt;code&amp;gt;comparisonColumn&amp;lt;/code&amp;gt;: When a cell is in a comparison variable column of a result table, this is the exogenous comparison variable or expression (i.e., it is either a [[handle]] or a parsed expression). If the click was not in a comparison column (the more normal case), this is null. &lt;br /&gt;
* Assignment can now occur directly from inside the «expr» of [[CellOnClick]]. Previously, you had to do it from a [[UDF]].&lt;br /&gt;
* When a cell contains a [[handle]] or [[reference]], the default behavior is to hyperlink when the user double clicks. But a [[CellOnClick]] handler overrides that. Now if the [[CellOnClick]] returns false (0), the default behavior will (also) execute.&lt;br /&gt;
&lt;br /&gt;
== Clipboard ==&lt;br /&gt;
* Paste XML Spreadsheet format&lt;br /&gt;
** Copy/paste from Excel to Analytica or from Analytica to Excel is as faithful as possible to data types and what you see is what you get&lt;br /&gt;
** Copy/paste from one instance of Analytica to another instance is similarly faithful&lt;br /&gt;
** Paste special offers XML Spreadsheet format as the default option&lt;br /&gt;
** Paste special unlinked supports user choice of clipboard format used&lt;br /&gt;
** XML Spreadsheet format offers special support for row headers and column headers on copy/paste from Analytica to Analytica&lt;br /&gt;
&lt;br /&gt;
== General GUI ==&lt;br /&gt;
* Several enhancements to the [[Indexes dialog]] make it easier to select indexes when the list is very long.&lt;br /&gt;
** The dialog is larger, so indexes more are visible in the panes.&lt;br /&gt;
** You can now view index identifiers by pressing Ctrl+Y&lt;br /&gt;
** You can type the first few characters to quickly jump to the index that starts with those characters.&lt;br /&gt;
** The Up, Down, Page Up, and Page Down keyboard can be used to scroll the index pane.&lt;br /&gt;
** The Left or Right keys can be used to move the selected index or indexes from one pane to the other (same as pressing the &amp;gt;&amp;gt; or &amp;lt;&amp;lt; button).&lt;br /&gt;
** Use the mouse wheel to scroll the Indexes pane.&lt;br /&gt;
* More recent files recorded by default (was 6. Now 11).&lt;br /&gt;
* Added the '''Remove quotes''' option for lists&lt;br /&gt;
* Added the '''Remove quotes''' and '''Add quotes''' dropdown menu options for description and definition fields in object windows&lt;br /&gt;
** These operations support undo and redo&lt;br /&gt;
** These operations are performed in the selected area in these input windows only&lt;br /&gt;
** '''Add quotes''' is useful for the definition field when a paste operation puts data there that is meant to be a string but does not initially have quotes, escaping internal quotes as part of the operation&lt;br /&gt;
* '''Comparison Tolerance''' appears on the Definition menu. &lt;br /&gt;
* Undo for&lt;br /&gt;
** Uncertainty options... changes&lt;br /&gt;
* The preferred declaration constructs (e.g., Local..Do) appear on Definition menu, and not deprecated ones (e.g., Var..Do).&lt;br /&gt;
* When you exceed the number of characters allowed in the identifier or units field, it now displays the error in a bubble instead of a primitive model alert dialog.&lt;br /&gt;
::[[image:too_many_characters_bubble.png]]&lt;br /&gt;
&lt;br /&gt;
== Optimizer ==&lt;br /&gt;
* The add-on OptQuest engine is now available from Analytica 64-bit. Previously this engine was only available in 32-bits.&lt;br /&gt;
&lt;br /&gt;
== Wiki ==&lt;br /&gt;
* Some pages of the wiki have a release bar at the top and display different content depending on which release number is selected. The release bar looks like this:&lt;br /&gt;
*::{{ReleaseBar}}&lt;br /&gt;
*:Links from Analytica into the wiki now include the release number in the URL, so that the Wiki can automatically select the same release number that you are using. Since this is new to 5.2, release 4.6, 5.0 or 5.1 won't auto-select the release, but it will enable future releases to show the correct version-specific pages. &lt;br /&gt;
&lt;br /&gt;
== ADE ==&lt;br /&gt;
* Changed the [[CATable::GraphWithStoredPivot]] property to default to true.&lt;br /&gt;
* Method for installation of ADE without running installer. Used to create a docker container image.&lt;br /&gt;
&lt;br /&gt;
== Licensing ==&lt;br /&gt;
* Fixed a bug where RLM Server name didn't stick in licensing dialog. This caused problems for users of floating licenses and required them to manually set a registry setting to get around it.&lt;br /&gt;
* Changed beta-build licensing. Formerly a separate beta testing license was required. Now any active subscription license (i.e., expiring 5.x license) is sufficient. Thus, we eliminated lots of complex code for automatically acquiring and updating beta test licenses during the beta testing period.&lt;br /&gt;
&lt;br /&gt;
== Typescript ==&lt;br /&gt;
* The Up and Down arrow keys recall history, like Ctrl+Up and Ctrl+Down already do.&lt;/div&gt;</summary>
		<author><name>Ldavidson</name></author>
	</entry>
	<entry>
		<id>https://docs.analytica.com/index.php?title=What%27s_new_in_Analytica_5.2%3F&amp;diff=52423</id>
		<title>What's new in Analytica 5.2?</title>
		<link rel="alternate" type="text/html" href="https://docs.analytica.com/index.php?title=What%27s_new_in_Analytica_5.2%3F&amp;diff=52423"/>
		<updated>2018-12-21T18:17:00Z</updated>

		<summary type="html">&lt;p&gt;Ldavidson: Added sub-bullets about XML Spreadsheet clipboard format&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The current release is [[Analytica 5.1]]. Analytica 5.2 is currently under development -- and so is this page. &lt;br /&gt;
&lt;br /&gt;
These are improvements in Analytica and ADE release 5.2. (As usual, we don't list bug fixes except the most notable cases.)&lt;br /&gt;
&lt;br /&gt;
== Graphing ==&lt;br /&gt;
Graphs have some new interactive manual scaling and a new polygon fill feature, as described below.&lt;br /&gt;
&lt;br /&gt;
=== Interactive zooming ===&lt;br /&gt;
* Drag the mouse horizontally to zoom to a manually-scaled x-axis interval:&lt;br /&gt;
::[[image:graph_zoom_horiz.png]] &amp;amp;rarr; [[image:graph_zoom_horiz_after.png]]&lt;br /&gt;
::Transparent blue selection rectangle appears while dragging. After drag, Y is still autoscaled, but now to the data in the selected range.&lt;br /&gt;
* Drag the mouse diagonally to zoom to manually-scaled intervals on both axes:&lt;br /&gt;
::[[image:graph_zoom_diag.png]] &amp;amp;rarr; [[image:graph_zoom_diag_after.png]]&lt;br /&gt;
* When you move the mouse over a zoomed graph, autoscale hover icon buttons appear. Click on one to auto-scale that axis.&lt;br /&gt;
::[[image:graph_zoom_autoscale.png]] &amp;amp;rarr; [[image:graph_zoom_autoscaley_after.png]]&lt;br /&gt;
::Clicked on the vertical axis autoscale hover icon. Horizontal axis is still manually scaled.&lt;br /&gt;
* Drag vertically to zoom to a manually-scaled y-axis interval.&lt;br /&gt;
::[[image:graph_zoom_vert.png]] &amp;amp;rarr; [[image:graph_zoom_vert_after.png]]&lt;br /&gt;
* Zooming has the same effect as changing the manual scale range in Graph Setup. In fact, it records your selected end points there.&lt;br /&gt;
::[[image:graph_zoom_graphsetup_after.png]]&lt;br /&gt;
&lt;br /&gt;
=== Key item visibility states ===&lt;br /&gt;
[[Analytica 5.1]] introduced a feature to toggle the visibility of individual curves on a graph by clicking on its corresponding key item. Analytica 5.2 includes some further enhancement to this popular feature.&lt;br /&gt;
&lt;br /&gt;
==== Turn on all, Turn off all ====&lt;br /&gt;
Right-click on a graph key and you'll see the options '''Turn on all key items''' and '''Turn off all key items'''. These can save you many clicks when there are a lot of key items and you want to turn almost all of them off.&lt;br /&gt;
&lt;br /&gt;
==== Toggle line, symbol visibility ====&lt;br /&gt;
&lt;br /&gt;
::[[image:Line and point graph.png]]&lt;br /&gt;
In the preceding graph, the points in a data set appear as symbols without any lines connecting them, and a best-fit line appears appears on the same graph without symbols. This is done by starting with a Line+Symbol plot style, like this:&lt;br /&gt;
:[[image:How to line and point graph.png]]&lt;br /&gt;
Notice that in the starting line+symbol plot, each key item has a line and a symbol. When you click on one of them multiple times in a row, the key item toggles from line+symbol &amp;amp;rarr; off &amp;amp;rarr; line-only &amp;amp;rarr; symbol-only &amp;amp;rarr; line+symbol. So with just a few clicks on the key items, you get to the line only and symbols only series on the same plot.&lt;br /&gt;
&lt;br /&gt;
When you have multiple keys, with the line, symbol or symbol size each depicting different information, each key toggles through three states: On &amp;amp;rarr; Off &amp;amp;rarr; Partial &amp;amp;rarr; On. In the full off state, the data is fully hidden -- so if you hide a line, the symbols for that curve are also hidden, or if you hide a symbol, the line segments to and from that symbol hide. When a item in a line key is partial, the curve's line isn't shown, but its symbols continue to show. When an item in a symbol key is partial, the line to that datum remains, but the symbol does not appear.  &lt;br /&gt;
&lt;br /&gt;
::[[image:graph_key_symbol_partial.png]]&lt;br /&gt;
&lt;br /&gt;
In the above graph, the 2 points corresponding to '''Least''' would appear at x=2 in the fully-on graph, but fit_err=Least is been clicked once, putting it into the off state. As a result, there is a gap in the lines at x=2. In the symbol size key (x cat), the x_cat=8 item is in the partial state. The points corresponding to x_cat=8 appear at x=8. In this case the lines pass through the points, but the symbols are hidden. &lt;br /&gt;
&lt;br /&gt;
When fit_graph=y in the line key is off, all the red &amp;quot;ink&amp;quot; on the graph disappears. But when it is in the partial state, the line disappears but the symbols continue to show, as illustrated here:&lt;br /&gt;
::[[image:graph_key_line_partial.png]]&lt;br /&gt;
&lt;br /&gt;
==== Save visibility states ====&lt;br /&gt;
Changes to key item visibility reset by default when you close and re-open a graph anew. If you want your current visibility state to be saved as the starting point next time the graph is opened, select '''Save key item visibilities''' from the right-mouse menu.&lt;br /&gt;
&lt;br /&gt;
=== Polygon fill plots ===&lt;br /&gt;
When you plot a curve in an X-Y plot, there is now a polygon fill option that fills the interior of the polygon(s). For example, starting with this data, already plotted as Latitude vs Longitude&lt;br /&gt;
::[[image:California_unfilled_plot.png]]&lt;br /&gt;
you can use the new Polygon fill type (the Fill type option is new).&lt;br /&gt;
::[[image:Graph_setup_polygon_filltype.png]]&lt;br /&gt;
The difference between alternate and solid arises when a curve crosses itself. In this example with a state outline, that doesn't happen so they are equivalent.  Polygon fill closes each curve segment (null data starts a new segment) and fills the interior.&lt;br /&gt;
::[[image:California_filled_plot.png]]&lt;br /&gt;
and viola!&lt;br /&gt;
::[[image:Red state blue state.png]]&lt;br /&gt;
&lt;br /&gt;
=== Other graphing ===&lt;br /&gt;
&lt;br /&gt;
* Bug fix impacting marginal abatement graphs&lt;br /&gt;
* Changing symbol size role less likely to swap other roles, less confusing&lt;br /&gt;
&lt;br /&gt;
== Expression language &amp;amp; Engine ==&lt;br /&gt;
&lt;br /&gt;
=== Declaring local identifiers ===&lt;br /&gt;
&lt;br /&gt;
==== Omission of initial value====&lt;br /&gt;
&lt;br /&gt;
When declaring a local, you can now omit its initial value, so that &lt;br /&gt;
:&amp;lt;code&amp;gt;[[Local]] x;&amp;lt;/code&amp;gt;&lt;br /&gt;
is equivalent to &lt;br /&gt;
:&amp;lt;code&amp;gt;[[Local]] x := Null&amp;lt;/code&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
==== Multiple locals in one declaration ====&lt;br /&gt;
&lt;br /&gt;
You can declare multiple local identifiers in the same Local declaration. For example,&lt;br /&gt;
:&amp;lt;code&amp;gt;Local a, b := 5, c[ J ], d[ ] := Va1;&amp;lt;/code&amp;gt;&lt;br /&gt;
This is then equivalent to four separate declarations as follows&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
:[[Local]] a:=[[Null]];&lt;br /&gt;
:[[Local]] b:=5;&lt;br /&gt;
:[[Local]] c[ J ] := [[Null]];&lt;br /&gt;
:[[Local]] d[ ] := Va1;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Capture of multiple return values ====&lt;br /&gt;
&lt;br /&gt;
Functions can now return multiple values, each with different dimensionality. This is covered below in [[#Multiple return values]]. These values can be captured by [[Local]] (or the other declaration constructs like [[For]], etc.) by placing the declared identifiers inside parentheses, as illustrated here:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;[[Local]] (u,w,v) := [[SingularValueDecomp]]( a, I, J, J2 );&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where the function, [[SingularValueDecomp]] returns three matrices, each with a different dimensionality. With dimensional restrictions, this could also be declared as&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;[[Local]] (u[I,J], w[J,J2], v[J,J2]) := [[SingularValueDecomp]]( a, I, J, J2 );&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that [[SingularValueDecomp]] is called a single time, and returns three separate values. This function, as well as [[EigenDecomp]], behave differently when multiple return values are captured compared to when only the main value is used, which is done for backward compatibility with their legacy behavior. Previously, the returned a data structure with 3 [[references]] to the 3 matricies, which required some work to unpack. They illustrate that the capability to return multiple values isn't entirely new, but is far more convenient. These two functions are the only functions that change their behavior. For all other functions, when only the main value is used, the secondary return values are simply dropped (and are usually not computed in the first place). For example, in addition to reading the contents of a file, you can also capture the file name selected by the user using&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;[[Local]] ( txt, filename ) := [[ReadTextFile]](&amp;quot;&amp;quot;);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
but you don't need to capture filename if you don't need it, and can simple use&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;[[Local]] txt := [[ReadTextFile]](&amp;quot;&amp;quot;);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Reduced keyword ====&lt;br /&gt;
&lt;br /&gt;
As with previous releases, you can declare the indexes that the value named by a local identifier is allowed to have using brackets, such as &lt;br /&gt;
:&amp;lt;code&amp;gt;[[Local]] x[I, J, K] := Z;&amp;lt;/code&amp;gt;&lt;br /&gt;
When declared in this fashion, and expressions you include in the body (i.e., the lexical scope of these local identifiers) can be treated as if it does not contain any indexes not listed. The new keyword &amp;quot;&amp;lt;code&amp;gt;reduced&amp;lt;/code&amp;gt;&amp;quot; also restricts the dimensionality of a local variable, but in a somewhat different way. The same qualifier exists for [[Function parameter qualifiers|function parameter declarations]] and in fact works in exactly the same way here.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;[[Local]] ( a[ ], b reduced ) := _( X, Y );&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Since &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; might need to be iterated over the indexes of &amp;lt;code&amp;gt;X&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;b&amp;lt;/code&amp;gt; will have the indexes of &amp;lt;code&amp;gt;Y&amp;lt;/code&amp;gt; that are not also indexes of &amp;lt;code&amp;gt;X&amp;lt;/code&amp;gt;. In addition, the slice of X or Y named by a or b is coordinated. When a names &amp;lt;code&amp;gt;X[J=3]&amp;lt;/code&amp;gt;, then &amp;lt;code&amp;gt;b&amp;lt;/code&amp;gt; also names &amp;lt;code&amp;gt;Y[J=3]&amp;lt;/code&amp;gt;.  This leads to some convenient new iteration constructs. For example, you may have seen expressions such as this one:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
:[[For]] n := @I Do (&lt;br /&gt;
::[[Local]] ii := I[@I=n]&lt;br /&gt;
::[[Local]] x_i := X[@I=n];&lt;br /&gt;
::…&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
the ensuing looped body code makes use of the index position (n), the index label (ii), and the array slice (x_i), and so it has to extract two of the items from the loop variable. This can now be condensed to a single looping structure,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
:[[For]] (n[], ii[], x_i reduced) := _(@I, I, X) Do ( …&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Note: In many cases, the word [[Local]] can be used in place of [[For]] here. Note that &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; names each position of &amp;lt;code&amp;gt;I&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ii&amp;lt;/code&amp;gt; names each label of &amp;lt;code&amp;gt;I&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;x_i&amp;lt;/code&amp;gt; names the slice of &amp;lt;code&amp;gt;X&amp;lt;/code&amp;gt; corresponding to &amp;lt;code&amp;gt;[@I=n]&amp;lt;/code&amp;gt;. This is similar to calling a function with &amp;lt;code&amp;gt;F(@I, I, X)&amp;lt;/code&amp;gt; with has Parameters declared as &lt;br /&gt;
:Function F(n,i : [] ; x_i : reduced)&lt;br /&gt;
&lt;br /&gt;
==== Iterating over repeated parameters (Local xi := repeated x Do) ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Preservation of local name instead of local1, local2 ====&lt;br /&gt;
&lt;br /&gt;
=== Multiple return values ===&lt;br /&gt;
&lt;br /&gt;
Functions can now return multiple values, each with potentially different indexes, not just a single value or array, as previously.  An expression calling the function can use only the first returned value, or it can use some or all of the vales.  Several built-in functions have been enhanced to return additional information in the second and third return values.&lt;br /&gt;
&lt;br /&gt;
==== Built-in functions that return multiple values ====&lt;br /&gt;
&lt;br /&gt;
These built-in functions read information from a file and return its contents in one way or other in the main value. Each has now been enhanced to return the file name that was opened as a second parameter. Since in each case, a user might potentially select a file from a file selector dialog, you would otherwise not knowing which file was actually read.  The primary return value is the same as in previous releases, the second return value is new.&lt;br /&gt;
&lt;br /&gt;
* [[ReadTextFile]]: Returns ( file_contents, filename )&lt;br /&gt;
* [[SpreadsheetOpen]]: Returns ( workbook, filename )&lt;br /&gt;
* [[ReadExportFile]]: Returns ( array, filename )&lt;br /&gt;
* [[ReadBinaryFile]]: Returns (date, filename)&lt;br /&gt;
* [[ReadImageFile]]: Returns (image, filename)&lt;br /&gt;
&lt;br /&gt;
TO DO: Look up -- do the Write functions return filenames?&lt;br /&gt;
&lt;br /&gt;
The function [[SingularValueDecomp]] computes three matrices, each with a different dimensionality. Formerly, there were returned as a vector of 3 [[reference]]s. You would then usually unpack this, extracting the three items. With the ability for it to return three return values, the call is more convenient, namely:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;(u, w, v) := [[SingularValueDecomp]]( a, I, J, J2)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
eliminating the ugly unpacking code. To ensure backward compatibility with code that used the 3-reference data structure, it is able to detect when you are capturing multiple return values and return the 3-reference structure when you are not.  &lt;br /&gt;
&lt;br /&gt;
A similar enhancement applies to the [[EigenDecomp]] function, which returns a vector of eigen values and 2-D matrix of eigen vectors. Formerly, these were bundled using a reference for the eigen vectors, but with multiple return values it is convenient to immediately separate these, e.g.,&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;(eigenVals, eigenVecs) := [[EigenDecomp]](a, I, J)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[EigenDecomp]] also retains its legacy behavior when you are not capturing multiple return values.&lt;br /&gt;
&lt;br /&gt;
==== Capturing multiple return values ====&lt;br /&gt;
When a function returns multiple return values, you have to capture these values. There are two ways of doing this: In a local declaration, or via the assignment operator (:=).&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;[[Local]]( x, y, z ) := FuncWithMultiple(  );&amp;lt;/code&amp;gt;&lt;br /&gt;
or&lt;br /&gt;
:&amp;lt;code&amp;gt;(a, b, c) := FuncWithMultiple( );&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
When assignment is used, each destination (a, b and c) can be anything that could appear on the left-hand side of an normal assignment operator. This includes local identifiers, global variables (in contexts where a side-effect is legal), a slice of a local variable, an attribute of an object, etc. &lt;br /&gt;
&lt;br /&gt;
Although I'm showing the local declaration example using [[Local..Do]], you can also use other local declaration constructs in the same way, including [[For]] and [[LocalAlias]], or the legacy [[Var..Do]], [[Using..Do]], [[MetaVar..Do]], etc. &lt;br /&gt;
&lt;br /&gt;
When you capture a return value that isn't actually returned by the function, it is equivalent to capturing null. For example:&lt;br /&gt;
:&amp;lt;code&amp;gt;( x,y ) := [[Sqrt]](5)&amp;lt;/code&amp;gt;&lt;br /&gt;
sets &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt; to 5 and &amp;lt;code&amp;gt;y&amp;lt;/code&amp;gt; to null.&lt;br /&gt;
&lt;br /&gt;
==== Returning multiple values from a UDF ====&lt;br /&gt;
To return multiple values from your own UDFs, simple return &lt;br /&gt;
:&amp;lt;code&amp;gt;[[MultiResult]]( v1, v2, v3, v4 )&amp;lt;/code&amp;gt;&lt;br /&gt;
where &amp;lt;code&amp;gt;v1, v2, …&amp;lt;/code&amp;gt; are the expressions whose result is to be returned. Be aware that any of these values that are not captured by the caller, the corresponding expression will not be evaluated. You can use that to your advantage by placing any time-consuming code not shared by v1 in the expression for v2, so that when the caller uses only v1, no wasted computation ensues. &lt;br /&gt;
&lt;br /&gt;
There is a synonymous syntax, &amp;lt;code&amp;gt;_( v1, v2, v3, v4 )&amp;lt;/code&amp;gt; that can be used. When returning values from a UDF, we feel that it clearer to call [[MultiResult]]. However, the underscore function is convenient when using a multiple assignment directly, such as &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;[[Local]] (key[], val[]) := _( dict.Key, dict );&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This example combines &amp;lt;code&amp;gt;_( ) &amp;lt;/code&amp;gt; is combined with [[Repeated parameter forwarding]] to accomplish something that would have taken four lines of code otherwise.&lt;br /&gt;
:&amp;lt;code&amp;gt;[[Local]] (x,y,z) := _( ...[[ParseNumber]]( [[SplitText]]( &amp;quot;10, 20, 3&amp;quot;, &amp;quot;,&amp;quot; ) ) );&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Emergent iteration constructs ====&lt;br /&gt;
&lt;br /&gt;
Some new convenient forms of iteration constructs emerge from the introduction of multiple return values. For example, when iterating over an index, you can simultaneously grab the index position and the index labels in the loop declaration.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
:[[For]] ( pos, label ) := _( @J, J ) Do …&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A 1-D array with an index containing labels is called as associative array in other programming languages. The index values are the keys and the array values are the values. Your iteration can conveniently name both the current key and the current value.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
:[[For]] ( key[], val reduced ) := _( I, a ) Do …&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Assignment ===&lt;br /&gt;
* (Definition of X := array) -- setting cell expressions&lt;br /&gt;
* new ParseExpression() function&lt;br /&gt;
* Capturing multiple values&lt;br /&gt;
=== Multithreading ===&lt;br /&gt;
Added finer-grained control over which multi-threaded algorithms are enabled or disabled.  This is so that if you encounter a multi-threading-related problem with one particular algorithm, you can disable it without having to sacrifice all multi-threading.&lt;br /&gt;
&lt;br /&gt;
* [[DisableMultithreaded]]: New system variable that contains the flags.&lt;br /&gt;
* [[SetEvaluationFlag]]('multithreaded'): Function for turning on or off only within one expression.&lt;br /&gt;
&lt;br /&gt;
=== Experimental ===&lt;br /&gt;
You should not rely on experimental features while they are still experimental. They are subject to change or even cancellation in future releases, and are less thoroughly tested.&lt;br /&gt;
&lt;br /&gt;
==== Sparse arrays ====&lt;br /&gt;
Analytica has long had support for a certain form of sparsity, which we call constant sparsity (or just const sparsity for short). When the values along a slice of an array don't vary (are constant), Analytica is often able to store the single value only, and also avoid an iteration during computations. However, many sparse arrays can't take advantage of const sparseness. We've been experimenting with fully sparse multi-dimensional arrays. With these, it is possible to have multidimensional cubes with large numbers of dimensions and immense numbers of distinct coordinates as long as the number of cell with actual data is relatively small. Such sparsity is often seen in [[MdTable]] relational-to-array transformations. &lt;br /&gt;
&lt;br /&gt;
You can use the same Analytica operators and functions on sparse arrays as you would on any other Analytica arrays, but when possible, Analytica will attempt to use sparse algorithms to process the only values that are present and produce a sparse array, maintaining fast and low-memory computation. With this we have been able to demonstrate some real-life computations on sparse BI hypercubes that were not previously possible (and which are not realistically possible with a relational table representation). &lt;br /&gt;
&lt;br /&gt;
Some operations produce non-sparse results, even when applied to sparse arrays. [[Cumulate]] applied to an array with a non-zero default value is one obvious example. This is a serious &amp;quot;gotcha&amp;quot;, because if you are manipulating arrays with quadrillions of cells, one application of a function like that and you've just created a multi-petabyte array.&lt;br /&gt;
&lt;br /&gt;
At present, only a subset of operations and functions that could have sparse-array-aware algorithms actually do; however, many of the ones that are present are the most common operations. But this incompleteness is one reason this is classified as an experimental feature.&lt;br /&gt;
&lt;br /&gt;
In addition, the sparse algorithms are at this point quite new and not battle tested, so it not unlikely that bugs may be lurking, including bugs that might produce incorrect results. One of the reasons we are including it as an experimental feature is to promote testing of the algorithms.&lt;br /&gt;
&lt;br /&gt;
===== Using sparse arrays =====&lt;br /&gt;
The use of sparse arrays is enabled by setting the system variable [[EnableSparse]] to 1.  Or, you can enable the production of a sparse array from a specific expression by using &amp;lt;code&amp;gt;[[SetEvaluationFlag]]('sparse', true', «expr»)&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[MdTable]] is able to return a sparse array from a relational table, provided [[EnableSparse]] is set, or the sparse evaluation flag is on, or you set the optional «sparse» parameter to true. From there, the sparseness will propagate as you slice, add, and so on. &lt;br /&gt;
&lt;br /&gt;
Expressions like &amp;lt;code&amp;gt;a = b&amp;lt;/code&amp;gt; are often sparse, but will only return a sparse result when the evaluation context allows it. When these produce dense arrays, and those dense arrays are combined with sparse arrays, a lot of sparsity is often lost.&lt;br /&gt;
&lt;br /&gt;
== Built-in functions ==&lt;br /&gt;
=== with Multiple return values ===&lt;br /&gt;
The following built-in functions now return multiple results: [[ReadTextFile]], [[ReadImageFile]], [[ReadBinaryFile]], [[SpreadsheetOpen]], [[ReadExportFile]], [[SingularValueDecomp]], [[EigenDecomp]].&lt;br /&gt;
&lt;br /&gt;
See [[#Multiple return values]] above.&lt;br /&gt;
&lt;br /&gt;
=== New optional parameters to existing functions ===&lt;br /&gt;
* Added an optional parameter named «initially» parameter to [[ComputedBy]]. This provides an initial value for the parent variable, and retains the value assigned by the called in the definition. (But only when the value is a simple atom). For example, if you want to remember what file a user selected, you could use:&amp;lt;code&amp;gt;&lt;br /&gt;
 Variable filename := [[ComputedBy]](wb,&amp;quot;&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
 Variable wb := &lt;br /&gt;
      Local tmp; &lt;br /&gt;
      (tmp,filename) := [[SpreadsheetOpen]](filename); &lt;br /&gt;
      tmp&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Added an optional Boolean parameter, «w1D» parameter to [[SingularValueDecomp]]. When false or omitted, it the resulting W is a square diagonal matrix. When set to true, the returned W is a vector (the diagonal).&lt;br /&gt;
&lt;br /&gt;
* Added an optional «except» parameter to [[IndexesOf]], which accepts any number of index identifiers. For example, the following sums over every index of array A  except for &amp;lt;code&amp;gt;I&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;J&amp;lt;/code&amp;gt;.&lt;br /&gt;
:::&amp;lt;code&amp;gt;[[Sum]]( A, …[[IndexesOf]](A, except:I,J) )&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Added a «first» parameter to [[ArgMin]], [[Argmax]], [[SubIndex]], and [[PositionInIndex]]. When omitted or false, in the event of a tie these return the ''last'' occurrence. When set to true, they return the position of the first occurrence of the tie.&lt;br /&gt;
&lt;br /&gt;
::In addition, it was previously less obvious which tie was identified by [[ArgMin]] or [[Argmax]] in the multi-dimensional case. Now it is the first or last occurrence in the natural ordering of the supplied index parameters.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== For sparse arrays ====&lt;br /&gt;
* Added an optional boolean parameter «sparse» to [[MdTable]]. Experimental. See [[#Sparse arrays]].&lt;br /&gt;
* The optional Boolean «sparseCount» parameter to [[Size]]. When true, counts the actual number of values (including default values) in the sparse array.&lt;br /&gt;
&lt;br /&gt;
=== Analytic distribution functions ===&lt;br /&gt;
The analytic probability functions for all built-in distributions are now also built-in functions. For example, corresponding to the [[Triangular]] distribution function there are also the [[DensTriangular]], [[CumTriangular]] and [[CumTriangularInv]] functions. Previously, to use these functions you have to add the [[Distribution Densities Library]] to your model.&lt;br /&gt;
&lt;br /&gt;
The general naming pattern for these functions is (where «dist» is the name of the distribution):&lt;br /&gt;
* &amp;lt;code&amp;gt;Dens«dist»&amp;lt;/code&amp;gt;: The ''probability density function'' for a continuous distribution. Returns the density at «x».&lt;br /&gt;
* &amp;lt;code&amp;gt;Prob«dist»&amp;lt;/code&amp;gt;: The ''discrete probability function'' for a discrete distribution. Returns the probability of «x».&lt;br /&gt;
* &amp;lt;code&amp;gt;Cum«dist»&amp;lt;/code&amp;gt;: The cumulative probability function, also known as the ''probability function'' and ''cumulative density function''. Returns the probability of being less than or equal to «x».&lt;br /&gt;
*&amp;lt;code&amp;gt;Cum«dist»Inv&amp;lt;/code&amp;gt;: The inverse cumulative probability function, also called the ''quantile function''. Returns the «p»th fractile/percentile/quartile.&lt;br /&gt;
&lt;br /&gt;
A few of these analytic functions were already built in previously, but all of the following were added:&lt;br /&gt;
* [[DensBeta]], [[DensChiSquared]], [[DensCumDist]], [[DensExponential]], [[DensFDist]], [[DensGamma]], [[DensLogistic]], [[DensProbDist]], [[DensStudentT]], [[DensTriangular]], [[DensWeibull]].&lt;br /&gt;
* [[ProbBernoulli]], [[ProbBinomial]], [[ProbGeometric]], [[ProbHyperGeometric]], [[ProbNegativeBinomial]], [[ProbPoisson]], [[ProbUniform]]&lt;br /&gt;
* [[CumBernoulli]], [[CumBeta]], [[CumChiSquared]], [[CumCumDist]], [[CumExponential]], [[CumFDist]], [[CumGamma]], [[CumGeometric]], [[CumHyperGeometric]], [[CumLogistic]], [[CumNegativeBinomial]], [[CumProbDist]], [[CumStudentT]], [[CumTriangular]], [[CumUniform]], [[CumWeibull]].&lt;br /&gt;
* [[CumBernoulliInv]], [[CumBetaInv]], [[CumChiSquaredInv]], [[CumCumDistInv]], [[CumExponentialInv]], [[CumFDistInv]], [[CumGammaInv]], [[CumGeometricInv]], [[CumHyperGeometricInv]], [[CumLogisticInv]], [[CumNegativeBinomInv]], [[CumProbDistInv]], [[CumStudentTInv]], [[CumTriangularInv]], [[CumUniformInv]], [[CumWeibullInv]].&lt;br /&gt;
&lt;br /&gt;
=== New built-in functions ===&lt;br /&gt;
* The preceding section covered the many newly built-in analytic distribution functions.&lt;br /&gt;
&lt;br /&gt;
* The [[F-distribution]] was added as a built-in function (functions [[FDist]], [[DensFDist]], [[CumFDist]] and [[CumFDistInv]]).&lt;br /&gt;
&lt;br /&gt;
* [[ParseExpression]]: Returns a parse tree for an Analytica expression. When this is assigned to a global variable, the edit table cells are Analytica expressions. &lt;br /&gt;
&lt;br /&gt;
* [[MultiResult]](..) and [[MultiResult|_]](…) return multiple values. See [[#Returning multiple values from a UDF]].&lt;br /&gt;
&lt;br /&gt;
* [[ChangeArraySparsity]]: (experimental) converts between a sparse and standard multi-dimensional array representation.&lt;br /&gt;
&lt;br /&gt;
=== Enhancements to existing functions ===&lt;br /&gt;
* [[MakeJSON]] handles the encoding of multidimensional arrays better, with better control over nesting orders and ability to map some indexes to JSON objects and others to JSON arrays.&lt;br /&gt;
* Added the «expect» parameter to the [[IndexesOf]] function.&lt;br /&gt;
* Added the «first» parameter to [[SubIndex]], [[ArgMin]], [[ArgMax]], [[SubIndex]] and [[PositionInIndex]]&lt;br /&gt;
* [[CellOnClick]] allows local variables in expression and supplies several new local variables to the expression. See below.&lt;br /&gt;
&lt;br /&gt;
== File saving and loading ==&lt;br /&gt;
* The save author and save date are no longer written as part of the model file. These were inconvenient when tracking a model in a source control system (like git or svn) because they changed every time, and collided every time when merges were required. When a model file is read that does not have the save date, the SaveDate attribute is now set to the file system's last-modified time stamp.&lt;br /&gt;
&lt;br /&gt;
== Cell Formats ==&lt;br /&gt;
=== CellOnClick ===&lt;br /&gt;
* The «expr» inside a [[CellOnClick]] now has access to the coordinates of the cell that was clicked. From «expr», evaluating any of the index identifiers in a value context returns the coordinate of that index at the clicked cell. &lt;br /&gt;
* All the special local variables available in the [[Cell Format Expression]] attribute in general are now available inside «expr» when it is run, plus two more locals can be used: &lt;br /&gt;
** &amp;lt;code&amp;gt;TotalIndexes&amp;lt;/code&amp;gt;: A list of handles containing all indexes that are being summed over for the clicked cell.&lt;br /&gt;
** &amp;lt;code&amp;gt;comparisonColumn&amp;lt;/code&amp;gt;: When a cell is in a comparison variable column of a result table, this is the exogenous comparison variable or expression (i.e., it is either a [[handle]] or a parsed expression). If the click was not in a comparison column (the more normal case), this is null. &lt;br /&gt;
* Assignment can now occur directly from inside the «expr» of [[CellOnClick]]. Previously, you had to do it from a [[UDF]].&lt;br /&gt;
* When a cell contains a [[handle]] or [[reference]], the default behavior is to hyperlink when the user double clicks. But a [[CellOnClick]] handler overrides that. Now if the [[CellOnClick]] returns false (0), the default behavior will (also) execute.&lt;br /&gt;
&lt;br /&gt;
== Clipboard ==&lt;br /&gt;
* Paste XML Spreadsheet format&lt;br /&gt;
** Copy/paste from Excel to Analytica or from Analytica to Excel is as faithful as possible to data types and what you see is what you get&lt;br /&gt;
** Copy/paste from one instance of Analytica to another instance is similarly faithful&lt;br /&gt;
** Paste special offers XML Spreadsheet format as the default option&lt;br /&gt;
** Paste special unlinked supports user choice of clipboard format used&lt;br /&gt;
** XML Spreadsheet format offers special support for row headers and column headers on copy/paste from Analytica to Analytica&lt;br /&gt;
&lt;br /&gt;
== General GUI ==&lt;br /&gt;
* Several enhancements to the [[Indexes dialog]] make it easier to select indexes when the list is very long.&lt;br /&gt;
** The dialog is larger, so indexes more are visible in the panes.&lt;br /&gt;
** You can now view index identifiers by pressing Ctrl+Y&lt;br /&gt;
** You can type the first few characters to quickly jump to the index that starts with those characters.&lt;br /&gt;
** The Up, Down, Page Up, and Page Down keyboard can be used to scroll the index pane.&lt;br /&gt;
** The Left or Right keys can be used to move the selected index or indexes from one pane to the other (same as pressing the &amp;gt;&amp;gt; or &amp;lt;&amp;lt; button).&lt;br /&gt;
** Use the mouse wheel to scroll the Indexes pane.&lt;br /&gt;
* More recent files recorded by default (was 6. Now 11).&lt;br /&gt;
* Added the '''Remove quotes''' option for lists&lt;br /&gt;
* '''Comparison Tolerance''' appears on the Definition menu. &lt;br /&gt;
* Undo for&lt;br /&gt;
** Uncertainty options... changes&lt;br /&gt;
* The preferred declaration constructs (e.g., Local..Do) appear on Definition menu, and not deprecated ones (e.g., Var..Do).&lt;br /&gt;
* When you exceed the number of characters allowed in the identifier or units field, it now displays the error in a bubble instead of a primitive model alert dialog.&lt;br /&gt;
::[[image:too_many_characters_bubble.png]]&lt;br /&gt;
&lt;br /&gt;
== Optimizer ==&lt;br /&gt;
* The add-on OptQuest engine is now available from Analytica 64-bit. Previously this engine was only available in 32-bits.&lt;br /&gt;
&lt;br /&gt;
== Wiki ==&lt;br /&gt;
* Some pages of the wiki have a release bar at the top and display different content depending on which release number is selected. The release bar looks like this:&lt;br /&gt;
*::{{ReleaseBar}}&lt;br /&gt;
*:Links from Analytica into the wiki now include the release number in the URL, so that the Wiki can automatically select the same release number that you are using. Since this is new to 5.2, release 4.6, 5.0 or 5.1 won't auto-select the release, but it will enable future releases to show the correct version-specific pages. &lt;br /&gt;
&lt;br /&gt;
== ADE ==&lt;br /&gt;
* Changed the [[CATable::GraphWithStoredPivot]] property to default to true.&lt;br /&gt;
* Method for installation of ADE without running installer. Used to create a docker container image.&lt;br /&gt;
&lt;br /&gt;
== Licensing ==&lt;br /&gt;
* Fixed a bug where RLM Server name didn't stick in licensing dialog. This caused problems for users of floating licenses and required them to manually set a registry setting to get around it.&lt;br /&gt;
* Changed beta-build licensing. Formerly a separate beta testing license was required. Now any active subscription license (i.e., expiring 5.x license) is sufficient. Thus, we eliminated lots of complex code for automatically acquiring and updating beta test licenses during the beta testing period.&lt;br /&gt;
&lt;br /&gt;
== Typescript ==&lt;br /&gt;
* The Up and Down arrow keys recall history, like Ctrl+Up and Ctrl+Down already do.&lt;/div&gt;</summary>
		<author><name>Ldavidson</name></author>
	</entry>
</feed>