Tags give the ability to mark specific points in history as being important
  • v0.9.2   BETSE 0.9.2 (Luckiest Levin) released. Significant changes include: * Downstream data dirname issues resolved. Previously, downstream consumers (e.g., the BETSEE GUI) were erroneously required to recreate rather than share the default simulation configuration provided by the BETSE codebase. This has now been resolved, reducing unseemly Don't Repeat Yourself (DRY). * Gene regulatory network (GRN) pathname issues resolved. Specifically, the "gene regulatory network settings/gene regulatory network config" setting in YAML-formatted simulation configuration files has now been generalized to be relative to the directory containing those files. * Resource consumption reduced. Matplotlib-based figures, graphs, plots, and animations are now properly destroyed on completion, substantially reducing memory usage during long-running simulation exports. * Deprecation warnings eliminated. The codebase now complies with all upstream deprecations, including breaking NumPy, py.test, and Python changes. Notably, NumPy >= 1.16 has deprecated the passing of arbitrary iterables to the np.column_stack() function, which now requires strict sequences: FutureWarning: arrays to stack must be passed as a "sequence" type such as list or tuple. Support for non-sequence iterables such as generators is deprecated as of NumPy 1.16 and will raise an error in the future. Since converting non-sequence iterables to sequences is trivial (ignoring the obvious edge case of infinite generators, which much like the legendary Pokemon of yore appear not to exist in the wild), NumPy developers chose poorly when they chose to explicitly break rather than implicitly resolve this non-issue. Thanks for generating more meaningless boilerplate, NumPy. * Significant continuous integration (CI) improvements, including: * Conda-forge-centric testing. All CI host environments (i.e., GitLab-CI, AppVeyor) now install all mandatory and optional application dependencies from the open-source volunteer "conda-forge" channel rather than the closed-source proprietary "anaconda" channel. Doing so better mimics real-world installation environments and enables us to begin exercising optional dependencies (e.g., FFmpeg, NetworkX, PyDot). * Early-time logging verbosity increased. To simplify testing maintenance, Early-time logging verbosity increased has now been increased during tests. * CI-specific decorators added. The new betse.util.test.pytest.mark.pytskip.skip_if_ci_gitlab() decorator skips the decorated test or fixture if GitLab-CI is currently hosting these tests. * The following previously failing tests have been corrected: * The test_packages_init() unit test, which is now conditionally skipped under GitLab-CI by the aforementioned decorator. GitLab-CI no longer clones this repository correctly, erroneously preserving empty subdirectories no longer tracked by git. While usually innocuous, empty subdirectories trigger false negatives from this unit test. Since this test succeeds both locally and under AppVeyor, GitLab-CI's misconfigured git checkout policy inexplicably remains the culprit. * The test_c_* pair of unit tests, which erupted into incoherent flames due to inappropriate assumptions about the internal structure of NumPy. NumPy 1.16.0 unified the prior public "numpy.core.multiarray" and "numpy.core.umath" C extensions into a new private "numpy.core._multiarray_umath" C extension. * The pivotal test_cli_sim_compat() functional test, which has now been reenabled in a manner seemingly incompatible with recent py.test changes. Since this test safeguards backward compatibility with respect to our YAML-based simulation configuration format, enabling this test is critical to long-term joy. * Installation-time improvements, including: * Substantial "setup.py" streamlining. The contents of our topmost setuptools-based installation script now reflect those of their counterpart in the BETSEE GUI -- which is to say, this script has been compacted into a fairly minimal line length. * "betse.metadata.PYTHON_VERSION_MINOR_MAX" addition. This integer global specifies the maximum minor stable version of the Python 3.x mainline, as required by this "setup.py" streamlining. * "betse_setup.buputil" streamlining. This submodule collects miscellaneous utility functions required only at BETSE installation. This submodule has now been reduced in length, reducing our maintenance burden. * Significant internal API improvements, including: * Application API creation. The new "betse.util.app" subpackage now provides: * The prior "betse.util.meta" subpackage, which has been subsumed under "betse.util.app.meta" for maintainability. * Application pathname API creation. The new "betse.util.app.apppath" submodule enables callers to query the absolute pathnames of application-relative paths regardless of application installation specifics (e.g., setuptools-based egg, frozen application). * Application initialization API centralized. The existing "betse.util.app.meta.metaappabc.MetaAppABC" superclass now centralizes all application initialization logic into a single coherent object-oriented API previously distributed throughout the codebase as a cacophony of incoherent procedural APIs not reusable by downstream consumers. This includes: * The "MetaAppABC" constructor, which now guarantees the current application to be completely initialized excluding third-party dependencies (e.g., NumPy, SciPy), whose initialization must necessarily be deferred until later in the application startup process. This constructor now entirely obsoletes the prior "betse.ignition" API. * The MetaAppABC.init_libs() method, which now initializes third-party dependencies (e.g., NumPy, SciPy) in a user-configurable manner late in the application startup process. This method now obsoletes a significant portion of the existing "betse.lib.libs" API. * The MetaAppABC.init_libs_if_needed() method, which efficiently simplifies the aforementioned process on behalf of low-level automation (e.g., dark voodoo in the "betse.science.__init__" module). * Application metadata singleton API creation. The new "betse.util.app.meta.metaappton" submodule centralizes all logic concerning the application metadata singleton previously residing in the "betse.metaapp" submodule. * Bitwise API creation. The new "betse.util.type.numeric.bits" submodule now provides general-purpose bit and bit field functionality, including an is_bit_on() function implementing a standard bit field testing routine. * Matplotlib Figure API creation. The new "betse.lib.matplotlib.mplfigure" submodule defines critical functionality for reliably closing matplotlib figures, a prevalent "pain point" in most matplotlib-based applications. * Testing API creation. The new "betse.util.test" subpackage now defines testing-specific APIs, including: * The new "betse.util.test.tests" submodule, defining general-purpose test suite functionality. This includes the is_testing() tester, enabling the codebase itself to query whether or not it is currently being tested. * The new "betse.util.test.tstci" submodule, defining CI-specific functionality. This includes one tester for each well-known CI host (e.g., is_ci_gitlab() for GitLab-CI), returning true only when the active Python interpreter is exercising tests on that host. * The new py.test API. The BETSE-specific and hence non-reusable "betse_test.util" subpackage has been moved to the BETSE-agnostic and hence reusable "betse.util.test.pytest" subpackage, enabling reuse by downstream consumers (e.g., BETSEE). * Class API generalizations. The "betse.util.type.cls.classes" submodule now defines a host of new general-purpose getter functions, including: * get_name_qualified(), obtaining the fully-qualified name of the passed class. The implementation proved highly non-trivial, due to common edge cases (e.g., classes with no or poorly defined modules). * get_module_name_qualified_or_none(), obtaining the fully-qualified name of the module defining the passed class if any or "None" otherwise. * Module API generalizations. A new "betse.util.py.module" subpackage has been created, replacing the prior "betse.util.py.pymodule" submodule. This subpackage provides the following new submodules: * "betse.util.py.module.pymodname", providing lookup facilities both to and from fully-qualified module names and their corresponding module objects. * "betse.util.py.module.pymodule", providing generic module handling. * "betse.util.py.module.pypackage", providing generic package handling -- notably, the get_object_type_package_root() function returning the root package transitively defining any arbitrary object's class. * String API generalizations. The existing "betse.util.type.text.strs" submodule now defines a holy trifecta of "get_prefix_preceding_char"-prefixed functions, enabling callers to obtain the prefix preceding any character in arbitrary strings. * Obsolete subdirectories removed, including: * The long-broken "doc/examples" subdirectory, whose code snippets have all non-working for at least several major application revisions. While documentation in and of itself is commendable, bad documentation is readily worse than no documentation. * The long-unused "betse/data/yamale" subdirectory.
  • v0.9.1   BETSE 0.9.1 (Luckier Levin) released. Significant changes include: * Cell boundary search radius increased, improving simulation stability in worst-case spatial layouts for user-defined cell clusters. * MetaAppABC API added. The new object-oriented "betse.metaapp" submodule replaces the prior procedural "betse.pathtree" submodule, enabling inheritance-fueled reuse from downstream consumers (e.g., BETSEE). The MetaAppABC API is intended to eventually encompass all general-purpose functionality required.to implement BETSE-like applications -- including application initialization, dependency resolution and initialization, and a nominal command-line interface (CLI). * Git API generalized. The new betse.util.path.gits.get_package_worktree_dirname_or_none() function queries whether a given top-level Python package is in Git-based development mode. * Numpy API generalized. The new betse.lib.numpy.nparray.get_subarray_indices() function efficiently yields the indices of all items of one Numpy array residing in another. * Path API generalized. The new high-level betse.util.files.copy_overwritable() function, wrapping the existing lower-level betse.util.files.copy() function for the common case of silently overwriting arbitrary target files. * String API generalized to support substantially enhanced truncation operations in the "betse.util.type.text.strs" submodule, including: * The new high-level truncate() function, truncating strings to caller-defined barriers (e.g., maximum length, terminal substring) and then replacing the truncated suffixes with arbitrary strings (e.g., ellipses). * The new replace_suffix_prefixed() function, prematurely truncating strings on impermissible substrings (e.g., newline). * The existing remove_suffix_with_prefix() function reduced to a one-liner, a substantial optimization preventing this function from erroneously raising exceptions in edge cases both common and uncommon. * The existing betse.util.type.text.regexes.die_unless_replace_substrs_line() function, now truncating internally raised exception messages for readability. * Version API generalized. The formerly mostly empty "betse.util.type.numeric.versions" submodule has been substantially improved, despite the inability of the setuptools-bundled "pkg_resources" API to preserve backward compatibility across stable releases. Our version API now portably allows versions in any of several formats (i.e., string, tuple, or setuptools-specific "Version" or "LegacyVersion" objects) to be reliably compared. PEP 440-compliant versions (e.g., "5.9.0") and PEP 440-uncompliant versions (e.g., "5.9.0~a1") are explicitly supported. * Version API tested. Unit tests fully exercising all edge cases of the "betse.util.type.numeric.versions" submodule have been added.
  • v0.9.0   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.
  • v0.8.4   BETSE 0.8.4 (Kindlier Kaufmann) released. Significant changes include: * Default time step for the cutting event reverted to 0.0 s (i.e., the initial time step). While this and prior releases technically permit the cutting event to occur at subsequent time steps, doing so currently results in fatal exceptions during the "betse plot sim" phase and hence is highly discouraged. This issue will be permanently resolved in the next stable release of BETSE - to be released shortly.
  • v0.8.3   BETSE 0.8.3 (Kindly Kaufmann) released. Significant changes include: * Dill >= 0.2.8 fundamentally broke backward compatibility by renaming the public "dill.dill" submodule to "dill._dill". This stable release restores compatibility with dill >= 0.2.3, including dill >= 0.2.8. * Mapping API marginally optimized. The betse.util.type.mapping.mappings.is_keys() function has been renamed for generality to is_key() and has now been optimized for the common edge case of testing key containment for a single key.
  • v0.8.2   BETSE 0.8.2 (Kindest Kaufmann) released. Significant changes include: * Segmentation fault handling. Developer-friendly tracebacks are now printed to standard error on fatal segmentation faults (i.e., low-level memory access violations by the active Python process). * Mapping API generalized. The "betse.util.type.mapping.mappings" API has been marginally improved with a bevy of convenience functions pertaining to efficient dictionary key removal.
  • v0.8.1   BETSE 0.8.1 (Kinder Kaufmann) released. This corrective re-release of the BETSE 0.8.0 bump amends a minor (albeit significant) oversight in our installation routine for "bare" Python environments (i.e., having no current NumPy installation). In short, there's largely nothing to see here.
  • v0.8.0   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.
  • v0.7.0   BETSE 0.7.0 (Jamboree Jackson) released. Significant changes include: * Dynamic ion channels significantly rewritten. Backward compatibility-breaking changes include: * *OBSOLETE YAML CONFIGURATION SECTION REMOVED.* Users are encouraged to switch to the existing gene regulatory network (GRN) formalism, which provides more reliable dynamic channels support. See the "channels" subsection of the "general network" section in the default YAML file. * Pump- and channel-specific electroosmosis removed. Users are encouraged to switch to the existing gene regulatory network (GRN) formalism, which provides more reliable electroosmosis support. * Configuration changed from conductivity to membrane diffusion constants, improving consistency with the remainder of the BETSE codebase. * Endoplasmic reticulum (ER) calcium dynamics removed entirely. * All existing CaV channels renamed for clarity. (Requested by Cassandra.) * Multiple new CaV channels added. (Requested by Cassandra.) These include: * N-type CaV 2.2 channel. * Channel API generalized for external use outside of BETSE (e.g., Jupyter). * Z-offset support in modulator functions. (Requested by Micah Brodskey.) * Simulation time updates solved with the backward (implicit) Euler method. * Gap junctions modelled with the Goldman-Hodgkin-Katz (GHK) flux equation. * Negative concentrations causing "non-conservative" instabilities detected during simulation, triggering human-readable fatal exceptions. * Positive concentrations updated properly via dynamic dictionaries. * "show cells: False" plot output aesthetically improved. (Caveat: this option now assumes convert rather than concave cell cluster shapes.) * Voronoi grid construction slightly improved. * Setuptools >= 38.0.0 compatibility resolved, permitting BETSE to be portably installed under all setuptools versions. Setuptools >= 38.0.0 broke backward compatibility by prohibiting unordered iterables (e.g., sets) in prominent "setup.py" parameters that previously accepted such iterables. *sigh* * Image I/O API created. The new "betse.lib.pil" subpackage aggregates all functionality specific to Pillow, the PIL-compatible fork serving as this application's low-level image processing framework. * Expression alias API sanitized, raising human-readable exceptions on erroneous access to expression alias values. * Directory API sanitized, raising human-readable exceptions from recursive directory functions. * Object API sanitized, permitting object attributes and methods to be dynamically accessed in a "safe" sentinel-based manner. * YAML API generalized, enabling all YAML (sub)configurations to be loaded and unloaded in a general-purpose manner.
  • v0.6.1   BETSE 0.6.1 (Illuminous Ito) released. Significant changes include: * Trivial woes in the prior release resolved, including: * Permission issues during "pip3"-based installation. * Rendering issues during reStructuredText (reST) to HTML conversion on PyPI. * Release instructions improved to avert these woes in the future.
  • v0.6.0   BETSE 0.6.0 (Illustrious Ito) released. Significant changes include: * Core bioelectric features significantly improved, including: * Cell polarizability. * Charge balance in gene regulatory networks. * Electroosmotic flow, leveraging a new electric field formalism operating on free charge. * Extracellular currents. * Extracellular fields, now "...100% consistent with Maxwell's Equations to produce long-range electric fields in conjunction with (and balancing) ion currents resulting from Nernst-Planck electrodiffusive transport." * Fluid flow. * Flux transfer between the environment and cell cluster. * Microtubule alignment. * Modulator functions. * pH (i.e., hydrogen cations). * Voltage-gated calcium channels (e.g., CaV). * Voltage-gated potassium channels (e.g., Kv). * Gene regulatory network (GRN) features added, including: * Piggybacking, permitting GRNs to be efficiently simulated over previously simulated simulations without inefficiently resimulating underlying physics. * Network optimizer, permitting gene regulatory networks to be efficiently optimized in isolation. * Substances may now be transmembrane components subject to electrophoretic or electroosmotic forces acting from the extracellular space. * Substances may now leverage electrophoretic mobility instead of calculating Einstein's coefficient, intended for larger macromolecules exhibiting low diffusion but significant mobility (in which case the Einstein coefficient is an unsuitable estimate of mobility). * Substance smoothing reduced significantly (i.e., from 1:2 to 1:100). * "betse sim-brn" subcommand removed, obsoleted in entirety by the "betse sim-grn" subcommand simulating gene regulatory networks. * Two-dimensional Cartesian geometry primitives added, including: * Cell cluster (and hence Voronoi diagram) boundaries resected via the well-known Sutherland-Hodgman polygon clipping algorithm. * Point-line intersection (i.e., intersection of two lines). * Point-vector spatiality (i.e., whether arbitrary points reside to the right or left of arbitrary vectors). * Matplotlib backend detection significantly improved. Specifically, the Qt 5-based "Qt5Agg" backend is now BETSE's preferred backend under all recent releases of matplotlib (i.e., matplotlib >= 2.0.0). Under older releases of matplotlib, the obsolete Tcl/Tk-based "TkAgg" backend remains our preferred backend for stability. * Transparency automatically enabled in all animation images and video for all file formats supporting transparency (e.g., PNG). * Large-scale refactoring of simulation features for downstream use by BETSEE (the Qt 5-based BETSE GUI), including: * Spatial settings (e.g., cell lattice type, computational grid size, physical world size). * Temporal settings (e.g., time step, sampling rate). * Cut profiles. * Ion profiles. * Tissue profiles. * Object-YAML mapping (OYM) API generalized into the "betse.lib.yaml" subpackage, providing an elegant pure-Python solution (driven by data descriptors) to transparently mapping between in-memory high-level Python objects and on-disk low-level YAML files. * Backward compatibility API generalized into the new "betse.science.config.confcompat" and "betse.science.simulate.simcompat" submodules. * CLI API generalized into the new "betse.util.cli" subpackage, eliminating excess boilerplate in downstream CLI applications. * Current working directory (CWD) API generalized into the new "betse.util.os.shell.shelldir" submodule. * Enumeration API generalized into the new "betse.util.type.enums" submodule. * Exception handling API generalized into the new ""betse.util.io.ioexceptions" submodule. * Float API generalized, providing both validation and conversion of floating point numbers in either decimal or scientific notation. * Pathname API generalized into the new "betse.util.path.pathnames" submodule. * Textual APIs (e.g., raw string, regular expression, version specifier) generalized into the new "betse.util.type.text" subpackage. * Matplotlib colormap API generalized into the new "betse.lib.matplotlib.mplcolormap" subpackage. * Recursive file and directory mtime (modification time) discovery, providing efficient inspection and comparison of filesystem contents. * Sane default dictionary implementation now provided by the new "betse.util.type.mapping.mapcls.DefaultDict" class. * Matplotlib >= 1.5.0 now required. * Matplotlib >= 2.0.0 now supported. * SciPy >= 1.0.0 now supported. Specifically, the third-party image processing framework Pillow is now leveraged in lieu of the now-deprecated scipy.misc.imread() function for low-level image I/O. * Nominal "ruamel.yaml" compatibility. While we have yet to officially flip the switch on this alternate Python YAML implementation, BETSE now (in theory) supports roundtripped I/O via "ruamel.yaml". * Python 3.6 officially supported. * Python 3.6 support exercised with Windows-based AppVeyor CI. * New functional tests exercising: * Backward compatibility with all simulation configurations and pickled files produced by BETSE >= 0.5.0. * Our default simulation configuration.
  • v0.5.2   BETSE 0.5.2 (Happiest Hodgkin) released. This interim point release is both a 0.6.0 release candidate and now the oldest version for which backward compatibility is intended to be preserved, superceding the recent 0.5.1 release in that respect. Since this point release is principally required to validate backward compatibility by functional tests locally referencing the corresponding Git tag (i.e., "v0.5.2"), no release notes are provided. See the following 0.6.0 release for proper release notes. For similar reasons, no PyPI tarball or third-party packages are intended to be produced for this (possibly unstable) point release.
  • v0.5.1   BETSE 0.5.1 (Happier Hodgkin) released. This interim point release is both a 0.6.0 release candidate and the oldest version for which backward compatibility is intended to be preserved. Since this point release is principally required to validate backward compatibility by functional tests locally referencing the corresponding Git tag (i.e., "v0.5.1"), no release notes are provided. See the following 0.6.0 release for proper release notes. For similar reasons, no PyPI tarball or third-party packages are intended to be produced for this (possibly unstable) point release.
  • v0.5.0   BETSE 0.5.0 (Happy Hodgkin) released.
  • v0.4.1   BETSE 0.4.1 (Gladder Galvani) released.
  • v0.4.0   BETSE 0.4.0 (Glad Galvani).
  • v0.3.0   BETSE 0.3.0 official release.
    d7687e75 · BETSE 0.3.0 stabilized. ·
  • v0.2.1   BETSE 0.2.1 official release.
  • v0.2   Official 0.2 release. This commit marks the second official release version of BETSE.
  • v0.1   Official 0.1 release. This commit marks the first official release version of BETSE.