Package: kamodo-core
KamodoKamodo is a CCMC tool for access, interpolation, and visualization of space weather models and data in python. Kamodo allows model developers to represent simulation results as mathematical functions which may be manipulated directly by end users. Kamodo handles unit conversion transparently and supports interactive science discovery through jupyter notebooks with minimal coding and is accessible through python.The project page is located at the Community Coordinated Modeling Center, located at NASA Goddard Space Flight Center.Official site pagehttps://ccmc.gsfc.nasa.gov/Kamodo/Kamodo's official source code is hosted on github under a permissive NASA open source license:https://github.com/nasa/KamodoPeriodic contributions to Kamodo are made from the unofficial repo located herehttps://github.com/asherp/KamodoUsageSuppose we have a vector field defined by a function of positions in the x-y plane:fromkamodoimportkamodofyimportnumpyasnpx=np.linspace(-np.pi,np.pi,25)y=np.linspace(-np.pi,np.pi,30)xx,yy=np.meshgrid(x,y)points=np.array(zip(xx.ravel(),yy.ravel()))@kamodofy(units='km/s')deffvec(rvec=points):ux=np.sin(rvec[:,0])uy=np.cos(rvec[:,1])returnnp.vstack((ux,uy)).TThe @kamodofy decorator lets us register this field with units to enable unit-conversion downstream:fromkamodoimportKamodokamodo=Kamodo(fvec=fvec)kamodoWhen run in a jupyter notebook, the above kamodo object will render as a set of equations:$$\vec{f}{\left (\vec{r} \right )} [km/s] = \lambda{\left (\vec{r} \right )}$$We can now evaluate our function using dot notation:kamodo.fvec(np.array([[-1,1]]))array([[-0.84147098,  0.54030231]])We can perform unit conversion by function composition:kamodo['gvec[m/s]']='fvec'kamodo automatically generates the appropriate multiplicative factors:
$$\vec{g}{\left (\vec{r} \right )} [m/s] = 1000 \vec{f}{\left (\vec{r} \right )}$$
we can verify these results through evaluationkamodo.gvec(np.array([[-1,1]]))array([[-841.47098481,  540.30230587]])Kamodo also generates quick-look graphics via function inspection.importplotly.ioaspiofig=kamodo.plot('fvec')pio.write_image(fig,'images/fig2d-usage.svg')Head over to theIntroductionpage for more details.Getting startedKamodo may be installed from pippip install kamodoTo get the latest version, install from Asher's fork:pip install git+https://github.com/asherp/Kamodo.git!!! note
Asher's fork is periodically merged into the CCMC's official NASA version.Kamodo EnvironmentWe strongly recommend using the conda environment system to avoid library conflicts with your host machine's python.Download and install miniconda fromhere. The advantage to using miniconda is that each new environment includes the bare-minimum for a project. This allows you to keep many different projects on a single work station.Create Kamodo environmentCreate a new environment for kamodoconda create -n kamodo python==3.7conda activate kamodo(kamodo)pip install kamodo!!! note
The leading (kamodo) in your prompt indicates that you have activated thekamodoenvironment.
From here on, anything you install will be isolated to thekamodoenvironment.Loading example notebooksIf you want to run any of the notebooks in docs, you will need to installjupyter:(kamodo)conda install jupyterNavigate to the top-level of the kamodo repo, then point jupyter todocs/notebooks:(kamodo) jupyter notebook docs/notebooksThis should open a browser window that will allow you to load any of the example notebooks.RequirementsThe following requirements are obtained by runningpip install kamodonumpyscipysympypandasplotly==3.3pytestpsutilconda install antlr-python-runtime (rendering latex)conda install -c plotly plotly-orca (for writing images)!!! note
plotly version in fluxGenerating DocsKamodo's documentation site is a good example of how to embed your own plots in your own website.
The documentation site is generated by themkdocspackage with some addonsmkdocs - handles site generation and deployment (configured by top-levelmkdocs.yaml)markdown-include - allows for embedding of markdown files (and graph divs) outside the docs folderpython-markdown-math - enables LaTeX renderingmknotebooks - allows for the embedding of jupyter notebooksAll of the above requirements can be installed with this line:pip install mkdocs python-markdown-math markdown-include mknotebooksYou can then generate the docs and serve locally withmkdocs serveTo deploy your own documentation on github-pages:mkdocs gh-deployThis generates a gh-pages branch with the static site files and pushes it to github. Github automatically creates a website url based on that branch.