Model Simulation Framework
Project description
Carousel - Model Simulation Framework
Carousel ia a framework for simulating mathematical models that decouples the models from the simulation implementation. It takes care of boilerplate routines such as loading data from various sources into a key store that can be used from any calculation, determining the correct order of calculations, stepping through dynamic simulations and generating output reports and visualizations, so that you can focus on developing models and don’t have to worry about how to add new models or how to integrate changes.
Requirements
Installation
Carousel releases are on PyPI and on GitHub. You can use either pip, conda, or distutils to install Carousel.
$ pip install Carousel
Extract the archive to use disutils
$ python setup.py install
$ conda install -c sunpower Carousel
Documentation
Carousel documentation is online. It’s also included in the distribution and can be built using Sphinx by running the Makefile found in the docs folder of the Carousel package. Once built documentation will be found in the _build folder under the tree corresponding to the type of documentation built. EG: HTML documentation is in docs/_build/html.
Contributions
Carousel source code is online. Fork it and report issues, make suggestions or create pull requests. Discuss the roadmap or download presentations on the wiki
History
The change log for all releases is on GitHub.
Quickstart Example
Define data, outputs, formulas, calculations, simulations and model:
#! python from carousel.core.data_sources import DataSource, DataParameter from carousel.core.outputs import Output, OutputParameter from carousel.core.formulas import Formula, FormulaParameter from carousel.core.calculations import Calc, CalcParameter from carousel.core.simulations import Simulation, SimParameter from carousel.core.models import Model, ModelParameter from carousel.contrib.readers import ArgumentReader from carousel.core import UREG import numpy as np import os DATA = {'PythagoreanData': {'adjacent_side': 3.0, 'opposite_side': 4.0}} class PythagoreanData(DataSource): adjacent_side = DataParameter(units='cm', uncertainty=1.0) opposite_side = DataParameter(units='cm', uncertainty=1.0) def __prepare_data__(self): for k, v in self.parameters.iteritems(): self.uncertainty[k] = {k: v['uncertainty'] * UREG.percent} class Meta: data_cache_enabled = False data_reader = ArgumentReader class PythagoreanOutput(Output): hypotenuse = OutputParameter(units='cm') def f_pythagorean(a, b): a, b = np.atleast_1d(a), np.atleast_1d(b) return np.sqrt(a * a + b * b).reshape(1, -1) class PythagoreanFormula(Formula): f_pythagorean = FormulaParameter( units=[('=A', ), ('=A', '=A')], isconstant=[] ) class Meta: module = __name__ class PythagoreanCalc(Calc): pythagorean_thm = CalcParameter( formula='f_pythagorean', args={'data': {'a': 'adjacent_side', 'b': 'opposite_side'}}, returns=['hypotenuse'] ) class PythagoreanSim(Simulation): settings = SimParameter( ID='Pythagorean Theorem', commands=['start', 'load', 'run'], sim_length=[0, 'hour'], write_fields={ 'data': ['adjacent_side', 'opposite_side'], 'outputs': ['hypotenuse'] } ) class PythagoreanModel(Model): data = ModelParameter(sources=[PythagoreanData]) outputs = ModelParameter(sources=[PythagoreanOutput]) formulas = ModelParameter(sources=[PythagoreanFormula]) calculations = ModelParameter(sources=[PythagoreanCalc]) simulations = ModelParameter(sources=[PythagoreanSim]) class Meta: modelpath = os.path.dirname(__file__) if __name__ == '__main__': m = PythagoreanModel() m.command('run', data=DATA) out_reg = m.registries['outputs'] fmt = { 'output': out_reg['hypotenuse'], 'uncertainty': out_reg.uncertainty['hypotenuse']['hypotenuse'] } print 'hypotenuse = %(output)s +/- %(uncertainty)s' % fmt
This is the MCVE of a Carousel model.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file Carousel-0.3.2.tar.gz
.
File metadata
- Download URL: Carousel-0.3.2.tar.gz
- Upload date:
- Size: 55.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 7a2f41c8bbc8e9e0c44586f7c0ce295628c0a22b1fe6bc2770261e039731d085 |
|
MD5 | 6082cbf04d4c046aea96dbf44e8fccf7 |
|
BLAKE2b-256 | 9e1b431852473e2143e88b4ff9979ae39783c6a01eeae09915d5bd7eab527abb |
File details
Details for the file Carousel-0.3.2-py2-none-any.whl
.
File metadata
- Download URL: Carousel-0.3.2-py2-none-any.whl
- Upload date:
- Size: 66.7 kB
- Tags: Python 2
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 7fd5452522d4041f6083070a50427d80cb2cfb2fb4ddf1ad17674b44cf2f87c7 |
|
MD5 | 35aec91bcc296b5a7a349bef613db718 |
|
BLAKE2b-256 | ecbca9e2d4f2c51eec133153a892171c350e5258dc5db7be16d7dce8d1abaa4e |