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.