Changes 7.0.0

From emergent
Jump to: navigation, search

Back to ChangeLog -- Svn Checkin Log for 7.0.0

Major Changes

  • Major optimization efforts, resulting in up to about 75% speedup in some models! Technical docs in Vectorizing
  • Connection is no longer used for memory allocation in BaseCons (i.e., RecvCons and SendCons) -- instead, each connection variable, all of which must be a float type, is allocated in its own separate vector. This speeds up access. Also, the unit on the other side of the connection is no longer specified by a pointer -- instead an index into the full flat list of units is used -- this same index can be used to directly access other data including the temporary net input array. Any Program access of weights will need to be updated -- see Unit for details.
  • Use of SSE or SIMD (single instruction multiple data) vectorizing instructions built into all x86 chips -- leverages Agner Fog's vectorclass.h http://www.agner.org/optimize -- used for netin and some basic weight change operations in Leabra.
  • core vector math routines in taMath_float / taMath_double optimized by adding faster branch when no ElView is in place, and some SSE on very core vec_ routines.
  • optimized Matrix indexing routines -- you now need to specify FastElxd where x = dimensionality (1..6 or so) -- much faster for 2d, 3d etc than the generic routine.
  • optimized wraparound logic in taImageProc routines
  • Handy new StartupWizard in the startup root window -- presents most common actions of making a new project, loading a recent one, or loading an arbitrary project.
  • SVG (scalable vector graphics) output of NetView, GraphView, and GridView displays -- custom-written rendering function produces much better looking output than previous postscript rendering (which worked off of the very low-level scene graph data), with appropriate grouping to make subsequent editing etc very straightforward. This represents a dramatic improvement for producing publication-quality figures. Just select the SVG format from the Snapshot tool in the 3D Viewer.
  • New annotation graphics available for all 3D view displays T3Annotation -- there is a + menu on the right side of the 3D viewers, where you can manually add lines (w/ arrows), rectangles, text, or 3D objects, optionally positioning using the native units of the underlying display (e.g., the graphed data values in the GraphView, columns and rows in the GridView, or coordinates of units in the NetView). These are saved with the view. They can be positioned with the usual draggers, and operated upon en masse by choosing "edit all", then selecting and choosing operations from the context menu (translation, scaling, setting properties, etc). They replace the NetViewObjs which were specific to the network view and much more limited.
  • DistMatrixTable in taDataAnal uses the new annotations to make a nicely labeled graphical distance matrix, optionally with grouping of repeated labels -- a major improvement in usability of this important form of analysis.
  • The GraphView has a better way of dealing with matrix columns in a DataTable -- you now can pick a cell from the matrix to use, or enter a -1 to see all the cells (color coded according to the current color scale). This allows e.g., 3d matrix data to be plotted as a 3d plot, by selecting cell 0 for the x axis, cell 1 for the y axis, and cell 2 for the z axis. The old matrix grid plot can be selected by setting the graph type to MATRIX.
  • Bar graphs now use a solid 3d bar -- much better visually
  • Can now select arbitrary number of things to plot -- set NPlots value to change number avail -- increased to 16 by default.
  • Various font size and other spacing and layout parameters are now avail in the control panels for GraphView and GridView. For the 3d view tabs, you can select the "1st View Properties.." item from the context menu to get the full set of parameters for a view in a usual edit dialog format (a few are still hidden because there isn't room). You can access all other views from the new EditView button in the Panel Properties dialog. Also GridView click values now toggles between values.
  • Program breakpoints now have a gui (the break_points list right under main .programs line in Project) that allows easy management for enabling and disabling breakpoints across all the programs, and there is a context menu option for global enable and disable across groups of programs. Also, breakpoints should set and clear with 100% reliability now -- several issues fixed.
  • The Program Editor panel is much improved for those used to a standard text-editor environment: you can just type directly into the editor (hit Ctrl+a (goto start), Ctrl+e (goto end), Ctrl+k (kill existing), F2, or, if the line is blank, just start typing to engage editing) and add to or modify the program completely textually -- everything will automatically be converted into the appropriate ProgEl program elements. This builds upon the previous ProgCode system -- new code is entered into a ProgCode, which then parses and converts it into the appropriate program element. There is an expert Preferences setting that allows you to hide the mini-program edit dialog at top of editor area by default, if you prefer to only operate in editor mode.
  • Loops and other container elements have been streamlined by hiding their explicit "code" list from the view.
  • The combined If-Else has been replaced with separate If, Else, and ElseIf elements -- if you want to add an else case to an if, you now have to do that as a separate step -- the advantage is that the display is cleaner without the true_code and false_code lists.
  • Any object with a name in any tree browser can be edited inline as well -- makes it easy to name new objects created by hitting Enter/Return in the browser.
  • New Program Examples project under Demos which contains a comprehensive set of code examples that you can run and copy/paste/modify in your own projects -- great way to learn the programming system. Also the AX Tutorial was completely updated and is (once again) a great way to learn about how to use many of the major features of the software.
  • No more ordering constraints on functions in a program -- any can call any other, regardless of order in list
  • the css Console window now has a lock / unlock toggle to dynamically switch between using it to monitor for error messages (where it is locked below the project window) vs. using it for larger viewing / interacting cases (any attempt to manually position or resize automatically goes into unlock mode, and it will remember the size when you toggle back and forth).
  • paths to objects that show up in the css Console are now clickable to take you right to the object in question -- makes it easier to go back and find what caused an error.
  • New program run status displayed in main application toolbar at top of window -- if a program is running or has stopped, it will show you where and why -- click for a full backtrace (GlobalTrace)
  • can now specify CRR: in a path to point to the cluster run results (CRR) directory, where e.g., weights files are saved -- when the project is running on the local workstation, this is mapped to the local svn cluster run repository -- when it is running on the cluster, it is the results directory where the the model is running -- allows one specification for where to find these files to work in either place. Also available: CRM: for models subdirectory (where the project is stored) and CR: for the parent cluster run directory for both results and models. ClusterRun path is also now automatically included in the file chooser dialog list of path shortcuts on left hand side.
  • now auto-updates after executing an action (Run, Kill, GetData, etc) -- you don't have to sit there and hit the Update button all the time! Also, the current svn revision is always shown in the button area at the bottom of the edit panel, so you don't need to keep looking at the css console for that information.
  • can select SET instead of SRCH for parameters -- simpler for manual parameter searching.
  • can copy files from other users or other project names -- easier for collaboration or trying out different variants w/ diff project names.
  • ClusterRun and ControlPanel (previously called SelectEdit) now use a "normal" edit panel with all the gui controls, as compared with the clunkier display that rendered mostly text and then the edit controls only for the currently-selected row. Also prevented excessive updating of the panel -- doesn't update while a program is running (except for variables and methods on programs) -- there is a running_updt flag to override this.
  • New SubversionBrowser, available from the Tools menu (for svn repositories defined in Preferences, and for emergent repository itself), and in the toolbar -- one click to checkin changes to the current project, or to open the browser in the current directory. Browser has all the basic functionality you'd expect, in a nice 3-pane structure with revision history, repository listing, and working directory listing.
  • Mac and Windows versions updated to Qt 5.2 -- provides better support for Mac Retina displays and fixes the keyboard focus bug on Mac.
  • New TA_BASEFUNS macros for the C++ classes, which greatly reduce the build dependencies, and the compile time. Important for any existing plugins: (see Plugins v7.0) -- you must add: TA_BASEFUNS_CTORS_DEFN(MyTypeName); to your .cpp files for any types in the .h files that have TA_BASEFUNS* in them, along with several other changes detailed in Plugins v7.0.
  • DataTable import/export
  • New - Import and export using JSON
  • Import of files using csv or whitespace now ignore extra spaces
  • The client now accepts commands in JSON format and the results are returned in JSON format
  • The implementation is column oriented (the native api is row oriented) so you can add/create new columns with this API
  • New Data menu - The data processing and analysis functionality previously hidden in the project tree has been moved to the application menubar. You will see a new menu labeled "Data" with 4 submenus. These processes allow you to modify and analyze data in data tables, create new tables based on data in existing tables, etc. All of these operations can also be done with program code.
  • the Find: tool at the bottom of every browser is now much faster and more robust -- also parses multi-word searches like google -- only finds items that fit the conjunction of all the terms. This can now be easily used for full browser searches, and complements the dialog-based find mechanism. Also, type in UpperCase letters and your search will automatically be case sensitive -- all lowercase is case insensitive.

Minor Changes

  • String now has a split function that returns a String_Array, which can be iterated over using foreach -- also foreach will now iterate directly over chars in a string.
  • Array objects can now be converted into corresponding Matrix objects automatically, by using a cast operator: e.g., str_mat = String_Matrix("abc".split());
  • Can select the type of a new variable (and choose local/global) when prompted for it while programming in the Program Editor.
  • Object chooser dialog now allows you to create new items, if one you want is not avail (e.g., new specs, data tables, networks, etc)
  • Can now just press enter for e.g., LocalVars in a project, and it will add the first variable -- this is true for all such objects that have a "default child" list where sub-items automatically appear -- previously it was necessary to click a button to make the first item (after which point the Enter or Ctrl+I or Ctrl+O shortcuts would then work once you could put the cursor in the list of sub-items).
  • DataVarProg -- can now map between an enum and a Matrix data column -- uses a "localist" code of writing a 1 in the cell corresponding to the enum value.
  • In Network -- LayerPos_GridLayout_2d and 3d functions -- automatically arranges layers in an orderly grid, for both 2d and 3d views. Very handy for large models.
  • specs now have a SetParam function that can be used to set a given parameter for all specs in a group, including children.
  • VEBody and associated virtual environment code now has much better support for bodies defined relative to other bodies -- much better for constructing complex objects with multiple parts -- they all can be moved, rotated, etc just by moving the main "anchor" body.
  • Also fixed weird lighting discrepancies for VECamera -- cameras now see exactly what you see in view for lighting -- will require some fixes to existing projects that had things setup backward to accommodate previous bug.
  • Added support for shadows in virtual environment rendering -- see new params on VEWorld object.
  • LeabraLayerSpec has important new FF_FB inhibition type -- directly computes approximate feedforward and feedback inhibition based on average netin and average activity in layer or unit_group, respectively. Should be much closer to inhibitory interneuron inhibition, and gives much more natural "more is more" activation dynamics, where greater net input to the layer results in greater activation in general. Also eliminates pesky tie breaking issues. Extensive tests show that it performs as well or better than existing KWTA_AVG_INHIB on many challenging problems. Also this computed inhibition can now be combined with connection-spec based inhibition.
  • For Leabra programs, added LeabraNetwork::Compute_PhaseStats() function to be used instead of the Compute_TrialStats() function (along with the _Test version of that function) -- calls Compute_MinusStats() in the minus phase and Compute_PlusStats() in the plus phase, which allows for example the target values for SSE and other errors to be provided only in the plus phase -- previously these had to be present in the minus phase to count correctly.
  • New Keyboard shortcuts:
  • To control frames of the project window. With a single key combination you can have any combination of the browser (left pane), panels (center pane) and graphics (right pane). On Macintosh command-1 gives the browser the full window, command-2 panels get the full window, command-3 browser and panels share, command-4 graphics gets the entire window, command-5 browser and graphics, command-6 panels and graphics, command-7 all 3 frames. Works on all platforms with key equivalent to Macintosh command key.
  • To control 3D View. The arrow keys control rotation and while holding the shift key the arrow keys control rotation of the view. Zoom-In with the '+' key and Zoom-Out with the '-' key.
  • New class DynEnumTableCol generates enums corresponding to the values in a DataTable column. Any changes to the column (sorting, deleting, etc) causes regeneration of the enums. If you were previously using DynEnumType in conjunction with a DataTable column you probably want to update to this new type.
  • Functions in DynEnumType to convert enums to numbers in Matrix or Array objects -- handy for converting entire DataTables en-masse.
  • New color (taColor) attribute added to projections, available from projection edit panel.
  • DataVarProg now has an option to get or set all variables (boolean all_matches) that match the names of data table columns. This means you don't need to specify each variable you want to get or set.
  • DataVarRead and DataVarWrite are new programming elements that read or write one variable only at a time but don't require that the column name and variable name match.
  • The SelectEdit object has been renamed to ControlPanel to better reflect its purpose and the menu items are now of the form Add...ToControlPanel.
  • Option in Preferences to turn off the pager in the css console.
  • Tree browsers are now "spring loaded", hovering over an item during drag-n-drop will expand the item and moving off will collapse the item. This option and the spring delay time are settable in preferences.

Bug Fixes

  • ClusterRun no longer so touchy and crash-prone when all params not yet set
  • ProgCode in Programs no longer causes sporadic crashes when it converts into specific ProgEl
  • When changing the value of a Spec in a ControlPanel or in a Program, sometimes the change would not propagate to all the child specs of that spec -- this is now fixed once and for all by propagating the UpdateAfterEdit call all the way up to the largest containing object of where a change occurred.
  • fixed crashes in taCanvas
  • fixed crashes in taImageProc region spec filtering code on Windows platform (affected the v1rf and objrec projects from the CCN textbook)
  • fixed important bug in css that was losing track of which program was running, which affected error reporting -- should now have much more reliable reporting of which program and where an error occurred in.
  • Ctrl-M was only duplicating the first of multiple items selected in the browser.
  • Some windows, e.g. Find, could only be closed by clicking the close box. Now they can be closed with the 'Close Window' menu or the keyboard shortcut.
  • On a mac, the laptop trackpad under Qt5 was hypersensitive -- now fixed -- turns out it was getting touch events -- turned those off.
  • Extended selection using cursor keys was missing the last item selected
  • Undo was not working for "Edit Dialogs" (e.g. a data table opened into its own window)
  • Around 200 bug tickets were addressed for this release -- too many issues to document them all here!