A simplified python interface to COPASI.

Overview

Python package Documentation Status Quality Gate Status Binder DOI codecov

BasiCO

This project hosts a simplified python interface to COPASI. While all functionality from COPASI is exposed via automatically generated SWIG wrappers, this package aims to add a layer on top of that, to hide most of the complexity away when calling COPASI functions.

COPASI Logo

Installation

The package works with python 2.x and python 3.x, provided the following packages are installed:

  • python-copasi
  • pandas

pandas and python-copasi are freely available on pypi. Once done, just have the basico directory in the PYTHONPATH or sys.path.

Or you could directly install everything you need right from pypi

pip install copasi-basico

from this git repo:

pip install git+https://github.com/copasi/basico.git

Usage

The following modules are available:

  • model_io: functionality, for creating / loading / saving models.
  • model_info: functionality to getting / setting model elements from pandas dataframes
  • task_timecourse: a wrapper for running time course simulations
  • array_tools: utility for plotting and the like

Documentation is work in progress, but you can find the start under: https://basico.readthedocs.org/

Acknowledgements

This project has been possible thanks to the BMBF funded de.NBI initiative (031L0104A):

de.NBI logo

License

The packages available on this page are provided under the Artistic License 2.0, which is an OSI approved license. This license allows non-commercial and commercial use free of charge.

Comments
  • Segfault in basico when simulating BIOMD0000000516 after BIOMD0000000513.

    Segfault in basico when simulating BIOMD0000000516 after BIOMD0000000513.

    Hello, I've been trying to load and simulate the curated section of biomodels using basico. It seems there is a segfault when trying to simulate model 516 after 513 has already been loaded/simulated. Here's the code:

    from basico import *
    import os
    import glob
    import time
    try:
        from roadrunner.tests.download_biomodels import download_biomodels
    except ImportError:
        raise ImportError("Do a `pip install libroadrunner==2.2.0`")
    
    biomodels_folder = os.path.join(os.path.dirname(__file__), "biomodels")
    
    if not os.path.isdir(biomodels_folder):
        biomodels_folder = download_biomodels(os.path.dirname(__file__))
    
    if not os.path.isdir(biomodels_folder):
        raise NotADirectoryError(biomodels_folder)
    
    biomodels_files = glob.glob(os.path.join(biomodels_folder, "*.xml"))
    
    print(len(biomodels_files))
    
    start = time.time()
    for model_file in [biomodels_files[512], biomodels_files[515]]:
        try:
            print(model_file)
            model = load_model(model_file)
            result = run_time_course(duration=100)
        except Exception:
            print(f"Model {model_file} failed")
    
    end = time.time() - start
    

    output:

    1036
    D:\roadrunner\roadrunner\docs\source\parallel\roadrunner_map\biomodels\BIOMD0000000513.xml
    D:\roadrunner\roadrunner\docs\source\parallel\roadrunner_map\biomodels\BIOMD0000000516.xml
    
    Process finished with exit code -1073740791 (0xC0000409)
    
    
    opened by CiaranWelsh 10
  • File path issue with add_experiment()

    File path issue with add_experiment()

    Hello,

    When doing parameter estimation, one loads data with the add_experiment() function which takes a parameter "file_name" to chose a specific storage location for the preprocessed file.

    If i want my model and experiment files to be in a subfolder compared to the current directory i am running my script in, i would typically do:

    from basico import *
    import pandas as pd
    
    model_io.load_model("copasi\\example.cps")
    data = pd.read_csv("copasi\\example.txt", header=0, sep='\t')
    add_experiment("example", data, file_name="copasi\\exp_example.tsv")
    
    result = run_parameter_estimation()   # raises file not found (from C code ?)
    

    The experiment saving works fine, but when run_parameter_estimation() looks for the file, it looks at a wrong path:

    ERROR:root:Error while initializing the simulation: >ERROR 2022-01-14T10:00:09<
      CFitting (8): Failure reading file 'C:/Users/lbecquey/Desktop/minimal_example/copasi/copasi/exp_example.tsv'.
    

    Notice the duplicated name of the subfolder in the path.

    Note that using an absolute path everywhere does not change the problem.

    bug 
    opened by persalteas 8
  • Unexpected EXCEPTION 2022-02-22T11:21:58< CTrajectoryMethod (12): Internal step limit exceeded." when setting large stepsize">

    Unexpected "ERROR:root:Error while running the simulation: >EXCEPTION 2022-02-22T11:21:58< CTrajectoryMethod (12): Internal step limit exceeded." when setting large stepsize

    Hello, I have a model which I can simulate without problem using the direct method:

    from basico import *
    load_model('mymodel.txt');
    run_time_course(duration=1000.0, method='directMethod')
    

    Next, I want to set stepsize=1000.0, to ensure that only the final datapoint is saved:

    run_time_course(duration=1000.0, stepsize=1000.0, method='directMethod')
    

    however, this gives an error:

    ERROR:root:Error while running the simulation: >EXCEPTION 2022-02-22T11:21:58<
      CTrajectoryMethod (12): Internal step limit exceeded.
    

    and an altered output (final timepoint is around t=775), see image: image

    This seems unexpected to me, as I only change when we save the output, I am uncertain why this causes an error.

    Thie file is attached (originally had the .XML extension, but changed to .txt so that GitHub would accept it): mymodel.txt

    opened by TorkelE 6
  • Retrieving information of <Problem> section in tasks.

    Retrieving information of section in tasks.

    Hi,

    Following is the description of task (sensitivities) which has been extracted from a copasi model file. I want to retrieve the information enclosed in <problem> section.

    <Task key="Task_16" name="Sensitivities" type="sensitivities" scheduled="false" updateModel="false"> <Report reference="Report_3" target="" append="1" confirmOverwrite="0"/> <Problem> <Parameter name="SubtaskType" type="unsignedInteger" value="1"/> <ParameterGroup name="TargetFunctions"> <Parameter name="SingleObject" type="cn" value="CN=Root,Model=MAPK cascade,Vector=Compartments[compartment],Vector=Metabolites[PP-MAPK],Reference=Concentration"/> <Parameter name="ObjectListType" type="unsignedInteger" value="1"/> </ParameterGroup> <ParameterGroup name="ListOfVariables"> <ParameterGroup name="Variables"> <Parameter name="SingleObject" type="cn" value="CN=Root,Model=MAPK cascade,Vector=Reactions[binding of MAPKKK activator],ParameterGroup=Parameters,Parameter=k1,Reference=Value"/> <Parameter name="ObjectListType" type="unsignedInteger" value="1"/> </ParameterGroup> <ParameterGroup name="Variables"> <Parameter name="SingleObject" type="cn" value=""/> <Parameter name="ObjectListType" type="unsignedInteger" value="0"/> </ParameterGroup> </ParameterGroup> </Problem> <Method name="Sensitivities Method" type="SensitivitiesMethod"> <Parameter name="Delta factor" type="unsignedFloat" value="0.001"/> <Parameter name="Delta minimum" type="unsignedFloat" value="9.9999999999999998e-13"/> </Method> </Task>

    I used the function get_task_settings('Sensitivities', basic_only=False) with and without setting "basic_only" flag to False, but it gives the same following results:

    {'scheduled': False, 'update_model': False, 'problem': {'SubtaskType': 1}, 'method': {'Delta factor': 0.001, 'Delta minimum': 1e-12, 'name': 'Sensitivities Method'}, 'report': {'filename': '', 'report_definition': 'Sensitivities', 'append': True, 'confirm_overwrite': True}}

    Here you can see, the above function is returning only the name and value attributes of the sub-section (<Parameter >) within the <Problem> section.

    Can you please suggest how can I retrieve all the required information within <Problem> section?

    Thanks

    enhancement 
    opened by hasanbaig 5
  • How to get SBML identifiers in timecourse results? How to get amount/concentrations for species?

    How to get SBML identifiers in timecourse results? How to get amount/concentrations for species?

    Hi all, great library. I want to have timecourse results with SBML identifiers and be able to access either amount/concentration of species.

    Currently there is the function

    def __build_result_from_ts(time_series, use_concentrations=True):
        # type: (COPASI.CTimeSeries) -> pandas.DataFrame
        col_count = time_series.getNumVariables()
        row_count = time_series.getRecordedSteps()
    
        column_names = []
        column_keys = []
        for i in range(col_count):
            column_keys.append(time_series.getKey(i))
            column_names.append(time_series.getTitle(i))
            # FIXME: SBML ids for comparison
            column_names.append(time_series.getSBMLId(i))
    
        concentrations = np.empty([row_count, col_count])
        for i in range(row_count):
            for j in range(col_count):
                if use_concentrations:
                    concentrations[i, j] = time_series.getConcentrationData(i, j)
                else:
                    concentrations[i, j] = time_series.getData(i, j)
    
        df = pd.DataFrame(data=concentrations, columns=column_names)
        df = df.set_index('Time')
    
        return df
    

    I tried to get the SBML identifiers but need a CDataModel for that in time_serices.getSBMLId(i). How would I do this? Is there some documention for the python-copasi API? Are there some examples and use cases?

    How would I get amounts/concentrations for species?

    Best Matthias

    opened by matthiaskoenig 5
  • Custom selection with parameter does not work

    Custom selection with parameter does not work

    Based on the example in #17 I tried to set a custom selection to include the things I want to see in the results via

    tc = run_time_course_with_output(['Time', '[S1]', '[S2]', 'Values[k1]'], 0, 5, 5)
    

    But this results in the following error due to the Values[k1] in the selection.

    --- c1 ---
    ERROR:root:Error while initializing the simulation: >WARNING 2022-04-05T12:44:44<
      CCopasiTask (7): Problems compiling output.
    Empty DataFrame
    Columns: [Time, [S1], [S2], Values[k1]]
    Index: []
    
    opened by matthiaskoenig 4
  • Retrieving Method details.

    Retrieving Method details.

    Hi,

    I want to retrieve complete information of methods used in any specific task. For example, copasi model with optimization task has the following method details:

    <Method name="Genetic Algorithm" type="GeneticAlgorithm"> <Parameter name="Log Verbosity" type="unsignedInteger" value="0"/> <Parameter name="Number of Generations" type="unsignedInteger" value="200"/> <Parameter name="Population Size" type="unsignedInteger" value="20"/> <Parameter name="Random Number Generator" type="unsignedInteger" value="1"/> <Parameter name="Seed" type="unsignedInteger" value="0"/> <Parameter name="Mutation Variance" type="float" value="0.10000000000000001"/> <Parameter name="Stop after # Stalled Generations" type="unsignedInteger" value="0"/> </Method>

    I want to retrieve/set all the information including the "type" of the method. I tried to use get_opt_settings() but i returns on the following information related to method: 'method': {'Number of Generations': 200, 'Population Size': 20, 'name': 'Genetic Algorithm'}

    opened by hasanbaig 4
  • set_species failing to set initial concentration

    set_species failing to set initial concentration

    I tried this code:

    add_species('B');
    set_species('B', exact=True,  initial_concentration=0.4, status='fixed');
    
    

    and the result is that species 'B' ends up with initial concentration of 1 (default value, set by the add_species), not 0.4 as should have been changed by set_species ...

    I had to write:

    add_species('B', initial_concentration=0.4);
    set_species('B', exact=True, status='fixed');
    

    to have 'B' actually get the initial concentration of 0.4.

    opened by pmendes 3
  • Names appear different in  exp_data and sim_data dataframes

    Names appear different in exp_data and sim_data dataframes

    Hi @fbergmann ,

    Square brackets are missing in the columns names of sim_data returned by the function get_simulation_results for time course data.

    e.g.

    sim_data>
    Index(['ADP', 'fructose 6-phosphate', 'NAD', 'glyceraldehyde 3-phosphate',
           'pyruvate{cytosol}', 'dihydroxyacetone phosphate', '2-phosphoglycerate',
           dtype='object')
    
    exp_data>
    Index(['Time', '[d-glucose{"external compartment (blood)"}]_0', '[ATP]',
           '[dihydroxyacetone phosphate]', '[fructose 6-phosphate]',
           dtype='object')
    

    For steady-state data both sim_data and exp_data have brackets for the concentration of species in the column names.

    Could you please have a look?

    opened by DeepaMahm 3
  • AttributeError: 'CDataObject' object has no attribute 'setDblValue' when running plot_per_dependent_variable()

    AttributeError: 'CDataObject' object has no attribute 'setDblValue' when running plot_per_dependent_variable()

    Hello basiCO team,

    when I'm running the function 'plot_per_dependent_variable()' I get the following error:

    'AttributeError: 'CDataObject' object has no attribute 'setDblValue'' with the following traceback:

    (Environment: Anaconda 3; Python 3.8.3 (default, Jul 2 2020, 17:30:36) [MSC v.1916 64 bit (AMD64)]; IPython 7.16.1)

    AttributeError                            Traceback (most recent call last)
    <ipython-input-12-0f3cf678761d> in <module>
    ----> 1 plot_per_dependent_variable();
    
    C:\anaconda3\lib\site-packages\basico\task_parameterestimation.py in plot_per_dependent_variable(**kwargs)
       1176         return result
       1177
    -> 1178     exp_data, sim_data = get_simulation_results(**kwargs)
       1179
       1180     dependent_variables = {}
    
    C:\anaconda3\lib\site-packages\basico\task_parameterestimation.py in get_simulation_results(values_only, **kwargs)
       1027             model.updateInitialValues(change_set)
       1028
    -> 1029         _update_fit_parameters_from(dm, solution, exp_name)
       1030
       1031         if experiment.getExperimentType() == COPASI.CTaskEnum.Task_steadyState:
    
    C:\anaconda3\lib\site-packages\basico\task_parameterestimation.py in _update_fit_parameters_from(dm, solution, exp_name)
       1078                 obj.getObjectParent().setInitialConcentration(value)
       1079             elif type(obj.getObjectParent()) is COPASI.CCopasiParameter:
    -> 1080                 obj.setDblValue(value)
       1081                 model.updateInitialValues(obj)
       1082             else:
    
    C:\anaconda3\lib\site-packages\COPASI\__init__.py in <lambda>(self, name)
       3235     for _s in [CObjectInterface, CUndoObjectInterface]:
       3236         __swig_getmethods__.update(getattr(_s, '__swig_getmethods__', {}))
    -> 3237     __getattr__ = lambda self, name: _swig_getattr(self, CDataObject, name)
       3238     __repr__ = _swig_repr
       3239     Container = _COPASI.CDataObject_Container
    
    C:\anaconda3\lib\site-packages\COPASI\__init__.py in _swig_getattr(self, class_type, name)
         83     if method:
         84         return method(self)
    ---> 85     raise AttributeError("'%s' object has no attribute '%s'" % (class_type.__name__, name))
         86
         87
    

    I'm using the example model 'LM' and I'm following the steps of the parameter estimation as listed in the documentation here: https://basico.readthedocs.io/en/latest/notebooks/Parameter_Estimation_Example.html Input lines 1 - 11 all work without any issue.

    opened by nicolas-huber 3
  • setting a function that requires modifiers, should map them if specified

    setting a function that requires modifiers, should map them if specified

    When changing a function on a reaction, it should automatically add modifiers to the reaction scheme.

    • currently, when a reaction r1 with scheme A -> B is assigned a kinetic using modifiers this fails

    In the gui, this is allowed, however, this results in an invalid function, since no mapping is specified at that point. I would rather want to avoid creating invalid states, as it would be hard to track down later.

    So i propose to silently add modifiers to the reaction scheme, iff a mapping for modifier to species is defined. that means:

    • set_reaction('r1', function='function with modifier') would still fail, however
    • set_reaction('r1', function='function with modifier', mapping={'formulaTokenUsedAsModifier', 'speciesName' }) would work

    @pmendes would that work for you?

    opened by fbergmann 2
  • Plots of steady-state experiments

    Plots of steady-state experiments

    Hello @fbergmann ,

    I tried to make a few changes in the function def plot_per_dependent_variable to create plots for the steady-state data and I would like to share the modified function (please see below) with you.

    Thanks so much for the new release, this helps me a lot in obtaining the steady-state data in the required format.

    def plot_per_dependent_variable_ss(**kwargs):
        """
        This function creates a figure for each dependent variable, with traces for all experiments.
    
        :param kwargs:
    
        - | `model`: to specify the data model to be used (if not specified
          | the one from :func:`.get_current_model` will be taken)
    
        :return: array of tuples (fig, ax) for each figure created
        """
        dm = model_io.get_model_from_dict_or_default(kwargs)
    
        task = dm.getTask(TASK_PARAMETER_ESTIMATION)
        assert (isinstance(task, COPASI.CFitTask))
    
        problem = task.getProblem()
        assert (isinstance(problem, COPASI.CFitProblem))
    
        experiments = problem.getExperimentSet()
        assert (isinstance(experiments, COPASI.CExperimentSet))
    
        result = []
        num_experiments = experiments.getExperimentCount()
        if num_experiments == 0:
            return result
    
        data = get_simulation_results(**kwargs)
        exp_data = data[0]  # experimental data
        sim_data = data[1]  # simulation data
    
        dependent_variables = {}
    
        for i in range(num_experiments):
            experiment = experiments.getExperiment(i)
            mapping = get_experiment_mapping(experiment)
    
            # set independent values for that experiment
            independent = mapping[mapping.type == 'independent']
            xname = independent.iloc[0].mapping
    
            # set dependent values for that experiment
            dependent = mapping[mapping.type == 'dependent']
            num_dependent = dependent.shape[0]
            for j in range(num_dependent):
                name = dependent.iloc[j].mapping
                if name not in dependent_variables:
                    dependent_variables[name] = []
                dependent_variables[name].append(i)
    
        for dependent in dependent_variables:
            fig, ax = plt.subplots()
            cycler = plt.cycler("color", plt.cm.tab20c.colors)()
            ax.set_title(dependent)
            experiment_indices = dependent_variables[dependent]
    
            for i in experiment_indices:
                experiment = experiments.getExperiment(i)
                exp_name = experiment.getObjectName()
                nextval = next(cycler)['color']
                name = dependent
                if name not in sim_data[i].columns:
                    name = name[1:-1]
    
                sim_data[i][xname] = exp_data[i][xname]
                # print(sim_data[i])
    
                sim_data[i].reset_index().plot(x=xname, y=name,
                                               label="{0} Fit".format(exp_name), ax=ax, color=nextval)
                exp_data[i].plot.scatter(x=xname, y=dependent, ax=ax, color=nextval,
                                         label='{0} Measured'.format(exp_name))
            # plt.savefig('ss.png')
            result.append((fig, ax))
    
        return result
    
    
    opened by DeepaMahm 3
Releases(v0.40)
  • v0.40(Dec 21, 2022)

    Basico is a simplified python interface to COPASI. While all functionality from COPASI is exposed via automatically generated SWIG wrappers, this package aims to add a layer on top of that, to hide most of the complexity away when calling COPASI functions.

    This release adds an overload to reset the default handler, that can be used to display status information during long running operations. There is now also an example showing how to use the default handler (that will work of tqdm is installed).

    Source code(tar.gz)
    Source code(zip)
  • v0.39(Dec 20, 2022)

    Basico is a simplified python interface to COPASI. While all functionality from COPASI is exposed via automatically generated SWIG wrappers, this package aims to add a layer on top of that, to hide most of the complexity away when calling COPASI functions.

    This release changes the model editing so that the model is not compiled as often. Especially when creating big models, this reduces the runtime of scripts drastically.

    Source code(tar.gz)
    Source code(zip)
  • v0.38(Dec 13, 2022)

    Basico is a simplified python interface to COPASI. While all functionality from COPASI is exposed via automatically generated SWIG wrappers, this package aims to add a layer on top of that, to hide most of the complexity away when calling COPASI functions.

    This release changes the behavior of add_reaction / set_reaction, when it comes to assigning a function definition to it. Previously, the reaction scheme would already have to have all modifiers of the function listed, before a function could be assigned. Now this is no longer necessary and modifiers will be automatically added to the reaction scheme, as long as the mapping to all modifiers is specified. See also the Editing reaction kinetics example in the documentation. ( fixes #29 )

    Source code(tar.gz)
    Source code(zip)
  • v0.37(Dec 12, 2022)

    Basico is a simplified python interface to COPASI. While all functionality from COPASI is exposed via automatically generated SWIG wrappers, this package aims to add a layer on top of that, to hide most of the complexity away when calling COPASI functions.

    This release fixes an issue, where initial_concentrations would be lost when also setting additional properties using either add_species or get_species. (Issue #28)

    Source code(tar.gz)
    Source code(zip)
  • v0.36(Oct 6, 2022)

  • v0.35(Oct 4, 2022)

  • v0.34(Sep 30, 2022)

    This release adds the option to return the fit statistic for each experiment when get_fit_statistic is called with include_experiments=True . The python-copasi package will have to be version 2.37.263 or higher for this to work.

    Source code(tar.gz)
    Source code(zip)
  • v0.33(Aug 31, 2022)

  • v0.32(Aug 29, 2022)

    This release adds an optional parameter new_name to set_compartments / events / parameters, to allow them being renamed in the same way as species and reactions were.

    It also fixes an issue when adding experiments, which sometimes could fail. It also provides more information from the fit statistic.

    Source code(tar.gz)
    Source code(zip)
  • v0.31(Aug 5, 2022)

  • v0.30(Aug 4, 2022)

  • v0.29(Jul 27, 2022)

    This release adds a generic set_value function, that makes it easy to change values directly by their display name. For example:

    • set_value('(R1).k1', 10) to set a local parameter
    • set_value('S', 10, initial=True) to set an initial concentration of a species S
    Source code(tar.gz)
    Source code(zip)
  • v0.28(Jul 27, 2022)

    This release fixes an issue, where it was possible to define fit parameters (parameters to be estimated by parameter estimation), that referred to transient values, rather than initial one.

    Source code(tar.gz)
    Source code(zip)
  • v0.27(Jul 26, 2022)

    This release adds an optional parameter to get_simulation_results, that allows to not update the model parameters. So the simulation results will be generated for the current model state, rather than the solution from the last parameter estimation run if update_parameters=False.

    Full Changelog: https://github.com/copasi/basico/compare/v0.26...v0.27

    Source code(tar.gz)
    Source code(zip)
  • v0.26(Jul 19, 2022)

  • v0.25(Jun 30, 2022)

    This version adds the capability of directly manipulating python dictionaries for export / import of parameter estimation setups. Skipping the step of YAML serialization / deserialization if needed. Also full filenames to the export of experimental data files will be returned, so that the setting can be easier applied to new files, without the need to copy files.

    Source code(tar.gz)
    Source code(zip)
  • v0.24(Jun 30, 2022)

    This release makes it possible to export / import the mapping to experimental data files from a COPASI file. The format chosen is YAML:

    that way you can quickly transfer mappings from one COPASI file to another one, adjusting just the couple of parameters you like to modify.

    Source code(tar.gz)
    Source code(zip)
  • v0.23(Jun 28, 2022)

  • v0.22(Jun 28, 2022)

    This release fixes an issue, with get_data_from_experiment, for the case when the default renaming is not being used. Here, the original headers defined in the data file, would only be returned for the first experiment in the file, not in the remaining ones.

    Source code(tar.gz)
    Source code(zip)
  • v0.21(Jun 22, 2022)

  • v0.20(Jun 22, 2022)

    This release adds loading COMBINE archives, and SED-ML file. Additionally, when loading experimental data from files where there is a mismatch between the mapped number of columns, and the number of columns in the data file, no longer fail.

    Source code(tar.gz)
    Source code(zip)
  • v0.19(May 19, 2022)

    This release fixes an issue when using add_equation with an expression that ends on a species. Additionally an issue was resolved when setting model units, where now all unit expressions are converted to str.

    Source code(tar.gz)
    Source code(zip)
  • v0.18(Apr 5, 2022)

    This release adds changing transient values. So you can set:

    • concentrations / particle_numbers
    • compartment size
    • parameter value

    for those values not to be overwritten by their initial value, remember to set use_initial_values=False when continuing from a previous state with some minor changes.

    Source code(tar.gz)
    Source code(zip)
  • v0.17(Apr 5, 2022)

    New bugfix release, fixes an issue where global parameters could not be selected for custom output. (#18), thank you to Matthias for filing.

    Source code(tar.gz)
    Source code(zip)
  • v0.16(Feb 8, 2022)

    This release adds the capabilities to run the sensitivity task (and change their settings). Here an example of how that would look.

    Full Changelog: https://github.com/copasi/basico/compare/v0.15...v0.16

    Source code(tar.gz)
    Source code(zip)
  • v0.15(Feb 3, 2022)

    This release changes the get_reactions function, such that it now also returns the mappings of the function expression to the model elements. Additionally this function is available separately using get_reaction_mapping and set_reaction_mapping .

    Additionally this release fixes an issue, where the python runtime would crash when setting an invalid expression (either for initial assignments, or ODE / assignment expressions).

    Full Changelog: https://github.com/copasi/basico/compare/v0.14...v0.15

    Source code(tar.gz)
    Source code(zip)
  • v0.14(Jan 27, 2022)

    This release enhances the modification of plot curves, in that now the channels can also use CN's, which is necessary for plotting results of tasks. Also added a utility function get_cn to retrieve cns for display names, that could be used, when specifying fit parameters, and wanting that the lower bound for example is the value of another model element. Additionally it is now possible to generate the default plots as they are available in COPASI.

    Full Changelog: https://github.com/copasi/basico/compare/v0.13...v0.14

    Source code(tar.gz)
    Source code(zip)
  • v0.13(Jan 26, 2022)

    This release fixes a number of issues. Mainly, when getting / setting model elements, by passing in a boolean argument exact=True the name given has to match exactly. Additionally, new methods are available to remove all fit items, and experiments. A new get_value method retrieves values from reference names passed in.

    Full Changelog: https://github.com/copasi/basico/compare/v0.12...v0.13

    Source code(tar.gz)
    Source code(zip)
  • v0.12(Jan 25, 2022)

    This release adds members to retrieve all method names, and to convert between method names and their enum values if needed. Additionally the basic_only parameter on get_opt_settings can be passed along to retrieve advanced parameters.

    Full Changelog: https://github.com/copasi/basico/compare/v0.11...v0.12

    Source code(tar.gz)
    Source code(zip)
  • v0.11(Jan 17, 2022)

    This release fixes an issue in save_model_and_data so that absolute names for experiments are being used, thanks to Louis Becquey for reporting.

    The parameter mapping of reaction parameters can now also be changed by set_reaction_parameters using the mapped_to argument.

    Source code(tar.gz)
    Source code(zip)
A framework to create reusable Dash layout.

dash_component_template A framework to create reusable Dash layout.

The TolTEC Project 4 Aug 04, 2022
The repository for AnyMacro: a Fusion360 Add-In

AnyMacro AnyMacro is an Autodesk® Fusion 360™ add-in for chaining multiple commands in a row to form Macros. Macros are created from a set of commands

1 Jan 07, 2022
A StarkNet project template based on a Pythonic environment

StarkNet Project Template This is an opinionated StarkNet project template. It is based around the Python's ecosystem and best practices. tox to manag

Francesco Ceccon 5 Apr 21, 2022
About A python based Apple Quicktime protocol,you can record audio and video from real iOS devices

介绍 本应用程序使用 python 实现,可以通过 USB 连接 iOS 设备进行屏幕共享 高帧率(30〜60fps) 高画质 低延迟(200ms) 非侵入性 支持多设备并行 Mac OSX 安装 python =3.7 brew install libusb pkg-config 如需使用 g

YueC 124 Nov 30, 2022
Python / C++ based particle reaction-diffusion simulator

ReaDDy (Reaction Diffusion Dynamics) is an open source particle based reaction-diffusion simulator that can be configured and run via Python. Currentl

ReaDDy 46 Dec 09, 2022
A python package template that can be adapted for RAP projects

Warning - this repository is a snapshot of a repository internal to NHS Digital. This means that links to videos and some URLs may not work. Repositor

NHS Digital 3 Nov 08, 2022
Simple dependency injection framework for Python

A simple, strictly typed dependency injection library.

BentoML 14 Jun 29, 2022
You'll learn about Iterators, Generators, Closure, Decorators, Property, and RegEx in detail with examples.

07_Python_Advanced_Topics Introduction 👋 In this tutorial, you will learn about: Python Iterators: They are objects that can be iterated upon. In thi

Milaan Parmar / Милан пармар / _米兰 帕尔马 252 Dec 23, 2022
Collection of tools to be more productive in your work environment and to avoid certain repetitive tasks. 💛💙💚

Collection of tools to be more productive in your work environment and to avoid certain repetitive tasks. 💛💙💚

Raja Rakotonirina 2 Jan 10, 2022
JPMC Virtual Experience

This repository contains the submitted patch files along with raw files of the various tasks assigned by JPMorgan Chase & Co. through its Software Engineering Virtual Experience Program on Forage (fo

Vardhini K 1 Dec 05, 2021
Terminal compatible with ansi-bbs. Meant to be a prototype, but published because why not.

pybbsterm: Terminal emulator for calling BBSs. Use cases (non-exhaustive) Explore terminal protocols. Connect to BBSs. Highlights Python 3.8+ code. Bu

Roc Vallès i Domènech 9 Apr 29, 2022
A Kodi add-on for watching content hosted on PeerTube.

A Kodi add-on for watching content hosted on PeerTube. This add-on is under development so only basic features work, and you're welcome to improve it.

1 Dec 18, 2021
An example of python package

An example of python package Why use packages? It is a good practice to not code the same function twice, and to reuse common code from one python scr

10 Oct 18, 2022
A minimalist production ready plugin system

pluggy - A minimalist production ready plugin system This is the core framework used by the pytest, tox, and devpi projects. Please read the docs to l

pytest-dev 876 Jan 05, 2023
GA SEI Unit 4 project backend for Bloom.

Grow Your OpportunitiesTM Background Watch the Bloom Intro Video At Bloom, we believe every job seeker deserves an opportunity to find meaningful work

Jonathan Herman 3 Sep 20, 2021
YunoHost is an operating system aiming to simplify as much as possible the administration of a server.

YunoHost is an operating system aiming to simplify as much as possible the administration of a server. This repository corresponds to the core code, written mostly in Python and Bash.

YunoHost 1.5k Jan 09, 2023
Cairo-integer-types - A library for bitwise integer types (e.g. int64 or uint32) in Cairo, with a test suite

The Cairo bitwise integer library (cairo-bitwise-int v0.1.1) The Cairo smart tes

27 Sep 23, 2022
Implementation of the Angular Spectrum method in Python to simulate Diffraction Patterns

Diffraction Simulations - Angular Spectrum Method Implementation of the Angular Spectrum method in Python to simulate Diffraction Patterns with arbitr

Rafael de la Fuente 276 Dec 30, 2022
Simple programming language built on Python.

Serial Another programming language. Built on Python. Building and running program In order to run the program on serial, unfortunately you still need

Aleksey Demchenkov 1 Dec 09, 2021
An html wrapper for python

MessySoup What is it? MessySoup is a python wrapper for html elements. While still a ways away, the main goal is to be able to build a wesbite straigh

4 Jan 05, 2022