Added: websites/staging/climate/trunk/content/api/_static/sidebar.js
==============================================================================
--- websites/staging/climate/trunk/content/api/_static/sidebar.js (added)
+++ websites/staging/climate/trunk/content/api/_static/sidebar.js Mon Sep 28 
18:53:23 2015
@@ -0,0 +1,159 @@
+/*
+ * sidebar.js
+ * ~~~~~~~~~~
+ *
+ * This script makes the Sphinx sidebar collapsible.
+ *
+ * .sphinxsidebar contains .sphinxsidebarwrapper.  This script adds
+ * in .sphixsidebar, after .sphinxsidebarwrapper, the #sidebarbutton
+ * used to collapse and expand the sidebar.
+ *
+ * When the sidebar is collapsed the .sphinxsidebarwrapper is hidden
+ * and the width of the sidebar and the margin-left of the document
+ * are decreased. When the sidebar is expanded the opposite happens.
+ * This script saves a per-browser/per-session cookie used to
+ * remember the position of the sidebar among the pages.
+ * Once the browser is closed the cookie is deleted and the position
+ * reset to the default (expanded).
+ *
+ * :copyright: Copyright 2007-2013 by the Sphinx team, see AUTHORS.
+ * :license: BSD, see LICENSE for details.
+ *
+ */
+
+$(function() {
+  
+  
+  
+  
+  
+  
+  
+
+  // global elements used by the functions.
+  // the 'sidebarbutton' element is defined as global after its
+  // creation, in the add_sidebar_button function
+  var bodywrapper = $('.bodywrapper');
+  var sidebar = $('.sphinxsidebar');
+  var sidebarwrapper = $('.sphinxsidebarwrapper');
+
+  // for some reason, the document has no sidebar; do not run into errors
+  if (!sidebar.length) return;
+
+  // original margin-left of the bodywrapper and width of the sidebar
+  // with the sidebar expanded
+  var bw_margin_expanded = bodywrapper.css('margin-left');
+  var ssb_width_expanded = sidebar.width();
+
+  // margin-left of the bodywrapper and width of the sidebar
+  // with the sidebar collapsed
+  var bw_margin_collapsed = '.8em';
+  var ssb_width_collapsed = '.8em';
+
+  // colors used by the current theme
+  var dark_color = $('.related').css('background-color');
+  var light_color = $('.document').css('background-color');
+
+  function sidebar_is_collapsed() {
+    return sidebarwrapper.is(':not(:visible)');
+  }
+
+  function toggle_sidebar() {
+    if (sidebar_is_collapsed())
+      expand_sidebar();
+    else
+      collapse_sidebar();
+  }
+
+  function collapse_sidebar() {
+    sidebarwrapper.hide();
+    sidebar.css('width', ssb_width_collapsed);
+    bodywrapper.css('margin-left', bw_margin_collapsed);
+    sidebarbutton.css({
+        'margin-left': '0',
+        'height': bodywrapper.height()
+    });
+    sidebarbutton.find('span').text('»');
+    sidebarbutton.attr('title', _('Expand sidebar'));
+    document.cookie = 'sidebar=collapsed';
+  }
+
+  function expand_sidebar() {
+    bodywrapper.css('margin-left', bw_margin_expanded);
+    sidebar.css('width', ssb_width_expanded);
+    sidebarwrapper.show();
+    sidebarbutton.css({
+        'margin-left': ssb_width_expanded-12,
+        'height': bodywrapper.height()
+    });
+    sidebarbutton.find('span').text('«');
+    sidebarbutton.attr('title', _('Collapse sidebar'));
+    document.cookie = 'sidebar=expanded';
+  }
+
+  function add_sidebar_button() {
+    sidebarwrapper.css({
+        'float': 'left',
+        'margin-right': '0',
+        'width': ssb_width_expanded - 28
+    });
+    // create the button
+    sidebar.append(
+        '<div id="sidebarbutton"><span>&laquo;</span></div>'
+    );
+    var sidebarbutton = $('#sidebarbutton');
+    light_color = sidebarbutton.css('background-color');
+    // find the height of the viewport to center the '<<' in the page
+    var viewport_height;
+    if (window.innerHeight)
+         viewport_height = window.innerHeight;
+    else
+         viewport_height = $(window).height();
+    sidebarbutton.find('span').css({
+        'display': 'block',
+        'margin-top': (viewport_height - sidebar.position().top - 20) / 2
+    });
+
+    sidebarbutton.click(toggle_sidebar);
+    sidebarbutton.attr('title', _('Collapse sidebar'));
+    sidebarbutton.css({
+        'color': '#FFFFFF',
+        'border-left': '1px solid ' + dark_color,
+        'font-size': '1.2em',
+        'cursor': 'pointer',
+        'height': bodywrapper.height(),
+        'padding-top': '1px',
+        'margin-left': ssb_width_expanded - 12
+    });
+
+    sidebarbutton.hover(
+      function () {
+          $(this).css('background-color', dark_color);
+      },
+      function () {
+          $(this).css('background-color', light_color);
+      }
+    );
+  }
+
+  function set_position_from_cookie() {
+    if (!document.cookie)
+      return;
+    var items = document.cookie.split(';');
+    for(var k=0; k<items.length; k++) {
+      var key_val = items[k].split('=');
+      var key = key_val[0].replace(/ /, "");  // strip leading spaces
+      if (key == 'sidebar') {
+        var value = key_val[1];
+        if ((value == 'collapsed') && (!sidebar_is_collapsed()))
+          collapse_sidebar();
+        else if ((value == 'expanded') && (sidebar_is_collapsed()))
+          expand_sidebar();
+      }
+    }
+  }
+
+  add_sidebar_button();
+  var sidebarbutton = $('#sidebarbutton');
+  set_position_from_cookie();
+});
\ No newline at end of file

Added: websites/staging/climate/trunk/content/api/_static/underscore.js
==============================================================================
--- websites/staging/climate/trunk/content/api/_static/underscore.js (added)
+++ websites/staging/climate/trunk/content/api/_static/underscore.js Mon Sep 28 
18:53:23 2015
@@ -0,0 +1,31 @@
+// Underscore.js 1.3.1
+// (c) 2009-2012 Jeremy Ashkenas, DocumentCloud Inc.
+// Underscore is freely distributable under the MIT license.
+// Portions of Underscore are inspired or borrowed from Prototype,
+// Oliver Steele's Functional, and John Resig's Micro-Templating.
+// For all details and documentation:
+// http://documentcloud.github.com/underscore
+(function(){function q(a,c,d){if(a===c)return 
a!==0||1/a==1/c;if(a==null||c==null)return 
a===c;if(a._chain)a=a._wrapped;if(c._chain)c=c._wrapped;if(a.isEqual&&b.isFunction(a.isEqual))return
 a.isEqual(c);if(c.isEqual&&b.isFunction(c.isEqual))return c.isEqual(a);var 
e=l.call(a);if(e!=l.call(c))return false;switch(e){case "[object 
String]":return a==String(c);case "[object Number]":return 
a!=+a?c!=+c:a==0?1/a==1/c:a==+c;case "[object Date]":case "[object 
Boolean]":return+a==+c;case "[object RegExp]":return a.source==
+c.source&&a.global==c.global&&a.multiline==c.multiline&&a.ignoreCase==c.ignoreCase}if(typeof
 a!="object"||typeof c!="object")return false;for(var 
f=d.length;f--;)if(d[f]==a)return true;d.push(a);var f=0,g=true;if(e=="[object 
Array]"){if(f=a.length,g=f==c.length)for(;f--;)if(!(g=f in a==f in 
c&&q(a[f],c[f],d)))break}else{if("constructor"in a!="constructor"in 
c||a.constructor!=c.constructor)return false;for(var h in 
a)if(b.has(a,h)&&(f++,!(g=b.has(c,h)&&q(a[h],c[h],d))))break;if(g){for(h in 
c)if(b.has(c,
+h)&&!f--)break;g=!f}}d.pop();return g}var 
r=this,G=r._,n={},k=Array.prototype,o=Object.prototype,i=k.slice,H=k.unshift,l=o.toString,I=o.hasOwnProperty,w=k.forEach,x=k.map,y=k.reduce,z=k.reduceRight,A=k.filter,B=k.every,C=k.some,p=k.indexOf,D=k.lastIndexOf,o=Array.isArray,J=Object.keys,s=Function.prototype.bind,b=function(a){return
 new m(a)};if(typeof exports!=="undefined"){if(typeof 
module!=="undefined"&&module.exports)exports=module.exports=b;exports._=b}else 
r._=b;b.VERSION="1.3.1";var j=b.each=
+b.forEach=function(a,c,d){if(a!=null)if(w&&a.forEach===w)a.forEach(c,d);else 
if(a.length===+a.length)for(var e=0,f=a.length;e<f;e++){if(e in 
a&&c.call(d,a[e],e,a)===n)break}else for(e in 
a)if(b.has(a,e)&&c.call(d,a[e],e,a)===n)break};b.map=b.collect=function(a,c,b){var
 e=[];if(a==null)return e;if(x&&a.map===x)return 
a.map(c,b);j(a,function(a,g,h){e[e.length]=c.call(b,a,g,h)});if(a.length===+a.length)e.length=a.length;return
 e};b.reduce=b.foldl=b.inject=function(a,c,d,e){var f=arguments.length>2;a==
+null&&(a=[]);if(y&&a.reduce===y)return 
e&&(c=b.bind(c,e)),f?a.reduce(c,d):a.reduce(c);j(a,function(a,b,i){f?d=c.call(e,d,a,b,i):(d=a,f=true)});if(!f)throw
 new TypeError("Reduce of empty array with no initial value");return 
d};b.reduceRight=b.foldr=function(a,c,d,e){var 
f=arguments.length>2;a==null&&(a=[]);if(z&&a.reduceRight===z)return 
e&&(c=b.bind(c,e)),f?a.reduceRight(c,d):a.reduceRight(c);var 
g=b.toArray(a).reverse();e&&!f&&(c=b.bind(c,e));return 
f?b.reduce(g,c,d,e):b.reduce(g,c)};b.find=b.detect=
+function(a,c,b){var e;E(a,function(a,g,h){if(c.call(b,a,g,h))return 
e=a,true});return e};b.filter=b.select=function(a,c,b){var 
e=[];if(a==null)return e;if(A&&a.filter===A)return 
a.filter(c,b);j(a,function(a,g,h){c.call(b,a,g,h)&&(e[e.length]=a)});return 
e};b.reject=function(a,c,b){var e=[];if(a==null)return 
e;j(a,function(a,g,h){c.call(b,a,g,h)||(e[e.length]=a)});return 
e};b.every=b.all=function(a,c,b){var e=true;if(a==null)return 
e;if(B&&a.every===B)return a.every(c,b);j(a,function(a,g,h){if(!(e=
+e&&c.call(b,a,g,h)))return n});return e};var 
E=b.some=b.any=function(a,c,d){c||(c=b.identity);var e=false;if(a==null)return 
e;if(C&&a.some===C)return 
a.some(c,d);j(a,function(a,b,h){if(e||(e=c.call(d,a,b,h)))return 
n});return!!e};b.include=b.contains=function(a,c){var b=false;if(a==null)return 
b;return p&&a.indexOf===p?a.indexOf(c)!=-1:b=E(a,function(a){return 
a===c})};b.invoke=function(a,c){var d=i.call(arguments,2);return 
b.map(a,function(a){return(b.isFunction(c)?c||a:a[c]).apply(a,d)})};b.pluck=
+function(a,c){return b.map(a,function(a){return 
a[c]})};b.max=function(a,c,d){if(!c&&b.isArray(a))return 
Math.max.apply(Math,a);if(!c&&b.isEmpty(a))return-Infinity;var 
e={computed:-Infinity};j(a,function(a,b,h){b=c?c.call(d,a,b,h):a;b>=e.computed&&(e={value:a,computed:b})});return
 e.value};b.min=function(a,c,d){if(!c&&b.isArray(a))return 
Math.min.apply(Math,a);if(!c&&b.isEmpty(a))return Infinity;var 
e={computed:Infinity};j(a,function(a,b,h){b=c?c.call(d,a,b,h):a;b<e.computed&&(e={value:a,computed:b})});
+return e.value};b.shuffle=function(a){var 
b=[],d;j(a,function(a,f){f==0?b[0]=a:(d=Math.floor(Math.random()*(f+1)),b[f]=b[d],b[d]=a)});return
 b};b.sortBy=function(a,c,d){return 
b.pluck(b.map(a,function(a,b,g){return{value:a,criteria:c.call(d,a,b,g)}}).sort(function(a,b){var
 c=a.criteria,d=b.criteria;return 
c<d?-1:c>d?1:0}),"value")};b.groupBy=function(a,c){var 
d={},e=b.isFunction(c)?c:function(a){return a[c]};j(a,function(a,b){var 
c=e(a,b);(d[c]||(d[c]=[])).push(a)});return d};b.sortedIndex=function(a,
+c,d){d||(d=b.identity);for(var e=0,f=a.length;e<f;){var 
g=e+f>>1;d(a[g])<d(c)?e=g+1:f=g}return 
e};b.toArray=function(a){return!a?[]:a.toArray?a.toArray():b.isArray(a)?i.call(a):b.isArguments(a)?i.call(a):b.values(a)};b.size=function(a){return
 b.toArray(a).length};b.first=b.head=function(a,b,d){return 
b!=null&&!d?i.call(a,0,b):a[0]};b.initial=function(a,b,d){return 
i.call(a,0,a.length-(b==null||d?1:b))};b.last=function(a,b,d){return 
b!=null&&!d?i.call(a,Math.max(a.length-b,0)):a[a.length-1]};b.rest=
+b.tail=function(a,b,d){return 
i.call(a,b==null||d?1:b)};b.compact=function(a){return 
b.filter(a,function(a){return!!a})};b.flatten=function(a,c){return 
b.reduce(a,function(a,e){if(b.isArray(e))return 
a.concat(c?e:b.flatten(e));a[a.length]=e;return 
a},[])};b.without=function(a){return 
b.difference(a,i.call(arguments,1))};b.uniq=b.unique=function(a,c,d){var 
d=d?b.map(a,d):a,e=[];b.reduce(d,function(d,g,h){if(0==h||(c===true?b.last(d)!=g:!b.include(d,g)))d[d.length]=g,e[e.length]=a[h];return
 d},[]);
+return e};b.union=function(){return 
b.uniq(b.flatten(arguments,true))};b.intersection=b.intersect=function(a){var 
c=i.call(arguments,1);return b.filter(b.uniq(a),function(a){return 
b.every(c,function(c){return 
b.indexOf(c,a)>=0})})};b.difference=function(a){var 
c=b.flatten(i.call(arguments,1));return 
b.filter(a,function(a){return!b.include(c,a)})};b.zip=function(){for(var 
a=i.call(arguments),c=b.max(b.pluck(a,"length")),d=Array(c),e=0;e<c;e++)d[e]=b.pluck(a,""+e);return
 d};b.indexOf=function(a,c,
+d){if(a==null)return-1;var e;if(d)return 
d=b.sortedIndex(a,c),a[d]===c?d:-1;if(p&&a.indexOf===p)return 
a.indexOf(c);for(d=0,e=a.length;d<e;d++)if(d in a&&a[d]===c)return 
d;return-1};b.lastIndexOf=function(a,b){if(a==null)return-1;if(D&&a.lastIndexOf===D)return
 a.lastIndexOf(b);for(var d=a.length;d--;)if(d in a&&a[d]===b)return 
d;return-1};b.range=function(a,b,d){arguments.length<=1&&(b=a||0,a=0);for(var 
d=arguments[2]||1,e=Math.max(Math.ceil((b-a)/d),0),f=0,g=Array(e);f<e;)g[f++]=a,a+=d;return
 g};
+var F=function(){};b.bind=function(a,c){var d,e;if(a.bind===s&&s)return 
s.apply(a,i.call(arguments,1));if(!b.isFunction(a))throw new 
TypeError;e=i.call(arguments,2);return d=function(){if(!(this instanceof 
d))return a.apply(c,e.concat(i.call(arguments)));F.prototype=a.prototype;var 
b=new F,g=a.apply(b,e.concat(i.call(arguments)));return 
Object(g)===g?g:b}};b.bindAll=function(a){var 
c=i.call(arguments,1);c.length==0&&(c=b.functions(a));j(c,function(c){a[c]=b.bind(a[c],a)});return
 a};b.memoize=function(a,
+c){var d={};c||(c=b.identity);return function(){var 
e=c.apply(this,arguments);return 
b.has(d,e)?d[e]:d[e]=a.apply(this,arguments)}};b.delay=function(a,b){var 
d=i.call(arguments,2);return setTimeout(function(){return 
a.apply(a,d)},b)};b.defer=function(a){return 
b.delay.apply(b,[a,1].concat(i.call(arguments,1)))};b.throttle=function(a,c){var
 d,e,f,g,h,i=b.debounce(function(){h=g=false},c);return 
function(){d=this;e=arguments;var 
b;f||(f=setTimeout(function(){f=null;h&&a.apply(d,e);i()},c));g?h=true:
+a.apply(d,e);i();g=true}};b.debounce=function(a,b){var d;return function(){var 
e=this,f=arguments;clearTimeout(d);d=setTimeout(function(){d=null;a.apply(e,f)},b)}};b.once=function(a){var
 b=false,d;return function(){if(b)return d;b=true;return 
d=a.apply(this,arguments)}};b.wrap=function(a,b){return function(){var 
d=[a].concat(i.call(arguments,0));return 
b.apply(this,d)}};b.compose=function(){var a=arguments;return 
function(){for(var 
b=arguments,d=a.length-1;d>=0;d--)b=[a[d].apply(this,b)];return b[0]}};
+b.after=function(a,b){return a<=0?b():function(){if(--a<1)return 
b.apply(this,arguments)}};b.keys=J||function(a){if(a!==Object(a))throw new 
TypeError("Invalid object");var c=[],d;for(d in 
a)b.has(a,d)&&(c[c.length]=d);return c};b.values=function(a){return 
b.map(a,b.identity)};b.functions=b.methods=function(a){var c=[],d;for(d in 
a)b.isFunction(a[d])&&c.push(d);return 
c.sort()};b.extend=function(a){j(i.call(arguments,1),function(b){for(var d in 
b)a[d]=b[d]});return a};b.defaults=function(a){j(i.call(arguments,
+1),function(b){for(var d in b)a[d]==null&&(a[d]=b[d])});return 
a};b.clone=function(a){return!b.isObject(a)?a:b.isArray(a)?a.slice():b.extend({},a)};b.tap=function(a,b){b(a);return
 a};b.isEqual=function(a,b){return 
q(a,b,[])};b.isEmpty=function(a){if(b.isArray(a)||b.isString(a))return 
a.length===0;for(var c in a)if(b.has(a,c))return false;return 
true};b.isElement=function(a){return!!(a&&a.nodeType==1)};b.isArray=o||function(a){return
 l.call(a)=="[object Array]"};b.isObject=function(a){return a===Object(a)};
+b.isArguments=function(a){return l.call(a)=="[object 
Arguments]"};if(!b.isArguments(arguments))b.isArguments=function(a){return!(!a||!b.has(a,"callee"))};b.isFunction=function(a){return
 l.call(a)=="[object Function]"};b.isString=function(a){return 
l.call(a)=="[object String]"};b.isNumber=function(a){return l.call(a)=="[object 
Number]"};b.isNaN=function(a){return a!==a};b.isBoolean=function(a){return 
a===true||a===false||l.call(a)=="[object Boolean]"};b.isDate=function(a){return 
l.call(a)=="[object Date]"};
+b.isRegExp=function(a){return l.call(a)=="[object 
RegExp]"};b.isNull=function(a){return 
a===null};b.isUndefined=function(a){return a===void 
0};b.has=function(a,b){return I.call(a,b)};b.noConflict=function(){r._=G;return 
this};b.identity=function(a){return a};b.times=function(a,b,d){for(var 
e=0;e<a;e++)b.call(d,e)};b.escape=function(a){return(""+a).replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#x27;").replace(/\//g,"&#x2F;")};b.mixin=function(a){j(b.functions(a),
+function(c){K(c,b[c]=a[c])})};var L=0;b.uniqueId=function(a){var b=L++;return 
a?a+b:b};b.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};var
 t=/.^/,u=function(a){return 
a.replace(/\\\\/g,"\\").replace(/\\'/g,"'")};b.template=function(a,c){var 
d=b.templateSettings,d="var 
__p=[],print=function(){__p.push.apply(__p,arguments);};with(obj||{}){__p.push('"+a.replace(/\\/g,"\\\\").replace(/'/g,"\\'").replace(d.escape||t,function(a,b){return"',_.escape("+
+u(b)+"),'"}).replace(d.interpolate||t,function(a,b){return"',"+u(b)+",'"}).replace(d.evaluate||t,function(a,b){return"');"+u(b).replace(/[\r\n\t]/g,"
 
")+";__p.push('"}).replace(/\r/g,"\\r").replace(/\n/g,"\\n").replace(/\t/g,"\\t")+"');}return
 __p.join('');",e=new Function("obj","_",d);return c?e(c,b):function(a){return 
e.call(this,a,b)}};b.chain=function(a){return b(a).chain()};var 
m=function(a){this._wrapped=a};b.prototype=m.prototype;var 
v=function(a,c){return c?b(a).chain():a},K=function(a,c){m.prototype[a]=
+function(){var a=i.call(arguments);H.call(a,this._wrapped);return 
v(c.apply(b,a),this._chain)}};b.mixin(b);j("pop,push,reverse,shift,sort,splice,unshift".split(","),function(a){var
 b=k[a];m.prototype[a]=function(){var d=this._wrapped;b.apply(d,arguments);var 
e=d.length;(a=="shift"||a=="splice")&&e===0&&delete d[0];return 
v(d,this._chain)}});j(["concat","join","slice"],function(a){var 
b=k[a];m.prototype[a]=function(){return 
v(b.apply(this._wrapped,arguments),this._chain)}});m.prototype.chain=function(){this._chain=
+true;return this};m.prototype.value=function(){return 
this._wrapped}}).call(this);

Added: websites/staging/climate/trunk/content/api/_static/up-pressed.png
==============================================================================
Binary file - no diff available.

Propchange: websites/staging/climate/trunk/content/api/_static/up-pressed.png
------------------------------------------------------------------------------
    svn:mime-type = image/png

Added: websites/staging/climate/trunk/content/api/_static/up.png
==============================================================================
Binary file - no diff available.

Propchange: websites/staging/climate/trunk/content/api/_static/up.png
------------------------------------------------------------------------------
    svn:mime-type = image/png

Added: websites/staging/climate/trunk/content/api/_static/websupport.js
==============================================================================
--- websites/staging/climate/trunk/content/api/_static/websupport.js (added)
+++ websites/staging/climate/trunk/content/api/_static/websupport.js Mon Sep 28 
18:53:23 2015
@@ -0,0 +1,808 @@
+/*
+ * websupport.js
+ * ~~~~~~~~~~~~~
+ *
+ * sphinx.websupport utilties for all documentation.
+ *
+ * :copyright: Copyright 2007-2013 by the Sphinx team, see AUTHORS.
+ * :license: BSD, see LICENSE for details.
+ *
+ */
+
+(function($) {
+  $.fn.autogrow = function() {
+    return this.each(function() {
+    var textarea = this;
+
+    $.fn.autogrow.resize(textarea);
+
+    $(textarea)
+      .focus(function() {
+        textarea.interval = setInterval(function() {
+          $.fn.autogrow.resize(textarea);
+        }, 500);
+      })
+      .blur(function() {
+        clearInterval(textarea.interval);
+      });
+    });
+  };
+
+  $.fn.autogrow.resize = function(textarea) {
+    var lineHeight = parseInt($(textarea).css('line-height'), 10);
+    var lines = textarea.value.split('\n');
+    var columns = textarea.cols;
+    var lineCount = 0;
+    $.each(lines, function() {
+      lineCount += Math.ceil(this.length / columns) || 1;
+    });
+    var height = lineHeight * (lineCount + 1);
+    $(textarea).css('height', height);
+  };
+})(jQuery);
+
+(function($) {
+  var comp, by;
+
+  function init() {
+    initEvents();
+    initComparator();
+  }
+
+  function initEvents() {
+    $('a.comment-close').live("click", function(event) {
+      event.preventDefault();
+      hide($(this).attr('id').substring(2));
+    });
+    $('a.vote').live("click", function(event) {
+      event.preventDefault();
+      handleVote($(this));
+    });
+    $('a.reply').live("click", function(event) {
+      event.preventDefault();
+      openReply($(this).attr('id').substring(2));
+    });
+    $('a.close-reply').live("click", function(event) {
+      event.preventDefault();
+      closeReply($(this).attr('id').substring(2));
+    });
+    $('a.sort-option').live("click", function(event) {
+      event.preventDefault();
+      handleReSort($(this));
+    });
+    $('a.show-proposal').live("click", function(event) {
+      event.preventDefault();
+      showProposal($(this).attr('id').substring(2));
+    });
+    $('a.hide-proposal').live("click", function(event) {
+      event.preventDefault();
+      hideProposal($(this).attr('id').substring(2));
+    });
+    $('a.show-propose-change').live("click", function(event) {
+      event.preventDefault();
+      showProposeChange($(this).attr('id').substring(2));
+    });
+    $('a.hide-propose-change').live("click", function(event) {
+      event.preventDefault();
+      hideProposeChange($(this).attr('id').substring(2));
+    });
+    $('a.accept-comment').live("click", function(event) {
+      event.preventDefault();
+      acceptComment($(this).attr('id').substring(2));
+    });
+    $('a.delete-comment').live("click", function(event) {
+      event.preventDefault();
+      deleteComment($(this).attr('id').substring(2));
+    });
+    $('a.comment-markup').live("click", function(event) {
+      event.preventDefault();
+      toggleCommentMarkupBox($(this).attr('id').substring(2));
+    });
+  }
+
+  /**
+   * Set comp, which is a comparator function used for sorting and
+   * inserting comments into the list.
+   */
+  function setComparator() {
+    // If the first three letters are "asc", sort in ascending order
+    // and remove the prefix.
+    if (by.substring(0,3) == 'asc') {
+      var i = by.substring(3);
+      comp = function(a, b) { return a[i] - b[i]; };
+    } else {
+      // Otherwise sort in descending order.
+      comp = function(a, b) { return b[by] - a[by]; };
+    }
+
+    // Reset link styles and format the selected sort option.
+    $('a.sel').attr('href', '#').removeClass('sel');
+    $('a.by' + by).removeAttr('href').addClass('sel');
+  }
+
+  /**
+   * Create a comp function. If the user has preferences stored in
+   * the sortBy cookie, use those, otherwise use the default.
+   */
+  function initComparator() {
+    by = 'rating'; // Default to sort by rating.
+    // If the sortBy cookie is set, use that instead.
+    if (document.cookie.length > 0) {
+      var start = document.cookie.indexOf('sortBy=');
+      if (start != -1) {
+        start = start + 7;
+        var end = document.cookie.indexOf(";", start);
+        if (end == -1) {
+          end = document.cookie.length;
+          by = unescape(document.cookie.substring(start, end));
+        }
+      }
+    }
+    setComparator();
+  }
+
+  /**
+   * Show a comment div.
+   */
+  function show(id) {
+    $('#ao' + id).hide();
+    $('#ah' + id).show();
+    var context = $.extend({id: id}, opts);
+    var popup = $(renderTemplate(popupTemplate, context)).hide();
+    popup.find('textarea[name="proposal"]').hide();
+    popup.find('a.by' + by).addClass('sel');
+    var form = popup.find('#cf' + id);
+    form.submit(function(event) {
+      event.preventDefault();
+      addComment(form);
+    });
+    $('#s' + id).after(popup);
+    popup.slideDown('fast', function() {
+      getComments(id);
+    });
+  }
+
+  /**
+   * Hide a comment div.
+   */
+  function hide(id) {
+    $('#ah' + id).hide();
+    $('#ao' + id).show();
+    var div = $('#sc' + id);
+    div.slideUp('fast', function() {
+      div.remove();
+    });
+  }
+
+  /**
+   * Perform an ajax request to get comments for a node
+   * and insert the comments into the comments tree.
+   */
+  function getComments(id) {
+    $.ajax({
+     type: 'GET',
+     url: opts.getCommentsURL,
+     data: {node: id},
+     success: function(data, textStatus, request) {
+       var ul = $('#cl' + id);
+       var speed = 100;
+       $('#cf' + id)
+         .find('textarea[name="proposal"]')
+         .data('source', data.source);
+
+       if (data.comments.length === 0) {
+         ul.html('<li>No comments yet.</li>');
+         ul.data('empty', true);
+       } else {
+         // If there are comments, sort them and put them in the list.
+         var comments = sortComments(data.comments);
+         speed = data.comments.length * 100;
+         appendComments(comments, ul);
+         ul.data('empty', false);
+       }
+       $('#cn' + id).slideUp(speed + 200);
+       ul.slideDown(speed);
+     },
+     error: function(request, textStatus, error) {
+       showError('Oops, there was a problem retrieving the comments.');
+     },
+     dataType: 'json'
+    });
+  }
+
+  /**
+   * Add a comment via ajax and insert the comment into the comment tree.
+   */
+  function addComment(form) {
+    var node_id = form.find('input[name="node"]').val();
+    var parent_id = form.find('input[name="parent"]').val();
+    var text = form.find('textarea[name="comment"]').val();
+    var proposal = form.find('textarea[name="proposal"]').val();
+
+    if (text == '') {
+      showError('Please enter a comment.');
+      return;
+    }
+
+    // Disable the form that is being submitted.
+    form.find('textarea,input').attr('disabled', 'disabled');
+
+    // Send the comment to the server.
+    $.ajax({
+      type: "POST",
+      url: opts.addCommentURL,
+      dataType: 'json',
+      data: {
+        node: node_id,
+        parent: parent_id,
+        text: text,
+        proposal: proposal
+      },
+      success: function(data, textStatus, error) {
+        // Reset the form.
+        if (node_id) {
+          hideProposeChange(node_id);
+        }
+        form.find('textarea')
+          .val('')
+          .add(form.find('input'))
+          .removeAttr('disabled');
+       var ul = $('#cl' + (node_id || parent_id));
+        if (ul.data('empty')) {
+          $(ul).empty();
+          ul.data('empty', false);
+        }
+        insertComment(data.comment);
+        var ao = $('#ao' + node_id);
+        ao.find('img').attr({'src': opts.commentBrightImage});
+        if (node_id) {
+          // if this was a "root" comment, remove the commenting box
+          // (the user can get it back by reopening the comment popup)
+          $('#ca' + node_id).slideUp();
+        }
+      },
+      error: function(request, textStatus, error) {
+        form.find('textarea,input').removeAttr('disabled');
+        showError('Oops, there was a problem adding the comment.');
+      }
+    });
+  }
+
+  /**
+   * Recursively append comments to the main comment list and children
+   * lists, creating the comment tree.
+   */
+  function appendComments(comments, ul) {
+    $.each(comments, function() {
+      var div = createCommentDiv(this);
+      ul.append($(document.createElement('li')).html(div));
+      appendComments(this.children, div.find('ul.comment-children'));
+      // To avoid stagnating data, don't store the comments children in data.
+      this.children = null;
+      div.data('comment', this);
+    });
+  }
+
+  /**
+   * After adding a new comment, it must be inserted in the correct
+   * location in the comment tree.
+   */
+  function insertComment(comment) {
+    var div = createCommentDiv(comment);
+
+    // To avoid stagnating data, don't store the comments children in data.
+    comment.children = null;
+    div.data('comment', comment);
+
+    var ul = $('#cl' + (comment.node || comment.parent));
+    var siblings = getChildren(ul);
+
+    var li = $(document.createElement('li'));
+    li.hide();
+
+    // Determine where in the parents children list to insert this comment.
+    for(i=0; i < siblings.length; i++) {
+      if (comp(comment, siblings[i]) <= 0) {
+        $('#cd' + siblings[i].id)
+          .parent()
+          .before(li.html(div));
+        li.slideDown('fast');
+        return;
+      }
+    }
+
+    // If we get here, this comment rates lower than all the others,
+    // or it is the only comment in the list.
+    ul.append(li.html(div));
+    li.slideDown('fast');
+  }
+
+  function acceptComment(id) {
+    $.ajax({
+      type: 'POST',
+      url: opts.acceptCommentURL,
+      data: {id: id},
+      success: function(data, textStatus, request) {
+        $('#cm' + id).fadeOut('fast');
+        $('#cd' + id).removeClass('moderate');
+      },
+      error: function(request, textStatus, error) {
+        showError('Oops, there was a problem accepting the comment.');
+      }
+    });
+  }
+
+  function deleteComment(id) {
+    $.ajax({
+      type: 'POST',
+      url: opts.deleteCommentURL,
+      data: {id: id},
+      success: function(data, textStatus, request) {
+        var div = $('#cd' + id);
+        if (data == 'delete') {
+          // Moderator mode: remove the comment and all children immediately
+          div.slideUp('fast', function() {
+            div.remove();
+          });
+          return;
+        }
+        // User mode: only mark the comment as deleted
+        div
+          .find('span.user-id:first')
+          .text('[deleted]').end()
+          .find('div.comment-text:first')
+          .text('[deleted]').end()
+          .find('#cm' + id + ', #dc' + id + ', #ac' + id + ', #rc' + id +
+                ', #sp' + id + ', #hp' + id + ', #cr' + id + ', #rl' + id)
+          .remove();
+        var comment = div.data('comment');
+        comment.username = '[deleted]';
+        comment.text = '[deleted]';
+        div.data('comment', comment);
+      },
+      error: function(request, textStatus, error) {
+        showError('Oops, there was a problem deleting the comment.');
+      }
+    });
+  }
+
+  function showProposal(id) {
+    $('#sp' + id).hide();
+    $('#hp' + id).show();
+    $('#pr' + id).slideDown('fast');
+  }
+
+  function hideProposal(id) {
+    $('#hp' + id).hide();
+    $('#sp' + id).show();
+    $('#pr' + id).slideUp('fast');
+  }
+
+  function showProposeChange(id) {
+    $('#pc' + id).hide();
+    $('#hc' + id).show();
+    var textarea = $('#pt' + id);
+    textarea.val(textarea.data('source'));
+    $.fn.autogrow.resize(textarea[0]);
+    textarea.slideDown('fast');
+  }
+
+  function hideProposeChange(id) {
+    $('#hc' + id).hide();
+    $('#pc' + id).show();
+    var textarea = $('#pt' + id);
+    textarea.val('').removeAttr('disabled');
+    textarea.slideUp('fast');
+  }
+
+  function toggleCommentMarkupBox(id) {
+    $('#mb' + id).toggle();
+  }
+
+  /** Handle when the user clicks on a sort by link. */
+  function handleReSort(link) {
+    var classes = link.attr('class').split(/\s+/);
+    for (var i=0; i<classes.length; i++) {
+      if (classes[i] != 'sort-option') {
+       by = classes[i].substring(2);
+      }
+    }
+    setComparator();
+    // Save/update the sortBy cookie.
+    var expiration = new Date();
+    expiration.setDate(expiration.getDate() + 365);
+    document.cookie= 'sortBy=' + escape(by) +
+                     ';expires=' + expiration.toUTCString();
+    $('ul.comment-ul').each(function(index, ul) {
+      var comments = getChildren($(ul), true);
+      comments = sortComments(comments);
+      appendComments(comments, $(ul).empty());
+    });
+  }
+
+  /**
+   * Function to process a vote when a user clicks an arrow.
+   */
+  function handleVote(link) {
+    if (!opts.voting) {
+      showError("You'll need to login to vote.");
+      return;
+    }
+
+    var id = link.attr('id');
+    if (!id) {
+      // Didn't click on one of the voting arrows.
+      return;
+    }
+    // If it is an unvote, the new vote value is 0,
+    // Otherwise it's 1 for an upvote, or -1 for a downvote.
+    var value = 0;
+    if (id.charAt(1) != 'u') {
+      value = id.charAt(0) == 'u' ? 1 : -1;
+    }
+    // The data to be sent to the server.
+    var d = {
+      comment_id: id.substring(2),
+      value: value
+    };
+
+    // Swap the vote and unvote links.
+    link.hide();
+    $('#' + id.charAt(0) + (id.charAt(1) == 'u' ? 'v' : 'u') + d.comment_id)
+      .show();
+
+    // The div the comment is displayed in.
+    var div = $('div#cd' + d.comment_id);
+    var data = div.data('comment');
+
+    // If this is not an unvote, and the other vote arrow has
+    // already been pressed, unpress it.
+    if ((d.value !== 0) && (data.vote === d.value * -1)) {
+      $('#' + (d.value == 1 ? 'd' : 'u') + 'u' + d.comment_id).hide();
+      $('#' + (d.value == 1 ? 'd' : 'u') + 'v' + d.comment_id).show();
+    }
+
+    // Update the comments rating in the local data.
+    data.rating += (data.vote === 0) ? d.value : (d.value - data.vote);
+    data.vote = d.value;
+    div.data('comment', data);
+
+    // Change the rating text.
+    div.find('.rating:first')
+      .text(data.rating + ' point' + (data.rating == 1 ? '' : 's'));
+
+    // Send the vote information to the server.
+    $.ajax({
+      type: "POST",
+      url: opts.processVoteURL,
+      data: d,
+      error: function(request, textStatus, error) {
+        showError('Oops, there was a problem casting that vote.');
+      }
+    });
+  }
+
+  /**
+   * Open a reply form used to reply to an existing comment.
+   */
+  function openReply(id) {
+    // Swap out the reply link for the hide link
+    $('#rl' + id).hide();
+    $('#cr' + id).show();
+
+    // Add the reply li to the children ul.
+    var div = $(renderTemplate(replyTemplate, {id: id})).hide();
+    $('#cl' + id)
+      .prepend(div)
+      // Setup the submit handler for the reply form.
+      .find('#rf' + id)
+      .submit(function(event) {
+        event.preventDefault();
+        addComment($('#rf' + id));
+        closeReply(id);
+      })
+      .find('input[type=button]')
+      .click(function() {
+        closeReply(id);
+      });
+    div.slideDown('fast', function() {
+      $('#rf' + id).find('textarea').focus();
+    });
+  }
+
+  /**
+   * Close the reply form opened with openReply.
+   */
+  function closeReply(id) {
+    // Remove the reply div from the DOM.
+    $('#rd' + id).slideUp('fast', function() {
+      $(this).remove();
+    });
+
+    // Swap out the hide link for the reply link
+    $('#cr' + id).hide();
+    $('#rl' + id).show();
+  }
+
+  /**
+   * Recursively sort a tree of comments using the comp comparator.
+   */
+  function sortComments(comments) {
+    comments.sort(comp);
+    $.each(comments, function() {
+      this.children = sortComments(this.children);
+    });
+    return comments;
+  }
+
+  /**
+   * Get the children comments from a ul. If recursive is true,
+   * recursively include childrens' children.
+   */
+  function getChildren(ul, recursive) {
+    var children = [];
+    ul.children().children("[id^='cd']")
+      .each(function() {
+        var comment = $(this).data('comment');
+        if (recursive)
+          comment.children = getChildren($(this).find('#cl' + comment.id), 
true);
+        children.push(comment);
+      });
+    return children;
+  }
+
+  /** Create a div to display a comment in. */
+  function createCommentDiv(comment) {
+    if (!comment.displayed && !opts.moderator) {
+      return $('<div class="moderate">Thank you!  Your comment will show up '
+               + 'once it is has been approved by a moderator.</div>');
+    }
+    // Prettify the comment rating.
+    comment.pretty_rating = comment.rating + ' point' +
+      (comment.rating == 1 ? '' : 's');
+    // Make a class (for displaying not yet moderated comments differently)
+    comment.css_class = comment.displayed ? '' : ' moderate';
+    // Create a div for this comment.
+    var context = $.extend({}, opts, comment);
+    var div = $(renderTemplate(commentTemplate, context));
+
+    // If the user has voted on this comment, highlight the correct arrow.
+    if (comment.vote) {
+      var direction = (comment.vote == 1) ? 'u' : 'd';
+      div.find('#' + direction + 'v' + comment.id).hide();
+      div.find('#' + direction + 'u' + comment.id).show();
+    }
+
+    if (opts.moderator || comment.text != '[deleted]') {
+      div.find('a.reply').show();
+      if (comment.proposal_diff)
+        div.find('#sp' + comment.id).show();
+      if (opts.moderator && !comment.displayed)
+        div.find('#cm' + comment.id).show();
+      if (opts.moderator || (opts.username == comment.username))
+        div.find('#dc' + comment.id).show();
+    }
+    return div;
+  }
+
+  /**
+   * A simple template renderer. Placeholders such as <%id%> are replaced
+   * by context['id'] with items being escaped. Placeholders such as <#id#>
+   * are not escaped.
+   */
+  function renderTemplate(template, context) {
+    var esc = $(document.createElement('div'));
+
+    function handle(ph, escape) {
+      var cur = context;
+      $.each(ph.split('.'), function() {
+        cur = cur[this];
+      });
+      return escape ? esc.text(cur || "").html() : cur;
+    }
+
+    return template.replace(/<([%#])([\w\.]*)\1>/g, function() {
+      return handle(arguments[2], arguments[1] == '%' ? true : false);
+    });
+  }
+
+  /** Flash an error message briefly. */
+  function showError(message) {
+    $(document.createElement('div')).attr({'class': 'popup-error'})
+      .append($(document.createElement('div'))
+               .attr({'class': 'error-message'}).text(message))
+      .appendTo('body')
+      .fadeIn("slow")
+      .delay(2000)
+      .fadeOut("slow");
+  }
+
+  /** Add a link the user uses to open the comments popup. */
+  $.fn.comment = function() {
+    return this.each(function() {
+      var id = $(this).attr('id').substring(1);
+      var count = COMMENT_METADATA[id];
+      var title = count + ' comment' + (count == 1 ? '' : 's');
+      var image = count > 0 ? opts.commentBrightImage : opts.commentImage;
+      var addcls = count == 0 ? ' nocomment' : '';
+      $(this)
+        .append(
+          $(document.createElement('a')).attr({
+            href: '#',
+            'class': 'sphinx-comment-open' + addcls,
+            id: 'ao' + id
+          })
+            .append($(document.createElement('img')).attr({
+              src: image,
+              alt: 'comment',
+              title: title
+            }))
+            .click(function(event) {
+              event.preventDefault();
+              show($(this).attr('id').substring(2));
+            })
+        )
+        .append(
+          $(document.createElement('a')).attr({
+            href: '#',
+            'class': 'sphinx-comment-close hidden',
+            id: 'ah' + id
+          })
+            .append($(document.createElement('img')).attr({
+              src: opts.closeCommentImage,
+              alt: 'close',
+              title: 'close'
+            }))
+            .click(function(event) {
+              event.preventDefault();
+              hide($(this).attr('id').substring(2));
+            })
+        );
+    });
+  };
+
+  var opts = {
+    processVoteURL: '/_process_vote',
+    addCommentURL: '/_add_comment',
+    getCommentsURL: '/_get_comments',
+    acceptCommentURL: '/_accept_comment',
+    deleteCommentURL: '/_delete_comment',
+    commentImage: '/static/_static/comment.png',
+    closeCommentImage: '/static/_static/comment-close.png',
+    loadingImage: '/static/_static/ajax-loader.gif',
+    commentBrightImage: '/static/_static/comment-bright.png',
+    upArrow: '/static/_static/up.png',
+    downArrow: '/static/_static/down.png',
+    upArrowPressed: '/static/_static/up-pressed.png',
+    downArrowPressed: '/static/_static/down-pressed.png',
+    voting: false,
+    moderator: false
+  };
+
+  if (typeof COMMENT_OPTIONS != "undefined") {
+    opts = jQuery.extend(opts, COMMENT_OPTIONS);
+  }
+
+  var popupTemplate = '\
+    <div class="sphinx-comments" id="sc<%id%>">\
+      <p class="sort-options">\
+        Sort by:\
+        <a href="#" class="sort-option byrating">best rated</a>\
+        <a href="#" class="sort-option byascage">newest</a>\
+        <a href="#" class="sort-option byage">oldest</a>\
+      </p>\
+      <div class="comment-header">Comments</div>\
+      <div class="comment-loading" id="cn<%id%>">\
+        loading comments... <img src="<%loadingImage%>" alt="" /></div>\
+      <ul id="cl<%id%>" class="comment-ul"></ul>\
+      <div id="ca<%id%>">\
+      <p class="add-a-comment">Add a comment\
+        (<a href="#" class="comment-markup" id="ab<%id%>">markup</a>):</p>\
+      <div class="comment-markup-box" id="mb<%id%>">\
+        reStructured text markup: <i>*emph*</i>, <b>**strong**</b>, \
+        <tt>``code``</tt>, \
+        code blocks: <tt>::</tt> and an indented block after blank line</div>\
+      <form method="post" id="cf<%id%>" class="comment-form" action="">\
+        <textarea name="comment" cols="80"></textarea>\
+        <p class="propose-button">\
+          <a href="#" id="pc<%id%>" class="show-propose-change">\
+            Propose a change &#9657;\
+          </a>\
+          <a href="#" id="hc<%id%>" class="hide-propose-change">\
+            Propose a change &#9663;\
+          </a>\
+        </p>\
+        <textarea name="proposal" id="pt<%id%>" cols="80"\
+                  spellcheck="false"></textarea>\
+        <input type="submit" value="Add comment" />\
+        <input type="hidden" name="node" value="<%id%>" />\
+        <input type="hidden" name="parent" value="" />\
+      </form>\
+      </div>\
+    </div>';
+
+  var commentTemplate = '\
+    <div id="cd<%id%>" class="sphinx-comment<%css_class%>">\
+      <div class="vote">\
+        <div class="arrow">\
+          <a href="#" id="uv<%id%>" class="vote" title="vote up">\
+            <img src="<%upArrow%>" />\
+          </a>\
+          <a href="#" id="uu<%id%>" class="un vote" title="vote up">\
+            <img src="<%upArrowPressed%>" />\
+          </a>\
+        </div>\
+        <div class="arrow">\
+          <a href="#" id="dv<%id%>" class="vote" title="vote down">\
+            <img src="<%downArrow%>" id="da<%id%>" />\
+          </a>\
+          <a href="#" id="du<%id%>" class="un vote" title="vote down">\
+            <img src="<%downArrowPressed%>" />\
+          </a>\
+        </div>\
+      </div>\
+      <div class="comment-content">\
+        <p class="tagline comment">\
+          <span class="user-id"><%username%></span>\
+          <span class="rating"><%pretty_rating%></span>\
+          <span class="delta"><%time.delta%></span>\
+        </p>\
+        <div class="comment-text comment"><#text#></div>\
+        <p class="comment-opts comment">\
+          <a href="#" class="reply hidden" id="rl<%id%>">reply &#9657;</a>\
+          <a href="#" class="close-reply" id="cr<%id%>">reply &#9663;</a>\
+          <a href="#" id="sp<%id%>" class="show-proposal">proposal &#9657;</a>\
+          <a href="#" id="hp<%id%>" class="hide-proposal">proposal &#9663;</a>\
+          <a href="#" id="dc<%id%>" class="delete-comment hidden">delete</a>\
+          <span id="cm<%id%>" class="moderation hidden">\
+            <a href="#" id="ac<%id%>" class="accept-comment">accept</a>\
+          </span>\
+        </p>\
+        <pre class="proposal" id="pr<%id%>">\
+<#proposal_diff#>\
+        </pre>\
+          <ul class="comment-children" id="cl<%id%>"></ul>\
+        </div>\
+        <div class="clearleft"></div>\
+      </div>\
+    </div>';
+
+  var replyTemplate = '\
+    <li>\
+      <div class="reply-div" id="rd<%id%>">\
+        <form id="rf<%id%>">\
+          <textarea name="comment" cols="80"></textarea>\
+          <input type="submit" value="Add reply" />\
+          <input type="button" value="Cancel" />\
+          <input type="hidden" name="parent" value="<%id%>" />\
+          <input type="hidden" name="node" value="" />\
+        </form>\
+      </div>\
+    </li>';
+
+  $(document).ready(function() {
+    init();
+  });
+})(jQuery);
+
+$(document).ready(function() {
+  // add comment anchors for all paragraphs that are commentable
+  $('.sphinx-has-comment').comment();
+
+  // highlight search words in search results
+  $("div.context").each(function() {
+    var params = $.getQueryParameters();
+    var terms = (params.q) ? params.q[0].split(/\s+/) : [];
+    var result = $(this);
+    $.each(terms, function() {
+      result.highlightText(this.toLowerCase(), 'highlighted');
+    });
+  });
+
+  // directly open comment window if requested
+  var anchor = document.location.hash;
+  if (anchor.substring(0, 9) == '#comment-') {
+    $('#ao' + anchor.substring(9)).click();
+    document.location.hash = '#s' + anchor.substring(9);
+  }
+});

Added: websites/staging/climate/trunk/content/api/config/config_overview.html
==============================================================================
--- websites/staging/climate/trunk/content/api/config/config_overview.html 
(added)
+++ websites/staging/climate/trunk/content/api/config/config_overview.html Mon 
Sep 28 18:53:23 2015
@@ -0,0 +1,200 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd";>
+
+
+<html xmlns="http://www.w3.org/1999/xhtml";>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>Configuration File Overview &mdash; Apache Open Climate Workbench 
1.0.0 documentation</title>
+    
+    <link rel="stylesheet" href="../_static/default.css" type="text/css" />
+    <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../',
+        VERSION:     '1.0.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../_static/jquery.js"></script>
+    <script type="text/javascript" src="../_static/underscore.js"></script>
+    <script type="text/javascript" src="../_static/doctools.js"></script>
+    <link rel="top" title="Apache Open Climate Workbench 1.0.0 documentation" 
href="../index.html" />
+    <link rel="prev" title="Evaluation UI Webservices" 
href="../ui-backend/backend.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../http-routingtable.html" title="HTTP Routing Table"
+             >routing table</a> |</li>
+        <li class="right" >
+          <a href="../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li class="right" >
+          <a href="../ui-backend/backend.html" title="Evaluation UI 
Webservices"
+             accesskey="P">previous</a> |</li>
+        <li><a href="../index.html">Apache Open Climate Workbench 1.0.0 
documentation</a> &raquo;</li> 
+      </ul>
+    </div>  
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <div class="section" id="configuration-file-overview">
+<h1>Configuration File Overview<a class="headerlink" 
href="#configuration-file-overview" title="Permalink to this 
headline">¶</a></h1>
+<p>Apache Open Climate Workbench includes tools for creating and reading 
configuration files. Below is an explanation of the general configuration file 
structure, and in-depth look at the various configuration options, and 
explanations of how to use configuration files in an evaluation.</p>
+<div class="section" id="getting-started">
+<h2>Getting Started<a class="headerlink" href="#getting-started" 
title="Permalink to this headline">¶</a></h2>
+<p>OCW configuration files are written in <a class="reference external" 
href="http://yaml.org/";>YAML</a> with type annotations that are supported by 
the <a class="reference external" 
href="http://pyyaml.org/wiki/PyYAMLDocumentation";>PyYAML library</a>. 
Let&#8217;s look at an example configuration file to get started.</p>
+<div class="code highlight-python"><div class="highlight"><pre>evaluation:
+    temporal_time_delta: 365
+    spatial_regrid_lats: !!python/tuple [-20, 20, 1]
+    spatial_regrid_lons: !!python/tuple [-20, 20, 1]
+
+datasets:
+    reference:
+        data_source: local
+        file_count: 1
+        path: /tmp/AFRICA_KNMI-RACMO2.2b_CTL_ERAINT_MM_50km_1989-2008_tasmax.nc
+        variable: tasmax
+
+    targets:
+        - data_source: local
+          file_count: 1
+          path: /tmp/AFRICA_UC-WRF311_CTL_ERAINT_MM_50km-rg_1989-2008_tasmax.nc
+          variable: tasmax
+metrics:
+    - Bias
+
+plots:
+    - type: contour
+      results_indeces:
+          - !!python/tuple [0, 0]
+      lats:
+          range_min: -20
+          range_max: 20
+          range_step: 1
+      lons:
+          range_min: -20
+          range_max: 20
+          range_step: 1
+      output_name: wrf_bias_compared_to_knmi
+      optional_args:
+          gridshape: !!python/tuple [6, 6]
+</pre></div>
+</div>
+<p>There are 4 main categories for configuration settings: Evaluation, 
Datasets, Metrics, and Plots.</p>
+</div>
+<div class="section" id="evaluation-settings">
+<h2>Evaluation Settings<a class="headerlink" href="#evaluation-settings" 
title="Permalink to this headline">¶</a></h2>
+<p>This is where you will set evaluation specific settings such as temporal 
and spatial bin sizes to use during dataset preparation. Visit the <a 
class="reference internal" href="evaluation_settings.html"><em>Evaluation 
Settings</em></a> page for additional information.</p>
+</div>
+<div class="section" id="dataset-information">
+<h2>Dataset Information<a class="headerlink" href="#dataset-information" 
title="Permalink to this headline">¶</a></h2>
+<p>The datasets section is where you specify all the datasets to use for an 
evaluation. You can specify what the reference dataset should be as well as 
giving a list of target datasets. Visit the <a class="reference internal" 
href="dataset_information.html"><em>Dataset Information</em></a> page for 
additional information.</p>
+</div>
+<div class="section" id="metrics-information">
+<h2>Metrics Information<a class="headerlink" href="#metrics-information" 
title="Permalink to this headline">¶</a></h2>
+<p>You will need to load some metrics if you want to get anything useful out 
of your evaluation. Visit the <a class="reference internal" 
href="metrics_information.html"><em>Metrics Information</em></a> page to learn 
how to specify the metrics that should be used in the evaluation.</p>
+</div>
+<div class="section" id="plots-settings">
+<h2>Plots Settings<a class="headerlink" href="#plots-settings" 
title="Permalink to this headline">¶</a></h2>
+<p>This is where you specify what plots to make after running the evaluation. 
The <a class="reference internal" href="plots_settings.html"><em>Plots 
Settings</em></a> page provides examples for the supported plot types.</p>
+</div>
+<div class="section" id="example-run">
+<h2>Example Run<a class="headerlink" href="#example-run" title="Permalink to 
this headline">¶</a></h2>
+<p>If you have tried the <strong>simple_model_to_model_bias.py</strong> 
example in the primary toolkit examples you can run the same evaluation but use 
a config file to do so instead of direct API scripting. From the 
<strong>climate/ocw-config-runner/</strong> directory run the following command 
to run the example:</p>
+<div class="highlight-python"><div class="highlight"><pre>python 
ocw_evaluation_from_config.py example/simple_model_to_model_bias.yaml
+</pre></div>
+</div>
+<div class="admonition note">
+<p class="first admonition-title">Note</p>
+<p class="last">If you haven&#8217;t run the previous example which downloads 
the necessary datasets this evaluation will fail. The necessary local files 
will not have been downloaded!</p>
+</div>
+</div>
+<div class="section" id="writing-a-config-file">
+<h2>Writing a Config File<a class="headerlink" href="#writing-a-config-file" 
title="Permalink to this headline">¶</a></h2>
+<p>You can export an <a class="reference internal" 
href="../ocw/evaluation.html#evaluation.Evaluation" 
title="evaluation.Evaluation"><tt class="xref py py-class docutils 
literal"><span class="pre">evaluation.Evaluation</span></tt></a> object to a 
configuration file for easily repeatable evaluations. Checkout the 
documentation on the <a class="reference internal" 
href="config_writer.html"><em>configuration file writer API</em></a> for 
additional information.</p>
+</div>
+</div>
+
+
+          </div>
+        </div>
+      </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+  <h3><a href="../index.html">Table Of Contents</a></h3>
+  <ul>
+<li><a class="reference internal" href="#">Configuration File Overview</a><ul>
+<li><a class="reference internal" href="#getting-started">Getting 
Started</a></li>
+<li><a class="reference internal" href="#evaluation-settings">Evaluation 
Settings</a></li>
+<li><a class="reference internal" href="#dataset-information">Dataset 
Information</a></li>
+<li><a class="reference internal" href="#metrics-information">Metrics 
Information</a></li>
+<li><a class="reference internal" href="#plots-settings">Plots 
Settings</a></li>
+<li><a class="reference internal" href="#example-run">Example Run</a></li>
+<li><a class="reference internal" href="#writing-a-config-file">Writing a 
Config File</a></li>
+</ul>
+</li>
+</ul>
+
+  <h4>Previous topic</h4>
+  <p class="topless"><a href="../ui-backend/backend.html"
+                        title="previous chapter">Evaluation UI 
Webservices</a></p>
+  <h3>This Page</h3>
+  <ul class="this-page-menu">
+    <li><a href="../_sources/config/config_overview.txt"
+           rel="nofollow">Show Source</a></li>
+  </ul>
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../http-routingtable.html" title="HTTP Routing Table"
+             >routing table</a> |</li>
+        <li class="right" >
+          <a href="../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li class="right" >
+          <a href="../ui-backend/backend.html" title="Evaluation UI 
Webservices"
+             >previous</a> |</li>
+        <li><a href="../index.html">Apache Open Climate Workbench 1.0.0 
documentation</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2013, Apache Software Foundation.
+      Created using <a href="http://sphinx-doc.org/";>Sphinx</a> 1.2.1.
+    </div>
+  </body>
+</html>
\ No newline at end of file

Added: websites/staging/climate/trunk/content/api/config/config_writer.html
==============================================================================
--- websites/staging/climate/trunk/content/api/config/config_writer.html (added)
+++ websites/staging/climate/trunk/content/api/config/config_writer.html Mon 
Sep 28 18:53:23 2015
@@ -0,0 +1,102 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd";>
+
+
+<html xmlns="http://www.w3.org/1999/xhtml";>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>Configuration File Writer API &mdash; Apache Open Climate Workbench 
1.0.0 documentation</title>
+    
+    <link rel="stylesheet" href="../_static/default.css" type="text/css" />
+    <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../',
+        VERSION:     '1.0.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../_static/jquery.js"></script>
+    <script type="text/javascript" src="../_static/underscore.js"></script>
+    <script type="text/javascript" src="../_static/doctools.js"></script>
+    <link rel="top" title="Apache Open Climate Workbench 1.0.0 documentation" 
href="../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../http-routingtable.html" title="HTTP Routing Table"
+             >routing table</a> |</li>
+        <li class="right" >
+          <a href="../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../index.html">Apache Open Climate Workbench 1.0.0 
documentation</a> &raquo;</li> 
+      </ul>
+    </div>  
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <div class="section" id="configuration-file-writer-api">
+<h1>Configuration File Writer API<a class="headerlink" 
href="#configuration-file-writer-api" title="Permalink to this 
headline">¶</a></h1>
+</div>
+
+
+          </div>
+        </div>
+      </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+  <h3>This Page</h3>
+  <ul class="this-page-menu">
+    <li><a href="../_sources/config/config_writer.txt"
+           rel="nofollow">Show Source</a></li>
+  </ul>
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../http-routingtable.html" title="HTTP Routing Table"
+             >routing table</a> |</li>
+        <li class="right" >
+          <a href="../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../index.html">Apache Open Climate Workbench 1.0.0 
documentation</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2013, Apache Software Foundation.
+      Created using <a href="http://sphinx-doc.org/";>Sphinx</a> 1.2.1.
+    </div>
+  </body>
+</html>
\ No newline at end of file

Added: 
websites/staging/climate/trunk/content/api/config/dataset_information.html
==============================================================================
--- websites/staging/climate/trunk/content/api/config/dataset_information.html 
(added)
+++ websites/staging/climate/trunk/content/api/config/dataset_information.html 
Mon Sep 28 18:53:23 2015
@@ -0,0 +1,193 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd";>
+
+
+<html xmlns="http://www.w3.org/1999/xhtml";>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>Dataset Information &mdash; Apache Open Climate Workbench 1.0.0 
documentation</title>
+    
+    <link rel="stylesheet" href="../_static/default.css" type="text/css" />
+    <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../',
+        VERSION:     '1.0.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../_static/jquery.js"></script>
+    <script type="text/javascript" src="../_static/underscore.js"></script>
+    <script type="text/javascript" src="../_static/doctools.js"></script>
+    <link rel="top" title="Apache Open Climate Workbench 1.0.0 documentation" 
href="../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../http-routingtable.html" title="HTTP Routing Table"
+             >routing table</a> |</li>
+        <li class="right" >
+          <a href="../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../index.html">Apache Open Climate Workbench 1.0.0 
documentation</a> &raquo;</li> 
+      </ul>
+    </div>  
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <div class="section" id="dataset-information">
+<h1>Dataset Information<a class="headerlink" href="#dataset-information" 
title="Permalink to this headline">¶</a></h1>
+<p>Dataset configuration information is passed in the 
<strong>datasets</strong> section of the configuration file. You can specify 
one reference dataset and one or more target datasets for your evaluation:</p>
+<div class="highlight-python"><div class="highlight"><pre>datasets:
+    reference:
+        data_source: local
+        file_count: 1
+        path: /tmp/AFRICA_KNMI-RACMO2.2b_CTL_ERAINT_MM_50km_1989-2008_tasmax.nc
+        variable: tasmax
+
+    targets:
+        - data_source: local
+          file_count: 1
+          path: /tmp/AFRICA_UC-WRF311_CTL_ERAINT_MM_50km-rg_1989-2008_tasmax.nc
+          variable: tasmax
+        - data_source: local
+          file_count: 1
+          path: /tmp/AFRICA_UC-WRF311_CTL_ERAINT_MM_50km-rg_1989-2008_tasmax.nc
+          variable: tasmax
+</pre></div>
+</div>
+<p>Each <strong>data_source</strong> module requires datasets to be passed in 
a slightly different manner. Below is an explanation of the format for each of 
the supported data sources.</p>
+<div class="section" id="local-dataset">
+<h2>Local Dataset<a class="headerlink" href="#local-dataset" title="Permalink 
to this headline">¶</a></h2>
+<div class="code highlight-python"><div class="highlight"><pre>data_source: 
local
+file_count: 1
+path: /tmp/AFRICA_KNMI-RACMO2.2b_CTL_ERAINT_MM_50km_1989-2008_tasmax.nc
+variable: tasmax
+</pre></div>
+</div>
+<p>The <strong>path</strong> flag is the location where the dataset is located 
on your computer. The <strong>variable</strong> flag is the variable that 
should be pulled out of the NetCDF file once it has been opened. You pass any 
optional flags that are accepted by <a class="reference internal" 
href="../data_source/data_sources.html#local.load_file" 
title="local.load_file"><tt class="xref py py-func docutils literal"><span 
class="pre">local.load_file()</span></tt></a> by using the 
<strong>optional_args</strong> flag:</p>
+<div class="highlight-python"><div class="highlight"><pre>data_source: local
+file_count: 1
+path: /tmp/AFRICA_KNMI-RACMO2.2b_CTL_ERAINT_MM_50km_1989-2008_tasmax.nc
+variable: tasmax
+optional_args:
+    elevation_index=0,
+    name=&#39;foo&#39;
+</pre></div>
+</div>
+<div class="admonition note">
+<p class="first admonition-title">Note</p>
+<p class="last">The <strong>file_count</strong> flag is currently not used. It 
is there to support planned future functionality. However, you still need to 
specify it! Leave it as 1.</p>
+</div>
+</div>
+<div class="section" id="rcmed-dataset">
+<h2>RCMED Dataset<a class="headerlink" href="#rcmed-dataset" title="Permalink 
to this headline">¶</a></h2>
+<div class="code highlight-python"><div class="highlight"><pre>data_source: 
rcmed
+dataset_id: 4
+parameter_id: 32
+min_lat: -10
+max_lat: 10
+min_lon: -20
+max_lon: 20
+start_time: 1997-01-01
+end_time: 2000-01-01
+</pre></div>
+</div>
+<p>To load a dataset from the Jet Propulsion Laboratory&#8217;s RCMED you will 
need to specify the above flags. The <strong>dataset_id</strong> and 
<strong>parameter_id</strong> are dataset specific and can be looked up on the 
<a class="reference external" 
href="https://rcmes.jpl.nasa.gov/content/rcmes-and-data";>RCMES project 
website</a>. Pretty much any common time format will be accepted for the start 
and end times. However, just to be safe you should try to stick with something 
very standard such as <a class="reference external" 
href="http://www.w3.org/TR/NOTE-datetime";>ISO-8601</a> formatted time values. 
You may also pass any optional parameters that are accepted by <a 
class="reference internal" 
href="../data_source/data_sources.html#rcmed.parameter_dataset" 
title="rcmed.parameter_dataset"><tt class="xref py py-func docutils 
literal"><span class="pre">rcmed.parameter_dataset()</span></tt></a> with the 
<strong>optional_args</strong> flag.</p>
+</div>
+<div class="section" id="esgf-dataset">
+<h2>ESGF Dataset<a class="headerlink" href="#esgf-dataset" title="Permalink to 
this headline">¶</a></h2>
+<p>In order to load an ESGF dataset you will need to specify the following 
parameters in addition to having an ESGF login:</p>
+<div class="highlight-python"><div class="highlight"><pre>data_source: esgf
+dataset_id: obs4MIPs.CNES.AVISO.mon.v1|esg-datanode.jpl.nasa.gov
+variable: zosStderr
+esgf_password: totallynotmypassword
+esgf_username: totallynotmyusername
+</pre></div>
+</div>
+<p>The <strong>dataset_id</strong> and <strong>variable</strong> flags are 
ESGF dataset specific. You can locate them through and ESGF nodes search page. 
You may also pass any optional parameters that are accepted by <a 
class="reference internal" 
href="../data_source/data_sources.html#esgf.load_dataset" 
title="esgf.load_dataset"><tt class="xref py py-func docutils literal"><span 
class="pre">esgf.load_dataset()</span></tt></a> with the 
<strong>optional_args</strong> flag.</p>
+</div>
+<div class="section" id="opendap-dataset">
+<h2>OpenDAP Dataset<a class="headerlink" href="#opendap-dataset" 
title="Permalink to this headline">¶</a></h2>
+<p>A dataset can be downloaded from an OpenDAP URL with the following 
settings:</p>
+<div class="highlight-python"><div class="highlight"><pre>data_source: dap
+url: http://test.opendap.org/dap/data/nc/sst.mnmean.nc.gz
+variable: sst
+</pre></div>
+</div>
+<p>You may also pass any optional parameters that are accepted by <a 
class="reference internal" href="../data_source/data_sources.html#dap.load" 
title="dap.load"><tt class="xref py py-func docutils literal"><span 
class="pre">dap.load()</span></tt></a> with the <strong>optional_args</strong> 
flag.</p>
+</div>
+</div>
+
+
+          </div>
+        </div>
+      </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+  <h3><a href="../index.html">Table Of Contents</a></h3>
+  <ul>
+<li><a class="reference internal" href="#">Dataset Information</a><ul>
+<li><a class="reference internal" href="#local-dataset">Local Dataset</a></li>
+<li><a class="reference internal" href="#rcmed-dataset">RCMED Dataset</a></li>
+<li><a class="reference internal" href="#esgf-dataset">ESGF Dataset</a></li>
+<li><a class="reference internal" href="#opendap-dataset">OpenDAP 
Dataset</a></li>
+</ul>
+</li>
+</ul>
+
+  <h3>This Page</h3>
+  <ul class="this-page-menu">
+    <li><a href="../_sources/config/dataset_information.txt"
+           rel="nofollow">Show Source</a></li>
+  </ul>
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../http-routingtable.html" title="HTTP Routing Table"
+             >routing table</a> |</li>
+        <li class="right" >
+          <a href="../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../index.html">Apache Open Climate Workbench 1.0.0 
documentation</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2013, Apache Software Foundation.
+      Created using <a href="http://sphinx-doc.org/";>Sphinx</a> 1.2.1.
+    </div>
+  </body>
+</html>
\ No newline at end of file

Added: 
websites/staging/climate/trunk/content/api/config/evaluation_settings.html
==============================================================================
--- websites/staging/climate/trunk/content/api/config/evaluation_settings.html 
(added)
+++ websites/staging/climate/trunk/content/api/config/evaluation_settings.html 
Mon Sep 28 18:53:23 2015
@@ -0,0 +1,161 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd";>
+
+
+<html xmlns="http://www.w3.org/1999/xhtml";>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>Evaluation Settings &mdash; Apache Open Climate Workbench 1.0.0 
documentation</title>
+    
+    <link rel="stylesheet" href="../_static/default.css" type="text/css" />
+    <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../',
+        VERSION:     '1.0.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../_static/jquery.js"></script>
+    <script type="text/javascript" src="../_static/underscore.js"></script>
+    <script type="text/javascript" src="../_static/doctools.js"></script>
+    <link rel="top" title="Apache Open Climate Workbench 1.0.0 documentation" 
href="../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../http-routingtable.html" title="HTTP Routing Table"
+             >routing table</a> |</li>
+        <li class="right" >
+          <a href="../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../index.html">Apache Open Climate Workbench 1.0.0 
documentation</a> &raquo;</li> 
+      </ul>
+    </div>  
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <div class="section" id="evaluation-settings">
+<h1>Evaluation Settings<a class="headerlink" href="#evaluation-settings" 
title="Permalink to this headline">¶</a></h1>
+<p>The evaluation settings section of the configuration file allows you to set 
attributes that are critical for making adjustments to the loaded datasets 
prior to an evaluation run. Here is an example evaluation settings section of a 
configuration file. Below, we&#8217;ll look at each of the configuration 
options in detail.</p>
+<div class="code highlight-python"><div class="highlight"><pre>evaluation:
+    temporal_time_delta: 365
+    spatial_regrid_lats: !!python/tuple [-20, 20, 1]
+    spatial_regrid_lons: !!python/tuple [-20, 20, 1]
+</pre></div>
+</div>
+<div class="section" id="temporal-rebin">
+<h2>Temporal Rebin<a class="headerlink" href="#temporal-rebin" 
title="Permalink to this headline">¶</a></h2>
+<p>It is often necessary to temporally rebin datasets prior to an evaluation. 
The <strong>temporal_time_delta</strong> flag is where you can set the 
<strong>temporal_resolution</strong> parameter for <a class="reference 
internal" href="../ocw/dataset_processor.html#dataset_processor.temporal_rebin" 
title="dataset_processor.temporal_rebin"><tt class="xref py py-func docutils 
literal"><span class="pre">dataset_processor.temporal_rebin()</span></tt></a>. 
The value that you pass here is interpreted as the number of days to assign to 
a <a class="reference external" 
href="http://docs.python.org/2/library/datetime.html#datetime.timedelta"; 
title="(in Python v2.7)"><tt class="xref py py-class docutils literal"><span 
class="pre">datetime.timedelta</span></tt></a> object before running the <a 
class="reference internal" 
href="../ocw/dataset_processor.html#dataset_processor.temporal_rebin" 
title="dataset_processor.temporal_rebin"><tt class="xref py py-func docutils 
literal"><span class="pre">dat
 aset_processor.temporal_rebin()</span></tt></a> function.</p>
+<div class="admonition note">
+<p class="first admonition-title">Note</p>
+<p class="last">This attribute is only useful if you use the configuration 
data to create an <a class="reference internal" 
href="../ocw/evaluation.html#evaluation.Evaluation" 
title="evaluation.Evaluation"><tt class="xref py py-class docutils 
literal"><span class="pre">evaluation.Evaluation</span></tt></a> object with 
the <tt class="xref py py-func docutils literal"><span 
class="pre">evaluation_creation.generate_evaluation_from_config()</span></tt> 
config parser function.</p>
+</div>
+</div>
+<div class="section" id="spatial-regrid">
+<h2>Spatial Regrid<a class="headerlink" href="#spatial-regrid" 
title="Permalink to this headline">¶</a></h2>
+<div class="admonition note">
+<p class="first admonition-title">Note</p>
+<p class="last">Some funcitonality here is still in development. Specifically, 
passing the spatial_regrid_* flags as lists of values.</p>
+</div>
+<p>If you need to regrid your datasets onto a new lat/lon grid you will need 
to set the <strong>spatial_regrid_lats</strong> and 
<strong>spatial_regrid_lons</strong> options. These will be passed to the <a 
class="reference internal" 
href="../ocw/dataset_processor.html#dataset_processor.spatial_regrid" 
title="dataset_processor.spatial_regrid"><tt class="xref py py-func docutils 
literal"><span class="pre">dataset_processor.spatial_regrid()</span></tt></a> 
function along with each dataset. There are two valid ways to pass these 
parameters. First, you can pass them as a list of all values:</p>
+<div class="highlight-python"><div class="highlight"><pre>evaluation:
+    spatial_regrid_lats: [-10, -5, 0, 5, 10]
+    spatial_regrid_lons: [-10, -5, 0, 5, 10]
+</pre></div>
+</div>
+<p>This is generally useful if you only need to pass a few parameters or if 
the sequence isn&#8217;t easy to define as a valid <strong>range</strong> in 
Python. The other option is to pass <strong>range</strong> information as a 
tuple. This requires you to use <a class="reference external" 
href="http://pyyaml.org/wiki/PyYAMLDocumentation#YAMLtagsandPythontypes";>PyYAML&#8217;s
 Python Type Annotations</a> but provides a far more compact representation:</p>
+<div class="highlight-python"><div class="highlight"><pre>evaluation:
+    spatial_regrid_lats: !!python/tuple [-20, 20, 1]
+    spatial_regrid_lons: !!python/tuple [-20, 20, 1]
+</pre></div>
+</div>
+<p>Using this style directly maps to a call to <a class="reference external" 
href="http://docs.scipy.org/doc/numpy/reference/generated/numpy.arange.html#numpy.arange";
 title="(in NumPy v1.9)"><tt class="xref py py-func docutils literal"><span 
class="pre">numpy.arange()</span></tt></a>:</p>
+<div class="highlight-python"><div class="highlight"><pre><span class="c"># 
spatial_regrid_lats: !!python/tuple [-20, 20, 1] becomes</span>
+<span class="n">lats</span> <span class="o">=</span> <span 
class="n">numpy</span><span class="o">.</span><span 
class="n">arange</span><span class="p">(</span><span class="o">-</span><span 
class="mi">20</span><span class="p">,</span> <span class="mi">20</span><span 
class="p">,</span> <span class="mi">1</span><span class="p">)</span>
+</pre></div>
+</div>
+<p>Be sure to pay special attention to the end value for your interval. The <a 
class="reference external" 
href="http://docs.scipy.org/doc/numpy/reference/generated/numpy.arange.html#numpy.arange";
 title="(in NumPy v1.9)"><tt class="xref py py-func docutils literal"><span 
class="pre">numpy.arange()</span></tt></a> function does not include the end 
value in the returned interval.</p>
+</div>
+<div class="section" id="subset-bounds">
+<h2>Subset Bounds<a class="headerlink" href="#subset-bounds" title="Permalink 
to this headline">¶</a></h2>
+<p>In order to subset the datasets down to an area of interest you will need 
to pass bounds information:</p>
+<div class="highlight-python"><div class="highlight"><pre>evaluation:
+    subset: [-10, 10, -20, 20, &quot;1997-01-01&quot;, &quot;2000-01-01&quot;]
+</pre></div>
+</div>
+<p>Here you&#8217;re passing the bounding lat/lon box with the first 4 values 
as well as the valid temporal range bounds with the starting and end time 
values. Pretty much any common time format will be accepted. However, just to 
be safe you should try to stick with something very standard such as <a 
class="reference external" 
href="http://www.w3.org/TR/NOTE-datetime";>ISO-8601</a> formatted time 
values.</p>
+</div>
+</div>
+
+
+          </div>
+        </div>
+      </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+  <h3><a href="../index.html">Table Of Contents</a></h3>
+  <ul>
+<li><a class="reference internal" href="#">Evaluation Settings</a><ul>
+<li><a class="reference internal" href="#temporal-rebin">Temporal 
Rebin</a></li>
+<li><a class="reference internal" href="#spatial-regrid">Spatial 
Regrid</a></li>
+<li><a class="reference internal" href="#subset-bounds">Subset Bounds</a></li>
+</ul>
+</li>
+</ul>
+
+  <h3>This Page</h3>
+  <ul class="this-page-menu">
+    <li><a href="../_sources/config/evaluation_settings.txt"
+           rel="nofollow">Show Source</a></li>
+  </ul>
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../http-routingtable.html" title="HTTP Routing Table"
+             >routing table</a> |</li>
+        <li class="right" >
+          <a href="../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../index.html">Apache Open Climate Workbench 1.0.0 
documentation</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2013, Apache Software Foundation.
+      Created using <a href="http://sphinx-doc.org/";>Sphinx</a> 1.2.1.
+    </div>
+  </body>
+</html>
\ No newline at end of file

Added: 
websites/staging/climate/trunk/content/api/config/metrics_information.html
==============================================================================
--- websites/staging/climate/trunk/content/api/config/metrics_information.html 
(added)
+++ websites/staging/climate/trunk/content/api/config/metrics_information.html 
Mon Sep 28 18:53:23 2015
@@ -0,0 +1,112 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd";>
+
+
+<html xmlns="http://www.w3.org/1999/xhtml";>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>Metrics Information &mdash; Apache Open Climate Workbench 1.0.0 
documentation</title>
+    
+    <link rel="stylesheet" href="../_static/default.css" type="text/css" />
+    <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../',
+        VERSION:     '1.0.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../_static/jquery.js"></script>
+    <script type="text/javascript" src="../_static/underscore.js"></script>
+    <script type="text/javascript" src="../_static/doctools.js"></script>
+    <link rel="top" title="Apache Open Climate Workbench 1.0.0 documentation" 
href="../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../http-routingtable.html" title="HTTP Routing Table"
+             >routing table</a> |</li>
+        <li class="right" >
+          <a href="../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../index.html">Apache Open Climate Workbench 1.0.0 
documentation</a> &raquo;</li> 
+      </ul>
+    </div>  
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <div class="section" id="metrics-information">
+<h1>Metrics Information<a class="headerlink" href="#metrics-information" 
title="Permalink to this headline">¶</a></h1>
+<div class="admonition note">
+<p class="first admonition-title">Note</p>
+<p class="last">At the moment, you can only load metrics that are in <tt 
class="xref py py-mod docutils literal"><span 
class="pre">ocw.metrics</span></tt>. In the future you will also be able to 
specify user defined metrics here as well. However, as a work around you can 
define your custom metrics in the <tt class="xref py py-mod docutils 
literal"><span class="pre">ocw.metrics</span></tt> module.</p>
+</div>
+<p>You can set the metrics you want to use in the evaluation in the 
<strong>metrics</strong> section of the config. You simply need to supply a 
list of the metric class names that you want to be used:</p>
+<div class="highlight-python"><div class="highlight"><pre>metrics:
+    - Bias
+    - TemporalStdDev
+</pre></div>
+</div>
+</div>
+
+
+          </div>
+        </div>
+      </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+  <h3>This Page</h3>
+  <ul class="this-page-menu">
+    <li><a href="../_sources/config/metrics_information.txt"
+           rel="nofollow">Show Source</a></li>
+  </ul>
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../http-routingtable.html" title="HTTP Routing Table"
+             >routing table</a> |</li>
+        <li class="right" >
+          <a href="../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../index.html">Apache Open Climate Workbench 1.0.0 
documentation</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2013, Apache Software Foundation.
+      Created using <a href="http://sphinx-doc.org/";>Sphinx</a> 1.2.1.
+    </div>
+  </body>
+</html>
\ No newline at end of file


Reply via email to