Skip to content
BETSE 0.8.0 (Kind Kaufmann) released.

Significant changes include:

* Official Anaconda release. This is the first major release of BETSE to
  officially support our new conda-forge-hosted Anaconda package at:
        https://anaconda.org/conda-forge/betse
* Installation instructions simplified. Installation instructions in our
  front-facing "README.rst" documentation have been substantially
  simplified to reflect our official Anaconda release.
* Fast simulation solver added. As an efficient alternative to the usual
  full simulation solver, the newly developed fast solver implements a
  less space- and time-intensive formalism for simulating a subset of
  bioelectric phenomena. Specifically, the fast solver leverages the
  well-known equivalent circuit model to simulate core bioelectricity
  optionally coupled to a gene regulatory network (GRN). As a crude
  heuristic, cursory inspection shows the fast solver to be
  approximately 500—2000% faster than the full solver. Bioelectric
  phenomena supported by the fast solver includes:
  * Transmembrane potential (Vmem).
  * Voltage-sensitive gap junctions.
  * Intracellular currents and fields.
  All other bioelectric phenomena should be assumed to be unsupported.
* Microtubule density maps and initial-condition alignment maps. These
  maps are user-defined image mask files permitting any simulation to
  preconfigure various properties pertaining to microtubules for that
  simulation's cell cluster.
* Morris-Lecar ion channels. Ion channels based on the Morris-Lecar
  formalism (including a so-called "slow" Morris-Lecar channel) have now
  been added.
* Biomolecule degradation activation and inhibition. Degradation of
  arbitrary biomolecules in gene regulatory networks (GRN) may now be
  configured via customary activation and inhibition relations.
* Surgical interventions generalized. Cell clusters may now be
  surgically cut at any arbitrary time step of a simulation. Previously,
  surgical cuts were only supported at the first time step.
* "sim-grn" dynamic cutting support. The "betse sim-grn" subcommand
  simulating a gene regulatory network (GRN) isolated from bioelectric
  phenomena now supports all standard surgical interventions.
* Extracellular matrix (ECM) handling finalized. Main
  electrophysiological properties of our standard planarian model have
  now been successfully matched to experimental observation (e.g., as
  compiled by several prominent planarian theses), validating our
  handling of the extracellular matrix (ECM). These properties include:
  * Transepithelial potential (TEP) level.
  * Transepithelial potential (TEP) under an applied exogenous field.
  * Current magnitude and direction.
* Lloyd's Voronoi mesh optimization. The pseudo-random Voronoi mesh
  underlying each cell cluster has now been optimized using Lloyd's
  algorithm, improving simulation accuracy and substantially reducing
  the likelihood of mesh errors inducing computational instabilities.
* Realistic cell polarizability algorithm. An improved algorithm for
  simulating the polarizability of cells has now been implemented.
* Microtubule Gaussian-noise distribution. Microtubules may now be
  distributed according to a proper Gaussian-noise distribution.
* Numerous locomotion issues resolved, including:
  * Mass conservation issues in motor protein transport.
  * Gap junction-isolated profiles.
  * Microtubule transport.
  * Laplacians, including:
    * Cell-grid Laplacians.
    * Voronoi grid Laplacians.
* Comma-separated value (CSV) file exports pipelined. CSV files are now
  exported via our standard pipeline infrastructure much like all other
  exports (e.g., plots, animations), enabling the "plot init" and
  "plot sim" subcommands to trivially support the fast solver.
* Seed exports generalized. All exports previously created via only the
  "betse plot seed" subcommand are now general-purpose exports created
  via all plotting subcommands (e.g., both the "betse plot init" and
  "betse plot sim" subcommands). These exports includes:
  * "cluster_mask" for the all-cells image mask defining the cell
    cluster shape.
  * "diffusion_extra" for final all-cells extracellular diffusion
    weights (logarithm-scaled). Ignored if extracellular spaces are
    disabled.
  * "gj_connectivity" for the all-cells gap junction connectivity network.
  * "gj_permeability" for final all-cells gap junction relative
    permeabilities.
  * "tissue_cuts" for all-cells tissue and cut profiles.
* Simulation configuration file documentation improved. To simplify
  usage, the configuration file now documents all simulation features
  required by each type of export -- which usually means the full solver.
* Simulation configuration creation generalized. Simulation
  configurations created by the "betse config" subcommand now ignore all
  existing files in target subdirectories (e.g., "geo/"), permitting
  users to create multiple configurations in the same directory.
* Simulation runner callback API. The new
  "betse.science.phase.phasecallbacks" class hierarchy provides a
  general-purpose mechanism for interested callers (notably, the BETSEE
  GUI) to register low-level callbacks with instances of the high-level
  "SimRunner" class responsible for running simulation subcommands and
  hence phases. Currently, these callbacks include methods to receive
  periodic updates on simulation progress. The three principal
  simulation subcommands (i.e., seed, initialization, and simulation)
  now inform callers of incremental progress with respect to work
  performed.
* Simulation runner API generalized. The SimRunner.__init__() method now
  accepts a "Parameters" object rather than a simulation configuration
  filename, enabling callers (notably, the BETSEE GUI) to reconfigure
  simulation parameters in-memory without writing changes back to disk.
* Simulation phase API sanitized. The "Simulator.dyna" and
  "SimPhase.dyna" tissue handlers are now synonyms rather than
  duplicates of one another, improving sanity throughout the codebase.
  Although the former has been temporarily preserved, all code requiring
  a tissue handler should now use the canonical "phase.dyna" object.
* Script API removed. The "betse.script" subpackage has been removed.
  This API had begun to unsafely bit-rot, had remained unused by end
  users for several years, and could no longer be reasonably maintained.
  It is dead.
* REPL API disabled. The "betse.cli.repl" API has been moved to
  "betse.util.cli.repl" and temporarily disabled until further notice.
  This API had also begun to unsafely bit-rot, but could yield tangible
  benefit at some future date. This API has been preserved in cold
  storage until it can be resuscitated by a future development effort.
  It isn't dead; it's merely sleeping for eternity.
* Simulation phase requirements API generalized. The existing
  "betse.science.phase.require" subpackage has been refactored to
  leverage immutable sets, permitting two or more lower-level simulation
  phase requirements to be readily composed into a high-level simulation
  phase requirement.
* KDTree -> cKDTree optimization. For efficiency, all prior usage of the
  pure-Python "KDTree" class has been refactored to leverage the C-based
  "cKDTree" class instead. The latter is a drop-in replacement for the
  former commonly providing speedups in kd-tree queries of up to 4000%.
  Doing so also permits all kd-tree instances to be trivially pickled.
* Numpy array validation API. The new "betse.lib.numpy.nptest" submodule
  now provides optimized routines for testing and validating Numpy
  arrays -- notably, whether a given array contains one or more
  Not-a-Number (NaN) values or not.
* Numpy-based image loading API improved. The existing
  "betse.lib.pil.pilnumpy" submodule deserializing arbitrary image files
  into Numpy arrays has now resolved a critical defect pertaining to
  signed versus unsigned data types, reducing the likelihood of
  computational errors on the resulting Numpy arrays.
* Simulation phase enumerations isolated. For maintainability, the central
  "betse.science.phase.phasecls.SimPhaseKind" enumeration has been shifted
  into the newly created "betse.science.phase.phaseenum" submodule.
* @log_time_seconds decorator. All simulation subcommand methods (e.g.,
  betse.science.simrunner.SimRunner.seed()) are now decorated by the new
  @log_time_seconds decorator defined by the new
  "betse.util.type.decorator.decprof" submodule, logging wall clock time
  in fractional seconds consumed by each such subcommand.
* @abstractproperty decorator de-deprecated. Python >= 3.3 deprecated
  the @abc.abstractproperty decorator, for unwise and frankly
  incomprehensible reasons. This release locally reverts this
  deprecation by restoring the @abstractproperty decorator in perpetuity
  under the rubric of the "betse.util.type.decorators.deccls" submodule.
* @type_check decorator generalized. The @type_check decorator widely used
  throughout the codebase to perform type checking of callable parameters
  now supports tuple annotations containing both class objects and
  fully-qualified classnames, finally finalizing this decorator.
* Matplotlib >= 2.2.0 compatibility. Matplotlib 2.2.0, the most recently
  released version of matplotlib as of this writing, accidentally broke
  backward compatibility in a horrifying manner. The long-standing
  public "matplotlib.verbose" API was removed in favour of the standard
  "logging" API -- a dramatic upheaval so terrifying it even broke
  PyCharm. This release permanently resolves the breakage on our end by
  dynamically detecting the current version of matplotlib at runtime
  such that:
  * For matplotlib >= 2.2.0, matplotlib logging is configured via the
    standard "logging" API.
  * For matplotlib < 2.2.0, matplotlib logging is configured via the
    non-standard "matplotlib.verbose" API. Since this API is now deprecated
    and expected to be properly removed in six months, this API is only
    safely accessible under older versions of matplotlib.
* Test suite expanded. Continuous integration (CI) now exercises most
  simulation features with comprehensive tests, including:
  * Fast simulation solver.
  * The "betse sim-grn" subcommand simulating a gene regulatory network
    (GRN) isolated from bioelectric phenomena. Exercised features include:
    * Piggybacking onto an uninitialized, unsimulated cell cluster.
    * Piggybacking onto an initialized, unsimulated cell cluster.
    * Piggybacking onto an initialized, simulated cell cluster.
    * Restarting from the last time step of a prior GRN run.
* Project logo adopted. The official logo for this release of BETSE is
  an aesthetic flat icon bundled with Maxim Kulikov's Noun
  Project-hosted "Cows" collection, kindly released under the permissive
  BSD-compatible CC BY 3.0 license.