From d22e9eeb93c6a6092d409633eb510adc86f56ad3 Mon Sep 17 00:00:00 2001 From: rowanc1 Date: Tue, 13 May 2014 09:25:25 -0700 Subject: [PATCH] Initial Commit. --- .travis.yml | 26 +++ LICENSE | 20 ++ README.md | 21 ++ docs/Makefile | 153 ++++++++++++++ docs/conf.py | 244 +++++++++++++++++++++++ docs/index.rst | 34 ++++ docs/make.bat | 190 ++++++++++++++++++ docs/simpeg-logo.png | Bin 0 -> 23545 bytes requirements.txt | 4 + setup.py | 8 + simpegMT/Base.py | 68 +++++++ simpegMT/FDEM/FDEM.py | 296 ++++++++++++++++++++++++++++ simpegMT/FDEM/SurveyFDEM.py | 140 +++++++++++++ simpegMT/FDEM/__init__.py | 2 + simpegMT/Tests/__init__.py | 12 ++ simpegMT/Tests/test_FieldsObject.py | 103 ++++++++++ simpegMT/Utils/__init__.py | 0 simpegMT/__init__.py | 4 + 18 files changed, 1325 insertions(+) create mode 100644 .travis.yml create mode 100644 LICENSE create mode 100644 README.md create mode 100644 docs/Makefile create mode 100644 docs/conf.py create mode 100644 docs/index.rst create mode 100644 docs/make.bat create mode 100644 docs/simpeg-logo.png create mode 100644 requirements.txt create mode 100644 setup.py create mode 100644 simpegMT/Base.py create mode 100644 simpegMT/FDEM/FDEM.py create mode 100644 simpegMT/FDEM/SurveyFDEM.py create mode 100644 simpegMT/FDEM/__init__.py create mode 100644 simpegMT/Tests/__init__.py create mode 100644 simpegMT/Tests/test_FieldsObject.py create mode 100644 simpegMT/Utils/__init__.py create mode 100644 simpegMT/__init__.py diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 00000000..08e8ee46 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,26 @@ +language: python +python: + - "2.7" +virtualenv: + system_site_packages: true +before_install: + - sudo apt-get install -qq gcc gfortran libblas-dev liblapack-dev python-numpy python-scipy python-matplotlib python-pip + - sudo pip install scipy --upgrade + - sudo pip install numpy --upgrade + - cd ../ + - git clone https://github.com/simpeg/simpeg.git + - cd simpeg/SimPEG/ + - python setup.py + - cd ../../ + - echo export PYTHONPATH=$PYTHONPATH:/home/travis/build/simpeg/simpeg >> .bashrc + - source .bashrc + - cd simpegmt +# command to install dependencies +install: "pip install -r requirements.txt --use-mirrors" +# command to run tests +script: nosetests -v + +notifications: + email: + - rowanc1@gmail.com + - gkrosen@gmail.com diff --git a/LICENSE b/LICENSE new file mode 100644 index 00000000..f94a23fd --- /dev/null +++ b/LICENSE @@ -0,0 +1,20 @@ +The MIT License (MIT) + +Copyright (c) 2013-2014 SimPEG Developers + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 00000000..1f8dc810 --- /dev/null +++ b/README.md @@ -0,0 +1,21 @@ +simpegem +======== + +A electromagnetic forward modelling and inversion package for SimPEG. + + + +Documentation: +[http://simpegem.readthedocs.org/en/latest/](http://simpegem.readthedocs.org/en/latest/) + +Code: +[https://github.com/simpeg/simpegem](https://github.com/simpeg/simpegem) + +Tests: +[https://travis-ci.org/simpeg/simpegem](https://travis-ci.org/simpeg/simpegem) + +Build Status: +[![Build Status](https://travis-ci.org/simpeg/simpegem.svg?branch=master)](https://travis-ci.org/simpeg/simpegem) + +Bugs & Issues: +[https://github.com/simpeg/simpegem/issues](https://github.com/simpeg/simpegem/issues) diff --git a/docs/Makefile b/docs/Makefile new file mode 100644 index 00000000..bee80244 --- /dev/null +++ b/docs/Makefile @@ -0,0 +1,153 @@ +# Makefile for Sphinx documentation +# + +# You can set these variables from the command line. +SPHINXOPTS = +SPHINXBUILD = sphinx-build +PAPER = +BUILDDIR = _build + +# Internal variables. +PAPEROPT_a4 = -D latex_paper_size=a4 +PAPEROPT_letter = -D latex_paper_size=letter +ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . +# the i18n builder cannot share the environment and doctrees with the others +I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . + +.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest gettext + +help: + @echo "Please use \`make ' where is one of" + @echo " html to make standalone HTML files" + @echo " dirhtml to make HTML files named index.html in directories" + @echo " singlehtml to make a single large HTML file" + @echo " pickle to make pickle files" + @echo " json to make JSON files" + @echo " htmlhelp to make HTML files and a HTML help project" + @echo " qthelp to make HTML files and a qthelp project" + @echo " devhelp to make HTML files and a Devhelp project" + @echo " epub to make an epub" + @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter" + @echo " latexpdf to make LaTeX files and run them through pdflatex" + @echo " text to make text files" + @echo " man to make manual pages" + @echo " texinfo to make Texinfo files" + @echo " info to make Texinfo files and run them through makeinfo" + @echo " gettext to make PO message catalogs" + @echo " changes to make an overview of all changed/added/deprecated items" + @echo " linkcheck to check all external links for integrity" + @echo " doctest to run all doctests embedded in the documentation (if enabled)" + +clean: + -rm -rf $(BUILDDIR)/* + +html: + $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html + @echo + @echo "Build finished. The HTML pages are in $(BUILDDIR)/html." + +dirhtml: + $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml + @echo + @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml." + +singlehtml: + $(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml + @echo + @echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml." + +pickle: + $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle + @echo + @echo "Build finished; now you can process the pickle files." + +json: + $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json + @echo + @echo "Build finished; now you can process the JSON files." + +htmlhelp: + $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp + @echo + @echo "Build finished; now you can run HTML Help Workshop with the" \ + ".hhp project file in $(BUILDDIR)/htmlhelp." + +qthelp: + $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp + @echo + @echo "Build finished; now you can run "qcollectiongenerator" with the" \ + ".qhcp project file in $(BUILDDIR)/qthelp, like this:" + @echo "# qcollectiongenerator $(BUILDDIR)/qthelp/SimPEG.qhcp" + @echo "To view the help file:" + @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/SimPEG.qhc" + +devhelp: + $(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp + @echo + @echo "Build finished." + @echo "To view the help file:" + @echo "# mkdir -p $$HOME/.local/share/devhelp/SimPEG" + @echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/SimPEG" + @echo "# devhelp" + +epub: + $(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub + @echo + @echo "Build finished. The epub file is in $(BUILDDIR)/epub." + +latex: + $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex + @echo + @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex." + @echo "Run \`make' in that directory to run these through (pdf)latex" \ + "(use \`make latexpdf' here to do that automatically)." + +latexpdf: + $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex + @echo "Running LaTeX files through pdflatex..." + $(MAKE) -C $(BUILDDIR)/latex all-pdf + @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." + +text: + $(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text + @echo + @echo "Build finished. The text files are in $(BUILDDIR)/text." + +man: + $(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man + @echo + @echo "Build finished. The manual pages are in $(BUILDDIR)/man." + +texinfo: + $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo + @echo + @echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo." + @echo "Run \`make' in that directory to run these through makeinfo" \ + "(use \`make info' here to do that automatically)." + +info: + $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo + @echo "Running Texinfo files through makeinfo..." + make -C $(BUILDDIR)/texinfo info + @echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo." + +gettext: + $(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale + @echo + @echo "Build finished. The message catalogs are in $(BUILDDIR)/locale." + +changes: + $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes + @echo + @echo "The overview file is in $(BUILDDIR)/changes." + +linkcheck: + $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck + @echo + @echo "Link check complete; look for any errors in the above output " \ + "or in $(BUILDDIR)/linkcheck/output.txt." + +doctest: + $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest + @echo "Testing of doctests in the sources finished, look at the " \ + "results in $(BUILDDIR)/doctest/output.txt." diff --git a/docs/conf.py b/docs/conf.py new file mode 100644 index 00000000..86aacce4 --- /dev/null +++ b/docs/conf.py @@ -0,0 +1,244 @@ +# -*- coding: utf-8 -*- +# +# SimPEG documentation build configuration file, created by +# sphinx-quickstart on Fri Aug 30 18:42:44 2013. +# +# This file is execfile()d with the current directory set to its containing dir. +# +# Note that not all possible configuration values are present in this +# autogenerated file. +# +# All configuration values have a default; values that are commented out +# serve to show the default. + +import sys, os + +# If extensions (or modules to document with autodoc) are in another directory, +# add these directories to sys.path here. If the directory is relative to the +# documentation root, use os.path.abspath to make it absolute, like shown here. +#sys.path.insert(0, os.path.abspath('.')) + +sys.path.append('../') + +# -- General configuration ----------------------------------------------------- + +# If your documentation needs a minimal Sphinx version, state it here. +#needs_sphinx = '1.0' + +# Add any Sphinx extension module names here, as strings. They can be extensions +# coming with Sphinx (named 'sphinx.ext.*') or your custom ones. +extensions = ['sphinx.ext.todo', 'sphinx.ext.mathjax', 'sphinx.ext.viewcode', 'sphinx.ext.autodoc', 'matplotlib.sphinxext.plot_directive'] + +# Add any paths that contain templates here, relative to this directory. +templates_path = ['_templates'] + +# The suffix of source filenames. +source_suffix = '.rst' + +# The encoding of source files. +#source_encoding = 'utf-8-sig' + +# The master toctree document. +master_doc = 'index' + +# General information about the project. +project = u'SimPEG' +copyright = u'2013, SimPEG Developers' + +# The version info for the project you're documenting, acts as replacement for +# |version| and |release|, also used in various other places throughout the +# built documents. +# +# The short X.Y version. +version = '0.0.1' +# The full version, including alpha/beta/rc tags. +release = '0.0.1' + +# The language for content autogenerated by Sphinx. Refer to documentation +# for a list of supported languages. +#language = None + +# There are two options for replacing |today|: either, you set today to some +# non-false value, then it is used: +#today = '' +# Else, today_fmt is used as the format for a strftime call. +#today_fmt = '%B %d, %Y' + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +exclude_patterns = ['_build'] + +# The reST default role (used for this markup: `text`) to use for all documents. +#default_role = None + +# If true, '()' will be appended to :func: etc. cross-reference text. +#add_function_parentheses = True + +# If true, the current module name will be prepended to all description +# unit titles (such as .. function::). +#add_module_names = True + +# If true, sectionauthor and moduleauthor directives will be shown in the +# output. They are ignored by default. +#show_authors = False + +# The name of the Pygments (syntax highlighting) style to use. +pygments_style = 'sphinx' + +# A list of ignored prefixes for module index sorting. +#modindex_common_prefix = [] + + +# -- Options for HTML output --------------------------------------------------- + +# The theme to use for HTML and HTML Help pages. See the documentation for +# a list of builtin themes. +html_theme = 'default' + +# Theme options are theme-specific and customize the look and feel of a theme +# further. For a list of options available for each theme, see the +# documentation. +#html_theme_options = {} + +# Add any paths that contain custom themes here, relative to this directory. +#html_theme_path = [] + +# The name for this set of Sphinx documents. If None, it defaults to +# " v documentation". +#html_title = None + +# A shorter title for the navigation bar. Default is the same as html_title. +#html_short_title = None + +# The name of an image file (relative to this directory) to place at the top +# of the sidebar. +#html_logo = None + +# The name of an image file (within the static path) to use as favicon of the +# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 +# pixels large. +#html_favicon = None + +# Add any paths that contain custom static files (such as style sheets) here, +# relative to this directory. They are copied after the builtin static files, +# so a file named "default.css" will overwrite the builtin "default.css". +html_static_path = ['_static'] + +# If not '', a 'Last updated on:' timestamp is inserted at every page bottom, +# using the given strftime format. +#html_last_updated_fmt = '%b %d, %Y' + +# If true, SmartyPants will be used to convert quotes and dashes to +# typographically correct entities. +#html_use_smartypants = True + +# Custom sidebar templates, maps document names to template names. +#html_sidebars = {} + +# Additional templates that should be rendered to pages, maps page names to +# template names. +#html_additional_pages = {} + +# If false, no module index is generated. +#html_domain_indices = True + +# If false, no index is generated. +#html_use_index = True + +# If true, the index is split into individual pages for each letter. +#html_split_index = False + +# If true, links to the reST sources are added to the pages. +#html_show_sourcelink = True + +# If true, "Created using Sphinx" is shown in the HTML footer. Default is True. +#html_show_sphinx = True + +# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True. +#html_show_copyright = True + +# If true, an OpenSearch description file will be output, and all pages will +# contain a tag referring to it. The value of this option must be the +# base URL from which the finished HTML is served. +#html_use_opensearch = '' + +# This is the file name suffix for HTML files (e.g. ".xhtml"). +#html_file_suffix = None + +# Output file base name for HTML help builder. +htmlhelp_basename = 'SimPEGdoc' + + +# -- Options for LaTeX output -------------------------------------------------- + +latex_elements = { +# The paper size ('letterpaper' or 'a4paper'). +#'papersize': 'letterpaper', + +# The font size ('10pt', '11pt' or '12pt'). +#'pointsize': '10pt', + +# Additional stuff for the LaTeX preamble. +#'preamble': '', +} + +# Grouping the document tree into LaTeX files. List of tuples +# (source start file, target name, title, author, documentclass [howto/manual]). +latex_documents = [ + ('index', 'SimPEG.tex', u'SimPEG Documentation', + u'Rowan Cockett', 'manual'), +] + +# The name of an image file (relative to this directory) to place at the top of +# the title page. +#latex_logo = None + +# For "manual" documents, if this is true, then toplevel headings are parts, +# not chapters. +#latex_use_parts = False + +# If true, show page references after internal links. +#latex_show_pagerefs = False + +# If true, show URL addresses after external links. +#latex_show_urls = False + +# Documents to append as an appendix to all manuals. +#latex_appendices = [] + +# If false, no module index is generated. +#latex_domain_indices = True + + +# -- Options for manual page output -------------------------------------------- + +# One entry per manual page. List of tuples +# (source start file, name, description, authors, manual section). +man_pages = [ + ('index', 'simpeg', u'SimPEG Documentation', + [u'Rowan Cockett'], 1) +] + +# If true, show URL addresses after external links. +#man_show_urls = False + + +# -- Options for Texinfo output ------------------------------------------------ + +# Grouping the document tree into Texinfo files. List of tuples +# (source start file, target name, title, author, +# dir menu entry, description, category) +texinfo_documents = [ + ('index', 'SimPEG', u'SimPEG Documentation', + u'Rowan Cockett', 'SimPEG', 'One line description of project.', + 'Miscellaneous'), +] + +# Documents to append as an appendix to all manuals. +#texinfo_appendices = [] + +# If false, no module index is generated. +#texinfo_domain_indices = True + +# How to display URL addresses: 'footnote', 'no', or 'inline'. +#texinfo_show_urls = 'footnote' diff --git a/docs/index.rst b/docs/index.rst new file mode 100644 index 00000000..69dcd3a0 --- /dev/null +++ b/docs/index.rst @@ -0,0 +1,34 @@ +.. image:: simpeg-logo.png + :width: 300 px + :alt: SimPEG + :align: center + + +SimPEG for Magnetotellurics +=========================== + +SimPEG (Simulation and Parameter Estimation in Geophysics) is a python +package for simulation and gradient based parameter estimation in the +context of geoscience applications. + +simpegMT uses SimPEG as the framework for the forward and inverse +magnetotellurics geophysical problems. + + +Testing simpegMT +================ + +* Master Branch + .. image:: https://travis-ci.org/simpeg/simpegmt.svg?branch=master + :target: https://travis-ci.org/simpeg/simpegmt + :alt: Master Branch + :align: center + + +Project Index & Search +====================== + +* :ref:`genindex` +* :ref:`modindex` +* :ref:`search` + diff --git a/docs/make.bat b/docs/make.bat new file mode 100644 index 00000000..2ac3df69 --- /dev/null +++ b/docs/make.bat @@ -0,0 +1,190 @@ +@ECHO OFF + +REM Command file for Sphinx documentation + +if "%SPHINXBUILD%" == "" ( + set SPHINXBUILD=sphinx-build +) +set BUILDDIR=_build +set ALLSPHINXOPTS=-d %BUILDDIR%/doctrees %SPHINXOPTS% . +set I18NSPHINXOPTS=%SPHINXOPTS% . +if NOT "%PAPER%" == "" ( + set ALLSPHINXOPTS=-D latex_paper_size=%PAPER% %ALLSPHINXOPTS% + set I18NSPHINXOPTS=-D latex_paper_size=%PAPER% %I18NSPHINXOPTS% +) + +if "%1" == "" goto help + +if "%1" == "help" ( + :help + echo.Please use `make ^` where ^ is one of + echo. html to make standalone HTML files + echo. dirhtml to make HTML files named index.html in directories + echo. singlehtml to make a single large HTML file + echo. pickle to make pickle files + echo. json to make JSON files + echo. htmlhelp to make HTML files and a HTML help project + echo. qthelp to make HTML files and a qthelp project + echo. devhelp to make HTML files and a Devhelp project + echo. epub to make an epub + echo. latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter + echo. text to make text files + echo. man to make manual pages + echo. texinfo to make Texinfo files + echo. gettext to make PO message catalogs + echo. changes to make an overview over all changed/added/deprecated items + echo. linkcheck to check all external links for integrity + echo. doctest to run all doctests embedded in the documentation if enabled + goto end +) + +if "%1" == "clean" ( + for /d %%i in (%BUILDDIR%\*) do rmdir /q /s %%i + del /q /s %BUILDDIR%\* + goto end +) + +if "%1" == "html" ( + %SPHINXBUILD% -b html %ALLSPHINXOPTS% %BUILDDIR%/html + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. The HTML pages are in %BUILDDIR%/html. + goto end +) + +if "%1" == "dirhtml" ( + %SPHINXBUILD% -b dirhtml %ALLSPHINXOPTS% %BUILDDIR%/dirhtml + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. The HTML pages are in %BUILDDIR%/dirhtml. + goto end +) + +if "%1" == "singlehtml" ( + %SPHINXBUILD% -b singlehtml %ALLSPHINXOPTS% %BUILDDIR%/singlehtml + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. The HTML pages are in %BUILDDIR%/singlehtml. + goto end +) + +if "%1" == "pickle" ( + %SPHINXBUILD% -b pickle %ALLSPHINXOPTS% %BUILDDIR%/pickle + if errorlevel 1 exit /b 1 + echo. + echo.Build finished; now you can process the pickle files. + goto end +) + +if "%1" == "json" ( + %SPHINXBUILD% -b json %ALLSPHINXOPTS% %BUILDDIR%/json + if errorlevel 1 exit /b 1 + echo. + echo.Build finished; now you can process the JSON files. + goto end +) + +if "%1" == "htmlhelp" ( + %SPHINXBUILD% -b htmlhelp %ALLSPHINXOPTS% %BUILDDIR%/htmlhelp + if errorlevel 1 exit /b 1 + echo. + echo.Build finished; now you can run HTML Help Workshop with the ^ +.hhp project file in %BUILDDIR%/htmlhelp. + goto end +) + +if "%1" == "qthelp" ( + %SPHINXBUILD% -b qthelp %ALLSPHINXOPTS% %BUILDDIR%/qthelp + if errorlevel 1 exit /b 1 + echo. + echo.Build finished; now you can run "qcollectiongenerator" with the ^ +.qhcp project file in %BUILDDIR%/qthelp, like this: + echo.^> qcollectiongenerator %BUILDDIR%\qthelp\SimPEG.qhcp + echo.To view the help file: + echo.^> assistant -collectionFile %BUILDDIR%\qthelp\SimPEG.ghc + goto end +) + +if "%1" == "devhelp" ( + %SPHINXBUILD% -b devhelp %ALLSPHINXOPTS% %BUILDDIR%/devhelp + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. + goto end +) + +if "%1" == "epub" ( + %SPHINXBUILD% -b epub %ALLSPHINXOPTS% %BUILDDIR%/epub + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. The epub file is in %BUILDDIR%/epub. + goto end +) + +if "%1" == "latex" ( + %SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex + if errorlevel 1 exit /b 1 + echo. + echo.Build finished; the LaTeX files are in %BUILDDIR%/latex. + goto end +) + +if "%1" == "text" ( + %SPHINXBUILD% -b text %ALLSPHINXOPTS% %BUILDDIR%/text + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. The text files are in %BUILDDIR%/text. + goto end +) + +if "%1" == "man" ( + %SPHINXBUILD% -b man %ALLSPHINXOPTS% %BUILDDIR%/man + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. The manual pages are in %BUILDDIR%/man. + goto end +) + +if "%1" == "texinfo" ( + %SPHINXBUILD% -b texinfo %ALLSPHINXOPTS% %BUILDDIR%/texinfo + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. The Texinfo files are in %BUILDDIR%/texinfo. + goto end +) + +if "%1" == "gettext" ( + %SPHINXBUILD% -b gettext %I18NSPHINXOPTS% %BUILDDIR%/locale + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. The message catalogs are in %BUILDDIR%/locale. + goto end +) + +if "%1" == "changes" ( + %SPHINXBUILD% -b changes %ALLSPHINXOPTS% %BUILDDIR%/changes + if errorlevel 1 exit /b 1 + echo. + echo.The overview file is in %BUILDDIR%/changes. + goto end +) + +if "%1" == "linkcheck" ( + %SPHINXBUILD% -b linkcheck %ALLSPHINXOPTS% %BUILDDIR%/linkcheck + if errorlevel 1 exit /b 1 + echo. + echo.Link check complete; look for any errors in the above output ^ +or in %BUILDDIR%/linkcheck/output.txt. + goto end +) + +if "%1" == "doctest" ( + %SPHINXBUILD% -b doctest %ALLSPHINXOPTS% %BUILDDIR%/doctest + if errorlevel 1 exit /b 1 + echo. + echo.Testing of doctests in the sources finished, look at the ^ +results in %BUILDDIR%/doctest/output.txt. + goto end +) + +:end diff --git a/docs/simpeg-logo.png b/docs/simpeg-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..a0ec740f135721f5cf7d1c430ae2908c20ed4547 GIT binary patch literal 23545 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
>hg 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