From fcfe10a7dce2efb8d45d2b43d10f83f6fea66188 Mon Sep 17 00:00:00 2001 From: Daniel Huppmann Date: Sun, 27 Oct 2019 23:38:47 +0100 Subject: [PATCH 01/18] switch to Sphinx standard theme (recommended by RTD) --- doc/source/_themes/LICENSE | 45 -- doc/source/_themes/README.rst | 25 - doc/source/_themes/flask_theme_support.py | 86 ---- doc/source/_themes/kr/layout.html | 16 - doc/source/_themes/kr/relations.html | 19 - doc/source/_themes/kr/static/flasky.css_t | 445 ------------------ doc/source/_themes/kr/static/small_flask.css | 90 ---- doc/source/_themes/kr/theme.conf | 7 - doc/source/_themes/kr_small/layout.html | 22 - .../_themes/kr_small/static/flasky.css_t | 287 ----------- doc/source/_themes/kr_small/theme.conf | 10 - doc/source/conf.py | 5 +- 12 files changed, 1 insertion(+), 1056 deletions(-) delete mode 100644 doc/source/_themes/LICENSE delete mode 100644 doc/source/_themes/README.rst delete mode 100644 doc/source/_themes/flask_theme_support.py delete mode 100644 doc/source/_themes/kr/layout.html delete mode 100644 doc/source/_themes/kr/relations.html delete mode 100644 doc/source/_themes/kr/static/flasky.css_t delete mode 100644 doc/source/_themes/kr/static/small_flask.css delete mode 100644 doc/source/_themes/kr/theme.conf delete mode 100644 doc/source/_themes/kr_small/layout.html delete mode 100644 doc/source/_themes/kr_small/static/flasky.css_t delete mode 100644 doc/source/_themes/kr_small/theme.conf diff --git a/doc/source/_themes/LICENSE b/doc/source/_themes/LICENSE deleted file mode 100644 index 81f4d3059..000000000 --- a/doc/source/_themes/LICENSE +++ /dev/null @@ -1,45 +0,0 @@ -Modifications: - -Copyright (c) 2010 Kenneth Reitz. - - -Original Project: - -Copyright (c) 2010 by Armin Ronacher. - - -Some rights reserved. - -Redistribution and use in source and binary forms of the theme, with or -without modification, are permitted provided that the following conditions -are met: - -* Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - -* The names of the contributors may not be used to endorse or - promote products derived from this software without specific - prior written permission. - -We kindly ask you to only use these themes in an unmodified manner just -for Flask and Flask-related products, not for unrelated projects. If you -like the visual style and want to use it for your own projects, please -consider making some larger changes to the themes (such as changing -font faces, sizes, colors or margins). - -THIS THEME IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE -LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS THEME, EVEN IF ADVISED OF THE -POSSIBILITY OF SUCH DAMAGE. diff --git a/doc/source/_themes/README.rst b/doc/source/_themes/README.rst deleted file mode 100644 index e8179f969..000000000 --- a/doc/source/_themes/README.rst +++ /dev/null @@ -1,25 +0,0 @@ -krTheme Sphinx Style -==================== - -This repository contains sphinx styles Kenneth Reitz uses in most of -his projects. It is a drivative of Mitsuhiko's themes for Flask and Flask related -projects. To use this style in your Sphinx documentation, follow -this guide: - -1. put this folder as _themes into your docs folder. Alternatively - you can also use git submodules to check out the contents there. - -2. add this to your conf.py: :: - - sys.path.append(os.path.abspath('_themes')) - html_theme_path = ['_themes'] - html_theme = 'kr' - -The following themes exist: - -**kr** - the standard flask documentation theme for large projects - -**kr_small** - small one-page theme. Intended to be used by very small addon libraries. - diff --git a/doc/source/_themes/flask_theme_support.py b/doc/source/_themes/flask_theme_support.py deleted file mode 100644 index 33f47449c..000000000 --- a/doc/source/_themes/flask_theme_support.py +++ /dev/null @@ -1,86 +0,0 @@ -# flasky extensions. flasky pygments style based on tango style -from pygments.style import Style -from pygments.token import Keyword, Name, Comment, String, Error, \ - Number, Operator, Generic, Whitespace, Punctuation, Other, Literal - - -class FlaskyStyle(Style): - background_color = "#f8f8f8" - default_style = "" - - styles = { - # No corresponding class for the following: - #Text: "", # class: '' - Whitespace: "underline #f8f8f8", # class: 'w' - Error: "#a40000 border:#ef2929", # class: 'err' - Other: "#000000", # class 'x' - - Comment: "italic #8f5902", # class: 'c' - Comment.Preproc: "noitalic", # class: 'cp' - - Keyword: "bold #004461", # class: 'k' - Keyword.Constant: "bold #004461", # class: 'kc' - Keyword.Declaration: "bold #004461", # class: 'kd' - Keyword.Namespace: "bold #004461", # class: 'kn' - Keyword.Pseudo: "bold #004461", # class: 'kp' - Keyword.Reserved: "bold #004461", # class: 'kr' - Keyword.Type: "bold #004461", # class: 'kt' - - Operator: "#582800", # class: 'o' - Operator.Word: "bold #004461", # class: 'ow' - like keywords - - Punctuation: "bold #000000", # class: 'p' - - # because special names such as Name.Class, Name.Function, etc. - # are not recognized as such later in the parsing, we choose them - # to look the same as ordinary variables. - Name: "#000000", # class: 'n' - Name.Attribute: "#c4a000", # class: 'na' - to be revised - Name.Builtin: "#004461", # class: 'nb' - Name.Builtin.Pseudo: "#3465a4", # class: 'bp' - Name.Class: "#000000", # class: 'nc' - to be revised - Name.Constant: "#000000", # class: 'no' - to be revised - Name.Decorator: "#888", # class: 'nd' - to be revised - Name.Entity: "#ce5c00", # class: 'ni' - Name.Exception: "bold #cc0000", # class: 'ne' - Name.Function: "#000000", # class: 'nf' - Name.Property: "#000000", # class: 'py' - Name.Label: "#f57900", # class: 'nl' - Name.Namespace: "#000000", # class: 'nn' - to be revised - Name.Other: "#000000", # class: 'nx' - Name.Tag: "bold #004461", # class: 'nt' - like a keyword - Name.Variable: "#000000", # class: 'nv' - to be revised - Name.Variable.Class: "#000000", # class: 'vc' - to be revised - Name.Variable.Global: "#000000", # class: 'vg' - to be revised - Name.Variable.Instance: "#000000", # class: 'vi' - to be revised - - Number: "#990000", # class: 'm' - - Literal: "#000000", # class: 'l' - Literal.Date: "#000000", # class: 'ld' - - String: "#4e9a06", # class: 's' - String.Backtick: "#4e9a06", # class: 'sb' - String.Char: "#4e9a06", # class: 'sc' - String.Doc: "italic #8f5902", # class: 'sd' - like a comment - String.Double: "#4e9a06", # class: 's2' - String.Escape: "#4e9a06", # class: 'se' - String.Heredoc: "#4e9a06", # class: 'sh' - String.Interpol: "#4e9a06", # class: 'si' - String.Other: "#4e9a06", # class: 'sx' - String.Regex: "#4e9a06", # class: 'sr' - String.Single: "#4e9a06", # class: 's1' - String.Symbol: "#4e9a06", # class: 'ss' - - Generic: "#000000", # class: 'g' - Generic.Deleted: "#a40000", # class: 'gd' - Generic.Emph: "italic #000000", # class: 'ge' - Generic.Error: "#ef2929", # class: 'gr' - Generic.Heading: "bold #000080", # class: 'gh' - Generic.Inserted: "#00A000", # class: 'gi' - Generic.Output: "#888", # class: 'go' - Generic.Prompt: "#745334", # class: 'gp' - Generic.Strong: "bold #000000", # class: 'gs' - Generic.Subheading: "bold #800080", # class: 'gu' - Generic.Traceback: "bold #a40000", # class: 'gt' - } diff --git a/doc/source/_themes/kr/layout.html b/doc/source/_themes/kr/layout.html deleted file mode 100644 index bf0b3c78b..000000000 --- a/doc/source/_themes/kr/layout.html +++ /dev/null @@ -1,16 +0,0 @@ -{%- extends "basic/layout.html" %} -{%- block extrahead %} - {{ super() }} - {% if theme_touch_icon %} - - {% endif %} - - -{% endblock %} -{%- block relbar2 %}{% endblock %} -{%- block footer %} - -{%- endblock %} diff --git a/doc/source/_themes/kr/relations.html b/doc/source/_themes/kr/relations.html deleted file mode 100644 index 3bbcde85b..000000000 --- a/doc/source/_themes/kr/relations.html +++ /dev/null @@ -1,19 +0,0 @@ -

Related Topics

- diff --git a/doc/source/_themes/kr/static/flasky.css_t b/doc/source/_themes/kr/static/flasky.css_t deleted file mode 100644 index 577431050..000000000 --- a/doc/source/_themes/kr/static/flasky.css_t +++ /dev/null @@ -1,445 +0,0 @@ -/* - * flasky.css_t - * ~~~~~~~~~~~~ - * - * :copyright: Copyright 2010 by Armin Ronacher. Modifications by Kenneth Reitz. - * :license: Flask Design License, see LICENSE for details. - */ - -{% set page_width = '940px' %} -{% set sidebar_width = '220px' %} - -@import url("basic.css"); - -/* -- page layout ----------------------------------------------------------- */ - -body { - font-family: 'goudy old style', 'minion pro', 'bell mt', Georgia, 'Hiragino Mincho Pro'; - font-size: 17px; - background-color: white; - color: #000; - margin: 0; - padding: 0; -} - -div.document { - width: {{ page_width }}; - margin: 30px auto 0 auto; -} - -div.documentwrapper { - float: left; - width: 100%; -} - -div.bodywrapper { - margin: 0 0 0 {{ sidebar_width }}; -} - -div.sphinxsidebar { - width: {{ sidebar_width }}; -} - -hr { - border: 1px solid #B1B4B6; -} - -div.body { - background-color: #ffffff; - color: #3E4349; - padding: 0 30px 0 30px; -} - -img.floatingflask { - padding: 0 0 10px 10px; - float: right; -} - -div.footer { - width: {{ page_width }}; - margin: 20px auto 30px auto; - font-size: 14px; - color: #888; - text-align: right; -} - -div.footer a { - color: #888; -} - -div.related { - display: none; -} - -div.sphinxsidebar a { - color: #444; - text-decoration: none; - border-bottom: 1px dotted #999; -} - -div.sphinxsidebar a:hover { - border-bottom: 1px solid #999; -} - -div.sphinxsidebar { - font-size: 14px; - line-height: 1.5; -} - -div.sphinxsidebarwrapper { - padding: 18px 10px; -} - -div.sphinxsidebarwrapper p.logo { - padding: 0; - margin: -10px 0 0 -20px; - text-align: center; -} - -div.sphinxsidebar h3, -div.sphinxsidebar h4 { - font-family: 'Garamond', 'Georgia', serif; - color: #444; - font-size: 24px; - font-weight: normal; - margin: 0 0 5px 0; - padding: 0; -} - -div.sphinxsidebar h4 { - font-size: 20px; -} - -div.sphinxsidebar h3 a { - color: #444; -} - -div.sphinxsidebar p.logo a, -div.sphinxsidebar h3 a, -div.sphinxsidebar p.logo a:hover, -div.sphinxsidebar h3 a:hover { - border: none; -} - -div.sphinxsidebar p { - color: #555; - margin: 10px 0; -} - -div.sphinxsidebar ul { - margin: 10px 0; - padding: 0; - color: #000; -} - -div.sphinxsidebar input { - border: 1px solid #ccc; - font-family: 'Georgia', serif; - font-size: 1em; -} - -/* -- body styles ----------------------------------------------------------- */ - -a { - color: #004B6B; - text-decoration: underline; -} - -a:hover { - color: #6D4100; - text-decoration: underline; -} - -div.body h1, -div.body h2, -div.body h3, -div.body h4, -div.body h5, -div.body h6 { - font-family: 'Garamond', 'Georgia', serif; - font-weight: normal; - margin: 30px 0px 10px 0px; - padding: 0; -} - -div.body h1 { margin-top: 0; padding-top: 0; font-size: 240%; } -div.body h2 { font-size: 180%; } -div.body h3 { font-size: 150%; } -div.body h4 { font-size: 130%; } -div.body h5 { font-size: 100%; } -div.body h6 { font-size: 100%; } - -a.headerlink { - color: #ddd; - padding: 0 4px; - text-decoration: none; -} - -a.headerlink:hover { - color: #444; - background: #eaeaea; -} - -div.body p, div.body dd, div.body li { - line-height: 1.4em; -} - -div.admonition { - background: #fafafa; - margin: 20px -30px; - padding: 10px 30px; - border-top: 1px solid #ccc; - border-bottom: 1px solid #ccc; -} - -div.admonition tt.xref, div.admonition a tt { - border-bottom: 1px solid #fafafa; -} - -dd div.admonition { - margin-left: -60px; - padding-left: 60px; -} - -div.admonition p.admonition-title { - font-family: 'Garamond', 'Georgia', serif; - font-weight: normal; - font-size: 24px; - margin: 0 0 10px 0; - padding: 0; - line-height: 1; -} - -div.admonition p.last { - margin-bottom: 0; -} - -div.highlight { - background-color: white; -} - -dt:target, .highlight { - background: #FAF3E8; -} - -div.note { - background-color: #eee; - border: 1px solid #ccc; -} - -div.seealso { - background-color: #ffc; - border: 1px solid #ff6; -} - -div.topic { - background-color: #eee; -} - -p.admonition-title { - display: inline; -} - -p.admonition-title:after { - content: ":"; -} - -pre, tt { - font-family: 'Consolas', 'Menlo', 'Deja Vu Sans Mono', 'Bitstream Vera Sans Mono', monospace; - font-size: 0.9em; -} - -img.screenshot { -} - -tt.descname, tt.descclassname { - font-size: 0.95em; -} - -tt.descname { - padding-right: 0.08em; -} - -img.screenshot { - -moz-box-shadow: 2px 2px 4px #eee; - -webkit-box-shadow: 2px 2px 4px #eee; - box-shadow: 2px 2px 4px #eee; -} - -table.docutils { - border: 1px solid #888; - -moz-box-shadow: 2px 2px 4px #eee; - -webkit-box-shadow: 2px 2px 4px #eee; - box-shadow: 2px 2px 4px #eee; -} - -table.docutils td, table.docutils th { - border: 1px solid #888; - padding: 0.25em 0.7em; -} - -table.field-list, table.footnote { - border: none; - -moz-box-shadow: none; - -webkit-box-shadow: none; - box-shadow: none; -} - -table.footnote { - margin: 15px 0; - width: 100%; - border: 1px solid #eee; - background: #fdfdfd; - font-size: 0.9em; -} - -table.footnote + table.footnote { - margin-top: -15px; - border-top: none; -} - -table.field-list th { - padding: 0 0.8em 0 0; -} - -table.field-list td { - padding: 0; -} - -table.footnote td.label { - width: 0px; - padding: 0.3em 0 0.3em 0.5em; -} - -table.footnote td { - padding: 0.3em 0.5em; -} - -dl { - margin: 0; - padding: 0; -} - -dl dd { - margin-left: 30px; -} - -blockquote { - margin: 0 0 0 30px; - padding: 0; -} - -ul, ol { - margin: 10px 0 10px 30px; - padding: 0; -} - -pre { - background: #eee; - padding: 7px 30px; - margin: 15px -30px; - line-height: 1.3em; -} - -dl pre, blockquote pre, li pre { - margin-left: -60px; - padding-left: 60px; -} - -dl dl pre { - margin-left: -90px; - padding-left: 90px; -} - -tt { - background-color: #ecf0f3; - color: #222; - /* padding: 1px 2px; */ -} - -tt.xref, a tt { - background-color: #FBFBFB; - border-bottom: 1px solid white; -} - -a.reference { - text-decoration: none; - border-bottom: 1px dotted #004B6B; -} - -a.reference:hover { - border-bottom: 1px solid #6D4100; -} - -a.footnote-reference { - text-decoration: none; - font-size: 0.7em; - vertical-align: top; - border-bottom: 1px dotted #004B6B; -} - -a.footnote-reference:hover { - border-bottom: 1px solid #6D4100; -} - -a:hover tt { - background: #EEE; -} - - -@media screen and (max-width: 600px) { - - div.sphinxsidebar { - display: none; - } - - div.document { - width: 100%; - - } - - div.documentwrapper { - margin-left: 0; - margin-top: 0; - margin-right: 0; - margin-bottom: 0; - } - - div.bodywrapper { - margin-top: 0; - margin-right: 0; - margin-bottom: 0; - margin-left: 0; - } - - ul { - margin-left: 0; - } - - .document { - width: auto; - } - - .footer { - width: auto; - } - - .bodywrapper { - margin: 0; - } - - .footer { - width: auto; - } - - .github { - display: none; - } - -} - -/* misc. */ - -.revsys-inline { - display: none!important; -} \ No newline at end of file diff --git a/doc/source/_themes/kr/static/small_flask.css b/doc/source/_themes/kr/static/small_flask.css deleted file mode 100644 index 8d55e95fb..000000000 --- a/doc/source/_themes/kr/static/small_flask.css +++ /dev/null @@ -1,90 +0,0 @@ -/* - * small_flask.css_t - * ~~~~~~~~~~~~~~~~~ - * - * :copyright: Copyright 2010 by Armin Ronacher. - * :license: Flask Design License, see LICENSE for details. - */ - -body { - margin: 0; - padding: 20px 30px; -} - -div.documentwrapper { - float: none; - background: white; -} - -div.sphinxsidebar { - display: block; - float: none; - width: 102.5%; - margin: 50px -30px -20px -30px; - padding: 10px 20px; - background: #333; - color: white; -} - -div.sphinxsidebar h3, div.sphinxsidebar h4, div.sphinxsidebar p, -div.sphinxsidebar h3 a { - color: white; -} - -div.sphinxsidebar a { - color: #aaa; -} - -div.sphinxsidebar p.logo { - display: none; -} - -div.document { - width: 100%; - margin: 0; -} - -div.related { - display: block; - margin: 0; - padding: 10px 0 20px 0; -} - -div.related ul, -div.related ul li { - margin: 0; - padding: 0; -} - -div.footer { - display: none; -} - -div.bodywrapper { - margin: 0; -} - -div.body { - min-height: 0; - padding: 0; -} - -.rtd_doc_footer { - display: none; -} - -.document { - width: auto; -} - -.footer { - width: auto; -} - -.footer { - width: auto; -} - -.github { - display: none; -} \ No newline at end of file diff --git a/doc/source/_themes/kr/theme.conf b/doc/source/_themes/kr/theme.conf deleted file mode 100644 index 307a1f0d6..000000000 --- a/doc/source/_themes/kr/theme.conf +++ /dev/null @@ -1,7 +0,0 @@ -[theme] -inherit = basic -stylesheet = flasky.css -pygments_style = flask_theme_support.FlaskyStyle - -[options] -touch_icon = diff --git a/doc/source/_themes/kr_small/layout.html b/doc/source/_themes/kr_small/layout.html deleted file mode 100644 index aa1716aaf..000000000 --- a/doc/source/_themes/kr_small/layout.html +++ /dev/null @@ -1,22 +0,0 @@ -{% extends "basic/layout.html" %} -{% block header %} - {{ super() }} - {% if pagename == 'index' %} -
- {% endif %} -{% endblock %} -{% block footer %} - {% if pagename == 'index' %} -
- {% endif %} -{% endblock %} -{# do not display relbars #} -{% block relbar1 %}{% endblock %} -{% block relbar2 %} - {% if theme_github_fork %} - Fork me on GitHub - {% endif %} -{% endblock %} -{% block sidebar1 %}{% endblock %} -{% block sidebar2 %}{% endblock %} diff --git a/doc/source/_themes/kr_small/static/flasky.css_t b/doc/source/_themes/kr_small/static/flasky.css_t deleted file mode 100644 index fe2141c56..000000000 --- a/doc/source/_themes/kr_small/static/flasky.css_t +++ /dev/null @@ -1,287 +0,0 @@ -/* - * flasky.css_t - * ~~~~~~~~~~~~ - * - * Sphinx stylesheet -- flasky theme based on nature theme. - * - * :copyright: Copyright 2007-2010 by the Sphinx team, see AUTHORS. - * :license: BSD, see LICENSE for details. - * - */ - -@import url("basic.css"); - -/* -- page layout ----------------------------------------------------------- */ - -body { - font-family: 'Georgia', serif; - font-size: 17px; - color: #000; - background: white; - margin: 0; - padding: 0; -} - -div.documentwrapper { - float: left; - width: 100%; -} - -div.bodywrapper { - margin: 40px auto 0 auto; - width: 700px; -} - -hr { - border: 1px solid #B1B4B6; -} - -div.body { - background-color: #ffffff; - color: #3E4349; - padding: 0 30px 30px 30px; -} - -img.floatingflask { - padding: 0 0 10px 10px; - float: right; -} - -div.footer { - text-align: right; - color: #888; - padding: 10px; - font-size: 14px; - width: 650px; - margin: 0 auto 40px auto; -} - -div.footer a { - color: #888; - text-decoration: underline; -} - -div.related { - line-height: 32px; - color: #888; -} - -div.related ul { - padding: 0 0 0 10px; -} - -div.related a { - color: #444; -} - -/* -- body styles ----------------------------------------------------------- */ - -a { - color: #004B6B; - text-decoration: underline; -} - -a:hover { - color: #6D4100; - text-decoration: underline; -} - -div.body { - padding-bottom: 40px; /* saved for footer */ -} - -div.body h1, -div.body h2, -div.body h3, -div.body h4, -div.body h5, -div.body h6 { - font-family: 'Garamond', 'Georgia', serif; - font-weight: normal; - margin: 30px 0px 10px 0px; - padding: 0; -} - -{% if theme_index_logo %} -div.indexwrapper h1 { - text-indent: -999999px; - background: url({{ theme_index_logo }}) no-repeat center center; - height: {{ theme_index_logo_height }}; -} -{% endif %} - -div.body h2 { font-size: 180%; } -div.body h3 { font-size: 150%; } -div.body h4 { font-size: 130%; } -div.body h5 { font-size: 100%; } -div.body h6 { font-size: 100%; } - -a.headerlink { - color: white; - padding: 0 4px; - text-decoration: none; -} - -a.headerlink:hover { - color: #444; - background: #eaeaea; -} - -div.body p, div.body dd, div.body li { - line-height: 1.4em; -} - -div.admonition { - background: #fafafa; - margin: 20px -30px; - padding: 10px 30px; - border-top: 1px solid #ccc; - border-bottom: 1px solid #ccc; -} - -div.admonition p.admonition-title { - font-family: 'Garamond', 'Georgia', serif; - font-weight: normal; - font-size: 24px; - margin: 0 0 10px 0; - padding: 0; - line-height: 1; -} - -div.admonition p.last { - margin-bottom: 0; -} - -div.highlight{ - background-color: white; -} - -dt:target, .highlight { - background: #FAF3E8; -} - -div.note { - background-color: #eee; - border: 1px solid #ccc; -} - -div.seealso { - background-color: #ffc; - border: 1px solid #ff6; -} - -div.topic { - background-color: #eee; -} - -div.warning { - background-color: #ffe4e4; - border: 1px solid #f66; -} - -p.admonition-title { - display: inline; -} - -p.admonition-title:after { - content: ":"; -} - -pre, tt { - font-family: 'Consolas', 'Menlo', 'Deja Vu Sans Mono', 'Bitstream Vera Sans Mono', monospace; - font-size: 0.85em; -} - -img.screenshot { -} - -tt.descname, tt.descclassname { - font-size: 0.95em; -} - -tt.descname { - padding-right: 0.08em; -} - -img.screenshot { - -moz-box-shadow: 2px 2px 4px #eee; - -webkit-box-shadow: 2px 2px 4px #eee; - box-shadow: 2px 2px 4px #eee; -} - -table.docutils { - border: 1px solid #888; - -moz-box-shadow: 2px 2px 4px #eee; - -webkit-box-shadow: 2px 2px 4px #eee; - box-shadow: 2px 2px 4px #eee; -} - -table.docutils td, table.docutils th { - border: 1px solid #888; - padding: 0.25em 0.7em; -} - -table.field-list, table.footnote { - border: none; - -moz-box-shadow: none; - -webkit-box-shadow: none; - box-shadow: none; -} - -table.footnote { - margin: 15px 0; - width: 100%; - border: 1px solid #eee; -} - -table.field-list th { - padding: 0 0.8em 0 0; -} - -table.field-list td { - padding: 0; -} - -table.footnote td { - padding: 0.5em; -} - -dl { - margin: 0; - padding: 0; -} - -dl dd { - margin-left: 30px; -} - -pre { - padding: 0; - margin: 15px -30px; - padding: 8px; - line-height: 1.3em; - padding: 7px 30px; - background: #eee; - border-radius: 2px; - -moz-border-radius: 2px; - -webkit-border-radius: 2px; -} - -dl pre { - margin-left: -60px; - padding-left: 60px; -} - -tt { - background-color: #ecf0f3; - color: #222; - /* padding: 1px 2px; */ -} - -tt.xref, a tt { - background-color: #FBFBFB; -} - -a:hover tt { - background: #EEE; -} diff --git a/doc/source/_themes/kr_small/theme.conf b/doc/source/_themes/kr_small/theme.conf deleted file mode 100644 index 542b46251..000000000 --- a/doc/source/_themes/kr_small/theme.conf +++ /dev/null @@ -1,10 +0,0 @@ -[theme] -inherit = basic -stylesheet = flasky.css -nosidebar = true -pygments_style = flask_theme_support.FlaskyStyle - -[options] -index_logo = '' -index_logo_height = 120px -github_fork = '' diff --git a/doc/source/conf.py b/doc/source/conf.py index be4aa634a..07371198d 100644 --- a/doc/source/conf.py +++ b/doc/source/conf.py @@ -132,10 +132,7 @@ # The theme to use for HTML and HTML Help pages. See the documentation for # a list of builtin themes. #html_theme = 'cloud' - -sys.path.append(os.path.abspath('_themes')) -html_theme_path = ['_themes'] -html_theme = 'kr' +html_theme = 'alabaster' # 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 From 41ed66b07dbb91b135e536445e1a0ace7eaf09fc Mon Sep 17 00:00:00 2001 From: Daniel Huppmann Date: Sun, 27 Oct 2019 23:49:37 +0100 Subject: [PATCH 02/18] set sidebars with GitHub button and use theme for logo settings --- doc/source/conf.py | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/doc/source/conf.py b/doc/source/conf.py index 07371198d..45cea4b6b 100644 --- a/doc/source/conf.py +++ b/doc/source/conf.py @@ -137,7 +137,12 @@ # 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 = {} +html_theme_options = { + 'logo': 'logo.svg', + 'github_button': True, + 'github_user': 'iamconsortium', + 'github_repo': 'pyam', +} # Add any paths that contain custom themes here, relative to this directory. #html_theme_path = [] @@ -151,7 +156,7 @@ # The name of an image file (relative to this directory) to place at the top # of the sidebar. -html_logo = '_static/logo.svg' +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 @@ -177,7 +182,9 @@ #html_use_smartypants = True # Custom sidebar templates, maps document names to template names. -#html_sidebars = {} +html_sidebars = { + '**': ['about.html', 'globaltoc.html', 'searchbox.html'] +} # Additional templates that should be rendered to pages, maps page names to # template names. From 98851aac52ede9fcca31ea06016b83795bfdb7ff Mon Sep 17 00:00:00 2001 From: Daniel Huppmann Date: Mon, 28 Oct 2019 00:02:21 +0100 Subject: [PATCH 03/18] add description in sidebar --- doc/source/conf.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/doc/source/conf.py b/doc/source/conf.py index 45cea4b6b..4f071c71e 100644 --- a/doc/source/conf.py +++ b/doc/source/conf.py @@ -139,6 +139,9 @@ # documentation. html_theme_options = { 'logo': 'logo.svg', + 'logo_name': True, + 'description': 'analysis & visualization of integrated-assessment scenarios', + 'sidebar_width': '225px', 'github_button': True, 'github_user': 'iamconsortium', 'github_repo': 'pyam', From eccdf0ce4f40597ba8c73c9f0102dd9d6b6a619a Mon Sep 17 00:00:00 2001 From: Daniel Huppmann Date: Mon, 28 Oct 2019 00:02:34 +0100 Subject: [PATCH 04/18] automatically bump copyright year going forward --- doc/source/conf.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/doc/source/conf.py b/doc/source/conf.py index 4f071c71e..46471df87 100644 --- a/doc/source/conf.py +++ b/doc/source/conf.py @@ -15,6 +15,7 @@ import sys import os import shlex +from datetime import datetime # 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 @@ -69,7 +70,8 @@ # General information about the project. project = u'pyam' -copyright = u'2018, Matthew Gidden & Daniel Huppmann' +year = datetime.now().year +copyright = '{}, Matthew Gidden & Daniel Huppmann'.format(year) author = u'Matthew Gidden & Daniel Huppmann' # The version info for the project you're documenting, acts as replacement for From 6e398fc94ce82ab556a05804aea6b9b802940779 Mon Sep 17 00:00:00 2001 From: Daniel Huppmann Date: Mon, 28 Oct 2019 00:14:58 +0100 Subject: [PATCH 05/18] restructure pyam overview on index page --- doc/source/index.rst | 40 ++++++++++++++++++++-------------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/doc/source/index.rst b/doc/source/index.rst index e3d6e8981..f9ecff0d9 100644 --- a/doc/source/index.rst +++ b/doc/source/index.rst @@ -44,35 +44,35 @@ Release v\ |version|. .. |doi| image:: https://zenodo.org/badge/113359260.svg :target: https://zenodo.org/badge/latestdoi/113359260 -The **pyam** Python package provides a suite of diagnostic tools and functions -for analyzing and visualizing input data and scenario results -of your favorite integrated-assessment model(s). +Overview +-------- -The source code for **pyam** is available on `Github`_. +The open-source Python package :code:`pyam` provides a suite of tools and functions +for analyzing and visualizing input data (i.e., assumptions/parametrization) +and results (model output) of integrated-assessment scenarios. -.. _`Github`: - https://github.com/IAMconsortium/pyam +Key features: +~~~~~~~~~~~~~ -Overview --------- + - Simple analysis of timeseries data in the IAMC format (more about `that`_) + with an interface similar in feel and style to the widely + used `pandas.DataFrame`_ + - Advanced visualization and plotting function (see the `gallery`_) + - Diagnostic checks for scripted validation of scenario data and results + +The source code for :code:`pyam` is available on `Github`_. -Some of the **pyam** features include: - - Easily filter and manipulate data in the `IAMC`_ timeseries format - - An interface similar in feel and style to `pandas.DataFrame`_ - - Advanced visualization and plotting functions. - - Diagnostic checks for non-reported variables or timeseries values - to analyze and validate scenario data. - - Categorization of scenarios according to timeseries data - or metadata for further analysis. +.. _`that`: + data.html -.. _`IAMC`: - https://data.ene.iiasa.ac.at/database +.. _`gallery`: + examples/index.html .. _`pandas.DataFrame`: https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.html -After installing, check out our tutorials or our plotting gallery to get -started. +.. _`Github`: + https://github.com/IAMconsortium/pyam Documentation ------------- From 4abbd61f749ceb30ef8672f19c080fd698efae5d Mon Sep 17 00:00:00 2001 From: Daniel Huppmann Date: Mon, 28 Oct 2019 08:04:40 +0100 Subject: [PATCH 06/18] move 'contributing' to own page --- CONTRIBUTING.rst | 4 ++-- doc/source/contributing.rst | 4 ++++ doc/source/index.rst | 7 +++---- 3 files changed, 9 insertions(+), 6 deletions(-) create mode 100644 doc/source/contributing.rst diff --git a/CONTRIBUTING.rst b/CONTRIBUTING.rst index 8f458516b..cbf785a85 100644 --- a/CONTRIBUTING.rst +++ b/CONTRIBUTING.rst @@ -12,8 +12,8 @@ Have a question? Get in touch! .. _Slack: https://slack.com -Interested in Contributing? Welcome to the team! ------------------------------------------------- +Interested in contributing? Join to the team! +--------------------------------------------- The pyam package has been developed with the explicit aim to facilitate open and collaborative analysis of integrated assessment and climate models. diff --git a/doc/source/contributing.rst b/doc/source/contributing.rst new file mode 100644 index 000000000..4d7098a15 --- /dev/null +++ b/doc/source/contributing.rst @@ -0,0 +1,4 @@ +Support and Contributing +======================== + +.. include:: ../../CONTRIBUTING.rst diff --git a/doc/source/index.rst b/doc/source/index.rst index f9ecff0d9..6c765b067 100644 --- a/doc/source/index.rst +++ b/doc/source/index.rst @@ -74,20 +74,19 @@ The source code for :code:`pyam` is available on `Github`_. .. _`Github`: https://github.com/IAMconsortium/pyam -Documentation -------------- +Table of Contents +----------------- .. toctree:: :maxdepth: 1 install + contributing data tutorials examples/index api -.. include:: ../../CONTRIBUTING.rst - License ------- From f0d2102f31443cbe83371853265e858b50f532ce Mon Sep 17 00:00:00 2001 From: Daniel Huppmann Date: Mon, 28 Oct 2019 08:54:35 +0100 Subject: [PATCH 07/18] set toc-max-depth to 2 on index page and in sidebar --- doc/source/_templates/navigation.html | 12 ++++++++++++ doc/source/conf.py | 4 ++-- doc/source/index.rst | 2 +- 3 files changed, 15 insertions(+), 3 deletions(-) create mode 100644 doc/source/_templates/navigation.html diff --git a/doc/source/_templates/navigation.html b/doc/source/_templates/navigation.html new file mode 100644 index 000000000..947d6ec95 --- /dev/null +++ b/doc/source/_templates/navigation.html @@ -0,0 +1,12 @@ + +

{{ _('Table of Contents') }}

+{{ toctree(maxdepth=2, includehidden=theme_sidebar_includehidden, collapse=theme_sidebar_collapse) }} +{% if theme_extra_nav_links %} +
+
    + {% for text, uri in theme_extra_nav_links.items() %} +
  • {{ text }}
  • + {% endfor %} +
+{% endif %} diff --git a/doc/source/conf.py b/doc/source/conf.py index 46471df87..2e64b0201 100644 --- a/doc/source/conf.py +++ b/doc/source/conf.py @@ -150,7 +150,7 @@ } # Add any paths that contain custom themes here, relative to this directory. -#html_theme_path = [] +html_theme_path = ['_templates'] # The name for this set of Sphinx documents. If None, it defaults to # " v documentation". @@ -188,7 +188,7 @@ # Custom sidebar templates, maps document names to template names. html_sidebars = { - '**': ['about.html', 'globaltoc.html', 'searchbox.html'] + '**': ['about.html', 'navigation.html', 'searchbox.html'] } # Additional templates that should be rendered to pages, maps page names to diff --git a/doc/source/index.rst b/doc/source/index.rst index 6c765b067..4bc01d70d 100644 --- a/doc/source/index.rst +++ b/doc/source/index.rst @@ -78,7 +78,7 @@ Table of Contents ----------------- .. toctree:: - :maxdepth: 1 + :maxdepth: 2 install contributing From da76848d4b25348c08ea1ed128d04ccfcba7ac00 Mon Sep 17 00:00:00 2001 From: Daniel Huppmann Date: Mon, 28 Oct 2019 08:55:48 +0100 Subject: [PATCH 08/18] edit and consistent hierarchy formatting for install-page --- doc/source/install.rst | 27 +++++++++++++-------------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/doc/source/install.rst b/doc/source/install.rst index a1f92fe5c..b56c733a3 100644 --- a/doc/source/install.rst +++ b/doc/source/install.rst @@ -1,29 +1,28 @@ .. _install: -Install -******* +Installation +============ -The most basic installation of :code:`pyam` is trivial. +Via your favourite Python Package Management System +--------------------------------------------------- -Via Conda -~~~~~~~~~ +Conda +~~~~~ .. code-block:: bash conda install -c conda-forge pyam -Via Pip -~~~~~~~ - -:code:`pyam` can also be installed via pip. +Pip +~~~ .. code-block:: bash pip install pyam-iamc -From Source -~~~~~~~~~~~ +Installing From Source +---------------------- :code:`pyam` can also be installed from source. @@ -31,8 +30,8 @@ From Source pip install -e git+https://github.com/IAMconsortium/pyam.git#egg=pyam -Depedencies -~~~~~~~~~~~ +Dependencies +------------ Like any software project, we stand on the shoulders of giants. Our particular giants include :code:`numpy` :cite:`numpy`, :code:`matplotlib` @@ -50,7 +49,7 @@ The depedencies for building this documentation are: :literal: References -~~~~~~~~~~ +---------- .. bibliography:: refs.bib :style: plain From 94fb8d1c42bf3305009d8397b345f042808d680e Mon Sep 17 00:00:00 2001 From: Daniel Huppmann Date: Mon, 28 Oct 2019 09:13:26 +0100 Subject: [PATCH 09/18] use `sphinxcontrib-fulltoc` instead of overriding `navigation.html` --- doc/source/_templates/navigation.html | 12 ------------ doc/source/conf.py | 1 + 2 files changed, 1 insertion(+), 12 deletions(-) delete mode 100644 doc/source/_templates/navigation.html diff --git a/doc/source/_templates/navigation.html b/doc/source/_templates/navigation.html deleted file mode 100644 index 947d6ec95..000000000 --- a/doc/source/_templates/navigation.html +++ /dev/null @@ -1,12 +0,0 @@ - -

{{ _('Table of Contents') }}

-{{ toctree(maxdepth=2, includehidden=theme_sidebar_includehidden, collapse=theme_sidebar_collapse) }} -{% if theme_extra_nav_links %} -
-
    - {% for text, uri in theme_extra_nav_links.items() %} -
  • {{ text }}
  • - {% endfor %} -
-{% endif %} diff --git a/doc/source/conf.py b/doc/source/conf.py index 2e64b0201..645358a12 100644 --- a/doc/source/conf.py +++ b/doc/source/conf.py @@ -32,6 +32,7 @@ extensions = [ 'sphinx.ext.autodoc', 'sphinx.ext.doctest', + 'sphinxcontrib.fulltoc', 'sphinx.ext.intersphinx', 'sphinx.ext.todo', 'sphinx.ext.coverage', From 14ceeb5f0f59d92ee5b81cdd8b6795d8dfdb27c9 Mon Sep 17 00:00:00 2001 From: Daniel Huppmann Date: Mon, 28 Oct 2019 09:41:59 +0100 Subject: [PATCH 10/18] shorter section title on install-page --- doc/source/install.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/source/install.rst b/doc/source/install.rst index b56c733a3..15c4b7a7a 100644 --- a/doc/source/install.rst +++ b/doc/source/install.rst @@ -3,8 +3,8 @@ Installation ============ -Via your favourite Python Package Management System ---------------------------------------------------- +Via your favourite Python Package Manager +----------------------------------------- Conda ~~~~~ From c8ecad9c5d5d6bca99cb1cc478031fc9d5fdfc6a Mon Sep 17 00:00:00 2001 From: Daniel Huppmann Date: Mon, 28 Oct 2019 10:28:00 +0100 Subject: [PATCH 11/18] move bib-file to own folder --- doc/source/{refs.bib => _bib/install.bib} | 1 - doc/source/install.rst | 4 ++-- 2 files changed, 2 insertions(+), 3 deletions(-) rename doc/source/{refs.bib => _bib/install.bib} (99%) diff --git a/doc/source/refs.bib b/doc/source/_bib/install.bib similarity index 99% rename from doc/source/refs.bib rename to doc/source/_bib/install.bib index 948b7b33b..b8fe07bf4 100644 --- a/doc/source/refs.bib +++ b/doc/source/_bib/install.bib @@ -1,4 +1,3 @@ - @Misc{numpy, author = {Travis Oliphant}, title = {{NumPy}: A guide to {NumPy}}, diff --git a/doc/source/install.rst b/doc/source/install.rst index 15c4b7a7a..33f2e35ed 100644 --- a/doc/source/install.rst +++ b/doc/source/install.rst @@ -51,6 +51,6 @@ The depedencies for building this documentation are: References ---------- -.. bibliography:: refs.bib +.. bibliography:: _bib/install.bib :style: plain - :all: + :cited: From 11690ffac74b48f19ae91bdbb9dcced3d6bbd353 Mon Sep 17 00:00:00 2001 From: Daniel Huppmann Date: Mon, 28 Oct 2019 14:59:54 +0100 Subject: [PATCH 12/18] add reference to JOSS paper on index page, move `| br|` to `conf.py` --- doc/source/_bib/index.bib | 11 +++++++++++ doc/source/conf.py | 12 ++++++++++++ doc/source/index.rst | 24 ++++++++++++++---------- 3 files changed, 37 insertions(+), 10 deletions(-) create mode 100644 doc/source/_bib/index.bib diff --git a/doc/source/_bib/index.bib b/doc/source/_bib/index.bib new file mode 100644 index 000000000..0c217cd7e --- /dev/null +++ b/doc/source/_bib/index.bib @@ -0,0 +1,11 @@ +@article{Gidden:2019:pyam, + author = {Gidden, Matthew and Huppmann, Daniel}, + title = {{pyam: a Python package for the analysis and visualization of models + of the interaction of climate, human, and environmental Systems}}, + journal = {Journal of Open Source Software (JOSS)}, + volume = {4}, + number = {33}, + pages = {1095}, + year = {2019}, + doi = {10.21105/joss.01095}, +} diff --git a/doc/source/conf.py b/doc/source/conf.py index 645358a12..92c731c3a 100644 --- a/doc/source/conf.py +++ b/doc/source/conf.py @@ -323,3 +323,15 @@ # Example configuration for intersphinx: refer to the Python standard library. intersphinx_mapping = {'https://docs.python.org/': None} + + +# prolog for all rst files +rst_prolog = """ + +.. |pyam| replace:: :class:`pyam` + +.. |br| raw:: html + +
+ +""" diff --git a/doc/source/index.rst b/doc/source/index.rst index 4bc01d70d..b435097f2 100644 --- a/doc/source/index.rst +++ b/doc/source/index.rst @@ -1,10 +1,6 @@ **pyam**: analysis and visualization of integrated-assessment scenarios ======================================================================= -.. |br| raw:: html - -
- Release v\ |version|. |pypi| |conda| |license| |latest| @@ -47,22 +43,23 @@ Release v\ |version|. Overview -------- -The open-source Python package :code:`pyam` provides a suite of tools and functions -for analyzing and visualizing input data (i.e., assumptions/parametrization) +The open-source Python package |pyam| :cite:`Gidden:2019:pyam` +provides a suite of tools and functions for analyzing and visualizing +input data (i.e., assumptions/parametrization) and results (model output) of integrated-assessment scenarios. Key features: ~~~~~~~~~~~~~ - - Simple analysis of timeseries data in the IAMC format (more about `that`_) + - Simple analysis of timeseries data in the IAMC format (more about it `here`_) with an interface similar in feel and style to the widely used `pandas.DataFrame`_ - Advanced visualization and plotting function (see the `gallery`_) - Diagnostic checks for scripted validation of scenario data and results -The source code for :code:`pyam` is available on `Github`_. +The source code for |pyam| is available on `Github`_. -.. _`that`: +.. _`here`: data.html .. _`gallery`: @@ -90,6 +87,13 @@ Table of Contents License ------- -:code:`pyam` is available under the open source `Apache License`_. +|pyam| is available under the open source `Apache License`_. .. _Apache License: http://www.apache.org/licenses/LICENSE-2.0.html + +Scientific reference +-------------------- + +.. bibliography:: _bib/index.bib + :style: plain + :all: From 7aff4ead273712a7dcb67622eb1d3ac1487752f4 Mon Sep 17 00:00:00 2001 From: Daniel Huppmann Date: Mon, 28 Oct 2019 15:09:12 +0100 Subject: [PATCH 13/18] switch to `|pyam|` rst-prolog for consistency --- doc/source/install.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/source/install.rst b/doc/source/install.rst index 33f2e35ed..925dc2724 100644 --- a/doc/source/install.rst +++ b/doc/source/install.rst @@ -24,7 +24,7 @@ Pip Installing From Source ---------------------- -:code:`pyam` can also be installed from source. +|pyam| can also be installed from source. .. code-block:: bash @@ -38,7 +38,7 @@ giants include :code:`numpy` :cite:`numpy`, :code:`matplotlib` :cite:`matplotlib`, and :code:`pandas` :cite:`pandas`. Explicit requirements are fully enumerated below. -The required depedencies for :code:`pyam` are: +The required depedencies for |pyam| are: .. program-output:: python -c 'import sys; sys.path.append("../.."); import setup; print("\n".join([r for r in setup.REQUIREMENTS]))' From 16049cce3f36a546ef18c36de264a4bbcdb47886 Mon Sep 17 00:00:00 2001 From: Daniel Huppmann Date: Mon, 28 Oct 2019 15:39:54 +0100 Subject: [PATCH 14/18] reworking the `data model` page --- doc/source/_bib/data.bib | 12 +++ doc/source/_static/iamc_logo.jpg | Bin 0 -> 8867 bytes doc/source/_static/iamc_template.png | Bin 0 -> 56627 bytes doc/source/data.rst | 153 ++++++++++++++++++++------- 4 files changed, 126 insertions(+), 39 deletions(-) create mode 100644 doc/source/_bib/data.bib create mode 100644 doc/source/_static/iamc_logo.jpg create mode 100644 doc/source/_static/iamc_template.png diff --git a/doc/source/_bib/data.bib b/doc/source/_bib/data.bib new file mode 100644 index 000000000..057a14dc7 --- /dev/null +++ b/doc/source/_bib/data.bib @@ -0,0 +1,12 @@ +@misc{Huppmann:2019:scenario-data, + author = {Huppmann, Daniel and Kriegler, Elmar and Krey, Volker and + Riahi, Keywan and Rogelj, Joeri and Calvin, Katherine and + Humpenoeder, Florian and Popp, Alexander and Rose, Steven K. and + Weyant, John and et al.}, + doi = {10.5281/zenodo.3363345}, + howpublished = {Integrated Assessment Modeling Consortium & International Institute for Applied Systems Analysis}, + publisher = {Integrated Assessment Modeling Consortium & International Institute for Applied Systems Analysis}, + title = {{IAMC 1.5 °C Scenario Explorer and Data hosted by IIASA (release 2.0)}}, + url = {https://data.ene.iiasa.ac.at/iamc-1.5c-explorer}, + year = {2019} +} diff --git a/doc/source/_static/iamc_logo.jpg b/doc/source/_static/iamc_logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..87ff43399cb416165ca97ad0a847a65e1bd1f337 GIT binary patch literal 8867 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 HmR3oWB$8+lJn$$D6qD0#el+MiG=&dR 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%0DiTB;c+q$Y37gy}xD?6D)rirW@`l0$lFn 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 literal 0 HcmV?d00001 diff --git a/doc/source/data.rst b/doc/source/data.rst index 44faf9c96..5912e724b 100644 --- a/doc/source/data.rst +++ b/doc/source/data.rst @@ -1,53 +1,128 @@ - Data Model ----------- +========== + +Scenario data following the IAMC format +--------------------------------------- + +.. figure:: _static/iamc_logo.jpg + :width: 120px + :align: right + + `IAMC website`_ + +.. _`IAMC Website`: http://www.globalchange.umd.edu/iamc/ + +Over the past decade, the Integrated Assessment Modeling Consortium (IAMC) +developed a standardised tabular timeseries format to exchange scenario data. +Previous high-level use cases include reports by the *Intergovernmental Panel +on Climate Change* (`IPCC`_) and model comparison exercises +within the *Energy Modeling Forum* (`EMF`_) hosted by Stanford University. + +The table below shows a typical example of integrated-assessment scenario data +following the IAMC format from the `CD-LINKS`_ project. +The |pyam| package is geared for analysis and visualization of any scenario +data provided in this structure. + +.. figure:: _static/iamc_template.png + + Illustrative example of IAMC-format timeseries data |br| + via the `IAMC 1.5°C Scenario Explorer`_ (:cite:`Huppmann:2019:scenario-data`) + +.. _`IAMC 1.5°C Scenario Explorer`: https://data.ene.iiasa.ac.at/iamc-1.5c-explorer + +Refer to `data.ene.iiasa.ac.at/database`_ for more information on the +IAMC format and a full list of previous use cases. + +.. _`IPCC`: https://www.ipcc.ch + +.. _`EMF`: https://emf.stanford.edu + +.. _`CD-LINKS`: https://www.cd-links.org + +.. _`data.ene.iiasa.ac.at/database`: https://data.ene.iiasa.ac.at/database -IAMC-style Data -^^^^^^^^^^^^^^^ +The :code:`variable` column +~~~~~~~~~~~~~~~~~~~~~~~~~~~ -An illustrative example of IAMC-style data is shown below; -see https://data.ene.iiasa.ac.at/database for more information. +The :code:`variable` column implements a "semi-hierarchical" structure +using the :code:`|` character (*pipe*, not l or i) to indicate the *depth*. -============ ============= ========== ============== ======== ======== ======== ======== -**Model** **Scenario** **Region** **Variable** **Unit** **2005** **2010** **2015** -============ ============= ========== ============== ======== ======== ======== ======== -MESSAGE V.4 AMPERE3-Base World Primary Energy EJ/y 454.5 479.6 ... -... ... ... ... ... ... ... ... -============ ============= ========== ============== ======== ======== ======== ======== +Semi-hierarchical means that a hierarchy can be imposed, e.g., one can enforce +that the sum of :code:`Emissions|CO2|Energy` and :code:`Emissions|CO2|Other` +must be equal to :code:`Emissions|CO2` +(if there are no other :code:`Emissions|CO2|…` variables). +However, this is not mandatory, e.g., the sum of :code:`Primary Energy|Coal`, +:code:`Primary Energy|Gas` and :code:`Primary Energy|Fossil` should not be equal +to :code:`Primary Energy` because this would double-count fossil fuels. +Refer to the variable list in the documentation pages of the +`IAMC 1.5°C Scenario Explorer`_ to see the full list of variables used in the +recent *IPCC Special Report on Global Warming of 1.5 ºC* (`SR15`_). -``pyam.IamDataFrame`` -^^^^^^^^^^^^^^^^^^^^^ +.. _`SR15`: https://www.ipcc.ch/sr15/ -A ``pyam.IamDataFrame`` is a wrapper for two ``pandas.DataFrame`` instances: +The :code:`year` column +~~~~~~~~~~~~~~~~~~~~~~~ - - `data`: The data table is a dataframe containing the timeseries data in - "long format". It has the columns ``pyam.LONG_IDX = ['model', 'scenario', - 'region', 'unit', 'year', 'value']``. +In its original design, the IAMC data format (see above) assumed that the +temporal dimension of any scenario data was restricted to full years +represented as integer values. - - `meta`: The meta table is a dataframe containing categorisation and - descriptive indicators. It has the index ``pyam.META_IDX = ['model', - 'scenario']``. +Two additional use cases are currently supported by :code:`pyam` in development +mode (beta): + + - using representative sub-annual timesteps + + - using continuous time via :class:`pandas.datetime`, replacing the name of + the :code:`year` column by :code:`time` + +Please reach out to the developers to get more information on this +ongoing work. + +The :class:`pyam.IamDataFrame` class +------------------------------------ + +A :class:`pyam.IamDataFrame` instance is a wrapper for +two :class:`pandas.DataFrame` instances (read the `docs`_): + + - :code:`data`: The data table is a dataframe containing the timeseries data + in "long format". It has the columns of the long data format :code:`['model', + 'scenario', 'region', 'unit', 'year', 'value']`. + + - :code:`meta`: The meta table is a dataframe containing categorisation and + descriptive indicators. It has the index :code:`pyam.META_IDX = ['model', + 'scenario']`. The standard output format is the IAMC-style "wide format", see the example above. This format can be accessed using :meth:`pyam.IamDataFrame.timeseries`, -which returns a ``pandas.DataFrame`` with the index ``pyam.IAMC_IDX = ['model', -'scenario', 'region', 'variable', 'unit']`` and the years as columns. +which returns a :class:`pandas.DataFrame` with the index :code:`pyam.IAMC_IDX = +['model', 'scenario', 'region', 'variable', 'unit']` and the years as columns. + +.. _`docs`: https://pandas.pydata.org/pandas-docs/stable/reference/frame.html Filtering -^^^^^^^^^ - -The `pyam` package provides two methods for filtering timeseries data: - -An existing IamDataFrame can be filtered using -:meth:`pyam.IamDataFrame.filter(col=...) `, where `col` can be any column of the -`data` table (i.e., ``['model', 'scenario', 'region', 'unit', 'year']``) or any -column of the `meta` table. The returned object is a new ``pyam.IamDataFrame`` -instance. - -A ``pandas.DataFrame`` with columns or index ``['model', 'scenario']`` can be -filtered by any `meta` columns from a ``pyam.IamDataFrame`` using -:func:`pyam.filter_by_meta(data, df, col=..., join_meta=False) `. The returned -object is a ``pandas.DataFrame`` downselected to those models-and-scenarios where -the `meta` column satisfies the criteria given by `col=...` . -Optionally, the `meta` columns are joined to the returned dataframe. +--------- + +The |pyam| package provides two methods for filtering scenario data: + +An existing `class`:IamDataFrame can be filtered using +:meth:`pyam.IamDataFrame.filter(col=...) `, +where :code:`col` can be any column of the +:code:`data` table (i.e., `['model', 'scenario', 'region', 'unit', 'year']`) +or any column of the :code:`meta` table. The returned object is +a new :class:`pyam.IamDataFrame` instance. + +A :class:`pandas.DataFrame` with columns or index :code:`['model', 'scenario']` +can be filtered by any :code:`meta` columns from a :code:`pyam.IamDataFrame` +using :func:`pyam.filter_by_meta(data, df, col=..., join_meta=False) `. +The returned object is a :class:`pandas.DataFrame` down-selected to those +models-and-scenarios where the :code:`meta` column satisfies the criteria given +by :code:`col=...` . +Optionally, the :code:`meta` columns are joined to the returned dataframe. + +References +---------- + +.. bibliography:: _bib/data.bib + :style: plain + :cited: From 2f0fd4679976428502bde525808099a563d74e34 Mon Sep 17 00:00:00 2001 From: Daniel Huppmann Date: Mon, 28 Oct 2019 15:41:49 +0100 Subject: [PATCH 15/18] add `jpg` to .gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index fb3ca36b8..0d2e4c44b 100644 --- a/.gitignore +++ b/.gitignore @@ -4,6 +4,7 @@ *csv *xlsx *png +*jpg *pdf # Apple file system From ecbede82ba8dc49a8f37b3ba34593887156532e7 Mon Sep 17 00:00:00 2001 From: Daniel Huppmann Date: Mon, 28 Oct 2019 15:42:19 +0100 Subject: [PATCH 16/18] clean-up of `conf.py` --- doc/source/conf.py | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/doc/source/conf.py b/doc/source/conf.py index 92c731c3a..88c3ac99f 100644 --- a/doc/source/conf.py +++ b/doc/source/conf.py @@ -12,10 +12,8 @@ # All configuration values have a default; values that are commented out # serve to show the default. -import sys -import os -import shlex from datetime import datetime +import pyam # 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 @@ -80,7 +78,6 @@ # built documents. # # The short X.Y version. -import pyam version = pyam.__version__ # The full version, including alpha/beta/rc tags. release = pyam.__version__ @@ -134,7 +131,6 @@ # The theme to use for HTML and HTML Help pages. See the documentation for # a list of builtin themes. -#html_theme = 'cloud' html_theme = 'alabaster' # Theme options are theme-specific and customize the look and feel of a theme @@ -162,7 +158,7 @@ # The name of an image file (relative to this directory) to place at the top # of the sidebar. -html_logo = None +#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 @@ -237,7 +233,7 @@ #html_search_scorer = 'scorer.js' # Output file base name for HTML help builder. -htmlhelp_basename = 'pyamdoc' +htmlhelp_basename = 'pyam-docs' # -- Options for LaTeX output --------------------------------------------- From 860ad3eb8f557f1d7589a08757e98b0b5528a00f Mon Sep 17 00:00:00 2001 From: Daniel Huppmann Date: Mon, 28 Oct 2019 20:14:58 +0100 Subject: [PATCH 17/18] add new dependency `sphinxcontrib-fulltoc` --- doc/environment.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/environment.yml b/doc/environment.yml index 84c31bb91..96d9df1c5 100644 --- a/doc/environment.yml +++ b/doc/environment.yml @@ -15,5 +15,5 @@ dependencies: - pillow==5.4.1 - sphinxcontrib-bibtex - sphinxcontrib-programoutput + - sphinxcontrib-fulltoc - nbsphinx - \ No newline at end of file From e99cc6515d417acbe0677eedfa9159074487c185 Mon Sep 17 00:00:00 2001 From: Daniel Huppmann Date: Mon, 28 Oct 2019 21:30:19 +0100 Subject: [PATCH 18/18] add to readme --- RELEASE_NOTES.md | 1 + 1 file changed, 1 insertion(+) diff --git a/RELEASE_NOTES.md b/RELEASE_NOTES.md index 934c2f5a1..4667e68ad 100644 --- a/RELEASE_NOTES.md +++ b/RELEASE_NOTES.md @@ -1,6 +1,7 @@ # Next Release +- [#277](https://github.com/IAMconsortium/pyam/pull/277) Restructure and extend the docs pages, switch to RTD-supported theme - [#275](https://github.com/IAMconsortium/pyam/pull/275) Completely removes all features related to region plotting, notably `region_plot()` and `read_shapefile()` - [#270](https://github.com/IAMconsortium/pyam/pull/270) Include variables with zeros in `stack_plot` (see [#266](https://github.com/IAMconsortium/pyam/issues/266)) - [#269](https://github.com/IAMconsortium/pyam/pull/269) Ensure append doesn't accidentally swap indexes