Scroll to TOP of page
Life123 : Dynamical Modeling of Biological Systems
HomeQUICK START / 1-clickTechnologyExperimentsGuideVisualizationDiffusionReactionsMembranesHistoryDownloadContact / Participate

Version History

* GitHub Repository * 1-click live demo: try out the latest version!

Date

(MOST RECENT at top)

New Additions & Bug Fixes

(all main branch unless otherwise specified)

July 25, 2024

Beta 37

Upgrade in progress. THIS SECTION IS BEING EDITED


EXPERIMENTS (listing of all experiments)

  • Simplified log exports with the library ipynbname
  • Started introducing tips about dealing with failed python imports
  • Expanded experiments react_2_a and react_2_b
  • Updated experiments react_1, react_2_c and enzyme_4


MAIN INFRASTRUCTURE

  • Reaction rates are now saved alongside other diagnostic data
  • Diagnostics-related parts of class UniformCompartment moved to a separate class, Diagnostics, in "diagnostics.py"
  • Chemicals passed to add_reaction(), in various modules, no longer have to be pre-registered
  • Added new function check_version() to file "__init__.py"


SUPPORTING LIBRARIES

  • Tweaks to UniformCompartment.plot_history()
  • Changes to compute_all_reaction_rates(), now renamed UniformCompartment.compute_all_reaction_deltas()
  • Renamed UniformCompartment.set_diagnostics() to enable_diagnostics()
  • New method AllReactions.get_chemicals_indexes_in_reaction()
  • Renamed class RxnDynamics to ReactionDynamics, and moved it into a separate file, "reaction_dynamics.py"; moved into it several object variables and methods from the class UniformCompartment


VISUALIZATION

  • New method UniformCompartment.plot_data()


DOCUMENTATION

  • Expansion and restructuring of the Reactions page
  • Fixed broken repository links in Guide, from the recent major project restructuring


DEPLOYMENT

  • Fixed version jsonschema==4.17.3 in requirements.txt
  • Upgraded version of the neoaccess library
  • Dropped requirements for libraries ipywidgets and jupyter-dash
  • Tweaks to "quick.bat", the batch file to start JupyterLab

June 23, 2024

Beta 36



(Beta 34 and 35 not released)

CORE / NEW FEATURES

  • Life123 is now available from the standard PyPI release :   pip install life123


EXPERIMENTS (listing of all experiments)

  • Updated all experiments, to reflect the new import names


MAIN INFRASTRUCTURE

  • Major overhaul of file structure, readied for PyPI release


SUPPORTING LIBRARIES

  • Ditched obsolete class "ReactionDynamics" and obsolete method UniformCompartment.curve_intersection()


VISUALIZATION

  • Ditched matplotlib and a test notebook using it. (Note: plotly has long been used instead.)


DEPLOYMENT

  • Faulty releases Beta34 and 35 were withdrawn (PyPI release is the same for 35 and 36)


DOCUMENTATION

June 15, 2024

Beta 33

CORE / NEW FEATURES

  • Improved management of variable time steps for networks of reactions, employing new norms (measures of change/imminent onset of instability), more presets, and better integration of the norm values


EXPERIMENTS (listing of all experiments)

  • Updated a large number of experiments, to reflect all code changes
  • Variable-timestep presets are now used in all experiments that previously set individual low-level parameters


MAIN INFRASTRUCTURE

  • Renamed class ReactionDynamics to UniformCompartment


SUPPORTING LIBRARIES

  • UniformCompartment (formerly named ReactionDynamics) :

    Taken out several methods, and moved them to new separate static class, "RxnDynamics"

    New methods update_thresholds() and delete_thresholds()

    For variable time steps, added several new presets and two new norms (measures of change), norm_C and norm_D

    Previous system state at tn-1 is now kept, and used by the new norms

    Norm usage is now stored and displayed

    Changes in the return value of adjust_timestep(), and other enhancements

    Absorbed the "error_abort_step_factor" class property into the "step_factors" dict class property

    In single_compartment_react(), argument name change from "reaction_duration" to "duration", and changed argument "explain_variable_steps" from Boolean to pair (start-end time)

    Tweaks to output when using argument "explain_variable_steps"

    Replaced the method curve_intersection() with the new curve_intersect()

    Tweaks to plot_history()

    Ditched obsolete criterion_fast_reaction()

  • AllReactions:

    New method number_of_active_chemicals()


DOCUMENTATION


BUG FIX

  • Bugfix, and additional validation, in set_thresholds()

May 31, 2024

Beta 32

CORE / NEW FEATURES

  • Implementation of additional termination criteria for reaction simulations


EXPERIMENTS (listing of all experiments)


MAIN INFRASTRUCTURE

  • Added file src/__init__.py


SUPPORTING LIBRARIES

  • ReactionDynamics

    Added argument "preset" in class constructor; deprecated argument "shared"

    Added arguments "max_steps" and "stop" to single_compartment_react(); renamed argument "reaction_duration" to "duration"

    Added new "slower" preset to use_adaptive_preset()

    Changes to set_conc()

    Small correction to display_thresholds()

    Streamlined method curve_intersection(), now renamed curve_intersect()

    New argument "verbose" to is_in_equilibrium() ; tweaks to reaction_in_equilibrium()

  • ChemData:

    Light re-organization

    Enforcement of unique chemical names

    New method name_exists()

    Added argument "name" to Diffusion.get_diffusion_rate()

    Renamed argument "diffusion_rate" to "diff_rate" in add_chemical_with_diffusion()

    New methods AllReactions.inactivate_reaction(), active_reaction_indices(), indexes_of_active_chemicals()

    Added argument "include_inactive" to number_of_reactions()

  • Reaction:

    Major change in internal data structure: chemical names now used instead of their indices; the "AllReactions" class is no longer passed during object instantiation

    New methods extract_reactant_names() and extract_product_names()

    Enhancement to reaction_quotient()

  • Numerical:

    Extended curve_intersect_interpolate()

    New method reach_threshold()

    Overhauled the implementation of curve_intersect_interpolate(), now renamed curve_intersect()


DOCUMENTATION

  • Updated the affected Reference Guides
  • Misc. enhancements and problem fixes on the website


BUG FIX

  • Bugfix to AllReactions.clear_reactions_data()
  • Bugfix to ReactionDynamics.plot_history()

May 7, 2024

Beta 31

CORE / NEW FEATURES

  • Improved visualization of networks of reactions (details below). Development has been shared with sister project BrainAnnex.org


EXPERIMENTS

  • Updated all experiments affected by the changes


MAIN INFRASTRUCTURE

  • General re-organization


SUPPORTING LIBRARIES

  • Added utilities\comparisons.py


VISUALIZATION

  • Enhanced visualization of networks of reactions, using Vue component vue_cytoscape_2
  • New class PyGraphVisual
  • New method HtmlLog.export_plot_Vue_unpack_args()
  • New argument "unpack" to GraphicLog.export_plot()
  • New method ReactionDynamics.plot_reaction_network()
  • Changes to ChemData.prepare_graph_network()


DOCUMENTATION


BUG FIX

  • In network visualizations, corrected issue of some reactions parameters being incorrectly shown on nodes of graph structure, when they should have appeared on edges
  • Corrected relative paths in src\modules\visualization\graphic_log.py

EXAMPLE.   From experiment A cycle of reactions (CLICK ON IMAGE BELOW FOR INTERACTIVE VERSION):

CLICK ON IMAGE FOR INTERACTIVE VERSION : Network Visualization in release Beta 31

Dec. 9, 2023

Beta 30.1

CORE / NEW FEATURES

  • Streamlined and simplified the programming interface
  • Added more data-analysis tools


EXPERIMENTS


MAIN INFRASTRUCTURE

  • For single-compartment reactions, the new default is variable adaptive time steps
  • Changed default reaction orders to the stoichiometry coefficients


SUPPORTING LIBRARIES

  • ReactionDynamics:

    New methods estimate_rate_constants(), find_equilibrium_conc(), solve_exactly(), number_of_reactions(), add_reaction(), describe_reactions(), prepare_graph_network(), show_adaptive_parameters(), use_adaptive_preset()

    Added "columns" argument to get_history()

    Simplified reaction_in_equilibrium(); added handling of pathological cases

    Improvements to stoichiometry_checker() ; dropped argument "suppress_warning"

    Enhancements to set_single_conc()

    Added arguments "names" and "shared" to the class constructor

    Cleanup of obsolete code; adjustments to some default values

  • Reaction:

    New methods extract_equilibrium_constant(), reaction_quotient()

  • ChemData:

    Change in value returned by add_reaction()

  • Numerical:

    New methods gradient_uneven_grid(), _finite_diff_weights()

    Tweaks to _compute_gradient() , now renamed _compute_derivative()


VISUALIZATION

  • New class "PlotlyHelper", with methods get_default_colors(), plot_curves(), combine_plots();
  • Using this new class, streamlined ReactionDynamics.plot_curves(), and renamed it plot_history(); added arguments "show" and "ylabel", and dropped "suppress"


DOCUMENTATION

  • Added section on "Exact Solution of the 1st Order Reaction A <=> B" to the Reactions page
  • Updated all the Reference Guides, and overhauled their graphic appearance (especially their Tables of Contents navigation)
  • Improved layout and navigation in the Experiments page

Nov. 4, 2023

Beta 29

CORE / NEW FEATURES

  • Expanded support for enzymes


EXPERIMENTS


SUPPORTING LIBRARIES

  • Split off the class ThermoDynamics from "reactions.py" into its own file, "thermodynamics.py"
  • Tighten check for identical reaction sides when instantiating class Reaction
  • Expanded the data now returned by Reaction.extract_rxn_properties()
  • Added object property "active_enzymes" to class ChemCore; updated add_reaction() accordingly,
  • The class ChemData now also accepts a string as "name" argument, in case of a single chemical
  • New method ChemCore.all_chemicals()
  • Tweaks to ChemCore.get_all_names() and add_chemical_species()
  • Renamed ReactionDynamics.set_chem_conc() to set_single_conc()


VISUALIZATION

  • Enhancement to ReactionDynamics.plot_curves()


DOCUMENTATION

July 14, 2023

Beta 28.2

CORE

  • Early support for macro-molecules : binding affinities (dissociation constants) and fractional occupancy based on ligand concentration
  • Methods for macromolecule data struncture: Macromolecules.add_macromolecules(), get_macromolecules(), set_binding_site_affinity(), get_binding_site_affinity(), get_binding_sites(), get_binding_sites_and_ligands(), get_ligand_name(), show_binding_affinities(), reset_macromolecule(), clear_macromolecules()
  • Methods for macromolecule dynamic simulation: ReactionDynamics.set_macromolecules(), set_occupancy(), get_occupancy(), update_occupancy(), sigmoid(), logistic()
  • New data class ChemicalAffinity
  • Added object variables ReactionDynamics.macro_system_state and macro_system
  • Exteded the method describe_state(), to cover macromolecules


EXPERIMENTS

  • New experiment, in folder "reactions_single_compartment/" : macromolecules_1 (listing of all experiments)
  • Updated all the other experiments, to reflect the change in the location of the ChemData library


MAIN INFRASTRUCTURE

  • New method ReactionDynamics.get_chem_conc()
  • Renamed constructor argument, and object variable, from "reaction_data" to "chem_data", in class ReactionDynamics


SUPPORTING LIBRARIES

  • Renamed "reactions/reaction_data.py" to "chemicals/chem_data.py"
  • Dropped argument "n_species" from instantiation of class ChemData
  • Split off from the class ChemData the new classes ChemCore, Diffusion, AllReactions, Macromolecules
  • Diffusion data is now internally stored differently – and separately from other molecular data
  • Dropped the object property ChemData.n_species and the method _internal_reactions_data()
  • New method MovieTabular.clear_dataframe()
  • Updated version of the NeoAccess library to 4.3.1


VISUALIZATION

  • New argument "range_x" to ReactionDynamics.plot_curves(); tweaks to default colors


DOCUMENTATION


BUG FIX

  • Bugfix in method ReactionDynamics.set_conc()

EXAMPLE.   From experiment macromolecules_1:

Release Beta 28.2

June 4, 2023

Beta 27

CORE

  • Support for enzymes, including data structure, detection, reporting, and efficient computing


EXPERIMENTS

  • New experiments (all in folder "reactions_single_compartment/") : enzyme_1 and state_space_1


MAIN INFRASTRUCTURE

  • Changes to the class ReactionDynamics, for increased modularity, in the context of the new class Reaction


SUPPORTING LIBRARIES

  • Split the class ReactionData into ChemData and Reaction, and more pytests
  • Renamed some arguments in ChemData.add_reaction()
  • Tweaks to ChemData.multiple_reactions_describe() and Reaction.describe()


VISUALIZATION

  • New argument, "title_prefix", in method ReactionDynamics.plot_curves()


BUG FIX

  • Small bugfix in method ReactionDynamics.single_compartment_react()

EXAMPLE.   From experiment enzyme_1:

Release Beta 27

May 31, 2023

Beta 26.3

CORE

  • Substantial refinement, polishing and expansion of the automated, adaptive variable time steps introduced in the previous release
  • Eliminated the deprecated earlier approach of "dynamic substeps" (first introduced in Beta 18)


EXPERIMENTS

  • Updated, verified - and revised as needed - all of the experiments
  • Moved 4 single-compartment reaction experiments to a new "archived" subfolder
  • Renamed experiment substeps_2 to variable_steps_2


MAIN INFRASTRUCTURE

  • The automated, adaptive step-size decisions are now guided by multiple norms (measures)
  • Added a new norm based on the max relative concentration changes
  • Major code reorganization and cleanup in the ReactionDynamics class.
  • Streamlined and expanded the diagnostic data, and its methods
  • Simplifications to the set_path.py script, and to all the notebooks that use it
  • Reorganization of class ReactionData


SUPPORTING LIBRARIES

  • Early introduction of the Neo4j graph database, by means of the NeoAccess library from the sister open-source project BrainAnnex.org
  • Added several new lookup options to MovieTabular.get_dataframe()
  • Upgraded jupyterlab version to 3.4.8
  • Changes to environment.yml, to install the needed Neo4j libraries


BUG FIX

  • Bugfix in ReactionDynamics.reaction_step_common()
  • Bugfix in timestep change in case of "soft aborts" (automated re-try)

Mar. 6, 2023

Beta 25

CORE

  • Introduced the option of automated, adaptive variable time steps, including supporting methods such as step_determiner_1() (implemented in class ReactionDynamics)
  • Deprecated the earlier approach of "dynamic substeps" (introduced in Beta 18); they will be eliminated in the next beta release


EXPERIMENTS

  • New experiments (all in folder "reactions_single_compartment/") : up_regulate_3, variable_steps_1, substeps_1, substeps_2
  • Small additions to experiment negative_concentrations_1


MAIN INFRASTRUCTURE

  • More diagnostics in case of steps aborted because leading to overly large concentration changes, or to negative concentrations
  • New methods get_diagnostic_rxn_data(), get_diagnostic_conc_data(), get_diagnostic_delta_data(), _delta_conc_dict()
  • Added `silent` argument to ReactionDynamics.explain_time_advance(); step sizes are now returned as well
  • The values produced by the function diagnostic_delta_conc_data are now saved during the run, rather than re-computed
  • New object attribute ReactionDynamics.diagnostic_delta_conc_data
  • Renamed object attribute ReactionDynamics.diagnostic_data to diagnostic_rxn_data
  • Arguments `variable_steps` and `n_steps` no longer both allowed in ReactionDynamics.single_compartment_react()
  • Additional pytests


VISUALIZATION

  • New method plot_step_sizes()
  • Tweaks to plot_curves(), including new `show_intervals` argument


DOCUMENTATION


BUG FIX

  • Small bugfix to single_compartment_react()

EXAMPLE.   From experiment variable_steps_1:

Release Beta 25

Feb. 11, 2023

Beta 24

CORE

  • A more thorough check for - and automatic remediation of - concentrations values dipping into negative values


EXPERIMENTS

  • New experiments reactions_single_compartment/up_regulate_2 , large_time_steps_2 and negative_concentrations_1


MAIN INFRASTRUCTURE

  • Expanded output in ReactionDynamics.explain_time_advance()
  • Change in default values for arg "snapshot" in ReactionDynamics.set_conc() and set_chem_conc()
  • New experimental method _reaction_elemental_step_SINGLE_REACTION()
  • Removed method explain_time_advance_OLD()


SUPPORTING LIBRARIES

  • Dropped support for (confusing!) chemical indices in ReactionData.add_reaction()


DOCUMENTATION

  • Added new section about "Numerical Instability" on the reactions page
  • Updated section on "Adaptive Variable Time Sub-steps" on that same page


BUG FIX

  • Bugfix in ReactionDynamics._explain_time_advance_helper()

EXAMPLE.   From experiment negative_concentrations_1:

Release Beta 24

Feb. 5, 2023

Beta 23

CORE

  • Major change in folder structure: all the core code and libraries (exclusive of experiments and pytests) moved under top-level folder src


EXPERIMENTS

  • New experiment reactions_single_compartment/impossible_1
  • Updated several experiments in reaction_single_compartment to utilize newer functions such as plot_curves() and get_diagnostic_data(), and to change argument name in single_compartment_react() from "fast_threshold" to "rel_fast_threshold"


MAIN INFRASTRUCTURE

  • In ReactionDynamics.single_compartment_react(), reactions get reset to "fast" whenever the threshold (of what makes a reaction be regarded as fast) is lowered
  • New method set_rxn_speed_all_fast()
  • Added new argument to get_diagnostic_data() and to get_diagnostic_data()
  • Tweak to stoichiometry_checker_entire_run()
  • In several methods in class ReactionDynamics, renamed argument "fast_threshold" to "rel_fast_threshold", and "dynamic_steps" to "dynamic_substeps"
  • Renamed reaction_step_NEW() to _reaction_elemental_step(), and advance_variable_time_steps() to _advance_variable_substeps()
  • Correction in status returned from single_compartment_react()
  • Added edge cases and pytests to explain_time_advance()


SUPPORTING LIBRARIES

  • Additional argument "Delta_G" to ReactionData.add_reaction()


VISUALIZATION

  • New argument to ReactionDynamics.plot_curves()

EXAMPLE.   From experiment impossible_1:

Release Beta 23

Jan. 30, 2023

Beta 22

CORE

  • Automatic throttling down of time-step size, as needed, to catch and immediately remedy errors from negative concentrations arising from excessive time steps (including pytests)


EXPERIMENTS

  • New experiments: reactions_single_compartment/up_regulate_1 and reactions_single_compartment/large_time_steps_1
  • Corrections & enhancements to experiments reactions_single_compartment/cycles_1, down_regulate_1
  • Small corrections/tweaks to experiments reactions_single_compartment/down_regulate_2 , 1D/reaction/down_regulation_1 , 1D/reaction/up_regulation_1


MAIN INFRASTRUCTURE

  • Improvements, including better precision, to ReactionDynamics.curve_intersection()
  • Added features to ReactionDynamics.get_history()
  • Improved status reporting of single_compartment_react()
  • New function save_diagnostic_data()
  • Consolidated the 2 overlapping functions reaction_step_FIXED_RESOLUTION() and reaction_step_VARIABLE_RESOLUTION() into reaction_step_NEW()
  • Introduced custom Exception ExcessiveTimeStep in class ReactionDynamics; used it in reaction_step_orchestrator(), to catch and automatically remedy such errors


SUPPORTING LIBRARIES

  • New functions Numerical.segment_intersect(), line_intersect(), curve_intersect_interpolate()


BUG FIX

  • Bugfix, and simplifications, in ReactionDynamics.explain_time_advance()

EXAMPLE.   From experiment large_time_steps_1:

Release Beta 22

Jan. 24, 2023

Beta 21

CORE

  • Major change in the criterion of tagging a reaction as "fast", implemented in the new function criterion_fast_reaction(). This new approach has led to much-better results.


EXPERIMENTS

  • New experiments: cycles_1 and reactions_single_compartment/down_regulate_2
  • Tweaks to experiments react_2, react_3, and react_4


MAIN INFRASTRUCTURE

  • New functions ReactionDynamics.curve_intersection() and set_chem_conc()
  • Expanded reaction diagnostic data, and new function explain_time_advance() to utilize it
  • Reaction speeds are reset whenever concentrations are altered
  • New argument "abs_fast_threshold" to single_compartment_react()
  • Added "t_start" and "t_end" arguments to get_history()
  • Added argument "stop_time" to single_compartment_react()
  • Added argument "species_name" to set_chem_conc()
  • Now allowing dict argument to set_conc()
  • Change to return value of is_in_equilibrium()
  • Tweaks to examine_increment_array(), get_conc_dict() and reaction_in_equilibrium()


SUPPORTING LIBRARIES

  • New functions Numerical.deep_flatten() and compare_results()
  • Renamed ReactionData.assert_valid_index() to assert_valid_species_index()
  • Tweaks to assert_valid_rxn_index() and to get_reaction()
  • Added argument "tail" to MovieTabular.get()


VISUALIZATION

  • New function ReactionDynamics.plot_curves()


DOCUMENTATION


BUG FIX

  • Bugfix and pytests for ReactionData.get_chemicals_in_reaction()

EXAMPLE.   From experiment cycles_1:

Release Beta 21

Jan. 16, 2023

Beta 20

CORE

  • Major refinement in the handling of the variable substeps for the time resolution of the reactions


EXPERIMENTS

  • New experiment reactions_single_compartment/down_regulate_1
  • Renamed experiment react_5 to cascade_1


MAIN INFRASTRUCTURE

  • New function ReactionDynamics.advance_variable_time_steps()
  • Enhancements to function reaction_step_VARIABLE_RESOLUTION()
  • Replaced function examine_increment() with a new approach, implemented in examine_increment_array()
  • Streamlined the function reaction_step_orchestrator()
  • The "tolerance" argument of is_in_equilibrium() changed from absolute to relative


SUPPORTING LIBRARIES

  • New function ReactionData.get_chemicals_in_reaction()
  • Tweaks to describe_reactions() and its helper functions
  • Removed the deprecated class Movie


DOCUMENTATION

  • New section and diagram on "Adaptive variable time substeps" added to the Experiments page


BUG FIX

  • Bugfix to ReactionData.add_chemical() and to ReactionDynamics._explain_reactions_helper()

EXAMPLE.   From experiment down_regulate_1:

Release Beta 20

Jan. 9, 2023

Beta 19

CORE

  • Deeper scrutiny (and optional debug mode) of time substeps for reactions
  • Extensive additional diagnostic information for adaptive time substeps


EXPERIMENTS

  • New experiments: reactions_single_compartment/react_3, react_4, react_5
  • Expanded experiment 1D/reaction/reaction1
  • Small enhancements to experiments 1D/reaction/reaction_4
  • Tweak to experiment 1D/reaction/reaction_7
  • Update most experiments of the 1D/reaction_reaction_x types, to save more results in the histories and plots
  • Small additions, utilizing stoichiometry_checker(), to experiments 1D/reaction/reaction_6 and 1D/reaction/reaction_7


MAIN INFRASTRUCTURE

  • New methods added to the ReactionDynamics class:
    stoichiometry_checker(), clear_reactions(), diagnose_variable_time_steps(), get_historical_concentrations(), stoichiometry_checker_from_deltas(), stoichiometry_checker_entire_run(), delta_names(), explain_reactions(), examine_run()
  • Efficiency improvements to single_reaction_step() : more detailed optional debugging output, and split into 2 versions, for fixed time resolutions and for time substeps
  • Change in argument name from "total_duration" to "reaction_duration" in single_compartment_react(), and from "delta_time" to "delta_time_full" in reaction_step_orchestrator()
  • Split examine_increment() into 2 functions; adjust pytests accordingly
  • Introduction of the self.diagnostics attribute in the class ReactionDynamics; misc. enhancements to diagnostics options
  • Generalized is_in_equilibrium() to multiple reactions, and used it in all the "react_X" series of experiments
  • Tweaks to compute_all_reaction_deltas(), and needed adjustments to pytests and to calling code
  • Changed the ReactionDynamics.diagnostic_data attribute to be a Python dictionary, with an entry per reaction.
  • Switched the class ReactionDynamics to use a "verbose_list" attribute in lieu of the earlier "debug_code" and "debug" attributes
  • New pytests for adaptive time substeps in reactions
  • A few more validations across various functions in the class ReactionDynamics
  • Renamed BioSim1D.save_snapshot() to add_snapshot()


SUPPORTING LIBRARIES

  • Tweaks to ReactionData.describe_reactions()
  • Additional validations in add_reaction(), with pytests
  • Deprecated and completely phased out the class Movie


BUG FIX

  • 2 bugfixes in class ReactionDynamics
  • Fixed bug in 2 pytests

EXAMPLE.   From experiment cascade_1:

Release Beta 19

Dec. 21, 2022

Beta 18

CORE

  • Adaptive variable time substeps for reactions (implemented in class ReactionDynamics)
  • Substantially expanded and revised the class ReactionDynamics, including data structure management, data snapshots, display of thermodynamic quantities, and estimation of reaction speeds. Pytests


EXPERIMENTS

  • New experiment reactions_single_compartment/react_2, to demonstrate adaptive variable time substeps for reactions
  • Expanded experiment reactions_single_compartment/react_1


LIBRARIES

  • 2 new classes: MovieGeneral and MovieTabular, plus tweaks to MovieArray, with pytests
  • Dropped the deprecated libraries Reactions and Chemicals


DOCUMENTATION

Nov. 28, 2022

Beta 17

CORE

  • Elevated "single-compartment reactions" to top-tier module, alongside simulations in 1D, 2D and 3D.


LIBRARIES

  • Merged the classes Reactions and Chemicals (now both deprecated.) Their merger was split into 2 new classes: ReactionData (to managed the data structures for the chemicals and the reactions) and ReactionDynamics (to simulate the dynamics of reactions)
    Pytests for the new classes.
  • Expanded the ReactionData class to manage thermodynamic data (Enthalpy, Entropy, Gibbs free energy)
  • New method ReactionDynamics.single_compartment_react()
  • New methods ReactionData.missing_diffusion_rate() and set_diffusion_rate()


INFRASTRUCTURE

  • Extensive changes throughout, to deal with the restructuring of the libraries described above


EXPERIMENTS

  • Updated all experiments, as needed by the restructuring of the libraries described above
  • New experiment directory "reactions_single_compartment"
  • New experiment reactions_single_compartment/react_1


DOCUMENTATION

Oct. 17, 2022

Beta 16

CORE

  • Introduced diffusion in 2D. New BioSim2D methods: diffuse(), diffuse_step(), diffuse_step_single_species(), convolution_5_point_stencil(), system_snapshot(), system_size(), describe_state(), lookup_species() inject_conc_to_bin(), set_species_conc(), with pytests.
  • New BioSim1D methods: inject_gradient(), inject_bell_curve(), system_size(), with pytests


LIBRARIES

  • New method Numerical.expand_matrix_boundary(), with pytests


EXPERIMENTS

  • New 2D experiment: 2D/diffusion/diffusion_1
  • New 1D experiments: 1D/diffusion/diffusion_along_gradient_1, 1D/diffusion/diffusion_along_gradient_2
  • Updated experiment 1D/diffusion/gradient_1


VISUALIZATION

  • Visualization for 2D system states, using plotly
  • New method BioSim1D.visualize_system()


DOCUMENTATION


INFRASTRUCTURE

  • Split off pytests for diffusion in 1D into a separate file: test_biosim_1d_diffusion.py

Oct. 7, 2022

Beta 15

CORE

  • New methods BioSim1D.diffuse_step_single_species_5_1_stencils(), and double_spacial_resolution_linear(), with pytests
  • BioSim1D.diffuse(), and related methods, now accept an "algorithm" argument
  • Added argument "copy" to BioSim1D.lookup_species()
  • Generalized BioSim1D.is_excessive() and max_time_step(), to allow for arbitrary delta_x
  • Updated the class BioSim2D to conform to changes recently made to BioSim1D: both classes are now designed to be instantiated
  • Re-organization of the methods of BioSim1D class; moved compare_states() to class Numerical
  • Ditched self.verbose from BioSim1D


LIBRARIES

  • New class Numerical, with methods gradient_order4_1d(), gradient_order4(), and compare_vectors(), with pytests
  • New class MovieArray with 2 methods and pytests


EXPERIMENTS

  • New trio of experiments: 1D/diffusion/validate_diffusion_1, _2, and _3
  • Expanded the experiment 1D/diffusion/overly_large_single_timestep
  • Updated the experiment 1D/diffusion/spacial_resolution_1
  • Brought the experiment 2D/reaction/reaction_1 up-to-date with recent changes, and fixed a bug


INFRASTRUCTURE

  • More pytests for BioSim1D.diffuse_step_single_species() and for diffuse()


DOCUMENTATION

  • Expanded the section on Diffusion in 2-D
  • Added 3 diagrams to the site's home page

Sep. 14, 2022

Beta 14.1

INFRASTRUCTURE

  • Incorporated delta_x (grid spacing) into 1D diffusion computations
  • Converted class BioSim1D from static to instantiated
    (refactored all notebooks and pytests)
  • Add method BioSim1D.frequency_analysis(), with pytests, to provide frequency-component analysis with Discrete Fourier Transforms
  • Add SciPy to the project requirements
  • New method BioSim1D.inject_sine_conc(), with pytests
  • New methods BioSim1D.save_system(), restore_system(), compare_states()
  • The various BioSim1D methods that change spacial resolution, now update the system state
  • Added new argument to BioSim1D.set_species_conc() ; slight tweaks to other methods that set concentrations
  • Renamed method Movie.append() to store()


EXPERIMENTS

  • New experiments 1D/diffusion/low_pass_1 and 1D/diffusion/low_pass_2
  • New experiment 1D/diffusion/spacial_resolution_1
  • Added plotly heatmaps to experiment 1D/diffusion/gradient_1


DOCUMENTATION


BUG FIX

  • Bugfix in BioSim1D.inject_conc_to_bin()

Aug. 31, 2022

Beta 13

INFRASTRUCTURE

  • Extended support for membranes in 1D, including expanded data structure in class BioSim1D, and expansion of several methods for data management, visualization and reactions: set_membranes(), show_membranes(), describe_state(), set_bin_conc(), set_uniform_concentration(), lookup_species(), bin_concentration(), react(), reaction_step()
    New methods: uses_membranes() and bins_with_membranes()
  • Implemented system_length and mapping bin numbers to x-coordinats in class BioSim1D, incl. class variable global_Dx , and new methods set_dimensions() and x_coord()
  • New utility methods: assert_valid_bin_number(), reset_system()
  • Changed name of argument in BioSim1D.set_bin_conc() and inject_conc_to_bin() from "bin" to "bin_address"; refactored all notebooks
  • Changed default of "zero_clip" argument in inject_conc_to_bin()
  • More pytests, and general reorganization of them


EXPERIMENTS

  • New experiment 1D/reaction/membrane_1
  • Added plotly heatmap to experiment 1D/diffusion/diffusion_1
  • Simplified experiment 1D/diffusion/reach_equilibrium_1


DOCUMENTATION

Aug. 22, 2022

Beta 12

INFRASTRUCTURE

  • Implementation of reactions in 2D.
    Added several methods to class BioSim2D, and pytests, for management of data structure, and for reactions
  • Major re-organization, to take out of BioSim1D any reaction-related methods also applicable to higher dimensions; relocated several to Reactions
  • Added "(state) snapshots" feature to BioSim1D.react()
  • Reactions class: new methods is_in_equilibrium() and define_series()
  • Early implementation of methods for the data structure to be used to model membranes
  • Parallel tweaks to the constructors of BioSim1D and BioSim2D
  • Renamed argument `time_duration` of BioSim1D.diffuse() to `total_duration`
  • New method Chemicals.assert_valid_index() ; simplifications to BioSim1D using it
    Tweak to Chemicals.get_index(); added extra validation and pytests for the class


EXPERIMENTS

  • First 2-D experiment: 2D/reaction/reaction_1
  • New experiments: 1D/reaction_diffusion/state_space_1, 1D/reaction/up_regulation_1, 1D/reaction/down_regulation_1
  • Renamed the experiment folders from life_1D to 1D, to avoid confusion with the location of the simulation libraries. Likewise for life_2D
  • Streamlined most experiments by using the new method Reactions.is_in_equilibrium()
  • Simplifications and additional visualizations to experiment 1D/diffusion/diffusion_1


VISUALIZATION

  • Expanded the class GraphicLog to allow use of graphic libraries stored remotely, to avoid a JupyterLab bug preventing the correct display of HTML log files with links to locally-stored files (typically .CSS and .JS), when using the "Open in New Browser Tab" feature in JupyterLab.
    Changed all experiments to use remote linked files in the HTML log files they create
  • Broader use of plotly (only plotly EXPRESS had been used thus far)

Aug. 13, 2022

Beta 11.3

INFRASTRUCTURE

  • Introduced wide support for SYSTEM TIME throughout BioSim1D
  • New methods to facilitate creation and use of snapshots of the state of the systems, incl. system_snapshot(), bin_snapshot(), show_system_snapshot(), save_snapshot() and get_history()
  • Added "tabular" option to Movie class. Incorporated Movie object in BioSim1D class
  • In class Reactions, added argument to describe_reactions()
  • Added new argument to BioSim1D.set_uniform_concentration()
  • Started using Jupytext: added it to requirements.txt , and added config file jupytext.toml . All notebooks are now linked to .py files by the same name. This is useful to refactor notebooks upon changes in the underlying code libraries (discussion)


EXPERIMENTS

  • New experiment: diffusion/gradient_1
  • Added extra visualization with plotly to most existing experiments
  • Revised, added comments, and simplified most existing experiments, in particular to take advantage of the new support for SYSTEM TIME


VISUALIZATION

  • Added the visualization libraries plotly and matplotlib to the standard setup, and provided support for plotly.
  • Added support for arbitrary color mapping to vue_curves_4, incl. new method pale_version()
  • Added argument `color_mapping` to BioSim1D.line_plot()
  • Changes to vue_cytoscape_1 and HtmlLog.export_plot_Vue() to allow multiple network plots on same page


DEPLOYMENT

  • For compatibility with optional deployment to mybinder.org, added file environment.yml, to specify Python version 3.8 and other requirements (details)


DOCUMENTATION

July 13, 2022

Beta 10

VISUALIZATION

  • New Vue/D3 component  vue_cytoscape_1 (with tests), for visualizing networks ("directed graphs"), with re-positionable and clickable nodes.  Based on the open-source cytoscape.js library.


EXPERIMENTS

  • Added network visualizations to several notebooks.
  • Changed standard name suffix of log files, from ".htm" to ".log.htm", across all notebooks.


INFRASTRUCTURE

  • Changed  HtmlLog.config()  and  GraphicLog.config(), to accept multiple JavaScript files, to incorporate links to the cytoscape.js library.

  • Enhancements, incl. new methods, to class  Reactions; in particular, to generate visualization data

  • Added methods  number_of_chemicals() and  get_diffusion_rate() to class Chemicals.

  • Changed file naming conventions in experiments/visualization/logs_with_Vue_component_tests

  • Added and updated pytests


DOCUMENTATION

July 6, 2022

Beta 9.1

VISUALIZATION

  • New Vue/D3 component  vue_curves_4 (with tests), for plotting multiple curves, with legend and interactive controls
  • Tweak to GraphicLog.export_plot()

  • Small simplification to class HtmlLog
     

EXPERIMENTS


INFRASTRUCTURE

  • Switched to python 3.8
  • New method BioSim1D.line_plot(), to provide support for the new graphic module vue_curves_4

  • Cleanup and various enhancement to class Chemicals, plus pytests for most of its methods

  • Tweaks to BioSim1D.describe_state(), and corresponding adjustments to affected notebooks

  • Tests on the use of the multiprocessing library (not yet included in main repository)


DOCUMENTATION

June 13, 2022

Beta 8.2

DEPLOYMENT

  • Life123 can now be TRIED LIVE at Binder, with 1 click!  (akin to Google's Colab: short-term runs on a hosted JupyterLab environment)
  • Introduced several utilities, and made corresponding changes to all notebooks, to work on Binder.
    In particular, forked and modified the notebook utility library  ipynbname , and also changed all notebooks to utilize the new  set_path.py  utility

 

INFRASTRUCTURE

  • New class  Movies , to organize snapshots of system data for combined visualization

 

DOCUMENTATION

  • Documented the newly-available Binder hosting environment

June 4, 2022

Beta 7

EXPERIMENTS

  • All experiments with heatmap plots now expanded to also show results as line charts (and interpolating curves) with the new graphic module  vue_curves_3
     
  • Reorganization of 1D diffusion experiments

VISUALIZATION

  • New Vue/D3 component  vue_curves_3 , with tests
     
  • Simplified the combined use of  HtmlLog  and Vue components with new class  GraphicLog
     
  • In class  BioSim1D, the method  single_species_heatmap()  now makes use of the new  GraphicLog class.   Fixes to allow coexistence of multiple plots.  Added method  single_species_line_plot()
     
  • Reorganization of visualization files, and streamlining of naming convention
     
  • New methods for horizontal axes added to library SVGhelper (now in version 1.2)

INFRASTRUCTURE

  • New utility file  get_notebook_info.py , to extract notebook names at runtime
     
  • Tweaks to error messages in class  HtmlLog
     
  • Prepared the website for future interface with a BrainAnnex-based content management system

DOCUMENTATION

  • Greatly expanded website sections on "Visualization" and "Experiments", including summaries of all experiments
     
  • Expanded README

May 13, 2022

Beta 6

EXPERIMENTS

  • Revised all applicable notebooks to make use of the improved graphic component heatmap-11 (with range slider and value tooltips)
     
  • Simplified all applicable notebooks by making use of the recently-added method BioSim1D.single_species_heatmap()

VISUALIZATION

  • New Vue/D3 components: heatmap-10, heatmap-11 and curves-1
     
  • Expansion and enhancements to library SVGhelper (now in version 1.1)
     
  • Reorganization of tests for visualization components

LIBRARIES

  • Simplification of the data handover from Python to Vue.js in HtmlLog (to log graphical elements)

DOCUMENTATION

Apr. 30, 2022

Beta 5

INFRASTRUCTURE

  • Converted all the remaining Python files for the experiments into Jupyter Notebooks
     
  • Re-oriented from the classic Jupyter Notebooks to JupyterLab.  New batch file: quick.bat to start JupyterLab
     
  • New utility/testing notebooks: "diagnostics" and "html_display_test"

BUGFIXES

  • Bugfixes to the early experiments

  • Restored the linear scale for heatmaps in the Vue component heatmap9.js

LIBRARIES

  • Enhancements to HtmlLog; in particular, to operate with JupyterLab notebooks

CORE

  • Tweaks to the BioSim1D and Reactions classes

Apr. 17, 2022

Beta 4

  • Much-expanded support and documentation for Jupyter Notebooks (used for the experiments); in particular, a major new "How to Run" section in the README, a quickstart.bat file, and a diagnostic script.
     
  • Continued conversion of the Python files for the experiments into Jupyter Notebooks

Apr. 8, 2022

Beta 3

  • New methods to increase/decrease spacial resolution (1D)
  • New methods replace_system(), in 1D, and initialize_system(), in 3D

  • Introduction of Jupyter Notebooks for the experiments

  • General re-organization

Mar. 15, 2022

Beta 2

  • Introduced combined reaction-diffusion in 1D
     
  • Both the diffusion and reaction steps are now non-destructive on the system data, and buffer the "Delta concentrations"
     
  • Early development for a new class dealing with "heuristics" for deciding accuracy parameters

Mar. 14, 2022

Beta 1

Initial public release

Dec. 2021 -

Mar. 2022

Alpha (late)

  • Early draft of data structure for systems in 1-, 2- and 3-D

  • Diffusion and reactions in 1-D, with testing and heatmap visualization

  • A module for HTML logs, integrated with Vue/D3 visualization

Spring 2020

Alpha (early)

Early prototype