 <?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=Mhenrion</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=Mhenrion"/>
	<link rel="alternate" type="text/html" href="https://docs.analytica.com/index.php/Special:Contributions/Mhenrion"/>
	<updated>2026-07-21T05:00:35Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.35.9</generator>
	<entry>
		<id>https://docs.analytica.com/index.php?title=What%27s_new_in_Analytica_7.1%3F&amp;diff=64073</id>
		<title>What's new in Analytica 7.1?</title>
		<link rel="alternate" type="text/html" href="https://docs.analytica.com/index.php?title=What%27s_new_in_Analytica_7.1%3F&amp;diff=64073"/>
		<updated>2026-07-09T16:40:35Z</updated>

		<summary type="html">&lt;p&gt;Mhenrion: /* Assista */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; &amp;lt;!--Analytica 7.1 is currently under development, and will be the next future release of Analytica. The current official release is [[Analytica 7.0]]. This page is under construction, and will list enhancements that are new to Analytica or ADE 7.1.--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Analytica release 7.1 is currently in early [[Beta Tester Page|Beta Testing]].  If have have a paid desktop Analytica subscription, we encourage you to try it out from the [[Beta Tester Page]].&lt;br /&gt;
&lt;br /&gt;
== Highlights of Analytica 7.1 ==&lt;br /&gt;
&lt;br /&gt;
'''[[#Assista|Assista]]:''' By far the most important visible improvement is in [[#Assista|Assista]], Analytica's A.I. assistant.  When first released in Analytica 6.5, Assista was already quite useful for explaining Analytica features, describing and documenting models, and building models, but it was a bit unreliable in Analytica syntax and arranging influence diagrams.  We think you will find that the latest Assista is so much improved, including writing Analytica Definitions and drawing influence diagrams. You may start to use chatting with Assista as the primary way you interact with Analytica. &lt;br /&gt;
[[File:Assista What kinds of things can you do.png|alt=Assista dialog screen answering &amp;quot;What kinds of things can you do?&amp;quot;|thumb|600x600px]]&lt;br /&gt;
Other improvements include faster response time, better look and feel, a trace of its thinking, the ability to save and use conversations from previous sessions, ingesting files to provide information, including txt, pdf, csv, xlsx; understanding images and diagrams; a set of skills that you can extend and customize, and more. &lt;br /&gt;
&lt;br /&gt;
'''[[#Engine|Performance]]:'''  Large models start up much faster using multiple processes to parse the definitions. Arrays now use a ''tensor'' representation, similar to AI frameworks like PyTorch and TensorFlow, but with Index labels that support &amp;quot;Intelligent Arrays&amp;quot;. This internal improvement isn't noticeable to users -- but enables major future performance improvements.&lt;br /&gt;
&lt;br /&gt;
'''[[#Spreadsheets|CSV and spreadsheet files]] :'''  You can now import [[#CSV files|CSV files]] simply by dragging them into an diagram or in a command line when you start Analytica. You can create a new [[#spreadsheets |spreadsheet]]  with and add or remove sheets from it.&lt;br /&gt;
&lt;br /&gt;
'''[[#Spanish|Espagnol]]:'''  The user interface now supports Spanish -- with other languages in the future. Assista already supports most languages, and explains features (translating docs) in your language.&lt;br /&gt;
&lt;br /&gt;
== Assista ==&lt;br /&gt;
[[Assista]] is an AI collaborator in Analytica, greatly improved in this release:&lt;br /&gt;
* The '''chat window''' s now a top-level window at the same level as Analytica's main application window.&lt;br /&gt;
** Click the microphone button if you want to speak your request. Click it again when you're done.&lt;br /&gt;
** You can '''move the chat window''' to another location on the screen or even a different screen, to make best user of screen space.&lt;br /&gt;
** Selected objects remain visually selected in the main window as you type into Assista.&lt;br /&gt;
** The window is '''faster and more responsive''', with a new look and feel and clearer formatting of responses.&lt;br /&gt;
** You can '''highlight, drag, and copy any text''' to paste elsewhere.&lt;br /&gt;
** It  displays a stream of &amp;quot;thoughts&amp;quot; while processing your request giving you a peek into what it is doing.&lt;br /&gt;
* On the '''backend,''' Assista has:&lt;br /&gt;
** A new '''processing pipeline''' enabling  faster response and also enabling it work longer on harder tasks. &lt;br /&gt;
** An extensible set of '''competencies (skills)''', including structuring decision models, drawing influence diagrams, designing user interfaces, Analytica syntax, and more.&lt;br /&gt;
** You can create and expose [[Assista_-_Analytica_AI_Assistant/Custom_user_skills_for_Assista|your own custom skills]] to expand capabilities, or ask it to create new skills for you.&lt;br /&gt;
** It '''saves dialogs''', keyed to your model. You can resume a previous session for that model from a dropdown in the UI.&lt;br /&gt;
* Assist can now:&lt;br /&gt;
** '''Ingest documents''' (&amp;lt;code&amp;gt;*.txt, *.pdf, *.md, *.docx, *.xlsx, *.xlsm&amp;lt;/code&amp;gt;) or URLs into the chat using a menu in the Request box, or by dragging and dropping files into the window.  Assista &amp;quot;ingests&amp;quot; the files and can extract data from a doc or image, adding tables to your model, translate a spreadsheet into Analytica, or even implement a model described in the article.&lt;br /&gt;
** ''' &amp;quot;See&amp;quot; images''' in your model -- pictures in nodes, images in table cells, and diagram or graph screenshots.&lt;br /&gt;
** Converse in most common '''languages.''' In Spanish, it can provide UI instructions referring to the Spanish-language UI elements.&lt;br /&gt;
** '''Explain its reasoning''' in previous requests and expand on ideas .&lt;br /&gt;
** '''Personalize tone''', style, level of verbosity and provide custom instructions. To do this, click on the icon in the top-left corner of the Assista window and select Personization.&lt;br /&gt;
** '''Generate reports''' as a downloadable PDF or Word document, which can contain tables, graphs or other images from your model and formatted equations.&lt;br /&gt;
&lt;br /&gt;
== Multi-linguality: Spanish UI ==&lt;br /&gt;
Analytica now comes with a Spanish-language UI, in which its menus, dialogs, error messages and built-in function descriptions are all in Spanish. Also its installer runs with a Spanish-language UI when you are in a Spanish-language region.  Spanish is the default when you are in a Spanish-language region. &lt;br /&gt;
&lt;br /&gt;
You can override the default language by launching Analytica as:&lt;br /&gt;
* &amp;lt;code&amp;gt;Analytica.exe /lang:es&amp;lt;/code&amp;gt;&lt;br /&gt;
*: or&lt;br /&gt;
* &amp;lt;code&amp;gt;Analytica.exe /lang:en&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can also set the &amp;lt;code&amp;gt;Language&amp;lt;/code&amp;gt; registry setting in the &amp;lt;code&amp;gt;&amp;quot;HKCU/Software/Lumina Decision Systems/Analytica&amp;quot;&amp;lt;/code&amp;gt; hive to REG_SZ &amp;lt;code&amp;gt;&amp;quot;en&amp;quot;&amp;lt;/code&amp;gt; on &amp;lt;code&amp;gt;&amp;quot;es&amp;quot;&amp;lt;/code&amp;gt; for your default if different from your windows region setting.&lt;br /&gt;
&lt;br /&gt;
Some of you may ask &amp;quot;what about my language?&amp;quot;. Stay tuned (and let us know there is a demand for your language). Once our AI translation pipeline is solid, it shouldn't be too hard for us to add more.&lt;br /&gt;
&lt;br /&gt;
== Window appearance ==&lt;br /&gt;
The appearance of the chrome around child MDI windows (aka the &amp;quot;non-client area&amp;quot;) has been changed to more closely match the Windows 11 style of windows -- i.e., thin (1 pixel) borders, rounded corners at the top, white title bar, very plain (text-like) button images in the toolbar.&lt;br /&gt;
&lt;br /&gt;
== CSV files ==&lt;br /&gt;
There are now a few additional ways to open CSV files in Analytica:&lt;br /&gt;
* On the command line: &amp;lt;code&amp;gt;Analytica.exe MyData.csv&amp;lt;/code&amp;gt;&lt;br /&gt;
* Drag and drop a *.csv file onto the diagram (which behaves the same as using &amp;lt;code&amp;gt;File / Import...&amp;lt;/code&amp;gt; on the *.csv file). &lt;br /&gt;
&lt;br /&gt;
== Spreadsheets ==&lt;br /&gt;
* &amp;lt;code&amp;gt;[[SpreadsheetOpen]](&amp;quot;new&amp;quot;)&amp;lt;/code&amp;gt; now creates a blank spreadsheet in memory. Works with both the Excel and LibXl backends.&lt;br /&gt;
* Prefacing a sheet name with + in the call to [[SpreadsheetSetCell]] or [[SpreadsheetSetRange]] will add a new sheet by that name to the workbook (as it applies the specified change to that new worksheet). Works with either backend.&lt;br /&gt;
* You can also now remove a sheet from a workbook using: &amp;lt;code&amp;gt;[[SpreadsheetSetCell]](wb, &amp;quot;-OldSheet&amp;quot;, col, row, Null)&amp;lt;/code&amp;gt;. The «col» and «row» parameters are required but ignored in this case.&lt;br /&gt;
&lt;br /&gt;
== Misc. User Interface ==&lt;br /&gt;
* The Node Icon editor (on the Diagram menu) is far more flexible. You can use it to edit arbitrary node images, with support for color and transparency.&lt;br /&gt;
* Added keyboard shortcuts for '''Set Node Style...''' and '''Set Diagram Style...'''&lt;br /&gt;
* There is a new option, '''Use as default arrow style''', on the right-mouse context menu for an influence diagram arrow. This sets the global arrow style default to match the selected arrow.&lt;br /&gt;
&lt;br /&gt;
== Built-in functions ==&lt;br /&gt;
* New options for [[GetProcessInfo]]: &amp;lt;code&amp;gt;&amp;quot;Number of monitors&amp;quot;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;quot;Current monitor rect&amp;quot;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;quot;Current monitor work rect&amp;quot;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;quot;Monitor «N» Rect&amp;quot;&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;&amp;quot;Monitor «N» work rect&amp;quot;&amp;lt;/code&amp;gt;.&lt;br /&gt;
* New optional parameter, «throwParsingErrors», to [[Evaluate]].&lt;br /&gt;
* [[ReadFromURL]] is a bit smarter about returning binary content (like &amp;lt;code&amp;gt;*.zip&amp;lt;/code&amp;gt; files) as a [[In-memory binary data terms|Binary Data Term]].&lt;br /&gt;
* [[MakeJSON]] will automatically encode an image in base64 JSON, and [[ParseJSON]] will automatically decode a base64 representation into an image. Also there is a new «maxCells» parameter that can be used to prevent giagantic arrays from being encoded (resulting in immensely long text).&lt;br /&gt;
* &amp;lt;code&amp;gt;[[GetProcessInfo]](&amp;quot;UI Language&amp;quot;)&amp;lt;/code&amp;gt; returns the UI language, either &amp;lt;code&amp;gt;&amp;quot;en&amp;quot;&amp;lt;/code&amp;gt; (for English) or &amp;lt;code&amp;gt;&amp;quot;es&amp;quot;&amp;lt;/code&amp;gt; for Spanish.&lt;br /&gt;
* &amp;lt;code&amp;gt;[[QualifiedName]]( obj, nsContext )&amp;lt;/code&amp;gt;: Returns the qualified identifier (as text) that uniquely identifies «obj» from the context of «nsContext». &lt;br /&gt;
* &amp;lt;code&amp;gt;[[Namespace]] of X&amp;lt;/code&amp;gt;: A new virtual attribute that returns the namespace of «X».&lt;br /&gt;
* [[Evaluate]] has a second return value that captures output to the typescript window (including stuff written by [[ConsolePrint]]) during the evaluation. It also has a new optional «ignoreAtFirstWarning» parameter that can be used in conjunction, capturing the first warning text in that second return value, not showing the return value to the user, and ignoring additional warnings during the duration of the Evaluate call (enables Assista to see the warnings).&lt;br /&gt;
* Added a syntax construct for [[Namespaces#Scoped_namespace_inclusion:_Using|Scoped namespace inclusion]] to bring a namespace into scope for only a localized expression or lexical block.&lt;br /&gt;
* File functions ([[ReadTextFile]], [[WriteTextFile]], [[ReadBinaryFile]], [[WriteBinaryFile]], [[ReadImageFile]] and [[WriteImageFile]]) have a new optional parameter, «extensionFilter», where you can specify which extension filters show up on a file selector dialog.&lt;br /&gt;
&lt;br /&gt;
== System variables ==&lt;br /&gt;
* SysVar [[Graph_ColorSequence]]: Replaces [[Graph_ColorSeq]] which is now deprecated. The new sysvar contains a list of color interer with one integer (of the form &amp;lt;code&amp;gt;0x00rrggbb&amp;lt;/code&amp;gt;) per color (the deprecated version used triples of numbers per color).&lt;br /&gt;
&lt;br /&gt;
== Engine ==&lt;br /&gt;
* After loading a large model, it parses expressions in parallel, using multiple threads/cores to parse different variables. On some computers on some models, this can dramatically speed up model load time.&lt;br /&gt;
* Color attributes use color integers for consistently (rather than the legacy number triples for R,G,B).&lt;br /&gt;
* You can use a localized namespace import (for a single expression or single lexical block) with the syntax&lt;br /&gt;
*:&amp;lt;code&amp;gt;[[Using..Do|Using]] NS;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Model loading ==&lt;br /&gt;
When opening a model file, the &amp;quot;checking&amp;quot; stage (when attributes are parsed) parses different expressions on different threads, resulting in substantially faster model load times for very large models.&lt;br /&gt;
&lt;br /&gt;
Note: In the event that this creates a problem with your specific model (maybe due to an as-yet-undiscovered multithreading bug), you can disable it for your model as follows:&lt;br /&gt;
# Temporarily turn off multithreading (Skip this step if you are able to load your model)&lt;br /&gt;
## New model&lt;br /&gt;
## &amp;lt;b&amp;gt;Definition menu / System variables / Settings / Maximum evaluation threads&amp;lt;/b&amp;gt;&lt;br /&gt;
## Set to 1  (and remember the previous value)&lt;br /&gt;
# Open your model&lt;br /&gt;
# &amp;lt;b&amp;gt;Definition menu / System variables / Settings / Disable Multithreaded Evaluations&amp;lt;/b&amp;gt;&lt;br /&gt;
# Press the &amp;lt;code&amp;gt;Edit Table&amp;lt;/code&amp;gt; button.&lt;br /&gt;
# Check the checkbox for &amp;lt;code&amp;gt;Parsing&amp;lt;/code&amp;gt;&lt;br /&gt;
# Save your model&lt;br /&gt;
# &amp;lt;b&amp;gt;Definition menu / System variables / Settings / Maximum evaluation threads&amp;lt;/b&amp;gt;&lt;br /&gt;
#: Restore the original value from Step 1&lt;br /&gt;
&lt;br /&gt;
== MCP server ==&lt;br /&gt;
* Added an ability to install multiple ADE-based Mcp servers that run different ADE releases. For example, you can install two MCP servers into Claude Code:&lt;br /&gt;
* ade-server: Runs ADE 7.1&lt;br /&gt;
* ade-server-70: Runs ADE 7.0&lt;br /&gt;
The information in the &amp;lt;code&amp;gt;«ADE install folder»\Examples\Mcp_server\README.txt&amp;lt;/code&amp;gt; file explain how (with enough info for Claude code to configure this for you).  &lt;br /&gt;
&lt;br /&gt;
With both installed, Claude Code (or other MCP-enabled AI agents) can compare results for the same model across different releases, etc.&lt;br /&gt;
&lt;br /&gt;
Side note: The Mcp server was added to ADE 7.0.&lt;br /&gt;
&lt;br /&gt;
== Internals ==&lt;br /&gt;
This release has undergone massive internal restructuring and refactorization. Ideally (i.e., in the absence of bugs) these changes won't change functionality, but may alter some aspects of behavior, hopefully for the better.&lt;br /&gt;
* Internal data structures use for multi-dimensional arrays has been changed. Possible impacts:&lt;br /&gt;
** Likely to remove the sensitivity to the &amp;quot;canonical order&amp;quot; of indexes on evaluation speed.&lt;br /&gt;
** May change relative evaluation speeds of various functions and operations.&lt;br /&gt;
* Added system modules/namespaces: &amp;lt;code&amp;gt;SysLib_Internal&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;SysLib_Experimental&amp;lt;/code&amp;gt;. Intended for Analytica-internal use.&lt;br /&gt;
*[[:Category:Cell format functions|Cell formatting functions]] (like [[CellSpan]], [[CellFill]], etc.) are now [[Struct]]s rather than functions. Does not impact usage, other that making it easier for code to traverse resulting data structures.&lt;br /&gt;
&lt;br /&gt;
== Discontinued... ==&lt;br /&gt;
* Plug-in functions. (An old hook that allows you to extend Analytica with compiled functions and UI elements written it C++. We are almost certain no one is using these hooks any more.)&lt;br /&gt;
* The sysvar [[Graph_ColorSeq]] is now deprecated (but works for both reading and setting to preserve backward compatibility). It has been replaced by the system variable [[Graph_ColorSequence]].&lt;br /&gt;
* The built-in (but undocumented, unsupported) &amp;lt;code&amp;gt;ifpos&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;if0&amp;lt;/code&amp;gt; functions were removed.&lt;br /&gt;
* The legacy (deprecated) syntax &amp;lt;code&amp;gt;Using temp:=... Do&amp;lt;/code&amp;gt; for declaring locals is no longer supported. Legacy models will have such definitions automatically rewritten to use [[Local..Do]] when you load them. [[Using..Do]] now has a different meaning, which is to provide a temporary namespace import.&lt;/div&gt;</summary>
		<author><name>Mhenrion</name></author>
	</entry>
	<entry>
		<id>https://docs.analytica.com/index.php?title=What%27s_new_in_Analytica_7.1%3F&amp;diff=64053</id>
		<title>What's new in Analytica 7.1?</title>
		<link rel="alternate" type="text/html" href="https://docs.analytica.com/index.php?title=What%27s_new_in_Analytica_7.1%3F&amp;diff=64053"/>
		<updated>2026-07-02T14:55:31Z</updated>

		<summary type="html">&lt;p&gt;Mhenrion: /* Highlights of Analytica 7.1 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; &amp;lt;!--Analytica 7.1 is currently under development, and will be the next future release of Analytica. The current official release is [[Analytica 7.0]]. This page is under construction, and will list enhancements that are new to Analytica or ADE 7.1.--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Analytica release 7.1 is currently in early [[Beta Tester Page|Beta Testing]].  If have have a paid desktop Analytica subscription, we encourage you to try it out from the [[Beta Tester Page]].&lt;br /&gt;
&lt;br /&gt;
== Highlights of Analytica 7.1 ==&lt;br /&gt;
&lt;br /&gt;
'''[[#Assista|Assista]]:''' By far the most important visible improvement is in [[#Assista|Assista]], Analytica's A.I. assistant.  When first released in Analytica 6.5, Assista was already quite useful for explaining Analytica features, describing and documenting models, and building models, but it was a bit unreliable in Analytica syntax and arranging influence diagrams.  We think you will find that the latest Assista is so much improved, including writing Analytica Definitions and drawing influence diagrams. You may start to use chatting with Assista as the primary way you interact with Analytica. &lt;br /&gt;
[[File:Assista What kinds of things can you do.png|alt=Assista dialog screen answering &amp;quot;What kinds of things can you do?&amp;quot;|thumb|600x600px]]&lt;br /&gt;
Other improvements include faster response time, better look and feel, a trace of its thinking, the ability to save and use conversations from previous sessions, ingesting files to provide information, including txt, pdf, csv, xlsx; understanding images and diagrams; a set of skills that you can extend and customize, and more. &lt;br /&gt;
&lt;br /&gt;
'''[[#Engine|Performance]]:'''  Large models start up much faster using multiple processes to parse the definitions. Arrays now use a ''tensor'' representation, similar to AI frameworks like PyTorch and TensorFlow, but with Index labels that support &amp;quot;Intelligent Arrays&amp;quot;. This internal improvement isn't noticeable to users -- but enables major future performance improvements.&lt;br /&gt;
&lt;br /&gt;
'''[[#Spreadsheets|CSV and spreadsheet files]] :'''  You can now import [[#CSV files|CSV files]] simply by dragging them into an diagram or in a command line when you start Analytica. You can create a new [[#spreadsheets |spreadsheet]]  with and add or remove sheets from it.&lt;br /&gt;
&lt;br /&gt;
'''[[#Spanish|Espagnol]]:'''  The user interface now supports Spanish -- with other languages in the future. Assista already supports most languages, and explains features (translating docs) in your language.&lt;br /&gt;
&lt;br /&gt;
== Assista ==&lt;br /&gt;
[[Assista]] is an AI collaborator in Analytica, greatly improved in this release:&lt;br /&gt;
* The '''chat window''' s now a top-level window at the same level as Analytica's main application window.&lt;br /&gt;
** You can '''move the chat window''' to another location on the screen or even a different screen, to make best user of screen space.&lt;br /&gt;
** Selected objects remain visually selected in the main window as you type into Assista.&lt;br /&gt;
** The window is '''faster and more responsive''', with a new look and feel and clearer formatting of responses.&lt;br /&gt;
** You can '''highlight, drag, and copy any text''' to paste elsewhere.&lt;br /&gt;
** It  displays a stream of &amp;quot;thoughts&amp;quot; while processing your request giving you a peek into what it is doing.&lt;br /&gt;
* On the '''backend,''' Assista has:&lt;br /&gt;
** A new '''processing pipeline''' enabling  faster response and also enabling it work longer on harder tasks. &lt;br /&gt;
** An extensible set of '''competencies (skills)''', including structuring decision models, drawing influence diagrams, designing user interfaces, Analytica syntax, and more.&lt;br /&gt;
** You can create and expose [[Assista_-_Analytica_AI_Assistant/Custom_user_skills_for_Assista|your own custom skills]] to expand capabilities, or ask it to create new skills for you.&lt;br /&gt;
** It '''saves dialogs''', keyed to your model. You can resume a previous session for that model from a dropdown in the UI.&lt;br /&gt;
* Assist can now:&lt;br /&gt;
** '''Ingest documents''' (&amp;lt;code&amp;gt;*.txt, *.pdf, *.md, *.docx, *.xlsx, *.xlsm&amp;lt;/code&amp;gt;) or URLs into the chat using a menu in the Request box, or by dragging and dropping files into the window.  Assista &amp;quot;ingests&amp;quot; the files and can extract data from a doc or image, adding tables to your model, translate a spreadsheet into Analytica, or even implement a model described in the article.&lt;br /&gt;
** ''' &amp;quot;See&amp;quot; images''' in your model -- pictures in nodes, images in table cells, and diagram or graph screenshots.&lt;br /&gt;
** Converse in most common '''languages.''' In Spanish, it can provide UI instructions referring to the Spanish-language UI elements.&lt;br /&gt;
** '''Explain its reasoning''' in previous requests and expand on ideas .&lt;br /&gt;
** '''Personalize tone''', style, level of verbosity and provide custom instructions. To do this, click on the icon in the top-left corner of the Assista window and select Personization.&lt;br /&gt;
** '''Generate reports''' as a downloadable PDF or Word document, which can contain tables, graphs or other images from your model and formatted equations.&lt;br /&gt;
&lt;br /&gt;
== Multi-linguality: Spanish UI ==&lt;br /&gt;
Analytica now comes with a Spanish-language UI, in which its menus, dialogs, error messages and built-in function descriptions are all in Spanish. Also its installer runs with a Spanish-language UI when you are in a Spanish-language region.  Spanish is the default when you are in a Spanish-language region. &lt;br /&gt;
&lt;br /&gt;
You can override the default language by launching Analytica as:&lt;br /&gt;
* &amp;lt;code&amp;gt;Analytica.exe /lang:es&amp;lt;/code&amp;gt;&lt;br /&gt;
*: or&lt;br /&gt;
* &amp;lt;code&amp;gt;Analytica.exe /lang:en&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can also set the &amp;lt;code&amp;gt;Language&amp;lt;/code&amp;gt; registry setting in the &amp;lt;code&amp;gt;&amp;quot;HKCU/Software/Lumina Decision Systems/Analytica&amp;quot;&amp;lt;/code&amp;gt; hive to REG_SZ &amp;lt;code&amp;gt;&amp;quot;en&amp;quot;&amp;lt;/code&amp;gt; on &amp;lt;code&amp;gt;&amp;quot;es&amp;quot;&amp;lt;/code&amp;gt; for your default if different from your windows region setting.&lt;br /&gt;
&lt;br /&gt;
Some of you may ask &amp;quot;what about my language?&amp;quot;. Stay tuned (and let us know there is a demand for your language). Once our AI translation pipeline is solid, it shouldn't be too hard for us to add more.&lt;br /&gt;
&lt;br /&gt;
== Window appearance ==&lt;br /&gt;
The appearance of the chrome around child MDI windows (aka the &amp;quot;non-client area&amp;quot;) has been changed to more closely match the Windows 11 style of windows -- i.e., thin (1 pixel) borders, rounded corners at the top, white title bar, very plain (text-like) button images in the toolbar.&lt;br /&gt;
&lt;br /&gt;
== CSV files ==&lt;br /&gt;
There are now a few additional ways to open CSV files in Analytica:&lt;br /&gt;
* On the command line: &amp;lt;code&amp;gt;Analytica.exe MyData.csv&amp;lt;/code&amp;gt;&lt;br /&gt;
* Drag and drop a *.csv file onto the diagram (which behaves the same as using &amp;lt;code&amp;gt;File / Import...&amp;lt;/code&amp;gt; on the *.csv file). &lt;br /&gt;
&lt;br /&gt;
== Spreadsheets ==&lt;br /&gt;
* &amp;lt;code&amp;gt;[[SpreadsheetOpen]](&amp;quot;new&amp;quot;)&amp;lt;/code&amp;gt; now creates a blank spreadsheet in memory. Works with both the Excel and LibXl backends.&lt;br /&gt;
* Prefacing a sheet name with + in the call to [[SpreadsheetSetCell]] or [[SpreadsheetSetRange]] will add a new sheet by that name to the workbook (as it applies the specified change to that new worksheet). Works with either backend.&lt;br /&gt;
* You can also now remove a sheet from a workbook using: &amp;lt;code&amp;gt;[[SpreadsheetSetCell]](wb, &amp;quot;-OldSheet&amp;quot;, col, row, Null)&amp;lt;/code&amp;gt;. The «col» and «row» parameters are required but ignored in this case.&lt;br /&gt;
&lt;br /&gt;
== Misc. User Interface ==&lt;br /&gt;
* The Node Icon editor (on the Diagram menu) is far more flexible. You can use it to edit arbitrary node images, with support for color and transparency.&lt;br /&gt;
* Added keyboard shortcuts for '''Set Node Style...''' and '''Set Diagram Style...'''&lt;br /&gt;
* There is a new option, '''Use as default arrow style''', on the right-mouse context menu for an influence diagram arrow. This sets the global arrow style default to match the selected arrow.&lt;br /&gt;
&lt;br /&gt;
== Built-in functions ==&lt;br /&gt;
* New options for [[GetProcessInfo]]: &amp;lt;code&amp;gt;&amp;quot;Number of monitors&amp;quot;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;quot;Current monitor rect&amp;quot;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;quot;Current monitor work rect&amp;quot;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;quot;Monitor «N» Rect&amp;quot;&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;&amp;quot;Monitor «N» work rect&amp;quot;&amp;lt;/code&amp;gt;.&lt;br /&gt;
* New optional parameter, «throwParsingErrors», to [[Evaluate]].&lt;br /&gt;
* [[ReadFromURL]] is a bit smarter about returning binary content (like &amp;lt;code&amp;gt;*.zip&amp;lt;/code&amp;gt; files) as a [[In-memory binary data terms|Binary Data Term]].&lt;br /&gt;
* [[MakeJSON]] will automatically encode an image in base64 JSON, and [[ParseJSON]] will automatically decode a base64 representation into an image. Also there is a new «maxCells» parameter that can be used to prevent giagantic arrays from being encoded (resulting in immensely long text).&lt;br /&gt;
* &amp;lt;code&amp;gt;[[GetProcessInfo]](&amp;quot;UI Language&amp;quot;)&amp;lt;/code&amp;gt; returns the UI language, either &amp;lt;code&amp;gt;&amp;quot;en&amp;quot;&amp;lt;/code&amp;gt; (for English) or &amp;lt;code&amp;gt;&amp;quot;es&amp;quot;&amp;lt;/code&amp;gt; for Spanish.&lt;br /&gt;
* &amp;lt;code&amp;gt;[[QualifiedName]]( obj, nsContext )&amp;lt;/code&amp;gt;: Returns the qualified identifier (as text) that uniquely identifies «obj» from the context of «nsContext». &lt;br /&gt;
* &amp;lt;code&amp;gt;[[Namespace]] of X&amp;lt;/code&amp;gt;: A new virtual attribute that returns the namespace of «X».&lt;br /&gt;
* [[Evaluate]] has a second return value that captures output to the typescript window (including stuff written by [[ConsolePrint]]) during the evaluation. It also has a new optional «ignoreAtFirstWarning» parameter that can be used in conjunction, capturing the first warning text in that second return value, not showing the return value to the user, and ignoring additional warnings during the duration of the Evaluate call (enables Assista to see the warnings).&lt;br /&gt;
* Added a syntax construct for [[Namespaces#Scoped_namespace_inclusion:_Using|Scoped namespace inclusion]] to bring a namespace into scope for only a localized expression or lexical block.&lt;br /&gt;
* File functions ([[ReadTextFile]], [[WriteTextFile]], [[ReadBinaryFile]], [[WriteBinaryFile]], [[ReadImageFile]] and [[WriteImageFile]]) have a new optional parameter, «extensionFilter», where you can specify which extension filters show up on a file selector dialog.&lt;br /&gt;
&lt;br /&gt;
== System variables ==&lt;br /&gt;
* SysVar [[Graph_ColorSequence]]: Replaces [[Graph_ColorSeq]] which is now deprecated. The new sysvar contains a list of color interer with one integer (of the form &amp;lt;code&amp;gt;0x00rrggbb&amp;lt;/code&amp;gt;) per color (the deprecated version used triples of numbers per color).&lt;br /&gt;
&lt;br /&gt;
== Engine ==&lt;br /&gt;
* After loading a large model, it parses expressions in parallel, using multiple threads/cores to parse different variables. On some computers on some models, this can dramatically speed up model load time.&lt;br /&gt;
* Color attributes use color integers for consistently (rather than the legacy number triples for R,G,B).&lt;br /&gt;
* You can use a localized namespace import (for a single expression or single lexical block) with the syntax&lt;br /&gt;
*:&amp;lt;code&amp;gt;[[Using..Do|Using]] NS;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Model loading ==&lt;br /&gt;
When opening a model file, the &amp;quot;checking&amp;quot; stage (when attributes are parsed) parses different expressions on different threads, resulting in substantially faster model load times for very large models.&lt;br /&gt;
&lt;br /&gt;
Note: In the event that this creates a problem with your specific model (maybe due to an as-yet-undiscovered multithreading bug), you can disable it for your model as follows:&lt;br /&gt;
# Temporarily turn off multithreading (Skip this step if you are able to load your model)&lt;br /&gt;
## New model&lt;br /&gt;
## &amp;lt;b&amp;gt;Definition menu / System variables / Settings / Maximum evaluation threads&amp;lt;/b&amp;gt;&lt;br /&gt;
## Set to 1  (and remember the previous value)&lt;br /&gt;
# Open your model&lt;br /&gt;
# &amp;lt;b&amp;gt;Definition menu / System variables / Settings / Disable Multithreaded Evaluations&amp;lt;/b&amp;gt;&lt;br /&gt;
# Press the &amp;lt;code&amp;gt;Edit Table&amp;lt;/code&amp;gt; button.&lt;br /&gt;
# Check the checkbox for &amp;lt;code&amp;gt;Parsing&amp;lt;/code&amp;gt;&lt;br /&gt;
# Save your model&lt;br /&gt;
# &amp;lt;b&amp;gt;Definition menu / System variables / Settings / Maximum evaluation threads&amp;lt;/b&amp;gt;&lt;br /&gt;
#: Restore the original value from Step 1&lt;br /&gt;
&lt;br /&gt;
== MCP server ==&lt;br /&gt;
* Added an ability to install multiple ADE-based Mcp servers that run different ADE releases. For example, you can install two MCP servers into Claude Code:&lt;br /&gt;
* ade-server: Runs ADE 7.1&lt;br /&gt;
* ade-server-70: Runs ADE 7.0&lt;br /&gt;
The information in the &amp;lt;code&amp;gt;«ADE install folder»\Examples\Mcp_server\README.txt&amp;lt;/code&amp;gt; file explain how (with enough info for Claude code to configure this for you).  &lt;br /&gt;
&lt;br /&gt;
With both installed, Claude Code (or other MCP-enabled AI agents) can compare results for the same model across different releases, etc.&lt;br /&gt;
&lt;br /&gt;
Side note: The Mcp server was added to ADE 7.0.&lt;br /&gt;
&lt;br /&gt;
== Internals ==&lt;br /&gt;
This release has undergone massive internal restructuring and refactorization. Ideally (i.e., in the absence of bugs) these changes won't change functionality, but may alter some aspects of behavior, hopefully for the better.&lt;br /&gt;
* Internal data structures use for multi-dimensional arrays has been changed. Possible impacts:&lt;br /&gt;
** Likely to remove the sensitivity to the &amp;quot;canonical order&amp;quot; of indexes on evaluation speed.&lt;br /&gt;
** May change relative evaluation speeds of various functions and operations.&lt;br /&gt;
* Added system modules/namespaces: &amp;lt;code&amp;gt;SysLib_Internal&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;SysLib_Experimental&amp;lt;/code&amp;gt;. Intended for Analytica-internal use.&lt;br /&gt;
*[[:Category:Cell format functions|Cell formatting functions]] (like [[CellSpan]], [[CellFill]], etc.) are now [[Struct]]s rather than functions. Does not impact usage, other that making it easier for code to traverse resulting data structures.&lt;br /&gt;
&lt;br /&gt;
== Discontinued... ==&lt;br /&gt;
* Plug-in functions. (An old hook that allows you to extend Analytica with compiled functions and UI elements written it C++. We are almost certain no one is using these hooks any more.)&lt;br /&gt;
* The sysvar [[Graph_ColorSeq]] is now deprecated (but works for both reading and setting to preserve backward compatibility). It has been replaced by the system variable [[Graph_ColorSequence]].&lt;br /&gt;
* The built-in (but undocumented, unsupported) &amp;lt;code&amp;gt;ifpos&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;if0&amp;lt;/code&amp;gt; functions were removed.&lt;br /&gt;
* The legacy (deprecated) syntax &amp;lt;code&amp;gt;Using temp:=... Do&amp;lt;/code&amp;gt; for declaring locals is no longer supported. Legacy models will have such definitions automatically rewritten to use [[Local..Do]] when you load them. [[Using..Do]] now has a different meaning, which is to provide a temporary namespace import.&lt;/div&gt;</summary>
		<author><name>Mhenrion</name></author>
	</entry>
	<entry>
		<id>https://docs.analytica.com/index.php?title=What%27s_new_in_Analytica_7.1%3F&amp;diff=64045</id>
		<title>What's new in Analytica 7.1?</title>
		<link rel="alternate" type="text/html" href="https://docs.analytica.com/index.php?title=What%27s_new_in_Analytica_7.1%3F&amp;diff=64045"/>
		<updated>2026-07-02T01:20:16Z</updated>

		<summary type="html">&lt;p&gt;Mhenrion: /* Assista */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; &amp;lt;!--Analytica 7.1 is currently under development, and will be the next future release of Analytica. The current official release is [[Analytica 7.0]]. This page is under construction, and will list enhancements that are new to Analytica or ADE 7.1.--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Analytica release 7.1 is currently in early [[Beta Tester Page|Beta Testing]].  If have have a paid desktop Analytica subscription, we encourage you to try it out from the [[Beta Tester Page]].&lt;br /&gt;
&lt;br /&gt;
== Highlights of Analytica 7.1 ==&lt;br /&gt;
[[File:Assista What kinds of things can you do.png|alt=Assista dialog screen answering &amp;quot;What kinds of things can you do?&amp;quot;|thumb|441x441px]]&lt;br /&gt;
'''[[#Assista|Assista]]:''' By far the most important visible improvement is in [[#Assista|Assista]], Analytica's A.I. assistant.  When first released in Analytica 6.5, Assista was already quite useful for explaining Analytica features, describing and documenting models, and building models, but it was a bit unreliable in Analytica syntax and arranging influence diagrams.  We think you will find that the latest Assista is so much improved, including writing Analytica Definitions and drawing influence diagrams. You may start to use chatting with Assista as the primary way you interact with Analytica. &lt;br /&gt;
&lt;br /&gt;
Other improvements include faster response time, better look and feel, a trace of its thinking, the ability to save and use conversations from previous sessions, ingesting files to provide information, including txt, pdf, csv, xlsx; understanding images and diagrams; a set of skills that you can extend and customize, and more. &lt;br /&gt;
&lt;br /&gt;
'''[[#Engine|Performance]]:'''  Large models start up much faster using multiple processes to parse the definitions. Arrays now use a ''tensor'' representation, similar to AI frameworks like PyTorch and TensorFlow, but with Index labels that support &amp;quot;Intelligent Arrays&amp;quot;. This internal improvement isn't noticeable to users -- but enables major future performance improvements.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''[[#Spreadsheets|CSV and spreadsheet files]] :'''  You can now import [[#CSV files|CSV files]] simply by dragging them into an diagram or in a command line when you start Analytica. You can create a new [[#spreadsheets |spreadsheet]]  with and add or remove sheets from it.&lt;br /&gt;
&lt;br /&gt;
'''[[#Spanish|Spanish]]:'''  The user interface now supports Spanish -- with other languages in the future. Assista already supports most languages, and explains features (translating docs) in your language.&lt;br /&gt;
&lt;br /&gt;
== Assista ==&lt;br /&gt;
[[Assista]] is an AI collaborator in Analytica, greatly improved in this release:&lt;br /&gt;
* The '''chat window''' s now a top-level window at the same level as Analytica's main application window.&lt;br /&gt;
** You can '''move the chat window''' to another location on the screen or even a different screen, to make best user of screen space.&lt;br /&gt;
** Selected objects remain visually selected in the main window as you type into Assista.&lt;br /&gt;
** The window is '''faster and more responsive''', with a new look and feel and clearer formatting of responses.&lt;br /&gt;
** You can '''highlight, drag, and copy any text''' to paste elsewhere.&lt;br /&gt;
** It  displays a stream of &amp;quot;thoughts&amp;quot; while processing your request giving you a peek into what it is doing.&lt;br /&gt;
* On the '''backend,''' Assista has:&lt;br /&gt;
** A new '''processing pipeline''' enabling  faster response and also enabling it work longer on harder tasks. &lt;br /&gt;
** An extensible set of '''competencies (skills)''', including structuring decision models, drawing influence diagrams, designing user interfaces, Analytica syntax, and more.&lt;br /&gt;
** You can create and expose [[Assista_-_Analytica_AI_Assistant/Custom_user_skills_for_Assista|your own custom skills]] to expand capabilities, or ask it to create new skills for you.&lt;br /&gt;
** It '''saves dialogs''', keyed to your model. You can resume a previous session for that model from a dropdown in the UI.&lt;br /&gt;
* Assist can now:&lt;br /&gt;
** '''Ingest documents''' (&amp;lt;code&amp;gt;*.txt, *.pdf, *.md, *.docx, *.xlsx, *.xlsm&amp;lt;/code&amp;gt;) or URLs into the chat using a menu in the Request box, or by dragging and dropping files into the window.  Assista &amp;quot;ingests&amp;quot; the files and can extract data from a doc or image, adding tables to your model, translate a spreadsheet into Analytica, or even implement a model described in the article.&lt;br /&gt;
** ''' &amp;quot;See&amp;quot; images''' in your model -- pictures in nodes, images in table cells, and diagram or graph screenshots.&lt;br /&gt;
** Converse in most common '''languages.''' In Spanish, it can provide UI instructions referring to the Spanish-language UI elements.&lt;br /&gt;
** '''Explain its reasoning''' in previous requests and expand on ideas .&lt;br /&gt;
** '''Personalize tone''', style, level of verbosity and provide custom instructions. To do this, click on the icon in the top-left corner of the Assista window and select Personization.&lt;br /&gt;
** '''Generate reports''' as a downloadable PDF or Word document, which can contain tables, graphs or other images from your model and formatted equations.&lt;br /&gt;
&lt;br /&gt;
== Multi-linguality: Spanish UI ==&lt;br /&gt;
Analytica now comes with a Spanish-language UI, in which its menus, dialogs, error messages and built-in function descriptions are all in Spanish. Also its installer runs with a Spanish-language UI when you are in a Spanish-language region.  Spanish is the default when you are in a Spanish-language region. &lt;br /&gt;
&lt;br /&gt;
You can override the default language by launching Analytica as:&lt;br /&gt;
* &amp;lt;code&amp;gt;Analytica.exe /lang:es&amp;lt;/code&amp;gt;&lt;br /&gt;
*: or&lt;br /&gt;
* &amp;lt;code&amp;gt;Analytica.exe /lang:en&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can also set the &amp;lt;code&amp;gt;Language&amp;lt;/code&amp;gt; registry setting in the &amp;lt;code&amp;gt;&amp;quot;HKCU/Software/Lumina Decision Systems/Analytica&amp;quot;&amp;lt;/code&amp;gt; hive to REG_SZ &amp;lt;code&amp;gt;&amp;quot;en&amp;quot;&amp;lt;/code&amp;gt; on &amp;lt;code&amp;gt;&amp;quot;es&amp;quot;&amp;lt;/code&amp;gt; for your default if different from your windows region setting.&lt;br /&gt;
&lt;br /&gt;
Some of you may ask &amp;quot;what about my language?&amp;quot;. Stay tuned (and let us know there is a demand for your language). Once our AI translation pipeline is solid, it shouldn't be too hard for us to add more.&lt;br /&gt;
&lt;br /&gt;
== Window appearance ==&lt;br /&gt;
The appearance of the chrome around child MDI windows (aka the &amp;quot;non-client area&amp;quot;) has been changed to more closely match the Windows 11 style of windows -- i.e., thin (1 pixel) borders, rounded corners at the top, white title bar, very plain (text-like) button images in the toolbar.&lt;br /&gt;
&lt;br /&gt;
== CSV files ==&lt;br /&gt;
There are now a few additional ways to open CSV files in Analytica:&lt;br /&gt;
* On the command line: &amp;lt;code&amp;gt;Analytica.exe MyData.csv&amp;lt;/code&amp;gt;&lt;br /&gt;
* Drag and drop a *.csv file onto the diagram (which behaves the same as using &amp;lt;code&amp;gt;File / Import...&amp;lt;/code&amp;gt; on the *.csv file). &lt;br /&gt;
&lt;br /&gt;
== Spreadsheets ==&lt;br /&gt;
* &amp;lt;code&amp;gt;[[SpreadsheetOpen]](&amp;quot;new&amp;quot;)&amp;lt;/code&amp;gt; now creates a blank spreadsheet in memory. Works with both the Excel and LibXl backends.&lt;br /&gt;
* Prefacing a sheet name with + in the call to [[SpreadsheetSetCell]] or [[SpreadsheetSetRange]] will add a new sheet by that name to the workbook (as it applies the specified change to that new worksheet). Works with either backend.&lt;br /&gt;
* You can also now remove a sheet from a workbook using: &amp;lt;code&amp;gt;[[SpreadsheetSetCell]](wb, &amp;quot;-OldSheet&amp;quot;, col, row, Null)&amp;lt;/code&amp;gt;. The «col» and «row» parameters are required but ignored in this case.&lt;br /&gt;
&lt;br /&gt;
== Misc. User Interface ==&lt;br /&gt;
* The Node Icon editor (on the Diagram menu) is far more flexible. You can use it to edit arbitrary node images, with support for color and transparency.&lt;br /&gt;
* Added keyboard shortcuts for '''Set Node Style...''' and '''Set Diagram Style...'''&lt;br /&gt;
* There is a new option, '''Use as default arrow style''', on the right-mouse context menu for an influence diagram arrow. This sets the global arrow style default to match the selected arrow.&lt;br /&gt;
&lt;br /&gt;
== Built-in functions ==&lt;br /&gt;
* New options for [[GetProcessInfo]]: &amp;lt;code&amp;gt;&amp;quot;Number of monitors&amp;quot;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;quot;Current monitor rect&amp;quot;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;quot;Current monitor work rect&amp;quot;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;quot;Monitor «N» Rect&amp;quot;&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;&amp;quot;Monitor «N» work rect&amp;quot;&amp;lt;/code&amp;gt;.&lt;br /&gt;
* New optional parameter, «throwParsingErrors», to [[Evaluate]].&lt;br /&gt;
* [[ReadFromURL]] is a bit smarter about returning binary content (like &amp;lt;code&amp;gt;*.zip&amp;lt;/code&amp;gt; files) as a [[In-memory binary data terms|Binary Data Term]].&lt;br /&gt;
* [[MakeJSON]] will automatically encode an image in base64 JSON, and [[ParseJSON]] will automatically decode a base64 representation into an image. Also there is a new «maxCells» parameter that can be used to prevent giagantic arrays from being encoded (resulting in immensely long text).&lt;br /&gt;
* &amp;lt;code&amp;gt;[[GetProcessInfo]](&amp;quot;UI Language&amp;quot;)&amp;lt;/code&amp;gt; returns the UI language, either &amp;lt;code&amp;gt;&amp;quot;en&amp;quot;&amp;lt;/code&amp;gt; (for English) or &amp;lt;code&amp;gt;&amp;quot;es&amp;quot;&amp;lt;/code&amp;gt; for Spanish.&lt;br /&gt;
* &amp;lt;code&amp;gt;[[QualifiedName]]( obj, nsContext )&amp;lt;/code&amp;gt;: Returns the qualified identifier (as text) that uniquely identifies «obj» from the context of «nsContext». &lt;br /&gt;
* &amp;lt;code&amp;gt;[[Namespace]] of X&amp;lt;/code&amp;gt;: A new virtual attribute that returns the namespace of «X».&lt;br /&gt;
* [[Evaluate]] has a second return value that captures output to the typescript window (including stuff written by [[ConsolePrint]]) during the evaluation. It also has a new optional «ignoreAtFirstWarning» parameter that can be used in conjunction, capturing the first warning text in that second return value, not showing the return value to the user, and ignoring additional warnings during the duration of the Evaluate call (enables Assista to see the warnings).&lt;br /&gt;
* Added a syntax construct for [[Namespaces#Scoped_namespace_inclusion:_Using|Scoped namespace inclusion]] to bring a namespace into scope for only a localized expression or lexical block.&lt;br /&gt;
* File functions ([[ReadTextFile]], [[WriteTextFile]], [[ReadBinaryFile]], [[WriteBinaryFile]], [[ReadImageFile]] and [[WriteImageFile]]) have a new optional parameter, «extensionFilter», where you can specify which extension filters show up on a file selector dialog.&lt;br /&gt;
&lt;br /&gt;
== System variables ==&lt;br /&gt;
* SysVar [[Graph_ColorSequence]]: Replaces [[Graph_ColorSeq]] which is now deprecated. The new sysvar contains a list of color interer with one integer (of the form &amp;lt;code&amp;gt;0x00rrggbb&amp;lt;/code&amp;gt;) per color (the deprecated version used triples of numbers per color).&lt;br /&gt;
&lt;br /&gt;
== Engine ==&lt;br /&gt;
* After loading a large model, it parses expressions in parallel, using multiple threads/cores to parse different variables. On some computers on some models, this can dramatically speed up model load time.&lt;br /&gt;
* Color attributes use color integers for consistently (rather than the legacy number triples for R,G,B).&lt;br /&gt;
* You can use a localized namespace import (for a single expression or single lexical block) with the syntax&lt;br /&gt;
*:&amp;lt;code&amp;gt;[[Using..Do|Using]] NS;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Model loading ==&lt;br /&gt;
When opening a model file, the &amp;quot;checking&amp;quot; stage (when attributes are parsed) parses different expressions on different threads, resulting in substantially faster model load times for very large models.&lt;br /&gt;
&lt;br /&gt;
Note: In the event that this creates a problem with your specific model (maybe due to an as-yet-undiscovered multithreading bug), you can disable it for your model as follows:&lt;br /&gt;
# Temporarily turn off multithreading (Skip this step if you are able to load your model)&lt;br /&gt;
## New model&lt;br /&gt;
## &amp;lt;b&amp;gt;Definition menu / System variables / Settings / Maximum evaluation threads&amp;lt;/b&amp;gt;&lt;br /&gt;
## Set to 1  (and remember the previous value)&lt;br /&gt;
# Open your model&lt;br /&gt;
# &amp;lt;b&amp;gt;Definition menu / System variables / Settings / Disable Multithreaded Evaluations&amp;lt;/b&amp;gt;&lt;br /&gt;
# Press the &amp;lt;code&amp;gt;Edit Table&amp;lt;/code&amp;gt; button.&lt;br /&gt;
# Check the checkbox for &amp;lt;code&amp;gt;Parsing&amp;lt;/code&amp;gt;&lt;br /&gt;
# Save your model&lt;br /&gt;
# &amp;lt;b&amp;gt;Definition menu / System variables / Settings / Maximum evaluation threads&amp;lt;/b&amp;gt;&lt;br /&gt;
#: Restore the original value from Step 1&lt;br /&gt;
&lt;br /&gt;
== MCP server ==&lt;br /&gt;
* Added an ability to install multiple ADE-based Mcp servers that run different ADE releases. For example, you can install two MCP servers into Claude Code:&lt;br /&gt;
* ade-server: Runs ADE 7.1&lt;br /&gt;
* ade-server-70: Runs ADE 7.0&lt;br /&gt;
The information in the &amp;lt;code&amp;gt;«ADE install folder»\Examples\Mcp_server\README.txt&amp;lt;/code&amp;gt; file explain how (with enough info for Claude code to configure this for you).  &lt;br /&gt;
&lt;br /&gt;
With both installed, Claude Code (or other MCP-enabled AI agents) can compare results for the same model across different releases, etc.&lt;br /&gt;
&lt;br /&gt;
Side note: The Mcp server was added to ADE 7.0.&lt;br /&gt;
&lt;br /&gt;
== Internals ==&lt;br /&gt;
This release has undergone massive internal restructuring and refactorization. Ideally (i.e., in the absence of bugs) these changes won't change functionality, but may alter some aspects of behavior, hopefully for the better.&lt;br /&gt;
* Internal data structures use for multi-dimensional arrays has been changed. Possible impacts:&lt;br /&gt;
** Likely to remove the sensitivity to the &amp;quot;canonical order&amp;quot; of indexes on evaluation speed.&lt;br /&gt;
** May change relative evaluation speeds of various functions and operations.&lt;br /&gt;
* Added system modules/namespaces: &amp;lt;code&amp;gt;SysLib_Internal&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;SysLib_Experimental&amp;lt;/code&amp;gt;. Intended for Analytica-internal use.&lt;br /&gt;
*[[:Category:Cell format functions|Cell formatting functions]] (like [[CellSpan]], [[CellFill]], etc.) are now [[Struct]]s rather than functions. Does not impact usage, other that making it easier for code to traverse resulting data structures.&lt;br /&gt;
&lt;br /&gt;
== Discontinued... ==&lt;br /&gt;
* Plug-in functions. (An old hook that allows you to extend Analytica with compiled functions and UI elements written it C++. We are almost certain no one is using these hooks any more.)&lt;br /&gt;
* The sysvar [[Graph_ColorSeq]] is now deprecated (but works for both reading and setting to preserve backward compatibility). It has been replaced by the system variable [[Graph_ColorSequence]].&lt;br /&gt;
* The built-in (but undocumented, unsupported) &amp;lt;code&amp;gt;ifpos&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;if0&amp;lt;/code&amp;gt; functions were removed.&lt;br /&gt;
* The legacy (deprecated) syntax &amp;lt;code&amp;gt;Using temp:=... Do&amp;lt;/code&amp;gt; for declaring locals is no longer supported. Legacy models will have such definitions automatically rewritten to use [[Local..Do]] when you load them. [[Using..Do]] now has a different meaning, which is to provide a temporary namespace import.&lt;/div&gt;</summary>
		<author><name>Mhenrion</name></author>
	</entry>
	<entry>
		<id>https://docs.analytica.com/index.php?title=What%27s_new_in_Analytica_7.1%3F&amp;diff=64044</id>
		<title>What's new in Analytica 7.1?</title>
		<link rel="alternate" type="text/html" href="https://docs.analytica.com/index.php?title=What%27s_new_in_Analytica_7.1%3F&amp;diff=64044"/>
		<updated>2026-07-02T01:15:43Z</updated>

		<summary type="html">&lt;p&gt;Mhenrion: /* Assista */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; &amp;lt;!--Analytica 7.1 is currently under development, and will be the next future release of Analytica. The current official release is [[Analytica 7.0]]. This page is under construction, and will list enhancements that are new to Analytica or ADE 7.1.--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Analytica release 7.1 is currently in early [[Beta Tester Page|Beta Testing]].  If have have a paid desktop Analytica subscription, we encourage you to try it out from the [[Beta Tester Page]].&lt;br /&gt;
&lt;br /&gt;
== Highlights of Analytica 7.1 ==&lt;br /&gt;
[[File:Assista What kinds of things can you do.png|alt=Assista dialog screen answering &amp;quot;What kinds of things can you do?&amp;quot;|thumb|441x441px]]&lt;br /&gt;
'''[[#Assista|Assista]]:''' By far the most important visible improvement is in [[#Assista|Assista]], Analytica's A.I. assistant.  When first released in Analytica 6.5, Assista was already quite useful for explaining Analytica features, describing and documenting models, and building models, but it was a bit unreliable in Analytica syntax and arranging influence diagrams.  We think you will find that the latest Assista is so much improved, including writing Analytica Definitions and drawing influence diagrams. You may start to use chatting with Assista as the primary way you interact with Analytica. &lt;br /&gt;
&lt;br /&gt;
Other improvements include faster response time, better look and feel, a trace of its thinking, the ability to save and use conversations from previous sessions, ingesting files to provide information, including txt, pdf, csv, xlsx; understanding images and diagrams; a set of skills that you can extend and customize, and more. &lt;br /&gt;
&lt;br /&gt;
'''[[#Engine|Performance]]:'''  Large models start up much faster using multiple processes to parse the definitions. Arrays now use a ''tensor'' representation, similar to AI frameworks like PyTorch and TensorFlow, but with Index labels that support &amp;quot;Intelligent Arrays&amp;quot;. This internal improvement isn't noticeable to users -- but enables major future performance improvements.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''[[#Spreadsheets|CSV and spreadsheet files]] :'''  You can now import [[#CSV files|CSV files]] simply by dragging them into an diagram or in a command line when you start Analytica. You can create a new [[#spreadsheets |spreadsheet]]  with and add or remove sheets from it.&lt;br /&gt;
&lt;br /&gt;
'''[[#Spanish|Spanish]]:'''  The user interface now supports Spanish -- with other languages in the future. Assista already supports most languages, and explains features (translating docs) in your language.&lt;br /&gt;
&lt;br /&gt;
== Assista ==&lt;br /&gt;
[[Assista]] is an AI collaborator in Analytica, accessible via a chat window.&lt;br /&gt;
Assista is greatly improved in this release:&lt;br /&gt;
* The Assista chat is now a top-level window at the same level as Analytica's main application window.&lt;br /&gt;
** You can move the chat window to another location on the screen or even a different screen, to make best user of screen space.&lt;br /&gt;
** Selected objects remain visually selected in the main window as you type into Assista.&lt;br /&gt;
** The window is faster and more responsive, with a new look and feel and clearer formatting of responses.&lt;br /&gt;
** You can drag-highlight any chat text and copy to paste elsewhere.&lt;br /&gt;
** It  displays a stream of &amp;quot;thoughts&amp;quot; while processing your request giving you a peek into what it is doing.&lt;br /&gt;
* On the backend, Assista has:&lt;br /&gt;
** A new processing pipeline enabling  faster response and also enabling it work longer on harder tasks. &lt;br /&gt;
** An extensible set of competencies (skills), including structuring decision models, drawing influence diagrams, designing user interfaces, Analytica syntax, and more.&lt;br /&gt;
** You can create and expose [[Assista_-_Analytica_AI_Assistant/Custom_user_skills_for_Assista|your own custom skills]] to expand capabilities, or ask it to create new skills for you.&lt;br /&gt;
** It saves dialogs, keyed to your model. You can resume a previous session for that model from a dropdown in the UI.&lt;br /&gt;
* Assist can now:&lt;br /&gt;
** Ingest documents (&amp;lt;code&amp;gt;*.txt, *.pdf, *.md, *.docx, *.xlsx, *.xlsm&amp;lt;/code&amp;gt;) or URLs into the chat using a menu in the Request box, or by dragging and dropping files into the window.  Assista &amp;quot;ingests&amp;quot; the files and can extract data from a doc or image, adding tables to your model, translate a spreadsheet into Analytica, or even implement a model described in the article.&lt;br /&gt;
** &amp;quot;See&amp;quot; images in your model -- pictures in nodes, images in table cells, and diagram or graph screenshots.&lt;br /&gt;
** Converse in most common languages. In Spanish, it can provide UI instructions referring to the Spanish-language UI elements.&lt;br /&gt;
** Explain reasoning from previous requests and expand on ideas .&lt;br /&gt;
** Personalize tone, style, level of verbosity and provide her custom instructions. To do this, click on the icon in the top-left corner of the Assista window and select Personization.&lt;br /&gt;
** Generate a report as a downloadable PDF or Word document, which can contain tables, graphs or other images from your model and formatted equations.&lt;br /&gt;
&lt;br /&gt;
== Multi-linguality: Spanish UI ==&lt;br /&gt;
Analytica now comes with a Spanish-language UI, in which its menus, dialogs, error messages and built-in function descriptions are all in Spanish. Also its installer runs with a Spanish-language UI when you are in a Spanish-language region.  Spanish is the default when you are in a Spanish-language region. &lt;br /&gt;
&lt;br /&gt;
You can override the default language by launching Analytica as:&lt;br /&gt;
* &amp;lt;code&amp;gt;Analytica.exe /lang:es&amp;lt;/code&amp;gt;&lt;br /&gt;
*: or&lt;br /&gt;
* &amp;lt;code&amp;gt;Analytica.exe /lang:en&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can also set the &amp;lt;code&amp;gt;Language&amp;lt;/code&amp;gt; registry setting in the &amp;lt;code&amp;gt;&amp;quot;HKCU/Software/Lumina Decision Systems/Analytica&amp;quot;&amp;lt;/code&amp;gt; hive to REG_SZ &amp;lt;code&amp;gt;&amp;quot;en&amp;quot;&amp;lt;/code&amp;gt; on &amp;lt;code&amp;gt;&amp;quot;es&amp;quot;&amp;lt;/code&amp;gt; for your default if different from your windows region setting.&lt;br /&gt;
&lt;br /&gt;
Some of you may ask &amp;quot;what about my language?&amp;quot;. Stay tuned (and let us know there is a demand for your language). Once our AI translation pipeline is solid, it shouldn't be too hard for us to add more.&lt;br /&gt;
&lt;br /&gt;
== Window appearance ==&lt;br /&gt;
The appearance of the chrome around child MDI windows (aka the &amp;quot;non-client area&amp;quot;) has been changed to more closely match the Windows 11 style of windows -- i.e., thin (1 pixel) borders, rounded corners at the top, white title bar, very plain (text-like) button images in the toolbar.&lt;br /&gt;
&lt;br /&gt;
== CSV files ==&lt;br /&gt;
There are now a few additional ways to open CSV files in Analytica:&lt;br /&gt;
* On the command line: &amp;lt;code&amp;gt;Analytica.exe MyData.csv&amp;lt;/code&amp;gt;&lt;br /&gt;
* Drag and drop a *.csv file onto the diagram (which behaves the same as using &amp;lt;code&amp;gt;File / Import...&amp;lt;/code&amp;gt; on the *.csv file). &lt;br /&gt;
&lt;br /&gt;
== Spreadsheets ==&lt;br /&gt;
* &amp;lt;code&amp;gt;[[SpreadsheetOpen]](&amp;quot;new&amp;quot;)&amp;lt;/code&amp;gt; now creates a blank spreadsheet in memory. Works with both the Excel and LibXl backends.&lt;br /&gt;
* Prefacing a sheet name with + in the call to [[SpreadsheetSetCell]] or [[SpreadsheetSetRange]] will add a new sheet by that name to the workbook (as it applies the specified change to that new worksheet). Works with either backend.&lt;br /&gt;
* You can also now remove a sheet from a workbook using: &amp;lt;code&amp;gt;[[SpreadsheetSetCell]](wb, &amp;quot;-OldSheet&amp;quot;, col, row, Null)&amp;lt;/code&amp;gt;. The «col» and «row» parameters are required but ignored in this case.&lt;br /&gt;
&lt;br /&gt;
== Misc. User Interface ==&lt;br /&gt;
* The Node Icon editor (on the Diagram menu) is far more flexible. You can use it to edit arbitrary node images, with support for color and transparency.&lt;br /&gt;
* Added keyboard shortcuts for '''Set Node Style...''' and '''Set Diagram Style...'''&lt;br /&gt;
* There is a new option, '''Use as default arrow style''', on the right-mouse context menu for an influence diagram arrow. This sets the global arrow style default to match the selected arrow.&lt;br /&gt;
&lt;br /&gt;
== Built-in functions ==&lt;br /&gt;
* New options for [[GetProcessInfo]]: &amp;lt;code&amp;gt;&amp;quot;Number of monitors&amp;quot;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;quot;Current monitor rect&amp;quot;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;quot;Current monitor work rect&amp;quot;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;quot;Monitor «N» Rect&amp;quot;&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;&amp;quot;Monitor «N» work rect&amp;quot;&amp;lt;/code&amp;gt;.&lt;br /&gt;
* New optional parameter, «throwParsingErrors», to [[Evaluate]].&lt;br /&gt;
* [[ReadFromURL]] is a bit smarter about returning binary content (like &amp;lt;code&amp;gt;*.zip&amp;lt;/code&amp;gt; files) as a [[In-memory binary data terms|Binary Data Term]].&lt;br /&gt;
* [[MakeJSON]] will automatically encode an image in base64 JSON, and [[ParseJSON]] will automatically decode a base64 representation into an image. Also there is a new «maxCells» parameter that can be used to prevent giagantic arrays from being encoded (resulting in immensely long text).&lt;br /&gt;
* &amp;lt;code&amp;gt;[[GetProcessInfo]](&amp;quot;UI Language&amp;quot;)&amp;lt;/code&amp;gt; returns the UI language, either &amp;lt;code&amp;gt;&amp;quot;en&amp;quot;&amp;lt;/code&amp;gt; (for English) or &amp;lt;code&amp;gt;&amp;quot;es&amp;quot;&amp;lt;/code&amp;gt; for Spanish.&lt;br /&gt;
* &amp;lt;code&amp;gt;[[QualifiedName]]( obj, nsContext )&amp;lt;/code&amp;gt;: Returns the qualified identifier (as text) that uniquely identifies «obj» from the context of «nsContext». &lt;br /&gt;
* &amp;lt;code&amp;gt;[[Namespace]] of X&amp;lt;/code&amp;gt;: A new virtual attribute that returns the namespace of «X».&lt;br /&gt;
* [[Evaluate]] has a second return value that captures output to the typescript window (including stuff written by [[ConsolePrint]]) during the evaluation. It also has a new optional «ignoreAtFirstWarning» parameter that can be used in conjunction, capturing the first warning text in that second return value, not showing the return value to the user, and ignoring additional warnings during the duration of the Evaluate call (enables Assista to see the warnings).&lt;br /&gt;
* Added a syntax construct for [[Namespaces#Scoped_namespace_inclusion:_Using|Scoped namespace inclusion]] to bring a namespace into scope for only a localized expression or lexical block.&lt;br /&gt;
* File functions ([[ReadTextFile]], [[WriteTextFile]], [[ReadBinaryFile]], [[WriteBinaryFile]], [[ReadImageFile]] and [[WriteImageFile]]) have a new optional parameter, «extensionFilter», where you can specify which extension filters show up on a file selector dialog.&lt;br /&gt;
&lt;br /&gt;
== System variables ==&lt;br /&gt;
* SysVar [[Graph_ColorSequence]]: Replaces [[Graph_ColorSeq]] which is now deprecated. The new sysvar contains a list of color interer with one integer (of the form &amp;lt;code&amp;gt;0x00rrggbb&amp;lt;/code&amp;gt;) per color (the deprecated version used triples of numbers per color).&lt;br /&gt;
&lt;br /&gt;
== Engine ==&lt;br /&gt;
* After loading a large model, it parses expressions in parallel, using multiple threads/cores to parse different variables. On some computers on some models, this can dramatically speed up model load time.&lt;br /&gt;
* Color attributes use color integers for consistently (rather than the legacy number triples for R,G,B).&lt;br /&gt;
* You can use a localized namespace import (for a single expression or single lexical block) with the syntax&lt;br /&gt;
*:&amp;lt;code&amp;gt;[[Using..Do|Using]] NS;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Model loading ==&lt;br /&gt;
When opening a model file, the &amp;quot;checking&amp;quot; stage (when attributes are parsed) parses different expressions on different threads, resulting in substantially faster model load times for very large models.&lt;br /&gt;
&lt;br /&gt;
Note: In the event that this creates a problem with your specific model (maybe due to an as-yet-undiscovered multithreading bug), you can disable it for your model as follows:&lt;br /&gt;
# Temporarily turn off multithreading (Skip this step if you are able to load your model)&lt;br /&gt;
## New model&lt;br /&gt;
## &amp;lt;b&amp;gt;Definition menu / System variables / Settings / Maximum evaluation threads&amp;lt;/b&amp;gt;&lt;br /&gt;
## Set to 1  (and remember the previous value)&lt;br /&gt;
# Open your model&lt;br /&gt;
# &amp;lt;b&amp;gt;Definition menu / System variables / Settings / Disable Multithreaded Evaluations&amp;lt;/b&amp;gt;&lt;br /&gt;
# Press the &amp;lt;code&amp;gt;Edit Table&amp;lt;/code&amp;gt; button.&lt;br /&gt;
# Check the checkbox for &amp;lt;code&amp;gt;Parsing&amp;lt;/code&amp;gt;&lt;br /&gt;
# Save your model&lt;br /&gt;
# &amp;lt;b&amp;gt;Definition menu / System variables / Settings / Maximum evaluation threads&amp;lt;/b&amp;gt;&lt;br /&gt;
#: Restore the original value from Step 1&lt;br /&gt;
&lt;br /&gt;
== MCP server ==&lt;br /&gt;
* Added an ability to install multiple ADE-based Mcp servers that run different ADE releases. For example, you can install two MCP servers into Claude Code:&lt;br /&gt;
* ade-server: Runs ADE 7.1&lt;br /&gt;
* ade-server-70: Runs ADE 7.0&lt;br /&gt;
The information in the &amp;lt;code&amp;gt;«ADE install folder»\Examples\Mcp_server\README.txt&amp;lt;/code&amp;gt; file explain how (with enough info for Claude code to configure this for you).  &lt;br /&gt;
&lt;br /&gt;
With both installed, Claude Code (or other MCP-enabled AI agents) can compare results for the same model across different releases, etc.&lt;br /&gt;
&lt;br /&gt;
Side note: The Mcp server was added to ADE 7.0.&lt;br /&gt;
&lt;br /&gt;
== Internals ==&lt;br /&gt;
This release has undergone massive internal restructuring and refactorization. Ideally (i.e., in the absence of bugs) these changes won't change functionality, but may alter some aspects of behavior, hopefully for the better.&lt;br /&gt;
* Internal data structures use for multi-dimensional arrays has been changed. Possible impacts:&lt;br /&gt;
** Likely to remove the sensitivity to the &amp;quot;canonical order&amp;quot; of indexes on evaluation speed.&lt;br /&gt;
** May change relative evaluation speeds of various functions and operations.&lt;br /&gt;
* Added system modules/namespaces: &amp;lt;code&amp;gt;SysLib_Internal&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;SysLib_Experimental&amp;lt;/code&amp;gt;. Intended for Analytica-internal use.&lt;br /&gt;
*[[:Category:Cell format functions|Cell formatting functions]] (like [[CellSpan]], [[CellFill]], etc.) are now [[Struct]]s rather than functions. Does not impact usage, other that making it easier for code to traverse resulting data structures.&lt;br /&gt;
&lt;br /&gt;
== Discontinued... ==&lt;br /&gt;
* Plug-in functions. (An old hook that allows you to extend Analytica with compiled functions and UI elements written it C++. We are almost certain no one is using these hooks any more.)&lt;br /&gt;
* The sysvar [[Graph_ColorSeq]] is now deprecated (but works for both reading and setting to preserve backward compatibility). It has been replaced by the system variable [[Graph_ColorSequence]].&lt;br /&gt;
* The built-in (but undocumented, unsupported) &amp;lt;code&amp;gt;ifpos&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;if0&amp;lt;/code&amp;gt; functions were removed.&lt;br /&gt;
* The legacy (deprecated) syntax &amp;lt;code&amp;gt;Using temp:=... Do&amp;lt;/code&amp;gt; for declaring locals is no longer supported. Legacy models will have such definitions automatically rewritten to use [[Local..Do]] when you load them. [[Using..Do]] now has a different meaning, which is to provide a temporary namespace import.&lt;/div&gt;</summary>
		<author><name>Mhenrion</name></author>
	</entry>
	<entry>
		<id>https://docs.analytica.com/index.php?title=What%27s_new_in_Analytica_7.1%3F&amp;diff=64032</id>
		<title>What's new in Analytica 7.1?</title>
		<link rel="alternate" type="text/html" href="https://docs.analytica.com/index.php?title=What%27s_new_in_Analytica_7.1%3F&amp;diff=64032"/>
		<updated>2026-06-26T19:10:15Z</updated>

		<summary type="html">&lt;p&gt;Mhenrion: edited and expande Highlights&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; &amp;lt;!--Analytica 7.1 is currently under development, and will be the next future release of Analytica. The current official release is [[Analytica 7.0]]. This page is under construction, and will list enhancements that are new to Analytica or ADE 7.1.--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Analytica release 7.1 is currently in early [[Beta Tester Page|Beta Testing]].  If have have a paid desktop Analytica subscription, we encourage you to try it out from the [[Beta Tester Page]].&lt;br /&gt;
&lt;br /&gt;
== Highlights of Analytica 7.1 ==&lt;br /&gt;
[[File:Assista What kinds of things can you do.png|alt=Assista dialog screen answering &amp;quot;What kinds of things can you do?&amp;quot;|thumb|441x441px]]&lt;br /&gt;
'''[[#Assista|Assista]]:''' By far the most important visible improvement is in [[#Assista|Assista]], Analytica's A.I. assistant.  When first released in Analytica 6.5, Assista was already quite useful for explaining Analytica features, describing and documenting models, and building models, but it was a bit unreliable in Analytica syntax and arranging influence diagrams.  We think you will find that the latest Assista is so much improved, including writing Analytica Definitions and drawing influence diagrams. You may start to use chatting with Assista as the primary way you interact with Analytica. &lt;br /&gt;
&lt;br /&gt;
Other improvements include faster response time, better look and feel, a trace of its thinking, the ability to save and use conversations from previous sessions, ingesting files to provide information, including txt, pdf, csv, xlsx; understanding images and diagrams; a set of skills that you can extend and customize, and more. &lt;br /&gt;
&lt;br /&gt;
'''[[#Engine|Performance]]:'''  Large models start up much faster using multiple processes to parse the definitions. Arrays now use a ''tensor'' representation, similar to AI frameworks like PyTorch and TensorFlow, but with Index labels that support &amp;quot;Intelligent Arrays&amp;quot;. This internal improvement isn't noticeable to users -- but enables major future performance improvements.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''[[#Spreadsheets|CSV and spreadsheet files]] :'''  You can now import [[#CSV files|CSV files]] simply by dragging them into an diagram or in a command line when you start Analytica. You can create a new [[#spreadsheets |spreadsheet]]  with and add or remove sheets from it.&lt;br /&gt;
&lt;br /&gt;
'''[[#Spanish|Spanish]]:'''  The user interface now supports Spanish -- with other languages in the future. Assista already supports most languages, and explains features (translating docs) in your language.&lt;br /&gt;
&lt;br /&gt;
== Assista ==&lt;br /&gt;
[[Assista]] is Analytica's A.I. assistant. She is greatly improved in this release.&lt;br /&gt;
* Her UI is now a top-level window that resides at the same level as Analytica's main application window.&lt;br /&gt;
** You can move her chat window to a non-overlapping location or even a different monitor (to maximize screen real estate used by your Analytica window).&lt;br /&gt;
** Selected objects remain visually selected in the main window when you type into Assista.&lt;br /&gt;
* Her chat has a different look-and-feel.&lt;br /&gt;
* Her chat window is faster and more responsive&lt;br /&gt;
* You can drag-highlight any text in her chat and copy to paste elsewhere.&lt;br /&gt;
* The UI has improved formatting capabilities for displaying Assista's response.&lt;br /&gt;
* Her &amp;quot;thoughts&amp;quot; display as she is processing your prompt, making it clear she is working and even giving you a peek into how she is solving it.&lt;br /&gt;
* She has a new processing pipeline on the backend, enabling her to respond faster but also work longer on harder tasks. &lt;br /&gt;
* She has an extended set of competencies (skills). &lt;br /&gt;
* Your sessions are automatically saved, keyed to your model, and you can resume a previous session for that model from a session selector dropdown in the UI.&lt;br /&gt;
* You can create and expose [[Assista_-_Analytica_AI_Assistant/Custom_user_skills_for_Assista|your own custom skills]] to expand her capabilities, or ask her to do it for you.&lt;br /&gt;
* You can add or drag-and-drop a document (&amp;lt;code&amp;gt;*.txt, *.pdf, *.md, *.docx, *.xlsx, *.xlsm&amp;lt;/code&amp;gt;) or URLs into the chat which Assista can &amp;quot;ingest&amp;quot; during your conversation. Have her extract data from the doc, adding tables to your model. Or even to implement a model described by the paper or translate a spreadsheet into an Analytica model.&lt;br /&gt;
* Assista can &amp;quot;see&amp;quot; images in your model -- pictures in nodes, images in table cells, and diagram or graph screenshots.&lt;br /&gt;
* She is language-aware. If you are using Analytica is Spanish, she'll provide UI instructions that refer to the Spanish-language UI elements.&lt;br /&gt;
* She is aware of her reasoning in previous conversation turns and the actions she took, enabling her to explain her reasoning or build on ideas she thought about but might not have included in the final response.&lt;br /&gt;
* She has an improved ability to navigate and find objects within your (large) models.&lt;br /&gt;
* You can personalize her tone, style, level of verbosity and provide her custom instructions. To do this, click on the icon in the top-left corner of the Assista window and select Personization...&lt;br /&gt;
&lt;br /&gt;
== Multi-linguality: Spanish UI ==&lt;br /&gt;
Analytica now comes with a Spanish-language UI, in which its menus, dialogs, error messages and built-in function descriptions are all in Spanish. Also its installer runs with a Spanish-language UI when you are in a Spanish-language region.  Spanish is the default when you are in a Spanish-language region. &lt;br /&gt;
&lt;br /&gt;
You can override the default language by launching Analytica as:&lt;br /&gt;
* &amp;lt;code&amp;gt;Analytica.exe /lang:es&amp;lt;/code&amp;gt;&lt;br /&gt;
*: or&lt;br /&gt;
* &amp;lt;code&amp;gt;Analytica.exe /lang:en&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can also set the &amp;lt;code&amp;gt;Language&amp;lt;/code&amp;gt; registry setting in the &amp;lt;code&amp;gt;&amp;quot;HKCU/Software/Lumina Decision Systems/Analytica&amp;quot;&amp;lt;/code&amp;gt; hive to REG_SZ &amp;lt;code&amp;gt;&amp;quot;en&amp;quot;&amp;lt;/code&amp;gt; on &amp;lt;code&amp;gt;&amp;quot;es&amp;quot;&amp;lt;/code&amp;gt; for your default if different from your windows region setting.&lt;br /&gt;
&lt;br /&gt;
Some of you may ask &amp;quot;what about my language?&amp;quot;. Stay tuned (and let us know there is a demand for your language). Once our AI translation pipeline is solid, it shouldn't be too hard for us to add more.&lt;br /&gt;
&lt;br /&gt;
== Window appearance ==&lt;br /&gt;
The appearance of the chrome around child MDI windows (aka the &amp;quot;non-client area&amp;quot;) has been changed to more closely match the Windows 11 style of windows -- i.e., thin (1 pixel) borders, rounded corners at the top, white title bar, very plain (text-like) button images in the toolbar.&lt;br /&gt;
&lt;br /&gt;
== CSV files ==&lt;br /&gt;
There are now a few additional ways to open CSV files in Analytica:&lt;br /&gt;
* On the command line: &amp;lt;code&amp;gt;Analytica.exe MyData.csv&amp;lt;/code&amp;gt;&lt;br /&gt;
* Drag and drop a *.csv file onto the diagram (which behaves the same as using &amp;lt;code&amp;gt;File / Import...&amp;lt;/code&amp;gt; on the *.csv file). &lt;br /&gt;
&lt;br /&gt;
== Spreadsheets ==&lt;br /&gt;
* &amp;lt;code&amp;gt;[[SpreadsheetOpen]](&amp;quot;new&amp;quot;)&amp;lt;/code&amp;gt; now creates a blank spreadsheet in memory. Works with both the Excel and LibXl backends.&lt;br /&gt;
* Prefacing a sheet name with + in the call to [[SpreadsheetSetCell]] or [[SpreadsheetSetRange]] will add a new sheet by that name to the workbook (as it applies the specified change to that new worksheet). Works with either backend.&lt;br /&gt;
* You can also now remove a sheet from a workbook using: &amp;lt;code&amp;gt;[[SpreadsheetSetCell]](wb, &amp;quot;-OldSheet&amp;quot;, col, row, Null)&amp;lt;/code&amp;gt;. The «col» and «row» parameters are required but ignored in this case.&lt;br /&gt;
&lt;br /&gt;
== Misc. User Interface ==&lt;br /&gt;
* The Node Icon editor (on the Diagram menu) is far more flexible. You can use it to edit arbitrary node images, with support for color and transparency.&lt;br /&gt;
* Added keyboard shortcuts for '''Set Node Style...''' and '''Set Diagram Style...'''&lt;br /&gt;
* There is a new option, '''Use as default arrow style''', on the right-mouse context menu for an influence diagram arrow. This sets the global arrow style default to match the selected arrow.&lt;br /&gt;
&lt;br /&gt;
== Built-in functions ==&lt;br /&gt;
* New options for [[GetProcessInfo]]: &amp;lt;code&amp;gt;&amp;quot;Number of monitors&amp;quot;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;quot;Current monitor rect&amp;quot;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;quot;Current monitor work rect&amp;quot;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;quot;Monitor «N» Rect&amp;quot;&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;&amp;quot;Monitor «N» work rect&amp;quot;&amp;lt;/code&amp;gt;.&lt;br /&gt;
* New optional parameter, «throwParsingErrors», to [[Evaluate]].&lt;br /&gt;
* [[ReadFromURL]] is a bit smarter about returning binary content (like &amp;lt;code&amp;gt;*.zip&amp;lt;/code&amp;gt; files) as a [[In-memory binary data terms|Binary Data Term]].&lt;br /&gt;
* [[MakeJSON]] will automatically encode an image in base64 JSON, and [[ParseJSON]] will automatically decode a base64 representation into an image. Also there is a new «maxCells» parameter that can be used to prevent giagantic arrays from being encoded (resulting in immensely long text).&lt;br /&gt;
* &amp;lt;code&amp;gt;[[GetProcessInfo]](&amp;quot;UI Language&amp;quot;)&amp;lt;/code&amp;gt; returns the UI language, either &amp;lt;code&amp;gt;&amp;quot;en&amp;quot;&amp;lt;/code&amp;gt; (for English) or &amp;lt;code&amp;gt;&amp;quot;es&amp;quot;&amp;lt;/code&amp;gt; for Spanish.&lt;br /&gt;
* &amp;lt;code&amp;gt;[[QualifiedName]]( obj, nsContext )&amp;lt;/code&amp;gt;: Returns the qualified identifier (as text) that uniquely identifies «obj» from the context of «nsContext». &lt;br /&gt;
* &amp;lt;code&amp;gt;[[Namespace]] of X&amp;lt;/code&amp;gt;: A new virtual attribute that returns the namespace of «X».&lt;br /&gt;
* [[Evaluate]] has a second return value that captures output to the typescript window (including stuff written by [[ConsolePrint]]) during the evaluation. It also has a new optional «ignoreAtFirstWarning» parameter that can be used in conjunction, capturing the first warning text in that second return value, not showing the return value to the user, and ignoring additional warnings during the duration of the Evaluate call (enables Assista to see the warnings).&lt;br /&gt;
* Added a syntax construct for [[Namespaces#Scoped_namespace_inclusion:_Using|Scoped namespace inclusion]] to bring a namespace into scope for only a localized expression or lexical block.&lt;br /&gt;
&lt;br /&gt;
== System variables ==&lt;br /&gt;
* SysVar [[Graph_ColorSequence]]: Replaces [[Graph_ColorSeq]] which is now deprecated. The new sysvar contains a list of color interer with one integer (of the form &amp;lt;code&amp;gt;0x00rrggbb&amp;lt;/code&amp;gt;) per color (the deprecated version used triples of numbers per color).&lt;br /&gt;
&lt;br /&gt;
== Engine ==&lt;br /&gt;
* After loading a large model, it parses expressions in parallel, using multiple threads/cores to parse different variables. On some computers on some models, this can dramatically speed up model load time.&lt;br /&gt;
* Color attributes use color integers for consistently (rather than the legacy number triples for R,G,B).&lt;br /&gt;
* You can use a localized namespace import (for a single expression or single lexical block) with the syntax&lt;br /&gt;
*:&amp;lt;code&amp;gt;[[Using..Do|Using]] NS;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Model loading ==&lt;br /&gt;
When opening a model file, the &amp;quot;checking&amp;quot; stage (when attributes are parsed) parses different expressions on different threads, resulting in substantially faster model load times for very large models.&lt;br /&gt;
&lt;br /&gt;
Note: In the event that this creates a problem with your specific model (maybe due to an as-yet-undiscovered multithreading bug), you can disable it for your model as follows:&lt;br /&gt;
# Temporarily turn off multithreading (Skip this step if you are able to load your model)&lt;br /&gt;
## New model&lt;br /&gt;
## &amp;lt;b&amp;gt;Definition menu / System variables / Settings / Maximum evaluation threads&amp;lt;/b&amp;gt;&lt;br /&gt;
## Set to 1  (and remember the previous value)&lt;br /&gt;
# Open your model&lt;br /&gt;
# &amp;lt;b&amp;gt;Definition menu / System variables / Settings / Disable Multithreaded Evaluations&amp;lt;/b&amp;gt;&lt;br /&gt;
# Press the &amp;lt;code&amp;gt;Edit Table&amp;lt;/code&amp;gt; button.&lt;br /&gt;
# Check the checkbox for &amp;lt;code&amp;gt;Parsing&amp;lt;/code&amp;gt;&lt;br /&gt;
# Save your model&lt;br /&gt;
# &amp;lt;b&amp;gt;Definition menu / System variables / Settings / Maximum evaluation threads&amp;lt;/b&amp;gt;&lt;br /&gt;
#: Restore the original value from Step 1&lt;br /&gt;
&lt;br /&gt;
== MCP server ==&lt;br /&gt;
* Added an ability to install multiple ADE-based Mcp servers that run different ADE releases. For example, you can install two MCP servers into Claude Code:&lt;br /&gt;
* ade-server: Runs ADE 7.1&lt;br /&gt;
* ade-server-70: Runs ADE 7.0&lt;br /&gt;
The information in the &amp;lt;code&amp;gt;«ADE install folder»\Examples\Mcp_server\README.txt&amp;lt;/code&amp;gt; file explain how (with enough info for Claude code to configure this for you).  &lt;br /&gt;
&lt;br /&gt;
With both installed, Claude Code (or other MCP-enabled AI agents) can compare results for the same model across different releases, etc.&lt;br /&gt;
&lt;br /&gt;
Side note: The Mcp server was added to ADE 7.0.&lt;br /&gt;
&lt;br /&gt;
== Internals ==&lt;br /&gt;
This release has undergone massive internal restructuring and refactorization. Ideally (i.e., in the absence of bugs) these changes won't change functionality, but may alter some aspects of behavior, hopefully for the better.&lt;br /&gt;
* Internal data structures use for multi-dimensional arrays has been changed. Possible impacts:&lt;br /&gt;
** Likely to remove the sensitivity to the &amp;quot;canonical order&amp;quot; of indexes on evaluation speed.&lt;br /&gt;
** May change relative evaluation speeds of various functions and operations.&lt;br /&gt;
* Added system modules/namespaces: &amp;lt;code&amp;gt;SysLib_Internal&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;SysLib_Experimental&amp;lt;/code&amp;gt;. Intended for Analytica-internal use.&lt;br /&gt;
*[[:Category:Cell format functions|Cell formatting functions]] (like [[CellSpan]], [[CellFill]], etc.) are now [[Struct]]s rather than functions. Does not impact usage, other that making it easier for code to traverse resulting data structures.&lt;br /&gt;
&lt;br /&gt;
== Discontinued... ==&lt;br /&gt;
* Plug-in functions. (An old hook that allows you to extend Analytica with compiled functions and UI elements written it C++. We are almost certain no one is using these hooks any more.)&lt;br /&gt;
* The sysvar [[Graph_ColorSeq]] is now deprecated (but works for both reading and setting to preserve backward compatibility). It has been replaced by the system variable [[Graph_ColorSequence]].&lt;br /&gt;
* The built-in (but undocumented, unsupported) &amp;lt;code&amp;gt;ifpos&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;if0&amp;lt;/code&amp;gt; functions were removed.&lt;br /&gt;
* The legacy (deprecated) syntax &amp;lt;code&amp;gt;Using temp:=... Do&amp;lt;/code&amp;gt; for declaring locals is no longer supported. Legacy models will have such definitions automatically rewritten to use [[Local..Do]] when you load them. [[Using..Do]] now has a different meaning, which is to provide a temporary namespace import.&lt;/div&gt;</summary>
		<author><name>Mhenrion</name></author>
	</entry>
	<entry>
		<id>https://docs.analytica.com/index.php?title=File:Assista_What_kinds_of_things_can_you_do.png&amp;diff=64031</id>
		<title>File:Assista What kinds of things can you do.png</title>
		<link rel="alternate" type="text/html" href="https://docs.analytica.com/index.php?title=File:Assista_What_kinds_of_things_can_you_do.png&amp;diff=64031"/>
		<updated>2026-06-26T18:29:22Z</updated>

		<summary type="html">&lt;p&gt;Mhenrion: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Assista dialog page answer question &amp;quot;What kinds of things can you do?&amp;quot;&lt;/div&gt;</summary>
		<author><name>Mhenrion</name></author>
	</entry>
	<entry>
		<id>https://docs.analytica.com/index.php?title=What%27s_new_in_Analytica_7.1%3F&amp;diff=64030</id>
		<title>What's new in Analytica 7.1?</title>
		<link rel="alternate" type="text/html" href="https://docs.analytica.com/index.php?title=What%27s_new_in_Analytica_7.1%3F&amp;diff=64030"/>
		<updated>2026-06-26T18:23:21Z</updated>

		<summary type="html">&lt;p&gt;Mhenrion: /* Highlights of Analytica 7.1 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!--Analytica 7.1 is currently under development, and will be the next future release of Analytica. The current official release is [[Analytica 7.0]]. This page is under construction, and will list enhancements that are new to Analytica or ADE 7.1.--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Analytica release 7.1 is currently in early [[Beta Tester Page|Beta Testing]].  If have have a paid desktop Analytica subscription, we encourage you to try it out from the [[Beta Tester Page]].&lt;br /&gt;
&lt;br /&gt;
== Highlights of Analytica 7.1 ==&lt;br /&gt;
&lt;br /&gt;
''''[[#Assista|Assista]]:''' By far the most important visible improvement is in [[#Assista|Assista]] Analytica's A.I. assistant.  When first released in Analytica 6.5, Assista was already quite useful for explaining Analytica features, explaining models, adding documentation, explaining errors, and building parts of a model, but it was a bit unreliable in Analytica syntax and drawing clear influence diagrams.  We think you will find that the latest Assista is so much improved, including writing Analytica Definitions and drawing influence diagrams. You may start to use chatting in English (or Spanish) with Assista as the primary way you interact with Analytica. Try it out and let us know. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''''[[#Spreadsheets|CSV and spreadsheet files ]]:'''  You can now import [[#CSV files|CSV files]] simply by dragging them into an diagram or in a comman line when you start Analytica. You can create a new [[#spreadsheets |spreadsheet]]  with and add or remove sheets from it. &lt;br /&gt;
&lt;br /&gt;
''''[[#Engine|Speed up]]:'''  Large models start up much faster using multiple processes. The internal arrray representation now uses tensors, like many AI programs, which makes it faster and more compact -- and makes possible future far more substantial efficiencies.&lt;br /&gt;
&lt;br /&gt;
'''[[#Spanish|Spanish]]:'''  The user interface now supports Spanish -- with other languages in the future.&lt;br /&gt;
&lt;br /&gt;
== Assista ==&lt;br /&gt;
[[Assista]] is Analytica's A.I. assistant. She is greatly improved in this release.&lt;br /&gt;
* Her UI is now a top-level window that resides at the same level as Analytica's main application window.&lt;br /&gt;
** You can move her chat window to a non-overlapping location or even a different monitor (to maximize screen real estate used by your Analytica window).&lt;br /&gt;
** Selected objects remain visually selected in the main window when you type into Assista.&lt;br /&gt;
* Her chat has a different look-and-feel.&lt;br /&gt;
* Her chat window is faster and more responsive&lt;br /&gt;
* You can drag-highlight any text in her chat and copy to paste elsewhere.&lt;br /&gt;
* The UI has improved formatting capabilities for displaying Assista's response.&lt;br /&gt;
* Her &amp;quot;thoughts&amp;quot; display as she is processing your prompt, making it clear she is working and even giving you a peek into how she is solving it.&lt;br /&gt;
* She has a new processing pipeline on the backend, enabling her to respond faster but also work longer on harder tasks. &lt;br /&gt;
* She has an extended set of competencies (skills). &lt;br /&gt;
* Your sessions are automatically saved, keyed to your model, and you can resume a previous session for that model from a session selector dropdown in the UI.&lt;br /&gt;
* You can create and expose [[Assista_-_Analytica_AI_Assistant/Custom_user_skills_for_Assista|your own custom skills]] to expand her capabilities, or ask her to do it for you.&lt;br /&gt;
* You can add or drag-and-drop a document (&amp;lt;code&amp;gt;*.txt, *.pdf, *.md, *.docx, *.xlsx, *.xlsm&amp;lt;/code&amp;gt;) or URLs into the chat which Assista can &amp;quot;ingest&amp;quot; during your conversation. Have her extract data from the doc, adding tables to your model. Or even to implement a model described by the paper or translate a spreadsheet into an Analytica model.&lt;br /&gt;
* Assista can &amp;quot;see&amp;quot; images in your model -- pictures in nodes, images in table cells, and diagram or graph screenshots.&lt;br /&gt;
* She is language-aware. If you are using Analytica is Spanish, she'll provide UI instructions that refer to the Spanish-language UI elements.&lt;br /&gt;
* She is aware of her reasoning in previous conversation turns and the actions she took, enabling her to explain her reasoning or build on ideas she thought about but might not have included in the final response.&lt;br /&gt;
* She has an improved ability to navigate and find objects within your (large) models.&lt;br /&gt;
* You can personalize her tone, style, level of verbosity and provide her custom instructions. To do this, click on the icon in the top-left corner of the Assista window and select Personization...&lt;br /&gt;
&lt;br /&gt;
== Multi-linguality: Spanish UI ==&lt;br /&gt;
Analytica now comes with a Spanish-language UI, in which its menus, dialogs, error messages and built-in function descriptions are all in Spanish. Also its installer runs with a Spanish-language UI when you are in a Spanish-language region.  Spanish is the default when you are in a Spanish-language region. &lt;br /&gt;
&lt;br /&gt;
You can override the default language by launching Analytica as:&lt;br /&gt;
* &amp;lt;code&amp;gt;Analytica.exe /lang:es&amp;lt;/code&amp;gt;&lt;br /&gt;
*: or&lt;br /&gt;
* &amp;lt;code&amp;gt;Analytica.exe /lang:en&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can also set the &amp;lt;code&amp;gt;Language&amp;lt;/code&amp;gt; registry setting in the &amp;lt;code&amp;gt;&amp;quot;HKCU/Software/Lumina Decision Systems/Analytica&amp;quot;&amp;lt;/code&amp;gt; hive to REG_SZ &amp;lt;code&amp;gt;&amp;quot;en&amp;quot;&amp;lt;/code&amp;gt; on &amp;lt;code&amp;gt;&amp;quot;es&amp;quot;&amp;lt;/code&amp;gt; for your default if different from your windows region setting.&lt;br /&gt;
&lt;br /&gt;
Some of you may ask &amp;quot;what about my language?&amp;quot;. Stay tuned (and let us know there is a demand for your language). Once our AI translation pipeline is solid, it shouldn't be too hard for us to add more.&lt;br /&gt;
&lt;br /&gt;
== Window appearance ==&lt;br /&gt;
The appearance of the chrome around child MDI windows (aka the &amp;quot;non-client area&amp;quot;) has been changed to more closely match the Windows 11 style of windows -- i.e., thin (1 pixel) borders, rounded corners at the top, white title bar, very plain (text-like) button images in the toolbar.&lt;br /&gt;
&lt;br /&gt;
== CSV files ==&lt;br /&gt;
There are now a few additional ways to open CSV files in Analytica:&lt;br /&gt;
* On the command line: &amp;lt;code&amp;gt;Analytica.exe MyData.csv&amp;lt;/code&amp;gt;&lt;br /&gt;
* Drag and drop a *.csv file onto the diagram (which behaves the same as using &amp;lt;code&amp;gt;File / Import...&amp;lt;/code&amp;gt; on the *.csv file). &lt;br /&gt;
&lt;br /&gt;
== Spreadsheets ==&lt;br /&gt;
* &amp;lt;code&amp;gt;[[SpreadsheetOpen]](&amp;quot;new&amp;quot;)&amp;lt;/code&amp;gt; now creates a blank spreadsheet in memory. Works with both the Excel and LibXl backends.&lt;br /&gt;
* Prefacing a sheet name with + in the call to [[SpreadsheetSetCell]] or [[SpreadsheetSetRange]] will add a new sheet by that name to the workbook (as it applies the specified change to that new worksheet). Works with either backend.&lt;br /&gt;
* You can also now remove a sheet from a workbook using: &amp;lt;code&amp;gt;[[SpreadsheetSetCell]](wb, &amp;quot;-OldSheet&amp;quot;, col, row, Null)&amp;lt;/code&amp;gt;. The «col» and «row» parameters are required but ignored in this case.&lt;br /&gt;
&lt;br /&gt;
== Misc. User Interface ==&lt;br /&gt;
* The Node Icon editor (on the Diagram menu) is far more flexible. You can use it to edit arbitrary node images, with support for color and transparency.&lt;br /&gt;
* Added keyboard shortcuts for '''Set Node Style...''' and '''Set Diagram Style...'''&lt;br /&gt;
* There is a new option, '''Use as default arrow style''', on the right-mouse context menu for an influence diagram arrow. This sets the global arrow style default to match the selected arrow.&lt;br /&gt;
&lt;br /&gt;
== Built-in functions ==&lt;br /&gt;
* New options for [[GetProcessInfo]]: &amp;lt;code&amp;gt;&amp;quot;Number of monitors&amp;quot;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;quot;Current monitor rect&amp;quot;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;quot;Current monitor work rect&amp;quot;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;quot;Monitor «N» Rect&amp;quot;&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;&amp;quot;Monitor «N» work rect&amp;quot;&amp;lt;/code&amp;gt;.&lt;br /&gt;
* New optional parameter, «throwParsingErrors», to [[Evaluate]].&lt;br /&gt;
* [[ReadFromURL]] is a bit smarter about returning binary content (like &amp;lt;code&amp;gt;*.zip&amp;lt;/code&amp;gt; files) as a [[In-memory binary data terms|Binary Data Term]].&lt;br /&gt;
* [[MakeJSON]] will automatically encode an image in base64 JSON, and [[ParseJSON]] will automatically decode a base64 representation into an image. Also there is a new «maxCells» parameter that can be used to prevent giagantic arrays from being encoded (resulting in immensely long text).&lt;br /&gt;
* &amp;lt;code&amp;gt;[[GetProcessInfo]](&amp;quot;UI Language&amp;quot;)&amp;lt;/code&amp;gt; returns the UI language, either &amp;lt;code&amp;gt;&amp;quot;en&amp;quot;&amp;lt;/code&amp;gt; (for English) or &amp;lt;code&amp;gt;&amp;quot;es&amp;quot;&amp;lt;/code&amp;gt; for Spanish.&lt;br /&gt;
* &amp;lt;code&amp;gt;[[QualifiedName]]( obj, nsContext )&amp;lt;/code&amp;gt;: Returns the qualified identifier (as text) that uniquely identifies «obj» from the context of «nsContext». &lt;br /&gt;
* &amp;lt;code&amp;gt;[[Namespace]] of X&amp;lt;/code&amp;gt;: A new virtual attribute that returns the namespace of «X».&lt;br /&gt;
* [[Evaluate]] has a second return value that captures output to the typescript window (including stuff written by [[ConsolePrint]]) during the evaluation. It also has a new optional «ignoreAtFirstWarning» parameter that can be used in conjunction, capturing the first warning text in that second return value, not showing the return value to the user, and ignoring additional warnings during the duration of the Evaluate call (enables Assista to see the warnings).&lt;br /&gt;
* Added a syntax construct for [[Namespaces#Scoped_namespace_inclusion:_Using|Scoped namespace inclusion]] to bring a namespace into scope for only a localized expression or lexical block.&lt;br /&gt;
&lt;br /&gt;
== System variables ==&lt;br /&gt;
* SysVar [[Graph_ColorSequence]]: Replaces [[Graph_ColorSeq]] which is now deprecated. The new sysvar contains a list of color interer with one integer (of the form &amp;lt;code&amp;gt;0x00rrggbb&amp;lt;/code&amp;gt;) per color (whereas the deprecated used triples of numbers per color).&lt;br /&gt;
&lt;br /&gt;
== Engine ==&lt;br /&gt;
* After loading a large model, it parses expressions in parallel, using multiple threads/cores to parse different variables. On some computers on some models, this can dramatically speed up model load time.&lt;br /&gt;
* Color attributes use color integers for consistently (rather than the legacy number triples for R,G,B).&lt;br /&gt;
* You can use a localized namespace import (for a single expression or single lexical block) with the syntax&lt;br /&gt;
*:&amp;lt;code&amp;gt;[[Using..Do|Using]] NS;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Model loading ==&lt;br /&gt;
When opening a model file, the &amp;quot;checking&amp;quot; stage (when attributes are parsed) parses different expressions on different threads, resulting in substantially faster model load times for very large models.&lt;br /&gt;
&lt;br /&gt;
Note: In the event that this creates a problem with your specific model (maybe due to an as-yet-undiscovered multithreading bug), you can disable it for your model as follows:&lt;br /&gt;
# Temporarily turn off multithreading (Skip this step if you are able to load your model)&lt;br /&gt;
## New model&lt;br /&gt;
## &amp;lt;b&amp;gt;Definition menu / System variables / Settings / Maximum evaluation threads&amp;lt;/b&amp;gt;&lt;br /&gt;
## Set to 1  (and remember the previous value)&lt;br /&gt;
# Open your model&lt;br /&gt;
# &amp;lt;b&amp;gt;Definition menu / System variables / Settings / Disable Multithreaded Evaluations&amp;lt;/b&amp;gt;&lt;br /&gt;
# Press the &amp;lt;code&amp;gt;Edit Table&amp;lt;/code&amp;gt; button.&lt;br /&gt;
# Check the checkbox for &amp;lt;code&amp;gt;Parsing&amp;lt;/code&amp;gt;&lt;br /&gt;
# Save your model&lt;br /&gt;
# &amp;lt;b&amp;gt;Definition menu / System variables / Settings / Maximum evaluation threads&amp;lt;/b&amp;gt;&lt;br /&gt;
#: Restore the original value from Step 1&lt;br /&gt;
&lt;br /&gt;
== MCP server ==&lt;br /&gt;
* Added an ability to install multiple ADE-based Mcp servers that run different ADE releases. For example, you can install two MCP servers into Claude Code:&lt;br /&gt;
* ade-server: Runs ADE 7.1&lt;br /&gt;
* ade-server-70: Runs ADE 7.0&lt;br /&gt;
The information in the &amp;lt;code&amp;gt;«ADE install folder»\Examples\Mcp_server\README.txt&amp;lt;/code&amp;gt; file explain how (with enough info for Claude code to configure this for you).  &lt;br /&gt;
&lt;br /&gt;
With both installed, Claude Code (or other MCP-enabled AI agents) can compare results for the same model across different releases, etc.&lt;br /&gt;
&lt;br /&gt;
Side note: The Mcp server was added to ADE 7.0.&lt;br /&gt;
&lt;br /&gt;
== Internals ==&lt;br /&gt;
This release has undergone massive internal restructuring and refactorization. Ideally (i.e., in the absence of bugs) these changes won't change functionality, but may alter some aspects of behavior, hopefully for the better.&lt;br /&gt;
* Internal data structures use for multi-dimensional arrays has been changed. Possible impacts:&lt;br /&gt;
** Likely to remove the sensitivity to the &amp;quot;canonical order&amp;quot; of indexes on evaluation speed.&lt;br /&gt;
** May change relative evaluation speeds of various functions and operations.&lt;br /&gt;
* Added system modules/namespaces: &amp;lt;code&amp;gt;SysLib_Internal&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;SysLib_Experimental&amp;lt;/code&amp;gt;. Intended for Analytica-internal use.&lt;br /&gt;
*[[:Category:Cell format functions|Cell formatting functions]] (like [[CellSpan]], [[CellFill]], etc.) are now [[Struct]]s rather than functions. Does not impact usage, other that making it easier for code to traverse resulting data structures.&lt;br /&gt;
&lt;br /&gt;
== Discontinued... ==&lt;br /&gt;
* Plug-in functions. (An old hook that allows you to extend Analytica with compiled functions and UI elements written it C++. We are almost certain no one is using these hooks any more.)&lt;br /&gt;
* The sysvar [[Graph_ColorSeq]] is now deprecated (but works for both reading and setting to preserve backward compatibility). It has been replaced by the system variable [[Graph_ColorSequence]].&lt;br /&gt;
* The built-in (but undocumented, unsupported) &amp;lt;code&amp;gt;ifpos&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;if0&amp;lt;/code&amp;gt; functions were removed.&lt;br /&gt;
* The legacy (deprecated) syntax &amp;lt;code&amp;gt;Using temp:=... Do&amp;lt;/code&amp;gt; for declaring locals is no longer supported. Legacy models will have such definitions automatically rewritten to use [[Local..Do]] when you load them. [[Using..Do]] now has a different meaning, which is to provide a temporary namespace import.&lt;/div&gt;</summary>
		<author><name>Mhenrion</name></author>
	</entry>
	<entry>
		<id>https://docs.analytica.com/index.php?title=What%27s_new_in_Analytica_7.1%3F&amp;diff=64029</id>
		<title>What's new in Analytica 7.1?</title>
		<link rel="alternate" type="text/html" href="https://docs.analytica.com/index.php?title=What%27s_new_in_Analytica_7.1%3F&amp;diff=64029"/>
		<updated>2026-06-26T00:56:12Z</updated>

		<summary type="html">&lt;p&gt;Mhenrion: /* Highlights of Analytica 7.1 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!--Analytica 7.1 is currently under development, and will be the next future release of Analytica. The current official release is [[Analytica 7.0]]. This page is under construction, and will list enhancements that are new to Analytica or ADE 7.1.--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Analytica release 7.1 is currently in early [[Beta Tester Page|Beta Testing]].  If have have a paid desktop Analytica subscription, we encourage you to try it out from the [[Beta Tester Page]].&lt;br /&gt;
&lt;br /&gt;
== Highlights of Analytica 7.1 ==&lt;br /&gt;
&lt;br /&gt;
''''[[#Assista|Assista]]:''' By far the most important visible improvement is in [[#Assista|Assista]] Analytica's A.I. assistant.  When first released in Analytica 6.5, Assista was already quite useful for explaining Analytica features, explaining models, adding documentation, explaining errors, and building parts of a model, but it was a bit unreliable in writing Analytica with good syntax and poor at laying out influence diagrams.  We think you will find that the latest Assista is so much improved, including at Analytica syntax and drawing influence diagrams, that you may start to use chatting in English (or Spanish) as the primary way you interact with Analytica. Try it out and let us know. &lt;br /&gt;
&lt;br /&gt;
''''[[#Spreadsheets|CSV and spreadsheet files ]]:'''  You can now import [[#CSV files|CSV files]] simply by dragging them into an diagram or in a comman line when you start Analytica. You can create a new [[#spreadsheets |spreadsheet]]  with and add or remove sheets from it. &lt;br /&gt;
&lt;br /&gt;
''''[[#Engine|Speed up]]:'''  Large models start up much faster using multiple processes. The internal arrray representation now uses tensors, like many AI programs, which makes it faster and more compact -- and makes possible future far more substantial efficiencies.&lt;br /&gt;
&lt;br /&gt;
'''[[#Spanish|Spanish]]:'''  The user interface now supports Spanish -- with other languages in the future.&lt;br /&gt;
&lt;br /&gt;
== Assista ==&lt;br /&gt;
[[Assista]] is Analytica's A.I. assistant. She is greatly improved in this release.&lt;br /&gt;
* Her UI is now a top-level window that resides at the same level as Analytica's main application window.&lt;br /&gt;
** You can move her chat window to a non-overlapping location or even a different monitor (to maximize screen real estate used by your Analytica window).&lt;br /&gt;
** Selected objects remain visually selected in the main window when you type into Assista.&lt;br /&gt;
* Her chat has a different look-and-feel.&lt;br /&gt;
* Her chat window is faster and more responsive&lt;br /&gt;
* You can drag-highlight any text in her chat and copy to paste elsewhere.&lt;br /&gt;
* The UI has improved formatting capabilities for displaying Assista's response.&lt;br /&gt;
* Her &amp;quot;thoughts&amp;quot; display as she is processing your prompt, making it clear she is working and even giving you a peek into how she is solving it.&lt;br /&gt;
* She has a new processing pipeline on the backend, enabling her to respond faster but also work longer on harder tasks. &lt;br /&gt;
* She has an extended set of competencies (skills). &lt;br /&gt;
* Your sessions are automatically saved, keyed to your model, and you can resume a previous session for that model from a session selector dropdown in the UI.&lt;br /&gt;
* You can create and expose [[Assista_-_Analytica_AI_Assistant/Custom_user_skills_for_Assista|your own custom skills]] to expand her capabilities, or ask her to do it for you.&lt;br /&gt;
* You can add or drag-and-drop a document (&amp;lt;code&amp;gt;*.txt, *.pdf, *.md, *.docx, *.xlsx, *.xlsm&amp;lt;/code&amp;gt;) or URLs into the chat which Assista can &amp;quot;ingest&amp;quot; during your conversation. Have her extract data from the doc, adding tables to your model. Or even to implement a model described by the paper or translate a spreadsheet into an Analytica model.&lt;br /&gt;
* Assista can &amp;quot;see&amp;quot; images in your model -- pictures in nodes, images in table cells, and diagram or graph screenshots.&lt;br /&gt;
* She is language-aware. If you are using Analytica is Spanish, she'll provide UI instructions that refer to the Spanish-language UI elements.&lt;br /&gt;
* She is aware of her reasoning in previous conversation turns and the actions she took, enabling her to explain her reasoning or build on ideas she thought about but might not have included in the final response.&lt;br /&gt;
* She has an improved ability to navigate and find objects within your (large) models.&lt;br /&gt;
* You can personalize her tone, style, level of verbosity and provide her custom instructions. To do this, click on the icon in the top-left corner of the Assista window and select Personization...&lt;br /&gt;
&lt;br /&gt;
== Multi-linguality: Spanish UI ==&lt;br /&gt;
Analytica now comes with a Spanish-language UI, in which its menus, dialogs, error messages and built-in function descriptions are all in Spanish. Also its installer runs with a Spanish-language UI when you are in a Spanish-language region.  Spanish is the default when you are in a Spanish-language region. &lt;br /&gt;
&lt;br /&gt;
You can override the default language by launching Analytica as:&lt;br /&gt;
* &amp;lt;code&amp;gt;Analytica.exe /lang:es&amp;lt;/code&amp;gt;&lt;br /&gt;
*: or&lt;br /&gt;
* &amp;lt;code&amp;gt;Analytica.exe /lang:en&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can also set the &amp;lt;code&amp;gt;Language&amp;lt;/code&amp;gt; registry setting in the &amp;lt;code&amp;gt;&amp;quot;HKCU/Software/Lumina Decision Systems/Analytica&amp;quot;&amp;lt;/code&amp;gt; hive to REG_SZ &amp;lt;code&amp;gt;&amp;quot;en&amp;quot;&amp;lt;/code&amp;gt; on &amp;lt;code&amp;gt;&amp;quot;es&amp;quot;&amp;lt;/code&amp;gt; for your default if different from your windows region setting.&lt;br /&gt;
&lt;br /&gt;
Some of you may ask &amp;quot;what about my language?&amp;quot;. Stay tuned (and let us know there is a demand for your language). Once our AI translation pipeline is solid, it shouldn't be too hard for us to add more.&lt;br /&gt;
&lt;br /&gt;
== Window appearance ==&lt;br /&gt;
The appearance of the chrome around child MDI windows (aka the &amp;quot;non-client area&amp;quot;) has been changed to more closely match the Windows 11 style of windows -- i.e., thin (1 pixel) borders, rounded corners at the top, white title bar, very plain (text-like) button images in the toolbar.&lt;br /&gt;
&lt;br /&gt;
== CSV files ==&lt;br /&gt;
There are now a few additional ways to open CSV files in Analytica:&lt;br /&gt;
* On the command line: &amp;lt;code&amp;gt;Analytica.exe MyData.csv&amp;lt;/code&amp;gt;&lt;br /&gt;
* Drag and drop a *.csv file onto the diagram (which behaves the same as using &amp;lt;code&amp;gt;File / Import...&amp;lt;/code&amp;gt; on the *.csv file). &lt;br /&gt;
&lt;br /&gt;
== Spreadsheets ==&lt;br /&gt;
* &amp;lt;code&amp;gt;[[SpreadsheetOpen]](&amp;quot;new&amp;quot;)&amp;lt;/code&amp;gt; now creates a blank spreadsheet in memory. Works with both the Excel and LibXl backends.&lt;br /&gt;
* Prefacing a sheet name with + in the call to [[SpreadsheetSetCell]] or [[SpreadsheetSetRange]] will add a new sheet by that name to the workbook (as it applies the specified change to that new worksheet). Works with either backend.&lt;br /&gt;
* You can also now remove a sheet from a workbook using: &amp;lt;code&amp;gt;[[SpreadsheetSetCell]](wb, &amp;quot;-OldSheet&amp;quot;, col, row, Null)&amp;lt;/code&amp;gt;. The «col» and «row» parameters are required but ignored in this case.&lt;br /&gt;
&lt;br /&gt;
== Misc. User Interface ==&lt;br /&gt;
* The Node Icon editor (on the Diagram menu) is far more flexible. You can use it to edit arbitrary node images, with support for color and transparency.&lt;br /&gt;
* Added keyboard shortcuts for '''Set Node Style...''' and '''Set Diagram Style...'''&lt;br /&gt;
* There is a new option, '''Use as default arrow style''', on the right-mouse context menu for an influence diagram arrow. This sets the global arrow style default to match the selected arrow.&lt;br /&gt;
&lt;br /&gt;
== Built-in functions ==&lt;br /&gt;
* New options for [[GetProcessInfo]]: &amp;lt;code&amp;gt;&amp;quot;Number of monitors&amp;quot;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;quot;Current monitor rect&amp;quot;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;quot;Current monitor work rect&amp;quot;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;quot;Monitor «N» Rect&amp;quot;&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;&amp;quot;Monitor «N» work rect&amp;quot;&amp;lt;/code&amp;gt;.&lt;br /&gt;
* New optional parameter, «throwParsingErrors», to [[Evaluate]].&lt;br /&gt;
* [[ReadFromURL]] is a bit smarter about returning binary content (like &amp;lt;code&amp;gt;*.zip&amp;lt;/code&amp;gt; files) as a [[In-memory binary data terms|Binary Data Term]].&lt;br /&gt;
* [[MakeJSON]] will automatically encode an image in base64 JSON, and [[ParseJSON]] will automatically decode a base64 representation into an image. Also there is a new «maxCells» parameter that can be used to prevent giagantic arrays from being encoded (resulting in immensely long text).&lt;br /&gt;
* &amp;lt;code&amp;gt;[[GetProcessInfo]](&amp;quot;UI Language&amp;quot;)&amp;lt;/code&amp;gt; returns the UI language, either &amp;lt;code&amp;gt;&amp;quot;en&amp;quot;&amp;lt;/code&amp;gt; (for English) or &amp;lt;code&amp;gt;&amp;quot;es&amp;quot;&amp;lt;/code&amp;gt; for Spanish.&lt;br /&gt;
* &amp;lt;code&amp;gt;[[QualifiedName]]( obj, nsContext )&amp;lt;/code&amp;gt;: Returns the qualified identifier (as text) that uniquely identifies «obj» from the context of «nsContext». &lt;br /&gt;
* &amp;lt;code&amp;gt;[[Namespace]] of X&amp;lt;/code&amp;gt;: A new virtual attribute that returns the namespace of «X».&lt;br /&gt;
* [[Evaluate]] has a second return value that captures output to the typescript window (including stuff written by [[ConsolePrint]]) during the evaluation. It also has a new optional «ignoreAtFirstWarning» parameter that can be used in conjunction, capturing the first warning text in that second return value, not showing the return value to the user, and ignoring additional warnings during the duration of the Evaluate call (enables Assista to see the warnings).&lt;br /&gt;
* Added a syntax construct for [[Namespaces#Scoped_namespace_inclusion:_Using|Scoped namespace inclusion]] to bring a namespace into scope for only a localized expression or lexical block.&lt;br /&gt;
&lt;br /&gt;
== System variables ==&lt;br /&gt;
* SysVar [[Graph_ColorSequence]]: Replaces [[Graph_ColorSeq]] which is now deprecated. The new sysvar contains a list of color interer with one integer (of the form &amp;lt;code&amp;gt;0x00rrggbb&amp;lt;/code&amp;gt;) per color (whereas the deprecated used triples of numbers per color).&lt;br /&gt;
&lt;br /&gt;
== Engine ==&lt;br /&gt;
* After loading a large model, it parses expressions in parallel, using multiple threads/cores to parse different variables. On some computers on some models, this can dramatically speed up model load time.&lt;br /&gt;
* Color attributes use color integers for consistently (rather than the legacy number triples for R,G,B).&lt;br /&gt;
* You can use a localized namespace import (for a single expression or single lexical block) with the syntax&lt;br /&gt;
*:&amp;lt;code&amp;gt;[[Using..Do|Using]] NS;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Model loading ==&lt;br /&gt;
When opening a model file, the &amp;quot;checking&amp;quot; stage (when attributes are parsed) parses different expressions on different threads, resulting in substantially faster model load times for very large models.&lt;br /&gt;
&lt;br /&gt;
Note: In the event that this creates a problem with your specific model (maybe due to an as-yet-undiscovered multithreading bug), you can disable it for your model as follows:&lt;br /&gt;
# Temporarily turn off multithreading (Skip this step if you are able to load your model)&lt;br /&gt;
## New model&lt;br /&gt;
## &amp;lt;b&amp;gt;Definition menu / System variables / Settings / Maximum evaluation threads&amp;lt;/b&amp;gt;&lt;br /&gt;
## Set to 1  (and remember the previous value)&lt;br /&gt;
# Open your model&lt;br /&gt;
# &amp;lt;b&amp;gt;Definition menu / System variables / Settings / Disable Multithreaded Evaluations&amp;lt;/b&amp;gt;&lt;br /&gt;
# Press the &amp;lt;code&amp;gt;Edit Table&amp;lt;/code&amp;gt; button.&lt;br /&gt;
# Check the checkbox for &amp;lt;code&amp;gt;Parsing&amp;lt;/code&amp;gt;&lt;br /&gt;
# Save your model&lt;br /&gt;
# &amp;lt;b&amp;gt;Definition menu / System variables / Settings / Maximum evaluation threads&amp;lt;/b&amp;gt;&lt;br /&gt;
#: Restore the original value from Step 1&lt;br /&gt;
&lt;br /&gt;
== MCP server ==&lt;br /&gt;
* Added an ability to install multiple ADE-based Mcp servers that run different ADE releases. For example, you can install two MCP servers into Claude Code:&lt;br /&gt;
* ade-server: Runs ADE 7.1&lt;br /&gt;
* ade-server-70: Runs ADE 7.0&lt;br /&gt;
The information in the &amp;lt;code&amp;gt;«ADE install folder»\Examples\Mcp_server\README.txt&amp;lt;/code&amp;gt; file explain how (with enough info for Claude code to configure this for you).  &lt;br /&gt;
&lt;br /&gt;
With both installed, Claude Code (or other MCP-enabled AI agents) can compare results for the same model across different releases, etc.&lt;br /&gt;
&lt;br /&gt;
Side note: The Mcp server was added to ADE 7.0.&lt;br /&gt;
&lt;br /&gt;
== Internals ==&lt;br /&gt;
This release has undergone massive internal restructuring and refactorization. Ideally (i.e., in the absence of bugs) these changes won't change functionality, but may alter some aspects of behavior, hopefully for the better.&lt;br /&gt;
* Internal data structures use for multi-dimensional arrays has been changed. Possible impacts:&lt;br /&gt;
** Likely to remove the sensitivity to the &amp;quot;canonical order&amp;quot; of indexes on evaluation speed.&lt;br /&gt;
** May change relative evaluation speeds of various functions and operations.&lt;br /&gt;
* Added system modules/namespaces: &amp;lt;code&amp;gt;SysLib_Internal&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;SysLib_Experimental&amp;lt;/code&amp;gt;. Intended for Analytica-internal use.&lt;br /&gt;
*[[:Category:Cell format functions|Cell formatting functions]] (like [[CellSpan]], [[CellFill]], etc.) are now [[Struct]]s rather than functions. Does not impact usage, other that making it easier for code to traverse resulting data structures.&lt;br /&gt;
&lt;br /&gt;
== Discontinued... ==&lt;br /&gt;
* Plug-in functions. (An old hook that allows you to extend Analytica with compiled functions and UI elements written it C++. We are almost certain no one is using these hooks any more.)&lt;br /&gt;
* The sysvar [[Graph_ColorSeq]] is now deprecated (but works for both reading and setting to preserve backward compatibility). It has been replaced by the system variable [[Graph_ColorSequence]].&lt;br /&gt;
* The built-in (but undocumented, unsupported) &amp;lt;code&amp;gt;ifpos&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;if0&amp;lt;/code&amp;gt; functions were removed.&lt;br /&gt;
* The legacy (deprecated) syntax &amp;lt;code&amp;gt;Using temp:=... Do&amp;lt;/code&amp;gt; for declaring locals is no longer supported. Legacy models will have such definitions automatically rewritten to use [[Local..Do]] when you load them. [[Using..Do]] now has a different meaning, which is to provide a temporary namespace import.&lt;/div&gt;</summary>
		<author><name>Mhenrion</name></author>
	</entry>
	<entry>
		<id>https://docs.analytica.com/index.php?title=What%27s_new_in_Analytica_7.1%3F&amp;diff=64028</id>
		<title>What's new in Analytica 7.1?</title>
		<link rel="alternate" type="text/html" href="https://docs.analytica.com/index.php?title=What%27s_new_in_Analytica_7.1%3F&amp;diff=64028"/>
		<updated>2026-06-26T00:54:17Z</updated>

		<summary type="html">&lt;p&gt;Mhenrion: added initial highlights&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!--Analytica 7.1 is currently under development, and will be the next future release of Analytica. The current official release is [[Analytica 7.0]]. This page is under construction, and will list enhancements that are new to Analytica or ADE 7.1.--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Analytica release 7.1 is currently in early [[Beta Tester Page|Beta Testing]].  If have have a paid desktop Analytica subscription, we encourage you to try it out from the [[Beta Tester Page]].&lt;br /&gt;
&lt;br /&gt;
== Highlights of Analytica 7.1 ==&lt;br /&gt;
&lt;br /&gt;
''''[[#Assista|Assista]]:''' By far the most important visible improvement is in [[#Assista|Assista]] Analytica's A.I. assistant.  When first released in Analytica 6.5, Assista was already quite useful for explaining Analytica features, explaining models, adding documentation, explaining errors, and building parts of a model, but it was a bit unreliable in writing Analytica with good syntax and poor at laying out influence diagrams.  We think you will find that the latest Assista is so much improved, including at Analytica syntax and drawing influence diagrams, that you may start to use chatting in English (or Spanish) as the primary way you interact with Analytica. Try it out and let us know. &lt;br /&gt;
&lt;br /&gt;
''''[[CSV and spreadsheet files ]]:'''  You can now import [[#CSV files|CSV files]] simply by dragging them into an diagram or in a comman line when you start Analytica. You can create a new [[#spreadsheets |spreadsheet]]  with and add or remove sheets from it. &lt;br /&gt;
&lt;br /&gt;
''''[[#Engine|Speed up]]:'''  Large models start up much faster using multiple processes. The internal arrray representation now uses tensors, like many AI programs, which makes it faster and more compact -- and makes possible future far more substantial efficiencies.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Assista ==&lt;br /&gt;
[[Assista]] is Analytica's A.I. assistant. She is greatly improved in this release.&lt;br /&gt;
* Her UI is now a top-level window that resides at the same level as Analytica's main application window.&lt;br /&gt;
** You can move her chat window to a non-overlapping location or even a different monitor (to maximize screen real estate used by your Analytica window).&lt;br /&gt;
** Selected objects remain visually selected in the main window when you type into Assista.&lt;br /&gt;
* Her chat has a different look-and-feel.&lt;br /&gt;
* Her chat window is faster and more responsive&lt;br /&gt;
* You can drag-highlight any text in her chat and copy to paste elsewhere.&lt;br /&gt;
* The UI has improved formatting capabilities for displaying Assista's response.&lt;br /&gt;
* Her &amp;quot;thoughts&amp;quot; display as she is processing your prompt, making it clear she is working and even giving you a peek into how she is solving it.&lt;br /&gt;
* She has a new processing pipeline on the backend, enabling her to respond faster but also work longer on harder tasks. &lt;br /&gt;
* She has an extended set of competencies (skills). &lt;br /&gt;
* Your sessions are automatically saved, keyed to your model, and you can resume a previous session for that model from a session selector dropdown in the UI.&lt;br /&gt;
* You can create and expose [[Assista_-_Analytica_AI_Assistant/Custom_user_skills_for_Assista|your own custom skills]] to expand her capabilities, or ask her to do it for you.&lt;br /&gt;
* You can add or drag-and-drop a document (&amp;lt;code&amp;gt;*.txt, *.pdf, *.md, *.docx, *.xlsx, *.xlsm&amp;lt;/code&amp;gt;) or URLs into the chat which Assista can &amp;quot;ingest&amp;quot; during your conversation. Have her extract data from the doc, adding tables to your model. Or even to implement a model described by the paper or translate a spreadsheet into an Analytica model.&lt;br /&gt;
* Assista can &amp;quot;see&amp;quot; images in your model -- pictures in nodes, images in table cells, and diagram or graph screenshots.&lt;br /&gt;
* She is language-aware. If you are using Analytica is Spanish, she'll provide UI instructions that refer to the Spanish-language UI elements.&lt;br /&gt;
* She is aware of her reasoning in previous conversation turns and the actions she took, enabling her to explain her reasoning or build on ideas she thought about but might not have included in the final response.&lt;br /&gt;
* She has an improved ability to navigate and find objects within your (large) models.&lt;br /&gt;
* You can personalize her tone, style, level of verbosity and provide her custom instructions. To do this, click on the icon in the top-left corner of the Assista window and select Personization...&lt;br /&gt;
&lt;br /&gt;
== Multi-linguality: Spanish UI ==&lt;br /&gt;
Analytica now comes with a Spanish-language UI, in which its menus, dialogs, error messages and built-in function descriptions are all in Spanish. Also its installer runs with a Spanish-language UI when you are in a Spanish-language region.  Spanish is the default when you are in a Spanish-language region. &lt;br /&gt;
&lt;br /&gt;
You can override the default language by launching Analytica as:&lt;br /&gt;
* &amp;lt;code&amp;gt;Analytica.exe /lang:es&amp;lt;/code&amp;gt;&lt;br /&gt;
*: or&lt;br /&gt;
* &amp;lt;code&amp;gt;Analytica.exe /lang:en&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can also set the &amp;lt;code&amp;gt;Language&amp;lt;/code&amp;gt; registry setting in the &amp;lt;code&amp;gt;&amp;quot;HKCU/Software/Lumina Decision Systems/Analytica&amp;quot;&amp;lt;/code&amp;gt; hive to REG_SZ &amp;lt;code&amp;gt;&amp;quot;en&amp;quot;&amp;lt;/code&amp;gt; on &amp;lt;code&amp;gt;&amp;quot;es&amp;quot;&amp;lt;/code&amp;gt; for your default if different from your windows region setting.&lt;br /&gt;
&lt;br /&gt;
Some of you may ask &amp;quot;what about my language?&amp;quot;. Stay tuned (and let us know there is a demand for your language). Once our AI translation pipeline is solid, it shouldn't be too hard for us to add more.&lt;br /&gt;
&lt;br /&gt;
== Window appearance ==&lt;br /&gt;
The appearance of the chrome around child MDI windows (aka the &amp;quot;non-client area&amp;quot;) has been changed to more closely match the Windows 11 style of windows -- i.e., thin (1 pixel) borders, rounded corners at the top, white title bar, very plain (text-like) button images in the toolbar.&lt;br /&gt;
&lt;br /&gt;
== CSV files ==&lt;br /&gt;
There are now a few additional ways to open CSV files in Analytica:&lt;br /&gt;
* On the command line: &amp;lt;code&amp;gt;Analytica.exe MyData.csv&amp;lt;/code&amp;gt;&lt;br /&gt;
* Drag and drop a *.csv file onto the diagram (which behaves the same as using &amp;lt;code&amp;gt;File / Import...&amp;lt;/code&amp;gt; on the *.csv file). &lt;br /&gt;
&lt;br /&gt;
== Spreadsheets ==&lt;br /&gt;
* &amp;lt;code&amp;gt;[[SpreadsheetOpen]](&amp;quot;new&amp;quot;)&amp;lt;/code&amp;gt; now creates a blank spreadsheet in memory. Works with both the Excel and LibXl backends.&lt;br /&gt;
* Prefacing a sheet name with + in the call to [[SpreadsheetSetCell]] or [[SpreadsheetSetRange]] will add a new sheet by that name to the workbook (as it applies the specified change to that new worksheet). Works with either backend.&lt;br /&gt;
* You can also now remove a sheet from a workbook using: &amp;lt;code&amp;gt;[[SpreadsheetSetCell]](wb, &amp;quot;-OldSheet&amp;quot;, col, row, Null)&amp;lt;/code&amp;gt;. The «col» and «row» parameters are required but ignored in this case.&lt;br /&gt;
&lt;br /&gt;
== Misc. User Interface ==&lt;br /&gt;
* The Node Icon editor (on the Diagram menu) is far more flexible. You can use it to edit arbitrary node images, with support for color and transparency.&lt;br /&gt;
* Added keyboard shortcuts for '''Set Node Style...''' and '''Set Diagram Style...'''&lt;br /&gt;
* There is a new option, '''Use as default arrow style''', on the right-mouse context menu for an influence diagram arrow. This sets the global arrow style default to match the selected arrow.&lt;br /&gt;
&lt;br /&gt;
== Built-in functions ==&lt;br /&gt;
* New options for [[GetProcessInfo]]: &amp;lt;code&amp;gt;&amp;quot;Number of monitors&amp;quot;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;quot;Current monitor rect&amp;quot;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;quot;Current monitor work rect&amp;quot;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;quot;Monitor «N» Rect&amp;quot;&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;&amp;quot;Monitor «N» work rect&amp;quot;&amp;lt;/code&amp;gt;.&lt;br /&gt;
* New optional parameter, «throwParsingErrors», to [[Evaluate]].&lt;br /&gt;
* [[ReadFromURL]] is a bit smarter about returning binary content (like &amp;lt;code&amp;gt;*.zip&amp;lt;/code&amp;gt; files) as a [[In-memory binary data terms|Binary Data Term]].&lt;br /&gt;
* [[MakeJSON]] will automatically encode an image in base64 JSON, and [[ParseJSON]] will automatically decode a base64 representation into an image. Also there is a new «maxCells» parameter that can be used to prevent giagantic arrays from being encoded (resulting in immensely long text).&lt;br /&gt;
* &amp;lt;code&amp;gt;[[GetProcessInfo]](&amp;quot;UI Language&amp;quot;)&amp;lt;/code&amp;gt; returns the UI language, either &amp;lt;code&amp;gt;&amp;quot;en&amp;quot;&amp;lt;/code&amp;gt; (for English) or &amp;lt;code&amp;gt;&amp;quot;es&amp;quot;&amp;lt;/code&amp;gt; for Spanish.&lt;br /&gt;
* &amp;lt;code&amp;gt;[[QualifiedName]]( obj, nsContext )&amp;lt;/code&amp;gt;: Returns the qualified identifier (as text) that uniquely identifies «obj» from the context of «nsContext». &lt;br /&gt;
* &amp;lt;code&amp;gt;[[Namespace]] of X&amp;lt;/code&amp;gt;: A new virtual attribute that returns the namespace of «X».&lt;br /&gt;
* [[Evaluate]] has a second return value that captures output to the typescript window (including stuff written by [[ConsolePrint]]) during the evaluation. It also has a new optional «ignoreAtFirstWarning» parameter that can be used in conjunction, capturing the first warning text in that second return value, not showing the return value to the user, and ignoring additional warnings during the duration of the Evaluate call (enables Assista to see the warnings).&lt;br /&gt;
* Added a syntax construct for [[Namespaces#Scoped_namespace_inclusion:_Using|Scoped namespace inclusion]] to bring a namespace into scope for only a localized expression or lexical block.&lt;br /&gt;
&lt;br /&gt;
== System variables ==&lt;br /&gt;
* SysVar [[Graph_ColorSequence]]: Replaces [[Graph_ColorSeq]] which is now deprecated. The new sysvar contains a list of color interer with one integer (of the form &amp;lt;code&amp;gt;0x00rrggbb&amp;lt;/code&amp;gt;) per color (whereas the deprecated used triples of numbers per color).&lt;br /&gt;
&lt;br /&gt;
== Engine ==&lt;br /&gt;
* After loading a large model, it parses expressions in parallel, using multiple threads/cores to parse different variables. On some computers on some models, this can dramatically speed up model load time.&lt;br /&gt;
* Color attributes use color integers for consistently (rather than the legacy number triples for R,G,B).&lt;br /&gt;
* You can use a localized namespace import (for a single expression or single lexical block) with the syntax&lt;br /&gt;
*:&amp;lt;code&amp;gt;[[Using..Do|Using]] NS;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Model loading ==&lt;br /&gt;
When opening a model file, the &amp;quot;checking&amp;quot; stage (when attributes are parsed) parses different expressions on different threads, resulting in substantially faster model load times for very large models.&lt;br /&gt;
&lt;br /&gt;
Note: In the event that this creates a problem with your specific model (maybe due to an as-yet-undiscovered multithreading bug), you can disable it for your model as follows:&lt;br /&gt;
# Temporarily turn off multithreading (Skip this step if you are able to load your model)&lt;br /&gt;
## New model&lt;br /&gt;
## &amp;lt;b&amp;gt;Definition menu / System variables / Settings / Maximum evaluation threads&amp;lt;/b&amp;gt;&lt;br /&gt;
## Set to 1  (and remember the previous value)&lt;br /&gt;
# Open your model&lt;br /&gt;
# &amp;lt;b&amp;gt;Definition menu / System variables / Settings / Disable Multithreaded Evaluations&amp;lt;/b&amp;gt;&lt;br /&gt;
# Press the &amp;lt;code&amp;gt;Edit Table&amp;lt;/code&amp;gt; button.&lt;br /&gt;
# Check the checkbox for &amp;lt;code&amp;gt;Parsing&amp;lt;/code&amp;gt;&lt;br /&gt;
# Save your model&lt;br /&gt;
# &amp;lt;b&amp;gt;Definition menu / System variables / Settings / Maximum evaluation threads&amp;lt;/b&amp;gt;&lt;br /&gt;
#: Restore the original value from Step 1&lt;br /&gt;
&lt;br /&gt;
== MCP server ==&lt;br /&gt;
* Added an ability to install multiple ADE-based Mcp servers that run different ADE releases. For example, you can install two MCP servers into Claude Code:&lt;br /&gt;
* ade-server: Runs ADE 7.1&lt;br /&gt;
* ade-server-70: Runs ADE 7.0&lt;br /&gt;
The information in the &amp;lt;code&amp;gt;«ADE install folder»\Examples\Mcp_server\README.txt&amp;lt;/code&amp;gt; file explain how (with enough info for Claude code to configure this for you).  &lt;br /&gt;
&lt;br /&gt;
With both installed, Claude Code (or other MCP-enabled AI agents) can compare results for the same model across different releases, etc.&lt;br /&gt;
&lt;br /&gt;
Side note: The Mcp server was added to ADE 7.0.&lt;br /&gt;
&lt;br /&gt;
== Internals ==&lt;br /&gt;
This release has undergone massive internal restructuring and refactorization. Ideally (i.e., in the absence of bugs) these changes won't change functionality, but may alter some aspects of behavior, hopefully for the better.&lt;br /&gt;
* Internal data structures use for multi-dimensional arrays has been changed. Possible impacts:&lt;br /&gt;
** Likely to remove the sensitivity to the &amp;quot;canonical order&amp;quot; of indexes on evaluation speed.&lt;br /&gt;
** May change relative evaluation speeds of various functions and operations.&lt;br /&gt;
* Added system modules/namespaces: &amp;lt;code&amp;gt;SysLib_Internal&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;SysLib_Experimental&amp;lt;/code&amp;gt;. Intended for Analytica-internal use.&lt;br /&gt;
*[[:Category:Cell format functions|Cell formatting functions]] (like [[CellSpan]], [[CellFill]], etc.) are now [[Struct]]s rather than functions. Does not impact usage, other that making it easier for code to traverse resulting data structures.&lt;br /&gt;
&lt;br /&gt;
== Discontinued... ==&lt;br /&gt;
* Plug-in functions. (An old hook that allows you to extend Analytica with compiled functions and UI elements written it C++. We are almost certain no one is using these hooks any more.)&lt;br /&gt;
* The sysvar [[Graph_ColorSeq]] is now deprecated (but works for both reading and setting to preserve backward compatibility). It has been replaced by the system variable [[Graph_ColorSequence]].&lt;br /&gt;
* The built-in (but undocumented, unsupported) &amp;lt;code&amp;gt;ifpos&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;if0&amp;lt;/code&amp;gt; functions were removed.&lt;br /&gt;
* The legacy (deprecated) syntax &amp;lt;code&amp;gt;Using temp:=... Do&amp;lt;/code&amp;gt; for declaring locals is no longer supported. Legacy models will have such definitions automatically rewritten to use [[Local..Do]] when you load them. [[Using..Do]] now has a different meaning, which is to provide a temporary namespace import.&lt;/div&gt;</summary>
		<author><name>Mhenrion</name></author>
	</entry>
	<entry>
		<id>https://docs.analytica.com/index.php?title=Table_Splicing&amp;diff=64027</id>
		<title>Table Splicing</title>
		<link rel="alternate" type="text/html" href="https://docs.analytica.com/index.php?title=Table_Splicing&amp;diff=64027"/>
		<updated>2026-06-25T22:08:33Z</updated>

		<summary type="html">&lt;p&gt;Mhenrion: /* Overview of Table Splicing */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[category:Concepts]]&lt;br /&gt;
[[Category:Doc Status C]] &amp;lt;!-- For Lumina use, do not change --&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Table splicing&amp;quot; refers to what happens to the contents of a input table (including [[Table|Edit Tables]], [[Subtable]], [[DetermTable]], or [[ProbTable]]) when you add, delete, or reorder elements of an index of the table. It is especially important when a table index is computed (rather than an explicit list), so that it may change automatically as a function of its inputs. Analytica is smart about handling these changes -- and offers options to let you modify the default behavior.  These features are also in [[ADE]].&lt;br /&gt;
&lt;br /&gt;
When a computed index changes, there may be ambiguity about exactly how the previous values map to the new values.  This impacts how tables are spliced, and how much data gets lost.  You can specify for an index whether the correspondence should be positional, associational, or flexible.  We explain these below.&lt;br /&gt;
&lt;br /&gt;
The [[SubTable]] function lets you display a portion of a table as if it were its own edit table, but changes to the [[SubTable]] cause the values in the main table to be changed.  The slices (rows/cols) of the subtable may even re-ordered, and the values may appear in input controls on a diagram.&lt;br /&gt;
&lt;br /&gt;
When new slices are added to an index, so that new cells are added to tables based on that index, you can control what values the new cells receive.  It is even possible to specify a different cell default for each column (and these may include choice pulldowns).  One option are blank cells (no contents), such that the new table cells have nothing in them.  Blank cells get special treatment.&lt;br /&gt;
&lt;br /&gt;
Finally, if you need to minimize the time to reload a model from file, you can take advantage of commands that force tables to be spliced immediately.  Doing this prior to saving your model means splicing will not have to occur when the user of your model accesses or evaluates the tables.   For these, see [[SpliceIndex]] and [[SpliceTable]].&lt;br /&gt;
&lt;br /&gt;
== Tables Based on Computed Indexes ==&lt;br /&gt;
&lt;br /&gt;
Most commonly, each index of an Edit Table is defined as an explicit list of numbers or labels.  You can easily edit, add, or remove items in such a list explicitly, using standard methods on the index or in an Edit table that uses that index. &lt;br /&gt;
&lt;br /&gt;
Sometimes, you may want to use an index that is computed -- that is generated as the result of evaluating an expression: A common case is an index computed using [[Concat]] of two other indexes. Another is computing an index using the [[Subset]] function.  In the latter case, it is usually better to use [[SubTable]].  In the case of a [[DetermTable]] and [[ProbTable]], you can also set the variable's Domain attribute to an index (an index domain), which may be computed.&lt;br /&gt;
&lt;br /&gt;
== Default Values ==&lt;br /&gt;
&lt;br /&gt;
Default cell values for tables can be specified; however, the mechanisms for controlling defaults are not exposed through the Analytica Graphical User Interface (GUI), and must be set up through typescript.  Currently, these mechanisms are somewhat &amp;quot;fragile&amp;quot;, in that they may not handle error conditions gracefully, which is also part of the reason it is not yet exposed more prominently.&lt;br /&gt;
&lt;br /&gt;
=== Sys_TableCellDefault ===&lt;br /&gt;
&lt;br /&gt;
The system variable '''Sys_TableCellDefault''' contains the scalar default used to populate new table cells when rows/columns/slices are added or inserted into a table.  The system variable contains a text value, which is inserted verbatim, and thus should be a valid expression.  &lt;br /&gt;
&lt;br /&gt;
Currently this system variable can only be changed using the [[typescript]] window.  To do this, access the [[typescript]] window by pressing ''Cntl+' '' (''Control+apostrophe'').  &lt;br /&gt;
&lt;br /&gt;
Any of the following typescript commands can be used to change the default cell value, for example to 0, blank (empty), or [[Null]]:&lt;br /&gt;
:&amp;lt;code&amp;gt;Sys_TableCellDefault: 0&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt; Sys_TableCellDefault:&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;Sys_TableCellDefault: Null&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Blank (empty) Default Cells ===&lt;br /&gt;
&lt;br /&gt;
You can use empty cells to indicate that the table cell hasn't yet been filled in.  If you attempt to evaluate a table containing empty cells, a warning is issued.  The warning is helpful in identifying table cells that still need to be filled in.&lt;br /&gt;
&lt;br /&gt;
When you change an index, for example, adding new values, Analytica will automatically propagate the changes through your model.  However, you also need to remember to fill in new cells in tables based on that index.  Using the blank default helps prevent bad results should you forget to fill in a table.  Rather than just assuming the value is zero, a blank value causes a warning, and if you ignore the warning, the empty cells evaluate to [[Null]], which will generally propagate through your model and make it obvious that values are missing.&lt;br /&gt;
&lt;br /&gt;
Although not yet available as a feature, in the future tables with blank cells will also be listed on the &amp;quot;Show Invalid Variables&amp;quot; dialog.&lt;br /&gt;
&lt;br /&gt;
When blank cells are present, the textual table definition will contain commas with nothing between them.  For example:&lt;br /&gt;
:&amp;lt;code&amp;gt;Table(I)(1,,,, 4,,, 5,)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This table definition has three cells with values and six empty cells.&lt;br /&gt;
&lt;br /&gt;
=== Suppressing Empty Cell Warnings ===&lt;br /&gt;
&lt;br /&gt;
'''Sysvar Sys_WarnUndefCell'''&lt;br /&gt;
&lt;br /&gt;
Suppression or activation of the empty cell warning is controlled by system variable '''Sys_WarnUndefCell'''.  If this is true, a warning is issued when a table containing empty cells is evaluated.  Setting this to zero (false) deactivates this warning.  This warning can be suppressed without deactivating warnings in general.&lt;br /&gt;
&lt;br /&gt;
This preference is currently not available from the Analytica GUI, and thus can only be set via typescript.  To access typescript, press ''Ctrl+' ''.  To activate empty cell warnings, type:&lt;br /&gt;
:&amp;lt;code&amp;gt;Sys_WarnUndefCell: 1&amp;lt;/code&amp;gt;&lt;br /&gt;
To suppress these warnings, type:&lt;br /&gt;
:&amp;lt;code&amp;gt;Sys_WarnUndefCell: 0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
When warnings are suppressed, empty cells evaluate to [[Null]].&lt;br /&gt;
&lt;br /&gt;
To turn off the warning for a specific table, set the attribute [[WarnUndefCell]], again from typescript, e.g.,&lt;br /&gt;
:&amp;lt;code&amp;gt;WarnUndefCell of PlacesTable:0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Table-Specific Default ===&lt;br /&gt;
&lt;br /&gt;
'''Cell Default'''&lt;br /&gt;
&lt;br /&gt;
An individual table may also contain its own default value, which overrides the global cell default.  Also, unlike the global default, the table-specific default can specify a different value for each column.  For example, if you want one column to always contain a particular [[Choice]] pulldown, this can be specified. &lt;br /&gt;
&lt;br /&gt;
The '''Cell Default''' attribute specifies the scalar default used to populate new table cells when rows/columns/slices are added or inserted into a table (the Attribute identifier is &amp;lt;code&amp;gt;TableCellDefault&amp;lt;/code&amp;gt;). To change this, you first need to enable the '''Cell Default''' attribute to be visible in the [[Attribute pane]] and [[Object Window]] by going to the [[Attributes dialog]] on the '''Object''' menu and putting a checkmark next to '''Cell Default'''. Then, select '''Cell Default''' in the attribute pane. &lt;br /&gt;
&lt;br /&gt;
To specify the same default for every cell that is added to the table, either specify a number, [[Null]], or a quoted string.  If you specify a quoted string, the contents of the string should either be empty (an empty cell) or a valid expression (where the outer quotes are not included as part of the expression).  For example, the following '''Cell Default''' values ase useful defaults for all cells in a table:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;                         { ''Use numeric zero as default'' }&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;''&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;                         { ''Use empty cell as default'' }&lt;br /&gt;
* &amp;lt;code&amp;gt;Null&amp;lt;/code&amp;gt;                    { &amp;quot;Use [[Null]] as the default'' }&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;quot;'n/a'&amp;quot;&amp;lt;/code&amp;gt;                 { ''Use the quoted text 'n/a' as the default'' }&lt;br /&gt;
&lt;br /&gt;
If you change these from typescript, or from a button script (less common), you would use:&lt;br /&gt;
:&amp;lt;code&amp;gt;TableCellDefault A: 0             { Use numeric zero as default }&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;TableCellDefault A: &amp;quot;&amp;quot;            { Use empty cell as default }&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;TableCellDefault A: Null          { Use Null as the default }&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;TableCellDefault A: &amp;quot;'n/a'&amp;quot;       { Use the quoted string 'n/a' as the default }&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You should not specify defaults that are syntactically invalid.  For example, '''''do not use''''':&lt;br /&gt;
:&amp;lt;code&amp;gt;TableCellDefault A: '&amp;lt;&amp;lt;fill in&amp;gt;&amp;gt;'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For more complex defaults, such as table where each column gets a different default expression, you should set up a separate edit table to hold the defaults, and then specify its identifier in the '''Cell Default''' attribute.  For example:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;Index Columns := ['a', 'b', 'c']&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;Variable A_default := Table(Columns)(0, Choice(Regions, 1),)&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;TableCellDefault A := A_default&amp;lt;/code&amp;gt;                                          { Enter &amp;lt;code&amp;gt;A_default&amp;lt;/code&amp;gt; in the '''Cell Defaults''' }&lt;br /&gt;
:&amp;lt;code&amp;gt;definition A := Table(Rows, Columns)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this example, &amp;lt;code&amp;gt;A_default is&amp;lt;/code&amp;gt; an edit table containing 0 in the first column, a choice pulldown in the second column, and an empty cell in the final column.  These are the column defaults for the edit table in &amp;lt;code&amp;gt;A&amp;lt;/code&amp;gt;.  When an element is added to the Row index, so that a row is added to the table &amp;lt;code&amp;gt;A&amp;lt;/code&amp;gt;, the values in the edit table for &amp;lt;code&amp;gt;A_default&amp;lt;/code&amp;gt; are used, with the first column defaulting to 0, the second to a choice pulldown, and the third column to an empty cell.&lt;br /&gt;
&lt;br /&gt;
== Correspondence methods for splicing==&lt;br /&gt;
&lt;br /&gt;
'''Attribute CorrespondenceMethod'''&lt;br /&gt;
&lt;br /&gt;
When a computed index changes -- index values are changed, added, reordered -- each Edit table using that index must change to reflect those changes. In some, cases it may delete or reorder slices from the old Edit table. There are three Correspondence methods to determine how it does that:&lt;br /&gt;
&lt;br /&gt;
;Positional correspondence: It retains correspondence by position along the index, so that the first [[slice]] (row, column, or subarray) of the table over the changing index is still the first; the second remains the second; and so on -- even if values or labels of the Index change. For example, if you change the 3rd element of index &amp;lt;code&amp;gt;Fuel_types&amp;lt;/code&amp;gt; from &amp;lt;code&amp;gt;&amp;quot;Gasoline&amp;quot;&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;&amp;quot;Petrol&amp;quot;&amp;lt;/code&amp;gt;, it won't affect the values. If the index becomes smaller, it deletes the excess slices at the end. If it becomes larger, it creates new new slices with the default values. &lt;br /&gt;
&lt;br /&gt;
;Associational correspondence: Any index element whose value stays the same retains the same slice values. For example, if the index &amp;lt;code&amp;gt;Fuel_types&amp;lt;/code&amp;gt; contains the element&amp;lt;code&amp;gt;&amp;quot;Gasoline&amp;quot;&amp;lt;/code&amp;gt; as its third element, if you insert additional &amp;lt;code&amp;gt;Fuel_type &amp;quot;Ethanol&amp;lt;/code&amp;gt; before it, moving &amp;lt;code&amp;gt;&amp;quot;Gasoline&amp;quot;&amp;lt;/code&amp;gt; to become the fourth element -- it will retain the same slice under the label value as &amp;lt;code&amp;gt;&amp;quot;Gasoline&amp;quot;&amp;lt;/code&amp;gt;. Any insertion, deletion, or reordering of values in the Index will retain the [[slice]] values for values (labels) that are the same. Deleting a value from the index will delete the corresponding [[slice]]. Adding an element will create a new slice with default values. Renaming an element will delete the original slice, replacing it by a slice with default values. &lt;br /&gt;
&lt;br /&gt;
;Flexible correspondence: This is the default method, and is a combination of [[Associative_vs._Positional_Indexing|positional and associational]] correspondence. If the index values remain the same, but are reordered, it  preserves associational correspondence. If it finds new index values that didn't exist in the old index, for example changing &amp;lt;code&amp;gt;&amp;quot;Gasoline&amp;quot;&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;&amp;quot;Petrol&amp;quot;&amp;lt;/code&amp;gt;, it tries to match them positionally, and retains the old data.&lt;br /&gt;
&lt;br /&gt;
You can control the correspondence method using the [[CorrespondenceMethod]] attribute.  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tip title=&amp;quot;Important&amp;quot; The correspondence method is an attribute of the index, not of individual tables that use it.  All tables based on a given index will be treated identically.&lt;br /&gt;
&amp;lt;/tip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The [[CorrespondenceMethod]] attribute is not reflected by the Analytica GUI.  Changes to the default correspondence method must be done through typescript (press ''Ctrl+' ''  to access the [[Typescript]] window).  You can alter the settings as follows:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;CorrespondenceMethod I: 0           { Default method }&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;CorrespondenceMethod I: 1           { Positional Correspondence }&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;CorrespondenceMethod I: 2           { Associational Correspondence }&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;CorrespondenceMethod I: 3           { Flex correspondence }&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
* [[Splice a table when computed indexes change]]&lt;br /&gt;
* [[Splicing Commands]]&lt;br /&gt;
* [[Table]]&lt;br /&gt;
* [[DetermTable]]&lt;br /&gt;
* [[ProbTable]]&lt;br /&gt;
* [[The Analytica Domain Attribute]]&lt;br /&gt;
* [[SpliceIndex]]&lt;br /&gt;
* [[SpliceTable]] &lt;br /&gt;
* [[Associative vs. Positional Indexing]]&lt;br /&gt;
* [[CorrespondenceMethod]]&lt;br /&gt;
* [[Attributes]]&lt;br /&gt;
* [[Typescript]]&lt;br /&gt;
* [[Analytica_User_Group/Past_Topics#Table_Splicing|Webinar on Table Splicing]]&lt;/div&gt;</summary>
		<author><name>Mhenrion</name></author>
	</entry>
	<entry>
		<id>https://docs.analytica.com/index.php?title=Index_labels_auto_updates&amp;diff=64026</id>
		<title>Index labels auto updates</title>
		<link rel="alternate" type="text/html" href="https://docs.analytica.com/index.php?title=Index_labels_auto_updates&amp;diff=64026"/>
		<updated>2026-06-25T22:04:48Z</updated>

		<summary type="html">&lt;p&gt;Mhenrion: /* See also */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''New to [[Analytica 7.0]]''&lt;br /&gt;
&lt;br /&gt;
When you rename an identifier Analytica automatically updates expressions using that identifier. And when you change labels in an Index, it automatically updates edit tables using that index (what we call  [[Table Splicing]]). But prior to release 7.0, there was one annoying exception. When you change a label in an index, it wouldn't update expressions using that label.&lt;br /&gt;
For example. suppose&lt;br /&gt;
 Index Power_type := ['solar', 'wind', 'gas', 'nuclear']&lt;br /&gt;
If you edited &amp;lt;code&amp;gt;Power_type&amp;lt;/code&amp;gt; to change &amp;lt;code&amp;gt;'solar'&amp;lt;/code&amp;gt;  to &amp;lt;code&amp;gt;'PV'&amp;lt;/code&amp;gt; , it would break this expression:&lt;br /&gt;
 Capacity[Power_type = 'solar']&lt;br /&gt;
But now, it automatically updates it to:&lt;br /&gt;
 Capacity[Power_type = 'PV']&lt;br /&gt;
It sees that &amp;lt;code&amp;gt;'solar'&amp;lt;/code&amp;gt; is an element of Index &amp;lt;code&amp;gt;Power_type&amp;lt;/code&amp;gt; and when you change it to &amp;lt;code&amp;gt;'PV'&amp;lt;/code&amp;gt; it so update the expression automatically.  It can similarly detect and update equality and inequality comparisons and other expressions mentioning the Index and label, including &lt;br /&gt;
 [[Choice]], [[Multichoice]], [[PositionInIndex]],  [[SubIndex]], and &amp;lt;code&amp;gt;@[ Power_type = 'solar']&amp;lt;/code&amp;gt;). &lt;br /&gt;
&lt;br /&gt;
== Index-dot-label syntax ==&lt;br /&gt;
&lt;br /&gt;
However, there are some expressions where Analytica can't fix it because it can't figure out that the label is associated with the index.  For example:&lt;br /&gt;
  Index Renewable_power_types := ['solar', 'wind'];&lt;br /&gt;
  Capacity[Power_type =Renewable_power_types ]&lt;br /&gt;
You can make sure that the index values are associated with their index using the &amp;lt;index&amp;gt;.&amp;lt;label&amp;gt; syntax, for example:&lt;br /&gt;
  Index Renewable_power_types := [Power_type .'solar', Power_type .'wind'];&lt;br /&gt;
&lt;br /&gt;
In this case, any change to elements of Power_type will update the corresponding text values wherever they occur associated with the Index.  This dot expression also checks that the label is a valid value of the Index and gives a warning if not. &lt;br /&gt;
&lt;br /&gt;
This syntax provides two advantages:&lt;br /&gt;
# It tells Analytica that the text literal is the value in the index. If you later change the label in the index. Analytica will automatically rewrite this expression, replacing it with the new value. Hence, it makes the model robust to changes in index labels.&lt;br /&gt;
# During evaluation, it checks that &amp;lt;code&amp;gt;&amp;quot;label&amp;quot;&amp;lt;/code&amp;gt; is indeed an element of the index. If not, it issues an evaluation-time warning. If you ignore the warning, the value is &amp;lt;code&amp;gt;&amp;quot;label&amp;quot;&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Domain attribute to check text values ===&lt;br /&gt;
&lt;br /&gt;
You can also make use of the [[Domain]] attribute to also help Analytica spot cases where text literals should be associated with an index value. For example, suppose in another variable you have an edit table like:&lt;br /&gt;
&lt;br /&gt;
 Variable Power_plant_type ::= [[Table]]( Power_plant )&lt;br /&gt;
  ( 'gas', 'hydro', 'gas', 'solar' ....)&lt;br /&gt;
&lt;br /&gt;
Each cell of the table contains a text entry. By itself there is no intrinsic association of these cell values to the index values of &amp;lt;code&amp;gt;Power_type&amp;lt;/code&amp;gt;. The overlap may just be coincidence; hence, if you change a label in the &amp;lt;code&amp;gt;Power_type&amp;lt;/code&amp;gt; index, Analytica won't rewrite these table cells. If they were indeed meant to refer to the  labels of &amp;lt;code&amp;gt;Power_type&amp;lt;/code&amp;gt;, that change could introduce a logical error into your model. You may also be faced with a time-consuming task of updating all the cells of the table.&lt;br /&gt;
&lt;br /&gt;
In an example like this, you can use the [[Domain]] attribute to establish the association so that Analytica knows that the text values in this table are supposed to be the same text used in &amp;lt;code&amp;gt;Power_type&amp;lt;/code&amp;gt;'s index labels. You should set the domain type to be &amp;quot;Copy from index&amp;quot;, and select &amp;lt;code&amp;gt;Power_type&amp;lt;/code&amp;gt; as the index. With that configuration, if you now rename a label in &amp;lt;code&amp;gt;Power_type&amp;lt;/code&amp;gt;, it will automatically rewrite the corresponding cells of the table.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[Table Splicing]]&lt;/div&gt;</summary>
		<author><name>Mhenrion</name></author>
	</entry>
	<entry>
		<id>https://docs.analytica.com/index.php?title=Index_labels_auto_updates&amp;diff=64025</id>
		<title>Index labels auto updates</title>
		<link rel="alternate" type="text/html" href="https://docs.analytica.com/index.php?title=Index_labels_auto_updates&amp;diff=64025"/>
		<updated>2026-06-25T22:04:15Z</updated>

		<summary type="html">&lt;p&gt;Mhenrion: /* Domain attribute to check text values */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''New to [[Analytica 7.0]]''&lt;br /&gt;
&lt;br /&gt;
When you rename an identifier Analytica automatically updates expressions using that identifier. And when you change labels in an Index, it automatically updates edit tables using that index (what we call  [[Table Splicing]]). But prior to release 7.0, there was one annoying exception. When you change a label in an index, it wouldn't update expressions using that label.&lt;br /&gt;
For example. suppose&lt;br /&gt;
 Index Power_type := ['solar', 'wind', 'gas', 'nuclear']&lt;br /&gt;
If you edited &amp;lt;code&amp;gt;Power_type&amp;lt;/code&amp;gt; to change &amp;lt;code&amp;gt;'solar'&amp;lt;/code&amp;gt;  to &amp;lt;code&amp;gt;'PV'&amp;lt;/code&amp;gt; , it would break this expression:&lt;br /&gt;
 Capacity[Power_type = 'solar']&lt;br /&gt;
But now, it automatically updates it to:&lt;br /&gt;
 Capacity[Power_type = 'PV']&lt;br /&gt;
It sees that &amp;lt;code&amp;gt;'solar'&amp;lt;/code&amp;gt; is an element of Index &amp;lt;code&amp;gt;Power_type&amp;lt;/code&amp;gt; and when you change it to &amp;lt;code&amp;gt;'PV'&amp;lt;/code&amp;gt; it so update the expression automatically.  It can similarly detect and update equality and inequality comparisons and other expressions mentioning the Index and label, including &lt;br /&gt;
 [[Choice]], [[Multichoice]], [[PositionInIndex]],  [[SubIndex]], and &amp;lt;code&amp;gt;@[ Power_type = 'solar']&amp;lt;/code&amp;gt;). &lt;br /&gt;
&lt;br /&gt;
== Index-dot-label syntax ==&lt;br /&gt;
&lt;br /&gt;
However, there are some expressions where Analytica can't fix it because it can't figure out that the label is associated with the index.  For example:&lt;br /&gt;
  Index Renewable_power_types := ['solar', 'wind'];&lt;br /&gt;
  Capacity[Power_type =Renewable_power_types ]&lt;br /&gt;
You can make sure that the index values are associated with their index using the &amp;lt;index&amp;gt;.&amp;lt;label&amp;gt; syntax, for example:&lt;br /&gt;
  Index Renewable_power_types := [Power_type .'solar', Power_type .'wind'];&lt;br /&gt;
&lt;br /&gt;
In this case, any change to elements of Power_type will update the corresponding text values wherever they occur associated with the Index.  This dot expression also checks that the label is a valid value of the Index and gives a warning if not. &lt;br /&gt;
&lt;br /&gt;
This syntax provides two advantages:&lt;br /&gt;
# It tells Analytica that the text literal is the value in the index. If you later change the label in the index. Analytica will automatically rewrite this expression, replacing it with the new value. Hence, it makes the model robust to changes in index labels.&lt;br /&gt;
# During evaluation, it checks that &amp;lt;code&amp;gt;&amp;quot;label&amp;quot;&amp;lt;/code&amp;gt; is indeed an element of the index. If not, it issues an evaluation-time warning. If you ignore the warning, the value is &amp;lt;code&amp;gt;&amp;quot;label&amp;quot;&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Domain attribute to check text values ===&lt;br /&gt;
&lt;br /&gt;
You can also make use of the [[Domain]] attribute to also help Analytica spot cases where text literals should be associated with an index value. For example, suppose in another variable you have an edit table like:&lt;br /&gt;
&lt;br /&gt;
 Variable Power_plant_type ::= [[Table]]( Power_plant )&lt;br /&gt;
  ( 'gas', 'hydro', 'gas', 'solar' ....)&lt;br /&gt;
&lt;br /&gt;
Each cell of the table contains a text entry. By itself there is no intrinsic association of these cell values to the index values of &amp;lt;code&amp;gt;Power_type&amp;lt;/code&amp;gt;. The overlap may just be coincidence; hence, if you change a label in the &amp;lt;code&amp;gt;Power_type&amp;lt;/code&amp;gt; index, Analytica won't rewrite these table cells. If they were indeed meant to refer to the  labels of &amp;lt;code&amp;gt;Power_type&amp;lt;/code&amp;gt;, that change could introduce a logical error into your model. You may also be faced with a time-consuming task of updating all the cells of the table.&lt;br /&gt;
&lt;br /&gt;
In an example like this, you can use the [[Domain]] attribute to establish the association so that Analytica knows that the text values in this table are supposed to be the same text used in &amp;lt;code&amp;gt;Power_type&amp;lt;/code&amp;gt;'s index labels. You should set the domain type to be &amp;quot;Copy from index&amp;quot;, and select &amp;lt;code&amp;gt;Power_type&amp;lt;/code&amp;gt; as the index. With that configuration, if you now rename a label in &amp;lt;code&amp;gt;Power_type&amp;lt;/code&amp;gt;, it will automatically rewrite the corresponding cells of the table.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[Index-label dot syntax]]&lt;/div&gt;</summary>
		<author><name>Mhenrion</name></author>
	</entry>
	<entry>
		<id>https://docs.analytica.com/index.php?title=Index-label_dot_syntax&amp;diff=64024</id>
		<title>Index-label dot syntax</title>
		<link rel="alternate" type="text/html" href="https://docs.analytica.com/index.php?title=Index-label_dot_syntax&amp;diff=64024"/>
		<updated>2026-06-25T22:03:00Z</updated>

		<summary type="html">&lt;p&gt;Mhenrion: THis page was redundant with the redirect page -- so I replaced it with the redirect.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Index labels auto updates]]&lt;/div&gt;</summary>
		<author><name>Mhenrion</name></author>
	</entry>
	<entry>
		<id>https://docs.analytica.com/index.php?title=Index_labels_auto_updates&amp;diff=64023</id>
		<title>Index labels auto updates</title>
		<link rel="alternate" type="text/html" href="https://docs.analytica.com/index.php?title=Index_labels_auto_updates&amp;diff=64023"/>
		<updated>2026-06-25T21:57:19Z</updated>

		<summary type="html">&lt;p&gt;Mhenrion: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''New to [[Analytica 7.0]]''&lt;br /&gt;
&lt;br /&gt;
When you rename an identifier Analytica automatically updates expressions using that identifier. And when you change labels in an Index, it automatically updates edit tables using that index (what we call  [[Table Splicing]]). But prior to release 7.0, there was one annoying exception. When you change a label in an index, it wouldn't update expressions using that label.&lt;br /&gt;
For example. suppose&lt;br /&gt;
 Index Power_type := ['solar', 'wind', 'gas', 'nuclear']&lt;br /&gt;
If you edited &amp;lt;code&amp;gt;Power_type&amp;lt;/code&amp;gt; to change &amp;lt;code&amp;gt;'solar'&amp;lt;/code&amp;gt;  to &amp;lt;code&amp;gt;'PV'&amp;lt;/code&amp;gt; , it would break this expression:&lt;br /&gt;
 Capacity[Power_type = 'solar']&lt;br /&gt;
But now, it automatically updates it to:&lt;br /&gt;
 Capacity[Power_type = 'PV']&lt;br /&gt;
It sees that &amp;lt;code&amp;gt;'solar'&amp;lt;/code&amp;gt; is an element of Index &amp;lt;code&amp;gt;Power_type&amp;lt;/code&amp;gt; and when you change it to &amp;lt;code&amp;gt;'PV'&amp;lt;/code&amp;gt; it so update the expression automatically.  It can similarly detect and update equality and inequality comparisons and other expressions mentioning the Index and label, including &lt;br /&gt;
 [[Choice]], [[Multichoice]], [[PositionInIndex]],  [[SubIndex]], and &amp;lt;code&amp;gt;@[ Power_type = 'solar']&amp;lt;/code&amp;gt;). &lt;br /&gt;
&lt;br /&gt;
== Index-dot-label syntax ==&lt;br /&gt;
&lt;br /&gt;
However, there are some expressions where Analytica can't fix it because it can't figure out that the label is associated with the index.  For example:&lt;br /&gt;
  Index Renewable_power_types := ['solar', 'wind'];&lt;br /&gt;
  Capacity[Power_type =Renewable_power_types ]&lt;br /&gt;
You can make sure that the index values are associated with their index using the &amp;lt;index&amp;gt;.&amp;lt;label&amp;gt; syntax, for example:&lt;br /&gt;
  Index Renewable_power_types := [Power_type .'solar', Power_type .'wind'];&lt;br /&gt;
&lt;br /&gt;
In this case, any change to elements of Power_type will update the corresponding text values wherever they occur associated with the Index.  This dot expression also checks that the label is a valid value of the Index and gives a warning if not. &lt;br /&gt;
&lt;br /&gt;
This syntax provides two advantages:&lt;br /&gt;
# It tells Analytica that the text literal is the value in the index. If you later change the label in the index. Analytica will automatically rewrite this expression, replacing it with the new value. Hence, it makes the model robust to changes in index labels.&lt;br /&gt;
# During evaluation, it checks that &amp;lt;code&amp;gt;&amp;quot;label&amp;quot;&amp;lt;/code&amp;gt; is indeed an element of the index. If not, it issues an evaluation-time warning. If you ignore the warning, the value is &amp;lt;code&amp;gt;&amp;quot;label&amp;quot;&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Domain attribute to check text values ===&lt;br /&gt;
&lt;br /&gt;
You can also make use of the [[Domain]] attribute to also help Analytica spot cases where text literals should be associated with an index value. For example, suppose in another variable you have an edit table like:&lt;br /&gt;
&lt;br /&gt;
 Variable Power_plant_type ::= [[Table]]( Power_plant )( 'gas', 'hydro', 'gas', 'solar' ....)&lt;br /&gt;
&lt;br /&gt;
Each cell of the table contains a text entry. By itself there is no intrinsic association of these cell values to the index values of &amp;lt;code&amp;gt;Power_type&amp;lt;/code&amp;gt;. The overlap may just be coincidence; hence, if you change a label in the &amp;lt;code&amp;gt;Power_type&amp;lt;/code&amp;gt; index, Analytica won't rewrite these table cells. If they were indeed meant to refer to the  labels of &amp;lt;code&amp;gt;Power_type&amp;lt;/code&amp;gt;, that change could introduce a logical error into your model. You may also be faced with a time-consuming task of updating all the cells of the table.&lt;br /&gt;
&lt;br /&gt;
In an example like this, you can use the [[Domain]] attribute to establish the association so that Analytica knows that the text values in this table are supposed to be the same text used in &amp;lt;code&amp;gt;Power_type&amp;lt;/code&amp;gt;'s index labels. You should set the domain type to be &amp;quot;Copy from index&amp;quot;, and select &amp;lt;code&amp;gt;Power_type&amp;lt;/code&amp;gt; as the index. With that configuration, if you now rename a label in &amp;lt;code&amp;gt;Power_type&amp;lt;/code&amp;gt;, it will automatically rewrite the corresponding cells of the table.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[Index-label dot syntax]]&lt;/div&gt;</summary>
		<author><name>Mhenrion</name></author>
	</entry>
	<entry>
		<id>https://docs.analytica.com/index.php?title=Index_labels_auto_updates&amp;diff=64022</id>
		<title>Index labels auto updates</title>
		<link rel="alternate" type="text/html" href="https://docs.analytica.com/index.php?title=Index_labels_auto_updates&amp;diff=64022"/>
		<updated>2026-06-25T21:54:54Z</updated>

		<summary type="html">&lt;p&gt;Mhenrion: rewrlte for clarity&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''New to [[Analytica 7.0]]''&lt;br /&gt;
&lt;br /&gt;
When you rename an identifier Analytica automatically updates expressions using that identifier. And when you change labels in an Index, it automatically updates edit tables using that index (what we call  [[Table Splicing]]). But prior to release 7.0, there was one annoying exception. When you change a label in an index, it wouldn't update expressions using that label.&lt;br /&gt;
For example. suppose&lt;br /&gt;
 Index Power_type := ['solar', 'wind', 'gas', 'nuclear']&lt;br /&gt;
If you edited &amp;lt;code&amp;gt;Power_type&amp;lt;/code&amp;gt; to change &amp;lt;code&amp;gt;'solar'&amp;lt;/code&amp;gt;  to &amp;lt;code&amp;gt;'PV'&amp;lt;/code&amp;gt; , it would break this expression:&lt;br /&gt;
 Capacity[Power_type = 'solar']&lt;br /&gt;
But now, it automatically updates it to:&lt;br /&gt;
 Capacity[Power_type = 'PV']&lt;br /&gt;
It sees that &amp;lt;code&amp;gt;'solar'&amp;lt;/code&amp;gt; is an element of Index &amp;lt;code&amp;gt;Power_type&amp;lt;/code&amp;gt; and when you change it to &amp;lt;code&amp;gt;'PV'&amp;lt;/code&amp;gt; it so update the expression automatically.  It can similarly detect and update equality and inequality comparisons and other expressions mentioning the Index and label, including &lt;br /&gt;
 [[Choice]], [[Multichoice]], [[PositionInIndex]],  [[SubIndex]], and &amp;lt;code&amp;gt;@[ Power_type = 'solar']&amp;lt;/code&amp;gt;). &lt;br /&gt;
&lt;br /&gt;
== Index-dot-label syntax ==&lt;br /&gt;
&lt;br /&gt;
However, there are some expressions where Analytica can't fix it because it can't figure out that the label is associated with the index.  For example:&lt;br /&gt;
  Index Renewable_power_types := ['solar', 'wind'];&lt;br /&gt;
  Capacity[Power_type =Renewable_power_types ]&lt;br /&gt;
You can make sure that the index values are associated with their index using the &amp;lt;index&amp;gt;.&amp;lt;label&amp;gt; syntax, for example:&lt;br /&gt;
  Index Renewable_power_types := [Power_type .'solar', Power_type .'wind'];&lt;br /&gt;
&lt;br /&gt;
In this case, any change to elements of Power_type will update the corresponding text values wherever they occur associated with the Index.  This dot expression also checks that the label is a valid value of the Index and gives a warning if not. &lt;br /&gt;
&lt;br /&gt;
=== Domain attribute to check text values ===&lt;br /&gt;
&lt;br /&gt;
You can also make use of the [[Domain]] attribute to also help Analytica spot cases where text literals should be associated with an index value. For example, suppose in another variable you have an edit table like:&lt;br /&gt;
&lt;br /&gt;
 Variable Power_plant_type ::= [[Table]]( Power_plant )( 'gas', 'hydro', 'gas', 'solar' ....)&lt;br /&gt;
&lt;br /&gt;
Each cell of the table contains a text entry. By itself there is no intrinsic association of these cell values to the index values of &amp;lt;code&amp;gt;Power_type&amp;lt;/code&amp;gt;. The overlap may just be coincidence; hence, if you change a label in the &amp;lt;code&amp;gt;Power_type&amp;lt;/code&amp;gt; index, Analytica won't rewrite these table cells. If they were indeed meant to refer to the  labels of &amp;lt;code&amp;gt;Power_type&amp;lt;/code&amp;gt;, that change could introduce a logical error into your model. You may also be faced with a time-consuming task of updating all the cells of the table.&lt;br /&gt;
&lt;br /&gt;
In an example like this, you can use the [[Domain]] attribute to establish the association so that Analytica knows that the text values in this table are supposed to be the same text used in &amp;lt;code&amp;gt;Power_type&amp;lt;/code&amp;gt;'s index labels. You should set the domain type to be &amp;quot;Copy from index&amp;quot;, and select &amp;lt;code&amp;gt;Power_type&amp;lt;/code&amp;gt; as the index. With that configuration, if you now rename a label in &amp;lt;code&amp;gt;Power_type&amp;lt;/code&amp;gt;, it will automatically rewrite the corresponding cells of the table.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[Index-label dot syntax]]&lt;/div&gt;</summary>
		<author><name>Mhenrion</name></author>
	</entry>
	<entry>
		<id>https://docs.analytica.com/index.php?title=Index_labels_auto_updates&amp;diff=64015</id>
		<title>Index labels auto updates</title>
		<link rel="alternate" type="text/html" href="https://docs.analytica.com/index.php?title=Index_labels_auto_updates&amp;diff=64015"/>
		<updated>2026-06-24T22:36:18Z</updated>

		<summary type="html">&lt;p&gt;Mhenrion: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''New to [[Analytica 7.0]]''&lt;br /&gt;
&lt;br /&gt;
When you rename an identifier Analytica automatically updates expressions using that identifier. And when you change labels in an Index, it automatically updates edit tables using that index (what we call  [[Table Splicing]]). But prior to release 7.0, there was one annoying exception. When you change a label in an index, it wouldn't update expressions using that label.&lt;br /&gt;
For example. suppose&lt;br /&gt;
 Index Power_type := ['solar', 'wind', 'gas', 'nuclear']&lt;br /&gt;
If you had edited &amp;lt;code&amp;gt;Power_type&amp;lt;/code&amp;gt; to change &amp;lt;code&amp;gt;'solar'&amp;lt;/code&amp;gt;  to &amp;lt;code&amp;gt;'PV'&amp;lt;/code&amp;gt; , it would break this expression&lt;br /&gt;
 Capacity[Power_type = 'solar']&lt;br /&gt;
But now, it automatically updates it to:&lt;br /&gt;
 Capacity[Power_type = 'PV']&lt;br /&gt;
&lt;br /&gt;
In this example, Analytica sees that &amp;lt;code&amp;gt;'solar'&amp;lt;/code&amp;gt; is an element of Index &amp;lt;code&amp;gt;Power_type&amp;lt;/code&amp;gt; and when you change it to &amp;lt;code&amp;gt;'PV'&amp;lt;/code&amp;gt; it so update the expression automatically.  It can similarly detect and update equality and inequality comparisons and other expressions mentioning the Index and label, including &lt;br /&gt;
 [[Choice]], [[Multichoice]], [[PositionInIndex]],  [[SubIndex]], and &amp;lt;code&amp;gt;@[ Power_type = 'solar']&amp;lt;/code&amp;gt;). &lt;br /&gt;
&lt;br /&gt;
== Index-dot-label syntax ==&lt;br /&gt;
&lt;br /&gt;
However, there are some expressions where Analytica can't fix it because it can't figure out that the label is associated with the index.  For example:&lt;br /&gt;
  Index Renewable_power_types := ['solar', 'wind'];&lt;br /&gt;
  Capacity[Power_type =Renewable_power_types ]&lt;br /&gt;
You can make sure that the index values are associated with their index using the &amp;lt;index&amp;gt;.&amp;lt;label&amp;gt; syntax, for example:&lt;br /&gt;
  Index Renewable_power_types := [Power_type .'solar', Power_type .'wind'];&lt;br /&gt;
&lt;br /&gt;
zssion with the new label.&lt;br /&gt;
# When &amp;lt;code&amp;gt;Power_type . &amp;quot;solar&amp;quot;&amp;lt;/code&amp;gt; is evaluated, it double checks that the index contains the label and issues a warning if not, helping you to find mistakes. The result of the evaluation is the text value &amp;lt;code&amp;gt;&amp;quot;solar&amp;quot;&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
One change that can impact logic in other expressions throughout your model is a name change to an index label. This occurs when you have defined an index to be a  [[The_Expression_popup_menu|List of Text]], and then you have used the text values in the definitions (or other expressions) in other variables. For example:&lt;br /&gt;
&lt;br /&gt;
 Index Power_type ::= [ 'coal', 'gas', 'hydro', 'nuclear', 'solar', 'wind' ]&lt;br /&gt;
&lt;br /&gt;
 Variable Nems2_offset ::= [[If]] Power_type = 'solar' [[Then]] ...&lt;br /&gt;
&lt;br /&gt;
This partial example illustrates a case where a label from the &amp;lt;code&amp;gt;Power_type&amp;lt;/code&amp;gt; index, &amp;lt;code&amp;gt;'solar'&amp;lt;/code&amp;gt;, appears in the definition of a different variable. At some point you might change one or more label names in &amp;lt;code&amp;gt;Power_type&amp;lt;/code&amp;gt; which would cause the definition in &amp;lt;code&amp;gt;Nems2_offset&amp;lt;/code&amp;gt; to become incorrect (and not necessarily in a way that throws an error). &lt;br /&gt;
&lt;br /&gt;
You can make use of the [[Domain]] attribute to also help Analytica spot cases where text literals should be associated with an index value. For example, suppose in another variable you have an edit table like:&lt;br /&gt;
&lt;br /&gt;
 Variable Power_plant_type ::= [[Table]]( Power_plant )( 'gas', 'hydro', 'gas', 'solar' ....)&lt;br /&gt;
&lt;br /&gt;
Each cell of the table contains a text entry. By itself there is no intrinsic association of these cell values to the index values of &amp;lt;code&amp;gt;Power_type&amp;lt;/code&amp;gt;. The overlap may just be coincidence; hence, if you change a label in the &amp;lt;code&amp;gt;Power_type&amp;lt;/code&amp;gt; index, Analytica won't rewrite these table cells. If they were indeed meant to refer to the  labels of &amp;lt;code&amp;gt;Power_type&amp;lt;/code&amp;gt;, that change could introduce a logical error into your model. You may also be faced with a time-consuming task of updating all the cells of the table.&lt;br /&gt;
&lt;br /&gt;
In an example like this, you can use the [[Domain]] attribute to establish the association so that Analytica knows that the text values in this table are supposed to be the same text used in &amp;lt;code&amp;gt;Power_type&amp;lt;/code&amp;gt;'s index labels. You should set the domain type to be &amp;quot;Copy from index&amp;quot;, and select &amp;lt;code&amp;gt;Power_type&amp;lt;/code&amp;gt; as the index. With that configuration, if you now rename a label in &amp;lt;code&amp;gt;Power_type&amp;lt;/code&amp;gt;, it will automatically rewrite the corresponding cells of the table.&lt;br /&gt;
&lt;br /&gt;
== Index-label syntax ==&lt;br /&gt;
&lt;br /&gt;
In the above examples, Analytica automatically figures out to rewrite certain definitions that use text literals that correspond to an index label. It looks for equality or inequality comparison, use of the text literal in calls to [[Subscript]] (&amp;lt;code&amp;gt;X[Power_type='solar']&amp;lt;/code&amp;gt;), [[PositionInIndex]] (including &amp;lt;code&amp;gt;@[ Power_type = 'solar']&amp;lt;/code&amp;gt;), and [[SubIndex]]. It notices comparisons to a [[Choice]] variable that uses the index to a text literal. It finds literal definitions or cells when the domain is connected to the index. &lt;br /&gt;
&lt;br /&gt;
Although it automatically finds and updates the most common and most obvious cases, it cannot recognize all cases where it can be far less obvious that text literal is associated with an index. This would include the following examples.&lt;br /&gt;
&lt;br /&gt;
zssion with the new label.&lt;br /&gt;
# When &amp;lt;code&amp;gt;Power_type . &amp;quot;solar&amp;quot;&amp;lt;/code&amp;gt; is evaluated, it double checks that the index contains the label and issues a warning if not, helping you to find mistakes. The result of the evaluation is the text value &amp;lt;code&amp;gt;&amp;quot;solar&amp;quot;&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[Index-label dot syntax]]&lt;/div&gt;</summary>
		<author><name>Mhenrion</name></author>
	</entry>
	<entry>
		<id>https://docs.analytica.com/index.php?title=Index_labels_auto_updates&amp;diff=64014</id>
		<title>Index labels auto updates</title>
		<link rel="alternate" type="text/html" href="https://docs.analytica.com/index.php?title=Index_labels_auto_updates&amp;diff=64014"/>
		<updated>2026-06-24T18:07:02Z</updated>

		<summary type="html">&lt;p&gt;Mhenrion: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''New to [[Analytica 7.0]]''&lt;br /&gt;
&lt;br /&gt;
When you rename an identifier Analytica automatically updates expressions using that identifier. And when you change labels in an Index, it automatically updates edit tables using that index (what we call  [[Table Splicing]]). But prior to release 7.0, there was one annoying exception. When you change a label in an index, it wouldn't update expressions using that label.&lt;br /&gt;
For example. suppose&lt;br /&gt;
 Index Power_type := ['solar', 'wind', 'gas', 'nuclear']&lt;br /&gt;
If you had edited &amp;lt;code&amp;gt;Power_type&amp;lt;/code&amp;gt; to change &amp;lt;code&amp;gt;'solar'&amp;lt;/code&amp;gt;  to &amp;lt;code&amp;gt;'PV'&amp;lt;/code&amp;gt; , it would break this expression&lt;br /&gt;
 Capacity[Power_type = 'solar']&lt;br /&gt;
But now, it automatically updates it to:&lt;br /&gt;
 Capacity[Power_type = 'PV']&lt;br /&gt;
&lt;br /&gt;
However, there are some expressions where Analytica can't fix it because it doesn't know that the label is associated with the index.  For example. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
One change that can impact logic in other expressions throughout your model is a name change to an index label. This occurs when you have defined an index to be a  [[The_Expression_popup_menu|List of Text]], and then you have used the text values in the definitions (or other expressions) in other variables. For example:&lt;br /&gt;
&lt;br /&gt;
 Index Power_type ::= [ 'coal', 'gas', 'hydro', 'nuclear', 'solar', 'wind' ]&lt;br /&gt;
&lt;br /&gt;
 Variable Nems2_offset ::= [[If]] Power_type = 'solar' [[Then]] ...&lt;br /&gt;
&lt;br /&gt;
This partial example illustrates a case where a label from the &amp;lt;code&amp;gt;Power_type&amp;lt;/code&amp;gt; index, &amp;lt;code&amp;gt;'solar'&amp;lt;/code&amp;gt;, appears in the definition of a different variable. At some point you might change one or more label names in &amp;lt;code&amp;gt;Power_type&amp;lt;/code&amp;gt; which would cause the definition in &amp;lt;code&amp;gt;Nems2_offset&amp;lt;/code&amp;gt; to become incorrect (and not necessarily in a way that throws an error). &lt;br /&gt;
&lt;br /&gt;
You can make use of the [[Domain]] attribute to also help Analytica spot cases where text literals should be associated with an index value. For example, suppose in another variable you have an edit table like:&lt;br /&gt;
&lt;br /&gt;
 Variable Power_plant_type ::= [[Table]]( Power_plant )( 'gas', 'hydro', 'gas', 'solar' ....)&lt;br /&gt;
&lt;br /&gt;
Each cell of the table contains a text entry. By itself there is no intrinsic association of these cell values to the index values of &amp;lt;code&amp;gt;Power_type&amp;lt;/code&amp;gt;. The overlap may just be coincidence; hence, if you change a label in the &amp;lt;code&amp;gt;Power_type&amp;lt;/code&amp;gt; index, Analytica won't rewrite these table cells. If they were indeed meant to refer to the  labels of &amp;lt;code&amp;gt;Power_type&amp;lt;/code&amp;gt;, that change could introduce a logical error into your model. You may also be faced with a time-consuming task of updating all the cells of the table.&lt;br /&gt;
&lt;br /&gt;
In an example like this, you can use the [[Domain]] attribute to establish the association so that Analytica knows that the text values in this table are supposed to be the same text used in &amp;lt;code&amp;gt;Power_type&amp;lt;/code&amp;gt;'s index labels. You should set the domain type to be &amp;quot;Copy from index&amp;quot;, and select &amp;lt;code&amp;gt;Power_type&amp;lt;/code&amp;gt; as the index. With that configuration, if you now rename a label in &amp;lt;code&amp;gt;Power_type&amp;lt;/code&amp;gt;, it will automatically rewrite the corresponding cells of the table.&lt;br /&gt;
&lt;br /&gt;
== Index-label syntax ==&lt;br /&gt;
&lt;br /&gt;
In the above examples, Analytica automatically figures out to rewrite certain definitions that use text literals that correspond to an index label. It looks for equality or inequality comparison, use of the text literal in calls to [[Subscript]] (&amp;lt;code&amp;gt;X[Power_type='solar']&amp;lt;/code&amp;gt;), [[PositionInIndex]] (including &amp;lt;code&amp;gt;@[ Power_type = 'solar']&amp;lt;/code&amp;gt;), and [[SubIndex]]. It notices comparisons to a [[Choice]] variable that uses the index to a text literal. It finds literal definitions or cells when the domain is connected to the index. &lt;br /&gt;
&lt;br /&gt;
Although it automatically finds and updates the most common and most obvious cases, it cannot recognize all cases where it can be far less obvious that text literal is associated with an index. This would include the following examples.&lt;br /&gt;
&lt;br /&gt;
 Variable Incentive_discount ::=&lt;br /&gt;
      [[Local]] desired_type := If abs(latitude)&amp;lt;35 [[Then]] &amp;quot;solar&amp;quot; [[Else]] &amp;quot;nuclear&amp;quot;;&lt;br /&gt;
      [[If]] Power_type == desired_type [[Then]] Solar_discount [[Else]] Nuclear_discount&lt;br /&gt;
&lt;br /&gt;
To ensure that Analytica catches the association of these text literals with the index labels, you can use the index-label syntax instead:&lt;br /&gt;
&lt;br /&gt;
 Variable Incentive_discount ::=&lt;br /&gt;
      [[Local]] desired_type := If abs(latitude)&amp;lt;35 [[Then]] Power_type . &amp;quot;solar&amp;quot; [[Else]] Power_type . &amp;quot;nuclear&amp;quot;;&lt;br /&gt;
      [[If]] Power_type == desired_type [[Then]] Solar_discount [[Else]] Nuclear_discount&lt;br /&gt;
&lt;br /&gt;
The index-label notation provides two benefits:&lt;br /&gt;
# When the label in the index (&amp;lt;code&amp;gt;Power_type&amp;lt;/code&amp;gt;) changes, it knows to rewrite the expression with the new label.&lt;br /&gt;
# When &amp;lt;code&amp;gt;Power_type . &amp;quot;solar&amp;quot;&amp;lt;/code&amp;gt; is evaluated, it double checks that the index contains the label and issues a warning if not, helping you to find mistakes. The result of the evaluation is the text value &amp;lt;code&amp;gt;&amp;quot;solar&amp;quot;&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[Index-label dot syntax]]&lt;/div&gt;</summary>
		<author><name>Mhenrion</name></author>
	</entry>
	<entry>
		<id>https://docs.analytica.com/index.php?title=Keeping_text_literals_consistent_with_index_labels&amp;diff=64013</id>
		<title>Keeping text literals consistent with index labels</title>
		<link rel="alternate" type="text/html" href="https://docs.analytica.com/index.php?title=Keeping_text_literals_consistent_with_index_labels&amp;diff=64013"/>
		<updated>2026-06-24T17:43:12Z</updated>

		<summary type="html">&lt;p&gt;Mhenrion: Mhenrion moved page Keeping text literals consistent with index labels to Index labels auto updates: The old title was too long&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Index labels auto updates]]&lt;/div&gt;</summary>
		<author><name>Mhenrion</name></author>
	</entry>
	<entry>
		<id>https://docs.analytica.com/index.php?title=Index_labels_auto_updates&amp;diff=64012</id>
		<title>Index labels auto updates</title>
		<link rel="alternate" type="text/html" href="https://docs.analytica.com/index.php?title=Index_labels_auto_updates&amp;diff=64012"/>
		<updated>2026-06-24T17:43:11Z</updated>

		<summary type="html">&lt;p&gt;Mhenrion: Mhenrion moved page Keeping text literals consistent with index labels to Index labels auto updates: The old title was too long&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''New to [[Analytica 7.0]]''&lt;br /&gt;
&lt;br /&gt;
Analytica includes many advanced features for automatically updating expressions as you rename identifiers, change index values used by tables (see [[Table Splicing]]) or other expressions, or change inputs used by previously computed calculations. These features help you to focus on your model logic and avoid mistakes.&lt;br /&gt;
&lt;br /&gt;
== Automatic expression updates ==&lt;br /&gt;
&lt;br /&gt;
One change that can impact logic in other expressions throughout your model is a name change to an index label. This occurs when you have defined an index to be a  [[The_Expression_popup_menu|List of Text]], and then you have used the text values in the definitions (or other expressions) in other variables. For example:&lt;br /&gt;
&lt;br /&gt;
 Index Power_type ::= [ 'coal', 'gas', 'hydro', 'nuclear', 'solar', 'wind' ]&lt;br /&gt;
&lt;br /&gt;
 Variable Nems2_offset ::= [[If]] Power_type = 'solar' [[Then]] ...&lt;br /&gt;
&lt;br /&gt;
This partial example illustrates a case where a label from the &amp;lt;code&amp;gt;Power_type&amp;lt;/code&amp;gt; index, &amp;lt;code&amp;gt;'solar'&amp;lt;/code&amp;gt;, appears in the definition of a different variable. At some point you might change one or more label names in &amp;lt;code&amp;gt;Power_type&amp;lt;/code&amp;gt; which would cause the definition in &amp;lt;code&amp;gt;Nems2_offset&amp;lt;/code&amp;gt; to become incorrect (and not necessarily in a way that throws an error). &lt;br /&gt;
&lt;br /&gt;
You can make use of the [[Domain]] attribute to also help Analytica spot cases where text literals should be associated with an index value. For example, suppose in another variable you have an edit table like:&lt;br /&gt;
&lt;br /&gt;
 Variable Power_plant_type ::= [[Table]]( Power_plant )( 'gas', 'hydro', 'gas', 'solar' ....)&lt;br /&gt;
&lt;br /&gt;
Each cell of the table contains a text entry. By itself there is no intrinsic association of these cell values to the index values of &amp;lt;code&amp;gt;Power_type&amp;lt;/code&amp;gt;. The overlap may just be coincidence; hence, if you change a label in the &amp;lt;code&amp;gt;Power_type&amp;lt;/code&amp;gt; index, Analytica won't rewrite these table cells. If they were indeed meant to refer to the  labels of &amp;lt;code&amp;gt;Power_type&amp;lt;/code&amp;gt;, that change could introduce a logical error into your model. You may also be faced with a time-consuming task of updating all the cells of the table.&lt;br /&gt;
&lt;br /&gt;
In an example like this, you can use the [[Domain]] attribute to establish the association so that Analytica knows that the text values in this table are supposed to be the same text used in &amp;lt;code&amp;gt;Power_type&amp;lt;/code&amp;gt;'s index labels. You should set the domain type to be &amp;quot;Copy from index&amp;quot;, and select &amp;lt;code&amp;gt;Power_type&amp;lt;/code&amp;gt; as the index. With that configuration, if you now rename a label in &amp;lt;code&amp;gt;Power_type&amp;lt;/code&amp;gt;, it will automatically rewrite the corresponding cells of the table.&lt;br /&gt;
&lt;br /&gt;
== Index-label syntax ==&lt;br /&gt;
&lt;br /&gt;
In the above examples, Analytica automatically figures out to rewrite certain definitions that use text literals that correspond to an index label. It looks for equality or inequality comparison, use of the text literal in calls to [[Subscript]] (&amp;lt;code&amp;gt;X[Power_type='solar']&amp;lt;/code&amp;gt;), [[PositionInIndex]] (including &amp;lt;code&amp;gt;@[ Power_type = 'solar']&amp;lt;/code&amp;gt;), and [[SubIndex]]. It notices comparisons to a [[Choice]] variable that uses the index to a text literal. It finds literal definitions or cells when the domain is connected to the index. &lt;br /&gt;
&lt;br /&gt;
Although it automatically finds and updates the most common and most obvious cases, it cannot recognize all cases where it can be far less obvious that text literal is associated with an index. This would include the following examples.&lt;br /&gt;
&lt;br /&gt;
 Variable Incentive_discount ::=&lt;br /&gt;
      [[Local]] desired_type := If abs(latitude)&amp;lt;35 [[Then]] &amp;quot;solar&amp;quot; [[Else]] &amp;quot;nuclear&amp;quot;;&lt;br /&gt;
      [[If]] Power_type == desired_type [[Then]] Solar_discount [[Else]] Nuclear_discount&lt;br /&gt;
&lt;br /&gt;
To ensure that Analytica catches the association of these text literals with the index labels, you can use the index-label syntax instead:&lt;br /&gt;
&lt;br /&gt;
 Variable Incentive_discount ::=&lt;br /&gt;
      [[Local]] desired_type := If abs(latitude)&amp;lt;35 [[Then]] Power_type . &amp;quot;solar&amp;quot; [[Else]] Power_type . &amp;quot;nuclear&amp;quot;;&lt;br /&gt;
      [[If]] Power_type == desired_type [[Then]] Solar_discount [[Else]] Nuclear_discount&lt;br /&gt;
&lt;br /&gt;
The index-label notation provides two benefits:&lt;br /&gt;
# When the label in the index (&amp;lt;code&amp;gt;Power_type&amp;lt;/code&amp;gt;) changes, it knows to rewrite the expression with the new label.&lt;br /&gt;
# When &amp;lt;code&amp;gt;Power_type . &amp;quot;solar&amp;quot;&amp;lt;/code&amp;gt; is evaluated, it double checks that the index contains the label and issues a warning if not, helping you to find mistakes. The result of the evaluation is the text value &amp;lt;code&amp;gt;&amp;quot;solar&amp;quot;&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[Index-label dot syntax]]&lt;/div&gt;</summary>
		<author><name>Mhenrion</name></author>
	</entry>
	<entry>
		<id>https://docs.analytica.com/index.php?title=Index-label_dot_syntax&amp;diff=63967</id>
		<title>Index-label dot syntax</title>
		<link rel="alternate" type="text/html" href="https://docs.analytica.com/index.php?title=Index-label_dot_syntax&amp;diff=63967"/>
		<updated>2026-06-02T23:18:24Z</updated>

		<summary type="html">&lt;p&gt;Mhenrion: /* I . &amp;quot;label&amp;quot;  */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''New to [[Analytica 7.0]]''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Analytica's Intelligent Arrays provide great flexibility in that you can modify, add ,or remove indexes (dimensions) and the existing Definitions will generalize automatically -- in most cases. Before Analytica 7.0, there was one exception.  When an expression refers to a particular index value, such as:&lt;br /&gt;
 IF Tech = &amp;quot;Solar&amp;quot; THEN 200 ELSE 900&lt;br /&gt;
and you change that value -- e.g. &amp;quot;Solar&amp;quot; to &amp;quot;PV&amp;quot; it would break this expression.  In release 7.0 and after, it updates this expression automatically, since it realizes that &amp;quot;Solar&amp;quot; is a value of Index Tech.  &lt;br /&gt;
&lt;br /&gt;
But in some cases,  the index associated with the value isn't obvious, so it can't do that automatically. Now you can tell it what Index, the text is a value of by using syntax:&lt;br /&gt;
  Tech.&amp;quot;Solar&amp;quot;&lt;br /&gt;
or more generally&lt;br /&gt;
  &amp;lt;index&amp;gt; . &amp;lt;text literal&amp;gt;&lt;br /&gt;
This syntax consists of the identifier of an index, a dot, and a text literal (which can use single or double quotes).&lt;br /&gt;
&lt;br /&gt;
Use this when your index (&amp;lt;code&amp;gt;I&amp;lt;/code&amp;gt;) is a list-of-text index, and &amp;lt;code&amp;gt;&amp;quot;label&amp;quot;&amp;lt;/code&amp;gt; is one of the index elements, and you express that this text literal needs to be the same as the index label.&lt;br /&gt;
&lt;br /&gt;
The result of evaluating this construct is just &amp;lt;code&amp;gt;&amp;quot;label&amp;quot;&amp;lt;/code&amp;gt;. The association with the index does not impact equality -- i.e., even if two indexes, &amp;lt;code&amp;gt;I&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;J&amp;lt;/code&amp;gt; are totally separate but both happen to have an element &amp;lt;code&amp;gt;&amp;quot;label&amp;quot;&amp;lt;/code&amp;gt;,  &amp;lt;code&amp;gt;I.&amp;quot;label&amp;quot; = J.&amp;quot;label&amp;quot;&amp;lt;/code&amp;gt; is still True. &lt;br /&gt;
&lt;br /&gt;
The syntax provides two advantages:&lt;br /&gt;
# It tells Analytica that the text literal is the value in the index. If you later change the label in the index. Analytica will automatically rewrite this expression, replacing it with the new value. Hence, it helps avoid logical errors that can creep into a large model if you forget to update some expressions after changing an index label.&lt;br /&gt;
# During evaluation, it double checks that &amp;lt;code&amp;gt;&amp;quot;label&amp;quot;&amp;lt;/code&amp;gt; is indeed an element of the index. If not, it issues an evaluation-time warning. If you ignore the warning, the value is &amp;lt;code&amp;gt;&amp;quot;label&amp;quot;&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[Keeping text literals consistent with index labels]]&lt;/div&gt;</summary>
		<author><name>Mhenrion</name></author>
	</entry>
	<entry>
		<id>https://docs.analytica.com/index.php?title=Index-label_dot_syntax&amp;diff=63964</id>
		<title>Index-label dot syntax</title>
		<link rel="alternate" type="text/html" href="https://docs.analytica.com/index.php?title=Index-label_dot_syntax&amp;diff=63964"/>
		<updated>2026-06-01T20:36:41Z</updated>

		<summary type="html">&lt;p&gt;Mhenrion: /* I . &amp;quot;label&amp;quot;  */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''New to [[Analytica 7.0]]''&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;code&amp;gt;I . &amp;quot;label&amp;quot; &amp;lt;/code&amp;gt; ==&lt;br /&gt;
&lt;br /&gt;
Analytica's Intelligent Arrays provide enormous flexibility in that you can modify, add or remove indexes (dimensions) and existing Definitions will generalize automatically -- in most cases. Before Analytica 7.0, there was one exception.  If a.n expression refers to a particular index value, such as:&lt;br /&gt;
 IF Tech = &amp;quot;Solar&amp;quot; THEN 200 ELSE 900&lt;br /&gt;
And you change &amp;quot;Solar&amp;quot; to &amp;quot;PV&amp;quot; as a value in index Tech it would break this expression.&lt;br /&gt;
In release 7.0 and after, it will update this expression automatically, since it realizes that &amp;quot;Solar&amp;quot; is a value of Index Tech.  But in some cases, where the index isn't obvious, it can't do that automatically. Now you can tell it what Index, the text is a value of by using syntax&lt;br /&gt;
  Tech.&amp;quot;Solar&amp;quot;&lt;br /&gt;
or more generally&lt;br /&gt;
  &amp;lt;index&amp;gt; . &amp;lt;text literal&amp;gt;&lt;br /&gt;
This syntax consists of the identifier of an index, a dot, and a text literal (which can use single or double quotes).&lt;br /&gt;
&lt;br /&gt;
Use this when your index (&amp;lt;code&amp;gt;I&amp;lt;/code&amp;gt;) is a list-of-text index, and &amp;lt;code&amp;gt;&amp;quot;label&amp;quot;&amp;lt;/code&amp;gt; is one of the index elements, and you express that this text literal needs to be the same as the index label.&lt;br /&gt;
&lt;br /&gt;
The result of evaluating this construct is just &amp;lt;code&amp;gt;&amp;quot;label&amp;quot;&amp;lt;/code&amp;gt;. The association with the index does not impact equality -- i.e., even if two indexes, &amp;lt;code&amp;gt;I&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;J&amp;lt;/code&amp;gt; are totally separate but both happen to have an element &amp;lt;code&amp;gt;&amp;quot;label&amp;quot;&amp;lt;/code&amp;gt;,  &amp;lt;code&amp;gt;I.&amp;quot;label&amp;quot; = J.&amp;quot;label&amp;quot;&amp;lt;/code&amp;gt; is still True. &lt;br /&gt;
&lt;br /&gt;
The syntax provides two advantages:&lt;br /&gt;
# It tells Analytica that the text literal is the value in the index. If you later change the label in the index. Analytica will automatically rewrite this expression, replacing it with the new value. Hence, it helps avoid logical errors that can creep into a large model if you forget to update some expressions after changing an index label.&lt;br /&gt;
# During evaluation, it double checks that &amp;lt;code&amp;gt;&amp;quot;label&amp;quot;&amp;lt;/code&amp;gt; is indeed an element of the index. If not, it issues an evaluation-time warning. If you ignore the warning, the value is &amp;lt;code&amp;gt;&amp;quot;label&amp;quot;&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[Keeping text literals consistent with index labels]]&lt;/div&gt;</summary>
		<author><name>Mhenrion</name></author>
	</entry>
	<entry>
		<id>https://docs.analytica.com/index.php?title=Attributes&amp;diff=63846</id>
		<title>Attributes</title>
		<link rel="alternate" type="text/html" href="https://docs.analytica.com/index.php?title=Attributes&amp;diff=63846"/>
		<updated>2026-04-14T18:23:22Z</updated>

		<summary type="html">&lt;p&gt;Mhenrion: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;  [[Category:Attributes]]&lt;br /&gt;
(Up to [[Analytica Reference]])&lt;br /&gt;
&lt;br /&gt;
Each Analytica Object consists of a set of Attributes -- &amp;quot;properties&amp;quot; or &amp;quot;fields&amp;quot; in other computer languages.  Every Object has a [[Classes of variables and other objects|Class]], Identifier, and Title. Variables and Functions also have a Definition and Domain. &lt;br /&gt;
&lt;br /&gt;
You can easily view and edit some attributes in an [[Object window]]  or the [[Attribute panel]] below a Diagram. Other attributes you can see, but not edit directly -- such as, the Value, Inputs and Outputs of a Variable, which Analytica computes from the Definition.  &lt;br /&gt;
&lt;br /&gt;
Some attributes apply only to a particular object [[Class]] -- for example, Author and Creation date apply only to a Model or Module; Parameters and Recursive apply only to a Function. There are also many internal attributes that you don't usually see but may affect how the node looks -- such as, Nodeinfo, NodeSize, and Nodefont. &lt;br /&gt;
&lt;br /&gt;
In an Analytica expression you can access attributes using [[Attrib of Obj|«Attrib» OF «Obj»]] syntax. Inside [[OnClick]] and [[Onchange]] attributes, you can also modify some Attributes from Analytica code by assigning to them.&lt;br /&gt;
&lt;br /&gt;
This page first describes common editable Attributes, then common non-modifiable Attributes, and finally the many obscure internal Attributes that users rarely need to know about.&lt;br /&gt;
&lt;br /&gt;
== Common attributes ==&lt;br /&gt;
&lt;br /&gt;
These attributes apply to all classes of user-defined objects. You can edit them directly in [[Edit mode]] in the [[Object window]] and [[Attribute panel]]:&lt;br /&gt;
&lt;br /&gt;
===Editable Attributes of all Objects===&lt;br /&gt;
&lt;br /&gt;
====Class====&lt;br /&gt;
The [[Classes of variables and other objects|class]] of the object, such as Variable, Index, Function, or Module. You may change the Class of an object only to a compatible class: You can change the class of a Variable among these subclasses Chance, Constant, Determ, Decision, Index, Objective, Variable. You may change a [[Modules and Libraries|Module]] among these subclasses Library, FiledLibrary, Model, Module, FiledModule, or Form. You can change a [[Text nodes|Text]] node to a [[Frame node|Frame]] node or back. You can't change the class of a Function, Button, or system object.  In the [[Object window]] or [[Attribute panel]], in Edit mode, the Class appears as a pulldown menu that lets you change it to another compatible Class.&lt;br /&gt;
&lt;br /&gt;
====Identifier====&lt;br /&gt;
The unique name of the object. An identifier must start with a letter, and contain only letters, digits, or underscore, up to 40 characters. Identifiers are insensitive to case -- but Analytica retains and shows the case originally provided (or adapted from the Object's title). So you can use CamelCase to clarify words in the identifier.&lt;br /&gt;
&lt;br /&gt;
====Title==== &lt;br /&gt;
A word or brief phrase identifying the the object. It usually appears in the diagram node, and in many other places in the user interface. It's best to limit a Title to about 50 characters. By default, it creates an identifier from the first 20 characters of the title, substituting &amp;quot;_&amp;quot; for blank or any character that isn't a letter or digit.&lt;br /&gt;
&lt;br /&gt;
====Description====&lt;br /&gt;
Text that describes or documents the object. For a variable, it should describe what the quantity represents. For a function, it should describe what value it returns and what parameters it expects. If the definition is not obvious, it should also explain briefly what definition is doing. It should also mention any exceptions, such as what it does if an input or parameter is outside the expected domain.&lt;br /&gt;
&lt;br /&gt;
===Editable attributes of Variables and Functions===&lt;br /&gt;
&lt;br /&gt;
====Units====&lt;br /&gt;
The units of measurement of a variable, or value returned by a function -- such as &amp;quot;$/year&amp;quot; or &amp;quot;km/hr&amp;quot;. It's best to use abbreviations to keep units within about 10 characters.&lt;br /&gt;
&lt;br /&gt;
====Definition====&lt;br /&gt;
The expression used to compute the value of a variable or function.&lt;br /&gt;
&lt;br /&gt;
====[[Check Attribute|Check]]==== &lt;br /&gt;
An expression used to test that the computed result value is valid.  If it returns false, it gives a warning. This is helpful to detect errors in user input or complex calculations.  See [[Check Attribute]].&lt;br /&gt;
&lt;br /&gt;
===Non-editable attributes of variables and functions===&lt;br /&gt;
&lt;br /&gt;
These attributes are of variables and functions are visible, but not editable, in the Object window and Attribute panel:&lt;br /&gt;
&lt;br /&gt;
====Inputs====&lt;br /&gt;
A list of variables and functions used in the definition, after definition has been parsed. Before parsing, it may contain variables and functions from which arrows were drawn.&lt;br /&gt;
&lt;br /&gt;
====Outputs====&lt;br /&gt;
A list of variables and functions that use this object in their definitions.&lt;br /&gt;
&lt;br /&gt;
====Value====&lt;br /&gt;
The computed (mid-)value of the variable (not available for functions). You may displayed  the Value in an Object window, but it is not displayed by default. &lt;br /&gt;
&lt;br /&gt;
Accessing the attribute's value from an expression (using e.g., &amp;lt;code&amp;gt;Value of X&amp;lt;/code&amp;gt; doesn't trigger a calculation, and will return a special value of &amp;lt;code&amp;gt;Undefined&amp;lt;/code&amp;gt; if it isn't yet computed. However, we recommend using &amp;lt;code&amp;gt;[[Mid]]([[IsResultComputed]](X))&amp;lt;/code&amp;gt; to detect whether the mid-value is computed yet or not (or &amp;lt;code&amp;gt;[[Sample]]([[IsResultComputed]](X))&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
====EvaluationTime==== &lt;br /&gt;
The number of CPU seconds that have been spent evaluating or obtaining the value of the variable, or computing the result of the [[User Defined Functions|function]], since the object was created or loaded, or since the [[ResetEvalTimes]] command was last executed.  This timing does not include the time spent evaluating parent values.&lt;br /&gt;
&lt;br /&gt;
====EvaluationTimeAll====  &lt;br /&gt;
The number of CPU seconds spent in evaluation of the object, including time spent evaluating or obtaining the values of other variables that it depends on.  This is the cumulative time since the object was first created or loaded, or since the [[ResetEvalTimes]] command was last executed.&lt;br /&gt;
&lt;br /&gt;
===Editable attributes of Functions===&lt;br /&gt;
&lt;br /&gt;
====Parameters==== &lt;br /&gt;
A list of the function [[parameters]], enclosed in parentheses. It may include [[parameter qualifiers|qualifiers]] that specify what data type or dimension are expected for each parameter, or whether a parameter is optional or may be repeated. It is good practice to also list the main (non-optional) parameters (without qualifiers) in the title, so users can easily see what parameters it expects from seeing the function node in a diagram.&lt;br /&gt;
&lt;br /&gt;
====Recursive==== &lt;br /&gt;
A boolean, with value 0 (default) or 1, specifies whether the function is recursive -- i.e., it may call itself in its definition, or call another function that calls it (mutually recursive). By default, it is not displayed. You need to set it to be displayed in the [[Attributes dialog]].&lt;br /&gt;
&lt;br /&gt;
===Editable Attributes of Modules===&lt;br /&gt;
&lt;br /&gt;
====Author==== &lt;br /&gt;
The name(s) of the person or people who created this module. When you start a new model, it may automatically fill this in with the name of the owner of the computer, if registered with Windows.&lt;br /&gt;
&lt;br /&gt;
====[[TemplateInput]]==== &lt;br /&gt;
Identifies a single variable within the module that functions at the module's primary input. Drawing an arrow into this module node inserts the origin of the arrow as the definition of this variable. &lt;br /&gt;
&lt;br /&gt;
====[[TemplateOutput]]==== &lt;br /&gt;
Identifies a single variable within the module that serves as the module's primary output.  Drawing an arrow from this module node treats this variable as the origin of the arrow  -- for example, for use as an input to another object. &lt;br /&gt;
&lt;br /&gt;
===Non-editable attributes of modules===&lt;br /&gt;
&lt;br /&gt;
The Module [[class]] includes subclasses Model, Module, Filed Module, Library, Filed Library, and Form. These are attributes of modules that you can see but not edit in the [[Object window]] and [[Attribute panel]]:&lt;br /&gt;
&lt;br /&gt;
====Date (Created)==== &lt;br /&gt;
The time and date on which the module was first created.&lt;br /&gt;
&lt;br /&gt;
====Savedate (Last Saved)==== &lt;br /&gt;
The time and date on which this model or separately filed module or library was last saved. &lt;br /&gt;
&lt;br /&gt;
====FileInfo (File info)==== &lt;br /&gt;
The directory path and name of the file from which this model was read from or to which it was last saved.&lt;br /&gt;
&lt;br /&gt;
==Hidden attributes==&lt;br /&gt;
&lt;br /&gt;
There are quite a few hidden attributes that you can't usually see in the standard user interface, and almost never need to think about. If needed you can see them in the [[Typescript]] Window.  Type &amp;quot;Profile &amp;lt;identifier&amp;gt;&amp;quot; into the Typescript to see all the attributes of an object. &lt;br /&gt;
&lt;br /&gt;
=== Hidden attributes of Variables and Functions===&lt;br /&gt;
&lt;br /&gt;
====[[NumberFormat]]==== &lt;br /&gt;
The number format parameters specified in the [[Number Format Dialog]] for numbers generated in a variable or function. If absent, it uses the default Number Format.&lt;br /&gt;
:&amp;lt;code&amp;gt;v, format, proxy, zeroes, separators, currency, digits, trailingZeros, currencysymbol, currencyPlacement, datetemplate, fullPrecision, fullDateTemplate, relReqForFullDateTemplate, datesAsNumbers, numbersAsDates, digitsForGeneralFmt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====[[ProbabilityNumberFmt]]==== &lt;br /&gt;
In a Probability Bands result view, a Cumulative Probability result view, or a Probability mass view for a discrete-valued quantity, probabilities display in addition to values for the underlying variable. For the columns or axes containing probabilities, this attribute holds the number format, which is often different from the underlying variable's number format.&lt;br /&gt;
:&amp;lt;code&amp;gt;v, format, proxy, zeroes, separators, currency, digits, trailingZeros, currencysymbol, currencyPlacement, datetemplate, fullPrecision, fullDateTemplate, relReqForFullDateTemplate, datesAsNumbers, numbersAsDates, digitsForGeneralFmt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====[[DensityNumberFormat]]====&lt;br /&gt;
In a Probability Density Result view for a continuous variable, probability density values appear in addition to values for the underlying variable's quantity. This attribute stores the number format used for columns or axes that display probability densities.&lt;br /&gt;
:&amp;lt;code&amp;gt;v, format, proxy, zeroes, separators, currency, digits, trailingZeros, currencysymbol, currencyPlacement, datetemplate, fullPrecision, fullDateTemplate, relReqForFullDateTemplate, datesAsNumbers, numbersAsDates, digitsForGeneralFmt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====FixedDef====&lt;br /&gt;
The parse-tree (DCODE) from the Definition. It displays as the code, usually with extra parens. &lt;br /&gt;
&lt;br /&gt;
====DisplayInputs====&lt;br /&gt;
A list of objects among inputs from which arrows are to be displayed. It does not display arrows from Inputs that are not in Displayinputs.&lt;br /&gt;
&lt;br /&gt;
====IsIn====&lt;br /&gt;
A handle to the module that contains this object. (Null for the top model.)&lt;br /&gt;
&lt;br /&gt;
====[[Aliases]]====&lt;br /&gt;
A list of handles to any user inputs or user outputs ([FormNode]]) or [[Alias nodes]] for this object. Any object type can have aliases, including Variables, Functions, Modules, and Buttons.&lt;br /&gt;
&lt;br /&gt;
====[[Original]]====&lt;br /&gt;
The original node of a user input or user output ([[FormNode]]) or [[Alias nodes|Alias node]].  [[Aliases]] attribute contains all the nodes listing it as its Original.&lt;br /&gt;
&lt;br /&gt;
===Hidden attributes of Modules===&lt;br /&gt;
&lt;br /&gt;
====Contains====&lt;br /&gt;
The list of objects contained in this module.&lt;br /&gt;
&lt;br /&gt;
====DefaultSize====&lt;br /&gt;
The default node size for new nodes in this module.  It uses the same format as Nodesize. If empty, it inherits the default size from its  parent module. For a Model, it uses the default size from the Analytica initialization.&lt;br /&gt;
&lt;br /&gt;
==Node attributes==&lt;br /&gt;
&lt;br /&gt;
These attributes apply to the visual node that represents an object in its parent influence diagram.  They control the location, size, and appearance of each node.  You can modify some in the [[Diagram window|Diagram view]] (NodeLocation, NodeSize), some in the  [[Node Style dialog]] (NodeFont, NodeInfo), or using the [[Color palette|Color palette dialog]], (NodeColor and NodeFontColor). :&lt;br /&gt;
&lt;br /&gt;
====Nodelocation==== &lt;br /&gt;
The location of the node center in its parent diagram, as x,y,z, where x and y are number of pixels rightwards and downwards from the top-left corner of the diagram.  You can, of course, modify node location by dragging nodes in their diagram. Nodes are displayed in order of z value, which therefore controls which nodes are displayed in front of other nodes. You can send a node back or to the front  by selecting the node and using the [[Right mouse button menus|Right mouse button menus.]]&lt;br /&gt;
&lt;br /&gt;
====Nodesize==== &lt;br /&gt;
The size of the node, as x,y, where x and y are the half width and half height in pixels, i.e. the distance from the node center to each edge. You can change the size of each node in its Diagram dragging the corner boxes around a selected node. You can define the default node sizes in the [[Diagram Style dialog]].&lt;br /&gt;
&lt;br /&gt;
====Nodecolor==== &lt;br /&gt;
The color for this node, as r,g,b, where each color is in the range 0 to 65535. If empty, it uses the default color for this object class. You can modify colors by directly by selecting the node in the diagram, and using the [[Color palette]]. For arrow objects, the arrow color is determined by this attribute; if empty, it uses the Arrow class default. Dynamic dependency arrows use a separate color (the dynamic arrow color attribute) instead.&lt;br /&gt;
&lt;br /&gt;
====NodeFontColor==== &lt;br /&gt;
Controls the font color of a node in a diagram.  You can modify it from the  [[Color palette#Change the text color of nodes|Color palette]]. The attribute is in RGB format, r,g,b, where each color is in the range 0 to 65535. If empty, it inherits the font color from the diagram's default font color (DiagFontColor). If the diagram has no default, it uses the class default.&lt;br /&gt;
&lt;br /&gt;
====NodeBorderColor====&lt;br /&gt;
The border color of a node. The attribute is in RGB format, r,g,b, where each color is in the range 0 to 65535. If empty, it uses the default border color for this object class. For modules, the border color walks up the ancestor module hierarchy until an explicit border color is found.&lt;br /&gt;
&lt;br /&gt;
You can see the effects of Nodefont and Nodeinfo in the parent diagram. You can modify them for each node with the [[Node Style dialog]] or set defaults for a model or module with the [[Diagram Style dialog]].&lt;br /&gt;
&lt;br /&gt;
====NodeInfo ====&lt;br /&gt;
{{Assista||Subattributes of NodeInfo -- you can also read or set the subattributes such as &amp;lt;code&amp;gt;NodeInfo::fill of obj&amp;lt;/code&amp;gt;, etc.}}&lt;br /&gt;
&lt;br /&gt;
This affects how the node appears.  It has quite a number of fields, all Boolean -- 0 or 1 -- except ''widthOfCtrl''. [[NodeInfo|More on NodeInfo...]]&lt;br /&gt;
&lt;br /&gt;
Individual sub-fields of NodeInfo (such as show inputs, show outputs, show label, show border, fill node, show icon) inherit from the class default when not explicitly set on the node. Label justification (a sub-field not shown above) defaults to center for most classes, and left-aligned for [[Text]] nodes.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;1,inputArrows, outputArrows, label, border, fill, useCustomFont, widthOfCtrl,  bevel, showFormIcon, embedded, hidden&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:: ''inputArrows'': set to 1 to show all input influence arrows or 0 to suppress them&lt;br /&gt;
:: ''outputArrows'': set to 1 to show all output influence arrows or 0 to suppress them&lt;br /&gt;
:: ''label'': set to 1 to show the title (or identifier) in the node, or 0 not to.&lt;br /&gt;
:: ''border'': set to 1 to show the thin border around the node, or 0 not to.&lt;br /&gt;
:: ''fill'': set to 1 to fill the node with selected color, or 0 not to.&lt;br /&gt;
:: ''label'': set to 1 to show the title (or identifier) in the node, or 0 not to.&lt;br /&gt;
:: ''useCustomFont'': set to 1 to use the custom font set in NodeFont, or 0 not to.&lt;br /&gt;
:: ''widthOfCtrl'': For a user input or output node, this specifies the width of the field (for a text or choice menu) or the button for other types.&lt;br /&gt;
:: ''bevel'': set to 1 to show a bevel to make the node appear outdented -- default for button nodes -- or 0 not to.&lt;br /&gt;
:: ''ShowFormIcon'': controls whether the little result mode icon (e.g., &amp;quot;Mid&amp;quot;) displays to the right of the result button or not.&lt;br /&gt;
:: ''Embedded'': is reserved for a future release, where it will specify that the edit table, result view, or module is shown directly on the diagram within the node's rectangular area.&lt;br /&gt;
::''visibility'': The visible / hidden / disabled state of the node, usually set using the [[ChangeNodeVisibility]] function. Possible values:&lt;br /&gt;
::: 0 = visible (default when unset)&lt;br /&gt;
::: 1 = hidden&lt;br /&gt;
::: 2 = very hidden&lt;br /&gt;
::: 3 = Extremely hidden&lt;br /&gt;
::: 4 = Hidden in browse mode&lt;br /&gt;
::: 5 = Disabled&lt;br /&gt;
::: 6 = Disabled in browse mode&lt;br /&gt;
&lt;br /&gt;
====Nodefont==== &lt;br /&gt;
The node font family and size in points, e.g. Bodoni, 16. If empty, it inherits the font from the parent diagram module, walking up the module hierarchy until a module with an explicit font is found. If no ancestor sets a font, it uses the default project font (typically Arial).&lt;br /&gt;
&lt;br /&gt;
====Att_hyperlinkPref==== &lt;br /&gt;
When an index or result table contains a [[handle]] to an object, it shows title of the object as a blue clickable link. When you click a handle link, it shows the object. The number assigned to this attribute controls how it shows the object when you click :&lt;br /&gt;
# Open its Object window&lt;br /&gt;
# Open its parent diagram with the node selected&lt;br /&gt;
# If it's a Module, open its Diagram with nothing selected. Otherwise, Open parent Diagram with the node selected.&lt;br /&gt;
The attribute is inherited: If you set this attribute for a Model, it sets the default for all results.  If you set it on a module, it sets the default for results inside that module.  If you set it for a particular variable, it applies only to that variable.&lt;br /&gt;
&lt;br /&gt;
====DiagramColor====&lt;br /&gt;
The background color of a diagram, as r,g,b, where each color is in the range 0 to 65535. This attribute is set on a Module. Unlike most node appearance attributes, the diagram background color does '''not''' inherit from parent modules; if not set, it defaults to white.&lt;br /&gt;
&lt;br /&gt;
====Pict==== &lt;br /&gt;
An image shown in the node. You can paste an image into a node, or assign an image in standard formats (.png, jpeg, tiff) to the Pict attribute of a node.&lt;br /&gt;
&lt;br /&gt;
==Window status attributes==&lt;br /&gt;
&lt;br /&gt;
These attributes store the location and size of windows, including the Diagram, Object, and Result window, as applicable to each class of object.&lt;br /&gt;
&lt;br /&gt;
====DiagState====&lt;br /&gt;
The location and size of the diagram window, where ''x'', ''y'' are location of top left corner, ''w'' and ''h'' are width and height in pixels.  ''b'' is a bit field that stores the diagram style options.  ''t'' is the style for tabs when a tabbed diagram style is selected.  &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;v, x, y, w, h, b, tabs, buttonStyle, customIcon, titleOnly, crumbs&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:''v'' is a version number. Should be 2.&lt;br /&gt;
&lt;br /&gt;
:''x'', ''y'' in the coordinate of the top-left corner of the window frame when the window is not maximized, relative to the top-left corner of the ''desk area'' (the gray background area that starts under the toolbar). &lt;br /&gt;
&lt;br /&gt;
:''w, h'' are the width and height of the client area of the window when the window is not maximized. This client are is the area of the window not including the edges around the window, the window title bar, or the attribute panel, but it does include the diagram scroll bars (which have a width and height of 16). In [[Analytica 4.6]] and earlier, the height is from the bottom edge of the title bar to the bottom of the diagram's horizontal scroll bar, and hence, includes the height of the module hierarchy stripe within the total height. In [[Analytica 5.0]], the height starts at the lower edge of the hierarchy stripe -- so it does not include the hierarchy stripe.&lt;br /&gt;
&lt;br /&gt;
:''b'' is a bit field, which is the sum of the following values:&lt;br /&gt;
:* 1 = Show arrows to/from modules&lt;br /&gt;
:* 2 = Show arrows to/from indexes&lt;br /&gt;
:* 4 = Show arrows to/from functions&lt;br /&gt;
:* 8 = Turn off background (i.e., the diagram background will appear white)&lt;br /&gt;
:* 16 = Show dynamic dependency arrows &lt;br /&gt;
:* 32 = Show arrows for dependencies in the Check attribute&lt;br /&gt;
&lt;br /&gt;
:''tabs'' is reserved for a future enhancement (not currently exposed)  It encodes whether the diagram is a tabbed diagram, which side the tabs display on, and which style of tabs are used.  Possible values are:&lt;br /&gt;
:* 0 = (default) Not tabbed&lt;br /&gt;
:* 1 = Tabs on top&lt;br /&gt;
:* 2 = Tabs on bottom&lt;br /&gt;
:* 3 = Tabs on left (vertical text)&lt;br /&gt;
:* 4 = Tabs on right (vertical text)&lt;br /&gt;
:* 5 = Wide tabs on left (horizontal text)&lt;br /&gt;
:* 6 = Wide tabs on right (horizontal text)&lt;br /&gt;
:* 7 = Tabs hidden (e.g. overlays, controlled via button scripts)&lt;br /&gt;
&lt;br /&gt;
:''buttonStyle'' controls how the buttons in input and output nodes display (such as ''Calc'', ''Edit Table'', etc).&lt;br /&gt;
:* 0 = Normal text (default in [[Analytica 5.0]])&lt;br /&gt;
:* 1 = Bolded text (pre-5.0 standard)&lt;br /&gt;
:* 2 = Blank (no label or icon in button)&lt;br /&gt;
:* 3 = Icon&lt;br /&gt;
:* 4 = Bare Icon&lt;br /&gt;
::''buttonStyle'' was introduced in [[Analytica 5.0]]&lt;br /&gt;
::The ''buttonStyle'' inherits from the parent module's diagram. If no ancestor module sets it, it defaults to normal text style (0).&lt;br /&gt;
&lt;br /&gt;
:''customIcon'' If set to 1, uses the pict of the module or model as the icon for the titlebar.&lt;br /&gt;
&lt;br /&gt;
:''titleOnly'' If set to 1, uses the diagram object's title as the titlebar's title without the prefix &amp;quot;Diagram - &amp;quot;.&lt;br /&gt;
&lt;br /&gt;
:''crumbs'' If 0, hides the hierarchy bar from this diagram window only (child diagrams unaffected), &lt;br /&gt;
&lt;br /&gt;
::''customIcon'', ''titleOnly'', and ''crumbs'' were introduced in [[Analytica 6.4]].&lt;br /&gt;
&lt;br /&gt;
{{Assista||You can read or set the SubAttributes of DiagState using e.g., &amp;lt;code&amp;gt;DiagState::w of obj&amp;lt;/code&amp;gt;.}}&lt;br /&gt;
&lt;br /&gt;
====WindState==== &lt;br /&gt;
The location and size of the object window, where X, Y are location of top left corner, W and H are width and height in pixels. v is version number, usually 1. (Applies to all user-defined objects.)&lt;br /&gt;
:&amp;lt;code&amp;gt;v, X, Y, W, H&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Assista||In an expression, you can use a subattribute such as &amp;lt;code&amp;gt;WindState::W of obj&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====ValueState==== &lt;br /&gt;
{{Assista|key|SubAttributes of ValueState}}&lt;br /&gt;
&amp;lt;code&amp;gt;v, X, Y, W, H, Graph, U&amp;lt;/code&amp;gt;&lt;br /&gt;
The type, location and size of the result window for a variable, where  X, Y are location of top left corner of the window, W and H are width and height in pixels of the area exclusing the title bar and edges (the actual window size is X+15, Y+38), Graph is 1 if a graph view, 0 if a table view, and U is text defining the uncertainty view. v is version number, usually 1. (Applies only to variables.)&lt;br /&gt;
&lt;br /&gt;
====DefnState==== &lt;br /&gt;
The location and size of an edit table window.&lt;br /&gt;
{{Assista|key|SubAttributes of DefnState}}&lt;br /&gt;
:&amp;lt;code&amp;gt;v, x, y, w, h&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====OutlinerState==== &lt;br /&gt;
The location and size of the outliner window.  This is stored as an attribute of the keyword object named &amp;lt;code&amp;gt;All&amp;lt;/code&amp;gt; and is not saved with the model. &lt;br /&gt;
{{Assista|key|SubAttributes of OutlinerState}}&lt;br /&gt;
:&amp;lt;code&amp;gt;v, x, y, w, h&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Reformval==== &lt;br /&gt;
Lists the indexes for a multidimensional variable, in sequence defining which index is for rows (x axis), which for columns (key), and the remaining as slicers, from bottom to top. &lt;br /&gt;
&lt;br /&gt;
====Att_usebyprevindex==== &lt;br /&gt;
???&lt;br /&gt;
&lt;br /&gt;
== Internal Engine Attributes==&lt;br /&gt;
&lt;br /&gt;
=== Att_versionRange ===&lt;br /&gt;
=== Att_canBeIn ===&lt;br /&gt;
&lt;br /&gt;
=== Att_dirties ===&lt;br /&gt;
Used on a system variable to flag whether a change to the sys var causes the model to &amp;quot;dirty&amp;quot; (i.e., require a save).&lt;br /&gt;
&lt;br /&gt;
Starting with [[Analytica 6.6]], you can also set this to 0 on your own Variables to signal that a change to the Definition does not dirty the module or library containing the variable. This can be useful when your library (which might be linked) updates a user input or internal state, but that is specific to the model, not the library, so you don't want this to trigger a save of the library.&lt;br /&gt;
&lt;br /&gt;
=== Att_showable ===&lt;br /&gt;
=== Att_saveAlways ===&lt;br /&gt;
=== Att_recordSysFunDependencies ===&lt;br /&gt;
=== Att_Saveable ===&lt;br /&gt;
=== Att_attributeType ===&lt;br /&gt;
=== Att_readOnly ===&lt;br /&gt;
=== Att_domainKids, Att_domainParents ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== User Interface State Attributes ==&lt;br /&gt;
&lt;br /&gt;
'''Att_resultSliceState''': &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Att_editSliceState'''&lt;br /&gt;
&lt;br /&gt;
== Graphing Attributes ==&lt;br /&gt;
&lt;br /&gt;
=== xyExpr ===&lt;br /&gt;
&lt;br /&gt;
Contains one external/exogenous value expression.  Recognized by Analytica 3.1 and earlier, where the expression for the X value in an XY graph was stored.  &lt;br /&gt;
&lt;br /&gt;
=== Att_exogenousValue ===&lt;br /&gt;
&lt;br /&gt;
Holds a list of external values for a result window, which can then be used as graphing dimensions.  Analytica 4.0 allows more than one external value to be brought in for plotting against the primary result of a variable.  This attribute holds a list of expressions -- most commonly, each expression consists of a single variable identifier.&lt;br /&gt;
&lt;br /&gt;
The xyExpr may also contain one addition external expression.  (The reason it is split across two attributes is for greater 3.1 interoperability).&lt;br /&gt;
&lt;br /&gt;
=== Att_GraphIndexRange ===&lt;br /&gt;
Stores the axis settings for an index. When you have set it globally (via the '''Set Default''' button in the [[Graph setup dialog]]), the attribute setting is set on the index node itself. More commonly, it is set from within a [[GraphSetup]] attribute so that it applies to that index only in the context of the graph.&lt;br /&gt;
&lt;br /&gt;
{{Assista|key|SubAttributes of Att_GraphIndexRange}}&lt;br /&gt;
&lt;br /&gt;
:ver, cat,auto, includezero, log, reverse, incs, min, max, includeSubset, excludeSubset, hideLabels&lt;br /&gt;
where:&lt;br /&gt;
:version : Must be 1 (version)&lt;br /&gt;
:categorical : Categorical flag (1=force categorical interp), opt.&lt;br /&gt;
:auto : Full autoscale flag &lt;br /&gt;
:includezero : force 0 to be in range flag &lt;br /&gt;
:log : log scaling flag&lt;br /&gt;
:reverse : reverse order flag&lt;br /&gt;
:incs : Number of increments&lt;br /&gt;
:min : minimum value for manually scaled axis&lt;br /&gt;
:max : maximum value for manually scaled axis&lt;br /&gt;
:includeSubset : [2,7,8,12]  -- include these items (by position) when using manual scaling.  Brackets included&lt;br /&gt;
:excludeSubset : [3,6,13,17] -- exclude these items when using manual scaling.&lt;br /&gt;
:hideLabels: 1=hide labels for this axis&lt;br /&gt;
&lt;br /&gt;
=== Att_GraphValueRange ===&lt;br /&gt;
&lt;br /&gt;
This attribute is usually contained within the [[GraphSetup]] attribute (except when '''Set Default''' was pressed after configuring the range).&lt;br /&gt;
&lt;br /&gt;
The range for each value is encoded as&lt;br /&gt;
&lt;br /&gt;
{{Assista|key|SubAttributes of Att_GraphValueRange}}&lt;br /&gt;
:ver, cat,auto, includezero, log, reverse, incs, min, max, includeSubset, excludeSubset, hideLabels&lt;br /&gt;
where:&lt;br /&gt;
:version : Must be 1 (version)&lt;br /&gt;
:categorical : Categorical flag (1=force categorical interp), opt.&lt;br /&gt;
:auto : Full autoscale flag &lt;br /&gt;
:includezero : force 0 to be in range flag &lt;br /&gt;
:log : log scaling flag&lt;br /&gt;
:reverse : reverse order flag&lt;br /&gt;
:incs : Number of increments&lt;br /&gt;
:min : minimum value for manually scaled axis&lt;br /&gt;
:max : maximum value for manually scaled axis&lt;br /&gt;
:includeSubset : [2,7,8,12]  -- include these items (by position) when using manual scaling.  Brackets included&lt;br /&gt;
:excludeSubset : [3,6,13,17] -- exclude these items when using manual scaling.&lt;br /&gt;
:hideLabels: 1=hide labels for this axis&lt;br /&gt;
&lt;br /&gt;
For a given variable identifier, there can be a different range for each slice along a comparison index. These are encoded by joining the different range settings using a pipe separator (&amp;lt;code&amp;gt;|&amp;lt;/code&amp;gt;) and prefixing each slice range with the slice number and colon. For example:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;1,,1,,0,,20|1:1,,0,,1,,,0.01,0.56,0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The first range (&amp;lt;code&amp;gt;1,,1,,0,,20&amp;lt;/code&amp;gt; is for the variable's main value, the second one is prefixed by &amp;quot;1:&amp;quot; and applies to the first comparison slice. In a continuous CDF, PDF or Exceedance plot, this would be the 'X' value (e.g., the probability or density axis), but the 'Y' value is encoded instead on the &amp;lt;code&amp;gt;Graph_*_Valdim&amp;lt;/code&amp;gt; system variable.&lt;br /&gt;
&lt;br /&gt;
For common statistical axis, the attribute is set on special system variables with names having the form &amp;lt;code&amp;gt;Graph_*_Valdim&amp;lt;/code&amp;gt;, such as &amp;lt;code&amp;gt;Graph_Pdf_Valdim&amp;lt;/code&amp;gt;. This encodes the range setting for the PDF's density axis.&lt;br /&gt;
&lt;br /&gt;
=== Att_continuousLineStyle ===&lt;br /&gt;
=== Att_categoricaLineStyle ===&lt;br /&gt;
=== Att_stackedBar ===&lt;br /&gt;
=== Att_stackedLine ===&lt;br /&gt;
=== Att_barOverlap ===&lt;br /&gt;
&lt;br /&gt;
=== Graphing Role Attributes ===&lt;br /&gt;
&lt;br /&gt;
These attributes are: '''Att_xRole''', '''Att_yRole''', '''Att_colorRole''', '''Att_symbolRole''', '''Att_symbolSizeRole''', '''Att_originRole'''.&lt;br /&gt;
&lt;br /&gt;
They define the graphing pivot in coordination with the '''reformVal''' attribute.  The settings in these attributes are combined with the current chart type, dimensions present in the current value (or values), etc., and Analytica may adjust the pivot actually shown to create a consistent set of roles.  Since the dimensionality of results can change in Analytica (as upstream dimensions or added or removed, the view type can be changed, or the number of elements in a dimension may change), the exact pivot used the previous time the graph was displayed may no longer be sensible.  However, when possible, the roles defined in these attributes do become the roles used in the graph.&lt;br /&gt;
&lt;br /&gt;
Each of these role attributes can hold values in several possible forms:&lt;br /&gt;
* '''Self''': The keyword Self indicates that the main result fills the role.&lt;br /&gt;
* '''barOrigin''': The attribute name barOrigin indicates that the expression found in the legacy barOrigin attribute fills the role.&lt;br /&gt;
* '''xyExpr''': The attribute name indicates that the expression found in the xyExpr attribute fills the role.&lt;br /&gt;
* ''identifier'' : The identifier indicates that the index having this identifier fills the role.&lt;br /&gt;
* '''Sys_LocalIndex(&amp;quot;''name''&amp;quot;)''': Syntax indicating that the local index having the indicated name is used.&lt;br /&gt;
* '''Sys_CoordIndex(''value'')''' : The slice of the main result corresponding to ''[CoordIndex=value]'' is used, where ''value'' is an element of the coordinate index.&lt;br /&gt;
* 0 : The numeric value zero indicates that the main result is used (same as Self).&lt;br /&gt;
* n &amp;gt; 0:  A positive integer value indicates that an external value is used.  Several exogenous values may be attached to the result view (see '''Att_exogenousValues''' and '''xyExpr''' attributes).  These are numbered, with the xyExpr always being n=1 if present, and then the remaining continuing in order through those listed in Att_exogenousValues, and finally the legacy barOrigin attribute expression coming last.&lt;br /&gt;
* n &amp;lt; 0: A negative integer value identifies a coordinate index slice by position.  The role uses the slice of the main result corresponding to ''[@CoordIndex=abs(n)]''.&lt;br /&gt;
&lt;br /&gt;
Also '''barOrigin'''.&lt;br /&gt;
&lt;br /&gt;
== Table attributes ==&lt;br /&gt;
&lt;br /&gt;
* [[TableCellDefault]]: The default value (or Checkbox or Choice expression) used in a new cell of an Edit table when you add or extend an index of that table.&lt;br /&gt;
&lt;br /&gt;
* [[CorrespondenceMethod]]&lt;br /&gt;
&lt;br /&gt;
==Other attributes==&lt;br /&gt;
; Att_BrowseOnly&lt;br /&gt;
; Att__cloakDefn&lt;br /&gt;
; Att_Dirty&lt;br /&gt;
; Att_Obfuscated&lt;br /&gt;
; Att_recordSet : See [[DbQuery]] for examples of use&lt;br /&gt;
; Att_ResultSliceState&lt;br /&gt;
; Att_rlm_license&lt;br /&gt;
; Att_rlm_licenseobj&lt;br /&gt;
; Att_Showable&lt;br /&gt;
; Att_whenDisallowed&lt;br /&gt;
; [[Att_PreLoadScript]]&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
&amp;lt;div style=&amp;quot;column-count:2;-moz-column-count:2;-webkit-column-count:2&amp;quot;&amp;gt;&lt;br /&gt;
* [[Manage attributes]]&lt;br /&gt;
* [[Attrib of Obj]]&lt;br /&gt;
* [[Objects and Values]]&lt;br /&gt;
* [[Objects_and_Their_Attributes_-_Part_1_of_3|Objects and Their Attributes]]&lt;br /&gt;
* [[Objects_and_Their_Attributes_-_Part_2_of_3#User-Specified_Attributes|User-Defined Attributes]]&lt;br /&gt;
* [[To edit an attribute]]&lt;br /&gt;
* [[Attribute panel]]&lt;br /&gt;
* [[:Category: Attributes]]&lt;br /&gt;
* [[Domain attribute]]&lt;br /&gt;
* [[Class]]&lt;br /&gt;
* [[Identifier]]&lt;br /&gt;
* [[Optimizer Attributes]]&lt;br /&gt;
* [[Attributes of a function]]&lt;br /&gt;
* [[Check attribute]]&lt;br /&gt;
* [[Classes of variables and other objects]]&lt;br /&gt;
* [[Definitions]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mhenrion</name></author>
	</entry>
	<entry>
		<id>https://docs.analytica.com/index.php?title=Attributes&amp;diff=63845</id>
		<title>Attributes</title>
		<link rel="alternate" type="text/html" href="https://docs.analytica.com/index.php?title=Attributes&amp;diff=63845"/>
		<updated>2026-04-14T18:22:27Z</updated>

		<summary type="html">&lt;p&gt;Mhenrion: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;  [[Category:Attributes]]&lt;br /&gt;
(Up to [[Analytica Reference]])&lt;br /&gt;
&lt;br /&gt;
Each Analytica Object consists of a set of Attributes -- &amp;quot;properties&amp;quot; or &amp;quot;fields&amp;quot; in other computer languages.  Every Object has a [[Classes of variables and other objects|Class]], Identifier, and Title. Variables and Functions also have a Definition and Domain. &lt;br /&gt;
&lt;br /&gt;
You can easily view and edit some attributes in an [[Object window]]  or the [[Attribute panel]] below a Diagram. Other attributes you can see, but not edit directly -- such as, the Value, Inputs and Outputs of a Variable, which Analytica computes from the Definition.  &lt;br /&gt;
&lt;br /&gt;
Some attributes apply only to a particular object [[Class]] -- for example, Author and Creation date apply only to a Model or Module; Parameters and Recursive apply only to a Function. There are also many internal attributes that you don't usually see but may affect how the node looks -- such as, Nodeinfo, NodeSize, and Nodefont. &lt;br /&gt;
&lt;br /&gt;
In an Analytica expression you can access attributes using [[Attrib of Obj|«Attrib» OF «Obj»]] syntax. Inside [[OnClick]] and [[Onchange]] attributes, you can also modify Attributes from Analytica code.&lt;br /&gt;
&lt;br /&gt;
This page first describes common editable Attributes, then common non-modifiable Attributes, and finally the many obscure internal Attributes that users rarely need to know about.&lt;br /&gt;
&lt;br /&gt;
== Common attributes ==&lt;br /&gt;
&lt;br /&gt;
These attributes apply to all classes of user-defined objects. You can edit them directly in [[Edit mode]] in the [[Object window]] and [[Attribute panel]]:&lt;br /&gt;
&lt;br /&gt;
===Editable Attributes of all Objects===&lt;br /&gt;
&lt;br /&gt;
====Class====&lt;br /&gt;
The [[Classes of variables and other objects|class]] of the object, such as Variable, Index, Function, or Module. You may change the Class of an object only to a compatible class: You can change the class of a Variable among these subclasses Chance, Constant, Determ, Decision, Index, Objective, Variable. You may change a [[Modules and Libraries|Module]] among these subclasses Library, FiledLibrary, Model, Module, FiledModule, or Form. You can change a [[Text nodes|Text]] node to a [[Frame node|Frame]] node or back. You can't change the class of a Function, Button, or system object.  In the [[Object window]] or [[Attribute panel]], in Edit mode, the Class appears as a pulldown menu that lets you change it to another compatible Class.&lt;br /&gt;
&lt;br /&gt;
====Identifier====&lt;br /&gt;
The unique name of the object. An identifier must start with a letter, and contain only letters, digits, or underscore, up to 40 characters. Identifiers are insensitive to case -- but Analytica retains and shows the case originally provided (or adapted from the Object's title). So you can use CamelCase to clarify words in the identifier.&lt;br /&gt;
&lt;br /&gt;
====Title==== &lt;br /&gt;
A word or brief phrase identifying the the object. It usually appears in the diagram node, and in many other places in the user interface. It's best to limit a Title to about 50 characters. By default, it creates an identifier from the first 20 characters of the title, substituting &amp;quot;_&amp;quot; for blank or any character that isn't a letter or digit.&lt;br /&gt;
&lt;br /&gt;
====Description====&lt;br /&gt;
Text that describes or documents the object. For a variable, it should describe what the quantity represents. For a function, it should describe what value it returns and what parameters it expects. If the definition is not obvious, it should also explain briefly what definition is doing. It should also mention any exceptions, such as what it does if an input or parameter is outside the expected domain.&lt;br /&gt;
&lt;br /&gt;
===Editable attributes of Variables and Functions===&lt;br /&gt;
&lt;br /&gt;
====Units====&lt;br /&gt;
The units of measurement of a variable, or value returned by a function -- such as &amp;quot;$/year&amp;quot; or &amp;quot;km/hr&amp;quot;. It's best to use abbreviations to keep units within about 10 characters.&lt;br /&gt;
&lt;br /&gt;
====Definition====&lt;br /&gt;
The expression used to compute the value of a variable or function.&lt;br /&gt;
&lt;br /&gt;
====[[Check Attribute|Check]]==== &lt;br /&gt;
An expression used to test that the computed result value is valid.  If it returns false, it gives a warning. This is helpful to detect errors in user input or complex calculations.  See [[Check Attribute]].&lt;br /&gt;
&lt;br /&gt;
===Non-editable attributes of variables and functions===&lt;br /&gt;
&lt;br /&gt;
These attributes are of variables and functions are visible, but not editable, in the Object window and Attribute panel:&lt;br /&gt;
&lt;br /&gt;
====Inputs====&lt;br /&gt;
A list of variables and functions used in the definition, after definition has been parsed. Before parsing, it may contain variables and functions from which arrows were drawn.&lt;br /&gt;
&lt;br /&gt;
====Outputs====&lt;br /&gt;
A list of variables and functions that use this object in their definitions.&lt;br /&gt;
&lt;br /&gt;
====Value====&lt;br /&gt;
The computed (mid-)value of the variable (not available for functions). You may displayed  the Value in an Object window, but it is not displayed by default. &lt;br /&gt;
&lt;br /&gt;
Accessing the attribute's value from an expression (using e.g., &amp;lt;code&amp;gt;Value of X&amp;lt;/code&amp;gt; doesn't trigger a calculation, and will return a special value of &amp;lt;code&amp;gt;Undefined&amp;lt;/code&amp;gt; if it isn't yet computed. However, we recommend using &amp;lt;code&amp;gt;[[Mid]]([[IsResultComputed]](X))&amp;lt;/code&amp;gt; to detect whether the mid-value is computed yet or not (or &amp;lt;code&amp;gt;[[Sample]]([[IsResultComputed]](X))&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
====EvaluationTime==== &lt;br /&gt;
The number of CPU seconds that have been spent evaluating or obtaining the value of the variable, or computing the result of the [[User Defined Functions|function]], since the object was created or loaded, or since the [[ResetEvalTimes]] command was last executed.  This timing does not include the time spent evaluating parent values.&lt;br /&gt;
&lt;br /&gt;
====EvaluationTimeAll====  &lt;br /&gt;
The number of CPU seconds spent in evaluation of the object, including time spent evaluating or obtaining the values of other variables that it depends on.  This is the cumulative time since the object was first created or loaded, or since the [[ResetEvalTimes]] command was last executed.&lt;br /&gt;
&lt;br /&gt;
===Editable attributes of Functions===&lt;br /&gt;
&lt;br /&gt;
====Parameters==== &lt;br /&gt;
A list of the function [[parameters]], enclosed in parentheses. It may include [[parameter qualifiers|qualifiers]] that specify what data type or dimension are expected for each parameter, or whether a parameter is optional or may be repeated. It is good practice to also list the main (non-optional) parameters (without qualifiers) in the title, so users can easily see what parameters it expects from seeing the function node in a diagram.&lt;br /&gt;
&lt;br /&gt;
====Recursive==== &lt;br /&gt;
A boolean, with value 0 (default) or 1, specifies whether the function is recursive -- i.e., it may call itself in its definition, or call another function that calls it (mutually recursive). By default, it is not displayed. You need to set it to be displayed in the [[Attributes dialog]].&lt;br /&gt;
&lt;br /&gt;
===Editable Attributes of Modules===&lt;br /&gt;
&lt;br /&gt;
====Author==== &lt;br /&gt;
The name(s) of the person or people who created this module. When you start a new model, it may automatically fill this in with the name of the owner of the computer, if registered with Windows.&lt;br /&gt;
&lt;br /&gt;
====[[TemplateInput]]==== &lt;br /&gt;
Identifies a single variable within the module that functions at the module's primary input. Drawing an arrow into this module node inserts the origin of the arrow as the definition of this variable. &lt;br /&gt;
&lt;br /&gt;
====[[TemplateOutput]]==== &lt;br /&gt;
Identifies a single variable within the module that serves as the module's primary output.  Drawing an arrow from this module node treats this variable as the origin of the arrow  -- for example, for use as an input to another object. &lt;br /&gt;
&lt;br /&gt;
===Non-editable attributes of modules===&lt;br /&gt;
&lt;br /&gt;
The Module [[class]] includes subclasses Model, Module, Filed Module, Library, Filed Library, and Form. These are attributes of modules that you can see but not edit in the [[Object window]] and [[Attribute panel]]:&lt;br /&gt;
&lt;br /&gt;
====Date (Created)==== &lt;br /&gt;
The time and date on which the module was first created.&lt;br /&gt;
&lt;br /&gt;
====Savedate (Last Saved)==== &lt;br /&gt;
The time and date on which this model or separately filed module or library was last saved. &lt;br /&gt;
&lt;br /&gt;
====FileInfo (File info)==== &lt;br /&gt;
The directory path and name of the file from which this model was read from or to which it was last saved.&lt;br /&gt;
&lt;br /&gt;
==Hidden attributes==&lt;br /&gt;
&lt;br /&gt;
There are quite a few hidden attributes that you can't usually see in the standard user interface, and almost never need to think about. If needed you can see them in the [[Typescript]] Window.  Type &amp;quot;Profile &amp;lt;identifier&amp;gt;&amp;quot; into the Typescript to see all the attributes of an object. &lt;br /&gt;
&lt;br /&gt;
=== Hidden attributes of Variables and Functions===&lt;br /&gt;
&lt;br /&gt;
====[[NumberFormat]]==== &lt;br /&gt;
The number format parameters specified in the [[Number Format Dialog]] for numbers generated in a variable or function. If absent, it uses the default Number Format.&lt;br /&gt;
:&amp;lt;code&amp;gt;v, format, proxy, zeroes, separators, currency, digits, trailingZeros, currencysymbol, currencyPlacement, datetemplate, fullPrecision, fullDateTemplate, relReqForFullDateTemplate, datesAsNumbers, numbersAsDates, digitsForGeneralFmt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====[[ProbabilityNumberFmt]]==== &lt;br /&gt;
In a Probability Bands result view, a Cumulative Probability result view, or a Probability mass view for a discrete-valued quantity, probabilities display in addition to values for the underlying variable. For the columns or axes containing probabilities, this attribute holds the number format, which is often different from the underlying variable's number format.&lt;br /&gt;
:&amp;lt;code&amp;gt;v, format, proxy, zeroes, separators, currency, digits, trailingZeros, currencysymbol, currencyPlacement, datetemplate, fullPrecision, fullDateTemplate, relReqForFullDateTemplate, datesAsNumbers, numbersAsDates, digitsForGeneralFmt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====[[DensityNumberFormat]]====&lt;br /&gt;
In a Probability Density Result view for a continuous variable, probability density values appear in addition to values for the underlying variable's quantity. This attribute stores the number format used for columns or axes that display probability densities.&lt;br /&gt;
:&amp;lt;code&amp;gt;v, format, proxy, zeroes, separators, currency, digits, trailingZeros, currencysymbol, currencyPlacement, datetemplate, fullPrecision, fullDateTemplate, relReqForFullDateTemplate, datesAsNumbers, numbersAsDates, digitsForGeneralFmt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====FixedDef====&lt;br /&gt;
The parse-tree (DCODE) from the Definition. It displays as the code, usually with extra parens. &lt;br /&gt;
&lt;br /&gt;
====DisplayInputs====&lt;br /&gt;
A list of objects among inputs from which arrows are to be displayed. It does not display arrows from Inputs that are not in Displayinputs.&lt;br /&gt;
&lt;br /&gt;
====IsIn====&lt;br /&gt;
A handle to the module that contains this object. (Null for the top model.)&lt;br /&gt;
&lt;br /&gt;
====[[Aliases]]====&lt;br /&gt;
A list of handles to any user inputs or user outputs ([FormNode]]) or [[Alias nodes]] for this object. Any object type can have aliases, including Variables, Functions, Modules, and Buttons.&lt;br /&gt;
&lt;br /&gt;
====[[Original]]====&lt;br /&gt;
The original node of a user input or user output ([[FormNode]]) or [[Alias nodes|Alias node]].  [[Aliases]] attribute contains all the nodes listing it as its Original.&lt;br /&gt;
&lt;br /&gt;
===Hidden attributes of Modules===&lt;br /&gt;
&lt;br /&gt;
====Contains====&lt;br /&gt;
The list of objects contained in this module.&lt;br /&gt;
&lt;br /&gt;
====DefaultSize====&lt;br /&gt;
The default node size for new nodes in this module.  It uses the same format as Nodesize. If empty, it inherits the default size from its  parent module. For a Model, it uses the default size from the Analytica initialization.&lt;br /&gt;
&lt;br /&gt;
==Node attributes==&lt;br /&gt;
&lt;br /&gt;
These attributes apply to the visual node that represents an object in its parent influence diagram.  They control the location, size, and appearance of each node.  You can modify some in the [[Diagram window|Diagram view]] (NodeLocation, NodeSize), some in the  [[Node Style dialog]] (NodeFont, NodeInfo), or using the [[Color palette|Color palette dialog]], (NodeColor and NodeFontColor). :&lt;br /&gt;
&lt;br /&gt;
====Nodelocation==== &lt;br /&gt;
The location of the node center in its parent diagram, as x,y,z, where x and y are number of pixels rightwards and downwards from the top-left corner of the diagram.  You can, of course, modify node location by dragging nodes in their diagram. Nodes are displayed in order of z value, which therefore controls which nodes are displayed in front of other nodes. You can send a node back or to the front  by selecting the node and using the [[Right mouse button menus|Right mouse button menus.]]&lt;br /&gt;
&lt;br /&gt;
====Nodesize==== &lt;br /&gt;
The size of the node, as x,y, where x and y are the half width and half height in pixels, i.e. the distance from the node center to each edge. You can change the size of each node in its Diagram dragging the corner boxes around a selected node. You can define the default node sizes in the [[Diagram Style dialog]].&lt;br /&gt;
&lt;br /&gt;
====Nodecolor==== &lt;br /&gt;
The color for this node, as r,g,b, where each color is in the range 0 to 65535. If empty, it uses the default color for this object class. You can modify colors by directly by selecting the node in the diagram, and using the [[Color palette]]. For arrow objects, the arrow color is determined by this attribute; if empty, it uses the Arrow class default. Dynamic dependency arrows use a separate color (the dynamic arrow color attribute) instead.&lt;br /&gt;
&lt;br /&gt;
====NodeFontColor==== &lt;br /&gt;
Controls the font color of a node in a diagram.  You can modify it from the  [[Color palette#Change the text color of nodes|Color palette]]. The attribute is in RGB format, r,g,b, where each color is in the range 0 to 65535. If empty, it inherits the font color from the diagram's default font color (DiagFontColor). If the diagram has no default, it uses the class default.&lt;br /&gt;
&lt;br /&gt;
====NodeBorderColor====&lt;br /&gt;
The border color of a node. The attribute is in RGB format, r,g,b, where each color is in the range 0 to 65535. If empty, it uses the default border color for this object class. For modules, the border color walks up the ancestor module hierarchy until an explicit border color is found.&lt;br /&gt;
&lt;br /&gt;
You can see the effects of Nodefont and Nodeinfo in the parent diagram. You can modify them for each node with the [[Node Style dialog]] or set defaults for a model or module with the [[Diagram Style dialog]].&lt;br /&gt;
&lt;br /&gt;
====NodeInfo ====&lt;br /&gt;
{{Assista||Subattributes of NodeInfo -- you can also read or set the subattributes such as &amp;lt;code&amp;gt;NodeInfo::fill of obj&amp;lt;/code&amp;gt;, etc.}}&lt;br /&gt;
&lt;br /&gt;
This affects how the node appears.  It has quite a number of fields, all Boolean -- 0 or 1 -- except ''widthOfCtrl''. [[NodeInfo|More on NodeInfo...]]&lt;br /&gt;
&lt;br /&gt;
Individual sub-fields of NodeInfo (such as show inputs, show outputs, show label, show border, fill node, show icon) inherit from the class default when not explicitly set on the node. Label justification (a sub-field not shown above) defaults to center for most classes, and left-aligned for [[Text]] nodes.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;1,inputArrows, outputArrows, label, border, fill, useCustomFont, widthOfCtrl,  bevel, showFormIcon, embedded, hidden&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:: ''inputArrows'': set to 1 to show all input influence arrows or 0 to suppress them&lt;br /&gt;
:: ''outputArrows'': set to 1 to show all output influence arrows or 0 to suppress them&lt;br /&gt;
:: ''label'': set to 1 to show the title (or identifier) in the node, or 0 not to.&lt;br /&gt;
:: ''border'': set to 1 to show the thin border around the node, or 0 not to.&lt;br /&gt;
:: ''fill'': set to 1 to fill the node with selected color, or 0 not to.&lt;br /&gt;
:: ''label'': set to 1 to show the title (or identifier) in the node, or 0 not to.&lt;br /&gt;
:: ''useCustomFont'': set to 1 to use the custom font set in NodeFont, or 0 not to.&lt;br /&gt;
:: ''widthOfCtrl'': For a user input or output node, this specifies the width of the field (for a text or choice menu) or the button for other types.&lt;br /&gt;
:: ''bevel'': set to 1 to show a bevel to make the node appear outdented -- default for button nodes -- or 0 not to.&lt;br /&gt;
:: ''ShowFormIcon'': controls whether the little result mode icon (e.g., &amp;quot;Mid&amp;quot;) displays to the right of the result button or not.&lt;br /&gt;
:: ''Embedded'': is reserved for a future release, where it will specify that the edit table, result view, or module is shown directly on the diagram within the node's rectangular area.&lt;br /&gt;
::''visibility'': The visible / hidden / disabled state of the node, usually set using the [[ChangeNodeVisibility]] function. Possible values:&lt;br /&gt;
::: 0 = visible (default when unset)&lt;br /&gt;
::: 1 = hidden&lt;br /&gt;
::: 2 = very hidden&lt;br /&gt;
::: 3 = Extremely hidden&lt;br /&gt;
::: 4 = Hidden in browse mode&lt;br /&gt;
::: 5 = Disabled&lt;br /&gt;
::: 6 = Disabled in browse mode&lt;br /&gt;
&lt;br /&gt;
====Nodefont==== &lt;br /&gt;
The node font family and size in points, e.g. Bodoni, 16. If empty, it inherits the font from the parent diagram module, walking up the module hierarchy until a module with an explicit font is found. If no ancestor sets a font, it uses the default project font (typically Arial).&lt;br /&gt;
&lt;br /&gt;
====Att_hyperlinkPref==== &lt;br /&gt;
When an index or result table contains a [[handle]] to an object, it shows title of the object as a blue clickable link. When you click a handle link, it shows the object. The number assigned to this attribute controls how it shows the object when you click :&lt;br /&gt;
# Open its Object window&lt;br /&gt;
# Open its parent diagram with the node selected&lt;br /&gt;
# If it's a Module, open its Diagram with nothing selected. Otherwise, Open parent Diagram with the node selected.&lt;br /&gt;
The attribute is inherited: If you set this attribute for a Model, it sets the default for all results.  If you set it on a module, it sets the default for results inside that module.  If you set it for a particular variable, it applies only to that variable.&lt;br /&gt;
&lt;br /&gt;
====DiagramColor====&lt;br /&gt;
The background color of a diagram, as r,g,b, where each color is in the range 0 to 65535. This attribute is set on a Module. Unlike most node appearance attributes, the diagram background color does '''not''' inherit from parent modules; if not set, it defaults to white.&lt;br /&gt;
&lt;br /&gt;
====Pict==== &lt;br /&gt;
An image shown in the node. You can paste an image into a node, or assign an image in standard formats (.png, jpeg, tiff) to the Pict attribute of a node.&lt;br /&gt;
&lt;br /&gt;
==Window status attributes==&lt;br /&gt;
&lt;br /&gt;
These attributes store the location and size of windows, including the Diagram, Object, and Result window, as applicable to each class of object.&lt;br /&gt;
&lt;br /&gt;
====DiagState====&lt;br /&gt;
The location and size of the diagram window, where ''x'', ''y'' are location of top left corner, ''w'' and ''h'' are width and height in pixels.  ''b'' is a bit field that stores the diagram style options.  ''t'' is the style for tabs when a tabbed diagram style is selected.  &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;v, x, y, w, h, b, tabs, buttonStyle, customIcon, titleOnly, crumbs&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:''v'' is a version number. Should be 2.&lt;br /&gt;
&lt;br /&gt;
:''x'', ''y'' in the coordinate of the top-left corner of the window frame when the window is not maximized, relative to the top-left corner of the ''desk area'' (the gray background area that starts under the toolbar). &lt;br /&gt;
&lt;br /&gt;
:''w, h'' are the width and height of the client area of the window when the window is not maximized. This client are is the area of the window not including the edges around the window, the window title bar, or the attribute panel, but it does include the diagram scroll bars (which have a width and height of 16). In [[Analytica 4.6]] and earlier, the height is from the bottom edge of the title bar to the bottom of the diagram's horizontal scroll bar, and hence, includes the height of the module hierarchy stripe within the total height. In [[Analytica 5.0]], the height starts at the lower edge of the hierarchy stripe -- so it does not include the hierarchy stripe.&lt;br /&gt;
&lt;br /&gt;
:''b'' is a bit field, which is the sum of the following values:&lt;br /&gt;
:* 1 = Show arrows to/from modules&lt;br /&gt;
:* 2 = Show arrows to/from indexes&lt;br /&gt;
:* 4 = Show arrows to/from functions&lt;br /&gt;
:* 8 = Turn off background (i.e., the diagram background will appear white)&lt;br /&gt;
:* 16 = Show dynamic dependency arrows &lt;br /&gt;
:* 32 = Show arrows for dependencies in the Check attribute&lt;br /&gt;
&lt;br /&gt;
:''tabs'' is reserved for a future enhancement (not currently exposed)  It encodes whether the diagram is a tabbed diagram, which side the tabs display on, and which style of tabs are used.  Possible values are:&lt;br /&gt;
:* 0 = (default) Not tabbed&lt;br /&gt;
:* 1 = Tabs on top&lt;br /&gt;
:* 2 = Tabs on bottom&lt;br /&gt;
:* 3 = Tabs on left (vertical text)&lt;br /&gt;
:* 4 = Tabs on right (vertical text)&lt;br /&gt;
:* 5 = Wide tabs on left (horizontal text)&lt;br /&gt;
:* 6 = Wide tabs on right (horizontal text)&lt;br /&gt;
:* 7 = Tabs hidden (e.g. overlays, controlled via button scripts)&lt;br /&gt;
&lt;br /&gt;
:''buttonStyle'' controls how the buttons in input and output nodes display (such as ''Calc'', ''Edit Table'', etc).&lt;br /&gt;
:* 0 = Normal text (default in [[Analytica 5.0]])&lt;br /&gt;
:* 1 = Bolded text (pre-5.0 standard)&lt;br /&gt;
:* 2 = Blank (no label or icon in button)&lt;br /&gt;
:* 3 = Icon&lt;br /&gt;
:* 4 = Bare Icon&lt;br /&gt;
::''buttonStyle'' was introduced in [[Analytica 5.0]]&lt;br /&gt;
::The ''buttonStyle'' inherits from the parent module's diagram. If no ancestor module sets it, it defaults to normal text style (0).&lt;br /&gt;
&lt;br /&gt;
:''customIcon'' If set to 1, uses the pict of the module or model as the icon for the titlebar.&lt;br /&gt;
&lt;br /&gt;
:''titleOnly'' If set to 1, uses the diagram object's title as the titlebar's title without the prefix &amp;quot;Diagram - &amp;quot;.&lt;br /&gt;
&lt;br /&gt;
:''crumbs'' If 0, hides the hierarchy bar from this diagram window only (child diagrams unaffected), &lt;br /&gt;
&lt;br /&gt;
::''customIcon'', ''titleOnly'', and ''crumbs'' were introduced in [[Analytica 6.4]].&lt;br /&gt;
&lt;br /&gt;
{{Assista||You can read or set the SubAttributes of DiagState using e.g., &amp;lt;code&amp;gt;DiagState::w of obj&amp;lt;/code&amp;gt;.}}&lt;br /&gt;
&lt;br /&gt;
====WindState==== &lt;br /&gt;
The location and size of the object window, where X, Y are location of top left corner, W and H are width and height in pixels. v is version number, usually 1. (Applies to all user-defined objects.)&lt;br /&gt;
:&amp;lt;code&amp;gt;v, X, Y, W, H&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Assista||In an expression, you can use a subattribute such as &amp;lt;code&amp;gt;WindState::W of obj&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====ValueState==== &lt;br /&gt;
{{Assista|key|SubAttributes of ValueState}}&lt;br /&gt;
&amp;lt;code&amp;gt;v, X, Y, W, H, Graph, U&amp;lt;/code&amp;gt;&lt;br /&gt;
The type, location and size of the result window for a variable, where  X, Y are location of top left corner of the window, W and H are width and height in pixels of the area exclusing the title bar and edges (the actual window size is X+15, Y+38), Graph is 1 if a graph view, 0 if a table view, and U is text defining the uncertainty view. v is version number, usually 1. (Applies only to variables.)&lt;br /&gt;
&lt;br /&gt;
====DefnState==== &lt;br /&gt;
The location and size of an edit table window.&lt;br /&gt;
{{Assista|key|SubAttributes of DefnState}}&lt;br /&gt;
:&amp;lt;code&amp;gt;v, x, y, w, h&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====OutlinerState==== &lt;br /&gt;
The location and size of the outliner window.  This is stored as an attribute of the keyword object named &amp;lt;code&amp;gt;All&amp;lt;/code&amp;gt; and is not saved with the model. &lt;br /&gt;
{{Assista|key|SubAttributes of OutlinerState}}&lt;br /&gt;
:&amp;lt;code&amp;gt;v, x, y, w, h&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Reformval==== &lt;br /&gt;
Lists the indexes for a multidimensional variable, in sequence defining which index is for rows (x axis), which for columns (key), and the remaining as slicers, from bottom to top. &lt;br /&gt;
&lt;br /&gt;
====Att_usebyprevindex==== &lt;br /&gt;
???&lt;br /&gt;
&lt;br /&gt;
== Internal Engine Attributes==&lt;br /&gt;
&lt;br /&gt;
=== Att_versionRange ===&lt;br /&gt;
=== Att_canBeIn ===&lt;br /&gt;
&lt;br /&gt;
=== Att_dirties ===&lt;br /&gt;
Used on a system variable to flag whether a change to the sys var causes the model to &amp;quot;dirty&amp;quot; (i.e., require a save).&lt;br /&gt;
&lt;br /&gt;
Starting with [[Analytica 6.6]], you can also set this to 0 on your own Variables to signal that a change to the Definition does not dirty the module or library containing the variable. This can be useful when your library (which might be linked) updates a user input or internal state, but that is specific to the model, not the library, so you don't want this to trigger a save of the library.&lt;br /&gt;
&lt;br /&gt;
=== Att_showable ===&lt;br /&gt;
=== Att_saveAlways ===&lt;br /&gt;
=== Att_recordSysFunDependencies ===&lt;br /&gt;
=== Att_Saveable ===&lt;br /&gt;
=== Att_attributeType ===&lt;br /&gt;
=== Att_readOnly ===&lt;br /&gt;
=== Att_domainKids, Att_domainParents ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== User Interface State Attributes ==&lt;br /&gt;
&lt;br /&gt;
'''Att_resultSliceState''': &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Att_editSliceState'''&lt;br /&gt;
&lt;br /&gt;
== Graphing Attributes ==&lt;br /&gt;
&lt;br /&gt;
=== xyExpr ===&lt;br /&gt;
&lt;br /&gt;
Contains one external/exogenous value expression.  Recognized by Analytica 3.1 and earlier, where the expression for the X value in an XY graph was stored.  &lt;br /&gt;
&lt;br /&gt;
=== Att_exogenousValue ===&lt;br /&gt;
&lt;br /&gt;
Holds a list of external values for a result window, which can then be used as graphing dimensions.  Analytica 4.0 allows more than one external value to be brought in for plotting against the primary result of a variable.  This attribute holds a list of expressions -- most commonly, each expression consists of a single variable identifier.&lt;br /&gt;
&lt;br /&gt;
The xyExpr may also contain one addition external expression.  (The reason it is split across two attributes is for greater 3.1 interoperability).&lt;br /&gt;
&lt;br /&gt;
=== Att_GraphIndexRange ===&lt;br /&gt;
Stores the axis settings for an index. When you have set it globally (via the '''Set Default''' button in the [[Graph setup dialog]]), the attribute setting is set on the index node itself. More commonly, it is set from within a [[GraphSetup]] attribute so that it applies to that index only in the context of the graph.&lt;br /&gt;
&lt;br /&gt;
{{Assista|key|SubAttributes of Att_GraphIndexRange}}&lt;br /&gt;
&lt;br /&gt;
:ver, cat,auto, includezero, log, reverse, incs, min, max, includeSubset, excludeSubset, hideLabels&lt;br /&gt;
where:&lt;br /&gt;
:version : Must be 1 (version)&lt;br /&gt;
:categorical : Categorical flag (1=force categorical interp), opt.&lt;br /&gt;
:auto : Full autoscale flag &lt;br /&gt;
:includezero : force 0 to be in range flag &lt;br /&gt;
:log : log scaling flag&lt;br /&gt;
:reverse : reverse order flag&lt;br /&gt;
:incs : Number of increments&lt;br /&gt;
:min : minimum value for manually scaled axis&lt;br /&gt;
:max : maximum value for manually scaled axis&lt;br /&gt;
:includeSubset : [2,7,8,12]  -- include these items (by position) when using manual scaling.  Brackets included&lt;br /&gt;
:excludeSubset : [3,6,13,17] -- exclude these items when using manual scaling.&lt;br /&gt;
:hideLabels: 1=hide labels for this axis&lt;br /&gt;
&lt;br /&gt;
=== Att_GraphValueRange ===&lt;br /&gt;
&lt;br /&gt;
This attribute is usually contained within the [[GraphSetup]] attribute (except when '''Set Default''' was pressed after configuring the range).&lt;br /&gt;
&lt;br /&gt;
The range for each value is encoded as&lt;br /&gt;
&lt;br /&gt;
{{Assista|key|SubAttributes of Att_GraphValueRange}}&lt;br /&gt;
:ver, cat,auto, includezero, log, reverse, incs, min, max, includeSubset, excludeSubset, hideLabels&lt;br /&gt;
where:&lt;br /&gt;
:version : Must be 1 (version)&lt;br /&gt;
:categorical : Categorical flag (1=force categorical interp), opt.&lt;br /&gt;
:auto : Full autoscale flag &lt;br /&gt;
:includezero : force 0 to be in range flag &lt;br /&gt;
:log : log scaling flag&lt;br /&gt;
:reverse : reverse order flag&lt;br /&gt;
:incs : Number of increments&lt;br /&gt;
:min : minimum value for manually scaled axis&lt;br /&gt;
:max : maximum value for manually scaled axis&lt;br /&gt;
:includeSubset : [2,7,8,12]  -- include these items (by position) when using manual scaling.  Brackets included&lt;br /&gt;
:excludeSubset : [3,6,13,17] -- exclude these items when using manual scaling.&lt;br /&gt;
:hideLabels: 1=hide labels for this axis&lt;br /&gt;
&lt;br /&gt;
For a given variable identifier, there can be a different range for each slice along a comparison index. These are encoded by joining the different range settings using a pipe separator (&amp;lt;code&amp;gt;|&amp;lt;/code&amp;gt;) and prefixing each slice range with the slice number and colon. For example:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;1,,1,,0,,20|1:1,,0,,1,,,0.01,0.56,0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The first range (&amp;lt;code&amp;gt;1,,1,,0,,20&amp;lt;/code&amp;gt; is for the variable's main value, the second one is prefixed by &amp;quot;1:&amp;quot; and applies to the first comparison slice. In a continuous CDF, PDF or Exceedance plot, this would be the 'X' value (e.g., the probability or density axis), but the 'Y' value is encoded instead on the &amp;lt;code&amp;gt;Graph_*_Valdim&amp;lt;/code&amp;gt; system variable.&lt;br /&gt;
&lt;br /&gt;
For common statistical axis, the attribute is set on special system variables with names having the form &amp;lt;code&amp;gt;Graph_*_Valdim&amp;lt;/code&amp;gt;, such as &amp;lt;code&amp;gt;Graph_Pdf_Valdim&amp;lt;/code&amp;gt;. This encodes the range setting for the PDF's density axis.&lt;br /&gt;
&lt;br /&gt;
=== Att_continuousLineStyle ===&lt;br /&gt;
=== Att_categoricaLineStyle ===&lt;br /&gt;
=== Att_stackedBar ===&lt;br /&gt;
=== Att_stackedLine ===&lt;br /&gt;
=== Att_barOverlap ===&lt;br /&gt;
&lt;br /&gt;
=== Graphing Role Attributes ===&lt;br /&gt;
&lt;br /&gt;
These attributes are: '''Att_xRole''', '''Att_yRole''', '''Att_colorRole''', '''Att_symbolRole''', '''Att_symbolSizeRole''', '''Att_originRole'''.&lt;br /&gt;
&lt;br /&gt;
They define the graphing pivot in coordination with the '''reformVal''' attribute.  The settings in these attributes are combined with the current chart type, dimensions present in the current value (or values), etc., and Analytica may adjust the pivot actually shown to create a consistent set of roles.  Since the dimensionality of results can change in Analytica (as upstream dimensions or added or removed, the view type can be changed, or the number of elements in a dimension may change), the exact pivot used the previous time the graph was displayed may no longer be sensible.  However, when possible, the roles defined in these attributes do become the roles used in the graph.&lt;br /&gt;
&lt;br /&gt;
Each of these role attributes can hold values in several possible forms:&lt;br /&gt;
* '''Self''': The keyword Self indicates that the main result fills the role.&lt;br /&gt;
* '''barOrigin''': The attribute name barOrigin indicates that the expression found in the legacy barOrigin attribute fills the role.&lt;br /&gt;
* '''xyExpr''': The attribute name indicates that the expression found in the xyExpr attribute fills the role.&lt;br /&gt;
* ''identifier'' : The identifier indicates that the index having this identifier fills the role.&lt;br /&gt;
* '''Sys_LocalIndex(&amp;quot;''name''&amp;quot;)''': Syntax indicating that the local index having the indicated name is used.&lt;br /&gt;
* '''Sys_CoordIndex(''value'')''' : The slice of the main result corresponding to ''[CoordIndex=value]'' is used, where ''value'' is an element of the coordinate index.&lt;br /&gt;
* 0 : The numeric value zero indicates that the main result is used (same as Self).&lt;br /&gt;
* n &amp;gt; 0:  A positive integer value indicates that an external value is used.  Several exogenous values may be attached to the result view (see '''Att_exogenousValues''' and '''xyExpr''' attributes).  These are numbered, with the xyExpr always being n=1 if present, and then the remaining continuing in order through those listed in Att_exogenousValues, and finally the legacy barOrigin attribute expression coming last.&lt;br /&gt;
* n &amp;lt; 0: A negative integer value identifies a coordinate index slice by position.  The role uses the slice of the main result corresponding to ''[@CoordIndex=abs(n)]''.&lt;br /&gt;
&lt;br /&gt;
Also '''barOrigin'''.&lt;br /&gt;
&lt;br /&gt;
== Table attributes ==&lt;br /&gt;
&lt;br /&gt;
* [[TableCellDefault]]: The default value (or Checkbox or Choice expression) used in a new cell of an Edit table when you add or extend an index of that table.&lt;br /&gt;
&lt;br /&gt;
* [[CorrespondenceMethod]]&lt;br /&gt;
&lt;br /&gt;
==Other attributes==&lt;br /&gt;
; Att_BrowseOnly&lt;br /&gt;
; Att__cloakDefn&lt;br /&gt;
; Att_Dirty&lt;br /&gt;
; Att_Obfuscated&lt;br /&gt;
; Att_recordSet : See [[DbQuery]] for examples of use&lt;br /&gt;
; Att_ResultSliceState&lt;br /&gt;
; Att_rlm_license&lt;br /&gt;
; Att_rlm_licenseobj&lt;br /&gt;
; Att_Showable&lt;br /&gt;
; Att_whenDisallowed&lt;br /&gt;
; [[Att_PreLoadScript]]&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
&amp;lt;div style=&amp;quot;column-count:2;-moz-column-count:2;-webkit-column-count:2&amp;quot;&amp;gt;&lt;br /&gt;
* [[Manage attributes]]&lt;br /&gt;
* [[Attrib of Obj]]&lt;br /&gt;
* [[Objects and Values]]&lt;br /&gt;
* [[Objects_and_Their_Attributes_-_Part_1_of_3|Objects and Their Attributes]]&lt;br /&gt;
* [[Objects_and_Their_Attributes_-_Part_2_of_3#User-Specified_Attributes|User-Defined Attributes]]&lt;br /&gt;
* [[To edit an attribute]]&lt;br /&gt;
* [[Attribute panel]]&lt;br /&gt;
* [[:Category: Attributes]]&lt;br /&gt;
* [[Domain attribute]]&lt;br /&gt;
* [[Class]]&lt;br /&gt;
* [[Identifier]]&lt;br /&gt;
* [[Optimizer Attributes]]&lt;br /&gt;
* [[Attributes of a function]]&lt;br /&gt;
* [[Check attribute]]&lt;br /&gt;
* [[Classes of variables and other objects]]&lt;br /&gt;
* [[Definitions]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mhenrion</name></author>
	</entry>
	<entry>
		<id>https://docs.analytica.com/index.php?title=ArrowClass&amp;diff=63835</id>
		<title>ArrowClass</title>
		<link rel="alternate" type="text/html" href="https://docs.analytica.com/index.php?title=ArrowClass&amp;diff=63835"/>
		<updated>2026-04-14T00:58:51Z</updated>

		<summary type="html">&lt;p&gt;Mhenrion: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;ArrowClass is the [[Classes of variables and other objects|Class]] of Objects that represent influence arrows.  Only arrows that have nondefault properties such as [[Arrow bends, curves, and styles]] have explit Objects, needed to contain those properties as Attributes.  Users don't normally need to know about Arrow objects unless you want to write special functions to use or change Arrow properties. &lt;br /&gt;
&lt;br /&gt;
See also&lt;br /&gt;
* [[Objects]]&lt;br /&gt;
* [[Classes of variables and other objects]]&lt;br /&gt;
* [[Arrow bends, curves, and styles]]&lt;/div&gt;</summary>
		<author><name>Mhenrion</name></author>
	</entry>
	<entry>
		<id>https://docs.analytica.com/index.php?title=ArrowClass&amp;diff=63834</id>
		<title>ArrowClass</title>
		<link rel="alternate" type="text/html" href="https://docs.analytica.com/index.php?title=ArrowClass&amp;diff=63834"/>
		<updated>2026-04-14T00:58:37Z</updated>

		<summary type="html">&lt;p&gt;Mhenrion: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;ArrowClass is the [[Classes of variables and other objects|Class]] of Objects that represent influence arrows.  Only arrows that have nondefault properties such as [[Arrow bends, curves, and styles]] have explit Objects, needed to contain those properties as Attributes.  Users don't normally need to know about Arrow objects unless you want to write special functions to use or change Arrow properties. &lt;br /&gt;
&lt;br /&gt;
See also&lt;br /&gt;
* [[Objects]]&lt;br /&gt;
* [[Classes of variables and other objects]&lt;br /&gt;
* [[Arrow bends, curves, and styles]]&lt;/div&gt;</summary>
		<author><name>Mhenrion</name></author>
	</entry>
	<entry>
		<id>https://docs.analytica.com/index.php?title=ArrowClass&amp;diff=63833</id>
		<title>ArrowClass</title>
		<link rel="alternate" type="text/html" href="https://docs.analytica.com/index.php?title=ArrowClass&amp;diff=63833"/>
		<updated>2026-04-14T00:55:47Z</updated>

		<summary type="html">&lt;p&gt;Mhenrion: Created page with &amp;quot;ArrowClass is the Class of Objects that represent influence arrows.  Only arrows that have nondefault properties like Thickness or Waypoints have Objects.  Users never nee...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;ArrowClass is the [[Class]] of Objects that represent influence arrows.  Only arrows that have nondefault properties like Thickness or Waypoints have Objects.  Users never need to bother about Arrow objects except if they want to write special functions that use or change Arrow properties. &lt;br /&gt;
&lt;br /&gt;
See also&lt;br /&gt;
* [[Objects]]&lt;br /&gt;
* [[Classes]&lt;br /&gt;
*&lt;/div&gt;</summary>
		<author><name>Mhenrion</name></author>
	</entry>
	<entry>
		<id>https://docs.analytica.com/index.php?title=Mutables_library&amp;diff=63829</id>
		<title>Mutables library</title>
		<link rel="alternate" type="text/html" href="https://docs.analytica.com/index.php?title=Mutables_library&amp;diff=63829"/>
		<updated>2026-04-07T17:03:02Z</updated>

		<summary type="html">&lt;p&gt;Mhenrion: /* Using mutables for debugging */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[category:Function libraries]]&lt;br /&gt;
&lt;br /&gt;
A ''mutable'' is a memory location that you can write to as a side-effect of a calculation and can later read from. It can hold any Analytica data structure. There is no dependency maintenance, unlike normal Analytica flow architecture, so values you read from it don't invalidate if the mutable later changes. Mutables can be especially useful for debugging, especially with complex data structures.&lt;br /&gt;
&lt;br /&gt;
'''Download:''' [[media:Mutables library.ana|Mutables library.ana]].&lt;br /&gt;
&lt;br /&gt;
==Using mutables for debugging==&lt;br /&gt;
&lt;br /&gt;
Mutables can be especially useful for debugging when the data structures are too complex to use [[ConsolePrint]] effectively, or contain [[In-memory binary data terms|binary data]], etc.. The code you are debugging can save intermediate values in mutables, and then you can examine these later after the entire calc finishes to figure out what was going on. &lt;br /&gt;
&lt;br /&gt;
Use in this way, you will usually create a Variable node to hold the mutable:&lt;br /&gt;
::&amp;lt;code&amp;gt;Variable debug_val ::= [[MutableNew]]( )&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The code you are debugging calls&lt;br /&gt;
::&amp;lt;code&amp;gt;[[MutableSet]]( debug_val, some_intermediate_val );&amp;lt;/code&amp;gt;&lt;br /&gt;
to save the value for examination later.  Then later you view it using, say&lt;br /&gt;
::&amp;lt;code&amp;gt;Variable ViewDebugVal ::= [[MutableGet]](debug_val)&amp;lt;/code&amp;gt;&lt;br /&gt;
It is best to set the [[CachingMethod]] of &amp;lt;code&amp;gt;ViewDebugVal&amp;lt;/code&amp;gt; to '''Never Cache''', since there is no dependency maintenance. I.e., if you rerun your algorithm and then view this result, you'll see the first value if &amp;lt;code&amp;gt;ViewDebugVal&amp;lt;/code&amp;gt; caches. &lt;br /&gt;
You can also use &amp;lt;code&amp;gt;[[InvalidateResult]](ViewDebugVal)&amp;lt;/code&amp;gt; from a button OnClick.&lt;br /&gt;
&lt;br /&gt;
You can pass mutables to a function parameter, which is sometimes useful when you have subroutines that modify a data structure. &lt;br /&gt;
&lt;br /&gt;
Mutables can also be used from imperative code, but this use is strongly discouraged. There is seldom a good reason for using them in this way -- you just inherit all the disadvantages of imperative code. Analytica explicitly prohibits side-effects of expression evaluation, which promotes referential transparency. This library provides a mechanism to get around this, but its more legitimate uses are for debugging or in-memory logging use cases.&lt;br /&gt;
&lt;br /&gt;
If you have a calculation that has multiple results, instead of placing the secondary results in variables that have mutables, it's better to get the secondary result variables with the [[ComputedBy]] function or with [[MultiResult]].&lt;br /&gt;
&lt;br /&gt;
== Function Reference ==&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;MutableNew&amp;quot;&amp;gt;MutableNew( )&amp;lt;/span&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Creates a new mutable -- a storage location that can be set using &lt;br /&gt;
:&amp;lt;code&amp;gt;[[MutableSet]]( mutable, x )&amp;lt;/code&amp;gt;&lt;br /&gt;
and read using&lt;br /&gt;
:&amp;lt;code&amp;gt;[[MutableGet]]( mutable )&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Use case 1 (common for debugging)&lt;br /&gt;
:Create a new global variable to be your mutable. The name of the variable is the name of your mutable. Its definition is:&lt;br /&gt;
::&amp;lt;code&amp;gt;MutableNew()&amp;lt;/code&amp;gt;&lt;br /&gt;
;Use case 2 (Common when passing a mutable parameter to a UDF):&lt;br /&gt;
::&amp;lt;code&amp;gt;Local myMutableName := [[MutableNew]]();&amp;lt;/code&amp;gt;&lt;br /&gt;
::&amp;lt;code&amp;gt;F( myMutableName )&amp;lt;/code&amp;gt;&lt;br /&gt;
:where &amp;lt;code&amp;gt;F&amp;lt;/code&amp;gt; is the called UDF. Inside F it uses [[MutableGet]] and [[MutableSet]].&lt;br /&gt;
&lt;br /&gt;
You can also have mutables within a data structure, and data structures with multiple separate mutables. The data structure itself doesn't change, just the values inside the mutable elements.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;MutableSet&amp;quot;&amp;gt;MutableSet( mutable, x )&amp;lt;/span&amp;gt; ===&lt;br /&gt;
Stores the value «x» in the «mutable».&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;span id=&amp;quot;MutableGet&amp;quot;&amp;gt;MutableGet( mutable )&amp;lt;/span&amp;gt; ===&lt;br /&gt;
Returns the current value stored in «mutable».&lt;br /&gt;
&lt;br /&gt;
==History==&lt;br /&gt;
The mutables library is included with [[Analytica 6.4]] and later. It requires [[Analytica 6.0]] or later.&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
* [[ComputedBy]]&lt;br /&gt;
* [[Local Values]]&lt;br /&gt;
* [[Side effects]]&lt;br /&gt;
* [[Debugging Hints]]&lt;/div&gt;</summary>
		<author><name>Mhenrion</name></author>
	</entry>
	<entry>
		<id>https://docs.analytica.com/index.php?title=IndexesOf&amp;diff=63828</id>
		<title>IndexesOf</title>
		<link rel="alternate" type="text/html" href="https://docs.analytica.com/index.php?title=IndexesOf&amp;diff=63828"/>
		<updated>2026-04-07T16:18:37Z</updated>

		<summary type="html">&lt;p&gt;Mhenrion: /* See Also */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Functions that create lists]]&lt;br /&gt;
[[Category:Functions returning information about arrays]]&lt;br /&gt;
[[Category:Meta-Inference Functions]]&lt;br /&gt;
&lt;br /&gt;
== IndexesOf(a'', except...'') ==&lt;br /&gt;
Returns a list of [[handle]]s to the indexes of array «a». It is different from [[IndexNames]](a), which returns the identifiers of the indexes as text values instead of handles.  &lt;br /&gt;
&lt;br /&gt;
If «X» has an [[implicit index]] (an index without a name), the first element of the output list is [[null]], rather than a handle.&lt;br /&gt;
&lt;br /&gt;
If the array has more than one [[Local Indexes|local index]] with the same identifier, you can use [[IndexesOf]](a) to identify each index safely because each handle unambiguously refers to the corresponding index, where [[IndexNames]](a) would return the identifiers as identical and therefore ambiguous text values.&lt;br /&gt;
&lt;br /&gt;
The optional «except» parameter excludes any of the indexes that are listed.&lt;br /&gt;
&lt;br /&gt;
[[Syntax]]: &lt;br /&gt;
:[[IndexesOf]](a: Array)&lt;br /&gt;
&lt;br /&gt;
== Example ==&lt;br /&gt;
:&amp;lt;code&amp;gt;IndexesOf(Car_prices) &amp;amp;rarr; [Car_types, Year]&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;IndexesOf(Car_prices, except: Car_types) &amp;amp;rarr; [Year]&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Find the maximum in &amp;lt;code&amp;gt;A&amp;lt;/code&amp;gt; over all indexes:&lt;br /&gt;
:&amp;lt;code&amp;gt;[[Max]]( A, ...[[IndexesOf]](A) )&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sum over all indexes of &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt; except &amp;lt;code&amp;gt;J&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;K&amp;lt;/code&amp;gt;:&lt;br /&gt;
:&amp;lt;code&amp;gt;[[Sum]]( x, ...[[IndexesOf]](x, except: J,K) )&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
* The «except» parameter was introduced in [[Analytica 5.2]].&lt;br /&gt;
&lt;br /&gt;
== See Also == &lt;br /&gt;
* [[Handle]]&lt;br /&gt;
* [[Handle Functions]]&lt;br /&gt;
* [[IndexNames]]: The names of the indexes of a variable&lt;br /&gt;
* [[HasIndex]] Tests if a variable has a specified Index.&lt;br /&gt;
* [[Repeated parameter forwarding]]&lt;/div&gt;</summary>
		<author><name>Mhenrion</name></author>
	</entry>
	<entry>
		<id>https://docs.analytica.com/index.php?title=IndexesOf&amp;diff=63827</id>
		<title>IndexesOf</title>
		<link rel="alternate" type="text/html" href="https://docs.analytica.com/index.php?title=IndexesOf&amp;diff=63827"/>
		<updated>2026-04-07T16:18:00Z</updated>

		<summary type="html">&lt;p&gt;Mhenrion: /* See Also */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Functions that create lists]]&lt;br /&gt;
[[Category:Functions returning information about arrays]]&lt;br /&gt;
[[Category:Meta-Inference Functions]]&lt;br /&gt;
&lt;br /&gt;
== IndexesOf(a'', except...'') ==&lt;br /&gt;
Returns a list of [[handle]]s to the indexes of array «a». It is different from [[IndexNames]](a), which returns the identifiers of the indexes as text values instead of handles.  &lt;br /&gt;
&lt;br /&gt;
If «X» has an [[implicit index]] (an index without a name), the first element of the output list is [[null]], rather than a handle.&lt;br /&gt;
&lt;br /&gt;
If the array has more than one [[Local Indexes|local index]] with the same identifier, you can use [[IndexesOf]](a) to identify each index safely because each handle unambiguously refers to the corresponding index, where [[IndexNames]](a) would return the identifiers as identical and therefore ambiguous text values.&lt;br /&gt;
&lt;br /&gt;
The optional «except» parameter excludes any of the indexes that are listed.&lt;br /&gt;
&lt;br /&gt;
[[Syntax]]: &lt;br /&gt;
:[[IndexesOf]](a: Array)&lt;br /&gt;
&lt;br /&gt;
== Example ==&lt;br /&gt;
:&amp;lt;code&amp;gt;IndexesOf(Car_prices) &amp;amp;rarr; [Car_types, Year]&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;IndexesOf(Car_prices, except: Car_types) &amp;amp;rarr; [Year]&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Find the maximum in &amp;lt;code&amp;gt;A&amp;lt;/code&amp;gt; over all indexes:&lt;br /&gt;
:&amp;lt;code&amp;gt;[[Max]]( A, ...[[IndexesOf]](A) )&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sum over all indexes of &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt; except &amp;lt;code&amp;gt;J&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;K&amp;lt;/code&amp;gt;:&lt;br /&gt;
:&amp;lt;code&amp;gt;[[Sum]]( x, ...[[IndexesOf]](x, except: J,K) )&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
* The «except» parameter was introduced in [[Analytica 5.2]].&lt;br /&gt;
&lt;br /&gt;
== See Also == &lt;br /&gt;
* [[Handle]]&lt;br /&gt;
* [[Handle Functions]]&lt;br /&gt;
* [[IndexNames]]: The names of the indexes of a variable&lt;br /&gt;
* [[Hasindex]] Tests if a variable has a specified Index.&lt;br /&gt;
* [[Repeated parameter forwarding]]&lt;/div&gt;</summary>
		<author><name>Mhenrion</name></author>
	</entry>
	<entry>
		<id>https://docs.analytica.com/index.php?title=If_you_don%E2%80%99t_read_manuals&amp;diff=63786</id>
		<title>If you don’t read manuals</title>
		<link rel="alternate" type="text/html" href="https://docs.analytica.com/index.php?title=If_you_don%E2%80%99t_read_manuals&amp;diff=63786"/>
		<updated>2026-03-18T00:36:36Z</updated>

		<summary type="html">&lt;p&gt;Mhenrion: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Analytica User Guide]]&lt;br /&gt;
&amp;lt;breadcrumbs&amp;gt;Analytica User Guide &amp;gt; Introduction: About Analytica &amp;gt; {{PAGENAME}}&amp;lt;/breadcrumbs&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Experienced modelers find most Analytica features intuitive. But, it’s helpful to get a good grasp of&lt;br /&gt;
some key concepts so you can get up to speed rapidly. Here are a few chapters that you might&lt;br /&gt;
find especially helpful to review.&lt;br /&gt;
&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Chapter&lt;br /&gt;
!Contents&lt;br /&gt;
|-&lt;br /&gt;
| [[Building Effective Models]]&lt;br /&gt;
|Guidelines distilled from the experience of master modelers. It offers practical suggestions for building models that are clear, reliable, and focus on what really matters — the decisions, objectives, and key uncertainties. These tips are not specific to Analytica, but we designed Analytica to make them especially easy to follow.&lt;br /&gt;
|-&lt;br /&gt;
| [[Creating Lucid Influence Diagrams|Creating Lucid Diagrams]]&lt;br /&gt;
|Tips on how to avoid producing incomprehensible spaghetti -- and create influence diagrams that are truly lucid and even elegant.&lt;br /&gt;
|-&lt;br /&gt;
|[[Arrays and Indexes]]&lt;br /&gt;
|We especially recommend this section for people who don't read manuals, including -- perhaps especially -- experienced modelers!  Once you grasp the essentials of Analytica’s Intelligent Arrays™, you'll find that you can build complex multidimensional models with surprising ease. But you might find they take a little getting used to, particularly if you have spent a lot of time with spreadsheets or programming with arrays.&lt;br /&gt;
|-&lt;br /&gt;
|[[Expressing Uncertainty]]&lt;br /&gt;
|How to select appropriate probability distributions to express uncertainties. It also provides an overview of how Analytica computes probability distributions using Monte Carlo and other random sampling methods, and your options for displaying probabilistic values.&lt;br /&gt;
|-&lt;br /&gt;
|[[Procedural Programming]]&lt;br /&gt;
|Analytica is a &amp;quot;declarative&amp;quot; language, enabling you to create large and sophisticated models without conventional procedural programming. But, sometimes you really want to write complex procedural functions. If so, read this chapter to understand Analytica as a programming language.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
* [[Analytica Tutorial]]&lt;br /&gt;
* [[Creating Lucid Influence Diagrams]]&lt;br /&gt;
* [[Building Effective Models]]&lt;br /&gt;
* [[Arrays and Indexes]]&lt;br /&gt;
* [[Expressing Uncertainty]]&lt;br /&gt;
* [[Procedural Programming]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;footer&amp;gt;Welcome! / {{PAGENAME}} /Hardware and software requirements&amp;lt;/footer&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mhenrion</name></author>
	</entry>
	<entry>
		<id>https://docs.analytica.com/index.php?title=MediaWiki:Hierarchy&amp;diff=63785</id>
		<title>MediaWiki:Hierarchy</title>
		<link rel="alternate" type="text/html" href="https://docs.analytica.com/index.php?title=MediaWiki:Hierarchy&amp;diff=63785"/>
		<updated>2026-03-18T00:34:31Z</updated>

		<summary type="html">&lt;p&gt;Mhenrion: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* Getting started&lt;br /&gt;
** [[Analytica_Tutorial|Tutorial]]&lt;br /&gt;
*** [[About Analytica]]&lt;br /&gt;
*** [[Tutorial: Open a model to browse|Opening A Model]]&lt;br /&gt;
*** [[Tutorial: Reviewing a model|Reviewing a model]]&lt;br /&gt;
*** [[Tutorial: Create a model|Create a Model]]&lt;br /&gt;
*** [[Tutorial: Arrays|Arrays]]&lt;br /&gt;
***[[Tutorial: Analyzing a model|Uncertainty]]&lt;br /&gt;
***[[Tutorial: Sharing a model with ACP| Sharing a model with ACP]]&lt;br /&gt;
***[[Tutorial: Decision trees|Decision tree]]&lt;br /&gt;
***[[Tutorial: Dynamic system model| Dynamic system model]]&lt;br /&gt;
***[[Example Models and Libraries]]&lt;br /&gt;
***[[Tutorial videos]]&lt;br /&gt;
**[[If you don’t read manuals]]&lt;br /&gt;
** [[Excel and Analytica]]&lt;br /&gt;
** [[Edit and improve these docs]]&lt;br /&gt;
** [[Open these docs from Analytica]]&lt;br /&gt;
* Quick links&lt;br /&gt;
** [[Example Models]]&lt;br /&gt;
** [[Tutorial videos|Videos]]&lt;br /&gt;
** [[Keyboard Shortcuts]]&lt;br /&gt;
** [[Functions by category]]&lt;br /&gt;
** [[Alphabetical Function List]]&lt;br /&gt;
** [[Modelling Guide]]&lt;br /&gt;
** [[Standard libraries]]&lt;br /&gt;
** [[Additional libraries]]&lt;br /&gt;
** [[:Category:Concepts|Key concepts]]&lt;br /&gt;
** [[Techniques and technologies]]&lt;br /&gt;
&lt;br /&gt;
* [[Analytica_User_Guide|User Guide]]&lt;br /&gt;
** [[Contents of User Guide|Contents in detail]]&lt;br /&gt;
** Basics&lt;br /&gt;
*** [[Introduction: About Analytica|Introduction]]&lt;br /&gt;
****  [[If you don’t read manuals]]&lt;br /&gt;
****  [[Hardware and software requirements]]&lt;br /&gt;
****  [[Installation and licenses]]&lt;br /&gt;
****  [[Editions of Analytica]]&lt;br /&gt;
***  [[Help menu and  documentation]]&lt;br /&gt;
****  [[Normally, usually, and defaults]]&lt;br /&gt;
****  [[Typographic conventions in this guide]]&lt;br /&gt;
**** [[User guide Examples folder]]&lt;br /&gt;
**** [[New Releases|What’s new?]]&lt;br /&gt;
*** [[Menus]]&lt;br /&gt;
**** [[File menu]]&lt;br /&gt;
****  [[Edit menu]]&lt;br /&gt;
****  [[Object menu]]&lt;br /&gt;
****  [[Definition menu (more)|Definition menu]]&lt;br /&gt;
****  [[Result menu]]&lt;br /&gt;
****  [[Diagram menu]]&lt;br /&gt;
****  [[Window menu]]&lt;br /&gt;
****  [[Help menu]]&lt;br /&gt;
****  [[Right mouse button menus]]&lt;br /&gt;
*** [[Windows and dialogs]]&lt;br /&gt;
****  [[Object window]]&lt;br /&gt;
****  [[Result window]]&lt;br /&gt;
****  [[Diagram window]]&lt;br /&gt;
****  [[Outline window]]&lt;br /&gt;
****  [[Object Finder dialog]]&lt;br /&gt;
****  [[Diagram Style dialog]]&lt;br /&gt;
****  [[Node Style dialog]]&lt;br /&gt;
****  [[Number Format Dialog]]&lt;br /&gt;
****  [[Graph setup dialog]]&lt;br /&gt;
****  [[Uncertainty Setup dialog]]&lt;br /&gt;
****  [[Preferences dialog]]&lt;br /&gt;
**** [[Attributes dialog]]&lt;br /&gt;
*** [[Examining a Model]]&lt;br /&gt;
****  [[To open or exit a model]]&lt;br /&gt;
****  [[Diagram window]]&lt;br /&gt;
****  [[Classes of variables and other objects]]&lt;br /&gt;
****  [[Selecting nodes]]&lt;br /&gt;
****  [[Toolbar]]&lt;br /&gt;
****  [[User input nodes and user output nodes]]&lt;br /&gt;
****  [[Object window]] &lt;br /&gt;
****  [[Attribute panel]]&lt;br /&gt;
****  [[Values in Object Window]]&lt;br /&gt;
****  [[Printing]]&lt;br /&gt;
***  [[Result Tables and Graphs]]&lt;br /&gt;
****  [[Result window]]&lt;br /&gt;
****  [[Table view of a result]]&lt;br /&gt;
****  [[Graph view of a result]]&lt;br /&gt;
****  [[Uncertainty view of a result]]&lt;br /&gt;
****  [[Comparing results]]&lt;br /&gt;
***  [[Parametric analysis]]&lt;br /&gt;
*** [[Create and edit a model]]&lt;br /&gt;
****  [[Create and save a model]]&lt;br /&gt;
****  [[Create and edit nodes]]&lt;br /&gt;
****  [[Draw arrows]]&lt;br /&gt;
****  [[Draw arrows between modules]]&lt;br /&gt;
****  [[Alias nodes]]&lt;br /&gt;
****  [[To edit an attribute]]&lt;br /&gt;
****  [[Change class of an object]]&lt;br /&gt;
****  [[Preferences dialog]]&lt;br /&gt;
*** [[Building Effective Models]]&lt;br /&gt;
**** [[Create a model]]&lt;br /&gt;
**** [[Test and debug your model]]&lt;br /&gt;
**** [[Expand your model]]&lt;br /&gt;
*** [[Creating Lucid Influence Diagrams|Lucid influence diagrams]]&lt;br /&gt;
**** [[About influence diagrams]]&lt;br /&gt;
**** [[Guidelines for creating lucid models]]&lt;br /&gt;
**** [[Arranging nodes to make clear diagrams]]&lt;br /&gt;
**** [[Organizing a module hierarchy]]&lt;br /&gt;
**** [[Color in influence diagrams]]&lt;br /&gt;
**** [[Diagram Style dialog]]&lt;br /&gt;
**** [[Node Style dialog]]&lt;br /&gt;
**** [[Taking screenshots of diagrams|Screenshots of a diagram]]&lt;br /&gt;
*** [[Number and table formats]]&lt;br /&gt;
**** [[Number formats]]&lt;br /&gt;
**** [[Date formats]]&lt;br /&gt;
**** [[Display of constraint results|Display constraint results]]&lt;br /&gt;
**** [[Multiple formats in one table]]&lt;br /&gt;
***[[Graphs]]&lt;br /&gt;
**** [[Graphing roles]]&lt;br /&gt;
**** [[Graph setup dialog]]&lt;br /&gt;
**** [[Changing Series Colors]]&lt;br /&gt;
**** [[Graph templates]]&lt;br /&gt;
**** [[XY Comparison]]&lt;br /&gt;
** Definitions and expressions&lt;br /&gt;
*** [[Definitions]]&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;
***  [[Expressions]]&lt;br /&gt;
****  [[Numbers]]&lt;br /&gt;
**** [[Date and Time Values]]&lt;br /&gt;
**** [[Boolean or truth values]]&lt;br /&gt;
****  [[Text values]]&lt;br /&gt;
**** [[Operators]]&lt;br /&gt;
****  [[IF a THEN b ELSE c]]&lt;br /&gt;
****  [[Function calls and parameters]]&lt;br /&gt;
****  [[Math functions]]&lt;br /&gt;
****  [[Numbers and text]]&lt;br /&gt;
****  [[INF, NAN, and NULL - Exception values]]&lt;br /&gt;
****  [[Warnings]]&lt;br /&gt;
****  [[Datatype functions]]&lt;br /&gt;
*** [[Text, Date, Math, and Financial Functions]]&lt;br /&gt;
**** [[Text functions]]&lt;br /&gt;
**** [[Date functions]]&lt;br /&gt;
**** [[Advanced math functions]]&lt;br /&gt;
**** [[Complex number functions]]&lt;br /&gt;
**** [[Financial functions]]&lt;br /&gt;
**** [[Financial library functions]]&lt;br /&gt;
*** [[Dynamic Simulation]]&lt;br /&gt;
**** [[Time index]]&lt;br /&gt;
**** [[Dynamic function]]&lt;br /&gt;
**** [[Time index details]]&lt;br /&gt;
**** [[Dynamic initial values]]&lt;br /&gt;
**** [[Dynamic using arrays]]&lt;br /&gt;
**** [[Dynamic dependencies]]&lt;br /&gt;
**** [[Dynamic and uncertainty]]&lt;br /&gt;
**** [[Dynamic on non-Time Indexes]]&lt;br /&gt;
**** [[Reverse Dynamic]]&lt;br /&gt;
** Arrays and Indexes&lt;br /&gt;
*** [[Intelligent Arrays]]&lt;br /&gt;
*** [[Indexes and arrays: An introduction]]&lt;br /&gt;
*** [[Arrays and Indexes]]&lt;br /&gt;
**** [[IF a THEN b ELSE c with arrays]]&lt;br /&gt;
**** [[Creating an index]]&lt;br /&gt;
**** [[Functions that create indexes]]&lt;br /&gt;
**** [[To make an edit table]]&lt;br /&gt;
**** [[To edit a table]]&lt;br /&gt;
**** [[Splice a table when computed indexes change]]&lt;br /&gt;
**** [[Subscript and slice of a subarray]]&lt;br /&gt;
**** [[Choice menus and Checkboxes in an edit table]]&lt;br /&gt;
**** [[Shortcuts to navigate and edit a table]]&lt;br /&gt;
*** [[Array functions]] &lt;br /&gt;
**** [[Array Function Example Variables]]&lt;br /&gt;
**** [[Functions that create arrays]]&lt;br /&gt;
**** [[Array-reducing functions]]&lt;br /&gt;
**** [[Transforming functions]]&lt;br /&gt;
**** [[Relational tables and multiD arrays]]&lt;br /&gt;
**** [[Interpolation functions]]&lt;br /&gt;
**** [[Fourier Transform]]&lt;br /&gt;
**** [[Sets - collections of unique elements]]&lt;br /&gt;
**** [[Other array functions]]&lt;br /&gt;
**** [[DetermTable: Deterministic tables]]&lt;br /&gt;
**** [[Subtable: Editable part of an array]]&lt;br /&gt;
**** [[MultiTable: Combining editable and computed arrays]]&lt;br /&gt;
**** [[Matrix functions]]&lt;br /&gt;
** Uncertainty and statistics&lt;br /&gt;
*** [[Expressing Uncertainty]]&lt;br /&gt;
**** [[Uncertainty Setup dialog]]&lt;br /&gt;
**** [[Uncertainty views]]&lt;br /&gt;
**** [[Selecting the Sample Size]]&lt;br /&gt;
**** [[Choosing an appropriate distribution ]]&lt;br /&gt;
**** [[Defining a variable as a distribution]] &lt;br /&gt;
**** [[Including a distribution in a definition]] &lt;br /&gt;
**** [[Probabilistic calculation]]&lt;br /&gt;
**** [[Monte Carlo and probabilistic simulation]]&lt;br /&gt;
*** [[Probability distributions]]&lt;br /&gt;
**** [[Parametric discrete distributions]]&lt;br /&gt;
**** [[Probability density and mass graphs]]&lt;br /&gt;
**** [[The domain attribute and discrete variables]]&lt;br /&gt;
**** [[Custom discrete probabilities]]&lt;br /&gt;
**** [[Parametric continuous distributions]]&lt;br /&gt;
**** [[Custom continuous distributions]]&lt;br /&gt;
**** [[Special probabilistic functions]]&lt;br /&gt;
**** [[Advanced probability functions]]&lt;br /&gt;
**** [[Multivariate distributions]]&lt;br /&gt;
**** [[Importance weights]]&lt;br /&gt;
*** [[Statistics, Sensitivity, and Uncertainty Analysis]]&lt;br /&gt;
**** [[Statistical functions]]&lt;br /&gt;
**** [[Weighted statistics and w parameter]]&lt;br /&gt;
**** [[Importance analysis]]&lt;br /&gt;
**** [[Sensitivity analysis functions]]&lt;br /&gt;
**** [[Tornado charts]]&lt;br /&gt;
**** [[X-Y plots]]&lt;br /&gt;
**** [[Scatter plots]]&lt;br /&gt;
**** [[Regression analysis]]&lt;br /&gt;
**** [[Uncertainty in regression results]]&lt;br /&gt;
**** [[Logistic regression functions]]&lt;br /&gt;
**** [[Stochastic Information Packets (SIPs)]]&lt;br /&gt;
** [[User interfaces]]&lt;br /&gt;
*** [[Creating Interfaces for End Users|User interfaces]]&lt;br /&gt;
**** [[User Input nodes]]&lt;br /&gt;
**** [[Choice menu user input]]&lt;br /&gt;
**** [[Checkbox user input]]&lt;br /&gt;
**** [[User output nodes]]&lt;br /&gt;
**** [[User inputs and outputs as aliases]]&lt;br /&gt;
**** [[Onchange attribute]]&lt;br /&gt;
**** [[Button creation]]&lt;br /&gt;
**** [[Form modules]]&lt;br /&gt;
**** [[Icon images in a node]]&lt;br /&gt;
**** [[Graphics, frames, and text in a diagram]]&lt;br /&gt;
**** [[Links or URL in model attributes]]&lt;br /&gt;
**** [[Analytica Free Edition]]&lt;br /&gt;
*** [[Analytica Cloud Player (ACP)]]&lt;br /&gt;
** Advanced features&lt;br /&gt;
*** [[Integration with data and applications]]&lt;br /&gt;
**** [[Read and write text files]]&lt;br /&gt;
**** [[Read data from URL on internet]]&lt;br /&gt;
**** [[Copy and Paste between applications]]&lt;br /&gt;
**** [[Import and Export data]]&lt;br /&gt;
**** [[Model file formats]]&lt;br /&gt;
**** [[OLE linking]]&lt;br /&gt;
**** [[Database access]]&lt;br /&gt;
**** [[Database functions]]&lt;br /&gt;
**** [[Excel spreadsheets read and write]]&lt;br /&gt;
**** [[RunConsoleProcess - call other applications]]&lt;br /&gt;
**** [[COM Automation Objects]]&lt;br /&gt;
*** [[Working with Large Models]]&lt;br /&gt;
**** [[Module hierarchy]]&lt;br /&gt;
**** [[Outline window]]&lt;br /&gt;
**** [[Find variables and other objects]]&lt;br /&gt;
**** [[Manage attributes]]&lt;br /&gt;
**** [[Invalid variables]]&lt;br /&gt;
**** [[Filed modules and libraries]]&lt;br /&gt;
**** [[Import a module or library]]&lt;br /&gt;
**** [[Combining models into an integrated model]]&lt;br /&gt;
**** [[Making a browse-only model and hiding definitions]]&lt;br /&gt;
**** [[Managing windows]]&lt;br /&gt;
**** [[Memory usage and management]]&lt;br /&gt;
**** [[Performance Profiler library]]&lt;br /&gt;
**** [[Analytica Enterprise]]&lt;br /&gt;
*** [[User-defined Functions and Libraries]]&lt;br /&gt;
**** [[Example function]]&lt;br /&gt;
**** [[Call a function]]&lt;br /&gt;
**** [[Define a function]]&lt;br /&gt;
**** [[Attributes of a function]]&lt;br /&gt;
**** [[Parameter qualifiers]]&lt;br /&gt;
**** [[User Libraries]]&lt;br /&gt;
*** [[Procedural Programming]]&lt;br /&gt;
**** [[Procedural Programming Example]]&lt;br /&gt;
**** [[Summary of Programming Constructs]]&lt;br /&gt;
**** [[Begin-End for Grouping Expressions]]&lt;br /&gt;
**** [[Local Values]]&lt;br /&gt;
**** [[For and While Loops]]&lt;br /&gt;
**** [[Recursion]]&lt;br /&gt;
**** [[Local Indexes]]&lt;br /&gt;
**** [[Ensuring Array Abstraction]]&lt;br /&gt;
**** [[References and Data Structures]]&lt;br /&gt;
**** [[Handles to Objects]]&lt;br /&gt;
**** [[Dialog Functions]]&lt;br /&gt;
**** [[Other Procedural Functions]]&lt;br /&gt;
** [[Reference sections]]&lt;br /&gt;
*** [[Analytica Specifications]]&lt;br /&gt;
*** [[Identifiers Already Used]]&lt;br /&gt;
*** [[Error Message Types]]&lt;br /&gt;
*** [[Forward and Backward Compatibility]]&lt;br /&gt;
*** [[Bibliography]]&lt;br /&gt;
* [[Analytica Optimizer Guide|Analytica Optimizer]]&lt;br /&gt;
** [[Introduction to Optimizer]]&lt;br /&gt;
** [[Optimizer Quick Start]]&lt;br /&gt;
** [[Optimization Characteristics]]&lt;br /&gt;
** [[Optimizing with Arrays]]&lt;br /&gt;
** [[Optimizer key concepts: Airline Example]]&lt;br /&gt;
** [[Optimizer Attributes]]&lt;br /&gt;
** [[Primary Optimization Functions]]&lt;br /&gt;
** [[Optimization Status Functions]]&lt;br /&gt;
** [[Optimizer control settings]]&lt;br /&gt;
* [[ADE User Guide|Analytica Decision Engine]]&lt;br /&gt;
** [[Introduction to ADE]]&lt;br /&gt;
** [[Installation of ADE]]&lt;br /&gt;
** [[The ADE Tutorial]]&lt;br /&gt;
** [[Using the ADE Server]]&lt;br /&gt;
** [[Working with Models, Modules, and Files in ADE]]&lt;br /&gt;
** [[ADE Server Class Reference]]&lt;br /&gt;
* [[Analytica Cloud Platform|ACP]]&lt;br /&gt;
** [[What's new in ACP?]]&lt;br /&gt;
* User Community&lt;br /&gt;
** [https://lumina.com/community/ Analytica User Forum]&lt;br /&gt;
** [http://blog.lumina.com/blog Lumina Blog]&lt;br /&gt;
** [https://analytica.com/publications-using-analytica/ Publications using Analytica]&lt;/div&gt;</summary>
		<author><name>Mhenrion</name></author>
	</entry>
	<entry>
		<id>https://docs.analytica.com/index.php?title=MediaWiki:Hierarchy&amp;diff=63784</id>
		<title>MediaWiki:Hierarchy</title>
		<link rel="alternate" type="text/html" href="https://docs.analytica.com/index.php?title=MediaWiki:Hierarchy&amp;diff=63784"/>
		<updated>2026-03-18T00:32:19Z</updated>

		<summary type="html">&lt;p&gt;Mhenrion: Moved the Tutorial (and its chapters) into the first thing under Getting started.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* Getting started&lt;br /&gt;
** [[Analytica_Tutorial|Tutorial]]&lt;br /&gt;
*** [[About Analytica]]&lt;br /&gt;
*** [[Tutorial: Open a model to browse|Opening A Model]]&lt;br /&gt;
*** [[Tutorial: Reviewing a model|Reviewing a model]]&lt;br /&gt;
*** [[Tutorial: Create a model|Create a Model]]&lt;br /&gt;
*** [[Tutorial: Arrays|Arrays]]&lt;br /&gt;
***[[Tutorial: Analyzing a model|Uncertainty]]&lt;br /&gt;
***[[Tutorial: Sharing a model with ACP| Sharing a model with ACP]]&lt;br /&gt;
***[[Tutorial: Decision trees|Decision tree]]&lt;br /&gt;
***[[Tutorial: Dynamic system model| Dynamic system model]]&lt;br /&gt;
***[[Example Models and Libraries]]&lt;br /&gt;
***[[Tutorial videos]]&lt;br /&gt;
** [[Excel and Analytica]]&lt;br /&gt;
** [[Edit and improve these docs]]&lt;br /&gt;
** [[Open these docs from Analytica]]&lt;br /&gt;
* Quick links&lt;br /&gt;
** [[Example Models]]&lt;br /&gt;
** [[Tutorial videos|Videos]]&lt;br /&gt;
** [[Keyboard Shortcuts]]&lt;br /&gt;
** [[Functions by category]]&lt;br /&gt;
** [[Alphabetical Function List]]&lt;br /&gt;
** [[Modelling Guide]]&lt;br /&gt;
** [[Standard libraries]]&lt;br /&gt;
** [[Additional libraries]]&lt;br /&gt;
** [[:Category:Concepts|Key concepts]]&lt;br /&gt;
** [[Techniques and technologies]]&lt;br /&gt;
&lt;br /&gt;
* [[Analytica_User_Guide|User Guide]]&lt;br /&gt;
** [[Contents of User Guide|Contents in detail]]&lt;br /&gt;
** Basics&lt;br /&gt;
*** [[Introduction: About Analytica|Introduction]]&lt;br /&gt;
****  [[If you don’t read manuals]]&lt;br /&gt;
****  [[Hardware and software requirements]]&lt;br /&gt;
****  [[Installation and licenses]]&lt;br /&gt;
****  [[Editions of Analytica]]&lt;br /&gt;
***  [[Help menu and  documentation]]&lt;br /&gt;
****  [[Normally, usually, and defaults]]&lt;br /&gt;
****  [[Typographic conventions in this guide]]&lt;br /&gt;
**** [[User guide Examples folder]]&lt;br /&gt;
**** [[New Releases|What’s new?]]&lt;br /&gt;
*** [[Menus]]&lt;br /&gt;
**** [[File menu]]&lt;br /&gt;
****  [[Edit menu]]&lt;br /&gt;
****  [[Object menu]]&lt;br /&gt;
****  [[Definition menu (more)|Definition menu]]&lt;br /&gt;
****  [[Result menu]]&lt;br /&gt;
****  [[Diagram menu]]&lt;br /&gt;
****  [[Window menu]]&lt;br /&gt;
****  [[Help menu]]&lt;br /&gt;
****  [[Right mouse button menus]]&lt;br /&gt;
*** [[Windows and dialogs]]&lt;br /&gt;
****  [[Object window]]&lt;br /&gt;
****  [[Result window]]&lt;br /&gt;
****  [[Diagram window]]&lt;br /&gt;
****  [[Outline window]]&lt;br /&gt;
****  [[Object Finder dialog]]&lt;br /&gt;
****  [[Diagram Style dialog]]&lt;br /&gt;
****  [[Node Style dialog]]&lt;br /&gt;
****  [[Number Format Dialog]]&lt;br /&gt;
****  [[Graph setup dialog]]&lt;br /&gt;
****  [[Uncertainty Setup dialog]]&lt;br /&gt;
****  [[Preferences dialog]]&lt;br /&gt;
**** [[Attributes dialog]]&lt;br /&gt;
*** [[Examining a Model]]&lt;br /&gt;
****  [[To open or exit a model]]&lt;br /&gt;
****  [[Diagram window]]&lt;br /&gt;
****  [[Classes of variables and other objects]]&lt;br /&gt;
****  [[Selecting nodes]]&lt;br /&gt;
****  [[Toolbar]]&lt;br /&gt;
****  [[User input nodes and user output nodes]]&lt;br /&gt;
****  [[Object window]] &lt;br /&gt;
****  [[Attribute panel]]&lt;br /&gt;
****  [[Values in Object Window]]&lt;br /&gt;
****  [[Printing]]&lt;br /&gt;
***  [[Result Tables and Graphs]]&lt;br /&gt;
****  [[Result window]]&lt;br /&gt;
****  [[Table view of a result]]&lt;br /&gt;
****  [[Graph view of a result]]&lt;br /&gt;
****  [[Uncertainty view of a result]]&lt;br /&gt;
****  [[Comparing results]]&lt;br /&gt;
***  [[Parametric analysis]]&lt;br /&gt;
*** [[Create and edit a model]]&lt;br /&gt;
****  [[Create and save a model]]&lt;br /&gt;
****  [[Create and edit nodes]]&lt;br /&gt;
****  [[Draw arrows]]&lt;br /&gt;
****  [[Draw arrows between modules]]&lt;br /&gt;
****  [[Alias nodes]]&lt;br /&gt;
****  [[To edit an attribute]]&lt;br /&gt;
****  [[Change class of an object]]&lt;br /&gt;
****  [[Preferences dialog]]&lt;br /&gt;
*** [[Building Effective Models]]&lt;br /&gt;
**** [[Create a model]]&lt;br /&gt;
**** [[Test and debug your model]]&lt;br /&gt;
**** [[Expand your model]]&lt;br /&gt;
*** [[Creating Lucid Influence Diagrams|Lucid influence diagrams]]&lt;br /&gt;
**** [[About influence diagrams]]&lt;br /&gt;
**** [[Guidelines for creating lucid models]]&lt;br /&gt;
**** [[Arranging nodes to make clear diagrams]]&lt;br /&gt;
**** [[Organizing a module hierarchy]]&lt;br /&gt;
**** [[Color in influence diagrams]]&lt;br /&gt;
**** [[Diagram Style dialog]]&lt;br /&gt;
**** [[Node Style dialog]]&lt;br /&gt;
**** [[Taking screenshots of diagrams|Screenshots of a diagram]]&lt;br /&gt;
*** [[Number and table formats]]&lt;br /&gt;
**** [[Number formats]]&lt;br /&gt;
**** [[Date formats]]&lt;br /&gt;
**** [[Display of constraint results|Display constraint results]]&lt;br /&gt;
**** [[Multiple formats in one table]]&lt;br /&gt;
***[[Graphs]]&lt;br /&gt;
**** [[Graphing roles]]&lt;br /&gt;
**** [[Graph setup dialog]]&lt;br /&gt;
**** [[Changing Series Colors]]&lt;br /&gt;
**** [[Graph templates]]&lt;br /&gt;
**** [[XY Comparison]]&lt;br /&gt;
** Definitions and expressions&lt;br /&gt;
*** [[Definitions]]&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;
***  [[Expressions]]&lt;br /&gt;
****  [[Numbers]]&lt;br /&gt;
**** [[Date and Time Values]]&lt;br /&gt;
**** [[Boolean or truth values]]&lt;br /&gt;
****  [[Text values]]&lt;br /&gt;
**** [[Operators]]&lt;br /&gt;
****  [[IF a THEN b ELSE c]]&lt;br /&gt;
****  [[Function calls and parameters]]&lt;br /&gt;
****  [[Math functions]]&lt;br /&gt;
****  [[Numbers and text]]&lt;br /&gt;
****  [[INF, NAN, and NULL - Exception values]]&lt;br /&gt;
****  [[Warnings]]&lt;br /&gt;
****  [[Datatype functions]]&lt;br /&gt;
*** [[Text, Date, Math, and Financial Functions]]&lt;br /&gt;
**** [[Text functions]]&lt;br /&gt;
**** [[Date functions]]&lt;br /&gt;
**** [[Advanced math functions]]&lt;br /&gt;
**** [[Complex number functions]]&lt;br /&gt;
**** [[Financial functions]]&lt;br /&gt;
**** [[Financial library functions]]&lt;br /&gt;
*** [[Dynamic Simulation]]&lt;br /&gt;
**** [[Time index]]&lt;br /&gt;
**** [[Dynamic function]]&lt;br /&gt;
**** [[Time index details]]&lt;br /&gt;
**** [[Dynamic initial values]]&lt;br /&gt;
**** [[Dynamic using arrays]]&lt;br /&gt;
**** [[Dynamic dependencies]]&lt;br /&gt;
**** [[Dynamic and uncertainty]]&lt;br /&gt;
**** [[Dynamic on non-Time Indexes]]&lt;br /&gt;
**** [[Reverse Dynamic]]&lt;br /&gt;
** Arrays and Indexes&lt;br /&gt;
*** [[Intelligent Arrays]]&lt;br /&gt;
*** [[Indexes and arrays: An introduction]]&lt;br /&gt;
*** [[Arrays and Indexes]]&lt;br /&gt;
**** [[IF a THEN b ELSE c with arrays]]&lt;br /&gt;
**** [[Creating an index]]&lt;br /&gt;
**** [[Functions that create indexes]]&lt;br /&gt;
**** [[To make an edit table]]&lt;br /&gt;
**** [[To edit a table]]&lt;br /&gt;
**** [[Splice a table when computed indexes change]]&lt;br /&gt;
**** [[Subscript and slice of a subarray]]&lt;br /&gt;
**** [[Choice menus and Checkboxes in an edit table]]&lt;br /&gt;
**** [[Shortcuts to navigate and edit a table]]&lt;br /&gt;
*** [[Array functions]] &lt;br /&gt;
**** [[Array Function Example Variables]]&lt;br /&gt;
**** [[Functions that create arrays]]&lt;br /&gt;
**** [[Array-reducing functions]]&lt;br /&gt;
**** [[Transforming functions]]&lt;br /&gt;
**** [[Relational tables and multiD arrays]]&lt;br /&gt;
**** [[Interpolation functions]]&lt;br /&gt;
**** [[Fourier Transform]]&lt;br /&gt;
**** [[Sets - collections of unique elements]]&lt;br /&gt;
**** [[Other array functions]]&lt;br /&gt;
**** [[DetermTable: Deterministic tables]]&lt;br /&gt;
**** [[Subtable: Editable part of an array]]&lt;br /&gt;
**** [[MultiTable: Combining editable and computed arrays]]&lt;br /&gt;
**** [[Matrix functions]]&lt;br /&gt;
** Uncertainty and statistics&lt;br /&gt;
*** [[Expressing Uncertainty]]&lt;br /&gt;
**** [[Uncertainty Setup dialog]]&lt;br /&gt;
**** [[Uncertainty views]]&lt;br /&gt;
**** [[Selecting the Sample Size]]&lt;br /&gt;
**** [[Choosing an appropriate distribution ]]&lt;br /&gt;
**** [[Defining a variable as a distribution]] &lt;br /&gt;
**** [[Including a distribution in a definition]] &lt;br /&gt;
**** [[Probabilistic calculation]]&lt;br /&gt;
**** [[Monte Carlo and probabilistic simulation]]&lt;br /&gt;
*** [[Probability distributions]]&lt;br /&gt;
**** [[Parametric discrete distributions]]&lt;br /&gt;
**** [[Probability density and mass graphs]]&lt;br /&gt;
**** [[The domain attribute and discrete variables]]&lt;br /&gt;
**** [[Custom discrete probabilities]]&lt;br /&gt;
**** [[Parametric continuous distributions]]&lt;br /&gt;
**** [[Custom continuous distributions]]&lt;br /&gt;
**** [[Special probabilistic functions]]&lt;br /&gt;
**** [[Advanced probability functions]]&lt;br /&gt;
**** [[Multivariate distributions]]&lt;br /&gt;
**** [[Importance weights]]&lt;br /&gt;
*** [[Statistics, Sensitivity, and Uncertainty Analysis]]&lt;br /&gt;
**** [[Statistical functions]]&lt;br /&gt;
**** [[Weighted statistics and w parameter]]&lt;br /&gt;
**** [[Importance analysis]]&lt;br /&gt;
**** [[Sensitivity analysis functions]]&lt;br /&gt;
**** [[Tornado charts]]&lt;br /&gt;
**** [[X-Y plots]]&lt;br /&gt;
**** [[Scatter plots]]&lt;br /&gt;
**** [[Regression analysis]]&lt;br /&gt;
**** [[Uncertainty in regression results]]&lt;br /&gt;
**** [[Logistic regression functions]]&lt;br /&gt;
**** [[Stochastic Information Packets (SIPs)]]&lt;br /&gt;
** [[User interfaces]]&lt;br /&gt;
*** [[Creating Interfaces for End Users|User interfaces]]&lt;br /&gt;
**** [[User Input nodes]]&lt;br /&gt;
**** [[Choice menu user input]]&lt;br /&gt;
**** [[Checkbox user input]]&lt;br /&gt;
**** [[User output nodes]]&lt;br /&gt;
**** [[User inputs and outputs as aliases]]&lt;br /&gt;
**** [[Onchange attribute]]&lt;br /&gt;
**** [[Button creation]]&lt;br /&gt;
**** [[Form modules]]&lt;br /&gt;
**** [[Icon images in a node]]&lt;br /&gt;
**** [[Graphics, frames, and text in a diagram]]&lt;br /&gt;
**** [[Links or URL in model attributes]]&lt;br /&gt;
**** [[Analytica Free Edition]]&lt;br /&gt;
*** [[Analytica Cloud Player (ACP)]]&lt;br /&gt;
** Advanced features&lt;br /&gt;
*** [[Integration with data and applications]]&lt;br /&gt;
**** [[Read and write text files]]&lt;br /&gt;
**** [[Read data from URL on internet]]&lt;br /&gt;
**** [[Copy and Paste between applications]]&lt;br /&gt;
**** [[Import and Export data]]&lt;br /&gt;
**** [[Model file formats]]&lt;br /&gt;
**** [[OLE linking]]&lt;br /&gt;
**** [[Database access]]&lt;br /&gt;
**** [[Database functions]]&lt;br /&gt;
**** [[Excel spreadsheets read and write]]&lt;br /&gt;
**** [[RunConsoleProcess - call other applications]]&lt;br /&gt;
**** [[COM Automation Objects]]&lt;br /&gt;
*** [[Working with Large Models]]&lt;br /&gt;
**** [[Module hierarchy]]&lt;br /&gt;
**** [[Outline window]]&lt;br /&gt;
**** [[Find variables and other objects]]&lt;br /&gt;
**** [[Manage attributes]]&lt;br /&gt;
**** [[Invalid variables]]&lt;br /&gt;
**** [[Filed modules and libraries]]&lt;br /&gt;
**** [[Import a module or library]]&lt;br /&gt;
**** [[Combining models into an integrated model]]&lt;br /&gt;
**** [[Making a browse-only model and hiding definitions]]&lt;br /&gt;
**** [[Managing windows]]&lt;br /&gt;
**** [[Memory usage and management]]&lt;br /&gt;
**** [[Performance Profiler library]]&lt;br /&gt;
**** [[Analytica Enterprise]]&lt;br /&gt;
*** [[User-defined Functions and Libraries]]&lt;br /&gt;
**** [[Example function]]&lt;br /&gt;
**** [[Call a function]]&lt;br /&gt;
**** [[Define a function]]&lt;br /&gt;
**** [[Attributes of a function]]&lt;br /&gt;
**** [[Parameter qualifiers]]&lt;br /&gt;
**** [[User Libraries]]&lt;br /&gt;
*** [[Procedural Programming]]&lt;br /&gt;
**** [[Procedural Programming Example]]&lt;br /&gt;
**** [[Summary of Programming Constructs]]&lt;br /&gt;
**** [[Begin-End for Grouping Expressions]]&lt;br /&gt;
**** [[Local Values]]&lt;br /&gt;
**** [[For and While Loops]]&lt;br /&gt;
**** [[Recursion]]&lt;br /&gt;
**** [[Local Indexes]]&lt;br /&gt;
**** [[Ensuring Array Abstraction]]&lt;br /&gt;
**** [[References and Data Structures]]&lt;br /&gt;
**** [[Handles to Objects]]&lt;br /&gt;
**** [[Dialog Functions]]&lt;br /&gt;
**** [[Other Procedural Functions]]&lt;br /&gt;
** [[Reference sections]]&lt;br /&gt;
*** [[Analytica Specifications]]&lt;br /&gt;
*** [[Identifiers Already Used]]&lt;br /&gt;
*** [[Error Message Types]]&lt;br /&gt;
*** [[Forward and Backward Compatibility]]&lt;br /&gt;
*** [[Bibliography]]&lt;br /&gt;
* [[Analytica Optimizer Guide|Analytica Optimizer]]&lt;br /&gt;
** [[Introduction to Optimizer]]&lt;br /&gt;
** [[Optimizer Quick Start]]&lt;br /&gt;
** [[Optimization Characteristics]]&lt;br /&gt;
** [[Optimizing with Arrays]]&lt;br /&gt;
** [[Optimizer key concepts: Airline Example]]&lt;br /&gt;
** [[Optimizer Attributes]]&lt;br /&gt;
** [[Primary Optimization Functions]]&lt;br /&gt;
** [[Optimization Status Functions]]&lt;br /&gt;
** [[Optimizer control settings]]&lt;br /&gt;
* [[ADE User Guide|Analytica Decision Engine]]&lt;br /&gt;
** [[Introduction to ADE]]&lt;br /&gt;
** [[Installation of ADE]]&lt;br /&gt;
** [[The ADE Tutorial]]&lt;br /&gt;
** [[Using the ADE Server]]&lt;br /&gt;
** [[Working with Models, Modules, and Files in ADE]]&lt;br /&gt;
** [[ADE Server Class Reference]]&lt;br /&gt;
* [[Analytica Cloud Platform|ACP]]&lt;br /&gt;
** [[What's new in ACP?]]&lt;br /&gt;
* User Community&lt;br /&gt;
** [https://lumina.com/community/ Analytica User Forum]&lt;br /&gt;
** [http://blog.lumina.com/blog Lumina Blog]&lt;br /&gt;
** [https://analytica.com/publications-using-analytica/ Publications using Analytica]&lt;/div&gt;</summary>
		<author><name>Mhenrion</name></author>
	</entry>
	<entry>
		<id>https://docs.analytica.com/index.php?title=Document_style_guide&amp;diff=63783</id>
		<title>Document style guide</title>
		<link rel="alternate" type="text/html" href="https://docs.analytica.com/index.php?title=Document_style_guide&amp;diff=63783"/>
		<updated>2026-03-17T17:21:29Z</updated>

		<summary type="html">&lt;p&gt;Mhenrion: /* Table of Contents */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category: Documentation guidelines]]&lt;br /&gt;
&lt;br /&gt;
This style guide is designed to help us write language that is clear and easy to read. It applies to all Analytica and Lumina written material, including Analytica docs, including [[Analytica Tutorial]], [[User Guide]]s, emails, proposals, reports, and even error messages. &lt;br /&gt;
&lt;br /&gt;
Many of these guidelines are fairly standard for technical writers and editors. We've borrowed and adapted liberally from standard style manuals. The main goal is to make the language easy to read by avoiding unecessary words and convoluted grammar. Some guidelines, especially for terminology, is specific to Analytica docs.  &lt;br /&gt;
&lt;br /&gt;
Feel free to edit any wiki pages to make them follow this guide more closely.&lt;br /&gt;
&lt;br /&gt;
For style guidelines for Analytica models see [[Analytica model style guide]].&lt;br /&gt;
&lt;br /&gt;
== Language  ==&lt;br /&gt;
&lt;br /&gt;
=== Use imperative, active voice, and present tense ===&lt;br /&gt;
&lt;br /&gt;
Use the '''imperative''' -- directly telling the reader what to do -- when suggesting or explaining what to do (as we do here), because it concise and direct -- for example:&lt;br /&gt;
* Select '''Graph setup''' from the '''Result''' menu&lt;br /&gt;
* '''''Not:''''' The user should select select '''Graph setup''' from the '''Result''' menu. &lt;br /&gt;
* '''''And Definitely not:''''' The '''Graph setup''' should be selected from the '''Result''' menu.&lt;br /&gt;
&lt;br /&gt;
Imperative is especially useful for a series of steps for you (the &amp;quot;user&amp;quot;) to perform. Number the steps only when you must perform them in that sequence:&lt;br /&gt;
#Select '''Graph setup...''' from the '''Result''' menu&lt;br /&gt;
#Check '''Stacked''' option&lt;br /&gt;
#Click '''OK'''&lt;br /&gt;
&lt;br /&gt;
The imperative is technically a form of &amp;quot;active voice&amp;quot;, where &amp;quot;you&amp;quot; (the reader or software user) is the implied subject. Sometimes it is helpful to make the subject -- i.e.&amp;quot;you&amp;quot; explicit -- for example:&lt;br /&gt;
* You should avoid the passive voice.  &lt;br /&gt;
* '''Not:''' The passive voice should always be avoided &lt;br /&gt;
* When you press ''ctrl+F'', it opens the '''Find''' dialog.  &lt;br /&gt;
* '''Not:''' When the user presses ''ctrl+F'', the '''Find''' dialog is displayed.&lt;br /&gt;
&lt;br /&gt;
Use '''present not future''' tense for what Analytica does: &lt;br /&gt;
* Press ''ctrl+F'' and it opens the '''Find''' dialog.&lt;br /&gt;
* '''Not''': When you press ''ctrl+F'', it ''will'' display the '''Find''' dialog.&lt;br /&gt;
* '''Better''': Press ''ctrl+F'' to open the '''Find''' dialog.&lt;br /&gt;
&lt;br /&gt;
=== You, we, it, and Analytica ===&lt;br /&gt;
&lt;br /&gt;
As you saw above, we use &amp;quot;you&amp;quot; to refer to the reader or software user, and &amp;quot;we&amp;quot; or &amp;quot;us&amp;quot; to refer to the writer or Lumina:&lt;br /&gt;
* You can use Function F to ..., &lt;br /&gt;
* '''''Not:''''' Function F can be utilized to ...&lt;br /&gt;
* We invite you to email us your comments&lt;br /&gt;
* '''''Not:''''' The reader is invited to email Lumina their comments.&lt;br /&gt;
&lt;br /&gt;
If the recipient would otherwise be ambiguous, write for example: &lt;br /&gt;
* Email Lumina your comments. &lt;br /&gt;
&lt;br /&gt;
When the subject isn't &amp;quot;you&amp;quot;, it's often &amp;quot;Analytica&amp;quot;. Since this documentation is about Analytica, it's fine to refer to Analytica as &amp;quot;it&amp;quot; (she doesn't mind):&lt;br /&gt;
* When you click the button, it shows the dialog box.&lt;br /&gt;
* '''''Not:''''' When the user clicks the button, Analytica will display the dialog box.&lt;br /&gt;
* '''''Definitely not:''''' When the button is clicked, the dialog box is displayed.&lt;br /&gt;
&lt;br /&gt;
It's occasionally useful to mention &amp;quot;Analytica&amp;quot; explicitly to emphasize a special Analytica way of doing things to contrast it to other languages and software:&lt;br /&gt;
* Analytica uses name-based subscripting, instead of position-based subscripting, which is standard in most computer languages.&lt;br /&gt;
&lt;br /&gt;
=== It's, don't and common contractions ===&lt;br /&gt;
&lt;br /&gt;
It's fine to use common contractions like &amp;quot;it's&amp;quot;, &amp;quot;don't&amp;quot;, &amp;quot;isn't&amp;quot; and so on.  They're a bit faster to read, and convey informality, which is good. We want to avoid academic, government, or corporate-speak.&lt;br /&gt;
&lt;br /&gt;
=== Click, Press, Select ===&lt;br /&gt;
&lt;br /&gt;
* You '''''click''''' a button or link (not ''click on''). &lt;br /&gt;
*You '''''press''''' a menu to see the menu options (the action is to click and hold) &lt;br /&gt;
*You '''''select''''' a menu option. &lt;br /&gt;
*You also '''''select''''' a node or text from a text field. &lt;br /&gt;
*You '''''press''''' (not ''hit ''or ''depress'') a key or key combination on the keyboard.&lt;br /&gt;
&lt;br /&gt;
* Label web links so that users get a reasonable idea of what they will find on the linked page. &lt;br /&gt;
&lt;br /&gt;
* You never need to write &amp;quot;click this link&amp;quot; or &amp;quot;click here&amp;quot;. People know about clicking links! The browser normally shows hyperlinked text in blue and/or underlined to show that it's clickable.&lt;br /&gt;
&lt;br /&gt;
===Common words and concepts===&lt;br /&gt;
&lt;br /&gt;
Use short words instead of longer synonyms: &lt;br /&gt;
* &amp;quot;use&amp;quot; is better than &amp;quot;utilize&amp;quot;&lt;br /&gt;
* &amp;quot;let&amp;quot; is better than &amp;quot;allow ... to&amp;quot;.&lt;br /&gt;
* Use long dash (m-dash) or double-dash around examples or interjections (rather than parentheses) -- for example &amp;quot;Use a reducing function -- e.g. Sum or Min -- rather than a transforming function.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===Also additionally, moreover,and more===&lt;br /&gt;
&lt;br /&gt;
Inexperienced writers often use words like &amp;quot;Also&amp;quot;, &amp;quot;Additionally&amp;quot;, or &amp;quot;Moreover&amp;quot; to start sentences to indicate some link to the preceding sentences. These words are almost always unnecessary and should be deleted. The fact that two sentences come one after the another already implies &amp;quot;Additionally&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Analytica terminology  ==&lt;br /&gt;
&lt;br /&gt;
* Capitalize terms used with a special meaning in Analytica -- such as, Variable, Object, Attribute, or Diagram -- to distinguish them from their common meaning, which is often subtly different. &lt;br /&gt;
* There's no need to capitalize standard computer terms -- like, window, menu, button, mouse, keyboard -- or standard mathematical terms -- like, variable, function, parameter, array -- except when they're being used with a special Analytica take on the meaning, as for example, ''Variable''.&lt;br /&gt;
&lt;br /&gt;
*  Don't use '''''node''''' to mean a ''Variable'' or ''Object''. A '''''node''''' is the visual representation in a Diagram of a ''Variable ''or other Class of  ''Object''. An ''Object&amp;quot; can have multiple nodes -- e.g., the original node and aliases, including input and output nodes. A Variable is just one Class of Object. For views or operations that apply to all classes of Object, use ''Object'' rather than ''Variable''.  But, do use '''''node''''' when you are actually referring to a node in a Diagram that you select, create, find, drag, or deletee (including a input or output node).&lt;br /&gt;
&lt;br /&gt;
* Use '''''Edition''''' of Analytica to mean Player, Professional, {{Developer}}, ADE, ACP, and so on. &lt;br /&gt;
* Use '''''Release''''' as in Release 5.3. &lt;br /&gt;
* Avoid '''''version''''' because it can mean either ''Edition'' or ''Release''.&lt;br /&gt;
&lt;br /&gt;
*'''ADE''' and '''ACP''' are '''''Editions''''' of Analytica, just like Professional and {{Developer}}. So we don't need to say &amp;quot;Analytica and ADE&amp;quot; or &amp;quot;Analytica and ACP&amp;quot; as we have done often in the past. '''''Optimizer''''' is also an Edition, not an extension or option.&lt;br /&gt;
&lt;br /&gt;
* Use &amp;quot;parameter&amp;quot; ''not '' &amp;quot;argument&amp;quot; for the things listed in parentheses in a call to a function (the ''actual'' parameters), or in the  '''Parameters''' attribute of a function (the ''formal'' parameters).&lt;br /&gt;
&lt;br /&gt;
== Lists  ==&lt;br /&gt;
&lt;br /&gt;
*Use a '''''bulleted list''''', like this, wherever appropriate.&lt;br /&gt;
&lt;br /&gt;
*Use a '''''numbered or lettered list''''' only where the items are intrinsically ordered -- e.g. a series of steps that won't work in a different order:&lt;br /&gt;
&lt;br /&gt;
#Do this&lt;br /&gt;
#Next, do this&lt;br /&gt;
#Finish up by doing this&lt;br /&gt;
&lt;br /&gt;
There's no need to introduce a list by saying &amp;quot;the following&amp;quot;. A simple colon followed by a list makes it clear without the extra words:&lt;br /&gt;
* These are options for parameter X: (note the colon) &lt;br /&gt;
* '''''Not:''''' The following are options for parameter X.&lt;br /&gt;
&lt;br /&gt;
* If each item is a single phrase, there's no need for a period or comma at the end.  But, do use a period if there are multiple sentences, as in this list.&lt;br /&gt;
&lt;br /&gt;
* Order items in a list (or sections in a chapter, or parameters of a function when designing a function) from the easiest or most commonly used to the more complicated and esoteric.  That way, readers scanning down the list will:&lt;br /&gt;
** find what they want sooner on average,&lt;br /&gt;
** read the easy stuff first, preparing them to understand the harder stuff that comes later, only if they need to.&lt;br /&gt;
* Alphabetic ordering is usually pointless online:  If you already know the name of the function (or whatever), which you would need for alphabetic search, you can use '''Find''' ctrl+F.&lt;br /&gt;
&lt;br /&gt;
* Avoid making lists with more than about 5 items at the same level. If you have a lot more items, group related items into sublists as a hierarchy. That makes it easier to scan down a list to find what you want.&lt;br /&gt;
&lt;br /&gt;
==Media wiki conventions==&lt;br /&gt;
===Page titles and wiki links===&lt;br /&gt;
&lt;br /&gt;
In Analytica Docs), use Sentence case for page titles. The first word starts with a capital letter. Don't capitalize the other words unless they are proper nouns (such as Analytica):&lt;br /&gt;
* '''Document style guide'''&lt;br /&gt;
* Not:''' Document Style Guide'''&lt;br /&gt;
This is important because Mediawiki (the platform for these Analytica docs) is case-sensitive for internal links.&lt;br /&gt;
&lt;br /&gt;
Use singular nouns, not plural:&lt;br /&gt;
* User-defined attribute&lt;br /&gt;
* '''Not:''' User-defined Attributes&lt;br /&gt;
&lt;br /&gt;
You can add plurals for internal links by added &amp;quot;s&amp;quot; or other letters after an internal link:&lt;br /&gt;
:&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;[[User-defined attribute]]s&amp;lt;/nowiki&amp;gt; are suitable for creating attributes that do not exist. To create a new [[user-defined attribute]], proceed as follows.&amp;lt;/code&amp;gt; &lt;br /&gt;
There's no need to rename all existing pages, but please use the suggested style for new pages or when merging multiple pages of similar content.  &lt;br /&gt;
&lt;br /&gt;
To make wiki markup easier to read and edit, use the standard wiki links to other wiki pages, like:&lt;br /&gt;
 &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;[[User-defined attribute]]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
'''Never use''' full urls in internal links, like: &lt;br /&gt;
 &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;[http://docs.analytica.com/index.php?title=User-defined attribute|User-defined attribute]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Titles of Analytica components, such as names of windows, functions etc ===&lt;br /&gt;
&lt;br /&gt;
Use the same name and capitalization used in the software so that the users will not be confused by different terms.&lt;br /&gt;
&lt;br /&gt;
=== Table of Contents ===&lt;br /&gt;
&lt;br /&gt;
Analytica docs automatically generates a Table of Contents for each page in a panel on the right. &lt;br /&gt;
You can ignore the standard Mediawiki Table of contents code &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;__TOC__&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; .&lt;br /&gt;
&lt;br /&gt;
===Tables===&lt;br /&gt;
Use wikitable format to create a table:&lt;br /&gt;
Precede it by a colon (&amp;lt;code&amp;gt;:&amp;lt;/code&amp;gt;)) to indent the table:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;background:white; border:white&amp;quot;&amp;gt;&lt;br /&gt;
:{| class=wikitable&lt;br /&gt;
! &lt;br /&gt;
! Column 1&lt;br /&gt;
! Column 2&lt;br /&gt;
|-&lt;br /&gt;
! Row 1&lt;br /&gt;
| Cell 11&lt;br /&gt;
| Cell 12&lt;br /&gt;
|- &lt;br /&gt;
! Row 2&lt;br /&gt;
| Cell 21&lt;br /&gt;
| Cell 22&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The code above yields this table:&lt;br /&gt;
&lt;br /&gt;
:{| class=wikitable&lt;br /&gt;
! &lt;br /&gt;
! Column 1&lt;br /&gt;
! Column 2&lt;br /&gt;
|-&lt;br /&gt;
! Row 1&lt;br /&gt;
| Cell 11&lt;br /&gt;
| Cell 12&lt;br /&gt;
|- &lt;br /&gt;
! Row 2&lt;br /&gt;
| Cell 21&lt;br /&gt;
| Cell 22&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
See [[Guide to Converting Documents to MediaWiki]] for more.&lt;br /&gt;
&lt;br /&gt;
==Images==&lt;br /&gt;
Use the wiki Upload file functionality to upload image files.&lt;br /&gt;
&lt;br /&gt;
Indent images by one tab (precede by one colon (&amp;lt;code&amp;gt;:&amp;lt;/code&amp;gt;)), as in:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;pre style=&amp;quot;background:white; border:white&amp;quot;&amp;gt;&lt;br /&gt;
:[[image:ImageFile.png]]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The wiki syntax for images with centered captions on white background is as follows.&lt;br /&gt;
&lt;br /&gt;
One image:&lt;br /&gt;
&amp;lt;pre style=&amp;quot;background:white; border:white&amp;quot;&amp;gt;&lt;br /&gt;
:{|border=0&lt;br /&gt;
|bgcolor=white|[[image:ImageFile.png|frame|&amp;lt;center&amp;gt;Image caption.&amp;lt;/center&amp;gt;]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Two images side-by-side:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;background:white; border:white&amp;quot;&amp;gt;&lt;br /&gt;
:{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
|bgcolor=white|[[image:ImageFileOne.png|frame|&amp;lt;center&amp;gt;Image caption one&amp;lt;/center&amp;gt;]]&lt;br /&gt;
|bgcolor=white|[[image:ImageFileTwo.png|frame|&amp;lt;center&amp;gt;Image caption two&amp;lt;/center&amp;gt;]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or &lt;br /&gt;
&amp;lt;pre style=&amp;quot;background:white; border:white&amp;quot;&amp;gt;&lt;br /&gt;
:{|&lt;br /&gt;
|bgcolor=white|[[File:ImageFileOne.png|thumb|500px|&amp;lt;center&amp;gt;Image caption one&amp;lt;/center&amp;gt;]]&lt;br /&gt;
|bgcolor=white|[[File:ImageFileTwo.png|thumb|500px|&amp;lt;center&amp;gt;Image caption two&amp;lt;/center&amp;gt;]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For sample images created this way,  see [[Kernel Density Smoothing]] and [[Node Alignment, Sizing, and Spacing]].&lt;br /&gt;
&lt;br /&gt;
==Formulas==&lt;br /&gt;
Indent mathematical formulas by one tab (precede by one colon (&amp;lt;code&amp;gt;:&amp;lt;/code&amp;gt;)) and surround by &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&amp;lt;math&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; tags, e.g.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;background:white; border:white;&amp;quot;&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
E=mc^2&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
which results in&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
E=mc^2&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For help with mathematical formulas, see the [http://en.wikipedia.org/wiki/Help:Displaying_a_formula Wikipedia help page].&lt;br /&gt;
&lt;br /&gt;
== Other typographic conventions  ==&lt;br /&gt;
&lt;br /&gt;
:{| cellpadding=&amp;quot;2&amp;quot; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! width=&amp;quot;200pt&amp;quot; | Type of Text &lt;br /&gt;
! width=&amp;quot;300pt&amp;quot; | Typography&lt;br /&gt;
! width=&amp;quot;100pt&amp;quot; | Example&lt;br /&gt;
! width=&amp;quot;300pt&amp;quot; | Wiki Code&lt;br /&gt;
|-&lt;br /&gt;
| Special Analytica term &lt;br /&gt;
| Capitalize and link when used with special Analytica meaning, but not when used in its normal sense.&lt;br /&gt;
| [[Intelligent Arrays]], [[Attributes]]&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;[[Intelligent Arrays]]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Window title, menus, menu item, dialog box title, panel title, and button label &lt;br /&gt;
| '''Bold''' &lt;br /&gt;
| '''File''', '''Attribute Panel'''&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;'''File'''&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Analytica global object identifier or title, including variable or module&lt;br /&gt;
| '''Bold'''&lt;br /&gt;
| for example variable '''X''', '''X'''&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;'''X'''&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Label of a user input such as a checkbox&lt;br /&gt;
| ''Italics'' &lt;br /&gt;
| ''Edit Attributes'' setting for the '''Preferences''' dialog&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;''Edit Attributes''&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Key on a keyboard &lt;br /&gt;
| ''Italics''&lt;br /&gt;
| &amp;quot;Press ''Enter''&amp;quot;; ''control+e'' &lt;br /&gt;
| &amp;lt;nowiki&amp;gt;Press ''Enter''&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Function name &lt;br /&gt;
| Linked (which bolds functions when on their own page) with trailing parens, &amp;quot;()&amp;quot;. No links needed when embedded in code.&lt;br /&gt;
| [[Sequence]]()&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;[[Sequence]]()&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Formal parameter name -- i.e. the declared name of a function parameter distinct from the actual parameter, which is the value or expression passed in a call to a function &lt;br /&gt;
| Use lowercase or &amp;quot;camelCase&amp;quot;; surround by by double angled brackets «a», except when inside formal parameter declaration (within parens after function name). Italicize optional parameters when inside parentheses. Code (courier) font so &amp;lt;code&amp;gt;I&amp;lt;/code&amp;gt; appears distinct from the number 1.&lt;br /&gt;
| &amp;lt;code&amp;gt;[[Sort]](a, I, ''keyIndex'' ); «a», «I», «keyIndex»&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;«a»&amp;lt;/nowiki&amp;gt;''How does one find these characters?''&lt;br /&gt;
&lt;br /&gt;
- Install English (United States) International keyboard&lt;br /&gt;
&lt;br /&gt;
- for « use AltGr (Right-Alt) + [&lt;br /&gt;
&lt;br /&gt;
- for » use AltGr (Right-Alt) + ] &lt;br /&gt;
|-&lt;br /&gt;
| parameter qualifier&lt;br /&gt;
| Capitalize to distinguish from formal parameter names &lt;br /&gt;
| Bool, Text, Number&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;Bool&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Code and script examples, expressions and variable definitions &lt;br /&gt;
| &amp;lt;code&amp;gt;Fixed width font, indented rows&amp;lt;/code&amp;gt; &lt;br /&gt;
| &amp;lt;tt&amp;gt;MDTable(T,Rows,Cols,[Car_type,Mpg],'average','n/a')&amp;lt;/tt&amp;gt;&lt;br /&gt;
| This can be done by&lt;br /&gt;
&lt;br /&gt;
1) using colons (for indentation) and code tags:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;:&amp;lt;code&amp;gt;MDTable(T, Rows, Cols, [Car_type, Mpg], 'average', 'n/a')&amp;lt;/code&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2) using colons and &amp;lt;nowiki&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;/nowiki&amp;gt; tags: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;:&amp;lt;/nowiki&amp;gt;&amp;lt;nowiki&amp;gt;&amp;lt;tt&amp;gt;MDTable(T, Rows, Cols, [Car_type, Mpg], 'average', 'n/a')&amp;lt;/tt&amp;gt;&amp;lt;/nowiki&amp;gt; &lt;br /&gt;
&lt;br /&gt;
3) putting a space at the beginning of the line (the code will be displayed in a gray box): &lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;&amp;amp;nbsp;&amp;lt;/nowiki&amp;gt;MDTable(T, Rows, Cols, [Car_type, Mpg], 'average', 'n/a')&lt;br /&gt;
&lt;br /&gt;
4) surrounding the code by &amp;lt;nowiki&amp;gt;&amp;lt;pre&amp;gt; tags (preferred method with multi-line code):&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;&amp;lt;pre style=&amp;quot;background:white; border:white; margin-left: 1em;&amp;quot;&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
MDTable(T, Rows, Cols, [Car_type, Mpg], 'average', 'n/a')&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Error message examples&lt;br /&gt;
|''&amp;lt;code&amp;gt;Fixed width font in italics, indented rows &amp;lt;/code&amp;gt;''&lt;br /&gt;
|''&amp;lt;code&amp;gt;You cannot evaluate a call to RunConsoleProcess directly from an input variable.&amp;lt;/code&amp;gt;''&lt;br /&gt;
|This can be done by&lt;br /&gt;
&lt;br /&gt;
1) using colons (:) in front of every row for indentation and &amp;lt;nowiki&amp;gt;&amp;lt;code&amp;gt; tags around every row:&amp;lt;/nowiki&amp;gt;&amp;lt;nowiki&amp;gt;:&amp;lt;code&amp;gt;''&amp;lt;/nowiki&amp;gt;You cannot evaluate a call to RunConsoleProcess directly from an input variable.&amp;lt;nowiki&amp;gt;''&amp;lt;/nowiki&amp;gt;&amp;lt;nowiki&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2) using &amp;lt;nowiki&amp;gt;&amp;lt;pre&amp;gt;tags around text (preferred method with multi-line error messages):&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;&amp;lt;pre style=&amp;quot;background:white; border:white; margin-left: 1em; font-style:italic&amp;quot;&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You cannot evaluate a call to RunConsoleProcess directly from an input variable.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Document name &lt;br /&gt;
| ''Italics and Capitalized''&lt;br /&gt;
| ''User Guide'' &lt;br /&gt;
| &amp;lt;nowiki&amp;gt;''User Guide''&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Conventions for explaining functions and their parameters ==&lt;br /&gt;
&lt;br /&gt;
The heading for the section of documentation on a function should contain the name of function and the most common parameters, without qualifiers. Don't include optional parameters unless they are usually used. &lt;br /&gt;
&lt;br /&gt;
* Function definition sections should use a Heading2 paragraph tag for the function title for the section.&lt;br /&gt;
&lt;br /&gt;
In some cases, we include several related functions in one section. We should then include them all in the same heading, e.g. &lt;br /&gt;
&lt;br /&gt;
===   PDF(x) and CDF(x) ===&lt;br /&gt;
&lt;br /&gt;
Conventions: Use the recommended name for each qualifier rather than its deprecated synonyms. Omit &amp;quot;Atom&amp;quot; which is of more interest to the implementer than the user of a function. &lt;br /&gt;
&lt;br /&gt;
Use these conventions for naming parameters that don't have otherwise meaningful names, to indicate what type is expected: &lt;br /&gt;
&lt;br /&gt;
*x, y, z: Numbers that may be scalar or array-valued. &lt;br /&gt;
*I, J, K: Identifiers of Index variables &lt;br /&gt;
*t, t1, t2: Text values (numbers will be coerced to text) &lt;br /&gt;
*a, b, c: An expression that may evaluate to anything: Scalar or array, number or text, NAN, or reference. &lt;br /&gt;
*p, q: A probability, a number between 0 and 1. &lt;br /&gt;
*r: A reference &lt;br /&gt;
*v: Identifier of variable. &lt;br /&gt;
*expr: An expression, which is not evaluated before calling function&lt;br /&gt;
*obj or o: A handle to an an Object (of any Class) &lt;br /&gt;
*attrib: The identifier of an Attribute&lt;br /&gt;
&lt;br /&gt;
Most named parameters in the User Guide that are not meaningful (unlike mean, min, mode) already follow these conventions. If any do not, we should consider changing them so they do. &lt;br /&gt;
&lt;br /&gt;
*Provide a page explaining these conventions, linked to from every function description.&lt;br /&gt;
&lt;br /&gt;
Each function description should have these sections (where appropriate): &lt;br /&gt;
&lt;br /&gt;
*Title of section (usually 3= level) includes name of function and most common parameters. &lt;br /&gt;
*Brief description of at least one simple case use. &lt;br /&gt;
*Example(s) &lt;br /&gt;
*Requirements: Expectations or constraints on parameters. &lt;br /&gt;
*If there are many parameters, list them as a bulleted list, explaining each one&lt;br /&gt;
*More complex examples&lt;br /&gt;
*Syntax: Near bottom using (slightly cleaned) declaration syntax.&lt;br /&gt;
&lt;br /&gt;
In this wiki, each section describing a function should contain a complete spec of its parameters, usually near the end of the section, with a format like this:&amp;lt;br&amp;gt;&amp;amp;nbsp;[[Parameter types]]: MakeDate(year: Coerce Atomic Positive; month, day: Optional Coerce Atomic Positive)&amp;lt;br&amp;gt;Note that the subhead [[Parameter types]] is a link to a page that explains the meaning of the parameter types and qualifiers.&lt;br /&gt;
&lt;br /&gt;
=== Guidelines for Analytica Docs ===&lt;br /&gt;
==== Organizing documents with multiple pages ====&lt;br /&gt;
&lt;br /&gt;
* Organize the pages into a set of &amp;quot;documents&amp;quot;, such as [[Analytica Tutorial|Tutorial]], [[Analytica User Guide|User Guide]], [[Analytica Optimizer Guide|Optimizer Guide]], [[ADE User Guide]], Analytica Reference Guide, Analytica FAQs, Analytica libraries.&lt;br /&gt;
&lt;br /&gt;
* Organize each document or section as a tree hierarchy -- i.e., where each page has a single parent -- although there may, of course, be many cross-references. A tree makes it easier for you to understand the organization, and go through all pages at a given level. It also makes it easier to generate a sequential PDF or printed document if we need to.&lt;br /&gt;
&lt;br /&gt;
* Show ancestor list (a.k.a. &amp;quot;bread crumbs&amp;quot;) at the top of each page -- i.e. a list of links to parent, grandparent etc. For example, page [[SolverInfo]] should show&lt;br /&gt;
[[Analytica Reference Guide]] &amp;gt; [[Enhancements to Optimizer in Analytica 4.0]]&lt;br /&gt;
This helps you see where you are and lets you quickly move up one or more levels.&lt;br /&gt;
&lt;br /&gt;
==== Organizing a page ====&lt;br /&gt;
&lt;br /&gt;
* Keep page names as short as reasonable.&lt;br /&gt;
&lt;br /&gt;
* Show ancestor list (see above)&lt;br /&gt;
&lt;br /&gt;
* Common subheads:&lt;br /&gt;
** Examples&lt;br /&gt;
** Syntax&lt;br /&gt;
** Tips&lt;br /&gt;
** See also&lt;br /&gt;
** History: Summarizes when a new feature was introduced or modified. Move all old links like &amp;quot;New in Release 5.1&amp;quot; when we're up to Release 5.3 to the History section (or just delete them).&lt;br /&gt;
&lt;br /&gt;
** Enhancement requests&lt;br /&gt;
** Documentation requests&lt;br /&gt;
&lt;br /&gt;
====Categories====&lt;br /&gt;
&lt;br /&gt;
The category indexes are a big benefit of MediaWiki. You can specify one or more Categories for each page. The page then automatically appears in the corresponding Category page. For example, for a page on [[MdArrayToTable]] contains the code&lt;br /&gt;
 [[:Category:Array Flattening Functions]]&lt;br /&gt;
No matter where you locate this code, it shows this at the bottom of the page:&lt;br /&gt;
 [[:Category: Array Flattening Functions]]&lt;br /&gt;
And it inserts  [[MdArrayToTable]] in the page [[:Category:Array Flattening Functions]]&lt;br /&gt;
This makes it easy for readers to find all the array-flattening functions.&lt;br /&gt;
&lt;br /&gt;
You can list multiple categories:&lt;br /&gt;
  [[:Category: Array Flattening Functions]], [[:Category: Array Functions]], [[:Category: Table functions]]&lt;br /&gt;
&lt;br /&gt;
If you want to categorize two or more items with different categories, on the same page, create a redirect page for each item with the item's name. Include a category markup in the redirect page. This might look like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[[Category:Database Functions]]&lt;br /&gt;
#REDIRECT [[Functions To Read Excel Worksheets#SpreadsheetCell]]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Put the category tag(s) before the redirect or it won't work right. When linking to an item that lives on a page with other items, link to the redirect page, i.e., use &amp;lt;pre&amp;gt;[[SpreadsheetCell]]&amp;lt;/pre&amp;gt;, not &amp;lt;pre&amp;gt;[[Functions To Read Excel Worksheets#SpreadsheetCell]]&amp;lt;/pre&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
If the heading within the page you redirect to has extra stuff in the heading, for example:&lt;br /&gt;
&amp;lt;pre&amp;gt;===SpreadsheetCell(wb, sheet, col, row)===&amp;lt;/pre&amp;gt;&lt;br /&gt;
Make a simple anchor tag using a div tag such as&lt;br /&gt;
&amp;lt;pre&amp;gt;===&amp;lt;div id=&amp;quot;SpreadsheetCell&amp;quot;&amp;gt;SpreadsheetCell(wb, sheet, col, row)&amp;lt;/div&amp;gt;===&amp;lt;/pre&amp;gt;&lt;br /&gt;
This way you can use just &amp;quot;#SpreadsheetCell&amp;quot; in the redirect URL.&lt;br /&gt;
&lt;br /&gt;
==History==&lt;br /&gt;
&lt;br /&gt;
* Many features have links from and to a &amp;quot;What's new&amp;quot; page for the release in which they were first introduced or modified, e.g. [[What's new in Analytica 5.0?]].&lt;br /&gt;
* Ideally, links to a &amp;quot;What's new&amp;quot; page should only exist for the most recent release -- e.g. [[What's new in Analytica 5.4?]]. Ancient history is of little interest to 99% of readers.&lt;br /&gt;
* So, when working on a page, please move information about when a feature was introduced or modified for older releases to the '''History''' section at the end of each page.&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
Every page should have a '''See Also''' section, with links to pages on related topics that someone reading this page may find useful. In this case:&lt;br /&gt;
&lt;br /&gt;
* [[Analytica model style guide]] for Analytica code and model documentation&lt;br /&gt;
* [[Guide to Converting Documents to MediaWiki]]&lt;br /&gt;
* [[Ana:Pages needing work]]&lt;/div&gt;</summary>
		<author><name>Mhenrion</name></author>
	</entry>
	<entry>
		<id>https://docs.analytica.com/index.php?title=AcpStyles&amp;diff=63762</id>
		<title>AcpStyles</title>
		<link rel="alternate" type="text/html" href="https://docs.analytica.com/index.php?title=AcpStyles&amp;diff=63762"/>
		<updated>2026-02-24T20:59:18Z</updated>

		<summary type="html">&lt;p&gt;Mhenrion: /* ACP styles inheritance */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category: Analytica Cloud Platform]]&lt;br /&gt;
[[Category: Attributes]]&lt;br /&gt;
[[Analytica_Cloud_Player|&amp;lt;&amp;lt;Analytica Cloud Platform ]]&lt;br /&gt;
&lt;br /&gt;
::{{ReleaseBar}}&lt;br /&gt;
&lt;br /&gt;
ACP offers a wide variety of styles and options to control the look and functioning of the user interface. Many of these go beyond what is (currently) available in Desktop Analytica (DTA). &lt;br /&gt;
&lt;br /&gt;
The easiest way to set these styles and options is to use the [[ACP Style Library]], which you can load into your model within ACP from the hamburger menu.  As you change styles in ACP, you can see their effects immediately.  &lt;br /&gt;
&lt;br /&gt;
If you use [[ACP Style Library]] you don't need to learn about the ACP Styles described below. The only reason to read the rest of this page is if you want to do something esoteric with AcpStyles, or use one of the few AcpStyles not accessible in the [[ACP_Style_Library]]. &lt;br /&gt;
&lt;br /&gt;
You can also load the  [[ACP Style Library]] in Analytica on the desktop from the '''Add Library...' option from the '''File''' menu. But, you won't be able to see the effects until you upload the model into ACP.&lt;br /&gt;
&lt;br /&gt;
The styles and options are specified as keywords and tags in the AcpStyles  attribute. Most styles and options apply to the whole Model and are specified in the AcpStyles attribute of the Model.  When you want to specify special styles for individual modules or variables, you apply them to the ACPStyles attribute of the relevant object.&lt;br /&gt;
 &lt;br /&gt;
The easiest way to view and edit the AcpStyles  attribute in Desktop Analytica is to use the [[Attribute panel]].  Select AcpStyles  from the list of Attributes at the top of that panel. By default, AcpStyles is not shown in the [[Object window]], so you first need to set it to be shown either with the [[Object_Window|right click menu]] in the Object window, or in the [[Manage attributes|Attributes dialog]].  &lt;br /&gt;
&lt;br /&gt;
The AcpStyles  and their flags are not case sensitive.  &lt;br /&gt;
&lt;br /&gt;
When you put multiple flags in a AcpStyles attribute, put each flag on a separate line. &lt;br /&gt;
&lt;br /&gt;
== Model level styles  ==&lt;br /&gt;
&lt;br /&gt;
These styles apply to the entire model. You set them in the AcpStyles attribute for the Main Model. (They have no effect when set for a submodule.)&lt;br /&gt;
&lt;br /&gt;
=== Navigation style  ===&lt;br /&gt;
&lt;br /&gt;
These Navigation_style options control how a user can view and access the module hierarchy:&lt;br /&gt;
* '''&amp;lt;code&amp;gt;Navigation_style: Outline&amp;lt;/code&amp;gt;''' -- Show an expandable tree of modules on the left of the ACP window, similar to the outline view in desktop Analytica (showing only modules not other objects). This is the default style when you upload a model with no ACP styles set or no Acp styles library embedded, or if you have not yet set the Navigation style in the Acp styles library. A navigation flag is not needed for this style, but if you want to explicitly set this style you can add '''&amp;lt;code&amp;gt;Navigation_style: Outline&amp;lt;/code&amp;gt;''' to the top diagram's AcpStyles attribute.&lt;br /&gt;
&lt;br /&gt;
*'''&amp;lt;code&amp;gt;Navigation_style: Top diagram only&amp;lt;/code&amp;gt;''' -- Show only the top diagram, with no Outline and no tabs. This lets you make a simple web application with a single UI page.  &lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For the next two  'Tabbed application' styles, each module in the main model becomes a tab. The order of the tabs follows the sequence of the module nodes in the main diagram, from  left to right then top to bottom. &lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;code&amp;gt;Navigation_style: Top_tabs&amp;lt;/code&amp;gt;''' -- The main modules in the top model appear as a row of tabs across the top of the window. Click a tab to show the diagram for that module. &lt;br /&gt;
&amp;lt;!--Remove for now* '''&amp;lt;code&amp;gt;Navigation_style: Two_top_tabs&amp;lt;/code'''&amp;gt; --  The main modules in the top model appear as a row of tabs. The submodules of the module whose tab is selected appear as a second row of tabs. Needs to be used with the style'''&amp;lt;code&amp;gt;show_as_tab: no&amp;lt;/code&amp;gt;'''. --&amp;gt;&lt;br /&gt;
*'''&amp;lt;code&amp;gt;Navigation_style: Side_tabs&amp;lt;/code&amp;gt;''' -- The main modules in the top model appear as a column of tabs on the left of the window. Click a tab to show the diagram for that module.&lt;br /&gt;
&amp;lt;!--Remove for now * '''&amp;lt;code&amp;gt;Navigation_style: Two_side_tabs&amp;lt;/code&amp;gt;'''  -- The top tabs reflect the main modules in the top model. Clicking a top tab shows a a set of subtabs, reflecting the submodules of main module (tab) selected. Needs to be used with the style '''&amp;lt;code&amp;gt;show_as_tab: no&amp;lt;/code&amp;gt;'''.--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We describe each in more detail below.&lt;br /&gt;
&lt;br /&gt;
===Outline Tree===&lt;br /&gt;
&lt;br /&gt;
By default, when using the Outline Navigation style, ACP shows an expandable outline tree of modules on the left hand side of the window, similar to the Outline view in Analytica on the desktop. This makes it easy to navigate a model with an extensive hierarchy of modules. &lt;br /&gt;
&lt;br /&gt;
*'''&amp;lt;code&amp;gt;Show_outline: yes&amp;lt;/code&amp;gt;''' -- The default, and unecessary for Outline Navigation style. It is generally redundant with other Navigation styles since the tabs or hierarchy show the same information, and the Outline takes up screen space. But you can add  it to the top diagram's AcpStyles attribute if you want to show the Outline tree with other Navigation styles.&lt;br /&gt;
&lt;br /&gt;
{{CalloutAnnotationBlock|[[File:Outline tree 6.0 01.png]]|{{CalloutAnnotation|Market model with&amp;lt;br&amp;gt;Outline Tree|v=80|pt=10,106}}}}&lt;br /&gt;
*'''&amp;lt;code&amp;gt;show_outline: no&amp;lt;/code&amp;gt;''' --  When using the Acp Style library this is set by default for Navigation styles other than Outline. For small models, and most web apps, you may want to suppress the Outline view even when using the Outline Navigation style. Do this by inserting this text into the top diagram's AcpStyles attribute (See image below). (If a model has only one diagram,  i.e. with no modules, it never shows the outline tree.)&amp;lt;br/&amp;gt;&lt;br /&gt;
{{CalloutAnnotationBlock|[[File:Outline tree 6.0 02.png]]|{{CalloutAnnotation|Market model with &amp;lt;br/&amp;gt;'''&amp;lt;code&amp;gt;show_outline: no&amp;lt;/code&amp;gt;'''|v=80}}}}&lt;br /&gt;
&lt;br /&gt;
===Top Diagram Only===&lt;br /&gt;
&lt;br /&gt;
Set by adding '''&amp;lt;code&amp;gt;navigation_style: top_diagram_only&amp;lt;/code&amp;gt;''' to the AcpStyles attribute of the top diagram. &amp;lt;!--Not to be confused with the AcpStyles flag of similar name: '''&amp;lt;code&amp;gt;top_diagram_only: yes&amp;lt;/code&amp;gt;'''. -This is a navigation style most easily set with the ACP styles library. --&amp;gt; The Styles library will set the flag &amp;lt;!--'''&amp;lt;code&amp;gt;top_diagram_only:yes&amp;lt;/code&amp;gt;''',--&amp;gt; '''&amp;lt;code&amp;gt;show_outline:no&amp;lt;/code&amp;gt;''' .&lt;br /&gt;
&lt;br /&gt;
===Tabbed Module Navigation===&lt;br /&gt;
&lt;br /&gt;
As an alternative to the Outline view, you can set the '''&amp;lt;code&amp;gt;Navigation_style&amp;lt;/code&amp;gt;''' to use use a tabbed interface which is often more convenient and familiar for web applications. By default, the main model appears as the first tab. You can change this with the style [[AcpStyles_Attribute_Values#Exclude_the_top_level_diagram_from_tabs|show_as_tab:no]] described below.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Replace this section with one that does not talk about two tabs for now - until they are implemented in ACP3 - There are four tabbed styles, Top_tabs and Two_top_tabs, with one or two rows of tabs across the top, respectively; and Side_tabs and Two_side_tabs with one or two columns of tabs down the side. Top_tabs works well if you have up to 5 to 8 modules in the main diagram (tabs), depending on the length of their titles and the width of the ACP window.  If you have a lot of modules, or they have long titles, it may be better to use Side_tabs.  If you have too many modules to fit at the top or side, you can use Two_top_tabs or Two_side_tabs. In those cases, you must organize the modules into a two-level hierarchy with logical groupings. &lt;br /&gt;
&lt;br /&gt;
'Top tabs or side tabs.' The first tab displays the top level diagram, and the remaining tabs display the modules present on the top level diagram of the model.  (The modules will not display on the diagram, so you need to tweak your diagram for playing in ACP so that it looks right without these present). The size of the diagram is determined by the size of the top level diagram window when the model was last saved in Analytica.&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;code&amp;gt;navigation_style: top_tabs&amp;lt;/code&amp;gt;''' This setting instructs ACP to use the 'Tabs across top' navigation style.&lt;br /&gt;
&lt;br /&gt;
:[[File:Top tabs 6.0 01.png]]&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;code&amp;gt;navigation_style: side_tabs&amp;lt;/code&amp;gt;''' This setting instructs ACP to use the 'Side tabs' navigation style.  Side tabs work better than top tabs when there are more module nodes present.&lt;br /&gt;
&lt;br /&gt;
:[[File:Side tabs 6.0 01.png]]&lt;br /&gt;
* &amp;lt;code&amp;gt;Navigation_style: Two_top_tabs&amp;lt;/code&amp;gt; &lt;br /&gt;
* &amp;lt;code&amp;gt;Navigation_style: Two_side_tabs&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
'''These 2 Navigation styles replace the style  &amp;lt;code&amp;gt;two_tiers_tabs:yes&amp;lt;/code&amp;gt; which has been deprecated.'''&lt;br /&gt;
&lt;br /&gt;
These styles are useful for modules with several layers of modules and submodules - to reduce the clutter of the top layer of tabs. Modules in the model's top diagram appear as top tabs (left tabs).  Modules within those top level modules appear as subtabs,  the 'second tier'. When you select a top-level tab, it shows its submodules as subtabs. This means that the top level of modules will not show any contents other than their submodules, so the model needs to be designed with this in mind.&lt;br /&gt;
*Currently these 2 styles must be used with the '''&amp;lt;code&amp;gt;show_as_tab: no&amp;lt;/code&amp;gt;''' style set. &amp;lt;!--Coming soon: Compatibility with '''&amp;lt;code&amp;gt;show_as_tab: yes&amp;lt;/code&amp;gt;'''&lt;br /&gt;
*The selected tab appears with the color of the diagram background of it's module&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
There are two tabbed styles, Top_tabs, with a row of tabs across the top; and Side_tabs with a column of tabs down the side. Top_tabs works well if you have up to 5 to 8 modules in the main diagram (tabs), depending on the length of their titles and the width of the ACP window.  If you have a lot of modules, or they have long titles, it may be better to use Side_tabs.  &lt;br /&gt;
&lt;br /&gt;
'Top tabs or side tabs.' The first tab displays the top level diagram, and the remaining tabs display the modules present on the top level diagram of the model.  (The modules will not display on the diagram, so you need to tweak your diagram for playing in ACP so that it looks right without these present). &lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;code&amp;gt;navigation_style: top_tabs&amp;lt;/code&amp;gt;''' -- This setting instructs ACP to use the 'Tabs across top' navigation style.&lt;br /&gt;
&lt;br /&gt;
[[File:Top tabs 6.0 01.png]]&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;code&amp;gt;navigation_style: side_tabs&amp;lt;/code&amp;gt;''' -- This setting instructs ACP to use the 'Side tabs' navigation style.  Side tabs work better than top tabs when there are more module nodes present.&lt;br /&gt;
&lt;br /&gt;
[[File:Side tabs 6.0 01.png]]&lt;br /&gt;
&lt;br /&gt;
=== Toolbar Tabs ===&lt;br /&gt;
*'''&amp;lt;code&amp;gt;show_tabs: no&amp;lt;/code&amp;gt;''' -- By default, with the Outline Navigation style. ACP shows navigation tabs for &amp;quot;Diagram&amp;quot;, &amp;quot;Object&amp;quot;, &amp;quot;Table&amp;quot;, &amp;quot;Graph&amp;quot; along the top. Use this flag to hide those tabs. If you display the model inputs and outputs on the diagram -- using embedded tables and graphs on the diagram -- your users may not need those tabs.  (You can also use '''&amp;lt;code&amp;gt;show_tabs: yes&amp;lt;/code&amp;gt;''' to explicitly show the tabs in Outline and Top diagram only Navigation styles.) &lt;br /&gt;
{{CalloutAnnotationBlock|[[File:Show tabs no 6.0 0.1.png]]|{{CalloutAnnotation|Market model with &amp;lt;br/&amp;gt;'''&amp;lt;code&amp;gt;show_tabs: no&amp;lt;/code&amp;gt;'''|v=80|pt=232,37|path=t!-}}}}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Module hierarchy bar ===&lt;br /&gt;
Using tabbed navigation, ACP shows the model hierarchy in a bar at the top of the diagram by default. The model hierarchy header shows you where you are in a large model by listing the titles of the ancestor modules in which the current diagram is nested.  You can click any ancestor to click up levels in the hierarchy. The Hierarchy Bar takes up much less screen real estate than the Outline Tree. ACP doesn't show the hierarchy bar when you are viewing a top level module, or if the module title is already in the selected tab. &amp;lt;!--With a two-level tab navigation, it shows the hierarchy bar only when viewing a module nested 3 or more levels down. Basically, the hierarchy header does not duplicate what you can see in the tabs.--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that this setting is not based on a AcpStyles attribute, but rather on the ''Show module hierarchy'' check box in the model [[Preferences]] in Analytica.  If you want to set this preference manually, with the model opened in Analytica, on the [[Edit menu]], select '''Preference...''', and check (or uncheck) the ''Show module hierarchy'' checkbox. &lt;br /&gt;
&lt;br /&gt;
If you are using the ACP styles library, the Styles library will set this to the default setting automatically once you select a Navigation style. But you have the option of changing it if, for instance you want to show the Outline and the Hierarchy bar.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--:[[Image:Acp hh.png]]--&amp;gt;&lt;br /&gt;
===Auto zoom ===&lt;br /&gt;
*'''&amp;lt;code&amp;gt;auto_zoom_diagrams: yes&amp;lt;/code&amp;gt;''' -- ACP automatically zooms the UI to fit the browser window -- the most constraining of width or height so it retains the aspect ratio of the diagram. Works with zoom in and zoom out. Auto Zoom will allow a model to go down to 50% of its size or up to 200% of its size. If the model does not fit at 50% size, the window will show scroll bars. This Acp style has no effect if '''&amp;lt;code&amp;gt;Use_top_diagram_size:Yes &amp;lt;/code&amp;gt;''' is present, you can use only one or the other. You can also set '''&amp;lt;code&amp;gt;auto_zoom_diagrams: no&amp;lt;/code&amp;gt;''' which is the default. (This is a model level setting and is added to the top diagram of a model).&lt;br /&gt;
&lt;br /&gt;
===Customize zoom levels===&lt;br /&gt;
AcpStyles for controlling the max/min zoom when '''&amp;lt;code&amp;gt;auto_zoom_diagram: yes&amp;lt;/code&amp;gt;''' is set. The default if these styles are not set is as above - 50% and 200%. The easiest way to set these is with the [[ACP_Style_Library]] - where the controls are in the Esoteric ACP styles module. This is available from the Hamburger menu in ACP. Note that in order to see this effect, the '''&amp;lt;code&amp;gt;Browser window size&amp;lt;/code&amp;gt;''' needs to have the screen size pulldown menu set to '''&amp;lt;code&amp;gt;Auto zoom&amp;lt;/code&amp;gt;''' as well. &lt;br /&gt;
*'''&amp;lt;code&amp;gt;zoom_min_percent: 75&amp;lt;/code&amp;gt;''' (means that the minimum zoom level will be 75% or .75)&lt;br /&gt;
*'''&amp;lt;code&amp;gt;zoom_max_percent: 125&amp;lt;/code&amp;gt;''' (means the that max zoom level will be 125% or 1.25)&lt;br /&gt;
&lt;br /&gt;
===Use top diagram size for all ACP windows===&lt;br /&gt;
*'''&amp;lt;code&amp;gt;Use_top_diagram_size:Yes &amp;lt;/code&amp;gt;''' --  Sets the size of all diagrams based on the size of the diagram window of the top level when the model was last viewed in Desktop Analytica (in non-maximized mode).  '''&amp;lt;code&amp;gt;Use_top_diagram_size:No &amp;lt;/code&amp;gt;''' is the same as if the flag is not set, and is the default  - the ACP diagram will use the entire browser window.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--Not in ACP3 yet - ER519&lt;br /&gt;
===Display Only a Single Diagram===&lt;br /&gt;
*'''&amp;lt;code&amp;gt;top_diagram_only: yes&amp;lt;/code&amp;gt;''' -- Use this flag if you want to restrict users access to only the top diagram. With this flag, any action that would normally bring up a different diagram will just reload the top diagram.  (If you are using this setting, you will also want to also not display the Outline Tree as explained above, since clicking on the modules in the Outline will have no effect.)&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
===Show or hide the Dashboard Title and Model title===&lt;br /&gt;
*'''&amp;lt;code&amp;gt;show_model_title: no&amp;lt;/code&amp;gt;''' -- Hide the title of the model, which appears by default in the top Teal bar.&lt;br /&gt;
&lt;br /&gt;
*'''&amp;lt;code&amp;gt;show_diagram_title: yes&amp;lt;/code&amp;gt;''' --  Use  to show the dashboard title at the top of the diagram. Or &amp;lt;code&amp;gt;show_diagram_title: no&amp;lt;/code&amp;gt; to suppress the diagram title, but not really necessary because ACP does not show the diagram title by default.&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
===Hide the Banner and Logo===&lt;br /&gt;
Another flag it's easier to use the [[ACP Style Library]] to set, since it is only compatible with the toolbar tabs hidden. The Styles library changes all the flags at once, and prevents you from entering incompatible combinations.&lt;br /&gt;
&lt;br /&gt;
*'''&amp;lt;code&amp;gt;show_banner: no&amp;lt;/code&amp;gt;''' &lt;br /&gt;
::Hides the banner space usually present at the top of ACP. The banner typically contains the Lumina Logo, the '''Parent Diagram''' button, tabs, '''Close Model''' button, and '''Save''' button.&lt;br /&gt;
&lt;br /&gt;
:*This could be useful for customizing the appearance of a model [[Putting_ACP_in_a_Web_Page|embedded in a web page]], for instance.&lt;br /&gt;
:[[File:Banner area 01.PNG]]&lt;br /&gt;
:*If you play a model without the banner area in ACP, there isn't a convenient way to close the model without closing the browser.&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Exclude diagram(s) from tabs===&lt;br /&gt;
&lt;br /&gt;
When using tabbed navigation, you can select those modules (from the top model diagram) that you want to appear as a tab in ACP. The default is for all to appear as tabs. You should use the ''Show modules as tabs'' choice menu in the '''&amp;lt;code&amp;gt;ACP Navigation styles&amp;lt;/code&amp;gt;''' section of the [[ACP Style Library]] if you want to set this flag,, and if you also want to hide the modules corresponding to these tabs [[ChangeNodeVisibility|hidden]], so that the model viewer cannot see them.&lt;br /&gt;
&lt;br /&gt;
*Optionally, Enter the text '''&amp;lt;code&amp;gt;Show_as_tab: no&amp;lt;/code&amp;gt;''' in the AcpStyles attribute of the modules you don't wish to show as a tab. The modules themselves will not be hidden with this setting, only the tabs.&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
*'''&amp;lt;code&amp;gt;show_as_tab: no&amp;lt;/code&amp;gt;''' &lt;br /&gt;
::Excludes the top level diagram and just shows the submodules of the top level diagram as tabs. Since the top diagram will not display in ACP, you include the key user interface pages as modules in the main model. Can be used only with 'Top tabs' or 'Side tabs' styles. &lt;br /&gt;
*When setting tabbed Navigation styles using the ACP Styles Library, the default is for the Top level diagram to be included, except with two tiers of tabs, for which it is (Currently) required to exclude the top diagram from the tabs.&lt;br /&gt;
&lt;br /&gt;
If you want to see what it looks like, play this model [[Media:Show as tab no.ana|Array examples]] in ACP, with the '''&amp;lt;code&amp;gt;show_as_tab: no&amp;lt;/code&amp;gt;''' style in the AcpStyles  attribute, and set to tabs along top.&lt;br /&gt;
&lt;br /&gt;
:[[File:Show as tab no02.png]]&lt;br /&gt;
&lt;br /&gt;
*Play this model in ACP and the top level diagram does not show. Rather the diagram for 'Intro to Arrays' shows as the first tab and then the other tabs.'''&lt;br /&gt;
&lt;br /&gt;
:[[File:Show as tab no01.png]]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
===Tab color===&lt;br /&gt;
&lt;br /&gt;
When using Tabbed Navigation, you can use these flags to control how the color of the tabs display on your model in ACP. To use, add one of them to the AcpStyles attribute of the top level diagram of your model. They have no effect if added to a module other than the top diagram.&lt;br /&gt;
&lt;br /&gt;
*'''&amp;lt;code&amp;gt;Tab_color: Default &amp;lt;/code&amp;gt;''' The default. Non-selected tabs are bluish white. The selected tab uses the background color for that diagram.&lt;br /&gt;
*'''&amp;lt;code&amp;gt;Tab_color: Background &amp;lt;/code&amp;gt;''' All tabs use their diagram background color, whether selected or not&lt;br /&gt;
*'''&amp;lt;code&amp;gt;Tab_color: Node &amp;lt;/code&amp;gt;'''  The selected Tab uses its diagram background color; The other tabs use the color of their Module node (not their diagram background color).  You can use this to change the color of the tabs by modifying their node color in an Analytica functions.&lt;br /&gt;
&lt;br /&gt;
== Model level styles for diagram nodes. ==&lt;br /&gt;
&lt;br /&gt;
These model-level styles affect how all nodes are displayed in diagrams.  &lt;br /&gt;
&lt;br /&gt;
=== Node shadows and bevels  ===&lt;br /&gt;
&lt;br /&gt;
By default ACP displays nodes without shadows or bevels (for now) , so they look like this:&lt;br /&gt;
:[[Image:Nodes no shadow or bevel.png]] &lt;br /&gt;
&lt;br /&gt;
Set this flag to show a drop shadow behind each node, giving a kind of 3D effect:&lt;br /&gt;
&lt;br /&gt;
*'''&amp;lt;code&amp;gt;node_drop_shadow: yes&amp;lt;/code&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
:[[Image:Nodes drop shadow.png]] &lt;br /&gt;
&lt;br /&gt;
Set this flag to display a bevel border for each node, giving another kind of 3-D effect: &lt;br /&gt;
*'''&amp;lt;code&amp;gt;bevel_node_border: yes&amp;lt;/code&amp;gt;''' &lt;br /&gt;
&lt;br /&gt;
:[[Image:Nodes beveled border.png]] &lt;br /&gt;
&lt;br /&gt;
===Node hover highlighting===&lt;br /&gt;
&lt;br /&gt;
By default, ACP displays a highlight -- a contrasting light rectangle behind a node -- when you move the cursor over the node:&lt;br /&gt;
&lt;br /&gt;
[[File:acp hover hl.png]]&lt;br /&gt;
&lt;br /&gt;
You can switch it off by setting:&lt;br /&gt;
*'''&amp;lt;code&amp;gt;show_hover_highlight: No&amp;lt;/code&amp;gt;''' &lt;br /&gt;
&lt;br /&gt;
=== Balloon Help  ===&lt;br /&gt;
&lt;br /&gt;
When you move the cursor over a node, ACP usually shows a &amp;quot;balloon&amp;quot; popup next to the node with the description of the node (if it has one) to help end users understand what its for, or what to enter for a user input. If the node has no description, the [[help balloons|balloon help]] will not appear.&lt;br /&gt;
&lt;br /&gt;
*'''&amp;lt;code&amp;gt;show_id_in_balloon: yes&amp;lt;/code&amp;gt;''' Use this flag to show each node's identifier below its title in the balloon -- unless the identifier and title are identical (except for spaces which are replaced by underscores). This flag goes in the AcpStyles of the model and apply to all nodes in the model.&lt;br /&gt;
&amp;lt;!-- not implemented in ACP3 &lt;br /&gt;
*'''&amp;lt;code&amp;gt;show_definition_in_balloon: yes&amp;lt;/code&amp;gt;''' &lt;br /&gt;
::Use this flag to show the node's definition in the balloon below the description.&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&amp;lt;!-- not implemented in ACP3 &lt;br /&gt;
*'''&amp;lt;code&amp;gt;hover_balloon_delay&amp;lt;/code&amp;gt;''' &lt;br /&gt;
::When you mouse over a node, there's a short delay of about half a second before it displays the balloon (to prevent wild balloon appearance when you move the cursor rapidly over a diagram.) You can tweak this delay time measured in milliseconds by inserting this flag. E.g. '''&amp;lt;code&amp;gt;hover_balloon_delay: 200&amp;lt;/code&amp;gt;''' to reduce the delay to .2 seconds.&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
The flags above go in the AcpStyles of the model and apply to all nodes in the model. You can also modify some aspects of the balloon separately for each node by inserting these flags in AcpStyles for each node: --&amp;gt;&lt;br /&gt;
*'''&amp;lt;code&amp;gt;show_hover_balloon: no&amp;lt;/code&amp;gt;'''&lt;br /&gt;
::Insert this flag in the AcpStyles for a node, to suppress display of its balloon.&lt;br /&gt;
&amp;lt;!--title no longer shows in the balloon&lt;br /&gt;
*'''&amp;lt;code&amp;gt;show_hover_balloon_title: no&amp;lt;/code&amp;gt;'''&lt;br /&gt;
::Insert this flag in the AcpStyles for a node, to suppress its title in the balloon.--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==ACP styles inheritance==&lt;br /&gt;
This is the order of inheritance for Acpstyles below that apply to tables and graphs. Styles at a higher level take precedence over the lower precedence styles. (Inheritance doesn't apply to the ACPstyles described above tbecause they work only at the Model level.)&lt;br /&gt;
# '''Variable''' (includes Tall nodes): Acpstyles applied to an individual variable will take precedence over all other styles. A variable with a style of &amp;lt;code&amp;gt;show_title:no&amp;lt;/code&amp;gt; will not show the title, even if the model level style is &amp;lt;code&amp;gt;show_title:yes&amp;lt;/code&amp;gt;, and if that node shows it's result in a frame node the variable style will override the frame node style.&lt;br /&gt;
# '''Frame''' : An Acpstyle set for a frame node will affect any variable shown in that frame that doesn't have its own settings. These will also override any styles at the model level.&lt;br /&gt;
# '''Model ACP style defaults''': Acpstyles that you can enter into the Acptyles attribute of the top diagram of your model. These will override the ACP defaults, and will be inherited by frame nodes and variables in the model that don't have their own Acpstyle.&lt;br /&gt;
# '''ACP style defaults for ACP''': The default style ACP uses if you have no specific setting for that style. Eg for show_index_menus the default is fly-in and that is what will show if you don't enter a different show_index_menus: Acpstyle flag in the Acpstyle for the top diagram (model level) or for frame nodes or variables.&lt;br /&gt;
&lt;br /&gt;
==ACP Styles for tables and graphs==&lt;br /&gt;
&lt;br /&gt;
These styles affect how result graphs and tables are displayed in ACP, including in [[Embed_table_or_graph_with_ACP#Frame_nodes|Tall nodes]] and [[Embed_table_or_graph_with_ACP#Tall_nodes|˞Frame nodes]]. They provide options not (yet) available in Desktop Analytica. ACP has default settings for these. You can override these settings for the entire model. You can also set them for [[Embed_table_or_graph_with_ACP#Frame_nodes|˞Frame nodes]], which will apply to all results shown in the Frame and override the ACP and model level settings. And you can set these styles for individual variables, which will override any settings in the Model or Frame. As always, it's easiest to set the using the [[ACP_Style_library]]. &lt;br /&gt;
&lt;br /&gt;
None of these styles apply to tab result views using the default Navigation_style: Outline.&lt;br /&gt;
&lt;br /&gt;
===Show or hide the Description===&lt;br /&gt;
&lt;br /&gt;
*'''&amp;lt;code&amp;gt;Show_description: n&amp;lt;/code&amp;gt;''' If &amp;lt;code&amp;gt;n &amp;gt; 0 &amp;lt;/code&amp;gt; it shows the Description of the variable above the table or graph using up to n% of the vertical space available. If that's not big enough to show the entire description, it shows a vertical scroll bar. Iif you don't want to show the description at all, set &amp;lt;code&amp;gt;n = 0&amp;lt;/code&amp;gt;. Default if not mentioned, is one third, i.e. &amp;lt;code&amp;gt;Show_description: 33&amp;lt;/code&amp;gt;.  You can set this style at the model level for all Frame or Tall nodes, and you can override this default for any individual node.&lt;br /&gt;
&lt;br /&gt;
===Show or hide the Object view icon===&lt;br /&gt;
*'''&amp;lt;code&amp;gt;Object_in_Frame:yes/no&amp;lt;/code&amp;gt;''': With this style set, it shows an object view hover icon at the top right of a frame node or tall node when showing a graph or table view. Click this icon to show the object window view. The object view shows the Table and Graph hover icon to go back to the table or graph view.  You can set '''&amp;lt;code&amp;gt;Object_in_frame&amp;lt;/code&amp;gt;''' style at either the top level of the model or in an individual frame node, which overrides the top level setting. When working with tall nodes, you can set '''&amp;lt;code&amp;gt;Object_in_frame&amp;lt;/code&amp;gt;''' style at the top level or in the original variable's ACP style setting, which overrides the top level setting.&lt;br /&gt;
&lt;br /&gt;
===Show or hide the title===&lt;br /&gt;
&lt;br /&gt;
*'''&amp;lt;code&amp;gt;Show_title&amp;lt;/code&amp;gt;''': Set &amp;lt;code&amp;gt;Show_title: yes&amp;lt;/code&amp;gt; to show or &amp;lt;code&amp;gt;Show_title: no&amp;lt;/code&amp;gt; to stop showing the Title and units of a selected variable. This style can be used at the model level, for frame nodes or for individual nodes, but controls  whether or not the Title and units show in Frame nodes or tall nodes. &lt;br /&gt;
&lt;br /&gt;
===Show or hide the Graph-Table icon===&lt;br /&gt;
&lt;br /&gt;
*'''&amp;lt;code&amp;gt;Show_graph_table_icon:no&amp;lt;/code&amp;gt;''' Hides the icon in the top right of a Result that lets you toggle between Graph and Table view. This applies to [[Embed_table_or_graph_with_ACP|Frame nodes and tall nodes]]. This style can be used for  the entire model, for frame nodes or for individual nodes . You set them in the AcpStyles attribute.  Conversely, you can set  '''&amp;lt;code&amp;gt;Show_graph_table_icon:yes&amp;lt;/code&amp;gt;'''. This is the default so not usually necessary at the model level, but can be used in a frame node or variable to override the model default or override a frame node setting.&lt;br /&gt;
&lt;br /&gt;
===Show or hide the Uncertainty view menu===&lt;br /&gt;
By default, in ACP, as in desktop Analytica, the [[Uncertainty views]] menu appears above each result graph or table to let you select [[Mid]] to display its deterministic value, or Mean, Probability distribution, and other ways to display a probabilistic value.  &lt;br /&gt;
&lt;br /&gt;
You can override this default behavior with this ACP style for the entire model, [[Embed_table_or_graph_with_ACP#Frame_nodes|Frame nodes]], or for individual variables. The Uncertainty view menu is always present in tab result views.&lt;br /&gt;
*'''&amp;lt;code&amp;gt;Show_uncertainty_view: No&amp;lt;/code&amp;gt;''' Never show the uncertainty menu in frame nodes or tall result nodes. Suitable for models with no probabilistic values, or if you want to fix a particular probabilistic view for each frame node or variable so that ACP users can't change it.&lt;br /&gt;
*'''&amp;lt;code&amp;gt;Show_uncertainty_view: Yes&amp;lt;/code&amp;gt;''' Always show the uncertainty menu even for variables that are not probabilistic, as in Desktop Analytica. This is the default and not normally necessary at the model level, but can be used to customize which frame nodes or variables to show the uncertainty view menu when the model level style is set to '''&amp;lt;code&amp;gt;Show_uncertainty_view: No&amp;lt;/code&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
===Show or hide the Index menus and Pivoters/slicers===&lt;br /&gt;
*'''&amp;lt;code&amp;gt;Show_index_menus: Fly-in&amp;lt;/code&amp;gt;''' By default (the same as if there is no show_index_menu: setting) the index menus are not shown in [[https://wiki.analytica.com/index.php?title=Embed_table_or_graph_with_ACP|frame nodes or tall nodes]] (but slicers are), since often the modeler has already chosen the pivot they want to use. And because these menus take up valuable screen space. But if you hover over the frame node (or tall node) there is a fly-in pivoter control. If you click this it toggles - on or off - the visibility of the pivoters; allowing you to pivot the result table or graph and then close the pivoters to give you more space.&lt;br /&gt;
*'''&amp;lt;code&amp;gt;Show_index_menus: Yes&amp;lt;/code&amp;gt;''' If you do want to allow users to be able to pivot or change the slice of the table or graph, without using the fly-in, then use use show_index_menus:yes. Always present in tab result views.&lt;br /&gt;
*'''&amp;lt;code&amp;gt;Show_index_menus: No&amp;lt;/code&amp;gt;''' If show_index_menus:no is set then the indexes and pivoters will not show and there is no fly-in, but the slicers will still be present.&lt;br /&gt;
*'''&amp;lt;code&amp;gt;Show_index_menus: Not_even_slicers&amp;lt;/code&amp;gt;''' If you don't want to show any pivoters or slicers, you can set show_index_menus:Not_even_slicers.&lt;br /&gt;
&lt;br /&gt;
===Table filtering===&lt;br /&gt;
'''&amp;lt;code&amp;gt;Show_Table_Filtering: no&amp;lt;/code&amp;gt;''' Turns off the ability to filter tables by column, and reverts to the previous sort functionality. [[Tables_in_ACP#Sort_columns]]&amp;lt;br /&amp;gt;&lt;br /&gt;
'''&amp;lt;code&amp;gt;Show_Table_Filtering: yes&amp;lt;/code&amp;gt;''' The default - shows the table filtering icons&lt;br /&gt;
&lt;br /&gt;
===Autocalc===&lt;br /&gt;
&lt;br /&gt;
In the  [[ACP Style Library]], Autocalc looks like a style you can set for a model, module or variable. It controls whether ACP evaluates each variable and shows its results automatically when you view a Diagram or tab showing the -- instead of the default Analytica behavior where the end user has to click on a Calc button to compute a result.  With Autocalc on, a result in view also recomputes automatically when you change an input that influences it.&lt;br /&gt;
&lt;br /&gt;
Autocalc is not actually an ACPStyle in ACP3. (It was in ACP1.)  Autocalc is implemented using the Desktop Analytica functionality  for [[Proactive_Evaluation]].&lt;br /&gt;
&lt;br /&gt;
== Node Level Settings  ==&lt;br /&gt;
&lt;br /&gt;
These style flags and options apply to individual nodes (variables), rather than the model as a whole. So, you set these flags on the AcpStyles for selected objects (nodes).&lt;br /&gt;
&lt;br /&gt;
=== Other node level flags ===&lt;br /&gt;
=== Prevent nodes from showing on the diagram ===&lt;br /&gt;
&lt;br /&gt;
*'''&amp;lt;code&amp;gt;Show_Object: no&amp;lt;/code&amp;gt;''' &lt;br /&gt;
You can prevent nodes or modules from showing on the diagram of your model, by adding this flag to the AcpStyles attribute of the object you wish to hide. Once the model is shown in ACP the objects aren't visible.&lt;br /&gt;
&lt;br /&gt;
== Modifying ACP menus==&lt;br /&gt;
&lt;br /&gt;
Normally, ACP offers menus that appear when you press one of the three icons on the right of the top teal bar. These ACP styles let you modify these menus.&lt;br /&gt;
&lt;br /&gt;
===Hide the Save options===&lt;br /&gt;
&lt;br /&gt;
*'''&amp;lt;code&amp;gt;Hide_save_button: yes &amp;lt;/code&amp;gt;''' Set this model ACP style option to exclude the  'Save this model' and 'Save model as...' from the ACP Close menu. It prevents  users from saving over your models or saving other versions. &lt;br /&gt;
*''This style cannot currently be set from the ACP style library, since it would allow users to show the save and save as menu options and then save changes even if the modeler does not want to allow it.''&lt;br /&gt;
&lt;br /&gt;
===Remove Help menu items===&lt;br /&gt;
&lt;br /&gt;
These styles add menu items to or remove items from the help (?) menu if added to the AcpStyles of the top diagram of your model. For [[ACP_Server_License|ACP installations]]  on an intranet, these standard links may not be accessible. On the other hand you may want to offer a special help page for a particular model.&lt;br /&gt;
&lt;br /&gt;
*'''&amp;lt;code&amp;gt;Remove_help_menu_options: Text&amp;lt;/code&amp;gt;&lt;br /&gt;
This style allows you to list one or more of the standard options to remove from the help (?) menu. Replace &amp;lt;code&amp;gt;Text&amp;lt;/code&amp;gt; with one or more of the following: &amp;lt;code&amp;gt;ACP_Online_docs, Analytica_Q_A_forum, Tech_support&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
(Note: The help menu item &amp;lt;code&amp;gt;Connection status&amp;lt;/code&amp;gt; cannot currently be removed).&lt;br /&gt;
&lt;br /&gt;
===Add Help menu item===&lt;br /&gt;
*'''&amp;lt;code&amp;gt;Add_help_menu_option: Text|URL&amp;lt;/code&amp;gt;''' &lt;br /&gt;
Adds another menu item, for example: &amp;lt;code&amp;gt;Add_help_menu_option: How to use this model...|https://www.lumina.com&amp;lt;/code&amp;gt; adds a menu item to the help (?) menu with the text &amp;quot;How to use this model...&amp;quot; and opens the link when clicked.&lt;br /&gt;
&lt;br /&gt;
===Add download this model to the Close menu===&lt;br /&gt;
*'''&amp;lt;code&amp;gt;save_menu_download: yes&amp;lt;/code&amp;gt;'''&lt;br /&gt;
This AcpStyle is controlled by a setting in the [[Customizing_an_ACP_server#The_acpConfig.json_file|AcpConfig.json]] file. On Lumina's acp.analytica.com server it is turned on.&lt;br /&gt;
With this AcpStyle in the model, ''&amp;lt;code&amp;gt;&amp;quot;download this model&amp;quot;&amp;lt;/code&amp;gt;'' is added to the close menu at the top right of the ACP GUI.&lt;br /&gt;
When set, this will allow anyone to download the model - even a reviewer, and even from an email invite.&lt;br /&gt;
*'''&amp;lt;code&amp;gt;save_menu_download: no&amp;lt;/code&amp;gt;''' (default if not set)&lt;br /&gt;
*'''&amp;lt;code&amp;gt;save_menu_download:Prompt_to_download_free&amp;lt;/code&amp;gt;'''.  This adds a popup dialog with a download link and prompt to download the Analytica free installer.&lt;br /&gt;
''This style cannot be set from the ACP Style library, since it would allow reviewers to change the style and download the model, even if the modeler does not  want to allow that.''&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
* [[ACP Style Library]] &lt;br /&gt;
* [[media:ACP style library.ana]]&lt;br /&gt;
* [[Analytica Cloud Platform]]&lt;br /&gt;
* [[ACP Rendering tables and graphs on the diagram]]&lt;br /&gt;
* [[Putting ACP in a Web Page]]&lt;br /&gt;
* [[Help balloons]]&lt;br /&gt;
* [[Attributes]]&lt;br /&gt;
* [[Manage attributes]]&lt;/div&gt;</summary>
		<author><name>Mhenrion</name></author>
	</entry>
	<entry>
		<id>https://docs.analytica.com/index.php?title=AcpStyles&amp;diff=63761</id>
		<title>AcpStyles</title>
		<link rel="alternate" type="text/html" href="https://docs.analytica.com/index.php?title=AcpStyles&amp;diff=63761"/>
		<updated>2026-02-24T20:58:01Z</updated>

		<summary type="html">&lt;p&gt;Mhenrion: /* Show or hide the Description */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category: Analytica Cloud Platform]]&lt;br /&gt;
[[Category: Attributes]]&lt;br /&gt;
[[Analytica_Cloud_Player|&amp;lt;&amp;lt;Analytica Cloud Platform ]]&lt;br /&gt;
&lt;br /&gt;
::{{ReleaseBar}}&lt;br /&gt;
&lt;br /&gt;
ACP offers a wide variety of styles and options to control the look and functioning of the user interface. Many of these go beyond what is (currently) available in Desktop Analytica (DTA). &lt;br /&gt;
&lt;br /&gt;
The easiest way to set these styles and options is to use the [[ACP Style Library]], which you can load into your model within ACP from the hamburger menu.  As you change styles in ACP, you can see their effects immediately.  &lt;br /&gt;
&lt;br /&gt;
If you use [[ACP Style Library]] you don't need to learn about the ACP Styles described below. The only reason to read the rest of this page is if you want to do something esoteric with AcpStyles, or use one of the few AcpStyles not accessible in the [[ACP_Style_Library]]. &lt;br /&gt;
&lt;br /&gt;
You can also load the  [[ACP Style Library]] in Analytica on the desktop from the '''Add Library...' option from the '''File''' menu. But, you won't be able to see the effects until you upload the model into ACP.&lt;br /&gt;
&lt;br /&gt;
The styles and options are specified as keywords and tags in the AcpStyles  attribute. Most styles and options apply to the whole Model and are specified in the AcpStyles attribute of the Model.  When you want to specify special styles for individual modules or variables, you apply them to the ACPStyles attribute of the relevant object.&lt;br /&gt;
 &lt;br /&gt;
The easiest way to view and edit the AcpStyles  attribute in Desktop Analytica is to use the [[Attribute panel]].  Select AcpStyles  from the list of Attributes at the top of that panel. By default, AcpStyles is not shown in the [[Object window]], so you first need to set it to be shown either with the [[Object_Window|right click menu]] in the Object window, or in the [[Manage attributes|Attributes dialog]].  &lt;br /&gt;
&lt;br /&gt;
The AcpStyles  and their flags are not case sensitive.  &lt;br /&gt;
&lt;br /&gt;
When you put multiple flags in a AcpStyles attribute, put each flag on a separate line. &lt;br /&gt;
&lt;br /&gt;
== Model level styles  ==&lt;br /&gt;
&lt;br /&gt;
These styles apply to the entire model. You set them in the AcpStyles attribute for the Main Model. (They have no effect when set for a submodule.)&lt;br /&gt;
&lt;br /&gt;
=== Navigation style  ===&lt;br /&gt;
&lt;br /&gt;
These Navigation_style options control how a user can view and access the module hierarchy:&lt;br /&gt;
* '''&amp;lt;code&amp;gt;Navigation_style: Outline&amp;lt;/code&amp;gt;''' -- Show an expandable tree of modules on the left of the ACP window, similar to the outline view in desktop Analytica (showing only modules not other objects). This is the default style when you upload a model with no ACP styles set or no Acp styles library embedded, or if you have not yet set the Navigation style in the Acp styles library. A navigation flag is not needed for this style, but if you want to explicitly set this style you can add '''&amp;lt;code&amp;gt;Navigation_style: Outline&amp;lt;/code&amp;gt;''' to the top diagram's AcpStyles attribute.&lt;br /&gt;
&lt;br /&gt;
*'''&amp;lt;code&amp;gt;Navigation_style: Top diagram only&amp;lt;/code&amp;gt;''' -- Show only the top diagram, with no Outline and no tabs. This lets you make a simple web application with a single UI page.  &lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For the next two  'Tabbed application' styles, each module in the main model becomes a tab. The order of the tabs follows the sequence of the module nodes in the main diagram, from  left to right then top to bottom. &lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;code&amp;gt;Navigation_style: Top_tabs&amp;lt;/code&amp;gt;''' -- The main modules in the top model appear as a row of tabs across the top of the window. Click a tab to show the diagram for that module. &lt;br /&gt;
&amp;lt;!--Remove for now* '''&amp;lt;code&amp;gt;Navigation_style: Two_top_tabs&amp;lt;/code'''&amp;gt; --  The main modules in the top model appear as a row of tabs. The submodules of the module whose tab is selected appear as a second row of tabs. Needs to be used with the style'''&amp;lt;code&amp;gt;show_as_tab: no&amp;lt;/code&amp;gt;'''. --&amp;gt;&lt;br /&gt;
*'''&amp;lt;code&amp;gt;Navigation_style: Side_tabs&amp;lt;/code&amp;gt;''' -- The main modules in the top model appear as a column of tabs on the left of the window. Click a tab to show the diagram for that module.&lt;br /&gt;
&amp;lt;!--Remove for now * '''&amp;lt;code&amp;gt;Navigation_style: Two_side_tabs&amp;lt;/code&amp;gt;'''  -- The top tabs reflect the main modules in the top model. Clicking a top tab shows a a set of subtabs, reflecting the submodules of main module (tab) selected. Needs to be used with the style '''&amp;lt;code&amp;gt;show_as_tab: no&amp;lt;/code&amp;gt;'''.--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We describe each in more detail below.&lt;br /&gt;
&lt;br /&gt;
===Outline Tree===&lt;br /&gt;
&lt;br /&gt;
By default, when using the Outline Navigation style, ACP shows an expandable outline tree of modules on the left hand side of the window, similar to the Outline view in Analytica on the desktop. This makes it easy to navigate a model with an extensive hierarchy of modules. &lt;br /&gt;
&lt;br /&gt;
*'''&amp;lt;code&amp;gt;Show_outline: yes&amp;lt;/code&amp;gt;''' -- The default, and unecessary for Outline Navigation style. It is generally redundant with other Navigation styles since the tabs or hierarchy show the same information, and the Outline takes up screen space. But you can add  it to the top diagram's AcpStyles attribute if you want to show the Outline tree with other Navigation styles.&lt;br /&gt;
&lt;br /&gt;
{{CalloutAnnotationBlock|[[File:Outline tree 6.0 01.png]]|{{CalloutAnnotation|Market model with&amp;lt;br&amp;gt;Outline Tree|v=80|pt=10,106}}}}&lt;br /&gt;
*'''&amp;lt;code&amp;gt;show_outline: no&amp;lt;/code&amp;gt;''' --  When using the Acp Style library this is set by default for Navigation styles other than Outline. For small models, and most web apps, you may want to suppress the Outline view even when using the Outline Navigation style. Do this by inserting this text into the top diagram's AcpStyles attribute (See image below). (If a model has only one diagram,  i.e. with no modules, it never shows the outline tree.)&amp;lt;br/&amp;gt;&lt;br /&gt;
{{CalloutAnnotationBlock|[[File:Outline tree 6.0 02.png]]|{{CalloutAnnotation|Market model with &amp;lt;br/&amp;gt;'''&amp;lt;code&amp;gt;show_outline: no&amp;lt;/code&amp;gt;'''|v=80}}}}&lt;br /&gt;
&lt;br /&gt;
===Top Diagram Only===&lt;br /&gt;
&lt;br /&gt;
Set by adding '''&amp;lt;code&amp;gt;navigation_style: top_diagram_only&amp;lt;/code&amp;gt;''' to the AcpStyles attribute of the top diagram. &amp;lt;!--Not to be confused with the AcpStyles flag of similar name: '''&amp;lt;code&amp;gt;top_diagram_only: yes&amp;lt;/code&amp;gt;'''. -This is a navigation style most easily set with the ACP styles library. --&amp;gt; The Styles library will set the flag &amp;lt;!--'''&amp;lt;code&amp;gt;top_diagram_only:yes&amp;lt;/code&amp;gt;''',--&amp;gt; '''&amp;lt;code&amp;gt;show_outline:no&amp;lt;/code&amp;gt;''' .&lt;br /&gt;
&lt;br /&gt;
===Tabbed Module Navigation===&lt;br /&gt;
&lt;br /&gt;
As an alternative to the Outline view, you can set the '''&amp;lt;code&amp;gt;Navigation_style&amp;lt;/code&amp;gt;''' to use use a tabbed interface which is often more convenient and familiar for web applications. By default, the main model appears as the first tab. You can change this with the style [[AcpStyles_Attribute_Values#Exclude_the_top_level_diagram_from_tabs|show_as_tab:no]] described below.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Replace this section with one that does not talk about two tabs for now - until they are implemented in ACP3 - There are four tabbed styles, Top_tabs and Two_top_tabs, with one or two rows of tabs across the top, respectively; and Side_tabs and Two_side_tabs with one or two columns of tabs down the side. Top_tabs works well if you have up to 5 to 8 modules in the main diagram (tabs), depending on the length of their titles and the width of the ACP window.  If you have a lot of modules, or they have long titles, it may be better to use Side_tabs.  If you have too many modules to fit at the top or side, you can use Two_top_tabs or Two_side_tabs. In those cases, you must organize the modules into a two-level hierarchy with logical groupings. &lt;br /&gt;
&lt;br /&gt;
'Top tabs or side tabs.' The first tab displays the top level diagram, and the remaining tabs display the modules present on the top level diagram of the model.  (The modules will not display on the diagram, so you need to tweak your diagram for playing in ACP so that it looks right without these present). The size of the diagram is determined by the size of the top level diagram window when the model was last saved in Analytica.&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;code&amp;gt;navigation_style: top_tabs&amp;lt;/code&amp;gt;''' This setting instructs ACP to use the 'Tabs across top' navigation style.&lt;br /&gt;
&lt;br /&gt;
:[[File:Top tabs 6.0 01.png]]&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;code&amp;gt;navigation_style: side_tabs&amp;lt;/code&amp;gt;''' This setting instructs ACP to use the 'Side tabs' navigation style.  Side tabs work better than top tabs when there are more module nodes present.&lt;br /&gt;
&lt;br /&gt;
:[[File:Side tabs 6.0 01.png]]&lt;br /&gt;
* &amp;lt;code&amp;gt;Navigation_style: Two_top_tabs&amp;lt;/code&amp;gt; &lt;br /&gt;
* &amp;lt;code&amp;gt;Navigation_style: Two_side_tabs&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
'''These 2 Navigation styles replace the style  &amp;lt;code&amp;gt;two_tiers_tabs:yes&amp;lt;/code&amp;gt; which has been deprecated.'''&lt;br /&gt;
&lt;br /&gt;
These styles are useful for modules with several layers of modules and submodules - to reduce the clutter of the top layer of tabs. Modules in the model's top diagram appear as top tabs (left tabs).  Modules within those top level modules appear as subtabs,  the 'second tier'. When you select a top-level tab, it shows its submodules as subtabs. This means that the top level of modules will not show any contents other than their submodules, so the model needs to be designed with this in mind.&lt;br /&gt;
*Currently these 2 styles must be used with the '''&amp;lt;code&amp;gt;show_as_tab: no&amp;lt;/code&amp;gt;''' style set. &amp;lt;!--Coming soon: Compatibility with '''&amp;lt;code&amp;gt;show_as_tab: yes&amp;lt;/code&amp;gt;'''&lt;br /&gt;
*The selected tab appears with the color of the diagram background of it's module&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
There are two tabbed styles, Top_tabs, with a row of tabs across the top; and Side_tabs with a column of tabs down the side. Top_tabs works well if you have up to 5 to 8 modules in the main diagram (tabs), depending on the length of their titles and the width of the ACP window.  If you have a lot of modules, or they have long titles, it may be better to use Side_tabs.  &lt;br /&gt;
&lt;br /&gt;
'Top tabs or side tabs.' The first tab displays the top level diagram, and the remaining tabs display the modules present on the top level diagram of the model.  (The modules will not display on the diagram, so you need to tweak your diagram for playing in ACP so that it looks right without these present). &lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;code&amp;gt;navigation_style: top_tabs&amp;lt;/code&amp;gt;''' -- This setting instructs ACP to use the 'Tabs across top' navigation style.&lt;br /&gt;
&lt;br /&gt;
[[File:Top tabs 6.0 01.png]]&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;code&amp;gt;navigation_style: side_tabs&amp;lt;/code&amp;gt;''' -- This setting instructs ACP to use the 'Side tabs' navigation style.  Side tabs work better than top tabs when there are more module nodes present.&lt;br /&gt;
&lt;br /&gt;
[[File:Side tabs 6.0 01.png]]&lt;br /&gt;
&lt;br /&gt;
=== Toolbar Tabs ===&lt;br /&gt;
*'''&amp;lt;code&amp;gt;show_tabs: no&amp;lt;/code&amp;gt;''' -- By default, with the Outline Navigation style. ACP shows navigation tabs for &amp;quot;Diagram&amp;quot;, &amp;quot;Object&amp;quot;, &amp;quot;Table&amp;quot;, &amp;quot;Graph&amp;quot; along the top. Use this flag to hide those tabs. If you display the model inputs and outputs on the diagram -- using embedded tables and graphs on the diagram -- your users may not need those tabs.  (You can also use '''&amp;lt;code&amp;gt;show_tabs: yes&amp;lt;/code&amp;gt;''' to explicitly show the tabs in Outline and Top diagram only Navigation styles.) &lt;br /&gt;
{{CalloutAnnotationBlock|[[File:Show tabs no 6.0 0.1.png]]|{{CalloutAnnotation|Market model with &amp;lt;br/&amp;gt;'''&amp;lt;code&amp;gt;show_tabs: no&amp;lt;/code&amp;gt;'''|v=80|pt=232,37|path=t!-}}}}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Module hierarchy bar ===&lt;br /&gt;
Using tabbed navigation, ACP shows the model hierarchy in a bar at the top of the diagram by default. The model hierarchy header shows you where you are in a large model by listing the titles of the ancestor modules in which the current diagram is nested.  You can click any ancestor to click up levels in the hierarchy. The Hierarchy Bar takes up much less screen real estate than the Outline Tree. ACP doesn't show the hierarchy bar when you are viewing a top level module, or if the module title is already in the selected tab. &amp;lt;!--With a two-level tab navigation, it shows the hierarchy bar only when viewing a module nested 3 or more levels down. Basically, the hierarchy header does not duplicate what you can see in the tabs.--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that this setting is not based on a AcpStyles attribute, but rather on the ''Show module hierarchy'' check box in the model [[Preferences]] in Analytica.  If you want to set this preference manually, with the model opened in Analytica, on the [[Edit menu]], select '''Preference...''', and check (or uncheck) the ''Show module hierarchy'' checkbox. &lt;br /&gt;
&lt;br /&gt;
If you are using the ACP styles library, the Styles library will set this to the default setting automatically once you select a Navigation style. But you have the option of changing it if, for instance you want to show the Outline and the Hierarchy bar.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--:[[Image:Acp hh.png]]--&amp;gt;&lt;br /&gt;
===Auto zoom ===&lt;br /&gt;
*'''&amp;lt;code&amp;gt;auto_zoom_diagrams: yes&amp;lt;/code&amp;gt;''' -- ACP automatically zooms the UI to fit the browser window -- the most constraining of width or height so it retains the aspect ratio of the diagram. Works with zoom in and zoom out. Auto Zoom will allow a model to go down to 50% of its size or up to 200% of its size. If the model does not fit at 50% size, the window will show scroll bars. This Acp style has no effect if '''&amp;lt;code&amp;gt;Use_top_diagram_size:Yes &amp;lt;/code&amp;gt;''' is present, you can use only one or the other. You can also set '''&amp;lt;code&amp;gt;auto_zoom_diagrams: no&amp;lt;/code&amp;gt;''' which is the default. (This is a model level setting and is added to the top diagram of a model).&lt;br /&gt;
&lt;br /&gt;
===Customize zoom levels===&lt;br /&gt;
AcpStyles for controlling the max/min zoom when '''&amp;lt;code&amp;gt;auto_zoom_diagram: yes&amp;lt;/code&amp;gt;''' is set. The default if these styles are not set is as above - 50% and 200%. The easiest way to set these is with the [[ACP_Style_Library]] - where the controls are in the Esoteric ACP styles module. This is available from the Hamburger menu in ACP. Note that in order to see this effect, the '''&amp;lt;code&amp;gt;Browser window size&amp;lt;/code&amp;gt;''' needs to have the screen size pulldown menu set to '''&amp;lt;code&amp;gt;Auto zoom&amp;lt;/code&amp;gt;''' as well. &lt;br /&gt;
*'''&amp;lt;code&amp;gt;zoom_min_percent: 75&amp;lt;/code&amp;gt;''' (means that the minimum zoom level will be 75% or .75)&lt;br /&gt;
*'''&amp;lt;code&amp;gt;zoom_max_percent: 125&amp;lt;/code&amp;gt;''' (means the that max zoom level will be 125% or 1.25)&lt;br /&gt;
&lt;br /&gt;
===Use top diagram size for all ACP windows===&lt;br /&gt;
*'''&amp;lt;code&amp;gt;Use_top_diagram_size:Yes &amp;lt;/code&amp;gt;''' --  Sets the size of all diagrams based on the size of the diagram window of the top level when the model was last viewed in Desktop Analytica (in non-maximized mode).  '''&amp;lt;code&amp;gt;Use_top_diagram_size:No &amp;lt;/code&amp;gt;''' is the same as if the flag is not set, and is the default  - the ACP diagram will use the entire browser window.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--Not in ACP3 yet - ER519&lt;br /&gt;
===Display Only a Single Diagram===&lt;br /&gt;
*'''&amp;lt;code&amp;gt;top_diagram_only: yes&amp;lt;/code&amp;gt;''' -- Use this flag if you want to restrict users access to only the top diagram. With this flag, any action that would normally bring up a different diagram will just reload the top diagram.  (If you are using this setting, you will also want to also not display the Outline Tree as explained above, since clicking on the modules in the Outline will have no effect.)&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
===Show or hide the Dashboard Title and Model title===&lt;br /&gt;
*'''&amp;lt;code&amp;gt;show_model_title: no&amp;lt;/code&amp;gt;''' -- Hide the title of the model, which appears by default in the top Teal bar.&lt;br /&gt;
&lt;br /&gt;
*'''&amp;lt;code&amp;gt;show_diagram_title: yes&amp;lt;/code&amp;gt;''' --  Use  to show the dashboard title at the top of the diagram. Or &amp;lt;code&amp;gt;show_diagram_title: no&amp;lt;/code&amp;gt; to suppress the diagram title, but not really necessary because ACP does not show the diagram title by default.&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
===Hide the Banner and Logo===&lt;br /&gt;
Another flag it's easier to use the [[ACP Style Library]] to set, since it is only compatible with the toolbar tabs hidden. The Styles library changes all the flags at once, and prevents you from entering incompatible combinations.&lt;br /&gt;
&lt;br /&gt;
*'''&amp;lt;code&amp;gt;show_banner: no&amp;lt;/code&amp;gt;''' &lt;br /&gt;
::Hides the banner space usually present at the top of ACP. The banner typically contains the Lumina Logo, the '''Parent Diagram''' button, tabs, '''Close Model''' button, and '''Save''' button.&lt;br /&gt;
&lt;br /&gt;
:*This could be useful for customizing the appearance of a model [[Putting_ACP_in_a_Web_Page|embedded in a web page]], for instance.&lt;br /&gt;
:[[File:Banner area 01.PNG]]&lt;br /&gt;
:*If you play a model without the banner area in ACP, there isn't a convenient way to close the model without closing the browser.&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Exclude diagram(s) from tabs===&lt;br /&gt;
&lt;br /&gt;
When using tabbed navigation, you can select those modules (from the top model diagram) that you want to appear as a tab in ACP. The default is for all to appear as tabs. You should use the ''Show modules as tabs'' choice menu in the '''&amp;lt;code&amp;gt;ACP Navigation styles&amp;lt;/code&amp;gt;''' section of the [[ACP Style Library]] if you want to set this flag,, and if you also want to hide the modules corresponding to these tabs [[ChangeNodeVisibility|hidden]], so that the model viewer cannot see them.&lt;br /&gt;
&lt;br /&gt;
*Optionally, Enter the text '''&amp;lt;code&amp;gt;Show_as_tab: no&amp;lt;/code&amp;gt;''' in the AcpStyles attribute of the modules you don't wish to show as a tab. The modules themselves will not be hidden with this setting, only the tabs.&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
*'''&amp;lt;code&amp;gt;show_as_tab: no&amp;lt;/code&amp;gt;''' &lt;br /&gt;
::Excludes the top level diagram and just shows the submodules of the top level diagram as tabs. Since the top diagram will not display in ACP, you include the key user interface pages as modules in the main model. Can be used only with 'Top tabs' or 'Side tabs' styles. &lt;br /&gt;
*When setting tabbed Navigation styles using the ACP Styles Library, the default is for the Top level diagram to be included, except with two tiers of tabs, for which it is (Currently) required to exclude the top diagram from the tabs.&lt;br /&gt;
&lt;br /&gt;
If you want to see what it looks like, play this model [[Media:Show as tab no.ana|Array examples]] in ACP, with the '''&amp;lt;code&amp;gt;show_as_tab: no&amp;lt;/code&amp;gt;''' style in the AcpStyles  attribute, and set to tabs along top.&lt;br /&gt;
&lt;br /&gt;
:[[File:Show as tab no02.png]]&lt;br /&gt;
&lt;br /&gt;
*Play this model in ACP and the top level diagram does not show. Rather the diagram for 'Intro to Arrays' shows as the first tab and then the other tabs.'''&lt;br /&gt;
&lt;br /&gt;
:[[File:Show as tab no01.png]]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
===Tab color===&lt;br /&gt;
&lt;br /&gt;
When using Tabbed Navigation, you can use these flags to control how the color of the tabs display on your model in ACP. To use, add one of them to the AcpStyles attribute of the top level diagram of your model. They have no effect if added to a module other than the top diagram.&lt;br /&gt;
&lt;br /&gt;
*'''&amp;lt;code&amp;gt;Tab_color: Default &amp;lt;/code&amp;gt;''' The default. Non-selected tabs are bluish white. The selected tab uses the background color for that diagram.&lt;br /&gt;
*'''&amp;lt;code&amp;gt;Tab_color: Background &amp;lt;/code&amp;gt;''' All tabs use their diagram background color, whether selected or not&lt;br /&gt;
*'''&amp;lt;code&amp;gt;Tab_color: Node &amp;lt;/code&amp;gt;'''  The selected Tab uses its diagram background color; The other tabs use the color of their Module node (not their diagram background color).  You can use this to change the color of the tabs by modifying their node color in an Analytica functions.&lt;br /&gt;
&lt;br /&gt;
== Model level styles for diagram nodes. ==&lt;br /&gt;
&lt;br /&gt;
These model-level styles affect how all nodes are displayed in diagrams.  &lt;br /&gt;
&lt;br /&gt;
=== Node shadows and bevels  ===&lt;br /&gt;
&lt;br /&gt;
By default ACP displays nodes without shadows or bevels (for now) , so they look like this:&lt;br /&gt;
:[[Image:Nodes no shadow or bevel.png]] &lt;br /&gt;
&lt;br /&gt;
Set this flag to show a drop shadow behind each node, giving a kind of 3D effect:&lt;br /&gt;
&lt;br /&gt;
*'''&amp;lt;code&amp;gt;node_drop_shadow: yes&amp;lt;/code&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
:[[Image:Nodes drop shadow.png]] &lt;br /&gt;
&lt;br /&gt;
Set this flag to display a bevel border for each node, giving another kind of 3-D effect: &lt;br /&gt;
*'''&amp;lt;code&amp;gt;bevel_node_border: yes&amp;lt;/code&amp;gt;''' &lt;br /&gt;
&lt;br /&gt;
:[[Image:Nodes beveled border.png]] &lt;br /&gt;
&lt;br /&gt;
===Node hover highlighting===&lt;br /&gt;
&lt;br /&gt;
By default, ACP displays a highlight -- a contrasting light rectangle behind a node -- when you move the cursor over the node:&lt;br /&gt;
&lt;br /&gt;
[[File:acp hover hl.png]]&lt;br /&gt;
&lt;br /&gt;
You can switch it off by setting:&lt;br /&gt;
*'''&amp;lt;code&amp;gt;show_hover_highlight: No&amp;lt;/code&amp;gt;''' &lt;br /&gt;
&lt;br /&gt;
=== Balloon Help  ===&lt;br /&gt;
&lt;br /&gt;
When you move the cursor over a node, ACP usually shows a &amp;quot;balloon&amp;quot; popup next to the node with the description of the node (if it has one) to help end users understand what its for, or what to enter for a user input. If the node has no description, the [[help balloons|balloon help]] will not appear.&lt;br /&gt;
&lt;br /&gt;
*'''&amp;lt;code&amp;gt;show_id_in_balloon: yes&amp;lt;/code&amp;gt;''' Use this flag to show each node's identifier below its title in the balloon -- unless the identifier and title are identical (except for spaces which are replaced by underscores). This flag goes in the AcpStyles of the model and apply to all nodes in the model.&lt;br /&gt;
&amp;lt;!-- not implemented in ACP3 &lt;br /&gt;
*'''&amp;lt;code&amp;gt;show_definition_in_balloon: yes&amp;lt;/code&amp;gt;''' &lt;br /&gt;
::Use this flag to show the node's definition in the balloon below the description.&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&amp;lt;!-- not implemented in ACP3 &lt;br /&gt;
*'''&amp;lt;code&amp;gt;hover_balloon_delay&amp;lt;/code&amp;gt;''' &lt;br /&gt;
::When you mouse over a node, there's a short delay of about half a second before it displays the balloon (to prevent wild balloon appearance when you move the cursor rapidly over a diagram.) You can tweak this delay time measured in milliseconds by inserting this flag. E.g. '''&amp;lt;code&amp;gt;hover_balloon_delay: 200&amp;lt;/code&amp;gt;''' to reduce the delay to .2 seconds.&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
The flags above go in the AcpStyles of the model and apply to all nodes in the model. You can also modify some aspects of the balloon separately for each node by inserting these flags in AcpStyles for each node: --&amp;gt;&lt;br /&gt;
*'''&amp;lt;code&amp;gt;show_hover_balloon: no&amp;lt;/code&amp;gt;'''&lt;br /&gt;
::Insert this flag in the AcpStyles for a node, to suppress display of its balloon.&lt;br /&gt;
&amp;lt;!--title no longer shows in the balloon&lt;br /&gt;
*'''&amp;lt;code&amp;gt;show_hover_balloon_title: no&amp;lt;/code&amp;gt;'''&lt;br /&gt;
::Insert this flag in the AcpStyles for a node, to suppress its title in the balloon.--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==ACP styles inheritance==&lt;br /&gt;
This is the order of inheritance for Acpstyles below that apply to tables and graphs. Styles at a higher level take precedence over the lower precedence styles. (Inheritance doesn't apply to the ACPstyles described above that apply only at the Model level.)&lt;br /&gt;
# '''Variable''' (includes Tall nodes): Acpstyles applied to an individual variable will take precedence over all other styles. A variable with a style of &amp;lt;code&amp;gt;show_title:no&amp;lt;/code&amp;gt; will not show the title, even if the model level style is &amp;lt;code&amp;gt;show_title:yes&amp;lt;/code&amp;gt;, and if that node shows it's result in a frame node the variable style will override the frame node style.&lt;br /&gt;
# '''Frame''' : An Acpstyle set for a frame node will affect any variable shown in that frame that doesn't have its own settings. These will also override any styles at the model level.&lt;br /&gt;
# '''Model ACP style defaults''': Acpstyles that you can enter into the Acptyles attribute of the top diagram of your model. These will override the ACP defaults, and will be inherited by frame nodes and variables in the model that don't have their own Acpstyle.&lt;br /&gt;
# '''ACP style defaults for ACP''': The default style ACP uses if you have no specific setting for that style. Eg for show_index_menus the default is fly-in and that is what will show if you don't enter a different show_index_menus: Acpstyle flag in the Acpstyle for the top diagram (model level) or for frame nodes or variables.&lt;br /&gt;
&lt;br /&gt;
==ACP Styles for tables and graphs==&lt;br /&gt;
&lt;br /&gt;
These styles affect how result graphs and tables are displayed in ACP, including in [[Embed_table_or_graph_with_ACP#Frame_nodes|Tall nodes]] and [[Embed_table_or_graph_with_ACP#Tall_nodes|˞Frame nodes]]. They provide options not (yet) available in Desktop Analytica. ACP has default settings for these. You can override these settings for the entire model. You can also set them for [[Embed_table_or_graph_with_ACP#Frame_nodes|˞Frame nodes]], which will apply to all results shown in the Frame and override the ACP and model level settings. And you can set these styles for individual variables, which will override any settings in the Model or Frame. As always, it's easiest to set the using the [[ACP_Style_library]]. &lt;br /&gt;
&lt;br /&gt;
None of these styles apply to tab result views using the default Navigation_style: Outline.&lt;br /&gt;
&lt;br /&gt;
===Show or hide the Description===&lt;br /&gt;
&lt;br /&gt;
*'''&amp;lt;code&amp;gt;Show_description: n&amp;lt;/code&amp;gt;''' If &amp;lt;code&amp;gt;n &amp;gt; 0 &amp;lt;/code&amp;gt; it shows the Description of the variable above the table or graph using up to n% of the vertical space available. If that's not big enough to show the entire description, it shows a vertical scroll bar. Iif you don't want to show the description at all, set &amp;lt;code&amp;gt;n = 0&amp;lt;/code&amp;gt;. Default if not mentioned, is one third, i.e. &amp;lt;code&amp;gt;Show_description: 33&amp;lt;/code&amp;gt;.  You can set this style at the model level for all Frame or Tall nodes, and you can override this default for any individual node.&lt;br /&gt;
&lt;br /&gt;
===Show or hide the Object view icon===&lt;br /&gt;
*'''&amp;lt;code&amp;gt;Object_in_Frame:yes/no&amp;lt;/code&amp;gt;''': With this style set, it shows an object view hover icon at the top right of a frame node or tall node when showing a graph or table view. Click this icon to show the object window view. The object view shows the Table and Graph hover icon to go back to the table or graph view.  You can set '''&amp;lt;code&amp;gt;Object_in_frame&amp;lt;/code&amp;gt;''' style at either the top level of the model or in an individual frame node, which overrides the top level setting. When working with tall nodes, you can set '''&amp;lt;code&amp;gt;Object_in_frame&amp;lt;/code&amp;gt;''' style at the top level or in the original variable's ACP style setting, which overrides the top level setting.&lt;br /&gt;
&lt;br /&gt;
===Show or hide the title===&lt;br /&gt;
&lt;br /&gt;
*'''&amp;lt;code&amp;gt;Show_title&amp;lt;/code&amp;gt;''': Set &amp;lt;code&amp;gt;Show_title: yes&amp;lt;/code&amp;gt; to show or &amp;lt;code&amp;gt;Show_title: no&amp;lt;/code&amp;gt; to stop showing the Title and units of a selected variable. This style can be used at the model level, for frame nodes or for individual nodes, but controls  whether or not the Title and units show in Frame nodes or tall nodes. &lt;br /&gt;
&lt;br /&gt;
===Show or hide the Graph-Table icon===&lt;br /&gt;
&lt;br /&gt;
*'''&amp;lt;code&amp;gt;Show_graph_table_icon:no&amp;lt;/code&amp;gt;''' Hides the icon in the top right of a Result that lets you toggle between Graph and Table view. This applies to [[Embed_table_or_graph_with_ACP|Frame nodes and tall nodes]]. This style can be used for  the entire model, for frame nodes or for individual nodes . You set them in the AcpStyles attribute.  Conversely, you can set  '''&amp;lt;code&amp;gt;Show_graph_table_icon:yes&amp;lt;/code&amp;gt;'''. This is the default so not usually necessary at the model level, but can be used in a frame node or variable to override the model default or override a frame node setting.&lt;br /&gt;
&lt;br /&gt;
===Show or hide the Uncertainty view menu===&lt;br /&gt;
By default, in ACP, as in desktop Analytica, the [[Uncertainty views]] menu appears above each result graph or table to let you select [[Mid]] to display its deterministic value, or Mean, Probability distribution, and other ways to display a probabilistic value.  &lt;br /&gt;
&lt;br /&gt;
You can override this default behavior with this ACP style for the entire model, [[Embed_table_or_graph_with_ACP#Frame_nodes|Frame nodes]], or for individual variables. The Uncertainty view menu is always present in tab result views.&lt;br /&gt;
*'''&amp;lt;code&amp;gt;Show_uncertainty_view: No&amp;lt;/code&amp;gt;''' Never show the uncertainty menu in frame nodes or tall result nodes. Suitable for models with no probabilistic values, or if you want to fix a particular probabilistic view for each frame node or variable so that ACP users can't change it.&lt;br /&gt;
*'''&amp;lt;code&amp;gt;Show_uncertainty_view: Yes&amp;lt;/code&amp;gt;''' Always show the uncertainty menu even for variables that are not probabilistic, as in Desktop Analytica. This is the default and not normally necessary at the model level, but can be used to customize which frame nodes or variables to show the uncertainty view menu when the model level style is set to '''&amp;lt;code&amp;gt;Show_uncertainty_view: No&amp;lt;/code&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
===Show or hide the Index menus and Pivoters/slicers===&lt;br /&gt;
*'''&amp;lt;code&amp;gt;Show_index_menus: Fly-in&amp;lt;/code&amp;gt;''' By default (the same as if there is no show_index_menu: setting) the index menus are not shown in [[https://wiki.analytica.com/index.php?title=Embed_table_or_graph_with_ACP|frame nodes or tall nodes]] (but slicers are), since often the modeler has already chosen the pivot they want to use. And because these menus take up valuable screen space. But if you hover over the frame node (or tall node) there is a fly-in pivoter control. If you click this it toggles - on or off - the visibility of the pivoters; allowing you to pivot the result table or graph and then close the pivoters to give you more space.&lt;br /&gt;
*'''&amp;lt;code&amp;gt;Show_index_menus: Yes&amp;lt;/code&amp;gt;''' If you do want to allow users to be able to pivot or change the slice of the table or graph, without using the fly-in, then use use show_index_menus:yes. Always present in tab result views.&lt;br /&gt;
*'''&amp;lt;code&amp;gt;Show_index_menus: No&amp;lt;/code&amp;gt;''' If show_index_menus:no is set then the indexes and pivoters will not show and there is no fly-in, but the slicers will still be present.&lt;br /&gt;
*'''&amp;lt;code&amp;gt;Show_index_menus: Not_even_slicers&amp;lt;/code&amp;gt;''' If you don't want to show any pivoters or slicers, you can set show_index_menus:Not_even_slicers.&lt;br /&gt;
&lt;br /&gt;
===Table filtering===&lt;br /&gt;
'''&amp;lt;code&amp;gt;Show_Table_Filtering: no&amp;lt;/code&amp;gt;''' Turns off the ability to filter tables by column, and reverts to the previous sort functionality. [[Tables_in_ACP#Sort_columns]]&amp;lt;br /&amp;gt;&lt;br /&gt;
'''&amp;lt;code&amp;gt;Show_Table_Filtering: yes&amp;lt;/code&amp;gt;''' The default - shows the table filtering icons&lt;br /&gt;
&lt;br /&gt;
===Autocalc===&lt;br /&gt;
&lt;br /&gt;
In the  [[ACP Style Library]], Autocalc looks like a style you can set for a model, module or variable. It controls whether ACP evaluates each variable and shows its results automatically when you view a Diagram or tab showing the -- instead of the default Analytica behavior where the end user has to click on a Calc button to compute a result.  With Autocalc on, a result in view also recomputes automatically when you change an input that influences it.&lt;br /&gt;
&lt;br /&gt;
Autocalc is not actually an ACPStyle in ACP3. (It was in ACP1.)  Autocalc is implemented using the Desktop Analytica functionality  for [[Proactive_Evaluation]].&lt;br /&gt;
&lt;br /&gt;
== Node Level Settings  ==&lt;br /&gt;
&lt;br /&gt;
These style flags and options apply to individual nodes (variables), rather than the model as a whole. So, you set these flags on the AcpStyles for selected objects (nodes).&lt;br /&gt;
&lt;br /&gt;
=== Other node level flags ===&lt;br /&gt;
=== Prevent nodes from showing on the diagram ===&lt;br /&gt;
&lt;br /&gt;
*'''&amp;lt;code&amp;gt;Show_Object: no&amp;lt;/code&amp;gt;''' &lt;br /&gt;
You can prevent nodes or modules from showing on the diagram of your model, by adding this flag to the AcpStyles attribute of the object you wish to hide. Once the model is shown in ACP the objects aren't visible.&lt;br /&gt;
&lt;br /&gt;
== Modifying ACP menus==&lt;br /&gt;
&lt;br /&gt;
Normally, ACP offers menus that appear when you press one of the three icons on the right of the top teal bar. These ACP styles let you modify these menus.&lt;br /&gt;
&lt;br /&gt;
===Hide the Save options===&lt;br /&gt;
&lt;br /&gt;
*'''&amp;lt;code&amp;gt;Hide_save_button: yes &amp;lt;/code&amp;gt;''' Set this model ACP style option to exclude the  'Save this model' and 'Save model as...' from the ACP Close menu. It prevents  users from saving over your models or saving other versions. &lt;br /&gt;
*''This style cannot currently be set from the ACP style library, since it would allow users to show the save and save as menu options and then save changes even if the modeler does not want to allow it.''&lt;br /&gt;
&lt;br /&gt;
===Remove Help menu items===&lt;br /&gt;
&lt;br /&gt;
These styles add menu items to or remove items from the help (?) menu if added to the AcpStyles of the top diagram of your model. For [[ACP_Server_License|ACP installations]]  on an intranet, these standard links may not be accessible. On the other hand you may want to offer a special help page for a particular model.&lt;br /&gt;
&lt;br /&gt;
*'''&amp;lt;code&amp;gt;Remove_help_menu_options: Text&amp;lt;/code&amp;gt;&lt;br /&gt;
This style allows you to list one or more of the standard options to remove from the help (?) menu. Replace &amp;lt;code&amp;gt;Text&amp;lt;/code&amp;gt; with one or more of the following: &amp;lt;code&amp;gt;ACP_Online_docs, Analytica_Q_A_forum, Tech_support&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
(Note: The help menu item &amp;lt;code&amp;gt;Connection status&amp;lt;/code&amp;gt; cannot currently be removed).&lt;br /&gt;
&lt;br /&gt;
===Add Help menu item===&lt;br /&gt;
*'''&amp;lt;code&amp;gt;Add_help_menu_option: Text|URL&amp;lt;/code&amp;gt;''' &lt;br /&gt;
Adds another menu item, for example: &amp;lt;code&amp;gt;Add_help_menu_option: How to use this model...|https://www.lumina.com&amp;lt;/code&amp;gt; adds a menu item to the help (?) menu with the text &amp;quot;How to use this model...&amp;quot; and opens the link when clicked.&lt;br /&gt;
&lt;br /&gt;
===Add download this model to the Close menu===&lt;br /&gt;
*'''&amp;lt;code&amp;gt;save_menu_download: yes&amp;lt;/code&amp;gt;'''&lt;br /&gt;
This AcpStyle is controlled by a setting in the [[Customizing_an_ACP_server#The_acpConfig.json_file|AcpConfig.json]] file. On Lumina's acp.analytica.com server it is turned on.&lt;br /&gt;
With this AcpStyle in the model, ''&amp;lt;code&amp;gt;&amp;quot;download this model&amp;quot;&amp;lt;/code&amp;gt;'' is added to the close menu at the top right of the ACP GUI.&lt;br /&gt;
When set, this will allow anyone to download the model - even a reviewer, and even from an email invite.&lt;br /&gt;
*'''&amp;lt;code&amp;gt;save_menu_download: no&amp;lt;/code&amp;gt;''' (default if not set)&lt;br /&gt;
*'''&amp;lt;code&amp;gt;save_menu_download:Prompt_to_download_free&amp;lt;/code&amp;gt;'''.  This adds a popup dialog with a download link and prompt to download the Analytica free installer.&lt;br /&gt;
''This style cannot be set from the ACP Style library, since it would allow reviewers to change the style and download the model, even if the modeler does not  want to allow that.''&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
* [[ACP Style Library]] &lt;br /&gt;
* [[media:ACP style library.ana]]&lt;br /&gt;
* [[Analytica Cloud Platform]]&lt;br /&gt;
* [[ACP Rendering tables and graphs on the diagram]]&lt;br /&gt;
* [[Putting ACP in a Web Page]]&lt;br /&gt;
* [[Help balloons]]&lt;br /&gt;
* [[Attributes]]&lt;br /&gt;
* [[Manage attributes]]&lt;/div&gt;</summary>
		<author><name>Mhenrion</name></author>
	</entry>
	<entry>
		<id>https://docs.analytica.com/index.php?title=What%27s_new_in_Analytica_7.0%3F&amp;diff=63751</id>
		<title>What's new in Analytica 7.0?</title>
		<link rel="alternate" type="text/html" href="https://docs.analytica.com/index.php?title=What%27s_new_in_Analytica_7.0%3F&amp;diff=63751"/>
		<updated>2026-02-18T17:01:04Z</updated>

		<summary type="html">&lt;p&gt;Mhenrion: /* Index label auto updates */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[category:What's new pages]]&lt;br /&gt;
[[category:Analytica releases]]&lt;br /&gt;
&lt;br /&gt;
[[Analytica 7.0]] will be the next major Analytica release and is currently in [[Beta Tester Page|beta testing]]. Go to [[Beta Tester Page]] to try it. The current official release is [[Analytica 6.6]]. &lt;br /&gt;
&lt;br /&gt;
==Highlights of Analytica 7.0==&lt;br /&gt;
&lt;br /&gt;
* '''[[#Python integration|Python integration]]:''' The major enhancement is integration with Python and hence the entire Python ecosystem of libraries. You can easily call functions from Python libraries, access Python variables, and even write Python code right inside Analytica variables and functions. So now you can mix and match Analytica and Python according to which language you think best for your modeling or coding needs.&lt;br /&gt;
*  '''[[#Index label auto updates|Index label auto updates]]:''' A common source of errors has been when you change a text label in an Index without remembering to change expressions that refer to that same text label. Changes to labels now update automatically in expressions in most cases.&lt;br /&gt;
*  The '''Analytica Enterprise'''' edition has been renamed the [[#Developer Edition (formerly known as Enterprise) |Developer edition]], which better reflects what it is.&lt;br /&gt;
* It introduces two new object Classes:  &lt;br /&gt;
** [[Struct]] lets you bundle disparate values, like text, numbeers, atoms and arrays, together in one object that does not array abstract -- similar to Records and Classes in other languages).  &lt;br /&gt;
** [[Callable]] is like a user-defined Function but it's Definition can be a [[handle]] to a Python class or a Python function. &lt;br /&gt;
* [[ParseJSON]] and [[MakeJSON]] now use Structs, which are much more convenient for representing the hierarchical structure of JSON.&lt;br /&gt;
* [[#SpreadsheetOpen|Read and write spreadsheets without Excel]]:  This is faster and more robust, and you don't need Excel installed.&lt;br /&gt;
&lt;br /&gt;
== [[Using Python from Analytica|Python integration]] ==&lt;br /&gt;
&lt;br /&gt;
You can now write Python code inside Analytica definitions! It's easy to call Python functions, with Analytica-style Intelligent Arrays!. So you can access the vast ecosystem of Python libraries (''modules'' in Python lingo). Among the gazillion possibilities are specialized libraries for data visualization, statistics, machine learning, and much more.&lt;br /&gt;
It means that you can mix and match Analytica and Python -- write Analytica code for what's easiest in Analytica and Python code for what's easiest in Python.  &lt;br /&gt;
&lt;br /&gt;
See: [[Using Python from Analytica]]&lt;br /&gt;
(In [[Analytica Developer]] edition or better). &lt;br /&gt;
&lt;br /&gt;
For the Analytica modeler, this puts a ton of resources at your fingertips. &lt;br /&gt;
&lt;br /&gt;
It's also pretty cool for the Python developer. Analytica is like a new interactive development environment with a lot of unique advantages, especially during interactive code development:&lt;br /&gt;
* Analytica's dependency maintenance can be really convenient during interactive development, creating automatic dependency maintenance between your Python functions, classes and variables that don't exist in Python.&lt;br /&gt;
* The visual influence diagram layout can be a super useful to way organize and visualize your code.&lt;br /&gt;
* It naturally encourages declarative code practices, which leads to better and more maintainable coding style.&lt;br /&gt;
* You get the benefits of Analytica's edit tables, plus for results, Analytica's multi-D result tables and one-click, no-code, graphing.&lt;br /&gt;
* It is easy to wrap existing Python models to get Monte Carlo, parametric analysis and sensitivity analysis with Analytica ease.&lt;br /&gt;
* Sometimes one or the other language is more convenient for a particular task. You can freely switch between whichever language feels better suited to the immediate task, and intermix languages easily.&lt;br /&gt;
&lt;br /&gt;
== Developer Edition (formerly known as Enterprise) ==&lt;br /&gt;
&lt;br /&gt;
Analytica's middle-tier edition formerly known as the ''Enterprise Edition'', it is now called the [[Analytica Developer|Analytica Developer edition]]. That name better reflects what it is--software for developers of decision applications.  If you're now a user of Analytica Enterprise you don't have to update your license or do anything special. The name will just change when you install Analytica 7.0.  In Analytica docs, when you select &amp;quot;7.0&amp;quot; on the release bar (at the top of pages that have release-contingent content), all the docs automatically use the new Analytica Developer edition name. &lt;br /&gt;
&lt;br /&gt;
== Analytica language extensions ==&lt;br /&gt;
&lt;br /&gt;
=== Index label auto updates ===&lt;br /&gt;
&lt;br /&gt;
When you change the identifier of a variable, Analytica automatically updates all Definitions to use the new name. But, when you change a text label in an Index, it previously caused an error in any Definition using that label. For example, if you have&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 Index Animal := ['Cat', 'Dog']&lt;br /&gt;
 Variable Sound := IF Animal = 'Cat' THEN 'Miaow' ELSE 'Woof'&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
If you change &amp;lt;code&amp;gt; 'Cat'&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;'Feline' &amp;lt;/code&amp;gt; in Index &amp;lt;code&amp;gt;Animal&amp;lt;/code&amp;gt;, the Definition of &amp;lt;code&amp;gt;Sound&amp;lt;/code&amp;gt; will now automatically update to&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 IF Animal = 'Feline' THEN 'Miaow' ELSE 'Woof'&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
It does this wherever it sees &amp;lt;code&amp;gt;Animal= 'Cat'&amp;lt;label&amp;gt;&amp;lt;/code&amp;gt;. If you use an index label in a context where the index doesn't normally appear, you should the new [[Index-label dot syntax]] (&amp;lt;code&amp;gt;Animal . 'Cat'&amp;lt;/code&amp;gt;). By associating the label with its index it will automatically update when needed. These [[Keeping text literals consistent with index labels| features]] help you avoiding a common error when updating text labels in Indexes.&lt;br /&gt;
&lt;br /&gt;
=== Callable ===&lt;br /&gt;
&lt;br /&gt;
The new object [[Class]] [[Callable]] is a variable-like object, meaning it has a [[Definition]] and a computed value, but can be used for convenience and documentation when the computed value itself is something that can be called, such as a [[Local function]] (aka ''lambda function''), a [[handle]] to an global function, a Python class or a Python function.&lt;br /&gt;
&lt;br /&gt;
If you &amp;quot;compute&amp;quot; the identity of a callable data item inside a normal [[Variable]] instance, &amp;lt;code&amp;gt;X&amp;lt;/code&amp;gt;, you could call it using the syntax &amp;lt;code&amp;gt;X-&amp;gt;(a,b,c)&amp;lt;/code&amp;gt;. On your influence diagram the object would have a rounded rectangle and thus would not communicate that the result is something that can be called. When you change its class to be a [[Callable]], you can then invoke the call using the syntax &amp;lt;code&amp;gt;X(a,b,c)&amp;lt;/code&amp;gt; and the shape of the node changes to something that resembles a function shape, thus communicating that this holds something that is callable.&lt;br /&gt;
&lt;br /&gt;
To create a callable, first create a [[Variable]] node, then use the [[Class]] dropdown from the [[Object window]] or [[Attribute pane]] to change the class to ''Callable''.&lt;br /&gt;
&lt;br /&gt;
=== Struct ===&lt;br /&gt;
A [[Struct]] defines a new atomic, immutable data type. For use when you need to bundle multiple heterogeneous items and don't want their dimensionalities to interact. Array abstract treats an instance of a Struct as a single cell (an atom).&lt;br /&gt;
&lt;br /&gt;
=== Expression and Lazy qualifiers ===&lt;br /&gt;
An expression passed to a function parameter declared with the qualifier as &amp;lt;code&amp;gt;[[Function_parameter_qualifiers#Expression|Expression]]&amp;lt;/code&amp;gt; can now include local variable identifiers. The local variables are captured (similar to how they would be captured by a [[Local function]]).&lt;br /&gt;
&lt;br /&gt;
A new function parameter qualifier, [[Function_parameter_qualifiers#Lazy]], has been added, which does lazy evaluation of the expression passed to it. In the function Definition, you can use it as if it were a normal value parameter, but evaluation occurs when the value is used rather than when the function is called, and in the evaluation context (which includes the [[Evaluation modes|evaluation mode]]) where the value is used instead as in the context of the call.&lt;br /&gt;
&lt;br /&gt;
=== Excess parameter qualifier ===&lt;br /&gt;
A new function declaration allows a function to tolerate or capture excess named parameters in the call that are not declared as parameter names in the function's Parameters declaration. It can also be used in a [[Struct]] declaration.&lt;br /&gt;
&lt;br /&gt;
== Functions ==&lt;br /&gt;
=== ParseJSON ===&lt;br /&gt;
Changed to parse to [[Struct]]s, thus greatly simplifying and improving the convenience of using JSON in Analytica expressions. &lt;br /&gt;
&lt;br /&gt;
For parsing with a schema, a Struct's declaration serves as the schema, which is far easier and more familiar for an Analytica user than the former scheme for specifying a schema.&lt;br /&gt;
&lt;br /&gt;
[[MakeJSON]] is able to generate JSON from a Struct (or nested structs) as well, which is the most convenient representation for JSON representations.&lt;br /&gt;
&lt;br /&gt;
=== SpreadsheetOpen ===&lt;br /&gt;
Added a new «backend» parameter to [[SpreadsheetOpen]] with a new option of &amp;lt;code&amp;gt;'LibXl'&amp;lt;/code&amp;gt;, allowing you to read and manipulate a spreadsheet without having Excel installed. But unlike the Excel backend, the &amp;lt;b&amp;gt;LibXl&amp;lt;/b&amp;gt; option does not have a calculation engine (so can't recompute cell formulas after you change cells). This option is be better when you simply want to read (or write) data in a *.xlsx file format.&lt;br /&gt;
&lt;br /&gt;
== Example models and libraries ==&lt;br /&gt;
&lt;br /&gt;
* There is a new &amp;quot;Auto insurance claim risk analysis.ana&amp;quot; in the Example Models / Risk Analysis folder.&lt;br /&gt;
* The [[Mutables library]] has been updated. It provides a new [[Mutable]] [[Struct]] which is superior to the older representation, which displays the actual value in result table cells and is atomic. The legacy functions ([[MutableNew]], [[MutableSet]] and [[MutableGet]]) are still there for backward compatibility, but have been changed to just wrap the new Mutable.&lt;br /&gt;
&lt;br /&gt;
== Result tables and graphs ==&lt;br /&gt;
* A blank (none) entry was added to the [[XY_comparison#Use_comparison_index|comparison index pulldown]]. Use this to quickly unset the comparison index without having to re-enter the [[XY_comparison]] dialog. Also, the pulldown is now visible and enabled in browse mode.&lt;br /&gt;
* Comparison variables are no longer summed over slicer indexes that are set to '''Totals''' when the value for that variable does not include the slicer index. Note that this results in some changes to what is displayed in table body cells and in axis scaling on graphs.&lt;br /&gt;
&lt;br /&gt;
== Assista ==&lt;br /&gt;
&lt;br /&gt;
You can now copy-paste from Expression blocks in Assista's response using the little copy icon in the top-right corner of the expression block.&lt;br /&gt;
&lt;br /&gt;
== Experimental ==&lt;br /&gt;
* A way for an Analytica model running in desktop Analytica to [[MCP server in Analytica|act as a Model Context Protocol (MCP) server]] for use by Large Language Models (LLMs).&lt;br /&gt;
&lt;br /&gt;
== ADE ==&lt;br /&gt;
* Added a new example: &amp;lt;code&amp;gt;Mcp_server&amp;lt;/code&amp;gt;.  This is an MCP server that wraps ADE. Among other things, it can give AI agents like Claude Code the ability to build, explore and use Analytica models.&lt;/div&gt;</summary>
		<author><name>Mhenrion</name></author>
	</entry>
	<entry>
		<id>https://docs.analytica.com/index.php?title=What%27s_new_in_Analytica_7.0%3F&amp;diff=63747</id>
		<title>What's new in Analytica 7.0?</title>
		<link rel="alternate" type="text/html" href="https://docs.analytica.com/index.php?title=What%27s_new_in_Analytica_7.0%3F&amp;diff=63747"/>
		<updated>2026-02-18T01:36:14Z</updated>

		<summary type="html">&lt;p&gt;Mhenrion: /* Index label auto updates */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[category:What's new pages]]&lt;br /&gt;
[[category:Analytica releases]]&lt;br /&gt;
&lt;br /&gt;
[[Analytica 7.0]] will be the next major Analytica release and is currently in [[Beta Tester Page|beta testing]]. Go to [[Beta Tester Page]] to try it. The current official release is [[Analytica 6.6]]. &lt;br /&gt;
&lt;br /&gt;
==Highlights of Analytica 7.0==&lt;br /&gt;
&lt;br /&gt;
* '''[[#Python integration|Python integration]]:''' The major enhancement is integration with Python and hence the entire Python ecosystem of libraries. You can easily call functions from Python libraries, access Python variables, and even write Python code right inside Analytica variables and functions. So now you can mix and match Analytica and Python according to which language you think best for your modeling or coding needs.&lt;br /&gt;
*  '''[[#Index label auto updates|Index label auto updates]]:''' A common source of errors has been when you change a text label in an Index without remembering to change expressions that refer to that same text label. Changes to labels now update automatically in expressions in most cases.&lt;br /&gt;
*  The '''Analytica Enterprise'''' edition has been renamed the [[#Developer Edition (formerly known as Enterprise) |Developer edition]], which better reflects what it is.&lt;br /&gt;
* It introduces two new object Classes:  &lt;br /&gt;
** [[Struct]] lets you bundle disparate values, like text, numbeers, atoms and arrays, together in one object that does not array abstract -- similar to Records and Classes in other languages).  &lt;br /&gt;
** [[Callable]] is like a user-defined Function but it's Definition can be a [[handle]] to a Python class or a Python function. &lt;br /&gt;
* [[ParseJSON]] and [[MakeJSON]] now use Structs, which are much more convenient for representing the hierarchical structure of JSON.&lt;br /&gt;
* [[#SpreadsheetOpen|Read and write spreadsheets without Excel]]:  This is faster and more robust, and you don't need Excel installed.&lt;br /&gt;
&lt;br /&gt;
== [[Using Python from Analytica|Python integration]] ==&lt;br /&gt;
&lt;br /&gt;
You can now write Python code inside Analytica definitions! It's easy to call Python functions, with Analytica-style Intelligent Arrays!. So you can access the vast ecosystem of Python libraries (''modules'' in Python lingo). Among the gazillion possibilities are specialized libraries for data visualization, statistics, machine learning, and much more.&lt;br /&gt;
It means that you can mix and match Analytica and Python -- write Analytica code for what's easiest in Analytica and Python code for what's easiest in Python.  &lt;br /&gt;
&lt;br /&gt;
See: [[Using Python from Analytica]]&lt;br /&gt;
(In [[Analytica Developer]] edition or better). &lt;br /&gt;
&lt;br /&gt;
For the Analytica modeler, this puts a ton of resources at your fingertips. &lt;br /&gt;
&lt;br /&gt;
It's also pretty cool for the Python developer. Analytica is like a new interactive development environment with a lot of unique advantages, especially during interactive code development:&lt;br /&gt;
* Analytica's dependency maintenance can be really convenient during interactive development, creating automatic dependency maintenance between your Python functions, classes and variables that don't exist in Python.&lt;br /&gt;
* The visual influence diagram layout can be a super useful to way organize and visualize your code.&lt;br /&gt;
* It naturally encourages declarative code practices, which leads to better and more maintainable coding style.&lt;br /&gt;
* You get the benefits of Analytica's edit tables, plus for results, Analytica's multi-D result tables and one-click, no-code, graphing.&lt;br /&gt;
* It is easy to wrap existing Python models to get Monte Carlo, parametric analysis and sensitivity analysis with Analytica ease.&lt;br /&gt;
* Sometimes one or the other language is more convenient for a particular task. You can freely switch between whichever language feels better suited to the immediate task, and intermix languages easily.&lt;br /&gt;
&lt;br /&gt;
== Developer Edition (formerly known as Enterprise) ==&lt;br /&gt;
&lt;br /&gt;
Analytica's middle-tier edition formerly known as the ''Enterprise Edition'', it is now called the [[Analytica Developer|Analytica Developer edition]]. That name better reflects what it is--software for developers of decision applications.  If you're now a user of Analytica Enterprise you don't have to update your license or do anything special. The name will just change when you install Analytica 7.0.  In Analytica docs, when you select &amp;quot;7.0&amp;quot; on the release bar (at the top of pages that have release-contingent content), all the docs automatically use the new Analytica Developer edition name. &lt;br /&gt;
&lt;br /&gt;
== Analytica language extensions ==&lt;br /&gt;
&lt;br /&gt;
=== Index label auto updates ===&lt;br /&gt;
&lt;br /&gt;
When you change the identifier of a variable, Analytica automatically updates all Definitions to use the new name. But, when you change a text label in an Index, it previously cause cause errors in Definitions using that label. For example, if you have&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  Index Animal := ['Cat', 'Dog']&lt;br /&gt;
  Variable Sound := IF Animal = 'Cat' THEN 'Miaow' ELSE 'Woof'&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
If you change &amp;lt;code&amp;gt; 'Cat'&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;'Feline' &amp;lt;/code&amp;gt; in Index &amp;lt;code&amp;gt;Animal&amp;lt;/code&amp;gt;, the Definition of &amp;lt;code&amp;gt;Sound&amp;lt;/code&amp;gt; will now automatically update to&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
     IF Animal = 'Feline' THEN 'Miaow' ELSE 'Woof'&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
It does this wherever it sees &amp;lt;code&amp;gt;Animal=&amp;lt;label&amp;gt;&amp;lt;/code&amp;gt;. If you use an index label in a context where the index doesn't normally appear, you should the new [[Index-label dot syntax]] (&amp;lt;code&amp;gt;Animal . 'Cat'&amp;lt;/code&amp;gt;). By associating the label with its index it will automatically update when needed. These [[Keeping text literals consistent with index labels| features]] help avoid common errors when updating text labels in Indexes.&lt;br /&gt;
&lt;br /&gt;
=== Callable ===&lt;br /&gt;
&lt;br /&gt;
The new object [[Class]] [[Callable]] is a variable-like object, meaning it has a [[Definition]] and a computed value, but can be used for convenience and documentation when the computed value itself is something that can be called, such as a [[Local function]] (aka ''lambda function''), a [[handle]] to an global function, a Python class or a Python function.&lt;br /&gt;
&lt;br /&gt;
If you &amp;quot;compute&amp;quot; the identity of a callable data item inside a normal [[Variable]] instance, &amp;lt;code&amp;gt;X&amp;lt;/code&amp;gt;, you could call it using the syntax &amp;lt;code&amp;gt;X-&amp;gt;(a,b,c)&amp;lt;/code&amp;gt;. On your influence diagram the object would have a rounded rectangle and thus would not communicate that the result is something that can be called. When you change its class to be a [[Callable]], you can then invoke the call using the syntax &amp;lt;code&amp;gt;X(a,b,c)&amp;lt;/code&amp;gt; and the shape of the node changes to something that resembles a function shape, thus communicating that this holds something that is callable.&lt;br /&gt;
&lt;br /&gt;
To create a callable, first create a [[Variable]] node, then use the [[Class]] dropdown from the [[Object window]] or [[Attribute pane]] to change the class to ''Callable''.&lt;br /&gt;
&lt;br /&gt;
=== Struct ===&lt;br /&gt;
A [[Struct]] defines a new atomic, immutable data type. For use when you need to bundle multiple heterogeneous items and don't want their dimensionalities to interact. Array abstract treats an instance of a Struct as a single cell (an atom).&lt;br /&gt;
&lt;br /&gt;
=== Expression and Lazy qualifiers ===&lt;br /&gt;
An expression passed to a function parameter declared with the qualifier as &amp;lt;code&amp;gt;[[Function_parameter_qualifiers#Expression|Expression]]&amp;lt;/code&amp;gt; can now include local variable identifiers. The local variables are captured (similar to how they would be captured by a [[Local function]]).&lt;br /&gt;
&lt;br /&gt;
A new function parameter qualifier, [[Function_parameter_qualifiers#Lazy]], has been added, which does lazy evaluation of the expression passed to it. In the function Definition, you can use it as if it were a normal value parameter, but evaluation occurs when the value is used rather than when the function is called, and in the evaluation context (which includes the [[Evaluation modes|evaluation mode]]) where the value is used instead as in the context of the call.&lt;br /&gt;
&lt;br /&gt;
=== Excess parameter qualifier ===&lt;br /&gt;
A new function declaration allows a function to tolerate or capture excess named parameters in the call that are not declared as parameter names in the function's Parameters declaration. It can also be used in a [[Struct]] declaration.&lt;br /&gt;
&lt;br /&gt;
== Functions ==&lt;br /&gt;
=== ParseJSON ===&lt;br /&gt;
Changed to parse to [[Struct]]s, thus greatly simplifying and improving the convenience of using JSON in Analytica expressions. &lt;br /&gt;
&lt;br /&gt;
For parsing with a schema, a Struct's declaration serves as the schema, which is far easier and more familiar for an Analytica user than the former scheme for specifying a schema.&lt;br /&gt;
&lt;br /&gt;
[[MakeJSON]] is able to generate JSON from a Struct (or nested structs) as well, which is the most convenient representation for JSON representations.&lt;br /&gt;
&lt;br /&gt;
=== SpreadsheetOpen ===&lt;br /&gt;
Added a new «backend» parameter to [[SpreadsheetOpen]] with a new option of &amp;lt;code&amp;gt;'LibXl'&amp;lt;/code&amp;gt;, allowing you to read and manipulate a spreadsheet without having Excel installed. But unlike the Excel backend, the &amp;lt;b&amp;gt;LibXl&amp;lt;/b&amp;gt; option does not have a calculation engine (so can't recompute cell formulas after you change cells). This option is be better when you simply want to read (or write) data in a *.xlsx file format.&lt;br /&gt;
&lt;br /&gt;
== Example models and libraries ==&lt;br /&gt;
&lt;br /&gt;
* There is a new &amp;quot;Auto insurance claim risk analysis.ana&amp;quot; in the Example Models / Risk Analysis folder.&lt;br /&gt;
* The [[Mutables library]] has been updated. It provides a new [[Mutable]] [[Struct]] which is superior to the older representation, which displays the actual value in result table cells and is atomic. The legacy functions ([[MutableNew]], [[MutableSet]] and [[MutableGet]]) are still there for backward compatibility, but have been changed to just wrap the new Mutable.&lt;br /&gt;
&lt;br /&gt;
== Result tables and graphs ==&lt;br /&gt;
* A blank (none) entry was added to the [[XY_comparison#Use_comparison_index|comparison index pulldown]]. Use this to quickly unset the comparison index without having to re-enter the [[XY_comparison]] dialog. Also, the pulldown is now visible and enabled in browse mode.&lt;br /&gt;
* Comparison variables are no longer summed over slicer indexes that are set to '''Totals''' when the value for that variable does not include the slicer index. Note that this results in some changes to what is displayed in table body cells and in axis scaling on graphs.&lt;br /&gt;
&lt;br /&gt;
== Assista ==&lt;br /&gt;
&lt;br /&gt;
You can now copy-paste from Expression blocks in Assista's response using the little copy icon in the top-right corner of the expression block.&lt;br /&gt;
&lt;br /&gt;
== Experimental ==&lt;br /&gt;
* A way for an Analytica model running in desktop Analytica to [[MCP server in Analytica|act as a Model Context Protocol (MCP) server]] for use by Large Language Models (LLMs).&lt;br /&gt;
&lt;br /&gt;
== ADE ==&lt;br /&gt;
* Added a new example: &amp;lt;code&amp;gt;Mcp_server&amp;lt;/code&amp;gt;.  This is an MCP server that wraps ADE. Among other things, it can give AI agents like Claude Code the ability to build, explore and use Analytica models.&lt;/div&gt;</summary>
		<author><name>Mhenrion</name></author>
	</entry>
	<entry>
		<id>https://docs.analytica.com/index.php?title=User:ACP3_Enhancements_and_fixes&amp;diff=63746</id>
		<title>User:ACP3 Enhancements and fixes</title>
		<link rel="alternate" type="text/html" href="https://docs.analytica.com/index.php?title=User:ACP3_Enhancements_and_fixes&amp;diff=63746"/>
		<updated>2026-02-18T01:28:21Z</updated>

		<summary type="html">&lt;p&gt;Mhenrion: /* Pre release */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;          [[Category: Analytica_Cloud_Platform]]&lt;br /&gt;
[[Analytica_Cloud_Platform#See_also|&amp;lt;&amp;lt;Back to Analytica Cloud Platform]]&lt;br /&gt;
&lt;br /&gt;
The most &lt;br /&gt;
These are changes by build for releases on the staging server, which may not yet be released on the release server. When they are, the issues likely to be of interest to most users are copied over to [[What's new in ACP?]].&lt;br /&gt;
&lt;br /&gt;
The next planned release is build 180. It should be released in mid February 2026.&lt;br /&gt;
&lt;br /&gt;
'''ER''' - Enhancement request number&lt;br /&gt;
'''EW''' - Bug number &lt;br /&gt;
'''W''' - Monday item number&lt;br /&gt;
&lt;br /&gt;
=='''Pre release'''==&lt;br /&gt;
&lt;br /&gt;
Issues that have been implemented or fixed since the Current release (build 174) .&lt;br /&gt;
&lt;br /&gt;
===Fixed or implemented in ACP build 181===&lt;br /&gt;
*M-06433       Error message box sometimes shows errors from a previous model when opening a new model.&lt;br /&gt;
*M-06430       UseEval warnings and evalOnCells warnings are showing on the diagram instead of only in the console.&lt;br /&gt;
*M-06392      Icons on the BCH server sometimes appear broken&lt;br /&gt;
&lt;br /&gt;
===ACP build 180===&lt;br /&gt;
====Bug fixes and minor enhancements====&lt;br /&gt;
*M-01229      Make ACP resize images in tables as in DTA&lt;br /&gt;
*M-06421	Com error in send email/send email invites in suan account model&lt;br /&gt;
*M-06417	Compute button not appearing in frame node&lt;br /&gt;
*M-06416	For [[ACP_Server_License|AcpServer]] Added a Watchdog (aka zombie killer) script for the suan server processes - restarts them if the websocket becomes unresponsive. (In addition to the built in redundancy). &lt;br /&gt;
*M-06415	CSV Download format for Long and Wide tables are not correct while downloading for the first time after page refresh&lt;br /&gt;
*M-06402	UI fails to update after calculations complete.&lt;br /&gt;
*M-06400	Can't scroll all the way to the right in a table&lt;br /&gt;
*M-06383	Show all icons in maximized frame node view&lt;br /&gt;
*M-06382	change to the expand view tooltip&lt;br /&gt;
*M-06381	position tooltips below the icon in frame nodes, and add tail&lt;br /&gt;
*M-06353	Vertical scroll bar should not cover column headers&lt;br /&gt;
*M-00006	Diagram and module hierarchy don't update when new object is clicked on&lt;br /&gt;
*M-00049	Click on inputs in tall node goes to result not object window&lt;br /&gt;
*M-06369	Table filtering: menu gets cut off if window is too small&lt;br /&gt;
*M-00174	Can't resize a table column with a slider in the cell&lt;br /&gt;
*M-00652	Slider shows as an empty cell when copying or downloading csv from an edit table.&lt;br /&gt;
*M-01254	Tall atomic subtable input not showing label in middle&lt;br /&gt;
*M-06380	Remove the green outline around check boxes&lt;br /&gt;
&lt;br /&gt;
===Fixed or implemented in ACP build 179===&lt;br /&gt;
*M-06389	Remove teal box around checkbox inputs on click&lt;br /&gt;
*M-06391	Cancel button in a progress bar doesn't work if a calculation is not ongoing&lt;br /&gt;
*M-06397	new AcpStyle Frame_default_view:&lt;br /&gt;
*M-06395	No download and Diagram hang after pressing download csv icon in frame node. For large files - it was timing out. Added a download size estimate and animation to show that the file is being downloaded.&lt;br /&gt;
*M-06390	Suan process crashes when launched with /config:server or singleinstance&lt;br /&gt;
*M-06387	Reduce the size of a progress bar without any textual parameters - to the same size as progress bars with textual parameters.&lt;br /&gt;
*M-06386	ACP did not reliably show progress bars and message boxes that showed in DTA during a computation. &lt;br /&gt;
*M-06359	ACP1 invite link does not open model&lt;br /&gt;
*M-06346	Lines don't align in Table UI&lt;br /&gt;
&lt;br /&gt;
===Fixed or implemented in ACP build 178===&lt;br /&gt;
*M-06372	Object view does not switch nodes&lt;br /&gt;
*M-06339	Frame node does not show object view  initially&lt;br /&gt;
*M-00002	A way to make the Object view the first default view (instead of result) in a Frame node&lt;br /&gt;
*M-00516	A way to keep cells selected while scrolling in a table.&lt;br /&gt;
*M-00004	Max: Text in lists should be similar to the diagram font size&lt;br /&gt;
&lt;br /&gt;
===Fixed or implemented in ACP build 177===&lt;br /&gt;
*M-06368	with object view set as default in frame nodes, clicking on result does not show result&lt;br /&gt;
*M-06385	ACP hangs on BCH model when switching between tabs&lt;br /&gt;
*M-06363	Edit table too many messages with wrong cell format entry&lt;br /&gt;
*M-06361	show_table_filtering does not effect tables in the ACP1 tab&lt;br /&gt;
*M-06357	For column and row pivoters, need a blank cell for no index view&lt;br /&gt;
*M-06355	Cell format 'text and number' accepts only number&lt;br /&gt;
*M-06354	No scroll bar for long list indexes&lt;br /&gt;
*M-06350	Close popup after reordering items in a list&lt;br /&gt;
*M-06349	In Framenodes remember object view for edit tables and input nodes c.f. m-00011&lt;br /&gt;
*M-06344	Edit table extends past white background after pivoting&lt;br /&gt;
*M-00003	Max: When adding to a list using the list UI, the new entry should be highlighted cf 2314&lt;br /&gt;
*M-00005	Add scrollbar to Text node&lt;br /&gt;
*M-01864	When selecting Time from inputs popup, show object window for time.&lt;br /&gt;
*M-01997	Stop showing hand pointer for diagram background.&lt;br /&gt;
*M-00009	Max: Improvements to the List input UI&lt;br /&gt;
*M-00079	Max: Improve the graphic design for Object view.&lt;br /&gt;
*M-00186	Text in tall node object view does not wrap correctly.&lt;br /&gt;
*M-00393	Cell selection rect doesn't expand as cell contents make the cell larger&lt;br /&gt;
&lt;br /&gt;
===Fixed or implemented in ACP build 176===&lt;br /&gt;
*M-06356	Crash after entering wrong cell format value into multitable&lt;br /&gt;
*M-06338	stray 0 inside of a framenode and text node&lt;br /&gt;
*M-00012	In Bare icon style, make the buttons in user input and output nodes  just show the icon.&lt;br /&gt;
*M-00013	Missing probabilistic result icons&lt;br /&gt;
*M-02001	User outputs with long textual results not truncating correctly.&lt;br /&gt;
&lt;br /&gt;
===Fixed or implemented in ACP build 175===&lt;br /&gt;
* ER 2303 MultiChoice input node UI improvements.&lt;br /&gt;
* EW 2306 ACP crashes after download button click -  downloading a particular blank template types from a database instance.&lt;br /&gt;
* M-00018 Multiple errors followed by unusable model  after entering invalid cell value into edit table&lt;br /&gt;
* M-00021 - Text in form nodes is slightly below center&lt;br /&gt;
* M-00031 In outline view, the style library asks which modules to show as tabs. (Desktop Analytica bug 21800)&lt;br /&gt;
* M-00033 Update ACP's UI Icons&lt;br /&gt;
* M-00058 Add date picker functionality to date inputs&lt;br /&gt;
&lt;br /&gt;
=='''Current release'''==&lt;br /&gt;
=== Fixed or implemented in ACP build 174  11- Nov 2025===&lt;br /&gt;
* EW 2301 Deleted text value in a table cell becomes '0' instead of ''&lt;br /&gt;
* EW 2300 Table filtering acp style precedence is wrong for frame nodes and variables&lt;br /&gt;
&lt;br /&gt;
=== Fixed or implemented in ACP build 173  9 - Nov 2025===&lt;br /&gt;
* ER 2243 AcpStyle to turn on / turn off table filtering&lt;br /&gt;
&lt;br /&gt;
=== Fixed or implemented in ACP build 172  3 - Nov 2025 ===&lt;br /&gt;
* EW 2295 Sql error thrown in model_run_counting due to date format.&lt;br /&gt;
* EW 2293 MsgBox window is cut off when messages are long.&lt;br /&gt;
* EW 2292 Sum - totals icon is tricky to use. Needs to have the clickable area enlarged.&lt;br /&gt;
* EW 2291 No option to download csv in an edit table (framenode).&lt;br /&gt;
&lt;br /&gt;
=== Fixed or implemented in ACP build 171  29 Oct 2025 ===&lt;br /&gt;
* EW 2283 Numbers do not fit User inputs&lt;br /&gt;
* ER 2281 Expand/reduce icon should be the right most icon&lt;br /&gt;
* ER 2274 Update the List and Sequence modals&lt;br /&gt;
* EW 2273 Artifact in the list and sequence modals&lt;br /&gt;
* EW 2271 Graph does not display after reducing while graph is zoomed&lt;br /&gt;
* EW 2269 Loading bar has extra symbol&lt;br /&gt;
* EW 2266 Tooltip text for the maximize icon is wrong&lt;br /&gt;
&lt;br /&gt;
=== Fixed or implemented in ACP build 170  22 Oct 2025 ===&lt;br /&gt;
* EW 2288 Error when changing from mid to probabilistic in a frame node&lt;br /&gt;
* EW 2285 Diagram crash when selecting uncertainty result in atomic result node.&lt;br /&gt;
&lt;br /&gt;
=== Fixed or implemented in ACP build 169  15 - Oct 2025===&lt;br /&gt;
* EW 2270 Pressing the Reduce button in tall nodes returns to an acp tab instead of the embedded graph.&lt;br /&gt;
* EW 2232 Wrong number format in slider labels&lt;br /&gt;
* EW 2231 Scaling of slider labels looks bad&lt;br /&gt;
* EW 2228 Adding style library gives an unnecessary message &amp;quot;OK will set the styles library...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Fixed or implemented in ACP build 168 ===&lt;br /&gt;
* EW 2268 Crash when clicking filtering icon in column with dates&lt;br /&gt;
* EW 2263 Can't switch to table view - Suan server half&lt;br /&gt;
* EW 2261 With flex on, problem changing to table view in some models.&lt;br /&gt;
* ER 2260 Warning when pivoting a table with filters applied needs the positioning adjusted.&lt;br /&gt;
* ER 2256 Distribution input window should match updated ACP UI styling&lt;br /&gt;
* EW 2257 Input nodes UI inconsistent across input types&lt;br /&gt;
* ER 2196 Add an expand button (and reduce ) to graphs&lt;br /&gt;
* ER 1812 Implement clickable inputs/outputs in the object window in frame nodes/ tall nodes&lt;br /&gt;
&lt;br /&gt;
=== Fixed or implemented in ACP build 167  26 - Sept 2025 ===&lt;br /&gt;
* ER 2259 When a table has filter applied, If the pivot is changed, (e.g., columns are now rows) any previously selected filters should be cleared.&lt;br /&gt;
* ER 2252 - improve the Table filtering UI&lt;br /&gt;
* ER 2181 Add invite sent popup notification after sharing a model.&lt;br /&gt;
* EW 2167 Could not scroll the model description when it is present after mouseover of the title. The description closes when the mouse was moved.&lt;br /&gt;
&lt;br /&gt;
=== Fixed or implemented in ACP build 166  23 - Sep 2025 ===&lt;br /&gt;
* EW 2238 Crash when attempting to filter a table column that contains a handle.&lt;br /&gt;
* ER 2229 Enable the table filter menu on the row index column&lt;br /&gt;
&lt;br /&gt;
=== Fixed or implemented in ACP build 165  12 - Sep 2025 ===&lt;br /&gt;
* ER 2245 Update the icons for filtering tables&lt;br /&gt;
* EW 2242 In the user management the checkmark sticks on the wrong item after assigning a role.&lt;br /&gt;
* ER 2241 For Table filtering &amp;quot;Contains&amp;quot; Matches Handling on the javascript side&lt;br /&gt;
* EW 2225 Input node has scrollbars when it shouldn't with auto zoom set&lt;br /&gt;
&lt;br /&gt;
=== Fixed or implemented in ACP build 164  3 - Sep-2025 ===&lt;br /&gt;
(Test build only)&lt;br /&gt;
=== Fixed or implemented in ACP build 163  1 -  Sep-2025 ===&lt;br /&gt;
* ER 2222 Update choice menu UI dropdown&lt;br /&gt;
* EW 2100 Text nodes default to flex_box_item: yes&lt;br /&gt;
* ER 2076 Redesign hierarchical choice menu popup when at the right edge of the diagram.&lt;br /&gt;
&lt;br /&gt;
=== Fixed or implemented in ACP build 162  27 - Aug-2025 ===&lt;br /&gt;
* ER 2224 Update UI for input nodes with input field&lt;br /&gt;
* ER 2223 Add checkmark to Choice/Multichoice menus&lt;br /&gt;
* EW 2216 Fixed a crashing bug  when pressing download wide csv&lt;br /&gt;
* EW 2212 For ACP server configuration - fixed a bug where All users are effected by the configuration flag &amp;quot;reviewersCanUploadDataFiles&amp;quot; &lt;br /&gt;
* EW 2199 Fixed a bug, when mousing over the copy button the hover balloon shows description instead.&lt;br /&gt;
* EW 2090 No tool tips for hover icons that appear when the object view is displayed in a tall/frame node&lt;br /&gt;
&lt;br /&gt;
=== Fixed or implemented in ACP build 161  31 - July-2025 ===&lt;br /&gt;
* EW 2218 Rendering Issue in Some Models&lt;br /&gt;
* EW 2213 Cannot change from table to graph in framenode&lt;br /&gt;
* ER 2198 Add tooltip for the copy graph button&lt;br /&gt;
* ER 2183 Change hamburger menu to gear icon&lt;br /&gt;
* ER 2182 Updated connection status window style&lt;br /&gt;
* ER 2177 Make the actual menu show on mouseover instead of a tooltip (on the top bar)&lt;br /&gt;
* EW 2172 Upload button is enabled when reviewers cannot upload&lt;br /&gt;
* ER 2027 Implement label parameter for choice and multichoice&lt;br /&gt;
* EW 2218 Rendering Issue in Some Models&lt;br /&gt;
* EW 2213 Cannot change from table to graph in framenode&lt;br /&gt;
* 2198 Add tooltip for the copy graph button&lt;br /&gt;
* ER 2183 Change hamburger menu to gear icon&lt;br /&gt;
* ER 2182 Updated connection status window style to new tooltip styling&lt;br /&gt;
* ER 2177 Make the actual menu show on mouseover instead of the tooltip. (For the top bar)&lt;br /&gt;
* EW 2172 Upload button is enabled when reviewers cannot upload files.&lt;br /&gt;
* ER 2027 Implement label parameter for choice and multichoice&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Fixed or implemented in ACP build 160  31 - July-2025 ===&lt;br /&gt;
Build 160 was not implemented- test build only&lt;br /&gt;
&lt;br /&gt;
=== Fixed or implemented in ACP build 159  27 - June-2025 ===&lt;br /&gt;
* EW 2175 No filtering for input nodes&lt;br /&gt;
* EW 2174 No text filtering in choice modes in edit tables&lt;br /&gt;
* ER 2162 Change title of the message sent to new users.&lt;br /&gt;
* ER 2093 Allowing HTML in text nodes in ACP (partial implementation)&lt;br /&gt;
* EW 1938 ACP style library is not setting auto zoom correctly when added to a model with option to retain the styles&lt;br /&gt;
* ER 1180 Get Download CSV working better with tables with 3 or more dimension&lt;br /&gt;
&lt;br /&gt;
=== Fixed or implemented in ACP build 158  22 - June-2025 ===&lt;br /&gt;
(A test build without any full implementation)&lt;br /&gt;
&lt;br /&gt;
=== Fixed or implemented in ACP build 157  18 - June-2025 ===&lt;br /&gt;
* ER 2137 Ability to select MariaDB in the assets\DB driver info.ana library (For ACP server).&lt;br /&gt;
* ER 2108 UI changes - UI redesign part 1.&lt;br /&gt;
* ER 2108 UI changes - UI redesign part 2.&lt;br /&gt;
* ER 2108 UI changes - UI redesign - icon updates.&lt;br /&gt;
* ER 2108 UI changes - UI redesign - usertable updates.&lt;br /&gt;
* ER 2093 Allowing HTML in text nodes in ACP. (Continued)&lt;br /&gt;
&lt;br /&gt;
=== Fixed or implemented in ACP build 156  3 - June-2025 ===&lt;br /&gt;
&lt;br /&gt;
=== Fixed or implemented in ACP build 155  20 - May-2025 ===&lt;br /&gt;
&lt;br /&gt;
=== Fixed or implemented in ACP build 154  9 - May-2025 ===&lt;br /&gt;
* ER 2093 Allowing HTML in text nodes in ACP. (Partial implementation for titles in text nodes)&lt;br /&gt;
&lt;br /&gt;
=== Fixed or implemented in ACP build 153  17 - January-2025 ===&lt;br /&gt;
* EW 2135 Error when closing object window in a frame node to go back to the table view&lt;br /&gt;
&lt;br /&gt;
=== Fixed or implemented in ACP build 152  30 - January-2025 ===&lt;br /&gt;
* 2133 Can not hide the Microsoft button for sign in&lt;br /&gt;
* EW 2129 Download indicator animation doesn't go away after download.&lt;br /&gt;
&lt;br /&gt;
=== Fixed or implemented in ACP build 151:  16 - December-2024 ===&lt;br /&gt;
* ER 2127 Convert the Sql to mariadb compatible in the publish to cloud service model.&lt;br /&gt;
* EW 2126 Can't generate a valid email invite code with mariadb&lt;br /&gt;
* ER 2120 Update fonts in Change password form.&lt;br /&gt;
* ER 2119 Update fonts in Add Project page.&lt;br /&gt;
* EW 2115 ACP will not open model listing with Suan 6.5 in Apache.&lt;br /&gt;
* ER 2113 Change tooltips shown for the help and close toolbar buttons when viewed in the ACP portal.&lt;br /&gt;
* ER 2112 Add AcpStyles for controlling the max/min zoom for auto_zoom_diagram: yes.&lt;br /&gt;
* ER 2111 Update toolbar buttons for question mark, hamburger, and power button icons.&lt;br /&gt;
* 2109 In Portal's model listing, move Upload, download, delete, share buttons at the top rather than bottom.&lt;br /&gt;
* EW 2107 Variable, object, chance node titles are not vertically centered when they reside in a text node that is a Flex box.&lt;br /&gt;
* ER 2099 Add Min % and Max % for auto zoom in the Acp style library.&lt;br /&gt;
* ER 2096 Get arrows between nodes to show when using FlexBox display.&lt;br /&gt;
* ER 2065 Remove the Analytica logo in the add project dialog.&lt;br /&gt;
* ER 1852 Add Object_in_frame to the style library.&lt;br /&gt;
&lt;br /&gt;
=== Fixed or implemented in ACP build 150:  5 - November-2024 ===&lt;br /&gt;
* ER 2095 Allow Microsoft login (when enabled) when no Google login is set.&lt;br /&gt;
* EW 2091 Hover icons in frame nodes can overlap the vertical scrollbar when viewing Object view.&lt;br /&gt;
* EW 2089 Hover icons in tall nodes can overlap the vertical scrollbar when viewing Object view.&lt;br /&gt;
* EW 2085 In object view, Table graph and other icons are too far to the right.&lt;br /&gt;
* EW 553 Col width not draggable and forgotten.&lt;br /&gt;
&lt;br /&gt;
=== Fixed or implemented in ACP build 149:  15 - October-2024 ===&lt;br /&gt;
* EW 2083 Stop bounce back when resizing the height of a row header in an edit or result table.&lt;br /&gt;
* EW 2080 Problem with discrete slider in table when zoomed in a lot.&lt;br /&gt;
* ER 2078 Internal code change: clean up code in slider.js and remove the newZoom variable.&lt;br /&gt;
* ER 2067 Add a way to display messages to users based on what Chrome version they are using.&lt;br /&gt;
* EW 2061 Graph zoom in feature is too sensitive, graphs zoom when I just want to click a data point.&lt;br /&gt;
* EW 2060 Hover balloons in zoomed frame/tall nodes not appearing in right location, or appearing off screen.&lt;br /&gt;
* EW 2047 Stop bounce back when resizing a column in an edit or result table.&lt;br /&gt;
&lt;br /&gt;
=== Fixed or implemented in ACP build 148:  8 - October-2024 ===&lt;br /&gt;
* EW 2081 The table of models in the portal is too narrow, it should have same margin on left and right hand sides&lt;br /&gt;
* EW 2064 ACP online docs in Help menu points to 'wiki...'&lt;br /&gt;
&lt;br /&gt;
=== Fixed or implemented in ACP build 147:  30 - September-2024 ===&lt;br /&gt;
* ER 2077 Get input node that is a discrete slider working when auto zoom diagrams is on.&lt;br /&gt;
* ER 2075 Get input node with continuous slider control working with auto zoom.&lt;br /&gt;
* ER 2074 Choice input pulldown menu is in wrong location when diagram is zoomed.&lt;br /&gt;
* ER 2073 White screen crash when opening tab in heat pump model with auto zoom set.&lt;br /&gt;
* EW 2072 Some of the user interface panes don't fit the diagram.&lt;br /&gt;
* EW 2071 Items in askmsgchoice pulldown menu not selectable.&lt;br /&gt;
* EW 2069 Sliders are hard to adjust with Auto zoom&lt;br /&gt;
* EW 2068 Help balloons position is off when hovering over nodes when auto zoom diagrams is yes&lt;br /&gt;
&lt;br /&gt;
=== Fixed or implemented in ACP build 146:  20 - September-2024 ===&lt;br /&gt;
* EW 2070 Add acpConfig flag to turning off &amp;quot;auto zoom diagrams&amp;quot; feature on a particular server.&lt;br /&gt;
* EW 2062 Wrong selection when you drag to select a portion of the graph for zooming.&lt;br /&gt;
* EW 2058 Data Balloon displayed when clicking on a graph that is zoomed is not working anymore&lt;br /&gt;
* ER 2043 Add a sign in with Microsoft option&lt;br /&gt;
&lt;br /&gt;
=== Fixed or implemented in ACP build 145:  10 - September-2024 ===&lt;br /&gt;
* ER 2055 Edit the login screen so it looks better with Microsoft. And add a flag to turn this feature off.&lt;br /&gt;
* ER 2054 Add a tool tip for the 'Show Object' button that appears in frame and tall nodes&lt;br /&gt;
* EW 2053 When viewing object view in an embedded node, sometimes the outputs shows object_view_btn_acp.&lt;br /&gt;
* EW 2052 Button icon missing in object view for button inputs / outputs.&lt;br /&gt;
* ER 2051 Add support for pasting into body cells of selected row or column of table&lt;br /&gt;
* EW 2050 Error occurs when typing when a row or column is selected in a table&lt;br /&gt;
* ER 2049 Support copying selected row or column so it can be pasted e.g. into Excel&lt;br /&gt;
* EW 2048 Selected column showing dashed lines when selection line should be solid&lt;br /&gt;
* EW 2046 Resizing a row or column header should not result in the row or column becoming selected&lt;br /&gt;
* ER 2043 Add a sign in with Microsoft option&lt;br /&gt;
* ER 2042 Add a flag for turning off EW 2041, selecting rows and columns by clicking on header cells&lt;br /&gt;
* ER 2041 Clicking on a table row header or column header should select that row or column&lt;br /&gt;
* ER 2040 Show hand cursor when hovering mouse of analytica cube&lt;br /&gt;
* EW 2038 Tooltip from top toolbar remains after opening model&lt;br /&gt;
* EW 1816 In Object in frame/tall nodes, the inputs and outputs text is clipped at the bottom.&lt;br /&gt;
* ER 1761 Press and drag to select a cell range in an edit table&lt;br /&gt;
&lt;br /&gt;
=== Fixed or implemented in ACP build 144:  10 - August-2024 ===&lt;br /&gt;
* EW 2057 Graph doesn't fit Frame node with auto zoom set.&lt;br /&gt;
* EW 2037 Node being highlighted when it should not be.  Problem relates to nodes results being showing in a frame node on another diagram&lt;br /&gt;
* EW 2036 Flickering and sometime disappearing icons on right hand side of top toolbar - caused by turning off the caching of images.&lt;br /&gt;
* EW 2035 &amp;lt;code&amp;gt;'Press to add a new project'&amp;lt;/code&amp;gt; tooltip remains after entering a module.&lt;br /&gt;
* EW 2034 Input node is highlighted when its original is being displayed in another module.&lt;br /&gt;
* ER 2033 Highlight nodes (that are not input/outputs) displayed in frame nodes, part 2, e.g. variable, decision etc. &lt;br /&gt;
* EW 2032 Edit table that is also a SubTable does not show in frame node when the form node is clicked (but does if the button is clicked).&lt;br /&gt;
* ER 2030 Add html meta tags to disable caching of index.html&lt;br /&gt;
* ER 2029 Turn off server side caching in Apache&lt;br /&gt;
* EW 2028 Crash on model open - ACP sessions log model&lt;br /&gt;
* EW 2014 Multiline table headers are displaying as a single line in edit and result tables&lt;br /&gt;
&lt;br /&gt;
=== Fixed or implemented in ACP build 143:  1 - August-2024 ===&lt;br /&gt;
* The [[Choice#nestUnder_for_hierarchical_menus|nestunder for Hierarchical choice menus]] are enabled in this build. &lt;br /&gt;
* ER 2026 Added a tooltip for the [+] Add project button in the top toolbar (ACP Group accounts) [[ACP_Group_plans_for_Managers_and_Admins#The_Models_tab|more information...]]&lt;br /&gt;
* EW 2025 Not all items are listed in a multichoice menu after having filtering items previously.&lt;br /&gt;
* EW 2024 Add Project button in toolbar is not aligned with the Account and Project choice inputs&lt;br /&gt;
* EW 2023 In Hierarchical multichoice, ACP allows no items selected in submenu when allownone is not set.&lt;br /&gt;
* EW 2021 Choice menu selection doesn't stick. (this was a side effect of the nestunder implementation).&lt;br /&gt;
* EW 2018 Hierarchical choice menu does not display all items after making a choice with the textual filter. (This was a side effect of the nestunder implementation).&lt;br /&gt;
&lt;br /&gt;
=== Fixed or implemented in ACP build 142:  19 - July-2024 ===&lt;br /&gt;
* EW 2019 Swap XY axis icon in frame node has no effect.&lt;br /&gt;
* EW 2018 Hierarchical choice menu does not display all items after making a choice. Also choice is not sticking.&lt;br /&gt;
* EW 2016 In Hierarchical multichoice, ACP allows no items selected when [[Multichoice#Parameters|allownone:]] is not set, shows 'All'.&lt;br /&gt;
* ER 2015 Highlight each node shown in Frame node(s) - input / output nodes.&lt;br /&gt;
* ER 2013 Enhancements and additions to the Close menu download option. Add popup with download link and change the text.&lt;br /&gt;
&lt;br /&gt;
=== Fixed or implemented in ACP build 141:  12 - July-2024 ===&lt;br /&gt;
* ER 2012 Add 8 pixel left margin between table shown in ACP tabs and left edge of browser.&lt;br /&gt;
* EW 2011 Crash when hovering on choice input popup menu with hierarchical menus (Related to the new Hierarchical inputs implementation).&lt;br /&gt;
* EW 2009 Menu item in First level of Hierarchical choice menu not showing check mark when clicked.&lt;br /&gt;
* ER 2005 Hierarchical choice menu filtering, show items that match first level menu name or if sub menu item matches.&lt;br /&gt;
* ER 1997 Align description with title in frame/tall nodes.&lt;br /&gt;
* ER 1988 Auto zoom not correct in some models due to hidden ACP Styles library node.&lt;br /&gt;
&lt;br /&gt;
=== Fixed or implemented in ACP build 140:  26 - June-2024 ===&lt;br /&gt;
* EW 2008 Choice Input nodes don't show the pulldown menu when clicked. (Related to the new Hierarchical inputs implementation). &lt;br /&gt;
* EW 2007 Diagram crash when clicking on multichoice input. (Related to the new Hierarchical inputs implementation).&lt;br /&gt;
* ER 2006 Get hierarchical choice inputs working for MultiChoice input nodes&lt;br /&gt;
* ER 2004 Hierarchical choice menus with multiple sub menus&lt;br /&gt;
* ER 2003 When filtering long menus, matches should include any substring present.&lt;br /&gt;
* EW 2002 Diagram crash using choice with sub-list.&lt;br /&gt;
* EW 1993 Swap x-y hover icon does not show for graphs displayed in Frame nodes.&lt;br /&gt;
&lt;br /&gt;
=== Fixed or implemented in ACP build 139:  21 - June-2024 ===&lt;br /&gt;
* EW 1998 Some arrows are black when they should be white (certain arrows with no associated error class.)&lt;br /&gt;
* ER 1995 Hierarchical choice input menus - step 1 (The simplest case &lt;br /&gt;
* ER 1994 acpConfig.json flag for enabling or disabling choice drop down sub menus.&lt;br /&gt;
&lt;br /&gt;
=== Fixed or implemented in ACP build 138:  1 - June-2024 ===&lt;br /&gt;
&lt;br /&gt;
* ER 1990 Need a scroll bar for Object view in tall nodes when the attributes don't fit the available space.&lt;br /&gt;
* EW 1989 Clicking the object icon in a tall node table has no effect. (MultiChoice inputs in the table cells) .&lt;br /&gt;
* EW 1981 Choice menus in table cells don't show with the correct font size.&lt;br /&gt;
* EW 1978 flex items don't wrap for flex_direction: column.&lt;br /&gt;
* ER 1964 Implement vertical and horizontal alignment CPS for Flex Boxes&lt;br /&gt;
* ER 1965 Implement Flex_gap cps style for controlling number of pixels between FlexBox Items&lt;br /&gt;
* ER 1961 flex_wrap: wrap style with flex_direction: column&lt;br /&gt;
&lt;br /&gt;
=== Fixed or implemented in ACP build 137:  22 -May-2024 ===&lt;br /&gt;
* ER 1986 Change the &amp;quot;display:flex&amp;quot; cps to be diagram/module level setting rather than a top level model setting&lt;br /&gt;
* ER 1982 Add 'Arial Narrow' to list of Sans Serif fonts in acpConfig.json because Karen/James are using it in the ACES model.&lt;br /&gt;
* EW 1977 Text Node within a Flex Box Item displays at bottom of flex box, but should not.&lt;br /&gt;
&lt;br /&gt;
=== Fixed or implemented in ACP build 136:  14 -May-2024 ===&lt;br /&gt;
* EW 1980 Project pulldown menu doesn't show&lt;br /&gt;
* EW 1970 Auto zoom not working for a model.&lt;br /&gt;
* ER 1969 Embed List of Google Fonts provided by Karen.&lt;br /&gt;
* ER 1967 Add other usable browsers to the Sign in page.	&lt;br /&gt;
* ER 1966 Turn off auto_zoom_diagrams when using FlexBox display.&lt;br /&gt;
* EW 1963 The order of the FloxBox items is different in ACP than in DTA, make it so it's the same.&lt;br /&gt;
* ER 1960 Give selected cells same background coloring as in Excel. Selected cells will have a gray background and the anchor cell will have a white background.&lt;br /&gt;
* EW 1939 Project pulldown menu shows in top bar when this model is running&lt;br /&gt;
* ER 1876 Select multiple cells by clicking on cell and dragging cursor to end cell,&lt;br /&gt;
* ER 1850 Stop showing red squiggle when entering a value into a cell.  The red squiggle is spell checker indicating a bad spelling.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Fixed or implemented in ACP build 135:  27-Apr-2024 ===&lt;br /&gt;
* EW 1971 Lingering help balloons need to be closed with X button to clear them&lt;br /&gt;
* ER 1957 Add &amp;quot;Flex Wrap&amp;quot; cps style for diagrams with Flex Box display&lt;br /&gt;
* ER 1956 Add &amp;quot;Flex Direction&amp;quot; which can be used to change layout from row to column&lt;br /&gt;
* ER 1955 Flex Box layout. Clean up demo code and check in.&lt;br /&gt;
* EW 1953 Reduce cube appearances and cube flickering&lt;br /&gt;
* EW 1951 Can't cancel changes made to edit table in frame node&lt;br /&gt;
* EW 1950 Blinking caret remains in edit table cell after pressing Enter key&lt;br /&gt;
* ER 1946 Add filtering by date, sessions, unique users to the sessions log model.&lt;br /&gt;
* EW 1297 When pasting more than a few cells into ACP the spinning cube flickers on and off for a while&lt;br /&gt;
&lt;br /&gt;
=== Fixed or implemented in ACP build 134:  17-Apr-2024 ===&lt;br /&gt;
* EW 1949 Table cell becomes deselected when clicked..&lt;br /&gt;
* ER 1948 For Tables, keyboard combo shift+ctrl+arrow key should select the entire row or column.&lt;br /&gt;
* ER 1947 For tables, keyboard combo ctrl+arrow should move the selected cell to the beginning or end of a row or column.&lt;br /&gt;
* ER 1944 Add Try / Catch block to AcpConfig.json to show an error popup if there's mis-spelled flags.&lt;br /&gt;
* ER 1911 With multiple cells selected, arrow keys reselects to a single cell in the direction of the arrow key as in Excel.&lt;br /&gt;
* ER 1910 Allow editing in the anchor cell with multiple cells selected.&lt;br /&gt;
* EW 1902 Extra items on the privilege list for the Subscription Administration project.&lt;br /&gt;
* ER 1823 Add periodic heartbeat message on websocket.&lt;br /&gt;
&lt;br /&gt;
=== Fixed or implemented in ACP build 133:  9-Apr-2024 ===&lt;br /&gt;
* EW 1943 Node flickering while rendering the diagram, hidden nodes appear briefly then disappear.&lt;br /&gt;
* EW 1942 Slider control automatically changes value when it should not (after change from another slider).&lt;br /&gt;
* EW 1936 Can't enter &amp;quot; double quote into a cell after it is selected with a single click.&lt;br /&gt;
* EW 1934 An extra 'email' in the cue text for the email invite email address.&lt;br /&gt;
* EW 1933 Balloon help for the copy download button doesn't word wrap properly.&lt;br /&gt;
* EW 1931 Tall nodes don't work after font change.&lt;br /&gt;
&lt;br /&gt;
=== Fixed or implemented in ACP build 132:  13-Mar-2024 ===&lt;br /&gt;
&lt;br /&gt;
* EW 1929 Publish fails at sign in&lt;br /&gt;
* ER 1928 Detect whether someone is using a mobile device and add pop-up message.&lt;br /&gt;
* ER 1926 When you update a cell in ACP and hit enter, go to the next cell down, as in Excel and sheets.&lt;br /&gt;
* EW 1924 Table widths not the same in ACP as in DTA.&lt;br /&gt;
* EW 1920 Diagram hang - can't exit because of spinning cube.&lt;br /&gt;
* ER 1918 When editing a table cell, pressing tab should move cell selection to the next cell to the right.&lt;br /&gt;
* ER 1917 Configure ACP for connecting to a Domain controller over ldaps&lt;br /&gt;
* EW 1916 Default columns widths do not match DTA, they're a bit larger in ACP&lt;br /&gt;
* ER 1909 In top toolbar, change model title font from Arial to Century Gothic (w/ fallbacks)&lt;br /&gt;
* EW 1906 Crash after pressing sort icon in multitable&lt;br /&gt;
* ER 1905 Turn off sorting icon on edit multitables where it doesn't work.&lt;br /&gt;
* EW 1904 Text nodes with large title font are overlapped.&lt;br /&gt;
* EW 1815 Problem pasting cells from DTA tables into ACP tables&lt;br /&gt;
&lt;br /&gt;
== Fixed or implemented in ACP build 131:  5-Feb-2024==&lt;br /&gt;
	&lt;br /&gt;
* ER 1914 Add not_even_slicers to the options for setting show index menus in the ACP Style library.&lt;br /&gt;
* EW 1899 Project showing for Individual account in ACP Toolbar in the Portal.&lt;br /&gt;
* ER 1895 Need a  new message for firebase with email enumeration protection for new users or wrong password.&lt;br /&gt;
* ER 1890 Change Lumina.com links to analytica.com.&lt;br /&gt;
* EW 1843 Wrong word wrapping in a text node title. Not the same as 1837 which was implemented in build 127.&lt;br /&gt;
&lt;br /&gt;
== Fixed or implemented in ACP build 130:  30-Jan-2024==&lt;br /&gt;
	&lt;br /&gt;
* ER 1892 Change Tech Support... to Report a bug or get tech support...&lt;br /&gt;
* ER 1890 Max: Change Lumina.com links to analytica.com&lt;br /&gt;
* ER 1889 Change position of the order icon so that it doesn't move the search bar on mouseover.&lt;br /&gt;
* ER 1888 Minor tweaks to the UI 25 Jan 24&lt;br /&gt;
** The triangle indicating pulldown menus looks a bit fuzzy - make it clearer.&lt;br /&gt;
** The icon that appears when you mouseover a column header should be neither forward nor backward sort, but unspecified (until you click it). Change to an icon with wider middle bar and narrower top and bottom.&lt;br /&gt;
*** Move that icon a tad further right from the header text &amp;quot;Model&amp;quot; etc.&lt;br /&gt;
** Remove the faint square around The '?' icon. (help ? menu icon)&lt;br /&gt;
* ER 1886 Add more space between the Analytica cube on the top bar and left of the first menu, similar spacing when running a model.&lt;br /&gt;
* ER 1885 Removed the  downward triangle if the project or account pulldown menu has only 1 item, and removed the popup menu.&lt;br /&gt;
* ER 1883 Add tooltips for account name and project name pulldown menus on the new top bar.&lt;br /&gt;
* EW 1882 User name on the top bar with membership in only 1 project is inconsistent before and after opening a model.&lt;br /&gt;
* EW 1881 Long Project (or account) name overlaps the down arrow&lt;br /&gt;
&lt;br /&gt;
== Fixed or implemented in ACP build 129:  22-Jan-2024==&lt;br /&gt;
* EW 1877 Missing choice pulldown menu on top left account name pulldown menu&lt;br /&gt;
* ER 1875 Make Arrow keys work in tables similarly to the way they work in Excel/Sheets&lt;br /&gt;
** Click on a cell (this is the &amp;quot;anchor&amp;quot; cell), then using arrow keys moves the selected cell e.g. a right arrow key moves the selected cell to the right.&lt;br /&gt;
** Hold down the shift key and press an arrow keys. This should expand (or contract) the selected cell region.&lt;br /&gt;
** Hold down the ctrl key and press arrow keys. E.g. Press right arrow key w/ ctrl key down. This should move the selected cell to the the row&lt;br /&gt;
* ER 1873 Single-click to edit cell: When you click on a cell in sheets/excel you can just type to edit. In ACP you have you double click on it to edit. c.f. 1845.&lt;br /&gt;
* ER 1871 ACP Portal change 6: Change ascending and descending triangles with three bars in Models listing table header&lt;br /&gt;
* ER 1870 ACP Portal change 5: Make model's listing (and User listing) table header vertically narrower&lt;br /&gt;
* ER 1869 ACP Portal change 4: Move 'Add Project' button closer to Project pulldown menu&lt;br /&gt;
* ER 1868 ACP Portal change 3: Make Home and Project pulldown menu triangles white open triangles&lt;br /&gt;
* ER 1867 ACP Portal change 2: Change color of border on Account and Project pulldown menus to light teal&lt;br /&gt;
* ER 1866 Portal changes 1: Move up text in Account and Project pulldown menus&lt;br /&gt;
* ER 1860 Portal Users tab:&lt;br /&gt;
** Title of button &amp;quot;Email invite&amp;quot; -&amp;gt; &amp;quot;Email invitation&amp;quot;.&lt;br /&gt;
** Put a &amp;quot;+&amp;quot; in button &amp;quot;+ add users&amp;quot;&lt;br /&gt;
* ER 1859 The models table should stretch down to the top of the footer bar (with logos).&lt;br /&gt;
* ER 1858 The rest of the background of Users tab should be consistent mid gray, including behind section titles and buttons on the right side.&lt;br /&gt;
* ER 1857 Background of users table should be the same color as background of the models table.&lt;br /&gt;
* ER 1856 The heading bar for the Users table should be the same style (size, background color, font etc) as for the Models table.&lt;br /&gt;
* ER 1855 Tweaks to heading of Models Listing in portal.&lt;br /&gt;
** Move heading higher.&lt;br /&gt;
** Change background color, a slightly lighter gray background.&lt;br /&gt;
** Magnifying glass same size as search box.&lt;br /&gt;
* ER 1845 Make Edit table cells update when they are selected and someone starts typing. c.f. 1873&lt;br /&gt;
* ER 1783 Make UI simpler and more consistent with ACP model view. &lt;br /&gt;
** Move the account menu, and project menu (when relevant) to the teal bar in white Century Gothic 16pt, to replace the account name and project name that already appear there. Puts the account and project above the Models/account tabs, which is more logical.&lt;br /&gt;
** Reduce the vertical white space between teal bar and top of tabs (similar to model UI).&lt;br /&gt;
** Put a rounded rectangle thin gray line around sides and bottom of Models, Account, and Users views (similar to model UI).&lt;br /&gt;
&lt;br /&gt;
== Fixed or implemented in ACP build 128:  8-Jan-2024  ==&lt;br /&gt;
* ER 1853 Make ACP3 Enhancements and fixes public, and link to the from the what's new page.&lt;br /&gt;
* EW 1849 Downloaded csv table was populating table with all ones for tall output node - only for certain tables.&lt;br /&gt;
* ER 1844 Update build number. Dropped 3.1 and added the build number to the sign-in page. Also moved the build number to acpConfig.json&lt;br /&gt;
* ER 1835 prevent user from clicking on anything other than ‘Cancel’ when cube is spinning&lt;br /&gt;
&lt;br /&gt;
== Fixed or implemented in ACP build 127:  23-Dec-2023  ==&lt;br /&gt;
* EW 1838 Swap Axes icon didn't work in Safari desktop, shows a blue box with white question mark&lt;br /&gt;
* EW 1837 Wrong word wrapping in a Text node title.&lt;br /&gt;
* EW 1836 Pasting of cells does not work in edit table when data is larger than the available cells.&lt;br /&gt;
* EW 1833 After change password - no tabs visible&lt;br /&gt;
* EW 1832 Selection box is way off when clicking on a choice input cell in an edit table&lt;br /&gt;
* EW 1830 Blank warning message appears after entering blank value into edit table cell&lt;br /&gt;
* EW 1809 Crash when adding acp style library from hamburger menu - Web socket closes&lt;br /&gt;
&lt;br /&gt;
== Fixed or implemented in ACP build 126:  18-Dec-2023  ==&lt;br /&gt;
* EW 1829 Error after deleting a value in a table cell.&lt;br /&gt;
* EW 1828 Heat Pump model is displaying some nodes with a serif font on Safari browser.&lt;br /&gt;
* ER 1825 Setup CSS font fallbacks for common Serif, Sans-Serif and Monospace fonts&lt;br /&gt;
* ER 1824 Setup CSS font fallback for Century Gothic to be Century Gothic, Avant Garde, Arial, San-serif&lt;br /&gt;
* EW 1819 Privileges table appears below Role menu in Users tab of Portal&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Fixed or implemented in ACP build 125:  5-Dec-2023  ==&lt;br /&gt;
* EW 1821 Horizontal scrollbar appears on Users tab of User Portal when it should not&lt;br /&gt;
* EW 1819 Privileges table appears below Role menu in Users tab of Portal&lt;br /&gt;
* ER 1818 When you copy it should give a little visual feedback. &lt;br /&gt;
* ER 1808 Align the top of the Alert text with the top of the tabs.&lt;br /&gt;
* ER 1767 Add UI response to hovering and clicking Inputs and Outputs in Object view&lt;br /&gt;
* ER 1763 A way to keep cells selected while scrolling in a table.&lt;br /&gt;
* ER 1762 When you paste a range into an edit table, it takes a while. It should show some feedback — e.g. dashed lines around the range — to show it is working.&lt;br /&gt;
&lt;br /&gt;
== Fixed or implemented in ACP build 124:  25-Nov-2023  ==&lt;br /&gt;
* EW 1800 Slider labels overlap - auto scaling needs to be improved&lt;br /&gt;
* EW 1764 Pasting numbers with a &amp;quot;%&amp;quot; or &amp;quot;,&amp;quot; pastes as text. &lt;br /&gt;
&lt;br /&gt;
== Fixed or implemented in ACP build 123:  12-Nov-2023  ==&lt;br /&gt;
&lt;br /&gt;
* EW 1807 Fix sliders so there's no &amp;quot;bounce back&amp;quot; in James' Single Family Load Predictions&lt;br /&gt;
* ER 1806 Add an alert asking people to schedule a meeting using Calendery&lt;br /&gt;
* EW 1805 Discreet slider doesn't work properly when diagram zooming is present&lt;br /&gt;
* EW 1804 Discrete slider in edit table doesn't update correctly when the track is clicked&lt;br /&gt;
* EW 1801 Crash after selecting checkbox to add a slider in a table.&lt;br /&gt;
&lt;br /&gt;
== Fixed or implemented in ACP build 122:  8-Nov-2023  ==&lt;br /&gt;
* ER 1797 Get Object view working for frame nodes and tall nodes that contain edit tables&lt;br /&gt;
* ER 1796 Get Object View working in tall output nodes&lt;br /&gt;
* EW 1792 Pasting into an edit table causes slow down of ACP&lt;br /&gt;
* ER 1790 Add hover icons to Object view when displayed in a frame/tall node&lt;br /&gt;
* ER 1788 Get Object_in_frame style working correctly at model level and node level&lt;br /&gt;
* ER 1787 Put thin line at top in Top_diagram_only style (and no hierarchy bar)&lt;br /&gt;
* ER 1782 Add a way to alert ACP users to new releases and other ACP-relevant information&lt;br /&gt;
* ER 1771 Show Underline of clickable variable names when the cursor is anywhere over the variable name.&lt;br /&gt;
* ER 1757 Move “Remove” to last item in the Role menu and reorder them in decreasing power.&lt;br /&gt;
&lt;br /&gt;
== Fixed or implemented in ACP build 121:  18-Oct-2023  ==&lt;br /&gt;
* ER 1786 Show Object icon button in frame/tall nodes, part 1 if ACP Style Object_in_frame is present&lt;br /&gt;
* ER 1770 Strange message while drawing graph&lt;br /&gt;
* ER 1759 Distribution popup.  Remove close button.  Add padding to rhs of description text area  between wrapping text and scroll bar.  Align left edge of Distribution pulldown with description.  Make parameters input wider.&lt;br /&gt;
* ER 1755 Add click feedback to graph hover icons, make them smaller when clicked&lt;br /&gt;
* ER 1753 Improve appearance and positioning of Close (x) button use in ACP popup dialogs&lt;br /&gt;
* EW 1752 Top of pulldown menu and text box in Distribution Popup are cut off sometimes.&lt;br /&gt;
* EW 1751 Fix word wrapping problems in Description box of Distribution popup&lt;br /&gt;
* EW 1750 Crash when clicking Sequence input node button&lt;br /&gt;
* EW 1748 UI seems to crash after clicking on node&lt;br /&gt;
* ER 1697 Implement copy / paste from edit table to edit table&lt;br /&gt;
* ER 1696 Pasting of cells does not work in edit table when data is larger than the available cells.&lt;br /&gt;
* ER 1632 Add graph hover icon for swapping horizontal and vertical axes.&lt;br /&gt;
&lt;br /&gt;
== Fixed or implemented in ACP build 120:  4-Oct-2023  ==&lt;br /&gt;
* EW 1773 ACP Sessions log model shows repeats the first model of a session for every model run of the session.&lt;br /&gt;
* EW 1749 Self-Choice is MultiTable not using array-valued domain in ACP&lt;br /&gt;
# ER Address vulnerabilities reported by Guidehouse from their scanning tool.&lt;br /&gt;
* EW 1746 Some input node formnode buttons still showing border when they should not&lt;br /&gt;
* EW  1745 Input node defined as sequence with Icon style not showing icon&lt;br /&gt;
* EW 1741 Update fav icon (icon that shows in chrome tab) to match that used in analytica.com&lt;br /&gt;
* EW 1737 Don't show full path to users' files in file system error messages.&lt;br /&gt;
&lt;br /&gt;
== Fixed or implemented in ACP build 119: 23- Sep-2023  ==&lt;br /&gt;
* ER 1739 Add a confirmation message box when uploading a file that has the same name as a file present in the folder.&lt;br /&gt;
* ER 1735 Formnode border color should match original node when using 'flat' button style&lt;br /&gt;
* ER 1734 Don't show border of formnode buttons when using Flat button style and original node has no border.&lt;br /&gt;
* EW 1732 Can't upload an update to existing file using Publish to Cloud or User Portal&lt;br /&gt;
* ER 1731 Table cells should be vertically aligned to &amp;quot;top&amp;quot; and not &amp;quot;center&amp;quot; by default, same as DTA&lt;br /&gt;
* ER 1730 Make mutliline text cells have text left aligned, same as DTA&lt;br /&gt;
* EW 1729 unexpectedly small limit on # of simultaneous heat pump calc instances&lt;br /&gt;
* EW 1727 Table width doesn't fill out frame node.&lt;br /&gt;
* EW 1726 Pressing the Autoscale icon changes from Log to Linear scale, and is irreversible - you can't get back to where you started.&lt;br /&gt;
* EW 1712 Error when opening Suan Account admin in ACP&lt;br /&gt;
* EW 1709 Numbers with dollar sign number format paste as text into edit table&lt;br /&gt;
* EW 1682 Choice controls using an array-valued computed domain don't update when computed domain changes.&lt;br /&gt;
* ER 1652 Flat button style&lt;br /&gt;
* EW 1636 Output node uncertainty menu appears a long way from the node when clicked&lt;br /&gt;
* ER 1296 Numbers with dollar signs should paste as numbers (not text)&lt;br /&gt;
&lt;br /&gt;
== Fixed or implemented in ACP build 118: 22- August-2023  ==&lt;br /&gt;
* EW 1722 Error messages appearing, User Portal file list not showing.&lt;br /&gt;
* EW 1729 Cursor remains a hand when not hovering over a link in the email invite status message.&lt;br /&gt;
* Ew 1719 Add space before and after the number model runs remaining in the status message in Premium group account.&lt;br /&gt;
* EW 1718 stray numbers in the account tab when count model runs is turned off.&lt;br /&gt;
* EW 1716 Graph zoom shows blank graph&lt;br /&gt;
* EW 1715 In Portal Models listing, if you click on an xlsx or xlms file, ACP tries to open it and hangs&lt;br /&gt;
* EW 1714 Upload dialog is only showing .ana files initially, but it should include xlsx, txt and csv&lt;br /&gt;
* EW 1710 Mis-aligned text in the Account tab for purchased credits (depends on user name)&lt;br /&gt;
* EW 1671 The Calc button on formnodes not working (at least in this model).&lt;br /&gt;
&lt;br /&gt;
== Fixed or implemented in ACP build 117: 2- August-2023  ==&lt;br /&gt;
* ER 1708 ACP Model Runs.ana top diagram not showing in ACP due to frame node issue&lt;br /&gt;
* ER 1707 Allow Gravelroad to have 10 users even after changing the limit to 4 users for Group accounts.&lt;br /&gt;
* ER 1706 Use purchased credits when launching a model evite.&lt;br /&gt;
* ER 1705 Count purchased credits when launching a model in ACP Portal.&lt;br /&gt;
* ER 1704 Count purchased credits when launching a model in ACP Portal.&lt;br /&gt;
* EW 1702 ACP hangs on MTAIR model. &lt;br /&gt;
* EW 1699 A certain [calc] button doesn't calc when clicked.&lt;br /&gt;
* ER 1691 When creating a project, the cursor should be automatically placed in the project name input field&lt;br /&gt;
* EW 1690 Cells in a table with Cell fills don't paste values into an edit table.&lt;br /&gt;
* ER 1689 Add the [Credit Sales] table creation to the Create Suan DB.ana model file.&lt;br /&gt;
* ER 1687 Add Table [Credit Sales] to Suan Subscriptions database on Suan-stage and acp.lumina.com.&lt;br /&gt;
* EW 1686 When a user has just one subscription, there should be a space between the colon and the subscription name.&lt;br /&gt;
* ER 1684 Provide feedback when 'Sign up' button is pressed on log in page.&lt;br /&gt;
* EW 1683 In Account tab of User Portal, Account choice pulldown menu is not aligned properly.&lt;br /&gt;
* ER 1681 Remove [Number of credits used] column the Credit Sales table in the Suan database.&lt;br /&gt;
* ER 1680 Change &amp;quot;session credits&amp;quot; to &amp;quot;model run credits&amp;quot; in in status messages in 'Launch eVite.ana'.&lt;br /&gt;
* EW 1678 Out of session credits Message contains a link which is formatted as text and non clickable.&lt;br /&gt;
* ER 1677 Move model run limits from Session Limits to Model Run Credits.ana.&lt;br /&gt;
* EW 1675 With 0 sessions remaining, the account tab show a blank area next tothe number os sessions remaining.&lt;br /&gt;
* ER 1663 Change &amp;quot;Session credits&amp;quot; to &amp;quot;model runs&amp;quot; in ACP UI and message boxes.&lt;br /&gt;
&lt;br /&gt;
== Fixed or implemented in ACP build 116: 6- july-2023  ==&lt;br /&gt;
* EW 1693 Style library sets top tabs when added as default instead of outline 	&lt;br /&gt;
* EW 1676 Some url encoded keys are not supposed to be passed into ACP for security reasons.&lt;br /&gt;
* EW 1673 Sometimes model doesn't launch when file name is clicked in model listing.&lt;br /&gt;
* ER 1597 Pass data on URL query string to model.&lt;br /&gt;
&lt;br /&gt;
== Fixed or implemented in ACP build 115: 29- jun-2023  == &lt;br /&gt;
* EW 1670 Hide Definitions still doesn't hide them when set at the module level.&lt;br /&gt;
* ER 1669 Don't enforce model run limits when opening an invite for Lumina accounts and lumina.com accounts&lt;br /&gt;
* EW 1668 A hidden definition can be viewed (e.g., in the Object tab) in ACP.&lt;br /&gt;
* EW 1667 Graph shown ACP1 Graph tab is a little too short initially.&lt;br /&gt;
* ER 1664 Move model runs limits (session credits) from acpConfig.js&lt;br /&gt;
* ER 1661 Change ACP &amp;quot;Sessions&amp;quot; to be same as &amp;quot;Model runs&amp;quot;&lt;br /&gt;
* EW 1658 Images in nodes in Txc example model exceed the nodes' borders&lt;br /&gt;
* ER 1657 Create new flag for turning off counting of session credits&lt;br /&gt;
* EW 1656 Number appears below Models Listing after pressing Email Invite button&lt;br /&gt;
* ER 1654 Don't show hidden modules as Top/Side navigation tab&lt;br /&gt;
* ER 1653 Show Session Info for Individual accounts in the User Portal's Account tab&lt;br /&gt;
* ER 1651 Add exclusion to the Lumina group account and lumina.com individual accounts to enforcing session limits&lt;br /&gt;
* ER 1649 Add warning messages when number of sessions is getting low&lt;br /&gt;
* ER 1648 Limit file upload sizes for Individual, Group and Group Premium plans in User Portal&lt;br /&gt;
* ER 1642 Limit session credit usage for Individual accounts, same as is already done for group accounts&lt;br /&gt;
* ER 1641 Update message shown to users when they have exhausted the accounts session credits.&lt;br /&gt;
* ER 1639 Enforce session credit limits when opening an invite in account that has reached its limit&lt;br /&gt;
* EW 1637 Sessions are not decremented when this model is launched.&lt;br /&gt;
* EW 1630 With top tabs, outliner, and no frame/tall node, graph is too tall&lt;br /&gt;
* EW 1574 After Publish to Cloud from DTA, model should open in ACP (but does not)&lt;br /&gt;
&lt;br /&gt;
== Fixed or implemented in ACP build 114: 17-May-2023  == &lt;br /&gt;
* EW 1668 Hidden Definitions aren't hidden&lt;br /&gt;
* EW 1666 In the ACP sessions model, when you set subscr to ‘All’ it gives this error message.&lt;br /&gt;
* ER 1631 Add a warning message for people using ACP in FireFox, advising them to use Chrome.&lt;br /&gt;
* ER 1628 Show the number of sessions remaining for a group account in the User Portal.&lt;br /&gt;
* EW 1627 Text alignment wrong for some rows in result table in Max's Enterprise model.&lt;br /&gt;
* EW 1626 Max: Get delete projects working or remove button.&lt;br /&gt;
* ER 1625 Many table cell formats styles are not yet in ACP.&lt;br /&gt;
* ER 1623 Remove the link to the ACP and Lumina terms of use agreement&lt;br /&gt;
* ER 1618 When opening a model (evite), make it just one progress bar for the Reading Model File and Checking Definitions.&lt;br /&gt;
* ER 1617 Make progress bar wider.&lt;br /&gt;
* ER 1616 Input and outnode node buttons appear briefly and are then replaced by icons.&lt;br /&gt;
* ER 1615 Update the lumina logo on the model listing's footer to the new style&lt;br /&gt;
* EW 1614 A model with a quote in the file name throws an error when pressing email invite.&lt;br /&gt;
* ER 1612 Update logo colors in loading screen.&lt;br /&gt;
* EW 1589 Can't add email invite addresses with a + sign in the address.&lt;br /&gt;
* ER 1514 Ability to select across multiple rows from result tables.&lt;br /&gt;
* EW 1453 Scalar user output nodes with dates won't show result.&lt;br /&gt;
&lt;br /&gt;
== Fixed or implemented in ACP build 113: 28-Apr-2023  == &lt;br /&gt;
* ER 1611 Old Analytica logo on sign-in page&lt;br /&gt;
* ER 1610 Give ACP Portal tabs the same hover and click feedback that tabs &amp;quot;Tabs across the top&amp;quot; has.&lt;br /&gt;
* ER 1609 Update Icon in Title Toolbar&lt;br /&gt;
* ER 1608 Enforce session credit limits when opening a model the user portal&lt;br /&gt;
* EW 1606 Using slider in edit table crashes ACP&lt;br /&gt;
* ER 1605 Add configuration settings to AcpConfig for max number of users allowed in Basic and Premium plans&lt;br /&gt;
* ER 1603 Exempt 'Lumina' premium group plan from the new limits on number of users&lt;br /&gt;
* ER 1601 Round bottom corners of diagram when outline is showing&lt;br /&gt;
* EW 1600 slider control non responsive in frame node edit table cell&lt;br /&gt;
* ER 1598 When clicking on input node with numeric % format, select only the digits as DTA does.&lt;br /&gt;
* ER 1596 When a group account has reached its limit of users, show informative message when the 'Add users' button&lt;br /&gt;
* ER 1594 When double- clicking on a table cell to edit a number, select the digits, same as DTA in browse mode&lt;br /&gt;
* ER 1591 Limit number of users for Basic Group Accounts and Premium Group Accounts&lt;br /&gt;
* ER 1310 When entering edit mode for an edit table cell, have the current contents become selected.&lt;br /&gt;
&lt;br /&gt;
== Fixed or implemented in ACP build 112: 13-Apr-2023  == &lt;br /&gt;
* EW 1595 When logged in with auth string. new invitees get the authstring in their invite email&lt;br /&gt;
* ER 1587 Give hover feedback when mousing over buttons in Users tab or ACP portal&lt;br /&gt;
&lt;br /&gt;
== Fixed or implemented in ACP build 111: 1-Apr-2023  == &lt;br /&gt;
* EW 1586 Multichoice Filter Crash&lt;br /&gt;
* EW 1584 Continuous slider not working well when using auto_zoom_diagrams: yes&lt;br /&gt;
* EW 1581 Bottom rhs Lumina logo partially off screen when viewing table/graph w/ top tabs&lt;br /&gt;
* EW 1580 There should be a white margin to right of the diagram/tabs area to match the white margin to left of the Outline area.&lt;br /&gt;
* ER 1579 Bottom corners of diagram area should be rounded to match bottom corners of Outline area&lt;br /&gt;
* ER 1578 Change background color for selected item in the outliner&lt;br /&gt;
* ER 1577 Bottom of diagram area should align with bottom of Outline area&lt;br /&gt;
* ER 1576 Make top/side module tab title font white when tab has a dark background color.&lt;br /&gt;
* EW 1575 Cells with percent format don't enter the way Hadi wants it for heat pump model (back to ie 20= 2000%)&lt;br /&gt;
* EW 1572 Wrong parent tab is shown when changing to another diagram by clicking on output variable.&lt;br /&gt;
* EW 1571 Table does not pivot correctly when index menu pivoter is changed.&lt;br /&gt;
* EW 1569 Slider labels do not show with style lablesbelow&lt;br /&gt;
* ER 1567 Add the model file name to the help balloon that appears when you hover over the title in the toolbar&lt;br /&gt;
* ER 1565 Remove internal borders from cell selection in edit tables.&lt;br /&gt;
* EW 1357 Cell border remains highlighted after clicking outside the edit table&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Fixed or implemented in ACP build 110: 1-Mar-2023  == &lt;br /&gt;
* EW 1560 Error selecting a file in the model listing.&lt;br /&gt;
* EW 1558 Error message with new ACP account.&lt;br /&gt;
&lt;br /&gt;
== Fixed or implemented in ACP build 109: 18-Febuary-2023  == &lt;br /&gt;
* EW 1546 Enhance json returned by useObjAtt(oid, &amp;quot;_sliderState&amp;quot;) to include number formatting and tick marks&lt;br /&gt;
&lt;br /&gt;
== Fixed or implemented in ACP build 108: 16-Febuary-2023  == &lt;br /&gt;
* EW 1555 No messages when clicking the sign up button. &lt;br /&gt;
* EW 1553 No feedback when clicking the Get a new password button. (And other buttons on the sign in page.)c.f. 1555&lt;br /&gt;
* ER 1549 Change setVal for _sliderState to accept an array of vals/pos(s) for sliders in edit tables.&lt;br /&gt;
* EW 794 Arrows show between modules when top tabs nav style is used&lt;br /&gt;
&lt;br /&gt;
== Fixed or implemented in ACP build 107: 13-Febuary-2023  == &lt;br /&gt;
* EW 1552 Warning about password field exposes user's password.&lt;br /&gt;
* ER 1551 Node titles not wrapping when they should, in this case no spaces in the title&lt;br /&gt;
* ER 1548 Get setVal working for discrete slider input nodes.&lt;br /&gt;
* EW 1544 Showwindow() not working for definition window&lt;br /&gt;
* EW 794 Arrows show between modules when top tabs nav style is used&lt;br /&gt;
&lt;br /&gt;
== Fixed or implemented in ACP build 106: 7-Febuary-2023  == &lt;br /&gt;
* EW 1550 There should be a message box w/ caption &amp;quot;Standard ACP Settings?&amp;quot; after adding style lib&lt;br /&gt;
* ER 1543 Make Download this model option off by default&lt;br /&gt;
* ER 1542 Implement the &amp;quot;Labels Below&amp;quot; style for discrete slider input nodes&lt;br /&gt;
* ER 1539 Implement input node control that is a slider with two thumbs (discrete)&lt;br /&gt;
* ER 1537 Implement input node control that is a slider with two thumbs (continuous)&lt;br /&gt;
* ER 1535 Sliders with first and last options labels at ends for discrete sliders&lt;br /&gt;
&lt;br /&gt;
== Fixed or implemented in ACP build 105: 21-January-2023  == &lt;br /&gt;
* ER 1534 Implement 'Discrete single thumb' slider for slider input nodes&lt;br /&gt;
* ER 1533 Sliders w/ lower bound and upper bound labels &amp;quot;At Ends&amp;quot;&lt;br /&gt;
* EW 1529 Slider state update does not appear to be working when using useObjAtt(oid, &amp;quot;_sliderState&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
== Fixed or implemented in ACP build 104: 19-January-2023  == &lt;br /&gt;
* EW 1532 Arrows below initial scroll view don't display.&lt;br /&gt;
* ER 1531 Complete thumb shapes for sliders i.e. Block, Line, Diamond shapes&lt;br /&gt;
* EW 1529 Slider state update does not appear to be working when using useObjAtt(oid, &amp;quot;_sliderState&amp;quot;);&lt;br /&gt;
* EW 1528 useObjAtt(oid, &amp;quot;_sliderState&amp;quot;) returns malformed JSON when slider has two thumbs&lt;br /&gt;
* ER 1527 Implement &amp;quot;Needle&amp;quot; and &amp;quot;Rectangle&amp;quot; thumb shapes for sliders&lt;br /&gt;
* ER 1526 Slider w/ no thumb&lt;br /&gt;
* EW 1524 allow_model_download:false / show_menu_download:no causes extra line '0' in close menu.&lt;br /&gt;
* ER 1523 Continuous single thumb slider w/ circular thumb&lt;br /&gt;
&lt;br /&gt;
== Fixed or implemented in ACP build 103: 15-January-2023  == &lt;br /&gt;
* ER 1522 For large tables, implement a way to get a totals cell using useQuery({req: &amp;quot;cell&amp;quot; ...})&lt;br /&gt;
* ER 1520 Rename ACP Style controlling the appearance of the &amp;quot;Download Mode&amp;quot; menu option in the toolbar&lt;br /&gt;
* ER 1519 Move &amp;quot;Download model&amp;quot; menu options from Hamburger menu to the Save/Close menu&lt;br /&gt;
* ER 1518  Add &amp;quot;Download model&amp;quot; menu item to the hamburger menu&lt;br /&gt;
* ER 1517 Add click feedback for Hamburger and Close menu items&lt;br /&gt;
* ER 1516 Have diagram tabs zoom out to match auto zoom of diagrams&lt;br /&gt;
* EW 1513 List output node not showing &amp;quot;List&amp;quot; on its button when set to text&lt;br /&gt;
* EW 1510 useQuery(req: &amp;quot;cell&amp;quot;...) no longer working, always returns undefined&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Fixed or implemented in ACP build 102: 13-December-2022  == &lt;br /&gt;
* EW 1508 ACP white screen crash when double clicking on date in edit table&lt;br /&gt;
&lt;br /&gt;
== Fixed or implemented in ACP build 101: 7-December-2022  == &lt;br /&gt;
* EW 1504 Can't upload and overwrite a model&lt;br /&gt;
* EW 1502 Description Balloon not showing for graph in tall node&lt;br /&gt;
* EW 1501 Lingering description balloon&lt;br /&gt;
* EW 1497 List input node not showing icon when it should be&lt;br /&gt;
* EW 1494 Show help balloon for frame node table/graphs when show_description: 0 is present&lt;br /&gt;
* EW 1477 Come up with a way to change uncertainty view for atomic output nodes&lt;br /&gt;
&lt;br /&gt;
== Fixed or implemented in ACP build 100: 23-November-2022  == &lt;br /&gt;
* ER 1496 If model using Century Gothic diagram font, and that font is not present, then use 'sans-serif'&lt;br /&gt;
* EW 1495 Get help balloon close button working to handle lingering balloons&lt;br /&gt;
* EW 1489 Model crashes after editing a table cell&lt;br /&gt;
* EW 1488 Help balloon not showing in tall nodes when show_description: 0/no is set at the model level&lt;br /&gt;
&lt;br /&gt;
== Fixed or implemented in ACP build 99: 17-November-2022  == &lt;br /&gt;
* EW 1487 Add close button to help balloon just in case it lingers.&lt;br /&gt;
* EW 1486 White screen crash when viewing large table from Bayer model.&lt;br /&gt;
* EW 1485 Large table crashes with Table truncation.&lt;br /&gt;
* ER 1484 Merge Lonnie's and Fred's large table truncation ERs.&lt;br /&gt;
* ER 1482 Add choice list filtering for long multichoice inputs.&lt;br /&gt;
* ER 1481 Change how percent cells are updated in edit tables (e.g. 20 = 20% not 2000%).&lt;br /&gt;
* EW 1475 Self-Choice in table doesn't work with array-valued domain.&lt;br /&gt;
* EW 1470 No indication that the model is still loading loading (while csv i is being read).&lt;br /&gt;
* ER 1468 ACP API enhancements for Slider controls.&lt;br /&gt;
* EW 183 Cell formatting doesn't work in header cells.&lt;br /&gt;
&lt;br /&gt;
== Fixed or implemented in ACP build 98: 31-October-2022  == &lt;br /&gt;
* ER 1474 Move white list of allowable upload types to acpConfig.json&lt;br /&gt;
* ER 1472 Give click feedback to button nodes&lt;br /&gt;
* ER 1471 Give click feedback when clicking form node buttons e.g. make text white&lt;br /&gt;
&lt;br /&gt;
==Build 97 - skipped - same as build 96==&lt;br /&gt;
&lt;br /&gt;
== Fixed or implemented in ACP build 96: 21-October-2022  == &lt;br /&gt;
* EW 1465 Don't show message box twice about updating to latest version of style library&lt;br /&gt;
* ER 1464 Only show choice menu filter when the menu has more 10 items.&lt;br /&gt;
* ER 1463 Add choice input filter feature for choice input nodes&lt;br /&gt;
* ER 1462 Don't show message about replacing ACP Style Lib twice&lt;br /&gt;
* ER 1461 Truncate large tables - interim solution - This is what we did in ACP1 and no complaints.&lt;br /&gt;
* EW 1460 rhs border of hierarchy stripe and diagram don't match&lt;br /&gt;
* EW 1457 Help Balloon lingers when using choice input&lt;br /&gt;
* EW 1455 Result table column is too narrow&lt;br /&gt;
&lt;br /&gt;
== Fixed or implemented in ACP build 95: 8-October-2022  == &lt;br /&gt;
* EW 1450 Pressing Email Invite button causes white screen in models listing&lt;br /&gt;
* EW 1448 Can't upload .xlsx file&lt;br /&gt;
* ER 1447 Add mouse feedback for msgbox() dialog buttons&lt;br /&gt;
* ER Add mouse feedback to close button on Connection Status dialog&lt;br /&gt;
* ER 1445 Only allow certain files types to be uploaded in the user portal&lt;br /&gt;
* ER 1444 When ACP web socket connection is closed, provide feedback and reconnect&lt;br /&gt;
* EW 1443 Remove new line characters in title for formnodes&lt;br /&gt;
* ER 1440 No response when you click Download button in portal models listing&lt;br /&gt;
* EW Cannot show probabilistic result for distribution - model specific.&lt;br /&gt;
* EW 1275 Users can upload other types of files&lt;br /&gt;
* EW 1263 Title wraps too soon in form node labels sometimes.&lt;br /&gt;
&lt;br /&gt;
== Fixed or implemented in ACP build 94: 26-September-2022  == &lt;br /&gt;
	&lt;br /&gt;
* ER 1436 Add click feedback and close popup menu when 'download csv' is clicked&lt;br /&gt;
* ER 1435 Download CSV should show wait icon&lt;br /&gt;
* EW 1434 Tooltips not working for top toolbar or icons in embedded notes&lt;br /&gt;
* EW 1335 Header is squashed in edit table without title showing&lt;br /&gt;
&lt;br /&gt;
== Fixed or implemented in ACP build 93: 23-September-2022  == &lt;br /&gt;
* &lt;br /&gt;
* EW 1422 Units of Embeddded edit table in wrong location&lt;br /&gt;
* EW 1428 Add vertical scroll bar to help balloon when text doesn't fit&lt;br /&gt;
* EW 1430 Can't switch to pdf table from graph in frame node.&lt;br /&gt;
* EW 1431 Top of Help Balloon is too high, off top of screen&lt;br /&gt;
&lt;br /&gt;
== Fixed or implemented in ACP build 92: 18-September-2022  == &lt;br /&gt;
* EW 1423 Error when opening Cory's model&lt;br /&gt;
* ER 1425 Add feedback when clicking on model name in portal's model listing&lt;br /&gt;
&lt;br /&gt;
== Fixed or implemented in ACP build 91: 15-September-2022  == &lt;br /&gt;
* EW 1407 W/tall output node X + Frame node, X should not appear in Frame node.&lt;br /&gt;
* EW 1421 Error when trying to download csv of Cory's edit table&lt;br /&gt;
&lt;br /&gt;
== Fixed or implemented in ACP build 90: 14-September-2022  == &lt;br /&gt;
* EW 1417 &amp;quot;Error occurred while processing query&amp;quot; message appears when viewing tables&lt;br /&gt;
* ER 1416 Have a double click open a choice input inside an edit table&lt;br /&gt;
&lt;br /&gt;
== Fixed or implemented in ACP build 89: 14-September-2022  == &lt;br /&gt;
* EW 1415 Bayer model: Suan crashes when changing project status to deleted.&lt;br /&gt;
* EW 1414 Suan crashes when deleting a case in the Bayer model&lt;br /&gt;
* EW 1413 Long Index values extend outside the slicer text Fields.&lt;br /&gt;
* EW 1411 No spinning cube indication of ongoing calculation for framenode.&lt;br /&gt;
* ER 1405 Add Filtering capability for choice inputs (initially in edit tables)&lt;br /&gt;
* EW 1393 Probabilistic results not showing up in Car Cost model. (For non-prob variable)&lt;br /&gt;
&lt;br /&gt;
== Fixed or implemented in ACP build 88: 31-August-2022  == &lt;br /&gt;
* ER 1404  Choice input in edit table cell, make clickable region highlight on mouse hover.&lt;br /&gt;
* ER  1403 Choice input in edit table, expansion of the sensitive area around the menu triangle.&lt;br /&gt;
* ER 1401 Show a message when selecting a probabilistic result for a non-prob node. &lt;br /&gt;
* EW 1400 Can't change projects/accounts.&lt;br /&gt;
* ER 1392 	Lists should show as a single list not repeated in a table&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Fixed or implemented in ACP build 87: 26-August-2022  == &lt;br /&gt;
* EW 1399 In ACP1 tabs, click on graphs doesn't show graph data point balloon.&lt;br /&gt;
* ER 1398 Don't show non prob views for non prob variables&lt;br /&gt;
* EW 1397 Prob view selector pulldown doesn't work in tall nodes for graphs.&lt;br /&gt;
* ER 1395 Message boxes should be centered on the browser screen&lt;br /&gt;
* ER 1387 Reload ACP style lib option in hamburger menu&lt;br /&gt;
* ER 1354 Prompt user to save model when closing model&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Fixed or implemented in ACP build 86: 15-August-2022  == &lt;br /&gt;
* EW 1386 After adding style library from hamburger menu, model listing does not show when closing model.&lt;br /&gt;
* EW 1381 Unresponsive Spinning cube after closing a model (caused by fix for EW 1367).&lt;br /&gt;
* ER 1367 Add feedback when closing model because sometimes takes a long time.&lt;br /&gt;
&lt;br /&gt;
== Fixed or implemented in ACP build 85: 28-July-2022  == &lt;br /&gt;
&lt;br /&gt;
* EW 1382 Show effects of multichoice selections as they are clicked . (Or choice input popup displaying wrong menu items when clicked after updating another dependent choice/multichoice input.)&lt;br /&gt;
* EW 1380 Don't show message &amp;quot;This cell can't be edited&amp;quot; for cells in a result table.&lt;br /&gt;
* ER 1379 When you copy a selected cell with a choice menu, it should copy the value selected in the menu (text or number).&lt;br /&gt;
&lt;br /&gt;
== Fixed or implemented in ACP build 84: 22-July-2022  == &lt;br /&gt;
&lt;br /&gt;
* ER 1377 Give choice input cells a green selection border when clicked&lt;br /&gt;
* ER 1376 Pasting copied cell into selected cells in an edit table&lt;br /&gt;
* ER 1375 Help menu should display options when reportissue.vbs is not present. All but Tech support.&lt;br /&gt;
* ER 1374 Style library - move save frame views to the esoteric styles module.&lt;br /&gt;
* ER 1373 Change UX for 'Save as' dialog when overwriting existing files&lt;br /&gt;
* ER 1372 Users portal, change 'Not member' menu option to 'Remove'&lt;br /&gt;
* ER 1371 Display &amp;quot;This field can't be edited.&amp;quot; when someone double clicks on a read only edit table cell&lt;br /&gt;
* ER 1370 Give read only cells in edit tables a gray background&lt;br /&gt;
* ER 1367 Add feedback when closing model because sometimes takes a long time&lt;br /&gt;
* ER 1366 Add time to &amp;quot;Save date&amp;quot; column in Models listing in Portal&lt;br /&gt;
* EW 1365 Remove excess corners from gray highlight on mouseover of Frame&lt;br /&gt;
* ER 1364 Too much information when loading and checking a large model&lt;br /&gt;
* ER 1323 change choice menu opening for edit tables so it only opens on arrow click&lt;br /&gt;
* EW 1287 Images should not be paste-able in edit tables.&lt;br /&gt;
* EW 1286 JavaScript crash when result in output node is an image&lt;br /&gt;
&lt;br /&gt;
== Fixed or implemented in ACP build 83: 5-July-2022  == &lt;br /&gt;
* ER 1363 Change behavior for ctrl+a when deselecting items in multichoice input. When all elements are selected, make Ctrl+A,  unselect all, and select the item the cursor is hovering on at the same time.&lt;br /&gt;
* ER 1361 For multichoice input nodes, move &amp;quot;First only&amp;quot;, &amp;quot;All&amp;quot; and &amp;quot;None&amp;quot; to top of listing.&lt;br /&gt;
* ER 1360 Column is too wide in a result table (FWB: But the column header needs space for the index name, totals icon and sort icon).&lt;br /&gt;
* EW 1359 Text does not fit in text node.&lt;br /&gt;
* ER 1358 Syntax errors etc should not ask if you want to edit the Definition.&lt;br /&gt;
* ER 1356 Add tool tips for logos in the footer&lt;br /&gt;
* ER 1374 Max' Style library update - move save frame views to the esoteric styles module&lt;br /&gt;
* DTA ER 20520 - Max' Style library update - Add the remove save menu options to the Style library&lt;br /&gt;
&lt;br /&gt;
== Fixed or implemented in ACP build 82: 27-June-2022  == &lt;br /&gt;
* EW 1355 Cannot make a user 'not a member' of a project&lt;br /&gt;
* ER 1353 Prompt user with message box when attempting to save a model with the same name as an existing model&lt;br /&gt;
* EW 1350 Strange and inappropriate error message when saving file.&lt;br /&gt;
&lt;br /&gt;
== Fixed or implemented in ACP 3.1 build 81: 25-June-2022  == &lt;br /&gt;
* EW 1352 Asking to save changes before opening a model&lt;br /&gt;
* ER 1349 Make footer larger and increase size of Lumina logo in footer&lt;br /&gt;
* ER 1347 For tall text input with control on left, align title with text area&lt;br /&gt;
* ER 1346 Remove &amp;quot;List&amp;quot; from ACP permissions table&lt;br /&gt;
* ER 1345 Make text input background white (not color of original node)&lt;br /&gt;
* ER 1344 Redo 1332 When using ShowWindow() to switch diagrams, update selected top/side tab&lt;br /&gt;
* ER 1343 Increase the wait time to show a balloon from ~0.5 seconds to 1 second&lt;br /&gt;
* ER 1340 Add drop shadow to help balloon&lt;br /&gt;
* ER 1339 Remove 'Disconnect' and 'Sign out' buttons from Connection Status dialog&lt;br /&gt;
* ER 1338 New 'All', 'None' and 'First only' options for multichoice inputs&lt;br /&gt;
&lt;br /&gt;
== Fixed or implemented in ACP build 80: 9-June-2022  == &lt;br /&gt;
* EW 1337 CellFont(underline:true) doesn't work, bad JSON&lt;br /&gt;
* EW 1334 Green check and red X button show in result graph&lt;br /&gt;
&lt;br /&gt;
== Fixed or implemented in ACP build 79: 8-June-2022  == &lt;br /&gt;
* ER 170 Implement the cell-level formatting feature, CellOnClick.&lt;br /&gt;
&lt;br /&gt;
== Fixed or implemented in ACP build 78: 7-June-2022  == &lt;br /&gt;
* ER 1332 When using ShowWindow() to switch diagrams, update selected top/side tab&lt;br /&gt;
* ER 1330 Add '+ Add' button to list editing dialog&lt;br /&gt;
&lt;br /&gt;
== Fixed or implemented in ACP build 77: 4-June-2022  == &lt;br /&gt;
* ER 1329 Get 'Download CSV' working for Edit Tables&lt;br /&gt;
* ER 1328 Show the Download/Copy icon for edit tables&lt;br /&gt;
* ER 1327 Show Index Menus icon for edit tables&lt;br /&gt;
* ER 1325 Get copy from edit table working&lt;br /&gt;
* ER 1324 Change border for selected cell in tables&lt;br /&gt;
* ER 1322 Show help balloon for Tall Nodes&lt;br /&gt;
&lt;br /&gt;
== Fixed or implemented in ACP build 76: 26-May-2022  == &lt;br /&gt;
* ER 1321 When displaying the result table for an Index, make row headers blank&lt;br /&gt;
* ER 1320 New ACP Styles setting &amp;quot;Add_help_menu_option&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Fixed or implemented in ACP build 75: 22-May-2022  == &lt;br /&gt;
* ER 1319 New ACP Styles Remove_help_menu_options&lt;br /&gt;
* ER 1318 Add [X] button to Connection Status popup&lt;br /&gt;
* ER 1317 Add tooltip for A cube, and show web page when clicked&lt;br /&gt;
* ER 1316 Add “Status” window as option in ? instead of an icon that shows up when you click the “a” cube&lt;br /&gt;
* EW 1315 Cannot see port number completely in Server Connection popup&lt;br /&gt;
* ER 1313 Tool tips for top toolbar elements&lt;br /&gt;
* EW 1312 Tall inputs should not use bold font for title&lt;br /&gt;
* EW 1311 Error message when trying to download Last 1000 Sessions table as csv&lt;br /&gt;
* ER 1309 Change edit table UX for editing cells to double click&lt;br /&gt;
* ER 1308 Update users permissions table&lt;br /&gt;
&lt;br /&gt;
== Fixed or implemented in ACP build 74: 11-May-2022  == 	&lt;br /&gt;
* EW 1307 Make pasting cells into an edit table work using ctrl+v after a single click on a cell&lt;br /&gt;
* EW 1305 Add a black border or outline to edit table cell when clicked (single click)&lt;br /&gt;
* EW 1304 Get ride of clipboard icon in edit table cells&lt;br /&gt;
* EW 1279 Diagram crash when hierarchy is turned off while using Style library in orphans&lt;br /&gt;
&lt;br /&gt;
== Fixed or implemented in ACP build 73: 3-May-2022  == 	&lt;br /&gt;
* EW 1303 Error when adding users&lt;br /&gt;
* EW 1299 Can't send email invite&lt;br /&gt;
* EW 1265 ReadBinaryFile doesn't prompt user to upload a file&lt;br /&gt;
&lt;br /&gt;
== Fixed or implemented in ACP build 72: 31-Apr-2022  == 	&lt;br /&gt;
(This build mostly is js code added to implementatons still in progress so we can check it)&lt;br /&gt;
Add a flag to acpConfig.json for turning off clipboard icon in edit tables&lt;br /&gt;
* EW 1298 PG&amp;amp;E server: Cannot create FileSystemObject error when deleting file.&lt;br /&gt;
* ER 1292 Add a flag to acpConfig.json for turning off clipboard icon in edit tables&lt;br /&gt;
&lt;br /&gt;
== Fixed or implemented in ACP build 71: 29-Apr-2022  == &lt;br /&gt;
* EW 1293 Chrome times out after 60 seconds&lt;br /&gt;
* EW 1288 Suan.exe displays &amp;quot;Accept licensing terms&amp;quot; dialog even though server.config has DesktopUI=0&lt;br /&gt;
* EW 1285 Binary Data terms display incorrectly&lt;br /&gt;
* ER 1283 ER: Limit zooming of diagram to a factor of 2 -- i.e. down to 50% or up to 200%. If it doesn't fit at 50% it should show scroll bars.&lt;br /&gt;
* ER 1273 Cory: Don't show model model internals when someone clicks Cancel&lt;br /&gt;
* ER 380 ReadBinaryFile() and ReadImageFile() upload capability.&lt;br /&gt;
&lt;br /&gt;
== Fixed or implemented in ACP build 70: 19-Apr-2022  == &lt;br /&gt;
* EW 1284 Error in the Chrome developer tools console when using apache auth.&lt;br /&gt;
* EW 1278 Change &amp;quot;auto zoom&amp;quot; ACP Styles setting again  &amp;quot;auto_zoom_diagrams: yes&amp;quot; or &amp;quot;auto_zoom_diagrams: no&amp;quot;&lt;br /&gt;
* EW 1264 Edit table's accept and cancel buttons in wrong location&lt;br /&gt;
* EW 1165 Tabs should respond to mouse-over and click&lt;br /&gt;
* EW 1160 Auto Zoom diagram&lt;br /&gt;
* EW 783 Mis-spelled Acpstyle causes diagram not to load&lt;br /&gt;
* Analytica EW 20510 Add Acp styles auto_zoom_diagrams and hide_save_button to the Acp styles library&lt;br /&gt;
&lt;br /&gt;
== Fixed or implemented in ACP build 69: 18-Apr-2022  == &lt;br /&gt;
* EW 1277 Implement hide_save_button ACP Style for Cory&lt;br /&gt;
* EW 1276 Can't go back to the main model from styles library in orphans if top tabs selected.&lt;br /&gt;
&lt;br /&gt;
== Fixed or implemented in ACP build 68: 17-Apr-2022  == &lt;br /&gt;
* EW 1272 Change CPS Style for auto zoom and remove acpConfig.json setting for auto zoom.&lt;br /&gt;
* EW 1267 Get OnClick working for top/side tabs&lt;br /&gt;
&lt;br /&gt;
== Fixed or implemented in ACP build 67: 15-Apr-2022  == &lt;br /&gt;
* EW 1271 Add CPS Flag to turn on/off auto zoom feature&lt;br /&gt;
* EW 1270 Add flag to acpConfig.json for turn on/off the ability of reviewers to upload data files&lt;br /&gt;
* EW 1269 Allow reviewers to upload spreadsheets and text files&lt;br /&gt;
* EW 1262 Help balloons inconsistent for icons in Frame nodes&lt;br /&gt;
* EW 1255 Graph/Table icon tooltips position bad part 2&lt;br /&gt;
&lt;br /&gt;
== Fixed or implemented in ACP build 66: 12-Apr-2022  == &lt;br /&gt;
* EW1260 ACP hangs when pressing buttons in Heat Pump model&lt;br /&gt;
&lt;br /&gt;
== Fixed or implemented in ACP build 65: 8-Apr-2022  == &lt;br /&gt;
* EW 1259 Suan.exe won't launch on Server 2012. SetThreadDescription error. &lt;br /&gt;
* EW1258 Inputs/Outputs popup location is off with zooming&lt;br /&gt;
* EW1256 Slicer popup menu location off when zooming&lt;br /&gt;
* EW1255 Graph/Table icon tooltips position bad part 2 &lt;br /&gt;
&lt;br /&gt;
== Fixed or implemented in ACP build 64: 6-Apr-2022  == &lt;br /&gt;
* EW 1249 Multiple Suan Server processes for robustness.&lt;br /&gt;
* EW1256 Restart crashed or hung suan processes and do ping check programatically.&lt;br /&gt;
&lt;br /&gt;
== Fixed or implemented in ACP build 63: 31-Mar-2022  == &lt;br /&gt;
* EW 1248 Mouse over table/graph highlights title region of frame/tall node&lt;br /&gt;
* EW 1245 Help Balloon tail not correct for Top Tabs&lt;br /&gt;
* EW 1243 Choice popup location bad when control is on right hand side of the diagram&lt;br /&gt;
* EW 1242 Choice popup menu location still bad for choice inputs in embedded edit tables&lt;br /&gt;
* EW 1240 Choice popup in wrong location when located in the bottom of the screen.&lt;br /&gt;
* EW 1236 With nodes located at bottom of diagram, help balloon tail needs to be adjusted&lt;br /&gt;
* EW 1235 Help balloon location is bad with nodes on right or bottom of diagram&lt;br /&gt;
* EW 1233 Auto zoom leaves a wider space than necessary when a non visible module node is present.&lt;br /&gt;
* EW 1218 Graph clicks not working correctly when zoom effect is present&lt;br /&gt;
&lt;br /&gt;
== Fixed or implemented in ACP build 62 : 21-Mar-2022== &lt;br /&gt;
* 1244 Tab for top diagram doesn't show initially when opening style library from hamburger menu (in this model)&lt;br /&gt;
* EW 1237 Minor typo in tooltips for copy table icon.&lt;br /&gt;
* EW 1235 Help balloon location is bad with nodes on right or bottom of diagram&lt;br /&gt;
* EW 1230 Put a tail on help balloons.&lt;br /&gt;
* ER 1226 Refinement to tooltip for copy/download icon.&lt;br /&gt;
* EW 1223 Choice input popup menu location is incorrect with auto zooming feature&lt;br /&gt;
* EW 1222 Graph zooming not working as desired when autozoom is on&lt;br /&gt;
* EW 1220 Help Balloon location off when diagram is zoomed.&lt;br /&gt;
* ER 1216 Have &amp;quot;auto zoom&amp;quot; feature zoom in and out.&lt;br /&gt;
* ER 1215 Increase right and bottom margins when using autozoom.&lt;br /&gt;
* ER 1213 Have top/side and toolbar tabs show a white background when clicked.&lt;br /&gt;
* EW 1212 side tabs looks bad&lt;br /&gt;
* ER 1207 Implement tab color change on mouse over for side tabs&lt;br /&gt;
* ER 1041 Get blue links to variables working (Fixed as a side effect before build 62).&lt;br /&gt;
* W 911 Blue links to nodes should work or not be blue. (Fixed as a side effect before build 62).&lt;br /&gt;
&lt;br /&gt;
== Fixed or implemented in ACP build 61 : 10-Mar-2022== &lt;br /&gt;
* EW 1229 Styles library sets show_description: No instead of show_Description: 0&lt;br /&gt;
* EW 1225 ACP styles library has mix-matched settings for defaults, Also residual bad settings for some nodes.&lt;br /&gt;
* EW 1221 Style library from hamburger menu is not presetting styles correctly&lt;br /&gt;
* ER 1209 Change copy/download icon again&lt;br /&gt;
* EW 1208 Tooltip for uncertainty view pulldown menu is not showing useful text&lt;br /&gt;
* ER 1207 Implement tab color change on mouse over for side tabs&lt;br /&gt;
* ER 1204 Have Top/Side tabs change color on mouse hover (top tabs for now)&lt;br /&gt;
* ER 1203 Have toolbar tabs change color when mouse is hovering over them&lt;br /&gt;
* ER 1202 Add tooltip for Uncertainty View selector&lt;br /&gt;
* EW 1201 Copy download graph/table font is too big. And partly covered up&lt;br /&gt;
* ER1200 Add tooltips for table/graph icons&lt;br /&gt;
* ER 1199 Click response for icon buttons&lt;br /&gt;
* EW 1198 Tall Graphs don't show sometimes. Calculations showing continuously in dual interface&lt;br /&gt;
&lt;br /&gt;
== Fixed or implemented in ACP build 60 : 8-Mar-2022== &lt;br /&gt;
* ER 1199 Click response for icon buttons&lt;br /&gt;
* ER 1197 Add flag to acpConfig.json for turning on or off the new Auto Zoom feature&lt;br /&gt;
* ER 1196 &amp;quot;auto zoom&amp;quot; for diagrams&lt;br /&gt;
* ER 1194 Model's saved should include '.ana' extension&lt;br /&gt;
* EW 1193 Minor layout problem with Model Listing view&lt;br /&gt;
* EW 1192 Borders on Hierarchy Strip are too wide&lt;br /&gt;
* EW 1191 Two_top_tabs or Two_side_tabs cause warning when loading style library&lt;br /&gt;
* EW 1183 Error with 'Download CSV' when there's no row index.&lt;br /&gt;
* EW 1179 Get Download CSV to include row and column headers&lt;br /&gt;
* EW 1177 Don't show 'Download CSV' menu item for atomic result&lt;br /&gt;
* EW 1175 Download csv throws error without column index&lt;br /&gt;
* ER 1161 Change copy icon to a downward pointing arrow&lt;br /&gt;
&lt;br /&gt;
== Fixed or implemented in ACP build 59 : 21-Feb-2022== &lt;br /&gt;
* EW 1188 Problems with Style Library - Not ready for import, and wrong tabs in top tabs.&lt;br /&gt;
* EW 1173 Copy table buggy behavior with totals and cell fills&lt;br /&gt;
* EW 1171 Incomplete Acpstyle causes blank screen when model is opened&lt;br /&gt;
* EW 1170 Don't show 'ACP Styles Library' menu item when playing an invite.&lt;br /&gt;
* EW 1169 Conflict with identifiers after using ACP styles library from the hamburger menu.&lt;br /&gt;
* EW 1168 Deleting in a list deletes the wrong item&lt;br /&gt;
* ER 1167 Add download CSV capability for tables&lt;br /&gt;
* EW 1163 Row headers missing from copied table&lt;br /&gt;
* EW 1157 User portal still says Release 3.0&lt;br /&gt;
* EW 1128 Bizarre display of numerous nodes on diagram when reloading the style library.&lt;br /&gt;
&lt;br /&gt;
== Fixed or implemented in ACP build 58==&lt;br /&gt;
* ER 1155 Get SkipLogin working when using firebase&lt;br /&gt;
* EW 1154 Can't hover over description bubble to use hyperlinks&lt;br /&gt;
* EW 1153 Hyperlink not displaying correctly in ACP Help Balloon (Markup)&lt;br /&gt;
* EW 1150 Turn off spell check red underline in Save as box&lt;br /&gt;
* EW 1004 Change password accepts password after new password does not match.&lt;br /&gt;
* EW 434 ACP Top Tabs Style Prevents swapping between graph &amp;amp; table views&lt;br /&gt;
* EW 433 Stuck in Object window when using Top Tabs ACP&lt;br /&gt;
&lt;br /&gt;
== Fixed or implemented in ACP build 57==&lt;br /&gt;
* EW 1147Error when adding styles library from hamburger menu&lt;br /&gt;
* EW 1137 LaunchEvite.ana has an error at load time.&lt;br /&gt;
* EW 1111 Index menus icon overlaps the accept/cancel icons&lt;br /&gt;
* ER1107 Move acpConfig.js settings to a text file&lt;br /&gt;
* EW 1064 Model with proactive eval run at load time and AskMsgChoice()  doesn't open with evite&lt;br /&gt;
* EW 911 Blue links to nodes should work or not be blue&lt;br /&gt;
&lt;br /&gt;
== Fixed or implemented in ACP build 56==&lt;br /&gt;
* ER 1136 Add Copy Graph for embedded graphs&lt;br /&gt;
* ER 1135 Add new flag to acpConfig.json for showing copy table button&lt;br /&gt;
* EW 1133 Suan process crashes with Anagram&lt;br /&gt;
* EW 1132 Problem with special characters in Publish to cloud&lt;br /&gt;
* EW 866 Don’t show [Calc] button while computing tall node&lt;br /&gt;
* EW 196 Edit tables and result tables should show a &amp;quot;Copy table&amp;quot; button, same as ACP1.&lt;br /&gt;
&lt;br /&gt;
== Fixed or implemented in ACP build 55==&lt;br /&gt;
* EW 1129 Don't show 'Orphans' in Hierarchy Stripe when displaying Styles diagram&lt;br /&gt;
* EW 1126 Some problems with displaying and saving special characters&lt;br /&gt;
* ER 1123 With users set to not email addresses, Change cue text to say add users, not email addresses&lt;br /&gt;
* ER 1118 Don't show green check or red x buttons when edit table has proactivelyevaluate set to 16&lt;br /&gt;
* ER 1114 Move add ACP Styles menu items from help menu to hamburger menu&lt;br /&gt;
&lt;br /&gt;
== Fixed or implemented in ACP build 54==&lt;br /&gt;
* EW 1124 Change js code to use full path when calling AddModuleOrLibrary&lt;br /&gt;
* EW 1122 Fly-in and toggle table/graph icons should only appear on mouse over&lt;br /&gt;
* EW 1119 Toggle to graph icon present in edit table frame node&lt;br /&gt;
* EW 1113 Add flag for showing the add ACP Styles menu item(s)&lt;br /&gt;
&lt;br /&gt;
Builds 52-53 are for using Apache authentication with windows passwords. No Firebase option&lt;br /&gt;
&lt;br /&gt;
== Fixed or implemented in ACP build 53==&lt;br /&gt;
* EW 1102 When I sign in Suan account model throws uninformative errors.&lt;br /&gt;
* EW 1100 Turn off email validation when using apache auth&lt;br /&gt;
&lt;br /&gt;
== Fixed or implemented in ACP build 52==&lt;br /&gt;
* ER 1103 Remove the change password link from the Account tab&lt;br /&gt;
* ER 1099 Remove 'Sign out' menus from ACP when using apache auth.&lt;br /&gt;
* ER 1096 Add a way for turning off the Email Invites in the ACP Portal.&lt;br /&gt;
* ER 1095 With apache/windows auth, get users name to show up in toolbar.&lt;br /&gt;
&lt;br /&gt;
== Fixed or implemented in ACP build 51==&lt;br /&gt;
* EW 1089 You can't change the value of a slicer in some edit and result tables on ACP. &lt;br /&gt;
* EW 1085 Diagram crashes on opening&lt;br /&gt;
* EW 1083 Diagram crashes when changing navigation style&lt;br /&gt;
* ER 1081 Add toggle table/graph button for tables and graphs in top/side tabs&lt;br /&gt;
* EW 1079 Table in side tabs should have 8px margin on right, left and bottom sides&lt;br /&gt;
&lt;br /&gt;
== Fixed or implemented in ACP build 50==&lt;br /&gt;
* EW 1077 Top and side borders wrong in object, table, graph views for side tabs&lt;br /&gt;
* EW 1074 Table doesn't look good in side tabs&lt;br /&gt;
* EW 1073 Result table too big when using Top tabs&lt;br /&gt;
* EW 1072 Role in Project pulldown in the Subscription Administration project is disabled&lt;br /&gt;
* EW 1071 Come up with a way to turn off &amp;quot;self sign up&amp;quot; on a dedicated customer server.&lt;br /&gt;
* EW 1068 Footer on sign in page should appear below the sign in form&lt;br /&gt;
* ER 1065 Add Organization/Group name next to Project name in top teal toolbar&lt;br /&gt;
* EW 1063 Add 8px white margin on rhs of diagram when using Outline (default) navigation style&lt;br /&gt;
* ER 1062 Reduce white gap above outline and acp1 tabs to 8px&lt;br /&gt;
* ER 1058 Adjust the margin at the top of the ACP diagram.&lt;br /&gt;
* ER 1055 Change ACPStyle show_tabs to show_toolbar.&lt;br /&gt;
* EW 1053 Multichoice menu doesn’t close if you click on another variable&lt;br /&gt;
* EW 1051 Balloon goes off the edge of the diagram&lt;br /&gt;
* EW 1050 Cannot proactively evaluate choice selections inside a table in ACP&lt;br /&gt;
* EW 1048 Characters with accents and chinese characters not displaying correctly when model is uploaded via DTA Publish to Cloud&lt;br /&gt;
* EW 1046 Bulleted lists look bad in ACP after publishing to cloud&lt;br /&gt;
* EW 1038 balloonText not acknowledged in ACP3&lt;br /&gt;
* Ew 1032 MultiChoice should display «None» when there's nothing selected&lt;br /&gt;
* EW 995 Graph too wide when using side tabs&lt;br /&gt;
* ER 908 Hierarchy bar should include top level module name in non-tab views.&lt;br /&gt;
* EW 781 Balloon contents overlap the edge of the diagram&lt;br /&gt;
* EW 509 Help balloon goes off the bottom of the diagram&lt;br /&gt;
&lt;br /&gt;
A list of EW issues - Bugs or Enhancements  - that were fixed or implemented in the most recent ACP build&lt;br /&gt;
== Fixed or implemented in Build 0.45 (same as release 3.0)==&lt;br /&gt;
* EW 1067 Remove beta from login page.&lt;br /&gt;
* EW 1066 Unminimized javascript visible in Chrome Developers tools&lt;br /&gt;
* ER 1044 Remove add_scroll_bars from library and wiki&lt;br /&gt;
* ER 1043 Stop showing message box when someone clicks on blue link text in a table&lt;br /&gt;
* EW 1040 Hierarchy strip is a pixel or two too wide&lt;br /&gt;
* ER 1039 Make help menu forms (a) all dialogs have the same width, and (b) have a consistent top location, so that changes would affect only the length/height.&lt;br /&gt;
* ER 1034 Add new Help menu icon to the left of the Close menu icon in top toolbar&lt;br /&gt;
* ER 1033 Change wording on tech support form&lt;br /&gt;
* EW 1029 Tweak uneven margins for graphs in top tabs&lt;br /&gt;
* EW 1028 Add margin to tables shown in top tabs w/o frame/tall node&lt;br /&gt;
* EW 1027 Footer with logos not visible viewing result in top tabs&lt;br /&gt;
* EW 1024 Graph autoscale (zoom out) hover icon not working for comparison variables.&lt;br /&gt;
* EW 1023 Wrong index menus view. Similar to 1006.&lt;br /&gt;
* EW 1020 Graph goes blank after an OnClick event&lt;br /&gt;
* EW 1015 Units not showing in Tall Nodes&lt;br /&gt;
* EW 1003 Delete Project button in wrong location.&lt;br /&gt;
* EW 966 Result table takes a long time to display result.&lt;br /&gt;
* ER 920 Report issue dialog and result&lt;br /&gt;
&lt;br /&gt;
== Fixed or implemented in Build 0.44==&lt;br /&gt;
* EW 1017 Styles Lib preview, show title not working in preview.&lt;br /&gt;
* EW 1016 'Show_title: no' does not work with tall result tables.&lt;br /&gt;
* EW 1007 Crash when evaluating empty string for text only input node.&lt;br /&gt;
* EW 1006 Odd presentation of index menus - mix matched. &lt;br /&gt;
* ER 1000 Make last item in Hierarchy Stripe bold.&lt;br /&gt;
* EW Diagram crashes when changing Nav styles.&lt;br /&gt;
* ER 913 Make Diagram tooltab go to parent diagram and eliminate parent button.&lt;br /&gt;
* ER 816 Implement framenode ACP styles for variables.&lt;br /&gt;
&lt;br /&gt;
== Fixed or implemented in Build 0.43==&lt;br /&gt;
* ER 998 Put Outline in rounded rectangle&lt;br /&gt;
* EW 997 In Airplane NLP model, the outliner indentation is missing for items with long title &lt;br /&gt;
* EW 990 Form for adding users has significant layout problems&lt;br /&gt;
* EW 989 Outliner Scroll bar overlaps the Analytica logo&lt;br /&gt;
* EW 987 Can't see the entire email invite ui&lt;br /&gt;
* EW 986  ACP1 tabs should not wrap when window is narrow&lt;br /&gt;
* EW 984 ACP Change password ui is unresponsive&lt;br /&gt;
* EW 978 Show title:no also hides uncertainty view menu and table_graph/index_menus icons&lt;br /&gt;
* ER 696 Some outline view issues. A couple bugs and some ER's&lt;br /&gt;
* ER 594 Put Outline in rounded rectangle and many more&lt;br /&gt;
&lt;br /&gt;
== Fixed or implemented in Build 0.42==&lt;br /&gt;
* EW994 Graph size off when using Side Tabs with Use Top Diagiam Size&lt;br /&gt;
* EW 983 Style library does not show when I think it should&lt;br /&gt;
* EW 974 Parenthesis showing on models' diagram&lt;br /&gt;
* EW 973 Don’t show scrollbars when not needed&lt;br /&gt;
* ER 972 Show description of Module in balloon on mouseover of tab.&lt;br /&gt;
* ER 968 Tabs across the top should be fitted across the diagram, not the browser window width&lt;br /&gt;
* ER 967 When using show_title:no and no other graph header ui, graph fills entire frame/tall node&lt;br /&gt;
* ER 965 Some issues I had with the acp admin folder and suan account admin model.&lt;br /&gt;
* EW 961 Small gap at between graph and bottom of tall node. There should be no gap.&lt;br /&gt;
* EW 960 Excessive gap between graph and title in Tall Node&lt;br /&gt;
* EW 955 White area below Graph tab present, but should be gray.&lt;br /&gt;
* EW 953 Can't see the bottom of a graph in ACP1 Graph tab.&lt;br /&gt;
* ER 828 Analytica branding in ACP&lt;br /&gt;
&lt;br /&gt;
== Fixed or implemented in Build 0.41==&lt;br /&gt;
* EW 964 Email address reported as not valid&lt;br /&gt;
* EW 963 Delete User is poorly conceived. Problematic&lt;br /&gt;
* EW 962 The Privileges table clips&lt;br /&gt;
* EW 956 ACP tabs not visible in Navigation style side tabs - when the style is show_tabs:yes.&lt;br /&gt;
* EW 811 Show_title should work for Tall node as well as Frame&lt;br /&gt;
* EW 780 Table in Tall node doesn't use entire width&lt;br /&gt;
* ER 530 DB change for Add/Remove project permissions&lt;br /&gt;
&lt;br /&gt;
== Fixed or implemented in Build 0.40==&lt;br /&gt;
* EW 952 Can't change file name in Save As... dialog&lt;br /&gt;
* EW 951 Gray outline showing through the glow hover highlight on mouseover.&lt;br /&gt;
* EW 949 Text input for some inputs have a thick 2 pixel border, but should be only 1 px&lt;br /&gt;
* ER 946 Minor enhancement to text input boxes when they have focus.&lt;br /&gt;
* EW 945 Scroll bars not visible or only partially visible&lt;br /&gt;
* ER 942 Change appearance of &amp;quot;You are about to timeout&amp;quot; message box.&lt;br /&gt;
* EW 940 Model tab should read &amp;quot;Main&amp;quot;&lt;br /&gt;
* EW 939 Issues with navigation_style:two_top_tabs&lt;br /&gt;
* EW 938 Module node doesn't show on top diagram when module tabs are on.&lt;br /&gt;
* EW 937 Units showing above tall tables/graphs&lt;br /&gt;
* EW 874 Subtable with single text cell should not show as table in tall node&lt;br /&gt;
* EW 678 Getting stuck in a tab/diagram&lt;br /&gt;
* EW 472 Result does not show in top tabs style without frame node/tall node&lt;br /&gt;
&lt;br /&gt;
(build 35-39 failed the acceptance test - including the fixes in these builds here)&lt;br /&gt;
== Fixed or implemented in Build 0.39==&lt;br /&gt;
''(Note: this build failed the acceptance test)''&lt;br /&gt;
* ER 936 Don't show text selection mouse pointer when using Close Menu&lt;br /&gt;
* ER 935 Give visual feedback when a formnode button is clicked.&lt;br /&gt;
* EW 932 Zoom selects wrong axis range&lt;br /&gt;
* EW 931 Crash when changing tabs&lt;br /&gt;
* EW 930 ACP diagram layout not quite the same as DTA&lt;br /&gt;
* EW 929 Screen shows scroll bars when not needed&lt;br /&gt;
* EW 928 ACP Crashes - goes to blank screen&lt;br /&gt;
* EW 927 Unnecessary scroll bar in single cell input&lt;br /&gt;
* EW 925 Result in frame node Very slow to show results, and then redisplays the results multiple times &lt;br /&gt;
* ER 922 Sort projects pulldown menu alphabetically&lt;br /&gt;
* ER 918 Make border thinner for Module nodes&lt;br /&gt;
* ER 914 Save model as dialog should be same style as Message box dialog.&lt;br /&gt;
* ER 909 Change defaults for show_uncertainty_view&lt;br /&gt;
* ER 906 Implement cloudplayerstyle show_index_menus:fly-in for framenodes and tall nodes.&lt;br /&gt;
* EW 905 Wrong pivot in the Horizontal axis menu&lt;br /&gt;
* EW 901 Choice input menu with blank option selected is too short, ARC&lt;br /&gt;
* EW 899 Text inputs in ARC model have tiny scrollbars&lt;br /&gt;
* EW 898 Tall edit tables that are subtables do not display as automatically, and they are not embedded.&lt;br /&gt;
* EW 890 White screen after closing optimizer model after OptStatusText evaluation&lt;br /&gt;
* EW 856 Z-level of nodes wrong&lt;br /&gt;
* ER 823 Change to show_index_menus:no ACP style setting  &amp;quot;Show slicer indexes by default even when Show_index: No. &lt;br /&gt;
* ER 822 Add ACP style Show_index_menus: Not_even_slicers.&lt;br /&gt;
* EW 760 Can't view result graph for scalar chance variable.&lt;br /&gt;
* EW 747 Add support for Show_uncertainty_view: no/yes for individual nodes&lt;br /&gt;
* ER 309 Hide index menus above tables/graphs in Tall nodes&lt;br /&gt;
&lt;br /&gt;
== Fixed or implemented in Build 0.38==&lt;br /&gt;
''(Note: this build failed the acceptance test)''&lt;br /&gt;
* EW 895 Pivot table doesn't work, body cells not updating.&lt;br /&gt;
* EW 887 Tech support (or report issue) from Email invite gives white screen&lt;br /&gt;
* EW 886 Restart ACP from Email invite gives web socket error&lt;br /&gt;
* ER 870 When you enter text into a field and press enter, you need to use the mouse to enter replacement info.&lt;br /&gt;
* EW 861 Respect Z-order for Frame and other nodes&lt;br /&gt;
* EW 853 ARC -Choice menu control is too narrow - Unusable&lt;br /&gt;
* EW 850 Problem with inputs/inputs in ARC model&lt;br /&gt;
* EW 466 Suan.exe crashes (vanishes) at model load with a model from guidehouse&lt;br /&gt;
* EW 353 Weird view while starting a model&lt;br /&gt;
&lt;br /&gt;
== Fixed or implemented in Build 0.37==&lt;br /&gt;
''(Note: this build failed the acceptance test)''&lt;br /&gt;
* EW 891 Tall result tables exceed bottom border.&lt;br /&gt;
* EW 852 Embedded tall subtable has too many titles&lt;br /&gt;
* ER 821 New ACP style option: Show_graph_table_icon: No.&lt;br /&gt;
* ER 812 Put empty Index for pivoter menus as last not first&lt;br /&gt;
* ER 808 Don't show balloon description for Frame or tall node when it is already showing its description.&lt;br /&gt;
* EW 807 Show description doesn’t work for Tall nodes&lt;br /&gt;
&lt;br /&gt;
== Fixed or implemented in Build 0.36==&lt;br /&gt;
''(Note: this build failed the acceptance test)''&lt;br /&gt;
* EW 883 Save as dialog has transparent background, but should not.&lt;br /&gt;
* EW 882 Significant problem with tall nodes in build 35.&lt;br /&gt;
* EW 876 show_as_tab: No doesn’t work (for non - top diagram modules)&lt;br /&gt;
* EW 865 Close model after Save model gives blank screen&lt;br /&gt;
* EW 720 Very slow or crash when displaying a large table&lt;br /&gt;
&lt;br /&gt;
== Fixed or implemented in Build 0.35==&lt;br /&gt;
''(Note: this build failed the acceptance test)''&lt;br /&gt;
* ER 879 Don't show quotes for cells that are specified as text only format.&lt;br /&gt;
* EW 878 Server crash when you select an item in a tall node choice list.&lt;br /&gt;
* EW 877 Message box appears on DTA desktop when it shouldn't in dual-interface mode.&lt;br /&gt;
* EW 875 Table shows diagonal lines across cells&lt;br /&gt;
* ER 874 Subtable with single text cell should not show as table in tall node&lt;br /&gt;
* EW 873 Multichoice button is not the same width as in DTA&lt;br /&gt;
* EW 869 Multichoice won’t accept selections if you click below, above, or to the left of the menu&lt;br /&gt;
* EW 848 Bottom of graph cut off in ACP1 tabs&lt;br /&gt;
* EW 846 pivoters start to show at the top of a frame node when they should not&lt;br /&gt;
* EW 845 Background color for pivoters / slicers is gray when should be transparent in tall edit table&lt;br /&gt;
* ER 844 Implement show_index_menus: yes/no for the model's top level CPS&lt;br /&gt;
* EW 793 Changes to ShowHier not showing in ACP3&lt;br /&gt;
* EW 680 Can't pivot a result table.&lt;br /&gt;
* EW Table header slides up to the top of the diagram.&lt;br /&gt;
* ER 642 Add help / support info e.g. acp@lumina.com&lt;br /&gt;
* ER 294 A tall multichoice user input node should display as a list selection.&lt;br /&gt;
&lt;br /&gt;
== Fixed or implemented in Build 0.34==&lt;br /&gt;
* EW 881 Uncertainly selector vanishes . (when changed to mid view - a previously implemented ER)&lt;br /&gt;
* ER 872 Implement Save as&lt;br /&gt;
* EW 849 Pivoters and slicers missing above table when viewed in ACP1 tabs&lt;br /&gt;
* ER 841 Adjust margins for tall and frame node tables based on corner radius.&lt;br /&gt;
* EW 840 For tall nodes and frame node, give graphs rounded bottom corners that match the tall/frame nodes&lt;br /&gt;
* EW 839 Debug MsgBox appears in List edit, says key=4, and changed doesn't take.&lt;br /&gt;
* EW 827 Non-parsing JSON during Graph in TXC&lt;br /&gt;
* ER 819 Icon buttons in Tall and Frame nodes appear on mouse-over&lt;br /&gt;
* EW 814 Bottom border of tall node is a bit thin when showing graph&lt;br /&gt;
* EW 809 Expand consistent margins around Graph, Table, and Object views in Frame&lt;br /&gt;
* ER 806 Replace Fly-in indexes pivoter with simply showing/hiding indexes&lt;br /&gt;
* ER 804 Make node shadows smaller&lt;br /&gt;
* EW 803 Description shows ‘0’ when ‘No’ in Frame node with Graph&lt;br /&gt;
* EW 802 Model title not showing in teal top banner&lt;br /&gt;
* EW 798 Graph is greyed out after mouse-over.&lt;br /&gt;
* EW 786 Model name is truncated when it doesn't need to be&lt;br /&gt;
* EW 498 JSON did not parse error during edit table&lt;br /&gt;
* EW 194 Result tables don't yet have Slicer totals.&lt;br /&gt;
* ER 153 Session timeout&lt;br /&gt;
&lt;br /&gt;
== Fixed or implemented in Build 0.33==&lt;br /&gt;
* EW 792 Add toggle table/graph icon Tall output nodes&lt;br /&gt;
* ER 791 Change icon in ACP1 tabs for result table.&lt;br /&gt;
* EW 777 Tall table not showing slicer&lt;br /&gt;
* EW 776 Pivoter background color for tall graphs should not be gray&lt;br /&gt;
* ER 775 ER for showing pivoters for Tall result graphs&lt;br /&gt;
* ER 773 Spec for showing pivoters/slicers in frame and tall nodes. And ACP1 tabs.&lt;br /&gt;
* EW 766 Inconsistent display of description in frame nodes.&lt;br /&gt;
* EW 738 Graphs re-render many times, slow&lt;br /&gt;
* EW 669 Frame node not showing description for edit table&lt;br /&gt;
&lt;br /&gt;
== Fixed or implemented in Build 0.32==&lt;br /&gt;
*ER 772 Don't show row pivoter in frame nodes or tall nodes (unless &amp;quot;show_index_menus: yes&amp;quot; is set). &lt;br /&gt;
* ER 770 Add 8 pixel margin around table in ACP1 tabs&lt;br /&gt;
* EW 768 Column pivoter not aligned with left edge of first column&lt;br /&gt;
* EW 767 Fly in pivoters visible above tall result graph. It should not be.&lt;br /&gt;
* EW 764 Empty help balloon appearing on tall node&lt;br /&gt;
* ER 759 Make tall node titles bold&lt;br /&gt;
* EW 758 &amp;quot;fly in&amp;quot; pivoters box not aligned correctly&lt;br /&gt;
* ER 757 No hover highlight for Tall Nodes&lt;br /&gt;
* EW 756 Scroll bar appears when hovering over last column header in table&lt;br /&gt;
* ER 755 Tall node titles should be left aligned with table's left edge and bold&lt;br /&gt;
* EW 754 Can't close MultiChoice popup in table cell.&lt;br /&gt;
* ER 742 Don’t show Origin index or make it work&lt;br /&gt;
* EW 741 Clicking on this list button goes to a white screen. Can't get back into the model&lt;br /&gt;
* EW 735 Can't publish model to cloud which contains Style library&lt;br /&gt;
* EW 721 Sorting doesn’t work for Checkboxes and Choice menus.&lt;br /&gt;
* EW 683 show_index_menus is not working (w/spec)&lt;br /&gt;
* EW 665 Graph hover icons appear in the wrong place.&lt;br /&gt;
* EW 557 Publish to cloud will not upload large models&lt;br /&gt;
&lt;br /&gt;
== Fixed or implemented in Build 0.31==&lt;br /&gt;
* ER 745 Change Close menu for clarity.&lt;br /&gt;
* ER 744 Complete cleanup of Table outer border&lt;br /&gt;
* EW 743 Button shows content beneath it on hover.&lt;br /&gt;
* EW 740 'All' in choice list does not stick when selected.&lt;br /&gt;
* ER 730 Support «All» option for Slicers&lt;br /&gt;
* EW 708 Embedded object view exceeds frame node boundaries&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Fixed or implemented in Build 0.30==&lt;br /&gt;
* ER 739 Selection and hoverhighlight colors.&lt;br /&gt;
* ER 737 Formnodes with fill should show hover highlight outside of nodes' border.&lt;br /&gt;
* ER 734 Change hover highlight for input/output nodes.&lt;br /&gt;
* ER 733 Make table margins for frame/tall nodes equal to the corner radius of the frame/tall node.&lt;br /&gt;
* ER 731 Slicer pulldowns column-wrap when they should not.&lt;br /&gt;
* ER 729 Fill and borders for row index cell (and column index cell) (part 2)&lt;br /&gt;
* EW 725 Wrong cursor icon&lt;br /&gt;
* EW 723 User inputs that are atomic elements of a subtable show expression “Subtable(.” rather than the number or text value expected.&lt;br /&gt;
* ER 717 Put units to left of the the Uncertainty view menu&lt;br /&gt;
* ER 716 White margin between the table border and the Frame border&lt;br /&gt;
* EW 715 Bottom corners of table overlap rounded frame corners&lt;br /&gt;
* EW 713 Icons in input/output nodes not centered vertically, but should be&lt;br /&gt;
* EW 712 Bottom corner of frame node borders missing in Portfolio Planner when graph is showing in frame node&lt;br /&gt;
* EW 710 Graph in Frame Node too tall initially&lt;br /&gt;
* EW 708 Embedded object view exceeds frame node boundaries&lt;br /&gt;
* EW 707 Labels for formnodes are not showing up.&lt;br /&gt;
* EW 695 Frame border gets thinner where the graph is.&lt;br /&gt;
* EW 655 Square graph corners extend outside of rounded framenode corners.&lt;br /&gt;
* ER 609 Don't use reverse video for selected nodes, use gray&lt;br /&gt;
&lt;br /&gt;
== Fixed or implemented in Build 0.29==&lt;br /&gt;
&lt;br /&gt;
* EW 704 UI Crashes when clicking on input in the object window&lt;br /&gt;
* EW 703 Stray curly bracket on the change password page&lt;br /&gt;
* EW 702 Need to log playing of eVites&lt;br /&gt;
* EW 699 Insufficient read access to folder&lt;br /&gt;
* ER 673 Change required by May 2021. (NPM - javascript update)&lt;br /&gt;
* ER 528 Open model in ACP after publishing&lt;br /&gt;
* EW 514 Changes in edit table don't stick when you go to other tab.&lt;br /&gt;
&lt;br /&gt;
==Fixed or implemented in Build 0.28==&lt;br /&gt;
&lt;br /&gt;
* EW 698 On large table, part of scroll bar is being clipped i.e. not visible.&lt;br /&gt;
* EW 697 White gap at bottom of object window.&lt;br /&gt;
* EW 693 More Table Layout Style changes&lt;br /&gt;
* EW 692 WebSocket connection drops&lt;br /&gt;
* EW 691 Click on UDF should go to Object window&lt;br /&gt;
* ER 690 Change toggle to graph icon&lt;br /&gt;
* EW 689 No vertical scrollbar in object window&lt;br /&gt;
* EW 688 Tall output nodes should have margin on top and rhs of title&lt;br /&gt;
* ER 687 Object window option in Att_FrameNodeShowing&lt;br /&gt;
* EW 684 When adding new users, email subject is 'Invitation to Suan'.&lt;br /&gt;
* ER 681 Sortable table columns&lt;br /&gt;
* ER 666 Change attribute identifier to AcpStyles&lt;br /&gt;
* ER 654 Move Row pivot control to table corner cell.&lt;br /&gt;
* EW 647 Spreadsheetopen() with undefined showdialog attribute is acting as if the attribute was 'false'&lt;br /&gt;
* EW 627 Graph in tall nodes is not centered horizontally&lt;br /&gt;
* EW 604 SysVar AnalyticaEdition needs a tweak.&lt;br /&gt;
* EW 585 Suan shows graph when it should show table&lt;br /&gt;
* EW 576 ACP3 version shows doesn't show correct cell number formats (%, $ sign)&lt;br /&gt;
* EW 556 Cell-level number format not reflected in table.&lt;br /&gt;
* EW 531 Remove &amp;quot;Group name&amp;quot; from email sent when adding user to project&lt;br /&gt;
* ER 517 Syntax coloring for definitions&lt;br /&gt;
* EW 398 Input nodes show wrong number format&lt;br /&gt;
* EW 387 Problem pivoting prob bands table&lt;br /&gt;
* EW 141 Some input titles are missing in Daylight Analyzer example model	&lt;br /&gt;
* EW 68 The number format for a table index doesn't match DTA&lt;br /&gt;
* EW 44 Click on node opens graph, should be result table.&lt;br /&gt;
* EW 15 	User text box input has wrong number format - .06 instead of 6.00%&lt;br /&gt;
&lt;br /&gt;
==Fixed or implemented n Build 0.27==&lt;br /&gt;
&lt;br /&gt;
* EW 672 JavaScript crash on fontSize&lt;br /&gt;
* EW 671 ACAP model not using correct font&lt;br /&gt;
* EW 670 Graph/Table hover icon needs higher Z-order.&lt;br /&gt;
* EW 668 Scrollbar in tall edit table should be adjacent to the table&lt;br /&gt;
* EW 664 Crash after viewing frame node graph and re-opening model.&lt;br /&gt;
* EW 663 Frame node not defined yet, and FrameNode not working&lt;br /&gt;
* ER 662 Graphing roles could be arranged into multiple columns when the view is wide enough.&lt;br /&gt;
* ER 660 Change module icon in Outline view&lt;br /&gt;
* ER 659 Clean up of Table design&lt;br /&gt;
* EW 658 Selection bubble for Output &amp;amp; Input nodes are different size&lt;br /&gt;
* ER 657 No node hover for Frame Node objects&lt;br /&gt;
* ER 656 No need for &amp;quot;Edit Table of&amp;quot; in the title of edit tables&lt;br /&gt;
* EW 648 Framenode is not showing results dup 663&lt;br /&gt;
* EW 646 Make text node and frame node borders look the same.&lt;br /&gt;
* EW 641 Glitchy table header artifact appears on embedded table.&lt;br /&gt;
* EW 635 ACP not consuming available browser space.&lt;br /&gt;
* EW 617 Nodes' font is lost when going to Object window and then back to diagram.&lt;br /&gt;
* EW 592 The rightmost tab “Model details” goes off the right side.&lt;br /&gt;
* EW 559 Forgot password not working in publish to cloud&lt;br /&gt;
* ER 535 Reduce the number of registry keys needed to publish to a non 'acp.analytica.com' server.&lt;br /&gt;
&lt;br /&gt;
==Fixed or implemented in Build 0.26==&lt;br /&gt;
&lt;br /&gt;
* ER 640: Add SuanAssets reg key&lt;br /&gt;
* EW 639: There should be a gap between top tabs and teal banner, but there is not sometimes&lt;br /&gt;
* ER 638: Change default for &amp;quot;show_model_title&amp;quot;&lt;br /&gt;
* ER 634: libXl error: Marshalled for a different thread&lt;br /&gt;
* ER 633: Implement &amp;quot;Show_uncertainty_view: no&amp;quot; CPS flag&lt;br /&gt;
* ER 632: Change name of CPS flag &amp;quot;Hide_uncertainty_view: no&amp;quot; to &amp;quot;Show_uncertainty_view: yes&amp;quot;&lt;br /&gt;
* ER 631: Make Text and FrameNode borders the same&lt;br /&gt;
* EW 630: Spreadsheetopen(filename) with the filename being an existing file does not appear to be working to spec.&lt;br /&gt;
* ER 628: Implement consistent margins in graphs&lt;br /&gt;
* ER 637: Graph in tall nodes is not centered horizontally&lt;br /&gt;
* ER 623: Model doesn't open to diagram. Suan.exe session crash.&lt;br /&gt;
* EW 603: Allow addition of 'Not a member' users to other projects.&lt;br /&gt;
* EW 599: DTA not recognizing ACP licenses&lt;br /&gt;
* ER 575: Configure Proactive User Outputs breaks with upstream change&lt;br /&gt;
* ER 535: Reduce the number of registry keys needed to publish to a non 'acp.analytica.com' server&lt;br /&gt;
* EW 516: Problem switch from edit table to result or graph tab&lt;br /&gt;
* EW 366: Edit tables and results don't display automatically&lt;br /&gt;
 &lt;br /&gt;
==Fixed or implemented n Build 0.25==&lt;br /&gt;
&lt;br /&gt;
* ER 623: Make text nodes and frame nodes have rounded corners&lt;br /&gt;
* EW 622: Output node &amp;quot;Calc/Result&amp;quot; buttons using the wrong font&lt;br /&gt;
* EW 621: Tall text input nodes not showing Title when they should be&lt;br /&gt;
* EW 620: Text inputs not using node font style when they should&lt;br /&gt;
* EW 619: Input node button labels not using diagram/node font styles&lt;br /&gt;
* EW 618: Choice input pulldown not using correct font.&lt;br /&gt;
* EW 616: Unable to upload models&lt;br /&gt;
* EW 611: User output value is not in the custom font&lt;br /&gt;
* EW 604: SysVar AnalyticaEdition needs a tweak&lt;br /&gt;
* ER 595: Reduce white space between tabs and top teal band&lt;br /&gt;
* ER 591: When loading model, show a progress bar&lt;br /&gt;
* EW 582: Choice inputs should use the diagram or node font settings.&lt;br /&gt;
* EW 542: Don’t show model internals while loading&lt;br /&gt;
* ER 437: Remove RT and UI from top stripe in release&lt;br /&gt;
* EW 420: Weird diagram appears while starting up a model&lt;br /&gt;
* ER 413: ShowProgressBar not implemented yet&lt;br /&gt;
&lt;br /&gt;
==Fixed or implemented n Build 0.24==&lt;br /&gt;
&lt;br /&gt;
* ER 615: Cloud Platform Styles flag &amp;quot;Hide_uncertainty_view: no&amp;quot; &lt;br /&gt;
* ER 614: If a variable is showing Mid view, then the uncertainty selector does not show - same as in Acp1.&lt;br /&gt;
* EW 613: Clicking on FrameNode should not show object window or error message.&lt;br /&gt;
* ER 612: Can't add/append/insert/delete/reorder elements in a list&lt;br /&gt;
* EW 610: Server process crash, in graphing code (Ecoplexus).&lt;br /&gt;
* EW 606: Some problems with Tall edit tables, affects transdev. Pivoters / slicers showing when they should not. Gray background in header area. Table exceeds node borders at the bottom.&lt;br /&gt;
* EW 605: Server-side memory leak with tables.&lt;br /&gt;
* EW 602: SpreadsheetOpen/Close (Transdev)&lt;br /&gt;
* ER 598: Tweaks to input/outputs popup that appears when clicking on left/right side of nodes.&lt;br /&gt;
* ER 593: Don’t show units for user input/output arrays.&lt;br /&gt;
* ER 590: Highlight node on mouse-over enhancements.&lt;br /&gt;
* ER 587: Make rotating cube wait view smaller.&lt;br /&gt;
* EW 581: Undefined nodes should not show object window and should show an error when clicked&lt;br /&gt;
* ER 579: Change ACP page title from &amp;quot;Analytica Cloud Platform&amp;quot; to simply &amp;quot;Analytica&amp;quot;.&lt;br /&gt;
* EW 547: Diagram with two Frame nodes doesn’t always work&lt;br /&gt;
* EW 545: Uncertainty view should be to the right of Title for Graphs (as for Tables).&lt;br /&gt;
* EW 543: Error message on model load&lt;br /&gt;
&lt;br /&gt;
==Fixed or implemented n Build 0.23==&lt;br /&gt;
&lt;br /&gt;
* EW 566 Transdev: Warning message goes off the bottom of the canvas - can't read it all and can't close it&lt;br /&gt;
* EW 558 Text node title a little too large&lt;br /&gt;
* EW 551 Glitch on right end of Show hierarchy bar&lt;br /&gt;
* EW 550 Default font size and align Title of Text node same as Title in Graph or Table in Frame&lt;br /&gt;
* EW 548 Make description text in graph/table left aligned with Title above it.&lt;br /&gt;
* EW 546 Text node border too thick&lt;br /&gt;
* EW 544 Table view overlaps top of Frame node&lt;br /&gt;
* EW 537 Signin: Bad message shown to user when email address without password is used with 'Get a new password'&lt;br /&gt;
* EW 536 Odd message presented to user when closing google sign in popup&lt;br /&gt;
* EW 533 After setting up group account, user doesn't exist.&lt;br /&gt;
* EW 512 Multichoice popup does not disappear when clicking on the diagram background&lt;br /&gt;
&lt;br /&gt;
''Fixed or implemented n Build 0.22'&lt;br /&gt;
&lt;br /&gt;
* EW 529 After creating a new group account, user could not add projects.&lt;br /&gt;
* EW 527 Some eVites don't play.&lt;br /&gt;
* EW 526 Enforce file permissions when launching an eVite.&lt;br /&gt;
* EW 525 Update message shown to user when user is unable to establish a connection.&lt;br /&gt;
* EW 506 Text with extended characters entered into text box control corrupt.&lt;br /&gt;
* ER 505 An EMF image (in a picture node) does not display.&lt;br /&gt;
* ER 504 Error during query **TO DO** displays.&lt;br /&gt;
* ER 239 REST method handlers.&lt;br /&gt;
* ER 149 Support &amp;quot;Publish to cloud...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==Fixed or implemented n Build 0.21==&lt;br /&gt;
&lt;br /&gt;
* EW 503 Output node result text not aligned correctly&lt;br /&gt;
* EW 502 Invite email says &amp;quot;Analytica Cloud Player&amp;quot; in body&lt;br /&gt;
* EW 501 When playing invite, &amp;quot;Signin skipped&amp;quot; appears in toolbar, but should not.&lt;br /&gt;
* EW 500 Show less options on &amp;quot;Close Menu&amp;quot; when viewing invite.&lt;br /&gt;
* EW 497 Text node titles not using correct font in some cases.&lt;br /&gt;
* EW 496 Problem viewing Exceedance Probably results.&lt;br /&gt;
* ER 495 Re-enable file functions. [Read|Write][Text|Binary|Export|Image]File() functions&lt;br /&gt;
* EW 494 Control near top is clipped.&lt;br /&gt;
* ER 492 Built-in file functions should only allow access to your own project folder.&lt;br /&gt;
* EW 491 Graph slicer not working initially in Cory's So Cal Gas model.&lt;br /&gt;
* EW 490 Big problem with indexes that are dates.&lt;br /&gt;
* EW 489 Cory: Te1299802109 does not center on the ACP diagram though it does on the desktop.&lt;br /&gt;
* EW 488 Cory: Therm_Savings_by_Wav shows up as a table rather than a graph, and shows statistics rather than the desktop selection of probability density.&lt;br /&gt;
* EW 487 Cory: Input/Output Node colors are different than in the desktop model,&lt;br /&gt;
* EW 486 Cory: Historical_Savings1, HDD_Data, HDD_Data, HDD_Coeff_Data_to_In input does not show the inputs at all when evaluated.&lt;br /&gt;
* EW 485 Cory: Svgs_Delta_Dist_due_ , Second_Year_Program_ , Second_Year_Program_, Therm_cust_savings_a (and probably some others in the diagrams I haven’t checked) show up as a table even though graph was selected in desktop model.&lt;br /&gt;
* EW 484 Cory: HDD_Lognormal shows up as a probability distribution (in a table) even though Mid (and a graph)&lt;br /&gt;
* EW 482 Cory: Statistics don’t change on graph for Therm_Savings_by_Wav.&lt;br /&gt;
* EW 480 Cory:  Result for Total_Forecast_Savin  does not display when output node is clicked.&lt;br /&gt;
* EW 479 Max: For bare icon (and icon) input/output button style, icon is not vertically centered.&lt;br /&gt;
* ER 476 Make background above table gray when using ACP1 tabs.&lt;br /&gt;
* EW 471 Max: Table rows with no data are too short&lt;br /&gt;
* ER 382 The WriteTextFile( ) function displays a file selector dialog on the server, causing the application to apparently lock up.&lt;br /&gt;
&lt;br /&gt;
==Fixed or implemented n Build 0.20==&lt;br /&gt;
&lt;br /&gt;
* EW 478 - The black border around a selected button of an output node was mis-aligned and showed as 2 odd looking lines.&lt;br /&gt;
* ER 475 - Some style changes to Graph Tooltip.&lt;br /&gt;
* ER 474 - Some style changes to Message boxes.&lt;br /&gt;
* ER 473 - Added support for Distribution input nodes showing icons button style.&lt;br /&gt;
* ER 470 - A couple changes to table style. White background header and moved the View Selector pulldown to the  right side.&lt;br /&gt;
* EW 469 -Text input fields, change to Use default model font, not fixed width.&lt;br /&gt;
* EW 468 - Diagram showing wrong font for nodes.&lt;br /&gt;
* ER 465 - Include the Rent vs Buy example model when an Individual account is first created.&lt;br /&gt;
* ER 464 - The shading around each button is too contrasty.&lt;br /&gt;
* EW 415 - Choice nodes are too tall.&lt;/div&gt;</summary>
		<author><name>Mhenrion</name></author>
	</entry>
	<entry>
		<id>https://docs.analytica.com/index.php?title=Using_Python_from_Analytica&amp;diff=63735</id>
		<title>Using Python from Analytica</title>
		<link rel="alternate" type="text/html" href="https://docs.analytica.com/index.php?title=Using_Python_from_Analytica&amp;diff=63735"/>
		<updated>2026-02-12T00:03:50Z</updated>

		<summary type="html">&lt;p&gt;Mhenrion: /* Introduction */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;                                               [[category:Python integration]]&lt;br /&gt;
''New in [[Analytica 7.0]]''&lt;br /&gt;
&lt;br /&gt;
Requires the [[Analytica Developer]] (formerly [[Analytica Enterprise]] edition.)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
Analytica provides a two-way bridge between Analytica and Python.  You can write Python code in the definitions of Analytica Variables and Functions.  Analytica can access Python variables and call Python functions, pass data—including multi-dimensional arrays—to it, and retrieve the results. Conversely, Python code can call back into Analytica to evaluate variables or expressions. Together the two environments combine Analytica’s intuitive influence-diagram interface, intelligent arrays, and built-in uncertainty analysis with Python’s vast open-source ecosystem.&lt;br /&gt;
&lt;br /&gt;
We recommend using Python versions '''3.8+''', although the integration also supports versions '''3.3+''',&lt;br /&gt;
&lt;br /&gt;
[https://videos.analytica.com/Analytica-Python/AnaPythonBasics.mp4 Watch video on Analytica-Python integration basics]&lt;br /&gt;
&lt;br /&gt;
=== Motivation: Why use Python? ===&lt;br /&gt;
Python offers thousands of purpose-built libraries that extend what you can do in a model. Here are just a few:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Python library !! What it adds to Analytica&lt;br /&gt;
|-&lt;br /&gt;
|[https://numpy.org/ NumPy], [https://pandas.pydata.org/ Pandas]|| Efficient numerical arrays and data-frame operations that underlie many other Python analytics libraries&lt;br /&gt;
|-&lt;br /&gt;
|[https://pillow.readthedocs.io/en/stable/ Pillow]|| Programmatic image manipulation for tasks such as satellite-image preprocessing before feeding data back into Analytica.&lt;br /&gt;
|-&lt;br /&gt;
|[https://matplotlib.org/ Matplotlib],  [https://seaborn.pydata.org/ Seaborn]|| Visualizations not native to Analytica, including violin plots, heatmaps, network graphs, and 3-D surface plots.&lt;br /&gt;
|-&lt;br /&gt;
|[https://pytorch.org/ PyTorch],  [https://www.tensorflow.org/ Tensorflow]|| Training or running machine-learning models, then passing predictions into Analytica for further probabilistic analysis.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Advantages: When to use Python in Analytica ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Situation in Analytica !! Why using Python helps&lt;br /&gt;
|-&lt;br /&gt;
| Want custom visualizations beyond Analytica graphs || Generate plots with [https://matplotlib.org/ Matplotlib] or [https://seaborn.pydata.org/ Seaborn], save images, and display them in a Result window&lt;br /&gt;
|-&lt;br /&gt;
| Require advanced text or Natural-Language Processing || Apply Python packages like [https://spacy.io/ spaCy], [https://www.nltk.org/ NLTK], or built-in &amp;lt;code&amp;gt;re&amp;lt;/code&amp;gt; for parsing, classification, and transformation&lt;br /&gt;
|-&lt;br /&gt;
| Need a specialized statistical, ML, or optimization algorithm not built into Analytica || Leverage PyPI libraries such as [https://scikit-learn.org/ scikit-learn], [https://pandas.pydata.org/ pandas], or [https://coin-or.github.io/pulp/ pulp] without re-implementing the math&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Python downsides: When native Analytica is often better ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Concern !! Why pure Analytica can be preferable&lt;br /&gt;
|-&lt;br /&gt;
|[[Array Abstraction|Array abstraction]]|| Operating on arrays with different dimensions is often a one-liner in Analytica but requires verbose reshape/broadcast code in NumPy or Pandas.&lt;br /&gt;
|-&lt;br /&gt;
| Performance overhead || Transferring data and compiling Python incurs latency. Tight loops or lightweight formulas run much faster as native Analytica expressions. For repeated Python calls, define a [[Callable]] to compile once and reuse.&lt;br /&gt;
|-&lt;br /&gt;
|[[Monte Carlo and probabilistic simulation|Monte Carlo]]|| Analytica’s built-in stochastic simulation is deeply integrated. Recreating them in Python is rarely worth the effort.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Setting up a Python environment ==&lt;br /&gt;
&lt;br /&gt;
=== Installing Conda ===&lt;br /&gt;
Download and run the Anaconda or Miniconda [https://www.anaconda.com/download/success installer] for Windows.&lt;br /&gt;
&lt;br /&gt;
=== Creating and activating a Python environment ===&lt;br /&gt;
Open the newly installed '''Anaconda Prompt''' app and run this command, which will create a new Python 3.11 environment named &amp;lt;code&amp;gt;MyEnv&amp;lt;/code&amp;gt; and install the Python libraries [https://pandas.pydata.org/ Pandas] and [https://numpy.org/ NumPy]:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;conda create -n MyEnv python=3.11 pandas numpy&amp;lt;/code&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
=== Telling Analytica which Python environment to use ===&lt;br /&gt;
Open the '''Definition / Application integration / Python''' submenu.&lt;br /&gt;
&lt;br /&gt;
Set either '''Python Environment''' or '''Python Model Environment''' to the environment’s name (e.g. &amp;lt;code&amp;gt;MyEnv&amp;lt;/code&amp;gt;) or to the full folder path of the Python installation home directory, for example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;C:\Users\username\anaconda3\envs\MyEnv&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Python Environment''' is stored with the Analytica installation and becomes the default for any model that does not set '''Python Model Environment'''.&lt;br /&gt;
&lt;br /&gt;
'''Python Model Environment''' is saved inside the current model and overrides the installation-wide setting.&lt;br /&gt;
&lt;br /&gt;
''See [[Using Python from Analytica/Setting up a Python environment|Setting up a Python environment]] for a detailed walkthrough.''&lt;br /&gt;
&lt;br /&gt;
=== Loading and Unloading of Python ===&lt;br /&gt;
&lt;br /&gt;
Python (core, environment, and libraries) loads only when your model first executes or evaluates Python code, and unloads when you close the model. Reopening the same model, or opening another that uses Python, starts a fresh Python session; any prior Python state (variables, imports) is lost. If the new model uses a different environment, it may run a different Python release.&lt;br /&gt;
&lt;br /&gt;
If Python is already loaded and you change the '''Python Environment''' or '''Python Model Environment''', Python unloads immediately. The selected environment’s Python loads the next time your model runs Python code. Unloading discards all Python state (variables, imports).&lt;br /&gt;
&lt;br /&gt;
Python runs in the same process as Analytica.&lt;br /&gt;
&lt;br /&gt;
== The Python menu ==&lt;br /&gt;
&lt;br /&gt;
The core Analytica functions and system variables for configuring and interacting with Python are found on the '''Definition / Application integration / Python''' submenu.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[image:Python menu.png]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Importing Python libraries ==&lt;br /&gt;
&lt;br /&gt;
The ''preferred'' way to make Python libraries available in Analytica models is to place their import statements in the system variable '''PythonStartupCode'''. These lines execute when Python gets loaded, so the libraries are ready for use in later Python code.&lt;br /&gt;
&lt;br /&gt;
''If you edit '''PythonStartupCode''' after Python has already been loaded in the current Analytica model, you must reload the model (or close and reopen Analytica) for the modified startup code to take effect.''&lt;br /&gt;
&lt;br /&gt;
=== Importing from nodes ===&lt;br /&gt;
When creating a filed Analytica library or module, it is ''highly recommended'' to perform imports within a [[Variable]] or [[Callable]] node inside the library/module itself. This practice ensures that the library/module remains self-contained, as '''PythonStartupCode''' is not saved as part of a filed module or library. You should then create dependencies from nodes that use the Python libraries to the import node(s) to ensure the Python libraries are loaded before use.&lt;br /&gt;
&lt;br /&gt;
Python supports two main import styles:&lt;br /&gt;
&lt;br /&gt;
* Module import – e.g., &amp;lt;code&amp;gt;import numpy&amp;lt;/code&amp;gt;  &lt;br /&gt;
* Selective / wildcard import – e.g., &amp;lt;code&amp;gt;from numpy import array, zeros&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;from numpy import *&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
When an import statement is the final expression, Analytica returns its value:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Import statement&lt;br /&gt;
! Return value when it is the last statement&lt;br /&gt;
! Output image&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;import numpy as np, os&amp;lt;/code&amp;gt;&lt;br /&gt;
| The module’s string representation e.g.,&amp;lt;br/&amp;gt;&amp;lt;code&amp;gt;«Python &amp;lt;module 'numpy' from …&amp;gt;»&amp;lt;/code&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;code&amp;gt;«Python &amp;lt;module 'os' from …&amp;gt;»&amp;lt;/code&amp;gt;)&lt;br /&gt;
| [[Image:PythonMultipleModuleImports.png|thumb|250px]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;from numpy import array, zeros&amp;lt;/code&amp;gt;&lt;br /&gt;
| A list of the imported names (alias names if provided, otherwise the original names)&lt;br /&gt;
| [[Image:PythonMultipleSelectiveImports.png|thumb|250px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Python &amp;lt;code&amp;gt;py::&amp;lt;/code&amp;gt; namespace   ==&lt;br /&gt;
Analytica exposes the embedded Python interpreter through the &amp;lt;code&amp;gt;py::&amp;lt;/code&amp;gt; namespace prefix.  Any name visible at the top level of the interpreter—global variables, functions, classes, or imported modules—can be accessed through Analytica with the same spelling and case, preceded by &amp;lt;code&amp;gt;py::&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Example: Incrementing a Python global variable '''counter''' by 2&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;py::counter := py::counter + 2;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Calling a Python function ==&lt;br /&gt;
Invoking a Python function from Analytica is as simple as writing it:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;py::len(MyArray)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Arguments may be:&lt;br /&gt;
* Analytica scalars&lt;br /&gt;
* Analytica arrays (which get [[Array Abstraction|array abstracted]])&lt;br /&gt;
* Python objects&lt;br /&gt;
&lt;br /&gt;
=== Keyword arguments (kwargs) ===&lt;br /&gt;
When a Python function accepts keyword arguments (&amp;lt;code&amp;gt;**kwargs&amp;lt;/code&amp;gt;), use a syntax ''similar'' to Analytica’s [[Function calls and parameters#Name-based function calls|name-based function calls]], a colon after the parameter name, followed by the parameter value, instead of the equal sign used in Python.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;py::my_func(&amp;quot;arg1&amp;quot;, kwarg1:1, kwarg2:&amp;quot;abc&amp;quot;)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The equivalent call in native Python is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;my_func(&amp;quot;arg1&amp;quot;, kwarg1=1, kwarg2=&amp;quot;abc&amp;quot;)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Python &amp;lt;code&amp;gt;print()&amp;lt;/code&amp;gt; function  ===&lt;br /&gt;
The standard Python &amp;lt;code&amp;gt;print()&amp;lt;/code&amp;gt; function sends its text output to Analytica's [[Typescript|Typescript console]] window, just as it appears in a native Python console.  &lt;br /&gt;
* When called from Analytica with &amp;lt;code&amp;gt;py::print()&amp;lt;/code&amp;gt;, the printed text will appear in the window.  &lt;br /&gt;
* When called inside a Python script executed by Analytica, any &amp;lt;code&amp;gt;print()&amp;lt;/code&amp;gt; statements also stream to the window.&lt;br /&gt;
&lt;br /&gt;
== Using Python classes ==&lt;br /&gt;
=== Using an existing Python class ===&lt;br /&gt;
To instantiate a Python class, call its constructor with the &amp;lt;code&amp;gt;py::&amp;lt;/code&amp;gt; prefix and pass any arguments exactly as you would in native Python.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;py::MyClass(42, 'widgets')&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Arrow operator (&amp;lt;code&amp;gt;-&amp;gt;&amp;lt;/code&amp;gt;)  ===&lt;br /&gt;
The arrow operator (&amp;lt;code&amp;gt;-&amp;gt;&amp;lt;/code&amp;gt;) lets you access the attributes and methods of a Python object, analogous to the dot operator (&amp;lt;code&amp;gt;.&amp;lt;/code&amp;gt;) in Python:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;ColNames := MyDf-&amp;gt;columns      { attribute }&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;Head5    := MyDf-&amp;gt;head(5)      { method }&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can chain these accesses and calls:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;FirstName := MyDf-&amp;gt;columns-&amp;gt;tolist()&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can also assign through the arrow operator; the assignment will update the underlying Python object:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;MyObj-&amp;gt;value := 42&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Using Python code in a definition ==&lt;br /&gt;
When you choose '''Python expr''' from the [[Definition]] drop-down, the entire definition is passed verbatim to the embedded Python interpreter.&lt;br /&gt;
&lt;br /&gt;
=== Defining a UDF with a Python expr definition ===&lt;br /&gt;
When you set a Function node’s [[Definition]] to '''Python expr''', you can write the entire body in Python. Analytica recompiles that code every time the function is evaluated, which can noticeably slow large array computations. To eliminate this overhead, place the code in a reusable Python [[Callable]] so the compiled version remains cached between calls.&lt;br /&gt;
&lt;br /&gt;
''Inside '''Python expr''', Analytica function parameters behave like local Python variables.''&lt;br /&gt;
&lt;br /&gt;
== Callables ==&lt;br /&gt;
&lt;br /&gt;
[[Callable|Callables]] let you embed full Python functions or classes directly inside Analytica, then invoke them like any other [[User-Defined Functions|UDF]].&lt;br /&gt;
&lt;br /&gt;
=== Creating a Python Callable node ===&lt;br /&gt;
* Create a new [[Variable]] node.&lt;br /&gt;
* In the node’s [[Object Window|Object window]], change the [[Class details|Class]] dropdown from '''Variable''' to '''Callable'''.&lt;br /&gt;
* Enter your Python code in the Definition pane.&lt;br /&gt;
&lt;br /&gt;
=== Writing Python Callable code ===&lt;br /&gt;
Use standard Python syntax to define a &amp;lt;code&amp;gt;def&amp;lt;/code&amp;gt; function or a &amp;lt;code&amp;gt;class&amp;lt;/code&amp;gt; inside the [[Definition]] pane of your '''Callable'''. For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def compound_interest(p, r, n):&lt;br /&gt;
    return p * (1 + r) ** n&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Caching compiled functions in Callables ===&lt;br /&gt;
When you evaluate a node, Analytica compiles your function and caches the resulting callable object as the node’s value. This differs from [[UDF|UDFs]] which cannot store a value, so they compile every time they run.&lt;br /&gt;
&lt;br /&gt;
=== Parameters attribute ===&lt;br /&gt;
'''Callables''' do '''not''' have a Parameters attribute; all arguments are declared in your &amp;lt;code&amp;gt;def&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;class&amp;lt;/code&amp;gt; signature.&lt;br /&gt;
&lt;br /&gt;
=== Importing custom Python modules ===&lt;br /&gt;
Import modules exactly as you would in native Python. For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import myutils&lt;br /&gt;
from mylib.finance import NPV&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensure the module is on Python’s &amp;lt;code&amp;gt;sys.path&amp;lt;/code&amp;gt; by appending the module's directory to the path. For additional guidance, see the official [https://docs.python.org/3/tutorial/modules.html Python documentation on modules].&lt;br /&gt;
&lt;br /&gt;
== Dependencies ==&lt;br /&gt;
Analytica's automatic dependency graph is a key advantage over working in environments like Jupyter notebooks or regular Python scripts, where you are responsible for manually re-running cells or scripts to reflect changes.&lt;br /&gt;
&lt;br /&gt;
When integrating Python code, however, Analytica's dependency system cannot parse the Python script to automatically detect when an Analytica node is being used. You must explicitly declare these dependencies by drawing influence arrows. Drawing an influence arrow from any node to a node that uses '''Python Expr''' creates a true dependency, adding it to Analytica's dependency graph.&lt;br /&gt;
&lt;br /&gt;
''As an alternative for nodes that access Python global variables without using '''Python Expr''', you can establish a dependency by including the Identifier of the influencing node directly within the Definition of the dependent node.''&lt;br /&gt;
&lt;br /&gt;
If dependencies for Python nodes are not manually defined with arrows, your model will not invalidate results correctly. Updates to an input variable will not trigger re-computation in the Python node that depends on it, leaving it with a stale, incorrect value.&lt;br /&gt;
&lt;br /&gt;
== Functions for evaluating Python code ==&lt;br /&gt;
&lt;br /&gt;
=== PyEval ===&lt;br /&gt;
[[PyEval]] is used to evaluate a single Python expression and return its value to Analytica. It is designed to be side-effect-free, meaning it won't change the state of variables or objects in Python. This makes it ideal for safe, simple calculations.&lt;br /&gt;
&lt;br /&gt;
''Since &amp;lt;code&amp;gt;PyEval&amp;lt;/code&amp;gt; only evaluates a single expression, it cannot execute multi-line code or statements like variable assignments or imports.''&lt;br /&gt;
&lt;br /&gt;
It also includes an optional &amp;lt;code&amp;gt;excludeTypes&amp;lt;/code&amp;gt; parameter, which allows you to specify Python types that should not be converted to Analytica Values.&lt;br /&gt;
&lt;br /&gt;
=== PyExec ===&lt;br /&gt;
[[PyExec]] is used to execute a block of Python code, which can contain multiple lines or statements. Unlike &amp;lt;code&amp;gt;PyEval&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;PyExec&amp;lt;/code&amp;gt; is intended to have side effects. You can use it to import libraries, define functions, or set the values of variables in the Python environment.&lt;br /&gt;
&lt;br /&gt;
Use &amp;lt;code&amp;gt;PyExec&amp;lt;/code&amp;gt; when you need to run a script to set up an environment or perform operations that modify the Python state for use in later evaluations.&lt;br /&gt;
&lt;br /&gt;
=== PyCall ===&lt;br /&gt;
[[PyCall]] offers a direct and efficient way to call a specific Python function. You provide the callable Python function object followed by its positional and keyword arguments.&lt;br /&gt;
&lt;br /&gt;
This is the preferred function when your primary goal is to execute an existing Python function and retrieve its result.&lt;br /&gt;
&lt;br /&gt;
== Non-scalar data structures ==&lt;br /&gt;
Any Python object that is not converted automatically to an Analytica type comes back as an ''opaque wrapper'' displayed as &amp;lt;code&amp;gt;«Python …»&amp;lt;/code&amp;gt;, where the ellipsis is the object’s [https://docs.python.org/3/library/functions.html#repr repr]. Keep this wrapper when the object merely passes between Python calls, and invoke [[PyExplode]] when the data must be examined or manipulated within Analytica.&lt;br /&gt;
&lt;br /&gt;
=== Converting from Python data to Analytica ===&lt;br /&gt;
When a Python function invoked from Analytica returns a result, Analytica automatically attempts to convert the Python data into the most appropriate Analytica value. For complex data structures, the dedicated [[PyExplode]] function is available to perform more specific conversions.&lt;br /&gt;
&lt;br /&gt;
==== Automatic conversions ====&lt;br /&gt;
The following Python types are automatically converted to their corresponding Analytica equivalents without any extra steps:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Python type !! Analytica type !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;int&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;Integer&amp;lt;/code&amp;gt; ||''If the &amp;lt;code&amp;gt;int&amp;lt;/code&amp;gt; exceeds the 64-bit signed-integer range, Analytica converts it to a double floating-point '''Number''' instead of an '''Integer'''.''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;float&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;Number&amp;lt;/code&amp;gt; || &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;Boolean&amp;lt;/code&amp;gt; || &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;complex&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;ComplexNumber&amp;lt;/code&amp;gt; || &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;str&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;Text&amp;lt;/code&amp;gt; || &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;None&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;Null&amp;lt;/code&amp;gt; || &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;date&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;DateTime&amp;lt;/code&amp;gt; || &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;time&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;DateTime&amp;lt;/code&amp;gt; || &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;datetime&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;DateTime&amp;lt;/code&amp;gt; || &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;analytica.Value&amp;lt;/code&amp;gt; || Unwrapped Analytica value || &lt;br /&gt;
|-&lt;br /&gt;
| Any other Python object || ''Python opaque wrapper'' ||''Can be passed to other Python function calls or converted with &amp;lt;code&amp;gt;PyExplode&amp;lt;/code&amp;gt;.''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== PyExplode ====&lt;br /&gt;
The [[PyExplode]] function provides explicit control for converting complex Python objects that are not converted automatically.&lt;br /&gt;
&lt;br /&gt;
Key capabilities include:&lt;br /&gt;
* Unpacking Python built-in collections, like &amp;lt;code&amp;gt;list&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;tuple&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;set&amp;lt;/code&amp;gt;, into a 1D Analytica array.&lt;br /&gt;
* Converting a Python &amp;lt;code&amp;gt;dict&amp;lt;/code&amp;gt; into a 1D Analytica array, using the dictionary keys to create a new local index.&lt;br /&gt;
* Using nested calls to convert multi-dimensional data into multi-dimensional Analytica arrays.&lt;br /&gt;
* Fully converting a [https://numpy.org/doc/stable/reference/generated/numpy.ndarray.html NumPy Array] into an n-dimensional Analytica array.&lt;br /&gt;
* Converting image objects from [https://pillow.readthedocs.io/en/stable/reference/Image.html#PIL.Image.Image PIL.Image] or [https://matplotlib.org/stable/api/_as_gen/matplotlib.figure.Figure.html matplotlib.figure.Figure] directly into Analytica images.&lt;br /&gt;
* Optionally excluding specific Python types from conversion with &amp;lt;code&amp;gt;excludeTypes&amp;lt;/code&amp;gt;, which keeps them as opaque Python object handles.&lt;br /&gt;
&lt;br /&gt;
''To convert a [https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.html Pandas DataFrame], you must use the &amp;lt;code&amp;gt;PyExplodeDataFrame&amp;lt;/code&amp;gt; function. This function is not built-in and requires you to include the [[Python Pandas library]] in your model.''&lt;br /&gt;
&lt;br /&gt;
=== Converting from Analytica to Python data structures ===&lt;br /&gt;
The bridge between Analytica and Python performs two kinds of mappings: ''automatic scalar conversions'' and ''explicit conversion functions'' for arrays.&lt;br /&gt;
&lt;br /&gt;
==== Automatic scalar conversions ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Analytica type !! Python type&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;Text&amp;lt;/code&amp;gt; ||&amp;lt;code&amp;gt;str&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;Integer&amp;lt;/code&amp;gt; ||&amp;lt;code&amp;gt;int&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;Number&amp;lt;/code&amp;gt; ||&amp;lt;code&amp;gt;float&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;Boolean&amp;lt;/code&amp;gt; ||&amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;ComplexNumber&amp;lt;/code&amp;gt; ||&amp;lt;code&amp;gt;complex&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;DateTime&amp;lt;/code&amp;gt; ||&amp;lt;code&amp;gt;datetime.datetime&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;datetime.time&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;datetime.date&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;Handle&amp;lt;/code&amp;gt; ||&amp;lt;code&amp;gt;analytica.Object&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;Null / Undefined&amp;lt;/code&amp;gt; ||&amp;lt;code&amp;gt;None&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| ''Python opaque wrapper'' || unwrapped Python object&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;Reference&amp;lt;/code&amp;gt; ||&amp;lt;code&amp;gt;set&amp;lt;/code&amp;gt;of the dereferenced contents&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;Image&amp;lt;/code&amp;gt; ||&amp;lt;code&amp;gt;PIL.Image.Image&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Everything else ||&amp;lt;code&amp;gt;analytica.Value&amp;lt;/code&amp;gt; (wrapper for Analytica Values)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Explicit conversion functions for arrays ====&lt;br /&gt;
Analytica has a single collection type—the array—whereas Python offers several (&amp;lt;code&amp;gt;list&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;tuple&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;dict&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;set&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;numpy.ndarray&amp;lt;/code&amp;gt;, …). Because there is no one-to-one mapping, arrays are ''not'' converted implicitly; instead call one of the system functions below.&lt;br /&gt;
&lt;br /&gt;
''&amp;lt;code&amp;gt;PyList&amp;lt;/code&amp;gt;'', ''&amp;lt;code&amp;gt;PyTuple&amp;lt;/code&amp;gt;'', ''&amp;lt;code&amp;gt;PySet&amp;lt;/code&amp;gt;'', ''&amp;lt;code&amp;gt;PyDict&amp;lt;/code&amp;gt; create a Python collection over the single dimension that you specify. In contrast, &amp;lt;code&amp;gt;PyArray&amp;lt;/code&amp;gt; converts an entire Analytica array into a single &amp;lt;code&amp;gt;numpy.ndarray&amp;lt;/code&amp;gt;.''&lt;br /&gt;
&lt;br /&gt;
*[[PyList]] – Creates a Python &amp;lt;code&amp;gt;list&amp;lt;/code&amp;gt; from the specified index, retaining other dimensions in Analytica.&lt;br /&gt;
* [[PyTuple]] – Creates a Python &amp;lt;code&amp;gt;tuple&amp;lt;/code&amp;gt; from the chosen index of the array, retaining other dimensions in Analytica.&lt;br /&gt;
* [[PySet]] – Creates a Python &amp;lt;code&amp;gt;set&amp;lt;/code&amp;gt; from the specified index, duplicate entries will be removed.&lt;br /&gt;
* [[PyDict]] – Creates a Python &amp;lt;code&amp;gt;dict&amp;lt;/code&amp;gt; from an Analytica vector. The elements of a specified index are used as keys and the corresponding vector values become the dictionary values. The input vector must be indexed by the key index.&lt;br /&gt;
* [[PyArray]] – Converts an entire Analytica array into a single multi-dimensional &amp;lt;code&amp;gt;numpy.ndarray&amp;lt;/code&amp;gt;. This function always converts all dimensions. The optional index parameters are used to specify the order of the axes in the resulting NumPy array. For any Analytica dimension not explicitly passed as a parameter, a local, positional index is created for that axis in the NumPy array. An optional &amp;lt;code&amp;gt;dtype&amp;lt;/code&amp;gt; string passes directly to NumPy.&lt;br /&gt;
&lt;br /&gt;
== Using Analytica locals from Python code ==&lt;br /&gt;
&lt;br /&gt;
Analytica locals are visible by default to [[PyEval]] and [[PyExec]] when called within the same definition that introduces them (e.g., a definition using [[Local_Values|Local]] or a [[User-Defined_Functions|Function]] with parameters). To change visibility, pass explicit Python &amp;lt;code&amp;gt;globals&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;locals&amp;lt;/code&amp;gt; mappings; providing an empty &amp;lt;code&amp;gt;locals&amp;lt;/code&amp;gt; isolates the Python code from Analytica locals.&lt;br /&gt;
&lt;br /&gt;
'''Example:''' &amp;lt;code&amp;gt;Local a := 5; PyEval(&amp;quot;a + 1&amp;quot;)&amp;lt;/code&amp;gt; returns 6 because &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; is visible to the Python expression in that evaluation.&lt;br /&gt;
&lt;br /&gt;
== Accessing Analytica objects from Python code ==&lt;br /&gt;
To interact with your Analytica model from Python, use the &amp;lt;code&amp;gt;analytica&amp;lt;/code&amp;gt; module. This module is bundled with your Analytica installation and provides the necessary functions to access, evaluate, and manipulate objects within your model directly from Python.&lt;br /&gt;
&lt;br /&gt;
To begin, you must [[#Importing Python libraries|import the module]] in your Python code:&lt;br /&gt;
&amp;lt;code&amp;gt;import analytica&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Getting a handle to an Analytica object ===&lt;br /&gt;
You can obtain a handle to any object in your model using&amp;lt;code&amp;gt;analytica.get('object_identifier')&amp;lt;/code&amp;gt; in Python. This is useful when you want to refer to an object itself rather than its computed value. The function takes the identifier of the Analytica object as its argument and returns an &amp;lt;code&amp;gt;analytica.Object&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
''Example:''&lt;br /&gt;
To get a handle to a variable named &amp;lt;code&amp;gt;Revenue&amp;lt;/code&amp;gt;, you would use:&lt;br /&gt;
&amp;lt;code&amp;gt;revenue_handle = analytica.get('Revenue')&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This assigns an &amp;lt;code&amp;gt;analytica.Object&amp;lt;/code&amp;gt; representing the &amp;lt;code&amp;gt;Revenue&amp;lt;/code&amp;gt; Analytica variable to the &amp;lt;code&amp;gt;revenue_handle&amp;lt;/code&amp;gt; Python variable.&lt;br /&gt;
&lt;br /&gt;
=== Evaluating an Analytica expression ===&lt;br /&gt;
To evaluate an Analytica expression, use &amp;lt;code&amp;gt;analytica.eval('Analytica_expression')&amp;lt;/code&amp;gt;. This function evaluates the [[Evaluation Modes|mid-value]] of its string argument as an Analytica expression within the context of your model. To evaluate the [[Evaluation Modes|sample value]], use: &amp;lt;code&amp;gt;analytica.eval('Analytica expression', True)&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;analytica.eval()&amp;lt;/code&amp;gt; is the primary method for retrieving the calculated value of a variable. When it returns a value, it will [[#Converting from Analytica to Python data structures|implicitly convert]] many Analytica data types into their Python equivalents.&lt;br /&gt;
&lt;br /&gt;
''Example:''&lt;br /&gt;
To get the computed value of the &amp;lt;code&amp;gt;Revenue&amp;lt;/code&amp;gt; variable, you would evaluate its identifier:&lt;br /&gt;
&amp;lt;code&amp;gt;revenue_result = analytica.eval('Revenue')&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This executes the expression for &amp;lt;code&amp;gt;Revenue&amp;lt;/code&amp;gt; and stores its final value in the &amp;lt;code&amp;gt;revenue_result&amp;lt;/code&amp;gt; Python variable.&lt;br /&gt;
&lt;br /&gt;
== No Python code in an input ==&lt;br /&gt;
Python code will not evaluate in a variable that has a [[User input node]]. This is to avoid a code injection attack in which a user of your model tries to run arbitrary code.&lt;br /&gt;
&lt;br /&gt;
== Using Python in ACP or ADE ==&lt;br /&gt;
For security reasons, Python is not enabled on our public [https://acp.analytica.com ACP server]].&lt;br /&gt;
&lt;br /&gt;
On a dedicated ACP server, python can be installed as used the same is with desktop Analytica.&lt;br /&gt;
&lt;br /&gt;
Python integration can be used from an ADE deployment as well. You may want to set the default &amp;lt;code&amp;gt;Python Environment&amp;lt;/code&amp;gt; by using regedit to add the string value &amp;lt;code&amp;gt;PythonEnvironment&amp;lt;/code&amp;gt; to the hive&lt;br /&gt;
:&amp;lt;code&amp;gt;HKEY_LOCAL_MACHINE\SOFTWARE\Lumina Decision Systems\ADEW\{{#ifexpr: {{#svarget:anarelease|7.0}} &amp;gt; 7.0&lt;br /&gt;
 | {{#svarget:anarelease|7.0}}&lt;br /&gt;
 | 7.0&lt;br /&gt;
}}&amp;lt;/code&amp;gt;&lt;br /&gt;
Alternatively, your model can specify the &amp;lt;code&amp;gt;Python model environment&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
In some ADE installations, you may want to disable Python integration for security reasons (i.e., if you don't have full control of the Analytica models that are run). To do so, add these lines to ADE's &amp;lt;code&amp;gt;Analytica.ini&amp;lt;/code&amp;gt; file.&lt;br /&gt;
 Att_whenDisallowed PyArray : 4&lt;br /&gt;
 Att_whenDisallowed PyCall : 4&lt;br /&gt;
 Att_whenDisallowed PyDict : 4&lt;br /&gt;
 Att_whenDisallowed PyEval : 4&lt;br /&gt;
 Att_whenDisallowed PyExec : 4&lt;br /&gt;
 Att_whenDisallowed PyExplode : 4&lt;br /&gt;
 Att_whenDisallowed _PyGet : 4&lt;br /&gt;
 Att_whenDisallowed PyList : 4&lt;br /&gt;
 Att_whenDisallowed PySet : 4&lt;br /&gt;
 Att_whenDisallowed PyTuple : 4&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[Using Python from Analytica/Setting up a Python environment|Setting up a Python environment]]&lt;br /&gt;
* [[Using Python from Analytica/Examples using Python|Examples using Python]]&lt;br /&gt;
* [https://videos.analytica.com/Analytica-Python/AnaPythonBasics.mp4 Video on Analytica-Python integration basics]&lt;/div&gt;</summary>
		<author><name>Mhenrion</name></author>
	</entry>
	<entry>
		<id>https://docs.analytica.com/index.php?title=Using_Python_from_Analytica&amp;diff=63734</id>
		<title>Using Python from Analytica</title>
		<link rel="alternate" type="text/html" href="https://docs.analytica.com/index.php?title=Using_Python_from_Analytica&amp;diff=63734"/>
		<updated>2026-02-11T23:58:09Z</updated>

		<summary type="html">&lt;p&gt;Mhenrion: /* Introduction */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;                                               [[category:Python integration]]&lt;br /&gt;
''New in [[Analytica 7.0]]''&lt;br /&gt;
&lt;br /&gt;
Requires the [[Analytica Developer]] (formerly [[Analytica Enterprise]] edition.)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
Analytica provides a two-way bridge between Analytica and Python.  You can write Python code in the definitions of Analytica Variables and Functions.  Analytica can access Python variables and call Python functions, pass data—including multi-dimensional arrays—to it, and retrieve the results. Conversely, Python code can call back into Analytica to evaluate variables or expressions. Together the two environments combine Analytica’s intuitive influence-diagram interface, intelligent arrays, and built-in uncertainty analysis with Python’s vast open-source ecosystem.&lt;br /&gt;
&lt;br /&gt;
We recommend using Python versions '''3.8+''', although ''Theoretically'' the integration supports versions '''3.3+'',&lt;br /&gt;
&lt;br /&gt;
[https://videos.analytica.com/Analytica-Python/AnaPythonBasics.mp4 Watch video on Analytica-Python integration basics]&lt;br /&gt;
&lt;br /&gt;
=== Motivation: Why use Python? ===&lt;br /&gt;
Python offers thousands of purpose-built libraries that extend what you can do in a model. Here are just a few:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Library !! What it adds when used from Analytica&lt;br /&gt;
|-&lt;br /&gt;
|[https://numpy.org/ NumPy], [https://pandas.pydata.org/ Pandas]|| Efficient numerical arrays and data-frame operations that underlie many other Python analytics libraries&lt;br /&gt;
|-&lt;br /&gt;
|[https://pillow.readthedocs.io/en/stable/ Pillow]|| Programmatic image manipulation for tasks such as satellite-image preprocessing before feeding data back into Analytica.&lt;br /&gt;
|-&lt;br /&gt;
|[https://matplotlib.org/ Matplotlib],  [https://seaborn.pydata.org/ Seaborn]|| Visualizations not native to Analytica, including violin plots, heatmaps, network graphs, and 3-D surface plots.&lt;br /&gt;
|-&lt;br /&gt;
|[https://pytorch.org/ PyTorch],  [https://www.tensorflow.org/ Tensorflow]|| Training or running machine-learning models, then passing predictions into Analytica for further probabilistic analysis.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Advantages: When to use Python in Analytica ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Situation in Analytica !! Why using Python helps&lt;br /&gt;
|-&lt;br /&gt;
| Want custom visualizations beyond Analytica graphs || Generate plots with [https://matplotlib.org/ Matplotlib] or [https://seaborn.pydata.org/ Seaborn], save images, and display them in a Result window&lt;br /&gt;
|-&lt;br /&gt;
| Require advanced text or Natural-Language Processing || Apply Python packages like [https://spacy.io/ spaCy], [https://www.nltk.org/ NLTK], or built-in &amp;lt;code&amp;gt;re&amp;lt;/code&amp;gt; for parsing, classification, and transformation&lt;br /&gt;
|-&lt;br /&gt;
| Need a specialized statistical, ML, or optimization algorithm not built into Analytica || Leverage PyPI libraries such as [https://scikit-learn.org/ scikit-learn], [https://pandas.pydata.org/ pandas], or [https://coin-or.github.io/pulp/ pulp] without re-implementing the math&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Downsides: When native Analytica is sometimes the better choice ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Concern !! Why pure Analytica can be preferable&lt;br /&gt;
|-&lt;br /&gt;
|[[Array Abstraction|Array abstraction]]|| Operating on arrays with different dimensions is a one-liner in Analytica but often requires verbose reshape/broadcast code in NumPy or Pandas.&lt;br /&gt;
|-&lt;br /&gt;
| Performance overhead || Transferring data and compiling Python incurs latency; tight loops or lightweight formulas run much faster as native Analytica expressions. For repeated Python calls, define a [[Callable]] to compile once and reuse.&lt;br /&gt;
|-&lt;br /&gt;
|[[Monte Carlo and probabilistic simulation|Monte Carlo]]|| Analytica’s built-in stochastic simulation is deeply integrated; recreating these in Python is rarely worth the effort.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Setting up a Python environment ==&lt;br /&gt;
&lt;br /&gt;
=== Installing Conda ===&lt;br /&gt;
Download and run the Anaconda or Miniconda [https://www.anaconda.com/download/success installer] for Windows.&lt;br /&gt;
&lt;br /&gt;
=== Creating and activating a Python environment ===&lt;br /&gt;
Open the newly installed '''Anaconda Prompt''' app and run this command, which will create a new Python 3.11 environment named &amp;lt;code&amp;gt;MyEnv&amp;lt;/code&amp;gt; and install the Python libraries [https://pandas.pydata.org/ Pandas] and [https://numpy.org/ NumPy]:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;conda create -n MyEnv python=3.11 pandas numpy&amp;lt;/code&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
=== Telling Analytica which Python environment to use ===&lt;br /&gt;
Open the '''Definition / Application integration / Python''' submenu.&lt;br /&gt;
&lt;br /&gt;
Set either '''Python Environment''' or '''Python Model Environment''' to the environment’s name (e.g. &amp;lt;code&amp;gt;MyEnv&amp;lt;/code&amp;gt;) or to the full folder path of the Python installation home directory, for example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;C:\Users\username\anaconda3\envs\MyEnv&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Python Environment''' is stored with the Analytica installation and becomes the default for any model that does not set '''Python Model Environment'''.&lt;br /&gt;
&lt;br /&gt;
'''Python Model Environment''' is saved inside the current model and overrides the installation-wide setting.&lt;br /&gt;
&lt;br /&gt;
''See [[Using Python from Analytica/Setting up a Python environment|Setting up a Python environment]] for a detailed walkthrough.''&lt;br /&gt;
&lt;br /&gt;
=== Loading and Unloading of Python ===&lt;br /&gt;
&lt;br /&gt;
Python (core, environment, and libraries) loads only when your model first executes or evaluates Python code, and unloads when you close the model. Reopening the same model, or opening another that uses Python, starts a fresh Python session; any prior Python state (variables, imports) is lost. If the new model uses a different environment, it may run a different Python release.&lt;br /&gt;
&lt;br /&gt;
If Python is already loaded and you change the '''Python Environment''' or '''Python Model Environment''', Python unloads immediately. The selected environment’s Python loads the next time your model runs Python code. Unloading discards all Python state (variables, imports).&lt;br /&gt;
&lt;br /&gt;
Python runs in the same process as Analytica.&lt;br /&gt;
&lt;br /&gt;
== The Python menu ==&lt;br /&gt;
&lt;br /&gt;
The core Analytica functions and system variables for configuring and interacting with Python are found on the '''Definition / Application integration / Python''' submenu.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[image:Python menu.png]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Importing Python libraries ==&lt;br /&gt;
&lt;br /&gt;
The ''preferred'' way to make Python libraries available in Analytica models is to place their import statements in the system variable '''PythonStartupCode'''. These lines execute when Python gets loaded, so the libraries are ready for use in later Python code.&lt;br /&gt;
&lt;br /&gt;
''If you edit '''PythonStartupCode''' after Python has already been loaded in the current Analytica model, you must reload the model (or close and reopen Analytica) for the modified startup code to take effect.''&lt;br /&gt;
&lt;br /&gt;
=== Importing from nodes ===&lt;br /&gt;
When creating a filed Analytica library or module, it is ''highly recommended'' to perform imports within a [[Variable]] or [[Callable]] node inside the library/module itself. This practice ensures that the library/module remains self-contained, as '''PythonStartupCode''' is not saved as part of a filed module or library. You should then create dependencies from nodes that use the Python libraries to the import node(s) to ensure the Python libraries are loaded before use.&lt;br /&gt;
&lt;br /&gt;
Python supports two main import styles:&lt;br /&gt;
&lt;br /&gt;
* Module import – e.g., &amp;lt;code&amp;gt;import numpy&amp;lt;/code&amp;gt;  &lt;br /&gt;
* Selective / wildcard import – e.g., &amp;lt;code&amp;gt;from numpy import array, zeros&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;from numpy import *&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
When an import statement is the final expression, Analytica returns its value:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Import statement&lt;br /&gt;
! Return value when it is the last statement&lt;br /&gt;
! Output image&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;import numpy as np, os&amp;lt;/code&amp;gt;&lt;br /&gt;
| The module’s string representation e.g.,&amp;lt;br/&amp;gt;&amp;lt;code&amp;gt;«Python &amp;lt;module 'numpy' from …&amp;gt;»&amp;lt;/code&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;code&amp;gt;«Python &amp;lt;module 'os' from …&amp;gt;»&amp;lt;/code&amp;gt;)&lt;br /&gt;
| [[Image:PythonMultipleModuleImports.png|thumb|250px]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;from numpy import array, zeros&amp;lt;/code&amp;gt;&lt;br /&gt;
| A list of the imported names (alias names if provided, otherwise the original names)&lt;br /&gt;
| [[Image:PythonMultipleSelectiveImports.png|thumb|250px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Python &amp;lt;code&amp;gt;py::&amp;lt;/code&amp;gt; namespace   ==&lt;br /&gt;
Analytica exposes the embedded Python interpreter through the &amp;lt;code&amp;gt;py::&amp;lt;/code&amp;gt; namespace prefix.  Any name visible at the top level of the interpreter—global variables, functions, classes, or imported modules—can be accessed through Analytica with the same spelling and case, preceded by &amp;lt;code&amp;gt;py::&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Example: Incrementing a Python global variable '''counter''' by 2&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;py::counter := py::counter + 2;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Calling a Python function ==&lt;br /&gt;
Invoking a Python function from Analytica is as simple as writing it:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;py::len(MyArray)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Arguments may be:&lt;br /&gt;
* Analytica scalars&lt;br /&gt;
* Analytica arrays (which get [[Array Abstraction|array abstracted]])&lt;br /&gt;
* Python objects&lt;br /&gt;
&lt;br /&gt;
=== Keyword arguments (kwargs) ===&lt;br /&gt;
When a Python function accepts keyword arguments (&amp;lt;code&amp;gt;**kwargs&amp;lt;/code&amp;gt;), use a syntax ''similar'' to Analytica’s [[Function calls and parameters#Name-based function calls|name-based function calls]], a colon after the parameter name, followed by the parameter value, instead of the equal sign used in Python.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;py::my_func(&amp;quot;arg1&amp;quot;, kwarg1:1, kwarg2:&amp;quot;abc&amp;quot;)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The equivalent call in native Python is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;my_func(&amp;quot;arg1&amp;quot;, kwarg1=1, kwarg2=&amp;quot;abc&amp;quot;)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Python &amp;lt;code&amp;gt;print()&amp;lt;/code&amp;gt; function  ===&lt;br /&gt;
The standard Python &amp;lt;code&amp;gt;print()&amp;lt;/code&amp;gt; function sends its text output to Analytica's [[Typescript|Typescript console]] window, just as it appears in a native Python console.  &lt;br /&gt;
* When called from Analytica with &amp;lt;code&amp;gt;py::print()&amp;lt;/code&amp;gt;, the printed text will appear in the window.  &lt;br /&gt;
* When called inside a Python script executed by Analytica, any &amp;lt;code&amp;gt;print()&amp;lt;/code&amp;gt; statements also stream to the window.&lt;br /&gt;
&lt;br /&gt;
== Using Python classes ==&lt;br /&gt;
=== Using an existing Python class ===&lt;br /&gt;
To instantiate a Python class, call its constructor with the &amp;lt;code&amp;gt;py::&amp;lt;/code&amp;gt; prefix and pass any arguments exactly as you would in native Python.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;py::MyClass(42, 'widgets')&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Arrow operator (&amp;lt;code&amp;gt;-&amp;gt;&amp;lt;/code&amp;gt;)  ===&lt;br /&gt;
The arrow operator (&amp;lt;code&amp;gt;-&amp;gt;&amp;lt;/code&amp;gt;) lets you access the attributes and methods of a Python object, analogous to the dot operator (&amp;lt;code&amp;gt;.&amp;lt;/code&amp;gt;) in Python:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;ColNames := MyDf-&amp;gt;columns      { attribute }&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;Head5    := MyDf-&amp;gt;head(5)      { method }&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can chain these accesses and calls:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;FirstName := MyDf-&amp;gt;columns-&amp;gt;tolist()&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can also assign through the arrow operator; the assignment will update the underlying Python object:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;MyObj-&amp;gt;value := 42&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Using Python code in a definition ==&lt;br /&gt;
When you choose '''Python expr''' from the [[Definition]] drop-down, the entire definition is passed verbatim to the embedded Python interpreter.&lt;br /&gt;
&lt;br /&gt;
=== Defining a UDF with a Python expr definition ===&lt;br /&gt;
When you set a Function node’s [[Definition]] to '''Python expr''', you can write the entire body in Python. Analytica recompiles that code every time the function is evaluated, which can noticeably slow large array computations. To eliminate this overhead, place the code in a reusable Python [[Callable]] so the compiled version remains cached between calls.&lt;br /&gt;
&lt;br /&gt;
''Inside '''Python expr''', Analytica function parameters behave like local Python variables.''&lt;br /&gt;
&lt;br /&gt;
== Callables ==&lt;br /&gt;
&lt;br /&gt;
[[Callable|Callables]] let you embed full Python functions or classes directly inside Analytica, then invoke them like any other [[User-Defined Functions|UDF]].&lt;br /&gt;
&lt;br /&gt;
=== Creating a Python Callable node ===&lt;br /&gt;
* Create a new [[Variable]] node.&lt;br /&gt;
* In the node’s [[Object Window|Object window]], change the [[Class details|Class]] dropdown from '''Variable''' to '''Callable'''.&lt;br /&gt;
* Enter your Python code in the Definition pane.&lt;br /&gt;
&lt;br /&gt;
=== Writing Python Callable code ===&lt;br /&gt;
Use standard Python syntax to define a &amp;lt;code&amp;gt;def&amp;lt;/code&amp;gt; function or a &amp;lt;code&amp;gt;class&amp;lt;/code&amp;gt; inside the [[Definition]] pane of your '''Callable'''. For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def compound_interest(p, r, n):&lt;br /&gt;
    return p * (1 + r) ** n&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Caching compiled functions in Callables ===&lt;br /&gt;
When you evaluate a node, Analytica compiles your function and caches the resulting callable object as the node’s value. This differs from [[UDF|UDFs]] which cannot store a value, so they compile every time they run.&lt;br /&gt;
&lt;br /&gt;
=== Parameters attribute ===&lt;br /&gt;
'''Callables''' do '''not''' have a Parameters attribute; all arguments are declared in your &amp;lt;code&amp;gt;def&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;class&amp;lt;/code&amp;gt; signature.&lt;br /&gt;
&lt;br /&gt;
=== Importing custom Python modules ===&lt;br /&gt;
Import modules exactly as you would in native Python. For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import myutils&lt;br /&gt;
from mylib.finance import NPV&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensure the module is on Python’s &amp;lt;code&amp;gt;sys.path&amp;lt;/code&amp;gt; by appending the module's directory to the path. For additional guidance, see the official [https://docs.python.org/3/tutorial/modules.html Python documentation on modules].&lt;br /&gt;
&lt;br /&gt;
== Dependencies ==&lt;br /&gt;
Analytica's automatic dependency graph is a key advantage over working in environments like Jupyter notebooks or regular Python scripts, where you are responsible for manually re-running cells or scripts to reflect changes.&lt;br /&gt;
&lt;br /&gt;
When integrating Python code, however, Analytica's dependency system cannot parse the Python script to automatically detect when an Analytica node is being used. You must explicitly declare these dependencies by drawing influence arrows. Drawing an influence arrow from any node to a node that uses '''Python Expr''' creates a true dependency, adding it to Analytica's dependency graph.&lt;br /&gt;
&lt;br /&gt;
''As an alternative for nodes that access Python global variables without using '''Python Expr''', you can establish a dependency by including the Identifier of the influencing node directly within the Definition of the dependent node.''&lt;br /&gt;
&lt;br /&gt;
If dependencies for Python nodes are not manually defined with arrows, your model will not invalidate results correctly. Updates to an input variable will not trigger re-computation in the Python node that depends on it, leaving it with a stale, incorrect value.&lt;br /&gt;
&lt;br /&gt;
== Functions for evaluating Python code ==&lt;br /&gt;
&lt;br /&gt;
=== PyEval ===&lt;br /&gt;
[[PyEval]] is used to evaluate a single Python expression and return its value to Analytica. It is designed to be side-effect-free, meaning it won't change the state of variables or objects in Python. This makes it ideal for safe, simple calculations.&lt;br /&gt;
&lt;br /&gt;
''Since &amp;lt;code&amp;gt;PyEval&amp;lt;/code&amp;gt; only evaluates a single expression, it cannot execute multi-line code or statements like variable assignments or imports.''&lt;br /&gt;
&lt;br /&gt;
It also includes an optional &amp;lt;code&amp;gt;excludeTypes&amp;lt;/code&amp;gt; parameter, which allows you to specify Python types that should not be converted to Analytica Values.&lt;br /&gt;
&lt;br /&gt;
=== PyExec ===&lt;br /&gt;
[[PyExec]] is used to execute a block of Python code, which can contain multiple lines or statements. Unlike &amp;lt;code&amp;gt;PyEval&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;PyExec&amp;lt;/code&amp;gt; is intended to have side effects. You can use it to import libraries, define functions, or set the values of variables in the Python environment.&lt;br /&gt;
&lt;br /&gt;
Use &amp;lt;code&amp;gt;PyExec&amp;lt;/code&amp;gt; when you need to run a script to set up an environment or perform operations that modify the Python state for use in later evaluations.&lt;br /&gt;
&lt;br /&gt;
=== PyCall ===&lt;br /&gt;
[[PyCall]] offers a direct and efficient way to call a specific Python function. You provide the callable Python function object followed by its positional and keyword arguments.&lt;br /&gt;
&lt;br /&gt;
This is the preferred function when your primary goal is to execute an existing Python function and retrieve its result.&lt;br /&gt;
&lt;br /&gt;
== Non-scalar data structures ==&lt;br /&gt;
Any Python object that is not converted automatically to an Analytica type comes back as an ''opaque wrapper'' displayed as &amp;lt;code&amp;gt;«Python …»&amp;lt;/code&amp;gt;, where the ellipsis is the object’s [https://docs.python.org/3/library/functions.html#repr repr]. Keep this wrapper when the object merely passes between Python calls, and invoke [[PyExplode]] when the data must be examined or manipulated within Analytica.&lt;br /&gt;
&lt;br /&gt;
=== Converting from Python data to Analytica ===&lt;br /&gt;
When a Python function invoked from Analytica returns a result, Analytica automatically attempts to convert the Python data into the most appropriate Analytica value. For complex data structures, the dedicated [[PyExplode]] function is available to perform more specific conversions.&lt;br /&gt;
&lt;br /&gt;
==== Automatic conversions ====&lt;br /&gt;
The following Python types are automatically converted to their corresponding Analytica equivalents without any extra steps:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Python type !! Analytica type !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;int&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;Integer&amp;lt;/code&amp;gt; ||''If the &amp;lt;code&amp;gt;int&amp;lt;/code&amp;gt; exceeds the 64-bit signed-integer range, Analytica converts it to a double floating-point '''Number''' instead of an '''Integer'''.''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;float&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;Number&amp;lt;/code&amp;gt; || &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;Boolean&amp;lt;/code&amp;gt; || &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;complex&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;ComplexNumber&amp;lt;/code&amp;gt; || &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;str&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;Text&amp;lt;/code&amp;gt; || &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;None&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;Null&amp;lt;/code&amp;gt; || &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;date&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;DateTime&amp;lt;/code&amp;gt; || &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;time&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;DateTime&amp;lt;/code&amp;gt; || &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;datetime&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;DateTime&amp;lt;/code&amp;gt; || &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;analytica.Value&amp;lt;/code&amp;gt; || Unwrapped Analytica value || &lt;br /&gt;
|-&lt;br /&gt;
| Any other Python object || ''Python opaque wrapper'' ||''Can be passed to other Python function calls or converted with &amp;lt;code&amp;gt;PyExplode&amp;lt;/code&amp;gt;.''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== PyExplode ====&lt;br /&gt;
The [[PyExplode]] function provides explicit control for converting complex Python objects that are not converted automatically.&lt;br /&gt;
&lt;br /&gt;
Key capabilities include:&lt;br /&gt;
* Unpacking Python built-in collections, like &amp;lt;code&amp;gt;list&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;tuple&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;set&amp;lt;/code&amp;gt;, into a 1D Analytica array.&lt;br /&gt;
* Converting a Python &amp;lt;code&amp;gt;dict&amp;lt;/code&amp;gt; into a 1D Analytica array, using the dictionary keys to create a new local index.&lt;br /&gt;
* Using nested calls to convert multi-dimensional data into multi-dimensional Analytica arrays.&lt;br /&gt;
* Fully converting a [https://numpy.org/doc/stable/reference/generated/numpy.ndarray.html NumPy Array] into an n-dimensional Analytica array.&lt;br /&gt;
* Converting image objects from [https://pillow.readthedocs.io/en/stable/reference/Image.html#PIL.Image.Image PIL.Image] or [https://matplotlib.org/stable/api/_as_gen/matplotlib.figure.Figure.html matplotlib.figure.Figure] directly into Analytica images.&lt;br /&gt;
* Optionally excluding specific Python types from conversion with &amp;lt;code&amp;gt;excludeTypes&amp;lt;/code&amp;gt;, which keeps them as opaque Python object handles.&lt;br /&gt;
&lt;br /&gt;
''To convert a [https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.html Pandas DataFrame], you must use the &amp;lt;code&amp;gt;PyExplodeDataFrame&amp;lt;/code&amp;gt; function. This function is not built-in and requires you to include the [[Python Pandas library]] in your model.''&lt;br /&gt;
&lt;br /&gt;
=== Converting from Analytica to Python data structures ===&lt;br /&gt;
The bridge between Analytica and Python performs two kinds of mappings: ''automatic scalar conversions'' and ''explicit conversion functions'' for arrays.&lt;br /&gt;
&lt;br /&gt;
==== Automatic scalar conversions ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Analytica type !! Python type&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;Text&amp;lt;/code&amp;gt; ||&amp;lt;code&amp;gt;str&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;Integer&amp;lt;/code&amp;gt; ||&amp;lt;code&amp;gt;int&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;Number&amp;lt;/code&amp;gt; ||&amp;lt;code&amp;gt;float&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;Boolean&amp;lt;/code&amp;gt; ||&amp;lt;code&amp;gt;bool&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;ComplexNumber&amp;lt;/code&amp;gt; ||&amp;lt;code&amp;gt;complex&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;DateTime&amp;lt;/code&amp;gt; ||&amp;lt;code&amp;gt;datetime.datetime&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;datetime.time&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;datetime.date&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;Handle&amp;lt;/code&amp;gt; ||&amp;lt;code&amp;gt;analytica.Object&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;Null / Undefined&amp;lt;/code&amp;gt; ||&amp;lt;code&amp;gt;None&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| ''Python opaque wrapper'' || unwrapped Python object&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;Reference&amp;lt;/code&amp;gt; ||&amp;lt;code&amp;gt;set&amp;lt;/code&amp;gt;of the dereferenced contents&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;Image&amp;lt;/code&amp;gt; ||&amp;lt;code&amp;gt;PIL.Image.Image&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Everything else ||&amp;lt;code&amp;gt;analytica.Value&amp;lt;/code&amp;gt; (wrapper for Analytica Values)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Explicit conversion functions for arrays ====&lt;br /&gt;
Analytica has a single collection type—the array—whereas Python offers several (&amp;lt;code&amp;gt;list&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;tuple&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;dict&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;set&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;numpy.ndarray&amp;lt;/code&amp;gt;, …). Because there is no one-to-one mapping, arrays are ''not'' converted implicitly; instead call one of the system functions below.&lt;br /&gt;
&lt;br /&gt;
''&amp;lt;code&amp;gt;PyList&amp;lt;/code&amp;gt;'', ''&amp;lt;code&amp;gt;PyTuple&amp;lt;/code&amp;gt;'', ''&amp;lt;code&amp;gt;PySet&amp;lt;/code&amp;gt;'', ''&amp;lt;code&amp;gt;PyDict&amp;lt;/code&amp;gt; create a Python collection over the single dimension that you specify. In contrast, &amp;lt;code&amp;gt;PyArray&amp;lt;/code&amp;gt; converts an entire Analytica array into a single &amp;lt;code&amp;gt;numpy.ndarray&amp;lt;/code&amp;gt;.''&lt;br /&gt;
&lt;br /&gt;
*[[PyList]] – Creates a Python &amp;lt;code&amp;gt;list&amp;lt;/code&amp;gt; from the specified index, retaining other dimensions in Analytica.&lt;br /&gt;
* [[PyTuple]] – Creates a Python &amp;lt;code&amp;gt;tuple&amp;lt;/code&amp;gt; from the chosen index of the array, retaining other dimensions in Analytica.&lt;br /&gt;
* [[PySet]] – Creates a Python &amp;lt;code&amp;gt;set&amp;lt;/code&amp;gt; from the specified index, duplicate entries will be removed.&lt;br /&gt;
* [[PyDict]] – Creates a Python &amp;lt;code&amp;gt;dict&amp;lt;/code&amp;gt; from an Analytica vector. The elements of a specified index are used as keys and the corresponding vector values become the dictionary values. The input vector must be indexed by the key index.&lt;br /&gt;
* [[PyArray]] – Converts an entire Analytica array into a single multi-dimensional &amp;lt;code&amp;gt;numpy.ndarray&amp;lt;/code&amp;gt;. This function always converts all dimensions. The optional index parameters are used to specify the order of the axes in the resulting NumPy array. For any Analytica dimension not explicitly passed as a parameter, a local, positional index is created for that axis in the NumPy array. An optional &amp;lt;code&amp;gt;dtype&amp;lt;/code&amp;gt; string passes directly to NumPy.&lt;br /&gt;
&lt;br /&gt;
== Using Analytica locals from Python code ==&lt;br /&gt;
&lt;br /&gt;
Analytica locals are visible by default to [[PyEval]] and [[PyExec]] when called within the same definition that introduces them (e.g., a definition using [[Local_Values|Local]] or a [[User-Defined_Functions|Function]] with parameters). To change visibility, pass explicit Python &amp;lt;code&amp;gt;globals&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;locals&amp;lt;/code&amp;gt; mappings; providing an empty &amp;lt;code&amp;gt;locals&amp;lt;/code&amp;gt; isolates the Python code from Analytica locals.&lt;br /&gt;
&lt;br /&gt;
'''Example:''' &amp;lt;code&amp;gt;Local a := 5; PyEval(&amp;quot;a + 1&amp;quot;)&amp;lt;/code&amp;gt; returns 6 because &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; is visible to the Python expression in that evaluation.&lt;br /&gt;
&lt;br /&gt;
== Accessing Analytica objects from Python code ==&lt;br /&gt;
To interact with your Analytica model from Python, use the &amp;lt;code&amp;gt;analytica&amp;lt;/code&amp;gt; module. This module is bundled with your Analytica installation and provides the necessary functions to access, evaluate, and manipulate objects within your model directly from Python.&lt;br /&gt;
&lt;br /&gt;
To begin, you must [[#Importing Python libraries|import the module]] in your Python code:&lt;br /&gt;
&amp;lt;code&amp;gt;import analytica&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Getting a handle to an Analytica object ===&lt;br /&gt;
You can obtain a handle to any object in your model using&amp;lt;code&amp;gt;analytica.get('object_identifier')&amp;lt;/code&amp;gt; in Python. This is useful when you want to refer to an object itself rather than its computed value. The function takes the identifier of the Analytica object as its argument and returns an &amp;lt;code&amp;gt;analytica.Object&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
''Example:''&lt;br /&gt;
To get a handle to a variable named &amp;lt;code&amp;gt;Revenue&amp;lt;/code&amp;gt;, you would use:&lt;br /&gt;
&amp;lt;code&amp;gt;revenue_handle = analytica.get('Revenue')&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This assigns an &amp;lt;code&amp;gt;analytica.Object&amp;lt;/code&amp;gt; representing the &amp;lt;code&amp;gt;Revenue&amp;lt;/code&amp;gt; Analytica variable to the &amp;lt;code&amp;gt;revenue_handle&amp;lt;/code&amp;gt; Python variable.&lt;br /&gt;
&lt;br /&gt;
=== Evaluating an Analytica expression ===&lt;br /&gt;
To evaluate an Analytica expression, use &amp;lt;code&amp;gt;analytica.eval('Analytica_expression')&amp;lt;/code&amp;gt;. This function evaluates the [[Evaluation Modes|mid-value]] of its string argument as an Analytica expression within the context of your model. To evaluate the [[Evaluation Modes|sample value]], use: &amp;lt;code&amp;gt;analytica.eval('Analytica expression', True)&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;analytica.eval()&amp;lt;/code&amp;gt; is the primary method for retrieving the calculated value of a variable. When it returns a value, it will [[#Converting from Analytica to Python data structures|implicitly convert]] many Analytica data types into their Python equivalents.&lt;br /&gt;
&lt;br /&gt;
''Example:''&lt;br /&gt;
To get the computed value of the &amp;lt;code&amp;gt;Revenue&amp;lt;/code&amp;gt; variable, you would evaluate its identifier:&lt;br /&gt;
&amp;lt;code&amp;gt;revenue_result = analytica.eval('Revenue')&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This executes the expression for &amp;lt;code&amp;gt;Revenue&amp;lt;/code&amp;gt; and stores its final value in the &amp;lt;code&amp;gt;revenue_result&amp;lt;/code&amp;gt; Python variable.&lt;br /&gt;
&lt;br /&gt;
== No Python code in an input ==&lt;br /&gt;
Python code will not evaluate in a variable that has a [[User input node]]. This is to avoid a code injection attack in which a user of your model tries to run arbitrary code.&lt;br /&gt;
&lt;br /&gt;
== Using Python in ACP or ADE ==&lt;br /&gt;
For security reasons, Python is not enabled on our public [https://acp.analytica.com ACP server]].&lt;br /&gt;
&lt;br /&gt;
On a dedicated ACP server, python can be installed as used the same is with desktop Analytica.&lt;br /&gt;
&lt;br /&gt;
Python integration can be used from an ADE deployment as well. You may want to set the default &amp;lt;code&amp;gt;Python Environment&amp;lt;/code&amp;gt; by using regedit to add the string value &amp;lt;code&amp;gt;PythonEnvironment&amp;lt;/code&amp;gt; to the hive&lt;br /&gt;
:&amp;lt;code&amp;gt;HKEY_LOCAL_MACHINE\SOFTWARE\Lumina Decision Systems\ADEW\{{#ifexpr: {{#svarget:anarelease|7.0}} &amp;gt; 7.0&lt;br /&gt;
 | {{#svarget:anarelease|7.0}}&lt;br /&gt;
 | 7.0&lt;br /&gt;
}}&amp;lt;/code&amp;gt;&lt;br /&gt;
Alternatively, your model can specify the &amp;lt;code&amp;gt;Python model environment&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
In some ADE installations, you may want to disable Python integration for security reasons (i.e., if you don't have full control of the Analytica models that are run). To do so, add these lines to ADE's &amp;lt;code&amp;gt;Analytica.ini&amp;lt;/code&amp;gt; file.&lt;br /&gt;
 Att_whenDisallowed PyArray : 4&lt;br /&gt;
 Att_whenDisallowed PyCall : 4&lt;br /&gt;
 Att_whenDisallowed PyDict : 4&lt;br /&gt;
 Att_whenDisallowed PyEval : 4&lt;br /&gt;
 Att_whenDisallowed PyExec : 4&lt;br /&gt;
 Att_whenDisallowed PyExplode : 4&lt;br /&gt;
 Att_whenDisallowed _PyGet : 4&lt;br /&gt;
 Att_whenDisallowed PyList : 4&lt;br /&gt;
 Att_whenDisallowed PySet : 4&lt;br /&gt;
 Att_whenDisallowed PyTuple : 4&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[Using Python from Analytica/Setting up a Python environment|Setting up a Python environment]]&lt;br /&gt;
* [[Using Python from Analytica/Examples using Python|Examples using Python]]&lt;br /&gt;
* [https://videos.analytica.com/Analytica-Python/AnaPythonBasics.mp4 Video on Analytica-Python integration basics]&lt;/div&gt;</summary>
		<author><name>Mhenrion</name></author>
	</entry>
	<entry>
		<id>https://docs.analytica.com/index.php?title=What%27s_new_in_Analytica_7.0%3F&amp;diff=63733</id>
		<title>What's new in Analytica 7.0?</title>
		<link rel="alternate" type="text/html" href="https://docs.analytica.com/index.php?title=What%27s_new_in_Analytica_7.0%3F&amp;diff=63733"/>
		<updated>2026-02-11T22:28:18Z</updated>

		<summary type="html">&lt;p&gt;Mhenrion: /* Index label auto updates */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[category:What's new pages]]&lt;br /&gt;
[[category:Analytica releases]]&lt;br /&gt;
&lt;br /&gt;
[[Analytica 7.0]] will be the next major Analytica release and is currently in [[Beta Tester Page|beta testing]]. Go to [[Beta Tester Page]] to try it. The current official release is [[Analytica 6.6]]. &lt;br /&gt;
&lt;br /&gt;
==Highlights of Analytica 7.0==&lt;br /&gt;
&lt;br /&gt;
* '''[[#Python integration|Python integration]]:''' The major enhancement is integration with Python and hence the entire Python ecosystem of libraries. You can easily call functions from Python libraries, access Python variables, and even write Python code right inside Analytica variables and functions. So now you can mix and match Analytica and Python according to which language you think best for your modeling or coding needs.&lt;br /&gt;
*  '''[[#Index label auto updates|Index label auto updates]]:''' A common source of errors has been when you change a text label in an Index without remembering to change expressions that refer to that same text label. Changes to labels now update automatically in expressions in most cases.&lt;br /&gt;
*  The '''Analytica Enterprise'''' edition has been renamed the [[#Developer Edition (formerly known as Enterprise) |Developer edition]], which better reflects what it is.&lt;br /&gt;
* It introduces two new object Classes:  &lt;br /&gt;
** [[Struct]] lets you bundle disparate values, like text, numbeers, atoms and arrays, together in one object that does not array abstract -- similar to Records and Classes in other languages).  &lt;br /&gt;
** [[Callable]] is like a user-defined Function but it's Definition can be a [[handle]] to a Python class or a Python function. &lt;br /&gt;
* [[ParseJSON]] and [[MakeJSON]] now use Structs, which are much more convenient for representing the hierarchical structure of JSON.&lt;br /&gt;
* [[#SpreadsheetOpen|Read and write spreadsheets without Excel]]:  This is faster and more robust, and you don't need Excel installed.&lt;br /&gt;
&lt;br /&gt;
== [[Using Python from Analytica|Python integration]] ==&lt;br /&gt;
&lt;br /&gt;
You can now write Python code inside Analytica definitions! It's easy to call Python functions, with Analytica-style Intelligent Arrays!. So you can access the vast ecosystem of Python libraries (''modules'' in Python lingo). Among the gazillion possibilities are specialized libraries for data visualization, statistics, machine learning, and much more.&lt;br /&gt;
It means that you can mix and match Analytica and Python -- write Analytica code for what's easiest in Analytica and Python code for what's easiest in Python.  &lt;br /&gt;
&lt;br /&gt;
See: [[Using Python from Analytica]]&lt;br /&gt;
(In [[Analytica Developer]] edition or better). &lt;br /&gt;
&lt;br /&gt;
For the Analytica modeler, this puts a ton of resources at your fingertips. &lt;br /&gt;
&lt;br /&gt;
It's also pretty cool for the Python developer. Analytica is like a new interactive development environment with a lot of unique advantages, especially during interactive code development:&lt;br /&gt;
* Analytica's dependency maintenance can be really convenient during interactive development, creating automatic dependency maintenance between your Python functions, classes and variables that don't exist in Python.&lt;br /&gt;
* The visual influence diagram layout can be a super useful to way organize and visualize your code.&lt;br /&gt;
* It naturally encourages declarative code practices, which leads to better and more maintainable coding style.&lt;br /&gt;
* You get the benefits of Analytica's edit tables, plus for results, Analytica's multi-D result tables and one-click, no-code, graphing.&lt;br /&gt;
* It is easy to wrap existing Python models to get Monte Carlo, parametric analysis and sensitivity analysis with Analytica ease.&lt;br /&gt;
* Sometimes one or the other language is more convenient for a particular task. You can freely switch between whichever language feels better suited to the immediate task, and intermix languages easily.&lt;br /&gt;
&lt;br /&gt;
== Developer Edition (formerly known as Enterprise) ==&lt;br /&gt;
&lt;br /&gt;
Analytica's middle-tier edition formerly known as the ''Enterprise Edition'', it is now called the [[Analytica Developer|Analytica Developer edition]]. That name better reflects what it is--software for developers of decision applications.  If you're now a user of Analytica Enterprise you don't have to update your license or do anything special. The name will just change when you install Analytica 7.0.  In Analytica docs, when you select &amp;quot;7.0&amp;quot; on the release bar (at the top of pages that have release-contingent content), all the docs automatically use the new Analytica Developer edition name. &lt;br /&gt;
&lt;br /&gt;
== Analytica language extensions ==&lt;br /&gt;
&lt;br /&gt;
=== Index label auto updates ===&lt;br /&gt;
&lt;br /&gt;
When you change the identifier of a variable, Analytica automatically updates all Definitions to use the new name. But, when you change a text label in an Index, it previously cause cause errors in Definitions using that label. For example, if you have&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  Index Animal := ['Cat', 'Dog']&lt;br /&gt;
  Variable Sound := IF Animal = 'Cat' THEN 'Miaow' ELSE 'Woof'&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
If you change &amp;lt;code&amp;gt; 'Cat'&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;'Feline' &amp;lt;/code&amp;gt; in Index &amp;lt;code&amp;gt;Animal&amp;lt;/code&amp;gt;, the Definition of &amp;lt;code&amp;gt;Sound&amp;lt;/code&amp;gt; will now automatically update to&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
     IF Animal = 'Feline' THEN 'Miaow' ELSE 'Woof'&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
It does this wherever it sees &amp;lt;code&amp;gt;Animal=&amp;lt;label&amp;gt;&amp;lt;/code&amp;gt;.&lt;br /&gt;
If you use the label in another context where the index would notnormally appear, you should the new [[Index-label dot syntax]] (&amp;lt;code&amp;gt;Animal . 'Cat'&amp;lt;/code&amp;gt;) associates a text literal with its index to prevent it from getting out of sync, and to warn if it ever does. These [[Keeping text literals consistent with index labels| features]] help avoid common errors when updating text labels in Indexes.&lt;br /&gt;
&lt;br /&gt;
=== Callable ===&lt;br /&gt;
&lt;br /&gt;
The new object [[Class]] [[Callable]] is a variable-like object, meaning it has a [[Definition]] and a computed value, but can be used for convenience and documentation when the computed value itself is something that can be called, such as a [[Local function]] (aka ''lambda function''), a [[handle]] to an global function, a Python class or a Python function.&lt;br /&gt;
&lt;br /&gt;
If you &amp;quot;compute&amp;quot; the identity of a callable data item inside a normal [[Variable]] instance, &amp;lt;code&amp;gt;X&amp;lt;/code&amp;gt;, you could call it using the syntax &amp;lt;code&amp;gt;X-&amp;gt;(a,b,c)&amp;lt;/code&amp;gt;. On your influence diagram the object would have a rounded rectangle and thus would not communicate that the result is something that can be called. When you change its class to be a [[Callable]], you can then invoke the call using the syntax &amp;lt;code&amp;gt;X(a,b,c)&amp;lt;/code&amp;gt; and the shape of the node changes to something that resembles a function shape, thus communicating that this holds something that is callable.&lt;br /&gt;
&lt;br /&gt;
To create a callable, first create a [[Variable]] node, then use the [[Class]] dropdown from the [[Object window]] or [[Attribute pane]] to change the class to ''Callable''.&lt;br /&gt;
&lt;br /&gt;
=== Struct ===&lt;br /&gt;
A [[Struct]] defines a new atomic, immutable data type. For use when you need to bundle multiple heterogeneous items and don't want their dimensionalities to interact. Array abstract treats an instance of a Struct as a single cell (an atom).&lt;br /&gt;
&lt;br /&gt;
=== Expression and Lazy qualifiers ===&lt;br /&gt;
An expression passed to a function parameter declared with the qualifier as &amp;lt;code&amp;gt;[[Function_parameter_qualifiers#Expression|Expression]]&amp;lt;/code&amp;gt; can now include local variable identifiers. The local variables are captured (similar to how they would be captured by a [[Local function]]).&lt;br /&gt;
&lt;br /&gt;
A new function parameter qualifier, [[Function_parameter_qualifiers#Lazy]], has been added, which does lazy evaluation of the expression passed to it. In the function Definition, you can use it as if it were a normal value parameter, but evaluation occurs when the value is used rather than when the function is called, and in the evaluation context (which includes the [[Evaluation modes|evaluation mode]]) where the value is used instead as in the context of the call.&lt;br /&gt;
&lt;br /&gt;
=== Excess parameter qualifier ===&lt;br /&gt;
A new function declaration allows a function to tolerate or capture excess named parameters in the call that are not declared as parameter names in the function's Parameters declaration. It can also be used in a [[Struct]] declaration.&lt;br /&gt;
&lt;br /&gt;
== Functions ==&lt;br /&gt;
=== ParseJSON ===&lt;br /&gt;
Changed to parse to [[Struct]]s, thus greatly simplifying and improving the convenience of using JSON in Analytica expressions. &lt;br /&gt;
&lt;br /&gt;
For parsing with a schema, a Struct's declaration serves as the schema, which is far easier and more familiar for an Analytica user than the former scheme for specifying a schema.&lt;br /&gt;
&lt;br /&gt;
[[MakeJSON]] is able to generate JSON from a Struct (or nested structs) as well, which is the most convenient representation for JSON representations.&lt;br /&gt;
&lt;br /&gt;
=== SpreadsheetOpen ===&lt;br /&gt;
Added a new «backend» parameter to [[SpreadsheetOpen]] with a new option of &amp;lt;code&amp;gt;'LibXl'&amp;lt;/code&amp;gt;, allowing you to read and manipulate a spreadsheet without having Excel installed. But unlike the Excel backend, the &amp;lt;b&amp;gt;LibXl&amp;lt;/b&amp;gt; option does not have a calculation engine (so can't recompute cell formulas after you change cells). This option is be better when you simply want to read (or write) data in a *.xlsx file format.&lt;br /&gt;
&lt;br /&gt;
== Example models and libraries ==&lt;br /&gt;
&lt;br /&gt;
* There is a new &amp;quot;Auto insurance claim risk analysis.ana&amp;quot; in the Example Models / Risk Analysis folder.&lt;br /&gt;
* The [[Mutables library]] has been updated. It provides a new [[Mutable]] [[Struct]] which is superior to the older representation, which displays the actual value in result table cells and is atomic. The legacy functions ([[MutableNew]], [[MutableSet]] and [[MutableGet]]) are still there for backward compatibility, but have been changed to just wrap the new Mutable.&lt;br /&gt;
&lt;br /&gt;
== Result tables and graphs ==&lt;br /&gt;
* A blank (none) entry was added to the [[XY_comparison#Use_comparison_index|comparison index pulldown]]. Use this to quickly unset the comparison index without having to re-enter the [[XY_comparison]] dialog. Also, the pulldown is now visible and enabled in browse mode.&lt;br /&gt;
* Comparison variables are no longer summed over slicer indexes that are set to '''Totals''' when the value for that variable does not include the slicer index. Note that this results in some changes to what is displayed in table body cells and in axis scaling on graphs.&lt;br /&gt;
&lt;br /&gt;
== Assista ==&lt;br /&gt;
&lt;br /&gt;
You can now copy-paste from Expression blocks in Assista's response using the little copy icon in the top-right corner of the expression block.&lt;br /&gt;
&lt;br /&gt;
== Experimental ==&lt;br /&gt;
* A way for an Analytica model running in desktop Analytica to [[MCP server in Analytica|act as a Model Context Protocol (MCP) server]] for use by Large Language Models (LLMs).&lt;br /&gt;
&lt;br /&gt;
== ADE ==&lt;br /&gt;
* Added a new example: &amp;lt;code&amp;gt;Mcp_server&amp;lt;/code&amp;gt;.  This is an MCP server that wraps ADE. Among other things, it can give AI agents like Claude Code the ability to build, explore and use Analytica models.&lt;/div&gt;</summary>
		<author><name>Mhenrion</name></author>
	</entry>
	<entry>
		<id>https://docs.analytica.com/index.php?title=What%27s_new_in_Analytica_7.0%3F&amp;diff=63732</id>
		<title>What's new in Analytica 7.0?</title>
		<link rel="alternate" type="text/html" href="https://docs.analytica.com/index.php?title=What%27s_new_in_Analytica_7.0%3F&amp;diff=63732"/>
		<updated>2026-02-11T22:27:54Z</updated>

		<summary type="html">&lt;p&gt;Mhenrion: /* Index label auto updates */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[category:What's new pages]]&lt;br /&gt;
[[category:Analytica releases]]&lt;br /&gt;
&lt;br /&gt;
[[Analytica 7.0]] will be the next major Analytica release and is currently in [[Beta Tester Page|beta testing]]. Go to [[Beta Tester Page]] to try it. The current official release is [[Analytica 6.6]]. &lt;br /&gt;
&lt;br /&gt;
==Highlights of Analytica 7.0==&lt;br /&gt;
&lt;br /&gt;
* '''[[#Python integration|Python integration]]:''' The major enhancement is integration with Python and hence the entire Python ecosystem of libraries. You can easily call functions from Python libraries, access Python variables, and even write Python code right inside Analytica variables and functions. So now you can mix and match Analytica and Python according to which language you think best for your modeling or coding needs.&lt;br /&gt;
*  '''[[#Index label auto updates|Index label auto updates]]:''' A common source of errors has been when you change a text label in an Index without remembering to change expressions that refer to that same text label. Changes to labels now update automatically in expressions in most cases.&lt;br /&gt;
*  The '''Analytica Enterprise'''' edition has been renamed the [[#Developer Edition (formerly known as Enterprise) |Developer edition]], which better reflects what it is.&lt;br /&gt;
* It introduces two new object Classes:  &lt;br /&gt;
** [[Struct]] lets you bundle disparate values, like text, numbeers, atoms and arrays, together in one object that does not array abstract -- similar to Records and Classes in other languages).  &lt;br /&gt;
** [[Callable]] is like a user-defined Function but it's Definition can be a [[handle]] to a Python class or a Python function. &lt;br /&gt;
* [[ParseJSON]] and [[MakeJSON]] now use Structs, which are much more convenient for representing the hierarchical structure of JSON.&lt;br /&gt;
* [[#SpreadsheetOpen|Read and write spreadsheets without Excel]]:  This is faster and more robust, and you don't need Excel installed.&lt;br /&gt;
&lt;br /&gt;
== [[Using Python from Analytica|Python integration]] ==&lt;br /&gt;
&lt;br /&gt;
You can now write Python code inside Analytica definitions! It's easy to call Python functions, with Analytica-style Intelligent Arrays!. So you can access the vast ecosystem of Python libraries (''modules'' in Python lingo). Among the gazillion possibilities are specialized libraries for data visualization, statistics, machine learning, and much more.&lt;br /&gt;
It means that you can mix and match Analytica and Python -- write Analytica code for what's easiest in Analytica and Python code for what's easiest in Python.  &lt;br /&gt;
&lt;br /&gt;
See: [[Using Python from Analytica]]&lt;br /&gt;
(In [[Analytica Developer]] edition or better). &lt;br /&gt;
&lt;br /&gt;
For the Analytica modeler, this puts a ton of resources at your fingertips. &lt;br /&gt;
&lt;br /&gt;
It's also pretty cool for the Python developer. Analytica is like a new interactive development environment with a lot of unique advantages, especially during interactive code development:&lt;br /&gt;
* Analytica's dependency maintenance can be really convenient during interactive development, creating automatic dependency maintenance between your Python functions, classes and variables that don't exist in Python.&lt;br /&gt;
* The visual influence diagram layout can be a super useful to way organize and visualize your code.&lt;br /&gt;
* It naturally encourages declarative code practices, which leads to better and more maintainable coding style.&lt;br /&gt;
* You get the benefits of Analytica's edit tables, plus for results, Analytica's multi-D result tables and one-click, no-code, graphing.&lt;br /&gt;
* It is easy to wrap existing Python models to get Monte Carlo, parametric analysis and sensitivity analysis with Analytica ease.&lt;br /&gt;
* Sometimes one or the other language is more convenient for a particular task. You can freely switch between whichever language feels better suited to the immediate task, and intermix languages easily.&lt;br /&gt;
&lt;br /&gt;
== Developer Edition (formerly known as Enterprise) ==&lt;br /&gt;
&lt;br /&gt;
Analytica's middle-tier edition formerly known as the ''Enterprise Edition'', it is now called the [[Analytica Developer|Analytica Developer edition]]. That name better reflects what it is--software for developers of decision applications.  If you're now a user of Analytica Enterprise you don't have to update your license or do anything special. The name will just change when you install Analytica 7.0.  In Analytica docs, when you select &amp;quot;7.0&amp;quot; on the release bar (at the top of pages that have release-contingent content), all the docs automatically use the new Analytica Developer edition name. &lt;br /&gt;
&lt;br /&gt;
== Analytica language extensions ==&lt;br /&gt;
&lt;br /&gt;
=== Index label auto updates ===&lt;br /&gt;
&lt;br /&gt;
When you change the identifier of a variable, Analytica automatically updates all Definitions to use the new name. But, when you change a text label in an Index, it previously cause cause errors in Definitions using that label. For example, if you have&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  Index Animal := ['Cat', 'Dog']&lt;br /&gt;
  Variable Sound := IF Animal = 'Cat' THEN 'Miaow' ELSE 'Woof'&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
If you change &amp;lt;code&amp;gt; 'Cat'&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;'Feline' &amp;lt;/code&amp;gt; in Index &amp;lt;code&amp;gt;Animal&amp;lt;/code&amp;gt;, the Definition of &amp;lt;code&amp;gt;Sound&amp;lt;/code&amp;gt; will now automatically update to&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
     IF Animal = 'Feline' THEN 'Miaow' ELSE 'Woof'&lt;br /&gt;
&amp;lt;/code&amp;gt;)&lt;br /&gt;
It does this wherever it sees &amp;lt;code&amp;gt;Animal=&amp;lt;label&amp;gt;&amp;lt;/code&amp;gt;).&lt;br /&gt;
If you use the label in another context where the index would notnormally appear, you should the new [[Index-label dot syntax]] (&amp;lt;code&amp;gt;Animal . 'Cat'&amp;lt;/code&amp;gt;) associates a text literal with its index to prevent it from getting out of sync, and to warn if it ever does. These [[Keeping text literals consistent with index labels| features]] help avoid common errors when updating text labels in Indexes.&lt;br /&gt;
&lt;br /&gt;
=== Callable ===&lt;br /&gt;
&lt;br /&gt;
The new object [[Class]] [[Callable]] is a variable-like object, meaning it has a [[Definition]] and a computed value, but can be used for convenience and documentation when the computed value itself is something that can be called, such as a [[Local function]] (aka ''lambda function''), a [[handle]] to an global function, a Python class or a Python function.&lt;br /&gt;
&lt;br /&gt;
If you &amp;quot;compute&amp;quot; the identity of a callable data item inside a normal [[Variable]] instance, &amp;lt;code&amp;gt;X&amp;lt;/code&amp;gt;, you could call it using the syntax &amp;lt;code&amp;gt;X-&amp;gt;(a,b,c)&amp;lt;/code&amp;gt;. On your influence diagram the object would have a rounded rectangle and thus would not communicate that the result is something that can be called. When you change its class to be a [[Callable]], you can then invoke the call using the syntax &amp;lt;code&amp;gt;X(a,b,c)&amp;lt;/code&amp;gt; and the shape of the node changes to something that resembles a function shape, thus communicating that this holds something that is callable.&lt;br /&gt;
&lt;br /&gt;
To create a callable, first create a [[Variable]] node, then use the [[Class]] dropdown from the [[Object window]] or [[Attribute pane]] to change the class to ''Callable''.&lt;br /&gt;
&lt;br /&gt;
=== Struct ===&lt;br /&gt;
A [[Struct]] defines a new atomic, immutable data type. For use when you need to bundle multiple heterogeneous items and don't want their dimensionalities to interact. Array abstract treats an instance of a Struct as a single cell (an atom).&lt;br /&gt;
&lt;br /&gt;
=== Expression and Lazy qualifiers ===&lt;br /&gt;
An expression passed to a function parameter declared with the qualifier as &amp;lt;code&amp;gt;[[Function_parameter_qualifiers#Expression|Expression]]&amp;lt;/code&amp;gt; can now include local variable identifiers. The local variables are captured (similar to how they would be captured by a [[Local function]]).&lt;br /&gt;
&lt;br /&gt;
A new function parameter qualifier, [[Function_parameter_qualifiers#Lazy]], has been added, which does lazy evaluation of the expression passed to it. In the function Definition, you can use it as if it were a normal value parameter, but evaluation occurs when the value is used rather than when the function is called, and in the evaluation context (which includes the [[Evaluation modes|evaluation mode]]) where the value is used instead as in the context of the call.&lt;br /&gt;
&lt;br /&gt;
=== Excess parameter qualifier ===&lt;br /&gt;
A new function declaration allows a function to tolerate or capture excess named parameters in the call that are not declared as parameter names in the function's Parameters declaration. It can also be used in a [[Struct]] declaration.&lt;br /&gt;
&lt;br /&gt;
== Functions ==&lt;br /&gt;
=== ParseJSON ===&lt;br /&gt;
Changed to parse to [[Struct]]s, thus greatly simplifying and improving the convenience of using JSON in Analytica expressions. &lt;br /&gt;
&lt;br /&gt;
For parsing with a schema, a Struct's declaration serves as the schema, which is far easier and more familiar for an Analytica user than the former scheme for specifying a schema.&lt;br /&gt;
&lt;br /&gt;
[[MakeJSON]] is able to generate JSON from a Struct (or nested structs) as well, which is the most convenient representation for JSON representations.&lt;br /&gt;
&lt;br /&gt;
=== SpreadsheetOpen ===&lt;br /&gt;
Added a new «backend» parameter to [[SpreadsheetOpen]] with a new option of &amp;lt;code&amp;gt;'LibXl'&amp;lt;/code&amp;gt;, allowing you to read and manipulate a spreadsheet without having Excel installed. But unlike the Excel backend, the &amp;lt;b&amp;gt;LibXl&amp;lt;/b&amp;gt; option does not have a calculation engine (so can't recompute cell formulas after you change cells). This option is be better when you simply want to read (or write) data in a *.xlsx file format.&lt;br /&gt;
&lt;br /&gt;
== Example models and libraries ==&lt;br /&gt;
&lt;br /&gt;
* There is a new &amp;quot;Auto insurance claim risk analysis.ana&amp;quot; in the Example Models / Risk Analysis folder.&lt;br /&gt;
* The [[Mutables library]] has been updated. It provides a new [[Mutable]] [[Struct]] which is superior to the older representation, which displays the actual value in result table cells and is atomic. The legacy functions ([[MutableNew]], [[MutableSet]] and [[MutableGet]]) are still there for backward compatibility, but have been changed to just wrap the new Mutable.&lt;br /&gt;
&lt;br /&gt;
== Result tables and graphs ==&lt;br /&gt;
* A blank (none) entry was added to the [[XY_comparison#Use_comparison_index|comparison index pulldown]]. Use this to quickly unset the comparison index without having to re-enter the [[XY_comparison]] dialog. Also, the pulldown is now visible and enabled in browse mode.&lt;br /&gt;
* Comparison variables are no longer summed over slicer indexes that are set to '''Totals''' when the value for that variable does not include the slicer index. Note that this results in some changes to what is displayed in table body cells and in axis scaling on graphs.&lt;br /&gt;
&lt;br /&gt;
== Assista ==&lt;br /&gt;
&lt;br /&gt;
You can now copy-paste from Expression blocks in Assista's response using the little copy icon in the top-right corner of the expression block.&lt;br /&gt;
&lt;br /&gt;
== Experimental ==&lt;br /&gt;
* A way for an Analytica model running in desktop Analytica to [[MCP server in Analytica|act as a Model Context Protocol (MCP) server]] for use by Large Language Models (LLMs).&lt;br /&gt;
&lt;br /&gt;
== ADE ==&lt;br /&gt;
* Added a new example: &amp;lt;code&amp;gt;Mcp_server&amp;lt;/code&amp;gt;.  This is an MCP server that wraps ADE. Among other things, it can give AI agents like Claude Code the ability to build, explore and use Analytica models.&lt;/div&gt;</summary>
		<author><name>Mhenrion</name></author>
	</entry>
	<entry>
		<id>https://docs.analytica.com/index.php?title=What%27s_new_in_Analytica_7.0%3F&amp;diff=63731</id>
		<title>What's new in Analytica 7.0?</title>
		<link rel="alternate" type="text/html" href="https://docs.analytica.com/index.php?title=What%27s_new_in_Analytica_7.0%3F&amp;diff=63731"/>
		<updated>2026-02-11T22:27:33Z</updated>

		<summary type="html">&lt;p&gt;Mhenrion: /* Index label auto updates */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[category:What's new pages]]&lt;br /&gt;
[[category:Analytica releases]]&lt;br /&gt;
&lt;br /&gt;
[[Analytica 7.0]] will be the next major Analytica release and is currently in [[Beta Tester Page|beta testing]]. Go to [[Beta Tester Page]] to try it. The current official release is [[Analytica 6.6]]. &lt;br /&gt;
&lt;br /&gt;
==Highlights of Analytica 7.0==&lt;br /&gt;
&lt;br /&gt;
* '''[[#Python integration|Python integration]]:''' The major enhancement is integration with Python and hence the entire Python ecosystem of libraries. You can easily call functions from Python libraries, access Python variables, and even write Python code right inside Analytica variables and functions. So now you can mix and match Analytica and Python according to which language you think best for your modeling or coding needs.&lt;br /&gt;
*  '''[[#Index label auto updates|Index label auto updates]]:''' A common source of errors has been when you change a text label in an Index without remembering to change expressions that refer to that same text label. Changes to labels now update automatically in expressions in most cases.&lt;br /&gt;
*  The '''Analytica Enterprise'''' edition has been renamed the [[#Developer Edition (formerly known as Enterprise) |Developer edition]], which better reflects what it is.&lt;br /&gt;
* It introduces two new object Classes:  &lt;br /&gt;
** [[Struct]] lets you bundle disparate values, like text, numbeers, atoms and arrays, together in one object that does not array abstract -- similar to Records and Classes in other languages).  &lt;br /&gt;
** [[Callable]] is like a user-defined Function but it's Definition can be a [[handle]] to a Python class or a Python function. &lt;br /&gt;
* [[ParseJSON]] and [[MakeJSON]] now use Structs, which are much more convenient for representing the hierarchical structure of JSON.&lt;br /&gt;
* [[#SpreadsheetOpen|Read and write spreadsheets without Excel]]:  This is faster and more robust, and you don't need Excel installed.&lt;br /&gt;
&lt;br /&gt;
== [[Using Python from Analytica|Python integration]] ==&lt;br /&gt;
&lt;br /&gt;
You can now write Python code inside Analytica definitions! It's easy to call Python functions, with Analytica-style Intelligent Arrays!. So you can access the vast ecosystem of Python libraries (''modules'' in Python lingo). Among the gazillion possibilities are specialized libraries for data visualization, statistics, machine learning, and much more.&lt;br /&gt;
It means that you can mix and match Analytica and Python -- write Analytica code for what's easiest in Analytica and Python code for what's easiest in Python.  &lt;br /&gt;
&lt;br /&gt;
See: [[Using Python from Analytica]]&lt;br /&gt;
(In [[Analytica Developer]] edition or better). &lt;br /&gt;
&lt;br /&gt;
For the Analytica modeler, this puts a ton of resources at your fingertips. &lt;br /&gt;
&lt;br /&gt;
It's also pretty cool for the Python developer. Analytica is like a new interactive development environment with a lot of unique advantages, especially during interactive code development:&lt;br /&gt;
* Analytica's dependency maintenance can be really convenient during interactive development, creating automatic dependency maintenance between your Python functions, classes and variables that don't exist in Python.&lt;br /&gt;
* The visual influence diagram layout can be a super useful to way organize and visualize your code.&lt;br /&gt;
* It naturally encourages declarative code practices, which leads to better and more maintainable coding style.&lt;br /&gt;
* You get the benefits of Analytica's edit tables, plus for results, Analytica's multi-D result tables and one-click, no-code, graphing.&lt;br /&gt;
* It is easy to wrap existing Python models to get Monte Carlo, parametric analysis and sensitivity analysis with Analytica ease.&lt;br /&gt;
* Sometimes one or the other language is more convenient for a particular task. You can freely switch between whichever language feels better suited to the immediate task, and intermix languages easily.&lt;br /&gt;
&lt;br /&gt;
== Developer Edition (formerly known as Enterprise) ==&lt;br /&gt;
&lt;br /&gt;
Analytica's middle-tier edition formerly known as the ''Enterprise Edition'', it is now called the [[Analytica Developer|Analytica Developer edition]]. That name better reflects what it is--software for developers of decision applications.  If you're now a user of Analytica Enterprise you don't have to update your license or do anything special. The name will just change when you install Analytica 7.0.  In Analytica docs, when you select &amp;quot;7.0&amp;quot; on the release bar (at the top of pages that have release-contingent content), all the docs automatically use the new Analytica Developer edition name. &lt;br /&gt;
&lt;br /&gt;
== Analytica language extensions ==&lt;br /&gt;
&lt;br /&gt;
=== Index label auto updates ===&lt;br /&gt;
&lt;br /&gt;
=== Index label auto updates ===&lt;br /&gt;
&lt;br /&gt;
When you change the identifier of a variable, Analytica automatically updates all Definitions to use the new name. But, when you change a text label in an Index, it previously cause cause errors in Definitions using that label. For example, if you have&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  Index Animal := ['Cat', 'Dog']&lt;br /&gt;
  Variable Sound := IF Animal = 'Cat' THEN 'Miaow' ELSE 'Woof'&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
If you change &amp;lt;code&amp;gt; 'Cat'&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;'Feline' &amp;lt;/code&amp;gt; in Index &amp;lt;code&amp;gt;Animal&amp;lt;/code&amp;gt;, the Definition of &amp;lt;code&amp;gt;Sound&amp;lt;/code&amp;gt; will now automatically update to&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
     IF Animal = 'Feline' THEN 'Miaow' ELSE 'Woof'&lt;br /&gt;
&amp;lt;/code&amp;gt;)&lt;br /&gt;
It does this wherever it sees &amp;lt;code&amp;gt;Animal=&amp;lt;label&amp;gt;&amp;lt;/code&amp;gt;).&lt;br /&gt;
If you use the label in another context where the index would notnormally appear, you should the new [[Index-label dot syntax]] (&amp;lt;code&amp;gt;Animal . 'Cat'&amp;lt;/code&amp;gt;) associates a text literal with its index to prevent it from getting out of sync, and to warn if it ever does. These [[Keeping text literals consistent with index labels| features]] help avoid common errors when updating text labels in Indexes.&lt;br /&gt;
&lt;br /&gt;
=== Callable ===&lt;br /&gt;
&lt;br /&gt;
The new object [[Class]] [[Callable]] is a variable-like object, meaning it has a [[Definition]] and a computed value, but can be used for convenience and documentation when the computed value itself is something that can be called, such as a [[Local function]] (aka ''lambda function''), a [[handle]] to an global function, a Python class or a Python function.&lt;br /&gt;
&lt;br /&gt;
If you &amp;quot;compute&amp;quot; the identity of a callable data item inside a normal [[Variable]] instance, &amp;lt;code&amp;gt;X&amp;lt;/code&amp;gt;, you could call it using the syntax &amp;lt;code&amp;gt;X-&amp;gt;(a,b,c)&amp;lt;/code&amp;gt;. On your influence diagram the object would have a rounded rectangle and thus would not communicate that the result is something that can be called. When you change its class to be a [[Callable]], you can then invoke the call using the syntax &amp;lt;code&amp;gt;X(a,b,c)&amp;lt;/code&amp;gt; and the shape of the node changes to something that resembles a function shape, thus communicating that this holds something that is callable.&lt;br /&gt;
&lt;br /&gt;
To create a callable, first create a [[Variable]] node, then use the [[Class]] dropdown from the [[Object window]] or [[Attribute pane]] to change the class to ''Callable''.&lt;br /&gt;
&lt;br /&gt;
=== Struct ===&lt;br /&gt;
A [[Struct]] defines a new atomic, immutable data type. For use when you need to bundle multiple heterogeneous items and don't want their dimensionalities to interact. Array abstract treats an instance of a Struct as a single cell (an atom).&lt;br /&gt;
&lt;br /&gt;
=== Expression and Lazy qualifiers ===&lt;br /&gt;
An expression passed to a function parameter declared with the qualifier as &amp;lt;code&amp;gt;[[Function_parameter_qualifiers#Expression|Expression]]&amp;lt;/code&amp;gt; can now include local variable identifiers. The local variables are captured (similar to how they would be captured by a [[Local function]]).&lt;br /&gt;
&lt;br /&gt;
A new function parameter qualifier, [[Function_parameter_qualifiers#Lazy]], has been added, which does lazy evaluation of the expression passed to it. In the function Definition, you can use it as if it were a normal value parameter, but evaluation occurs when the value is used rather than when the function is called, and in the evaluation context (which includes the [[Evaluation modes|evaluation mode]]) where the value is used instead as in the context of the call.&lt;br /&gt;
&lt;br /&gt;
=== Excess parameter qualifier ===&lt;br /&gt;
A new function declaration allows a function to tolerate or capture excess named parameters in the call that are not declared as parameter names in the function's Parameters declaration. It can also be used in a [[Struct]] declaration.&lt;br /&gt;
&lt;br /&gt;
== Functions ==&lt;br /&gt;
=== ParseJSON ===&lt;br /&gt;
Changed to parse to [[Struct]]s, thus greatly simplifying and improving the convenience of using JSON in Analytica expressions. &lt;br /&gt;
&lt;br /&gt;
For parsing with a schema, a Struct's declaration serves as the schema, which is far easier and more familiar for an Analytica user than the former scheme for specifying a schema.&lt;br /&gt;
&lt;br /&gt;
[[MakeJSON]] is able to generate JSON from a Struct (or nested structs) as well, which is the most convenient representation for JSON representations.&lt;br /&gt;
&lt;br /&gt;
=== SpreadsheetOpen ===&lt;br /&gt;
Added a new «backend» parameter to [[SpreadsheetOpen]] with a new option of &amp;lt;code&amp;gt;'LibXl'&amp;lt;/code&amp;gt;, allowing you to read and manipulate a spreadsheet without having Excel installed. But unlike the Excel backend, the &amp;lt;b&amp;gt;LibXl&amp;lt;/b&amp;gt; option does not have a calculation engine (so can't recompute cell formulas after you change cells). This option is be better when you simply want to read (or write) data in a *.xlsx file format.&lt;br /&gt;
&lt;br /&gt;
== Example models and libraries ==&lt;br /&gt;
&lt;br /&gt;
* There is a new &amp;quot;Auto insurance claim risk analysis.ana&amp;quot; in the Example Models / Risk Analysis folder.&lt;br /&gt;
* The [[Mutables library]] has been updated. It provides a new [[Mutable]] [[Struct]] which is superior to the older representation, which displays the actual value in result table cells and is atomic. The legacy functions ([[MutableNew]], [[MutableSet]] and [[MutableGet]]) are still there for backward compatibility, but have been changed to just wrap the new Mutable.&lt;br /&gt;
&lt;br /&gt;
== Result tables and graphs ==&lt;br /&gt;
* A blank (none) entry was added to the [[XY_comparison#Use_comparison_index|comparison index pulldown]]. Use this to quickly unset the comparison index without having to re-enter the [[XY_comparison]] dialog. Also, the pulldown is now visible and enabled in browse mode.&lt;br /&gt;
* Comparison variables are no longer summed over slicer indexes that are set to '''Totals''' when the value for that variable does not include the slicer index. Note that this results in some changes to what is displayed in table body cells and in axis scaling on graphs.&lt;br /&gt;
&lt;br /&gt;
== Assista ==&lt;br /&gt;
&lt;br /&gt;
You can now copy-paste from Expression blocks in Assista's response using the little copy icon in the top-right corner of the expression block.&lt;br /&gt;
&lt;br /&gt;
== Experimental ==&lt;br /&gt;
* A way for an Analytica model running in desktop Analytica to [[MCP server in Analytica|act as a Model Context Protocol (MCP) server]] for use by Large Language Models (LLMs).&lt;br /&gt;
&lt;br /&gt;
== ADE ==&lt;br /&gt;
* Added a new example: &amp;lt;code&amp;gt;Mcp_server&amp;lt;/code&amp;gt;.  This is an MCP server that wraps ADE. Among other things, it can give AI agents like Claude Code the ability to build, explore and use Analytica models.&lt;/div&gt;</summary>
		<author><name>Mhenrion</name></author>
	</entry>
	<entry>
		<id>https://docs.analytica.com/index.php?title=What%27s_new_in_Analytica_7.0%3F&amp;diff=63730</id>
		<title>What's new in Analytica 7.0?</title>
		<link rel="alternate" type="text/html" href="https://docs.analytica.com/index.php?title=What%27s_new_in_Analytica_7.0%3F&amp;diff=63730"/>
		<updated>2026-02-11T20:26:26Z</updated>

		<summary type="html">&lt;p&gt;Mhenrion: /* Highlights of Analytica 7.0 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[category:What's new pages]]&lt;br /&gt;
[[category:Analytica releases]]&lt;br /&gt;
&lt;br /&gt;
[[Analytica 7.0]] will be the next major Analytica release and is currently in [[Beta Tester Page|beta testing]]. Go to [[Beta Tester Page]] to try it. The current official release is [[Analytica 6.6]]. &lt;br /&gt;
&lt;br /&gt;
==Highlights of Analytica 7.0==&lt;br /&gt;
&lt;br /&gt;
* '''[[#Python integration|Python integration]]:''' The major enhancement is integration with Python and hence the entire Python ecosystem of libraries. You can easily call functions from Python libraries, access Python variables, and even write Python code right inside Analytica variables and functions. So now you can mix and match Analytica and Python according to which language you think best for your modeling or coding needs.&lt;br /&gt;
*  '''[[#Index label auto updates|Index label auto updates]]:''' A common source of errors has been when you change a text label in an Index without remembering to change expressions that refer to that same text label. Changes to labels now update automatically in expressions in most cases.&lt;br /&gt;
*  The '''Analytica Enterprise'''' edition has been renamed the [[#Developer Edition (formerly known as Enterprise) |Developer edition]], which better reflects what it is.&lt;br /&gt;
* It introduces two new object Classes:  &lt;br /&gt;
** [[Struct]] lets you bundle disparate values, like text, numbeers, atoms and arrays, together in one object that does not array abstract -- similar to Records and Classes in other languages).  &lt;br /&gt;
** [[Callable]] is like a user-defined Function but it's Definition can be a [[handle]] to a Python class or a Python function. &lt;br /&gt;
* [[ParseJSON]] and [[MakeJSON]] now use Structs, which are much more convenient for representing the hierarchical structure of JSON.&lt;br /&gt;
* [[#SpreadsheetOpen|Read and write spreadsheets without Excel]]:  This is faster and more robust, and you don't need Excel installed.&lt;br /&gt;
&lt;br /&gt;
== [[Using Python from Analytica|Python integration]] ==&lt;br /&gt;
&lt;br /&gt;
You can now write Python code inside Analytica definitions! It's easy to call Python functions, with Analytica-style Intelligent Arrays!. So you can access the vast ecosystem of Python libraries (''modules'' in Python lingo). Among the gazillion possibilities are specialized libraries for data visualization, statistics, machine learning, and much more.&lt;br /&gt;
It means that you can mix and match Analytica and Python -- write Analytica code for what's easiest in Analytica and Python code for what's easiest in Python.  &lt;br /&gt;
&lt;br /&gt;
See: [[Using Python from Analytica]]&lt;br /&gt;
(In [[Analytica Developer]] edition or better). &lt;br /&gt;
&lt;br /&gt;
For the Analytica modeler, this puts a ton of resources at your fingertips. &lt;br /&gt;
&lt;br /&gt;
It's also pretty cool for the Python developer. Analytica is like a new interactive development environment with a lot of unique advantages, especially during interactive code development:&lt;br /&gt;
* Analytica's dependency maintenance can be really convenient during interactive development, creating automatic dependency maintenance between your Python functions, classes and variables that don't exist in Python.&lt;br /&gt;
* The visual influence diagram layout can be a super useful to way organize and visualize your code.&lt;br /&gt;
* It naturally encourages declarative code practices, which leads to better and more maintainable coding style.&lt;br /&gt;
* You get the benefits of Analytica's edit tables, plus for results, Analytica's multi-D result tables and one-click, no-code, graphing.&lt;br /&gt;
* It is easy to wrap existing Python models to get Monte Carlo, parametric analysis and sensitivity analysis with Analytica ease.&lt;br /&gt;
* Sometimes one or the other language is more convenient for a particular task. You can freely switch between whichever language feels better suited to the immediate task, and intermix languages easily.&lt;br /&gt;
&lt;br /&gt;
== Developer Edition (formerly known as Enterprise) ==&lt;br /&gt;
&lt;br /&gt;
Analytica's middle-tier edition formerly known as the ''Enterprise Edition'', it is now called the [[Analytica Developer|Analytica Developer edition]]. That name better reflects what it is--software for developers of decision applications.  If you're now a user of Analytica Enterprise you don't have to update your license or do anything special. The name will just change when you install Analytica 7.0.  In Analytica docs, when you select &amp;quot;7.0&amp;quot; on the release bar (at the top of pages that have release-contingent content), all the docs automatically use the new Analytica Developer edition name. &lt;br /&gt;
&lt;br /&gt;
== Analytica language extensions ==&lt;br /&gt;
&lt;br /&gt;
=== Index label auto updates ===&lt;br /&gt;
&lt;br /&gt;
When you change a text label in an Index, it can update code to use the new text label. Iit automatically updates text literals in other expressions that compare to or subscript on an index. The new [[Index-label dot syntax]] ( &amp;lt;code&amp;gt;I . &amp;quot;label&amp;quot;&amp;lt;/code&amp;gt;) associates a text literal with its index to prevent it from getting out of sync, and to warn if it ever does. These [[Keeping text literals consistent with index labels| features]] help avoid common errors when updating text labels in Indexes. &lt;br /&gt;
&lt;br /&gt;
=== Callable ===&lt;br /&gt;
&lt;br /&gt;
The new object [[Class]] [[Callable]] is a variable-like object, meaning it has a [[Definition]] and a computed value, but can be used for convenience and documentation when the computed value itself is something that can be called, such as a [[Local function]] (aka ''lambda function''), a [[handle]] to an global function, a Python class or a Python function.&lt;br /&gt;
&lt;br /&gt;
If you &amp;quot;compute&amp;quot; the identity of a callable data item inside a normal [[Variable]] instance, &amp;lt;code&amp;gt;X&amp;lt;/code&amp;gt;, you could call it using the syntax &amp;lt;code&amp;gt;X-&amp;gt;(a,b,c)&amp;lt;/code&amp;gt;. On your influence diagram the object would have a rounded rectangle and thus would not communicate that the result is something that can be called. When you change its class to be a [[Callable]], you can then invoke the call using the syntax &amp;lt;code&amp;gt;X(a,b,c)&amp;lt;/code&amp;gt; and the shape of the node changes to something that resembles a function shape, thus communicating that this holds something that is callable.&lt;br /&gt;
&lt;br /&gt;
To create a callable, first create a [[Variable]] node, then use the [[Class]] dropdown from the [[Object window]] or [[Attribute pane]] to change the class to ''Callable''.&lt;br /&gt;
&lt;br /&gt;
=== Struct ===&lt;br /&gt;
A [[Struct]] defines a new atomic, immutable data type. For use when you need to bundle multiple heterogeneous items and don't want their dimensionalities to interact. Array abstract treats an instance of a Struct as a single cell (an atom).&lt;br /&gt;
&lt;br /&gt;
=== Expression and Lazy qualifiers ===&lt;br /&gt;
An expression passed to a function parameter declared with the qualifier as &amp;lt;code&amp;gt;[[Function_parameter_qualifiers#Expression|Expression]]&amp;lt;/code&amp;gt; can now include local variable identifiers. The local variables are captured (similar to how they would be captured by a [[Local function]]).&lt;br /&gt;
&lt;br /&gt;
A new function parameter qualifier, [[Function_parameter_qualifiers#Lazy]], has been added, which does lazy evaluation of the expression passed to it. In the function Definition, you can use it as if it were a normal value parameter, but evaluation occurs when the value is used rather than when the function is called, and in the evaluation context (which includes the [[Evaluation modes|evaluation mode]]) where the value is used instead as in the context of the call.&lt;br /&gt;
&lt;br /&gt;
=== Excess parameter qualifier ===&lt;br /&gt;
A new function declaration allows a function to tolerate or capture excess named parameters in the call that are not declared as parameter names in the function's Parameters declaration. It can also be used in a [[Struct]] declaration.&lt;br /&gt;
&lt;br /&gt;
== Functions ==&lt;br /&gt;
=== ParseJSON ===&lt;br /&gt;
Changed to parse to [[Struct]]s, thus greatly simplifying and improving the convenience of using JSON in Analytica expressions. &lt;br /&gt;
&lt;br /&gt;
For parsing with a schema, a Struct's declaration serves as the schema, which is far easier and more familiar for an Analytica user than the former scheme for specifying a schema.&lt;br /&gt;
&lt;br /&gt;
[[MakeJSON]] is able to generate JSON from a Struct (or nested structs) as well, which is the most convenient representation for JSON representations.&lt;br /&gt;
&lt;br /&gt;
=== SpreadsheetOpen ===&lt;br /&gt;
Added a new «backend» parameter to [[SpreadsheetOpen]] with a new option of &amp;lt;code&amp;gt;'LibXl'&amp;lt;/code&amp;gt;, allowing you to read and manipulate a spreadsheet without having Excel installed. But unlike the Excel backend, the &amp;lt;b&amp;gt;LibXl&amp;lt;/b&amp;gt; option does not have a calculation engine (so can't recompute cell formulas after you change cells). This option is be better when you simply want to read (or write) data in a *.xlsx file format.&lt;br /&gt;
&lt;br /&gt;
== Example models and libraries ==&lt;br /&gt;
&lt;br /&gt;
* There is a new &amp;quot;Auto insurance claim risk analysis.ana&amp;quot; in the Example Models / Risk Analysis folder.&lt;br /&gt;
* The [[Mutables library]] has been updated. It provides a new [[Mutable]] [[Struct]] which is superior to the older representation, which displays the actual value in result table cells and is atomic. The legacy functions ([[MutableNew]], [[MutableSet]] and [[MutableGet]]) are still there for backward compatibility, but have been changed to just wrap the new Mutable.&lt;br /&gt;
&lt;br /&gt;
== Result tables and graphs ==&lt;br /&gt;
* A blank (none) entry was added to the [[XY_comparison#Use_comparison_index|comparison index pulldown]]. Use this to quickly unset the comparison index without having to re-enter the [[XY_comparison]] dialog. Also, the pulldown is now visible and enabled in browse mode.&lt;br /&gt;
* Comparison variables are no longer summed over slicer indexes that are set to '''Totals''' when the value for that variable does not include the slicer index. Note that this results in some changes to what is displayed in table body cells and in axis scaling on graphs.&lt;br /&gt;
&lt;br /&gt;
== Assista ==&lt;br /&gt;
&lt;br /&gt;
You can now copy-paste from Expression blocks in Assista's response using the little copy icon in the top-right corner of the expression block.&lt;br /&gt;
&lt;br /&gt;
== Experimental ==&lt;br /&gt;
* A way for an Analytica model running in desktop Analytica to [[MCP server in Analytica|act as a Model Context Protocol (MCP) server]] for use by Large Language Models (LLMs).&lt;br /&gt;
&lt;br /&gt;
== ADE ==&lt;br /&gt;
* Added a new example: &amp;lt;code&amp;gt;Mcp_server&amp;lt;/code&amp;gt;.  This is an MCP server that wraps ADE. Among other things, it can give AI agents like Claude Code the ability to build, explore and use Analytica models.&lt;/div&gt;</summary>
		<author><name>Mhenrion</name></author>
	</entry>
	<entry>
		<id>https://docs.analytica.com/index.php?title=What%27s_new_in_Analytica_7.0%3F&amp;diff=63729</id>
		<title>What's new in Analytica 7.0?</title>
		<link rel="alternate" type="text/html" href="https://docs.analytica.com/index.php?title=What%27s_new_in_Analytica_7.0%3F&amp;diff=63729"/>
		<updated>2026-02-11T20:25:55Z</updated>

		<summary type="html">&lt;p&gt;Mhenrion: /* Highlights of Analytica 7.0 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[category:What's new pages]]&lt;br /&gt;
[[category:Analytica releases]]&lt;br /&gt;
&lt;br /&gt;
[[Analytica 7.0]] will be the next major Analytica release and is currently in [[Beta Tester Page|beta testing]]. Go to [[Beta Tester Page]] to try it. The current official release is [[Analytica 6.6]]. &lt;br /&gt;
&lt;br /&gt;
==Highlights of Analytica 7.0==&lt;br /&gt;
&lt;br /&gt;
* '''[[#Python integration|Python integration]]:''' The major enhancement is integration with Python and hence the entire Python ecosystem of libraries. You can easily call functions from Python libraries, access Python variables, and even write Python code right inside Analytica variables and functions. So now you can mix and match Analytica and Python according to which language you think best for your modeling or coding needs.&lt;br /&gt;
*  '''[[#Index label auto updates|Index label auto updates:''' A common source of errors has been when you change a text label in an Index without remembering to change expressions that refer to that same text label. Changes to labels now update automatically in expressions in most cases.&lt;br /&gt;
*  The '''Analytica Enterprise'''' edition has been renamed the [[#Developer Edition (formerly known as Enterprise) |Developer edition]], which better reflects what it is.&lt;br /&gt;
* It introduces two new object Classes:  &lt;br /&gt;
** [[Struct]] lets you bundle disparate values, like text, numbeers, atoms and arrays, together in one object that does not array abstract -- similar to Records and Classes in other languages).  &lt;br /&gt;
** [[Callable]] is like a user-defined Function but it's Definition can be a [[handle]] to a Python class or a Python function. &lt;br /&gt;
* [[ParseJSON]] and [[MakeJSON]] now use Structs, which are much more convenient for representing the hierarchical structure of JSON.&lt;br /&gt;
* [[#SpreadsheetOpen|Read and write spreadsheets without Excel]]:  This is faster and more robust, and you don't need Excel installed.&lt;br /&gt;
&lt;br /&gt;
== [[Using Python from Analytica|Python integration]] ==&lt;br /&gt;
&lt;br /&gt;
You can now write Python code inside Analytica definitions! It's easy to call Python functions, with Analytica-style Intelligent Arrays!. So you can access the vast ecosystem of Python libraries (''modules'' in Python lingo). Among the gazillion possibilities are specialized libraries for data visualization, statistics, machine learning, and much more.&lt;br /&gt;
It means that you can mix and match Analytica and Python -- write Analytica code for what's easiest in Analytica and Python code for what's easiest in Python.  &lt;br /&gt;
&lt;br /&gt;
See: [[Using Python from Analytica]]&lt;br /&gt;
(In [[Analytica Developer]] edition or better). &lt;br /&gt;
&lt;br /&gt;
For the Analytica modeler, this puts a ton of resources at your fingertips. &lt;br /&gt;
&lt;br /&gt;
It's also pretty cool for the Python developer. Analytica is like a new interactive development environment with a lot of unique advantages, especially during interactive code development:&lt;br /&gt;
* Analytica's dependency maintenance can be really convenient during interactive development, creating automatic dependency maintenance between your Python functions, classes and variables that don't exist in Python.&lt;br /&gt;
* The visual influence diagram layout can be a super useful to way organize and visualize your code.&lt;br /&gt;
* It naturally encourages declarative code practices, which leads to better and more maintainable coding style.&lt;br /&gt;
* You get the benefits of Analytica's edit tables, plus for results, Analytica's multi-D result tables and one-click, no-code, graphing.&lt;br /&gt;
* It is easy to wrap existing Python models to get Monte Carlo, parametric analysis and sensitivity analysis with Analytica ease.&lt;br /&gt;
* Sometimes one or the other language is more convenient for a particular task. You can freely switch between whichever language feels better suited to the immediate task, and intermix languages easily.&lt;br /&gt;
&lt;br /&gt;
== Developer Edition (formerly known as Enterprise) ==&lt;br /&gt;
&lt;br /&gt;
Analytica's middle-tier edition formerly known as the ''Enterprise Edition'', it is now called the [[Analytica Developer|Analytica Developer edition]]. That name better reflects what it is--software for developers of decision applications.  If you're now a user of Analytica Enterprise you don't have to update your license or do anything special. The name will just change when you install Analytica 7.0.  In Analytica docs, when you select &amp;quot;7.0&amp;quot; on the release bar (at the top of pages that have release-contingent content), all the docs automatically use the new Analytica Developer edition name. &lt;br /&gt;
&lt;br /&gt;
== Analytica language extensions ==&lt;br /&gt;
&lt;br /&gt;
=== Index label auto updates ===&lt;br /&gt;
&lt;br /&gt;
When you change a text label in an Index, it can update code to use the new text label. Iit automatically updates text literals in other expressions that compare to or subscript on an index. The new [[Index-label dot syntax]] ( &amp;lt;code&amp;gt;I . &amp;quot;label&amp;quot;&amp;lt;/code&amp;gt;) associates a text literal with its index to prevent it from getting out of sync, and to warn if it ever does. These [[Keeping text literals consistent with index labels| features]] help avoid common errors when updating text labels in Indexes. &lt;br /&gt;
&lt;br /&gt;
=== Callable ===&lt;br /&gt;
&lt;br /&gt;
The new object [[Class]] [[Callable]] is a variable-like object, meaning it has a [[Definition]] and a computed value, but can be used for convenience and documentation when the computed value itself is something that can be called, such as a [[Local function]] (aka ''lambda function''), a [[handle]] to an global function, a Python class or a Python function.&lt;br /&gt;
&lt;br /&gt;
If you &amp;quot;compute&amp;quot; the identity of a callable data item inside a normal [[Variable]] instance, &amp;lt;code&amp;gt;X&amp;lt;/code&amp;gt;, you could call it using the syntax &amp;lt;code&amp;gt;X-&amp;gt;(a,b,c)&amp;lt;/code&amp;gt;. On your influence diagram the object would have a rounded rectangle and thus would not communicate that the result is something that can be called. When you change its class to be a [[Callable]], you can then invoke the call using the syntax &amp;lt;code&amp;gt;X(a,b,c)&amp;lt;/code&amp;gt; and the shape of the node changes to something that resembles a function shape, thus communicating that this holds something that is callable.&lt;br /&gt;
&lt;br /&gt;
To create a callable, first create a [[Variable]] node, then use the [[Class]] dropdown from the [[Object window]] or [[Attribute pane]] to change the class to ''Callable''.&lt;br /&gt;
&lt;br /&gt;
=== Struct ===&lt;br /&gt;
A [[Struct]] defines a new atomic, immutable data type. For use when you need to bundle multiple heterogeneous items and don't want their dimensionalities to interact. Array abstract treats an instance of a Struct as a single cell (an atom).&lt;br /&gt;
&lt;br /&gt;
=== Expression and Lazy qualifiers ===&lt;br /&gt;
An expression passed to a function parameter declared with the qualifier as &amp;lt;code&amp;gt;[[Function_parameter_qualifiers#Expression|Expression]]&amp;lt;/code&amp;gt; can now include local variable identifiers. The local variables are captured (similar to how they would be captured by a [[Local function]]).&lt;br /&gt;
&lt;br /&gt;
A new function parameter qualifier, [[Function_parameter_qualifiers#Lazy]], has been added, which does lazy evaluation of the expression passed to it. In the function Definition, you can use it as if it were a normal value parameter, but evaluation occurs when the value is used rather than when the function is called, and in the evaluation context (which includes the [[Evaluation modes|evaluation mode]]) where the value is used instead as in the context of the call.&lt;br /&gt;
&lt;br /&gt;
=== Excess parameter qualifier ===&lt;br /&gt;
A new function declaration allows a function to tolerate or capture excess named parameters in the call that are not declared as parameter names in the function's Parameters declaration. It can also be used in a [[Struct]] declaration.&lt;br /&gt;
&lt;br /&gt;
== Functions ==&lt;br /&gt;
=== ParseJSON ===&lt;br /&gt;
Changed to parse to [[Struct]]s, thus greatly simplifying and improving the convenience of using JSON in Analytica expressions. &lt;br /&gt;
&lt;br /&gt;
For parsing with a schema, a Struct's declaration serves as the schema, which is far easier and more familiar for an Analytica user than the former scheme for specifying a schema.&lt;br /&gt;
&lt;br /&gt;
[[MakeJSON]] is able to generate JSON from a Struct (or nested structs) as well, which is the most convenient representation for JSON representations.&lt;br /&gt;
&lt;br /&gt;
=== SpreadsheetOpen ===&lt;br /&gt;
Added a new «backend» parameter to [[SpreadsheetOpen]] with a new option of &amp;lt;code&amp;gt;'LibXl'&amp;lt;/code&amp;gt;, allowing you to read and manipulate a spreadsheet without having Excel installed. But unlike the Excel backend, the &amp;lt;b&amp;gt;LibXl&amp;lt;/b&amp;gt; option does not have a calculation engine (so can't recompute cell formulas after you change cells). This option is be better when you simply want to read (or write) data in a *.xlsx file format.&lt;br /&gt;
&lt;br /&gt;
== Example models and libraries ==&lt;br /&gt;
&lt;br /&gt;
* There is a new &amp;quot;Auto insurance claim risk analysis.ana&amp;quot; in the Example Models / Risk Analysis folder.&lt;br /&gt;
* The [[Mutables library]] has been updated. It provides a new [[Mutable]] [[Struct]] which is superior to the older representation, which displays the actual value in result table cells and is atomic. The legacy functions ([[MutableNew]], [[MutableSet]] and [[MutableGet]]) are still there for backward compatibility, but have been changed to just wrap the new Mutable.&lt;br /&gt;
&lt;br /&gt;
== Result tables and graphs ==&lt;br /&gt;
* A blank (none) entry was added to the [[XY_comparison#Use_comparison_index|comparison index pulldown]]. Use this to quickly unset the comparison index without having to re-enter the [[XY_comparison]] dialog. Also, the pulldown is now visible and enabled in browse mode.&lt;br /&gt;
* Comparison variables are no longer summed over slicer indexes that are set to '''Totals''' when the value for that variable does not include the slicer index. Note that this results in some changes to what is displayed in table body cells and in axis scaling on graphs.&lt;br /&gt;
&lt;br /&gt;
== Assista ==&lt;br /&gt;
&lt;br /&gt;
You can now copy-paste from Expression blocks in Assista's response using the little copy icon in the top-right corner of the expression block.&lt;br /&gt;
&lt;br /&gt;
== Experimental ==&lt;br /&gt;
* A way for an Analytica model running in desktop Analytica to [[MCP server in Analytica|act as a Model Context Protocol (MCP) server]] for use by Large Language Models (LLMs).&lt;br /&gt;
&lt;br /&gt;
== ADE ==&lt;br /&gt;
* Added a new example: &amp;lt;code&amp;gt;Mcp_server&amp;lt;/code&amp;gt;.  This is an MCP server that wraps ADE. Among other things, it can give AI agents like Claude Code the ability to build, explore and use Analytica models.&lt;/div&gt;</summary>
		<author><name>Mhenrion</name></author>
	</entry>
	<entry>
		<id>https://docs.analytica.com/index.php?title=Analytica_Enterprise&amp;diff=63693</id>
		<title>Analytica Enterprise</title>
		<link rel="alternate" type="text/html" href="https://docs.analytica.com/index.php?title=Analytica_Enterprise&amp;diff=63693"/>
		<updated>2026-01-28T01:09:54Z</updated>

		<summary type="html">&lt;p&gt;Mhenrion: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;  [[Category:Analytica User Guide]]&lt;br /&gt;
[[Category: Analytica Enterprise]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;breadcrumbs&amp;gt;Analytica User Guide &amp;gt;Working with Large Models &amp;gt; {{PAGENAME}}&amp;lt;/breadcrumbs&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
{{ReleaseBar}} &lt;br /&gt;
&lt;br /&gt;
The {{Analytica Enterprise}} edition {{Release|7.0||(formerly known as the Analytica Enterprise edition prior to [[Analytica 7.0]])}} offers all the functionality of Analytica Professional, plus your model can: &lt;br /&gt;
* read from and write to external data sources (e.g., [[Database access|databases]], [[ReadTextFile|text]], [[ParseCSV|csv]], [[ParseJSON|JSON]], {{Release|5.0||or binary data}} files, web pages and [[ReadFromUrl|web services]])&lt;br /&gt;
* run and communicate with other applications with [[COM Integration|COM]]&lt;br /&gt;
* use [[Analytica Enterprise#Huge Arrays|Huge Arrays]] (up to 100 million elements per Index dimension)&lt;br /&gt;
* apply the [[Performance Profiler library|Performance Profiler]] to see computational effort by variable&lt;br /&gt;
* create [[Obfuscated and Browse-Only Models|Browse-only models]]&lt;br /&gt;
* [[Obfuscated and Browse-Only Models|encrypt (obfuscate)]] sensitive and confidential data or algorithms.&lt;br /&gt;
&lt;br /&gt;
You need either {{Analytica Enterprise}} or [[Analytica_Optimizer_Guide|Analytica Optimizer]] to create very large models or to integrate Analytica with external data sources and databases. You can use [[Analytica Cloud Platform|ACP]] or the [[ADE_User_Guide|Analytica Decision Engine]] to run models created with {{Analytica Enterprise}} or Optimizer with these features. You can use any edition of Analytica to run a model that uses buttons, or was saved as browse-only with hidden definitions.&lt;br /&gt;
&lt;br /&gt;
You can order or upgrade to Analytica {{Developer}} [http://www.lumina.com/shoppingcart/productorder/ here].&lt;br /&gt;
&lt;br /&gt;
==Huge Arrays==&lt;br /&gt;
&lt;br /&gt;
Free Analytica and Analytica Professional are limited to Index sizes (and Sample sizes) of 32,000 elements. {{Analytica Enterprise}} and above ([[Analytica Optimizer Guide|Optimizer]], [[Analytica Cloud Platform|ACP]]. and [[ADE User Guide|ADE]]) can manage indexes and arrays of up to two billion elements in any dimension. The only practical limit on model sizes is the memory on your computer.  It also lets you read in large datasets from databases, using the ODBC functions.&lt;br /&gt;
Huge Arrays means they can also handle sample size for probabilistic simulation up to this size. You can set this in the [[Uncertainty Setup dialog]] from the [[Result menu]].&lt;br /&gt;
===Typescript Window===&lt;br /&gt;
&lt;br /&gt;
The [[Typescript]] window offers an old-fashioned command-line user interface, like the Windows CMD program or a Unix shell, showing a prompt — the title of the model or module — at the start of each line. You can type in a [[script]] command. It prints any results as text, and show another prompt. This window is occasionally useful for advanced users who wish to inspect internal details of a model. You can also use it to test out commands that you want to use in a [[Buttons#Script_Attribute|button script]].&lt;br /&gt;
&lt;br /&gt;
To open the [[Typescript]] window, press the '''F12''' key.&lt;br /&gt;
&lt;br /&gt;
:[[File:huge_arrays_1.png|400px]]&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
* [[Editions of Analytica]]&lt;br /&gt;
* [http://www.lumina.com/shoppingcart/productorder/ order Analytica {{Developer}}]&lt;br /&gt;
* [[Arrays and Indexes]]&lt;br /&gt;
* [[Working with Large Models]]&lt;br /&gt;
* [[Editions of Analytica]]&lt;br /&gt;
* [[Analytica Optimizer Guide]]&lt;br /&gt;
* [[ADE User Guide]]&lt;br /&gt;
* [[Typescript]]&lt;br /&gt;
* [[Analytica Script]]&lt;br /&gt;
* [[Scripting Guide]]&lt;br /&gt;
&amp;lt;footer&amp;gt;Performance Profiler library / {{PAGENAME}} / User-defined Functions and Libraries&amp;lt;/footer&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mhenrion</name></author>
	</entry>
	<entry>
		<id>https://docs.analytica.com/index.php?title=What%27s_new_in_Analytica_7.0%3F&amp;diff=63692</id>
		<title>What's new in Analytica 7.0?</title>
		<link rel="alternate" type="text/html" href="https://docs.analytica.com/index.php?title=What%27s_new_in_Analytica_7.0%3F&amp;diff=63692"/>
		<updated>2026-01-28T00:30:13Z</updated>

		<summary type="html">&lt;p&gt;Mhenrion: /* Experimental */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[category:What's new pages]]&lt;br /&gt;
[[category:Analytica releases]]&lt;br /&gt;
&lt;br /&gt;
[[Analytica 7.0]] will be the next major Analytica release and is currently in [[Beta Tester Page|beta testing]]. Go to [[Beta Tester Page]] to try it. The current official release is [[Analytica 6.6]]. &lt;br /&gt;
&lt;br /&gt;
==Highlights of Analytica 7.0==&lt;br /&gt;
&lt;br /&gt;
* '''[[#Python integration|Python integration]]:''' The major enhancement is integration with Python and hence the entire Python ecosystem of libraries. You can easily call functions from Python libraries, access Python variables, and even write Python code right inside Analytica variables and functions. So now you can mix and match Analytica and Python according to which language you think best for your modeling or coding needs.&lt;br /&gt;
*  '''Index label updating:''' A common source of errors has been when you change a text label in an Index without remembering to change expressions that refer to that same text label. [[# Index label auto updates|New features]] now automatically update these labels, and so eliminate most of those errors.&lt;br /&gt;
*  The '''Analytica Enterprise'''' edition has been renamed the [[#Developer Edition (formerly known as Enterprise) |Developer edition]], which better reflects what it is.&lt;br /&gt;
* It introduces two new object Classes:  &lt;br /&gt;
** [[Struct]] lets you bundle disparate values, like text, numbeers, atoms and arrays, together in one object that does not array abstract -- similar to Records and Classes in other languages).  &lt;br /&gt;
** [[Callable]] is like a user-defined Function but it's Definition can be a [[handle]] to a Python class or a Python function. &lt;br /&gt;
* [[ParseJSON]] and [[MakeJSON]] now use Structs, which are much more convenient for representing the hierarchical structure of JSON.&lt;br /&gt;
* [[#SpreadsheetOpen|Read and write spreadsheets without Excel]]:  This is faster and more robust, and you don't need Excel installed.&lt;br /&gt;
&lt;br /&gt;
== [[Using Python from Analytica|Python integration]] ==&lt;br /&gt;
&lt;br /&gt;
You can now write Python code inside Analytica definitions! It's easy to call Python functions, with Analytica-style Intelligent Arrays!. So you can access the vast ecosystem of Python libraries (''modules'' in Python lingo). Among the gazillion possibilities are specialized libraries for data visualization, statistics, machine learning, and much more.&lt;br /&gt;
It means that you can mix and match Analytica and Python -- write Analytica code for what's easiest in Analytica and Python code for what's easiest in Python.  &lt;br /&gt;
&lt;br /&gt;
See: [[Using Python from Analytica]]&lt;br /&gt;
(In [[Analytica Developer]] edition or better). &lt;br /&gt;
&lt;br /&gt;
For the Analytica modeler, this puts a ton of resources at your fingertips. &lt;br /&gt;
&lt;br /&gt;
It's also pretty cool for the Python developer. Analytica is like a new interactive development environment with a lot of unique advantages, especially during interactive code development:&lt;br /&gt;
* Analytica's dependency maintenance can be really convenient during interactive development, creating automatic dependency maintenance between your Python functions, classes and variables that don't exist in Python.&lt;br /&gt;
* The visual influence diagram layout can be a super useful to way organize and visualize your code.&lt;br /&gt;
* It naturally encourages declarative code practices, which leads to better and more maintainable coding style.&lt;br /&gt;
* You get the benefits of Analytica's edit tables, plus for results, Analytica's multi-D result tables and one-click, no-code, graphing.&lt;br /&gt;
* It is easy to wrap existing Python models to get Monte Carlo, parametric analysis and sensitivity analysis with Analytica ease.&lt;br /&gt;
* Sometimes one or the other language is more convenient for a particular task. You can freely switch between whichever language feels better suited to the immediate task, and intermix languages easily.&lt;br /&gt;
&lt;br /&gt;
== Developer Edition (formerly known as Enterprise) ==&lt;br /&gt;
&lt;br /&gt;
Analytica's middle-tier edition formerly known as the ''Enterprise Edition'', it is now called the [[Analytica Developer|Analytica Developer edition]]. That name better reflects what it is--software for developers of decision applications.  If you're now a user of Analytica Enterprise you don't have to update your license or do anything special. The name will just change when you install Analytica 7.0.  In Analytica docs, when you select &amp;quot;7.0&amp;quot; on the release bar (at the top of pages that have release-contingent content), all the docs automatically use the new Analytica Developer edition name. &lt;br /&gt;
&lt;br /&gt;
== Analytica language extensions ==&lt;br /&gt;
&lt;br /&gt;
=== Index label auto updates ===&lt;br /&gt;
&lt;br /&gt;
When you change a text label in an Index, it can update code to use the new text label. Iit automatically updates text literals in other expressions that compare to or subscript on an index. The new [[Index-label dot syntax]] ( &amp;lt;code&amp;gt;I . &amp;quot;label&amp;quot;&amp;lt;/code&amp;gt;) associates a text literal with its index to prevent it from getting out of sync, and to warn if it ever does. These [[Keeping text literals consistent with index labels| features]] help avoid common errors when updating text labels in Indexes. &lt;br /&gt;
&lt;br /&gt;
=== Callable ===&lt;br /&gt;
&lt;br /&gt;
The new object [[Class]] [[Callable]] is a variable-like object, meaning it has a [[Definition]] and a computed value, but can be used for convenience and documentation when the computed value itself is something that can be called, such as a [[Local function]] (aka ''lambda function''), a [[handle]] to an global function, a Python class or a Python function.&lt;br /&gt;
&lt;br /&gt;
If you &amp;quot;compute&amp;quot; the identity of a callable data item inside a normal [[Variable]] instance, &amp;lt;code&amp;gt;X&amp;lt;/code&amp;gt;, you could call it using the syntax &amp;lt;code&amp;gt;X-&amp;gt;(a,b,c)&amp;lt;/code&amp;gt;. On your influence diagram the object would have a rounded rectangle and thus would not communicate that the result is something that can be called. When you change its class to be a [[Callable]], you can then invoke the call using the syntax &amp;lt;code&amp;gt;X(a,b,c)&amp;lt;/code&amp;gt; and the shape of the node changes to something that resembles a function shape, thus communicating that this holds something that is callable.&lt;br /&gt;
&lt;br /&gt;
To create a callable, first create a [[Variable]] node, then use the [[Class]] dropdown from the [[Object window]] or [[Attribute pane]] to change the class to ''Callable''.&lt;br /&gt;
&lt;br /&gt;
=== Struct ===&lt;br /&gt;
A [[Struct]] defines a new atomic, immutable data type. For use when you need to bundle multiple heterogeneous items and don't want their dimensionalities to interact. Array abstract treats an instance of a Struct as a single cell (an atom).&lt;br /&gt;
&lt;br /&gt;
=== Expression and Lazy qualifiers ===&lt;br /&gt;
An expression passed to a function parameter declared with the qualifier as &amp;lt;code&amp;gt;[[Function_parameter_qualifiers#Expression|Expression]]&amp;lt;/code&amp;gt; can now include local variable identifiers. The local variables are captured (similar to how they would be captured by a [[Local function]]).&lt;br /&gt;
&lt;br /&gt;
A new function parameter qualifier, [[Function_parameter_qualifiers#Lazy]], has been added, which does lazy evaluation of the expression passed to it. In the function Definition, you can use it as if it were a normal value parameter, but evaluation occurs when the value is used rather than when the function is called, and in the evaluation context (which includes the [[Evaluation modes|evaluation mode]]) where the value is used instead as in the context of the call.&lt;br /&gt;
&lt;br /&gt;
=== Excess parameter qualifier ===&lt;br /&gt;
A new function declaration allows a function to tolerate or capture excess named parameters in the call that are not declared as parameter names in the function's Parameters declaration. It can also be used in a [[Struct]] declaration.&lt;br /&gt;
&lt;br /&gt;
== Functions ==&lt;br /&gt;
=== ParseJSON ===&lt;br /&gt;
Changed to parse to [[Struct]]s, thus greatly simplifying and improving the convenience of using JSON in Analytica expressions. &lt;br /&gt;
&lt;br /&gt;
For parsing with a schema, a Struct's declaration serves as the schema, which is far easier and more familiar for an Analytica user than the former scheme for specifying a schema.&lt;br /&gt;
&lt;br /&gt;
[[MakeJSON]] is able to generate JSON from a Struct (or nested structs) as well, which is the most convenient representation for JSON representations.&lt;br /&gt;
&lt;br /&gt;
=== SpreadsheetOpen ===&lt;br /&gt;
Added a new «backend» parameter to [[SpreadsheetOpen]] with a new option of &amp;lt;code&amp;gt;'LibXl'&amp;lt;/code&amp;gt;, allowing you to read and manipulate a spreadsheet without having Excel installed. But unlike the Excel backend, the &amp;lt;b&amp;gt;LibXl&amp;lt;/b&amp;gt; option does not have a calculation engine (so can't recompute cell formulas after you change cells). This option is be better when you simply want to read (or write) data in a *.xlsx file format.&lt;br /&gt;
&lt;br /&gt;
== Example models and libraries ==&lt;br /&gt;
&lt;br /&gt;
* There is a new &amp;quot;Auto insurance claim risk analysis.ana&amp;quot; in the Example Models / Risk Analysis folder.&lt;br /&gt;
* The [[Mutables library]] has been updated. It provides a new [[Mutable]] [[Struct]] which is superior to the older representation, which displays the actual value in result table cells and is atomic. The legacy functions ([[MutableNew]], [[MutableSet]] and [[MutableGet]]) are still there for backward compatibility, but have been changed to just wrap the new Mutable.&lt;br /&gt;
&lt;br /&gt;
== Result tables and graphs ==&lt;br /&gt;
* A blank (none) entry was added to the [[XY_comparison#Use_comparison_index|comparison index pulldown]]. Use this to quickly unset the comparison index without having to re-enter the [[XY_comparison]] dialog. Also, the pulldown is now visible and enabled in browse mode.&lt;br /&gt;
* Comparison variables are no longer summed over slicer indexes that are set to '''Totals''' when the value for that variable does not include the slicer index. Note that this results in some changes to what is displayed in table body cells and in axis scaling on graphs.&lt;br /&gt;
&lt;br /&gt;
== Assista ==&lt;br /&gt;
&lt;br /&gt;
You can now copy-paste from Expression blocks in Assista's response using the little copy icon in the top-right corner of the expression block.&lt;br /&gt;
&lt;br /&gt;
== Experimental ==&lt;br /&gt;
* A way for an Analytica model running in desktop Analytica to [[MCP server in Analytica|act as a Model Context Protocol (MCP) server]] for use by Large Language Models (LLMs).&lt;br /&gt;
&lt;br /&gt;
== ADE ==&lt;br /&gt;
* Added a new example: &amp;lt;code&amp;gt;Mcp_server&amp;lt;/code&amp;gt;.  This is an MCP server that wraps ADE. Among other things, it can give AI agents like Claude Code the ability to build, explore and use Analytica models.&lt;/div&gt;</summary>
		<author><name>Mhenrion</name></author>
	</entry>
	<entry>
		<id>https://docs.analytica.com/index.php?title=What%27s_new_in_Analytica_7.0%3F&amp;diff=63691</id>
		<title>What's new in Analytica 7.0?</title>
		<link rel="alternate" type="text/html" href="https://docs.analytica.com/index.php?title=What%27s_new_in_Analytica_7.0%3F&amp;diff=63691"/>
		<updated>2026-01-28T00:29:08Z</updated>

		<summary type="html">&lt;p&gt;Mhenrion: /* Highlights of Analytica 7.0 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[category:What's new pages]]&lt;br /&gt;
[[category:Analytica releases]]&lt;br /&gt;
&lt;br /&gt;
[[Analytica 7.0]] will be the next major Analytica release and is currently in [[Beta Tester Page|beta testing]]. Go to [[Beta Tester Page]] to try it. The current official release is [[Analytica 6.6]]. &lt;br /&gt;
&lt;br /&gt;
==Highlights of Analytica 7.0==&lt;br /&gt;
&lt;br /&gt;
* '''[[#Python integration|Python integration]]:''' The major enhancement is integration with Python and hence the entire Python ecosystem of libraries. You can easily call functions from Python libraries, access Python variables, and even write Python code right inside Analytica variables and functions. So now you can mix and match Analytica and Python according to which language you think best for your modeling or coding needs.&lt;br /&gt;
*  '''Index label updating:''' A common source of errors has been when you change a text label in an Index without remembering to change expressions that refer to that same text label. [[# Index label auto updates|New features]] now automatically update these labels, and so eliminate most of those errors.&lt;br /&gt;
*  The '''Analytica Enterprise'''' edition has been renamed the [[#Developer Edition (formerly known as Enterprise) |Developer edition]], which better reflects what it is.&lt;br /&gt;
* It introduces two new object Classes:  &lt;br /&gt;
** [[Struct]] lets you bundle disparate values, like text, numbeers, atoms and arrays, together in one object that does not array abstract -- similar to Records and Classes in other languages).  &lt;br /&gt;
** [[Callable]] is like a user-defined Function but it's Definition can be a [[handle]] to a Python class or a Python function. &lt;br /&gt;
* [[ParseJSON]] and [[MakeJSON]] now use Structs, which are much more convenient for representing the hierarchical structure of JSON.&lt;br /&gt;
* [[#SpreadsheetOpen|Read and write spreadsheets without Excel]]:  This is faster and more robust, and you don't need Excel installed.&lt;br /&gt;
&lt;br /&gt;
== [[Using Python from Analytica|Python integration]] ==&lt;br /&gt;
&lt;br /&gt;
You can now write Python code inside Analytica definitions! It's easy to call Python functions, with Analytica-style Intelligent Arrays!. So you can access the vast ecosystem of Python libraries (''modules'' in Python lingo). Among the gazillion possibilities are specialized libraries for data visualization, statistics, machine learning, and much more.&lt;br /&gt;
It means that you can mix and match Analytica and Python -- write Analytica code for what's easiest in Analytica and Python code for what's easiest in Python.  &lt;br /&gt;
&lt;br /&gt;
See: [[Using Python from Analytica]]&lt;br /&gt;
(In [[Analytica Developer]] edition or better). &lt;br /&gt;
&lt;br /&gt;
For the Analytica modeler, this puts a ton of resources at your fingertips. &lt;br /&gt;
&lt;br /&gt;
It's also pretty cool for the Python developer. Analytica is like a new interactive development environment with a lot of unique advantages, especially during interactive code development:&lt;br /&gt;
* Analytica's dependency maintenance can be really convenient during interactive development, creating automatic dependency maintenance between your Python functions, classes and variables that don't exist in Python.&lt;br /&gt;
* The visual influence diagram layout can be a super useful to way organize and visualize your code.&lt;br /&gt;
* It naturally encourages declarative code practices, which leads to better and more maintainable coding style.&lt;br /&gt;
* You get the benefits of Analytica's edit tables, plus for results, Analytica's multi-D result tables and one-click, no-code, graphing.&lt;br /&gt;
* It is easy to wrap existing Python models to get Monte Carlo, parametric analysis and sensitivity analysis with Analytica ease.&lt;br /&gt;
* Sometimes one or the other language is more convenient for a particular task. You can freely switch between whichever language feels better suited to the immediate task, and intermix languages easily.&lt;br /&gt;
&lt;br /&gt;
== Developer Edition (formerly known as Enterprise) ==&lt;br /&gt;
&lt;br /&gt;
Analytica's middle-tier edition formerly known as the ''Enterprise Edition'', it is now called the [[Analytica Developer|Analytica Developer edition]]. That name better reflects what it is--software for developers of decision applications.  If you're now a user of Analytica Enterprise you don't have to update your license or do anything special. The name will just change when you install Analytica 7.0.  In Analytica docs, when you select &amp;quot;7.0&amp;quot; on the release bar (at the top of pages that have release-contingent content), all the docs automatically use the new Analytica Developer edition name. &lt;br /&gt;
&lt;br /&gt;
== Analytica language extensions ==&lt;br /&gt;
&lt;br /&gt;
=== Index label auto updates ===&lt;br /&gt;
&lt;br /&gt;
When you change a text label in an Index, it can update code to use the new text label. Iit automatically updates text literals in other expressions that compare to or subscript on an index. The new [[Index-label dot syntax]] ( &amp;lt;code&amp;gt;I . &amp;quot;label&amp;quot;&amp;lt;/code&amp;gt;) associates a text literal with its index to prevent it from getting out of sync, and to warn if it ever does. These [[Keeping text literals consistent with index labels| features]] help avoid common errors when updating text labels in Indexes. &lt;br /&gt;
&lt;br /&gt;
=== Callable ===&lt;br /&gt;
&lt;br /&gt;
The new object [[Class]] [[Callable]] is a variable-like object, meaning it has a [[Definition]] and a computed value, but can be used for convenience and documentation when the computed value itself is something that can be called, such as a [[Local function]] (aka ''lambda function''), a [[handle]] to an global function, a Python class or a Python function.&lt;br /&gt;
&lt;br /&gt;
If you &amp;quot;compute&amp;quot; the identity of a callable data item inside a normal [[Variable]] instance, &amp;lt;code&amp;gt;X&amp;lt;/code&amp;gt;, you could call it using the syntax &amp;lt;code&amp;gt;X-&amp;gt;(a,b,c)&amp;lt;/code&amp;gt;. On your influence diagram the object would have a rounded rectangle and thus would not communicate that the result is something that can be called. When you change its class to be a [[Callable]], you can then invoke the call using the syntax &amp;lt;code&amp;gt;X(a,b,c)&amp;lt;/code&amp;gt; and the shape of the node changes to something that resembles a function shape, thus communicating that this holds something that is callable.&lt;br /&gt;
&lt;br /&gt;
To create a callable, first create a [[Variable]] node, then use the [[Class]] dropdown from the [[Object window]] or [[Attribute pane]] to change the class to ''Callable''.&lt;br /&gt;
&lt;br /&gt;
=== Struct ===&lt;br /&gt;
A [[Struct]] defines a new atomic, immutable data type. For use when you need to bundle multiple heterogeneous items and don't want their dimensionalities to interact. Array abstract treats an instance of a Struct as a single cell (an atom).&lt;br /&gt;
&lt;br /&gt;
=== Expression and Lazy qualifiers ===&lt;br /&gt;
An expression passed to a function parameter declared with the qualifier as &amp;lt;code&amp;gt;[[Function_parameter_qualifiers#Expression|Expression]]&amp;lt;/code&amp;gt; can now include local variable identifiers. The local variables are captured (similar to how they would be captured by a [[Local function]]).&lt;br /&gt;
&lt;br /&gt;
A new function parameter qualifier, [[Function_parameter_qualifiers#Lazy]], has been added, which does lazy evaluation of the expression passed to it. In the function Definition, you can use it as if it were a normal value parameter, but evaluation occurs when the value is used rather than when the function is called, and in the evaluation context (which includes the [[Evaluation modes|evaluation mode]]) where the value is used instead as in the context of the call.&lt;br /&gt;
&lt;br /&gt;
=== Excess parameter qualifier ===&lt;br /&gt;
A new function declaration allows a function to tolerate or capture excess named parameters in the call that are not declared as parameter names in the function's Parameters declaration. It can also be used in a [[Struct]] declaration.&lt;br /&gt;
&lt;br /&gt;
== Functions ==&lt;br /&gt;
=== ParseJSON ===&lt;br /&gt;
Changed to parse to [[Struct]]s, thus greatly simplifying and improving the convenience of using JSON in Analytica expressions. &lt;br /&gt;
&lt;br /&gt;
For parsing with a schema, a Struct's declaration serves as the schema, which is far easier and more familiar for an Analytica user than the former scheme for specifying a schema.&lt;br /&gt;
&lt;br /&gt;
[[MakeJSON]] is able to generate JSON from a Struct (or nested structs) as well, which is the most convenient representation for JSON representations.&lt;br /&gt;
&lt;br /&gt;
=== SpreadsheetOpen ===&lt;br /&gt;
Added a new «backend» parameter to [[SpreadsheetOpen]] with a new option of &amp;lt;code&amp;gt;'LibXl'&amp;lt;/code&amp;gt;, allowing you to read and manipulate a spreadsheet without having Excel installed. But unlike the Excel backend, the &amp;lt;b&amp;gt;LibXl&amp;lt;/b&amp;gt; option does not have a calculation engine (so can't recompute cell formulas after you change cells). This option is be better when you simply want to read (or write) data in a *.xlsx file format.&lt;br /&gt;
&lt;br /&gt;
== Example models and libraries ==&lt;br /&gt;
&lt;br /&gt;
* There is a new &amp;quot;Auto insurance claim risk analysis.ana&amp;quot; in the Example Models / Risk Analysis folder.&lt;br /&gt;
* The [[Mutables library]] has been updated. It provides a new [[Mutable]] [[Struct]] which is superior to the older representation, which displays the actual value in result table cells and is atomic. The legacy functions ([[MutableNew]], [[MutableSet]] and [[MutableGet]]) are still there for backward compatibility, but have been changed to just wrap the new Mutable.&lt;br /&gt;
&lt;br /&gt;
== Result tables and graphs ==&lt;br /&gt;
* A blank (none) entry was added to the [[XY_comparison#Use_comparison_index|comparison index pulldown]]. Use this to quickly unset the comparison index without having to re-enter the [[XY_comparison]] dialog. Also, the pulldown is now visible and enabled in browse mode.&lt;br /&gt;
* Comparison variables are no longer summed over slicer indexes that are set to '''Totals''' when the value for that variable does not include the slicer index. Note that this results in some changes to what is displayed in table body cells and in axis scaling on graphs.&lt;br /&gt;
&lt;br /&gt;
== Assista ==&lt;br /&gt;
&lt;br /&gt;
You can now copy-paste from Expression blocks in Assista's response using the little copy icon in the top-right corner of the expression block.&lt;br /&gt;
&lt;br /&gt;
== Experimental ==&lt;br /&gt;
* A way for an Analytica model running in desktop Analytica to [[MCP server in Analytica|act as a Model Context Protocol (MCP) server]].&lt;br /&gt;
&lt;br /&gt;
== ADE ==&lt;br /&gt;
* Added a new example: &amp;lt;code&amp;gt;Mcp_server&amp;lt;/code&amp;gt;.  This is an MCP server that wraps ADE. Among other things, it can give AI agents like Claude Code the ability to build, explore and use Analytica models.&lt;/div&gt;</summary>
		<author><name>Mhenrion</name></author>
	</entry>
	<entry>
		<id>https://docs.analytica.com/index.php?title=What%27s_new_in_Analytica_7.0%3F&amp;diff=63690</id>
		<title>What's new in Analytica 7.0?</title>
		<link rel="alternate" type="text/html" href="https://docs.analytica.com/index.php?title=What%27s_new_in_Analytica_7.0%3F&amp;diff=63690"/>
		<updated>2026-01-28T00:27:02Z</updated>

		<summary type="html">&lt;p&gt;Mhenrion: /* Python integration */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[category:What's new pages]]&lt;br /&gt;
[[category:Analytica releases]]&lt;br /&gt;
&lt;br /&gt;
[[Analytica 7.0]] will be the next major Analytica release and is currently in [[Beta Tester Page|beta testing]]. Go to [[Beta Tester Page]] to try it. The current official release is [[Analytica 6.6]]. &lt;br /&gt;
&lt;br /&gt;
==Highlights of Analytica 7.0==&lt;br /&gt;
&lt;br /&gt;
* '''Python integration:''' The major enhancement is integration with Python and hence the entire Python ecosystem of libraries. You can easily call functions from Python libraries, access Python variables, and even write Python code right inside Analytica variables and functions. So now you can mix and match Analytica and Python according to which language you think best for your modeling or coding needs.&lt;br /&gt;
*  '''Index label updating:''' A common source of errors has been when you change a text label in an Index without remembering to change expressions that refer to that same text label. [[# Index label auto updates|New features]] now automatically update these labels, and so eliminate most of those errors.&lt;br /&gt;
*  '''Enterprise renamed Developer edition:''' The Analytica Enterprise edition has been renamed the [[#Developer Edition (formerly known as Enterprise) |Developer edition]], which better reflects what it is.&lt;br /&gt;
* It introduces two new object Classes:  &lt;br /&gt;
** [[Struct]] lets you bundle disparate values, like text, numbeers, atoms and arrays, together in one object that does not array abstract -- similar to Records and Classes in other languages).  &lt;br /&gt;
** [[Callable]] is like a user-defined Function but it's Definition can be a [[handle]] to a Python class or a Python function. &lt;br /&gt;
* [[ParseJSON]] and [[MakeJSON]] now use Structs, which are much more convenient for representing the hierarchical structure of JSON.&lt;br /&gt;
* [[#SpreadsheetOpen|Read and write spreadsheets without Excel]]:  This is faster and more robust, and you don't need Excel installed.&lt;br /&gt;
&lt;br /&gt;
== [[Using Python from Analytica|Python integration]] ==&lt;br /&gt;
&lt;br /&gt;
You can now write Python code inside Analytica definitions! It's easy to call Python functions, with Analytica-style Intelligent Arrays!. So you can access the vast ecosystem of Python libraries (''modules'' in Python lingo). Among the gazillion possibilities are specialized libraries for data visualization, statistics, machine learning, and much more.&lt;br /&gt;
It means that you can mix and match Analytica and Python -- write Analytica code for what's easiest in Analytica and Python code for what's easiest in Python.  &lt;br /&gt;
&lt;br /&gt;
See: [[Using Python from Analytica]]&lt;br /&gt;
(In [[Analytica Developer]] edition or better). &lt;br /&gt;
&lt;br /&gt;
For the Analytica modeler, this puts a ton of resources at your fingertips. &lt;br /&gt;
&lt;br /&gt;
It's also pretty cool for the Python developer. Analytica is like a new interactive development environment with a lot of unique advantages, especially during interactive code development:&lt;br /&gt;
* Analytica's dependency maintenance can be really convenient during interactive development, creating automatic dependency maintenance between your Python functions, classes and variables that don't exist in Python.&lt;br /&gt;
* The visual influence diagram layout can be a super useful to way organize and visualize your code.&lt;br /&gt;
* It naturally encourages declarative code practices, which leads to better and more maintainable coding style.&lt;br /&gt;
* You get the benefits of Analytica's edit tables, plus for results, Analytica's multi-D result tables and one-click, no-code, graphing.&lt;br /&gt;
* It is easy to wrap existing Python models to get Monte Carlo, parametric analysis and sensitivity analysis with Analytica ease.&lt;br /&gt;
* Sometimes one or the other language is more convenient for a particular task. You can freely switch between whichever language feels better suited to the immediate task, and intermix languages easily.&lt;br /&gt;
&lt;br /&gt;
== Developer Edition (formerly known as Enterprise) ==&lt;br /&gt;
&lt;br /&gt;
Analytica's middle-tier edition formerly known as the ''Enterprise Edition'', it is now called the [[Analytica Developer|Analytica Developer edition]]. That name better reflects what it is--software for developers of decision applications.  If you're now a user of Analytica Enterprise you don't have to update your license or do anything special. The name will just change when you install Analytica 7.0.  In Analytica docs, when you select &amp;quot;7.0&amp;quot; on the release bar (at the top of pages that have release-contingent content), all the docs automatically use the new Analytica Developer edition name. &lt;br /&gt;
&lt;br /&gt;
== Analytica language extensions ==&lt;br /&gt;
&lt;br /&gt;
=== Index label auto updates ===&lt;br /&gt;
&lt;br /&gt;
When you change a text label in an Index, it can update code to use the new text label. Iit automatically updates text literals in other expressions that compare to or subscript on an index. The new [[Index-label dot syntax]] ( &amp;lt;code&amp;gt;I . &amp;quot;label&amp;quot;&amp;lt;/code&amp;gt;) associates a text literal with its index to prevent it from getting out of sync, and to warn if it ever does. These [[Keeping text literals consistent with index labels| features]] help avoid common errors when updating text labels in Indexes. &lt;br /&gt;
&lt;br /&gt;
=== Callable ===&lt;br /&gt;
&lt;br /&gt;
The new object [[Class]] [[Callable]] is a variable-like object, meaning it has a [[Definition]] and a computed value, but can be used for convenience and documentation when the computed value itself is something that can be called, such as a [[Local function]] (aka ''lambda function''), a [[handle]] to an global function, a Python class or a Python function.&lt;br /&gt;
&lt;br /&gt;
If you &amp;quot;compute&amp;quot; the identity of a callable data item inside a normal [[Variable]] instance, &amp;lt;code&amp;gt;X&amp;lt;/code&amp;gt;, you could call it using the syntax &amp;lt;code&amp;gt;X-&amp;gt;(a,b,c)&amp;lt;/code&amp;gt;. On your influence diagram the object would have a rounded rectangle and thus would not communicate that the result is something that can be called. When you change its class to be a [[Callable]], you can then invoke the call using the syntax &amp;lt;code&amp;gt;X(a,b,c)&amp;lt;/code&amp;gt; and the shape of the node changes to something that resembles a function shape, thus communicating that this holds something that is callable.&lt;br /&gt;
&lt;br /&gt;
To create a callable, first create a [[Variable]] node, then use the [[Class]] dropdown from the [[Object window]] or [[Attribute pane]] to change the class to ''Callable''.&lt;br /&gt;
&lt;br /&gt;
=== Struct ===&lt;br /&gt;
A [[Struct]] defines a new atomic, immutable data type. For use when you need to bundle multiple heterogeneous items and don't want their dimensionalities to interact. Array abstract treats an instance of a Struct as a single cell (an atom).&lt;br /&gt;
&lt;br /&gt;
=== Expression and Lazy qualifiers ===&lt;br /&gt;
An expression passed to a function parameter declared with the qualifier as &amp;lt;code&amp;gt;[[Function_parameter_qualifiers#Expression|Expression]]&amp;lt;/code&amp;gt; can now include local variable identifiers. The local variables are captured (similar to how they would be captured by a [[Local function]]).&lt;br /&gt;
&lt;br /&gt;
A new function parameter qualifier, [[Function_parameter_qualifiers#Lazy]], has been added, which does lazy evaluation of the expression passed to it. In the function Definition, you can use it as if it were a normal value parameter, but evaluation occurs when the value is used rather than when the function is called, and in the evaluation context (which includes the [[Evaluation modes|evaluation mode]]) where the value is used instead as in the context of the call.&lt;br /&gt;
&lt;br /&gt;
=== Excess parameter qualifier ===&lt;br /&gt;
A new function declaration allows a function to tolerate or capture excess named parameters in the call that are not declared as parameter names in the function's Parameters declaration. It can also be used in a [[Struct]] declaration.&lt;br /&gt;
&lt;br /&gt;
== Functions ==&lt;br /&gt;
=== ParseJSON ===&lt;br /&gt;
Changed to parse to [[Struct]]s, thus greatly simplifying and improving the convenience of using JSON in Analytica expressions. &lt;br /&gt;
&lt;br /&gt;
For parsing with a schema, a Struct's declaration serves as the schema, which is far easier and more familiar for an Analytica user than the former scheme for specifying a schema.&lt;br /&gt;
&lt;br /&gt;
[[MakeJSON]] is able to generate JSON from a Struct (or nested structs) as well, which is the most convenient representation for JSON representations.&lt;br /&gt;
&lt;br /&gt;
=== SpreadsheetOpen ===&lt;br /&gt;
Added a new «backend» parameter to [[SpreadsheetOpen]] with a new option of &amp;lt;code&amp;gt;'LibXl'&amp;lt;/code&amp;gt;, allowing you to read and manipulate a spreadsheet without having Excel installed. But unlike the Excel backend, the &amp;lt;b&amp;gt;LibXl&amp;lt;/b&amp;gt; option does not have a calculation engine (so can't recompute cell formulas after you change cells). This option is be better when you simply want to read (or write) data in a *.xlsx file format.&lt;br /&gt;
&lt;br /&gt;
== Example models and libraries ==&lt;br /&gt;
&lt;br /&gt;
* There is a new &amp;quot;Auto insurance claim risk analysis.ana&amp;quot; in the Example Models / Risk Analysis folder.&lt;br /&gt;
* The [[Mutables library]] has been updated. It provides a new [[Mutable]] [[Struct]] which is superior to the older representation, which displays the actual value in result table cells and is atomic. The legacy functions ([[MutableNew]], [[MutableSet]] and [[MutableGet]]) are still there for backward compatibility, but have been changed to just wrap the new Mutable.&lt;br /&gt;
&lt;br /&gt;
== Result tables and graphs ==&lt;br /&gt;
* A blank (none) entry was added to the [[XY_comparison#Use_comparison_index|comparison index pulldown]]. Use this to quickly unset the comparison index without having to re-enter the [[XY_comparison]] dialog. Also, the pulldown is now visible and enabled in browse mode.&lt;br /&gt;
* Comparison variables are no longer summed over slicer indexes that are set to '''Totals''' when the value for that variable does not include the slicer index. Note that this results in some changes to what is displayed in table body cells and in axis scaling on graphs.&lt;br /&gt;
&lt;br /&gt;
== Assista ==&lt;br /&gt;
&lt;br /&gt;
You can now copy-paste from Expression blocks in Assista's response using the little copy icon in the top-right corner of the expression block.&lt;br /&gt;
&lt;br /&gt;
== Experimental ==&lt;br /&gt;
* A way for an Analytica model running in desktop Analytica to [[MCP server in Analytica|act as a Model Context Protocol (MCP) server]].&lt;br /&gt;
&lt;br /&gt;
== ADE ==&lt;br /&gt;
* Added a new example: &amp;lt;code&amp;gt;Mcp_server&amp;lt;/code&amp;gt;.  This is an MCP server that wraps ADE. Among other things, it can give AI agents like Claude Code the ability to build, explore and use Analytica models.&lt;/div&gt;</summary>
		<author><name>Mhenrion</name></author>
	</entry>
	<entry>
		<id>https://docs.analytica.com/index.php?title=What%27s_new_in_Analytica_7.0%3F&amp;diff=63689</id>
		<title>What's new in Analytica 7.0?</title>
		<link rel="alternate" type="text/html" href="https://docs.analytica.com/index.php?title=What%27s_new_in_Analytica_7.0%3F&amp;diff=63689"/>
		<updated>2026-01-28T00:12:18Z</updated>

		<summary type="html">&lt;p&gt;Mhenrion: /* Highlights of Analytica 7.0 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[category:What's new pages]]&lt;br /&gt;
[[category:Analytica releases]]&lt;br /&gt;
&lt;br /&gt;
[[Analytica 7.0]] will be the next major Analytica release and is currently in [[Beta Tester Page|beta testing]]. Go to [[Beta Tester Page]] to try it. The current official release is [[Analytica 6.6]]. &lt;br /&gt;
&lt;br /&gt;
==Highlights of Analytica 7.0==&lt;br /&gt;
&lt;br /&gt;
* '''Python integration:''' The major enhancement is integration with Python and hence the entire Python ecosystem of libraries. You can easily call functions from Python libraries, access Python variables, and even write Python code right inside Analytica variables and functions. So now you can mix and match Analytica and Python according to which language you think best for your modeling or coding needs.&lt;br /&gt;
*  '''Index label updating:''' A common source of errors has been when you change a text label in an Index without remembering to change expressions that refer to that same text label. [[# Index label auto updates|New features]] now automatically update these labels, and so eliminate most of those errors.&lt;br /&gt;
*  '''Enterprise renamed Developer edition:''' The Analytica Enterprise edition has been renamed the [[#Developer Edition (formerly known as Enterprise) |Developer edition]], which better reflects what it is.&lt;br /&gt;
* It introduces two new object Classes:  &lt;br /&gt;
** [[Struct]] lets you bundle disparate values, like text, numbeers, atoms and arrays, together in one object that does not array abstract -- similar to Records and Classes in other languages).  &lt;br /&gt;
** [[Callable]] is like a user-defined Function but it's Definition can be a [[handle]] to a Python class or a Python function. &lt;br /&gt;
* [[ParseJSON]] and [[MakeJSON]] now use Structs, which are much more convenient for representing the hierarchical structure of JSON.&lt;br /&gt;
* [[#SpreadsheetOpen|Read and write spreadsheets without Excel]]:  This is faster and more robust, and you don't need Excel installed.&lt;br /&gt;
&lt;br /&gt;
== [[Using Python from Analytica|Python integration]] ==&lt;br /&gt;
&lt;br /&gt;
You can now benefit from the large ecosystem of Python libraries from the [[Analytica Developer]] edition or better (i.e., [[Analytica Optimizer]] edition or [[ADE]]). Use Python libraries (called modules in Python lingo) or Python code directly from your Analytica model, and it is super easy and convenient to do so!  Among the gazillion possibilities are specialized data visualizations, using machine learning libraries, third party libraries, etc. &lt;br /&gt;
&lt;br /&gt;
See: [[Using Python from Analytica]]&lt;br /&gt;
&lt;br /&gt;
For the Analytica modeler, this puts a ton of resources at your fingertips.&lt;br /&gt;
&lt;br /&gt;
For the Python developer, this is also pretty cool. Analytica is like a new interactive development environment in which there are a lot of unique advantages, especially during interactive code development, including these:&lt;br /&gt;
* Analytica's dependency maintenance can be really convenient during interactive development, creating automatic dependency maintenance between your python functions, classes and variables that don't exist in Python.&lt;br /&gt;
* The visual influence diagram layout can be a super useful to way organize and visualize your code.&lt;br /&gt;
* It naturally encourages declarative code practices, which leads to better and more maintainable coding style.&lt;br /&gt;
* You get the benefits of Analytica's edit tables, plus for results, Analytica's multi-D result tables and one-click, no-code, graphing.&lt;br /&gt;
* It is easy to wrap existing Python models to get Monte Carlo, parametric analysis and sensitivity analysis with Analytica ease.&lt;br /&gt;
* Sometimes one or the other language is more convenient for a particular task. You can freely switch between whichever language feels better suited to the immediate task, and intermix languages easily.&lt;br /&gt;
&lt;br /&gt;
== Developer Edition (formerly known as Enterprise) ==&lt;br /&gt;
&lt;br /&gt;
Analytica's middle-tier edition formerly known as the ''Enterprise Edition'', it is now called the [[Analytica Developer|Analytica Developer edition]]. That name better reflects what it is--software for developers of decision applications.  If you're now a user of Analytica Enterprise you don't have to update your license or do anything special. The name will just change when you install Analytica 7.0.  In Analytica docs, when you select &amp;quot;7.0&amp;quot; on the release bar (at the top of pages that have release-contingent content), all the docs automatically use the new Analytica Developer edition name. &lt;br /&gt;
&lt;br /&gt;
== Analytica language extensions ==&lt;br /&gt;
&lt;br /&gt;
=== Index label auto updates ===&lt;br /&gt;
&lt;br /&gt;
When you change a text label in an Index, it can update code to use the new text label. Iit automatically updates text literals in other expressions that compare to or subscript on an index. The new [[Index-label dot syntax]] ( &amp;lt;code&amp;gt;I . &amp;quot;label&amp;quot;&amp;lt;/code&amp;gt;) associates a text literal with its index to prevent it from getting out of sync, and to warn if it ever does. These [[Keeping text literals consistent with index labels| features]] help avoid common errors when updating text labels in Indexes. &lt;br /&gt;
&lt;br /&gt;
=== Callable ===&lt;br /&gt;
&lt;br /&gt;
The new object [[Class]] [[Callable]] is a variable-like object, meaning it has a [[Definition]] and a computed value, but can be used for convenience and documentation when the computed value itself is something that can be called, such as a [[Local function]] (aka ''lambda function''), a [[handle]] to an global function, a Python class or a Python function.&lt;br /&gt;
&lt;br /&gt;
If you &amp;quot;compute&amp;quot; the identity of a callable data item inside a normal [[Variable]] instance, &amp;lt;code&amp;gt;X&amp;lt;/code&amp;gt;, you could call it using the syntax &amp;lt;code&amp;gt;X-&amp;gt;(a,b,c)&amp;lt;/code&amp;gt;. On your influence diagram the object would have a rounded rectangle and thus would not communicate that the result is something that can be called. When you change its class to be a [[Callable]], you can then invoke the call using the syntax &amp;lt;code&amp;gt;X(a,b,c)&amp;lt;/code&amp;gt; and the shape of the node changes to something that resembles a function shape, thus communicating that this holds something that is callable.&lt;br /&gt;
&lt;br /&gt;
To create a callable, first create a [[Variable]] node, then use the [[Class]] dropdown from the [[Object window]] or [[Attribute pane]] to change the class to ''Callable''.&lt;br /&gt;
&lt;br /&gt;
=== Struct ===&lt;br /&gt;
A [[Struct]] defines a new atomic, immutable data type. For use when you need to bundle multiple heterogeneous items and don't want their dimensionalities to interact. Array abstract treats an instance of a Struct as a single cell (an atom).&lt;br /&gt;
&lt;br /&gt;
=== Expression and Lazy qualifiers ===&lt;br /&gt;
An expression passed to a function parameter declared with the qualifier as &amp;lt;code&amp;gt;[[Function_parameter_qualifiers#Expression|Expression]]&amp;lt;/code&amp;gt; can now include local variable identifiers. The local variables are captured (similar to how they would be captured by a [[Local function]]).&lt;br /&gt;
&lt;br /&gt;
A new function parameter qualifier, [[Function_parameter_qualifiers#Lazy]], has been added, which does lazy evaluation of the expression passed to it. In the function Definition, you can use it as if it were a normal value parameter, but evaluation occurs when the value is used rather than when the function is called, and in the evaluation context (which includes the [[Evaluation modes|evaluation mode]]) where the value is used instead as in the context of the call.&lt;br /&gt;
&lt;br /&gt;
=== Excess parameter qualifier ===&lt;br /&gt;
A new function declaration allows a function to tolerate or capture excess named parameters in the call that are not declared as parameter names in the function's Parameters declaration. It can also be used in a [[Struct]] declaration.&lt;br /&gt;
&lt;br /&gt;
== Functions ==&lt;br /&gt;
=== ParseJSON ===&lt;br /&gt;
Changed to parse to [[Struct]]s, thus greatly simplifying and improving the convenience of using JSON in Analytica expressions. &lt;br /&gt;
&lt;br /&gt;
For parsing with a schema, a Struct's declaration serves as the schema, which is far easier and more familiar for an Analytica user than the former scheme for specifying a schema.&lt;br /&gt;
&lt;br /&gt;
[[MakeJSON]] is able to generate JSON from a Struct (or nested structs) as well, which is the most convenient representation for JSON representations.&lt;br /&gt;
&lt;br /&gt;
=== SpreadsheetOpen ===&lt;br /&gt;
Added a new «backend» parameter to [[SpreadsheetOpen]] with a new option of &amp;lt;code&amp;gt;'LibXl'&amp;lt;/code&amp;gt;, allowing you to read and manipulate a spreadsheet without having Excel installed. But unlike the Excel backend, the &amp;lt;b&amp;gt;LibXl&amp;lt;/b&amp;gt; option does not have a calculation engine (so can't recompute cell formulas after you change cells). This option is be better when you simply want to read (or write) data in a *.xlsx file format.&lt;br /&gt;
&lt;br /&gt;
== Example models and libraries ==&lt;br /&gt;
&lt;br /&gt;
* There is a new &amp;quot;Auto insurance claim risk analysis.ana&amp;quot; in the Example Models / Risk Analysis folder.&lt;br /&gt;
* The [[Mutables library]] has been updated. It provides a new [[Mutable]] [[Struct]] which is superior to the older representation, which displays the actual value in result table cells and is atomic. The legacy functions ([[MutableNew]], [[MutableSet]] and [[MutableGet]]) are still there for backward compatibility, but have been changed to just wrap the new Mutable.&lt;br /&gt;
&lt;br /&gt;
== Result tables and graphs ==&lt;br /&gt;
* A blank (none) entry was added to the [[XY_comparison#Use_comparison_index|comparison index pulldown]]. Use this to quickly unset the comparison index without having to re-enter the [[XY_comparison]] dialog. Also, the pulldown is now visible and enabled in browse mode.&lt;br /&gt;
* Comparison variables are no longer summed over slicer indexes that are set to '''Totals''' when the value for that variable does not include the slicer index. Note that this results in some changes to what is displayed in table body cells and in axis scaling on graphs.&lt;br /&gt;
&lt;br /&gt;
== Assista ==&lt;br /&gt;
&lt;br /&gt;
You can now copy-paste from Expression blocks in Assista's response using the little copy icon in the top-right corner of the expression block.&lt;br /&gt;
&lt;br /&gt;
== Experimental ==&lt;br /&gt;
* A way for an Analytica model running in desktop Analytica to [[MCP server in Analytica|act as a Model Context Protocol (MCP) server]].&lt;br /&gt;
&lt;br /&gt;
== ADE ==&lt;br /&gt;
* Added a new example: &amp;lt;code&amp;gt;Mcp_server&amp;lt;/code&amp;gt;.  This is an MCP server that wraps ADE. Among other things, it can give AI agents like Claude Code the ability to build, explore and use Analytica models.&lt;/div&gt;</summary>
		<author><name>Mhenrion</name></author>
	</entry>
</feed>