Skip to content
BETSEE 1.0.0.0 (Mighty Maxwell) released.

Significant changes include:

* Custom tissue profiles. Users may now define an arbitrary number of
  custom tissue profiles (i.e., contiguous regions of the cell cluster),
  each of which assigns all cells residing in that region the same
  simulation configuration settings -- including membrane diffusion
  constants for all available ions (e.g., sodium, potassium, chloride).
* Custom exports. Users may define an arbitrary number of custom exports
  (i.e., files saved to disk when one or more checkboxes beneath the
  "Export?" column in the "Phase Playlist" section are checked). For
  usability, the top-level tree widget now sports a nested subtree of
  export-specific tree items, complete with suitable vector-based
  iconography and human-readable tooltips. This includes:
  * Comma-separated value (CSV) files.
  * Cell cluster animations (i.e., compressed videos visualizing a
    single measurable quantity across the entire cell cluster at all
    simulation time steps).
  * Cell cluster plots (i.e., single images visualizing a single
    measurable quantity across the entire cell cluster at the last
    simulation time step).
  * Single cell plots (i.e., single images visualizing a single
    measurable quantity isolated to a single cell at all simulation time
    steps), where the cell to be visualized is selected by its uniquely
    identifying 0-based index in the currently generated cell cluster.
* Global export settings. The top-level "Export" item enables settings
  globally applicable to all custom exports to be trivially configured,
  including:
  * Cell index-centric settings,  enabling end users to configure
    whether cell indices are displayed in cell cluster visuals and the
    index of the cell to be displayed in single cell plots.
  * Matplotlib colormaps. The matplotlib-specific colormaps used to
    associate measurable quantities visualized by plots and animations
    (e.g., transmembrane potential) with color values are now globally
    configurable. This includes the default colormaps for intrinsically
    diverging, sequential, streamline, and network data.
* User-configurable tree list items. Predesignated parent items of the
  top-level tree widget (e.g., "Space/Tissue") now act as dynamically
  resizable lists of child items, each of which is associated with the
  same stacked widget page (e.g., "Custom Tissue Profile"). Likewise,
  end users may interactively add an arbitrary number of new child items
  and remove existing child items from such parent items. Additionally:
  * Automatic prepopulation and depopulation. Child tree items of such
    parent items are now dynamically added (i.e., prepopulated) and
    removed (i.e., depopulated) on opening and closing simulation
    configurations respectively.
  * Guaranteed success. Actions permitting users to append and remove
    child items to and from these lists are conditionally enabled and
    disabled, guaranteeing these actions to always succeed if enabled.
* Issue resolutions, including:
  * Infinite recursion on pushing undo commands from editable widgets.
  * Overflow error raised by "libshoken" in relation to undo command
    request handling.
  * Erroneous exceptions raised on pushing the "Browse..." buttons
    associated with all dirnames edited by the "Paths" stacked widget
    page.
  * Exceptions with empty messages, which are now displayed in a mildly
    more meaningful manner.
  * "--sim-conf-file" failures. To do so, the newly defined
    QBetseeSimConf.unload() method now provides an orthogonal analogue
    to the existing QBetseeSimConf.load() method, eliminating numerous
    awkward edge cases and subtle chiken-and-egg issues throughout the
    codebase.
* API generalizations, including:
  * The existing "betsee.gui.simconf.guisimconfundo" submodule, whose
    QBetseeSimConfUndoStack.push_undo_cmd_if_safe() method prevents undo
    commands from being pushed to this stack if no simulation
    configuration is currently open.
  * The existing "betsee.gui.simconf.stack.page" subpackage, which has
    been restructed for maintainability by:
    * Splitting all spatial-centric stacked widget pages into a new
      "betsee.gui.simconf.stack.page.space" subpackage.
    * Splitting all export-centric stacked widget pages into a new
      "betsee.gui.simconf.stack.page.export" subpackage.
  * The existing
    "betsee.gui.simconf.stack.page.space.guisimconfpagertis" submodule,
    which now defines a "QBetseeSimConfPagerTissueABC" superclass
    generally applicable to both default and custom tissue profile
    stacked widget pages.
  * The existing "betsee.gui.simconf.stack.widget.guisimconfcombobox"
    submodule. Notable new classes include:
    * "QBetseeSimConfComboBoxABC", the abstract base class of all
      simulation configuration-specific combo box subclasses.
    * "QBetseeSimConfComboBoxSequence", the concrete subclass of all
      simulation configuration-specific combo boxes backed by a simple
      sequence of raw strings.
  * The existing "betsee.gui.simconf.tree.guisimconftree" submodule,
    whose QBetseeSimConfTreeWidget._init_items() method efficiently and
    explicitly initializes all containers containing tree items,
    including those internally required by the corresponding
    "QBetseeSimConfStackedWidget" instance. This method obsoletes the
    the removed QBetseeSimConfStackedWidget._init_tree_to_stack() and
    QBetseeSimConfTreeWidget._init_items_list_root() methods.
  * The existing "betsee.util.widget.mixin.guiwdg" submodule, whose
    QBetseeObjectMixin.init() method now accepts an optional
    "is_reinitable" parameter permitting application-specific Qt objects
    to be reinitialized in a general-purpose manner. (This is strictly
    required for reinitializing each stacked widget page associated with
    a child tree item providing a dynamic list item immediately before
    that page is displayed on selecting that child tree item.)
  * The existing "betsee.util.widget.stock.tree.guitreewdg" submodule,
    whose "QBetseeTreeWidget" superclass now defines:
    * A get_item_current() method safely retrieving the currently
      selected tree item if any.
  * A new "betsee.gui.data.guidataicon" submodule, serving as an
    application-wide icon store efficiently caching instantiated icons.
    Notable functions include:
    * get_icon_dot(), caching a general-purpose bullet point icon.
  * A new "betsee.util.io.image.guiicon" submodule, providing a seamless
    cache for transparent creation, caching, and retrieval of SVG-based
    "QIcon" objects from arbitrary URIs. Notable functions include:
    * make_icon(), instantiating such icons.
  * A new "betsee.util.widget.abc.control" subpackage containing:
    * The prior "guicontrolabc" submodule, shifted for maintainability.
    * The new "guictlpagerabc" submodule, defining abstract base classes
      and mixins specific to pagers (i.e., stacked widget page
      controllers) -- all of which now subclass these abstract base
      classes and mixins as appropriate.
  * A new "betsee.util.widget.mixin.guiwdgedit" submodule, containing
    the "QBetseeEditWidgetMixin" superclass previously contained within
    the "betsee.util.widget.mixin.guiwdg" submodule. Subclasses of this
    superclass are now required to override the recursion-safe
    _init_safe() method rather than the recursion-unsafe init() method.
  * A new "betsee.util.widget.stock.guicombobox" submodule, whose
    "QBetseeComboBox" superclass generalizes the stock "QComboBox" API
    with improved Pythonics.
  * A new "betsee.util.widget.stock.tree.guitreeitem" submodule
    implementing a high-level tree widget item API encapsulating Qt's
    considerably lower-level "QTreeWidgetItem" API. Notable functions
    include:
    * get_child_item_with_text_path(), enabling callers to obtain
      arbitrary tree items via their absolute first-column text paths
      (i.e., the unique sequence of the first-column text of all items
      leading to the desired tree item, including itself).
    * get_item_preceding_or_none(), contextually retrieving the tree
      item preceding any arbitrary tree item.
  * A new "betsee.util.path.guipathenum" submodule, defining one global
    integer bit mask constant for each Qt-specific "QFileDialog::Option"
    enumeration member, enabling the codebase to trivially enable path
    dialag options in a Pythonic manner. Notably, the
    "betsee.util.path.guidir" and "betsee.util.path.guipath" submodules
    now leverage these constants.