Skip to content
BETSE 0.9.0 (Lucky Levin) released.

Significant changes include:

* Python >= 3.5 required. In accordance with the looming end-of-life
  (EOL) of Python 3.4, BETSE now strictly requires at least Python 3.5.
* Single-cell plots added. The following two single-cell plots may now
  be added to both the initialization  and simulation export pipelines:
  * "ion_calcium_er", plotting all calcium (i.e., Ca2+) ion
    concentrations for the endoplasmic reticulum of the single cell
    indexed by the current simulation configuration over all sampled
    time steps.
  * "voltage_membrane_er", plotting all transmembrane voltages across
    the endoplasmic reticulum of the single cell indexed by the current
    simulation configuration over all sampled time steps.
* Deprecation warnings resolved. Deprecation warnings emitted by
  py.test >= 3.1.0, Python >= 3.6, and recent versions of Numpy have
  been summarily squelched.
* Simulation callbacks substantially improved, improving UX
  responsiveness in downstream consumers (e.g., BETSEE). Specifically:
  * Seed progress granularized. Progress for the seed phase is now
    reported in a more granular (i.e., fine-grained) manner.
  * Export progress. Progress on exporting CSV files, plots, and
    animations from both the initialization export (i.e., "betse plot
    init") and simulation export (i.e., "betse plot sim") phases is now
    reported in a highly granular manner.
  * Callbacks API generalized. Specifically, in the
    "betse.util.type.call.callbacks" submodule:
    * The new CallbacksBC.progress_stated() callback enables source
      callables to notify sink callbacks of arbitrary human-readable
      strings informing end users of the current state of progress. As
      semantic sugar, the existing CallbacksBC.progressed_next()
      callback has been augmented to accept the same strings.
    * The new CallbacksABC.progressed_last() callback enables source
      callables to safely iterate progress, improving robustness and
      maintainability.
* Simulation variables streamlined. Specifically:
  * All core simulation pathname variables now reside in the central
    "Parameters" class rather than distributed across both that and the
    "Cells" and "Simulator" classes, reducing logic across the codebase.
  * The obsolete "Parameters.total_time_accelerated" variable has been
    removed.
  * All but one reference to the obsolete "Parameters._run_sim" boolean
    have been removed in lieu of the "SimPhase.kind" enumeration.
  * The obsolete Parameters.set_time_profile() method has been
    refactored into the SimPhase._init_kludge_time() method.
  * The "Parameters.init_tsteps" and "Parameters.sim_tsteps" variables
    are now unconditionally defined rather than only conditionally
    defined when the SimPhase._init_kludge_time() method is called.
* Matplotlib API sanitized. The antiquated
  "betse.lib.matplotlib.matplotlibs" submodule now complies with the
  modern Matplotlib API in a robust manner. Specifically:
  * Headless Qt blacklisted. The default "Qt5Agg" backend is now
    blacklisted when the current process is headless, preventing
    Matplotlib from silently terminating this process.
  * Visualization API improved. The "betse.science.visual.visabc"
    submodule has been improved to preferentially leverage the
    object-oriented Matplotlib API over the procedural "pyplot" API
    where feasible, reducing unexpected exceptions from backends.
* Installation sanitized. Specifically:
  * The top-level "MANIFEST.in" file now explicitly includes and
    excludes all installation-time paths as appropriate.
  * The top-level "setup.py" script now conforms to the more succinct
    and hence saner approach of downstream consumers (e.g., BETSEE).
* Descriptor API added. The new "betse.util.type.descriptor.descs"
  submodule defines general-purpose descriptors, including the
  @classproperty_readonly and @abstractclassproperty_readonly decorators
  implementing concrete and abstract read-only class properties
  respectively.
* Iterable subpackage added. The new "betse.util.type.iterable"
  subpackage now aggregates all subpackages pertaining to container
  datatypes (e.g., iterables, queues, sequences). Specifically:
  * Queue API added. The new "betse.util.type.iterable.queues" submodule
    now aggregates queue-centric functionality, including the efficient
    popping of multiple items from the head of a queue.
  * Tuple API added. The new "betse.util.type.iterable.tuples" submodule
    now aggregates tuple-centric functionality, including the efficient
    creation of named tuple subclasses.
* CLI API generalized. The
  "betse.util.cli.clicmdabc.CLISubcommandableABC" abstract base class
  now helpfully provides a sane implementation of the abstract
  _help_epilog() property, simplifying subclass implementation.
* Class decorator API generalized. The new
  @betse.util.type.decorator.abstractclassmethod decorator trivially
  enables definition of abstract class methods.
* Enumeration API generalized. The new
  betse.util.type.enums.get_member_from_value() function expands the
  functionality provided by the existing
  betse.util.type.enums.get_member_from_name() function to enumeration
  member values.
* Objects API generalized. The "betse.util.type.obj.objects" submodule
  has been improved to:
  * Enable callers to pass both classes and tuples of classes to
    relevant submodule functions (e.g., die_if_instance()).
  * Provide additional general-purpose getters for dynamically
    retrieving arbitrary object attributes.
* Threading API generalized. The "betse.util.py.pythread" submodule now
  provides quasi-portable functionality for validating whether the
  active Python interpreter leverages a Global Interpreter Lock (GIL).
* Weak reference API generalized. The betse.util.py.pyref.refer_weak()
  function now transparently creates weak references to bound methods,
  which require special handling to avoid subtle race conditions.
* Module API shifted. The prior "betse.util.type.modules" submodule has
  now been renamed to "betse.util.py.pymodule" for orthogonality.
* Continuous integration (CI) test suite improved. Specifically:
  * Default simulation test expanded. The "betse_cli_sim_default"
    functional test now exercise all simulation subcommands (i.e., seed,
    initialization, and simulation) rather than merely the seed and
    initialization subcommands, reducing the likelihood of edge-case
    computational instabilities.
* Reference documentation improved. Specifically:
  * Project badges (i.e., flat images synopsizing project health) have
    been externalized from our front-facing "README.rst" document into
    corresponding GitLab-aware project settings, improving both badge
    visibility and aesthetics.
  * The betse.util.py.pyref.proxy_weak() function docstring has been
    significantly revised in accordance with the actual behaviour of the
    underlying weakref.proxy() function.