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)
Custom python interface to xstan (a modified (cmd)stan)

Custom python interface to xstan (a modified (cmd)stan) Use at your own risk, currently everything is very brittle and will probably be changed in the

null 2 Dec 16, 2021
apysc is the Python frontend library to create html and js file, that has ActionScript 3 (as3)-like interface.

apysc apysc is the Python frontend library to create HTML and js files, that has ActionScript 3 (as3)-like interface. Notes: Currently developing and

simonritchie 17 Dec 14, 2022
A(Sync) Interface for internal Audible API written in pure Python.

Audible Audible is a Python low-level interface to communicate with the non-publicly Audible API. It enables Python developers to create there own Aud

mkb79 192 Jan 3, 2023
Python interface to IEX and IEX cloud APIs

Python interface to IEX Cloud Referral Please subscribe to IEX Cloud using this referral code. Getting Started Install Install from pip pip install py

IEX Cloud 41 Dec 21, 2022
Programmatic interface to Synapse services for Python

A Python client for Sage Bionetworks' Synapse, a collaborative, open-source research platform that allows teams to share data, track analyses, and collaborate

Sage Bionetworks 54 Dec 23, 2022
A collection of common regular expressions bundled with an easy to use interface.

CommonRegex Find all times, dates, links, phone numbers, emails, ip addresses, prices, hex colors, and credit card numbers in a string. We did the har

Madison May 1.5k Dec 31, 2022
Python3 Interface to numa Linux library

py-libnuma is python3 interface to numa Linux library so that you can set task affinity and memory affinity in python level for your process which can help you to improve your code's performence.

Dalong 13 Nov 10, 2022
poro is a LCU interface to change some lol's options.

poro is a LCU interface to change some lol's options. with this program you can: change your profile icon change your profiel background image ch

João Dematte 2 Jan 5, 2022
Dockernized ZeroTierOne controller with zero-ui web interface.

docker-zerotier-controller Dockernized ZeroTierOne controller with zero-ui web interface. 中文讨论 Customize ZeroTierOne's controller planets Modify patch

sbilly 209 Jan 4, 2023
Comics/doujinshi reader application. Web-based, will work on desktop and tablet devices with swipe interface.

Yomiko Comics/doujinshi reader application. Web-based, will work on desktop and tablet devices with swipe interface. Scans one or more directories of

Kyubi Systems 26 Aug 10, 2022
This is a simple web interface for SimplyTranslate

SimplyTranslate Web This is a simple web interface for SimplyTranslate List of Instances You can find a list of instances here: SimplyTranslate Projec

null 4 Dec 14, 2022
Project Interface For nextcord-ext

Project Interface For nextcord-ext

nextcord-ext 1 Nov 13, 2021
This is a far more in-depth and advanced version of "Write user interface to a file API Sample"

Fusion360-Write-UserInterface This is a far more in-depth and advanced version of "Write user interface to a file API Sample" from https://help.autode

null 4 Mar 18, 2022
Um sistema de llogin feito em uma interface grafica.

Interface-para-login Um sistema de login feito com JSON. Utilizando a biblioteca Tkinter, eu criei um sistema de login, onde guarda a informações de l

Mobben 1 Nov 28, 2021
Este software fornece interface gráfica para o escputil e tem por finalidade testar e fazer limpeza no cabeçote de impressão....

PrinterTools O que é PrinterTools? PrinterTools é uma ferramenta gráfica que usa o escputil para testar e fazer limpeza de cabeçote de impressão em si

Elizeu Barbosa Abreu 1 Dec 21, 2021
PyCASCLib: CASC interface for Warcraft III

PyCASCLib CASC interface for Warcraft III. This repo provides bindings for JCASC: https://github.com/DrSuperGood/JCASC Installation Jdk is required fo

null 2 Jun 4, 2022
A web interface for a soft serve Git server.

Soft Serve monitor Soft Sevre is a very nice git server. It offers a really nice TUI to browse the repositories on the server. Unfortunately, it does

Maxime Bouillot 5 Apr 26, 2022
Tools, guides, and resources for blockchain analysts to interface with data on the Ergo platform.

Ergo Intelligence Objective Provide a suite of easy-to-use toolkits, guides, and resources for blockchain analysts and data scientists to quickly unde

Chris 5 Mar 15, 2022
Functional interface for concurrent futures, including asynchronous I/O.

Futured provides a consistent interface for concurrent functional programming in Python. It wraps any callable to return a concurrent.futures.Future,

A. Coady 11 Nov 27, 2022