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)
Procscan is a quick and dirty python script used to look for potentially dangerous api call patterns in a Procmon PML file.

PROCSCAN Procscan is a quick and dirty python script used to look for potentially dangerous api call patterns in a Procmon PML file. Installation git

Daniel Santos 9 Sep 02, 2022
Schemdule is a tiny tool using script as schema to schedule one day and remind you to do something during a day.

Schemdule is a tiny tool using script as schema to schedule one day and remind you to do something during a day. Platform Python Install Use pip: pip

StardustDL 4 Sep 13, 2021
GibMacOS - Py2/py3 script that can download macOS components direct from Apple

Py2/py3 script that can download macOS components direct from Apple Can also now build Internet Recovery USB installers from Windows using dd and 7zip

CorpNewt 4.8k Jan 02, 2023
Print 'text color' and 'text format' on Term with Python

term-printer Print 'text color' and 'text format' on Term with Python ※ It may not work depending on the OS and shell used. PIP $ pip install term-pri

ななといつ 10 Nov 12, 2022
Resources for the 2021 offering of COMP 598

comp598-2021 Resources for the 2021 offering of COMP 598 General submission instructions Important Please read these instructions located in the corre

Derek Ruths 23 May 18, 2022
Using graph_nets for pion classification and energy regression. Contributions from LLNL and LBNL

nbdev template Use this template to more easily create your nbdev project. If you are using an older version of this template, and want to upgrade to

3 Nov 23, 2022
Animation retargeting tool for Autodesk Maya. Retargets mocap to a custom rig with a few clicks.

Animation Retargeting Tool for Maya A tool for transferring animation data between rigs or transfer raw mocap from a skeleton to a custom rig. (The sc

Joaen 62 Dec 19, 2022
Automates the fixing of problems reported by yamllint by parsing its output

yamlfixer yamlfixer automates the fixing of problems reported by yamllint by parsing its output. Usage This software automatically fixes some errors a

OPT Nouvelle Caledonie 26 Dec 26, 2022
A Python library to simulate a Zoom H6 recorder remote control

H6 A Python library to emulate a Zoom H6 recorder remote control Introduction This library allows you to control your Zoom H6 recorder from your compu

Matias Godoy 68 Nov 02, 2022
Remove Sheet Protection from .xlsx files. Easily.

🔓 Excel Sheet Unlocker Remove sheet protection from .xlsx files. How to use Run Run the script/packaged executable from the command line. Universal u

Daniel 3 Nov 16, 2022
Class and mathematical functions for quaternion numbers.

Quaternions Class and mathematical functions for quaternion numbers. Installation Python This is a Python 3 module. If you don't have Python installed

3 Nov 08, 2022
Python implementation of Newton's Fractal

Newton's Fractal Animates Newton's fractal between two polynomials of the same order. Inspired by this video by 3Blue1Brown. Example fractals can be f

Jaime Liew 10 Aug 04, 2022
Get information about what a Python frame is currently doing, particularly the AST node being executed

executing This mini-package lets you get information about what a frame is currently doing, particularly the AST node being executed. Usage Getting th

Alex Hall 211 Jan 01, 2023
These are my solutions to Advent of Code problems.

Advent of Code These are my solutions to Advent of Code problems. If you want to join my leaderboard, the code is 540750-9589f56d. When I solve for sp

Sumner Evans 5 Dec 19, 2022
Script to calculate the italian fiscal code of a person.

fiscal_code Hi! This is my first public repository, so please be kind if it is not well formatted or it contains errors. I started learning Python abo

FrancescoDiMuro 1 Nov 20, 2021
A python script that will automate the boring task of login to the captive portal again and again

A python script that will automate the boring task of login to the captive portal again and again

Rakib Hasan 2 Feb 09, 2022
Commodore 64 OS running on Atari 8-bit hardware

This is the Commodre 64 KERNAL, modified to run on the Atari 8-bit line of computers. They're practically the same machine; why didn't someone try this 30 years ago?

Nick Bensema 133 Nov 12, 2022
An Android app that runs Elm in a webview. And a Python script to build the app or install it on the device.

Requirements You need to have installed: the Android SDK Elm Python git Starting a project Clone this repo and cd into it: $ git clone https://github.

Benjamin Le Forestier 11 Mar 17, 2022
Verification of Monty Hall problem by experimental simulation.

Verification of Monty Hall problem by experimental simulation. |中文|English| In the process of learning causal inference, I learned about the Monty Hal

云端听茗 1 Nov 22, 2022
Agora-token-helper - Some help tools for AgoraToken

Agora Token Helper Support AgoraToken version 001 - 006. But for security reason