-
-{%- block navbar %}
- {% if theme_navigation_links or sidebar == 'left' %}
-
-
-
- {{ relbar_top() }}
- {% if theme_navigation_links %}
- {{ relbar_top_right() }}
- {% endif %}
-
-
-
- {% endif %}
-{% endblock %}
-
- {%- if theme_sidebar == 'left' -%}
- {{ sidebar() }}
- {%- endif %}
- {%- if theme_sidebar == 'none' -%}
-
-
- {% else %}
-
- {%- endif %}
- {% if not theme_navigation_links and sidebar != 'left' %}
-
-
-
- {{ relbar_top() }}
-
-
-
- {% endif %}
- {%- block document %}
-
-
- {% block body %} {% endblock %}
-
-
- {%- endblock %}
-
- {%- if theme_sidebar == 'right' -%}
- {{ sidebar() }}
- {%- elif theme_sidebar == 'none' -%}
-
- {%- endif %}
-
-
-
-{%- endblock %}
-
-
-
- {{ relbar_bottom() }}
-
-
-
-{%- block footer %}
-
-
-
-{%- endblock %}
-
-
diff --git a/kima/vendor/spleaf/doc/source/_theme/scipy/searchbox.html b/kima/vendor/spleaf/doc/source/_theme/scipy/searchbox.html
deleted file mode 100644
index 3c753e9..0000000
--- a/kima/vendor/spleaf/doc/source/_theme/scipy/searchbox.html
+++ /dev/null
@@ -1,13 +0,0 @@
-{%- if theme_edit_link -%}
-{% block edit_link %}
-{%- if sourcename %}
-
-{%- endif %}
-{% endblock %}
-{%- endif -%}
diff --git a/kima/vendor/spleaf/doc/source/_theme/scipy/sourcelink.html b/kima/vendor/spleaf/doc/source/_theme/scipy/sourcelink.html
deleted file mode 100644
index 2c9109a..0000000
--- a/kima/vendor/spleaf/doc/source/_theme/scipy/sourcelink.html
+++ /dev/null
@@ -1,7 +0,0 @@
-{%- if show_source and has_source and sourcename %}
-
{{ _('This Page') }}
-
-{%- endif %}
diff --git a/kima/vendor/spleaf/doc/source/_theme/scipy/static/css/extend.css b/kima/vendor/spleaf/doc/source/_theme/scipy/static/css/extend.css
deleted file mode 100644
index bd7a981..0000000
--- a/kima/vendor/spleaf/doc/source/_theme/scipy/static/css/extend.css
+++ /dev/null
@@ -1,116 +0,0 @@
-.container {
- width: 80%;
-}
-.navbar1 {
- padding-bottom: 10px;
-}
-.navbar1 .nav-pills {
- margin-bottom: 0px;
- font-size: 12px;
-}
-.navbar1 .nav-pills > li > a {
- padding-top: 2.5px;
- padding-bottom: 2.5px;
-}
-.navbar1 .dropdown.dropdown-menu {
- padding: 0px;
-}
-.header {
- padding-top: 30px;
- padding-bottom: 18px;
-}
-.SearchBar .form-search {
- margin-bottom: 0px;
-}
-.SearchBar .input-append input {
- height: 12px;
-}
-body {
- font-family: Segoe UI;
- background-color: #f9faf7;
-}
-.main {
- background-color: white;
- padding: 18px;
- -moz-box-shadow: 0 0 3px #888;
- -webkit-box-shadow: 0 0 3px #888;
- box-shadow: 0 0 3px #888;
-}
-.MainHeader h1 {
- font-weight: normal;
-}
-.content .contentTitle h4 {
- font-size: 18px;
- font-weight: normal;
-}
-.content .meta {
- font-size: small;
-}
-.tags .btn {
- border: none;
- font-size: 10px;
- font-weight: bold;
-}
-.navigation {
- font-size: 12px;
- padding-bottom: 12px;
-}
-.navigation .nav-title {
- color: #333333;
- font-family: "Segoe UI semibold";
- font-size: 16px;
- text-transform: uppercase;
-}
-.navigation li {
- margin: 5px;
-}
-.snippetHeader {
- margin-bottom: 5px;
-}
-.snippetHeader .snippetTitle {
- font-size: 21px;
- line-height: 40px;
- border-bottom: 1px solid #e5e5e5;
- display: block;
- color: #333333;
-}
-.snippetInfo {
- padding-top: 10px;
-}
-.snippetInfo .dl-horizontal {
- margin: 5px;
-}
-.snippet-body {
- padding: 10px;
-}
-.snippet-body .accordion-group {
- border: none;
-}
-.snippet-body .accordion-heading {
- text-transform: uppercase;
- font-size: 14px;
- border-bottom: 1px solid #e5e5e5;
-}
-.snippet-body .accordion-heading .accordion-toggle {
- padding-top: 10px;
- padding-bottom: 5px;
-}
-.SearchResult {
- padding: 10px;
- padding-top: 0px;
-}
-.SearchResult .PageTitle {
- font-size: 21px;
- line-height: 40px;
- border-bottom: 1px solid #e5e5e5;
- padding-bottom: 5px;
- display: block;
- color: #333333;
-}
-.footer {
- padding: 10px;
-}
-.footer-inside {
- border-top: 1px solid #e5e5e5;
- padding: 10px;
-}
diff --git a/kima/vendor/spleaf/doc/source/_theme/scipy/static/css/pygments.css b/kima/vendor/spleaf/doc/source/_theme/scipy/static/css/pygments.css
deleted file mode 100644
index 1c9c56a..0000000
--- a/kima/vendor/spleaf/doc/source/_theme/scipy/static/css/pygments.css
+++ /dev/null
@@ -1,87 +0,0 @@
-/* Styling for the source code listings: (mostly from pygments)*/
-
-.highlight pre{
- overflow: auto;
- padding: 5px;
- background-color: #ffffff;
- color: #333333;
- border: 1px solid #ac9;
- border-left: none;
- border-right: none;
-}
-
-/* Styling for pre elements: from http://perishablepress.com/press/2009/11/09/perfect-pre-tags/ */
-/* no vertical scrollbars for IE 6 */
-* html pre {
- padding-bottom:25px;
- overflow-y:hidden;
- overflow:visible;
- overflow-x:auto
-}
-/* no vertical scrollbars for IE 7 */
-*:first-child+html pre {
- padding-bottom:25px;
- overflow-y:hidden;
- overflow:visible;
- overflow-x:auto
-}
-
-div#spc-section-body td.linenos pre {
- padding: 5px 0px;
- border: 0;
- background-color: transparent;
- color: #aaa;
-}
-.highlight .hll { background-color: #ffffcc }
-.highlight { background: #ffffff; }
-.highlight .c { color: #008000 } /* Comment */
-.highlight .k { color: #000080; font-weight: bold } /* Keyword */
-.highlight .n { color: #000000 } /* Name */
-.highlight .o { color: #000000 } /* Operator */
-.highlight .cm { color: #008000 } /* Comment.Multiline */
-.highlight .cp { color: #008000 } /* Comment.Preproc */
-.highlight .c1 { color: #008000 } /* Comment.Single */
-.highlight .cs { color: #008000 } /* Comment.Special */
-.highlight .kc { color: #000080; font-weight: bold } /* Keyword.Constant */
-.highlight .kd { color: #000080; font-weight: bold } /* Keyword.Declaration */
-.highlight .kn { color: #000080; font-weight: bold } /* Keyword.Namespace */
-.highlight .kp { color: #000080; font-weight: bold } /* Keyword.Pseudo */
-.highlight .kr { color: #000080; font-weight: bold } /* Keyword.Reserved */
-.highlight .kt { color: #000080; font-weight: bold } /* Keyword.Type */
-.highlight .m { color: #008080 } /* Literal.Number */
-.highlight .s { color: #800080 } /* Literal.String */
-.highlight .na { color: #000000 } /* Name.Attribute */
-.highlight .nb { color: #407090 } /* Name.Builtin */
-.highlight .nc { color: #0000F0; font-weight: bold } /* Name.Class */
-.highlight .no { color: #000000 } /* Name.Constant */
-.highlight .nd { color: #000000 } /* Name.Decorator */
-.highlight .ni { color: #000000 } /* Name.Entity */
-.highlight .ne { color: #000000 } /* Name.Exception */
-.highlight .nf { color: #008080; font-weight: bold } /* Name.Function */
-.highlight .nl { color: #000000 } /* Name.Label */
-.highlight .nn { color: #000000 } /* Name.Namespace */
-.highlight .nx { color: #000000 } /* Name.Other */
-.highlight .py { color: #000000 } /* Name.Property */
-.highlight .nt { color: #000000 } /* Name.Tag */
-.highlight .nv { color: #000000 } /* Name.Variable */
-.highlight .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */
-.highlight .mf { color: #008080 } /* Literal.Number.Float */
-.highlight .mh { color: #008080 } /* Literal.Number.Hex */
-.highlight .mi { color: #008080 } /* Literal.Number.Integer */
-.highlight .mo { color: #008080 } /* Literal.Number.Oct */
-.highlight .sb { color: #800080 } /* Literal.String.Backtick */
-.highlight .sc { color: #800080 } /* Literal.String.Char */
-.highlight .sd { color: #800000 } /* Literal.String.Doc */
-.highlight .s2 { color: #800080 } /* Literal.String.Double */
-.highlight .se { color: #800080 } /* Literal.String.Escape */
-.highlight .sh { color: #800080 } /* Literal.String.Heredoc */
-.highlight .si { color: #800080 } /* Literal.String.Interpol */
-.highlight .sx { color: #800080 } /* Literal.String.Other */
-.highlight .sr { color: #800080 } /* Literal.String.Regex */
-.highlight .s1 { color: #800080 } /* Literal.String.Single */
-.highlight .ss { color: #800080 } /* Literal.String.Symbol */
-.highlight .bp { color: #407090 } /* Name.Builtin.Pseudo */
-.highlight .vc { color: #000000 } /* Name.Variable.Class */
-.highlight .vg { color: #000000 } /* Name.Variable.Global */
-.highlight .vi { color: #000000 } /* Name.Variable.Instance */
-.highlight .il { color: #008080 } /* Literal.Number.Integer.Long */
diff --git a/kima/vendor/spleaf/doc/source/_theme/scipy/static/css/scipy-central.css b/kima/vendor/spleaf/doc/source/_theme/scipy/static/css/scipy-central.css
deleted file mode 100644
index 6bbfdda..0000000
--- a/kima/vendor/spleaf/doc/source/_theme/scipy/static/css/scipy-central.css
+++ /dev/null
@@ -1,795 +0,0 @@
-/*
-Styling to add still
---------------------
-
-div: spc-notice (general notices: e.g. submission requested is invalid)
-
-*/
-
-/* -------------------------------------------------------------------------*/
-/* Basic layout of the document: no styling - that is applied further down. */
-/* -------------------------------------------------------------------------*/
-body {
- /* From: http://matthewjamestaylor.com/blog/perfect-3-column.htm */
- margin:0;
- padding:0;
- border:0; /* This removes the border around the viewport in old versions of IE */
- width:100%;
- background:#ffffff;
- min-width:600px; /* Minimum width of layout - remove line if not required */
- /* The min-width property does not work in old versions of Internet Explorer */
-}
-
-#spc-document-container{
- position: relative;
- min-width: 50em;
- max-width: 90em;
-}
-#spc-header {
- clear: both;
- float: left;
- width: 100%;
- display: block;
-}
-.spc-header-row{
- float: left;
- width: 100%;
- clear: both;
-}
-.spc-header-left{
- float: left;
- position: relative;
- left: +1%
-}
-.spc-header-right{
- float: right;
- position: relative;
- left: -1%
-}
-#spc-contentwrap{
- display: block;
- overflow: hidden;
-}
-#spc-content-main{
- float: left;
- width: 100%;
-}
-
-#spc-navigation-bottom{
- clear: both;
-}
-#spc-footer{
- clear: both;
-}
-
-/* -------------------------------------------- */
-/* Now we will begin styling the various blocks */
-/* -------------------------------------------- */
-
-/* Document container */
-#spc-document-container {
- font: 13px/1.5 'Lucida Grande','Lucida Sans Unicode','Geneva','Verdana',sans-serif;
- background: #FFFFFF;
- margin: auto; /* display container in the center of the page */
- padding-top: 12px;
-}
-#spc-document-container img{
- border: 0
-}
-#spc-document-container a:visited { /* for IE6 */
- color: purple;
-}
-/* Header block styling */
-.spc-header-row{
- text-align: center;
-}
-.spc-header-right{
- float: right;
- text-align: right;
-}
-#spc-site-notice{
- /*display: none;*/
- color: #aaf;
- font-weight: bold;
- padding: 6px 0px;
- border-bottom: 1px dashed #aaf;
- background: #eee;
- /*display: none; Uncomment to remove the site notice*/
-}
-#spc-site-title{
- border-bottom: 1px solid #aaa;
- margin-top: -2em;
-
-}
-
-#spc-top-menu{
- padding-top: 0.25em;
-}
-#spc-header h1 a {
- color: black;
- text-decoration: none;
- text-align: center;
- font: 36px/1.0 'Inconsolata','Lucida Grande','Lucida Sans Unicode','Geneva','Verdana',sans-serif;
- font-weight: bold;
-}
-#spc-top-menu a {
- text-decoration: none;
- font-weight: bold;
- font: 20px 'Inconsolata','Lucida Grande','Lucida Sans Unicode','Geneva','Verdana',sans-serif;
-}
-#spc-top-menu a:hover{
- text-decoration: underline;
-}
-
-/* contentwrap block: applies to everything in the bulk of the page */
-#spc-contentwrap {
-}
-
-/* The major chunk of content (left side); the sidebar comes later */
-#spc-content-main{
- background: #FFFFFF;
-}
-
-/* Border */
-#spc-border {
- margin-left: 0px;
- background: white;
- padding-top: 0em; /* Don't remove top and bottom padding: leads to */
- padding-bottom: 0em; /* unwanted horizontal borders around the document.*/
- padding-left: 2em;
- padding-right: 2em;
-}
-
-/* spc-section-body: the current section of the document. The Sphinx
- generated HTML is inserted inside this DIV element. Specific formatting for
- the HTML should go here */
-/* ----------------------- */
-#spc-section-body {
- margin-bottom: 1em;
-}
-
-/* Styling for the headers */
-div#spc-section-body h1, h2, h3, h4, h5, h6{
- color: #20435C;
- font-family: 'Trebuchet MS', sans-serif;
- font-weight: normal;
- border-bottom: 0px solid #ccc;
- margin-bottom: 0.5em;
-}
-div#spc-section-body h1 { font-size: 200%; font-weight: bold;}
-div#spc-section-body h2 { font-size: 160%; font-weight: bold; color: #101074;}
-div#spc-section-body h3 { font-size: 140%; color: #362A13;}
-div#spc-section-body h4 { font-size: 120%; }
-div#spc-section-body h5 { font-size: 110%; }
-div#spc-section-body h6 { font-size: 100%; }
-
-.spc-title-in-span{font-size: 160%; font-weight: bold; color: #101074; float: left;}
-
-/* Styling for forms */
-input, select, textarea{
- border:solid 1px #aacfe4;
- padding: 4px 2px;
- margin-bottom: 1em;
-}
-
-/* Styling for hyperlinks */
-div#spc-section-body a{
- text-decoration: none;
-}
-div#spc-section-body a:hover{
- text-decoration: underline;
-}
-
-/* Styling for images and figures: images are inline, figures are centered */
-div#spc-section-body .align-center{
- text-align: center;
-}
-
-/* Styling for
elements */
-tt {
- background-color:#EEE;
- color:#000;
- font: 16px/1.0 'Inconsolata', Monaco, Lucida Console, Liberation Mono, DejaVu Sans Mono, Bitstream Vera Sans Mono, Courier New, monospace, serif;
-}
-
-/* Main page */
-#spc-site-statement{
- width: 90%;
- margin: auto;
- text-align: center;
- padding-top: 1em;
-}
-#spc-search{
- clear: both;
- float: none;
- display: block;
- margin: 0 auto;
- width: 700px;
-}
-#spc-search-form{
- margin-top: 10pt;
-}
-#spc-search-input {
- cursor: auto;
- display: inline;
- height: 31px;
- float: left;
- width: 580px;
- border: 2px solid #3e5d34;
- padding: 0;
- padding-left: 0.5em;
- margin: 0;
- margin-right: 20px;
- color: #555;
- font-family: 'Inconsolata', 'Lucida Grande';
- font-size: 24px;
- text-indent: 0px;
- text-shadow: none;
- text-transform: none;
- word-spacing: 0px;
- background: none;
-}
-#spc-search-button{
- border: 1px outset #B6A792;
- vertical-align:middle;
- border:none;
- cursor:pointer;
- padding: 0;
- display: block;
- float: left;
- width: 80px;
- height: 35px;
- margin: 0;
- background: #ddd;
- display: inline-block;
- overflow: hidden;
-}
-#spc-search-results{
- width: 75%;
-}
-#spc-search-results li{
- margin: 0 auto;
- list-style-type: none;
- padding: 0.5em 0;
- float: left;
-}
-
-/* Submission buttons */
-.spc-button-container {
- float: left;
- width: 100%;
- clear: both;
- margin-bottom:1em;
-}
-#spc-buttonlist {
- margin: 0 auto;
- list-style-type: none;
- padding: 0;
- padding-top: 2em;
- float: left;
- position: relative;
- left: 50%;
-}
-#spc-buttonlist li {
- float: left;
- position: relative;
- right: 50%;
- padding: 0em 1em;
-}
-#spc-buttonlist a {
- text-decoration: none;
- margin: 0 auto;
- display: block;
-}
-.spc-button{
- background-position: 0px 0px;
- background-color: #DDDDDD;
- border: 1px outset #B6A792;
- cursor: auto;
- display: inline-block;
- vertical-align: middle;
- overflow: hidden;
- padding: 0;
- margin: 0;
-}
-
-/* Portals */
-.spc-portal-container{
- width: 65%;
- clear: both;
- padding: 0px;
- position: relative;
- display: block;
- margin: 0 auto;
-}
-.spc-portal-row-container {
- clear:both;
- float:left;
- width:100%; /* width of whole page */
- overflow:hidden; /* This chops off any overhanging divs */
-}
-.spc-portal-row {
- float:left;
- width:100%;
- position:relative;
- right:50%; /* right column width */
- background:#fff; /* left column background colour */
- }
-.spc-portal-left,
-.spc-portal-right{
- float:left;
- position:relative;
- padding:0 0 1em 0;
- overflow:hidden;
-}
-.spc-portal-left {
- width:46%; /* left column content width (column width minus left and right padding) */
- left:52%; /* right column width plus left column left padding */
-}
-.spc-portal-right {
- width:46%; /* right column content width (column width minus left and right padding) */
- left:56%; /* (right column width) plus (left column left and right padding) plus (right column left padding) */
-}
-.spc-portal-container h3{
- font: 14px/1.0 'Inconsolata', Monaco, Lucida Console, Sans Mono, Courier New, monospace, serif;
- text-align: center;
- border-bottom: 1px solid;
-}
-.spc-portal-container a{
- text-decoration: none;
- font-weight: bold;
- font: 14px sans-serif;
-}
-.spc-portal-container a:hover{
- text-decoration: underline;
-}
-.spc-portal-container ul{
- list-style-type: square;
-}
-.spc-portal-container li{
- margin-left: -1em;
-}
-
-
-/* Submission forms */
-#spc-form-error-message{
- margin-bottom: 1em;
- text-align: center;
- border-bottom:solid 1px #000;
-}
-.errorlist{
- list-style-type: none;
- float: left;
- padding: 0;
-}
-.errorlist li{
- font-style: italic;
-}
-.spc-field-error{
- background: #ee8888;
- padding: 4px;
-}
-.spc-form-button{
- padding: 5px;
-}
-
- /* column container */
- /* http://matthewjamestaylor.com/blog/perfect-3-column.htm */
-.colmask {
- position:relative; /* This fixes the IE7 overflow hidden bug */
- clear:both;
- float:left;
- width:100%; /* width of whole page */
- overflow:hidden; /* This chops off any overhanging divs */
- padding-bottom: 1em;
-}
-/* common column settings */
-.colright,
-.colmid,
-.colleft {
- float:left;
- width:100%; /* width of page */
- position:relative;
-}
-.col1,
-.col2,
-.col3 {
- float:left;
- position:relative;
- padding:0; /* no left and right padding on columns */
- overflow:hidden;
-}
- /* 3 Column settings */
-.threecol {
- background:#fff; /* right column background colour */
-}
-.threecol .colmid {
- right:25%; /* width of the right column */
- background:#fff; /* center column background colour */
-}
-.threecol .colleft {
- right:60%; /* width of the middle column */
- background:#fff; /* left column background colour */
-}
-.threecol .col1 {
- width:58%; /* width of center column content (column width minus padding on either side) */
- left:101%; /* 100% plus left padding of center column */
-}
-.threecol .col2 {
- width:13%; /* Width of left column content (column width minus padding on either side) */
- left:28%; /* width of (right column) plus (center column left and right padding) plus (left column left padding) */
-}
-.threecol .col3 {
- width:23%; /* Width of right column content (column width minus padding on either side) */
- left:90%; /* Please make note of the brackets here:
- (100% - left column width) plus (center column left and right padding) plus (left column left and right padding) plus (right column left padding)
- (100-15)+(1+1)+(1+1)+(1)*/
-}
-.form-field input, select, textarea{
- width: 98%;
- max-width:1000px;
- min-width:500px;
-}
-.form-field-auto-width{
- width: auto;
-}
-.spc-code-description{
- height: 15em;
-}
-span.spc-helptext ul{
- margin: 0;
- padding-left: 20px;
-}
-.spc-odd{
- background: #DDF;
-}
-.spc-even{
- background: #CCF;
-}
-li.spc-odd tt{
- background-color: #DDF;
-}
-li.spc-even tt {
- background-color: #CCF;
-}
-
-/* Image upload */
-#spc-item-upload {
-}
-#spc-item-upload-button{
- padding: 0.5em;
- text-align: center;
-}
-.spc-item-upload-success{
- background: #ffa;
- padding: 4px;
-}
-
-/* Tagging */
-.ui-autocomplete {
- max-height: 150px;
- overflow-y: auto;
- overflow-x: hidden; /* prevent horizontal scrollbar */
- padding-right: 20px; /* add padding to account for vertical scrollbar */
-}
-/* IE 6 doesn't support max-height
- * we use height instead, but this forces the menu to always be this tall */
-* html .ui-autocomplete {
- height: 100px;
-}
-.spc-tag{
- background-color: #E0EAF1;
- color: #3E6D8E;
- border-bottom: 1px solid #37607D;
- border-right: 1px solid #37607D;
- text-decoration: none;
- padding: 4px 4px 3px 4px;
- margin: 2px 5px 2px 0px;
- font-size: 90%;
- line-height: 1.4;
- white-space: nowrap;
- cursor: pointer;
- float:left;
-}
-.spc-tag:hover{
- background-color: #3E6D8E;
- color: #E0EAF1;
-}
-.spc-tag-cloud{
- background-color: #FFF;
- color: #3E6D8E;
- border-bottom: 0px solid #37607D;
- border-right: 0px solid #37607D;
- text-decoration: none;
- padding: 0px 4px 0px 4px;
- margin: 2px 5px 2px 0px;
- font-size: 90%;
- white-space: nowrap;
- cursor: pointer;
-}
-.spc-tag-cloud:hover{
- background-color: #FFF;
- color: #1E4D6E;
-}
-
-#spc-preview-edit-submit{
- clear: both;
-}
-#spc-preview-edit-submit form input{
- display: inline;
- padding: 5px;
-}
-#spc-item-submit{
- margin-left:8em;
- font-weight: bold;
-}
-#spc-item-preview{
- width:auto;
- min-width:0;
- padding: 0.5em;
- text-align:center;
-}
-
-#spc-item-header{
- clear: both;
- padding: 0px;
- float: left;
- width: 102%;
- position: relative;
- display: block;
- margin: 0 auto;
- left: -1%;
- top: -20px;
-}
-#spc-item-header-left{
- float: left;
- text-align: left;
-}
-#spc-item-header-right{
- float: right;
- text-align: right;
-}
-
-div.spc-item-row {
- clear: both;
- padding-top: 10px;
-}
-
-div.spc-item-row span.spc-item-label {
- float: left;
- width: 200px;
- text-align: left;
- padding-right: 20px;
- padding-bottom: 4px;
- font-weight: bold;
-}
-
-div.spc-item-row span.spc-item-entry {
- float: left;
- min-width: 500px;
- max-width: 1000px;
- text-align: left;
-}
-
-div.spc-item-row span.spc-item-entry ul{
- padding: 0;
- margin: 0;
- list-style-type: none;
-}
-
-div.spc-item-row span.spc-50-50{
- float: left;
- width: 49%;
- text-align: left;
-}
-.spc-help-section a{
- color: #0069CC;
- margin-top: 1em;
-}
-.spc-entries-list ul{
- padding: 0;
- margin: 0;
- list-style-type: none;
-}
-/* Unstyle certain elements in the code/link description fields */
-.spc-item-description p{
- margin: 0;
- margin-bottom: 1em;
-}
-.spc-item-row pre{
- border: 0px solid #FFF;
- overflow: auto;
- padding: 5px;
- background-color: #EEE;
- border: none;
- margin: 0;
- font: 16px/1.0 'Inconsolata', Monaco, Lucida Console, Liberation Mono, DejaVu Sans Mono, Bitstream Vera Sans Mono, Courier New, monospace, serif;
-}
-
-
-/* Item display*/
-#spc-itemdisp-container{
- clear: both;
- padding: 0;
- padding-top: 1em;
- margin: 0 auto;
- width: 85%;
-}
-
-.spc-itemdisp-row-container {
- clear:both;
- float:left;
- width:100%;
- margin: 0 0 1em 0;
-}
-.spc-itemdisp-row {
- float:left;
- width:100%;
- }
-.spc-itemdisp-td{
- float: left;
- padding-right: 1%;
-}
-.spc-itemdisp-description{
- width: 50%;
-}
-.spc-itemdisp-link{
- float: right;
- font-size: 80%;
-}
-div .spc-itemdisp-mainlink{
- text-decoration: underline;
- float: left;
- width: 100%;
-}
-.spc-itemdisp-revinfo{
- float: right;
- font-size: 80%;
-}
-.spc-itemdisp-created{
- width: 23%;
-}
-.spc-itemdisp-tags{
- width: 23%;
-}
-.spc-itemdisp-odd{
- background: #fff8f1;
-}
-.spc-itemdisp-even{
- background: #fff;
-}
-.spc-itemdisp-header{
- background: #f1c79d;
- padding: 0.4em 0 0.4em 0;
- font-weight: bold;
-}
-#spc-itemdisp-pageheader{
- text-align: center;
- font: 24px/1.0 'Inconsolata','Lucida Grande','Lucida Sans Unicode','Geneva','Verdana',sans-serif;
- font-weight: bold;
-}
-.spc-itemdisp-pagination{
- float: left;
-}
-
-div#spc-itemdisp-container h1, h2, h3, h4, h5, h6{
- font-weight: normal;
- border-bottom: 1px solid #ccc;}
-div#spc-itemdisp-container h1 { font-size: 130%; font-weight: bold;}
-div#spc-itemdisp-container h2 { font-size: 120%; font-weight: bold;}
-div#spc-itemdisp-container h3 { font-size: 110%;}
-div#spc-itemdisp-container h4 { font-size: 100%; }
-div#spc-itemdisp-container h5 { font-size: 100%; }
-div#spc-itemdisp-container h6 { font-size: 100%; }
-
-/* Permalinks and other minor info*/
-.spc-minor-info {
- font-size: 80%;
- float: left;
- border-top: 1px solid #ddd;
-}
-.spc-minor-info p{
- margin: 0;
-}
-.spc-minor-info a{
- text-decoration: none;
-}
-.spc-minor-info a:hover{
- text-decoration: underline;
-}
-
-/* User profile pages */
-#spc-profile-user-options ul{
- margin: 0 auto;
- padding: 0 0;
-}
-#spc-profile-user-options li{
- margin: 0 auto;
- list-style-type: none;
- padding: 0 5px 0 5px;
- float: left;
- border-right: 1px solid;
-}
-#spc-profile-user-options li:first-child{
- padding-left: 0px;
-}
-#spc-profile-user-options li:last-child{
- border-right: none;
-}
-/* Styling for certain static pages */
-#spc-static-centering{
- display: block;
- margin: 0 auto;
- min-width: 30em;
- max-width: 50em;
-}
-
-/* spc-footer: http://www.alistapart.com/articles/practicalcss/ */
-#spc-footer {
- clear: both;
- font-size: 90%;
- padding: 0px;
- float: left;
- width: 100%;
- position: relative;
- display: block;
- margin: 0 auto;
- border-top: 1px solid #aaa;
-}
-#spc-footer a{
- text-decoration: none;
- font-weight: bold;
- font: 15px sans-serif;
-}
-#spc-footer a:hover{
- text-decoration: underline;
-}
-.spc-footer-left{
- float: left;
- text-align: left;
-}
-.spc-footer-right{
- float: right;
- text-align: right;
-}
-.spc-footer-left ul{
- margin: 0;
- padding: 0;
-}
-.spc-footer-left li{
- display: inline;
- padding-left: 3px;
- padding-right: 7px;
- border-right: 0px solid #aaa;
-}
-.spc-indent{
- margin-left: 15px;
-}
-.spc-flag{
- padding-left: 1em;
- vertical-align: middle;
-}
-
-/* ---------------- */
-/* Form styling */
-/* ---------------- */
-.spc-form{
- padding-top: 2em;
-}
-
-.spc-form-label{
- display: block;
- font-size: 14px;
- color: #444;
-}
-.spc-centering-div-container{
- clear: both;
- margin: 0 auto;
- border: 1px;
- padding: 1em;
- float: left;
-}
-
-/* ---------------------- */
-/* Miscellaneous elements */
-/* ---------------------- */
diff --git a/kima/vendor/spleaf/doc/source/_theme/scipy/static/css/spc-bootstrap.css b/kima/vendor/spleaf/doc/source/_theme/scipy/static/css/spc-bootstrap.css
deleted file mode 100644
index 2d2c586..0000000
--- a/kima/vendor/spleaf/doc/source/_theme/scipy/static/css/spc-bootstrap.css
+++ /dev/null
@@ -1,7893 +0,0 @@
-@import url(https://fonts.googleapis.com/css?family=Open+Sans);
-/*!
- * Bootstrap v2.3.1
- *
- * Copyright 2012 Twitter, Inc
- * Licensed under the Apache License v2.0
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Designed and built with all the love in the world @twitter by @mdo and @fat.
- */
-.clearfix {
- *zoom: 1;
-}
-.clearfix:before,
-.clearfix:after {
- display: table;
- content: "";
- line-height: 0;
-}
-.clearfix:after {
- clear: both;
-}
-.hide-text {
- font: 0/0 a;
- color: transparent;
- text-shadow: none;
- background-color: transparent;
- border: 0;
-}
-.input-block-level {
- display: block;
- width: 100%;
- min-height: 29px;
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
-}
-article,
-aside,
-details,
-figcaption,
-figure,
-footer,
-header,
-hgroup,
-nav,
-section {
- display: block;
-}
-audio,
-canvas,
-video {
- display: inline-block;
- *display: inline;
- *zoom: 1;
-}
-audio:not([controls]) {
- display: none;
-}
-html {
- font-size: 100%;
- -webkit-text-size-adjust: 100%;
- -ms-text-size-adjust: 100%;
-}
-a:focus {
- outline: thin dotted #333;
- outline: 5px auto -webkit-focus-ring-color;
- outline-offset: -2px;
-}
-a:hover,
-a:active {
- outline: 0;
-}
-sub,
-sup {
- position: relative;
- font-size: 75%;
- line-height: 0;
- vertical-align: baseline;
-}
-sup {
- top: -0.5em;
-}
-sub {
- bottom: -0.25em;
-}
-img {
- /* Responsive images (ensure images don't scale beyond their parents) */
-
- max-width: 100%;
- /* Part 1: Set a maximum relative to the parent */
-
- width: auto\9;
- /* IE7-8 need help adjusting responsive images */
-
- height: auto;
- /* Part 2: Scale the height according to the width, otherwise you get stretching */
-
- vertical-align: middle;
- border: 0;
- -ms-interpolation-mode: bicubic;
-}
-#map_canvas img,
-.google-maps img {
- max-width: none;
-}
-button,
-input,
-select,
-textarea {
- margin: 0;
- font-size: 100%;
- vertical-align: middle;
-}
-button,
-input {
- *overflow: visible;
- line-height: normal;
-}
-button::-moz-focus-inner,
-input::-moz-focus-inner {
- padding: 0;
- border: 0;
-}
-button,
-html input[type="button"],
-input[type="reset"],
-input[type="submit"] {
- -webkit-appearance: button;
- cursor: pointer;
-}
-label,
-select,
-button,
-input[type="button"],
-input[type="reset"],
-input[type="submit"],
-input[type="radio"],
-input[type="checkbox"] {
- cursor: pointer;
-}
-input[type="search"] {
- -webkit-box-sizing: content-box;
- -moz-box-sizing: content-box;
- box-sizing: content-box;
- -webkit-appearance: textfield;
-}
-input[type="search"]::-webkit-search-decoration,
-input[type="search"]::-webkit-search-cancel-button {
- -webkit-appearance: none;
-}
-textarea {
- overflow: auto;
- vertical-align: top;
-}
-@media print {
- * {
- text-shadow: none !important;
- color: #000 !important;
- background: transparent !important;
- box-shadow: none !important;
- }
- a,
- a:visited {
- text-decoration: underline;
- }
- a[href]:after {
- content: " (" attr(href) ")";
- }
- abbr[title]:after {
- content: " (" attr(title) ")";
- }
- .ir a:after,
- a[href^="javascript:"]:after,
- a[href^="#"]:after {
- content: "";
- }
- pre,
- blockquote {
- border: 1px solid #999;
- page-break-inside: avoid;
- }
- thead {
- display: table-header-group;
- }
- tr,
- img {
- page-break-inside: avoid;
- }
- img {
- max-width: 100% !important;
- }
- @page {
- margin: 0.5cm;
- }
- p,
- h2,
- h3 {
- orphans: 3;
- widows: 3;
- }
- h2,
- h3 {
- page-break-after: avoid;
- }
-}
-body {
- margin: 0;
- font-family: 'Open Sans', sans-serif;
- font-size: 13px;
- line-height: 19px;
- color: #333333;
- background-color: #ffffff;
-}
-a {
- color: #0088cc;
- text-decoration: none;
-}
-a:hover,
-a:focus {
- color: #005580;
- text-decoration: underline;
-}
-.img-rounded {
- -webkit-border-radius: 6px;
- -moz-border-radius: 6px;
- border-radius: 6px;
-}
-.img-polaroid {
- padding: 4px;
- background-color: #fff;
- border: 1px solid #ccc;
- border: 1px solid rgba(0, 0, 0, 0.2);
- -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
- -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
- box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
-}
-.img-circle {
- -webkit-border-radius: 500px;
- -moz-border-radius: 500px;
- border-radius: 500px;
-}
-.row {
- margin-left: -20px;
- *zoom: 1;
-}
-.row:before,
-.row:after {
- display: table;
- content: "";
- line-height: 0;
-}
-.row:after {
- clear: both;
-}
-.row:before,
-.row:after {
- display: table;
- content: "";
- line-height: 0;
-}
-.row:after {
- clear: both;
-}
-[class*="span"] {
- float: left;
- min-height: 1px;
- margin-left: 20px;
-}
-.container,
-.navbar-static-top .container,
-.navbar-fixed-top .container,
-.navbar-fixed-bottom .container {
- width: 940px;
-}
-.span12 {
- width: 940px;
-}
-.span11 {
- width: 860px;
-}
-.span10 {
- width: 780px;
-}
-.span9 {
- width: 700px;
-}
-.span8 {
- width: 620px;
-}
-.span7 {
- width: 540px;
-}
-.span6 {
- width: 460px;
-}
-.span5 {
- width: 380px;
-}
-.span4 {
- width: 300px;
-}
-.span3 {
- width: 220px;
-}
-.span2 {
- width: 140px;
-}
-.span1 {
- width: 60px;
-}
-.offset12 {
- margin-left: 980px;
-}
-.offset11 {
- margin-left: 900px;
-}
-.offset10 {
- margin-left: 820px;
-}
-.offset9 {
- margin-left: 740px;
-}
-.offset8 {
- margin-left: 660px;
-}
-.offset7 {
- margin-left: 580px;
-}
-.offset6 {
- margin-left: 500px;
-}
-.offset5 {
- margin-left: 420px;
-}
-.offset4 {
- margin-left: 340px;
-}
-.offset3 {
- margin-left: 260px;
-}
-.offset2 {
- margin-left: 180px;
-}
-.offset1 {
- margin-left: 100px;
-}
-.row {
- margin-left: -20px;
- *zoom: 1;
-}
-.row:before,
-.row:after {
- display: table;
- content: "";
- line-height: 0;
-}
-.row:after {
- clear: both;
-}
-.row:before,
-.row:after {
- display: table;
- content: "";
- line-height: 0;
-}
-.row:after {
- clear: both;
-}
-[class*="span"] {
- float: left;
- min-height: 1px;
- margin-left: 20px;
-}
-.container,
-.navbar-static-top .container,
-.navbar-fixed-top .container,
-.navbar-fixed-bottom .container {
- width: 940px;
-}
-.span12 {
- width: 940px;
-}
-.span11 {
- width: 860px;
-}
-.span10 {
- width: 780px;
-}
-.span9 {
- width: 700px;
-}
-.span8 {
- width: 620px;
-}
-.span7 {
- width: 540px;
-}
-.span6 {
- width: 460px;
-}
-.span5 {
- width: 380px;
-}
-.span4 {
- width: 300px;
-}
-.span3 {
- width: 220px;
-}
-.span2 {
- width: 140px;
-}
-.span1 {
- width: 60px;
-}
-.offset12 {
- margin-left: 980px;
-}
-.offset11 {
- margin-left: 900px;
-}
-.offset10 {
- margin-left: 820px;
-}
-.offset9 {
- margin-left: 740px;
-}
-.offset8 {
- margin-left: 660px;
-}
-.offset7 {
- margin-left: 580px;
-}
-.offset6 {
- margin-left: 500px;
-}
-.offset5 {
- margin-left: 420px;
-}
-.offset4 {
- margin-left: 340px;
-}
-.offset3 {
- margin-left: 260px;
-}
-.offset2 {
- margin-left: 180px;
-}
-.offset1 {
- margin-left: 100px;
-}
-.row-fluid {
- width: 100%;
- *zoom: 1;
-}
-.row-fluid:before,
-.row-fluid:after {
- display: table;
- content: "";
- line-height: 0;
-}
-.row-fluid:after {
- clear: both;
-}
-.row-fluid:before,
-.row-fluid:after {
- display: table;
- content: "";
- line-height: 0;
-}
-.row-fluid:after {
- clear: both;
-}
-.row-fluid [class*="span"] {
- display: block;
- width: 100%;
- min-height: 29px;
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
- float: left;
- margin-left: 2.127659574468085%;
- *margin-left: 2.074468085106383%;
-}
-.row-fluid [class*="span"]:first-child {
- margin-left: 0;
-}
-.row-fluid .controls-row [class*="span"] + [class*="span"] {
- margin-left: 2.127659574468085%;
-}
-.row-fluid .span12 {
- width: 100%;
- *width: 99.94680851063829%;
-}
-.row-fluid .span11 {
- width: 91.48936170212765%;
- *width: 91.43617021276594%;
-}
-.row-fluid .span10 {
- width: 82.97872340425532%;
- *width: 82.92553191489361%;
-}
-.row-fluid .span9 {
- width: 74.46808510638297%;
- *width: 74.41489361702126%;
-}
-.row-fluid .span8 {
- width: 65.95744680851064%;
- *width: 65.90425531914893%;
-}
-.row-fluid .span7 {
- width: 57.44680851063829%;
- *width: 57.39361702127659%;
-}
-.row-fluid .span6 {
- width: 48.93617021276595%;
- *width: 48.88297872340425%;
-}
-.row-fluid .span5 {
- width: 40.42553191489362%;
- *width: 40.37234042553192%;
-}
-.row-fluid .span4 {
- width: 31.914893617021278%;
- *width: 31.861702127659576%;
-}
-.row-fluid .span3 {
- width: 23.404255319148934%;
- *width: 23.351063829787233%;
-}
-.row-fluid .span2 {
- width: 14.893617021276595%;
- *width: 14.840425531914894%;
-}
-.row-fluid .span1 {
- width: 6.382978723404255%;
- *width: 6.329787234042553%;
-}
-.row-fluid .offset12 {
- margin-left: 104.25531914893617%;
- *margin-left: 104.14893617021275%;
-}
-.row-fluid .offset12:first-child {
- margin-left: 102.12765957446808%;
- *margin-left: 102.02127659574467%;
-}
-.row-fluid .offset11 {
- margin-left: 95.74468085106382%;
- *margin-left: 95.6382978723404%;
-}
-.row-fluid .offset11:first-child {
- margin-left: 93.61702127659574%;
- *margin-left: 93.51063829787232%;
-}
-.row-fluid .offset10 {
- margin-left: 87.23404255319149%;
- *margin-left: 87.12765957446807%;
-}
-.row-fluid .offset10:first-child {
- margin-left: 85.1063829787234%;
- *margin-left: 84.99999999999999%;
-}
-.row-fluid .offset9 {
- margin-left: 78.72340425531914%;
- *margin-left: 78.61702127659572%;
-}
-.row-fluid .offset9:first-child {
- margin-left: 76.59574468085106%;
- *margin-left: 76.48936170212764%;
-}
-.row-fluid .offset8 {
- margin-left: 70.2127659574468%;
- *margin-left: 70.10638297872339%;
-}
-.row-fluid .offset8:first-child {
- margin-left: 68.08510638297872%;
- *margin-left: 67.9787234042553%;
-}
-.row-fluid .offset7 {
- margin-left: 61.70212765957446%;
- *margin-left: 61.59574468085106%;
-}
-.row-fluid .offset7:first-child {
- margin-left: 59.574468085106375%;
- *margin-left: 59.46808510638297%;
-}
-.row-fluid .offset6 {
- margin-left: 53.191489361702125%;
- *margin-left: 53.085106382978715%;
-}
-.row-fluid .offset6:first-child {
- margin-left: 51.063829787234035%;
- *margin-left: 50.95744680851063%;
-}
-.row-fluid .offset5 {
- margin-left: 44.68085106382979%;
- *margin-left: 44.57446808510638%;
-}
-.row-fluid .offset5:first-child {
- margin-left: 42.5531914893617%;
- *margin-left: 42.4468085106383%;
-}
-.row-fluid .offset4 {
- margin-left: 36.170212765957444%;
- *margin-left: 36.06382978723405%;
-}
-.row-fluid .offset4:first-child {
- margin-left: 34.04255319148936%;
- *margin-left: 33.93617021276596%;
-}
-.row-fluid .offset3 {
- margin-left: 27.659574468085104%;
- *margin-left: 27.5531914893617%;
-}
-.row-fluid .offset3:first-child {
- margin-left: 25.53191489361702%;
- *margin-left: 25.425531914893618%;
-}
-.row-fluid .offset2 {
- margin-left: 19.148936170212764%;
- *margin-left: 19.04255319148936%;
-}
-.row-fluid .offset2:first-child {
- margin-left: 17.02127659574468%;
- *margin-left: 16.914893617021278%;
-}
-.row-fluid .offset1 {
- margin-left: 10.638297872340425%;
- *margin-left: 10.53191489361702%;
-}
-.row-fluid .offset1:first-child {
- margin-left: 8.51063829787234%;
- *margin-left: 8.404255319148938%;
-}
-.row-fluid {
- width: 100%;
- *zoom: 1;
-}
-.row-fluid:before,
-.row-fluid:after {
- display: table;
- content: "";
- line-height: 0;
-}
-.row-fluid:after {
- clear: both;
-}
-.row-fluid:before,
-.row-fluid:after {
- display: table;
- content: "";
- line-height: 0;
-}
-.row-fluid:after {
- clear: both;
-}
-.row-fluid [class*="span"] {
- display: block;
- width: 100%;
- min-height: 29px;
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
- float: left;
- margin-left: 2.127659574468085%;
- *margin-left: 2.074468085106383%;
-}
-.row-fluid [class*="span"]:first-child {
- margin-left: 0;
-}
-.row-fluid .controls-row [class*="span"] + [class*="span"] {
- margin-left: 2.127659574468085%;
-}
-.row-fluid .span12 {
- width: 100%;
- *width: 99.94680851063829%;
-}
-.row-fluid .span11 {
- width: 91.48936170212765%;
- *width: 91.43617021276594%;
-}
-.row-fluid .span10 {
- width: 82.97872340425532%;
- *width: 82.92553191489361%;
-}
-.row-fluid .span9 {
- width: 74.46808510638297%;
- *width: 74.41489361702126%;
-}
-.row-fluid .span8 {
- width: 65.95744680851064%;
- *width: 65.90425531914893%;
-}
-.row-fluid .span7 {
- width: 57.44680851063829%;
- *width: 57.39361702127659%;
-}
-.row-fluid .span6 {
- width: 48.93617021276595%;
- *width: 48.88297872340425%;
-}
-.row-fluid .span5 {
- width: 40.42553191489362%;
- *width: 40.37234042553192%;
-}
-.row-fluid .span4 {
- width: 31.914893617021278%;
- *width: 31.861702127659576%;
-}
-.row-fluid .span3 {
- width: 23.404255319148934%;
- *width: 23.351063829787233%;
-}
-.row-fluid .span2 {
- width: 14.893617021276595%;
- *width: 14.840425531914894%;
-}
-.row-fluid .span1 {
- width: 6.382978723404255%;
- *width: 6.329787234042553%;
-}
-.row-fluid .offset12 {
- margin-left: 104.25531914893617%;
- *margin-left: 104.14893617021275%;
-}
-.row-fluid .offset12:first-child {
- margin-left: 102.12765957446808%;
- *margin-left: 102.02127659574467%;
-}
-.row-fluid .offset11 {
- margin-left: 95.74468085106382%;
- *margin-left: 95.6382978723404%;
-}
-.row-fluid .offset11:first-child {
- margin-left: 93.61702127659574%;
- *margin-left: 93.51063829787232%;
-}
-.row-fluid .offset10 {
- margin-left: 87.23404255319149%;
- *margin-left: 87.12765957446807%;
-}
-.row-fluid .offset10:first-child {
- margin-left: 85.1063829787234%;
- *margin-left: 84.99999999999999%;
-}
-.row-fluid .offset9 {
- margin-left: 78.72340425531914%;
- *margin-left: 78.61702127659572%;
-}
-.row-fluid .offset9:first-child {
- margin-left: 76.59574468085106%;
- *margin-left: 76.48936170212764%;
-}
-.row-fluid .offset8 {
- margin-left: 70.2127659574468%;
- *margin-left: 70.10638297872339%;
-}
-.row-fluid .offset8:first-child {
- margin-left: 68.08510638297872%;
- *margin-left: 67.9787234042553%;
-}
-.row-fluid .offset7 {
- margin-left: 61.70212765957446%;
- *margin-left: 61.59574468085106%;
-}
-.row-fluid .offset7:first-child {
- margin-left: 59.574468085106375%;
- *margin-left: 59.46808510638297%;
-}
-.row-fluid .offset6 {
- margin-left: 53.191489361702125%;
- *margin-left: 53.085106382978715%;
-}
-.row-fluid .offset6:first-child {
- margin-left: 51.063829787234035%;
- *margin-left: 50.95744680851063%;
-}
-.row-fluid .offset5 {
- margin-left: 44.68085106382979%;
- *margin-left: 44.57446808510638%;
-}
-.row-fluid .offset5:first-child {
- margin-left: 42.5531914893617%;
- *margin-left: 42.4468085106383%;
-}
-.row-fluid .offset4 {
- margin-left: 36.170212765957444%;
- *margin-left: 36.06382978723405%;
-}
-.row-fluid .offset4:first-child {
- margin-left: 34.04255319148936%;
- *margin-left: 33.93617021276596%;
-}
-.row-fluid .offset3 {
- margin-left: 27.659574468085104%;
- *margin-left: 27.5531914893617%;
-}
-.row-fluid .offset3:first-child {
- margin-left: 25.53191489361702%;
- *margin-left: 25.425531914893618%;
-}
-.row-fluid .offset2 {
- margin-left: 19.148936170212764%;
- *margin-left: 19.04255319148936%;
-}
-.row-fluid .offset2:first-child {
- margin-left: 17.02127659574468%;
- *margin-left: 16.914893617021278%;
-}
-.row-fluid .offset1 {
- margin-left: 10.638297872340425%;
- *margin-left: 10.53191489361702%;
-}
-.row-fluid .offset1:first-child {
- margin-left: 8.51063829787234%;
- *margin-left: 8.404255319148938%;
-}
-[class*="span"].hide,
-.row-fluid [class*="span"].hide {
- display: none;
-}
-[class*="span"].pull-right,
-.row-fluid [class*="span"].pull-right {
- float: right;
-}
-.container {
- margin-right: auto;
- margin-left: auto;
- *zoom: 1;
-}
-.container:before,
-.container:after {
- display: table;
- content: "";
- line-height: 0;
-}
-.container:after {
- clear: both;
-}
-.container:before,
-.container:after {
- display: table;
- content: "";
- line-height: 0;
-}
-.container:after {
- clear: both;
-}
-.container:before,
-.container:after {
- display: table;
- content: "";
- line-height: 0;
-}
-.container:after {
- clear: both;
-}
-.container:before,
-.container:after {
- display: table;
- content: "";
- line-height: 0;
-}
-.container:after {
- clear: both;
-}
-.container-fluid {
- padding-right: 20px;
- padding-left: 20px;
- *zoom: 1;
-}
-.container-fluid:before,
-.container-fluid:after {
- display: table;
- content: "";
- line-height: 0;
-}
-.container-fluid:after {
- clear: both;
-}
-.container-fluid:before,
-.container-fluid:after {
- display: table;
- content: "";
- line-height: 0;
-}
-.container-fluid:after {
- clear: both;
-}
-p {
- margin: 0 0 9.5px;
-}
-.lead {
- margin-bottom: 19px;
- font-size: 19.5px;
- font-weight: 200;
- line-height: 28.5px;
-}
-small {
- font-size: 85%;
-}
-strong {
- font-weight: bold;
-}
-em {
- font-style: italic;
-}
-cite {
- font-style: normal;
-}
-.muted {
- color: #999999;
-}
-a.muted:hover,
-a.muted:focus {
- color: #808080;
-}
-.text-warning {
- color: #c09853;
-}
-a.text-warning:hover,
-a.text-warning:focus {
- color: #a47e3c;
-}
-.text-error {
- color: #b94a48;
-}
-a.text-error:hover,
-a.text-error:focus {
- color: #953b39;
-}
-.text-info {
- color: #3a87ad;
-}
-a.text-info:hover,
-a.text-info:focus {
- color: #2d6987;
-}
-.text-success {
- color: #468847;
-}
-a.text-success:hover,
-a.text-success:focus {
- color: #356635;
-}
-.text-left {
- text-align: left;
-}
-.text-right {
- text-align: right;
-}
-.text-center {
- text-align: center;
-}
-h1,
-h2,
-h3,
-h4,
-h5,
-h6 {
- margin: 9.5px 0;
- font-family: inherit;
- font-weight: bold;
- line-height: 19px;
- color: inherit;
- text-rendering: optimizelegibility;
-}
-h1 small,
-h2 small,
-h3 small,
-h4 small,
-h5 small,
-h6 small {
- font-weight: normal;
- line-height: 1;
- color: #999999;
-}
-h1,
-h2,
-h3 {
- line-height: 38px;
-}
-h1 {
- font-size: 35.75px;
-}
-h2 {
- font-size: 29.25px;
-}
-h3 {
- font-size: 22.75px;
-}
-h4 {
- font-size: 16.25px;
-}
-h5 {
- font-size: 13px;
-}
-h6 {
- font-size: 11.049999999999999px;
-}
-h1 small {
- font-size: 22.75px;
-}
-h2 small {
- font-size: 16.25px;
-}
-h3 small {
- font-size: 13px;
-}
-h4 small {
- font-size: 13px;
-}
-.page-header {
- padding-bottom: 8.5px;
- margin: 19px 0 28.5px;
- border-bottom: 1px solid #eeeeee;
-}
-ul,
-ol {
- padding: 0;
- margin: 0 0 9.5px 25px;
-}
-ul ul,
-ul ol,
-ol ol,
-ol ul {
- margin-bottom: 0;
-}
-li {
- line-height: 19px;
-}
-ul.unstyled,
-ol.unstyled {
- margin-left: 0;
- list-style: none;
-}
-ul.inline,
-ol.inline {
- margin-left: 0;
- list-style: none;
-}
-ul.inline > li,
-ol.inline > li {
- display: inline-block;
- *display: inline;
- /* IE7 inline-block hack */
-
- *zoom: 1;
- padding-left: 5px;
- padding-right: 5px;
-}
-dl {
- margin-bottom: 19px;
-}
-dt,
-dd {
- line-height: 19px;
-}
-dt {
- font-weight: bold;
-}
-dd {
- margin-left: 9.5px;
-}
-.dl-horizontal {
- *zoom: 1;
-}
-.dl-horizontal:before,
-.dl-horizontal:after {
- display: table;
- content: "";
- line-height: 0;
-}
-.dl-horizontal:after {
- clear: both;
-}
-.dl-horizontal:before,
-.dl-horizontal:after {
- display: table;
- content: "";
- line-height: 0;
-}
-.dl-horizontal:after {
- clear: both;
-}
-.dl-horizontal dt {
- float: left;
- width: 160px;
- clear: left;
- text-align: right;
- overflow: hidden;
- text-overflow: ellipsis;
- white-space: nowrap;
-}
-.dl-horizontal dd {
- margin-left: 180px;
-}
-hr {
- margin: 19px 0;
- border: 0;
- border-top: 1px solid #eeeeee;
- border-bottom: 1px solid #ffffff;
-}
-abbr[title],
-abbr[data-original-title] {
- cursor: help;
- border-bottom: 1px dotted #999999;
-}
-abbr.initialism {
- font-size: 90%;
- text-transform: uppercase;
-}
-blockquote {
- padding: 0 0 0 15px;
- margin: 0 0 19px;
- border-left: 5px solid #eeeeee;
-}
-blockquote p {
- margin-bottom: 0;
- font-size: 16.25px;
- font-weight: 300;
- line-height: 1.25;
-}
-blockquote small {
- display: block;
- line-height: 19px;
- color: #999999;
-}
-blockquote small:before {
- content: '\2014 \00A0';
-}
-blockquote.pull-right {
- float: right;
- padding-right: 15px;
- padding-left: 0;
- border-right: 5px solid #eeeeee;
- border-left: 0;
-}
-blockquote.pull-right p,
-blockquote.pull-right small {
- text-align: right;
-}
-blockquote.pull-right small:before {
- content: '';
-}
-blockquote.pull-right small:after {
- content: '\00A0 \2014';
-}
-q:before,
-q:after,
-blockquote:before,
-blockquote:after {
- content: "";
-}
-address {
- display: block;
- margin-bottom: 19px;
- font-style: normal;
- line-height: 19px;
-}
-code,
-pre {
- padding: 0 3px 2px;
- font-family: Monaco, Menlo, Consolas, "Courier New", monospace;
- font-size: 11px;
- color: #333333;
- -webkit-border-radius: 3px;
- -moz-border-radius: 3px;
- border-radius: 3px;
-}
-code {
- padding: 2px 4px;
- color: #d14;
- background-color: #f7f7f9;
- border: 1px solid #e1e1e8;
- white-space: nowrap;
-}
-pre {
- display: block;
- padding: 9px;
- margin: 0 0 9.5px;
- font-size: 12px;
- line-height: 19px;
- word-break: break-all;
- word-wrap: break-word;
- white-space: pre;
- white-space: pre-wrap;
- background-color: #f5f5f5;
- border: 1px solid #ccc;
- border: 1px solid rgba(0, 0, 0, 0.15);
- -webkit-border-radius: 4px;
- -moz-border-radius: 4px;
- border-radius: 4px;
-}
-pre.prettyprint {
- margin-bottom: 19px;
-}
-pre code {
- padding: 0;
- color: inherit;
- white-space: pre;
- white-space: pre-wrap;
- background-color: transparent;
- border: 0;
-}
-.pre-scrollable {
- max-height: 340px;
- overflow-y: scroll;
-}
-form {
- margin: 0 0 19px;
-}
-fieldset {
- padding: 0;
- margin: 0;
- border: 0;
-}
-legend {
- display: block;
- width: 100%;
- padding: 0;
- margin-bottom: 19px;
- font-size: 19.5px;
- line-height: 38px;
- color: #333333;
- border: 0;
- border-bottom: 1px solid #e5e5e5;
-}
-legend small {
- font-size: 14.25px;
- color: #999999;
-}
-label,
-input,
-button,
-select,
-textarea {
- font-size: 13px;
- font-weight: normal;
- line-height: 19px;
-}
-input,
-button,
-select,
-textarea {
- font-family: 'Open Sans', sans-serif;
-}
-label {
- display: block;
- margin-bottom: 5px;
-}
-select,
-textarea,
-input[type="text"],
-input[type="password"],
-input[type="datetime"],
-input[type="datetime-local"],
-input[type="date"],
-input[type="month"],
-input[type="time"],
-input[type="week"],
-input[type="number"],
-input[type="email"],
-input[type="url"],
-input[type="search"],
-input[type="tel"],
-input[type="color"],
-.uneditable-input {
- display: inline-block;
- height: 19px;
- padding: 4px 6px;
- margin-bottom: 9.5px;
- font-size: 13px;
- line-height: 19px;
- color: #555555;
- -webkit-border-radius: 4px;
- -moz-border-radius: 4px;
- border-radius: 4px;
- vertical-align: middle;
-}
-input,
-textarea,
-.uneditable-input {
- width: 206px;
-}
-textarea {
- height: auto;
-}
-textarea,
-input[type="text"],
-input[type="password"],
-input[type="datetime"],
-input[type="datetime-local"],
-input[type="date"],
-input[type="month"],
-input[type="time"],
-input[type="week"],
-input[type="number"],
-input[type="email"],
-input[type="url"],
-input[type="search"],
-input[type="tel"],
-input[type="color"],
-.uneditable-input {
- background-color: #ffffff;
- border: 1px solid #cccccc;
- -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
- -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
- -webkit-transition: border linear .2s, box-shadow linear .2s;
- -moz-transition: border linear .2s, box-shadow linear .2s;
- -o-transition: border linear .2s, box-shadow linear .2s;
- transition: border linear .2s, box-shadow linear .2s;
-}
-textarea:focus,
-input[type="text"]:focus,
-input[type="password"]:focus,
-input[type="datetime"]:focus,
-input[type="datetime-local"]:focus,
-input[type="date"]:focus,
-input[type="month"]:focus,
-input[type="time"]:focus,
-input[type="week"]:focus,
-input[type="number"]:focus,
-input[type="email"]:focus,
-input[type="url"]:focus,
-input[type="search"]:focus,
-input[type="tel"]:focus,
-input[type="color"]:focus,
-.uneditable-input:focus {
- border-color: rgba(82, 168, 236, 0.8);
- outline: 0;
- outline: thin dotted \9;
- /* IE6-9 */
-
- -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(82,168,236,.6);
- -moz-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(82,168,236,.6);
- box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(82,168,236,.6);
-}
-input[type="radio"],
-input[type="checkbox"] {
- margin: 4px 0 0;
- *margin-top: 0;
- /* IE7 */
-
- margin-top: 1px \9;
- /* IE8-9 */
-
- line-height: normal;
-}
-input[type="file"],
-input[type="image"],
-input[type="submit"],
-input[type="reset"],
-input[type="button"],
-input[type="radio"],
-input[type="checkbox"] {
- width: auto;
-}
-select,
-input[type="file"] {
- height: 29px;
- /* In IE7, the height of the select element cannot be changed by height, only font-size */
-
- *margin-top: 4px;
- /* For IE7, add top margin to align select with labels */
-
- line-height: 29px;
-}
-select {
- width: 220px;
- border: 1px solid #cccccc;
- background-color: #ffffff;
-}
-select[multiple],
-select[size] {
- height: auto;
-}
-select:focus,
-input[type="file"]:focus,
-input[type="radio"]:focus,
-input[type="checkbox"]:focus {
- outline: thin dotted #333;
- outline: 5px auto -webkit-focus-ring-color;
- outline-offset: -2px;
-}
-.uneditable-input,
-.uneditable-textarea {
- color: #999999;
- background-color: #fcfcfc;
- border-color: #cccccc;
- -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025);
- -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025);
- box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025);
- cursor: not-allowed;
-}
-.uneditable-input {
- overflow: hidden;
- white-space: nowrap;
-}
-.uneditable-textarea {
- width: auto;
- height: auto;
-}
-input:-moz-placeholder,
-textarea:-moz-placeholder {
- color: #999999;
-}
-input:-ms-input-placeholder,
-textarea:-ms-input-placeholder {
- color: #999999;
-}
-input::-webkit-input-placeholder,
-textarea::-webkit-input-placeholder {
- color: #999999;
-}
-input:-moz-placeholder,
-textarea:-moz-placeholder {
- color: #999999;
-}
-input:-ms-input-placeholder,
-textarea:-ms-input-placeholder {
- color: #999999;
-}
-input::-webkit-input-placeholder,
-textarea::-webkit-input-placeholder {
- color: #999999;
-}
-.radio,
-.checkbox {
- min-height: 19px;
- padding-left: 20px;
-}
-.radio input[type="radio"],
-.checkbox input[type="checkbox"] {
- float: left;
- margin-left: -20px;
-}
-.controls > .radio:first-child,
-.controls > .checkbox:first-child {
- padding-top: 5px;
-}
-.radio.inline,
-.checkbox.inline {
- display: inline-block;
- padding-top: 5px;
- margin-bottom: 0;
- vertical-align: middle;
-}
-.radio.inline + .radio.inline,
-.checkbox.inline + .checkbox.inline {
- margin-left: 10px;
-}
-.input-mini {
- width: 60px;
-}
-.input-small {
- width: 90px;
-}
-.input-medium {
- width: 150px;
-}
-.input-large {
- width: 210px;
-}
-.input-xlarge {
- width: 270px;
-}
-.input-xxlarge {
- width: 530px;
-}
-input[class*="span"],
-select[class*="span"],
-textarea[class*="span"],
-.uneditable-input[class*="span"],
-.row-fluid input[class*="span"],
-.row-fluid select[class*="span"],
-.row-fluid textarea[class*="span"],
-.row-fluid .uneditable-input[class*="span"] {
- float: none;
- margin-left: 0;
-}
-.input-append input[class*="span"],
-.input-append .uneditable-input[class*="span"],
-.input-prepend input[class*="span"],
-.input-prepend .uneditable-input[class*="span"],
-.row-fluid input[class*="span"],
-.row-fluid select[class*="span"],
-.row-fluid textarea[class*="span"],
-.row-fluid .uneditable-input[class*="span"],
-.row-fluid .input-prepend [class*="span"],
-.row-fluid .input-append [class*="span"] {
- display: inline-block;
-}
-input,
-textarea,
-.uneditable-input {
- margin-left: 0;
-}
-.controls-row [class*="span"] + [class*="span"] {
- margin-left: 20px;
-}
-input.span12,
-textarea.span12,
-.uneditable-input.span12 {
- width: 926px;
-}
-input.span11,
-textarea.span11,
-.uneditable-input.span11 {
- width: 846px;
-}
-input.span10,
-textarea.span10,
-.uneditable-input.span10 {
- width: 766px;
-}
-input.span9,
-textarea.span9,
-.uneditable-input.span9 {
- width: 686px;
-}
-input.span8,
-textarea.span8,
-.uneditable-input.span8 {
- width: 606px;
-}
-input.span7,
-textarea.span7,
-.uneditable-input.span7 {
- width: 526px;
-}
-input.span6,
-textarea.span6,
-.uneditable-input.span6 {
- width: 446px;
-}
-input.span5,
-textarea.span5,
-.uneditable-input.span5 {
- width: 366px;
-}
-input.span4,
-textarea.span4,
-.uneditable-input.span4 {
- width: 286px;
-}
-input.span3,
-textarea.span3,
-.uneditable-input.span3 {
- width: 206px;
-}
-input.span2,
-textarea.span2,
-.uneditable-input.span2 {
- width: 126px;
-}
-input.span1,
-textarea.span1,
-.uneditable-input.span1 {
- width: 46px;
-}
-input,
-textarea,
-.uneditable-input {
- margin-left: 0;
-}
-.controls-row [class*="span"] + [class*="span"] {
- margin-left: 20px;
-}
-input.span12,
-textarea.span12,
-.uneditable-input.span12 {
- width: 926px;
-}
-input.span11,
-textarea.span11,
-.uneditable-input.span11 {
- width: 846px;
-}
-input.span10,
-textarea.span10,
-.uneditable-input.span10 {
- width: 766px;
-}
-input.span9,
-textarea.span9,
-.uneditable-input.span9 {
- width: 686px;
-}
-input.span8,
-textarea.span8,
-.uneditable-input.span8 {
- width: 606px;
-}
-input.span7,
-textarea.span7,
-.uneditable-input.span7 {
- width: 526px;
-}
-input.span6,
-textarea.span6,
-.uneditable-input.span6 {
- width: 446px;
-}
-input.span5,
-textarea.span5,
-.uneditable-input.span5 {
- width: 366px;
-}
-input.span4,
-textarea.span4,
-.uneditable-input.span4 {
- width: 286px;
-}
-input.span3,
-textarea.span3,
-.uneditable-input.span3 {
- width: 206px;
-}
-input.span2,
-textarea.span2,
-.uneditable-input.span2 {
- width: 126px;
-}
-input.span1,
-textarea.span1,
-.uneditable-input.span1 {
- width: 46px;
-}
-.controls-row {
- *zoom: 1;
-}
-.controls-row:before,
-.controls-row:after {
- display: table;
- content: "";
- line-height: 0;
-}
-.controls-row:after {
- clear: both;
-}
-.controls-row:before,
-.controls-row:after {
- display: table;
- content: "";
- line-height: 0;
-}
-.controls-row:after {
- clear: both;
-}
-.controls-row [class*="span"],
-.row-fluid .controls-row [class*="span"] {
- float: left;
-}
-.controls-row .checkbox[class*="span"],
-.controls-row .radio[class*="span"] {
- padding-top: 5px;
-}
-input[disabled],
-select[disabled],
-textarea[disabled],
-input[readonly],
-select[readonly],
-textarea[readonly] {
- cursor: not-allowed;
- background-color: #eeeeee;
-}
-input[type="radio"][disabled],
-input[type="checkbox"][disabled],
-input[type="radio"][readonly],
-input[type="checkbox"][readonly] {
- background-color: transparent;
-}
-.control-group.warning .control-label,
-.control-group.warning .help-block,
-.control-group.warning .help-inline {
- color: #c09853;
-}
-.control-group.warning .checkbox,
-.control-group.warning .radio,
-.control-group.warning input,
-.control-group.warning select,
-.control-group.warning textarea {
- color: #c09853;
-}
-.control-group.warning input,
-.control-group.warning select,
-.control-group.warning textarea {
- border-color: #c09853;
- -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
- -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
-}
-.control-group.warning input:focus,
-.control-group.warning select:focus,
-.control-group.warning textarea:focus {
- border-color: #a47e3c;
- -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e;
- -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e;
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e;
-}
-.control-group.warning .input-prepend .add-on,
-.control-group.warning .input-append .add-on {
- color: #c09853;
- background-color: #fcf8e3;
- border-color: #c09853;
-}
-.control-group.warning .control-label,
-.control-group.warning .help-block,
-.control-group.warning .help-inline {
- color: #c09853;
-}
-.control-group.warning .checkbox,
-.control-group.warning .radio,
-.control-group.warning input,
-.control-group.warning select,
-.control-group.warning textarea {
- color: #c09853;
-}
-.control-group.warning input,
-.control-group.warning select,
-.control-group.warning textarea {
- border-color: #c09853;
- -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
- -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
-}
-.control-group.warning input:focus,
-.control-group.warning select:focus,
-.control-group.warning textarea:focus {
- border-color: #a47e3c;
- -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e;
- -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e;
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e;
-}
-.control-group.warning .input-prepend .add-on,
-.control-group.warning .input-append .add-on {
- color: #c09853;
- background-color: #fcf8e3;
- border-color: #c09853;
-}
-.control-group.error .control-label,
-.control-group.error .help-block,
-.control-group.error .help-inline {
- color: #b94a48;
-}
-.control-group.error .checkbox,
-.control-group.error .radio,
-.control-group.error input,
-.control-group.error select,
-.control-group.error textarea {
- color: #b94a48;
-}
-.control-group.error input,
-.control-group.error select,
-.control-group.error textarea {
- border-color: #b94a48;
- -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
- -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
-}
-.control-group.error input:focus,
-.control-group.error select:focus,
-.control-group.error textarea:focus {
- border-color: #953b39;
- -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392;
- -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392;
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392;
-}
-.control-group.error .input-prepend .add-on,
-.control-group.error .input-append .add-on {
- color: #b94a48;
- background-color: #f2dede;
- border-color: #b94a48;
-}
-.control-group.error .control-label,
-.control-group.error .help-block,
-.control-group.error .help-inline {
- color: #b94a48;
-}
-.control-group.error .checkbox,
-.control-group.error .radio,
-.control-group.error input,
-.control-group.error select,
-.control-group.error textarea {
- color: #b94a48;
-}
-.control-group.error input,
-.control-group.error select,
-.control-group.error textarea {
- border-color: #b94a48;
- -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
- -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
-}
-.control-group.error input:focus,
-.control-group.error select:focus,
-.control-group.error textarea:focus {
- border-color: #953b39;
- -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392;
- -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392;
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392;
-}
-.control-group.error .input-prepend .add-on,
-.control-group.error .input-append .add-on {
- color: #b94a48;
- background-color: #f2dede;
- border-color: #b94a48;
-}
-.control-group.success .control-label,
-.control-group.success .help-block,
-.control-group.success .help-inline {
- color: #468847;
-}
-.control-group.success .checkbox,
-.control-group.success .radio,
-.control-group.success input,
-.control-group.success select,
-.control-group.success textarea {
- color: #468847;
-}
-.control-group.success input,
-.control-group.success select,
-.control-group.success textarea {
- border-color: #468847;
- -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
- -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
-}
-.control-group.success input:focus,
-.control-group.success select:focus,
-.control-group.success textarea:focus {
- border-color: #356635;
- -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b;
- -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b;
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b;
-}
-.control-group.success .input-prepend .add-on,
-.control-group.success .input-append .add-on {
- color: #468847;
- background-color: #dff0d8;
- border-color: #468847;
-}
-.control-group.success .control-label,
-.control-group.success .help-block,
-.control-group.success .help-inline {
- color: #468847;
-}
-.control-group.success .checkbox,
-.control-group.success .radio,
-.control-group.success input,
-.control-group.success select,
-.control-group.success textarea {
- color: #468847;
-}
-.control-group.success input,
-.control-group.success select,
-.control-group.success textarea {
- border-color: #468847;
- -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
- -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
-}
-.control-group.success input:focus,
-.control-group.success select:focus,
-.control-group.success textarea:focus {
- border-color: #356635;
- -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b;
- -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b;
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b;
-}
-.control-group.success .input-prepend .add-on,
-.control-group.success .input-append .add-on {
- color: #468847;
- background-color: #dff0d8;
- border-color: #468847;
-}
-.control-group.info .control-label,
-.control-group.info .help-block,
-.control-group.info .help-inline {
- color: #3a87ad;
-}
-.control-group.info .checkbox,
-.control-group.info .radio,
-.control-group.info input,
-.control-group.info select,
-.control-group.info textarea {
- color: #3a87ad;
-}
-.control-group.info input,
-.control-group.info select,
-.control-group.info textarea {
- border-color: #3a87ad;
- -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
- -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
-}
-.control-group.info input:focus,
-.control-group.info select:focus,
-.control-group.info textarea:focus {
- border-color: #2d6987;
- -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7ab5d3;
- -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7ab5d3;
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7ab5d3;
-}
-.control-group.info .input-prepend .add-on,
-.control-group.info .input-append .add-on {
- color: #3a87ad;
- background-color: #d9edf7;
- border-color: #3a87ad;
-}
-.control-group.info .control-label,
-.control-group.info .help-block,
-.control-group.info .help-inline {
- color: #3a87ad;
-}
-.control-group.info .checkbox,
-.control-group.info .radio,
-.control-group.info input,
-.control-group.info select,
-.control-group.info textarea {
- color: #3a87ad;
-}
-.control-group.info input,
-.control-group.info select,
-.control-group.info textarea {
- border-color: #3a87ad;
- -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
- -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
-}
-.control-group.info input:focus,
-.control-group.info select:focus,
-.control-group.info textarea:focus {
- border-color: #2d6987;
- -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7ab5d3;
- -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7ab5d3;
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7ab5d3;
-}
-.control-group.info .input-prepend .add-on,
-.control-group.info .input-append .add-on {
- color: #3a87ad;
- background-color: #d9edf7;
- border-color: #3a87ad;
-}
-input:focus:invalid,
-textarea:focus:invalid,
-select:focus:invalid {
- color: #b94a48;
- border-color: #ee5f5b;
-}
-input:focus:invalid:focus,
-textarea:focus:invalid:focus,
-select:focus:invalid:focus {
- border-color: #e9322d;
- -webkit-box-shadow: 0 0 6px #f8b9b7;
- -moz-box-shadow: 0 0 6px #f8b9b7;
- box-shadow: 0 0 6px #f8b9b7;
-}
-.form-actions {
- padding: 18px 20px 19px;
- margin-top: 19px;
- margin-bottom: 19px;
- background-color: #f5f5f5;
- border-top: 1px solid #e5e5e5;
- *zoom: 1;
-}
-.form-actions:before,
-.form-actions:after {
- display: table;
- content: "";
- line-height: 0;
-}
-.form-actions:after {
- clear: both;
-}
-.form-actions:before,
-.form-actions:after {
- display: table;
- content: "";
- line-height: 0;
-}
-.form-actions:after {
- clear: both;
-}
-.help-block,
-.help-inline {
- color: #595959;
-}
-.help-block {
- display: block;
- margin-bottom: 9.5px;
-}
-.help-inline {
- display: inline-block;
- *display: inline;
- /* IE7 inline-block hack */
-
- *zoom: 1;
- vertical-align: middle;
- padding-left: 5px;
-}
-.input-append,
-.input-prepend {
- display: inline-block;
- margin-bottom: 9.5px;
- vertical-align: middle;
- font-size: 0;
- white-space: nowrap;
-}
-.input-append input,
-.input-prepend input,
-.input-append select,
-.input-prepend select,
-.input-append .uneditable-input,
-.input-prepend .uneditable-input,
-.input-append .dropdown-menu,
-.input-prepend .dropdown-menu,
-.input-append .popover,
-.input-prepend .popover {
- font-size: 13px;
-}
-.input-append input,
-.input-prepend input,
-.input-append select,
-.input-prepend select,
-.input-append .uneditable-input,
-.input-prepend .uneditable-input {
- position: relative;
- margin-bottom: 0;
- *margin-left: 0;
- vertical-align: top;
- -webkit-border-radius: 0 4px 4px 0;
- -moz-border-radius: 0 4px 4px 0;
- border-radius: 0 4px 4px 0;
-}
-.input-append input:focus,
-.input-prepend input:focus,
-.input-append select:focus,
-.input-prepend select:focus,
-.input-append .uneditable-input:focus,
-.input-prepend .uneditable-input:focus {
- z-index: 2;
-}
-.input-append .add-on,
-.input-prepend .add-on {
- display: inline-block;
- width: auto;
- height: 19px;
- min-width: 16px;
- padding: 4px 5px;
- font-size: 13px;
- font-weight: normal;
- line-height: 19px;
- text-align: center;
- text-shadow: 0 1px 0 #ffffff;
- background-color: #eeeeee;
- border: 1px solid #ccc;
-}
-.input-append .add-on,
-.input-prepend .add-on,
-.input-append .btn,
-.input-prepend .btn,
-.input-append .btn-group > .dropdown-toggle,
-.input-prepend .btn-group > .dropdown-toggle {
- vertical-align: top;
- -webkit-border-radius: 0;
- -moz-border-radius: 0;
- border-radius: 0;
-}
-.input-append .active,
-.input-prepend .active {
- background-color: #a9dba9;
- border-color: #46a546;
-}
-.input-prepend .add-on,
-.input-prepend .btn {
- margin-right: -1px;
-}
-.input-prepend .add-on:first-child,
-.input-prepend .btn:first-child {
- -webkit-border-radius: 4px 0 0 4px;
- -moz-border-radius: 4px 0 0 4px;
- border-radius: 4px 0 0 4px;
-}
-.input-append input,
-.input-append select,
-.input-append .uneditable-input {
- -webkit-border-radius: 4px 0 0 4px;
- -moz-border-radius: 4px 0 0 4px;
- border-radius: 4px 0 0 4px;
-}
-.input-append input + .btn-group .btn:last-child,
-.input-append select + .btn-group .btn:last-child,
-.input-append .uneditable-input + .btn-group .btn:last-child {
- -webkit-border-radius: 0 4px 4px 0;
- -moz-border-radius: 0 4px 4px 0;
- border-radius: 0 4px 4px 0;
-}
-.input-append .add-on,
-.input-append .btn,
-.input-append .btn-group {
- margin-left: -1px;
-}
-.input-append .add-on:last-child,
-.input-append .btn:last-child,
-.input-append .btn-group:last-child > .dropdown-toggle {
- -webkit-border-radius: 0 4px 4px 0;
- -moz-border-radius: 0 4px 4px 0;
- border-radius: 0 4px 4px 0;
-}
-.input-prepend.input-append input,
-.input-prepend.input-append select,
-.input-prepend.input-append .uneditable-input {
- -webkit-border-radius: 0;
- -moz-border-radius: 0;
- border-radius: 0;
-}
-.input-prepend.input-append input + .btn-group .btn,
-.input-prepend.input-append select + .btn-group .btn,
-.input-prepend.input-append .uneditable-input + .btn-group .btn {
- -webkit-border-radius: 0 4px 4px 0;
- -moz-border-radius: 0 4px 4px 0;
- border-radius: 0 4px 4px 0;
-}
-.input-prepend.input-append .add-on:first-child,
-.input-prepend.input-append .btn:first-child {
- margin-right: -1px;
- -webkit-border-radius: 4px 0 0 4px;
- -moz-border-radius: 4px 0 0 4px;
- border-radius: 4px 0 0 4px;
-}
-.input-prepend.input-append .add-on:last-child,
-.input-prepend.input-append .btn:last-child {
- margin-left: -1px;
- -webkit-border-radius: 0 4px 4px 0;
- -moz-border-radius: 0 4px 4px 0;
- border-radius: 0 4px 4px 0;
-}
-.input-prepend.input-append .btn-group:first-child {
- margin-left: 0;
-}
-input.search-query {
- padding-right: 14px;
- padding-right: 4px \9;
- padding-left: 14px;
- padding-left: 4px \9;
- /* IE7-8 doesn't have border-radius, so don't indent the padding */
-
- margin-bottom: 0;
- -webkit-border-radius: 15px;
- -moz-border-radius: 15px;
- border-radius: 15px;
-}
-/* Allow for input prepend/append in search forms */
-.form-search .input-append .search-query,
-.form-search .input-prepend .search-query {
- -webkit-border-radius: 0;
- -moz-border-radius: 0;
- border-radius: 0;
-}
-.form-search .input-append .search-query {
- -webkit-border-radius: 14px 0 0 14px;
- -moz-border-radius: 14px 0 0 14px;
- border-radius: 14px 0 0 14px;
-}
-.form-search .input-append .btn {
- -webkit-border-radius: 0 14px 14px 0;
- -moz-border-radius: 0 14px 14px 0;
- border-radius: 0 14px 14px 0;
-}
-.form-search .input-prepend .search-query {
- -webkit-border-radius: 0 14px 14px 0;
- -moz-border-radius: 0 14px 14px 0;
- border-radius: 0 14px 14px 0;
-}
-.form-search .input-prepend .btn {
- -webkit-border-radius: 14px 0 0 14px;
- -moz-border-radius: 14px 0 0 14px;
- border-radius: 14px 0 0 14px;
-}
-.form-search input,
-.form-inline input,
-.form-horizontal input,
-.form-search textarea,
-.form-inline textarea,
-.form-horizontal textarea,
-.form-search select,
-.form-inline select,
-.form-horizontal select,
-.form-search .help-inline,
-.form-inline .help-inline,
-.form-horizontal .help-inline,
-.form-search .uneditable-input,
-.form-inline .uneditable-input,
-.form-horizontal .uneditable-input,
-.form-search .input-prepend,
-.form-inline .input-prepend,
-.form-horizontal .input-prepend,
-.form-search .input-append,
-.form-inline .input-append,
-.form-horizontal .input-append {
- display: inline-block;
- *display: inline;
- /* IE7 inline-block hack */
-
- *zoom: 1;
- margin-bottom: 0;
- vertical-align: middle;
-}
-.form-search .hide,
-.form-inline .hide,
-.form-horizontal .hide {
- display: none;
-}
-.form-search label,
-.form-inline label,
-.form-search .btn-group,
-.form-inline .btn-group {
- display: inline-block;
-}
-.form-search .input-append,
-.form-inline .input-append,
-.form-search .input-prepend,
-.form-inline .input-prepend {
- margin-bottom: 0;
-}
-.form-search .radio,
-.form-search .checkbox,
-.form-inline .radio,
-.form-inline .checkbox {
- padding-left: 0;
- margin-bottom: 0;
- vertical-align: middle;
-}
-.form-search .radio input[type="radio"],
-.form-search .checkbox input[type="checkbox"],
-.form-inline .radio input[type="radio"],
-.form-inline .checkbox input[type="checkbox"] {
- float: left;
- margin-right: 3px;
- margin-left: 0;
-}
-.control-group {
- margin-bottom: 9.5px;
-}
-legend + .control-group {
- margin-top: 19px;
- -webkit-margin-top-collapse: separate;
-}
-.form-horizontal .control-group {
- margin-bottom: 19px;
- *zoom: 1;
-}
-.form-horizontal .control-group:before,
-.form-horizontal .control-group:after {
- display: table;
- content: "";
- line-height: 0;
-}
-.form-horizontal .control-group:after {
- clear: both;
-}
-.form-horizontal .control-group:before,
-.form-horizontal .control-group:after {
- display: table;
- content: "";
- line-height: 0;
-}
-.form-horizontal .control-group:after {
- clear: both;
-}
-.form-horizontal .control-label {
- float: left;
- width: 160px;
- padding-top: 5px;
- text-align: right;
-}
-.form-horizontal .controls {
- *display: inline-block;
- *padding-left: 20px;
- margin-left: 180px;
- *margin-left: 0;
-}
-.form-horizontal .controls:first-child {
- *padding-left: 180px;
-}
-.form-horizontal .help-block {
- margin-bottom: 0;
-}
-.form-horizontal input + .help-block,
-.form-horizontal select + .help-block,
-.form-horizontal textarea + .help-block,
-.form-horizontal .uneditable-input + .help-block,
-.form-horizontal .input-prepend + .help-block,
-.form-horizontal .input-append + .help-block {
- margin-top: 9.5px;
-}
-.form-horizontal .form-actions {
- padding-left: 180px;
-}
-table {
- max-width: 100%;
- background-color: transparent;
- border-collapse: collapse;
- border-spacing: 0;
-}
-.table {
- width: 100%;
- margin-bottom: 19px;
-}
-.table th,
-.table td {
- padding: 8px;
- line-height: 19px;
- text-align: left;
- vertical-align: top;
- border-top: 1px solid #dddddd;
-}
-.table th {
- font-weight: bold;
-}
-.table thead th {
- vertical-align: bottom;
-}
-.table caption + thead tr:first-child th,
-.table caption + thead tr:first-child td,
-.table colgroup + thead tr:first-child th,
-.table colgroup + thead tr:first-child td,
-.table thead:first-child tr:first-child th,
-.table thead:first-child tr:first-child td {
- border-top: 0;
-}
-.table tbody + tbody {
- border-top: 2px solid #dddddd;
-}
-.table .table {
- background-color: #ffffff;
-}
-.table-condensed th,
-.table-condensed td {
- padding: 4px 5px;
-}
-.table-bordered {
- border: 1px solid #dddddd;
- border-collapse: separate;
- *border-collapse: collapse;
- border-left: 0;
- -webkit-border-radius: 4px;
- -moz-border-radius: 4px;
- border-radius: 4px;
-}
-.table-bordered th,
-.table-bordered td {
- border-left: 1px solid #dddddd;
-}
-.table-bordered caption + thead tr:first-child th,
-.table-bordered caption + tbody tr:first-child th,
-.table-bordered caption + tbody tr:first-child td,
-.table-bordered colgroup + thead tr:first-child th,
-.table-bordered colgroup + tbody tr:first-child th,
-.table-bordered colgroup + tbody tr:first-child td,
-.table-bordered thead:first-child tr:first-child th,
-.table-bordered tbody:first-child tr:first-child th,
-.table-bordered tbody:first-child tr:first-child td {
- border-top: 0;
-}
-.table-bordered thead:first-child tr:first-child > th:first-child,
-.table-bordered tbody:first-child tr:first-child > td:first-child,
-.table-bordered tbody:first-child tr:first-child > th:first-child {
- -webkit-border-top-left-radius: 4px;
- -moz-border-radius-topleft: 4px;
- border-top-left-radius: 4px;
-}
-.table-bordered thead:first-child tr:first-child > th:last-child,
-.table-bordered tbody:first-child tr:first-child > td:last-child,
-.table-bordered tbody:first-child tr:first-child > th:last-child {
- -webkit-border-top-right-radius: 4px;
- -moz-border-radius-topright: 4px;
- border-top-right-radius: 4px;
-}
-.table-bordered thead:last-child tr:last-child > th:first-child,
-.table-bordered tbody:last-child tr:last-child > td:first-child,
-.table-bordered tbody:last-child tr:last-child > th:first-child,
-.table-bordered tfoot:last-child tr:last-child > td:first-child,
-.table-bordered tfoot:last-child tr:last-child > th:first-child {
- -webkit-border-bottom-left-radius: 4px;
- -moz-border-radius-bottomleft: 4px;
- border-bottom-left-radius: 4px;
-}
-.table-bordered thead:last-child tr:last-child > th:last-child,
-.table-bordered tbody:last-child tr:last-child > td:last-child,
-.table-bordered tbody:last-child tr:last-child > th:last-child,
-.table-bordered tfoot:last-child tr:last-child > td:last-child,
-.table-bordered tfoot:last-child tr:last-child > th:last-child {
- -webkit-border-bottom-right-radius: 4px;
- -moz-border-radius-bottomright: 4px;
- border-bottom-right-radius: 4px;
-}
-.table-bordered tfoot + tbody:last-child tr:last-child td:first-child {
- -webkit-border-bottom-left-radius: 0;
- -moz-border-radius-bottomleft: 0;
- border-bottom-left-radius: 0;
-}
-.table-bordered tfoot + tbody:last-child tr:last-child td:last-child {
- -webkit-border-bottom-right-radius: 0;
- -moz-border-radius-bottomright: 0;
- border-bottom-right-radius: 0;
-}
-.table-bordered caption + thead tr:first-child th:first-child,
-.table-bordered caption + tbody tr:first-child td:first-child,
-.table-bordered colgroup + thead tr:first-child th:first-child,
-.table-bordered colgroup + tbody tr:first-child td:first-child {
- -webkit-border-top-left-radius: 4px;
- -moz-border-radius-topleft: 4px;
- border-top-left-radius: 4px;
-}
-.table-bordered caption + thead tr:first-child th:last-child,
-.table-bordered caption + tbody tr:first-child td:last-child,
-.table-bordered colgroup + thead tr:first-child th:last-child,
-.table-bordered colgroup + tbody tr:first-child td:last-child {
- -webkit-border-top-right-radius: 4px;
- -moz-border-radius-topright: 4px;
- border-top-right-radius: 4px;
-}
-.table-striped tbody > tr:nth-child(odd) > td,
-.table-striped tbody > tr:nth-child(odd) > th {
- background-color: #f9f9f9;
-}
-.table-hover tbody tr:hover > td,
-.table-hover tbody tr:hover > th {
- background-color: #f5f5f5;
-}
-table td[class*="span"],
-table th[class*="span"],
-.row-fluid table td[class*="span"],
-.row-fluid table th[class*="span"] {
- display: table-cell;
- float: none;
- margin-left: 0;
-}
-.table td.span1,
-.table th.span1 {
- float: none;
- width: 44px;
- margin-left: 0;
-}
-.table td.span2,
-.table th.span2 {
- float: none;
- width: 124px;
- margin-left: 0;
-}
-.table td.span3,
-.table th.span3 {
- float: none;
- width: 204px;
- margin-left: 0;
-}
-.table td.span4,
-.table th.span4 {
- float: none;
- width: 284px;
- margin-left: 0;
-}
-.table td.span5,
-.table th.span5 {
- float: none;
- width: 364px;
- margin-left: 0;
-}
-.table td.span6,
-.table th.span6 {
- float: none;
- width: 444px;
- margin-left: 0;
-}
-.table td.span7,
-.table th.span7 {
- float: none;
- width: 524px;
- margin-left: 0;
-}
-.table td.span8,
-.table th.span8 {
- float: none;
- width: 604px;
- margin-left: 0;
-}
-.table td.span9,
-.table th.span9 {
- float: none;
- width: 684px;
- margin-left: 0;
-}
-.table td.span10,
-.table th.span10 {
- float: none;
- width: 764px;
- margin-left: 0;
-}
-.table td.span11,
-.table th.span11 {
- float: none;
- width: 844px;
- margin-left: 0;
-}
-.table td.span12,
-.table th.span12 {
- float: none;
- width: 924px;
- margin-left: 0;
-}
-.table tbody tr.success > td {
- background-color: #dff0d8;
-}
-.table tbody tr.error > td {
- background-color: #f2dede;
-}
-.table tbody tr.warning > td {
- background-color: #fcf8e3;
-}
-.table tbody tr.info > td {
- background-color: #d9edf7;
-}
-.table-hover tbody tr.success:hover > td {
- background-color: #d0e9c6;
-}
-.table-hover tbody tr.error:hover > td {
- background-color: #ebcccc;
-}
-.table-hover tbody tr.warning:hover > td {
- background-color: #faf2cc;
-}
-.table-hover tbody tr.info:hover > td {
- background-color: #c4e3f3;
-}
-[class^="icon-"],
-[class*=" icon-"] {
- display: inline-block;
- width: 14px;
- height: 14px;
- *margin-right: .3em;
- line-height: 14px;
- vertical-align: text-top;
- background-image: url("../../img/glyphicons-halflings.png");
- background-position: 14px 14px;
- background-repeat: no-repeat;
- margin-top: 1px;
-}
-/* White icons with optional class, or on hover/focus/active states of certain elements */
-.icon-white,
-.nav-pills > .active > a > [class^="icon-"],
-.nav-pills > .active > a > [class*=" icon-"],
-.nav-list > .active > a > [class^="icon-"],
-.nav-list > .active > a > [class*=" icon-"],
-.navbar-inverse .nav > .active > a > [class^="icon-"],
-.navbar-inverse .nav > .active > a > [class*=" icon-"],
-.dropdown-menu > li > a:hover > [class^="icon-"],
-.dropdown-menu > li > a:focus > [class^="icon-"],
-.dropdown-menu > li > a:hover > [class*=" icon-"],
-.dropdown-menu > li > a:focus > [class*=" icon-"],
-.dropdown-menu > .active > a > [class^="icon-"],
-.dropdown-menu > .active > a > [class*=" icon-"],
-.dropdown-submenu:hover > a > [class^="icon-"],
-.dropdown-submenu:focus > a > [class^="icon-"],
-.dropdown-submenu:hover > a > [class*=" icon-"],
-.dropdown-submenu:focus > a > [class*=" icon-"] {
- background-image: url("../../img/glyphicons-halflings-white.png");
-}
-.icon-glass {
- background-position: 0 0;
-}
-.icon-music {
- background-position: -24px 0;
-}
-.icon-search {
- background-position: -48px 0;
-}
-.icon-envelope {
- background-position: -72px 0;
-}
-.icon-heart {
- background-position: -96px 0;
-}
-.icon-star {
- background-position: -120px 0;
-}
-.icon-star-empty {
- background-position: -144px 0;
-}
-.icon-user {
- background-position: -168px 0;
-}
-.icon-film {
- background-position: -192px 0;
-}
-.icon-th-large {
- background-position: -216px 0;
-}
-.icon-th {
- background-position: -240px 0;
-}
-.icon-th-list {
- background-position: -264px 0;
-}
-.icon-ok {
- background-position: -288px 0;
-}
-.icon-remove {
- background-position: -312px 0;
-}
-.icon-zoom-in {
- background-position: -336px 0;
-}
-.icon-zoom-out {
- background-position: -360px 0;
-}
-.icon-off {
- background-position: -384px 0;
-}
-.icon-signal {
- background-position: -408px 0;
-}
-.icon-cog {
- background-position: -432px 0;
-}
-.icon-trash {
- background-position: -456px 0;
-}
-.icon-home {
- background-position: 0 -24px;
-}
-.icon-file {
- background-position: -24px -24px;
-}
-.icon-time {
- background-position: -48px -24px;
-}
-.icon-road {
- background-position: -72px -24px;
-}
-.icon-download-alt {
- background-position: -96px -24px;
-}
-.icon-download {
- background-position: -120px -24px;
-}
-.icon-upload {
- background-position: -144px -24px;
-}
-.icon-inbox {
- background-position: -168px -24px;
-}
-.icon-play-circle {
- background-position: -192px -24px;
-}
-.icon-repeat {
- background-position: -216px -24px;
-}
-.icon-refresh {
- background-position: -240px -24px;
-}
-.icon-list-alt {
- background-position: -264px -24px;
-}
-.icon-lock {
- background-position: -287px -24px;
-}
-.icon-flag {
- background-position: -312px -24px;
-}
-.icon-headphones {
- background-position: -336px -24px;
-}
-.icon-volume-off {
- background-position: -360px -24px;
-}
-.icon-volume-down {
- background-position: -384px -24px;
-}
-.icon-volume-up {
- background-position: -408px -24px;
-}
-.icon-qrcode {
- background-position: -432px -24px;
-}
-.icon-barcode {
- background-position: -456px -24px;
-}
-.icon-tag {
- background-position: 0 -48px;
-}
-.icon-tags {
- background-position: -25px -48px;
-}
-.icon-book {
- background-position: -48px -48px;
-}
-.icon-bookmark {
- background-position: -72px -48px;
-}
-.icon-print {
- background-position: -96px -48px;
-}
-.icon-camera {
- background-position: -120px -48px;
-}
-.icon-font {
- background-position: -144px -48px;
-}
-.icon-bold {
- background-position: -167px -48px;
-}
-.icon-italic {
- background-position: -192px -48px;
-}
-.icon-text-height {
- background-position: -216px -48px;
-}
-.icon-text-width {
- background-position: -240px -48px;
-}
-.icon-align-left {
- background-position: -264px -48px;
-}
-.icon-align-center {
- background-position: -288px -48px;
-}
-.icon-align-right {
- background-position: -312px -48px;
-}
-.icon-align-justify {
- background-position: -336px -48px;
-}
-.icon-list {
- background-position: -360px -48px;
-}
-.icon-indent-left {
- background-position: -384px -48px;
-}
-.icon-indent-right {
- background-position: -408px -48px;
-}
-.icon-facetime-video {
- background-position: -432px -48px;
-}
-.icon-picture {
- background-position: -456px -48px;
-}
-.icon-pencil {
- background-position: 0 -72px;
-}
-.icon-map-marker {
- background-position: -24px -72px;
-}
-.icon-adjust {
- background-position: -48px -72px;
-}
-.icon-tint {
- background-position: -72px -72px;
-}
-.icon-edit {
- background-position: -96px -72px;
-}
-.icon-share {
- background-position: -120px -72px;
-}
-.icon-check {
- background-position: -144px -72px;
-}
-.icon-move {
- background-position: -168px -72px;
-}
-.icon-step-backward {
- background-position: -192px -72px;
-}
-.icon-fast-backward {
- background-position: -216px -72px;
-}
-.icon-backward {
- background-position: -240px -72px;
-}
-.icon-play {
- background-position: -264px -72px;
-}
-.icon-pause {
- background-position: -288px -72px;
-}
-.icon-stop {
- background-position: -312px -72px;
-}
-.icon-forward {
- background-position: -336px -72px;
-}
-.icon-fast-forward {
- background-position: -360px -72px;
-}
-.icon-step-forward {
- background-position: -384px -72px;
-}
-.icon-eject {
- background-position: -408px -72px;
-}
-.icon-chevron-left {
- background-position: -432px -72px;
-}
-.icon-chevron-right {
- background-position: -456px -72px;
-}
-.icon-plus-sign {
- background-position: 0 -96px;
-}
-.icon-minus-sign {
- background-position: -24px -96px;
-}
-.icon-remove-sign {
- background-position: -48px -96px;
-}
-.icon-ok-sign {
- background-position: -72px -96px;
-}
-.icon-question-sign {
- background-position: -96px -96px;
-}
-.icon-info-sign {
- background-position: -120px -96px;
-}
-.icon-screenshot {
- background-position: -144px -96px;
-}
-.icon-remove-circle {
- background-position: -168px -96px;
-}
-.icon-ok-circle {
- background-position: -192px -96px;
-}
-.icon-ban-circle {
- background-position: -216px -96px;
-}
-.icon-arrow-left {
- background-position: -240px -96px;
-}
-.icon-arrow-right {
- background-position: -264px -96px;
-}
-.icon-arrow-up {
- background-position: -289px -96px;
-}
-.icon-arrow-down {
- background-position: -312px -96px;
-}
-.icon-share-alt {
- background-position: -336px -96px;
-}
-.icon-resize-full {
- background-position: -360px -96px;
-}
-.icon-resize-small {
- background-position: -384px -96px;
-}
-.icon-plus {
- background-position: -408px -96px;
-}
-.icon-minus {
- background-position: -433px -96px;
-}
-.icon-asterisk {
- background-position: -456px -96px;
-}
-.icon-exclamation-sign {
- background-position: 0 -120px;
-}
-.icon-gift {
- background-position: -24px -120px;
-}
-.icon-leaf {
- background-position: -48px -120px;
-}
-.icon-fire {
- background-position: -72px -120px;
-}
-.icon-eye-open {
- background-position: -96px -120px;
-}
-.icon-eye-close {
- background-position: -120px -120px;
-}
-.icon-warning-sign {
- background-position: -144px -120px;
-}
-.icon-plane {
- background-position: -168px -120px;
-}
-.icon-calendar {
- background-position: -192px -120px;
-}
-.icon-random {
- background-position: -216px -120px;
- width: 16px;
-}
-.icon-comment {
- background-position: -240px -120px;
-}
-.icon-magnet {
- background-position: -264px -120px;
-}
-.icon-chevron-up {
- background-position: -288px -120px;
-}
-.icon-chevron-down {
- background-position: -313px -119px;
-}
-.icon-retweet {
- background-position: -336px -120px;
-}
-.icon-shopping-cart {
- background-position: -360px -120px;
-}
-.icon-folder-close {
- background-position: -384px -120px;
- width: 16px;
-}
-.icon-folder-open {
- background-position: -408px -120px;
- width: 16px;
-}
-.icon-resize-vertical {
- background-position: -432px -119px;
-}
-.icon-resize-horizontal {
- background-position: -456px -118px;
-}
-.icon-hdd {
- background-position: 0 -144px;
-}
-.icon-bullhorn {
- background-position: -24px -144px;
-}
-.icon-bell {
- background-position: -48px -144px;
-}
-.icon-certificate {
- background-position: -72px -144px;
-}
-.icon-thumbs-up {
- background-position: -96px -144px;
-}
-.icon-thumbs-down {
- background-position: -120px -144px;
-}
-.icon-hand-right {
- background-position: -144px -144px;
-}
-.icon-hand-left {
- background-position: -168px -144px;
-}
-.icon-hand-up {
- background-position: -192px -144px;
-}
-.icon-hand-down {
- background-position: -216px -144px;
-}
-.icon-circle-arrow-right {
- background-position: -240px -144px;
-}
-.icon-circle-arrow-left {
- background-position: -264px -144px;
-}
-.icon-circle-arrow-up {
- background-position: -288px -144px;
-}
-.icon-circle-arrow-down {
- background-position: -312px -144px;
-}
-.icon-globe {
- background-position: -336px -144px;
-}
-.icon-wrench {
- background-position: -360px -144px;
-}
-.icon-tasks {
- background-position: -384px -144px;
-}
-.icon-filter {
- background-position: -408px -144px;
-}
-.icon-briefcase {
- background-position: -432px -144px;
-}
-.icon-fullscreen {
- background-position: -456px -144px;
-}
-.dropup,
-.dropdown {
- position: relative;
-}
-.dropdown-toggle {
- *margin-bottom: -3px;
-}
-.dropdown-toggle:active,
-.open .dropdown-toggle {
- outline: 0;
-}
-.caret {
- display: inline-block;
- width: 0;
- height: 0;
- vertical-align: top;
- border-top: 4px solid #000000;
- border-right: 4px solid transparent;
- border-left: 4px solid transparent;
- content: "";
-}
-.dropdown .caret {
- margin-top: 8px;
- margin-left: 2px;
-}
-.dropdown-menu {
- position: absolute;
- top: 100%;
- left: 0;
- z-index: 1000;
- display: none;
- float: left;
- min-width: 160px;
- padding: 5px 0;
- margin: 2px 0 0;
- list-style: none;
- background-color: #ffffff;
- border: 1px solid #ccc;
- border: 1px solid rgba(0, 0, 0, 0.2);
- *border-right-width: 2px;
- *border-bottom-width: 2px;
- -webkit-border-radius: 6px;
- -moz-border-radius: 6px;
- border-radius: 6px;
- -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
- -moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
- box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
- -webkit-background-clip: padding-box;
- -moz-background-clip: padding;
- background-clip: padding-box;
-}
-.dropdown-menu.pull-right {
- right: 0;
- left: auto;
-}
-.dropdown-menu .divider {
- *width: 100%;
- height: 1px;
- margin: 8.5px 1px;
- *margin: -5px 0 5px;
- overflow: hidden;
- background-color: #e5e5e5;
- border-bottom: 1px solid #ffffff;
-}
-.dropdown-menu > li > a {
- display: block;
- padding: 3px 20px;
- clear: both;
- font-weight: normal;
- line-height: 19px;
- color: #333333;
- white-space: nowrap;
-}
-.dropdown-menu > li > a:hover,
-.dropdown-menu > li > a:focus,
-.dropdown-submenu:hover > a,
-.dropdown-submenu:focus > a {
- text-decoration: none;
- color: #ffffff;
- background-color: #0081c2;
- background-image: -moz-linear-gradient(top, #0088cc, #0077b3);
- background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0077b3));
- background-image: -webkit-linear-gradient(top, #0088cc, #0077b3);
- background-image: -o-linear-gradient(top, #0088cc, #0077b3);
- background-image: linear-gradient(to bottom, #0088cc, #0077b3);
- background-repeat: repeat-x;
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0077b3', GradientType=0);
-}
-.dropdown-menu > .active > a,
-.dropdown-menu > .active > a:hover,
-.dropdown-menu > .active > a:focus {
- color: #ffffff;
- text-decoration: none;
- outline: 0;
- background-color: #0081c2;
- background-image: -moz-linear-gradient(top, #0088cc, #0077b3);
- background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0077b3));
- background-image: -webkit-linear-gradient(top, #0088cc, #0077b3);
- background-image: -o-linear-gradient(top, #0088cc, #0077b3);
- background-image: linear-gradient(to bottom, #0088cc, #0077b3);
- background-repeat: repeat-x;
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0077b3', GradientType=0);
-}
-.dropdown-menu > .disabled > a,
-.dropdown-menu > .disabled > a:hover,
-.dropdown-menu > .disabled > a:focus {
- color: #999999;
-}
-.dropdown-menu > .disabled > a:hover,
-.dropdown-menu > .disabled > a:focus {
- text-decoration: none;
- background-color: transparent;
- background-image: none;
- filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
- cursor: default;
-}
-.open {
- *z-index: 1000;
-}
-.open > .dropdown-menu {
- display: block;
-}
-.pull-right > .dropdown-menu {
- right: 0;
- left: auto;
-}
-.dropup .caret,
-.navbar-fixed-bottom .dropdown .caret {
- border-top: 0;
- border-bottom: 4px solid #000000;
- content: "";
-}
-.dropup .dropdown-menu,
-.navbar-fixed-bottom .dropdown .dropdown-menu {
- top: auto;
- bottom: 100%;
- margin-bottom: 1px;
-}
-.dropdown-submenu {
- position: relative;
-}
-.dropdown-submenu > .dropdown-menu {
- top: 0;
- left: 100%;
- margin-top: -6px;
- margin-left: -1px;
- -webkit-border-radius: 0 6px 6px 6px;
- -moz-border-radius: 0 6px 6px 6px;
- border-radius: 0 6px 6px 6px;
-}
-.dropdown-submenu:hover > .dropdown-menu {
- display: block;
-}
-.dropup .dropdown-submenu > .dropdown-menu {
- top: auto;
- bottom: 0;
- margin-top: 0;
- margin-bottom: -2px;
- -webkit-border-radius: 5px 5px 5px 0;
- -moz-border-radius: 5px 5px 5px 0;
- border-radius: 5px 5px 5px 0;
-}
-.dropdown-submenu > a:after {
- display: block;
- content: " ";
- float: right;
- width: 0;
- height: 0;
- border-color: transparent;
- border-style: solid;
- border-width: 5px 0 5px 5px;
- border-left-color: #cccccc;
- margin-top: 5px;
- margin-right: -10px;
-}
-.dropdown-submenu:hover > a:after {
- border-left-color: #ffffff;
-}
-.dropdown-submenu.pull-left {
- float: none;
-}
-.dropdown-submenu.pull-left > .dropdown-menu {
- left: -100%;
- margin-left: 10px;
- -webkit-border-radius: 6px 0 6px 6px;
- -moz-border-radius: 6px 0 6px 6px;
- border-radius: 6px 0 6px 6px;
-}
-.dropdown .dropdown-menu .nav-header {
- padding-left: 20px;
- padding-right: 20px;
-}
-.typeahead {
- z-index: 1051;
- margin-top: 2px;
- -webkit-border-radius: 4px;
- -moz-border-radius: 4px;
- border-radius: 4px;
-}
-.well {
- min-height: 20px;
- padding: 19px;
- margin-bottom: 20px;
- background-color: #f5f5f5;
- border: 1px solid #e3e3e3;
- -webkit-border-radius: 4px;
- -moz-border-radius: 4px;
- border-radius: 4px;
- -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
- -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
-}
-.well blockquote {
- border-color: #ddd;
- border-color: rgba(0, 0, 0, 0.15);
-}
-.well-large {
- padding: 24px;
- -webkit-border-radius: 6px;
- -moz-border-radius: 6px;
- border-radius: 6px;
-}
-.well-small {
- padding: 9px;
- -webkit-border-radius: 3px;
- -moz-border-radius: 3px;
- border-radius: 3px;
-}
-.fade {
- opacity: 0;
- -webkit-transition: opacity 0.15s linear;
- -moz-transition: opacity 0.15s linear;
- -o-transition: opacity 0.15s linear;
- transition: opacity 0.15s linear;
-}
-.fade.in {
- opacity: 1;
-}
-.collapse {
- position: relative;
- height: 0;
- overflow: hidden;
- -webkit-transition: height 0.35s ease;
- -moz-transition: height 0.35s ease;
- -o-transition: height 0.35s ease;
- transition: height 0.35s ease;
-}
-.collapse.in {
- height: auto;
-}
-.close {
- float: right;
- font-size: 20px;
- font-weight: bold;
- line-height: 19px;
- color: #000000;
- text-shadow: 0 1px 0 #ffffff;
- opacity: 0.2;
- filter: alpha(opacity=20);
-}
-.close:hover,
-.close:focus {
- color: #000000;
- text-decoration: none;
- cursor: pointer;
- opacity: 0.4;
- filter: alpha(opacity=40);
-}
-button.close {
- padding: 0;
- cursor: pointer;
- background: transparent;
- border: 0;
- -webkit-appearance: none;
-}
-.btn {
- display: inline-block;
- *display: inline;
- /* IE7 inline-block hack */
-
- *zoom: 1;
- padding: 4px 12px;
- margin-bottom: 0;
- font-size: 13px;
- line-height: 19px;
- text-align: center;
- vertical-align: middle;
- cursor: pointer;
- color: #333333;
- text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75);
- background-color: #f5f5f5;
- background-image: -moz-linear-gradient(top, #ffffff, #e6e6e6);
- background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6));
- background-image: -webkit-linear-gradient(top, #ffffff, #e6e6e6);
- background-image: -o-linear-gradient(top, #ffffff, #e6e6e6);
- background-image: linear-gradient(to bottom, #ffffff, #e6e6e6);
- background-repeat: repeat-x;
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe6e6e6', GradientType=0);
- border-color: #e6e6e6 #e6e6e6 #bfbfbf;
- border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
- *background-color: #e6e6e6;
- /* Darken IE7 buttons by default so they stand out more given they won't have borders */
-
- filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
- border: 1px solid #cccccc;
- *border: 0;
- border-bottom-color: #b3b3b3;
- -webkit-border-radius: 4px;
- -moz-border-radius: 4px;
- border-radius: 4px;
- *margin-left: .3em;
- -webkit-box-shadow: inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);
- -moz-box-shadow: inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);
- box-shadow: inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);
-}
-.btn:hover,
-.btn:focus,
-.btn:active,
-.btn.active,
-.btn.disabled,
-.btn[disabled] {
- color: #333333;
- background-color: #e6e6e6;
- *background-color: #d9d9d9;
-}
-.btn:active,
-.btn.active {
- background-color: #cccccc \9;
-}
-.btn:hover,
-.btn:focus,
-.btn:active,
-.btn.active,
-.btn.disabled,
-.btn[disabled] {
- color: #333333;
- background-color: #e6e6e6;
- *background-color: #d9d9d9;
-}
-.btn:active,
-.btn.active {
- background-color: #cccccc \9;
-}
-.btn:first-child {
- *margin-left: 0;
-}
-.btn:first-child {
- *margin-left: 0;
-}
-.btn:hover,
-.btn:focus {
- color: #333333;
- text-decoration: none;
- background-position: 0 -15px;
- -webkit-transition: background-position 0.1s linear;
- -moz-transition: background-position 0.1s linear;
- -o-transition: background-position 0.1s linear;
- transition: background-position 0.1s linear;
-}
-.btn:focus {
- outline: thin dotted #333;
- outline: 5px auto -webkit-focus-ring-color;
- outline-offset: -2px;
-}
-.btn.active,
-.btn:active {
- background-image: none;
- outline: 0;
- -webkit-box-shadow: inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);
- -moz-box-shadow: inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);
- box-shadow: inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);
-}
-.btn.disabled,
-.btn[disabled] {
- cursor: default;
- background-image: none;
- opacity: 0.65;
- filter: alpha(opacity=65);
- -webkit-box-shadow: none;
- -moz-box-shadow: none;
- box-shadow: none;
-}
-.btn-large {
- padding: 11px 19px;
- font-size: 16.25px;
- -webkit-border-radius: 6px;
- -moz-border-radius: 6px;
- border-radius: 6px;
-}
-.btn-large [class^="icon-"],
-.btn-large [class*=" icon-"] {
- margin-top: 4px;
-}
-.btn-small {
- padding: 2px 10px;
- font-size: 11.049999999999999px;
- -webkit-border-radius: 3px;
- -moz-border-radius: 3px;
- border-radius: 3px;
-}
-.btn-small [class^="icon-"],
-.btn-small [class*=" icon-"] {
- margin-top: 0;
-}
-.btn-mini [class^="icon-"],
-.btn-mini [class*=" icon-"] {
- margin-top: -1px;
-}
-.btn-mini {
- padding: 0 6px;
- font-size: 9.75px;
- -webkit-border-radius: 3px;
- -moz-border-radius: 3px;
- border-radius: 3px;
-}
-.btn-block {
- display: block;
- width: 100%;
- padding-left: 0;
- padding-right: 0;
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
-}
-.btn-block + .btn-block {
- margin-top: 5px;
-}
-input[type="submit"].btn-block,
-input[type="reset"].btn-block,
-input[type="button"].btn-block {
- width: 100%;
-}
-.btn-primary.active,
-.btn-warning.active,
-.btn-danger.active,
-.btn-success.active,
-.btn-info.active,
-.btn-inverse.active {
- color: rgba(255, 255, 255, 0.75);
-}
-.btn-primary {
- color: #ffffff;
- text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
- background-color: #006dcc;
- background-image: -moz-linear-gradient(top, #0088cc, #0044cc);
- background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc));
- background-image: -webkit-linear-gradient(top, #0088cc, #0044cc);
- background-image: -o-linear-gradient(top, #0088cc, #0044cc);
- background-image: linear-gradient(to bottom, #0088cc, #0044cc);
- background-repeat: repeat-x;
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0044cc', GradientType=0);
- border-color: #0044cc #0044cc #002a80;
- border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
- *background-color: #0044cc;
- /* Darken IE7 buttons by default so they stand out more given they won't have borders */
-
- filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
-}
-.btn-primary:hover,
-.btn-primary:focus,
-.btn-primary:active,
-.btn-primary.active,
-.btn-primary.disabled,
-.btn-primary[disabled] {
- color: #ffffff;
- background-color: #0044cc;
- *background-color: #003bb3;
-}
-.btn-primary:active,
-.btn-primary.active {
- background-color: #003399 \9;
-}
-.btn-primary:hover,
-.btn-primary:focus,
-.btn-primary:active,
-.btn-primary.active,
-.btn-primary.disabled,
-.btn-primary[disabled] {
- color: #ffffff;
- background-color: #0044cc;
- *background-color: #003bb3;
-}
-.btn-primary:active,
-.btn-primary.active {
- background-color: #003399 \9;
-}
-.btn-warning {
- color: #ffffff;
- text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
- background-color: #faa732;
- background-image: -moz-linear-gradient(top, #fbb450, #f89406);
- background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406));
- background-image: -webkit-linear-gradient(top, #fbb450, #f89406);
- background-image: -o-linear-gradient(top, #fbb450, #f89406);
- background-image: linear-gradient(to bottom, #fbb450, #f89406);
- background-repeat: repeat-x;
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450', endColorstr='#fff89406', GradientType=0);
- border-color: #f89406 #f89406 #ad6704;
- border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
- *background-color: #f89406;
- /* Darken IE7 buttons by default so they stand out more given they won't have borders */
-
- filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
-}
-.btn-warning:hover,
-.btn-warning:focus,
-.btn-warning:active,
-.btn-warning.active,
-.btn-warning.disabled,
-.btn-warning[disabled] {
- color: #ffffff;
- background-color: #f89406;
- *background-color: #df8505;
-}
-.btn-warning:active,
-.btn-warning.active {
- background-color: #c67605 \9;
-}
-.btn-warning:hover,
-.btn-warning:focus,
-.btn-warning:active,
-.btn-warning.active,
-.btn-warning.disabled,
-.btn-warning[disabled] {
- color: #ffffff;
- background-color: #f89406;
- *background-color: #df8505;
-}
-.btn-warning:active,
-.btn-warning.active {
- background-color: #c67605 \9;
-}
-.btn-danger {
- color: #ffffff;
- text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
- background-color: #da4f49;
- background-image: -moz-linear-gradient(top, #ee5f5b, #bd362f);
- background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#bd362f));
- background-image: -webkit-linear-gradient(top, #ee5f5b, #bd362f);
- background-image: -o-linear-gradient(top, #ee5f5b, #bd362f);
- background-image: linear-gradient(to bottom, #ee5f5b, #bd362f);
- background-repeat: repeat-x;
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b', endColorstr='#ffbd362f', GradientType=0);
- border-color: #bd362f #bd362f #802420;
- border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
- *background-color: #bd362f;
- /* Darken IE7 buttons by default so they stand out more given they won't have borders */
-
- filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
-}
-.btn-danger:hover,
-.btn-danger:focus,
-.btn-danger:active,
-.btn-danger.active,
-.btn-danger.disabled,
-.btn-danger[disabled] {
- color: #ffffff;
- background-color: #bd362f;
- *background-color: #a9302a;
-}
-.btn-danger:active,
-.btn-danger.active {
- background-color: #942a25 \9;
-}
-.btn-danger:hover,
-.btn-danger:focus,
-.btn-danger:active,
-.btn-danger.active,
-.btn-danger.disabled,
-.btn-danger[disabled] {
- color: #ffffff;
- background-color: #bd362f;
- *background-color: #a9302a;
-}
-.btn-danger:active,
-.btn-danger.active {
- background-color: #942a25 \9;
-}
-.btn-success {
- color: #ffffff;
- text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
- background-color: #5bb75b;
- background-image: -moz-linear-gradient(top, #62c462, #51a351);
- background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#51a351));
- background-image: -webkit-linear-gradient(top, #62c462, #51a351);
- background-image: -o-linear-gradient(top, #62c462, #51a351);
- background-image: linear-gradient(to bottom, #62c462, #51a351);
- background-repeat: repeat-x;
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462', endColorstr='#ff51a351', GradientType=0);
- border-color: #51a351 #51a351 #387038;
- border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
- *background-color: #51a351;
- /* Darken IE7 buttons by default so they stand out more given they won't have borders */
-
- filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
-}
-.btn-success:hover,
-.btn-success:focus,
-.btn-success:active,
-.btn-success.active,
-.btn-success.disabled,
-.btn-success[disabled] {
- color: #ffffff;
- background-color: #51a351;
- *background-color: #499249;
-}
-.btn-success:active,
-.btn-success.active {
- background-color: #408140 \9;
-}
-.btn-success:hover,
-.btn-success:focus,
-.btn-success:active,
-.btn-success.active,
-.btn-success.disabled,
-.btn-success[disabled] {
- color: #ffffff;
- background-color: #51a351;
- *background-color: #499249;
-}
-.btn-success:active,
-.btn-success.active {
- background-color: #408140 \9;
-}
-.btn-info {
- color: #ffffff;
- text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
- background-color: #49afcd;
- background-image: -moz-linear-gradient(top, #5bc0de, #2f96b4);
- background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#2f96b4));
- background-image: -webkit-linear-gradient(top, #5bc0de, #2f96b4);
- background-image: -o-linear-gradient(top, #5bc0de, #2f96b4);
- background-image: linear-gradient(to bottom, #5bc0de, #2f96b4);
- background-repeat: repeat-x;
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2f96b4', GradientType=0);
- border-color: #2f96b4 #2f96b4 #1f6377;
- border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
- *background-color: #2f96b4;
- /* Darken IE7 buttons by default so they stand out more given they won't have borders */
-
- filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
-}
-.btn-info:hover,
-.btn-info:focus,
-.btn-info:active,
-.btn-info.active,
-.btn-info.disabled,
-.btn-info[disabled] {
- color: #ffffff;
- background-color: #2f96b4;
- *background-color: #2a85a0;
-}
-.btn-info:active,
-.btn-info.active {
- background-color: #24748c \9;
-}
-.btn-info:hover,
-.btn-info:focus,
-.btn-info:active,
-.btn-info.active,
-.btn-info.disabled,
-.btn-info[disabled] {
- color: #ffffff;
- background-color: #2f96b4;
- *background-color: #2a85a0;
-}
-.btn-info:active,
-.btn-info.active {
- background-color: #24748c \9;
-}
-.btn-inverse {
- color: #ffffff;
- text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
- background-color: #363636;
- background-image: -moz-linear-gradient(top, #444444, #222222);
- background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#444444), to(#222222));
- background-image: -webkit-linear-gradient(top, #444444, #222222);
- background-image: -o-linear-gradient(top, #444444, #222222);
- background-image: linear-gradient(to bottom, #444444, #222222);
- background-repeat: repeat-x;
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff444444', endColorstr='#ff222222', GradientType=0);
- border-color: #222222 #222222 #000000;
- border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
- *background-color: #222222;
- /* Darken IE7 buttons by default so they stand out more given they won't have borders */
-
- filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
-}
-.btn-inverse:hover,
-.btn-inverse:focus,
-.btn-inverse:active,
-.btn-inverse.active,
-.btn-inverse.disabled,
-.btn-inverse[disabled] {
- color: #ffffff;
- background-color: #222222;
- *background-color: #151515;
-}
-.btn-inverse:active,
-.btn-inverse.active {
- background-color: #080808 \9;
-}
-.btn-inverse:hover,
-.btn-inverse:focus,
-.btn-inverse:active,
-.btn-inverse.active,
-.btn-inverse.disabled,
-.btn-inverse[disabled] {
- color: #ffffff;
- background-color: #222222;
- *background-color: #151515;
-}
-.btn-inverse:active,
-.btn-inverse.active {
- background-color: #080808 \9;
-}
-button.btn,
-input[type="submit"].btn {
- *padding-top: 3px;
- *padding-bottom: 3px;
-}
-button.btn::-moz-focus-inner,
-input[type="submit"].btn::-moz-focus-inner {
- padding: 0;
- border: 0;
-}
-button.btn.btn-large,
-input[type="submit"].btn.btn-large {
- *padding-top: 7px;
- *padding-bottom: 7px;
-}
-button.btn.btn-small,
-input[type="submit"].btn.btn-small {
- *padding-top: 3px;
- *padding-bottom: 3px;
-}
-button.btn.btn-mini,
-input[type="submit"].btn.btn-mini {
- *padding-top: 1px;
- *padding-bottom: 1px;
-}
-.btn-link,
-.btn-link:active,
-.btn-link[disabled] {
- background-color: transparent;
- background-image: none;
- -webkit-box-shadow: none;
- -moz-box-shadow: none;
- box-shadow: none;
-}
-.btn-link {
- border-color: transparent;
- cursor: pointer;
- color: #0088cc;
- -webkit-border-radius: 0;
- -moz-border-radius: 0;
- border-radius: 0;
-}
-.btn-link:hover,
-.btn-link:focus {
- color: #005580;
- text-decoration: underline;
- background-color: transparent;
-}
-.btn-link[disabled]:hover,
-.btn-link[disabled]:focus {
- color: #333333;
- text-decoration: none;
-}
-.btn-group {
- position: relative;
- display: inline-block;
- *display: inline;
- /* IE7 inline-block hack */
-
- *zoom: 1;
- font-size: 0;
- vertical-align: middle;
- white-space: nowrap;
- *margin-left: .3em;
-}
-.btn-group:first-child {
- *margin-left: 0;
-}
-.btn-group:first-child {
- *margin-left: 0;
-}
-.btn-group + .btn-group {
- margin-left: 5px;
-}
-.btn-toolbar {
- font-size: 0;
- margin-top: 9.5px;
- margin-bottom: 9.5px;
-}
-.btn-toolbar > .btn + .btn,
-.btn-toolbar > .btn-group + .btn,
-.btn-toolbar > .btn + .btn-group {
- margin-left: 5px;
-}
-.btn-group > .btn {
- position: relative;
- -webkit-border-radius: 0;
- -moz-border-radius: 0;
- border-radius: 0;
-}
-.btn-group > .btn + .btn {
- margin-left: -1px;
-}
-.btn-group > .btn,
-.btn-group > .dropdown-menu,
-.btn-group > .popover {
- font-size: 13px;
-}
-.btn-group > .btn-mini {
- font-size: 9.75px;
-}
-.btn-group > .btn-small {
- font-size: 11.049999999999999px;
-}
-.btn-group > .btn-large {
- font-size: 16.25px;
-}
-.btn-group > .btn:first-child {
- margin-left: 0;
- -webkit-border-top-left-radius: 4px;
- -moz-border-radius-topleft: 4px;
- border-top-left-radius: 4px;
- -webkit-border-bottom-left-radius: 4px;
- -moz-border-radius-bottomleft: 4px;
- border-bottom-left-radius: 4px;
-}
-.btn-group > .btn:last-child,
-.btn-group > .dropdown-toggle {
- -webkit-border-top-right-radius: 4px;
- -moz-border-radius-topright: 4px;
- border-top-right-radius: 4px;
- -webkit-border-bottom-right-radius: 4px;
- -moz-border-radius-bottomright: 4px;
- border-bottom-right-radius: 4px;
-}
-.btn-group > .btn.large:first-child {
- margin-left: 0;
- -webkit-border-top-left-radius: 6px;
- -moz-border-radius-topleft: 6px;
- border-top-left-radius: 6px;
- -webkit-border-bottom-left-radius: 6px;
- -moz-border-radius-bottomleft: 6px;
- border-bottom-left-radius: 6px;
-}
-.btn-group > .btn.large:last-child,
-.btn-group > .large.dropdown-toggle {
- -webkit-border-top-right-radius: 6px;
- -moz-border-radius-topright: 6px;
- border-top-right-radius: 6px;
- -webkit-border-bottom-right-radius: 6px;
- -moz-border-radius-bottomright: 6px;
- border-bottom-right-radius: 6px;
-}
-.btn-group > .btn:hover,
-.btn-group > .btn:focus,
-.btn-group > .btn:active,
-.btn-group > .btn.active {
- z-index: 2;
-}
-.btn-group .dropdown-toggle:active,
-.btn-group.open .dropdown-toggle {
- outline: 0;
-}
-.btn-group > .btn + .dropdown-toggle {
- padding-left: 8px;
- padding-right: 8px;
- -webkit-box-shadow: inset 1px 0 0 rgba(255,255,255,.125), inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);
- -moz-box-shadow: inset 1px 0 0 rgba(255,255,255,.125), inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);
- box-shadow: inset 1px 0 0 rgba(255,255,255,.125), inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);
- *padding-top: 5px;
- *padding-bottom: 5px;
-}
-.btn-group > .btn-mini + .dropdown-toggle {
- padding-left: 5px;
- padding-right: 5px;
- *padding-top: 2px;
- *padding-bottom: 2px;
-}
-.btn-group > .btn-small + .dropdown-toggle {
- *padding-top: 5px;
- *padding-bottom: 4px;
-}
-.btn-group > .btn-large + .dropdown-toggle {
- padding-left: 12px;
- padding-right: 12px;
- *padding-top: 7px;
- *padding-bottom: 7px;
-}
-.btn-group.open .dropdown-toggle {
- background-image: none;
- -webkit-box-shadow: inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);
- -moz-box-shadow: inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);
- box-shadow: inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);
-}
-.btn-group.open .btn.dropdown-toggle {
- background-color: #e6e6e6;
-}
-.btn-group.open .btn-primary.dropdown-toggle {
- background-color: #0044cc;
-}
-.btn-group.open .btn-warning.dropdown-toggle {
- background-color: #f89406;
-}
-.btn-group.open .btn-danger.dropdown-toggle {
- background-color: #bd362f;
-}
-.btn-group.open .btn-success.dropdown-toggle {
- background-color: #51a351;
-}
-.btn-group.open .btn-info.dropdown-toggle {
- background-color: #2f96b4;
-}
-.btn-group.open .btn-inverse.dropdown-toggle {
- background-color: #222222;
-}
-.btn .caret {
- margin-top: 8px;
- margin-left: 0;
-}
-.btn-large .caret {
- margin-top: 6px;
-}
-.btn-large .caret {
- border-left-width: 5px;
- border-right-width: 5px;
- border-top-width: 5px;
-}
-.btn-mini .caret,
-.btn-small .caret {
- margin-top: 8px;
-}
-.dropup .btn-large .caret {
- border-bottom-width: 5px;
-}
-.btn-primary .caret,
-.btn-warning .caret,
-.btn-danger .caret,
-.btn-info .caret,
-.btn-success .caret,
-.btn-inverse .caret {
- border-top-color: #ffffff;
- border-bottom-color: #ffffff;
-}
-.btn-group-vertical {
- display: inline-block;
- *display: inline;
- /* IE7 inline-block hack */
-
- *zoom: 1;
-}
-.btn-group-vertical > .btn {
- display: block;
- float: none;
- max-width: 100%;
- -webkit-border-radius: 0;
- -moz-border-radius: 0;
- border-radius: 0;
-}
-.btn-group-vertical > .btn + .btn {
- margin-left: 0;
- margin-top: -1px;
-}
-.btn-group-vertical > .btn:first-child {
- -webkit-border-radius: 4px 4px 0 0;
- -moz-border-radius: 4px 4px 0 0;
- border-radius: 4px 4px 0 0;
-}
-.btn-group-vertical > .btn:last-child {
- -webkit-border-radius: 0 0 4px 4px;
- -moz-border-radius: 0 0 4px 4px;
- border-radius: 0 0 4px 4px;
-}
-.btn-group-vertical > .btn-large:first-child {
- -webkit-border-radius: 6px 6px 0 0;
- -moz-border-radius: 6px 6px 0 0;
- border-radius: 6px 6px 0 0;
-}
-.btn-group-vertical > .btn-large:last-child {
- -webkit-border-radius: 0 0 6px 6px;
- -moz-border-radius: 0 0 6px 6px;
- border-radius: 0 0 6px 6px;
-}
-.alert {
- padding: 8px 35px 8px 14px;
- margin-bottom: 19px;
- text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);
- background-color: #fcf8e3;
- border: 1px solid #fbeed5;
- -webkit-border-radius: 4px;
- -moz-border-radius: 4px;
- border-radius: 4px;
-}
-.alert,
-.alert h4 {
- color: #c09853;
-}
-.alert h4 {
- margin: 0;
-}
-.alert .close {
- position: relative;
- top: -2px;
- right: -21px;
- line-height: 19px;
-}
-.alert-success {
- background-color: #dff0d8;
- border-color: #d6e9c6;
- color: #468847;
-}
-.alert-success h4 {
- color: #468847;
-}
-.alert-danger,
-.alert-error {
- background-color: #f2dede;
- border-color: #eed3d7;
- color: #b94a48;
-}
-.alert-danger h4,
-.alert-error h4 {
- color: #b94a48;
-}
-.alert-info {
- background-color: #d9edf7;
- border-color: #bce8f1;
- color: #3a87ad;
-}
-.alert-info h4 {
- color: #3a87ad;
-}
-.alert-block {
- padding-top: 14px;
- padding-bottom: 14px;
-}
-.alert-block > p,
-.alert-block > ul {
- margin-bottom: 0;
-}
-.alert-block p + p {
- margin-top: 5px;
-}
-.nav {
- margin-left: 0;
- margin-bottom: 19px;
- list-style: none;
-}
-.nav > li > a {
- display: block;
-}
-.nav > li > a:hover,
-.nav > li > a:focus {
- text-decoration: none;
- background-color: #eeeeee;
-}
-.nav > li > a > img {
- max-width: none;
-}
-.nav > .pull-right {
- float: right;
-}
-.nav-header {
- display: block;
- padding: 3px 15px;
- font-size: 11px;
- font-weight: bold;
- line-height: 19px;
- color: #999999;
- text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);
- text-transform: uppercase;
-}
-.nav li + .nav-header {
- margin-top: 9px;
-}
-.nav-list {
- padding-left: 15px;
- padding-right: 15px;
- margin-bottom: 0;
-}
-.nav-list > li > a,
-.nav-list .nav-header {
- margin-left: -15px;
- margin-right: -15px;
- text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);
-}
-.nav-list > li > a {
- padding: 3px 15px;
-}
-.nav-list > .active > a,
-.nav-list > .active > a:hover,
-.nav-list > .active > a:focus {
- color: #ffffff;
- text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2);
- background-color: #0088cc;
-}
-.nav-list [class^="icon-"],
-.nav-list [class*=" icon-"] {
- margin-right: 2px;
-}
-.nav-list .divider {
- *width: 100%;
- height: 1px;
- margin: 8.5px 1px;
- *margin: -5px 0 5px;
- overflow: hidden;
- background-color: #e5e5e5;
- border-bottom: 1px solid #ffffff;
-}
-.nav-tabs,
-.nav-pills {
- *zoom: 1;
-}
-.nav-tabs:before,
-.nav-pills:before,
-.nav-tabs:after,
-.nav-pills:after {
- display: table;
- content: "";
- line-height: 0;
-}
-.nav-tabs:after,
-.nav-pills:after {
- clear: both;
-}
-.nav-tabs:before,
-.nav-pills:before,
-.nav-tabs:after,
-.nav-pills:after {
- display: table;
- content: "";
- line-height: 0;
-}
-.nav-tabs:after,
-.nav-pills:after {
- clear: both;
-}
-.nav-tabs > li,
-.nav-pills > li {
- float: left;
-}
-.nav-tabs > li > a,
-.nav-pills > li > a {
- padding-right: 12px;
- padding-left: 12px;
- margin-right: 2px;
- line-height: 14px;
-}
-.nav-tabs {
- border-bottom: 1px solid #ddd;
-}
-.nav-tabs > li {
- margin-bottom: -1px;
-}
-.nav-tabs > li > a {
- padding-top: 8px;
- padding-bottom: 8px;
- line-height: 19px;
- border: 1px solid transparent;
- -webkit-border-radius: 4px 4px 0 0;
- -moz-border-radius: 4px 4px 0 0;
- border-radius: 4px 4px 0 0;
-}
-.nav-tabs > li > a:hover,
-.nav-tabs > li > a:focus {
- border-color: #eeeeee #eeeeee #dddddd;
-}
-.nav-tabs > .active > a,
-.nav-tabs > .active > a:hover,
-.nav-tabs > .active > a:focus {
- color: #555555;
- background-color: #ffffff;
- border: 1px solid #ddd;
- border-bottom-color: transparent;
- cursor: default;
-}
-.nav-pills > li > a {
- padding-top: 8px;
- padding-bottom: 8px;
- margin-top: 2px;
- margin-bottom: 2px;
- -webkit-border-radius: 5px;
- -moz-border-radius: 5px;
- border-radius: 5px;
-}
-.nav-pills > .active > a,
-.nav-pills > .active > a:hover,
-.nav-pills > .active > a:focus {
- color: #ffffff;
- background-color: #0088cc;
-}
-.nav-stacked > li {
- float: none;
-}
-.nav-stacked > li > a {
- margin-right: 0;
-}
-.nav-tabs.nav-stacked {
- border-bottom: 0;
-}
-.nav-tabs.nav-stacked > li > a {
- border: 1px solid #ddd;
- -webkit-border-radius: 0;
- -moz-border-radius: 0;
- border-radius: 0;
-}
-.nav-tabs.nav-stacked > li:first-child > a {
- -webkit-border-top-right-radius: 4px;
- -moz-border-radius-topright: 4px;
- border-top-right-radius: 4px;
- -webkit-border-top-left-radius: 4px;
- -moz-border-radius-topleft: 4px;
- border-top-left-radius: 4px;
-}
-.nav-tabs.nav-stacked > li:last-child > a {
- -webkit-border-bottom-right-radius: 4px;
- -moz-border-radius-bottomright: 4px;
- border-bottom-right-radius: 4px;
- -webkit-border-bottom-left-radius: 4px;
- -moz-border-radius-bottomleft: 4px;
- border-bottom-left-radius: 4px;
-}
-.nav-tabs.nav-stacked > li > a:hover,
-.nav-tabs.nav-stacked > li > a:focus {
- border-color: #ddd;
- z-index: 2;
-}
-.nav-pills.nav-stacked > li > a {
- margin-bottom: 3px;
-}
-.nav-pills.nav-stacked > li:last-child > a {
- margin-bottom: 1px;
-}
-.nav-tabs .dropdown-menu {
- -webkit-border-radius: 0 0 6px 6px;
- -moz-border-radius: 0 0 6px 6px;
- border-radius: 0 0 6px 6px;
-}
-.nav-pills .dropdown-menu {
- -webkit-border-radius: 6px;
- -moz-border-radius: 6px;
- border-radius: 6px;
-}
-.nav .dropdown-toggle .caret {
- border-top-color: #0088cc;
- border-bottom-color: #0088cc;
- margin-top: 6px;
-}
-.nav .dropdown-toggle:hover .caret,
-.nav .dropdown-toggle:focus .caret {
- border-top-color: #005580;
- border-bottom-color: #005580;
-}
-/* move down carets for tabs */
-.nav-tabs .dropdown-toggle .caret {
- margin-top: 8px;
-}
-.nav .active .dropdown-toggle .caret {
- border-top-color: #fff;
- border-bottom-color: #fff;
-}
-.nav-tabs .active .dropdown-toggle .caret {
- border-top-color: #555555;
- border-bottom-color: #555555;
-}
-.nav > .dropdown.active > a:hover,
-.nav > .dropdown.active > a:focus {
- cursor: pointer;
-}
-.nav-tabs .open .dropdown-toggle,
-.nav-pills .open .dropdown-toggle,
-.nav > li.dropdown.open.active > a:hover,
-.nav > li.dropdown.open.active > a:focus {
- color: #ffffff;
- background-color: #999999;
- border-color: #999999;
-}
-.nav li.dropdown.open .caret,
-.nav li.dropdown.open.active .caret,
-.nav li.dropdown.open a:hover .caret,
-.nav li.dropdown.open a:focus .caret {
- border-top-color: #ffffff;
- border-bottom-color: #ffffff;
- opacity: 1;
- filter: alpha(opacity=100);
-}
-.tabs-stacked .open > a:hover,
-.tabs-stacked .open > a:focus {
- border-color: #999999;
-}
-.tabbable {
- *zoom: 1;
-}
-.tabbable:before,
-.tabbable:after {
- display: table;
- content: "";
- line-height: 0;
-}
-.tabbable:after {
- clear: both;
-}
-.tabbable:before,
-.tabbable:after {
- display: table;
- content: "";
- line-height: 0;
-}
-.tabbable:after {
- clear: both;
-}
-.tab-content {
- overflow: auto;
-}
-.tabs-below > .nav-tabs,
-.tabs-right > .nav-tabs,
-.tabs-left > .nav-tabs {
- border-bottom: 0;
-}
-.tab-content > .tab-pane,
-.pill-content > .pill-pane {
- display: none;
-}
-.tab-content > .active,
-.pill-content > .active {
- display: block;
-}
-.tabs-below > .nav-tabs {
- border-top: 1px solid #ddd;
-}
-.tabs-below > .nav-tabs > li {
- margin-top: -1px;
- margin-bottom: 0;
-}
-.tabs-below > .nav-tabs > li > a {
- -webkit-border-radius: 0 0 4px 4px;
- -moz-border-radius: 0 0 4px 4px;
- border-radius: 0 0 4px 4px;
-}
-.tabs-below > .nav-tabs > li > a:hover,
-.tabs-below > .nav-tabs > li > a:focus {
- border-bottom-color: transparent;
- border-top-color: #ddd;
-}
-.tabs-below > .nav-tabs > .active > a,
-.tabs-below > .nav-tabs > .active > a:hover,
-.tabs-below > .nav-tabs > .active > a:focus {
- border-color: transparent #ddd #ddd #ddd;
-}
-.tabs-left > .nav-tabs > li,
-.tabs-right > .nav-tabs > li {
- float: none;
-}
-.tabs-left > .nav-tabs > li > a,
-.tabs-right > .nav-tabs > li > a {
- min-width: 74px;
- margin-right: 0;
- margin-bottom: 3px;
-}
-.tabs-left > .nav-tabs {
- float: left;
- margin-right: 19px;
- border-right: 1px solid #ddd;
-}
-.tabs-left > .nav-tabs > li > a {
- margin-right: -1px;
- -webkit-border-radius: 4px 0 0 4px;
- -moz-border-radius: 4px 0 0 4px;
- border-radius: 4px 0 0 4px;
-}
-.tabs-left > .nav-tabs > li > a:hover,
-.tabs-left > .nav-tabs > li > a:focus {
- border-color: #eeeeee #dddddd #eeeeee #eeeeee;
-}
-.tabs-left > .nav-tabs .active > a,
-.tabs-left > .nav-tabs .active > a:hover,
-.tabs-left > .nav-tabs .active > a:focus {
- border-color: #ddd transparent #ddd #ddd;
- *border-right-color: #ffffff;
-}
-.tabs-right > .nav-tabs {
- float: right;
- margin-left: 19px;
- border-left: 1px solid #ddd;
-}
-.tabs-right > .nav-tabs > li > a {
- margin-left: -1px;
- -webkit-border-radius: 0 4px 4px 0;
- -moz-border-radius: 0 4px 4px 0;
- border-radius: 0 4px 4px 0;
-}
-.tabs-right > .nav-tabs > li > a:hover,
-.tabs-right > .nav-tabs > li > a:focus {
- border-color: #eeeeee #eeeeee #eeeeee #dddddd;
-}
-.tabs-right > .nav-tabs .active > a,
-.tabs-right > .nav-tabs .active > a:hover,
-.tabs-right > .nav-tabs .active > a:focus {
- border-color: #ddd #ddd #ddd transparent;
- *border-left-color: #ffffff;
-}
-.nav > .disabled > a {
- color: #999999;
-}
-.nav > .disabled > a:hover,
-.nav > .disabled > a:focus {
- text-decoration: none;
- background-color: transparent;
- cursor: default;
-}
-.navbar {
- overflow: visible;
- margin-bottom: 19px;
- *position: relative;
- *z-index: 2;
-}
-.navbar-inner {
- min-height: 40px;
- padding-left: 20px;
- padding-right: 20px;
- background-color: #fafafa;
- background-image: -moz-linear-gradient(top, #ffffff, #f2f2f2);
- background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#f2f2f2));
- background-image: -webkit-linear-gradient(top, #ffffff, #f2f2f2);
- background-image: -o-linear-gradient(top, #ffffff, #f2f2f2);
- background-image: linear-gradient(to bottom, #ffffff, #f2f2f2);
- background-repeat: repeat-x;
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff2f2f2', GradientType=0);
- border: 1px solid #d4d4d4;
- -webkit-border-radius: 4px;
- -moz-border-radius: 4px;
- border-radius: 4px;
- -webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065);
- -moz-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065);
- box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065);
- *zoom: 1;
-}
-.navbar-inner:before,
-.navbar-inner:after {
- display: table;
- content: "";
- line-height: 0;
-}
-.navbar-inner:after {
- clear: both;
-}
-.navbar-inner:before,
-.navbar-inner:after {
- display: table;
- content: "";
- line-height: 0;
-}
-.navbar-inner:after {
- clear: both;
-}
-.navbar .container {
- width: auto;
-}
-.nav-collapse.collapse {
- height: auto;
- overflow: visible;
-}
-.navbar .brand {
- float: left;
- display: block;
- padding: 10.5px 20px 10.5px;
- margin-left: -20px;
- font-size: 20px;
- font-weight: 200;
- color: #777777;
- text-shadow: 0 1px 0 #ffffff;
-}
-.navbar .brand:hover,
-.navbar .brand:focus {
- text-decoration: none;
-}
-.navbar-text {
- margin-bottom: 0;
- line-height: 40px;
- color: #777777;
-}
-.navbar-link {
- color: #777777;
-}
-.navbar-link:hover,
-.navbar-link:focus {
- color: #333333;
-}
-.navbar .divider-vertical {
- height: 40px;
- margin: 0 9px;
- border-left: 1px solid #f2f2f2;
- border-right: 1px solid #ffffff;
-}
-.navbar .btn,
-.navbar .btn-group {
- margin-top: 5px;
-}
-.navbar .btn-group .btn,
-.navbar .input-prepend .btn,
-.navbar .input-append .btn,
-.navbar .input-prepend .btn-group,
-.navbar .input-append .btn-group {
- margin-top: 0;
-}
-.navbar-form {
- margin-bottom: 0;
- *zoom: 1;
-}
-.navbar-form:before,
-.navbar-form:after {
- display: table;
- content: "";
- line-height: 0;
-}
-.navbar-form:after {
- clear: both;
-}
-.navbar-form:before,
-.navbar-form:after {
- display: table;
- content: "";
- line-height: 0;
-}
-.navbar-form:after {
- clear: both;
-}
-.navbar-form input,
-.navbar-form select,
-.navbar-form .radio,
-.navbar-form .checkbox {
- margin-top: 5px;
-}
-.navbar-form input,
-.navbar-form select,
-.navbar-form .btn {
- display: inline-block;
- margin-bottom: 0;
-}
-.navbar-form input[type="image"],
-.navbar-form input[type="checkbox"],
-.navbar-form input[type="radio"] {
- margin-top: 3px;
-}
-.navbar-form .input-append,
-.navbar-form .input-prepend {
- margin-top: 5px;
- white-space: nowrap;
-}
-.navbar-form .input-append input,
-.navbar-form .input-prepend input {
- margin-top: 0;
-}
-.navbar-search {
- position: relative;
- float: left;
- margin-top: 5px;
- margin-bottom: 0;
-}
-.navbar-search .search-query {
- margin-bottom: 0;
- padding: 4px 14px;
- font-family: 'Open Sans', sans-serif;
- font-size: 13px;
- font-weight: normal;
- line-height: 1;
- -webkit-border-radius: 15px;
- -moz-border-radius: 15px;
- border-radius: 15px;
-}
-.navbar-static-top {
- position: static;
- margin-bottom: 0;
-}
-.navbar-static-top .navbar-inner {
- -webkit-border-radius: 0;
- -moz-border-radius: 0;
- border-radius: 0;
-}
-.navbar-fixed-top,
-.navbar-fixed-bottom {
- position: fixed;
- right: 0;
- left: 0;
- z-index: 1030;
- margin-bottom: 0;
-}
-.navbar-fixed-top .navbar-inner,
-.navbar-static-top .navbar-inner {
- border-width: 0 0 1px;
-}
-.navbar-fixed-bottom .navbar-inner {
- border-width: 1px 0 0;
-}
-.navbar-fixed-top .navbar-inner,
-.navbar-fixed-bottom .navbar-inner {
- padding-left: 0;
- padding-right: 0;
- -webkit-border-radius: 0;
- -moz-border-radius: 0;
- border-radius: 0;
-}
-.navbar-static-top .container,
-.navbar-fixed-top .container,
-.navbar-fixed-bottom .container {
- width: 940px;
-}
-.navbar-fixed-top {
- top: 0;
-}
-.navbar-fixed-top .navbar-inner,
-.navbar-static-top .navbar-inner {
- -webkit-box-shadow: 0 1px 10px rgba(0,0,0,.1);
- -moz-box-shadow: 0 1px 10px rgba(0,0,0,.1);
- box-shadow: 0 1px 10px rgba(0,0,0,.1);
-}
-.navbar-fixed-bottom {
- bottom: 0;
-}
-.navbar-fixed-bottom .navbar-inner {
- -webkit-box-shadow: 0 -1px 10px rgba(0,0,0,.1);
- -moz-box-shadow: 0 -1px 10px rgba(0,0,0,.1);
- box-shadow: 0 -1px 10px rgba(0,0,0,.1);
-}
-.navbar .nav {
- position: relative;
- left: 0;
- display: block;
- float: left;
- margin: 0 10px 0 0;
-}
-.navbar .nav.pull-right {
- float: right;
- margin-right: 0;
-}
-.navbar .nav > li {
- float: left;
-}
-.navbar .nav > li > a {
- float: none;
- padding: 10.5px 15px 10.5px;
- color: #777777;
- text-decoration: none;
- text-shadow: 0 1px 0 #ffffff;
-}
-.navbar .nav .dropdown-toggle .caret {
- margin-top: 8px;
-}
-.navbar .nav > li > a:focus,
-.navbar .nav > li > a:hover {
- background-color: transparent;
- color: #333333;
- text-decoration: none;
-}
-.navbar .nav > .active > a,
-.navbar .nav > .active > a:hover,
-.navbar .nav > .active > a:focus {
- color: #555555;
- text-decoration: none;
- background-color: #e5e5e5;
- -webkit-box-shadow: inset 0 3px 8px rgba(0, 0, 0, 0.125);
- -moz-box-shadow: inset 0 3px 8px rgba(0, 0, 0, 0.125);
- box-shadow: inset 0 3px 8px rgba(0, 0, 0, 0.125);
-}
-.navbar .btn-navbar {
- display: none;
- float: right;
- padding: 7px 10px;
- margin-left: 5px;
- margin-right: 5px;
- color: #ffffff;
- text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
- background-color: #ededed;
- background-image: -moz-linear-gradient(top, #f2f2f2, #e5e5e5);
- background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f2f2f2), to(#e5e5e5));
- background-image: -webkit-linear-gradient(top, #f2f2f2, #e5e5e5);
- background-image: -o-linear-gradient(top, #f2f2f2, #e5e5e5);
- background-image: linear-gradient(to bottom, #f2f2f2, #e5e5e5);
- background-repeat: repeat-x;
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2f2f2', endColorstr='#ffe5e5e5', GradientType=0);
- border-color: #e5e5e5 #e5e5e5 #bfbfbf;
- border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
- *background-color: #e5e5e5;
- /* Darken IE7 buttons by default so they stand out more given they won't have borders */
-
- filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
- -webkit-box-shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.075);
- -moz-box-shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.075);
- box-shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.075);
-}
-.navbar .btn-navbar:hover,
-.navbar .btn-navbar:focus,
-.navbar .btn-navbar:active,
-.navbar .btn-navbar.active,
-.navbar .btn-navbar.disabled,
-.navbar .btn-navbar[disabled] {
- color: #ffffff;
- background-color: #e5e5e5;
- *background-color: #d9d9d9;
-}
-.navbar .btn-navbar:active,
-.navbar .btn-navbar.active {
- background-color: #cccccc \9;
-}
-.navbar .btn-navbar:hover,
-.navbar .btn-navbar:focus,
-.navbar .btn-navbar:active,
-.navbar .btn-navbar.active,
-.navbar .btn-navbar.disabled,
-.navbar .btn-navbar[disabled] {
- color: #ffffff;
- background-color: #e5e5e5;
- *background-color: #d9d9d9;
-}
-.navbar .btn-navbar:active,
-.navbar .btn-navbar.active {
- background-color: #cccccc \9;
-}
-.navbar .btn-navbar .icon-bar {
- display: block;
- width: 18px;
- height: 2px;
- background-color: #f5f5f5;
- -webkit-border-radius: 1px;
- -moz-border-radius: 1px;
- border-radius: 1px;
- -webkit-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25);
- -moz-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25);
- box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25);
-}
-.btn-navbar .icon-bar + .icon-bar {
- margin-top: 3px;
-}
-.navbar .nav > li > .dropdown-menu:before {
- content: '';
- display: inline-block;
- border-left: 7px solid transparent;
- border-right: 7px solid transparent;
- border-bottom: 7px solid #ccc;
- border-bottom-color: rgba(0, 0, 0, 0.2);
- position: absolute;
- top: -7px;
- left: 9px;
-}
-.navbar .nav > li > .dropdown-menu:after {
- content: '';
- display: inline-block;
- border-left: 6px solid transparent;
- border-right: 6px solid transparent;
- border-bottom: 6px solid #ffffff;
- position: absolute;
- top: -6px;
- left: 10px;
-}
-.navbar-fixed-bottom .nav > li > .dropdown-menu:before {
- border-top: 7px solid #ccc;
- border-top-color: rgba(0, 0, 0, 0.2);
- border-bottom: 0;
- bottom: -7px;
- top: auto;
-}
-.navbar-fixed-bottom .nav > li > .dropdown-menu:after {
- border-top: 6px solid #ffffff;
- border-bottom: 0;
- bottom: -6px;
- top: auto;
-}
-.navbar .nav li.dropdown > a:hover .caret,
-.navbar .nav li.dropdown > a:focus .caret {
- border-top-color: #333333;
- border-bottom-color: #333333;
-}
-.navbar .nav li.dropdown.open > .dropdown-toggle,
-.navbar .nav li.dropdown.active > .dropdown-toggle,
-.navbar .nav li.dropdown.open.active > .dropdown-toggle {
- background-color: #e5e5e5;
- color: #555555;
-}
-.navbar .nav li.dropdown > .dropdown-toggle .caret {
- border-top-color: #777777;
- border-bottom-color: #777777;
-}
-.navbar .nav li.dropdown.open > .dropdown-toggle .caret,
-.navbar .nav li.dropdown.active > .dropdown-toggle .caret,
-.navbar .nav li.dropdown.open.active > .dropdown-toggle .caret {
- border-top-color: #555555;
- border-bottom-color: #555555;
-}
-.navbar .pull-right > li > .dropdown-menu,
-.navbar .nav > li > .dropdown-menu.pull-right {
- left: auto;
- right: 0;
-}
-.navbar .pull-right > li > .dropdown-menu:before,
-.navbar .nav > li > .dropdown-menu.pull-right:before {
- left: auto;
- right: 12px;
-}
-.navbar .pull-right > li > .dropdown-menu:after,
-.navbar .nav > li > .dropdown-menu.pull-right:after {
- left: auto;
- right: 13px;
-}
-.navbar .pull-right > li > .dropdown-menu .dropdown-menu,
-.navbar .nav > li > .dropdown-menu.pull-right .dropdown-menu {
- left: auto;
- right: 100%;
- margin-left: 0;
- margin-right: -1px;
- -webkit-border-radius: 6px 0 6px 6px;
- -moz-border-radius: 6px 0 6px 6px;
- border-radius: 6px 0 6px 6px;
-}
-.navbar-inverse .navbar-inner {
- background-color: #1b1b1b;
- background-image: -moz-linear-gradient(top, #222222, #111111);
- background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#222222), to(#111111));
- background-image: -webkit-linear-gradient(top, #222222, #111111);
- background-image: -o-linear-gradient(top, #222222, #111111);
- background-image: linear-gradient(to bottom, #222222, #111111);
- background-repeat: repeat-x;
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff222222', endColorstr='#ff111111', GradientType=0);
- border-color: #252525;
-}
-.navbar-inverse .brand,
-.navbar-inverse .nav > li > a {
- color: #999999;
- text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
-}
-.navbar-inverse .brand:hover,
-.navbar-inverse .nav > li > a:hover,
-.navbar-inverse .brand:focus,
-.navbar-inverse .nav > li > a:focus {
- color: #ffffff;
-}
-.navbar-inverse .brand {
- color: #999999;
-}
-.navbar-inverse .navbar-text {
- color: #999999;
-}
-.navbar-inverse .nav > li > a:focus,
-.navbar-inverse .nav > li > a:hover {
- background-color: transparent;
- color: #ffffff;
-}
-.navbar-inverse .nav .active > a,
-.navbar-inverse .nav .active > a:hover,
-.navbar-inverse .nav .active > a:focus {
- color: #ffffff;
- background-color: #111111;
-}
-.navbar-inverse .navbar-link {
- color: #999999;
-}
-.navbar-inverse .navbar-link:hover,
-.navbar-inverse .navbar-link:focus {
- color: #ffffff;
-}
-.navbar-inverse .divider-vertical {
- border-left-color: #111111;
- border-right-color: #222222;
-}
-.navbar-inverse .nav li.dropdown.open > .dropdown-toggle,
-.navbar-inverse .nav li.dropdown.active > .dropdown-toggle,
-.navbar-inverse .nav li.dropdown.open.active > .dropdown-toggle {
- background-color: #111111;
- color: #ffffff;
-}
-.navbar-inverse .nav li.dropdown > a:hover .caret,
-.navbar-inverse .nav li.dropdown > a:focus .caret {
- border-top-color: #ffffff;
- border-bottom-color: #ffffff;
-}
-.navbar-inverse .nav li.dropdown > .dropdown-toggle .caret {
- border-top-color: #999999;
- border-bottom-color: #999999;
-}
-.navbar-inverse .nav li.dropdown.open > .dropdown-toggle .caret,
-.navbar-inverse .nav li.dropdown.active > .dropdown-toggle .caret,
-.navbar-inverse .nav li.dropdown.open.active > .dropdown-toggle .caret {
- border-top-color: #ffffff;
- border-bottom-color: #ffffff;
-}
-.navbar-inverse .navbar-search .search-query {
- color: #ffffff;
- background-color: #515151;
- border-color: #111111;
- -webkit-box-shadow: inset 0 1px 2px rgba(0,0,0,.1), 0 1px 0 rgba(255,255,255,.15);
- -moz-box-shadow: inset 0 1px 2px rgba(0,0,0,.1), 0 1px 0 rgba(255,255,255,.15);
- box-shadow: inset 0 1px 2px rgba(0,0,0,.1), 0 1px 0 rgba(255,255,255,.15);
- -webkit-transition: none;
- -moz-transition: none;
- -o-transition: none;
- transition: none;
-}
-.navbar-inverse .navbar-search .search-query:-moz-placeholder {
- color: #cccccc;
-}
-.navbar-inverse .navbar-search .search-query:-ms-input-placeholder {
- color: #cccccc;
-}
-.navbar-inverse .navbar-search .search-query::-webkit-input-placeholder {
- color: #cccccc;
-}
-.navbar-inverse .navbar-search .search-query:-moz-placeholder {
- color: #cccccc;
-}
-.navbar-inverse .navbar-search .search-query:-ms-input-placeholder {
- color: #cccccc;
-}
-.navbar-inverse .navbar-search .search-query::-webkit-input-placeholder {
- color: #cccccc;
-}
-.navbar-inverse .navbar-search .search-query:focus,
-.navbar-inverse .navbar-search .search-query.focused {
- padding: 5px 15px;
- color: #333333;
- text-shadow: 0 1px 0 #ffffff;
- background-color: #ffffff;
- border: 0;
- -webkit-box-shadow: 0 0 3px rgba(0, 0, 0, 0.15);
- -moz-box-shadow: 0 0 3px rgba(0, 0, 0, 0.15);
- box-shadow: 0 0 3px rgba(0, 0, 0, 0.15);
- outline: 0;
-}
-.navbar-inverse .btn-navbar {
- color: #ffffff;
- text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
- background-color: #0e0e0e;
- background-image: -moz-linear-gradient(top, #151515, #040404);
- background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#151515), to(#040404));
- background-image: -webkit-linear-gradient(top, #151515, #040404);
- background-image: -o-linear-gradient(top, #151515, #040404);
- background-image: linear-gradient(to bottom, #151515, #040404);
- background-repeat: repeat-x;
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff151515', endColorstr='#ff040404', GradientType=0);
- border-color: #040404 #040404 #000000;
- border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
- *background-color: #040404;
- /* Darken IE7 buttons by default so they stand out more given they won't have borders */
-
- filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
-}
-.navbar-inverse .btn-navbar:hover,
-.navbar-inverse .btn-navbar:focus,
-.navbar-inverse .btn-navbar:active,
-.navbar-inverse .btn-navbar.active,
-.navbar-inverse .btn-navbar.disabled,
-.navbar-inverse .btn-navbar[disabled] {
- color: #ffffff;
- background-color: #040404;
- *background-color: #000000;
-}
-.navbar-inverse .btn-navbar:active,
-.navbar-inverse .btn-navbar.active {
- background-color: #000000 \9;
-}
-.navbar-inverse .btn-navbar:hover,
-.navbar-inverse .btn-navbar:focus,
-.navbar-inverse .btn-navbar:active,
-.navbar-inverse .btn-navbar.active,
-.navbar-inverse .btn-navbar.disabled,
-.navbar-inverse .btn-navbar[disabled] {
- color: #ffffff;
- background-color: #040404;
- *background-color: #000000;
-}
-.navbar-inverse .btn-navbar:active,
-.navbar-inverse .btn-navbar.active {
- background-color: #000000 \9;
-}
-.breadcrumb {
- padding: 8px 15px;
- margin: 0 0 19px;
- list-style: none;
- background-color: #f5f5f5;
- -webkit-border-radius: 4px;
- -moz-border-radius: 4px;
- border-radius: 4px;
-}
-.breadcrumb > li {
- display: inline-block;
- *display: inline;
- /* IE7 inline-block hack */
-
- *zoom: 1;
- text-shadow: 0 1px 0 #ffffff;
-}
-.breadcrumb > li > .divider {
- padding: 0 5px;
- color: #ccc;
-}
-.breadcrumb > .active {
- color: #999999;
-}
-.pagination {
- margin: 19px 0;
-}
-.pagination ul {
- display: inline-block;
- *display: inline;
- /* IE7 inline-block hack */
-
- *zoom: 1;
- margin-left: 0;
- margin-bottom: 0;
- -webkit-border-radius: 4px;
- -moz-border-radius: 4px;
- border-radius: 4px;
- -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
- -moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
- box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
-}
-.pagination ul > li {
- display: inline;
-}
-.pagination ul > li > a,
-.pagination ul > li > span {
- float: left;
- padding: 4px 12px;
- line-height: 19px;
- text-decoration: none;
- background-color: #ffffff;
- border: 1px solid #dddddd;
- border-left-width: 0;
-}
-.pagination ul > li > a:hover,
-.pagination ul > li > a:focus,
-.pagination ul > .active > a,
-.pagination ul > .active > span {
- background-color: #f5f5f5;
-}
-.pagination ul > .active > a,
-.pagination ul > .active > span {
- color: #999999;
- cursor: default;
-}
-.pagination ul > .disabled > span,
-.pagination ul > .disabled > a,
-.pagination ul > .disabled > a:hover,
-.pagination ul > .disabled > a:focus {
- color: #999999;
- background-color: transparent;
- cursor: default;
-}
-.pagination ul > li:first-child > a,
-.pagination ul > li:first-child > span {
- border-left-width: 1px;
- -webkit-border-top-left-radius: 4px;
- -moz-border-radius-topleft: 4px;
- border-top-left-radius: 4px;
- -webkit-border-bottom-left-radius: 4px;
- -moz-border-radius-bottomleft: 4px;
- border-bottom-left-radius: 4px;
-}
-.pagination ul > li:last-child > a,
-.pagination ul > li:last-child > span {
- -webkit-border-top-right-radius: 4px;
- -moz-border-radius-topright: 4px;
- border-top-right-radius: 4px;
- -webkit-border-bottom-right-radius: 4px;
- -moz-border-radius-bottomright: 4px;
- border-bottom-right-radius: 4px;
-}
-.pagination-centered {
- text-align: center;
-}
-.pagination-right {
- text-align: right;
-}
-.pagination-large ul > li > a,
-.pagination-large ul > li > span {
- padding: 11px 19px;
- font-size: 16.25px;
-}
-.pagination-large ul > li:first-child > a,
-.pagination-large ul > li:first-child > span {
- -webkit-border-top-left-radius: 6px;
- -moz-border-radius-topleft: 6px;
- border-top-left-radius: 6px;
- -webkit-border-bottom-left-radius: 6px;
- -moz-border-radius-bottomleft: 6px;
- border-bottom-left-radius: 6px;
-}
-.pagination-large ul > li:last-child > a,
-.pagination-large ul > li:last-child > span {
- -webkit-border-top-right-radius: 6px;
- -moz-border-radius-topright: 6px;
- border-top-right-radius: 6px;
- -webkit-border-bottom-right-radius: 6px;
- -moz-border-radius-bottomright: 6px;
- border-bottom-right-radius: 6px;
-}
-.pagination-mini ul > li:first-child > a,
-.pagination-small ul > li:first-child > a,
-.pagination-mini ul > li:first-child > span,
-.pagination-small ul > li:first-child > span {
- -webkit-border-top-left-radius: 3px;
- -moz-border-radius-topleft: 3px;
- border-top-left-radius: 3px;
- -webkit-border-bottom-left-radius: 3px;
- -moz-border-radius-bottomleft: 3px;
- border-bottom-left-radius: 3px;
-}
-.pagination-mini ul > li:last-child > a,
-.pagination-small ul > li:last-child > a,
-.pagination-mini ul > li:last-child > span,
-.pagination-small ul > li:last-child > span {
- -webkit-border-top-right-radius: 3px;
- -moz-border-radius-topright: 3px;
- border-top-right-radius: 3px;
- -webkit-border-bottom-right-radius: 3px;
- -moz-border-radius-bottomright: 3px;
- border-bottom-right-radius: 3px;
-}
-.pagination-small ul > li > a,
-.pagination-small ul > li > span {
- padding: 2px 10px;
- font-size: 11.049999999999999px;
-}
-.pagination-mini ul > li > a,
-.pagination-mini ul > li > span {
- padding: 0 6px;
- font-size: 9.75px;
-}
-.pager {
- margin: 19px 0;
- list-style: none;
- text-align: center;
- *zoom: 1;
-}
-.pager:before,
-.pager:after {
- display: table;
- content: "";
- line-height: 0;
-}
-.pager:after {
- clear: both;
-}
-.pager:before,
-.pager:after {
- display: table;
- content: "";
- line-height: 0;
-}
-.pager:after {
- clear: both;
-}
-.pager li {
- display: inline;
-}
-.pager li > a,
-.pager li > span {
- display: inline-block;
- padding: 5px 14px;
- background-color: #fff;
- border: 1px solid #ddd;
- -webkit-border-radius: 15px;
- -moz-border-radius: 15px;
- border-radius: 15px;
-}
-.pager li > a:hover,
-.pager li > a:focus {
- text-decoration: none;
- background-color: #f5f5f5;
-}
-.pager .next > a,
-.pager .next > span {
- float: right;
-}
-.pager .previous > a,
-.pager .previous > span {
- float: left;
-}
-.pager .disabled > a,
-.pager .disabled > a:hover,
-.pager .disabled > a:focus,
-.pager .disabled > span {
- color: #999999;
- background-color: #fff;
- cursor: default;
-}
-.modal-backdrop {
- position: fixed;
- top: 0;
- right: 0;
- bottom: 0;
- left: 0;
- z-index: 1040;
- background-color: #000000;
-}
-.modal-backdrop.fade {
- opacity: 0;
-}
-.modal-backdrop,
-.modal-backdrop.fade.in {
- opacity: 0.8;
- filter: alpha(opacity=80);
-}
-.modal {
- position: fixed;
- top: 10%;
- left: 50%;
- z-index: 1050;
- width: 560px;
- margin-left: -280px;
- background-color: #ffffff;
- border: 1px solid #999;
- border: 1px solid rgba(0, 0, 0, 0.3);
- *border: 1px solid #999;
- /* IE6-7 */
-
- -webkit-border-radius: 6px;
- -moz-border-radius: 6px;
- border-radius: 6px;
- -webkit-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);
- -moz-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);
- box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);
- -webkit-background-clip: padding-box;
- -moz-background-clip: padding-box;
- background-clip: padding-box;
- outline: none;
-}
-.modal.fade {
- -webkit-transition: opacity .3s linear, top .3s ease-out;
- -moz-transition: opacity .3s linear, top .3s ease-out;
- -o-transition: opacity .3s linear, top .3s ease-out;
- transition: opacity .3s linear, top .3s ease-out;
- top: -25%;
-}
-.modal.fade.in {
- top: 10%;
-}
-.modal-header {
- padding: 9px 15px;
- border-bottom: 1px solid #eee;
-}
-.modal-header .close {
- margin-top: 2px;
-}
-.modal-header h3 {
- margin: 0;
- line-height: 30px;
-}
-.modal-body {
- position: relative;
- overflow-y: auto;
- max-height: 400px;
- padding: 15px;
-}
-.modal-form {
- margin-bottom: 0;
-}
-.modal-footer {
- padding: 14px 15px 15px;
- margin-bottom: 0;
- text-align: right;
- background-color: #f5f5f5;
- border-top: 1px solid #ddd;
- -webkit-border-radius: 0 0 6px 6px;
- -moz-border-radius: 0 0 6px 6px;
- border-radius: 0 0 6px 6px;
- -webkit-box-shadow: inset 0 1px 0 #ffffff;
- -moz-box-shadow: inset 0 1px 0 #ffffff;
- box-shadow: inset 0 1px 0 #ffffff;
- *zoom: 1;
-}
-.modal-footer:before,
-.modal-footer:after {
- display: table;
- content: "";
- line-height: 0;
-}
-.modal-footer:after {
- clear: both;
-}
-.modal-footer:before,
-.modal-footer:after {
- display: table;
- content: "";
- line-height: 0;
-}
-.modal-footer:after {
- clear: both;
-}
-.modal-footer .btn + .btn {
- margin-left: 5px;
- margin-bottom: 0;
-}
-.modal-footer .btn-group .btn + .btn {
- margin-left: -1px;
-}
-.modal-footer .btn-block + .btn-block {
- margin-left: 0;
-}
-.tooltip {
- position: absolute;
- z-index: 1030;
- display: block;
- visibility: visible;
- font-size: 11px;
- line-height: 1.4;
- opacity: 0;
- filter: alpha(opacity=0);
-}
-.tooltip.in {
- opacity: 0.8;
- filter: alpha(opacity=80);
-}
-.tooltip.top {
- margin-top: -3px;
- padding: 5px 0;
-}
-.tooltip.right {
- margin-left: 3px;
- padding: 0 5px;
-}
-.tooltip.bottom {
- margin-top: 3px;
- padding: 5px 0;
-}
-.tooltip.left {
- margin-left: -3px;
- padding: 0 5px;
-}
-.tooltip-inner {
- max-width: 200px;
- padding: 8px;
- color: #ffffff;
- text-align: center;
- text-decoration: none;
- background-color: #000000;
- -webkit-border-radius: 4px;
- -moz-border-radius: 4px;
- border-radius: 4px;
-}
-.tooltip-arrow {
- position: absolute;
- width: 0;
- height: 0;
- border-color: transparent;
- border-style: solid;
-}
-.tooltip.top .tooltip-arrow {
- bottom: 0;
- left: 50%;
- margin-left: -5px;
- border-width: 5px 5px 0;
- border-top-color: #000000;
-}
-.tooltip.right .tooltip-arrow {
- top: 50%;
- left: 0;
- margin-top: -5px;
- border-width: 5px 5px 5px 0;
- border-right-color: #000000;
-}
-.tooltip.left .tooltip-arrow {
- top: 50%;
- right: 0;
- margin-top: -5px;
- border-width: 5px 0 5px 5px;
- border-left-color: #000000;
-}
-.tooltip.bottom .tooltip-arrow {
- top: 0;
- left: 50%;
- margin-left: -5px;
- border-width: 0 5px 5px;
- border-bottom-color: #000000;
-}
-.popover {
- position: absolute;
- top: 0;
- left: 0;
- z-index: 1010;
- display: none;
- max-width: 276px;
- padding: 1px;
- text-align: left;
- background-color: #ffffff;
- -webkit-background-clip: padding-box;
- -moz-background-clip: padding;
- background-clip: padding-box;
- border: 1px solid #ccc;
- border: 1px solid rgba(0, 0, 0, 0.2);
- -webkit-border-radius: 6px;
- -moz-border-radius: 6px;
- border-radius: 6px;
- -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
- -moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
- box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
- white-space: normal;
-}
-.popover.top {
- margin-top: -10px;
-}
-.popover.right {
- margin-left: 10px;
-}
-.popover.bottom {
- margin-top: 10px;
-}
-.popover.left {
- margin-left: -10px;
-}
-.popover-title {
- margin: 0;
- padding: 8px 14px;
- font-size: 14px;
- font-weight: normal;
- line-height: 18px;
- background-color: #f7f7f7;
- border-bottom: 1px solid #ebebeb;
- -webkit-border-radius: 5px 5px 0 0;
- -moz-border-radius: 5px 5px 0 0;
- border-radius: 5px 5px 0 0;
-}
-.popover-title:empty {
- display: none;
-}
-.popover-content {
- padding: 9px 14px;
-}
-.popover .arrow,
-.popover .arrow:after {
- position: absolute;
- display: block;
- width: 0;
- height: 0;
- border-color: transparent;
- border-style: solid;
-}
-.popover .arrow {
- border-width: 11px;
-}
-.popover .arrow:after {
- border-width: 10px;
- content: "";
-}
-.popover.top .arrow {
- left: 50%;
- margin-left: -11px;
- border-bottom-width: 0;
- border-top-color: #999;
- border-top-color: rgba(0, 0, 0, 0.25);
- bottom: -11px;
-}
-.popover.top .arrow:after {
- bottom: 1px;
- margin-left: -10px;
- border-bottom-width: 0;
- border-top-color: #ffffff;
-}
-.popover.right .arrow {
- top: 50%;
- left: -11px;
- margin-top: -11px;
- border-left-width: 0;
- border-right-color: #999;
- border-right-color: rgba(0, 0, 0, 0.25);
-}
-.popover.right .arrow:after {
- left: 1px;
- bottom: -10px;
- border-left-width: 0;
- border-right-color: #ffffff;
-}
-.popover.bottom .arrow {
- left: 50%;
- margin-left: -11px;
- border-top-width: 0;
- border-bottom-color: #999;
- border-bottom-color: rgba(0, 0, 0, 0.25);
- top: -11px;
-}
-.popover.bottom .arrow:after {
- top: 1px;
- margin-left: -10px;
- border-top-width: 0;
- border-bottom-color: #ffffff;
-}
-.popover.left .arrow {
- top: 50%;
- right: -11px;
- margin-top: -11px;
- border-right-width: 0;
- border-left-color: #999;
- border-left-color: rgba(0, 0, 0, 0.25);
-}
-.popover.left .arrow:after {
- right: 1px;
- border-right-width: 0;
- border-left-color: #ffffff;
- bottom: -10px;
-}
-.thumbnails {
- margin-left: -20px;
- list-style: none;
- *zoom: 1;
-}
-.thumbnails:before,
-.thumbnails:after {
- display: table;
- content: "";
- line-height: 0;
-}
-.thumbnails:after {
- clear: both;
-}
-.thumbnails:before,
-.thumbnails:after {
- display: table;
- content: "";
- line-height: 0;
-}
-.thumbnails:after {
- clear: both;
-}
-.row-fluid .thumbnails {
- margin-left: 0;
-}
-.thumbnails > li {
- float: left;
- margin-bottom: 19px;
- margin-left: 20px;
-}
-.thumbnail {
- display: block;
- padding: 4px;
- line-height: 19px;
- border: 1px solid #ddd;
- -webkit-border-radius: 4px;
- -moz-border-radius: 4px;
- border-radius: 4px;
- -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.055);
- -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.055);
- box-shadow: 0 1px 3px rgba(0, 0, 0, 0.055);
- -webkit-transition: all 0.2s ease-in-out;
- -moz-transition: all 0.2s ease-in-out;
- -o-transition: all 0.2s ease-in-out;
- transition: all 0.2s ease-in-out;
-}
-a.thumbnail:hover,
-a.thumbnail:focus {
- border-color: #0088cc;
- -webkit-box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25);
- -moz-box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25);
- box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25);
-}
-.thumbnail > img {
- display: block;
- max-width: 100%;
- margin-left: auto;
- margin-right: auto;
-}
-.thumbnail .caption {
- padding: 9px;
- color: #555555;
-}
-.media,
-.media-body {
- overflow: hidden;
- *overflow: visible;
- zoom: 1;
-}
-.media,
-.media .media {
- margin-top: 15px;
-}
-.media:first-child {
- margin-top: 0;
-}
-.media-object {
- display: block;
-}
-.media-heading {
- margin: 0 0 5px;
-}
-.media > .pull-left {
- margin-right: 10px;
-}
-.media > .pull-right {
- margin-left: 10px;
-}
-.media-list {
- margin-left: 0;
- list-style: none;
-}
-.label,
-.badge {
- display: inline-block;
- padding: 2px 4px;
- font-size: 10.998px;
- font-weight: bold;
- line-height: 14px;
- color: #ffffff;
- vertical-align: baseline;
- white-space: nowrap;
- text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
- background-color: #999999;
-}
-.label {
- -webkit-border-radius: 3px;
- -moz-border-radius: 3px;
- border-radius: 3px;
-}
-.badge {
- padding-left: 9px;
- padding-right: 9px;
- -webkit-border-radius: 9px;
- -moz-border-radius: 9px;
- border-radius: 9px;
-}
-.label:empty,
-.badge:empty {
- display: none;
-}
-a.label:hover,
-a.label:focus,
-a.badge:hover,
-a.badge:focus {
- color: #ffffff;
- text-decoration: none;
- cursor: pointer;
-}
-.label-important,
-.badge-important {
- background-color: #b94a48;
-}
-.label-important[href],
-.badge-important[href] {
- background-color: #953b39;
-}
-.label-warning,
-.badge-warning {
- background-color: #f89406;
-}
-.label-warning[href],
-.badge-warning[href] {
- background-color: #c67605;
-}
-.label-success,
-.badge-success {
- background-color: #468847;
-}
-.label-success[href],
-.badge-success[href] {
- background-color: #356635;
-}
-.label-info,
-.badge-info {
- background-color: #3a87ad;
-}
-.label-info[href],
-.badge-info[href] {
- background-color: #2d6987;
-}
-.label-inverse,
-.badge-inverse {
- background-color: #333333;
-}
-.label-inverse[href],
-.badge-inverse[href] {
- background-color: #1a1a1a;
-}
-.btn .label,
-.btn .badge {
- position: relative;
- top: -1px;
-}
-.btn-mini .label,
-.btn-mini .badge {
- top: 0;
-}
-@-webkit-keyframes progress-bar-stripes {
- from {
- background-position: 40px 0;
- }
- to {
- background-position: 0 0;
- }
-}
-@-moz-keyframes progress-bar-stripes {
- from {
- background-position: 40px 0;
- }
- to {
- background-position: 0 0;
- }
-}
-@-ms-keyframes progress-bar-stripes {
- from {
- background-position: 40px 0;
- }
- to {
- background-position: 0 0;
- }
-}
-@-o-keyframes progress-bar-stripes {
- from {
- background-position: 0 0;
- }
- to {
- background-position: 40px 0;
- }
-}
-@keyframes progress-bar-stripes {
- from {
- background-position: 40px 0;
- }
- to {
- background-position: 0 0;
- }
-}
-.progress {
- overflow: hidden;
- height: 19px;
- margin-bottom: 19px;
- background-color: #f7f7f7;
- background-image: -moz-linear-gradient(top, #f5f5f5, #f9f9f9);
- background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f5f5f5), to(#f9f9f9));
- background-image: -webkit-linear-gradient(top, #f5f5f5, #f9f9f9);
- background-image: -o-linear-gradient(top, #f5f5f5, #f9f9f9);
- background-image: linear-gradient(to bottom, #f5f5f5, #f9f9f9);
- background-repeat: repeat-x;
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#fff9f9f9', GradientType=0);
- -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
- -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
- box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
- -webkit-border-radius: 4px;
- -moz-border-radius: 4px;
- border-radius: 4px;
-}
-.progress .bar {
- width: 0%;
- height: 100%;
- color: #ffffff;
- float: left;
- font-size: 12px;
- text-align: center;
- text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
- background-color: #0e90d2;
- background-image: -moz-linear-gradient(top, #149bdf, #0480be);
- background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#149bdf), to(#0480be));
- background-image: -webkit-linear-gradient(top, #149bdf, #0480be);
- background-image: -o-linear-gradient(top, #149bdf, #0480be);
- background-image: linear-gradient(to bottom, #149bdf, #0480be);
- background-repeat: repeat-x;
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff149bdf', endColorstr='#ff0480be', GradientType=0);
- -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
- -moz-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
- box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
- -webkit-transition: width 0.6s ease;
- -moz-transition: width 0.6s ease;
- -o-transition: width 0.6s ease;
- transition: width 0.6s ease;
-}
-.progress .bar + .bar {
- -webkit-box-shadow: inset 1px 0 0 rgba(0,0,0,.15), inset 0 -1px 0 rgba(0,0,0,.15);
- -moz-box-shadow: inset 1px 0 0 rgba(0,0,0,.15), inset 0 -1px 0 rgba(0,0,0,.15);
- box-shadow: inset 1px 0 0 rgba(0,0,0,.15), inset 0 -1px 0 rgba(0,0,0,.15);
-}
-.progress-striped .bar {
- background-color: #149bdf;
- background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));
- background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
- background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
- background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
- background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
- -webkit-background-size: 40px 40px;
- -moz-background-size: 40px 40px;
- -o-background-size: 40px 40px;
- background-size: 40px 40px;
-}
-.progress.active .bar {
- -webkit-animation: progress-bar-stripes 2s linear infinite;
- -moz-animation: progress-bar-stripes 2s linear infinite;
- -ms-animation: progress-bar-stripes 2s linear infinite;
- -o-animation: progress-bar-stripes 2s linear infinite;
- animation: progress-bar-stripes 2s linear infinite;
-}
-.progress-danger .bar,
-.progress .bar-danger {
- background-color: #dd514c;
- background-image: -moz-linear-gradient(top, #ee5f5b, #c43c35);
- background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#c43c35));
- background-image: -webkit-linear-gradient(top, #ee5f5b, #c43c35);
- background-image: -o-linear-gradient(top, #ee5f5b, #c43c35);
- background-image: linear-gradient(to bottom, #ee5f5b, #c43c35);
- background-repeat: repeat-x;
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b', endColorstr='#ffc43c35', GradientType=0);
-}
-.progress-danger.progress-striped .bar,
-.progress-striped .bar-danger {
- background-color: #ee5f5b;
- background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));
- background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
- background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
- background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
- background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
-}
-.progress-success .bar,
-.progress .bar-success {
- background-color: #5eb95e;
- background-image: -moz-linear-gradient(top, #62c462, #57a957);
- background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#57a957));
- background-image: -webkit-linear-gradient(top, #62c462, #57a957);
- background-image: -o-linear-gradient(top, #62c462, #57a957);
- background-image: linear-gradient(to bottom, #62c462, #57a957);
- background-repeat: repeat-x;
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462', endColorstr='#ff57a957', GradientType=0);
-}
-.progress-success.progress-striped .bar,
-.progress-striped .bar-success {
- background-color: #62c462;
- background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));
- background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
- background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
- background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
- background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
-}
-.progress-info .bar,
-.progress .bar-info {
- background-color: #4bb1cf;
- background-image: -moz-linear-gradient(top, #5bc0de, #339bb9);
- background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#339bb9));
- background-image: -webkit-linear-gradient(top, #5bc0de, #339bb9);
- background-image: -o-linear-gradient(top, #5bc0de, #339bb9);
- background-image: linear-gradient(to bottom, #5bc0de, #339bb9);
- background-repeat: repeat-x;
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff339bb9', GradientType=0);
-}
-.progress-info.progress-striped .bar,
-.progress-striped .bar-info {
- background-color: #5bc0de;
- background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));
- background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
- background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
- background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
- background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
-}
-.progress-warning .bar,
-.progress .bar-warning {
- background-color: #faa732;
- background-image: -moz-linear-gradient(top, #fbb450, #f89406);
- background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406));
- background-image: -webkit-linear-gradient(top, #fbb450, #f89406);
- background-image: -o-linear-gradient(top, #fbb450, #f89406);
- background-image: linear-gradient(to bottom, #fbb450, #f89406);
- background-repeat: repeat-x;
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450', endColorstr='#fff89406', GradientType=0);
-}
-.progress-warning.progress-striped .bar,
-.progress-striped .bar-warning {
- background-color: #fbb450;
- background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));
- background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
- background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
- background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
- background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
-}
-.accordion {
- margin-bottom: 19px;
-}
-.accordion-group {
- margin-bottom: 2px;
- border: 1px solid #e5e5e5;
- -webkit-border-radius: 4px;
- -moz-border-radius: 4px;
- border-radius: 4px;
-}
-.accordion-heading {
- border-bottom: 0;
-}
-.accordion-heading .accordion-toggle {
- display: block;
- padding: 8px 15px;
-}
-.accordion-toggle {
- cursor: pointer;
-}
-.accordion-inner {
- padding: 9px 15px;
- border-top: 1px solid #e5e5e5;
-}
-.carousel {
- position: relative;
- margin-bottom: 19px;
- line-height: 1;
-}
-.carousel-inner {
- overflow: hidden;
- width: 100%;
- position: relative;
-}
-.carousel-inner > .item {
- display: none;
- position: relative;
- -webkit-transition: 0.6s ease-in-out left;
- -moz-transition: 0.6s ease-in-out left;
- -o-transition: 0.6s ease-in-out left;
- transition: 0.6s ease-in-out left;
-}
-.carousel-inner > .item > img,
-.carousel-inner > .item > a > img {
- display: block;
- line-height: 1;
-}
-.carousel-inner > .active,
-.carousel-inner > .next,
-.carousel-inner > .prev {
- display: block;
-}
-.carousel-inner > .active {
- left: 0;
-}
-.carousel-inner > .next,
-.carousel-inner > .prev {
- position: absolute;
- top: 0;
- width: 100%;
-}
-.carousel-inner > .next {
- left: 100%;
-}
-.carousel-inner > .prev {
- left: -100%;
-}
-.carousel-inner > .next.left,
-.carousel-inner > .prev.right {
- left: 0;
-}
-.carousel-inner > .active.left {
- left: -100%;
-}
-.carousel-inner > .active.right {
- left: 100%;
-}
-.carousel-control {
- position: absolute;
- top: 40%;
- left: 15px;
- width: 40px;
- height: 40px;
- margin-top: -20px;
- font-size: 60px;
- font-weight: 100;
- line-height: 30px;
- color: #ffffff;
- text-align: center;
- background: #222222;
- border: 3px solid #ffffff;
- -webkit-border-radius: 23px;
- -moz-border-radius: 23px;
- border-radius: 23px;
- opacity: 0.5;
- filter: alpha(opacity=50);
-}
-.carousel-control.right {
- left: auto;
- right: 15px;
-}
-.carousel-control:hover,
-.carousel-control:focus {
- color: #ffffff;
- text-decoration: none;
- opacity: 0.9;
- filter: alpha(opacity=90);
-}
-.carousel-indicators {
- position: absolute;
- top: 15px;
- right: 15px;
- z-index: 5;
- margin: 0;
- list-style: none;
-}
-.carousel-indicators li {
- display: block;
- float: left;
- width: 10px;
- height: 10px;
- margin-left: 5px;
- text-indent: -999px;
- background-color: #ccc;
- background-color: rgba(255, 255, 255, 0.25);
- border-radius: 5px;
-}
-.carousel-indicators .active {
- background-color: #fff;
-}
-.carousel-caption {
- position: absolute;
- left: 0;
- right: 0;
- bottom: 0;
- padding: 15px;
- background: #333333;
- background: rgba(0, 0, 0, 0.75);
-}
-.carousel-caption h4,
-.carousel-caption p {
- color: #ffffff;
- line-height: 19px;
-}
-.carousel-caption h4 {
- margin: 0 0 5px;
-}
-.carousel-caption p {
- margin-bottom: 0;
-}
-.hero-unit {
- padding: 60px;
- margin-bottom: 30px;
- font-size: 18px;
- font-weight: 200;
- line-height: 28.5px;
- color: inherit;
- background-color: #eeeeee;
- -webkit-border-radius: 6px;
- -moz-border-radius: 6px;
- border-radius: 6px;
-}
-.hero-unit h1 {
- margin-bottom: 0;
- font-size: 60px;
- line-height: 1;
- color: inherit;
- letter-spacing: -1px;
-}
-.hero-unit li {
- line-height: 28.5px;
-}
-.pull-right {
- float: right;
-}
-.pull-left {
- float: left;
-}
-.hide {
- display: none;
-}
-.show {
- display: block;
-}
-.invisible {
- visibility: hidden;
-}
-.affix {
- position: fixed;
-}
-/*!
- * Bootstrap Responsive v2.3.1
- *
- * Copyright 2012 Twitter, Inc
- * Licensed under the Apache License v2.0
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Designed and built with all the love in the world @twitter by @mdo and @fat.
- */
-.clearfix {
- *zoom: 1;
-}
-.clearfix:before,
-.clearfix:after {
- display: table;
- content: "";
- line-height: 0;
-}
-.clearfix:after {
- clear: both;
-}
-.hide-text {
- font: 0/0 a;
- color: transparent;
- text-shadow: none;
- background-color: transparent;
- border: 0;
-}
-.input-block-level {
- display: block;
- width: 100%;
- min-height: 29px;
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
-}
-@-ms-viewport {
- width: device-width;
-}
-.hidden {
- display: none;
- visibility: hidden;
-}
-.visible-phone {
- display: none !important;
-}
-.visible-tablet {
- display: none !important;
-}
-.hidden-desktop {
- display: none !important;
-}
-.visible-desktop {
- display: inherit !important;
-}
-@media (min-width: 768px) and (max-width: 979px) {
- .hidden-desktop {
- display: inherit !important;
- }
- .visible-desktop {
- display: none !important ;
- }
- .visible-tablet {
- display: inherit !important;
- }
- .hidden-tablet {
- display: none !important;
- }
-}
-@media (max-width: 767px) {
- .hidden-desktop {
- display: inherit !important;
- }
- .visible-desktop {
- display: none !important;
- }
- .visible-phone {
- display: inherit !important;
- }
- .hidden-phone {
- display: none !important;
- }
-}
-.visible-print {
- display: none !important;
-}
-@media print {
- .visible-print {
- display: inherit !important;
- }
- .hidden-print {
- display: none !important;
- }
-}
-@media (min-width: 1200px) {
- .row {
- margin-left: -30px;
- *zoom: 1;
- }
- .row:before,
- .row:after {
- display: table;
- content: "";
- line-height: 0;
- }
- .row:after {
- clear: both;
- }
- .row:before,
- .row:after {
- display: table;
- content: "";
- line-height: 0;
- }
- .row:after {
- clear: both;
- }
- [class*="span"] {
- float: left;
- min-height: 1px;
- margin-left: 30px;
- }
- .container,
- .navbar-static-top .container,
- .navbar-fixed-top .container,
- .navbar-fixed-bottom .container {
- width: 1170px;
- }
- .span12 {
- width: 1170px;
- }
- .span11 {
- width: 1070px;
- }
- .span10 {
- width: 970px;
- }
- .span9 {
- width: 870px;
- }
- .span8 {
- width: 770px;
- }
- .span7 {
- width: 670px;
- }
- .span6 {
- width: 570px;
- }
- .span5 {
- width: 470px;
- }
- .span4 {
- width: 370px;
- }
- .span3 {
- width: 270px;
- }
- .span2 {
- width: 170px;
- }
- .span1 {
- width: 70px;
- }
- .offset12 {
- margin-left: 1230px;
- }
- .offset11 {
- margin-left: 1130px;
- }
- .offset10 {
- margin-left: 1030px;
- }
- .offset9 {
- margin-left: 930px;
- }
- .offset8 {
- margin-left: 830px;
- }
- .offset7 {
- margin-left: 730px;
- }
- .offset6 {
- margin-left: 630px;
- }
- .offset5 {
- margin-left: 530px;
- }
- .offset4 {
- margin-left: 430px;
- }
- .offset3 {
- margin-left: 330px;
- }
- .offset2 {
- margin-left: 230px;
- }
- .offset1 {
- margin-left: 130px;
- }
- .row {
- margin-left: -30px;
- *zoom: 1;
- }
- .row:before,
- .row:after {
- display: table;
- content: "";
- line-height: 0;
- }
- .row:after {
- clear: both;
- }
- .row:before,
- .row:after {
- display: table;
- content: "";
- line-height: 0;
- }
- .row:after {
- clear: both;
- }
- [class*="span"] {
- float: left;
- min-height: 1px;
- margin-left: 30px;
- }
- .container,
- .navbar-static-top .container,
- .navbar-fixed-top .container,
- .navbar-fixed-bottom .container {
- width: 1170px;
- }
- .span12 {
- width: 1170px;
- }
- .span11 {
- width: 1070px;
- }
- .span10 {
- width: 970px;
- }
- .span9 {
- width: 870px;
- }
- .span8 {
- width: 770px;
- }
- .span7 {
- width: 670px;
- }
- .span6 {
- width: 570px;
- }
- .span5 {
- width: 470px;
- }
- .span4 {
- width: 370px;
- }
- .span3 {
- width: 270px;
- }
- .span2 {
- width: 170px;
- }
- .span1 {
- width: 70px;
- }
- .offset12 {
- margin-left: 1230px;
- }
- .offset11 {
- margin-left: 1130px;
- }
- .offset10 {
- margin-left: 1030px;
- }
- .offset9 {
- margin-left: 930px;
- }
- .offset8 {
- margin-left: 830px;
- }
- .offset7 {
- margin-left: 730px;
- }
- .offset6 {
- margin-left: 630px;
- }
- .offset5 {
- margin-left: 530px;
- }
- .offset4 {
- margin-left: 430px;
- }
- .offset3 {
- margin-left: 330px;
- }
- .offset2 {
- margin-left: 230px;
- }
- .offset1 {
- margin-left: 130px;
- }
- .row-fluid {
- width: 100%;
- *zoom: 1;
- }
- .row-fluid:before,
- .row-fluid:after {
- display: table;
- content: "";
- line-height: 0;
- }
- .row-fluid:after {
- clear: both;
- }
- .row-fluid:before,
- .row-fluid:after {
- display: table;
- content: "";
- line-height: 0;
- }
- .row-fluid:after {
- clear: both;
- }
- .row-fluid [class*="span"] {
- display: block;
- width: 100%;
- min-height: 29px;
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
- float: left;
- margin-left: 2.564102564102564%;
- *margin-left: 2.5109110747408616%;
- }
- .row-fluid [class*="span"]:first-child {
- margin-left: 0;
- }
- .row-fluid .controls-row [class*="span"] + [class*="span"] {
- margin-left: 2.564102564102564%;
- }
- .row-fluid .span12 {
- width: 100%;
- *width: 99.94680851063829%;
- }
- .row-fluid .span11 {
- width: 91.45299145299145%;
- *width: 91.39979996362975%;
- }
- .row-fluid .span10 {
- width: 82.90598290598291%;
- *width: 82.8527914166212%;
- }
- .row-fluid .span9 {
- width: 74.35897435897436%;
- *width: 74.30578286961266%;
- }
- .row-fluid .span8 {
- width: 65.81196581196582%;
- *width: 65.75877432260411%;
- }
- .row-fluid .span7 {
- width: 57.26495726495726%;
- *width: 57.21176577559556%;
- }
- .row-fluid .span6 {
- width: 48.717948717948715%;
- *width: 48.664757228587014%;
- }
- .row-fluid .span5 {
- width: 40.17094017094017%;
- *width: 40.11774868157847%;
- }
- .row-fluid .span4 {
- width: 31.623931623931625%;
- *width: 31.570740134569924%;
- }
- .row-fluid .span3 {
- width: 23.076923076923077%;
- *width: 23.023731587561375%;
- }
- .row-fluid .span2 {
- width: 14.52991452991453%;
- *width: 14.476723040552828%;
- }
- .row-fluid .span1 {
- width: 5.982905982905983%;
- *width: 5.929714493544281%;
- }
- .row-fluid .offset12 {
- margin-left: 105.12820512820512%;
- *margin-left: 105.02182214948171%;
- }
- .row-fluid .offset12:first-child {
- margin-left: 102.56410256410257%;
- *margin-left: 102.45771958537915%;
- }
- .row-fluid .offset11 {
- margin-left: 96.58119658119658%;
- *margin-left: 96.47481360247316%;
- }
- .row-fluid .offset11:first-child {
- margin-left: 94.01709401709402%;
- *margin-left: 93.91071103837061%;
- }
- .row-fluid .offset10 {
- margin-left: 88.03418803418803%;
- *margin-left: 87.92780505546462%;
- }
- .row-fluid .offset10:first-child {
- margin-left: 85.47008547008548%;
- *margin-left: 85.36370249136206%;
- }
- .row-fluid .offset9 {
- margin-left: 79.48717948717949%;
- *margin-left: 79.38079650845607%;
- }
- .row-fluid .offset9:first-child {
- margin-left: 76.92307692307693%;
- *margin-left: 76.81669394435352%;
- }
- .row-fluid .offset8 {
- margin-left: 70.94017094017094%;
- *margin-left: 70.83378796144753%;
- }
- .row-fluid .offset8:first-child {
- margin-left: 68.37606837606839%;
- *margin-left: 68.26968539734497%;
- }
- .row-fluid .offset7 {
- margin-left: 62.393162393162385%;
- *margin-left: 62.28677941443899%;
- }
- .row-fluid .offset7:first-child {
- margin-left: 59.82905982905982%;
- *margin-left: 59.72267685033642%;
- }
- .row-fluid .offset6 {
- margin-left: 53.84615384615384%;
- *margin-left: 53.739770867430444%;
- }
- .row-fluid .offset6:first-child {
- margin-left: 51.28205128205128%;
- *margin-left: 51.175668303327875%;
- }
- .row-fluid .offset5 {
- margin-left: 45.299145299145295%;
- *margin-left: 45.1927623204219%;
- }
- .row-fluid .offset5:first-child {
- margin-left: 42.73504273504273%;
- *margin-left: 42.62865975631933%;
- }
- .row-fluid .offset4 {
- margin-left: 36.75213675213675%;
- *margin-left: 36.645753773413354%;
- }
- .row-fluid .offset4:first-child {
- margin-left: 34.18803418803419%;
- *margin-left: 34.081651209310785%;
- }
- .row-fluid .offset3 {
- margin-left: 28.205128205128204%;
- *margin-left: 28.0987452264048%;
- }
- .row-fluid .offset3:first-child {
- margin-left: 25.641025641025642%;
- *margin-left: 25.53464266230224%;
- }
- .row-fluid .offset2 {
- margin-left: 19.65811965811966%;
- *margin-left: 19.551736679396257%;
- }
- .row-fluid .offset2:first-child {
- margin-left: 17.094017094017094%;
- *margin-left: 16.98763411529369%;
- }
- .row-fluid .offset1 {
- margin-left: 11.11111111111111%;
- *margin-left: 11.004728132387708%;
- }
- .row-fluid .offset1:first-child {
- margin-left: 8.547008547008547%;
- *margin-left: 8.440625568285142%;
- }
- .row-fluid {
- width: 100%;
- *zoom: 1;
- }
- .row-fluid:before,
- .row-fluid:after {
- display: table;
- content: "";
- line-height: 0;
- }
- .row-fluid:after {
- clear: both;
- }
- .row-fluid:before,
- .row-fluid:after {
- display: table;
- content: "";
- line-height: 0;
- }
- .row-fluid:after {
- clear: both;
- }
- .row-fluid [class*="span"] {
- display: block;
- width: 100%;
- min-height: 29px;
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
- float: left;
- margin-left: 2.564102564102564%;
- *margin-left: 2.5109110747408616%;
- }
- .row-fluid [class*="span"]:first-child {
- margin-left: 0;
- }
- .row-fluid .controls-row [class*="span"] + [class*="span"] {
- margin-left: 2.564102564102564%;
- }
- .row-fluid .span12 {
- width: 100%;
- *width: 99.94680851063829%;
- }
- .row-fluid .span11 {
- width: 91.45299145299145%;
- *width: 91.39979996362975%;
- }
- .row-fluid .span10 {
- width: 82.90598290598291%;
- *width: 82.8527914166212%;
- }
- .row-fluid .span9 {
- width: 74.35897435897436%;
- *width: 74.30578286961266%;
- }
- .row-fluid .span8 {
- width: 65.81196581196582%;
- *width: 65.75877432260411%;
- }
- .row-fluid .span7 {
- width: 57.26495726495726%;
- *width: 57.21176577559556%;
- }
- .row-fluid .span6 {
- width: 48.717948717948715%;
- *width: 48.664757228587014%;
- }
- .row-fluid .span5 {
- width: 40.17094017094017%;
- *width: 40.11774868157847%;
- }
- .row-fluid .span4 {
- width: 31.623931623931625%;
- *width: 31.570740134569924%;
- }
- .row-fluid .span3 {
- width: 23.076923076923077%;
- *width: 23.023731587561375%;
- }
- .row-fluid .span2 {
- width: 14.52991452991453%;
- *width: 14.476723040552828%;
- }
- .row-fluid .span1 {
- width: 5.982905982905983%;
- *width: 5.929714493544281%;
- }
- .row-fluid .offset12 {
- margin-left: 105.12820512820512%;
- *margin-left: 105.02182214948171%;
- }
- .row-fluid .offset12:first-child {
- margin-left: 102.56410256410257%;
- *margin-left: 102.45771958537915%;
- }
- .row-fluid .offset11 {
- margin-left: 96.58119658119658%;
- *margin-left: 96.47481360247316%;
- }
- .row-fluid .offset11:first-child {
- margin-left: 94.01709401709402%;
- *margin-left: 93.91071103837061%;
- }
- .row-fluid .offset10 {
- margin-left: 88.03418803418803%;
- *margin-left: 87.92780505546462%;
- }
- .row-fluid .offset10:first-child {
- margin-left: 85.47008547008548%;
- *margin-left: 85.36370249136206%;
- }
- .row-fluid .offset9 {
- margin-left: 79.48717948717949%;
- *margin-left: 79.38079650845607%;
- }
- .row-fluid .offset9:first-child {
- margin-left: 76.92307692307693%;
- *margin-left: 76.81669394435352%;
- }
- .row-fluid .offset8 {
- margin-left: 70.94017094017094%;
- *margin-left: 70.83378796144753%;
- }
- .row-fluid .offset8:first-child {
- margin-left: 68.37606837606839%;
- *margin-left: 68.26968539734497%;
- }
- .row-fluid .offset7 {
- margin-left: 62.393162393162385%;
- *margin-left: 62.28677941443899%;
- }
- .row-fluid .offset7:first-child {
- margin-left: 59.82905982905982%;
- *margin-left: 59.72267685033642%;
- }
- .row-fluid .offset6 {
- margin-left: 53.84615384615384%;
- *margin-left: 53.739770867430444%;
- }
- .row-fluid .offset6:first-child {
- margin-left: 51.28205128205128%;
- *margin-left: 51.175668303327875%;
- }
- .row-fluid .offset5 {
- margin-left: 45.299145299145295%;
- *margin-left: 45.1927623204219%;
- }
- .row-fluid .offset5:first-child {
- margin-left: 42.73504273504273%;
- *margin-left: 42.62865975631933%;
- }
- .row-fluid .offset4 {
- margin-left: 36.75213675213675%;
- *margin-left: 36.645753773413354%;
- }
- .row-fluid .offset4:first-child {
- margin-left: 34.18803418803419%;
- *margin-left: 34.081651209310785%;
- }
- .row-fluid .offset3 {
- margin-left: 28.205128205128204%;
- *margin-left: 28.0987452264048%;
- }
- .row-fluid .offset3:first-child {
- margin-left: 25.641025641025642%;
- *margin-left: 25.53464266230224%;
- }
- .row-fluid .offset2 {
- margin-left: 19.65811965811966%;
- *margin-left: 19.551736679396257%;
- }
- .row-fluid .offset2:first-child {
- margin-left: 17.094017094017094%;
- *margin-left: 16.98763411529369%;
- }
- .row-fluid .offset1 {
- margin-left: 11.11111111111111%;
- *margin-left: 11.004728132387708%;
- }
- .row-fluid .offset1:first-child {
- margin-left: 8.547008547008547%;
- *margin-left: 8.440625568285142%;
- }
- input,
- textarea,
- .uneditable-input {
- margin-left: 0;
- }
- .controls-row [class*="span"] + [class*="span"] {
- margin-left: 30px;
- }
- input.span12,
- textarea.span12,
- .uneditable-input.span12 {
- width: 1156px;
- }
- input.span11,
- textarea.span11,
- .uneditable-input.span11 {
- width: 1056px;
- }
- input.span10,
- textarea.span10,
- .uneditable-input.span10 {
- width: 956px;
- }
- input.span9,
- textarea.span9,
- .uneditable-input.span9 {
- width: 856px;
- }
- input.span8,
- textarea.span8,
- .uneditable-input.span8 {
- width: 756px;
- }
- input.span7,
- textarea.span7,
- .uneditable-input.span7 {
- width: 656px;
- }
- input.span6,
- textarea.span6,
- .uneditable-input.span6 {
- width: 556px;
- }
- input.span5,
- textarea.span5,
- .uneditable-input.span5 {
- width: 456px;
- }
- input.span4,
- textarea.span4,
- .uneditable-input.span4 {
- width: 356px;
- }
- input.span3,
- textarea.span3,
- .uneditable-input.span3 {
- width: 256px;
- }
- input.span2,
- textarea.span2,
- .uneditable-input.span2 {
- width: 156px;
- }
- input.span1,
- textarea.span1,
- .uneditable-input.span1 {
- width: 56px;
- }
- input,
- textarea,
- .uneditable-input {
- margin-left: 0;
- }
- .controls-row [class*="span"] + [class*="span"] {
- margin-left: 30px;
- }
- input.span12,
- textarea.span12,
- .uneditable-input.span12 {
- width: 1156px;
- }
- input.span11,
- textarea.span11,
- .uneditable-input.span11 {
- width: 1056px;
- }
- input.span10,
- textarea.span10,
- .uneditable-input.span10 {
- width: 956px;
- }
- input.span9,
- textarea.span9,
- .uneditable-input.span9 {
- width: 856px;
- }
- input.span8,
- textarea.span8,
- .uneditable-input.span8 {
- width: 756px;
- }
- input.span7,
- textarea.span7,
- .uneditable-input.span7 {
- width: 656px;
- }
- input.span6,
- textarea.span6,
- .uneditable-input.span6 {
- width: 556px;
- }
- input.span5,
- textarea.span5,
- .uneditable-input.span5 {
- width: 456px;
- }
- input.span4,
- textarea.span4,
- .uneditable-input.span4 {
- width: 356px;
- }
- input.span3,
- textarea.span3,
- .uneditable-input.span3 {
- width: 256px;
- }
- input.span2,
- textarea.span2,
- .uneditable-input.span2 {
- width: 156px;
- }
- input.span1,
- textarea.span1,
- .uneditable-input.span1 {
- width: 56px;
- }
- .thumbnails {
- margin-left: -30px;
- }
- .thumbnails > li {
- margin-left: 30px;
- }
- .row-fluid .thumbnails {
- margin-left: 0;
- }
-}
-@media (min-width: 768px) and (max-width: 979px) {
- .row {
- margin-left: -20px;
- *zoom: 1;
- }
- .row:before,
- .row:after {
- display: table;
- content: "";
- line-height: 0;
- }
- .row:after {
- clear: both;
- }
- .row:before,
- .row:after {
- display: table;
- content: "";
- line-height: 0;
- }
- .row:after {
- clear: both;
- }
- [class*="span"] {
- float: left;
- min-height: 1px;
- margin-left: 20px;
- }
- .container,
- .navbar-static-top .container,
- .navbar-fixed-top .container,
- .navbar-fixed-bottom .container {
- width: 724px;
- }
- .span12 {
- width: 724px;
- }
- .span11 {
- width: 662px;
- }
- .span10 {
- width: 600px;
- }
- .span9 {
- width: 538px;
- }
- .span8 {
- width: 476px;
- }
- .span7 {
- width: 414px;
- }
- .span6 {
- width: 352px;
- }
- .span5 {
- width: 290px;
- }
- .span4 {
- width: 228px;
- }
- .span3 {
- width: 166px;
- }
- .span2 {
- width: 104px;
- }
- .span1 {
- width: 42px;
- }
- .offset12 {
- margin-left: 764px;
- }
- .offset11 {
- margin-left: 702px;
- }
- .offset10 {
- margin-left: 640px;
- }
- .offset9 {
- margin-left: 578px;
- }
- .offset8 {
- margin-left: 516px;
- }
- .offset7 {
- margin-left: 454px;
- }
- .offset6 {
- margin-left: 392px;
- }
- .offset5 {
- margin-left: 330px;
- }
- .offset4 {
- margin-left: 268px;
- }
- .offset3 {
- margin-left: 206px;
- }
- .offset2 {
- margin-left: 144px;
- }
- .offset1 {
- margin-left: 82px;
- }
- .row {
- margin-left: -20px;
- *zoom: 1;
- }
- .row:before,
- .row:after {
- display: table;
- content: "";
- line-height: 0;
- }
- .row:after {
- clear: both;
- }
- .row:before,
- .row:after {
- display: table;
- content: "";
- line-height: 0;
- }
- .row:after {
- clear: both;
- }
- [class*="span"] {
- float: left;
- min-height: 1px;
- margin-left: 20px;
- }
- .container,
- .navbar-static-top .container,
- .navbar-fixed-top .container,
- .navbar-fixed-bottom .container {
- width: 724px;
- }
- .span12 {
- width: 724px;
- }
- .span11 {
- width: 662px;
- }
- .span10 {
- width: 600px;
- }
- .span9 {
- width: 538px;
- }
- .span8 {
- width: 476px;
- }
- .span7 {
- width: 414px;
- }
- .span6 {
- width: 352px;
- }
- .span5 {
- width: 290px;
- }
- .span4 {
- width: 228px;
- }
- .span3 {
- width: 166px;
- }
- .span2 {
- width: 104px;
- }
- .span1 {
- width: 42px;
- }
- .offset12 {
- margin-left: 764px;
- }
- .offset11 {
- margin-left: 702px;
- }
- .offset10 {
- margin-left: 640px;
- }
- .offset9 {
- margin-left: 578px;
- }
- .offset8 {
- margin-left: 516px;
- }
- .offset7 {
- margin-left: 454px;
- }
- .offset6 {
- margin-left: 392px;
- }
- .offset5 {
- margin-left: 330px;
- }
- .offset4 {
- margin-left: 268px;
- }
- .offset3 {
- margin-left: 206px;
- }
- .offset2 {
- margin-left: 144px;
- }
- .offset1 {
- margin-left: 82px;
- }
- .row-fluid {
- width: 100%;
- *zoom: 1;
- }
- .row-fluid:before,
- .row-fluid:after {
- display: table;
- content: "";
- line-height: 0;
- }
- .row-fluid:after {
- clear: both;
- }
- .row-fluid:before,
- .row-fluid:after {
- display: table;
- content: "";
- line-height: 0;
- }
- .row-fluid:after {
- clear: both;
- }
- .row-fluid [class*="span"] {
- display: block;
- width: 100%;
- min-height: 29px;
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
- float: left;
- margin-left: 2.7624309392265194%;
- *margin-left: 2.709239449864817%;
- }
- .row-fluid [class*="span"]:first-child {
- margin-left: 0;
- }
- .row-fluid .controls-row [class*="span"] + [class*="span"] {
- margin-left: 2.7624309392265194%;
- }
- .row-fluid .span12 {
- width: 100%;
- *width: 99.94680851063829%;
- }
- .row-fluid .span11 {
- width: 91.43646408839778%;
- *width: 91.38327259903608%;
- }
- .row-fluid .span10 {
- width: 82.87292817679558%;
- *width: 82.81973668743387%;
- }
- .row-fluid .span9 {
- width: 74.30939226519337%;
- *width: 74.25620077583166%;
- }
- .row-fluid .span8 {
- width: 65.74585635359117%;
- *width: 65.69266486422946%;
- }
- .row-fluid .span7 {
- width: 57.18232044198895%;
- *width: 57.12912895262725%;
- }
- .row-fluid .span6 {
- width: 48.61878453038674%;
- *width: 48.56559304102504%;
- }
- .row-fluid .span5 {
- width: 40.05524861878453%;
- *width: 40.00205712942283%;
- }
- .row-fluid .span4 {
- width: 31.491712707182323%;
- *width: 31.43852121782062%;
- }
- .row-fluid .span3 {
- width: 22.92817679558011%;
- *width: 22.87498530621841%;
- }
- .row-fluid .span2 {
- width: 14.3646408839779%;
- *width: 14.311449394616199%;
- }
- .row-fluid .span1 {
- width: 5.801104972375691%;
- *width: 5.747913483013988%;
- }
- .row-fluid .offset12 {
- margin-left: 105.52486187845304%;
- *margin-left: 105.41847889972962%;
- }
- .row-fluid .offset12:first-child {
- margin-left: 102.76243093922652%;
- *margin-left: 102.6560479605031%;
- }
- .row-fluid .offset11 {
- margin-left: 96.96132596685082%;
- *margin-left: 96.8549429881274%;
- }
- .row-fluid .offset11:first-child {
- margin-left: 94.1988950276243%;
- *margin-left: 94.09251204890089%;
- }
- .row-fluid .offset10 {
- margin-left: 88.39779005524862%;
- *margin-left: 88.2914070765252%;
- }
- .row-fluid .offset10:first-child {
- margin-left: 85.6353591160221%;
- *margin-left: 85.52897613729868%;
- }
- .row-fluid .offset9 {
- margin-left: 79.8342541436464%;
- *margin-left: 79.72787116492299%;
- }
- .row-fluid .offset9:first-child {
- margin-left: 77.07182320441989%;
- *margin-left: 76.96544022569647%;
- }
- .row-fluid .offset8 {
- margin-left: 71.2707182320442%;
- *margin-left: 71.16433525332079%;
- }
- .row-fluid .offset8:first-child {
- margin-left: 68.50828729281768%;
- *margin-left: 68.40190431409427%;
- }
- .row-fluid .offset7 {
- margin-left: 62.70718232044199%;
- *margin-left: 62.600799341718584%;
- }
- .row-fluid .offset7:first-child {
- margin-left: 59.94475138121547%;
- *margin-left: 59.838368402492065%;
- }
- .row-fluid .offset6 {
- margin-left: 54.14364640883978%;
- *margin-left: 54.037263430116376%;
- }
- .row-fluid .offset6:first-child {
- margin-left: 51.38121546961326%;
- *margin-left: 51.27483249088986%;
- }
- .row-fluid .offset5 {
- margin-left: 45.58011049723757%;
- *margin-left: 45.47372751851417%;
- }
- .row-fluid .offset5:first-child {
- margin-left: 42.81767955801105%;
- *margin-left: 42.71129657928765%;
- }
- .row-fluid .offset4 {
- margin-left: 37.01657458563536%;
- *margin-left: 36.91019160691196%;
- }
- .row-fluid .offset4:first-child {
- margin-left: 34.25414364640884%;
- *margin-left: 34.14776066768544%;
- }
- .row-fluid .offset3 {
- margin-left: 28.45303867403315%;
- *margin-left: 28.346655695309746%;
- }
- .row-fluid .offset3:first-child {
- margin-left: 25.69060773480663%;
- *margin-left: 25.584224756083227%;
- }
- .row-fluid .offset2 {
- margin-left: 19.88950276243094%;
- *margin-left: 19.783119783707537%;
- }
- .row-fluid .offset2:first-child {
- margin-left: 17.12707182320442%;
- *margin-left: 17.02068884448102%;
- }
- .row-fluid .offset1 {
- margin-left: 11.32596685082873%;
- *margin-left: 11.219583872105325%;
- }
- .row-fluid .offset1:first-child {
- margin-left: 8.56353591160221%;
- *margin-left: 8.457152932878806%;
- }
- .row-fluid {
- width: 100%;
- *zoom: 1;
- }
- .row-fluid:before,
- .row-fluid:after {
- display: table;
- content: "";
- line-height: 0;
- }
- .row-fluid:after {
- clear: both;
- }
- .row-fluid:before,
- .row-fluid:after {
- display: table;
- content: "";
- line-height: 0;
- }
- .row-fluid:after {
- clear: both;
- }
- .row-fluid [class*="span"] {
- display: block;
- width: 100%;
- min-height: 29px;
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
- float: left;
- margin-left: 2.7624309392265194%;
- *margin-left: 2.709239449864817%;
- }
- .row-fluid [class*="span"]:first-child {
- margin-left: 0;
- }
- .row-fluid .controls-row [class*="span"] + [class*="span"] {
- margin-left: 2.7624309392265194%;
- }
- .row-fluid .span12 {
- width: 100%;
- *width: 99.94680851063829%;
- }
- .row-fluid .span11 {
- width: 91.43646408839778%;
- *width: 91.38327259903608%;
- }
- .row-fluid .span10 {
- width: 82.87292817679558%;
- *width: 82.81973668743387%;
- }
- .row-fluid .span9 {
- width: 74.30939226519337%;
- *width: 74.25620077583166%;
- }
- .row-fluid .span8 {
- width: 65.74585635359117%;
- *width: 65.69266486422946%;
- }
- .row-fluid .span7 {
- width: 57.18232044198895%;
- *width: 57.12912895262725%;
- }
- .row-fluid .span6 {
- width: 48.61878453038674%;
- *width: 48.56559304102504%;
- }
- .row-fluid .span5 {
- width: 40.05524861878453%;
- *width: 40.00205712942283%;
- }
- .row-fluid .span4 {
- width: 31.491712707182323%;
- *width: 31.43852121782062%;
- }
- .row-fluid .span3 {
- width: 22.92817679558011%;
- *width: 22.87498530621841%;
- }
- .row-fluid .span2 {
- width: 14.3646408839779%;
- *width: 14.311449394616199%;
- }
- .row-fluid .span1 {
- width: 5.801104972375691%;
- *width: 5.747913483013988%;
- }
- .row-fluid .offset12 {
- margin-left: 105.52486187845304%;
- *margin-left: 105.41847889972962%;
- }
- .row-fluid .offset12:first-child {
- margin-left: 102.76243093922652%;
- *margin-left: 102.6560479605031%;
- }
- .row-fluid .offset11 {
- margin-left: 96.96132596685082%;
- *margin-left: 96.8549429881274%;
- }
- .row-fluid .offset11:first-child {
- margin-left: 94.1988950276243%;
- *margin-left: 94.09251204890089%;
- }
- .row-fluid .offset10 {
- margin-left: 88.39779005524862%;
- *margin-left: 88.2914070765252%;
- }
- .row-fluid .offset10:first-child {
- margin-left: 85.6353591160221%;
- *margin-left: 85.52897613729868%;
- }
- .row-fluid .offset9 {
- margin-left: 79.8342541436464%;
- *margin-left: 79.72787116492299%;
- }
- .row-fluid .offset9:first-child {
- margin-left: 77.07182320441989%;
- *margin-left: 76.96544022569647%;
- }
- .row-fluid .offset8 {
- margin-left: 71.2707182320442%;
- *margin-left: 71.16433525332079%;
- }
- .row-fluid .offset8:first-child {
- margin-left: 68.50828729281768%;
- *margin-left: 68.40190431409427%;
- }
- .row-fluid .offset7 {
- margin-left: 62.70718232044199%;
- *margin-left: 62.600799341718584%;
- }
- .row-fluid .offset7:first-child {
- margin-left: 59.94475138121547%;
- *margin-left: 59.838368402492065%;
- }
- .row-fluid .offset6 {
- margin-left: 54.14364640883978%;
- *margin-left: 54.037263430116376%;
- }
- .row-fluid .offset6:first-child {
- margin-left: 51.38121546961326%;
- *margin-left: 51.27483249088986%;
- }
- .row-fluid .offset5 {
- margin-left: 45.58011049723757%;
- *margin-left: 45.47372751851417%;
- }
- .row-fluid .offset5:first-child {
- margin-left: 42.81767955801105%;
- *margin-left: 42.71129657928765%;
- }
- .row-fluid .offset4 {
- margin-left: 37.01657458563536%;
- *margin-left: 36.91019160691196%;
- }
- .row-fluid .offset4:first-child {
- margin-left: 34.25414364640884%;
- *margin-left: 34.14776066768544%;
- }
- .row-fluid .offset3 {
- margin-left: 28.45303867403315%;
- *margin-left: 28.346655695309746%;
- }
- .row-fluid .offset3:first-child {
- margin-left: 25.69060773480663%;
- *margin-left: 25.584224756083227%;
- }
- .row-fluid .offset2 {
- margin-left: 19.88950276243094%;
- *margin-left: 19.783119783707537%;
- }
- .row-fluid .offset2:first-child {
- margin-left: 17.12707182320442%;
- *margin-left: 17.02068884448102%;
- }
- .row-fluid .offset1 {
- margin-left: 11.32596685082873%;
- *margin-left: 11.219583872105325%;
- }
- .row-fluid .offset1:first-child {
- margin-left: 8.56353591160221%;
- *margin-left: 8.457152932878806%;
- }
- input,
- textarea,
- .uneditable-input {
- margin-left: 0;
- }
- .controls-row [class*="span"] + [class*="span"] {
- margin-left: 20px;
- }
- input.span12,
- textarea.span12,
- .uneditable-input.span12 {
- width: 710px;
- }
- input.span11,
- textarea.span11,
- .uneditable-input.span11 {
- width: 648px;
- }
- input.span10,
- textarea.span10,
- .uneditable-input.span10 {
- width: 586px;
- }
- input.span9,
- textarea.span9,
- .uneditable-input.span9 {
- width: 524px;
- }
- input.span8,
- textarea.span8,
- .uneditable-input.span8 {
- width: 462px;
- }
- input.span7,
- textarea.span7,
- .uneditable-input.span7 {
- width: 400px;
- }
- input.span6,
- textarea.span6,
- .uneditable-input.span6 {
- width: 338px;
- }
- input.span5,
- textarea.span5,
- .uneditable-input.span5 {
- width: 276px;
- }
- input.span4,
- textarea.span4,
- .uneditable-input.span4 {
- width: 214px;
- }
- input.span3,
- textarea.span3,
- .uneditable-input.span3 {
- width: 152px;
- }
- input.span2,
- textarea.span2,
- .uneditable-input.span2 {
- width: 90px;
- }
- input.span1,
- textarea.span1,
- .uneditable-input.span1 {
- width: 28px;
- }
- input,
- textarea,
- .uneditable-input {
- margin-left: 0;
- }
- .controls-row [class*="span"] + [class*="span"] {
- margin-left: 20px;
- }
- input.span12,
- textarea.span12,
- .uneditable-input.span12 {
- width: 710px;
- }
- input.span11,
- textarea.span11,
- .uneditable-input.span11 {
- width: 648px;
- }
- input.span10,
- textarea.span10,
- .uneditable-input.span10 {
- width: 586px;
- }
- input.span9,
- textarea.span9,
- .uneditable-input.span9 {
- width: 524px;
- }
- input.span8,
- textarea.span8,
- .uneditable-input.span8 {
- width: 462px;
- }
- input.span7,
- textarea.span7,
- .uneditable-input.span7 {
- width: 400px;
- }
- input.span6,
- textarea.span6,
- .uneditable-input.span6 {
- width: 338px;
- }
- input.span5,
- textarea.span5,
- .uneditable-input.span5 {
- width: 276px;
- }
- input.span4,
- textarea.span4,
- .uneditable-input.span4 {
- width: 214px;
- }
- input.span3,
- textarea.span3,
- .uneditable-input.span3 {
- width: 152px;
- }
- input.span2,
- textarea.span2,
- .uneditable-input.span2 {
- width: 90px;
- }
- input.span1,
- textarea.span1,
- .uneditable-input.span1 {
- width: 28px;
- }
-}
-@media (max-width: 767px) {
- body {
- padding-left: 20px;
- padding-right: 20px;
- }
- .navbar-fixed-top,
- .navbar-fixed-bottom,
- .navbar-static-top {
- margin-left: -20px;
- margin-right: -20px;
- }
- .container-fluid {
- padding: 0;
- }
- .dl-horizontal dt {
- float: none;
- clear: none;
- width: auto;
- text-align: left;
- }
- .dl-horizontal dd {
- margin-left: 0;
- }
- .container {
- width: auto;
- }
- .row-fluid {
- width: 100%;
- }
- .row,
- .thumbnails {
- margin-left: 0;
- }
- .thumbnails > li {
- float: none;
- margin-left: 0;
- }
- [class*="span"],
- .uneditable-input[class*="span"],
- .row-fluid [class*="span"] {
- float: none;
- display: block;
- width: 100%;
- margin-left: 0;
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
- }
- .span12,
- .row-fluid .span12 {
- width: 100%;
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
- }
- .row-fluid [class*="offset"]:first-child {
- margin-left: 0;
- }
- .input-large,
- .input-xlarge,
- .input-xxlarge,
- input[class*="span"],
- select[class*="span"],
- textarea[class*="span"],
- .uneditable-input {
- display: block;
- width: 100%;
- min-height: 29px;
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
- }
- .input-prepend input,
- .input-append input,
- .input-prepend input[class*="span"],
- .input-append input[class*="span"] {
- display: inline-block;
- width: auto;
- }
- .controls-row [class*="span"] + [class*="span"] {
- margin-left: 0;
- }
- .modal {
- position: fixed;
- top: 20px;
- left: 20px;
- right: 20px;
- width: auto;
- margin: 0;
- }
- .modal.fade {
- top: -100px;
- }
- .modal.fade.in {
- top: 20px;
- }
-}
-@media (max-width: 480px) {
- .nav-collapse {
- -webkit-transform: translate3d(0, 0, 0);
- }
- .page-header h1 small {
- display: block;
- line-height: 19px;
- }
- input[type="checkbox"],
- input[type="radio"] {
- border: 1px solid #ccc;
- }
- .form-horizontal .control-label {
- float: none;
- width: auto;
- padding-top: 0;
- text-align: left;
- }
- .form-horizontal .controls {
- margin-left: 0;
- }
- .form-horizontal .control-list {
- padding-top: 0;
- }
- .form-horizontal .form-actions {
- padding-left: 10px;
- padding-right: 10px;
- }
- .media .pull-left,
- .media .pull-right {
- float: none;
- display: block;
- margin-bottom: 10px;
- }
- .media-object {
- margin-right: 0;
- margin-left: 0;
- }
- .modal {
- top: 10px;
- left: 10px;
- right: 10px;
- }
- .modal-header .close {
- padding: 10px;
- margin: -10px;
- }
- .carousel-caption {
- position: static;
- }
-}
-@media (max-width: 979px) {
- body {
- padding-top: 0;
- }
- .navbar-fixed-top,
- .navbar-fixed-bottom {
- position: static;
- }
- .navbar-fixed-top {
- margin-bottom: 19px;
- }
- .navbar-fixed-bottom {
- margin-top: 19px;
- }
- .navbar-fixed-top .navbar-inner,
- .navbar-fixed-bottom .navbar-inner {
- padding: 5px;
- }
- .navbar .container {
- width: auto;
- padding: 0;
- }
- .navbar .brand {
- padding-left: 10px;
- padding-right: 10px;
- margin: 0 0 0 -5px;
- }
- .nav-collapse {
- clear: both;
- }
- .nav-collapse .nav {
- float: none;
- margin: 0 0 9.5px;
- }
- .nav-collapse .nav > li {
- float: none;
- }
- .nav-collapse .nav > li > a {
- margin-bottom: 2px;
- }
- .nav-collapse .nav > .divider-vertical {
- display: none;
- }
- .nav-collapse .nav .nav-header {
- color: #777777;
- text-shadow: none;
- }
- .nav-collapse .nav > li > a,
- .nav-collapse .dropdown-menu a {
- padding: 9px 15px;
- font-weight: bold;
- color: #777777;
- -webkit-border-radius: 3px;
- -moz-border-radius: 3px;
- border-radius: 3px;
- }
- .nav-collapse .btn {
- padding: 4px 10px 4px;
- font-weight: normal;
- -webkit-border-radius: 4px;
- -moz-border-radius: 4px;
- border-radius: 4px;
- }
- .nav-collapse .dropdown-menu li + li a {
- margin-bottom: 2px;
- }
- .nav-collapse .nav > li > a:hover,
- .nav-collapse .nav > li > a:focus,
- .nav-collapse .dropdown-menu a:hover,
- .nav-collapse .dropdown-menu a:focus {
- background-color: #f2f2f2;
- }
- .navbar-inverse .nav-collapse .nav > li > a,
- .navbar-inverse .nav-collapse .dropdown-menu a {
- color: #999999;
- }
- .navbar-inverse .nav-collapse .nav > li > a:hover,
- .navbar-inverse .nav-collapse .nav > li > a:focus,
- .navbar-inverse .nav-collapse .dropdown-menu a:hover,
- .navbar-inverse .nav-collapse .dropdown-menu a:focus {
- background-color: #111111;
- }
- .nav-collapse.in .btn-group {
- margin-top: 5px;
- padding: 0;
- }
- .nav-collapse .dropdown-menu {
- position: static;
- top: auto;
- left: auto;
- float: none;
- display: none;
- max-width: none;
- margin: 0 15px;
- padding: 0;
- background-color: transparent;
- border: none;
- -webkit-border-radius: 0;
- -moz-border-radius: 0;
- border-radius: 0;
- -webkit-box-shadow: none;
- -moz-box-shadow: none;
- box-shadow: none;
- }
- .nav-collapse .open > .dropdown-menu {
- display: block;
- }
- .nav-collapse .dropdown-menu:before,
- .nav-collapse .dropdown-menu:after {
- display: none;
- }
- .nav-collapse .dropdown-menu .divider {
- display: none;
- }
- .nav-collapse .nav > li > .dropdown-menu:before,
- .nav-collapse .nav > li > .dropdown-menu:after {
- display: none;
- }
- .nav-collapse .navbar-form,
- .nav-collapse .navbar-search {
- float: none;
- padding: 9.5px 15px;
- margin: 9.5px 0;
- border-top: 1px solid #f2f2f2;
- border-bottom: 1px solid #f2f2f2;
- -webkit-box-shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.1);
- -moz-box-shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.1);
- box-shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.1);
- }
- .navbar-inverse .nav-collapse .navbar-form,
- .navbar-inverse .nav-collapse .navbar-search {
- border-top-color: #111111;
- border-bottom-color: #111111;
- }
- .navbar .nav-collapse .nav.pull-right {
- float: none;
- margin-left: 0;
- }
- .nav-collapse,
- .nav-collapse.collapse {
- overflow: hidden;
- height: 0;
- }
- .navbar .btn-navbar {
- display: block;
- }
- .navbar-static .navbar-inner {
- padding-left: 10px;
- padding-right: 10px;
- }
-}
-@media (min-width: 980px) {
- .nav-collapse.collapse {
- height: auto !important;
- overflow: visible !important;
- }
-}
diff --git a/kima/vendor/spleaf/doc/source/_theme/scipy/static/css/spc-extend.css b/kima/vendor/spleaf/doc/source/_theme/scipy/static/css/spc-extend.css
deleted file mode 100644
index 3918954..0000000
--- a/kima/vendor/spleaf/doc/source/_theme/scipy/static/css/spc-extend.css
+++ /dev/null
@@ -1,102 +0,0 @@
-body {
- background-color: #f9faf5;
-}
-.container {
- width: 80%;
-}
-.main {
- background-color: white;
- padding: 18px;
- -moz-box-shadow: 0 0 3px #888;
- -webkit-box-shadow: 0 0 3px #888;
- box-shadow: 0 0 3px #888;
-}
-.underline {
- border-bottom: 1.5px solid #eeeeee;
-}
-.header {
- margin-top: 15px;
- margin-bottom: 15px;
- margin-left: 0px;
- margin-right: 0px;
-}
-.spc-navbar {
- margin-top: 15px;
- margin-bottom: 5px;
- margin-left: 0px;
- margin-right: 0px;
-}
-.spc-navbar .nav-pills {
- margin-bottom: 0px;
- font-size: 12px;
-}
-.spc-navbar .nav-pills > li > a {
- padding-top: 2.5px;
- padding-bottom: 2.5px;
-}
-.underline {
- border-bottom: 1.5px solid #eeeeee;
-}
-.spc-page-title h1,
-.spc-page-title h2,
-.spc-page-title h3,
-.spc-page-title h4 {
- font-weight: normal;
- border-bottom: 1.5px solid #eeeeee;
-}
-.tags .btn {
- border: none;
- font-size: 9.5px;
- font-weight: bold;
-}
-.spc-search-result-title h1,
-.spc-search-result-title h2,
-.spc-search-result-title h3,
-.spc-search-result-title h4 {
- font-weight: normal;
-}
-.spc-snippet-header {
- margin-bottom: 5px;
-}
-.spc-snippet-info {
- padding-top: 10px;
-}
-.spc-snippet-info .dl-horizontal {
- margin: 5px;
-}
-.spc-snippet-info .dl-horizontal dt {
- font-weight: normal;
-}
-.spc-snippet-body {
- padding: 10px;
-}
-.spc-snippet-body .accordion-group {
- border: none;
-}
-.spc-snippet-body .accordion-heading {
- text-transform: uppercase;
- font-size: 14px;
- border-bottom: 1px solid #e5e5e5;
-}
-.spc-snippet-body .accordion-heading .accordion-toggle {
- padding-top: 10px;
- padding-bottom: 5px;
-}
-.spc-rightsidebar {
- color: #555555;
-}
-.spc-rightsidebar .navigation {
- padding: 2px 10px;
- font-size: 11.9px;
-}
-.spc-rightsidebar .navigation .nav-title {
- font-weight: bold;
- text-transform: uppercase;
-}
-.spc-rightsidebar .navigation li {
- margin: 5px;
-}
-.footer {
- padding: 5px;
- font-size: small;
-}
diff --git a/kima/vendor/spleaf/doc/source/_theme/scipy/static/img/glyphicons-halflings-white.png b/kima/vendor/spleaf/doc/source/_theme/scipy/static/img/glyphicons-halflings-white.png
deleted file mode 100644
index 3bf6484..0000000
Binary files a/kima/vendor/spleaf/doc/source/_theme/scipy/static/img/glyphicons-halflings-white.png and /dev/null differ
diff --git a/kima/vendor/spleaf/doc/source/_theme/scipy/static/img/glyphicons-halflings.png b/kima/vendor/spleaf/doc/source/_theme/scipy/static/img/glyphicons-halflings.png
deleted file mode 100644
index a996999..0000000
Binary files a/kima/vendor/spleaf/doc/source/_theme/scipy/static/img/glyphicons-halflings.png and /dev/null differ
diff --git a/kima/vendor/spleaf/doc/source/_theme/scipy/static/img/scipy_org_logo.png b/kima/vendor/spleaf/doc/source/_theme/scipy/static/img/scipy_org_logo.png
deleted file mode 100644
index a45cbe0..0000000
Binary files a/kima/vendor/spleaf/doc/source/_theme/scipy/static/img/scipy_org_logo.png and /dev/null differ
diff --git a/kima/vendor/spleaf/doc/source/_theme/scipy/static/js/copybutton.js b/kima/vendor/spleaf/doc/source/_theme/scipy/static/js/copybutton.js
deleted file mode 100644
index 01ee2ba..0000000
--- a/kima/vendor/spleaf/doc/source/_theme/scipy/static/js/copybutton.js
+++ /dev/null
@@ -1,66 +0,0 @@
-// Copyright 2014 PSF. Licensed under the PYTHON SOFTWARE FOUNDATION LICENSE VERSION 2
-// File originates from the cpython source found in Doc/tools/sphinxext/static/copybutton.js
-
-$(document).ready(function() {
- /* Add a [>>>] button on the top-right corner of code samples to hide
- * the >>> and ... prompts and the output and thus make the code
- * copyable. */
- var div = $('.highlight-python .highlight,' +
- '.highlight-default .highlight,' +
- '.highlight-python3 .highlight')
- var pre = div.find('pre');
-
- // get the styles from the current theme
- pre.parent().parent().css('position', 'relative');
- var hide_text = 'Hide the prompts and output';
- var show_text = 'Show the prompts and output';
- var border_width = pre.css('border-top-width');
- var border_style = pre.css('border-top-style');
- var border_color = pre.css('border-top-color');
- var button_styles = {
- 'cursor':'pointer', 'position': 'absolute', 'top': '0', 'right': '0',
- 'border-color': border_color, 'border-style': border_style,
- 'border-width': border_width, 'color': border_color, 'text-size': '75%',
- 'font-family': 'monospace', 'padding-left': '0.2em', 'padding-right': '0.2em',
- 'border-radius': '0 3px 0 0'
- }
-
- // create and add the button to all the code blocks that contain >>>
- div.each(function(index) {
- var jthis = $(this);
- if (jthis.find('.gp').length > 0) {
- var button = $('
>>>');
- button.css(button_styles)
- button.attr('title', hide_text);
- button.data('hidden', 'false');
- jthis.prepend(button);
- }
- // tracebacks (.gt) contain bare text elements that need to be
- // wrapped in a span to work with .nextUntil() (see later)
- jthis.find('pre:has(.gt)').contents().filter(function() {
- return ((this.nodeType == 3) && (this.data.trim().length > 0));
- }).wrap('
');
- });
-
- // define the behavior of the button when it's clicked
- $('.copybutton').click(function(e){
- e.preventDefault();
- var button = $(this);
- if (button.data('hidden') === 'false') {
- // hide the code output
- button.parent().find('.go, .gp, .gt').hide();
- button.next('pre').find('.gt').nextUntil('.gp, .go').css('visibility', 'hidden');
- button.css('text-decoration', 'line-through');
- button.attr('title', show_text);
- button.data('hidden', 'true');
- } else {
- // show the code output
- button.parent().find('.go, .gp, .gt').show();
- button.next('pre').find('.gt').nextUntil('.gp, .go').css('visibility', 'visible');
- button.css('text-decoration', 'none');
- button.attr('title', hide_text);
- button.data('hidden', 'false');
- }
- });
-});
-
diff --git a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/accordion.less b/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/accordion.less
deleted file mode 100644
index d63523b..0000000
--- a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/accordion.less
+++ /dev/null
@@ -1,34 +0,0 @@
-//
-// Accordion
-// --------------------------------------------------
-
-
-// Parent container
-.accordion {
- margin-bottom: @baseLineHeight;
-}
-
-// Group == heading + body
-.accordion-group {
- margin-bottom: 2px;
- border: 1px solid #e5e5e5;
- .border-radius(@baseBorderRadius);
-}
-.accordion-heading {
- border-bottom: 0;
-}
-.accordion-heading .accordion-toggle {
- display: block;
- padding: 8px 15px;
-}
-
-// General toggle styles
-.accordion-toggle {
- cursor: pointer;
-}
-
-// Inner needs the styles because you can't animate properly with any styles on the element
-.accordion-inner {
- padding: 9px 15px;
- border-top: 1px solid #e5e5e5;
-}
diff --git a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/alerts.less b/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/alerts.less
deleted file mode 100644
index 0116b19..0000000
--- a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/alerts.less
+++ /dev/null
@@ -1,79 +0,0 @@
-//
-// Alerts
-// --------------------------------------------------
-
-
-// Base styles
-// -------------------------
-
-.alert {
- padding: 8px 35px 8px 14px;
- margin-bottom: @baseLineHeight;
- text-shadow: 0 1px 0 rgba(255,255,255,.5);
- background-color: @warningBackground;
- border: 1px solid @warningBorder;
- .border-radius(@baseBorderRadius);
-}
-.alert,
-.alert h4 {
- // Specified for the h4 to prevent conflicts of changing @headingsColor
- color: @warningText;
-}
-.alert h4 {
- margin: 0;
-}
-
-// Adjust close link position
-.alert .close {
- position: relative;
- top: -2px;
- right: -21px;
- line-height: @baseLineHeight;
-}
-
-
-// Alternate styles
-// -------------------------
-
-.alert-success {
- background-color: @successBackground;
- border-color: @successBorder;
- color: @successText;
-}
-.alert-success h4 {
- color: @successText;
-}
-.alert-danger,
-.alert-error {
- background-color: @errorBackground;
- border-color: @errorBorder;
- color: @errorText;
-}
-.alert-danger h4,
-.alert-error h4 {
- color: @errorText;
-}
-.alert-info {
- background-color: @infoBackground;
- border-color: @infoBorder;
- color: @infoText;
-}
-.alert-info h4 {
- color: @infoText;
-}
-
-
-// Block alerts
-// -------------------------
-
-.alert-block {
- padding-top: 14px;
- padding-bottom: 14px;
-}
-.alert-block > p,
-.alert-block > ul {
- margin-bottom: 0;
-}
-.alert-block p + p {
- margin-top: 5px;
-}
diff --git a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/bootstrap.less b/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/bootstrap.less
deleted file mode 100644
index b56327a..0000000
--- a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/bootstrap.less
+++ /dev/null
@@ -1,63 +0,0 @@
-/*!
- * Bootstrap v2.3.1
- *
- * Copyright 2012 Twitter, Inc
- * Licensed under the Apache License v2.0
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Designed and built with all the love in the world @twitter by @mdo and @fat.
- */
-
-// Core variables and mixins
-@import "variables.less"; // Modify this for custom colors, font-sizes, etc
-@import "mixins.less";
-
-// CSS Reset
-@import "reset.less";
-
-// Grid system and page structure
-@import "scaffolding.less";
-@import "grid.less";
-@import "layouts.less";
-
-// Base CSS
-@import "type.less";
-@import "code.less";
-@import "forms.less";
-@import "tables.less";
-
-// Components: common
-@import "sprites.less";
-@import "dropdowns.less";
-@import "wells.less";
-@import "component-animations.less";
-@import "close.less";
-
-// Components: Buttons & Alerts
-@import "buttons.less";
-@import "button-groups.less";
-@import "alerts.less"; // Note: alerts share common CSS with buttons and thus have styles in buttons.less
-
-// Components: Nav
-@import "navs.less";
-@import "navbar.less";
-@import "breadcrumbs.less";
-@import "pagination.less";
-@import "pager.less";
-
-// Components: Popovers
-@import "modals.less";
-@import "tooltip.less";
-@import "popovers.less";
-
-// Components: Misc
-@import "thumbnails.less";
-@import "media.less";
-@import "labels-badges.less";
-@import "progress-bars.less";
-@import "accordion.less";
-@import "carousel.less";
-@import "hero-unit.less";
-
-// Utility classes
-@import "utilities.less"; // Has to be last to override when necessary
diff --git a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/breadcrumbs.less b/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/breadcrumbs.less
deleted file mode 100644
index f753df6..0000000
--- a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/breadcrumbs.less
+++ /dev/null
@@ -1,24 +0,0 @@
-//
-// Breadcrumbs
-// --------------------------------------------------
-
-
-.breadcrumb {
- padding: 8px 15px;
- margin: 0 0 @baseLineHeight;
- list-style: none;
- background-color: #f5f5f5;
- .border-radius(@baseBorderRadius);
- > li {
- display: inline-block;
- .ie7-inline-block();
- text-shadow: 0 1px 0 @white;
- > .divider {
- padding: 0 5px;
- color: #ccc;
- }
- }
- > .active {
- color: @grayLight;
- }
-}
diff --git a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/button-groups.less b/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/button-groups.less
deleted file mode 100644
index 55cdc60..0000000
--- a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/button-groups.less
+++ /dev/null
@@ -1,229 +0,0 @@
-//
-// Button groups
-// --------------------------------------------------
-
-
-// Make the div behave like a button
-.btn-group {
- position: relative;
- display: inline-block;
- .ie7-inline-block();
- font-size: 0; // remove as part 1 of font-size inline-block hack
- vertical-align: middle; // match .btn alignment given font-size hack above
- white-space: nowrap; // prevent buttons from wrapping when in tight spaces (e.g., the table on the tests page)
- .ie7-restore-left-whitespace();
-}
-
-// Space out series of button groups
-.btn-group + .btn-group {
- margin-left: 5px;
-}
-
-// Optional: Group multiple button groups together for a toolbar
-.btn-toolbar {
- font-size: 0; // Hack to remove whitespace that results from using inline-block
- margin-top: @baseLineHeight / 2;
- margin-bottom: @baseLineHeight / 2;
- > .btn + .btn,
- > .btn-group + .btn,
- > .btn + .btn-group {
- margin-left: 5px;
- }
-}
-
-// Float them, remove border radius, then re-add to first and last elements
-.btn-group > .btn {
- position: relative;
- .border-radius(0);
-}
-.btn-group > .btn + .btn {
- margin-left: -1px;
-}
-.btn-group > .btn,
-.btn-group > .dropdown-menu,
-.btn-group > .popover {
- font-size: @baseFontSize; // redeclare as part 2 of font-size inline-block hack
-}
-
-// Reset fonts for other sizes
-.btn-group > .btn-mini {
- font-size: @fontSizeMini;
-}
-.btn-group > .btn-small {
- font-size: @fontSizeSmall;
-}
-.btn-group > .btn-large {
- font-size: @fontSizeLarge;
-}
-
-// Set corners individual because sometimes a single button can be in a .btn-group and we need :first-child and :last-child to both match
-.btn-group > .btn:first-child {
- margin-left: 0;
- .border-top-left-radius(@baseBorderRadius);
- .border-bottom-left-radius(@baseBorderRadius);
-}
-// Need .dropdown-toggle since :last-child doesn't apply given a .dropdown-menu immediately after it
-.btn-group > .btn:last-child,
-.btn-group > .dropdown-toggle {
- .border-top-right-radius(@baseBorderRadius);
- .border-bottom-right-radius(@baseBorderRadius);
-}
-// Reset corners for large buttons
-.btn-group > .btn.large:first-child {
- margin-left: 0;
- .border-top-left-radius(@borderRadiusLarge);
- .border-bottom-left-radius(@borderRadiusLarge);
-}
-.btn-group > .btn.large:last-child,
-.btn-group > .large.dropdown-toggle {
- .border-top-right-radius(@borderRadiusLarge);
- .border-bottom-right-radius(@borderRadiusLarge);
-}
-
-// On hover/focus/active, bring the proper btn to front
-.btn-group > .btn:hover,
-.btn-group > .btn:focus,
-.btn-group > .btn:active,
-.btn-group > .btn.active {
- z-index: 2;
-}
-
-// On active and open, don't show outline
-.btn-group .dropdown-toggle:active,
-.btn-group.open .dropdown-toggle {
- outline: 0;
-}
-
-
-
-// Split button dropdowns
-// ----------------------
-
-// Give the line between buttons some depth
-.btn-group > .btn + .dropdown-toggle {
- padding-left: 8px;
- padding-right: 8px;
- .box-shadow(~"inset 1px 0 0 rgba(255,255,255,.125), inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05)");
- *padding-top: 5px;
- *padding-bottom: 5px;
-}
-.btn-group > .btn-mini + .dropdown-toggle {
- padding-left: 5px;
- padding-right: 5px;
- *padding-top: 2px;
- *padding-bottom: 2px;
-}
-.btn-group > .btn-small + .dropdown-toggle {
- *padding-top: 5px;
- *padding-bottom: 4px;
-}
-.btn-group > .btn-large + .dropdown-toggle {
- padding-left: 12px;
- padding-right: 12px;
- *padding-top: 7px;
- *padding-bottom: 7px;
-}
-
-.btn-group.open {
-
- // The clickable button for toggling the menu
- // Remove the gradient and set the same inset shadow as the :active state
- .dropdown-toggle {
- background-image: none;
- .box-shadow(~"inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05)");
- }
-
- // Keep the hover's background when dropdown is open
- .btn.dropdown-toggle {
- background-color: @btnBackgroundHighlight;
- }
- .btn-primary.dropdown-toggle {
- background-color: @btnPrimaryBackgroundHighlight;
- }
- .btn-warning.dropdown-toggle {
- background-color: @btnWarningBackgroundHighlight;
- }
- .btn-danger.dropdown-toggle {
- background-color: @btnDangerBackgroundHighlight;
- }
- .btn-success.dropdown-toggle {
- background-color: @btnSuccessBackgroundHighlight;
- }
- .btn-info.dropdown-toggle {
- background-color: @btnInfoBackgroundHighlight;
- }
- .btn-inverse.dropdown-toggle {
- background-color: @btnInverseBackgroundHighlight;
- }
-}
-
-
-// Reposition the caret
-.btn .caret {
- margin-top: 8px;
- margin-left: 0;
-}
-// Carets in other button sizes
-.btn-large .caret {
- margin-top: 6px;
-}
-.btn-large .caret {
- border-left-width: 5px;
- border-right-width: 5px;
- border-top-width: 5px;
-}
-.btn-mini .caret,
-.btn-small .caret {
- margin-top: 8px;
-}
-// Upside down carets for .dropup
-.dropup .btn-large .caret {
- border-bottom-width: 5px;
-}
-
-
-
-// Account for other colors
-.btn-primary,
-.btn-warning,
-.btn-danger,
-.btn-info,
-.btn-success,
-.btn-inverse {
- .caret {
- border-top-color: @white;
- border-bottom-color: @white;
- }
-}
-
-
-
-// Vertical button groups
-// ----------------------
-
-.btn-group-vertical {
- display: inline-block; // makes buttons only take up the width they need
- .ie7-inline-block();
-}
-.btn-group-vertical > .btn {
- display: block;
- float: none;
- max-width: 100%;
- .border-radius(0);
-}
-.btn-group-vertical > .btn + .btn {
- margin-left: 0;
- margin-top: -1px;
-}
-.btn-group-vertical > .btn:first-child {
- .border-radius(@baseBorderRadius @baseBorderRadius 0 0);
-}
-.btn-group-vertical > .btn:last-child {
- .border-radius(0 0 @baseBorderRadius @baseBorderRadius);
-}
-.btn-group-vertical > .btn-large:first-child {
- .border-radius(@borderRadiusLarge @borderRadiusLarge 0 0);
-}
-.btn-group-vertical > .btn-large:last-child {
- .border-radius(0 0 @borderRadiusLarge @borderRadiusLarge);
-}
diff --git a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/buttons.less b/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/buttons.less
deleted file mode 100644
index 4cd4d86..0000000
--- a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/buttons.less
+++ /dev/null
@@ -1,228 +0,0 @@
-//
-// Buttons
-// --------------------------------------------------
-
-
-// Base styles
-// --------------------------------------------------
-
-// Core
-.btn {
- display: inline-block;
- .ie7-inline-block();
- padding: 4px 12px;
- margin-bottom: 0; // For input.btn
- font-size: @baseFontSize;
- line-height: @baseLineHeight;
- text-align: center;
- vertical-align: middle;
- cursor: pointer;
- .buttonBackground(@btnBackground, @btnBackgroundHighlight, @grayDark, 0 1px 1px rgba(255,255,255,.75));
- border: 1px solid @btnBorder;
- *border: 0; // Remove the border to prevent IE7's black border on input:focus
- border-bottom-color: darken(@btnBorder, 10%);
- .border-radius(@baseBorderRadius);
- .ie7-restore-left-whitespace(); // Give IE7 some love
- .box-shadow(~"inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05)");
-
- // Hover/focus state
- &:hover,
- &:focus {
- color: @grayDark;
- text-decoration: none;
- background-position: 0 -15px;
-
- // transition is only when going to hover/focus, otherwise the background
- // behind the gradient (there for IE<=9 fallback) gets mismatched
- .transition(background-position .1s linear);
- }
-
- // Focus state for keyboard and accessibility
- &:focus {
- .tab-focus();
- }
-
- // Active state
- &.active,
- &:active {
- background-image: none;
- outline: 0;
- .box-shadow(~"inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05)");
- }
-
- // Disabled state
- &.disabled,
- &[disabled] {
- cursor: default;
- background-image: none;
- .opacity(65);
- .box-shadow(none);
- }
-
-}
-
-
-
-// Button Sizes
-// --------------------------------------------------
-
-// Large
-.btn-large {
- padding: @paddingLarge;
- font-size: @fontSizeLarge;
- .border-radius(@borderRadiusLarge);
-}
-.btn-large [class^="icon-"],
-.btn-large [class*=" icon-"] {
- margin-top: 4px;
-}
-
-// Small
-.btn-small {
- padding: @paddingSmall;
- font-size: @fontSizeSmall;
- .border-radius(@borderRadiusSmall);
-}
-.btn-small [class^="icon-"],
-.btn-small [class*=" icon-"] {
- margin-top: 0;
-}
-.btn-mini [class^="icon-"],
-.btn-mini [class*=" icon-"] {
- margin-top: -1px;
-}
-
-// Mini
-.btn-mini {
- padding: @paddingMini;
- font-size: @fontSizeMini;
- .border-radius(@borderRadiusSmall);
-}
-
-
-// Block button
-// -------------------------
-
-.btn-block {
- display: block;
- width: 100%;
- padding-left: 0;
- padding-right: 0;
- .box-sizing(border-box);
-}
-
-// Vertically space out multiple block buttons
-.btn-block + .btn-block {
- margin-top: 5px;
-}
-
-// Specificity overrides
-input[type="submit"],
-input[type="reset"],
-input[type="button"] {
- &.btn-block {
- width: 100%;
- }
-}
-
-
-
-// Alternate buttons
-// --------------------------------------------------
-
-// Provide *some* extra contrast for those who can get it
-.btn-primary.active,
-.btn-warning.active,
-.btn-danger.active,
-.btn-success.active,
-.btn-info.active,
-.btn-inverse.active {
- color: rgba(255,255,255,.75);
-}
-
-// Set the backgrounds
-// -------------------------
-.btn-primary {
- .buttonBackground(@btnPrimaryBackground, @btnPrimaryBackgroundHighlight);
-}
-// Warning appears are orange
-.btn-warning {
- .buttonBackground(@btnWarningBackground, @btnWarningBackgroundHighlight);
-}
-// Danger and error appear as red
-.btn-danger {
- .buttonBackground(@btnDangerBackground, @btnDangerBackgroundHighlight);
-}
-// Success appears as green
-.btn-success {
- .buttonBackground(@btnSuccessBackground, @btnSuccessBackgroundHighlight);
-}
-// Info appears as a neutral blue
-.btn-info {
- .buttonBackground(@btnInfoBackground, @btnInfoBackgroundHighlight);
-}
-// Inverse appears as dark gray
-.btn-inverse {
- .buttonBackground(@btnInverseBackground, @btnInverseBackgroundHighlight);
-}
-
-
-// Cross-browser Jank
-// --------------------------------------------------
-
-button.btn,
-input[type="submit"].btn {
-
- // Firefox 3.6 only I believe
- &::-moz-focus-inner {
- padding: 0;
- border: 0;
- }
-
- // IE7 has some default padding on button controls
- *padding-top: 3px;
- *padding-bottom: 3px;
-
- &.btn-large {
- *padding-top: 7px;
- *padding-bottom: 7px;
- }
- &.btn-small {
- *padding-top: 3px;
- *padding-bottom: 3px;
- }
- &.btn-mini {
- *padding-top: 1px;
- *padding-bottom: 1px;
- }
-}
-
-
-// Link buttons
-// --------------------------------------------------
-
-// Make a button look and behave like a link
-.btn-link,
-.btn-link:active,
-.btn-link[disabled] {
- background-color: transparent;
- background-image: none;
- .box-shadow(none);
-}
-.btn-link {
- border-color: transparent;
- cursor: pointer;
- color: @linkColor;
- .border-radius(0);
-}
-.btn-link:hover,
-.btn-link:focus {
- color: @linkColorHover;
- text-decoration: underline;
- background-color: transparent;
-}
-.btn-link[disabled]:hover,
-.btn-link[disabled]:focus {
- color: @grayDark;
- text-decoration: none;
-}
diff --git a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/carousel.less b/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/carousel.less
deleted file mode 100644
index 55bc050..0000000
--- a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/carousel.less
+++ /dev/null
@@ -1,158 +0,0 @@
-//
-// Carousel
-// --------------------------------------------------
-
-
-.carousel {
- position: relative;
- margin-bottom: @baseLineHeight;
- line-height: 1;
-}
-
-.carousel-inner {
- overflow: hidden;
- width: 100%;
- position: relative;
-}
-
-.carousel-inner {
-
- > .item {
- display: none;
- position: relative;
- .transition(.6s ease-in-out left);
-
- // Account for jankitude on images
- > img,
- > a > img {
- display: block;
- line-height: 1;
- }
- }
-
- > .active,
- > .next,
- > .prev { display: block; }
-
- > .active {
- left: 0;
- }
-
- > .next,
- > .prev {
- position: absolute;
- top: 0;
- width: 100%;
- }
-
- > .next {
- left: 100%;
- }
- > .prev {
- left: -100%;
- }
- > .next.left,
- > .prev.right {
- left: 0;
- }
-
- > .active.left {
- left: -100%;
- }
- > .active.right {
- left: 100%;
- }
-
-}
-
-// Left/right controls for nav
-// ---------------------------
-
-.carousel-control {
- position: absolute;
- top: 40%;
- left: 15px;
- width: 40px;
- height: 40px;
- margin-top: -20px;
- font-size: 60px;
- font-weight: 100;
- line-height: 30px;
- color: @white;
- text-align: center;
- background: @grayDarker;
- border: 3px solid @white;
- .border-radius(23px);
- .opacity(50);
-
- // we can't have this transition here
- // because webkit cancels the carousel
- // animation if you trip this while
- // in the middle of another animation
- // ;_;
- // .transition(opacity .2s linear);
-
- // Reposition the right one
- &.right {
- left: auto;
- right: 15px;
- }
-
- // Hover/focus state
- &:hover,
- &:focus {
- color: @white;
- text-decoration: none;
- .opacity(90);
- }
-}
-
-// Carousel indicator pips
-// -----------------------------
-.carousel-indicators {
- position: absolute;
- top: 15px;
- right: 15px;
- z-index: 5;
- margin: 0;
- list-style: none;
-
- li {
- display: block;
- float: left;
- width: 10px;
- height: 10px;
- margin-left: 5px;
- text-indent: -999px;
- background-color: #ccc;
- background-color: rgba(255,255,255,.25);
- border-radius: 5px;
- }
- .active {
- background-color: #fff;
- }
-}
-
-// Caption for text below images
-// -----------------------------
-
-.carousel-caption {
- position: absolute;
- left: 0;
- right: 0;
- bottom: 0;
- padding: 15px;
- background: @grayDark;
- background: rgba(0,0,0,.75);
-}
-.carousel-caption h4,
-.carousel-caption p {
- color: @white;
- line-height: @baseLineHeight;
-}
-.carousel-caption h4 {
- margin: 0 0 5px;
-}
-.carousel-caption p {
- margin-bottom: 0;
-}
diff --git a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/close.less b/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/close.less
deleted file mode 100644
index 4c626bd..0000000
--- a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/close.less
+++ /dev/null
@@ -1,32 +0,0 @@
-//
-// Close icons
-// --------------------------------------------------
-
-
-.close {
- float: right;
- font-size: 20px;
- font-weight: bold;
- line-height: @baseLineHeight;
- color: @black;
- text-shadow: 0 1px 0 rgba(255,255,255,1);
- .opacity(20);
- &:hover,
- &:focus {
- color: @black;
- text-decoration: none;
- cursor: pointer;
- .opacity(40);
- }
-}
-
-// Additional properties for button version
-// iOS requires the button element instead of an anchor tag.
-// If you want the anchor version, it requires `href="#"`.
-button.close {
- padding: 0;
- cursor: pointer;
- background: transparent;
- border: 0;
- -webkit-appearance: none;
-}
\ No newline at end of file
diff --git a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/code.less b/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/code.less
deleted file mode 100644
index 266a926..0000000
--- a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/code.less
+++ /dev/null
@@ -1,61 +0,0 @@
-//
-// Code (inline and blocK)
-// --------------------------------------------------
-
-
-// Inline and block code styles
-code,
-pre {
- padding: 0 3px 2px;
- #font > #family > .monospace;
- font-size: @baseFontSize - 2;
- color: @grayDark;
- .border-radius(3px);
-}
-
-// Inline code
-code {
- padding: 2px 4px;
- color: #d14;
- background-color: #f7f7f9;
- border: 1px solid #e1e1e8;
- white-space: nowrap;
-}
-
-// Blocks of code
-pre {
- display: block;
- padding: (@baseLineHeight - 1) / 2;
- margin: 0 0 @baseLineHeight / 2;
- font-size: @baseFontSize - 1; // 14px to 13px
- line-height: @baseLineHeight;
- word-break: break-all;
- word-wrap: break-word;
- white-space: pre;
- white-space: pre-wrap;
- background-color: #f5f5f5;
- border: 1px solid #ccc; // fallback for IE7-8
- border: 1px solid rgba(0,0,0,.15);
- .border-radius(@baseBorderRadius);
-
- // Make prettyprint styles more spaced out for readability
- &.prettyprint {
- margin-bottom: @baseLineHeight;
- }
-
- // Account for some code outputs that place code tags in pre tags
- code {
- padding: 0;
- color: inherit;
- white-space: pre;
- white-space: pre-wrap;
- background-color: transparent;
- border: 0;
- }
-}
-
-// Enable scrollable blocks of code
-.pre-scrollable {
- max-height: 340px;
- overflow-y: scroll;
-}
\ No newline at end of file
diff --git a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/component-animations.less b/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/component-animations.less
deleted file mode 100644
index d614263..0000000
--- a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/component-animations.less
+++ /dev/null
@@ -1,22 +0,0 @@
-//
-// Component animations
-// --------------------------------------------------
-
-
-.fade {
- opacity: 0;
- .transition(opacity .15s linear);
- &.in {
- opacity: 1;
- }
-}
-
-.collapse {
- position: relative;
- height: 0;
- overflow: hidden;
- .transition(height .35s ease);
- &.in {
- height: auto;
- }
-}
diff --git a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/dropdowns.less b/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/dropdowns.less
deleted file mode 100644
index bbfe3fd..0000000
--- a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/dropdowns.less
+++ /dev/null
@@ -1,237 +0,0 @@
-//
-// Dropdown menus
-// --------------------------------------------------
-
-
-// Use the .menu class on any element within the topbar or ul.tabs and you'll get some superfancy dropdowns
-.dropup,
-.dropdown {
- position: relative;
-}
-.dropdown-toggle {
- // The caret makes the toggle a bit too tall in IE7
- *margin-bottom: -3px;
-}
-.dropdown-toggle:active,
-.open .dropdown-toggle {
- outline: 0;
-}
-
-// Dropdown arrow/caret
-// --------------------
-.caret {
- display: inline-block;
- width: 0;
- height: 0;
- vertical-align: top;
- border-top: 4px solid @black;
- border-right: 4px solid transparent;
- border-left: 4px solid transparent;
- content: "";
-}
-
-// Place the caret
-.dropdown .caret {
- margin-top: 8px;
- margin-left: 2px;
-}
-
-// The dropdown menu (ul)
-// ----------------------
-.dropdown-menu {
- position: absolute;
- top: 100%;
- left: 0;
- z-index: @zindexDropdown;
- display: none; // none by default, but block on "open" of the menu
- float: left;
- min-width: 160px;
- padding: 5px 0;
- margin: 2px 0 0; // override default ul
- list-style: none;
- background-color: @dropdownBackground;
- border: 1px solid #ccc; // Fallback for IE7-8
- border: 1px solid @dropdownBorder;
- *border-right-width: 2px;
- *border-bottom-width: 2px;
- .border-radius(6px);
- .box-shadow(0 5px 10px rgba(0,0,0,.2));
- -webkit-background-clip: padding-box;
- -moz-background-clip: padding;
- background-clip: padding-box;
-
- // Aligns the dropdown menu to right
- &.pull-right {
- right: 0;
- left: auto;
- }
-
- // Dividers (basically an hr) within the dropdown
- .divider {
- .nav-divider(@dropdownDividerTop, @dropdownDividerBottom);
- }
-
- // Links within the dropdown menu
- > li > a {
- display: block;
- padding: 3px 20px;
- clear: both;
- font-weight: normal;
- line-height: @baseLineHeight;
- color: @dropdownLinkColor;
- white-space: nowrap;
- }
-}
-
-// Hover/Focus state
-// -----------
-.dropdown-menu > li > a:hover,
-.dropdown-menu > li > a:focus,
-.dropdown-submenu:hover > a,
-.dropdown-submenu:focus > a {
- text-decoration: none;
- color: @dropdownLinkColorHover;
- #gradient > .vertical(@dropdownLinkBackgroundHover, darken(@dropdownLinkBackgroundHover, 5%));
-}
-
-// Active state
-// ------------
-.dropdown-menu > .active > a,
-.dropdown-menu > .active > a:hover,
-.dropdown-menu > .active > a:focus {
- color: @dropdownLinkColorActive;
- text-decoration: none;
- outline: 0;
- #gradient > .vertical(@dropdownLinkBackgroundActive, darken(@dropdownLinkBackgroundActive, 5%));
-}
-
-// Disabled state
-// --------------
-// Gray out text and ensure the hover/focus state remains gray
-.dropdown-menu > .disabled > a,
-.dropdown-menu > .disabled > a:hover,
-.dropdown-menu > .disabled > a:focus {
- color: @grayLight;
-}
-// Nuke hover/focus effects
-.dropdown-menu > .disabled > a:hover,
-.dropdown-menu > .disabled > a:focus {
- text-decoration: none;
- background-color: transparent;
- background-image: none; // Remove CSS gradient
- .reset-filter();
- cursor: default;
-}
-
-// Open state for the dropdown
-// ---------------------------
-.open {
- // IE7's z-index only goes to the nearest positioned ancestor, which would
- // make the menu appear below buttons that appeared later on the page
- *z-index: @zindexDropdown;
-
- & > .dropdown-menu {
- display: block;
- }
-}
-
-// Right aligned dropdowns
-// ---------------------------
-.pull-right > .dropdown-menu {
- right: 0;
- left: auto;
-}
-
-// Allow for dropdowns to go bottom up (aka, dropup-menu)
-// ------------------------------------------------------
-// Just add .dropup after the standard .dropdown class and you're set, bro.
-// TODO: abstract this so that the navbar fixed styles are not placed here?
-.dropup,
-.navbar-fixed-bottom .dropdown {
- // Reverse the caret
- .caret {
- border-top: 0;
- border-bottom: 4px solid @black;
- content: "";
- }
- // Different positioning for bottom up menu
- .dropdown-menu {
- top: auto;
- bottom: 100%;
- margin-bottom: 1px;
- }
-}
-
-// Sub menus
-// ---------------------------
-.dropdown-submenu {
- position: relative;
-}
-// Default dropdowns
-.dropdown-submenu > .dropdown-menu {
- top: 0;
- left: 100%;
- margin-top: -6px;
- margin-left: -1px;
- .border-radius(0 6px 6px 6px);
-}
-.dropdown-submenu:hover > .dropdown-menu {
- display: block;
-}
-
-// Dropups
-.dropup .dropdown-submenu > .dropdown-menu {
- top: auto;
- bottom: 0;
- margin-top: 0;
- margin-bottom: -2px;
- .border-radius(5px 5px 5px 0);
-}
-
-// Caret to indicate there is a submenu
-.dropdown-submenu > a:after {
- display: block;
- content: " ";
- float: right;
- width: 0;
- height: 0;
- border-color: transparent;
- border-style: solid;
- border-width: 5px 0 5px 5px;
- border-left-color: darken(@dropdownBackground, 20%);
- margin-top: 5px;
- margin-right: -10px;
-}
-.dropdown-submenu:hover > a:after {
- border-left-color: @dropdownLinkColorHover;
-}
-
-// Left aligned submenus
-.dropdown-submenu.pull-left {
- // Undo the float
- // Yes, this is awkward since .pull-left adds a float, but it sticks to our conventions elsewhere.
- float: none;
-
- // Positioning the submenu
- > .dropdown-menu {
- left: -100%;
- margin-left: 10px;
- .border-radius(6px 0 6px 6px);
- }
-}
-
-// Tweak nav headers
-// -----------------
-// Increase padding from 15px to 20px on sides
-.dropdown .dropdown-menu .nav-header {
- padding-left: 20px;
- padding-right: 20px;
-}
-
-// Typeahead
-// ---------
-.typeahead {
- z-index: 1051;
- margin-top: 2px; // give it some space to breathe
- .border-radius(@baseBorderRadius);
-}
diff --git a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/forms.less b/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/forms.less
deleted file mode 100644
index 14bf4dd..0000000
--- a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/forms.less
+++ /dev/null
@@ -1,690 +0,0 @@
-//
-// Forms
-// --------------------------------------------------
-
-
-// GENERAL STYLES
-// --------------
-
-// Make all forms have space below them
-form {
- margin: 0 0 @baseLineHeight;
-}
-
-fieldset {
- padding: 0;
- margin: 0;
- border: 0;
-}
-
-// Groups of fields with labels on top (legends)
-legend {
- display: block;
- width: 100%;
- padding: 0;
- margin-bottom: @baseLineHeight;
- font-size: @baseFontSize * 1.5;
- line-height: @baseLineHeight * 2;
- color: @grayDark;
- border: 0;
- border-bottom: 1px solid #e5e5e5;
-
- // Small
- small {
- font-size: @baseLineHeight * .75;
- color: @grayLight;
- }
-}
-
-// Set font for forms
-label,
-input,
-button,
-select,
-textarea {
- #font > .shorthand(@baseFontSize,normal,@baseLineHeight); // Set size, weight, line-height here
-}
-input,
-button,
-select,
-textarea {
- font-family: @baseFontFamily; // And only set font-family here for those that need it (note the missing label element)
-}
-
-// Identify controls by their labels
-label {
- display: block;
- margin-bottom: 5px;
-}
-
-// Form controls
-// -------------------------
-
-// Shared size and type resets
-select,
-textarea,
-input[type="text"],
-input[type="password"],
-input[type="datetime"],
-input[type="datetime-local"],
-input[type="date"],
-input[type="month"],
-input[type="time"],
-input[type="week"],
-input[type="number"],
-input[type="email"],
-input[type="url"],
-input[type="search"],
-input[type="tel"],
-input[type="color"],
-.uneditable-input {
- display: inline-block;
- height: @baseLineHeight;
- padding: 4px 6px;
- margin-bottom: @baseLineHeight / 2;
- font-size: @baseFontSize;
- line-height: @baseLineHeight;
- color: @gray;
- .border-radius(@inputBorderRadius);
- vertical-align: middle;
-}
-
-// Reset appearance properties for textual inputs and textarea
-// Declare width for legacy (can't be on input[type=*] selectors or it's too specific)
-input,
-textarea,
-.uneditable-input {
- width: 206px; // plus 12px padding and 2px border
-}
-// Reset height since textareas have rows
-textarea {
- height: auto;
-}
-// Everything else
-textarea,
-input[type="text"],
-input[type="password"],
-input[type="datetime"],
-input[type="datetime-local"],
-input[type="date"],
-input[type="month"],
-input[type="time"],
-input[type="week"],
-input[type="number"],
-input[type="email"],
-input[type="url"],
-input[type="search"],
-input[type="tel"],
-input[type="color"],
-.uneditable-input {
- background-color: @inputBackground;
- border: 1px solid @inputBorder;
- .box-shadow(inset 0 1px 1px rgba(0,0,0,.075));
- .transition(~"border linear .2s, box-shadow linear .2s");
-
- // Focus state
- &:focus {
- border-color: rgba(82,168,236,.8);
- outline: 0;
- outline: thin dotted \9; /* IE6-9 */
- .box-shadow(~"inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(82,168,236,.6)");
- }
-}
-
-// Position radios and checkboxes better
-input[type="radio"],
-input[type="checkbox"] {
- margin: 4px 0 0;
- *margin-top: 0; /* IE7 */
- margin-top: 1px \9; /* IE8-9 */
- line-height: normal;
-}
-
-// Reset width of input images, buttons, radios, checkboxes
-input[type="file"],
-input[type="image"],
-input[type="submit"],
-input[type="reset"],
-input[type="button"],
-input[type="radio"],
-input[type="checkbox"] {
- width: auto; // Override of generic input selector
-}
-
-// Set the height of select and file controls to match text inputs
-select,
-input[type="file"] {
- height: @inputHeight; /* In IE7, the height of the select element cannot be changed by height, only font-size */
- *margin-top: 4px; /* For IE7, add top margin to align select with labels */
- line-height: @inputHeight;
-}
-
-// Make select elements obey height by applying a border
-select {
- width: 220px; // default input width + 10px of padding that doesn't get applied
- border: 1px solid @inputBorder;
- background-color: @inputBackground; // Chrome on Linux and Mobile Safari need background-color
-}
-
-// Make multiple select elements height not fixed
-select[multiple],
-select[size] {
- height: auto;
-}
-
-// Focus for select, file, radio, and checkbox
-select:focus,
-input[type="file"]:focus,
-input[type="radio"]:focus,
-input[type="checkbox"]:focus {
- .tab-focus();
-}
-
-
-// Uneditable inputs
-// -------------------------
-
-// Make uneditable inputs look inactive
-.uneditable-input,
-.uneditable-textarea {
- color: @grayLight;
- background-color: darken(@inputBackground, 1%);
- border-color: @inputBorder;
- .box-shadow(inset 0 1px 2px rgba(0,0,0,.025));
- cursor: not-allowed;
-}
-
-// For text that needs to appear as an input but should not be an input
-.uneditable-input {
- overflow: hidden; // prevent text from wrapping, but still cut it off like an input does
- white-space: nowrap;
-}
-
-// Make uneditable textareas behave like a textarea
-.uneditable-textarea {
- width: auto;
- height: auto;
-}
-
-
-// Placeholder
-// -------------------------
-
-// Placeholder text gets special styles because when browsers invalidate entire lines if it doesn't understand a selector
-input,
-textarea {
- .placeholder();
-}
-
-
-// CHECKBOXES & RADIOS
-// -------------------
-
-// Indent the labels to position radios/checkboxes as hanging
-.radio,
-.checkbox {
- min-height: @baseLineHeight; // clear the floating input if there is no label text
- padding-left: 20px;
-}
-.radio input[type="radio"],
-.checkbox input[type="checkbox"] {
- float: left;
- margin-left: -20px;
-}
-
-// Move the options list down to align with labels
-.controls > .radio:first-child,
-.controls > .checkbox:first-child {
- padding-top: 5px; // has to be padding because margin collaspes
-}
-
-// Radios and checkboxes on same line
-// TODO v3: Convert .inline to .control-inline
-.radio.inline,
-.checkbox.inline {
- display: inline-block;
- padding-top: 5px;
- margin-bottom: 0;
- vertical-align: middle;
-}
-.radio.inline + .radio.inline,
-.checkbox.inline + .checkbox.inline {
- margin-left: 10px; // space out consecutive inline controls
-}
-
-
-
-// INPUT SIZES
-// -----------
-
-// General classes for quick sizes
-.input-mini { width: 60px; }
-.input-small { width: 90px; }
-.input-medium { width: 150px; }
-.input-large { width: 210px; }
-.input-xlarge { width: 270px; }
-.input-xxlarge { width: 530px; }
-
-// Grid style input sizes
-input[class*="span"],
-select[class*="span"],
-textarea[class*="span"],
-.uneditable-input[class*="span"],
-// Redeclare since the fluid row class is more specific
-.row-fluid input[class*="span"],
-.row-fluid select[class*="span"],
-.row-fluid textarea[class*="span"],
-.row-fluid .uneditable-input[class*="span"] {
- float: none;
- margin-left: 0;
-}
-// Ensure input-prepend/append never wraps
-.input-append input[class*="span"],
-.input-append .uneditable-input[class*="span"],
-.input-prepend input[class*="span"],
-.input-prepend .uneditable-input[class*="span"],
-.row-fluid input[class*="span"],
-.row-fluid select[class*="span"],
-.row-fluid textarea[class*="span"],
-.row-fluid .uneditable-input[class*="span"],
-.row-fluid .input-prepend [class*="span"],
-.row-fluid .input-append [class*="span"] {
- display: inline-block;
-}
-
-
-
-// GRID SIZING FOR INPUTS
-// ----------------------
-
-// Grid sizes
-#grid > .input(@gridColumnWidth, @gridGutterWidth);
-
-// Control row for multiple inputs per line
-.controls-row {
- .clearfix(); // Clear the float from controls
-}
-
-// Float to collapse white-space for proper grid alignment
-.controls-row [class*="span"],
-// Redeclare the fluid grid collapse since we undo the float for inputs
-.row-fluid .controls-row [class*="span"] {
- float: left;
-}
-// Explicitly set top padding on all checkboxes/radios, not just first-child
-.controls-row .checkbox[class*="span"],
-.controls-row .radio[class*="span"] {
- padding-top: 5px;
-}
-
-
-
-
-// DISABLED STATE
-// --------------
-
-// Disabled and read-only inputs
-input[disabled],
-select[disabled],
-textarea[disabled],
-input[readonly],
-select[readonly],
-textarea[readonly] {
- cursor: not-allowed;
- background-color: @inputDisabledBackground;
-}
-// Explicitly reset the colors here
-input[type="radio"][disabled],
-input[type="checkbox"][disabled],
-input[type="radio"][readonly],
-input[type="checkbox"][readonly] {
- background-color: transparent;
-}
-
-
-
-
-// FORM FIELD FEEDBACK STATES
-// --------------------------
-
-// Warning
-.control-group.warning {
- .formFieldState(@warningText, @warningText, @warningBackground);
-}
-// Error
-.control-group.error {
- .formFieldState(@errorText, @errorText, @errorBackground);
-}
-// Success
-.control-group.success {
- .formFieldState(@successText, @successText, @successBackground);
-}
-// Success
-.control-group.info {
- .formFieldState(@infoText, @infoText, @infoBackground);
-}
-
-// HTML5 invalid states
-// Shares styles with the .control-group.error above
-input:focus:invalid,
-textarea:focus:invalid,
-select:focus:invalid {
- color: #b94a48;
- border-color: #ee5f5b;
- &:focus {
- border-color: darken(#ee5f5b, 10%);
- @shadow: 0 0 6px lighten(#ee5f5b, 20%);
- .box-shadow(@shadow);
- }
-}
-
-
-
-// FORM ACTIONS
-// ------------
-
-.form-actions {
- padding: (@baseLineHeight - 1) 20px @baseLineHeight;
- margin-top: @baseLineHeight;
- margin-bottom: @baseLineHeight;
- background-color: @formActionsBackground;
- border-top: 1px solid #e5e5e5;
- .clearfix(); // Adding clearfix to allow for .pull-right button containers
-}
-
-
-
-// HELP TEXT
-// ---------
-
-.help-block,
-.help-inline {
- color: lighten(@textColor, 15%); // lighten the text some for contrast
-}
-
-.help-block {
- display: block; // account for any element using help-block
- margin-bottom: @baseLineHeight / 2;
-}
-
-.help-inline {
- display: inline-block;
- .ie7-inline-block();
- vertical-align: middle;
- padding-left: 5px;
-}
-
-
-
-// INPUT GROUPS
-// ------------
-
-// Allow us to put symbols and text within the input field for a cleaner look
-.input-append,
-.input-prepend {
- display: inline-block;
- margin-bottom: @baseLineHeight / 2;
- vertical-align: middle;
- font-size: 0; // white space collapse hack
- white-space: nowrap; // Prevent span and input from separating
-
- // Reset the white space collapse hack
- input,
- select,
- .uneditable-input,
- .dropdown-menu,
- .popover {
- font-size: @baseFontSize;
- }
-
- input,
- select,
- .uneditable-input {
- position: relative; // placed here by default so that on :focus we can place the input above the .add-on for full border and box-shadow goodness
- margin-bottom: 0; // prevent bottom margin from screwing up alignment in stacked forms
- *margin-left: 0;
- vertical-align: top;
- .border-radius(0 @inputBorderRadius @inputBorderRadius 0);
- // Make input on top when focused so blue border and shadow always show
- &:focus {
- z-index: 2;
- }
- }
- .add-on {
- display: inline-block;
- width: auto;
- height: @baseLineHeight;
- min-width: 16px;
- padding: 4px 5px;
- font-size: @baseFontSize;
- font-weight: normal;
- line-height: @baseLineHeight;
- text-align: center;
- text-shadow: 0 1px 0 @white;
- background-color: @grayLighter;
- border: 1px solid #ccc;
- }
- .add-on,
- .btn,
- .btn-group > .dropdown-toggle {
- vertical-align: top;
- .border-radius(0);
- }
- .active {
- background-color: lighten(@green, 30);
- border-color: @green;
- }
-}
-
-.input-prepend {
- .add-on,
- .btn {
- margin-right: -1px;
- }
- .add-on:first-child,
- .btn:first-child {
- // FYI, `.btn:first-child` accounts for a button group that's prepended
- .border-radius(@inputBorderRadius 0 0 @inputBorderRadius);
- }
-}
-
-.input-append {
- input,
- select,
- .uneditable-input {
- .border-radius(@inputBorderRadius 0 0 @inputBorderRadius);
- + .btn-group .btn:last-child {
- .border-radius(0 @inputBorderRadius @inputBorderRadius 0);
- }
- }
- .add-on,
- .btn,
- .btn-group {
- margin-left: -1px;
- }
- .add-on:last-child,
- .btn:last-child,
- .btn-group:last-child > .dropdown-toggle {
- .border-radius(0 @inputBorderRadius @inputBorderRadius 0);
- }
-}
-
-// Remove all border-radius for inputs with both prepend and append
-.input-prepend.input-append {
- input,
- select,
- .uneditable-input {
- .border-radius(0);
- + .btn-group .btn {
- .border-radius(0 @inputBorderRadius @inputBorderRadius 0);
- }
- }
- .add-on:first-child,
- .btn:first-child {
- margin-right: -1px;
- .border-radius(@inputBorderRadius 0 0 @inputBorderRadius);
- }
- .add-on:last-child,
- .btn:last-child {
- margin-left: -1px;
- .border-radius(0 @inputBorderRadius @inputBorderRadius 0);
- }
- .btn-group:first-child {
- margin-left: 0;
- }
-}
-
-
-
-
-// SEARCH FORM
-// -----------
-
-input.search-query {
- padding-right: 14px;
- padding-right: 4px \9;
- padding-left: 14px;
- padding-left: 4px \9; /* IE7-8 doesn't have border-radius, so don't indent the padding */
- margin-bottom: 0; // Remove the default margin on all inputs
- .border-radius(15px);
-}
-
-/* Allow for input prepend/append in search forms */
-.form-search .input-append .search-query,
-.form-search .input-prepend .search-query {
- .border-radius(0); // Override due to specificity
-}
-.form-search .input-append .search-query {
- .border-radius(14px 0 0 14px);
-}
-.form-search .input-append .btn {
- .border-radius(0 14px 14px 0);
-}
-.form-search .input-prepend .search-query {
- .border-radius(0 14px 14px 0);
-}
-.form-search .input-prepend .btn {
- .border-radius(14px 0 0 14px);
-}
-
-
-
-
-// HORIZONTAL & VERTICAL FORMS
-// ---------------------------
-
-// Common properties
-// -----------------
-
-.form-search,
-.form-inline,
-.form-horizontal {
- input,
- textarea,
- select,
- .help-inline,
- .uneditable-input,
- .input-prepend,
- .input-append {
- display: inline-block;
- .ie7-inline-block();
- margin-bottom: 0;
- vertical-align: middle;
- }
- // Re-hide hidden elements due to specifity
- .hide {
- display: none;
- }
-}
-.form-search label,
-.form-inline label,
-.form-search .btn-group,
-.form-inline .btn-group {
- display: inline-block;
-}
-// Remove margin for input-prepend/-append
-.form-search .input-append,
-.form-inline .input-append,
-.form-search .input-prepend,
-.form-inline .input-prepend {
- margin-bottom: 0;
-}
-// Inline checkbox/radio labels (remove padding on left)
-.form-search .radio,
-.form-search .checkbox,
-.form-inline .radio,
-.form-inline .checkbox {
- padding-left: 0;
- margin-bottom: 0;
- vertical-align: middle;
-}
-// Remove float and margin, set to inline-block
-.form-search .radio input[type="radio"],
-.form-search .checkbox input[type="checkbox"],
-.form-inline .radio input[type="radio"],
-.form-inline .checkbox input[type="checkbox"] {
- float: left;
- margin-right: 3px;
- margin-left: 0;
-}
-
-
-// Margin to space out fieldsets
-.control-group {
- margin-bottom: @baseLineHeight / 2;
-}
-
-// Legend collapses margin, so next element is responsible for spacing
-legend + .control-group {
- margin-top: @baseLineHeight;
- -webkit-margin-top-collapse: separate;
-}
-
-// Horizontal-specific styles
-// --------------------------
-
-.form-horizontal {
- // Increase spacing between groups
- .control-group {
- margin-bottom: @baseLineHeight;
- .clearfix();
- }
- // Float the labels left
- .control-label {
- float: left;
- width: @horizontalComponentOffset - 20;
- padding-top: 5px;
- text-align: right;
- }
- // Move over all input controls and content
- .controls {
- // Super jank IE7 fix to ensure the inputs in .input-append and input-prepend
- // don't inherit the margin of the parent, in this case .controls
- *display: inline-block;
- *padding-left: 20px;
- margin-left: @horizontalComponentOffset;
- *margin-left: 0;
- &:first-child {
- *padding-left: @horizontalComponentOffset;
- }
- }
- // Remove bottom margin on block level help text since that's accounted for on .control-group
- .help-block {
- margin-bottom: 0;
- }
- // And apply it only to .help-block instances that follow a form control
- input,
- select,
- textarea,
- .uneditable-input,
- .input-prepend,
- .input-append {
- + .help-block {
- margin-top: @baseLineHeight / 2;
- }
- }
- // Move over buttons in .form-actions to align with .controls
- .form-actions {
- padding-left: @horizontalComponentOffset;
- }
-}
diff --git a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/grid.less b/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/grid.less
deleted file mode 100644
index 750d203..0000000
--- a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/grid.less
+++ /dev/null
@@ -1,21 +0,0 @@
-//
-// Grid system
-// --------------------------------------------------
-
-
-// Fixed (940px)
-#grid > .core(@gridColumnWidth, @gridGutterWidth);
-
-// Fluid (940px)
-#grid > .fluid(@fluidGridColumnWidth, @fluidGridGutterWidth);
-
-// Reset utility classes due to specificity
-[class*="span"].hide,
-.row-fluid [class*="span"].hide {
- display: none;
-}
-
-[class*="span"].pull-right,
-.row-fluid [class*="span"].pull-right {
- float: right;
-}
diff --git a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/hero-unit.less b/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/hero-unit.less
deleted file mode 100644
index 763d86a..0000000
--- a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/hero-unit.less
+++ /dev/null
@@ -1,25 +0,0 @@
-//
-// Hero unit
-// --------------------------------------------------
-
-
-.hero-unit {
- padding: 60px;
- margin-bottom: 30px;
- font-size: 18px;
- font-weight: 200;
- line-height: @baseLineHeight * 1.5;
- color: @heroUnitLeadColor;
- background-color: @heroUnitBackground;
- .border-radius(6px);
- h1 {
- margin-bottom: 0;
- font-size: 60px;
- line-height: 1;
- color: @heroUnitHeadingColor;
- letter-spacing: -1px;
- }
- li {
- line-height: @baseLineHeight * 1.5; // Reset since we specify in type.less
- }
-}
diff --git a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/labels-badges.less b/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/labels-badges.less
deleted file mode 100644
index bc321fe..0000000
--- a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/labels-badges.less
+++ /dev/null
@@ -1,84 +0,0 @@
-//
-// Labels and badges
-// --------------------------------------------------
-
-
-// Base classes
-.label,
-.badge {
- display: inline-block;
- padding: 2px 4px;
- font-size: @baseFontSize * .846;
- font-weight: bold;
- line-height: 14px; // ensure proper line-height if floated
- color: @white;
- vertical-align: baseline;
- white-space: nowrap;
- text-shadow: 0 -1px 0 rgba(0,0,0,.25);
- background-color: @grayLight;
-}
-// Set unique padding and border-radii
-.label {
- .border-radius(3px);
-}
-.badge {
- padding-left: 9px;
- padding-right: 9px;
- .border-radius(9px);
-}
-
-// Empty labels/badges collapse
-.label,
-.badge {
- &:empty {
- display: none;
- }
-}
-
-// Hover/focus state, but only for links
-a {
- &.label:hover,
- &.label:focus,
- &.badge:hover,
- &.badge:focus {
- color: @white;
- text-decoration: none;
- cursor: pointer;
- }
-}
-
-// Colors
-// Only give background-color difference to links (and to simplify, we don't qualifty with `a` but [href] attribute)
-.label,
-.badge {
- // Important (red)
- &-important { background-color: @errorText; }
- &-important[href] { background-color: darken(@errorText, 10%); }
- // Warnings (orange)
- &-warning { background-color: @orange; }
- &-warning[href] { background-color: darken(@orange, 10%); }
- // Success (green)
- &-success { background-color: @successText; }
- &-success[href] { background-color: darken(@successText, 10%); }
- // Info (turquoise)
- &-info { background-color: @infoText; }
- &-info[href] { background-color: darken(@infoText, 10%); }
- // Inverse (black)
- &-inverse { background-color: @grayDark; }
- &-inverse[href] { background-color: darken(@grayDark, 10%); }
-}
-
-// Quick fix for labels/badges in buttons
-.btn {
- .label,
- .badge {
- position: relative;
- top: -1px;
- }
-}
-.btn-mini {
- .label,
- .badge {
- top: 0;
- }
-}
diff --git a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/layouts.less b/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/layouts.less
deleted file mode 100644
index 24a2062..0000000
--- a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/layouts.less
+++ /dev/null
@@ -1,16 +0,0 @@
-//
-// Layouts
-// --------------------------------------------------
-
-
-// Container (centered, fixed-width layouts)
-.container {
- .container-fixed();
-}
-
-// Fluid layouts (left aligned, with sidebar, min- & max-width content)
-.container-fluid {
- padding-right: @gridGutterWidth;
- padding-left: @gridGutterWidth;
- .clearfix();
-}
\ No newline at end of file
diff --git a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/media.less b/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/media.less
deleted file mode 100644
index e461e44..0000000
--- a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/media.less
+++ /dev/null
@@ -1,55 +0,0 @@
-// Media objects
-// Source: http://stubbornella.org/content/?p=497
-// --------------------------------------------------
-
-
-// Common styles
-// -------------------------
-
-// Clear the floats
-.media,
-.media-body {
- overflow: hidden;
- *overflow: visible;
- zoom: 1;
-}
-
-// Proper spacing between instances of .media
-.media,
-.media .media {
- margin-top: 15px;
-}
-.media:first-child {
- margin-top: 0;
-}
-
-// For images and videos, set to block
-.media-object {
- display: block;
-}
-
-// Reset margins on headings for tighter default spacing
-.media-heading {
- margin: 0 0 5px;
-}
-
-
-// Media image alignment
-// -------------------------
-
-.media > .pull-left {
- margin-right: 10px;
-}
-.media > .pull-right {
- margin-left: 10px;
-}
-
-
-// Media list variation
-// -------------------------
-
-// Undo default ul/ol styles
-.media-list {
- margin-left: 0;
- list-style: none;
-}
diff --git a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/mixins.less b/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/mixins.less
deleted file mode 100644
index 79d8892..0000000
--- a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/mixins.less
+++ /dev/null
@@ -1,702 +0,0 @@
-//
-// Mixins
-// --------------------------------------------------
-
-
-// UTILITY MIXINS
-// --------------------------------------------------
-
-// Clearfix
-// --------
-// For clearing floats like a boss h5bp.com/q
-.clearfix {
- *zoom: 1;
- &:before,
- &:after {
- display: table;
- content: "";
- // Fixes Opera/contenteditable bug:
- // http://nicolasgallagher.com/micro-clearfix-hack/#comment-36952
- line-height: 0;
- }
- &:after {
- clear: both;
- }
-}
-
-// Webkit-style focus
-// ------------------
-.tab-focus() {
- // Default
- outline: thin dotted #333;
- // Webkit
- outline: 5px auto -webkit-focus-ring-color;
- outline-offset: -2px;
-}
-
-// Center-align a block level element
-// ----------------------------------
-.center-block() {
- display: block;
- margin-left: auto;
- margin-right: auto;
-}
-
-// IE7 inline-block
-// ----------------
-.ie7-inline-block() {
- *display: inline; /* IE7 inline-block hack */
- *zoom: 1;
-}
-
-// IE7 likes to collapse whitespace on either side of the inline-block elements.
-// Ems because we're attempting to match the width of a space character. Left
-// version is for form buttons, which typically come after other elements, and
-// right version is for icons, which come before. Applying both is ok, but it will
-// mean that space between those elements will be .6em (~2 space characters) in IE7,
-// instead of the 1 space in other browsers.
-.ie7-restore-left-whitespace() {
- *margin-left: .3em;
-
- &:first-child {
- *margin-left: 0;
- }
-}
-
-.ie7-restore-right-whitespace() {
- *margin-right: .3em;
-}
-
-// Sizing shortcuts
-// -------------------------
-.size(@height, @width) {
- width: @width;
- height: @height;
-}
-.square(@size) {
- .size(@size, @size);
-}
-
-// Placeholder text
-// -------------------------
-.placeholder(@color: @placeholderText) {
- &:-moz-placeholder {
- color: @color;
- }
- &:-ms-input-placeholder {
- color: @color;
- }
- &::-webkit-input-placeholder {
- color: @color;
- }
-}
-
-// Text overflow
-// -------------------------
-// Requires inline-block or block for proper styling
-.text-overflow() {
- overflow: hidden;
- text-overflow: ellipsis;
- white-space: nowrap;
-}
-
-// CSS image replacement
-// -------------------------
-// Source: https://github.com/h5bp/html5-boilerplate/commit/aa0396eae757
-.hide-text {
- font: 0/0 a;
- color: transparent;
- text-shadow: none;
- background-color: transparent;
- border: 0;
-}
-
-
-// FONTS
-// --------------------------------------------------
-
-#font {
- #family {
- .serif() {
- font-family: @serifFontFamily;
- }
- .sans-serif() {
- font-family: @sansFontFamily;
- }
- .monospace() {
- font-family: @monoFontFamily;
- }
- }
- .shorthand(@size: @baseFontSize, @weight: normal, @lineHeight: @baseLineHeight) {
- font-size: @size;
- font-weight: @weight;
- line-height: @lineHeight;
- }
- .serif(@size: @baseFontSize, @weight: normal, @lineHeight: @baseLineHeight) {
- #font > #family > .serif;
- #font > .shorthand(@size, @weight, @lineHeight);
- }
- .sans-serif(@size: @baseFontSize, @weight: normal, @lineHeight: @baseLineHeight) {
- #font > #family > .sans-serif;
- #font > .shorthand(@size, @weight, @lineHeight);
- }
- .monospace(@size: @baseFontSize, @weight: normal, @lineHeight: @baseLineHeight) {
- #font > #family > .monospace;
- #font > .shorthand(@size, @weight, @lineHeight);
- }
-}
-
-
-// FORMS
-// --------------------------------------------------
-
-// Block level inputs
-.input-block-level {
- display: block;
- width: 100%;
- min-height: @inputHeight; // Make inputs at least the height of their button counterpart (base line-height + padding + border)
- .box-sizing(border-box); // Makes inputs behave like true block-level elements
-}
-
-
-
-// Mixin for form field states
-.formFieldState(@textColor: #555, @borderColor: #ccc, @backgroundColor: #f5f5f5) {
- // Set the text color
- .control-label,
- .help-block,
- .help-inline {
- color: @textColor;
- }
- // Style inputs accordingly
- .checkbox,
- .radio,
- input,
- select,
- textarea {
- color: @textColor;
- }
- input,
- select,
- textarea {
- border-color: @borderColor;
- .box-shadow(inset 0 1px 1px rgba(0,0,0,.075)); // Redeclare so transitions work
- &:focus {
- border-color: darken(@borderColor, 10%);
- @shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 6px lighten(@borderColor, 20%);
- .box-shadow(@shadow);
- }
- }
- // Give a small background color for input-prepend/-append
- .input-prepend .add-on,
- .input-append .add-on {
- color: @textColor;
- background-color: @backgroundColor;
- border-color: @textColor;
- }
-}
-
-
-
-// CSS3 PROPERTIES
-// --------------------------------------------------
-
-// Border Radius
-.border-radius(@radius) {
- -webkit-border-radius: @radius;
- -moz-border-radius: @radius;
- border-radius: @radius;
-}
-
-// Single Corner Border Radius
-.border-top-left-radius(@radius) {
- -webkit-border-top-left-radius: @radius;
- -moz-border-radius-topleft: @radius;
- border-top-left-radius: @radius;
-}
-.border-top-right-radius(@radius) {
- -webkit-border-top-right-radius: @radius;
- -moz-border-radius-topright: @radius;
- border-top-right-radius: @radius;
-}
-.border-bottom-right-radius(@radius) {
- -webkit-border-bottom-right-radius: @radius;
- -moz-border-radius-bottomright: @radius;
- border-bottom-right-radius: @radius;
-}
-.border-bottom-left-radius(@radius) {
- -webkit-border-bottom-left-radius: @radius;
- -moz-border-radius-bottomleft: @radius;
- border-bottom-left-radius: @radius;
-}
-
-// Single Side Border Radius
-.border-top-radius(@radius) {
- .border-top-right-radius(@radius);
- .border-top-left-radius(@radius);
-}
-.border-right-radius(@radius) {
- .border-top-right-radius(@radius);
- .border-bottom-right-radius(@radius);
-}
-.border-bottom-radius(@radius) {
- .border-bottom-right-radius(@radius);
- .border-bottom-left-radius(@radius);
-}
-.border-left-radius(@radius) {
- .border-top-left-radius(@radius);
- .border-bottom-left-radius(@radius);
-}
-
-// Drop shadows
-.box-shadow(@shadow) {
- -webkit-box-shadow: @shadow;
- -moz-box-shadow: @shadow;
- box-shadow: @shadow;
-}
-
-// Transitions
-.transition(@transition) {
- -webkit-transition: @transition;
- -moz-transition: @transition;
- -o-transition: @transition;
- transition: @transition;
-}
-.transition-delay(@transition-delay) {
- -webkit-transition-delay: @transition-delay;
- -moz-transition-delay: @transition-delay;
- -o-transition-delay: @transition-delay;
- transition-delay: @transition-delay;
-}
-.transition-duration(@transition-duration) {
- -webkit-transition-duration: @transition-duration;
- -moz-transition-duration: @transition-duration;
- -o-transition-duration: @transition-duration;
- transition-duration: @transition-duration;
-}
-
-// Transformations
-.rotate(@degrees) {
- -webkit-transform: rotate(@degrees);
- -moz-transform: rotate(@degrees);
- -ms-transform: rotate(@degrees);
- -o-transform: rotate(@degrees);
- transform: rotate(@degrees);
-}
-.scale(@ratio) {
- -webkit-transform: scale(@ratio);
- -moz-transform: scale(@ratio);
- -ms-transform: scale(@ratio);
- -o-transform: scale(@ratio);
- transform: scale(@ratio);
-}
-.translate(@x, @y) {
- -webkit-transform: translate(@x, @y);
- -moz-transform: translate(@x, @y);
- -ms-transform: translate(@x, @y);
- -o-transform: translate(@x, @y);
- transform: translate(@x, @y);
-}
-.skew(@x, @y) {
- -webkit-transform: skew(@x, @y);
- -moz-transform: skew(@x, @y);
- -ms-transform: skewX(@x) skewY(@y); // See https://github.com/twitter/bootstrap/issues/4885
- -o-transform: skew(@x, @y);
- transform: skew(@x, @y);
- -webkit-backface-visibility: hidden; // See https://github.com/twitter/bootstrap/issues/5319
-}
-.translate3d(@x, @y, @z) {
- -webkit-transform: translate3d(@x, @y, @z);
- -moz-transform: translate3d(@x, @y, @z);
- -o-transform: translate3d(@x, @y, @z);
- transform: translate3d(@x, @y, @z);
-}
-
-// Backface visibility
-// Prevent browsers from flickering when using CSS 3D transforms.
-// Default value is `visible`, but can be changed to `hidden
-// See git pull https://github.com/dannykeane/bootstrap.git backface-visibility for examples
-.backface-visibility(@visibility){
- -webkit-backface-visibility: @visibility;
- -moz-backface-visibility: @visibility;
- backface-visibility: @visibility;
-}
-
-// Background clipping
-// Heads up: FF 3.6 and under need "padding" instead of "padding-box"
-.background-clip(@clip) {
- -webkit-background-clip: @clip;
- -moz-background-clip: @clip;
- background-clip: @clip;
-}
-
-// Background sizing
-.background-size(@size) {
- -webkit-background-size: @size;
- -moz-background-size: @size;
- -o-background-size: @size;
- background-size: @size;
-}
-
-
-// Box sizing
-.box-sizing(@boxmodel) {
- -webkit-box-sizing: @boxmodel;
- -moz-box-sizing: @boxmodel;
- box-sizing: @boxmodel;
-}
-
-// User select
-// For selecting text on the page
-.user-select(@select) {
- -webkit-user-select: @select;
- -moz-user-select: @select;
- -ms-user-select: @select;
- -o-user-select: @select;
- user-select: @select;
-}
-
-// Resize anything
-.resizable(@direction) {
- resize: @direction; // Options: horizontal, vertical, both
- overflow: auto; // Safari fix
-}
-
-// CSS3 Content Columns
-.content-columns(@columnCount, @columnGap: @gridGutterWidth) {
- -webkit-column-count: @columnCount;
- -moz-column-count: @columnCount;
- column-count: @columnCount;
- -webkit-column-gap: @columnGap;
- -moz-column-gap: @columnGap;
- column-gap: @columnGap;
-}
-
-// Optional hyphenation
-.hyphens(@mode: auto) {
- word-wrap: break-word;
- -webkit-hyphens: @mode;
- -moz-hyphens: @mode;
- -ms-hyphens: @mode;
- -o-hyphens: @mode;
- hyphens: @mode;
-}
-
-// Opacity
-.opacity(@opacity) {
- opacity: @opacity / 100;
- filter: ~"alpha(opacity=@{opacity})";
-}
-
-
-
-// BACKGROUNDS
-// --------------------------------------------------
-
-// Add an alphatransparency value to any background or border color (via Elyse Holladay)
-#translucent {
- .background(@color: @white, @alpha: 1) {
- background-color: hsla(hue(@color), saturation(@color), lightness(@color), @alpha);
- }
- .border(@color: @white, @alpha: 1) {
- border-color: hsla(hue(@color), saturation(@color), lightness(@color), @alpha);
- .background-clip(padding-box);
- }
-}
-
-// Gradient Bar Colors for buttons and alerts
-.gradientBar(@primaryColor, @secondaryColor, @textColor: #fff, @textShadow: 0 -1px 0 rgba(0,0,0,.25)) {
- color: @textColor;
- text-shadow: @textShadow;
- #gradient > .vertical(@primaryColor, @secondaryColor);
- border-color: @secondaryColor @secondaryColor darken(@secondaryColor, 15%);
- border-color: rgba(0,0,0,.1) rgba(0,0,0,.1) fadein(rgba(0,0,0,.1), 15%);
-}
-
-// Gradients
-#gradient {
- .horizontal(@startColor: #555, @endColor: #333) {
- background-color: @endColor;
- background-image: -moz-linear-gradient(left, @startColor, @endColor); // FF 3.6+
- background-image: -webkit-gradient(linear, 0 0, 100% 0, from(@startColor), to(@endColor)); // Safari 4+, Chrome 2+
- background-image: -webkit-linear-gradient(left, @startColor, @endColor); // Safari 5.1+, Chrome 10+
- background-image: -o-linear-gradient(left, @startColor, @endColor); // Opera 11.10
- background-image: linear-gradient(to right, @startColor, @endColor); // Standard, IE10
- background-repeat: repeat-x;
- filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)",argb(@startColor),argb(@endColor))); // IE9 and down
- }
- .vertical(@startColor: #555, @endColor: #333) {
- background-color: mix(@startColor, @endColor, 60%);
- background-image: -moz-linear-gradient(top, @startColor, @endColor); // FF 3.6+
- background-image: -webkit-gradient(linear, 0 0, 0 100%, from(@startColor), to(@endColor)); // Safari 4+, Chrome 2+
- background-image: -webkit-linear-gradient(top, @startColor, @endColor); // Safari 5.1+, Chrome 10+
- background-image: -o-linear-gradient(top, @startColor, @endColor); // Opera 11.10
- background-image: linear-gradient(to bottom, @startColor, @endColor); // Standard, IE10
- background-repeat: repeat-x;
- filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)",argb(@startColor),argb(@endColor))); // IE9 and down
- }
- .directional(@startColor: #555, @endColor: #333, @deg: 45deg) {
- background-color: @endColor;
- background-repeat: repeat-x;
- background-image: -moz-linear-gradient(@deg, @startColor, @endColor); // FF 3.6+
- background-image: -webkit-linear-gradient(@deg, @startColor, @endColor); // Safari 5.1+, Chrome 10+
- background-image: -o-linear-gradient(@deg, @startColor, @endColor); // Opera 11.10
- background-image: linear-gradient(@deg, @startColor, @endColor); // Standard, IE10
- }
- .horizontal-three-colors(@startColor: #00b3ee, @midColor: #7a43b6, @colorStop: 50%, @endColor: #c3325f) {
- background-color: mix(@midColor, @endColor, 80%);
- background-image: -webkit-gradient(left, linear, 0 0, 0 100%, from(@startColor), color-stop(@colorStop, @midColor), to(@endColor));
- background-image: -webkit-linear-gradient(left, @startColor, @midColor @colorStop, @endColor);
- background-image: -moz-linear-gradient(left, @startColor, @midColor @colorStop, @endColor);
- background-image: -o-linear-gradient(left, @startColor, @midColor @colorStop, @endColor);
- background-image: linear-gradient(to right, @startColor, @midColor @colorStop, @endColor);
- background-repeat: no-repeat;
- filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)",argb(@startColor),argb(@endColor))); // IE9 and down, gets no color-stop at all for proper fallback
- }
-
- .vertical-three-colors(@startColor: #00b3ee, @midColor: #7a43b6, @colorStop: 50%, @endColor: #c3325f) {
- background-color: mix(@midColor, @endColor, 80%);
- background-image: -webkit-gradient(linear, 0 0, 0 100%, from(@startColor), color-stop(@colorStop, @midColor), to(@endColor));
- background-image: -webkit-linear-gradient(@startColor, @midColor @colorStop, @endColor);
- background-image: -moz-linear-gradient(top, @startColor, @midColor @colorStop, @endColor);
- background-image: -o-linear-gradient(@startColor, @midColor @colorStop, @endColor);
- background-image: linear-gradient(@startColor, @midColor @colorStop, @endColor);
- background-repeat: no-repeat;
- filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)",argb(@startColor),argb(@endColor))); // IE9 and down, gets no color-stop at all for proper fallback
- }
- .radial(@innerColor: #555, @outerColor: #333) {
- background-color: @outerColor;
- background-image: -webkit-gradient(radial, center center, 0, center center, 460, from(@innerColor), to(@outerColor));
- background-image: -webkit-radial-gradient(circle, @innerColor, @outerColor);
- background-image: -moz-radial-gradient(circle, @innerColor, @outerColor);
- background-image: -o-radial-gradient(circle, @innerColor, @outerColor);
- background-repeat: no-repeat;
- }
- .striped(@color: #555, @angle: 45deg) {
- background-color: @color;
- background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(.25, rgba(255,255,255,.15)), color-stop(.25, transparent), color-stop(.5, transparent), color-stop(.5, rgba(255,255,255,.15)), color-stop(.75, rgba(255,255,255,.15)), color-stop(.75, transparent), to(transparent));
- background-image: -webkit-linear-gradient(@angle, rgba(255,255,255,.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,.15) 50%, rgba(255,255,255,.15) 75%, transparent 75%, transparent);
- background-image: -moz-linear-gradient(@angle, rgba(255,255,255,.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,.15) 50%, rgba(255,255,255,.15) 75%, transparent 75%, transparent);
- background-image: -o-linear-gradient(@angle, rgba(255,255,255,.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,.15) 50%, rgba(255,255,255,.15) 75%, transparent 75%, transparent);
- background-image: linear-gradient(@angle, rgba(255,255,255,.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,.15) 50%, rgba(255,255,255,.15) 75%, transparent 75%, transparent);
- }
-}
-// Reset filters for IE
-.reset-filter() {
- filter: e(%("progid:DXImageTransform.Microsoft.gradient(enabled = false)"));
-}
-
-
-
-// COMPONENT MIXINS
-// --------------------------------------------------
-
-// Horizontal dividers
-// -------------------------
-// Dividers (basically an hr) within dropdowns and nav lists
-.nav-divider(@top: #e5e5e5, @bottom: @white) {
- // IE7 needs a set width since we gave a height. Restricting just
- // to IE7 to keep the 1px left/right space in other browsers.
- // It is unclear where IE is getting the extra space that we need
- // to negative-margin away, but so it goes.
- *width: 100%;
- height: 1px;
- margin: ((@baseLineHeight / 2) - 1) 1px; // 8px 1px
- *margin: -5px 0 5px;
- overflow: hidden;
- background-color: @top;
- border-bottom: 1px solid @bottom;
-}
-
-// Button backgrounds
-// ------------------
-.buttonBackground(@startColor, @endColor, @textColor: #fff, @textShadow: 0 -1px 0 rgba(0,0,0,.25)) {
- // gradientBar will set the background to a pleasing blend of these, to support IE<=9
- .gradientBar(@startColor, @endColor, @textColor, @textShadow);
- *background-color: @endColor; /* Darken IE7 buttons by default so they stand out more given they won't have borders */
- .reset-filter();
-
- // in these cases the gradient won't cover the background, so we override
- &:hover, &:focus, &:active, &.active, &.disabled, &[disabled] {
- color: @textColor;
- background-color: @endColor;
- *background-color: darken(@endColor, 5%);
- }
-
- // IE 7 + 8 can't handle box-shadow to show active, so we darken a bit ourselves
- &:active,
- &.active {
- background-color: darken(@endColor, 10%) e("\9");
- }
-}
-
-// Navbar vertical align
-// -------------------------
-// Vertically center elements in the navbar.
-// Example: an element has a height of 30px, so write out `.navbarVerticalAlign(30px);` to calculate the appropriate top margin.
-.navbarVerticalAlign(@elementHeight) {
- margin-top: (@navbarHeight - @elementHeight) / 2;
-}
-
-
-
-// Grid System
-// -----------
-
-// Centered container element
-.container-fixed() {
- margin-right: auto;
- margin-left: auto;
- .clearfix();
-}
-
-// Table columns
-.tableColumns(@columnSpan: 1) {
- float: none; // undo default grid column styles
- width: ((@gridColumnWidth) * @columnSpan) + (@gridGutterWidth * (@columnSpan - 1)) - 16; // 16 is total padding on left and right of table cells
- margin-left: 0; // undo default grid column styles
-}
-
-// Make a Grid
-// Use .makeRow and .makeColumn to assign semantic layouts grid system behavior
-.makeRow() {
- margin-left: @gridGutterWidth * -1;
- .clearfix();
-}
-.makeColumn(@columns: 1, @offset: 0) {
- float: left;
- margin-left: (@gridColumnWidth * @offset) + (@gridGutterWidth * (@offset - 1)) + (@gridGutterWidth * 2);
- width: (@gridColumnWidth * @columns) + (@gridGutterWidth * (@columns - 1));
-}
-
-// The Grid
-#grid {
-
- .core (@gridColumnWidth, @gridGutterWidth) {
-
- .spanX (@index) when (@index > 0) {
- .span@{index} { .span(@index); }
- .spanX(@index - 1);
- }
- .spanX (0) {}
-
- .offsetX (@index) when (@index > 0) {
- .offset@{index} { .offset(@index); }
- .offsetX(@index - 1);
- }
- .offsetX (0) {}
-
- .offset (@columns) {
- margin-left: (@gridColumnWidth * @columns) + (@gridGutterWidth * (@columns + 1));
- }
-
- .span (@columns) {
- width: (@gridColumnWidth * @columns) + (@gridGutterWidth * (@columns - 1));
- }
-
- .row {
- margin-left: @gridGutterWidth * -1;
- .clearfix();
- }
-
- [class*="span"] {
- float: left;
- min-height: 1px; // prevent collapsing columns
- margin-left: @gridGutterWidth;
- }
-
- // Set the container width, and override it for fixed navbars in media queries
- .container,
- .navbar-static-top .container,
- .navbar-fixed-top .container,
- .navbar-fixed-bottom .container { .span(@gridColumns); }
-
- // generate .spanX and .offsetX
- .spanX (@gridColumns);
- .offsetX (@gridColumns);
-
- }
-
- .fluid (@fluidGridColumnWidth, @fluidGridGutterWidth) {
-
- .spanX (@index) when (@index > 0) {
- .span@{index} { .span(@index); }
- .spanX(@index - 1);
- }
- .spanX (0) {}
-
- .offsetX (@index) when (@index > 0) {
- .offset@{index} { .offset(@index); }
- .offset@{index}:first-child { .offsetFirstChild(@index); }
- .offsetX(@index - 1);
- }
- .offsetX (0) {}
-
- .offset (@columns) {
- margin-left: (@fluidGridColumnWidth * @columns) + (@fluidGridGutterWidth * (@columns - 1)) + (@fluidGridGutterWidth*2);
- *margin-left: (@fluidGridColumnWidth * @columns) + (@fluidGridGutterWidth * (@columns - 1)) - (.5 / @gridRowWidth * 100 * 1%) + (@fluidGridGutterWidth*2) - (.5 / @gridRowWidth * 100 * 1%);
- }
-
- .offsetFirstChild (@columns) {
- margin-left: (@fluidGridColumnWidth * @columns) + (@fluidGridGutterWidth * (@columns - 1)) + (@fluidGridGutterWidth);
- *margin-left: (@fluidGridColumnWidth * @columns) + (@fluidGridGutterWidth * (@columns - 1)) - (.5 / @gridRowWidth * 100 * 1%) + @fluidGridGutterWidth - (.5 / @gridRowWidth * 100 * 1%);
- }
-
- .span (@columns) {
- width: (@fluidGridColumnWidth * @columns) + (@fluidGridGutterWidth * (@columns - 1));
- *width: (@fluidGridColumnWidth * @columns) + (@fluidGridGutterWidth * (@columns - 1)) - (.5 / @gridRowWidth * 100 * 1%);
- }
-
- .row-fluid {
- width: 100%;
- .clearfix();
- [class*="span"] {
- .input-block-level();
- float: left;
- margin-left: @fluidGridGutterWidth;
- *margin-left: @fluidGridGutterWidth - (.5 / @gridRowWidth * 100 * 1%);
- }
- [class*="span"]:first-child {
- margin-left: 0;
- }
-
- // Space grid-sized controls properly if multiple per line
- .controls-row [class*="span"] + [class*="span"] {
- margin-left: @fluidGridGutterWidth;
- }
-
- // generate .spanX and .offsetX
- .spanX (@gridColumns);
- .offsetX (@gridColumns);
- }
-
- }
-
- .input(@gridColumnWidth, @gridGutterWidth) {
-
- .spanX (@index) when (@index > 0) {
- input.span@{index}, textarea.span@{index}, .uneditable-input.span@{index} { .span(@index); }
- .spanX(@index - 1);
- }
- .spanX (0) {}
-
- .span(@columns) {
- width: ((@gridColumnWidth) * @columns) + (@gridGutterWidth * (@columns - 1)) - 14;
- }
-
- input,
- textarea,
- .uneditable-input {
- margin-left: 0; // override margin-left from core grid system
- }
-
- // Space grid-sized controls properly if multiple per line
- .controls-row [class*="span"] + [class*="span"] {
- margin-left: @gridGutterWidth;
- }
-
- // generate .spanX
- .spanX (@gridColumns);
-
- }
-}
diff --git a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/modals.less b/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/modals.less
deleted file mode 100644
index 8e272d4..0000000
--- a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/modals.less
+++ /dev/null
@@ -1,95 +0,0 @@
-//
-// Modals
-// --------------------------------------------------
-
-// Background
-.modal-backdrop {
- position: fixed;
- top: 0;
- right: 0;
- bottom: 0;
- left: 0;
- z-index: @zindexModalBackdrop;
- background-color: @black;
- // Fade for backdrop
- &.fade { opacity: 0; }
-}
-
-.modal-backdrop,
-.modal-backdrop.fade.in {
- .opacity(80);
-}
-
-// Base modal
-.modal {
- position: fixed;
- top: 10%;
- left: 50%;
- z-index: @zindexModal;
- width: 560px;
- margin-left: -280px;
- background-color: @white;
- border: 1px solid #999;
- border: 1px solid rgba(0,0,0,.3);
- *border: 1px solid #999; /* IE6-7 */
- .border-radius(6px);
- .box-shadow(0 3px 7px rgba(0,0,0,0.3));
- .background-clip(padding-box);
- // Remove focus outline from opened modal
- outline: none;
-
- &.fade {
- .transition(e('opacity .3s linear, top .3s ease-out'));
- top: -25%;
- }
- &.fade.in { top: 10%; }
-}
-.modal-header {
- padding: 9px 15px;
- border-bottom: 1px solid #eee;
- // Close icon
- .close { margin-top: 2px; }
- // Heading
- h3 {
- margin: 0;
- line-height: 30px;
- }
-}
-
-// Body (where all modal content resides)
-.modal-body {
- position: relative;
- overflow-y: auto;
- max-height: 400px;
- padding: 15px;
-}
-// Remove bottom margin if need be
-.modal-form {
- margin-bottom: 0;
-}
-
-// Footer (for actions)
-.modal-footer {
- padding: 14px 15px 15px;
- margin-bottom: 0;
- text-align: right; // right align buttons
- background-color: #f5f5f5;
- border-top: 1px solid #ddd;
- .border-radius(0 0 6px 6px);
- .box-shadow(inset 0 1px 0 @white);
- .clearfix(); // clear it in case folks use .pull-* classes on buttons
-
- // Properly space out buttons
- .btn + .btn {
- margin-left: 5px;
- margin-bottom: 0; // account for input[type="submit"] which gets the bottom margin like all other inputs
- }
- // but override that for button groups
- .btn-group .btn + .btn {
- margin-left: -1px;
- }
- // and override it for block buttons as well
- .btn-block + .btn-block {
- margin-left: 0;
- }
-}
diff --git a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/navbar.less b/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/navbar.less
deleted file mode 100644
index 028fcad..0000000
--- a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/navbar.less
+++ /dev/null
@@ -1,497 +0,0 @@
-//
-// Navbars (Redux)
-// --------------------------------------------------
-
-
-// COMMON STYLES
-// -------------
-
-// Base class and wrapper
-.navbar {
- overflow: visible;
- margin-bottom: @baseLineHeight;
-
- // Fix for IE7's bad z-indexing so dropdowns don't appear below content that follows the navbar
- *position: relative;
- *z-index: 2;
-}
-
-// Inner for background effects
-// Gradient is applied to its own element because overflow visible is not honored by IE when filter is present
-.navbar-inner {
- min-height: @navbarHeight;
- padding-left: 20px;
- padding-right: 20px;
- #gradient > .vertical(@navbarBackgroundHighlight, @navbarBackground);
- border: 1px solid @navbarBorder;
- .border-radius(@baseBorderRadius);
- .box-shadow(0 1px 4px rgba(0,0,0,.065));
-
- // Prevent floats from breaking the navbar
- .clearfix();
-}
-
-// Set width to auto for default container
-// We then reset it for fixed navbars in the #gridSystem mixin
-.navbar .container {
- width: auto;
-}
-
-// Override the default collapsed state
-.nav-collapse.collapse {
- height: auto;
- overflow: visible;
-}
-
-
-// Brand: website or project name
-// -------------------------
-.navbar .brand {
- float: left;
- display: block;
- // Vertically center the text given @navbarHeight
- padding: ((@navbarHeight - @baseLineHeight) / 2) 20px ((@navbarHeight - @baseLineHeight) / 2);
- margin-left: -20px; // negative indent to left-align the text down the page
- font-size: 20px;
- font-weight: 200;
- color: @navbarBrandColor;
- text-shadow: 0 1px 0 @navbarBackgroundHighlight;
- &:hover,
- &:focus {
- text-decoration: none;
- }
-}
-
-// Plain text in topbar
-// -------------------------
-.navbar-text {
- margin-bottom: 0;
- line-height: @navbarHeight;
- color: @navbarText;
-}
-
-// Janky solution for now to account for links outside the .nav
-// -------------------------
-.navbar-link {
- color: @navbarLinkColor;
- &:hover,
- &:focus {
- color: @navbarLinkColorHover;
- }
-}
-
-// Dividers in navbar
-// -------------------------
-.navbar .divider-vertical {
- height: @navbarHeight;
- margin: 0 9px;
- border-left: 1px solid @navbarBackground;
- border-right: 1px solid @navbarBackgroundHighlight;
-}
-
-// Buttons in navbar
-// -------------------------
-.navbar .btn,
-.navbar .btn-group {
- .navbarVerticalAlign(30px); // Vertically center in navbar
-}
-.navbar .btn-group .btn,
-.navbar .input-prepend .btn,
-.navbar .input-append .btn,
-.navbar .input-prepend .btn-group,
-.navbar .input-append .btn-group {
- margin-top: 0; // then undo the margin here so we don't accidentally double it
-}
-
-// Navbar forms
-// -------------------------
-.navbar-form {
- margin-bottom: 0; // remove default bottom margin
- .clearfix();
- input,
- select,
- .radio,
- .checkbox {
- .navbarVerticalAlign(30px); // Vertically center in navbar
- }
- input,
- select,
- .btn {
- display: inline-block;
- margin-bottom: 0;
- }
- input[type="image"],
- input[type="checkbox"],
- input[type="radio"] {
- margin-top: 3px;
- }
- .input-append,
- .input-prepend {
- margin-top: 5px;
- white-space: nowrap; // prevent two items from separating within a .navbar-form that has .pull-left
- input {
- margin-top: 0; // remove the margin on top since it's on the parent
- }
- }
-}
-
-// Navbar search
-// -------------------------
-.navbar-search {
- position: relative;
- float: left;
- .navbarVerticalAlign(30px); // Vertically center in navbar
- margin-bottom: 0;
- .search-query {
- margin-bottom: 0;
- padding: 4px 14px;
- #font > .sans-serif(13px, normal, 1);
- .border-radius(15px); // redeclare because of specificity of the type attribute
- }
-}
-
-
-
-// Static navbar
-// -------------------------
-
-.navbar-static-top {
- position: static;
- margin-bottom: 0; // remove 18px margin for default navbar
- .navbar-inner {
- .border-radius(0);
- }
-}
-
-
-
-// Fixed navbar
-// -------------------------
-
-// Shared (top/bottom) styles
-.navbar-fixed-top,
-.navbar-fixed-bottom {
- position: fixed;
- right: 0;
- left: 0;
- z-index: @zindexFixedNavbar;
- margin-bottom: 0; // remove 18px margin for default navbar
-}
-.navbar-fixed-top .navbar-inner,
-.navbar-static-top .navbar-inner {
- border-width: 0 0 1px;
-}
-.navbar-fixed-bottom .navbar-inner {
- border-width: 1px 0 0;
-}
-.navbar-fixed-top .navbar-inner,
-.navbar-fixed-bottom .navbar-inner {
- padding-left: 0;
- padding-right: 0;
- .border-radius(0);
-}
-
-// Reset container width
-// Required here as we reset the width earlier on and the grid mixins don't override early enough
-.navbar-static-top .container,
-.navbar-fixed-top .container,
-.navbar-fixed-bottom .container {
- #grid > .core > .span(@gridColumns);
-}
-
-// Fixed to top
-.navbar-fixed-top {
- top: 0;
-}
-.navbar-fixed-top,
-.navbar-static-top {
- .navbar-inner {
- .box-shadow(~"0 1px 10px rgba(0,0,0,.1)");
- }
-}
-
-// Fixed to bottom
-.navbar-fixed-bottom {
- bottom: 0;
- .navbar-inner {
- .box-shadow(~"0 -1px 10px rgba(0,0,0,.1)");
- }
-}
-
-
-
-// NAVIGATION
-// ----------
-
-.navbar .nav {
- position: relative;
- left: 0;
- display: block;
- float: left;
- margin: 0 10px 0 0;
-}
-.navbar .nav.pull-right {
- float: right; // redeclare due to specificity
- margin-right: 0; // remove margin on float right nav
-}
-.navbar .nav > li {
- float: left;
-}
-
-// Links
-.navbar .nav > li > a {
- float: none;
- // Vertically center the text given @navbarHeight
- padding: ((@navbarHeight - @baseLineHeight) / 2) 15px ((@navbarHeight - @baseLineHeight) / 2);
- color: @navbarLinkColor;
- text-decoration: none;
- text-shadow: 0 1px 0 @navbarBackgroundHighlight;
-}
-.navbar .nav .dropdown-toggle .caret {
- margin-top: 8px;
-}
-
-// Hover/focus
-.navbar .nav > li > a:focus,
-.navbar .nav > li > a:hover {
- background-color: @navbarLinkBackgroundHover; // "transparent" is default to differentiate :hover/:focus from .active
- color: @navbarLinkColorHover;
- text-decoration: none;
-}
-
-// Active nav items
-.navbar .nav > .active > a,
-.navbar .nav > .active > a:hover,
-.navbar .nav > .active > a:focus {
- color: @navbarLinkColorActive;
- text-decoration: none;
- background-color: @navbarLinkBackgroundActive;
- .box-shadow(inset 0 3px 8px rgba(0,0,0,.125));
-}
-
-// Navbar button for toggling navbar items in responsive layouts
-// These definitions need to come after '.navbar .btn'
-.navbar .btn-navbar {
- display: none;
- float: right;
- padding: 7px 10px;
- margin-left: 5px;
- margin-right: 5px;
- .buttonBackground(darken(@navbarBackgroundHighlight, 5%), darken(@navbarBackground, 5%));
- .box-shadow(~"inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.075)");
-}
-.navbar .btn-navbar .icon-bar {
- display: block;
- width: 18px;
- height: 2px;
- background-color: #f5f5f5;
- .border-radius(1px);
- .box-shadow(0 1px 0 rgba(0,0,0,.25));
-}
-.btn-navbar .icon-bar + .icon-bar {
- margin-top: 3px;
-}
-
-
-
-// Dropdown menus
-// --------------
-
-// Menu position and menu carets
-.navbar .nav > li > .dropdown-menu {
- &:before {
- content: '';
- display: inline-block;
- border-left: 7px solid transparent;
- border-right: 7px solid transparent;
- border-bottom: 7px solid #ccc;
- border-bottom-color: @dropdownBorder;
- position: absolute;
- top: -7px;
- left: 9px;
- }
- &:after {
- content: '';
- display: inline-block;
- border-left: 6px solid transparent;
- border-right: 6px solid transparent;
- border-bottom: 6px solid @dropdownBackground;
- position: absolute;
- top: -6px;
- left: 10px;
- }
-}
-// Menu position and menu caret support for dropups via extra dropup class
-.navbar-fixed-bottom .nav > li > .dropdown-menu {
- &:before {
- border-top: 7px solid #ccc;
- border-top-color: @dropdownBorder;
- border-bottom: 0;
- bottom: -7px;
- top: auto;
- }
- &:after {
- border-top: 6px solid @dropdownBackground;
- border-bottom: 0;
- bottom: -6px;
- top: auto;
- }
-}
-
-// Caret should match text color on hover/focus
-.navbar .nav li.dropdown > a:hover .caret,
-.navbar .nav li.dropdown > a:focus .caret {
- border-top-color: @navbarLinkColorHover;
- border-bottom-color: @navbarLinkColorHover;
-}
-
-// Remove background color from open dropdown
-.navbar .nav li.dropdown.open > .dropdown-toggle,
-.navbar .nav li.dropdown.active > .dropdown-toggle,
-.navbar .nav li.dropdown.open.active > .dropdown-toggle {
- background-color: @navbarLinkBackgroundActive;
- color: @navbarLinkColorActive;
-}
-.navbar .nav li.dropdown > .dropdown-toggle .caret {
- border-top-color: @navbarLinkColor;
- border-bottom-color: @navbarLinkColor;
-}
-.navbar .nav li.dropdown.open > .dropdown-toggle .caret,
-.navbar .nav li.dropdown.active > .dropdown-toggle .caret,
-.navbar .nav li.dropdown.open.active > .dropdown-toggle .caret {
- border-top-color: @navbarLinkColorActive;
- border-bottom-color: @navbarLinkColorActive;
-}
-
-// Right aligned menus need alt position
-.navbar .pull-right > li > .dropdown-menu,
-.navbar .nav > li > .dropdown-menu.pull-right {
- left: auto;
- right: 0;
- &:before {
- left: auto;
- right: 12px;
- }
- &:after {
- left: auto;
- right: 13px;
- }
- .dropdown-menu {
- left: auto;
- right: 100%;
- margin-left: 0;
- margin-right: -1px;
- .border-radius(6px 0 6px 6px);
- }
-}
-
-
-// Inverted navbar
-// -------------------------
-
-.navbar-inverse {
-
- .navbar-inner {
- #gradient > .vertical(@navbarInverseBackgroundHighlight, @navbarInverseBackground);
- border-color: @navbarInverseBorder;
- }
-
- .brand,
- .nav > li > a {
- color: @navbarInverseLinkColor;
- text-shadow: 0 -1px 0 rgba(0,0,0,.25);
- &:hover,
- &:focus {
- color: @navbarInverseLinkColorHover;
- }
- }
-
- .brand {
- color: @navbarInverseBrandColor;
- }
-
- .navbar-text {
- color: @navbarInverseText;
- }
-
- .nav > li > a:focus,
- .nav > li > a:hover {
- background-color: @navbarInverseLinkBackgroundHover;
- color: @navbarInverseLinkColorHover;
- }
-
- .nav .active > a,
- .nav .active > a:hover,
- .nav .active > a:focus {
- color: @navbarInverseLinkColorActive;
- background-color: @navbarInverseLinkBackgroundActive;
- }
-
- // Inline text links
- .navbar-link {
- color: @navbarInverseLinkColor;
- &:hover,
- &:focus {
- color: @navbarInverseLinkColorHover;
- }
- }
-
- // Dividers in navbar
- .divider-vertical {
- border-left-color: @navbarInverseBackground;
- border-right-color: @navbarInverseBackgroundHighlight;
- }
-
- // Dropdowns
- .nav li.dropdown.open > .dropdown-toggle,
- .nav li.dropdown.active > .dropdown-toggle,
- .nav li.dropdown.open.active > .dropdown-toggle {
- background-color: @navbarInverseLinkBackgroundActive;
- color: @navbarInverseLinkColorActive;
- }
- .nav li.dropdown > a:hover .caret,
- .nav li.dropdown > a:focus .caret {
- border-top-color: @navbarInverseLinkColorActive;
- border-bottom-color: @navbarInverseLinkColorActive;
- }
- .nav li.dropdown > .dropdown-toggle .caret {
- border-top-color: @navbarInverseLinkColor;
- border-bottom-color: @navbarInverseLinkColor;
- }
- .nav li.dropdown.open > .dropdown-toggle .caret,
- .nav li.dropdown.active > .dropdown-toggle .caret,
- .nav li.dropdown.open.active > .dropdown-toggle .caret {
- border-top-color: @navbarInverseLinkColorActive;
- border-bottom-color: @navbarInverseLinkColorActive;
- }
-
- // Navbar search
- .navbar-search {
- .search-query {
- color: @white;
- background-color: @navbarInverseSearchBackground;
- border-color: @navbarInverseSearchBorder;
- .box-shadow(~"inset 0 1px 2px rgba(0,0,0,.1), 0 1px 0 rgba(255,255,255,.15)");
- .transition(none);
- .placeholder(@navbarInverseSearchPlaceholderColor);
-
- // Focus states (we use .focused since IE7-8 and down doesn't support :focus)
- &:focus,
- &.focused {
- padding: 5px 15px;
- color: @grayDark;
- text-shadow: 0 1px 0 @white;
- background-color: @navbarInverseSearchBackgroundFocus;
- border: 0;
- .box-shadow(0 0 3px rgba(0,0,0,.15));
- outline: 0;
- }
- }
- }
-
- // Navbar collapse button
- .btn-navbar {
- .buttonBackground(darken(@navbarInverseBackgroundHighlight, 5%), darken(@navbarInverseBackground, 5%));
- }
-
-}
diff --git a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/navs.less b/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/navs.less
deleted file mode 100644
index 01cd805..0000000
--- a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/navs.less
+++ /dev/null
@@ -1,409 +0,0 @@
-//
-// Navs
-// --------------------------------------------------
-
-
-// BASE CLASS
-// ----------
-
-.nav {
- margin-left: 0;
- margin-bottom: @baseLineHeight;
- list-style: none;
-}
-
-// Make links block level
-.nav > li > a {
- display: block;
-}
-.nav > li > a:hover,
-.nav > li > a:focus {
- text-decoration: none;
- background-color: @grayLighter;
-}
-
-// Prevent IE8 from misplacing imgs
-// See https://github.com/h5bp/html5-boilerplate/issues/984#issuecomment-3985989
-.nav > li > a > img {
- max-width: none;
-}
-
-// Redeclare pull classes because of specifity
-.nav > .pull-right {
- float: right;
-}
-
-// Nav headers (for dropdowns and lists)
-.nav-header {
- display: block;
- padding: 3px 15px;
- font-size: 11px;
- font-weight: bold;
- line-height: @baseLineHeight;
- color: @grayLight;
- text-shadow: 0 1px 0 rgba(255,255,255,.5);
- text-transform: uppercase;
-}
-// Space them out when they follow another list item (link)
-.nav li + .nav-header {
- margin-top: 9px;
-}
-
-
-
-// NAV LIST
-// --------
-
-.nav-list {
- padding-left: 15px;
- padding-right: 15px;
- margin-bottom: 0;
-}
-.nav-list > li > a,
-.nav-list .nav-header {
- margin-left: -15px;
- margin-right: -15px;
- text-shadow: 0 1px 0 rgba(255,255,255,.5);
-}
-.nav-list > li > a {
- padding: 3px 15px;
-}
-.nav-list > .active > a,
-.nav-list > .active > a:hover,
-.nav-list > .active > a:focus {
- color: @white;
- text-shadow: 0 -1px 0 rgba(0,0,0,.2);
- background-color: @linkColor;
-}
-.nav-list [class^="icon-"],
-.nav-list [class*=" icon-"] {
- margin-right: 2px;
-}
-// Dividers (basically an hr) within the dropdown
-.nav-list .divider {
- .nav-divider();
-}
-
-
-
-// TABS AND PILLS
-// -------------
-
-// Common styles
-.nav-tabs,
-.nav-pills {
- .clearfix();
-}
-.nav-tabs > li,
-.nav-pills > li {
- float: left;
-}
-.nav-tabs > li > a,
-.nav-pills > li > a {
- padding-right: 12px;
- padding-left: 12px;
- margin-right: 2px;
- line-height: 14px; // keeps the overall height an even number
-}
-
-// TABS
-// ----
-
-// Give the tabs something to sit on
-.nav-tabs {
- border-bottom: 1px solid #ddd;
-}
-// Make the list-items overlay the bottom border
-.nav-tabs > li {
- margin-bottom: -1px;
-}
-// Actual tabs (as links)
-.nav-tabs > li > a {
- padding-top: 8px;
- padding-bottom: 8px;
- line-height: @baseLineHeight;
- border: 1px solid transparent;
- .border-radius(4px 4px 0 0);
- &:hover,
- &:focus {
- border-color: @grayLighter @grayLighter #ddd;
- }
-}
-// Active state, and it's :hover/:focus to override normal :hover/:focus
-.nav-tabs > .active > a,
-.nav-tabs > .active > a:hover,
-.nav-tabs > .active > a:focus {
- color: @gray;
- background-color: @bodyBackground;
- border: 1px solid #ddd;
- border-bottom-color: transparent;
- cursor: default;
-}
-
-
-// PILLS
-// -----
-
-// Links rendered as pills
-.nav-pills > li > a {
- padding-top: 8px;
- padding-bottom: 8px;
- margin-top: 2px;
- margin-bottom: 2px;
- .border-radius(5px);
-}
-
-// Active state
-.nav-pills > .active > a,
-.nav-pills > .active > a:hover,
-.nav-pills > .active > a:focus {
- color: @white;
- background-color: @linkColor;
-}
-
-
-
-// STACKED NAV
-// -----------
-
-// Stacked tabs and pills
-.nav-stacked > li {
- float: none;
-}
-.nav-stacked > li > a {
- margin-right: 0; // no need for the gap between nav items
-}
-
-// Tabs
-.nav-tabs.nav-stacked {
- border-bottom: 0;
-}
-.nav-tabs.nav-stacked > li > a {
- border: 1px solid #ddd;
- .border-radius(0);
-}
-.nav-tabs.nav-stacked > li:first-child > a {
- .border-top-radius(4px);
-}
-.nav-tabs.nav-stacked > li:last-child > a {
- .border-bottom-radius(4px);
-}
-.nav-tabs.nav-stacked > li > a:hover,
-.nav-tabs.nav-stacked > li > a:focus {
- border-color: #ddd;
- z-index: 2;
-}
-
-// Pills
-.nav-pills.nav-stacked > li > a {
- margin-bottom: 3px;
-}
-.nav-pills.nav-stacked > li:last-child > a {
- margin-bottom: 1px; // decrease margin to match sizing of stacked tabs
-}
-
-
-
-// DROPDOWNS
-// ---------
-
-.nav-tabs .dropdown-menu {
- .border-radius(0 0 6px 6px); // remove the top rounded corners here since there is a hard edge above the menu
-}
-.nav-pills .dropdown-menu {
- .border-radius(6px); // make rounded corners match the pills
-}
-
-// Default dropdown links
-// -------------------------
-// Make carets use linkColor to start
-.nav .dropdown-toggle .caret {
- border-top-color: @linkColor;
- border-bottom-color: @linkColor;
- margin-top: 6px;
-}
-.nav .dropdown-toggle:hover .caret,
-.nav .dropdown-toggle:focus .caret {
- border-top-color: @linkColorHover;
- border-bottom-color: @linkColorHover;
-}
-/* move down carets for tabs */
-.nav-tabs .dropdown-toggle .caret {
- margin-top: 8px;
-}
-
-// Active dropdown links
-// -------------------------
-.nav .active .dropdown-toggle .caret {
- border-top-color: #fff;
- border-bottom-color: #fff;
-}
-.nav-tabs .active .dropdown-toggle .caret {
- border-top-color: @gray;
- border-bottom-color: @gray;
-}
-
-// Active:hover/:focus dropdown links
-// -------------------------
-.nav > .dropdown.active > a:hover,
-.nav > .dropdown.active > a:focus {
- cursor: pointer;
-}
-
-// Open dropdowns
-// -------------------------
-.nav-tabs .open .dropdown-toggle,
-.nav-pills .open .dropdown-toggle,
-.nav > li.dropdown.open.active > a:hover,
-.nav > li.dropdown.open.active > a:focus {
- color: @white;
- background-color: @grayLight;
- border-color: @grayLight;
-}
-.nav li.dropdown.open .caret,
-.nav li.dropdown.open.active .caret,
-.nav li.dropdown.open a:hover .caret,
-.nav li.dropdown.open a:focus .caret {
- border-top-color: @white;
- border-bottom-color: @white;
- .opacity(100);
-}
-
-// Dropdowns in stacked tabs
-.tabs-stacked .open > a:hover,
-.tabs-stacked .open > a:focus {
- border-color: @grayLight;
-}
-
-
-
-// TABBABLE
-// --------
-
-
-// COMMON STYLES
-// -------------
-
-// Clear any floats
-.tabbable {
- .clearfix();
-}
-.tab-content {
- overflow: auto; // prevent content from running below tabs
-}
-
-// Remove border on bottom, left, right
-.tabs-below > .nav-tabs,
-.tabs-right > .nav-tabs,
-.tabs-left > .nav-tabs {
- border-bottom: 0;
-}
-
-// Show/hide tabbable areas
-.tab-content > .tab-pane,
-.pill-content > .pill-pane {
- display: none;
-}
-.tab-content > .active,
-.pill-content > .active {
- display: block;
-}
-
-
-// BOTTOM
-// ------
-
-.tabs-below > .nav-tabs {
- border-top: 1px solid #ddd;
-}
-.tabs-below > .nav-tabs > li {
- margin-top: -1px;
- margin-bottom: 0;
-}
-.tabs-below > .nav-tabs > li > a {
- .border-radius(0 0 4px 4px);
- &:hover,
- &:focus {
- border-bottom-color: transparent;
- border-top-color: #ddd;
- }
-}
-.tabs-below > .nav-tabs > .active > a,
-.tabs-below > .nav-tabs > .active > a:hover,
-.tabs-below > .nav-tabs > .active > a:focus {
- border-color: transparent #ddd #ddd #ddd;
-}
-
-// LEFT & RIGHT
-// ------------
-
-// Common styles
-.tabs-left > .nav-tabs > li,
-.tabs-right > .nav-tabs > li {
- float: none;
-}
-.tabs-left > .nav-tabs > li > a,
-.tabs-right > .nav-tabs > li > a {
- min-width: 74px;
- margin-right: 0;
- margin-bottom: 3px;
-}
-
-// Tabs on the left
-.tabs-left > .nav-tabs {
- float: left;
- margin-right: 19px;
- border-right: 1px solid #ddd;
-}
-.tabs-left > .nav-tabs > li > a {
- margin-right: -1px;
- .border-radius(4px 0 0 4px);
-}
-.tabs-left > .nav-tabs > li > a:hover,
-.tabs-left > .nav-tabs > li > a:focus {
- border-color: @grayLighter #ddd @grayLighter @grayLighter;
-}
-.tabs-left > .nav-tabs .active > a,
-.tabs-left > .nav-tabs .active > a:hover,
-.tabs-left > .nav-tabs .active > a:focus {
- border-color: #ddd transparent #ddd #ddd;
- *border-right-color: @white;
-}
-
-// Tabs on the right
-.tabs-right > .nav-tabs {
- float: right;
- margin-left: 19px;
- border-left: 1px solid #ddd;
-}
-.tabs-right > .nav-tabs > li > a {
- margin-left: -1px;
- .border-radius(0 4px 4px 0);
-}
-.tabs-right > .nav-tabs > li > a:hover,
-.tabs-right > .nav-tabs > li > a:focus {
- border-color: @grayLighter @grayLighter @grayLighter #ddd;
-}
-.tabs-right > .nav-tabs .active > a,
-.tabs-right > .nav-tabs .active > a:hover,
-.tabs-right > .nav-tabs .active > a:focus {
- border-color: #ddd #ddd #ddd transparent;
- *border-left-color: @white;
-}
-
-
-
-// DISABLED STATES
-// ---------------
-
-// Gray out text
-.nav > .disabled > a {
- color: @grayLight;
-}
-// Nuke hover/focus effects
-.nav > .disabled > a:hover,
-.nav > .disabled > a:focus {
- text-decoration: none;
- background-color: transparent;
- cursor: default;
-}
diff --git a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/pager.less b/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/pager.less
deleted file mode 100644
index 1476188..0000000
--- a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/pager.less
+++ /dev/null
@@ -1,43 +0,0 @@
-//
-// Pager pagination
-// --------------------------------------------------
-
-
-.pager {
- margin: @baseLineHeight 0;
- list-style: none;
- text-align: center;
- .clearfix();
-}
-.pager li {
- display: inline;
-}
-.pager li > a,
-.pager li > span {
- display: inline-block;
- padding: 5px 14px;
- background-color: #fff;
- border: 1px solid #ddd;
- .border-radius(15px);
-}
-.pager li > a:hover,
-.pager li > a:focus {
- text-decoration: none;
- background-color: #f5f5f5;
-}
-.pager .next > a,
-.pager .next > span {
- float: right;
-}
-.pager .previous > a,
-.pager .previous > span {
- float: left;
-}
-.pager .disabled > a,
-.pager .disabled > a:hover,
-.pager .disabled > a:focus,
-.pager .disabled > span {
- color: @grayLight;
- background-color: #fff;
- cursor: default;
-}
\ No newline at end of file
diff --git a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/pagination.less b/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/pagination.less
deleted file mode 100644
index a789db2..0000000
--- a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/pagination.less
+++ /dev/null
@@ -1,123 +0,0 @@
-//
-// Pagination (multiple pages)
-// --------------------------------------------------
-
-// Space out pagination from surrounding content
-.pagination {
- margin: @baseLineHeight 0;
-}
-
-.pagination ul {
- // Allow for text-based alignment
- display: inline-block;
- .ie7-inline-block();
- // Reset default ul styles
- margin-left: 0;
- margin-bottom: 0;
- // Visuals
- .border-radius(@baseBorderRadius);
- .box-shadow(0 1px 2px rgba(0,0,0,.05));
-}
-.pagination ul > li {
- display: inline; // Remove list-style and block-level defaults
-}
-.pagination ul > li > a,
-.pagination ul > li > span {
- float: left; // Collapse white-space
- padding: 4px 12px;
- line-height: @baseLineHeight;
- text-decoration: none;
- background-color: @paginationBackground;
- border: 1px solid @paginationBorder;
- border-left-width: 0;
-}
-.pagination ul > li > a:hover,
-.pagination ul > li > a:focus,
-.pagination ul > .active > a,
-.pagination ul > .active > span {
- background-color: @paginationActiveBackground;
-}
-.pagination ul > .active > a,
-.pagination ul > .active > span {
- color: @grayLight;
- cursor: default;
-}
-.pagination ul > .disabled > span,
-.pagination ul > .disabled > a,
-.pagination ul > .disabled > a:hover,
-.pagination ul > .disabled > a:focus {
- color: @grayLight;
- background-color: transparent;
- cursor: default;
-}
-.pagination ul > li:first-child > a,
-.pagination ul > li:first-child > span {
- border-left-width: 1px;
- .border-left-radius(@baseBorderRadius);
-}
-.pagination ul > li:last-child > a,
-.pagination ul > li:last-child > span {
- .border-right-radius(@baseBorderRadius);
-}
-
-
-// Alignment
-// --------------------------------------------------
-
-.pagination-centered {
- text-align: center;
-}
-.pagination-right {
- text-align: right;
-}
-
-
-// Sizing
-// --------------------------------------------------
-
-// Large
-.pagination-large {
- ul > li > a,
- ul > li > span {
- padding: @paddingLarge;
- font-size: @fontSizeLarge;
- }
- ul > li:first-child > a,
- ul > li:first-child > span {
- .border-left-radius(@borderRadiusLarge);
- }
- ul > li:last-child > a,
- ul > li:last-child > span {
- .border-right-radius(@borderRadiusLarge);
- }
-}
-
-// Small and mini
-.pagination-mini,
-.pagination-small {
- ul > li:first-child > a,
- ul > li:first-child > span {
- .border-left-radius(@borderRadiusSmall);
- }
- ul > li:last-child > a,
- ul > li:last-child > span {
- .border-right-radius(@borderRadiusSmall);
- }
-}
-
-// Small
-.pagination-small {
- ul > li > a,
- ul > li > span {
- padding: @paddingSmall;
- font-size: @fontSizeSmall;
- }
-}
-// Mini
-.pagination-mini {
- ul > li > a,
- ul > li > span {
- padding: @paddingMini;
- font-size: @fontSizeMini;
- }
-}
diff --git a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/popovers.less b/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/popovers.less
deleted file mode 100644
index aae35c8..0000000
--- a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/popovers.less
+++ /dev/null
@@ -1,133 +0,0 @@
-//
-// Popovers
-// --------------------------------------------------
-
-
-.popover {
- position: absolute;
- top: 0;
- left: 0;
- z-index: @zindexPopover;
- display: none;
- max-width: 276px;
- padding: 1px;
- text-align: left; // Reset given new insertion method
- background-color: @popoverBackground;
- -webkit-background-clip: padding-box;
- -moz-background-clip: padding;
- background-clip: padding-box;
- border: 1px solid #ccc;
- border: 1px solid rgba(0,0,0,.2);
- .border-radius(6px);
- .box-shadow(0 5px 10px rgba(0,0,0,.2));
-
- // Overrides for proper insertion
- white-space: normal;
-
- // Offset the popover to account for the popover arrow
- &.top { margin-top: -10px; }
- &.right { margin-left: 10px; }
- &.bottom { margin-top: 10px; }
- &.left { margin-left: -10px; }
-}
-
-.popover-title {
- margin: 0; // reset heading margin
- padding: 8px 14px;
- font-size: 14px;
- font-weight: normal;
- line-height: 18px;
- background-color: @popoverTitleBackground;
- border-bottom: 1px solid darken(@popoverTitleBackground, 5%);
- .border-radius(5px 5px 0 0);
-
- &:empty {
- display: none;
- }
-}
-
-.popover-content {
- padding: 9px 14px;
-}
-
-// Arrows
-//
-// .arrow is outer, .arrow:after is inner
-
-.popover .arrow,
-.popover .arrow:after {
- position: absolute;
- display: block;
- width: 0;
- height: 0;
- border-color: transparent;
- border-style: solid;
-}
-.popover .arrow {
- border-width: @popoverArrowOuterWidth;
-}
-.popover .arrow:after {
- border-width: @popoverArrowWidth;
- content: "";
-}
-
-.popover {
- &.top .arrow {
- left: 50%;
- margin-left: -@popoverArrowOuterWidth;
- border-bottom-width: 0;
- border-top-color: #999; // IE8 fallback
- border-top-color: @popoverArrowOuterColor;
- bottom: -@popoverArrowOuterWidth;
- &:after {
- bottom: 1px;
- margin-left: -@popoverArrowWidth;
- border-bottom-width: 0;
- border-top-color: @popoverArrowColor;
- }
- }
- &.right .arrow {
- top: 50%;
- left: -@popoverArrowOuterWidth;
- margin-top: -@popoverArrowOuterWidth;
- border-left-width: 0;
- border-right-color: #999; // IE8 fallback
- border-right-color: @popoverArrowOuterColor;
- &:after {
- left: 1px;
- bottom: -@popoverArrowWidth;
- border-left-width: 0;
- border-right-color: @popoverArrowColor;
- }
- }
- &.bottom .arrow {
- left: 50%;
- margin-left: -@popoverArrowOuterWidth;
- border-top-width: 0;
- border-bottom-color: #999; // IE8 fallback
- border-bottom-color: @popoverArrowOuterColor;
- top: -@popoverArrowOuterWidth;
- &:after {
- top: 1px;
- margin-left: -@popoverArrowWidth;
- border-top-width: 0;
- border-bottom-color: @popoverArrowColor;
- }
- }
-
- &.left .arrow {
- top: 50%;
- right: -@popoverArrowOuterWidth;
- margin-top: -@popoverArrowOuterWidth;
- border-right-width: 0;
- border-left-color: #999; // IE8 fallback
- border-left-color: @popoverArrowOuterColor;
- &:after {
- right: 1px;
- border-right-width: 0;
- border-left-color: @popoverArrowColor;
- bottom: -@popoverArrowWidth;
- }
- }
-
-}
diff --git a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/progress-bars.less b/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/progress-bars.less
deleted file mode 100644
index 5e0c3dd..0000000
--- a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/progress-bars.less
+++ /dev/null
@@ -1,122 +0,0 @@
-//
-// Progress bars
-// --------------------------------------------------
-
-
-// ANIMATIONS
-// ----------
-
-// Webkit
-@-webkit-keyframes progress-bar-stripes {
- from { background-position: 40px 0; }
- to { background-position: 0 0; }
-}
-
-// Firefox
-@-moz-keyframes progress-bar-stripes {
- from { background-position: 40px 0; }
- to { background-position: 0 0; }
-}
-
-// IE9
-@-ms-keyframes progress-bar-stripes {
- from { background-position: 40px 0; }
- to { background-position: 0 0; }
-}
-
-// Opera
-@-o-keyframes progress-bar-stripes {
- from { background-position: 0 0; }
- to { background-position: 40px 0; }
-}
-
-// Spec
-@keyframes progress-bar-stripes {
- from { background-position: 40px 0; }
- to { background-position: 0 0; }
-}
-
-
-
-// THE BARS
-// --------
-
-// Outer container
-.progress {
- overflow: hidden;
- height: @baseLineHeight;
- margin-bottom: @baseLineHeight;
- #gradient > .vertical(#f5f5f5, #f9f9f9);
- .box-shadow(inset 0 1px 2px rgba(0,0,0,.1));
- .border-radius(@baseBorderRadius);
-}
-
-// Bar of progress
-.progress .bar {
- width: 0%;
- height: 100%;
- color: @white;
- float: left;
- font-size: 12px;
- text-align: center;
- text-shadow: 0 -1px 0 rgba(0,0,0,.25);
- #gradient > .vertical(#149bdf, #0480be);
- .box-shadow(inset 0 -1px 0 rgba(0,0,0,.15));
- .box-sizing(border-box);
- .transition(width .6s ease);
-}
-.progress .bar + .bar {
- .box-shadow(~"inset 1px 0 0 rgba(0,0,0,.15), inset 0 -1px 0 rgba(0,0,0,.15)");
-}
-
-// Striped bars
-.progress-striped .bar {
- #gradient > .striped(#149bdf);
- .background-size(40px 40px);
-}
-
-// Call animation for the active one
-.progress.active .bar {
- -webkit-animation: progress-bar-stripes 2s linear infinite;
- -moz-animation: progress-bar-stripes 2s linear infinite;
- -ms-animation: progress-bar-stripes 2s linear infinite;
- -o-animation: progress-bar-stripes 2s linear infinite;
- animation: progress-bar-stripes 2s linear infinite;
-}
-
-
-
-// COLORS
-// ------
-
-// Danger (red)
-.progress-danger .bar, .progress .bar-danger {
- #gradient > .vertical(#ee5f5b, #c43c35);
-}
-.progress-danger.progress-striped .bar, .progress-striped .bar-danger {
- #gradient > .striped(#ee5f5b);
-}
-
-// Success (green)
-.progress-success .bar, .progress .bar-success {
- #gradient > .vertical(#62c462, #57a957);
-}
-.progress-success.progress-striped .bar, .progress-striped .bar-success {
- #gradient > .striped(#62c462);
-}
-
-// Info (teal)
-.progress-info .bar, .progress .bar-info {
- #gradient > .vertical(#5bc0de, #339bb9);
-}
-.progress-info.progress-striped .bar, .progress-striped .bar-info {
- #gradient > .striped(#5bc0de);
-}
-
-// Warning (orange)
-.progress-warning .bar, .progress .bar-warning {
- #gradient > .vertical(lighten(@orange, 15%), @orange);
-}
-.progress-warning.progress-striped .bar, .progress-striped .bar-warning {
- #gradient > .striped(lighten(@orange, 15%));
-}
diff --git a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/reset.less b/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/reset.less
deleted file mode 100644
index 359e38b..0000000
--- a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/reset.less
+++ /dev/null
@@ -1,216 +0,0 @@
-//
-// Reset CSS
-// Adapted from http://github.com/necolas/normalize.css
-// --------------------------------------------------
-
-
-// Display in IE6-9 and FF3
-// -------------------------
-
-article,
-aside,
-details,
-figcaption,
-figure,
-footer,
-header,
-hgroup,
-nav,
-section {
- display: block;
-}
-
-// Display block in IE6-9 and FF3
-// -------------------------
-
-audio,
-canvas,
-video {
- display: inline-block;
- *display: inline;
- *zoom: 1;
-}
-
-// Prevents modern browsers from displaying 'audio' without controls
-// -------------------------
-
-audio:not([controls]) {
- display: none;
-}
-
-// Base settings
-// -------------------------
-
-html {
- font-size: 100%;
- -webkit-text-size-adjust: 100%;
- -ms-text-size-adjust: 100%;
-}
-// Focus states
-a:focus {
- .tab-focus();
-}
-// Hover & Active
-a:hover,
-a:active {
- outline: 0;
-}
-
-// Prevents sub and sup affecting line-height in all browsers
-// -------------------------
-
-sub,
-sup {
- position: relative;
- font-size: 75%;
- line-height: 0;
- vertical-align: baseline;
-}
-sup {
- top: -0.5em;
-}
-sub {
- bottom: -0.25em;
-}
-
-// Img border in a's and image quality
-// -------------------------
-
-img {
- /* Responsive images (ensure images don't scale beyond their parents) */
- max-width: 100%; /* Part 1: Set a maximum relative to the parent */
- width: auto\9; /* IE7-8 need help adjusting responsive images */
- height: auto; /* Part 2: Scale the height according to the width, otherwise you get stretching */
-
- vertical-align: middle;
- border: 0;
- -ms-interpolation-mode: bicubic;
-}
-
-// Prevent max-width from affecting Google Maps
-#map_canvas img,
-.google-maps img {
- max-width: none;
-}
-
-// Forms
-// -------------------------
-
-// Font size in all browsers, margin changes, misc consistency
-button,
-input,
-select,
-textarea {
- margin: 0;
- font-size: 100%;
- vertical-align: middle;
-}
-button,
-input {
- *overflow: visible; // Inner spacing ie IE6/7
- line-height: normal; // FF3/4 have !important on line-height in UA stylesheet
-}
-button::-moz-focus-inner,
-input::-moz-focus-inner { // Inner padding and border oddities in FF3/4
- padding: 0;
- border: 0;
-}
-button,
-html input[type="button"], // Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio` and `video` controls.
-input[type="reset"],
-input[type="submit"] {
- -webkit-appearance: button; // Corrects inability to style clickable `input` types in iOS.
- cursor: pointer; // Improves usability and consistency of cursor style between image-type `input` and others.
-}
-label,
-select,
-button,
-input[type="button"],
-input[type="reset"],
-input[type="submit"],
-input[type="radio"],
-input[type="checkbox"] {
- cursor: pointer; // Improves usability and consistency of cursor style between image-type `input` and others.
-}
-input[type="search"] { // Appearance in Safari/Chrome
- .box-sizing(content-box);
- -webkit-appearance: textfield;
-}
-input[type="search"]::-webkit-search-decoration,
-input[type="search"]::-webkit-search-cancel-button {
- -webkit-appearance: none; // Inner-padding issues in Chrome OSX, Safari 5
-}
-textarea {
- overflow: auto; // Remove vertical scrollbar in IE6-9
- vertical-align: top; // Readability and alignment cross-browser
-}
-
-
-// Printing
-// -------------------------
-// Source: https://github.com/h5bp/html5-boilerplate/blob/master/css/main.css
-
-@media print {
-
- * {
- text-shadow: none !important;
- color: #000 !important; // Black prints faster: h5bp.com/s
- background: transparent !important;
- box-shadow: none !important;
- }
-
- a,
- a:visited {
- text-decoration: underline;
- }
-
- a[href]:after {
- content: " (" attr(href) ")";
- }
-
- abbr[title]:after {
- content: " (" attr(title) ")";
- }
-
- // Don't show links for images, or javascript/internal links
- .ir a:after,
- a[href^="javascript:"]:after,
- a[href^="#"]:after {
- content: "";
- }
-
- pre,
- blockquote {
- border: 1px solid #999;
- page-break-inside: avoid;
- }
-
- thead {
- display: table-header-group; // h5bp.com/t
- }
-
- tr,
- img {
- page-break-inside: avoid;
- }
-
- img {
- max-width: 100% !important;
- }
-
- @page {
- margin: 0.5cm;
- }
-
- p,
- h2,
- h3 {
- orphans: 3;
- widows: 3;
- }
-
- h2,
- h3 {
- page-break-after: avoid;
- }
-}
diff --git a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/responsive-1200px-min.less b/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/responsive-1200px-min.less
deleted file mode 100644
index 4f35ba6..0000000
--- a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/responsive-1200px-min.less
+++ /dev/null
@@ -1,28 +0,0 @@
-//
-// Responsive: Large desktop and up
-// --------------------------------------------------
-
-
-@media (min-width: 1200px) {
-
- // Fixed grid
- #grid > .core(@gridColumnWidth1200, @gridGutterWidth1200);
-
- // Fluid grid
- #grid > .fluid(@fluidGridColumnWidth1200, @fluidGridGutterWidth1200);
-
- // Input grid
- #grid > .input(@gridColumnWidth1200, @gridGutterWidth1200);
-
- // Thumbnails
- .thumbnails {
- margin-left: -@gridGutterWidth1200;
- }
- .thumbnails > li {
- margin-left: @gridGutterWidth1200;
- }
- .row-fluid .thumbnails {
- margin-left: 0;
- }
-
-}
diff --git a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/responsive-767px-max.less b/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/responsive-767px-max.less
deleted file mode 100644
index 128f4ce..0000000
--- a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/responsive-767px-max.less
+++ /dev/null
@@ -1,193 +0,0 @@
-//
-// Responsive: Landscape phone to desktop/tablet
-// --------------------------------------------------
-
-
-@media (max-width: 767px) {
-
- // Padding to set content in a bit
- body {
- padding-left: 20px;
- padding-right: 20px;
- }
- // Negative indent the now static "fixed" navbar
- .navbar-fixed-top,
- .navbar-fixed-bottom,
- .navbar-static-top {
- margin-left: -20px;
- margin-right: -20px;
- }
- // Remove padding on container given explicit padding set on body
- .container-fluid {
- padding: 0;
- }
-
- // TYPOGRAPHY
- // ----------
- // Reset horizontal dl
- .dl-horizontal {
- dt {
- float: none;
- clear: none;
- width: auto;
- text-align: left;
- }
- dd {
- margin-left: 0;
- }
- }
-
- // GRID & CONTAINERS
- // -----------------
- // Remove width from containers
- .container {
- width: auto;
- }
- // Fluid rows
- .row-fluid {
- width: 100%;
- }
- // Undo negative margin on rows and thumbnails
- .row,
- .thumbnails {
- margin-left: 0;
- }
- .thumbnails > li {
- float: none;
- margin-left: 0; // Reset the default margin for all li elements when no .span* classes are present
- }
- // Make all grid-sized elements block level again
- [class*="span"],
- .uneditable-input[class*="span"], // Makes uneditable inputs full-width when using grid sizing
- .row-fluid [class*="span"] {
- float: none;
- display: block;
- width: 100%;
- margin-left: 0;
- .box-sizing(border-box);
- }
- .span12,
- .row-fluid .span12 {
- width: 100%;
- .box-sizing(border-box);
- }
- .row-fluid [class*="offset"]:first-child {
- margin-left: 0;
- }
-
- // FORM FIELDS
- // -----------
- // Make span* classes full width
- .input-large,
- .input-xlarge,
- .input-xxlarge,
- input[class*="span"],
- select[class*="span"],
- textarea[class*="span"],
- .uneditable-input {
- .input-block-level();
- }
- // But don't let it screw up prepend/append inputs
- .input-prepend input,
- .input-append input,
- .input-prepend input[class*="span"],
- .input-append input[class*="span"] {
- display: inline-block; // redeclare so they don't wrap to new lines
- width: auto;
- }
- .controls-row [class*="span"] + [class*="span"] {
- margin-left: 0;
- }
-
- // Modals
- .modal {
- position: fixed;
- top: 20px;
- left: 20px;
- right: 20px;
- width: auto;
- margin: 0;
- &.fade { top: -100px; }
- &.fade.in { top: 20px; }
- }
-
-}
-
-
-
-// UP TO LANDSCAPE PHONE
-// ---------------------
-
-@media (max-width: 480px) {
-
- // Smooth out the collapsing/expanding nav
- .nav-collapse {
- -webkit-transform: translate3d(0, 0, 0); // activate the GPU
- }
-
- // Block level the page header small tag for readability
- .page-header h1 small {
- display: block;
- line-height: @baseLineHeight;
- }
-
- // Update checkboxes for iOS
- input[type="checkbox"],
- input[type="radio"] {
- border: 1px solid #ccc;
- }
-
- // Remove the horizontal form styles
- .form-horizontal {
- .control-label {
- float: none;
- width: auto;
- padding-top: 0;
- text-align: left;
- }
- // Move over all input controls and content
- .controls {
- margin-left: 0;
- }
- // Move the options list down to align with labels
- .control-list {
- padding-top: 0; // has to be padding because margin collaspes
- }
- // Move over buttons in .form-actions to align with .controls
- .form-actions {
- padding-left: 10px;
- padding-right: 10px;
- }
- }
-
- // Medias
- // Reset float and spacing to stack
- .media .pull-left,
- .media .pull-right {
- float: none;
- display: block;
- margin-bottom: 10px;
- }
- // Remove side margins since we stack instead of indent
- .media-object {
- margin-right: 0;
- margin-left: 0;
- }
-
- // Modals
- .modal {
- top: 10px;
- left: 10px;
- right: 10px;
- }
- .modal-header .close {
- padding: 10px;
- margin: -10px;
- }
-
- // Carousel
- .carousel-caption {
- position: static;
- }
-
-}
diff --git a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/responsive-768px-979px.less b/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/responsive-768px-979px.less
deleted file mode 100644
index 8e8c486..0000000
--- a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/responsive-768px-979px.less
+++ /dev/null
@@ -1,19 +0,0 @@
-//
-// Responsive: Tablet to desktop
-// --------------------------------------------------
-
-
-@media (min-width: 768px) and (max-width: 979px) {
-
- // Fixed grid
- #grid > .core(@gridColumnWidth768, @gridGutterWidth768);
-
- // Fluid grid
- #grid > .fluid(@fluidGridColumnWidth768, @fluidGridGutterWidth768);
-
- // Input grid
- #grid > .input(@gridColumnWidth768, @gridGutterWidth768);
-
- // No need to reset .thumbnails here since it's the same @gridGutterWidth
-
-}
diff --git a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/responsive-navbar.less b/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/responsive-navbar.less
deleted file mode 100644
index 21cd3ba..0000000
--- a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/responsive-navbar.less
+++ /dev/null
@@ -1,189 +0,0 @@
-//
-// Responsive: Navbar
-// --------------------------------------------------
-
-
-// TABLETS AND BELOW
-// -----------------
-@media (max-width: @navbarCollapseWidth) {
-
- // UNFIX THE TOPBAR
- // ----------------
- // Remove any padding from the body
- body {
- padding-top: 0;
- }
- // Unfix the navbars
- .navbar-fixed-top,
- .navbar-fixed-bottom {
- position: static;
- }
- .navbar-fixed-top {
- margin-bottom: @baseLineHeight;
- }
- .navbar-fixed-bottom {
- margin-top: @baseLineHeight;
- }
- .navbar-fixed-top .navbar-inner,
- .navbar-fixed-bottom .navbar-inner {
- padding: 5px;
- }
- .navbar .container {
- width: auto;
- padding: 0;
- }
- // Account for brand name
- .navbar .brand {
- padding-left: 10px;
- padding-right: 10px;
- margin: 0 0 0 -5px;
- }
-
- // COLLAPSIBLE NAVBAR
- // ------------------
- // Nav collapse clears brand
- .nav-collapse {
- clear: both;
- }
- // Block-level the nav
- .nav-collapse .nav {
- float: none;
- margin: 0 0 (@baseLineHeight / 2);
- }
- .nav-collapse .nav > li {
- float: none;
- }
- .nav-collapse .nav > li > a {
- margin-bottom: 2px;
- }
- .nav-collapse .nav > .divider-vertical {
- display: none;
- }
- .nav-collapse .nav .nav-header {
- color: @navbarText;
- text-shadow: none;
- }
- // Nav and dropdown links in navbar
- .nav-collapse .nav > li > a,
- .nav-collapse .dropdown-menu a {
- padding: 9px 15px;
- font-weight: bold;
- color: @navbarLinkColor;
- .border-radius(3px);
- }
- // Buttons
- .nav-collapse .btn {
- padding: 4px 10px 4px;
- font-weight: normal;
- .border-radius(@baseBorderRadius);
- }
- .nav-collapse .dropdown-menu li + li a {
- margin-bottom: 2px;
- }
- .nav-collapse .nav > li > a:hover,
- .nav-collapse .nav > li > a:focus,
- .nav-collapse .dropdown-menu a:hover,
- .nav-collapse .dropdown-menu a:focus {
- background-color: @navbarBackground;
- }
- .navbar-inverse .nav-collapse .nav > li > a,
- .navbar-inverse .nav-collapse .dropdown-menu a {
- color: @navbarInverseLinkColor;
- }
- .navbar-inverse .nav-collapse .nav > li > a:hover,
- .navbar-inverse .nav-collapse .nav > li > a:focus,
- .navbar-inverse .nav-collapse .dropdown-menu a:hover,
- .navbar-inverse .nav-collapse .dropdown-menu a:focus {
- background-color: @navbarInverseBackground;
- }
- // Buttons in the navbar
- .nav-collapse.in .btn-group {
- margin-top: 5px;
- padding: 0;
- }
- // Dropdowns in the navbar
- .nav-collapse .dropdown-menu {
- position: static;
- top: auto;
- left: auto;
- float: none;
- display: none;
- max-width: none;
- margin: 0 15px;
- padding: 0;
- background-color: transparent;
- border: none;
- .border-radius(0);
- .box-shadow(none);
- }
- .nav-collapse .open > .dropdown-menu {
- display: block;
- }
-
- .nav-collapse .dropdown-menu:before,
- .nav-collapse .dropdown-menu:after {
- display: none;
- }
- .nav-collapse .dropdown-menu .divider {
- display: none;
- }
- .nav-collapse .nav > li > .dropdown-menu {
- &:before,
- &:after {
- display: none;
- }
- }
- // Forms in navbar
- .nav-collapse .navbar-form,
- .nav-collapse .navbar-search {
- float: none;
- padding: (@baseLineHeight / 2) 15px;
- margin: (@baseLineHeight / 2) 0;
- border-top: 1px solid @navbarBackground;
- border-bottom: 1px solid @navbarBackground;
- .box-shadow(~"inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.1)");
- }
- .navbar-inverse .nav-collapse .navbar-form,
- .navbar-inverse .nav-collapse .navbar-search {
- border-top-color: @navbarInverseBackground;
- border-bottom-color: @navbarInverseBackground;
- }
- // Pull right (secondary) nav content
- .navbar .nav-collapse .nav.pull-right {
- float: none;
- margin-left: 0;
- }
- // Hide everything in the navbar save .brand and toggle button */
- .nav-collapse,
- .nav-collapse.collapse {
- overflow: hidden;
- height: 0;
- }
- // Navbar button
- .navbar .btn-navbar {
- display: block;
- }
-
- // STATIC NAVBAR
- // -------------
- .navbar-static .navbar-inner {
- padding-left: 10px;
- padding-right: 10px;
- }
-
-
-}
-
-
-// DEFAULT DESKTOP
-// ---------------
-
-@media (min-width: @navbarCollapseDesktopWidth) {
-
- // Required to make the collapsing navbar work on regular desktops
- .nav-collapse.collapse {
- height: auto !important;
- overflow: visible !important;
- }
-
-}
diff --git a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/responsive-utilities.less b/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/responsive-utilities.less
deleted file mode 100644
index bf43e8e..0000000
--- a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/responsive-utilities.less
+++ /dev/null
@@ -1,59 +0,0 @@
-//
-// Responsive: Utility classes
-// --------------------------------------------------
-
-
-// IE10 Metro responsive
-// Required for Windows 8 Metro split-screen snapping with IE10
-// Source: http://timkadlec.com/2012/10/ie10-snap-mode-and-responsive-design/
-@-ms-viewport{
- width: device-width;
-}
-
-// Hide from screenreaders and browsers
-// Credit: HTML5 Boilerplate
-.hidden {
- display: none;
- visibility: hidden;
-}
-
-// Visibility utilities
-
-// For desktops
-.visible-phone { display: none !important; }
-.visible-tablet { display: none !important; }
-.hidden-phone { }
-.hidden-tablet { }
-.hidden-desktop { display: none !important; }
-.visible-desktop { display: inherit !important; }
-
-// Tablets & small desktops only
-@media (min-width: 768px) and (max-width: 979px) {
- // Hide everything else
- .hidden-desktop { display: inherit !important; }
- .visible-desktop { display: none !important ; }
- // Show
- .visible-tablet { display: inherit !important; }
- // Hide
- .hidden-tablet { display: none !important; }
-}
-
-// Phones only
-@media (max-width: 767px) {
- // Hide everything else
- .hidden-desktop { display: inherit !important; }
- .visible-desktop { display: none !important; }
- // Show
- .visible-phone { display: inherit !important; } // Use inherit to restore previous behavior
- // Hide
- .hidden-phone { display: none !important; }
-}
-
-// Print utilities
-.visible-print { display: none !important; }
-.hidden-print { }
-
-@media print {
- .visible-print { display: inherit !important; }
- .hidden-print { display: none !important; }
-}
diff --git a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/responsive.less b/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/responsive.less
deleted file mode 100644
index b8366de..0000000
--- a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/responsive.less
+++ /dev/null
@@ -1,48 +0,0 @@
-/*!
- * Bootstrap Responsive v2.3.1
- *
- * Copyright 2012 Twitter, Inc
- * Licensed under the Apache License v2.0
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Designed and built with all the love in the world @twitter by @mdo and @fat.
- */
-
-
-// Responsive.less
-// For phone and tablet devices
-// -------------------------------------------------------------
-
-
-// REPEAT VARIABLES & MIXINS
-// -------------------------
-// Required since we compile the responsive stuff separately
-
-@import "variables.less"; // Modify this for custom colors, font-sizes, etc
-@import "mixins.less";
-
-
-// RESPONSIVE CLASSES
-// ------------------
-
-@import "responsive-utilities.less";
-
-
-// MEDIA QUERIES
-// ------------------
-
-// Large desktops
-@import "responsive-1200px-min.less";
-
-// Tablets to regular desktops
-@import "responsive-768px-979px.less";
-
-// Phones to portrait tablets and narrow desktops
-@import "responsive-767px-max.less";
-
-
-// RESPONSIVE NAVBAR
-// ------------------
-
-// From 979px and below, show a button to toggle navbar contents
-@import "responsive-navbar.less";
diff --git a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/scaffolding.less b/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/scaffolding.less
deleted file mode 100644
index f17e8ca..0000000
--- a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/scaffolding.less
+++ /dev/null
@@ -1,53 +0,0 @@
-//
-// Scaffolding
-// --------------------------------------------------
-
-
-// Body reset
-// -------------------------
-
-body {
- margin: 0;
- font-family: @baseFontFamily;
- font-size: @baseFontSize;
- line-height: @baseLineHeight;
- color: @textColor;
- background-color: @bodyBackground;
-}
-
-
-// Links
-// -------------------------
-
-a {
- color: @linkColor;
- text-decoration: none;
-}
-a:hover,
-a:focus {
- color: @linkColorHover;
- text-decoration: underline;
-}
-
-
-// Images
-// -------------------------
-
-// Rounded corners
-.img-rounded {
- .border-radius(6px);
-}
-
-// Add polaroid-esque trim
-.img-polaroid {
- padding: 4px;
- background-color: #fff;
- border: 1px solid #ccc;
- border: 1px solid rgba(0,0,0,.2);
- .box-shadow(0 1px 3px rgba(0,0,0,.1));
-}
-
-// Perfect circle
-.img-circle {
- .border-radius(500px); // crank the border-radius so it works with most reasonably sized images
-}
diff --git a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/sprites.less b/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/sprites.less
deleted file mode 100644
index 1812bf7..0000000
--- a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/sprites.less
+++ /dev/null
@@ -1,197 +0,0 @@
-//
-// Sprites
-// --------------------------------------------------
-
-
-// ICONS
-// -----
-
-// All icons receive the styles of the tag with a base class
-// of .i and are then given a unique class to add width, height,
-// and background-position. Your resulting HTML will look like
-// .
-
-// For the white version of the icons, just add the .icon-white class:
-//
-
-[class^="icon-"],
-[class*=" icon-"] {
- display: inline-block;
- width: 14px;
- height: 14px;
- .ie7-restore-right-whitespace();
- line-height: 14px;
- vertical-align: text-top;
- background-image: url("@{iconSpritePath}");
- background-position: 14px 14px;
- background-repeat: no-repeat;
- margin-top: 1px;
-}
-
-/* White icons with optional class, or on hover/focus/active states of certain elements */
-.icon-white,
-.nav-pills > .active > a > [class^="icon-"],
-.nav-pills > .active > a > [class*=" icon-"],
-.nav-list > .active > a > [class^="icon-"],
-.nav-list > .active > a > [class*=" icon-"],
-.navbar-inverse .nav > .active > a > [class^="icon-"],
-.navbar-inverse .nav > .active > a > [class*=" icon-"],
-.dropdown-menu > li > a:hover > [class^="icon-"],
-.dropdown-menu > li > a:focus > [class^="icon-"],
-.dropdown-menu > li > a:hover > [class*=" icon-"],
-.dropdown-menu > li > a:focus > [class*=" icon-"],
-.dropdown-menu > .active > a > [class^="icon-"],
-.dropdown-menu > .active > a > [class*=" icon-"],
-.dropdown-submenu:hover > a > [class^="icon-"],
-.dropdown-submenu:focus > a > [class^="icon-"],
-.dropdown-submenu:hover > a > [class*=" icon-"],
-.dropdown-submenu:focus > a > [class*=" icon-"] {
- background-image: url("@{iconWhiteSpritePath}");
-}
-
-.icon-glass { background-position: 0 0; }
-.icon-music { background-position: -24px 0; }
-.icon-search { background-position: -48px 0; }
-.icon-envelope { background-position: -72px 0; }
-.icon-heart { background-position: -96px 0; }
-.icon-star { background-position: -120px 0; }
-.icon-star-empty { background-position: -144px 0; }
-.icon-user { background-position: -168px 0; }
-.icon-film { background-position: -192px 0; }
-.icon-th-large { background-position: -216px 0; }
-.icon-th { background-position: -240px 0; }
-.icon-th-list { background-position: -264px 0; }
-.icon-ok { background-position: -288px 0; }
-.icon-remove { background-position: -312px 0; }
-.icon-zoom-in { background-position: -336px 0; }
-.icon-zoom-out { background-position: -360px 0; }
-.icon-off { background-position: -384px 0; }
-.icon-signal { background-position: -408px 0; }
-.icon-cog { background-position: -432px 0; }
-.icon-trash { background-position: -456px 0; }
-
-.icon-home { background-position: 0 -24px; }
-.icon-file { background-position: -24px -24px; }
-.icon-time { background-position: -48px -24px; }
-.icon-road { background-position: -72px -24px; }
-.icon-download-alt { background-position: -96px -24px; }
-.icon-download { background-position: -120px -24px; }
-.icon-upload { background-position: -144px -24px; }
-.icon-inbox { background-position: -168px -24px; }
-.icon-play-circle { background-position: -192px -24px; }
-.icon-repeat { background-position: -216px -24px; }
-.icon-refresh { background-position: -240px -24px; }
-.icon-list-alt { background-position: -264px -24px; }
-.icon-lock { background-position: -287px -24px; } // 1px off
-.icon-flag { background-position: -312px -24px; }
-.icon-headphones { background-position: -336px -24px; }
-.icon-volume-off { background-position: -360px -24px; }
-.icon-volume-down { background-position: -384px -24px; }
-.icon-volume-up { background-position: -408px -24px; }
-.icon-qrcode { background-position: -432px -24px; }
-.icon-barcode { background-position: -456px -24px; }
-
-.icon-tag { background-position: 0 -48px; }
-.icon-tags { background-position: -25px -48px; } // 1px off
-.icon-book { background-position: -48px -48px; }
-.icon-bookmark { background-position: -72px -48px; }
-.icon-print { background-position: -96px -48px; }
-.icon-camera { background-position: -120px -48px; }
-.icon-font { background-position: -144px -48px; }
-.icon-bold { background-position: -167px -48px; } // 1px off
-.icon-italic { background-position: -192px -48px; }
-.icon-text-height { background-position: -216px -48px; }
-.icon-text-width { background-position: -240px -48px; }
-.icon-align-left { background-position: -264px -48px; }
-.icon-align-center { background-position: -288px -48px; }
-.icon-align-right { background-position: -312px -48px; }
-.icon-align-justify { background-position: -336px -48px; }
-.icon-list { background-position: -360px -48px; }
-.icon-indent-left { background-position: -384px -48px; }
-.icon-indent-right { background-position: -408px -48px; }
-.icon-facetime-video { background-position: -432px -48px; }
-.icon-picture { background-position: -456px -48px; }
-
-.icon-pencil { background-position: 0 -72px; }
-.icon-map-marker { background-position: -24px -72px; }
-.icon-adjust { background-position: -48px -72px; }
-.icon-tint { background-position: -72px -72px; }
-.icon-edit { background-position: -96px -72px; }
-.icon-share { background-position: -120px -72px; }
-.icon-check { background-position: -144px -72px; }
-.icon-move { background-position: -168px -72px; }
-.icon-step-backward { background-position: -192px -72px; }
-.icon-fast-backward { background-position: -216px -72px; }
-.icon-backward { background-position: -240px -72px; }
-.icon-play { background-position: -264px -72px; }
-.icon-pause { background-position: -288px -72px; }
-.icon-stop { background-position: -312px -72px; }
-.icon-forward { background-position: -336px -72px; }
-.icon-fast-forward { background-position: -360px -72px; }
-.icon-step-forward { background-position: -384px -72px; }
-.icon-eject { background-position: -408px -72px; }
-.icon-chevron-left { background-position: -432px -72px; }
-.icon-chevron-right { background-position: -456px -72px; }
-
-.icon-plus-sign { background-position: 0 -96px; }
-.icon-minus-sign { background-position: -24px -96px; }
-.icon-remove-sign { background-position: -48px -96px; }
-.icon-ok-sign { background-position: -72px -96px; }
-.icon-question-sign { background-position: -96px -96px; }
-.icon-info-sign { background-position: -120px -96px; }
-.icon-screenshot { background-position: -144px -96px; }
-.icon-remove-circle { background-position: -168px -96px; }
-.icon-ok-circle { background-position: -192px -96px; }
-.icon-ban-circle { background-position: -216px -96px; }
-.icon-arrow-left { background-position: -240px -96px; }
-.icon-arrow-right { background-position: -264px -96px; }
-.icon-arrow-up { background-position: -289px -96px; } // 1px off
-.icon-arrow-down { background-position: -312px -96px; }
-.icon-share-alt { background-position: -336px -96px; }
-.icon-resize-full { background-position: -360px -96px; }
-.icon-resize-small { background-position: -384px -96px; }
-.icon-plus { background-position: -408px -96px; }
-.icon-minus { background-position: -433px -96px; }
-.icon-asterisk { background-position: -456px -96px; }
-
-.icon-exclamation-sign { background-position: 0 -120px; }
-.icon-gift { background-position: -24px -120px; }
-.icon-leaf { background-position: -48px -120px; }
-.icon-fire { background-position: -72px -120px; }
-.icon-eye-open { background-position: -96px -120px; }
-.icon-eye-close { background-position: -120px -120px; }
-.icon-warning-sign { background-position: -144px -120px; }
-.icon-plane { background-position: -168px -120px; }
-.icon-calendar { background-position: -192px -120px; }
-.icon-random { background-position: -216px -120px; width: 16px; }
-.icon-comment { background-position: -240px -120px; }
-.icon-magnet { background-position: -264px -120px; }
-.icon-chevron-up { background-position: -288px -120px; }
-.icon-chevron-down { background-position: -313px -119px; } // 1px, 1px off
-.icon-retweet { background-position: -336px -120px; }
-.icon-shopping-cart { background-position: -360px -120px; }
-.icon-folder-close { background-position: -384px -120px; width: 16px; }
-.icon-folder-open { background-position: -408px -120px; width: 16px; }
-.icon-resize-vertical { background-position: -432px -119px; } // 1px, 1px off
-.icon-resize-horizontal { background-position: -456px -118px; } // 1px, 2px off
-
-.icon-hdd { background-position: 0 -144px; }
-.icon-bullhorn { background-position: -24px -144px; }
-.icon-bell { background-position: -48px -144px; }
-.icon-certificate { background-position: -72px -144px; }
-.icon-thumbs-up { background-position: -96px -144px; }
-.icon-thumbs-down { background-position: -120px -144px; }
-.icon-hand-right { background-position: -144px -144px; }
-.icon-hand-left { background-position: -168px -144px; }
-.icon-hand-up { background-position: -192px -144px; }
-.icon-hand-down { background-position: -216px -144px; }
-.icon-circle-arrow-right { background-position: -240px -144px; }
-.icon-circle-arrow-left { background-position: -264px -144px; }
-.icon-circle-arrow-up { background-position: -288px -144px; }
-.icon-circle-arrow-down { background-position: -312px -144px; }
-.icon-globe { background-position: -336px -144px; }
-.icon-wrench { background-position: -360px -144px; }
-.icon-tasks { background-position: -384px -144px; }
-.icon-filter { background-position: -408px -144px; }
-.icon-briefcase { background-position: -432px -144px; }
-.icon-fullscreen { background-position: -456px -144px; }
diff --git a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/tables.less b/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/tables.less
deleted file mode 100644
index 0e35271..0000000
--- a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/tables.less
+++ /dev/null
@@ -1,244 +0,0 @@
-//
-// Tables
-// --------------------------------------------------
-
-
-// BASE TABLES
-// -----------------
-
-table {
- max-width: 100%;
- background-color: @tableBackground;
- border-collapse: collapse;
- border-spacing: 0;
-}
-
-// BASELINE STYLES
-// ---------------
-
-.table {
- width: 100%;
- margin-bottom: @baseLineHeight;
- // Cells
- th,
- td {
- padding: 8px;
- line-height: @baseLineHeight;
- text-align: left;
- vertical-align: top;
- border-top: 1px solid @tableBorder;
- }
- th {
- font-weight: bold;
- }
- // Bottom align for column headings
- thead th {
- vertical-align: bottom;
- }
- // Remove top border from thead by default
- caption + thead tr:first-child th,
- caption + thead tr:first-child td,
- colgroup + thead tr:first-child th,
- colgroup + thead tr:first-child td,
- thead:first-child tr:first-child th,
- thead:first-child tr:first-child td {
- border-top: 0;
- }
- // Account for multiple tbody instances
- tbody + tbody {
- border-top: 2px solid @tableBorder;
- }
-
- // Nesting
- .table {
- background-color: @bodyBackground;
- }
-}
-
-
-
-// CONDENSED TABLE W/ HALF PADDING
-// -------------------------------
-
-.table-condensed {
- th,
- td {
- padding: 4px 5px;
- }
-}
-
-
-// BORDERED VERSION
-// ----------------
-
-.table-bordered {
- border: 1px solid @tableBorder;
- border-collapse: separate; // Done so we can round those corners!
- *border-collapse: collapse; // IE7 can't round corners anyway
- border-left: 0;
- .border-radius(@baseBorderRadius);
- th,
- td {
- border-left: 1px solid @tableBorder;
- }
- // Prevent a double border
- caption + thead tr:first-child th,
- caption + tbody tr:first-child th,
- caption + tbody tr:first-child td,
- colgroup + thead tr:first-child th,
- colgroup + tbody tr:first-child th,
- colgroup + tbody tr:first-child td,
- thead:first-child tr:first-child th,
- tbody:first-child tr:first-child th,
- tbody:first-child tr:first-child td {
- border-top: 0;
- }
- // For first th/td in the first row in the first thead or tbody
- thead:first-child tr:first-child > th:first-child,
- tbody:first-child tr:first-child > td:first-child,
- tbody:first-child tr:first-child > th:first-child {
- .border-top-left-radius(@baseBorderRadius);
- }
- // For last th/td in the first row in the first thead or tbody
- thead:first-child tr:first-child > th:last-child,
- tbody:first-child tr:first-child > td:last-child,
- tbody:first-child tr:first-child > th:last-child {
- .border-top-right-radius(@baseBorderRadius);
- }
- // For first th/td (can be either) in the last row in the last thead, tbody, and tfoot
- thead:last-child tr:last-child > th:first-child,
- tbody:last-child tr:last-child > td:first-child,
- tbody:last-child tr:last-child > th:first-child,
- tfoot:last-child tr:last-child > td:first-child,
- tfoot:last-child tr:last-child > th:first-child {
- .border-bottom-left-radius(@baseBorderRadius);
- }
- // For last th/td (can be either) in the last row in the last thead, tbody, and tfoot
- thead:last-child tr:last-child > th:last-child,
- tbody:last-child tr:last-child > td:last-child,
- tbody:last-child tr:last-child > th:last-child,
- tfoot:last-child tr:last-child > td:last-child,
- tfoot:last-child tr:last-child > th:last-child {
- .border-bottom-right-radius(@baseBorderRadius);
- }
-
- // Clear border-radius for first and last td in the last row in the last tbody for table with tfoot
- tfoot + tbody:last-child tr:last-child td:first-child {
- .border-bottom-left-radius(0);
- }
- tfoot + tbody:last-child tr:last-child td:last-child {
- .border-bottom-right-radius(0);
- }
-
- // Special fixes to round the left border on the first td/th
- caption + thead tr:first-child th:first-child,
- caption + tbody tr:first-child td:first-child,
- colgroup + thead tr:first-child th:first-child,
- colgroup + tbody tr:first-child td:first-child {
- .border-top-left-radius(@baseBorderRadius);
- }
- caption + thead tr:first-child th:last-child,
- caption + tbody tr:first-child td:last-child,
- colgroup + thead tr:first-child th:last-child,
- colgroup + tbody tr:first-child td:last-child {
- .border-top-right-radius(@baseBorderRadius);
- }
-
-}
-
-
-
-
-// ZEBRA-STRIPING
-// --------------
-
-// Default zebra-stripe styles (alternating gray and transparent backgrounds)
-.table-striped {
- tbody {
- > tr:nth-child(odd) > td,
- > tr:nth-child(odd) > th {
- background-color: @tableBackgroundAccent;
- }
- }
-}
-
-
-// HOVER EFFECT
-// ------------
-// Placed here since it has to come after the potential zebra striping
-.table-hover {
- tbody {
- tr:hover > td,
- tr:hover > th {
- background-color: @tableBackgroundHover;
- }
- }
-}
-
-
-// TABLE CELL SIZING
-// -----------------
-
-// Reset default grid behavior
-table td[class*="span"],
-table th[class*="span"],
-.row-fluid table td[class*="span"],
-.row-fluid table th[class*="span"] {
- display: table-cell;
- float: none; // undo default grid column styles
- margin-left: 0; // undo default grid column styles
-}
-
-// Change the column widths to account for td/th padding
-.table td,
-.table th {
- &.span1 { .tableColumns(1); }
- &.span2 { .tableColumns(2); }
- &.span3 { .tableColumns(3); }
- &.span4 { .tableColumns(4); }
- &.span5 { .tableColumns(5); }
- &.span6 { .tableColumns(6); }
- &.span7 { .tableColumns(7); }
- &.span8 { .tableColumns(8); }
- &.span9 { .tableColumns(9); }
- &.span10 { .tableColumns(10); }
- &.span11 { .tableColumns(11); }
- &.span12 { .tableColumns(12); }
-}
-
-
-
-// TABLE BACKGROUNDS
-// -----------------
-// Exact selectors below required to override .table-striped
-
-.table tbody tr {
- &.success > td {
- background-color: @successBackground;
- }
- &.error > td {
- background-color: @errorBackground;
- }
- &.warning > td {
- background-color: @warningBackground;
- }
- &.info > td {
- background-color: @infoBackground;
- }
-}
-
-// Hover states for .table-hover
-.table-hover tbody tr {
- &.success:hover > td {
- background-color: darken(@successBackground, 5%);
- }
- &.error:hover > td {
- background-color: darken(@errorBackground, 5%);
- }
- &.warning:hover > td {
- background-color: darken(@warningBackground, 5%);
- }
- &.info:hover > td {
- background-color: darken(@infoBackground, 5%);
- }
-}
diff --git a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/thumbnails.less b/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/thumbnails.less
deleted file mode 100644
index aaacf67..0000000
--- a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/thumbnails.less
+++ /dev/null
@@ -1,53 +0,0 @@
-//
-// Thumbnails
-// --------------------------------------------------
-
-
-// Note: `.thumbnails` and `.thumbnails > li` are overridden in responsive files
-
-// Make wrapper ul behave like the grid
-.thumbnails {
- margin-left: -@gridGutterWidth;
- list-style: none;
- .clearfix();
-}
-// Fluid rows have no left margin
-.row-fluid .thumbnails {
- margin-left: 0;
-}
-
-// Float li to make thumbnails appear in a row
-.thumbnails > li {
- float: left; // Explicitly set the float since we don't require .span* classes
- margin-bottom: @baseLineHeight;
- margin-left: @gridGutterWidth;
-}
-
-// The actual thumbnail (can be `a` or `div`)
-.thumbnail {
- display: block;
- padding: 4px;
- line-height: @baseLineHeight;
- border: 1px solid #ddd;
- .border-radius(@baseBorderRadius);
- .box-shadow(0 1px 3px rgba(0,0,0,.055));
- .transition(all .2s ease-in-out);
-}
-// Add a hover/focus state for linked versions only
-a.thumbnail:hover,
-a.thumbnail:focus {
- border-color: @linkColor;
- .box-shadow(0 1px 4px rgba(0,105,214,.25));
-}
-
-// Images and captions
-.thumbnail > img {
- display: block;
- max-width: 100%;
- margin-left: auto;
- margin-right: auto;
-}
-.thumbnail .caption {
- padding: 9px;
- color: @gray;
-}
diff --git a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/tooltip.less b/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/tooltip.less
deleted file mode 100644
index 83d5f2b..0000000
--- a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/tooltip.less
+++ /dev/null
@@ -1,70 +0,0 @@
-//
-// Tooltips
-// --------------------------------------------------
-
-
-// Base class
-.tooltip {
- position: absolute;
- z-index: @zindexTooltip;
- display: block;
- visibility: visible;
- font-size: 11px;
- line-height: 1.4;
- .opacity(0);
- &.in { .opacity(80); }
- &.top { margin-top: -3px; padding: 5px 0; }
- &.right { margin-left: 3px; padding: 0 5px; }
- &.bottom { margin-top: 3px; padding: 5px 0; }
- &.left { margin-left: -3px; padding: 0 5px; }
-}
-
-// Wrapper for the tooltip content
-.tooltip-inner {
- max-width: 200px;
- padding: 8px;
- color: @tooltipColor;
- text-align: center;
- text-decoration: none;
- background-color: @tooltipBackground;
- .border-radius(@baseBorderRadius);
-}
-
-// Arrows
-.tooltip-arrow {
- position: absolute;
- width: 0;
- height: 0;
- border-color: transparent;
- border-style: solid;
-}
-.tooltip {
- &.top .tooltip-arrow {
- bottom: 0;
- left: 50%;
- margin-left: -@tooltipArrowWidth;
- border-width: @tooltipArrowWidth @tooltipArrowWidth 0;
- border-top-color: @tooltipArrowColor;
- }
- &.right .tooltip-arrow {
- top: 50%;
- left: 0;
- margin-top: -@tooltipArrowWidth;
- border-width: @tooltipArrowWidth @tooltipArrowWidth @tooltipArrowWidth 0;
- border-right-color: @tooltipArrowColor;
- }
- &.left .tooltip-arrow {
- top: 50%;
- right: 0;
- margin-top: -@tooltipArrowWidth;
- border-width: @tooltipArrowWidth 0 @tooltipArrowWidth @tooltipArrowWidth;
- border-left-color: @tooltipArrowColor;
- }
- &.bottom .tooltip-arrow {
- top: 0;
- left: 50%;
- margin-left: -@tooltipArrowWidth;
- border-width: 0 @tooltipArrowWidth @tooltipArrowWidth;
- border-bottom-color: @tooltipArrowColor;
- }
-}
diff --git a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/type.less b/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/type.less
deleted file mode 100644
index 337138a..0000000
--- a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/type.less
+++ /dev/null
@@ -1,247 +0,0 @@
-//
-// Typography
-// --------------------------------------------------
-
-
-// Body text
-// -------------------------
-
-p {
- margin: 0 0 @baseLineHeight / 2;
-}
-.lead {
- margin-bottom: @baseLineHeight;
- font-size: @baseFontSize * 1.5;
- font-weight: 200;
- line-height: @baseLineHeight * 1.5;
-}
-
-
-// Emphasis & misc
-// -------------------------
-
-// Ex: 14px base font * 85% = about 12px
-small { font-size: 85%; }
-
-strong { font-weight: bold; }
-em { font-style: italic; }
-cite { font-style: normal; }
-
-// Utility classes
-.muted { color: @grayLight; }
-a.muted:hover,
-a.muted:focus { color: darken(@grayLight, 10%); }
-
-.text-warning { color: @warningText; }
-a.text-warning:hover,
-a.text-warning:focus { color: darken(@warningText, 10%); }
-
-.text-error { color: @errorText; }
-a.text-error:hover,
-a.text-error:focus { color: darken(@errorText, 10%); }
-
-.text-info { color: @infoText; }
-a.text-info:hover,
-a.text-info:focus { color: darken(@infoText, 10%); }
-
-.text-success { color: @successText; }
-a.text-success:hover,
-a.text-success:focus { color: darken(@successText, 10%); }
-
-.text-left { text-align: left; }
-.text-right { text-align: right; }
-.text-center { text-align: center; }
-
-
-// Headings
-// -------------------------
-
-h1, h2, h3, h4, h5, h6 {
- margin: (@baseLineHeight / 2) 0;
- font-family: @headingsFontFamily;
- font-weight: @headingsFontWeight;
- line-height: @baseLineHeight;
- color: @headingsColor;
- text-rendering: optimizelegibility; // Fix the character spacing for headings
- small {
- font-weight: normal;
- line-height: 1;
- color: @grayLight;
- }
-}
-
-h1,
-h2,
-h3 { line-height: @baseLineHeight * 2; }
-
-h1 { font-size: @baseFontSize * 2.75; } // ~38px
-h2 { font-size: @baseFontSize * 2.25; } // ~32px
-h3 { font-size: @baseFontSize * 1.75; } // ~24px
-h4 { font-size: @baseFontSize * 1.25; } // ~18px
-h5 { font-size: @baseFontSize; }
-h6 { font-size: @baseFontSize * 0.85; } // ~12px
-
-h1 small { font-size: @baseFontSize * 1.75; } // ~24px
-h2 small { font-size: @baseFontSize * 1.25; } // ~18px
-h3 small { font-size: @baseFontSize; }
-h4 small { font-size: @baseFontSize; }
-
-
-// Page header
-// -------------------------
-
-.page-header {
- padding-bottom: (@baseLineHeight / 2) - 1;
- margin: @baseLineHeight 0 (@baseLineHeight * 1.5);
- border-bottom: 1px solid @grayLighter;
-}
-
-
-
-// Lists
-// --------------------------------------------------
-
-// Unordered and Ordered lists
-ul, ol {
- padding: 0;
- margin: 0 0 @baseLineHeight / 2 25px;
-}
-ul ul,
-ul ol,
-ol ol,
-ol ul {
- margin-bottom: 0;
-}
-li {
- line-height: @baseLineHeight;
-}
-
-// Remove default list styles
-ul.unstyled,
-ol.unstyled {
- margin-left: 0;
- list-style: none;
-}
-
-// Single-line list items
-ul.inline,
-ol.inline {
- margin-left: 0;
- list-style: none;
- > li {
- display: inline-block;
- .ie7-inline-block();
- padding-left: 5px;
- padding-right: 5px;
- }
-}
-
-// Description Lists
-dl {
- margin-bottom: @baseLineHeight;
-}
-dt,
-dd {
- line-height: @baseLineHeight;
-}
-dt {
- font-weight: bold;
-}
-dd {
- margin-left: @baseLineHeight / 2;
-}
-// Horizontal layout (like forms)
-.dl-horizontal {
- .clearfix(); // Ensure dl clears floats if empty dd elements present
- dt {
- float: left;
- width: @horizontalComponentOffset - 20;
- clear: left;
- text-align: right;
- .text-overflow();
- }
- dd {
- margin-left: @horizontalComponentOffset;
- }
-}
-
-// MISC
-// ----
-
-// Horizontal rules
-hr {
- margin: @baseLineHeight 0;
- border: 0;
- border-top: 1px solid @hrBorder;
- border-bottom: 1px solid @white;
-}
-
-// Abbreviations and acronyms
-abbr[title],
-// Added data-* attribute to help out our tooltip plugin, per https://github.com/twitter/bootstrap/issues/5257
-abbr[data-original-title] {
- cursor: help;
- border-bottom: 1px dotted @grayLight;
-}
-abbr.initialism {
- font-size: 90%;
- text-transform: uppercase;
-}
-
-// Blockquotes
-blockquote {
- padding: 0 0 0 15px;
- margin: 0 0 @baseLineHeight;
- border-left: 5px solid @grayLighter;
- p {
- margin-bottom: 0;
- font-size: @baseFontSize * 1.25;
- font-weight: 300;
- line-height: 1.25;
- }
- small {
- display: block;
- line-height: @baseLineHeight;
- color: @grayLight;
- &:before {
- content: '\2014 \00A0';
- }
- }
-
- // Float right with text-align: right
- &.pull-right {
- float: right;
- padding-right: 15px;
- padding-left: 0;
- border-right: 5px solid @grayLighter;
- border-left: 0;
- p,
- small {
- text-align: right;
- }
- small {
- &:before {
- content: '';
- }
- &:after {
- content: '\00A0 \2014';
- }
- }
- }
-}
-
-// Quotes
-q:before,
-q:after,
-blockquote:before,
-blockquote:after {
- content: "";
-}
-
-// Addresses
-address {
- display: block;
- margin-bottom: @baseLineHeight;
- font-style: normal;
- line-height: @baseLineHeight;
-}
diff --git a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/utilities.less b/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/utilities.less
deleted file mode 100644
index 314b4ff..0000000
--- a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/utilities.less
+++ /dev/null
@@ -1,30 +0,0 @@
-//
-// Utility classes
-// --------------------------------------------------
-
-
-// Quick floats
-.pull-right {
- float: right;
-}
-.pull-left {
- float: left;
-}
-
-// Toggling content
-.hide {
- display: none;
-}
-.show {
- display: block;
-}
-
-// Visibility
-.invisible {
- visibility: hidden;
-}
-
-// For Affix plugin
-.affix {
- position: fixed;
-}
diff --git a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/variables.less b/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/variables.less
deleted file mode 100644
index 31c131b..0000000
--- a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/variables.less
+++ /dev/null
@@ -1,301 +0,0 @@
-//
-// Variables
-// --------------------------------------------------
-
-
-// Global values
-// --------------------------------------------------
-
-
-// Grays
-// -------------------------
-@black: #000;
-@grayDarker: #222;
-@grayDark: #333;
-@gray: #555;
-@grayLight: #999;
-@grayLighter: #eee;
-@white: #fff;
-
-
-// Accent colors
-// -------------------------
-@blue: #049cdb;
-@blueDark: #0064cd;
-@green: #46a546;
-@red: #9d261d;
-@yellow: #ffc40d;
-@orange: #f89406;
-@pink: #c3325f;
-@purple: #7a43b6;
-
-
-// Scaffolding
-// -------------------------
-@bodyBackground: @white;
-@textColor: @grayDark;
-
-
-// Links
-// -------------------------
-@linkColor: #08c;
-@linkColorHover: darken(@linkColor, 15%);
-
-
-// Typography
-// -------------------------
-@sansFontFamily: "Helvetica Neue", Helvetica, Arial, sans-serif;
-@serifFontFamily: Georgia, "Times New Roman", Times, serif;
-@monoFontFamily: Monaco, Menlo, Consolas, "Courier New", monospace;
-
-@baseFontSize: 14px;
-@baseFontFamily: @sansFontFamily;
-@baseLineHeight: 20px;
-@altFontFamily: @serifFontFamily;
-
-@headingsFontFamily: inherit; // empty to use BS default, @baseFontFamily
-@headingsFontWeight: bold; // instead of browser default, bold
-@headingsColor: inherit; // empty to use BS default, @textColor
-
-
-// Component sizing
-// -------------------------
-// Based on 14px font-size and 20px line-height
-
-@fontSizeLarge: @baseFontSize * 1.25; // ~18px
-@fontSizeSmall: @baseFontSize * 0.85; // ~12px
-@fontSizeMini: @baseFontSize * 0.75; // ~11px
-
-@paddingLarge: 11px 19px; // 44px
-@paddingSmall: 2px 10px; // 26px
-@paddingMini: 0 6px; // 22px
-
-@baseBorderRadius: 4px;
-@borderRadiusLarge: 6px;
-@borderRadiusSmall: 3px;
-
-
-// Tables
-// -------------------------
-@tableBackground: transparent; // overall background-color
-@tableBackgroundAccent: #f9f9f9; // for striping
-@tableBackgroundHover: #f5f5f5; // for hover
-@tableBorder: #ddd; // table and cell border
-
-// Buttons
-// -------------------------
-@btnBackground: @white;
-@btnBackgroundHighlight: darken(@white, 10%);
-@btnBorder: #ccc;
-
-@btnPrimaryBackground: @linkColor;
-@btnPrimaryBackgroundHighlight: spin(@btnPrimaryBackground, 20%);
-
-@btnInfoBackground: #5bc0de;
-@btnInfoBackgroundHighlight: #2f96b4;
-
-@btnSuccessBackground: #62c462;
-@btnSuccessBackgroundHighlight: #51a351;
-
-@btnWarningBackground: lighten(@orange, 15%);
-@btnWarningBackgroundHighlight: @orange;
-
-@btnDangerBackground: #ee5f5b;
-@btnDangerBackgroundHighlight: #bd362f;
-
-@btnInverseBackground: #444;
-@btnInverseBackgroundHighlight: @grayDarker;
-
-
-// Forms
-// -------------------------
-@inputBackground: @white;
-@inputBorder: #ccc;
-@inputBorderRadius: @baseBorderRadius;
-@inputDisabledBackground: @grayLighter;
-@formActionsBackground: #f5f5f5;
-@inputHeight: @baseLineHeight + 10px; // base line-height + 8px vertical padding + 2px top/bottom border
-
-
-// Dropdowns
-// -------------------------
-@dropdownBackground: @white;
-@dropdownBorder: rgba(0,0,0,.2);
-@dropdownDividerTop: #e5e5e5;
-@dropdownDividerBottom: @white;
-
-@dropdownLinkColor: @grayDark;
-@dropdownLinkColorHover: @white;
-@dropdownLinkColorActive: @white;
-
-@dropdownLinkBackgroundActive: @linkColor;
-@dropdownLinkBackgroundHover: @dropdownLinkBackgroundActive;
-
-
-
-// COMPONENT VARIABLES
-// --------------------------------------------------
-
-
-// Z-index master list
-// -------------------------
-// Used for a bird's eye view of components dependent on the z-axis
-// Try to avoid customizing these :)
-@zindexDropdown: 1000;
-@zindexPopover: 1010;
-@zindexTooltip: 1030;
-@zindexFixedNavbar: 1030;
-@zindexModalBackdrop: 1040;
-@zindexModal: 1050;
-
-
-// Sprite icons path
-// -------------------------
-@iconSpritePath: "../img/glyphicons-halflings.png";
-@iconWhiteSpritePath: "../img/glyphicons-halflings-white.png";
-
-
-// Input placeholder text color
-// -------------------------
-@placeholderText: @grayLight;
-
-
-// Hr border color
-// -------------------------
-@hrBorder: @grayLighter;
-
-
-// Horizontal forms & lists
-// -------------------------
-@horizontalComponentOffset: 180px;
-
-
-// Wells
-// -------------------------
-@wellBackground: #f5f5f5;
-
-
-// Navbar
-// -------------------------
-@navbarCollapseWidth: 979px;
-@navbarCollapseDesktopWidth: @navbarCollapseWidth + 1;
-
-@navbarHeight: 40px;
-@navbarBackgroundHighlight: #ffffff;
-@navbarBackground: darken(@navbarBackgroundHighlight, 5%);
-@navbarBorder: darken(@navbarBackground, 12%);
-
-@navbarText: #777;
-@navbarLinkColor: #777;
-@navbarLinkColorHover: @grayDark;
-@navbarLinkColorActive: @gray;
-@navbarLinkBackgroundHover: transparent;
-@navbarLinkBackgroundActive: darken(@navbarBackground, 5%);
-
-@navbarBrandColor: @navbarLinkColor;
-
-// Inverted navbar
-@navbarInverseBackground: #111111;
-@navbarInverseBackgroundHighlight: #222222;
-@navbarInverseBorder: #252525;
-
-@navbarInverseText: @grayLight;
-@navbarInverseLinkColor: @grayLight;
-@navbarInverseLinkColorHover: @white;
-@navbarInverseLinkColorActive: @navbarInverseLinkColorHover;
-@navbarInverseLinkBackgroundHover: transparent;
-@navbarInverseLinkBackgroundActive: @navbarInverseBackground;
-
-@navbarInverseSearchBackground: lighten(@navbarInverseBackground, 25%);
-@navbarInverseSearchBackgroundFocus: @white;
-@navbarInverseSearchBorder: @navbarInverseBackground;
-@navbarInverseSearchPlaceholderColor: #ccc;
-
-@navbarInverseBrandColor: @navbarInverseLinkColor;
-
-
-// Pagination
-// -------------------------
-@paginationBackground: #fff;
-@paginationBorder: #ddd;
-@paginationActiveBackground: #f5f5f5;
-
-
-// Hero unit
-// -------------------------
-@heroUnitBackground: @grayLighter;
-@heroUnitHeadingColor: inherit;
-@heroUnitLeadColor: inherit;
-
-
-// Form states and alerts
-// -------------------------
-@warningText: #c09853;
-@warningBackground: #fcf8e3;
-@warningBorder: darken(spin(@warningBackground, -10), 3%);
-
-@errorText: #b94a48;
-@errorBackground: #f2dede;
-@errorBorder: darken(spin(@errorBackground, -10), 3%);
-
-@successText: #468847;
-@successBackground: #dff0d8;
-@successBorder: darken(spin(@successBackground, -10), 5%);
-
-@infoText: #3a87ad;
-@infoBackground: #d9edf7;
-@infoBorder: darken(spin(@infoBackground, -10), 7%);
-
-
-// Tooltips and popovers
-// -------------------------
-@tooltipColor: #fff;
-@tooltipBackground: #000;
-@tooltipArrowWidth: 5px;
-@tooltipArrowColor: @tooltipBackground;
-
-@popoverBackground: #fff;
-@popoverArrowWidth: 10px;
-@popoverArrowColor: #fff;
-@popoverTitleBackground: darken(@popoverBackground, 3%);
-
-// Special enhancement for popovers
-@popoverArrowOuterWidth: @popoverArrowWidth + 1;
-@popoverArrowOuterColor: rgba(0,0,0,.25);
-
-
-
-// GRID
-// --------------------------------------------------
-
-
-// Default 940px grid
-// -------------------------
-@gridColumns: 12;
-@gridColumnWidth: 60px;
-@gridGutterWidth: 20px;
-@gridRowWidth: (@gridColumns * @gridColumnWidth) + (@gridGutterWidth * (@gridColumns - 1));
-
-// 1200px min
-@gridColumnWidth1200: 70px;
-@gridGutterWidth1200: 30px;
-@gridRowWidth1200: (@gridColumns * @gridColumnWidth1200) + (@gridGutterWidth1200 * (@gridColumns - 1));
-
-// 768px-979px
-@gridColumnWidth768: 42px;
-@gridGutterWidth768: 20px;
-@gridRowWidth768: (@gridColumns * @gridColumnWidth768) + (@gridGutterWidth768 * (@gridColumns - 1));
-
-
-// Fluid grid
-// -------------------------
-@fluidGridColumnWidth: percentage(@gridColumnWidth/@gridRowWidth);
-@fluidGridGutterWidth: percentage(@gridGutterWidth/@gridRowWidth);
-
-// 1200px min
-@fluidGridColumnWidth1200: percentage(@gridColumnWidth1200/@gridRowWidth1200);
-@fluidGridGutterWidth1200: percentage(@gridGutterWidth1200/@gridRowWidth1200);
-
-// 768px-979px
-@fluidGridColumnWidth768: percentage(@gridColumnWidth768/@gridRowWidth768);
-@fluidGridGutterWidth768: percentage(@gridGutterWidth768/@gridRowWidth768);
diff --git a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/wells.less b/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/wells.less
deleted file mode 100644
index 84a744b..0000000
--- a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/bootstrap/wells.less
+++ /dev/null
@@ -1,29 +0,0 @@
-//
-// Wells
-// --------------------------------------------------
-
-
-// Base class
-.well {
- min-height: 20px;
- padding: 19px;
- margin-bottom: 20px;
- background-color: @wellBackground;
- border: 1px solid darken(@wellBackground, 7%);
- .border-radius(@baseBorderRadius);
- .box-shadow(inset 0 1px 1px rgba(0,0,0,.05));
- blockquote {
- border-color: #ddd;
- border-color: rgba(0,0,0,.15);
- }
-}
-
-// Sizes
-.well-large {
- padding: 24px;
- .border-radius(@borderRadiusLarge);
-}
-.well-small {
- padding: 9px;
- .border-radius(@borderRadiusSmall);
-}
diff --git a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/spc-bootstrap.less b/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/spc-bootstrap.less
deleted file mode 100644
index 146f05d..0000000
--- a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/spc-bootstrap.less
+++ /dev/null
@@ -1,18 +0,0 @@
-// spc bootstrap settings
-@import "bootstrap/bootstrap.less";
-@import "bootstrap/responsive.less";
-
-// google webfont
-@import url(https://fonts.googleapis.com/css?family=Open+Sans);
-
-//Typography
-@sansFontFamily: 'Open Sans', sans-serif !important;
-@baseFontSize: 13px;
-@baseLineHeight: 19px;
-
-//Colors
-@blue: #12567D;
-
-//Sprites
-@iconSpritePath: '../../img/glyphicons-halflings.png';
-@iconWhiteSpritePath: '../../img/glyphicons-halflings-white.png';
diff --git a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/spc-content.less b/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/spc-content.less
deleted file mode 100644
index cc1cebd..0000000
--- a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/spc-content.less
+++ /dev/null
@@ -1,57 +0,0 @@
-@import "spc-utils.less";
-@import "bootstrap/variables.less";
-
-.spc-page-title {
- h1, h2, h3, h4 {
- font-weight: normal;
- .underline;
- }
-}
-
-//tags -- deprecated
-// need to design
-.tags .btn {
- border: none;
- font-size: 9.5px;
- font-weight: bold;
-}
-
-// search item specific settings
-.spc-search-result {
- &-title {
- h1, h2, h3, h4 { font-weight: normal; }
- }
-}
-
-// snippet specific settings
-.spc-snippet-header {
- margin-bottom: 5px;
-}
-
-.spc-snippet-info {
- padding-top: 10px;
-
- .dl-horizontal {
- margin: 5px;
- dt { font-weight: normal; }
- }
-}
-
-.spc-snippet-body {
- padding: 10px;
-
- .accordion-group {
- border: none;
- }
-
- .accordion-heading {
- text-transform: uppercase;
- font-size: 14px;
- border-bottom: 1px solid #e5e5e5;
- }
-
- .accordion-heading .accordion-toggle {
- padding-top: 10px;
- padding-bottom: 5px;
- }
-}
diff --git a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/spc-extend.less b/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/spc-extend.less
deleted file mode 100644
index 9e0cd6c..0000000
--- a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/spc-extend.less
+++ /dev/null
@@ -1,22 +0,0 @@
-//spc extend settings
-
-body {
- background-color: rgb(249,250,245);
-}
-
-.container {
- width: 80%;
-}
-
-.main {
- background-color: white;
- padding: 18px;
- -moz-box-shadow: 0 0 3px #888;
- -webkit-box-shadow: 0 0 3px #888;
- box-shadow: 0 0 3px #888;
-}
-
-@import "spc-header.less";
-@import "spc-content.less";
-@import "spc-rightsidebar.less";
-@import "spc-footer.less";
\ No newline at end of file
diff --git a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/spc-footer.less b/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/spc-footer.less
deleted file mode 100644
index 8e4d09b..0000000
--- a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/spc-footer.less
+++ /dev/null
@@ -1,9 +0,0 @@
-@import "bootstrap/variables.less";
-
-//footer-outside
-.footer {
- padding: 5px;
- font-size: small;
-}
-
-//footer inside yet to be done (may be not required).
\ No newline at end of file
diff --git a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/spc-header.less b/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/spc-header.less
deleted file mode 100644
index 0d77cd2..0000000
--- a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/spc-header.less
+++ /dev/null
@@ -1,25 +0,0 @@
-// settings for
-// 1) .header
-// header block is found on the top of the website
-// spc-navbar, spc-header-searchbar found inside .header
-// 2) .spc-navbar
-// 3) .spc-header-searchbar
-
-@import "spc-utils.less";
-
-.header {
- .margin(@top: 15px, @bottom: 15px);
-}
-
-.spc-navbar {
- .margin (@top: 15px, @bottom: 5px);
- .nav-pills {
- margin-bottom: 0px;
- font-size: 12px;
-
- >li >a {
- padding-top: 2.5px;
- padding-bottom: 2.5px;
- }
- }
-}
\ No newline at end of file
diff --git a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/spc-rightsidebar.less b/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/spc-rightsidebar.less
deleted file mode 100644
index afef531..0000000
--- a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/spc-rightsidebar.less
+++ /dev/null
@@ -1,14 +0,0 @@
-@import "bootstrap/variables.less";
-
-.spc-rightsidebar {
- color: @gray;
- .navigation {
- padding: @paddingSmall;
- font-size: @fontSizeSmall;
- }
- .navigation .nav-title {
- font-weight: bold;
- text-transform: uppercase;
- }
- .navigation li { margin: 5px; }
-}
\ No newline at end of file
diff --git a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/spc-utils.less b/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/spc-utils.less
deleted file mode 100644
index 2ac9908..0000000
--- a/kima/vendor/spleaf/doc/source/_theme/scipy/static/less/spc-utils.less
+++ /dev/null
@@ -1,20 +0,0 @@
-// LESS Utilities for spc
-@import "bootstrap/variables.less";
-
-.padding (@top: 0px, @bottom: 0px, @left: 0px, @right: 0px) {
- padding-top: @top;
- padding-bottom: @bottom;
- padding-left: @left;
- padding-right: @right;
-}
-
-.margin (@top: 0px, @bottom: 0px, @left: 0px, @right: 0px) {
- margin-top: @top;
- margin-bottom: @bottom;
- margin-left: @left;
- margin-right:@right;
-}
-
-.underline {
- border-bottom: 1.5px solid @hrBorder;
-}
diff --git a/kima/vendor/spleaf/doc/source/_theme/scipy/static/scipy.css_t b/kima/vendor/spleaf/doc/source/_theme/scipy/static/scipy.css_t
deleted file mode 100644
index 7100293..0000000
--- a/kima/vendor/spleaf/doc/source/_theme/scipy/static/scipy.css_t
+++ /dev/null
@@ -1,290 +0,0 @@
-/* -*- css -*-
- *
- * sphinxdoc.css_t
- * ~~~~~~~~~~~~~~~
- *
- * Sphinx stylesheet -- sphinxdoc theme. Originally created by
- * Armin Ronacher for Werkzeug.
- *
- * :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS.
- * :license: BSD, see LICENSE for details.
- *
- */
-
-@import url("basic.css");
-
-@import url("css/scipy-central.css");
-
-
-/*
- * General tweaks
- */
-
-div.container-navbar-bottom {
- margin-top: 0;
-}
-
-div.container-navbar-bottom div.spc-navbar {
- margin-top: 0;
-}
-
-div.spc-navbar {
- margin: 0;
-}
-
-tt {
- color: inherit;
- font: inherit;
-}
-
-tt.literal {
- font-family: monospace;
- padding-left: 2px;
- background-color: rgb(242, 242, 242);
-}
-
-a tt.literal {
- border: none;
- background-color: inherit;
-}
-
-tt.xref {
- font-family: inherit;
- border: none;
- background-color: inherit;
- font-weight: normal;
- padding-left: 0px;
-}
-
-tt.descname {
- font-size: 16px;
-}
-
-code {
- color: inherit;
- font: inherit;
- padding: inherit;
- border: inherit;
-}
-
-code.literal {
- font-family: monospace;
- padding-left: 2px;
- background-color: rgb(242, 242, 242);
-}
-
-a code.literal {
- border: none;
- background-color: inherit;
-}
-
-code.xref {
- font-family: inherit;
- border-bottom: none;
- background-color: inherit;
- padding-left: 0px;
-}
-
-code.descname {
- font-size: 16px;
-}
-
-dl.class > dt > em {
- font-weight: normal;
-}
-
-dl.function > dt > em {
- font-weight: normal;
-}
-
-dl.method > dt > em {
- font-weight: normal;
-}
-
-pre {
- border-radius: 0;
- border: none;
- font-family: monospace;
-}
-
-
-/*
- * Field lists
- */
-
-table.field-list {
- border-collapse: collapse;
- border-spacing: 5px;
- margin-left: 1px;
- border-left: 5px solid rgb(238, 238, 238) !important;
-}
-
-table.field-list th.field-name {
- display: inline-block;
- padding: 1px 8px 1px 5px;
- white-space: nowrap;
- background-color: rgb(238, 238, 238);
-}
-
-table.field-list td.field-body {
- border-left: none !important;
-}
-
-table.field-list td.field-body > p {
- font-style: italic;
-}
-
-table.field-list td.field-body > p > strong {
- font-style: normal;
-}
-
-td.field-body blockquote {
- border-left: none;
- margin: 0;
- padding-left: 30px;
-}
-
-td.field-body blockquote p,
-dl.class blockquote p,
-dl.function blockquote p,
-dl.method blockquote p
-{
- font-family: inherit;
- font-size: inherit;
- font-weight: inherit;
- line-height: inherit;
-}
-
-
-/*
- * Sidebars and top logo
- */
-
-div.sphinxsidebarwrapper {
- overflow: hidden;
-}
-
-div.spc-rightsidebar h3 {
- font-size: 120%;
- line-height: inherit;
- border-bottom: none;
-}
-
-div.spc-rightsidebar h4 {
- font-size: 120%;
- line-height: inherit;
- border-bottom: none;
-}
-
-div.top-scipy-org-logo-header {
- text-align: left;
- background-color: rgb(140, 170, 230);
- border-bottom: 8px solid rgb(0, 51, 153);
- margin-top: 10px;
- padding: 5px;
- box-shadow: 0px 0px 3px rgb(136, 136, 136);
-}
-
-
-/*
- * Headers
- */
-
-h1 a { color: rgb(85, 85, 85); }
-h2 a { color: rgb(85, 85, 85); }
-h3 a { color: rgb(85, 85, 85); }
-h4 a { color: rgb(85, 85, 85); }
-h5 a { color: rgb(85, 85, 85); }
-h6 a { color: rgb(85, 85, 85); }
-
-h1 tt { font: inherit; border-bottom: none; }
-h2 tt { font: inherit; border-bottom: none; }
-h3 tt { font: inherit; border-bottom: none; }
-h4 tt { font: inherit; border-bottom: none; }
-h5 tt { font: inherit; border-bottom: none; }
-h6 tt { font: inherit; border-bottom: none; }
-
-h1 code { font: inherit; border: none; background-color: inherit; padding: inherit; }
-h2 code { font: inherit; border: none; background-color: inherit; padding: inherit; }
-h3 code { font: inherit; border: none; background-color: inherit; padding: inherit; }
-h4 code { font: inherit; border: none; background-color: inherit; padding: inherit; }
-h5 code { font: inherit; border: none; background-color: inherit; padding: inherit; }
-h6 code { font: inherit; border: none; background-color: inherit; padding: inherit; }
-
-div#spc-section-body h1 { color: rgb(85, 85, 85); }
-div#spc-section-body h2 { color: rgb(85, 85, 85); }
-div#spc-section-body h3 { color: rgb(85, 85, 85); }
-div#spc-section-body h4 { color: rgb(85, 85, 85); border-bottom: none; }
-div#spc-section-body h5 { color: rgb(85, 85, 85); border-bottom: none; }
-div#spc-section-body h6 { color: rgb(85, 85, 85); border-bottom: none; }
-
-p.rubric {
- color: rgb(85, 85, 85);
- font-size: 120%;
- font-weight: normal;
- border-bottom: 1px solid rgb(204, 204, 204);
-}
-
-
-/*
- * Tables
- */
-
-table.citation {
- border: none;
-}
-
-table.docutils td, table.docutils th {
- border: none;
- /* align column names (left col) to first line of
- multi-line descriptions (right col) */
- vertical-align: top;
-}
-
-table.docutils {
- margin-bottom: 9.5px;
-}
-
-table.align-default { /* left align tables like in old Sphinx */
- margin-left: 0;
- margin-right: auto;
-}
-
-/*
- * Admonitions
- */
-
-p.admonition-title {
- display: inline;
-}
-
-p.admonition-title:after {
- content: ":";
-}
-
-div.seealso {
- background-color: #ffc;
- border: 1px solid #ff6;
-}
-
-div.seealso dt {
- float: left;
- clear: left;
- min-width: 4em;
- padding-right: 1em;
-}
-
-div.seealso dd {
- margin-top: 0;
- margin-bottom: 0;
-}
-
-div.warning {
- background-color: #ffe4e4;
- border: 1px solid #f66;
-}
-
-div.note {
- background-color: #eee;
- border: 1px solid #ccc;
-}
diff --git a/kima/vendor/spleaf/doc/source/_theme/scipy/theme.conf b/kima/vendor/spleaf/doc/source/_theme/scipy/theme.conf
deleted file mode 100644
index 7cfff6c..0000000
--- a/kima/vendor/spleaf/doc/source/_theme/scipy/theme.conf
+++ /dev/null
@@ -1,11 +0,0 @@
-[theme]
-inherit = basic
-stylesheet = scipy.css
-pygments_style = friendly
-
-[options]
-edit_link = false
-rootlinks = []
-sidebar = left
-scipy_org_logo =
-navigation_links = true
diff --git a/kima/vendor/spleaf/doc/source/calib.rst b/kima/vendor/spleaf/doc/source/calib.rst
deleted file mode 100644
index e0473fb..0000000
--- a/kima/vendor/spleaf/doc/source/calib.rst
+++ /dev/null
@@ -1,155 +0,0 @@
-Modeling a Gaussian Process together with calibration noise
-===========================================================
-
-We consider a time series showing quasiperiodic oscillations
-and affected by white noise as well as calibration noise.
-
-The calibration noise is introduced
-by the fact that the instrument is calibrated periodically (e.g. once a day) with some error.
-Measurements using the same calibration share the same calibration error.
-
-The aim is to use a gaussian process to fit the quasiperiodic oscillations
-and be able to predict missing observations.
-
-We first generate the simulated time series:
-
-.. plot::
- :context: close-figs
-
- import numpy as np
- import matplotlib.pyplot as plt
- np.random.seed(0)
-
- # Generate calendar
- nt = 100
- tmax = 20
- t = np.sort(np.concatenate((
- np.random.uniform(0, tmax/3, nt//2),
- np.random.uniform(2*tmax/3, tmax, (nt+1)//2))))
-
- # Quasiperiodic signal
- amp = 3.0
- P0 = 5.2
- dP = 0.75
- P = P0 + dP*(t/tmax-1/2)
- y = amp*np.sin(2*np.pi*t/P)
-
- # Truth
- tsmooth = np.linspace(0, tmax, 2000)
- Psmooth = P0 + dP*(tsmooth/tmax-1/2)
- ysignal = amp*np.sin(2*np.pi*tsmooth/Psmooth)
- dysignal = amp*2*np.pi/Psmooth*(1-tsmooth*dP/(tmax*Psmooth))*np.cos(2*np.pi*tsmooth/Psmooth)
-
- # Measurement errors (white noise)
- yerr_meas = np.random.uniform(0.5, 1.5, nt)
- y = y + np.random.normal(0, yerr_meas)
-
- # Calibration errors (correlated noise)
- calib_id = (t//1).astype(int) # One calibration per day
- caliberr = np.random.uniform(0.5, 1.5, calib_id[-1]+1)
- yerr_calib = caliberr[calib_id]
- y += np.random.normal(0, caliberr)[calib_id]
-
- # Total errorbar
- yerr = np.sqrt(yerr_meas**2 + yerr_calib**2)
-
- # Plot
- plt.figure()
- plt.plot(tsmooth, ysignal, 'r', label='truth')
- plt.errorbar(t, y, yerr, fmt='.', color='k', label='meas.')
- plt.xlabel('t')
- plt.ylabel('y')
- plt.legend()
-
-We now fit the data using S+LEAF.
-As a first approach, we ignore the correlation induced by the calibration noise,
-and treat it as if it was white noise:
-
-.. plot::
- :context: close-figs
-
- from spleaf.cov import Cov
- from spleaf.term import *
- from scipy.optimize import fmin_l_bfgs_b
-
- # Initialize the S+LEAF model
- cov = Cov(t,
- err = Error(yerr),
- sho = SHOKernel(0.5, 5.0, 1.0))
-
- # We now fit the hyperparameters using the fmin_l_bfgs_b function from scipy.optimize.
- # Define the function to minimize
- def negloglike(x, y, cov):
- cov.set_param(x)
- nll = -cov.loglike(y)
- # gradient
- nll_grad = -cov.loglike_grad()[1]
- return(nll, nll_grad)
-
- # Fit
- xbest,_,_ = fmin_l_bfgs_b(negloglike, cov.get_param(), args=(y, cov))
-
- # We now use S+LEAF to predict the missing data
- cov.set_param(xbest)
- mu, var = cov.conditional(y, tsmooth, calc_cov='diag')
-
- # Plot
- plt.figure()
- plt.plot(tsmooth, ysignal, 'r', label='truth')
- plt.errorbar(t, y, yerr, fmt='.', color='k', label='meas.')
- plt.fill_between(tsmooth, mu-np.sqrt(var), mu+np.sqrt(var), color='g', alpha=0.5)
- plt.plot(tsmooth, mu, 'g', label='predict.')
- plt.xlabel('t')
- plt.ylabel('y')
- plt.legend()
-
-We see that the gaussian process is not completely wrong but tend
-to absorb the correlated noise due to the calibration.
-The prediction in the gap is not very satisfying.
-
-Let us now correctly model the calibration noise with S+LEAF:
-
-.. plot::
- :context: close-figs
-
- # We define a new covariance matrix including calibration error
- cov = Cov(t,
- err = Error(yerr_meas),
- calerr = CalibrationError(calib_id, yerr_calib),
- sho = SHOKernel(0.5, 5.0, 1.0))
-
- # Fit
- xbest,_,_ = fmin_l_bfgs_b(negloglike, cov.get_param(), args=(y, cov))
-
- # Predict
- cov.set_param(xbest)
- mu, var = cov.conditional(y, tsmooth, calc_cov='diag')
-
- # Plot
- plt.figure()
- plt.plot(tsmooth, ysignal, 'r', label='truth')
- plt.errorbar(t, y, yerr, fmt='.', color='k', label='meas.')
- plt.fill_between(tsmooth, mu-np.sqrt(var), mu+np.sqrt(var), color='g', alpha=0.5)
- plt.plot(tsmooth, mu, 'g', label='predict.')
- plt.xlabel('t')
- plt.ylabel('y')
- plt.legend()
-
-The results are indeed much better!
-
-S+LEAF also allows to predict the derivative of the gaussian process:
-
-.. plot::
- :context: close-figs
-
- # Predict derivative
- dmu, dvar = cov.conditional_derivative(y, tsmooth, calc_cov='diag')
-
- # Plot
- plt.figure()
- plt.plot(tsmooth, dysignal, 'r', label='truth')
- plt.fill_between(tsmooth, dmu-np.sqrt(dvar), dmu+np.sqrt(dvar), color='g', alpha=0.5)
- plt.plot(tsmooth, dmu, 'g', label='predict.')
- plt.xlabel('t')
- plt.ylabel('dy/dt')
- plt.legend()
diff --git a/kima/vendor/spleaf/doc/source/conf.py b/kima/vendor/spleaf/doc/source/conf.py
deleted file mode 100644
index d335136..0000000
--- a/kima/vendor/spleaf/doc/source/conf.py
+++ /dev/null
@@ -1,30 +0,0 @@
-import os
-import sys
-import spleaf
-
-# -- Project information -----------------------------------------------------
-project = 'S+LEAF'
-copyright = '2019-2022, Jean-Baptiste Delisle'
-author = 'Jean-Baptiste Delisle'
-
-# -- General configuration ---------------------------------------------------
-needs_sphinx = '1.1'
-extensions = ['sphinx.ext.autodoc', 'sphinx.ext.autosummary',
- 'sphinx.ext.intersphinx', 'sphinx.ext.coverage',
- 'numpydoc', 'matplotlib.sphinxext.plot_directive']
-templates_path = ['_templates']
-exclude_patterns = []
-pygments_style = 'sphinx'
-autosummary_generate = True
-plot_include_source = True
-
-# -- Options for HTML output -------------------------------------------------
-html_theme_path = ['_theme']
-html_theme = 'scipy'
-html_theme_options = {
- "rootlinks": [],
- 'sidebar': 'right',
- "edit_link": False,
-}
-html_sidebars = {'index': ['searchbox.html']}
-html_static_path = ['_static']
diff --git a/kima/vendor/spleaf/doc/source/index.rst b/kima/vendor/spleaf/doc/source/index.rst
deleted file mode 100644
index 3ceb728..0000000
--- a/kima/vendor/spleaf/doc/source/index.rst
+++ /dev/null
@@ -1,91 +0,0 @@
-
-S+LEAF documentation
-====================
-
-S+LEAF is an `open-source `_
-software that provides a flexible noise model with fast and scalable methods.
-It is largely inspired by the
-`celerite `_ / `celerite2 `_
-model proposed by [1]_, [3]_.
-In particular the modeling of gaussian processes is similar,
-and uses the same semiseparable matrices representation as celerite.
-S+LEAF extends the celerite model in two ways:
-
-- It allows to account
- for close to diagonal (LEAF) noises such as instrument calibration errors
- (see [2]_ for more details).
-- It allows to model simulatenously several time series
- with the same Gaussian processes and their derivatives
- (see [4]_ for more details).
-
-Please cite [2]_ and [4]_ if you use S+LEAF in a publication.
-
-Installation
-------------
-
-Using conda
-~~~~~~~~~~~
-
-The S+LEAF package can be installed using conda with the following command:
-
-``conda install -c conda-forge spleaf``
-
-Using pip
-~~~~~~~~~
-
-It can also be installed using pip with:
-
-``pip install spleaf``
-
-Usage
------
-
-S+LEAF covariance matrices are generated using the
-:doc:`_autosummary/spleaf.cov.Cov` class.
-The covariance matrix is modeled as the sum of different components (or terms),
-which split into two categories:
-noise terms and kernel terms (gaussian processes).
-See the :ref:`API reference` for a list of available terms.
-
-The low level implementation of
-S+LEAF matrices as defined by [2]_
-is available as the :doc:`_autosummary/spleaf.Spleaf` class,
-but one typically does not need to directly deal with it.
-
-Examples
---------
-
-.. toctree::
- calib
- multi
-
-.. _api_ref:
-
-API Reference
--------------
-
-.. autosummary::
- :toctree: _autosummary
- :template: autosummary/custom_module.rst
- :recursive:
-
- spleaf.cov
- spleaf.term
- spleaf
-
-Contribute
-----------
-
-Everyone is welcome to open issues and/or contribute code via pull-requests.
-A SWITCH edu-ID account is necessary to sign in to ``_.
-If you don't have an account, you can easily create one at ``_.
-Then you can sign in to ``_ by selecting "SWITCH edu-ID" as your organisation.
-
-
-References
-----------
-
-.. [1] `Foreman-Mackey et al., "Fast and Scalable Gaussian Process Modeling with Applications to Astronomical Time Series", 2017 `_.
-.. [2] `Delisle, J.-B., Hara, N., and Ségransan, D., "Efficient modeling of correlated noise. II. A flexible noise model with fast and scalable methods", 2020 `_.
-.. [3] `Gordon, T. A., Agol, E., Foreman-Mackey, D., "A Fast, Two-dimensional Gaussian Process Method Based on Celerite: Applications to Transiting Exoplanet Discovery and Characterization", 2020 `_.
-.. [4] `Delisle, J.-B., Unger, N., Hara, N., and Ségransan, D., "Efficient modeling of correlated noise. III. Scalable methods for jointly modeling several observables' time series with Gaussian processes", 2022 `_.
diff --git a/kima/vendor/spleaf/doc/source/multi.rst b/kima/vendor/spleaf/doc/source/multi.rst
deleted file mode 100644
index c94c390..0000000
--- a/kima/vendor/spleaf/doc/source/multi.rst
+++ /dev/null
@@ -1,124 +0,0 @@
-Modeling a Gaussian Process over heterogeneous time series
-==========================================================
-
-We consider here a physical process, such as stellar activity modulated by stellar rotation,
-affecting several observables (3 here) differently (different amplitudes, lags, etc.).
-We will model this physical process through a Gaussian process and its derivative.
-In this model, each observable is a linear combination of the GP (:math:`G(t)`) and its derivative (:math:`G'(t)`):
-
-.. math:: y_{i}(t) = \alpha_i G(t) + \beta_i G'(t).
-
-
-We first generate the 3 time series with a quasiperiodic evolution and different lags:
-
-.. plot::
- :context: close-figs
-
- import numpy as np
- import matplotlib.pyplot as plt
-
- np.random.seed(0)
-
- # Settings
- P0 = 3.8
- dP = 1.25
- tmax = 20
- amp = [3.0, 1.0, 0.33]
- phase = [0, np.pi / 2, -3*np.pi / 4]
- nt = [75, 100, 50]
-
- # True signal
- tsmooth = np.linspace(0, tmax, 2000)
- Psmooth = P0 + dP * (tsmooth / tmax - 1 / 2)
- Ysignal = [
- ak * np.sin(2 * np.pi * tsmooth / Psmooth + pk)
- for ak, pk in zip(amp, phase)
- ]
-
- # Generate observations calendars
- T = [
- np.sort(
- np.concatenate((np.random.uniform(0, tmax / 3,
- ntk // 2), np.random.uniform(2 * tmax / 3, tmax, (ntk + 1) // 2))))
- for ntk in nt
- ]
-
- # Generate measurements with white noise
- Yerr = [np.random.uniform(0.5, 1.5, ntk) for ntk in nt]
- P = [P0 + dP * (tk / tmax - 1 / 2) for tk in T]
- Y = [
- amp[k] * np.sin(2 * np.pi * T[k] / P[k] + phase[k]) +
- np.random.normal(0, Yerr[k]) for k in range(3)
- ]
-
- # Plot
- _, axs = plt.subplots(3, 1, sharex=True, figsize=(6, 10))
- for k in range(3):
- ax = axs[k]
- ax.plot(tsmooth, Ysignal[k], 'r', label='truth')
- ax.errorbar(T[k], Y[k], Yerr[k], fmt='.', color='k', label='meas.')
- ax.set_ylabel(f'$y_{k}$')
- ax.set_xlabel('$t$')
- axs[0].legend()
-
-
-We now fit these data using S+LEAF:
-
-.. plot::
- :context: close-figs
-
- from spleaf import cov, term
- from scipy.optimize import fmin_l_bfgs_b
-
- # Merge all 3 time series
- t_full, y_full, yerr_full, series_index = cov.merge_series(T, Y, Yerr)
-
- # Initialize the S+LEAF model
- C = cov.Cov(t_full,
- err=term.Error(yerr_full),
- GP=term.MultiSeriesKernel(term.SHOKernel(1.0, 5.0, 1.0), series_index,
- np.ones(3), np.ones(3)))
-
- # Fit the hyperparameters using the fmin_l_bfgs_b function from scipy.optimize.
- # List of parameters to fit
- param = C.param[1:]
- # The amplitude of the SHOKernel is fixed at 1 (not fitted),
- # since it would be degenerated with the amplitudes alpha, \beta.
-
- # Define the function to minimize
- def negloglike(x, y, C):
- C.set_param(x, param)
- nll = -C.loglike(y)
- # gradient
- nll_grad = -C.loglike_grad()[1][1:]
- return (nll, nll_grad)
-
- # Fit
- xbest, _, _ = fmin_l_bfgs_b(negloglike, C.get_param(param), args=(y_full, C))
-
- # Use S+LEAF to predict the missing data
- C.set_param(xbest, param)
- _, axs = plt.subplots(3, 1, sharex=True, figsize=(6, 10))
- for k in range(3):
- # Predict time series k
- C.kernel['GP'].set_conditional_coef(series_id=k)
- mu, var = C.conditional(y_full, tsmooth, calc_cov='diag')
-
- # Plot
- ax = axs[k]
- ax.plot(tsmooth, Ysignal[k], 'r', label='truth')
- ax.errorbar(T[k], Y[k], Yerr[k], fmt='.', color='k', label='meas.')
- ax.fill_between(tsmooth,
- mu - np.sqrt(var),
- mu + np.sqrt(var),
- color='g',
- alpha=0.5)
- ax.plot(tsmooth, mu, 'g', label='predict.')
- ax.set_ylabel(f'$y_{k}$')
- ax.set_xlabel('$t$')
- axs[0].legend()
- plt.show()
-
-Thanks to the informations contained in the two first time series :math:`y_0` and :math:`y_1`,
-we obtain a good prediction for the third time series :math:`y_2`,
-even if the signal to noise ratio is low.
\ No newline at end of file
diff --git a/kima/vendor/spleaf/setup.py b/kima/vendor/spleaf/setup.py
deleted file mode 100644
index 472effc..0000000
--- a/kima/vendor/spleaf/setup.py
+++ /dev/null
@@ -1,48 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Copyright 2019-2022 Jean-Baptiste Delisle
-#
-# This file is part of spleaf.
-#
-# spleaf is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# spleaf is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with spleaf. If not, see .
-
-from setuptools import setup, Extension
-import numpy.distutils.misc_util
-import os
-
-path = os.path.abspath(os.path.dirname(__file__))
-
-info = {}
-with open(os.path.join(path, 'spleaf', '__info__.py'), 'r') as f:
- exec(f.read(), info)
-with open('README.rst', 'r', encoding='utf-8') as readme:
- long_description = readme.read()
-
-c_ext = Extension('spleaf.libspleaf',
- sources=['spleaf/pywrapspleaf.c', 'spleaf/libspleaf.c'],
- language='c')
-
-setup(name=info['__title__'],
- version=info['__version__'],
- author=info['__author__'],
- author_email=info['__author_email__'],
- license=info['__license__'],
- description=info['__description__'],
- long_description=long_description,
- url=info['__url__'],
- packages=['spleaf'],
- ext_modules=[c_ext],
- include_dirs=numpy.distutils.misc_util.get_numpy_include_dirs(),
- python_requires='>=3.6',
- install_requires='numpy>=1.16')
diff --git a/kima/vendor/spleaf/spleaf/__info__.py b/kima/vendor/spleaf/spleaf/__info__.py
deleted file mode 100644
index 2532728..0000000
--- a/kima/vendor/spleaf/spleaf/__info__.py
+++ /dev/null
@@ -1,26 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Copyright 2019-2022 Jean-Baptiste Delisle
-#
-# This file is part of spleaf.
-#
-# spleaf is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# spleaf is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with spleaf. If not, see .
-
-__title__ = 'spleaf'
-__description__ = 'Symmetric S+LEAF matrix.'
-__author__ = 'Jean-Baptiste Delisle'
-__author_email__ = 'jean-baptiste.delisle@unige.ch'
-__license__ = 'GPLv3'
-__url__ = 'https://gitlab.unige.ch/jean-baptiste.delisle/spleaf'
-__version__ = "2.1.2"
diff --git a/kima/vendor/spleaf/spleaf/__init__.py b/kima/vendor/spleaf/spleaf/__init__.py
deleted file mode 100644
index f12f543..0000000
--- a/kima/vendor/spleaf/spleaf/__init__.py
+++ /dev/null
@@ -1,996 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Copyright 2019-2022 Jean-Baptiste Delisle
-#
-# This file is part of spleaf.
-#
-# spleaf is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# spleaf is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with spleaf. If not, see .
-
-__all__ = ['Spleaf']
-
-import numpy as np
-from . import libspleaf
-from .__info__ import __version__
-
-
-class Spleaf():
- r"""
- Symmetric S+LEAF (semiseparable + leaf) matrix.
-
- A symmetric S+LEAF matrix :math:`C` is defined as
-
- .. math:: C = A + \mathrm{tril}(U V^T) + \mathrm{triu}(V U^T) + F,
-
- where
- :math:`A` is the diagonal part,
- the matrices :math:`U` and :math:`V` represent
- the symmetric semiseparable part,
- and :math:`F` is the symmetric leaf part of :math:`C`.
-
- A Cholesky decomposition of :math:`C` is performed
-
- .. math:: C = L D L^T,
-
- where
- :math:`D` is a diagonal matrix
- and :math:`L` is a lower triangular matrix which itself decomposes as
-
- .. math:: L = \mathbb{I} + \mathrm{tril}(U W^T) + G,
-
- with
- :math:`U` and :math:`W` representing the
- strictly lower triangular semiseparable part,
- and :math:`G` the strictly lower triangular leaf part of :math:`L`.
-
- Parameters
- ----------
- A : (n,) ndarray
- Diagonal of the matrix.
- U, V : (n, r) ndarrays
- Symmetric semiseparable part of the matrix,
- with preconditioning matrix `phi`.
- At row i, column j < i,
- the semiseparable part is
- ``np.sum(U[i] * V[j] * np.prod(phi[j:i-1], axis=0))``
- phi : (n-1, r) ndarray
- Preconditioning matrix for the semiseparable part.
- offsetrow : (n,) ndarray
- Offsets for the storage of each row in `F` (leaf part).
- b : (n,) ndarray
- Number of non-zero values left to the diagonal at each row of `F`.
- F : ndarray
- Symmetric leaf part of the matrix,
- stored in strictly lower triangular form,
- and in row major order.
- For ``i-b[i] <= j < i``, the non-zero value
- :math:`F_{i,j}` is stored at index ``offsetrow[i] + j`` in `F`.
- (i.e. offsetrow should be defined as ``offsetrow = np.cumsum(b-1) + 1``).
- copy : bool
- Whether to copy arrays.
-
- Attributes
- ----------
- n : int
- Size of the matrix.
- r : int
- Rank of the semiseparable part (number of components).
- A, U, V, phi, offsetrow, b, F : ndarrays
- See parameters.
- D : (n,) ndarray
- Diagonal part of the Cholesky decomposition of the matrix.
- W : (n,r) ndarray
- Semiseparable part of the Cholesky decomposition of the matrix.
- G : ndarray
- Leaf part of the Cholesky decomposition of the matrix
- (stored in the same way as `F`).
- """
-
- def __init__(self, A, U, V, phi, offsetrow, b, F, copy=False):
- self.A = self._copy(A, copy)
- self.U = self._copy(U, copy)
- self.V = self._copy(V, copy)
- self.phi = self._copy(phi, copy)
- self.offsetrow = self._copy(offsetrow, copy)
- self.b = self._copy(b, copy)
- self.F = self._copy(F, copy)
-
- self.n = A.size
- self.r = U.shape[1]
-
- # Cholesky decomposition
- self.D = np.empty_like(A)
- self.W = np.empty_like(V)
- self.G = np.empty_like(F)
- self._S = np.empty(self.n * self.r * self.r)
- self._Z = np.empty((self.F.size + self.n) * self.r)
-
- libspleaf.spleaf_cholesky(self.n, self.r, self.offsetrow, self.b, self.A,
- self.U, self.V, self.phi, self.F, self.D, self.W, self.G, self._S,
- self._Z)
-
- # Back propagation (no init)
- self._grad_A = None
- self._grad_U = None
- self._grad_V = None
- self._grad_phi = None
- self._grad_F = None
-
- self._grad_D = None
- self._grad_Ucho = None
- self._grad_W = None
- self._grad_phicho = None
- self._grad_G = None
-
- # Kernel derivative
- self._dU = None
- self._dV = None
-
- # Other
- self._logdet_value = None
- self._sqD_value = None
- self._x_dotL = None
- self._f_dotL = np.empty(self.n * self.r)
- self._x_solveL = None
- self._f_solveL = np.empty(self.n * self.r)
- self._x_dotLT = None
- self._g_dotLT = np.empty(self.n * self.r)
- self._x_solveLT = None
- self._g_solveLT = np.empty(self.n * self.r)
-
- def _copy(self, x, copy):
- r"""
- Perform a copy if required else pass the object.
- """
- if copy and isinstance(x, np.ndarray):
- return (x.copy())
- else:
- return (x)
-
- def set_param(self, A, U, V, phi, F, copy=False):
- r"""
- Update the initial parameters (`A`, `U`, `V`, `phi`, `F`)
- and recompute the Cholesky decomposition of the matrix.
- """
-
- self.A = self._copy(A, copy)
- self.U = self._copy(U, copy)
- self.V = self._copy(V, copy)
- self.phi = self._copy(phi, copy)
- self.F = self._copy(F, copy)
-
- # Cholesky decomposition
- libspleaf.spleaf_cholesky(self.n, self.r, self.offsetrow, self.b, self.A,
- self.U, self.V, self.phi, self.F, self.D, self.W, self.G, self._S,
- self._Z)
-
- # Re-init logdet/sqD
- self._logdet_value = None
- self._sqD_value = None
-
- def expand(self):
- r"""
- Expand the matrix as a full (n x n) matrix.
-
- Warnings
- --------
- This non-sparse representation has a
- :math:`\mathcal{O}(n^2)` cost and footprint.
- """
-
- C = np.diag(self.A)
- for i in range(self.n):
- for j in range(i - self.b[i], i):
- C[i, j] = self.F[self.offsetrow[i] + j]
- cumphi = np.ones(self.r)
- for j in range(i - 1, -1, -1):
- cumphi *= self.phi[j]
- C[i, j] += np.sum(cumphi * self.U[i] * self.V[j])
- C[j, i] = C[i, j]
- return (C)
-
- def expandL(self):
- r"""
- Expand :math:`L` as a full (n x n) matrix.
-
- Warnings
- --------
- This non-sparse representation has a
- :math:`\mathcal{O}(n^2)` cost and footprint.
- """
-
- L = np.identity(self.n)
- for i in range(self.n):
- for j in range(i - self.b[i], i):
- L[i, j] = self.G[self.offsetrow[i] + j]
- cumphi = np.ones(self.r)
- for j in range(i - 1, -1, -1):
- cumphi *= self.phi[j]
- L[i, j] += np.sum(cumphi * self.U[i] * self.W[j])
- return (L)
-
- def expandInv(self):
- r"""
- Expand the inverse of the matrix as a full (n x n) matrix.
-
- Warnings
- --------
- This non-sparse representation has a
- :math:`\mathcal{O}(n^2)` cost and footprint.
- """
-
- invC = np.empty((self.n, self.n))
- ei = np.zeros(self.n)
- for i in range(self.n):
- ei[i] = 1.0
- invC[:, i] = self.solveLT(self.solveL(ei) / self.D)
- ei[i] = 0.0
- return (invC)
-
- def expandInvL(self):
- r"""
- Expand :math:`L^{-1}` as a full (n x n) matrix.
-
- Warnings
- --------
- This non-sparse representation has a
- :math:`\mathcal{O}(n^2)` cost and footprint.
- """
-
- invL = np.empty((self.n, self.n))
- ei = np.zeros(self.n)
- for i in range(self.n):
- ei[i] = 1.0
- invL[:, i] = self.solveL(ei)
- ei[i] = 0.0
- return (invL)
-
- def logdet(self):
- r"""
- Compute the (natural) logarithm of the determinant of the matrix.
-
- Returns
- -------
- logdet : float
- The natural logarithm of the determinant.
-
- Notes
- -----
- This is a lazy computation (the result is stored for future calls).
- """
-
- if self._logdet_value is None:
- self._logdet_value = np.sum(np.log(self.D))
- return (self._logdet_value)
-
- def sqD(self):
- r"""
- Compute the square-root of `D`.
-
- Returns
- -------
- sqD : (n,) ndarray
- The square-root of `D`.
-
- Notes
- -----
- This is a lazy computation (the result is stored for future calls).
- """
-
- if self._sqD_value is None:
- self._sqD_value = np.sqrt(self.D)
- return (self._sqD_value)
-
- def dotL(self, x, copy=False):
- r"""
- Compute :math:`y = L x`.
-
- Parameters
- ----------
- x : (n,) ndarray
- The input vector :math:`x`.
- copy : bool
- Whether to copy arrays.
-
- Returns
- -------
- y : (n,) ndarray
- The dot product :math:`y = L x`.
- """
-
- self._x_dotL = self._copy(x, copy)
- y = np.empty_like(x)
- libspleaf.spleaf_dotL(self.n, self.r, self.offsetrow, self.b, self.U,
- self.W, self.phi, self.G, x, y, self._f_dotL)
- return (y)
-
- def solveL(self, y, copy=False):
- r"""
- Solve for :math:`x = L^{-1} y`.
-
- Parameters
- ----------
- y : (n,) ndarray
- The righthand side vector :math:`y`.
- copy : bool
- Whether to copy arrays.
-
- Returns
- -------
- x : (n,) ndarray
- The solution :math:`x = L^{-1} y`.
- """
-
- self._x_solveL = np.empty_like(y)
- libspleaf.spleaf_solveL(self.n, self.r, self.offsetrow, self.b, self.U,
- self.W, self.phi, self.G, y, self._x_solveL, self._f_solveL)
- return (self._copy(self._x_solveL, copy))
-
- def dotLT(self, x, copy=False):
- r"""
- Compute :math:`y = L^T x`.
-
- Parameters
- ----------
- x : (n,) ndarray
- The input vector :math:`x`.
- copy : bool
- Whether to copy arrays.
-
- Returns
- -------
- y : (n,) ndarray
- The dot product :math:`y = L^T x`.
- """
-
- self._x_dotLT = self._copy(x, copy)
- y = np.empty_like(x)
- libspleaf.spleaf_dotLT(self.n, self.r, self.offsetrow, self.b, self.U,
- self.W, self.phi, self.G, x, y, self._g_dotLT)
- return (y)
-
- def solveLT(self, y, copy=False):
- r"""
- Solve for :math:`x = L^{-T} y`.
-
- Parameters
- ----------
- y : (n,) ndarray
- The righthand side vector :math:`y`.
- copy : bool
- Whether to copy arrays.
-
- Returns
- -------
- x : (n,) ndarray
- The solution :math:`x = L^{-T} y`.
- """
-
- self._x_solveLT = np.empty_like(y)
- libspleaf.spleaf_solveLT(self.n, self.r, self.offsetrow, self.b, self.U,
- self.W, self.phi, self.G, y, self._x_solveLT, self._g_solveLT)
- return (self._copy(self._x_solveLT, copy))
-
- def init_grad(self):
- r"""
- Initialize (or reinitialize) the backward propagation of the gradient.
- """
-
- self._grad_A = np.zeros_like(self.A)
- self._grad_U = np.zeros_like(self.U)
- self._grad_V = np.zeros_like(self.V)
- self._grad_phi = np.zeros_like(self.phi)
- self._grad_F = np.zeros_like(self.F)
-
- self._grad_D = np.zeros_like(self.D)
- self._grad_Ucho = np.zeros_like(self.U)
- self._grad_W = np.zeros_like(self.W)
- self._grad_phicho = np.zeros_like(self.phi)
- self._grad_G = np.zeros_like(self.G)
-
- def cholesky_back(self):
- r"""
- Backward propagation of the gradient for the Cholesky decomposition.
-
- Propagate the gradient of a function with respect to `D`
- and to the components of :math:`L` (`U`, `W`, `phi`, `G`),
- to its gradient with respect to the initial components of the matrix
- (`A`, `U`, `V`, `phi`, `F`).
-
- Use :func:`grad_param` to get the results.
- """
-
- libspleaf.spleaf_cholesky_back(self.n, self.r, self.offsetrow, self.b,
- self.D, self.U, self.W, self.phi, self.G, self._grad_D, self._grad_Ucho,
- self._grad_W, self._grad_phicho, self._grad_G, self._grad_A,
- self._grad_U, self._grad_V, self._grad_phi, self._grad_F, self._S,
- self._Z)
-
- def dotL_back(self, grad_y):
- r"""
- Backward propagation of the gradient for :func:`dotL`.
-
- Propagate the gradient of a function with respect to `y`,
- to its gradient with respect to `x`
- and to the components of :math:`L`
- (`U`, `W`, `phi`, `G`).
-
- Use :func:`cholesky_back` to propagate the gradient
- to the initial components of the matrix
- (`A`, `U`, `V`, `phi`, `F`).
-
- Parameters
- ----------
- grad_y : (n,) ndarray
- Gradient of the function with respect to `y`.
-
- Returns
- -------
- grad_x : (n,) ndarray
- Gradient of the function with respect to `x`.
- """
-
- grad_x = np.empty_like(grad_y)
- libspleaf.spleaf_dotL_back(self.n, self.r, self.offsetrow, self.b, self.U,
- self.W, self.phi, self.G, self._x_dotL, grad_y, self._grad_Ucho,
- self._grad_W, self._grad_phicho, self._grad_G, grad_x, self._f_dotL)
- return (grad_x)
-
- def solveL_back(self, grad_x):
- r"""
- Backward propagation of the gradient for :func:`solveL`.
-
- Propagate the gradient of a function with respect to `x`,
- to its gradient with respect to `y`
- and to the components of :math:`L`
- (`U`, `W`, `phi`, `G`).
-
- Use :func:`cholesky_back` to propagate the gradient
- to the initial components of the matrix
- (`A`, `U`, `V`, `phi`, `F`).
-
- Parameters
- ----------
- grad_x : (n,) ndarray
- Gradient of the function with respect to `x`.
-
- Returns
- -------
- grad_y : (n,) ndarray
- Gradient of the function with respect to `y`.
- """
-
- grad_y = np.empty_like(grad_x)
- libspleaf.spleaf_solveL_back(self.n, self.r, self.offsetrow, self.b,
- self.U, self.W, self.phi, self.G, self._x_solveL, grad_x,
- self._grad_Ucho, self._grad_W, self._grad_phicho, self._grad_G, grad_y,
- self._f_solveL)
- return (grad_y)
-
- def dotLT_back(self, grad_y):
- r"""
- Backward propagation of the gradient for :func:`dotLT`.
-
- Propagate the gradient of a function with respect to `y`,
- to its gradient with respect to `x`
- and to the components of :math:`L`
- (`U`, `W`, `phi`, `G`).
-
- Use :func:`cholesky_back` to propagate the gradient
- to the initial components of the matrix
- (`A`, `U`, `V`, `phi`, `F`).
-
- Parameters
- ----------
- grad_y : (n,) ndarray
- Gradient of the function with respect to `y`.
-
- Returns
- -------
- grad_x : (n,) ndarray
- Gradient of the function with respect to `x`.
- """
-
- grad_x = np.empty_like(grad_y)
- libspleaf.spleaf_dotLT_back(self.n, self.r, self.offsetrow, self.b, self.U,
- self.W, self.phi, self.G, self._x_dotLT, grad_y, self._grad_Ucho,
- self._grad_W, self._grad_phicho, self._grad_G, grad_x, self._g_dotLT)
- return (grad_x)
-
- def solveLT_back(self, grad_x):
- r"""
- Backward propagation of the gradient for :func:`solveLT`.
-
- Propagate the gradient of a function with respect to `x`,
- to its gradient with respect to `y`
- and to the components of :math:`L`
- (`U`, `W`, `phi`, `G`).
-
- Use :func:`cholesky_back` to propagate the gradient
- to the initial components of the matrix
- (`A`, `U`, `V`, `phi`, `F`).
-
- Parameters
- ----------
- grad_x : (n,) ndarray
- Gradient of the function with respect to `x`.
-
- Returns
- -------
- grad_y : (n,) ndarray
- Gradient of the function with respect to `y`.
- """
-
- grad_y = np.empty_like(grad_x)
- libspleaf.spleaf_solveLT_back(self.n, self.r, self.offsetrow, self.b,
- self.U, self.W, self.phi, self.G, self._x_solveLT, grad_x,
- self._grad_Ucho, self._grad_W, self._grad_phicho, self._grad_G, grad_y,
- self._g_solveLT)
- return (grad_y)
-
- def grad_param(self, *args, **kwargs):
- r"""
- Gradient of a function with respect to
- the initial parameters (`A`, `U`, `V`, `phi`, `F`),
- after a call to :func:`cholesky_back`.
-
- Returns
- -------
- grad_A : (n,) ndarray
- Gradient of the function with respect to `A`.
- grad_U : (n, r) ndarray
- Gradient of the function with respect to `U`.
- grad_V : (n, r) ndarray
- Gradient of the function with respect to `V`.
- grad_phi : (n-1, r) ndarray
- Gradient of the function with respect to `phi`.
- grad_F : ndarray
- Gradient of the function with respect to `F`.
- """
-
- return (self._grad_A, self._grad_U, self._grad_V, self._grad_phi,
- self._grad_F)
-
- def chi2(self, y):
- r"""
- Compute :math:`\chi^2 = y^T C^{-1} y`
- for a given vector of residuals :math:`y`.
-
- Parameters
- ----------
- y : (n,) ndarray
- The vector of residuals :math:`y`.
-
- Returns
- -------
- chi2 : float
- The :math:`\chi^2`.
- """
-
- x = self.solveL(y)
- return (np.sum(x * x / self.D))
-
- def loglike(self, y):
- r"""
- Compute the (natural) logarithm of the likelihood
- for a given vector of residuals :math:`y`.
-
- Parameters
- ----------
- y : (n,) ndarray
- The vector of residuals :math:`y`.
-
- Returns
- -------
- loglike : float
- The natural logarithm of the likelihood.
- """
-
- return (-0.5 *
- (self.chi2(y) + self.logdet() + self.n * np.log(2.0 * np.pi)))
-
- def chi2_grad(self, *args, **kwargs):
- r"""
- Compute the gradient of the :math:`\chi^2` (:func:`chi2`)
- with respect to the residuals and to the initial parameters
- (see :func:`grad_param`).
-
- Returns
- -------
- grad_y : (n,) ndarray
- Gradient of the :math:`\chi^2` with respect to the residuals :math:`y`.
- ...
- See :func:`grad_param`.
- """
-
- self.init_grad()
- xoD = self._x_solveL / self.D
- grad_x = 2.0 * xoD
- self._grad_D = -xoD * xoD
- grad_y = self.solveL_back(grad_x)
- self.cholesky_back()
- return (grad_y, self.grad_param(*args, **kwargs))
-
- def loglike_grad(self, *args, **kwargs):
- r"""
- Compute the gradient of the log-likelihood (:func:`loglike`)
- with respect to the residuals and to the initial parameters
- (see :func:`grad_param`).
-
- Returns
- -------
- grad_y : (n,) ndarray
- Gradient of the log-likelihood with respect to the residuals :math:`y`.
- ...
- See :func:`grad_param`.
- """
-
- self.init_grad()
- xoD = self._x_solveL / self.D
- grad_x = -xoD
- self._grad_D = 0.5 * (xoD * xoD - 1.0 / self.D)
- grad_y = self.solveL_back(grad_x)
- self.cholesky_back()
- return (grad_y, self.grad_param(*args, **kwargs))
-
- def self_conditional(self, y, calc_cov=False, index=None):
- r"""
- Compute the conditional mean and covariance
- of the Gaussian process corresponding to the semiseparable part
- of the covariance matrix, knowning the observed values :math:`y`.
-
- Parameters
- ----------
- y : (n,) ndarray
- The vector of observed values :math:`y`.
- calc_cov : False (default), True, or 'diag'
- Whether to output only the conditional mean (False),
- the mean and full covariance matrix (True),
- or the mean and main diagonal of the covariance matrix ('diag').
- index : (r',) ndarray or None
- Vector (of type int) giving the indices of semiseparable terms
- that should be considered for the Gaussian process.
- Other terms (semiseparable or leaf) are considered as noise.
- If index is None, all semiserable terms are considered for the
- Gaussian process.
-
- Returns
- -------
- mu : (n,) ndarray
- The vector of conditional mean values.
- cov : (n, n) ndarray
- Full covariance matrix (if calc_cov is True).
- var : (n,) ndarray
- Main diagonal of the covariance matrix (if calc_cov is 'diag').
-
- Warnings
- --------
- While the computational cost of the conditional mean scales as
- :math:`\mathcal{O}(n)`,
- the computational cost of the variance scales as
- :math:`\mathcal{O}(n^2)`,
- and the computational cost of the full covariance scales as
- :math:`\mathcal{O}(n^3)`.
- """
-
- if index is None:
- index = np.arange(self.r)
- ri = index.size
-
- u = self.solveLT(self.solveL(y) / self.D)
- y2 = np.empty(self.n)
- libspleaf.spleaf_dotsep(self.n, self.r, ri, index, self.U, self.V,
- self.phi, u, y2)
-
- if not calc_cov:
- return (y2)
-
- K = np.empty((self.n, self.n))
- libspleaf.spleaf_expandsep(self.n, self.r, ri, index, self.U, self.V,
- self.phi, K)
- H = np.array([self.solveL(Kk) / self.sqD() for Kk in K])
-
- if calc_cov == 'diag':
- return (y2, np.diag(K) - np.sum(H * H, axis=1))
-
- return (y2, K - H @ H.T)
-
- def conditional(self,
- y,
- U2,
- V2,
- phi2,
- ref2left,
- phi2left,
- phi2right,
- calc_cov=False,
- index=None):
- r"""
- Conditional mean and covariance at new abscissas
- of the Gaussian process corresponding to the semiseparable part
- of the covariance matrix, knowning the observed values :math:`y`.
-
- Parameters
- ----------
- y : (n,) ndarray
- The vector of observed values :math:`y`.
- U2, V2 : (n2, r) ndarrays
- Symmetric semiseparable part at new abscissas,
- with preconditioning matrix `phi2`.
- phi2 : (n2-1, r) ndarray
- Preconditioning matrix for the semiseparable part at new abscissas.
- ref2left : (n2,) ndarray
- Indices of the closest original abscissas to the left of new abscissas.
- phi2left : (n2, r) ndarray
- Preconditioning matrix linking new abscissas
- with their closest original abscissas to the left.
- phi2right : (n2, r) ndarray
- Preconditioning matrix linking new abscissas
- with their closest original abscissas to the right.
- calc_cov : False (default), True, or 'diag'
- Whether to output only the conditional mean (False),
- the mean and full covariance matrix (True),
- or the mean and main diagonal of the covariance matrix ('diag').
- index : (r',) ndarray or None
- Vector (of type int) giving the indices of semiseparable terms
- that should be considered for the Gaussian process.
- Other terms (semiseparable or leaf) are considered as noise.
- If index is None, all semiserable terms are considered for the
- Gaussian process.
-
- Returns
- -------
- mu : (n2,) ndarray
- The vector of conditional mean values.
- cov : (n2, n2) ndarray
- Full covariance matrix (if calc_cov is True).
- var : (n2,) ndarray
- Main diagonal of the covariance matrix (if calc_cov is 'diag').
-
- Warnings
- --------
- While the computational cost of the conditional mean scales as
- :math:`\mathcal{O}(n+n_2)`,
- the computational cost of the variance scales as
- :math:`\mathcal{O}(n n_2)`,
- and the computational cost of the full covariance scales as
- :math:`\mathcal{O}(n n_2^2)`.
- """
-
- if index is None:
- index = np.arange(self.r)
- ri = index.size
-
- u = self.solveLT(self.solveL(y) / self.D)
- n2 = U2.shape[0]
- y2 = np.empty(n2)
- libspleaf.spleaf_dotsepmixt(self.n, n2, self.r, ri, index, self.U, self.V,
- self.phi, U2, V2, ref2left, phi2left, phi2right, u, y2)
-
- if not calc_cov:
- return (y2)
-
- Km = np.empty((n2, self.n))
- libspleaf.spleaf_expandsepmixt(self.n, n2, self.r, ri, index, self.U,
- self.V, self.phi, U2, V2, ref2left, phi2left, phi2right, Km)
- Hm = np.array([self.solveL(Kmk) / self.sqD() for Kmk in Km])
-
- if calc_cov == 'diag':
- return (y2,
- np.sum(U2[:, index] * V2[:, index], axis=1) - np.sum(Hm * Hm, axis=1))
-
- K = np.empty((n2, n2))
- libspleaf.spleaf_expandsep(n2, self.r, ri, index, U2, V2, phi2, K)
- return (y2, K - Hm @ Hm.T)
-
- def self_conditional_derivative(self,
- y,
- dU=None,
- dV=None,
- calc_cov=False,
- index=None):
- r"""
- Conditional mean and covariance
- of the derivative of the Gaussian process corresponding to the semiseparable part
- of the covariance matrix, knowning the observed values :math:`y`.
-
- Parameters
- ----------
- y : (n,) ndarray
- The vector of observed values :math:`y`.
- dU, dV : (n, r) ndarrays or None
- Semiseparable part of the derivatives.
- If None, the values from a previous call are kept.
- calc_cov : False (default), True, or 'diag'
- Whether to output only the conditional mean (False),
- the mean and full covariance matrix (True),
- or the mean and main diagonal of the covariance matrix ('diag').
- index : (r',) ndarray or None
- Vector (of type int) giving the indices of semiseparable terms
- that should be considered for the Gaussian process.
- Other terms (semiseparable or leaf) are considered as noise.
- If index is None, all semiserable terms are considered for the
- Gaussian process.
-
- Returns
- -------
- mu : (n, ) ndarray
- The vector of derivative conditional mean values.
- cov : (n, n) ndarray
- Full covariance matrix (if calc_cov is True).
- var : (n,) ndarray
- Main diagonal of the covariance matrix (if calc_cov is 'diag').
-
- Warnings
- --------
- While the computational cost of the derivative conditional mean scales as
- :math:`\mathcal{O}(n)`,
- the computational cost of the variance scales as
- :math:`\mathcal{O}(n^2)`,
- and the computational cost of the full covariance scales as
- :math:`\mathcal{O}(n^3)`.
- """
-
- if index is None:
- index = np.arange(self.r)
- ri = index.size
-
- if dU is not None:
- self._dU = dU
- if dV is not None:
- self._dV = dV
-
- u = self.solveLT(self.solveL(y) / self.D)
- dy = np.empty(self.n)
-
- libspleaf.spleaf_dotantisep(self.n, self.r, ri, index, self._dU, self.V,
- self.phi, u, dy)
-
- if not calc_cov:
- return (dy)
-
- dK = np.empty((self.n, self.n))
- d2K = np.empty((self.n, self.n))
- libspleaf.spleaf_expandantisep(self.n, self.r, ri, index, self._dU, self.V,
- self.phi, dK)
- libspleaf.spleaf_expandsep(self.n, self.r, ri, index, self._dU, self._dV,
- self.phi, d2K)
- H = np.array([self.solveL(dKk) / self.sqD() for dKk in dK])
-
- if calc_cov == 'diag':
- return (dy, np.diag(d2K) - np.sum(H * H, axis=1))
-
- return (dy, d2K - H @ H.T)
-
- def conditional_derivative(self,
- y,
- dU2,
- V2,
- dV2,
- phi2,
- ref2left,
- phi2left,
- phi2right,
- dU=None,
- calc_cov=False,
- index=None):
- r"""
- Conditional mean and covariance at new abscissas
- of the derivative of the Gaussian process corresponding to the semiseparable part
- of the covariance matrix, knowning the observed values :math:`y`.
-
- Parameters
- ----------
- y : (n,) ndarray
- The vector of observed values :math:`y`.
- dU2, V2, dV2 : (n2, r) ndarrays
- Semiseparable part at new abscissas,
- with preconditioning matrix `phi2`.
- phi2 : (n2-1, r) ndarray
- Preconditioning matrix for the semiseparable part at new abscissas.
- ref2left : (n2,) ndarray
- Indices of the closest original abscissas to the left of new abscissas.
- phi2left : (n2, r) ndarray
- Preconditioning matrix linking new abscissas
- with their closest original abscissas to the left.
- phi2right : (n2, r) ndarray
- Preconditioning matrix linking new abscissas
- with their closest original abscissas to the right.
- dU : (n, r) ndarray or None
- Semiseparable part of the derivative.
- If None, the value from a previous call is kept.
- calc_cov : False (default), True, or 'diag'
- Whether to output only the conditional mean (False),
- the mean and full covariance matrix (True),
- or the mean and main diagonal of the covariance matrix ('diag').
- index : (r',) ndarray or None
- Vector (of type int) giving the indices of semiseparable terms
- that should be considered for the Gaussian process.
- Other terms (semiseparable or leaf) are considered as noise.
- If index is None, all semiserable terms are considered for the
- Gaussian process.
-
- Returns
- -------
- mu : (n2,) ndarray
- The vector of derivative conditional mean values.
- cov : (n2, n2) ndarray
- Full covariance matrix (if calc_cov is True).
- var : (n2,) ndarray
- Main diagonal of the covariance matrix (if calc_cov is 'diag').
-
- Warnings
- --------
- While the computational cost of the derivative conditional mean scales as
- :math:`\mathcal{O}(n+n_2)`,
- the computational cost of the variance scales as
- :math:`\mathcal{O}(n n_2)`,
- and the computational cost of the full covariance scales as
- :math:`\mathcal{O}(n n_2^2)`.
- """
-
- if index is None:
- index = np.arange(self.r)
- ri = index.size
-
- if dU is not None:
- self._dU = dU
-
- u = self.solveLT(self.solveL(y) / self.D)
- n2 = dU2.shape[0]
- y2 = np.empty(n2)
- libspleaf.spleaf_dotsepmixt(self.n, n2, self.r, ri, index, -self._dU,
- self.V, self.phi, dU2, V2, ref2left, phi2left, phi2right, u, y2)
-
- if not calc_cov:
- return (y2)
-
- dKm = np.empty((n2, self.n))
- libspleaf.spleaf_expandsepmixt(self.n, n2, self.r, ri, index, -self._dU,
- self.V, self.phi, dU2, V2, ref2left, phi2left, phi2right, dKm)
- Hm = np.array([self.solveL(dKmk) / self.sqD() for dKmk in dKm])
-
- if calc_cov == 'diag':
- return (y2, np.sum(dU2[:, index] * dV2[:, index], axis=1) -
- np.sum(Hm * Hm, axis=1))
-
- d2K = np.empty((n2, n2))
- libspleaf.spleaf_expandsep(n2, self.r, ri, index, dU2, dV2, phi2, d2K)
- return (y2, d2K - Hm @ Hm.T)
-
- def sample(self, nreal=None):
- r"""
- Generate random samples from the covariance matrix.
-
- Parameters
- ----------
- nreal : int
- Number of realizations to generate.
- If None, only one realization is generated.
-
- Returns
- -------
- y : (nreal, n) or (n,) ndarray
- Matrix of the samples (or vector if nreal is None).
- """
-
- single = False
- if nreal is None:
- single = True
- nreal = 1
- u = np.random.normal(size=(nreal, self.n))
- y = np.array([self.dotL(self.sqD() * uk) for uk in u])
- if single:
- return (y[0])
- else:
- return (y)
diff --git a/kima/vendor/spleaf/spleaf/cov.py b/kima/vendor/spleaf/spleaf/cov.py
deleted file mode 100644
index 8c5a5bc..0000000
--- a/kima/vendor/spleaf/spleaf/cov.py
+++ /dev/null
@@ -1,550 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Copyright 2020-2022 Jean-Baptiste Delisle
-#
-# This file is part of spleaf.
-#
-# spleaf is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# spleaf is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with spleaf. If not, see .
-
-__all__ = ['Cov']
-
-import numpy as np
-from . import Spleaf, libspleaf
-from .term import Noise, Kernel
-
-
-def merge_series(list_t, *args):
- r"""
- Merge and sort several time series by increasing time.
-
- Parameters
- ----------
- list_t : list of ndarrays
- Times of measurement for each time series.
- *args : additional lists of ndarrays
- Complementary arrays to be merged and sorted with the same order as the time.
-
- Returns
- -------
- full_t : ndarray
- Merged and sorted array of times.
- *full_args : additional ndarrays
- Merged and sorted complementary arrays.
- series_index : list of ndarrays
- Indices corresponding to each time series in the merged arrays.
- """
-
- n_series = len(list_t)
- list_n = [tk.size for tk in list_t]
- cum_n = np.insert(np.cumsum(list_n), 0, 0)
- full_t = np.hstack(list_t)
- ksort = np.argsort(full_t)
- full_t = full_t[ksort]
- full_args = [np.hstack(arg)[ksort] for arg in args]
- series_index = [
- np.where((ksort >= cum_n[k]) & (ksort < cum_n[k + 1]))[0]
- for k in range(n_series)
- ]
- return (full_t, *full_args, series_index)
-
-
-class Cov(Spleaf):
- r"""
- Covariance matrix class.
-
- The covariance is modeled as the sum of different components (or terms),
- which split into two categories:
- noise terms and kernel terms (gaussian processes).
- See the :ref:`API reference` for a list of available terms.
-
- Each component is provided in \*\*kwargs, where the key is user-defined
- and is used to refer to the term parameters.
-
- The covariance matrix is represented internally as
- a S+LEAF matrix (see :class:`spleaf.Spleaf`).
-
- Parameters
- ----------
- t : (n,) ndarray
- Time of the measurements.
- This array must be in increasing order.
- **kwargs :
- Components of the covariance matrix.
-
- Attributes
- ----------
- t : (n,) ndarray
- See parameters.
- n : int
- Number of measurements.
- dt : (n-1,) ndarray
- time between two measurements.
- param : list,
- List of all covariance parameters.
- term : dict,
- Dictionary of all covariance terms.
- noise : dict,
- Dictionary of noise terms.
- kernel : dict,
- Dictionary of kernel terms.
- r, A, U, V, phi, offsetrow, b, F, D, W, G :
- S+LEAF representation of the covariance matrix
- (see :class:`spleaf.Spleaf`).
- """
-
- def __init__(self, t, **kwargs):
- self.t = t
- if not isinstance(t, np.ndarray):
- raise Exception('Cov: t is not an array.')
- self.n = t.size
- self.dt = t[1:] - t[:-1]
- if np.min(self.dt) < 0:
- raise Exception('Cov: the timeseries must be provided'
- ' in increasing order.')
-
- # Read kwargs
- self.noise = {}
- self.b = np.zeros(self.n, dtype=int)
- self.kernel = {}
- self.r = 0
- self.term = {}
- self.param = []
- self._param_dict = {}
- for key in kwargs:
- if isinstance(kwargs[key], Noise):
- self.noise[key] = kwargs[key]
- kwargs[key]._link(self)
- self.b = np.maximum(self.b, kwargs[key]._b)
- elif isinstance(kwargs[key], Kernel):
- self.kernel[key] = kwargs[key]
- kwargs[key]._link(self, self.r)
- self.r += kwargs[key]._r
- else:
- raise Exception(
- 'The provided argument is not of type Noise or Kernel.')
- self.term[key] = kwargs[key]
- self.param += [f'{key}.{par}' for par in kwargs[key]._param]
- self._param_dict.update(
- {f'{key}.{par}': (key, par)
- for par in kwargs[key]._param})
-
- # Compute S+LEAF representation
- self.A = np.zeros(self.n)
- self.U = np.empty((self.n, self.r))
- self.V = np.empty((self.n, self.r))
- self.phi = np.empty((self.n - 1, self.r))
- self.offsetrow = np.cumsum(self.b - 1) + 1
- self.F = np.zeros(np.sum(self.b))
- for key in self.term:
- self.term[key]._compute()
-
- super().__init__(self.A, self.U, self.V, self.phi, self.offsetrow, self.b,
- self.F)
-
- # Kernel derivative
- self._dU = np.empty((self.n, self.r))
- self._dV = np.empty((self.n, self.r))
-
- def get_param(self, param=None):
- r"""
- Get the values of the parameters.
-
- Parameters
- ----------
- param : list or str or None
- List of parameters (or single parameter).
- If None, all the covariance parameters are provided.
-
- Returns
- -------
- value : (p,) ndarray or float
- Values of the parameters.
- """
-
- single = False
- if param is None:
- param = self.param
- if isinstance(param, str):
- param = [param]
- single = True
- value = np.empty(len(param))
- for k, keypar in enumerate(param):
- key, par = self._param_dict[keypar]
- value[k] = self.term[key]._get_param(par)
- return (value[0] if single else value)
-
- def set_param(self, value, param=None):
- r"""
- Set the values of the parameters.
-
- Parameters
- ----------
- value : (p,) ndarray or float
- Values of the parameters.
-
- param : list or str or None
- List of parameters (or single parameter).
- If None, all the covariance parameters are set.
- """
-
- if param is None:
- param = self.param
- if isinstance(param, str):
- param = [param]
- value = np.array([value])
- param_split = {key: {} for key in self.term}
- for keypar, val in zip(param, value):
- key, par = self._param_dict[keypar]
- param_split[key][par] = val
- self.A[:] = 0
- self.F[:] = 0
- for key in self.term:
- if param_split[key] != {}:
- self.term[key]._set_param(**param_split[key])
- self.term[key]._recompute()
-
- super().set_param(self.A, self.U, self.V, self.phi, self.F)
-
- def grad_param(self, param=None):
- r"""
- Gradient of a function with respect to
- the parameters, after a call to :func:`cholesky_back`.
-
- Parameters
- ----------
- param : list or str or None
- List of parameters (or single parameter).
- If None, all the covariance parameters are provided.
-
- Returns
- -------
- grad_param : (p,) ndarray or float
- Gradient of the function with respect to the parameters.
- """
- single = False
- if param is None:
- param = self.param
- term = self.term
- else:
- if isinstance(param, str):
- param = [param]
- single = True
- term = {self._param_dict[keypar][0] for keypar in param}
- self._sum_grad_A = np.sum(self._grad_A)
- grad = {}
- for key in term:
- grad_key = self.term[key]._grad_param()
- for par in grad_key:
- grad[f'{key}.{par}'] = grad_key[par]
- if single:
- return (grad[param[0]])
- else:
- return (np.array([grad[keypar] for keypar in param]))
-
- def _kernel_index(self, kernel=None):
- r"""
- List of indices corresponding to the requested kernel terms
- in the semiseparable representation of the matrix.
-
- Parameters
- ----------
- kernel : list or None
- List of kernel identifiers.
-
- Returns
- -------
- index : (r',) ndarray
- Indices of the corresponding semiseparable terms.
- """
-
- if kernel is None:
- return (None)
- else:
- return (np.array([
- s for key in kernel
- for s in range(self.kernel[key]._offset, self.kernel[key]._offset +
- self.kernel[key]._r)
- ],
- dtype=int))
-
- def self_conditional(self, y, calc_cov=False, kernel=None):
- r"""
- Conditional mean and covariance
- of the kernel part, or a subset of kernel terms,
- knowning the observed values :math:`y`.
-
- Parameters
- ----------
- y : (n,) ndarray
- The vector of observed values :math:`y`.
- calc_cov : False (default), True, or 'diag'
- Whether to output only the conditional mean (False),
- the mean and full covariance matrix (True),
- or the mean and main diagonal of the covariance matrix ('diag').
- kernel : list or None
- List of kernel identifiers
- that should be considered for the Gaussian process.
- Other terms (kernel or noise) are considered as noise.
- If kernel is None, all kernel terms are considered for the
- Gaussian process.
-
- Returns
- -------
- mu : (n,) ndarray
- The vector of conditional mean values.
- cov : (n, n) ndarray
- Full covariance matrix (if calc_cov is True).
- var : (n,) ndarray
- Main diagonal of the covariance matrix (if calc_cov is 'diag').
-
- Warnings
- --------
- While the computational cost of the conditional mean scales as
- :math:`\mathcal{O}(n)`,
- the computational cost of the variance scales as
- :math:`\mathcal{O}(n^2)`,
- and the computational cost of the full covariance scales as
- :math:`\mathcal{O}(n^3)`.
- """
-
- return (super().self_conditional(y, calc_cov, self._kernel_index(kernel)))
-
- def conditional(self, y, t2, calc_cov=False, kernel=None):
- r"""
- Conditional mean and covariance
- of the kernel part, or a subset of kernel terms,
- at new times :math:`t_2`,
- knowning the observed values :math:`y`.
-
- Parameters
- ----------
- y : (n,) ndarray
- The vector of observed values :math:`y`.
- t2 : (n2,) ndarrays
- The vector of new times.
- calc_cov : False (default), True, or 'diag'
- Whether to output only the conditional mean (False),
- the mean and full covariance matrix (True),
- or the mean and main diagonal of the covariance matrix ('diag').
- kernel : list or None
- List of kernel identifiers
- that should be considered for the Gaussian process.
- Other terms (kernel or noise) are considered as noise.
- If kernel is None, all kernel terms are considered for the
- Gaussian process.
-
- Returns
- -------
- mu : (n2,) ndarray
- The vector of conditional mean values.
- cov : (n2, n2) ndarray
- Full covariance matrix (if calc_cov is True).
- var : (n2,) ndarray
- Main diagonal of the covariance matrix (if calc_cov is 'diag').
-
- Warnings
- --------
- While the computational cost of the conditional mean scales as
- :math:`\mathcal{O}(n+n_2)`,
- the computational cost of the variance scales as
- :math:`\mathcal{O}(n n_2)`,
- and the computational cost of the full covariance scales as
- :math:`\mathcal{O}(n n_2^2)`.
- """
-
- n2 = t2.size
- dt2 = t2[1:] - t2[:-1]
- U2 = np.empty((n2, self.r))
- V2 = np.empty((n2, self.r))
- phi2 = np.empty((n2 - 1, self.r))
- phi2left = np.empty((n2, self.r))
- phi2right = np.empty((n2, self.r))
-
- ref2left = np.searchsorted(self.t, t2) - 1
- dt2left = t2 - self.t[ref2left]
- dt2right = self.t[np.minimum(ref2left + 1, self.n - 1)] - t2
- dt2left[ref2left == -1] = 0 # useless but avoid overflow warning
- dt2right[ref2left == self.n - 1] = 0 # useless but avoid overflow warning
-
- kernel_list = self.kernel if kernel is None else kernel
- for key in kernel_list:
- self.kernel[key]._compute_t2(t2, dt2, U2, V2, phi2, ref2left, dt2left,
- dt2right, phi2left, phi2right)
-
- return (super().conditional(y, U2, V2, phi2, ref2left, phi2left, phi2right,
- calc_cov, self._kernel_index(kernel)))
-
- def self_conditional_derivative(self, y, calc_cov=False, kernel=None):
- r"""
- Conditional mean and covariance
- of the derivative of the kernel part, or a subset of kernel terms,
- knowning the observed values :math:`y`.
-
- Parameters
- ----------
- y : (n,) ndarray
- The vector of observed values :math:`y`.
- calc_cov : False (default), True, or 'diag'
- Whether to output only the derivative conditional mean (False),
- the mean and full covariance matrix (True),
- or the mean and main diagonal of the covariance matrix ('diag').
- kernel : list or None
- List of kernel identifiers
- that should be considered for the Gaussian process.
- Other terms (kernel or noise) are considered as noise.
- If kernel is None, all kernel terms are considered for the
- Gaussian process.
-
- Returns
- -------
- mu : (n,) ndarray
- The vector of derivative conditional mean values.
- cov : (n, n) ndarray
- Full covariance matrix (if calc_cov is True).
- var : (n,) ndarray
- Main diagonal of the covariance matrix (if calc_cov is 'diag').
-
- Warnings
- --------
- This method should only be used with differentiable kernels.
- The ExponentialKernel and QuasiperiodicKernel are
- in the general case non-differentiable.
- All other kernels are differentiable.
-
- While the computational cost of the derivative conditional mean scales as
- :math:`\mathcal{O}(n)`,
- the computational cost of the variance scales as
- :math:`\mathcal{O}(n^2)`,
- and the computational cost of the full covariance scales as
- :math:`\mathcal{O}(n^3)`.
- """
-
- kernel_list = self.kernel if kernel is None else kernel
- for key in kernel_list:
- self.kernel[key]._deriv(calc_cov)
-
- return (super().self_conditional_derivative(y,
- calc_cov=calc_cov,
- index=self._kernel_index(kernel)))
-
- def conditional_derivative(self, y, t2, calc_cov=False, kernel=None):
- r"""
- Conditional mean and covariance
- of the derivative of the kernel part, or a subset of kernel terms,
- at new times :math:`t_2`,
- knowning the observed values :math:`y`.
-
- Parameters
- ----------
- y : (n,) ndarray
- The vector of observed values :math:`y`.
- t2 : (n2,) ndarrays
- The vector of new times.
- calc_cov : False (default), True, or 'diag'
- Whether to output only the derivative conditional mean (False),
- the mean and full covariance matrix (True),
- or the mean and main diagonal of the covariance matrix ('diag').
-
- Returns
- -------
- mu : (n2,) ndarray
- The vector of derivative conditional mean values.
- cov : (n2, n2) ndarray
- Full covariance matrix (if calc_cov is True).
- var : (n2,) ndarray
- Main diagonal of the covariance matrix (if calc_cov is 'diag').
- kernel : list or None
- List of kernel identifiers
- that should be considered for the Gaussian process.
- Other terms (kernel or noise) are considered as noise.
- If kernel is None, all kernel terms are considered for the
- Gaussian process.
-
- Warnings
- --------
- This method should only be used with differentiable kernels.
- The ExponentialKernel and QuasiperiodicKernel are
- in the general case non-differentiable.
- All other kernels are differentiable.
-
- While the computational cost of the derivative conditional mean scales as
- :math:`\mathcal{O}(n+n_2)`,
- the computational cost of the variance scales as
- :math:`\mathcal{O}(n n_2)`,
- and the computational cost of the full covariance scales as
- :math:`\mathcal{O}(n n_2^2)`.
- """
-
- n2 = t2.size
- dt2 = t2[1:] - t2[:-1]
- dU2 = np.empty((n2, self.r))
- V2 = np.empty((n2, self.r))
- phi2 = np.empty((n2 - 1, self.r))
- phi2left = np.empty((n2, self.r))
- phi2right = np.empty((n2, self.r))
-
- ref2left = np.searchsorted(self.t, t2) - 1
- dt2left = t2 - self.t[ref2left]
- dt2right = self.t[np.minimum(ref2left + 1, self.n - 1)] - t2
- dt2left[ref2left == -1] = 0 # useless but avoid overflow warning
- dt2right[ref2left == self.n - 1] = 0 # useless but avoid overflow warning
-
- if calc_cov:
- dV2 = np.empty((n2, self.r))
- else:
- dV2 = None
-
- kernel_list = self.kernel if kernel is None else kernel
- for key in kernel_list:
- self.kernel[key]._deriv(False)
- self.kernel[key]._deriv_t2(t2, dt2, dU2, V2, phi2, ref2left, dt2left,
- dt2right, phi2left, phi2right, dV2)
-
- return (super().conditional_derivative(y,
- dU2,
- V2,
- dV2,
- phi2,
- ref2left,
- phi2left,
- phi2right,
- calc_cov=calc_cov,
- index=self._kernel_index(kernel)))
-
- def eval(self, dt, kernel=None):
- r"""
- Direct evaluation of the kernel part at lag :math:`\delta t`.
-
- Parameters
- ----------
- dt : ndarray or float
- lag.
- kernel : list or None
- List of kernel identifiers
- that should be considered for the evaluation.
- If kernel is None, all kernel terms are taken into account.
-
- Returns
- -------
- K : ndarray or float
- Kernel part evaluated at lag dt.
-
- Warnings
- --------
- The cost scales as the size of the lag ndarray.
- """
-
- if kernel is None:
- kernel = self.kernel
- return (sum(self.kernel[key].eval(dt) for key in kernel))
diff --git a/kima/vendor/spleaf/spleaf/libspleaf.c b/kima/vendor/spleaf/spleaf/libspleaf.c
deleted file mode 100644
index cecad29..0000000
--- a/kima/vendor/spleaf/spleaf/libspleaf.c
+++ /dev/null
@@ -1,1058 +0,0 @@
-// Copyright 2019-2022 Jean-Baptiste Delisle
-//
-// This file is part of spleaf.
-//
-// spleaf is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// spleaf is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with spleaf. If not, see .
-
-#include "libspleaf.h"
-
-void spleaf_cholesky(
- // Shape
- long n, long r, long *offsetrow, long *b,
- // Input
- double *A, double *U, double *V, double *phi, double *F,
- // Output
- double *D, double *W, double *G,
- // Temporary
- double *S, double *Z)
-{
- // Cholesky decomposition of the (n x n) symmetric S+LEAF
- // (semiseparable + leaf) matrix C
- // defined as
- // C = A + Sep + F
- // with
- // * A: the diagonal part of C, stored as a vector of size n.
- // * Sep: the symmetric semiseparable part of C.
- // For i > j,
- // Sep_{i,j} = Sep_{j,i}
- // = Sum_{s=0}^{r-1} U_{i,s} V_{j,s} Prod_{k=j}^{i-1} phi_{k,s}
- // where U, V are (n x r) matrices, and phi is a (n-1 x r) matrix,
- // all stored in row major order.
- // By definition Sep_{i,i} = 0.
- // * F: the symmetric leaf part of C,
- // stored in strictly lower triangular form, and in row major order.
- // The i-th row of F is of size b[i], i.e., by definition,
- // F_{i,j} = 0 for j j,
- // Lsep_{i,j} = Sum_{s=0}^{r-1} U_{i,s} W_{j,s} Prod_{k=j}^{i-1} phi_{k,s},
- // where U and phi are left unchanged and W is a (n x r) matrix (like V).
- // * G: the strictly lower triangular leaf part of L.
- // G is stored in the same way as F.
-
- long i, j, k, s, t;
- long r2 = r * r;
- double SU, GD;
-
- // Copy A -> D, V -> W, F -> G
- memcpy(D, A, n * sizeof(double));
- memcpy(W, V, n * r * sizeof(double));
- memcpy(G, F, (offsetrow[n - 1] + n - 1) * sizeof(double));
-
- // Case i = 0
- // Normalize W_{0,s}
- for (s = 0; s < r; s++) {
- W[s] /= D[0];
- }
- // Initialize S
- for (s = 0; s < r2; s++) {
- S[s] = 0.0;
- }
-
- for (i = 1; i < n; i++) {
- // Initialize Z
- for (s = 0; s < r; s++) {
- Z[r * (offsetrow[i] + 2 * i - b[i]) + s] = 0.0;
- }
-
- // Compute G_{i,j} (without normalizing by D_j yet)
- // Case j = i-b[i] -> nothing to do
- // Case j > i-b[i]
- for (j = i - b[i] + 1; j < i; j++) {
- // Purely leaf terms
- for (k = MAX(i - b[i], j - b[j]); k < j; k++) {
- // Note that G_{i,k} has not been normalized by D_k
- // but G_{j,k} is already normalized by D_k
- G[offsetrow[i] + j] -= G[offsetrow[i] + k] * G[offsetrow[j] + k];
- }
- // Mixed terms
- for (s = 0; s < r; s++) {
- // Update Z
- // Note that G_{i,j-1} has not been normalized by D_{j-1} yet
- Z[r * (offsetrow[i] + i + j) + s] = phi[r * (j - 1) + s] *
- (Z[r * (offsetrow[i] + i + j - 1) + s] +
- G[offsetrow[i] + j - 1] * W[r * (j - 1) + s]);
- G[offsetrow[i] + j] -= U[r * j + s] * Z[r * (offsetrow[i] + i + j) + s];
- }
- }
-
- // Compute D_i, W_{i,s} (without normalizing by D_i yet)
- for (s = 0; s < r; s++) {
- // Compute Z_{i,i,s}
- // Note that G_{i,i-1} has not been normalized by D_{i-1} yet
- if (b[i] > 0) {
- Z[r * (offsetrow[i] + 2 * i) + s] = phi[r * (i - 1) + s] *
- (Z[r * (offsetrow[i] + 2 * i - 1) + s] +
- G[offsetrow[i] + i - 1] * W[r * (i - 1) + s]);
- }
- // Compute S_{i,s,.} U_{i,.}
- SU = 0.0;
- for (t = 0; t < r; t++) {
- // Update S
- S[r2 * i + r * s + t] = phi[r * (i - 1) + s] * phi[r * (i - 1) + t] *
- (S[r2 * (i - 1) + r * s + t] +
- W[r * (i - 1) + s] * D[i - 1] * W[r * (i - 1) + t]);
- SU += S[r2 * i + r * s + t] * U[r * i + t];
- }
- // Compute D_i (omiting purely leaf terms)
- D[i] -= U[r * i + s] * (SU + 2.0 * Z[r * (offsetrow[i] + 2 * i) + s]);
- // Compute W_{i,s}
- W[r * i + s] -= SU + Z[r * (offsetrow[i] + 2 * i) + s];
- }
-
- // Normalize G_{i,j} and compute purely leaf terms in D_i
- for (j = i - b[i]; j < i; j++) {
- // Normalize G_{i,j} (+ store non-normalized value)
- GD = G[offsetrow[i] + j];
- G[offsetrow[i] + j] /= D[j];
- // Purely leaf terms in D_i
- D[i] -= GD * G[offsetrow[i] + j];
- }
-
- // Normalize W_{i,s}
- for (s = 0; s < r; s++) {
- W[r * i + s] /= D[i];
- }
- }
-}
-
-void spleaf_dotL(
- // Shape
- long n, long r, long *offsetrow, long *b,
- // Input
- double *U, double *W, double *phi, double *G, double *x,
- // Output
- double *y,
- // Temporary
- double *f)
-{
- // Compute y = L x,
- // where L comes from the Cholesky decomposition C = L D L^T
- // of a symmetric S+LEAF matrix C using spleaf_cholesky.
-
- long i, j, s;
-
- // Copy x -> y
- memcpy(y, x, n * sizeof(double));
-
- // Initialize f
- for (s = 0; s < r; s++) {
- f[s] = 0.0;
- }
-
- // Compute y = L x
- for (i = 1; i < n; i++) {
- // Semiseparable terms
- for (s = 0; s < r; s++) {
- // Update f
- f[r * i + s] = phi[r * (i - 1) + s] *
- (f[r * (i - 1) + s] + W[r * (i - 1) + s] * x[i - 1]);
- y[i] += U[r * i + s] * f[r * i + s];
- }
- // Leaf terms
- for (j = i - b[i]; j < i; j++) {
- y[i] += G[offsetrow[i] + j] * x[j];
- }
- }
-}
-
-void spleaf_solveL(
- // Shape
- long n, long r, long *offsetrow, long *b,
- // Input
- double *U, double *W, double *phi, double *G, double *y,
- // Output
- double *x,
- // Temporary
- double *f)
-{
- // Solve for x = L^-1 y,
- // where L comes from the Cholesky decomposition C = L D L^T
- // of a symmetric S+LEAF matrix C using spleaf_cholesky.
-
- long i, j, s;
-
- // Copy y -> x
- memcpy(x, y, n * sizeof(double));
-
- // Initialize f
- for (s = 0; s < r; s++) {
- f[s] = 0.0;
- }
-
- // Solve for x = L^-1 y
- for (i = 1; i < n; i++) {
- // Semiseparable terms
- for (s = 0; s < r; s++) {
- // Update f
- f[r * i + s] = phi[r * (i - 1) + s] *
- (f[r * (i - 1) + s] + W[r * (i - 1) + s] * x[i - 1]);
- x[i] -= U[r * i + s] * f[r * i + s];
- }
- // Leaf terms
- for (j = i - b[i]; j < i; j++) {
- x[i] -= G[offsetrow[i] + j] * x[j];
- }
- }
-}
-
-void spleaf_dotLT(
- // Shape
- long n, long r, long *offsetrow, long *b,
- // Input
- double *U, double *W, double *phi, double *G, double *x,
- // Output
- double *y,
- // Temporary
- double *g)
-{
- // Compute y = L^T x,
- // where L comes from the Cholesky decomposition C = L D L^T
- // of a symmetric S+LEAF matrix C using spleaf_cholesky.
-
- long i, j, s;
-
- // Copy x -> y
- memcpy(y, x, n * sizeof(double));
-
- // Initialize g
- for (s = 0; s < r; s++) {
- g[(n - 1) * r + s] = 0.0;
- }
-
- // Leaf terms for n-1
- for (j = n - 1 - b[n - 1]; j < n - 1; j++) {
- y[j] += G[offsetrow[n - 1] + j] * x[n - 1];
- }
-
- // Loop for i < n-1
- for (i = n - 2; i >= 0; i--) {
- // Semiseparable terms
- for (s = 0; s < r; s++) {
- // Update g
- g[r * i + s] =
- phi[r * i + s] * (g[r * (i + 1) + s] + U[r * (i + 1) + s] * x[i + 1]);
- y[i] += W[r * i + s] * g[r * i + s];
- }
- // Leaf terms
- for (j = i - b[i]; j < i; j++) {
- y[j] += G[offsetrow[i] + j] * x[i];
- }
- }
-}
-
-void spleaf_solveLT(
- // Shape
- long n, long r, long *offsetrow, long *b,
- // Input
- double *U, double *W, double *phi, double *G, double *y,
- // Output
- double *x,
- // Temporary
- double *g)
-{
- // Solve for x = L^-T y,
- // where L comes from the Cholesky decomposition C = L D L^T
- // of a symmetric S+LEAF matrix C using spleaf_cholesky.
-
- long i, j, s;
-
- // Copy y -> x
- memcpy(x, y, n * sizeof(double));
-
- // Initialize g
- for (s = 0; s < r; s++) {
- g[(n - 1) * r + s] = 0.0;
- }
-
- // Leaf terms for n-1
- for (j = n - 1 - b[n - 1]; j < n - 1; j++) {
- x[j] -= G[offsetrow[n - 1] + j] * x[n - 1];
- }
-
- // Loop for i < n-1
- for (i = n - 2; i >= 0; i--) {
- // Semiseparable terms
- for (s = 0; s < r; s++) {
- // Update g
- g[r * i + s] =
- phi[r * i + s] * (g[r * (i + 1) + s] + U[r * (i + 1) + s] * x[i + 1]);
- x[i] -= W[r * i + s] * g[r * i + s];
- }
- // Leaf terms
- for (j = i - b[i]; j < i; j++) {
- x[j] -= G[offsetrow[i] + j] * x[i];
- }
- }
-}
-
-void spleaf_cholesky_back(
- // Shape
- long n, long r, long *offsetrow, long *b,
- // Input
- double *D, double *U, double *W, double *phi, double *G, double *grad_D,
- double *grad_Ucho, double *grad_W, double *grad_phicho, double *grad_G,
- // Output
- double *grad_A, double *grad_U, double *grad_V, double *grad_phi,
- double *grad_F,
- // Temporary
- double *S, double *Z)
-{
- // Backward propagation of the gradient for spleaf_cholesky.
-
- long i, j, k, s, t;
- long r2 = r * r;
- double SU;
- double grad_SU, grad_GD;
- double *grad_S, *grad_Z;
- double grad_tmp;
-
- grad_S = (double *)malloc(r2 * sizeof(double));
- grad_Z = (double *)malloc(r * sizeof(double));
-
- // Copy grad_D -> grad_A, grad_Ucho -> grad_U, grad_W -> grad_V,
- // grad_phicho -> grad_phi, grad_G -> grad_F
- memcpy(grad_A, grad_D, n * sizeof(double));
- memcpy(grad_U, grad_Ucho, n * r * sizeof(double));
- memcpy(grad_V, grad_W, n * r * sizeof(double));
- memcpy(grad_phi, grad_phicho, (n - 1) * r * sizeof(double));
- memcpy(grad_F, grad_G, (offsetrow[n - 1] + n - 1) * sizeof(double));
-
- // Initialize grad_S
- for (s = 0; s < r2; s++) {
- grad_S[s] = 0.0;
- }
-
- // Reversed main loop
- for (i = n - 1; i > 0; i--) {
- for (s = 0; s < r; s++) {
- // W[r*i+s] /= D[i];
- grad_V[r * i + s] /= D[i];
- grad_A[i] -= W[r * i + s] * grad_V[r * i + s];
- }
-
- for (j = i - b[i]; j < i; j++) {
- // D[i] -= GD * G[offsetrow[i]+j];
- // G[offsetrow[i]+j] /= D[j];
- grad_GD = -G[offsetrow[i] + j] * grad_A[i];
- grad_F[offsetrow[i] + j] /= D[j];
- grad_F[offsetrow[i] + j] += grad_GD;
- grad_A[j] -= G[offsetrow[i] + j] * grad_F[offsetrow[i] + j];
- // GD = G[offsetrow[i]+j];
- grad_F[offsetrow[i] + j] += grad_GD;
- }
-
- for (s = 0; s < r; s++) {
- // Precompute SU
- SU = 0.0;
- for (t = 0; t < r; t++) {
- SU += S[r2 * i + r * s + t] * U[r * i + t];
- }
- // W[r*i+s] -= SU + Z[r*(offsetrow[i]+2*i)+s];
- grad_SU = -grad_V[r * i + s];
- grad_Z[s] = -grad_V[r * i + s];
- // D[i] -= U[r*i+s]*(SU + 2.0*Z[r*(offsetrow[i]+2*i)+s]);
- grad_U[r * i + s] -=
- (SU + 2.0 * Z[r * (offsetrow[i] + 2 * i) + s]) * grad_A[i];
- grad_SU -= U[r * i + s] * grad_A[i];
- grad_Z[s] -= 2.0 * U[r * i + s] * grad_A[i];
- for (t = 0; t < r; t++) {
- // SU += S[r2*i+r*s+t] * U[r*i+t];
- grad_S[r * s + t] += U[r * i + t] * grad_SU;
- grad_U[r * i + t] += S[r2 * i + r * s + t] * grad_SU;
- // S[r2*i+r*s+t] = phi[r*(i-1)+s] * phi[r*(i-1)+t] *
- // (S[r2*(i-1)+r*s+t] + W[r*(i-1)+s] * D[i-1] * W[r*(i-1)+t]);
- // Let us decompose it:
- // S[r2*i+r*s+t] *= phi[r*(i-1)+s] * phi[r*(i-1)+t];
- // We could do:
- // grad_phi[r*(i-1)+s] += S[r2*i+r*s+t]/phi[r*(i-1)+s] * grad_S[r*s+t];
- // grad_phi[r*(i-1)+t] += S[r2*i+r*s+t]/phi[r*(i-1)+t] * grad_S[r*s+t];
- // But unstable if phi << 1
- // Better to do:
- grad_tmp = (S[r2 * (i - 1) + r * s + t] +
- W[r * (i - 1) + s] * D[i - 1] * W[r * (i - 1) + t]) *
- grad_S[r * s + t];
- grad_phi[r * (i - 1) + s] += phi[r * (i - 1) + t] * grad_tmp;
- grad_phi[r * (i - 1) + t] += phi[r * (i - 1) + s] * grad_tmp;
- grad_S[r * s + t] *= phi[r * (i - 1) + s] * phi[r * (i - 1) + t];
- // S[r2*i+r*s+t] = S[r2*(i-1)+r*s+t] +
- // W[r*(i-1)+s] * D[i-1] * W[r*(i-1)+t];
- grad_V[r * (i - 1) + s] +=
- D[i - 1] * W[r * (i - 1) + t] * grad_S[r * s + t];
- grad_A[i - 1] +=
- W[r * (i - 1) + s] * W[r * (i - 1) + t] * grad_S[r * s + t];
- grad_V[r * (i - 1) + t] +=
- W[r * (i - 1) + s] * D[i - 1] * grad_S[r * s + t];
- }
- if (b[i] > 0) {
- // Z[r*(offsetrow[i]+2*i)+s] = phi[r*(i-1)+s] *
- // (Z[r*(offsetrow[i]+2*i-1)+s] +
- // G[offsetrow[i]+i-1] * W[r*(i-1)+s]);
- // Let us decompose it:
- // Z[r*(offsetrow[i]+2*i)+s] *= phi[r*(i-1)+s]
- // We could do:
- // grad_phi[r*(i-1)+s] += Z[r*(offsetrow[i]+2*i)+s]/phi[r*(i-1)+s] *
- // grad_Z[s];
- // But unstable if phi << 1
- // Better to do:
- grad_phi[r * (i - 1) + s] +=
- (Z[r * (offsetrow[i] + 2 * i - 1) + s] +
- G[offsetrow[i] + i - 1] * D[i - 1] * W[r * (i - 1) + s]) *
- grad_Z[s];
- grad_Z[s] *= phi[r * (i - 1) + s];
- // Z[r*(offsetrow[i]+2*i)+s] = Z[r*(offsetrow[i]+2*i-1)+s] +
- // G[offsetrow[i]+i-1] * W[r*(i-1)+s];
- grad_F[offsetrow[i] + i - 1] += W[r * (i - 1) + s] * grad_Z[s];
- grad_V[r * (i - 1) + s] +=
- G[offsetrow[i] + i - 1] * D[i - 1] * grad_Z[s];
- }
- }
-
- for (j = i - 1; j > i - b[i]; j--) {
- for (s = 0; s < r; s++) {
- // G[offsetrow[i]+j] -= U[r*j+s] * Z[r*(offsetrow[i]+i+j)+s];
- grad_Z[s] -= U[r * j + s] * grad_F[offsetrow[i] + j];
- grad_U[r * j + s] -=
- Z[r * (offsetrow[i] + i + j) + s] * grad_F[offsetrow[i] + j];
- // Z[r*(offsetrow[i]+i+j)+s] = phi[r*(j-1)+s] *
- // (Z[r*(offsetrow[i]+i+j-1)+s] +
- // G[offsetrow[i]+j-1] * W[r*(j-1)+s]);
- // Let us decompose it:
- // Z[r*(offsetrow[i]+i+j)+s] *= phi[r*(j-1)+s]
- // We could do:
- // grad_phi[r*(j-1)+s] += Z[r*(offsetrow[i]+i+j)+s]/phi[r*(j-1)+s] *
- // grad_Z[s];
- // But unstable if phi << 1
- // Better to do:
- grad_phi[r * (j - 1) + s] +=
- (Z[r * (offsetrow[i] + i + j - 1) + s] +
- G[offsetrow[i] + j - 1] * D[j - 1] * W[r * (j - 1) + s]) *
- grad_Z[s];
- grad_Z[s] *= phi[r * (j - 1) + s];
- // Z[r*(offsetrow[i]+i+j)+s] = Z[r*(offsetrow[i]+i+j-1)+s] +
- // G[offsetrow[i]+j-1] * W[r*(j-1)+s];
- grad_F[offsetrow[i] + j - 1] += W[r * (j - 1) + s] * grad_Z[s];
- grad_V[r * (j - 1) + s] +=
- G[offsetrow[i] + j - 1] * D[j - 1] * grad_Z[s];
- }
-
- for (k = j - 1; k >= MAX(i - b[i], j - b[j]); k--) {
- // G[offsetrow[i]+j] -= G[offsetrow[i]+k] * G[offsetrow[j]+k];
- grad_F[offsetrow[i] + k] -=
- G[offsetrow[j] + k] * grad_F[offsetrow[i] + j];
- grad_F[offsetrow[j] + k] -=
- G[offsetrow[i] + k] * D[k] * grad_F[offsetrow[i] + j];
- }
- }
- }
-
- // i = 0
- for (s = 0; s < r; s++) {
- // W[s] /= D[0];
- grad_V[s] /= D[0];
- grad_A[0] -= W[s] * grad_V[s];
- }
-
- free(grad_S);
- free(grad_Z);
-}
-
-void spleaf_dotL_back(
- // Shape
- long n, long r, long *offsetrow, long *b,
- // Input
- double *U, double *W, double *phi, double *G, double *x, double *grad_y,
- // Output
- double *grad_U, double *grad_W, double *grad_phi, double *grad_G,
- double *grad_x,
- // Temporary
- double *f)
-{
- // Backward propagation of the gradient for spleaf_dotL.
-
- long i, j, s;
- double *grad_f;
-
- grad_f = (double *)malloc(r * sizeof(double));
-
- // Copy grad_y -> grad_x
- memcpy(grad_x, grad_y, n * sizeof(double));
-
- // Initialize grad_f
- for (s = 0; s < r; s++) {
- grad_f[s] = 0.0;
- }
-
- // Reverse main loop
- for (i = n - 1; i > 0; i--) {
- for (j = i - b[i]; j < i; j++) {
- // y[i] += G[offsetrow[i]+j] * x[j];
- grad_G[offsetrow[i] + j] += x[j] * grad_y[i];
- grad_x[j] += G[offsetrow[i] + j] * grad_y[i];
- }
- for (s = 0; s < r; s++) {
- // y[i] += U[r*i+s] * f[r*i+s];
- grad_U[r * i + s] += f[r * i + s] * grad_y[i];
- grad_f[s] += U[r * i + s] * grad_y[i];
- // f[r*i+s] = phi[r*(i-1)+s] * (f[r*(i-1)+s] + W[r*(i-1)+s] * x[i-1]);
- // Let us decompose it:
- // f[r*i+s] *= phi[r*(i-1)+s];
- // We could do:
- // grad_phi[r*(i-1)+s] += f[r*i+s]/phi[r*(i-1)+s] * grad_f[s];
- // But unstable if phi << 1
- // Better to do:
- grad_phi[r * (i - 1) + s] +=
- (f[r * (i - 1) + s] + W[r * (i - 1) + s] * x[i - 1]) * grad_f[s];
- grad_f[s] *= phi[r * (i - 1) + s];
- // f[r*i+s] = f[r*(i-1)+s] + W[r*(i-1)+s] * x[i-1];
- grad_W[r * (i - 1) + s] += x[i - 1] * grad_f[s];
- grad_x[i - 1] += W[r * (i - 1) + s] * grad_f[s];
- }
- }
-
- free(grad_f);
-}
-
-void spleaf_solveL_back(
- // Shape
- long n, long r, long *offsetrow, long *b,
- // Input
- double *U, double *W, double *phi, double *G, double *x, double *grad_x,
- // Output
- double *grad_U, double *grad_W, double *grad_phi, double *grad_G,
- double *grad_y,
- // Temporary
- double *f)
-{
- // Backward propagation of the gradient for spleaf_solveL.
-
- long i, j, s;
- double *grad_f;
-
- grad_f = (double *)malloc(r * sizeof(double));
-
- // Copy grad_x -> grad_y
- memcpy(grad_y, grad_x, n * sizeof(double));
-
- // Initialize grad_f
- for (s = 0; s < r; s++) {
- grad_f[s] = 0.0;
- }
-
- // Reverse main loop
- for (i = n - 1; i > 0; i--) {
- for (j = i - 1; j >= i - b[i]; j--) {
- // x[i] -= G[offsetrow[i]+j] * x[j];
- grad_G[offsetrow[i] + j] -= x[j] * grad_y[i];
- grad_y[j] -= G[offsetrow[i] + j] * grad_y[i];
- }
- for (s = 0; s < r; s++) {
- // x[i] -= U[r*i+s] * f[r*i+s];
- grad_U[r * i + s] -= f[r * i + s] * grad_y[i];
- grad_f[s] -= U[r * i + s] * grad_y[i];
- // f[r*i+s] = phi[r*(i-1)+s] * (f[r*(i-1)+s] + W[r*(i-1)+s] * x[i-1]);
- // Let us decompose it:
- // f[r*i+s] *= phi[r*(i-1)+s];
- // We could do:
- // grad_phi[r*(i-1)+s] += f[r*i+s]/phi[r*(i-1)+s] * grad_f[s];
- // But unstable if phi << 1
- // Better to do:
- grad_phi[r * (i - 1) + s] +=
- (f[r * (i - 1) + s] + W[r * (i - 1) + s] * x[i - 1]) * grad_f[s];
- grad_f[s] *= phi[r * (i - 1) + s];
- // f[r*i+s] = f[r*(i-1)+s] + W[r*(i-1)+s] * x[i-1];
- grad_W[r * (i - 1) + s] += x[i - 1] * grad_f[s];
- grad_y[i - 1] += W[r * (i - 1) + s] * grad_f[s];
- }
- }
-
- free(grad_f);
-}
-
-void spleaf_dotLT_back(
- // Shape
- long n, long r, long *offsetrow, long *b,
- // Input
- double *U, double *W, double *phi, double *G, double *x, double *grad_y,
- // Output
- double *grad_U, double *grad_W, double *grad_phi, double *grad_G,
- double *grad_x,
- // Temporary
- double *g)
-{
- // Backward propagation of the gradient for spleaf_dotLT.
-
- long i, j, s;
- double *grad_g;
-
- grad_g = (double *)malloc(r * sizeof(double));
-
- // Copy grad_y -> grad_x
- memcpy(grad_x, grad_y, n * sizeof(double));
-
- // Initialize grad_g
- for (s = 0; s < r; s++) {
- grad_g[s] = 0.0;
- }
-
- // Reverse main loop
- for (i = 0; i < n - 1; i++) {
- for (j = i - b[i]; j < i; j++) {
- // y[j] += G[offsetrow[i]+j] * x[i];
- grad_G[offsetrow[i] + j] += x[i] * grad_y[j];
- grad_x[i] += G[offsetrow[i] + j] * grad_y[j];
- }
- for (s = 0; s < r; s++) {
- // y[i] += W[r*i+s] * g[r*i+s];
- grad_W[r * i + s] += g[r * i + s] * grad_y[i];
- grad_g[s] += W[r * i + s] * grad_y[i];
-
- // g[r*i+s] = phi[r*i+s] * (g[r*(i+1)+s] + U[r*(i+1)+s] * x[i+1]);
- // Let us decompose it:
- // g[r*i+s] *= phi[r*i+s];
- // We could do:
- // grad_phi[r*i+s] += g[r*i+s]/phi[r*i+s] * grad_g[s];
- // But unstable if phi << 1
- // Better to do:
- grad_phi[r * i + s] +=
- (g[r * (i + 1) + s] + U[r * (i + 1) + s] * x[i + 1]) * grad_g[s];
- grad_g[s] *= phi[r * i + s];
- // g[r*i+s] = g[r*(i+1)+s] + U[r*(i+1)+s] * x[i+1];
- grad_U[r * (i + 1) + s] += x[i + 1] * grad_g[s];
- grad_x[i + 1] += U[r * (i + 1) + s] * grad_g[s];
- }
- }
-
- // Leaf terms for n-1
- for (j = n - 1 - b[n - 1]; j < n - 1; j++) {
- // y[j] += G[offsetrow[n-1]+j] * x[n-1];
- grad_G[offsetrow[n - 1] + j] += x[n - 1] * grad_y[j];
- grad_x[n - 1] += G[offsetrow[n - 1] + j] * grad_y[j];
- }
-
- free(grad_g);
-}
-
-void spleaf_solveLT_back(
- // Shape
- long n, long r, long *offsetrow, long *b,
- // Input
- double *U, double *W, double *phi, double *G, double *x, double *grad_x,
- // Output
- double *grad_U, double *grad_W, double *grad_phi, double *grad_G,
- double *grad_y,
- // Temporary
- double *g)
-{
- // Backward propagation of the gradient for spleaf_solveLT.
-
- long i, j, s;
- double *grad_g;
-
- grad_g = (double *)malloc(r * sizeof(double));
-
- // Copy grad_x -> grad_y
- memcpy(grad_y, grad_x, n * sizeof(double));
-
- // Initialize grad_g
- for (s = 0; s < r; s++) {
- grad_g[s] = 0.0;
- }
-
- // Reverse main loop
- for (i = 0; i < n - 1; i++) {
- for (j = i - b[i]; j < i; j++) {
- // x[j] -= G[offsetrow[i]+j] * x[i];
- grad_G[offsetrow[i] + j] -= x[i] * grad_y[j];
- grad_y[i] -= G[offsetrow[i] + j] * grad_y[j];
- }
- for (s = 0; s < r; s++) {
- // x[i] -= W[r*i+s] * g[r*i+s];
- grad_W[r * i + s] -= g[r * i + s] * grad_y[i];
- grad_g[s] -= W[r * i + s] * grad_y[i];
-
- // g[r*i+s] = phi[r*i+s] * (g[r*(i+1)+s] + U[r*(i+1)+s] * x[i+1]);
- // Let us decompose it:
- // g[r*i+s] *= phi[r*i+s];
- // We could do:
- // grad_phi[r*i+s] += g[r*i+s]/phi[r*i+s] * grad_g[s];
- // But unstable if phi << 1
- // Better to do:
- grad_phi[r * i + s] +=
- (g[r * (i + 1) + s] + U[r * (i + 1) + s] * x[i + 1]) * grad_g[s];
- grad_g[s] *= phi[r * i + s];
- // g[r*i+s] = g[r*(i+1)+s] + U[r*(i+1)+s] * x[i+1];
- grad_U[r * (i + 1) + s] += x[i + 1] * grad_g[s];
- grad_y[i + 1] += U[r * (i + 1) + s] * grad_g[s];
- }
- }
-
- // Leaf terms for n-1
- for (j = n - 1 - b[n - 1]; j < n - 1; j++) {
- // x[j] -= G[offsetrow[n-1]+j] * x[n-1];
- grad_G[offsetrow[n - 1] + j] -= x[n - 1] * grad_y[j];
- grad_y[n - 1] -= G[offsetrow[n - 1] + j] * grad_y[j];
- }
-
- free(grad_g);
-}
-
-void spleaf_expandsep(
- // Shape
- long n, long r, long rsi, long *sepindex,
- // Input
- double *U, double *V, double *phi,
- // Output
- double *K)
-{
- // Expand the semiseparable part of a symmetric S+LEAF matrix,
- // or a subset of semiseparable terms,
- // as a full (n x n) matrix.
- // This is useful for the conditional covariance computation.
-
- long i, j, s;
- double *f;
-
- f = (double *)malloc(rsi * sizeof(double));
-
- for (i = 0; i < n; i++) {
- K[(n + 1) * i] = 0.0;
- for (s = 0; s < rsi; s++) {
- K[(n + 1) * i] += U[r * i + sepindex[s]] * V[r * i + sepindex[s]];
- f[s] = 1.0;
- }
- for (j = i - 1; j >= 0; j--) {
- K[n * i + j] = 0.0;
- for (s = 0; s < rsi; s++) {
- f[s] *= phi[r * j + sepindex[s]];
- K[n * i + j] += f[s] * U[r * i + sepindex[s]] * V[r * j + sepindex[s]];
- }
- K[n * j + i] = K[n * i + j];
- }
- }
-
- free(f);
-}
-
-void spleaf_expandsepmixt(
- // Shape
- long n1, long n2, long r, long rsi, long *sepindex,
- // Input
- double *U1, double *V1, double *phi1, double *U2, double *V2, long *ref2left,
- double *phi2left, double *phi2right,
- // Output
- double *Km)
-{
- // Expand the semiseparable mixt part of a symmetric S+LEAF matrix,
- // or a subset of semiseparable terms,
- // as a full (n2 x n1) matrix.
- // This is useful for the conditional covariance computation.
-
- long i1, i2, j1, j2, s;
- double *f;
-
- f = (double *)malloc(rsi * sizeof(double));
-
- // Forward part (U2 V1^T)
- j2 = 0;
- for (j1 = 0; j1 <= ref2left[n2 - 1]; j1++) {
- for (s = 0; s < rsi; s++) {
- f[s] = V1[r * j1 + sepindex[s]];
- }
- while ((j2 < n2) && (ref2left[j2] < j1)) {
- j2++;
- }
- i1 = j1;
- i2 = j2;
- while (i2 < n2) {
- while (i1 < ref2left[i2]) {
- for (s = 0; s < rsi; s++) {
- f[s] *= phi1[r * i1 + sepindex[s]];
- }
- i1++;
- }
- while ((i2 < n2) && (ref2left[i2] == i1)) {
- Km[n1 * i2 + j1] = 0.0;
- for (s = 0; s < rsi; s++) {
- Km[n1 * i2 + j1] +=
- U2[r * i2 + sepindex[s]] * phi2left[r * i2 + sepindex[s]] * f[s];
- }
- i2++;
- }
- }
- }
- // Backward part (V2 U1^T)
- j2 = n2 - 1;
- for (j1 = n1 - 1; j1 > ref2left[0]; j1--) {
- for (s = 0; s < rsi; s++) {
- f[s] = U1[r * j1 + sepindex[s]];
- }
- while ((j2 >= 0) && (ref2left[j2] >= j1)) {
- j2--;
- }
- i1 = j1 - 1;
- i2 = j2;
- while (i2 >= 0) {
- while (i1 > ref2left[i2]) {
- for (s = 0; s < rsi; s++) {
- f[s] *= phi1[r * i1 + sepindex[s]];
- }
- i1--;
- }
- while ((i2 >= 0) && (ref2left[i2] == i1)) {
- Km[n1 * i2 + j1] = 0.0;
- for (s = 0; s < rsi; s++) {
- Km[n1 * i2 + j1] +=
- V2[r * i2 + sepindex[s]] * phi2right[r * i2 + sepindex[s]] * f[s];
- }
- i2--;
- }
- }
- }
-
- free(f);
-}
-
-void spleaf_expandantisep(
- // Shape
- long n, long r, long rsi, long *sepindex,
- // Input
- double *U, double *V, double *phi,
- // Output
- double *K)
-{
- // Expand the semiseparable part of an anit-symmetric S+LEAF matrix,
- // or a subset of semiseparable terms,
- // as a full (n x n) matrix.
- // This is useful for the conditional derivative covariance computation.
-
- long i, j, s;
- double *f;
-
- f = (double *)malloc(rsi * sizeof(double));
-
- for (i = 0; i < n; i++) {
- K[(n + 1) * i] = 0.0;
- for (s = 0; s < rsi; s++) {
- f[s] = 1.0;
- }
- for (j = i - 1; j >= 0; j--) {
- K[n * i + j] = 0.0;
- for (s = 0; s < rsi; s++) {
- f[s] *= phi[r * j + sepindex[s]];
- K[n * i + j] += f[s] * U[r * i + sepindex[s]] * V[r * j + sepindex[s]];
- }
- K[n * j + i] = -K[n * i + j];
- }
- }
-
- free(f);
-}
-
-void spleaf_dotsep(
- // Shape
- long n, long r, long rsi, long *sepindex,
- // Input
- double *U, double *V, double *phi, double *x,
- // Output
- double *y)
-{
- // Compute y = K x,
- // where K is the (n x n) semiseparable part of a symmetric S+LEAF matrix,
- // or a subset of semiseparable terms.
- // This is useful for the conditional mean computation.
-
- long i, s;
- double *f;
-
- f = (double *)malloc(rsi * sizeof(double));
-
- // Forward part (U V^T) + diagonal
- // Initialize f and y[0]
- y[0] = 0.0;
- for (s = 0; s < rsi; s++) {
- f[s] = V[sepindex[s]] * x[0];
- y[0] += U[sepindex[s]] * f[s];
- }
- for (i = 1; i < n; i++) {
- y[i] = 0.0;
- for (s = 0; s < rsi; s++) {
- // Update f
- f[s] =
- phi[r * (i - 1) + sepindex[s]] * f[s] + V[r * i + sepindex[s]] * x[i];
- y[i] += U[r * i + sepindex[s]] * f[s];
- }
- }
- // Backward part (V U^T)
- // Initialize f
- for (s = 0; s < rsi; s++) {
- f[s] = 0.0;
- }
- for (i = n - 2; i >= 0; i--) {
- for (s = 0; s < rsi; s++) {
- // Update f
- f[s] = phi[r * i + sepindex[s]] *
- (f[s] + U[r * (i + 1) + sepindex[s]] * x[i + 1]);
- y[i] += V[r * i + sepindex[s]] * f[s];
- }
- }
-
- free(f);
-}
-
-void spleaf_dotsepmixt(
- // Shape
- long n1, long n2, long r, long rsi, long *sepindex,
- // Input
- double *U1, double *V1, double *phi1, double *U2, double *V2, long *ref2left,
- double *phi2left, double *phi2right, double *x,
- // Output
- double *y)
-{
- // Compute y = Km x,
- // where Km is the (n2 x n1) semiseparable mixt part
- // of a symmetric S+LEAF matrix,
- // or a subset of semiseparable terms.
- // This is useful for the conditional mean computation.
-
- long i, j, s;
- double *f;
-
- f = (double *)malloc(rsi * sizeof(double));
-
- // Forward part (U2 V1^T)
- i = 0;
- while ((i < n2) && (ref2left[i] == -1)) {
- y[i] = 0.0;
- i++;
- }
- // Initialize f
- for (s = 0; s < rsi; s++) {
- f[s] = V1[sepindex[s]] * x[0];
- }
- j = 0;
- while (i < n2) {
- // Update f
- while (j < ref2left[i]) {
- for (s = 0; s < rsi; s++) {
- f[s] = phi1[r * j + sepindex[s]] * f[s] +
- V1[r * (j + 1) + sepindex[s]] * x[j + 1];
- }
- j++;
- }
- // Compute forward part of y[i]
- y[i] = 0.0;
- for (s = 0; s < rsi; s++) {
- y[i] += U2[r * i + sepindex[s]] * phi2left[r * i + sepindex[s]] * f[s];
- }
- i++;
- }
- // Backward part (V2 U1^T)
- i = n2 - 1;
- while ((i >= 0) && (ref2left[i] == n1 - 1)) {
- i--;
- }
- // Initialize f
- for (s = 0; s < rsi; s++) {
- f[s] = U1[r * (n1 - 1) + sepindex[s]] * x[n1 - 1];
- }
- j = n1 - 2;
- while (i >= 0) {
- // Update f
- while (j > ref2left[i]) {
- for (s = 0; s < rsi; s++) {
- f[s] =
- phi1[r * j + sepindex[s]] * f[s] + U1[r * j + sepindex[s]] * x[j];
- }
- j--;
- }
- // Compute backward part of y[i]
- for (s = 0; s < rsi; s++) {
- y[i] += V2[r * i + sepindex[s]] * phi2right[r * i + sepindex[s]] * f[s];
- }
- i--;
- }
-
- free(f);
-}
-
-void spleaf_dotantisep(
- // Shape
- long n, long r, long rsi, long *sepindex,
- // Input
- double *U, double *V, double *phi, double *x,
- // Output
- double *y)
-{
- // Compute y = K x,
- // where K is the (n x n) semiseparable part of an anti-symmetric S+LEAF
- // matrix, or a subset of semiseparable terms. This is useful for the
- // conditional derivative mean computation.
-
- long i, s;
- double *f;
-
- f = (double *)malloc(rsi * sizeof(double));
-
- // Forward part (U V^T)
- // Initialize f and y[0]
- y[0] = 0.0;
- for (s = 0; s < rsi; s++) {
- f[s] = 0.0;
- }
- for (i = 1; i < n; i++) {
- y[i] = 0.0;
- for (s = 0; s < rsi; s++) {
- // Update f
- f[s] = phi[r * (i - 1) + sepindex[s]] *
- (f[s] + V[r * (i - 1) + sepindex[s]] * x[i - 1]);
- y[i] += U[r * i + sepindex[s]] * f[s];
- }
- }
- // Backward part (-V U^T)
- // Initialize f
- for (s = 0; s < rsi; s++) {
- f[s] = 0.0;
- }
- for (i = n - 2; i >= 0; i--) {
- for (s = 0; s < rsi; s++) {
- // Update f
- f[s] = phi[r * i + sepindex[s]] *
- (f[s] + U[r * (i + 1) + sepindex[s]] * x[i + 1]);
- y[i] -= V[r * i + sepindex[s]] * f[s];
- }
- }
-
- free(f);
-}
diff --git a/kima/vendor/spleaf/spleaf/libspleaf.h b/kima/vendor/spleaf/spleaf/libspleaf.h
deleted file mode 100644
index a4ecd8a..0000000
--- a/kima/vendor/spleaf/spleaf/libspleaf.h
+++ /dev/null
@@ -1,177 +0,0 @@
-// Copyright 2019-2022 Jean-Baptiste Delisle
-//
-// This file is part of spleaf.
-//
-// spleaf is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// spleaf is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with spleaf. If not, see .
-
-#include
-#include
-#define MIN(a, b) (((a) < (b)) ? (a) : (b))
-#define MAX(a, b) (((a) > (b)) ? (a) : (b))
-
-void spleaf_cholesky(
- // Shape
- long n, long r, long *offsetrow, long *b,
- // Input
- double *A, double *U, double *V, double *phi, double *F,
- // Output
- double *D, double *W, double *G,
- // Temporary
- double *S, double *Z);
-
-void spleaf_dotL(
- // Shape
- long n, long r, long *offsetrow, long *b,
- // Input
- double *U, double *W, double *phi, double *G, double *x,
- // Output
- double *y,
- // Temporary
- double *f);
-
-void spleaf_solveL(
- // Shape
- long n, long r, long *offsetrow, long *b,
- // Input
- double *U, double *W, double *phi, double *G, double *y,
- // Output
- double *x,
- // Temporary
- double *f);
-
-void spleaf_dotLT(
- // Shape
- long n, long r, long *offsetrow, long *b,
- // Input
- double *U, double *W, double *phi, double *G, double *x,
- // Output
- double *y,
- // Temporary
- double *g);
-
-void spleaf_solveLT(
- // Shape
- long n, long r, long *offsetrow, long *b,
- // Input
- double *U, double *W, double *phi, double *G, double *y,
- // Output
- double *x,
- // Temporary
- double *g);
-
-void spleaf_cholesky_back(
- // Shape
- long n, long r, long *offsetrow, long *b,
- // Input
- double *D, double *U, double *W, double *phi, double *G, double *grad_D,
- double *grad_Ucho, double *grad_W, double *grad_phicho, double *grad_G,
- // Output
- double *grad_A, double *grad_U, double *grad_V, double *grad_phi,
- double *grad_F,
- // Temporary
- double *S, double *Z);
-
-void spleaf_dotL_back(
- // Shape
- long n, long r, long *offsetrow, long *b,
- // Input
- double *U, double *W, double *phi, double *G, double *x, double *grad_y,
- // Output
- double *grad_U, double *grad_W, double *grad_phi, double *grad_G,
- double *grad_x,
- // Temporary
- double *f);
-
-void spleaf_solveL_back(
- // Shape
- long n, long r, long *offsetrow, long *b,
- // Input
- double *U, double *W, double *phi, double *G, double *x, double *grad_x,
- // Output
- double *grad_U, double *grad_W, double *grad_phi, double *grad_G,
- double *grad_y,
- // Temporary
- double *f);
-
-void spleaf_dotLT_back(
- // Shape
- long n, long r, long *offsetrow, long *b,
- // Input
- double *U, double *W, double *phi, double *G, double *x, double *grad_y,
- // Output
- double *grad_U, double *grad_W, double *grad_phi, double *grad_G,
- double *grad_x,
- // Temporary
- double *g);
-
-void spleaf_solveLT_back(
- // Shape
- long n, long r, long *offsetrow, long *b,
- // Input
- double *U, double *W, double *phi, double *G, double *x, double *grad_x,
- // Output
- double *grad_U, double *grad_W, double *grad_phi, double *grad_G,
- double *grad_y,
- // Temporary
- double *g);
-
-void spleaf_expandsep(
- // Shape
- long n, long r, long rsi, long *sepindex,
- // Input
- double *U, double *V, double *phi,
- // Output
- double *K);
-
-void spleaf_expandsepmixt(
- // Shape
- long n1, long n2, long r, long rsi, long *sepindex,
- // Input
- double *U1, double *V1, double *phi1, double *U2, double *V2, long *ref2left,
- double *phi2left, double *phi2right,
- // Output
- double *Km);
-
-void spleaf_expandantisep(
- // Shape
- long n, long r, long rsi, long *sepindex,
- // Input
- double *U, double *V, double *phi,
- // Output
- double *K);
-
-void spleaf_dotsep(
- // Shape
- long n, long r, long rsi, long *sepindex,
- // Input
- double *U, double *V, double *phi, double *x,
- // Output
- double *y);
-
-void spleaf_dotsepmixt(
- // Shape
- long n1, long n2, long r, long rsi, long *sepindex,
- // Input
- double *U1, double *V1, double *phi1, double *U2, double *V2, long *ref2left,
- double *phi2left, double *phi2right, double *x,
- // Output
- double *y);
-
-void spleaf_dotantisep(
- // Shape
- long n, long r, long rsi, long *sepindex,
- // Input
- double *U, double *V, double *phi, double *x,
- // Output
- double *y);
diff --git a/kima/vendor/spleaf/spleaf/pywrapspleaf.c b/kima/vendor/spleaf/spleaf/pywrapspleaf.c
deleted file mode 100644
index 7c5e145..0000000
--- a/kima/vendor/spleaf/spleaf/pywrapspleaf.c
+++ /dev/null
@@ -1,2015 +0,0 @@
-// Copyright 2019-2022 Jean-Baptiste Delisle
-//
-// This file is part of spleaf.
-//
-// spleaf is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// spleaf is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with spleaf. If not, see .
-
-#define NPY_NO_DEPRECATED_API NPY_1_18_API_VERSION
-
-#include "libspleaf.h"
-#include
-#include
-
-// Module docstring
-static char module_docstring[] =
- "This module provides an interface for the C library libspleaf.";
-
-// Methods docstrings
-static char spleaf_cholesky_docstring[] =
- "Cholesky decomposition of the (n x n) symmetric S+LEAF\n"
- "(semiseparable + leaf) matrix C\n"
- "defined as\n"
- "C = A + Sep + F\n"
- "with\n"
- "* A: the diagonal part of C, stored as a vector of size n.\n"
- "* Sep: the symmetric semiseparable part of C.\n"
- " For i > j,\n"
- " Sep_{i,j} = Sep_{j,i}\n"
- " = Sum_{s=0}^{r-1} U_{i,s} V_{j,s} Prod_{k=j}^{i-1} phi_{k,s}\n"
- " where U, V are (n x r) matrices, and phi is a (n-1 x r) matrix,\n"
- " all stored in row major order.\n"
- " By definition Sep_{i,i} = 0.\n"
- "* F: the symmetric leaf part of C,\n"
- " stored in strictly lower triangular form, and in row major order.\n"
- " The i-th row of F is of size b[i], i.e., by definition,\n"
- " F_{i,j} = 0 for j j,\n"
- " Lsep_{i,j} = Sum_{s=0}^{r-1} U_{i,s} W_{j,s} Prod_{k=j}^{i-1} phi_{k,s},\n"
- " where U and phi are left unchanged and W is a (n x r) matrix (like V).\n"
- "* G: the strictly lower triangular leaf part of L.\n"
- " G is stored in the same way as F.\n";
-static char spleaf_dotL_docstring[] =
- "Compute y = L x,\n"
- "where L comes from the Cholesky decomposition C = L D L^T\n"
- "of a symmetric S+LEAF matrix C using spleaf_cholesky.\n";
-static char spleaf_solveL_docstring[] =
- "Solve for x = L^-1 y,\n"
- "where L comes from the Cholesky decomposition C = L D L^T\n"
- "of a symmetric S+LEAF matrix C using spleaf_cholesky.\n";
-static char spleaf_dotLT_docstring[] =
- "Compute y = L^T x,\n"
- "where L comes from the Cholesky decomposition C = L D L^T\n"
- "of a symmetric S+LEAF matrix C using spleaf_cholesky.\n";
-static char spleaf_solveLT_docstring[] =
- "Solve for x = L^-T y,\n"
- "where L comes from the Cholesky decomposition C = L D L^T\n"
- "of a symmetric S+LEAF matrix C using spleaf_cholesky.\n";
-static char spleaf_cholesky_back_docstring[] =
- "Backward propagation of the gradient for spleaf_cholesky.\n";
-static char spleaf_dotL_back_docstring[] =
- "Backward propagation of the gradient for spleaf_dotL.\n";
-static char spleaf_solveL_back_docstring[] =
- "Backward propagation of the gradient for spleaf_solveL.\n";
-static char spleaf_dotLT_back_docstring[] =
- "Backward propagation of the gradient for spleaf_dotLT.\n";
-static char spleaf_solveLT_back_docstring[] =
- "Backward propagation of the gradient for spleaf_solveLT.\n";
-static char spleaf_expandsep_docstring[] =
- "Expand the semiseparable part of a symmetric S+LEAF matrix,\n"
- "or a subset of semiseparable terms,\n"
- "as a full (n x n) matrix.\n"
- "This is useful for the conditional covariance computation.\n";
-static char spleaf_expandsepmixt_docstring[] =
- "Expand the semiseparable mixt part of a symmetric S+LEAF matrix,\n"
- "or a subset of semiseparable terms,\n"
- "as a full (n2 x n1) matrix.\n"
- "This is useful for the conditional covariance computation.\n";
-static char spleaf_expandantisep_docstring[] =
- "Expand the semiseparable part of an anit-symmetric S+LEAF matrix,\n"
- "or a subset of semiseparable terms,\n"
- "as a full (n x n) matrix.\n"
- "This is useful for the conditional derivative covariance computation.\n";
-static char spleaf_dotsep_docstring[] =
- "Compute y = K x,\n"
- "where K is the (n x n) semiseparable part of a symmetric S+LEAF matrix,\n"
- "or a subset of semiseparable terms.\n"
- "This is useful for the conditional mean computation.\n";
-static char spleaf_dotsepmixt_docstring[] =
- "Compute y = Km x,\n"
- "where Km is the (n2 x n1) semiseparable mixt part\n"
- "of a symmetric S+LEAF matrix,\n"
- "or a subset of semiseparable terms.\n"
- "This is useful for the conditional mean computation.\n";
-static char spleaf_dotantisep_docstring[] =
- "Compute y = K x,\n"
- "where K is the (n x n) semiseparable part of an anti-symmetric S+LEAF\n"
- "matrix, or a subset of semiseparable terms. This is useful for the\n"
- "conditional derivative mean computation.\n";
-
-// Module methods
-static PyObject *libspleaf_spleaf_cholesky(PyObject *self, PyObject *args);
-static PyObject *libspleaf_spleaf_dotL(PyObject *self, PyObject *args);
-static PyObject *libspleaf_spleaf_solveL(PyObject *self, PyObject *args);
-static PyObject *libspleaf_spleaf_dotLT(PyObject *self, PyObject *args);
-static PyObject *libspleaf_spleaf_solveLT(PyObject *self, PyObject *args);
-static PyObject *libspleaf_spleaf_cholesky_back(PyObject *self, PyObject *args);
-static PyObject *libspleaf_spleaf_dotL_back(PyObject *self, PyObject *args);
-static PyObject *libspleaf_spleaf_solveL_back(PyObject *self, PyObject *args);
-static PyObject *libspleaf_spleaf_dotLT_back(PyObject *self, PyObject *args);
-static PyObject *libspleaf_spleaf_solveLT_back(PyObject *self, PyObject *args);
-static PyObject *libspleaf_spleaf_expandsep(PyObject *self, PyObject *args);
-static PyObject *libspleaf_spleaf_expandsepmixt(PyObject *self, PyObject *args);
-static PyObject *libspleaf_spleaf_expandantisep(PyObject *self, PyObject *args);
-static PyObject *libspleaf_spleaf_dotsep(PyObject *self, PyObject *args);
-static PyObject *libspleaf_spleaf_dotsepmixt(PyObject *self, PyObject *args);
-static PyObject *libspleaf_spleaf_dotantisep(PyObject *self, PyObject *args);
-static PyMethodDef module_methods[] = {
- {"spleaf_cholesky", libspleaf_spleaf_cholesky, METH_VARARGS, spleaf_cholesky_docstring},
- {"spleaf_dotL", libspleaf_spleaf_dotL, METH_VARARGS, spleaf_dotL_docstring},
- {"spleaf_solveL", libspleaf_spleaf_solveL, METH_VARARGS, spleaf_solveL_docstring},
- {"spleaf_dotLT", libspleaf_spleaf_dotLT, METH_VARARGS, spleaf_dotLT_docstring},
- {"spleaf_solveLT", libspleaf_spleaf_solveLT, METH_VARARGS, spleaf_solveLT_docstring},
- {"spleaf_cholesky_back", libspleaf_spleaf_cholesky_back, METH_VARARGS, spleaf_cholesky_back_docstring},
- {"spleaf_dotL_back", libspleaf_spleaf_dotL_back, METH_VARARGS, spleaf_dotL_back_docstring},
- {"spleaf_solveL_back", libspleaf_spleaf_solveL_back, METH_VARARGS, spleaf_solveL_back_docstring},
- {"spleaf_dotLT_back", libspleaf_spleaf_dotLT_back, METH_VARARGS, spleaf_dotLT_back_docstring},
- {"spleaf_solveLT_back", libspleaf_spleaf_solveLT_back, METH_VARARGS, spleaf_solveLT_back_docstring},
- {"spleaf_expandsep", libspleaf_spleaf_expandsep, METH_VARARGS, spleaf_expandsep_docstring},
- {"spleaf_expandsepmixt", libspleaf_spleaf_expandsepmixt, METH_VARARGS, spleaf_expandsepmixt_docstring},
- {"spleaf_expandantisep", libspleaf_spleaf_expandantisep, METH_VARARGS, spleaf_expandantisep_docstring},
- {"spleaf_dotsep", libspleaf_spleaf_dotsep, METH_VARARGS, spleaf_dotsep_docstring},
- {"spleaf_dotsepmixt", libspleaf_spleaf_dotsepmixt, METH_VARARGS, spleaf_dotsepmixt_docstring},
- {"spleaf_dotantisep", libspleaf_spleaf_dotantisep, METH_VARARGS, spleaf_dotantisep_docstring},
- {NULL, NULL, 0, NULL}};
-
-// Module definition
-static struct PyModuleDef myModule = {
- PyModuleDef_HEAD_INIT, "libspleaf", module_docstring, -1, module_methods};
-
-// Module initialization
-PyMODINIT_FUNC PyInit_libspleaf(void)
-{
- // import numpy arrays
- import_array();
- return PyModule_Create(&myModule);
-}
-
-static PyObject *libspleaf_spleaf_cholesky(PyObject *self, PyObject *args)
-{
- long n;
- long r;
- PyObject *obj_offsetrow;
- PyObject *obj_b;
- PyObject *obj_A;
- PyObject *obj_U;
- PyObject *obj_V;
- PyObject *obj_phi;
- PyObject *obj_F;
- PyObject *obj_D;
- PyObject *obj_W;
- PyObject *obj_G;
- PyObject *obj_S;
- PyObject *obj_Z;
-
- // Parse input tuple
- if (!PyArg_ParseTuple(args, "llOOOOOOOOOOOO",
- &n,
- &r,
- &obj_offsetrow,
- &obj_b,
- &obj_A,
- &obj_U,
- &obj_V,
- &obj_phi,
- &obj_F,
- &obj_D,
- &obj_W,
- &obj_G,
- &obj_S,
- &obj_Z))
- return(NULL);
-
- // Interpret input objects as numpy arrays
- PyArrayObject *arr_offsetrow = (PyArrayObject*) PyArray_FROM_OTF(obj_offsetrow, NPY_LONG, NPY_ARRAY_IN_ARRAY);
- PyArrayObject *arr_b = (PyArrayObject*) PyArray_FROM_OTF(obj_b, NPY_LONG, NPY_ARRAY_IN_ARRAY);
- PyArrayObject *arr_A = (PyArrayObject*) PyArray_FROM_OTF(obj_A, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY);
- PyArrayObject *arr_U = (PyArrayObject*) PyArray_FROM_OTF(obj_U, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY);
- PyArrayObject *arr_V = (PyArrayObject*) PyArray_FROM_OTF(obj_V, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY);
- PyArrayObject *arr_phi = (PyArrayObject*) PyArray_FROM_OTF(obj_phi, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY);
- PyArrayObject *arr_F = (PyArrayObject*) PyArray_FROM_OTF(obj_F, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY);
- PyArrayObject *arr_D = (PyArrayObject*) PyArray_FROM_OTF(obj_D, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY);
- PyArrayObject *arr_W = (PyArrayObject*) PyArray_FROM_OTF(obj_W, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY);
- PyArrayObject *arr_G = (PyArrayObject*) PyArray_FROM_OTF(obj_G, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY);
- PyArrayObject *arr_S = (PyArrayObject*) PyArray_FROM_OTF(obj_S, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY);
- PyArrayObject *arr_Z = (PyArrayObject*) PyArray_FROM_OTF(obj_Z, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY);
-
- // Generate exception in case of failure
- if (
- arr_offsetrow == NULL ||
- arr_b == NULL ||
- arr_A == NULL ||
- arr_U == NULL ||
- arr_V == NULL ||
- arr_phi == NULL ||
- arr_F == NULL ||
- arr_D == NULL ||
- arr_W == NULL ||
- arr_G == NULL ||
- arr_S == NULL ||
- arr_Z == NULL) {
- // Dereference arrays
- Py_XDECREF(arr_offsetrow);
- Py_XDECREF(arr_b);
- Py_XDECREF(arr_A);
- Py_XDECREF(arr_U);
- Py_XDECREF(arr_V);
- Py_XDECREF(arr_phi);
- Py_XDECREF(arr_F);
- Py_XDECREF(arr_D);
- Py_XDECREF(arr_W);
- Py_XDECREF(arr_G);
- Py_XDECREF(arr_S);
- Py_XDECREF(arr_Z);
- return NULL;
- }
-
- // Get C-types pointers to numpy arrays
- long *offsetrow = (long*)PyArray_DATA(arr_offsetrow);
- long *b = (long*)PyArray_DATA(arr_b);
- double *A = (double*)PyArray_DATA(arr_A);
- double *U = (double*)PyArray_DATA(arr_U);
- double *V = (double*)PyArray_DATA(arr_V);
- double *phi = (double*)PyArray_DATA(arr_phi);
- double *F = (double*)PyArray_DATA(arr_F);
- double *D = (double*)PyArray_DATA(arr_D);
- double *W = (double*)PyArray_DATA(arr_W);
- double *G = (double*)PyArray_DATA(arr_G);
- double *S = (double*)PyArray_DATA(arr_S);
- double *Z = (double*)PyArray_DATA(arr_Z);
-
- // Call the C function from libspleaf
- spleaf_cholesky(
- n,
- r,
- offsetrow,
- b,
- A,
- U,
- V,
- phi,
- F,
- D,
- W,
- G,
- S,
- Z);
-
- // Dereference arrays
- Py_XDECREF(arr_offsetrow);
- Py_XDECREF(arr_b);
- Py_XDECREF(arr_A);
- Py_XDECREF(arr_U);
- Py_XDECREF(arr_V);
- Py_XDECREF(arr_phi);
- Py_XDECREF(arr_F);
- Py_XDECREF(arr_D);
- Py_XDECREF(arr_W);
- Py_XDECREF(arr_G);
- Py_XDECREF(arr_S);
- Py_XDECREF(arr_Z);
-
- Py_RETURN_NONE;
-}
-
-static PyObject *libspleaf_spleaf_dotL(PyObject *self, PyObject *args)
-{
- long n;
- long r;
- PyObject *obj_offsetrow;
- PyObject *obj_b;
- PyObject *obj_U;
- PyObject *obj_W;
- PyObject *obj_phi;
- PyObject *obj_G;
- PyObject *obj_x;
- PyObject *obj_y;
- PyObject *obj_f;
-
- // Parse input tuple
- if (!PyArg_ParseTuple(args, "llOOOOOOOOO",
- &n,
- &r,
- &obj_offsetrow,
- &obj_b,
- &obj_U,
- &obj_W,
- &obj_phi,
- &obj_G,
- &obj_x,
- &obj_y,
- &obj_f))
- return(NULL);
-
- // Interpret input objects as numpy arrays
- PyArrayObject *arr_offsetrow = (PyArrayObject*) PyArray_FROM_OTF(obj_offsetrow, NPY_LONG, NPY_ARRAY_IN_ARRAY);
- PyArrayObject *arr_b = (PyArrayObject*) PyArray_FROM_OTF(obj_b, NPY_LONG, NPY_ARRAY_IN_ARRAY);
- PyArrayObject *arr_U = (PyArrayObject*) PyArray_FROM_OTF(obj_U, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY);
- PyArrayObject *arr_W = (PyArrayObject*) PyArray_FROM_OTF(obj_W, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY);
- PyArrayObject *arr_phi = (PyArrayObject*) PyArray_FROM_OTF(obj_phi, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY);
- PyArrayObject *arr_G = (PyArrayObject*) PyArray_FROM_OTF(obj_G, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY);
- PyArrayObject *arr_x = (PyArrayObject*) PyArray_FROM_OTF(obj_x, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY);
- PyArrayObject *arr_y = (PyArrayObject*) PyArray_FROM_OTF(obj_y, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY);
- PyArrayObject *arr_f = (PyArrayObject*) PyArray_FROM_OTF(obj_f, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY);
-
- // Generate exception in case of failure
- if (
- arr_offsetrow == NULL ||
- arr_b == NULL ||
- arr_U == NULL ||
- arr_W == NULL ||
- arr_phi == NULL ||
- arr_G == NULL ||
- arr_x == NULL ||
- arr_y == NULL ||
- arr_f == NULL) {
- // Dereference arrays
- Py_XDECREF(arr_offsetrow);
- Py_XDECREF(arr_b);
- Py_XDECREF(arr_U);
- Py_XDECREF(arr_W);
- Py_XDECREF(arr_phi);
- Py_XDECREF(arr_G);
- Py_XDECREF(arr_x);
- Py_XDECREF(arr_y);
- Py_XDECREF(arr_f);
- return NULL;
- }
-
- // Get C-types pointers to numpy arrays
- long *offsetrow = (long*)PyArray_DATA(arr_offsetrow);
- long *b = (long*)PyArray_DATA(arr_b);
- double *U = (double*)PyArray_DATA(arr_U);
- double *W = (double*)PyArray_DATA(arr_W);
- double *phi = (double*)PyArray_DATA(arr_phi);
- double *G = (double*)PyArray_DATA(arr_G);
- double *x = (double*)PyArray_DATA(arr_x);
- double *y = (double*)PyArray_DATA(arr_y);
- double *f = (double*)PyArray_DATA(arr_f);
-
- // Call the C function from libspleaf
- spleaf_dotL(
- n,
- r,
- offsetrow,
- b,
- U,
- W,
- phi,
- G,
- x,
- y,
- f);
-
- // Dereference arrays
- Py_XDECREF(arr_offsetrow);
- Py_XDECREF(arr_b);
- Py_XDECREF(arr_U);
- Py_XDECREF(arr_W);
- Py_XDECREF(arr_phi);
- Py_XDECREF(arr_G);
- Py_XDECREF(arr_x);
- Py_XDECREF(arr_y);
- Py_XDECREF(arr_f);
-
- Py_RETURN_NONE;
-}
-
-static PyObject *libspleaf_spleaf_solveL(PyObject *self, PyObject *args)
-{
- long n;
- long r;
- PyObject *obj_offsetrow;
- PyObject *obj_b;
- PyObject *obj_U;
- PyObject *obj_W;
- PyObject *obj_phi;
- PyObject *obj_G;
- PyObject *obj_y;
- PyObject *obj_x;
- PyObject *obj_f;
-
- // Parse input tuple
- if (!PyArg_ParseTuple(args, "llOOOOOOOOO",
- &n,
- &r,
- &obj_offsetrow,
- &obj_b,
- &obj_U,
- &obj_W,
- &obj_phi,
- &obj_G,
- &obj_y,
- &obj_x,
- &obj_f))
- return(NULL);
-
- // Interpret input objects as numpy arrays
- PyArrayObject *arr_offsetrow = (PyArrayObject*) PyArray_FROM_OTF(obj_offsetrow, NPY_LONG, NPY_ARRAY_IN_ARRAY);
- PyArrayObject *arr_b = (PyArrayObject*) PyArray_FROM_OTF(obj_b, NPY_LONG, NPY_ARRAY_IN_ARRAY);
- PyArrayObject *arr_U = (PyArrayObject*) PyArray_FROM_OTF(obj_U, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY);
- PyArrayObject *arr_W = (PyArrayObject*) PyArray_FROM_OTF(obj_W, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY);
- PyArrayObject *arr_phi = (PyArrayObject*) PyArray_FROM_OTF(obj_phi, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY);
- PyArrayObject *arr_G = (PyArrayObject*) PyArray_FROM_OTF(obj_G, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY);
- PyArrayObject *arr_y = (PyArrayObject*) PyArray_FROM_OTF(obj_y, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY);
- PyArrayObject *arr_x = (PyArrayObject*) PyArray_FROM_OTF(obj_x, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY);
- PyArrayObject *arr_f = (PyArrayObject*) PyArray_FROM_OTF(obj_f, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY);
-
- // Generate exception in case of failure
- if (
- arr_offsetrow == NULL ||
- arr_b == NULL ||
- arr_U == NULL ||
- arr_W == NULL ||
- arr_phi == NULL ||
- arr_G == NULL ||
- arr_y == NULL ||
- arr_x == NULL ||
- arr_f == NULL) {
- // Dereference arrays
- Py_XDECREF(arr_offsetrow);
- Py_XDECREF(arr_b);
- Py_XDECREF(arr_U);
- Py_XDECREF(arr_W);
- Py_XDECREF(arr_phi);
- Py_XDECREF(arr_G);
- Py_XDECREF(arr_y);
- Py_XDECREF(arr_x);
- Py_XDECREF(arr_f);
- return NULL;
- }
-
- // Get C-types pointers to numpy arrays
- long *offsetrow = (long*)PyArray_DATA(arr_offsetrow);
- long *b = (long*)PyArray_DATA(arr_b);
- double *U = (double*)PyArray_DATA(arr_U);
- double *W = (double*)PyArray_DATA(arr_W);
- double *phi = (double*)PyArray_DATA(arr_phi);
- double *G = (double*)PyArray_DATA(arr_G);
- double *y = (double*)PyArray_DATA(arr_y);
- double *x = (double*)PyArray_DATA(arr_x);
- double *f = (double*)PyArray_DATA(arr_f);
-
- // Call the C function from libspleaf
- spleaf_solveL(
- n,
- r,
- offsetrow,
- b,
- U,
- W,
- phi,
- G,
- y,
- x,
- f);
-
- // Dereference arrays
- Py_XDECREF(arr_offsetrow);
- Py_XDECREF(arr_b);
- Py_XDECREF(arr_U);
- Py_XDECREF(arr_W);
- Py_XDECREF(arr_phi);
- Py_XDECREF(arr_G);
- Py_XDECREF(arr_y);
- Py_XDECREF(arr_x);
- Py_XDECREF(arr_f);
-
- Py_RETURN_NONE;
-}
-
-static PyObject *libspleaf_spleaf_dotLT(PyObject *self, PyObject *args)
-{
- long n;
- long r;
- PyObject *obj_offsetrow;
- PyObject *obj_b;
- PyObject *obj_U;
- PyObject *obj_W;
- PyObject *obj_phi;
- PyObject *obj_G;
- PyObject *obj_x;
- PyObject *obj_y;
- PyObject *obj_g;
-
- // Parse input tuple
- if (!PyArg_ParseTuple(args, "llOOOOOOOOO",
- &n,
- &r,
- &obj_offsetrow,
- &obj_b,
- &obj_U,
- &obj_W,
- &obj_phi,
- &obj_G,
- &obj_x,
- &obj_y,
- &obj_g))
- return(NULL);
-
- // Interpret input objects as numpy arrays
- PyArrayObject *arr_offsetrow = (PyArrayObject*) PyArray_FROM_OTF(obj_offsetrow, NPY_LONG, NPY_ARRAY_IN_ARRAY);
- PyArrayObject *arr_b = (PyArrayObject*) PyArray_FROM_OTF(obj_b, NPY_LONG, NPY_ARRAY_IN_ARRAY);
- PyArrayObject *arr_U = (PyArrayObject*) PyArray_FROM_OTF(obj_U, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY);
- PyArrayObject *arr_W = (PyArrayObject*) PyArray_FROM_OTF(obj_W, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY);
- PyArrayObject *arr_phi = (PyArrayObject*) PyArray_FROM_OTF(obj_phi, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY);
- PyArrayObject *arr_G = (PyArrayObject*) PyArray_FROM_OTF(obj_G, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY);
- PyArrayObject *arr_x = (PyArrayObject*) PyArray_FROM_OTF(obj_x, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY);
- PyArrayObject *arr_y = (PyArrayObject*) PyArray_FROM_OTF(obj_y, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY);
- PyArrayObject *arr_g = (PyArrayObject*) PyArray_FROM_OTF(obj_g, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY);
-
- // Generate exception in case of failure
- if (
- arr_offsetrow == NULL ||
- arr_b == NULL ||
- arr_U == NULL ||
- arr_W == NULL ||
- arr_phi == NULL ||
- arr_G == NULL ||
- arr_x == NULL ||
- arr_y == NULL ||
- arr_g == NULL) {
- // Dereference arrays
- Py_XDECREF(arr_offsetrow);
- Py_XDECREF(arr_b);
- Py_XDECREF(arr_U);
- Py_XDECREF(arr_W);
- Py_XDECREF(arr_phi);
- Py_XDECREF(arr_G);
- Py_XDECREF(arr_x);
- Py_XDECREF(arr_y);
- Py_XDECREF(arr_g);
- return NULL;
- }
-
- // Get C-types pointers to numpy arrays
- long *offsetrow = (long*)PyArray_DATA(arr_offsetrow);
- long *b = (long*)PyArray_DATA(arr_b);
- double *U = (double*)PyArray_DATA(arr_U);
- double *W = (double*)PyArray_DATA(arr_W);
- double *phi = (double*)PyArray_DATA(arr_phi);
- double *G = (double*)PyArray_DATA(arr_G);
- double *x = (double*)PyArray_DATA(arr_x);
- double *y = (double*)PyArray_DATA(arr_y);
- double *g = (double*)PyArray_DATA(arr_g);
-
- // Call the C function from libspleaf
- spleaf_dotLT(
- n,
- r,
- offsetrow,
- b,
- U,
- W,
- phi,
- G,
- x,
- y,
- g);
-
- // Dereference arrays
- Py_XDECREF(arr_offsetrow);
- Py_XDECREF(arr_b);
- Py_XDECREF(arr_U);
- Py_XDECREF(arr_W);
- Py_XDECREF(arr_phi);
- Py_XDECREF(arr_G);
- Py_XDECREF(arr_x);
- Py_XDECREF(arr_y);
- Py_XDECREF(arr_g);
-
- Py_RETURN_NONE;
-}
-
-static PyObject *libspleaf_spleaf_solveLT(PyObject *self, PyObject *args)
-{
- long n;
- long r;
- PyObject *obj_offsetrow;
- PyObject *obj_b;
- PyObject *obj_U;
- PyObject *obj_W;
- PyObject *obj_phi;
- PyObject *obj_G;
- PyObject *obj_y;
- PyObject *obj_x;
- PyObject *obj_g;
-
- // Parse input tuple
- if (!PyArg_ParseTuple(args, "llOOOOOOOOO",
- &n,
- &r,
- &obj_offsetrow,
- &obj_b,
- &obj_U,
- &obj_W,
- &obj_phi,
- &obj_G,
- &obj_y,
- &obj_x,
- &obj_g))
- return(NULL);
-
- // Interpret input objects as numpy arrays
- PyArrayObject *arr_offsetrow = (PyArrayObject*) PyArray_FROM_OTF(obj_offsetrow, NPY_LONG, NPY_ARRAY_IN_ARRAY);
- PyArrayObject *arr_b = (PyArrayObject*) PyArray_FROM_OTF(obj_b, NPY_LONG, NPY_ARRAY_IN_ARRAY);
- PyArrayObject *arr_U = (PyArrayObject*) PyArray_FROM_OTF(obj_U, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY);
- PyArrayObject *arr_W = (PyArrayObject*) PyArray_FROM_OTF(obj_W, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY);
- PyArrayObject *arr_phi = (PyArrayObject*) PyArray_FROM_OTF(obj_phi, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY);
- PyArrayObject *arr_G = (PyArrayObject*) PyArray_FROM_OTF(obj_G, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY);
- PyArrayObject *arr_y = (PyArrayObject*) PyArray_FROM_OTF(obj_y, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY);
- PyArrayObject *arr_x = (PyArrayObject*) PyArray_FROM_OTF(obj_x, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY);
- PyArrayObject *arr_g = (PyArrayObject*) PyArray_FROM_OTF(obj_g, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY);
-
- // Generate exception in case of failure
- if (
- arr_offsetrow == NULL ||
- arr_b == NULL ||
- arr_U == NULL ||
- arr_W == NULL ||
- arr_phi == NULL ||
- arr_G == NULL ||
- arr_y == NULL ||
- arr_x == NULL ||
- arr_g == NULL) {
- // Dereference arrays
- Py_XDECREF(arr_offsetrow);
- Py_XDECREF(arr_b);
- Py_XDECREF(arr_U);
- Py_XDECREF(arr_W);
- Py_XDECREF(arr_phi);
- Py_XDECREF(arr_G);
- Py_XDECREF(arr_y);
- Py_XDECREF(arr_x);
- Py_XDECREF(arr_g);
- return NULL;
- }
-
- // Get C-types pointers to numpy arrays
- long *offsetrow = (long*)PyArray_DATA(arr_offsetrow);
- long *b = (long*)PyArray_DATA(arr_b);
- double *U = (double*)PyArray_DATA(arr_U);
- double *W = (double*)PyArray_DATA(arr_W);
- double *phi = (double*)PyArray_DATA(arr_phi);
- double *G = (double*)PyArray_DATA(arr_G);
- double *y = (double*)PyArray_DATA(arr_y);
- double *x = (double*)PyArray_DATA(arr_x);
- double *g = (double*)PyArray_DATA(arr_g);
-
- // Call the C function from libspleaf
- spleaf_solveLT(
- n,
- r,
- offsetrow,
- b,
- U,
- W,
- phi,
- G,
- y,
- x,
- g);
-
- // Dereference arrays
- Py_XDECREF(arr_offsetrow);
- Py_XDECREF(arr_b);
- Py_XDECREF(arr_U);
- Py_XDECREF(arr_W);
- Py_XDECREF(arr_phi);
- Py_XDECREF(arr_G);
- Py_XDECREF(arr_y);
- Py_XDECREF(arr_x);
- Py_XDECREF(arr_g);
-
- Py_RETURN_NONE;
-}
-
-static PyObject *libspleaf_spleaf_cholesky_back(PyObject *self, PyObject *args)
-{
- long n;
- long r;
- PyObject *obj_offsetrow;
- PyObject *obj_b;
- PyObject *obj_D;
- PyObject *obj_U;
- PyObject *obj_W;
- PyObject *obj_phi;
- PyObject *obj_G;
- PyObject *obj_grad_D;
- PyObject *obj_grad_Ucho;
- PyObject *obj_grad_W;
- PyObject *obj_grad_phicho;
- PyObject *obj_grad_G;
- PyObject *obj_grad_A;
- PyObject *obj_grad_U;
- PyObject *obj_grad_V;
- PyObject *obj_grad_phi;
- PyObject *obj_grad_F;
- PyObject *obj_S;
- PyObject *obj_Z;
-
- // Parse input tuple
- if (!PyArg_ParseTuple(args, "llOOOOOOOOOOOOOOOOOOO",
- &n,
- &r,
- &obj_offsetrow,
- &obj_b,
- &obj_D,
- &obj_U,
- &obj_W,
- &obj_phi,
- &obj_G,
- &obj_grad_D,
- &obj_grad_Ucho,
- &obj_grad_W,
- &obj_grad_phicho,
- &obj_grad_G,
- &obj_grad_A,
- &obj_grad_U,
- &obj_grad_V,
- &obj_grad_phi,
- &obj_grad_F,
- &obj_S,
- &obj_Z))
- return(NULL);
-
- // Interpret input objects as numpy arrays
- PyArrayObject *arr_offsetrow = (PyArrayObject*) PyArray_FROM_OTF(obj_offsetrow, NPY_LONG, NPY_ARRAY_IN_ARRAY);
- PyArrayObject *arr_b = (PyArrayObject*) PyArray_FROM_OTF(obj_b, NPY_LONG, NPY_ARRAY_IN_ARRAY);
- PyArrayObject *arr_D = (PyArrayObject*) PyArray_FROM_OTF(obj_D, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY);
- PyArrayObject *arr_U = (PyArrayObject*) PyArray_FROM_OTF(obj_U, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY);
- PyArrayObject *arr_W = (PyArrayObject*) PyArray_FROM_OTF(obj_W, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY);
- PyArrayObject *arr_phi = (PyArrayObject*) PyArray_FROM_OTF(obj_phi, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY);
- PyArrayObject *arr_G = (PyArrayObject*) PyArray_FROM_OTF(obj_G, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY);
- PyArrayObject *arr_grad_D = (PyArrayObject*) PyArray_FROM_OTF(obj_grad_D, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY);
- PyArrayObject *arr_grad_Ucho = (PyArrayObject*) PyArray_FROM_OTF(obj_grad_Ucho, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY);
- PyArrayObject *arr_grad_W = (PyArrayObject*) PyArray_FROM_OTF(obj_grad_W, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY);
- PyArrayObject *arr_grad_phicho = (PyArrayObject*) PyArray_FROM_OTF(obj_grad_phicho, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY);
- PyArrayObject *arr_grad_G = (PyArrayObject*) PyArray_FROM_OTF(obj_grad_G, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY);
- PyArrayObject *arr_grad_A = (PyArrayObject*) PyArray_FROM_OTF(obj_grad_A, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY);
- PyArrayObject *arr_grad_U = (PyArrayObject*) PyArray_FROM_OTF(obj_grad_U, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY);
- PyArrayObject *arr_grad_V = (PyArrayObject*) PyArray_FROM_OTF(obj_grad_V, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY);
- PyArrayObject *arr_grad_phi = (PyArrayObject*) PyArray_FROM_OTF(obj_grad_phi, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY);
- PyArrayObject *arr_grad_F = (PyArrayObject*) PyArray_FROM_OTF(obj_grad_F, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY);
- PyArrayObject *arr_S = (PyArrayObject*) PyArray_FROM_OTF(obj_S, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY);
- PyArrayObject *arr_Z = (PyArrayObject*) PyArray_FROM_OTF(obj_Z, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY);
-
- // Generate exception in case of failure
- if (
- arr_offsetrow == NULL ||
- arr_b == NULL ||
- arr_D == NULL ||
- arr_U == NULL ||
- arr_W == NULL ||
- arr_phi == NULL ||
- arr_G == NULL ||
- arr_grad_D == NULL ||
- arr_grad_Ucho == NULL ||
- arr_grad_W == NULL ||
- arr_grad_phicho == NULL ||
- arr_grad_G == NULL ||
- arr_grad_A == NULL ||
- arr_grad_U == NULL ||
- arr_grad_V == NULL ||
- arr_grad_phi == NULL ||
- arr_grad_F == NULL ||
- arr_S == NULL ||
- arr_Z == NULL) {
- // Dereference arrays
- Py_XDECREF(arr_offsetrow);
- Py_XDECREF(arr_b);
- Py_XDECREF(arr_D);
- Py_XDECREF(arr_U);
- Py_XDECREF(arr_W);
- Py_XDECREF(arr_phi);
- Py_XDECREF(arr_G);
- Py_XDECREF(arr_grad_D);
- Py_XDECREF(arr_grad_Ucho);
- Py_XDECREF(arr_grad_W);
- Py_XDECREF(arr_grad_phicho);
- Py_XDECREF(arr_grad_G);
- Py_XDECREF(arr_grad_A);
- Py_XDECREF(arr_grad_U);
- Py_XDECREF(arr_grad_V);
- Py_XDECREF(arr_grad_phi);
- Py_XDECREF(arr_grad_F);
- Py_XDECREF(arr_S);
- Py_XDECREF(arr_Z);
- return NULL;
- }
-
- // Get C-types pointers to numpy arrays
- long *offsetrow = (long*)PyArray_DATA(arr_offsetrow);
- long *b = (long*)PyArray_DATA(arr_b);
- double *D = (double*)PyArray_DATA(arr_D);
- double *U = (double*)PyArray_DATA(arr_U);
- double *W = (double*)PyArray_DATA(arr_W);
- double *phi = (double*)PyArray_DATA(arr_phi);
- double *G = (double*)PyArray_DATA(arr_G);
- double *grad_D = (double*)PyArray_DATA(arr_grad_D);
- double *grad_Ucho = (double*)PyArray_DATA(arr_grad_Ucho);
- double *grad_W = (double*)PyArray_DATA(arr_grad_W);
- double *grad_phicho = (double*)PyArray_DATA(arr_grad_phicho);
- double *grad_G = (double*)PyArray_DATA(arr_grad_G);
- double *grad_A = (double*)PyArray_DATA(arr_grad_A);
- double *grad_U = (double*)PyArray_DATA(arr_grad_U);
- double *grad_V = (double*)PyArray_DATA(arr_grad_V);
- double *grad_phi = (double*)PyArray_DATA(arr_grad_phi);
- double *grad_F = (double*)PyArray_DATA(arr_grad_F);
- double *S = (double*)PyArray_DATA(arr_S);
- double *Z = (double*)PyArray_DATA(arr_Z);
-
- // Call the C function from libspleaf
- spleaf_cholesky_back(
- n,
- r,
- offsetrow,
- b,
- D,
- U,
- W,
- phi,
- G,
- grad_D,
- grad_Ucho,
- grad_W,
- grad_phicho,
- grad_G,
- grad_A,
- grad_U,
- grad_V,
- grad_phi,
- grad_F,
- S,
- Z);
-
- // Dereference arrays
- Py_XDECREF(arr_offsetrow);
- Py_XDECREF(arr_b);
- Py_XDECREF(arr_D);
- Py_XDECREF(arr_U);
- Py_XDECREF(arr_W);
- Py_XDECREF(arr_phi);
- Py_XDECREF(arr_G);
- Py_XDECREF(arr_grad_D);
- Py_XDECREF(arr_grad_Ucho);
- Py_XDECREF(arr_grad_W);
- Py_XDECREF(arr_grad_phicho);
- Py_XDECREF(arr_grad_G);
- Py_XDECREF(arr_grad_A);
- Py_XDECREF(arr_grad_U);
- Py_XDECREF(arr_grad_V);
- Py_XDECREF(arr_grad_phi);
- Py_XDECREF(arr_grad_F);
- Py_XDECREF(arr_S);
- Py_XDECREF(arr_Z);
-
- Py_RETURN_NONE;
-}
-
-static PyObject *libspleaf_spleaf_dotL_back(PyObject *self, PyObject *args)
-{
- long n;
- long r;
- PyObject *obj_offsetrow;
- PyObject *obj_b;
- PyObject *obj_U;
- PyObject *obj_W;
- PyObject *obj_phi;
- PyObject *obj_G;
- PyObject *obj_x;
- PyObject *obj_grad_y;
- PyObject *obj_grad_U;
- PyObject *obj_grad_W;
- PyObject *obj_grad_phi;
- PyObject *obj_grad_G;
- PyObject *obj_grad_x;
- PyObject *obj_f;
-
- // Parse input tuple
- if (!PyArg_ParseTuple(args, "llOOOOOOOOOOOOOO",
- &n,
- &r,
- &obj_offsetrow,
- &obj_b,
- &obj_U,
- &obj_W,
- &obj_phi,
- &obj_G,
- &obj_x,
- &obj_grad_y,
- &obj_grad_U,
- &obj_grad_W,
- &obj_grad_phi,
- &obj_grad_G,
- &obj_grad_x,
- &obj_f))
- return(NULL);
-
- // Interpret input objects as numpy arrays
- PyArrayObject *arr_offsetrow = (PyArrayObject*) PyArray_FROM_OTF(obj_offsetrow, NPY_LONG, NPY_ARRAY_IN_ARRAY);
- PyArrayObject *arr_b = (PyArrayObject*) PyArray_FROM_OTF(obj_b, NPY_LONG, NPY_ARRAY_IN_ARRAY);
- PyArrayObject *arr_U = (PyArrayObject*) PyArray_FROM_OTF(obj_U, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY);
- PyArrayObject *arr_W = (PyArrayObject*) PyArray_FROM_OTF(obj_W, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY);
- PyArrayObject *arr_phi = (PyArrayObject*) PyArray_FROM_OTF(obj_phi, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY);
- PyArrayObject *arr_G = (PyArrayObject*) PyArray_FROM_OTF(obj_G, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY);
- PyArrayObject *arr_x = (PyArrayObject*) PyArray_FROM_OTF(obj_x, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY);
- PyArrayObject *arr_grad_y = (PyArrayObject*) PyArray_FROM_OTF(obj_grad_y, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY);
- PyArrayObject *arr_grad_U = (PyArrayObject*) PyArray_FROM_OTF(obj_grad_U, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY);
- PyArrayObject *arr_grad_W = (PyArrayObject*) PyArray_FROM_OTF(obj_grad_W, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY);
- PyArrayObject *arr_grad_phi = (PyArrayObject*) PyArray_FROM_OTF(obj_grad_phi, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY);
- PyArrayObject *arr_grad_G = (PyArrayObject*) PyArray_FROM_OTF(obj_grad_G, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY);
- PyArrayObject *arr_grad_x = (PyArrayObject*) PyArray_FROM_OTF(obj_grad_x, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY);
- PyArrayObject *arr_f = (PyArrayObject*) PyArray_FROM_OTF(obj_f, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY);
-
- // Generate exception in case of failure
- if (
- arr_offsetrow == NULL ||
- arr_b == NULL ||
- arr_U == NULL ||
- arr_W == NULL ||
- arr_phi == NULL ||
- arr_G == NULL ||
- arr_x == NULL ||
- arr_grad_y == NULL ||
- arr_grad_U == NULL ||
- arr_grad_W == NULL ||
- arr_grad_phi == NULL ||
- arr_grad_G == NULL ||
- arr_grad_x == NULL ||
- arr_f == NULL) {
- // Dereference arrays
- Py_XDECREF(arr_offsetrow);
- Py_XDECREF(arr_b);
- Py_XDECREF(arr_U);
- Py_XDECREF(arr_W);
- Py_XDECREF(arr_phi);
- Py_XDECREF(arr_G);
- Py_XDECREF(arr_x);
- Py_XDECREF(arr_grad_y);
- Py_XDECREF(arr_grad_U);
- Py_XDECREF(arr_grad_W);
- Py_XDECREF(arr_grad_phi);
- Py_XDECREF(arr_grad_G);
- Py_XDECREF(arr_grad_x);
- Py_XDECREF(arr_f);
- return NULL;
- }
-
- // Get C-types pointers to numpy arrays
- long *offsetrow = (long*)PyArray_DATA(arr_offsetrow);
- long *b = (long*)PyArray_DATA(arr_b);
- double *U = (double*)PyArray_DATA(arr_U);
- double *W = (double*)PyArray_DATA(arr_W);
- double *phi = (double*)PyArray_DATA(arr_phi);
- double *G = (double*)PyArray_DATA(arr_G);
- double *x = (double*)PyArray_DATA(arr_x);
- double *grad_y = (double*)PyArray_DATA(arr_grad_y);
- double *grad_U = (double*)PyArray_DATA(arr_grad_U);
- double *grad_W = (double*)PyArray_DATA(arr_grad_W);
- double *grad_phi = (double*)PyArray_DATA(arr_grad_phi);
- double *grad_G = (double*)PyArray_DATA(arr_grad_G);
- double *grad_x = (double*)PyArray_DATA(arr_grad_x);
- double *f = (double*)PyArray_DATA(arr_f);
-
- // Call the C function from libspleaf
- spleaf_dotL_back(
- n,
- r,
- offsetrow,
- b,
- U,
- W,
- phi,
- G,
- x,
- grad_y,
- grad_U,
- grad_W,
- grad_phi,
- grad_G,
- grad_x,
- f);
-
- // Dereference arrays
- Py_XDECREF(arr_offsetrow);
- Py_XDECREF(arr_b);
- Py_XDECREF(arr_U);
- Py_XDECREF(arr_W);
- Py_XDECREF(arr_phi);
- Py_XDECREF(arr_G);
- Py_XDECREF(arr_x);
- Py_XDECREF(arr_grad_y);
- Py_XDECREF(arr_grad_U);
- Py_XDECREF(arr_grad_W);
- Py_XDECREF(arr_grad_phi);
- Py_XDECREF(arr_grad_G);
- Py_XDECREF(arr_grad_x);
- Py_XDECREF(arr_f);
-
- Py_RETURN_NONE;
-}
-
-static PyObject *libspleaf_spleaf_solveL_back(PyObject *self, PyObject *args)
-{
- long n;
- long r;
- PyObject *obj_offsetrow;
- PyObject *obj_b;
- PyObject *obj_U;
- PyObject *obj_W;
- PyObject *obj_phi;
- PyObject *obj_G;
- PyObject *obj_x;
- PyObject *obj_grad_x;
- PyObject *obj_grad_U;
- PyObject *obj_grad_W;
- PyObject *obj_grad_phi;
- PyObject *obj_grad_G;
- PyObject *obj_grad_y;
- PyObject *obj_f;
-
- // Parse input tuple
- if (!PyArg_ParseTuple(args, "llOOOOOOOOOOOOOO",
- &n,
- &r,
- &obj_offsetrow,
- &obj_b,
- &obj_U,
- &obj_W,
- &obj_phi,
- &obj_G,
- &obj_x,
- &obj_grad_x,
- &obj_grad_U,
- &obj_grad_W,
- &obj_grad_phi,
- &obj_grad_G,
- &obj_grad_y,
- &obj_f))
- return(NULL);
-
- // Interpret input objects as numpy arrays
- PyArrayObject *arr_offsetrow = (PyArrayObject*) PyArray_FROM_OTF(obj_offsetrow, NPY_LONG, NPY_ARRAY_IN_ARRAY);
- PyArrayObject *arr_b = (PyArrayObject*) PyArray_FROM_OTF(obj_b, NPY_LONG, NPY_ARRAY_IN_ARRAY);
- PyArrayObject *arr_U = (PyArrayObject*) PyArray_FROM_OTF(obj_U, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY);
- PyArrayObject *arr_W = (PyArrayObject*) PyArray_FROM_OTF(obj_W, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY);
- PyArrayObject *arr_phi = (PyArrayObject*) PyArray_FROM_OTF(obj_phi, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY);
- PyArrayObject *arr_G = (PyArrayObject*) PyArray_FROM_OTF(obj_G, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY);
- PyArrayObject *arr_x = (PyArrayObject*) PyArray_FROM_OTF(obj_x, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY);
- PyArrayObject *arr_grad_x = (PyArrayObject*) PyArray_FROM_OTF(obj_grad_x, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY);
- PyArrayObject *arr_grad_U = (PyArrayObject*) PyArray_FROM_OTF(obj_grad_U, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY);
- PyArrayObject *arr_grad_W = (PyArrayObject*) PyArray_FROM_OTF(obj_grad_W, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY);
- PyArrayObject *arr_grad_phi = (PyArrayObject*) PyArray_FROM_OTF(obj_grad_phi, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY);
- PyArrayObject *arr_grad_G = (PyArrayObject*) PyArray_FROM_OTF(obj_grad_G, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY);
- PyArrayObject *arr_grad_y = (PyArrayObject*) PyArray_FROM_OTF(obj_grad_y, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY);
- PyArrayObject *arr_f = (PyArrayObject*) PyArray_FROM_OTF(obj_f, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY);
-
- // Generate exception in case of failure
- if (
- arr_offsetrow == NULL ||
- arr_b == NULL ||
- arr_U == NULL ||
- arr_W == NULL ||
- arr_phi == NULL ||
- arr_G == NULL ||
- arr_x == NULL ||
- arr_grad_x == NULL ||
- arr_grad_U == NULL ||
- arr_grad_W == NULL ||
- arr_grad_phi == NULL ||
- arr_grad_G == NULL ||
- arr_grad_y == NULL ||
- arr_f == NULL) {
- // Dereference arrays
- Py_XDECREF(arr_offsetrow);
- Py_XDECREF(arr_b);
- Py_XDECREF(arr_U);
- Py_XDECREF(arr_W);
- Py_XDECREF(arr_phi);
- Py_XDECREF(arr_G);
- Py_XDECREF(arr_x);
- Py_XDECREF(arr_grad_x);
- Py_XDECREF(arr_grad_U);
- Py_XDECREF(arr_grad_W);
- Py_XDECREF(arr_grad_phi);
- Py_XDECREF(arr_grad_G);
- Py_XDECREF(arr_grad_y);
- Py_XDECREF(arr_f);
- return NULL;
- }
-
- // Get C-types pointers to numpy arrays
- long *offsetrow = (long*)PyArray_DATA(arr_offsetrow);
- long *b = (long*)PyArray_DATA(arr_b);
- double *U = (double*)PyArray_DATA(arr_U);
- double *W = (double*)PyArray_DATA(arr_W);
- double *phi = (double*)PyArray_DATA(arr_phi);
- double *G = (double*)PyArray_DATA(arr_G);
- double *x = (double*)PyArray_DATA(arr_x);
- double *grad_x = (double*)PyArray_DATA(arr_grad_x);
- double *grad_U = (double*)PyArray_DATA(arr_grad_U);
- double *grad_W = (double*)PyArray_DATA(arr_grad_W);
- double *grad_phi = (double*)PyArray_DATA(arr_grad_phi);
- double *grad_G = (double*)PyArray_DATA(arr_grad_G);
- double *grad_y = (double*)PyArray_DATA(arr_grad_y);
- double *f = (double*)PyArray_DATA(arr_f);
-
- // Call the C function from libspleaf
- spleaf_solveL_back(
- n,
- r,
- offsetrow,
- b,
- U,
- W,
- phi,
- G,
- x,
- grad_x,
- grad_U,
- grad_W,
- grad_phi,
- grad_G,
- grad_y,
- f);
-
- // Dereference arrays
- Py_XDECREF(arr_offsetrow);
- Py_XDECREF(arr_b);
- Py_XDECREF(arr_U);
- Py_XDECREF(arr_W);
- Py_XDECREF(arr_phi);
- Py_XDECREF(arr_G);
- Py_XDECREF(arr_x);
- Py_XDECREF(arr_grad_x);
- Py_XDECREF(arr_grad_U);
- Py_XDECREF(arr_grad_W);
- Py_XDECREF(arr_grad_phi);
- Py_XDECREF(arr_grad_G);
- Py_XDECREF(arr_grad_y);
- Py_XDECREF(arr_f);
-
- Py_RETURN_NONE;
-}
-
-static PyObject *libspleaf_spleaf_dotLT_back(PyObject *self, PyObject *args)
-{
- long n;
- long r;
- PyObject *obj_offsetrow;
- PyObject *obj_b;
- PyObject *obj_U;
- PyObject *obj_W;
- PyObject *obj_phi;
- PyObject *obj_G;
- PyObject *obj_x;
- PyObject *obj_grad_y;
- PyObject *obj_grad_U;
- PyObject *obj_grad_W;
- PyObject *obj_grad_phi;
- PyObject *obj_grad_G;
- PyObject *obj_grad_x;
- PyObject *obj_g;
-
- // Parse input tuple
- if (!PyArg_ParseTuple(args, "llOOOOOOOOOOOOOO",
- &n,
- &r,
- &obj_offsetrow,
- &obj_b,
- &obj_U,
- &obj_W,
- &obj_phi,
- &obj_G,
- &obj_x,
- &obj_grad_y,
- &obj_grad_U,
- &obj_grad_W,
- &obj_grad_phi,
- &obj_grad_G,
- &obj_grad_x,
- &obj_g))
- return(NULL);
-
- // Interpret input objects as numpy arrays
- PyArrayObject *arr_offsetrow = (PyArrayObject*) PyArray_FROM_OTF(obj_offsetrow, NPY_LONG, NPY_ARRAY_IN_ARRAY);
- PyArrayObject *arr_b = (PyArrayObject*) PyArray_FROM_OTF(obj_b, NPY_LONG, NPY_ARRAY_IN_ARRAY);
- PyArrayObject *arr_U = (PyArrayObject*) PyArray_FROM_OTF(obj_U, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY);
- PyArrayObject *arr_W = (PyArrayObject*) PyArray_FROM_OTF(obj_W, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY);
- PyArrayObject *arr_phi = (PyArrayObject*) PyArray_FROM_OTF(obj_phi, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY);
- PyArrayObject *arr_G = (PyArrayObject*) PyArray_FROM_OTF(obj_G, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY);
- PyArrayObject *arr_x = (PyArrayObject*) PyArray_FROM_OTF(obj_x, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY);
- PyArrayObject *arr_grad_y = (PyArrayObject*) PyArray_FROM_OTF(obj_grad_y, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY);
- PyArrayObject *arr_grad_U = (PyArrayObject*) PyArray_FROM_OTF(obj_grad_U, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY);
- PyArrayObject *arr_grad_W = (PyArrayObject*) PyArray_FROM_OTF(obj_grad_W, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY);
- PyArrayObject *arr_grad_phi = (PyArrayObject*) PyArray_FROM_OTF(obj_grad_phi, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY);
- PyArrayObject *arr_grad_G = (PyArrayObject*) PyArray_FROM_OTF(obj_grad_G, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY);
- PyArrayObject *arr_grad_x = (PyArrayObject*) PyArray_FROM_OTF(obj_grad_x, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY);
- PyArrayObject *arr_g = (PyArrayObject*) PyArray_FROM_OTF(obj_g, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY);
-
- // Generate exception in case of failure
- if (
- arr_offsetrow == NULL ||
- arr_b == NULL ||
- arr_U == NULL ||
- arr_W == NULL ||
- arr_phi == NULL ||
- arr_G == NULL ||
- arr_x == NULL ||
- arr_grad_y == NULL ||
- arr_grad_U == NULL ||
- arr_grad_W == NULL ||
- arr_grad_phi == NULL ||
- arr_grad_G == NULL ||
- arr_grad_x == NULL ||
- arr_g == NULL) {
- // Dereference arrays
- Py_XDECREF(arr_offsetrow);
- Py_XDECREF(arr_b);
- Py_XDECREF(arr_U);
- Py_XDECREF(arr_W);
- Py_XDECREF(arr_phi);
- Py_XDECREF(arr_G);
- Py_XDECREF(arr_x);
- Py_XDECREF(arr_grad_y);
- Py_XDECREF(arr_grad_U);
- Py_XDECREF(arr_grad_W);
- Py_XDECREF(arr_grad_phi);
- Py_XDECREF(arr_grad_G);
- Py_XDECREF(arr_grad_x);
- Py_XDECREF(arr_g);
- return NULL;
- }
-
- // Get C-types pointers to numpy arrays
- long *offsetrow = (long*)PyArray_DATA(arr_offsetrow);
- long *b = (long*)PyArray_DATA(arr_b);
- double *U = (double*)PyArray_DATA(arr_U);
- double *W = (double*)PyArray_DATA(arr_W);
- double *phi = (double*)PyArray_DATA(arr_phi);
- double *G = (double*)PyArray_DATA(arr_G);
- double *x = (double*)PyArray_DATA(arr_x);
- double *grad_y = (double*)PyArray_DATA(arr_grad_y);
- double *grad_U = (double*)PyArray_DATA(arr_grad_U);
- double *grad_W = (double*)PyArray_DATA(arr_grad_W);
- double *grad_phi = (double*)PyArray_DATA(arr_grad_phi);
- double *grad_G = (double*)PyArray_DATA(arr_grad_G);
- double *grad_x = (double*)PyArray_DATA(arr_grad_x);
- double *g = (double*)PyArray_DATA(arr_g);
-
- // Call the C function from libspleaf
- spleaf_dotLT_back(
- n,
- r,
- offsetrow,
- b,
- U,
- W,
- phi,
- G,
- x,
- grad_y,
- grad_U,
- grad_W,
- grad_phi,
- grad_G,
- grad_x,
- g);
-
- // Dereference arrays
- Py_XDECREF(arr_offsetrow);
- Py_XDECREF(arr_b);
- Py_XDECREF(arr_U);
- Py_XDECREF(arr_W);
- Py_XDECREF(arr_phi);
- Py_XDECREF(arr_G);
- Py_XDECREF(arr_x);
- Py_XDECREF(arr_grad_y);
- Py_XDECREF(arr_grad_U);
- Py_XDECREF(arr_grad_W);
- Py_XDECREF(arr_grad_phi);
- Py_XDECREF(arr_grad_G);
- Py_XDECREF(arr_grad_x);
- Py_XDECREF(arr_g);
-
- Py_RETURN_NONE;
-}
-
-static PyObject *libspleaf_spleaf_solveLT_back(PyObject *self, PyObject *args)
-{
- long n;
- long r;
- PyObject *obj_offsetrow;
- PyObject *obj_b;
- PyObject *obj_U;
- PyObject *obj_W;
- PyObject *obj_phi;
- PyObject *obj_G;
- PyObject *obj_x;
- PyObject *obj_grad_x;
- PyObject *obj_grad_U;
- PyObject *obj_grad_W;
- PyObject *obj_grad_phi;
- PyObject *obj_grad_G;
- PyObject *obj_grad_y;
- PyObject *obj_g;
-
- // Parse input tuple
- if (!PyArg_ParseTuple(args, "llOOOOOOOOOOOOOO",
- &n,
- &r,
- &obj_offsetrow,
- &obj_b,
- &obj_U,
- &obj_W,
- &obj_phi,
- &obj_G,
- &obj_x,
- &obj_grad_x,
- &obj_grad_U,
- &obj_grad_W,
- &obj_grad_phi,
- &obj_grad_G,
- &obj_grad_y,
- &obj_g))
- return(NULL);
-
- // Interpret input objects as numpy arrays
- PyArrayObject *arr_offsetrow = (PyArrayObject*) PyArray_FROM_OTF(obj_offsetrow, NPY_LONG, NPY_ARRAY_IN_ARRAY);
- PyArrayObject *arr_b = (PyArrayObject*) PyArray_FROM_OTF(obj_b, NPY_LONG, NPY_ARRAY_IN_ARRAY);
- PyArrayObject *arr_U = (PyArrayObject*) PyArray_FROM_OTF(obj_U, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY);
- PyArrayObject *arr_W = (PyArrayObject*) PyArray_FROM_OTF(obj_W, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY);
- PyArrayObject *arr_phi = (PyArrayObject*) PyArray_FROM_OTF(obj_phi, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY);
- PyArrayObject *arr_G = (PyArrayObject*) PyArray_FROM_OTF(obj_G, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY);
- PyArrayObject *arr_x = (PyArrayObject*) PyArray_FROM_OTF(obj_x, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY);
- PyArrayObject *arr_grad_x = (PyArrayObject*) PyArray_FROM_OTF(obj_grad_x, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY);
- PyArrayObject *arr_grad_U = (PyArrayObject*) PyArray_FROM_OTF(obj_grad_U, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY);
- PyArrayObject *arr_grad_W = (PyArrayObject*) PyArray_FROM_OTF(obj_grad_W, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY);
- PyArrayObject *arr_grad_phi = (PyArrayObject*) PyArray_FROM_OTF(obj_grad_phi, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY);
- PyArrayObject *arr_grad_G = (PyArrayObject*) PyArray_FROM_OTF(obj_grad_G, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY);
- PyArrayObject *arr_grad_y = (PyArrayObject*) PyArray_FROM_OTF(obj_grad_y, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY);
- PyArrayObject *arr_g = (PyArrayObject*) PyArray_FROM_OTF(obj_g, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY);
-
- // Generate exception in case of failure
- if (
- arr_offsetrow == NULL ||
- arr_b == NULL ||
- arr_U == NULL ||
- arr_W == NULL ||
- arr_phi == NULL ||
- arr_G == NULL ||
- arr_x == NULL ||
- arr_grad_x == NULL ||
- arr_grad_U == NULL ||
- arr_grad_W == NULL ||
- arr_grad_phi == NULL ||
- arr_grad_G == NULL ||
- arr_grad_y == NULL ||
- arr_g == NULL) {
- // Dereference arrays
- Py_XDECREF(arr_offsetrow);
- Py_XDECREF(arr_b);
- Py_XDECREF(arr_U);
- Py_XDECREF(arr_W);
- Py_XDECREF(arr_phi);
- Py_XDECREF(arr_G);
- Py_XDECREF(arr_x);
- Py_XDECREF(arr_grad_x);
- Py_XDECREF(arr_grad_U);
- Py_XDECREF(arr_grad_W);
- Py_XDECREF(arr_grad_phi);
- Py_XDECREF(arr_grad_G);
- Py_XDECREF(arr_grad_y);
- Py_XDECREF(arr_g);
- return NULL;
- }
-
- // Get C-types pointers to numpy arrays
- long *offsetrow = (long*)PyArray_DATA(arr_offsetrow);
- long *b = (long*)PyArray_DATA(arr_b);
- double *U = (double*)PyArray_DATA(arr_U);
- double *W = (double*)PyArray_DATA(arr_W);
- double *phi = (double*)PyArray_DATA(arr_phi);
- double *G = (double*)PyArray_DATA(arr_G);
- double *x = (double*)PyArray_DATA(arr_x);
- double *grad_x = (double*)PyArray_DATA(arr_grad_x);
- double *grad_U = (double*)PyArray_DATA(arr_grad_U);
- double *grad_W = (double*)PyArray_DATA(arr_grad_W);
- double *grad_phi = (double*)PyArray_DATA(arr_grad_phi);
- double *grad_G = (double*)PyArray_DATA(arr_grad_G);
- double *grad_y = (double*)PyArray_DATA(arr_grad_y);
- double *g = (double*)PyArray_DATA(arr_g);
-
- // Call the C function from libspleaf
- spleaf_solveLT_back(
- n,
- r,
- offsetrow,
- b,
- U,
- W,
- phi,
- G,
- x,
- grad_x,
- grad_U,
- grad_W,
- grad_phi,
- grad_G,
- grad_y,
- g);
-
- // Dereference arrays
- Py_XDECREF(arr_offsetrow);
- Py_XDECREF(arr_b);
- Py_XDECREF(arr_U);
- Py_XDECREF(arr_W);
- Py_XDECREF(arr_phi);
- Py_XDECREF(arr_G);
- Py_XDECREF(arr_x);
- Py_XDECREF(arr_grad_x);
- Py_XDECREF(arr_grad_U);
- Py_XDECREF(arr_grad_W);
- Py_XDECREF(arr_grad_phi);
- Py_XDECREF(arr_grad_G);
- Py_XDECREF(arr_grad_y);
- Py_XDECREF(arr_g);
-
- Py_RETURN_NONE;
-}
-
-static PyObject *libspleaf_spleaf_expandsep(PyObject *self, PyObject *args)
-{
- long n;
- long r;
- long rsi;
- PyObject *obj_sepindex;
- PyObject *obj_U;
- PyObject *obj_V;
- PyObject *obj_phi;
- PyObject *obj_K;
-
- // Parse input tuple
- if (!PyArg_ParseTuple(args, "lllOOOOO",
- &n,
- &r,
- &rsi,
- &obj_sepindex,
- &obj_U,
- &obj_V,
- &obj_phi,
- &obj_K))
- return(NULL);
-
- // Interpret input objects as numpy arrays
- PyArrayObject *arr_sepindex = (PyArrayObject*) PyArray_FROM_OTF(obj_sepindex, NPY_LONG, NPY_ARRAY_IN_ARRAY);
- PyArrayObject *arr_U = (PyArrayObject*) PyArray_FROM_OTF(obj_U, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY);
- PyArrayObject *arr_V = (PyArrayObject*) PyArray_FROM_OTF(obj_V, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY);
- PyArrayObject *arr_phi = (PyArrayObject*) PyArray_FROM_OTF(obj_phi, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY);
- PyArrayObject *arr_K = (PyArrayObject*) PyArray_FROM_OTF(obj_K, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY);
-
- // Generate exception in case of failure
- if (
- arr_sepindex == NULL ||
- arr_U == NULL ||
- arr_V == NULL ||
- arr_phi == NULL ||
- arr_K == NULL) {
- // Dereference arrays
- Py_XDECREF(arr_sepindex);
- Py_XDECREF(arr_U);
- Py_XDECREF(arr_V);
- Py_XDECREF(arr_phi);
- Py_XDECREF(arr_K);
- return NULL;
- }
-
- // Get C-types pointers to numpy arrays
- long *sepindex = (long*)PyArray_DATA(arr_sepindex);
- double *U = (double*)PyArray_DATA(arr_U);
- double *V = (double*)PyArray_DATA(arr_V);
- double *phi = (double*)PyArray_DATA(arr_phi);
- double *K = (double*)PyArray_DATA(arr_K);
-
- // Call the C function from libspleaf
- spleaf_expandsep(
- n,
- r,
- rsi,
- sepindex,
- U,
- V,
- phi,
- K);
-
- // Dereference arrays
- Py_XDECREF(arr_sepindex);
- Py_XDECREF(arr_U);
- Py_XDECREF(arr_V);
- Py_XDECREF(arr_phi);
- Py_XDECREF(arr_K);
-
- Py_RETURN_NONE;
-}
-
-static PyObject *libspleaf_spleaf_expandsepmixt(PyObject *self, PyObject *args)
-{
- long n1;
- long n2;
- long r;
- long rsi;
- PyObject *obj_sepindex;
- PyObject *obj_U1;
- PyObject *obj_V1;
- PyObject *obj_phi1;
- PyObject *obj_U2;
- PyObject *obj_V2;
- PyObject *obj_ref2left;
- PyObject *obj_phi2left;
- PyObject *obj_phi2right;
- PyObject *obj_Km;
-
- // Parse input tuple
- if (!PyArg_ParseTuple(args, "llllOOOOOOOOOO",
- &n1,
- &n2,
- &r,
- &rsi,
- &obj_sepindex,
- &obj_U1,
- &obj_V1,
- &obj_phi1,
- &obj_U2,
- &obj_V2,
- &obj_ref2left,
- &obj_phi2left,
- &obj_phi2right,
- &obj_Km))
- return(NULL);
-
- // Interpret input objects as numpy arrays
- PyArrayObject *arr_sepindex = (PyArrayObject*) PyArray_FROM_OTF(obj_sepindex, NPY_LONG, NPY_ARRAY_IN_ARRAY);
- PyArrayObject *arr_U1 = (PyArrayObject*) PyArray_FROM_OTF(obj_U1, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY);
- PyArrayObject *arr_V1 = (PyArrayObject*) PyArray_FROM_OTF(obj_V1, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY);
- PyArrayObject *arr_phi1 = (PyArrayObject*) PyArray_FROM_OTF(obj_phi1, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY);
- PyArrayObject *arr_U2 = (PyArrayObject*) PyArray_FROM_OTF(obj_U2, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY);
- PyArrayObject *arr_V2 = (PyArrayObject*) PyArray_FROM_OTF(obj_V2, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY);
- PyArrayObject *arr_ref2left = (PyArrayObject*) PyArray_FROM_OTF(obj_ref2left, NPY_LONG, NPY_ARRAY_IN_ARRAY);
- PyArrayObject *arr_phi2left = (PyArrayObject*) PyArray_FROM_OTF(obj_phi2left, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY);
- PyArrayObject *arr_phi2right = (PyArrayObject*) PyArray_FROM_OTF(obj_phi2right, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY);
- PyArrayObject *arr_Km = (PyArrayObject*) PyArray_FROM_OTF(obj_Km, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY);
-
- // Generate exception in case of failure
- if (
- arr_sepindex == NULL ||
- arr_U1 == NULL ||
- arr_V1 == NULL ||
- arr_phi1 == NULL ||
- arr_U2 == NULL ||
- arr_V2 == NULL ||
- arr_ref2left == NULL ||
- arr_phi2left == NULL ||
- arr_phi2right == NULL ||
- arr_Km == NULL) {
- // Dereference arrays
- Py_XDECREF(arr_sepindex);
- Py_XDECREF(arr_U1);
- Py_XDECREF(arr_V1);
- Py_XDECREF(arr_phi1);
- Py_XDECREF(arr_U2);
- Py_XDECREF(arr_V2);
- Py_XDECREF(arr_ref2left);
- Py_XDECREF(arr_phi2left);
- Py_XDECREF(arr_phi2right);
- Py_XDECREF(arr_Km);
- return NULL;
- }
-
- // Get C-types pointers to numpy arrays
- long *sepindex = (long*)PyArray_DATA(arr_sepindex);
- double *U1 = (double*)PyArray_DATA(arr_U1);
- double *V1 = (double*)PyArray_DATA(arr_V1);
- double *phi1 = (double*)PyArray_DATA(arr_phi1);
- double *U2 = (double*)PyArray_DATA(arr_U2);
- double *V2 = (double*)PyArray_DATA(arr_V2);
- long *ref2left = (long*)PyArray_DATA(arr_ref2left);
- double *phi2left = (double*)PyArray_DATA(arr_phi2left);
- double *phi2right = (double*)PyArray_DATA(arr_phi2right);
- double *Km = (double*)PyArray_DATA(arr_Km);
-
- // Call the C function from libspleaf
- spleaf_expandsepmixt(
- n1,
- n2,
- r,
- rsi,
- sepindex,
- U1,
- V1,
- phi1,
- U2,
- V2,
- ref2left,
- phi2left,
- phi2right,
- Km);
-
- // Dereference arrays
- Py_XDECREF(arr_sepindex);
- Py_XDECREF(arr_U1);
- Py_XDECREF(arr_V1);
- Py_XDECREF(arr_phi1);
- Py_XDECREF(arr_U2);
- Py_XDECREF(arr_V2);
- Py_XDECREF(arr_ref2left);
- Py_XDECREF(arr_phi2left);
- Py_XDECREF(arr_phi2right);
- Py_XDECREF(arr_Km);
-
- Py_RETURN_NONE;
-}
-
-static PyObject *libspleaf_spleaf_expandantisep(PyObject *self, PyObject *args)
-{
- long n;
- long r;
- long rsi;
- PyObject *obj_sepindex;
- PyObject *obj_U;
- PyObject *obj_V;
- PyObject *obj_phi;
- PyObject *obj_K;
-
- // Parse input tuple
- if (!PyArg_ParseTuple(args, "lllOOOOO",
- &n,
- &r,
- &rsi,
- &obj_sepindex,
- &obj_U,
- &obj_V,
- &obj_phi,
- &obj_K))
- return(NULL);
-
- // Interpret input objects as numpy arrays
- PyArrayObject *arr_sepindex = (PyArrayObject*) PyArray_FROM_OTF(obj_sepindex, NPY_LONG, NPY_ARRAY_IN_ARRAY);
- PyArrayObject *arr_U = (PyArrayObject*) PyArray_FROM_OTF(obj_U, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY);
- PyArrayObject *arr_V = (PyArrayObject*) PyArray_FROM_OTF(obj_V, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY);
- PyArrayObject *arr_phi = (PyArrayObject*) PyArray_FROM_OTF(obj_phi, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY);
- PyArrayObject *arr_K = (PyArrayObject*) PyArray_FROM_OTF(obj_K, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY);
-
- // Generate exception in case of failure
- if (
- arr_sepindex == NULL ||
- arr_U == NULL ||
- arr_V == NULL ||
- arr_phi == NULL ||
- arr_K == NULL) {
- // Dereference arrays
- Py_XDECREF(arr_sepindex);
- Py_XDECREF(arr_U);
- Py_XDECREF(arr_V);
- Py_XDECREF(arr_phi);
- Py_XDECREF(arr_K);
- return NULL;
- }
-
- // Get C-types pointers to numpy arrays
- long *sepindex = (long*)PyArray_DATA(arr_sepindex);
- double *U = (double*)PyArray_DATA(arr_U);
- double *V = (double*)PyArray_DATA(arr_V);
- double *phi = (double*)PyArray_DATA(arr_phi);
- double *K = (double*)PyArray_DATA(arr_K);
-
- // Call the C function from libspleaf
- spleaf_expandantisep(
- n,
- r,
- rsi,
- sepindex,
- U,
- V,
- phi,
- K);
-
- // Dereference arrays
- Py_XDECREF(arr_sepindex);
- Py_XDECREF(arr_U);
- Py_XDECREF(arr_V);
- Py_XDECREF(arr_phi);
- Py_XDECREF(arr_K);
-
- Py_RETURN_NONE;
-}
-
-static PyObject *libspleaf_spleaf_dotsep(PyObject *self, PyObject *args)
-{
- long n;
- long r;
- long rsi;
- PyObject *obj_sepindex;
- PyObject *obj_U;
- PyObject *obj_V;
- PyObject *obj_phi;
- PyObject *obj_x;
- PyObject *obj_y;
-
- // Parse input tuple
- if (!PyArg_ParseTuple(args, "lllOOOOOO",
- &n,
- &r,
- &rsi,
- &obj_sepindex,
- &obj_U,
- &obj_V,
- &obj_phi,
- &obj_x,
- &obj_y))
- return(NULL);
-
- // Interpret input objects as numpy arrays
- PyArrayObject *arr_sepindex = (PyArrayObject*) PyArray_FROM_OTF(obj_sepindex, NPY_LONG, NPY_ARRAY_IN_ARRAY);
- PyArrayObject *arr_U = (PyArrayObject*) PyArray_FROM_OTF(obj_U, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY);
- PyArrayObject *arr_V = (PyArrayObject*) PyArray_FROM_OTF(obj_V, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY);
- PyArrayObject *arr_phi = (PyArrayObject*) PyArray_FROM_OTF(obj_phi, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY);
- PyArrayObject *arr_x = (PyArrayObject*) PyArray_FROM_OTF(obj_x, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY);
- PyArrayObject *arr_y = (PyArrayObject*) PyArray_FROM_OTF(obj_y, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY);
-
- // Generate exception in case of failure
- if (
- arr_sepindex == NULL ||
- arr_U == NULL ||
- arr_V == NULL ||
- arr_phi == NULL ||
- arr_x == NULL ||
- arr_y == NULL) {
- // Dereference arrays
- Py_XDECREF(arr_sepindex);
- Py_XDECREF(arr_U);
- Py_XDECREF(arr_V);
- Py_XDECREF(arr_phi);
- Py_XDECREF(arr_x);
- Py_XDECREF(arr_y);
- return NULL;
- }
-
- // Get C-types pointers to numpy arrays
- long *sepindex = (long*)PyArray_DATA(arr_sepindex);
- double *U = (double*)PyArray_DATA(arr_U);
- double *V = (double*)PyArray_DATA(arr_V);
- double *phi = (double*)PyArray_DATA(arr_phi);
- double *x = (double*)PyArray_DATA(arr_x);
- double *y = (double*)PyArray_DATA(arr_y);
-
- // Call the C function from libspleaf
- spleaf_dotsep(
- n,
- r,
- rsi,
- sepindex,
- U,
- V,
- phi,
- x,
- y);
-
- // Dereference arrays
- Py_XDECREF(arr_sepindex);
- Py_XDECREF(arr_U);
- Py_XDECREF(arr_V);
- Py_XDECREF(arr_phi);
- Py_XDECREF(arr_x);
- Py_XDECREF(arr_y);
-
- Py_RETURN_NONE;
-}
-
-static PyObject *libspleaf_spleaf_dotsepmixt(PyObject *self, PyObject *args)
-{
- long n1;
- long n2;
- long r;
- long rsi;
- PyObject *obj_sepindex;
- PyObject *obj_U1;
- PyObject *obj_V1;
- PyObject *obj_phi1;
- PyObject *obj_U2;
- PyObject *obj_V2;
- PyObject *obj_ref2left;
- PyObject *obj_phi2left;
- PyObject *obj_phi2right;
- PyObject *obj_x;
- PyObject *obj_y;
-
- // Parse input tuple
- if (!PyArg_ParseTuple(args, "llllOOOOOOOOOOO",
- &n1,
- &n2,
- &r,
- &rsi,
- &obj_sepindex,
- &obj_U1,
- &obj_V1,
- &obj_phi1,
- &obj_U2,
- &obj_V2,
- &obj_ref2left,
- &obj_phi2left,
- &obj_phi2right,
- &obj_x,
- &obj_y))
- return(NULL);
-
- // Interpret input objects as numpy arrays
- PyArrayObject *arr_sepindex = (PyArrayObject*) PyArray_FROM_OTF(obj_sepindex, NPY_LONG, NPY_ARRAY_IN_ARRAY);
- PyArrayObject *arr_U1 = (PyArrayObject*) PyArray_FROM_OTF(obj_U1, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY);
- PyArrayObject *arr_V1 = (PyArrayObject*) PyArray_FROM_OTF(obj_V1, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY);
- PyArrayObject *arr_phi1 = (PyArrayObject*) PyArray_FROM_OTF(obj_phi1, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY);
- PyArrayObject *arr_U2 = (PyArrayObject*) PyArray_FROM_OTF(obj_U2, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY);
- PyArrayObject *arr_V2 = (PyArrayObject*) PyArray_FROM_OTF(obj_V2, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY);
- PyArrayObject *arr_ref2left = (PyArrayObject*) PyArray_FROM_OTF(obj_ref2left, NPY_LONG, NPY_ARRAY_IN_ARRAY);
- PyArrayObject *arr_phi2left = (PyArrayObject*) PyArray_FROM_OTF(obj_phi2left, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY);
- PyArrayObject *arr_phi2right = (PyArrayObject*) PyArray_FROM_OTF(obj_phi2right, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY);
- PyArrayObject *arr_x = (PyArrayObject*) PyArray_FROM_OTF(obj_x, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY);
- PyArrayObject *arr_y = (PyArrayObject*) PyArray_FROM_OTF(obj_y, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY);
-
- // Generate exception in case of failure
- if (
- arr_sepindex == NULL ||
- arr_U1 == NULL ||
- arr_V1 == NULL ||
- arr_phi1 == NULL ||
- arr_U2 == NULL ||
- arr_V2 == NULL ||
- arr_ref2left == NULL ||
- arr_phi2left == NULL ||
- arr_phi2right == NULL ||
- arr_x == NULL ||
- arr_y == NULL) {
- // Dereference arrays
- Py_XDECREF(arr_sepindex);
- Py_XDECREF(arr_U1);
- Py_XDECREF(arr_V1);
- Py_XDECREF(arr_phi1);
- Py_XDECREF(arr_U2);
- Py_XDECREF(arr_V2);
- Py_XDECREF(arr_ref2left);
- Py_XDECREF(arr_phi2left);
- Py_XDECREF(arr_phi2right);
- Py_XDECREF(arr_x);
- Py_XDECREF(arr_y);
- return NULL;
- }
-
- // Get C-types pointers to numpy arrays
- long *sepindex = (long*)PyArray_DATA(arr_sepindex);
- double *U1 = (double*)PyArray_DATA(arr_U1);
- double *V1 = (double*)PyArray_DATA(arr_V1);
- double *phi1 = (double*)PyArray_DATA(arr_phi1);
- double *U2 = (double*)PyArray_DATA(arr_U2);
- double *V2 = (double*)PyArray_DATA(arr_V2);
- long *ref2left = (long*)PyArray_DATA(arr_ref2left);
- double *phi2left = (double*)PyArray_DATA(arr_phi2left);
- double *phi2right = (double*)PyArray_DATA(arr_phi2right);
- double *x = (double*)PyArray_DATA(arr_x);
- double *y = (double*)PyArray_DATA(arr_y);
-
- // Call the C function from libspleaf
- spleaf_dotsepmixt(
- n1,
- n2,
- r,
- rsi,
- sepindex,
- U1,
- V1,
- phi1,
- U2,
- V2,
- ref2left,
- phi2left,
- phi2right,
- x,
- y);
-
- // Dereference arrays
- Py_XDECREF(arr_sepindex);
- Py_XDECREF(arr_U1);
- Py_XDECREF(arr_V1);
- Py_XDECREF(arr_phi1);
- Py_XDECREF(arr_U2);
- Py_XDECREF(arr_V2);
- Py_XDECREF(arr_ref2left);
- Py_XDECREF(arr_phi2left);
- Py_XDECREF(arr_phi2right);
- Py_XDECREF(arr_x);
- Py_XDECREF(arr_y);
-
- Py_RETURN_NONE;
-}
-
-static PyObject *libspleaf_spleaf_dotantisep(PyObject *self, PyObject *args)
-{
- long n;
- long r;
- long rsi;
- PyObject *obj_sepindex;
- PyObject *obj_U;
- PyObject *obj_V;
- PyObject *obj_phi;
- PyObject *obj_x;
- PyObject *obj_y;
-
- // Parse input tuple
- if (!PyArg_ParseTuple(args, "lllOOOOOO",
- &n,
- &r,
- &rsi,
- &obj_sepindex,
- &obj_U,
- &obj_V,
- &obj_phi,
- &obj_x,
- &obj_y))
- return(NULL);
-
- // Interpret input objects as numpy arrays
- PyArrayObject *arr_sepindex = (PyArrayObject*) PyArray_FROM_OTF(obj_sepindex, NPY_LONG, NPY_ARRAY_IN_ARRAY);
- PyArrayObject *arr_U = (PyArrayObject*) PyArray_FROM_OTF(obj_U, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY);
- PyArrayObject *arr_V = (PyArrayObject*) PyArray_FROM_OTF(obj_V, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY);
- PyArrayObject *arr_phi = (PyArrayObject*) PyArray_FROM_OTF(obj_phi, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY);
- PyArrayObject *arr_x = (PyArrayObject*) PyArray_FROM_OTF(obj_x, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY);
- PyArrayObject *arr_y = (PyArrayObject*) PyArray_FROM_OTF(obj_y, NPY_DOUBLE, NPY_ARRAY_IN_ARRAY);
-
- // Generate exception in case of failure
- if (
- arr_sepindex == NULL ||
- arr_U == NULL ||
- arr_V == NULL ||
- arr_phi == NULL ||
- arr_x == NULL ||
- arr_y == NULL) {
- // Dereference arrays
- Py_XDECREF(arr_sepindex);
- Py_XDECREF(arr_U);
- Py_XDECREF(arr_V);
- Py_XDECREF(arr_phi);
- Py_XDECREF(arr_x);
- Py_XDECREF(arr_y);
- return NULL;
- }
-
- // Get C-types pointers to numpy arrays
- long *sepindex = (long*)PyArray_DATA(arr_sepindex);
- double *U = (double*)PyArray_DATA(arr_U);
- double *V = (double*)PyArray_DATA(arr_V);
- double *phi = (double*)PyArray_DATA(arr_phi);
- double *x = (double*)PyArray_DATA(arr_x);
- double *y = (double*)PyArray_DATA(arr_y);
-
- // Call the C function from libspleaf
- spleaf_dotantisep(
- n,
- r,
- rsi,
- sepindex,
- U,
- V,
- phi,
- x,
- y);
-
- // Dereference arrays
- Py_XDECREF(arr_sepindex);
- Py_XDECREF(arr_U);
- Py_XDECREF(arr_V);
- Py_XDECREF(arr_phi);
- Py_XDECREF(arr_x);
- Py_XDECREF(arr_y);
-
- Py_RETURN_NONE;
-}
diff --git a/kima/vendor/spleaf/spleaf/term.py b/kima/vendor/spleaf/spleaf/term.py
deleted file mode 100644
index 35e841d..0000000
--- a/kima/vendor/spleaf/spleaf/term.py
+++ /dev/null
@@ -1,2016 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Copyright 2020-2022 Jean-Baptiste Delisle
-#
-# This file is part of spleaf.
-#
-# spleaf is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# spleaf is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with spleaf. If not, see .
-
-__all__ = [
- 'Error', 'Jitter', 'InstrumentJitter', 'CalibrationError',
- 'CalibrationJitter', 'ExponentialKernel', 'QuasiperiodicKernel',
- 'Matern32Kernel', 'Matern52Kernel', 'SumKernel', 'ProductKernel',
- 'USHOKernel', 'OSHOKernel', 'SHOKernel', 'MEPKernel', 'ESKernel',
- 'ESPKernel', 'MultiSeriesKernel'
-]
-
-import numpy as np
-import warnings
-
-
-class Term:
- r"""
- Generic class for covariance terms.
- """
-
- def __init__(self):
- self._linked = False
- self._param = []
-
- def _link(self, cov):
- r"""
- Link the term to a covariance matrix.
- """
- if self._linked:
- raise Exception(
- 'This term has already been linked to a covariance matrix.')
- self._cov = cov
- self._linked = True
-
- def _compute(self):
- r"""
- Compute the S+LEAF representation of the term.
- """
- pass
-
- def _recompute(self):
- r"""
- Recompute the S+LEAF representation of the term.
- """
- self._compute()
-
- def _set_param(self):
- r"""
- Update the term parameters.
- """
- pass
-
- def _get_param(self, par):
- r"""
- Get the term parameters.
- """
- return (self.__dict__[f'_{par}'])
-
- def _grad_param(self):
- r"""
- Gradient of a function with respect to the term parameters
- (listed in self._param).
- """
- return ({})
-
-
-class Noise(Term):
- r"""
- Generic class for covariance noise terms.
- """
-
- def __init__(self):
- super().__init__()
- self._b = 0
-
-
-class Kernel(Term):
- r"""
- Generic class for covariance kernel (Gaussian process) terms.
- """
-
- def __init__(self):
- super().__init__()
- self._r = 0
-
- def _link(self, cov, offset):
- super()._link(cov)
- self._offset = offset
-
- def _compute_t2(self, t2, dt2, U2, V2, phi2, ref2left, dt2left, dt2right,
- phi2left, phi2right):
- r"""
- Compute the S+LEAF representation of the covariance for a new calendar t2.
- """
-
- pass
-
- def _deriv(self, calc_d2=False):
- r"""
- Compute the S+LEAF representation of the derivative of the GP.
- """
-
- pass
-
- def _deriv_t2(self,
- t2,
- dt2,
- dU2,
- V2,
- phi2,
- ref2left,
- dt2left,
- dt2right,
- phi2left,
- phi2right,
- dV2=None):
- r"""
- Compute the S+LEAF representation of the derivative of the GP
- for a new calendar t2.
- """
-
- pass
-
- def eval(self, dt):
- r"""
- Evaluate the kernel at lag dt.
- """
-
- raise NotImplementedError(
- 'The eval method should be implemented in Kernel childs.')
-
-
-class Error(Noise):
- r"""
- Uncorrelated measurement errors.
-
- Parameters
- ----------
- sig : (n,) ndarray
- Vector of measurements errobars (std).
- """
-
- def __init__(self, sig):
- super().__init__()
- self._sig = sig
-
- def _compute(self):
- self._cov.A += self._sig**2
-
-
-class Jitter(Noise):
- r"""
- Uncorrelated global jitter.
-
- Parameters
- ----------
- sig : float
- Jitter (std).
- """
-
- def __init__(self, sig):
- super().__init__()
- self._sig = sig
- self._param = ['sig']
-
- def _compute(self):
- self._cov.A += self._sig**2
-
- def _set_param(self, sig=None):
- if sig is not None:
- self._sig = sig
-
- def _grad_param(self):
- grad = {}
- grad['sig'] = 2 * self._sig * self._cov._sum_grad_A
- return (grad)
-
-
-class InstrumentJitter(Noise):
- r"""
- Uncorrelated instrument jitter.
-
- Parameters
- ----------
- indices : (n,) ndarray or list
- Mask or list of indices affected by this jitter.
- sig : float
- Jitter (std).
- """
-
- def __init__(self, indices, sig):
- super().__init__()
- self._indices = indices
- self._sig = sig
- self._param = ['sig']
-
- def _compute(self):
- self._cov.A[self._indices] += self._sig**2
-
- def _set_param(self, sig=None):
- if sig is not None:
- self._sig = sig
-
- def _grad_param(self):
- grad = {}
- grad['sig'] = 2 * self._sig * np.sum(self._cov._grad_A[self._indices])
- return (grad)
-
-
-class CalibrationError(Noise):
- r"""
- Correlated calibration error.
-
- The calibration error is shared by blocks of measurements
- using the same calibration.
-
- Parameters
- ----------
- calib_id : (n,) ndarray
- Identifier of the calibration used for each measurement.
- sig : (n,) ndarray
- Calibration error for each measurement (std).
- Measurements having the same calib_id should have the same sig.
- """
-
- def __init__(self, calib_id, sig):
- super().__init__()
- self._calib_id = calib_id
- self._sig = sig
- n = calib_id.size
- self._b = np.empty(n, dtype=int)
- # Find groups of points using same calibration
- self._groups = {}
- for k in range(n):
- if calib_id[k] not in self._groups:
- self._groups[calib_id[k]] = [k]
- else:
- self._groups[calib_id[k]].append(k)
- self._b[k] = k - self._groups[calib_id[k]][0]
-
- def _compute(self):
- var = self._sig**2
- self._cov.A += var
- for group in self._groups.values():
- for i in range(1, len(group)):
- for j in range(i):
- self._cov.F[self._cov.offsetrow[group[i]] +
- group[j]] += var[group[0]]
-
-
-class CalibrationJitter(Noise):
- r"""
- Correlated calibration jitter.
-
- The calibration jitter is shared by blocks of measurements
- using the same calibration.
-
- Parameters
- ----------
- indices : (n,) ndarray or list
- Mask or list of indices affected by this jitter.
- calib_id : (n,) ndarray
- Identifier of the calibration used for each measurement.
- sig : float
- Calibration jitter (std).
- """
-
- def __init__(self, indices, calib_id, sig):
- super().__init__()
- self._calib_id = calib_id
- self._indices = indices
- self._sig = sig
- n = calib_id.size
- self._b = np.zeros(n, dtype=int)
- # Find groups of points using same calibration
- self._groups = {}
- for k in np.arange(n)[indices]:
- if calib_id[k] not in self._groups:
- self._groups[calib_id[k]] = [k]
- else:
- self._groups[calib_id[k]].append(k)
- self._b[k] = k - self._groups[calib_id[k]][0]
- self._param = ['sig']
-
- def _compute(self):
- var = self._sig**2
- self._cov.A[self._indices] += var
- self._Fmask = []
- for group in self._groups.values():
- for i in range(1, len(group)):
- for j in range(i):
- self._Fmask.append(self._cov.offsetrow[group[i]] + group[j])
- self._cov.F[self._Fmask] += var
-
- def _recompute(self):
- var = self._sig**2
- self._cov.A[self._indices] += var
- self._cov.F[self._Fmask] += var
-
- def _set_param(self, sig=None):
- if sig is not None:
- self._sig = sig
-
- def _grad_param(self):
- grad = {}
- grad['sig'] = 2 * self._sig * (np.sum(self._cov._grad_A[self._indices]) +
- np.sum(self._cov._grad_F[self._Fmask]))
- return (grad)
-
-
-class ExponentialKernel(Kernel):
- r"""
- Exponential decay kernel.
-
- This kernel follows:
-
- .. math:: k(\Delta t) = a \mathrm{e}^{-\lambda \Delta t}
-
- Parameters
- ----------
- a : float
- Amplitude (variance).
- la : float
- Decay rate.
- """
-
- def __init__(self, a, la):
- super().__init__()
- self._a = a
- self._la = la
- self._r = 1
- self._param = ['a', 'la']
-
- def _compute(self):
- self._cov.A += self._a
- self._cov.U[:, self._offset] = self._a
- self._cov.V[:, self._offset] = 1.0
- self._cov.phi[:, self._offset] = np.exp(-self._la * self._cov.dt)
-
- def _set_param(self, a=None, la=None):
- if a is not None:
- self._a = a
- if la is not None:
- self._la = la
-
- def _grad_param(self, grad_dU=None, grad_dV=None):
- grad = {}
- grad['a'] = self._cov._sum_grad_A + np.sum(self._cov._grad_U[:,
- self._offset])
- grad['la'] = -np.sum(self._cov.dt * self._cov.phi[:, self._offset] *
- self._cov._grad_phi[:, self._offset])
-
- if grad_dU is not None:
- # self._cov._dU[:, self._offset] = -self._la * self._a
- sum_grad_dU = np.sum(grad_dU[:, self._offset])
- grad['a'] -= self._la * sum_grad_dU
- grad['la'] -= self._a * sum_grad_dU
-
- if grad_dV is not None:
- # self._cov._dV[:, self._offset] = self._la
- grad['la'] += np.sum(grad_dV[:, self._offset])
-
- return (grad)
-
- def _compute_t2(self, t2, dt2, U2, V2, phi2, ref2left, dt2left, dt2right,
- phi2left, phi2right):
- U2[:, self._offset] = self._a
- V2[:, self._offset] = 1.0
- phi2[:, self._offset] = np.exp(-self._la * dt2)
- phi2left[:, self._offset] = np.exp(-self._la * dt2left)
- phi2right[:, self._offset] = np.exp(-self._la * dt2right)
-
- def _deriv(self, calc_d2=False):
- self._cov._dU[:, self._offset] = -self._la * self._a
- if calc_d2:
- self._cov._dV[:, self._offset] = self._la
-
- def _deriv_t2(self,
- t2,
- dt2,
- dU2,
- V2,
- phi2,
- ref2left,
- dt2left,
- dt2right,
- phi2left,
- phi2right,
- dV2=None):
- dU2[:, self._offset] = -self._la * self._a
- V2[:, self._offset] = 1.0
- phi2[:, self._offset] = np.exp(-self._la * dt2)
- phi2left[:, self._offset] = np.exp(-self._la * dt2left)
- phi2right[:, self._offset] = np.exp(-self._la * dt2right)
- if dV2 is not None:
- dV2[:, self._offset] = self._la
-
- def eval(self, dt):
- return (self._a * np.exp(-self._la * np.abs(dt)))
-
-
-class QuasiperiodicKernel(Kernel):
- r"""
- Quasiperiodic kernel.
-
- This kernel follows:
-
- .. math:: k(\Delta t) = \mathrm{e}^{-\lambda \Delta t}
- \left(a \cos(\nu \Delta t) + b \sin(\nu \Delta t)\right)
-
- Parameters
- ----------
- a, b : float
- Amplitudes (variance) of the cos/sin terms.
- la : float
- Decay rate.
- nu : float
- Angular frequency.
- """
-
- def __init__(self, a, b, la, nu):
- super().__init__()
- self._a = a
- self._b = b
- self._la = la
- self._nu = nu
- self._r = 2
- self._param = ['a', 'b', 'la', 'nu']
-
- def _compute(self):
- self._cov.A += self._a
- self._nut = self._nu * self._cov.t
- self._cnut = np.cos(self._nut)
- self._snut = np.sin(self._nut)
- self._cov.U[:, self._offset] = self._a * self._cnut + self._b * self._snut
- self._cov.V[:, self._offset] = self._cnut
- self._cov.U[:,
- self._offset + 1] = self._a * self._snut - self._b * self._cnut
- self._cov.V[:, self._offset + 1] = self._snut
- self._cov.phi[:,
- self._offset:self._offset + 2] = np.exp(-self._la * self._cov.dt)[:,
- None]
-
- def _set_param(self, a=None, b=None, la=None, nu=None):
- if a is not None:
- self._a = a
- if b is not None:
- self._b = b
- if la is not None:
- self._la = la
- if nu is not None:
- self._nu = nu
-
- def _grad_param(self, grad_dU=None, grad_dV=None):
- grad = {}
- grad['a'] = self._cov._sum_grad_A + np.sum(self._cov.V[:, self._offset] *
- self._cov._grad_U[:, self._offset] + self._cov.V[:, self._offset + 1] *
- self._cov._grad_U[:, self._offset + 1])
- grad['b'] = np.sum(self._cov.V[:, self._offset + 1] *
- self._cov._grad_U[:, self._offset] -
- self._cov.V[:, self._offset] * self._cov._grad_U[:, self._offset + 1])
- grad['la'] = -np.sum(self._cov.dt * self._cov.phi[:, self._offset] *
- (self._cov._grad_phi[:, self._offset] +
- self._cov._grad_phi[:, self._offset + 1]))
- grad['nu'] = np.sum(self._cov.t *
- (self._cov.U[:, self._offset] * self._cov._grad_U[:, self._offset + 1] -
- self._cov.U[:, self._offset + 1] * self._cov._grad_U[:, self._offset] +
- self._cov.V[:, self._offset] * self._cov._grad_V[:, self._offset + 1] -
- self._cov.V[:, self._offset + 1] * self._cov._grad_V[:, self._offset]))
-
- if grad_dU is not None:
- # self._cov._dU[:, self._offset] = da * self._cnut + db * self._snut
- # self._cov._dU[:, self._offset + 1] = da * self._snut - db * self._cnut
- grad_da = np.sum(self._cnut * grad_dU[:, self._offset] +
- self._snut * grad_dU[:, self._offset + 1])
- grad_db = np.sum(self._snut * grad_dU[:, self._offset] -
- self._cnut * grad_dU[:, self._offset + 1])
- grad['nu'] += np.sum(self._cov.t *
- (self._cov._dU[:, self._offset] * grad_dU[:, self._offset + 1] -
- self._cov._dU[:, self._offset + 1] * grad_dU[:, self._offset]))
- # da = -self._la * self._a + self._nu * self._b
- # db = -self._la * self._b - self._nu * self._a
- grad['a'] -= self._la * grad_da + self._nu * grad_db
- grad['b'] += self._nu * grad_da - self._la * grad_db
- grad['la'] -= self._a * grad_da + self._b * grad_db
- grad['nu'] += self._b * grad_da - self._a * grad_db
-
- if grad_dV is not None:
- # self._cov._dV[:, self._offset] = self._la * self._cnut - self._nu * self._snut
- # self._cov._dV[:, self._offset + 1] = self._la * self._snut + self._nu * self._cnut
- grad['la'] += np.sum(self._cnut * grad_dV[:, self._offset] +
- self._snut * grad_dV[:, self._offset + 1])
- latp1 = self._la * self._cov.t + 1
- grad['nu'] += np.sum((latp1 * self._cnut - self._nut * self._snut) *
- grad_dV[:, self._offset + 1] -
- (self._nut * self._cnut + latp1 * self._snut) *
- grad_dV[:, self._offset])
-
- return (grad)
-
- def _compute_t2(self, t2, dt2, U2, V2, phi2, ref2left, dt2left, dt2right,
- phi2left, phi2right):
- nut2 = self._nu * t2
- cnut2 = np.cos(nut2)
- snut2 = np.sin(nut2)
- U2[:, self._offset] = self._a * cnut2 + self._b * snut2
- V2[:, self._offset] = cnut2
- U2[:, self._offset + 1] = self._a * snut2 - self._b * cnut2
- V2[:, self._offset + 1] = snut2
- phi2[:, self._offset:self._offset + 2] = np.exp(-self._la * dt2)[:, None]
- phi2left[:, self._offset:self._offset + 2] = np.exp(-self._la * dt2left)[:,
- None]
- phi2right[:,
- self._offset:self._offset + 2] = np.exp(-self._la * dt2right)[:, None]
-
- def _deriv(self, calc_d2=False):
- da = -self._la * self._a + self._nu * self._b
- db = -self._la * self._b - self._nu * self._a
- self._cov._dU[:, self._offset] = da * self._cnut + db * self._snut
- self._cov._dU[:, self._offset + 1] = da * self._snut - db * self._cnut
- if calc_d2:
- self._cov._dV[:,
- self._offset] = self._la * self._cnut - self._nu * self._snut
- self._cov._dV[:,
- self._offset + 1] = self._la * self._snut + self._nu * self._cnut
-
- def _deriv_t2(self,
- t2,
- dt2,
- dU2,
- V2,
- phi2,
- ref2left,
- dt2left,
- dt2right,
- phi2left,
- phi2right,
- dV2=None):
- da = -self._la * self._a + self._nu * self._b
- db = -self._la * self._b - self._nu * self._a
- nut2 = self._nu * t2
- cnut2 = np.cos(nut2)
- snut2 = np.sin(nut2)
- dU2[:, self._offset] = da * cnut2 + db * snut2
- V2[:, self._offset] = cnut2
- dU2[:, self._offset + 1] = da * snut2 - db * cnut2
- V2[:, self._offset + 1] = snut2
- phi2[:, self._offset:self._offset + 2] = np.exp(-self._la * dt2)[:, None]
- phi2left[:, self._offset:self._offset + 2] = np.exp(-self._la * dt2left)[:,
- None]
- phi2right[:,
- self._offset:self._offset + 2] = np.exp(-self._la * dt2right)[:, None]
- if dV2 is not None:
- dV2[:, self._offset] = self._la * cnut2 - self._nu * snut2
- dV2[:, self._offset + 1] = self._la * snut2 + self._nu * cnut2
-
- def eval(self, dt):
- adt = np.abs(dt)
- return (np.exp(-self._la * adt) *
- (self._a * np.cos(self._nu * adt) + self._b * np.sin(self._nu * adt)))
-
-
-class Matern32Kernel(Kernel):
- r"""
- Matérn 3/2 kernel.
-
- .. math:: k(\Delta t) = \sigma^2 \mathrm{e}^{-\sqrt{3}\frac{\Delta t}{\rho}}
- \left(1 + \sqrt{3}\frac{\Delta t}{\rho}\right)
-
- Parameters
- ----------
- sig : float
- Amplitude (std).
- rho : float
- Scale.
- """
-
- def __init__(self, sig, rho):
- super().__init__()
- self._sig = sig
- self._rho = rho
- self._r = 2
- self._param = ['sig', 'rho']
-
- def _link(self, cov, offset):
- super()._link(cov, offset)
- self._t0 = (self._cov.t[0] + self._cov.t[-1]) / 2
- self._dt0 = self._cov.t - self._t0
-
- def _compute(self):
- self._a = self._sig**2
- self._la = np.sqrt(3) / self._rho
- self._la2 = self._la**2
- self._x = self._la * self._dt0
- self._1mx = 1 - self._x
- self._cov.A += self._a
- self._cov.U[:, self._offset] = self._a * self._x
- self._cov.V[:, self._offset] = 1.0
- self._cov.U[:, self._offset + 1] = self._a
- self._cov.V[:, self._offset + 1] = self._1mx
- self._cov.phi[:,
- self._offset:self._offset + 2] = np.exp(-self._la * self._cov.dt)[:,
- None]
-
- def _set_param(self, sig=None, rho=None):
- if sig is not None:
- self._sig = sig
- if rho is not None:
- self._rho = rho
-
- def _grad_param(self, grad_dU=None, grad_dV=None):
- grad = {}
- grad['sig'] = 2 * self._sig * (self._cov._sum_grad_A +
- np.sum(self._x * self._cov._grad_U[:, self._offset] +
- self._cov._grad_U[:, self._offset + 1]))
- grad['rho'] = -1 / self._rho * (np.sum(self._x *
- (self._a * self._cov._grad_U[:, self._offset] -
- self._cov._grad_V[:, self._offset + 1])) -
- self._la * np.sum(self._cov.dt * self._cov.phi[:, self._offset] *
- (self._cov._grad_phi[:, self._offset] +
- self._cov._grad_phi[:, self._offset + 1])))
-
- if grad_dU is not None:
- # self._cov._dU[:, self._offset] = self._la * self._a * self._1mx
- # self._cov._dU[:, self._offset + 1] = -self._la * self._a
- sum_grad_dU = np.sum(self._1mx * grad_dU[:, self._offset] -
- grad_dU[:, self._offset + 1])
- grad['sig'] += 2 * self._sig * self._la * sum_grad_dU
- grad['rho'] -= self._la / self._rho * self._a * (sum_grad_dU -
- np.sum(self._x * grad_dU[:, self._offset]))
-
- if grad_dV is not None:
- # self._cov._dV[:, self._offset] = self._la
- # self._cov._dV[:, self._offset + 1] = -self._la * self._x
- grad['rho'] -= self._la / self._rho * np.sum(grad_dV[:, self._offset] -
- 2 * self._x * grad_dV[:, self._offset + 1])
-
- return (grad)
-
- def _compute_t2(self, t2, dt2, U2, V2, phi2, ref2left, dt2left, dt2right,
- phi2left, phi2right):
- x2 = self._la * (t2 - self._t0)
- U2[:, self._offset] = self._a * x2
- V2[:, self._offset] = 1.0
- U2[:, self._offset + 1] = self._a
- V2[:, self._offset + 1] = 1 - x2
- phi2[:, self._offset:self._offset + 2] = np.exp(-self._la * dt2)[:, None]
- phi2left[:, self._offset:self._offset + 2] = np.exp(-self._la * dt2left)[:,
- None]
- phi2right[:,
- self._offset:self._offset + 2] = np.exp(-self._la * dt2right)[:, None]
-
- def _deriv(self, calc_d2=False):
- self._cov._dU[:, self._offset] = self._la * self._a * self._1mx
- self._cov._dU[:, self._offset + 1] = -self._la * self._a
- if calc_d2:
- self._cov._dV[:, self._offset] = self._la
- self._cov._dV[:, self._offset + 1] = -self._la * self._x
-
- def _deriv_t2(self,
- t2,
- dt2,
- dU2,
- V2,
- phi2,
- ref2left,
- dt2left,
- dt2right,
- phi2left,
- phi2right,
- dV2=None):
- x2 = self._la * (t2 - self._t0)
- onemx2 = 1 - x2
- dU2[:, self._offset] = self._la * self._a * onemx2
- V2[:, self._offset] = 1.0
- dU2[:, self._offset + 1] = -self._la * self._a
- V2[:, self._offset + 1] = onemx2
- phi2[:, self._offset:self._offset + 2] = np.exp(-self._la * dt2)[:, None]
- phi2left[:, self._offset:self._offset + 2] = np.exp(-self._la * dt2left)[:,
- None]
- phi2right[:,
- self._offset:self._offset + 2] = np.exp(-self._la * dt2right)[:, None]
- if dV2 is not None:
- dV2[:, self._offset] = self._la
- dV2[:, self._offset + 1] = -self._la * x2
-
- def eval(self, dt):
- dx = self._la * np.abs(dt)
- return (self._a * np.exp(-dx) * (1 + dx))
-
-
-class Matern52Kernel(Kernel):
- r"""
- Matérn 5/2 kernel.
-
- .. math:: k(\Delta t) = \sigma^2 \mathrm{e}^{-\sqrt{5}\frac{\Delta t}{\rho}}
- \left(1 + \sqrt{5}\frac{\Delta t}{\rho}
- + \frac{5}{3}\left(\frac{\Delta t}{\rho}\right)^2\right)
-
- Parameters
- ----------
- sig : float
- Amplitude (std).
- rho : float
- Scale.
- """
-
- def __init__(self, sig, rho):
- super().__init__()
- self._sig = sig
- self._rho = rho
- self._r = 3
- self._param = ['sig', 'rho']
-
- def _link(self, cov, offset):
- super()._link(cov, offset)
- self._t0 = (self._cov.t[0] + self._cov.t[-1]) / 2
- self._dt0 = self._cov.t - self._t0
-
- def _compute(self):
- self._a = self._sig**2
- self._la = np.sqrt(5) / self._rho
- self._la2 = self._la**2
- self._x = self._la * self._dt0
- self._x2_3 = self._x * self._x / 3
- self._1mx = 1 - self._x
- self._cov.A += self._a
- self._cov.U[:, self._offset] = self._a * (self._x + self._x2_3)
- self._cov.V[:, self._offset] = 1.0
- self._cov.U[:, self._offset + 1] = self._a
- self._cov.V[:, self._offset + 1] = self._1mx + self._x2_3
- self._cov.U[:, self._offset + 2] = self._a * self._x
- self._cov.V[:, self._offset + 2] = -2 / 3 * self._x
- self._cov.phi[:,
- self._offset:self._offset + 3] = np.exp(-self._la * self._cov.dt)[:,
- None]
-
- def _set_param(self, sig=None, rho=None):
- if sig is not None:
- self._sig = sig
- if rho is not None:
- self._rho = rho
-
- def _grad_param(self, grad_dU=None, grad_dV=None):
- grad = {}
- grad['sig'] = 2 * self._sig * (self._cov._sum_grad_A +
- np.sum((self._x + self._x2_3) * self._cov._grad_U[:, self._offset] +
- self._cov._grad_U[:, self._offset + 1] +
- self._x * self._cov._grad_U[:, self._offset + 2]))
- grad['rho'] = -1 / self._rho * (np.sum(self._a *
- (self._x + 2 * self._x2_3) * self._cov._grad_U[:, self._offset] +
- (2 * self._x2_3 - self._x) * self._cov._grad_V[:, self._offset + 1] +
- self._x * (self._a * self._cov._grad_U[:, self._offset + 2] -
- 2 / 3 * self._cov._grad_V[:, self._offset + 2])) -
- self._la * np.sum(self._cov.dt * self._cov.phi[:, self._offset] *
- (self._cov._grad_phi[:, self._offset] + self._cov._grad_phi[:,
- self._offset + 1] + self._cov._grad_phi[:, self._offset + 2])))
-
- if grad_dU is not None:
- # self._cov._dU[:,
- # self._offset] = self._la * self._a * (1 - self._x / 3 - self._x2_3)
- # self._cov._dU[:, self._offset + 1] = -self._la * self._a
- # self._cov._dU[:, self._offset + 2] = self._la * self._1mx * self._a
- sum_grad_dU = np.sum((1 - self._x / 3 - self._x2_3) *
- grad_dU[:, self._offset] - grad_dU[:, self._offset + 1] +
- self._1mx * grad_dU[:, self._offset + 2])
- grad['sig'] += 2 * self._sig * self._la * sum_grad_dU
- grad['rho'] -= self._la / self._rho * self._a * (sum_grad_dU -
- np.sum((self._x / 3 + 2 * self._x2_3) * grad_dU[:, self._offset] +
- self._x * grad_dU[:, self._offset + 2]))
-
- if grad_dV is not None:
- # self._cov._dV[:, self._offset] = self._la
- # self._cov._dV[:, self._offset + 1] = -self._la * self._x / 3 * self._1mx
- # self._cov._dV[:, self._offset + 2] = -2 / 3 * self._la * (1 + self._x)
- grad['rho'] -= self._la / self._rho * np.sum(grad_dV[:, self._offset] +
- (3 * self._x2_3 - 2 / 3 * self._x) * grad_dV[:, self._offset + 1] -
- 2 / 3 * (1 + 2 * self._x) * grad_dV[:, self._offset + 2])
-
- return (grad)
-
- def _compute_t2(self, t2, dt2, U2, V2, phi2, ref2left, dt2left, dt2right,
- phi2left, phi2right):
- x2 = self._la * (t2 - self._t0)
- x22_3 = x2 * x2 / 3
- U2[:, self._offset] = self._a * (x2 + x22_3)
- V2[:, self._offset] = 1.0
- U2[:, self._offset + 1] = self._a
- V2[:, self._offset + 1] = 1 - x2 + x22_3
- U2[:, self._offset + 2] = self._a * x2
- V2[:, self._offset + 2] = -2 / 3 * x2
- phi2[:, self._offset:self._offset + 3] = np.exp(-self._la * dt2)[:, None]
- phi2left[:, self._offset:self._offset + 3] = np.exp(-self._la * dt2left)[:,
- None]
- phi2right[:,
- self._offset:self._offset + 3] = np.exp(-self._la * dt2right)[:, None]
-
- def _deriv(self, calc_d2=False):
- self._cov._dU[:,
- self._offset] = self._la * self._a * (1 - self._x / 3 - self._x2_3)
- self._cov._dU[:, self._offset + 1] = -self._la * self._a
- self._cov._dU[:, self._offset + 2] = self._la * self._a * self._1mx
- if calc_d2:
- self._cov._dV[:, self._offset] = self._la
- self._cov._dV[:, self._offset + 1] = -self._la * self._x / 3 * self._1mx
- self._cov._dV[:, self._offset + 2] = -2 / 3 * self._la * (1 + self._x)
-
- def _deriv_t2(self,
- t2,
- dt2,
- dU2,
- V2,
- phi2,
- ref2left,
- dt2left,
- dt2right,
- phi2left,
- phi2right,
- dV2=None):
- x2 = self._la * (t2 - self._t0)
- onemx2 = 1 - x2
- x22_3 = x2 * x2 / 3
- dU2[:, self._offset] = self._la * self._a * (1 - x2 / 3 - x22_3)
- V2[:, self._offset] = 1.0
- dU2[:, self._offset + 1] = -self._la * self._a
- V2[:, self._offset + 1] = onemx2 + x22_3
- dU2[:, self._offset + 2] = self._la * onemx2 * self._a
- V2[:, self._offset + 2] = -2 / 3 * x2
- phi2[:, self._offset:self._offset + 3] = np.exp(-self._la * dt2)[:, None]
- phi2left[:, self._offset:self._offset + 3] = np.exp(-self._la * dt2left)[:,
- None]
- phi2right[:,
- self._offset:self._offset + 3] = np.exp(-self._la * dt2right)[:, None]
- if dV2 is not None:
- dV2[:, self._offset] = self._la
- dV2[:, self._offset + 1] = -self._la * x2 / 3 * onemx2
- dV2[:, self._offset + 2] = -2 / 3 * self._la * (1 + x2)
-
- def eval(self, dt):
- dx = self._la * np.abs(dt)
- return (self._a * np.exp(-dx) * (1 + dx + dx * dx / 3))
-
-
-class SumKernel(Kernel):
- r"""
- Generic class for the sum of several kernel terms.
- """
-
- def __init__(self, *args):
- super().__init__()
- self._kernels = args
- self._r = sum(kernel._r for kernel in self._kernels)
-
- def _link(self, cov, offset):
- super()._link(cov, offset)
- off = offset
- for kernel in self._kernels:
- kernel._link(cov, off)
- off += kernel._r
-
- def _compute(self):
- for kernel in self._kernels:
- kernel._compute()
-
- def _kernel_param(self, **kwargs):
- raise NotImplementedError(
- 'The _kernel_param method should be implemented in SumKernel childs.')
-
- def _kernel_param_back(self, *args):
- raise NotImplementedError(
- 'The _kernel_param method should be implemented in SumKernel childs.')
-
- def _set_param(self, *args, **kwargs):
- for karg, arg in enumerate(args):
- par = self._param[karg]
- if par in kwargs:
- raise Exception(
- f'SumKernel._set_param: parameter {par} multiply defined.')
- kwargs[par] = arg
- kernel_param = self._kernel_param(**kwargs)
- for kernel, param in zip(self._kernels, kernel_param):
- kernel._set_param(**param)
-
- def _grad_param(self, grad_dU=None, grad_dV=None):
- kernel_grad = [
- kernel._grad_param(grad_dU, grad_dV) for kernel in self._kernels
- ]
- return (self._kernel_param_back(*kernel_grad))
-
- def _compute_t2(self, t2, dt2, U2, V2, phi2, ref2left, dt2left, dt2right,
- phi2left, phi2right):
- for kernel in self._kernels:
- kernel._compute_t2(t2, dt2, U2, V2, phi2, ref2left, dt2left, dt2right,
- phi2left, phi2right)
-
- def _deriv(self, calc_d2=False):
- for kernel in self._kernels:
- kernel._deriv(calc_d2)
-
- def _deriv_t2(self,
- t2,
- dt2,
- dU2,
- V2,
- phi2,
- ref2left,
- dt2left,
- dt2right,
- phi2left,
- phi2right,
- dV2=None):
- for kernel in self._kernels:
- kernel._deriv_t2(t2, dt2, dU2, V2, phi2, ref2left, dt2left, dt2right,
- phi2left, phi2right, dV2)
-
- def eval(self, dt):
- return (sum(kernel.eval(dt) for kernel in self._kernels))
-
-
-class _FakeCov:
-
- def __init__(self, t, dt, r):
- self.t = t
- self.dt = dt
- self.n = t.size
- self.r = r
- self.A = np.zeros(self.n)
- self.U = np.empty((self.n, r))
- self.V = np.empty((self.n, r))
- self.phi = np.empty((self.n - 1, r))
-
- self._dU = np.empty((self.n, r))
- self._dV = np.empty((self.n, r))
- self._B = None
-
- self._grad_A = np.empty(self.n)
- self._grad_U = np.empty((self.n, r))
- self._grad_V = np.empty((self.n, r))
- self._grad_phi = np.empty((self.n - 1, r))
- self._sum_grad_A = None
-
- self._grad_dU = np.empty((self.n, r))
- self._grad_dV = np.empty((self.n, r))
- self._grad_B = np.empty(self.n)
-
-
-class ProductKernel(Kernel):
- r"""
- Generic class for the product of two kernel terms.
- """
-
- def __init__(self, kernel1, kernel2):
- super().__init__()
- self._kernel1 = kernel1
- self._kernel2 = kernel2
- self._r = self._kernel1._r * self._kernel2._r
-
- def _link(self, cov, offset):
- super()._link(cov, offset)
- self._kernel1._link(_FakeCov(cov.t, cov.dt, self._kernel1._r), 0)
- self._kernel2._link(_FakeCov(cov.t, cov.dt, self._kernel2._r), 0)
-
- def _compute(self):
- self._kernel1._cov.A[:] = 0
- self._kernel2._cov.A[:] = 0
- self._kernel1._compute()
- self._kernel2._compute()
- self._cov.A += self._kernel1._cov.A * self._kernel2._cov.A
- for k1 in range(self._kernel1._r):
- self._cov.U[:, self._offset + k1 * self._kernel2._r:self._offset +
- (k1 + 1) * self._kernel2._r] = self._kernel1._cov.U[:, k1,
- None] * self._kernel2._cov.U
- self._cov.V[:, self._offset + k1 * self._kernel2._r:self._offset +
- (k1 + 1) * self._kernel2._r] = self._kernel1._cov.V[:, k1,
- None] * self._kernel2._cov.V
- self._cov.phi[:, self._offset + k1 * self._kernel2._r:self._offset +
- (k1 + 1) * self._kernel2._r] = self._kernel1._cov.phi[:, k1,
- None] * self._kernel2._cov.phi
-
- def _kernel_param(self, **kwargs):
- raise NotImplementedError(
- 'The _kernel_param method should be implemented in ProductKernel childs.'
- )
-
- def _kernel_param_back(self, *args):
- raise NotImplementedError(
- 'The _kernel_param method should be implemented in ProductKernel childs.'
- )
-
- def _set_param(self, *args, **kwargs):
- for karg, arg in enumerate(args):
- par = self._param[karg]
- if par in kwargs:
- raise Exception(
- f'ProductKernel._set_param: parameter {par} multiply defined.')
- kwargs[par] = arg
- kernel1_param, kernel2_param = self._kernel_param(**kwargs)
- self._kernel1._set_param(**kernel1_param)
- self._kernel2._set_param(**kernel2_param)
-
- def _grad_param(self, grad_dU=None, grad_dV=None):
- self._kernel1._cov._grad_A = self._kernel2._cov.A * self._cov._grad_A
- self._kernel2._cov._grad_A = self._kernel1._cov.A * self._cov._grad_A
- self._kernel1._cov._sum_grad_A = np.sum(self._kernel1._cov._grad_A)
- self._kernel2._cov._sum_grad_A = np.sum(self._kernel2._cov._grad_A)
- for k1 in range(self._kernel1._r):
- self._kernel1._cov._grad_U[:,
- k1] = np.sum(self._kernel2._cov.U * self._cov._grad_U[:, self._offset +
- k1 * self._kernel2._r:self._offset + (k1 + 1) * self._kernel2._r],
- axis=1)
- self._kernel1._cov._grad_V[:,
- k1] = np.sum(self._kernel2._cov.V * self._cov._grad_V[:, self._offset +
- k1 * self._kernel2._r:self._offset + (k1 + 1) * self._kernel2._r],
- axis=1)
- self._kernel1._cov._grad_phi[:,
- k1] = np.sum(self._kernel2._cov.phi * self._cov._grad_phi[:,
- self._offset + k1 * self._kernel2._r:self._offset +
- (k1 + 1) * self._kernel2._r],
- axis=1)
- if grad_dU is not None:
- self._kernel1._cov._grad_U[:, k1] += np.sum(self._kernel2._cov._dU *
- grad_dU[:, self._offset + k1 * self._kernel2._r:self._offset +
- (k1 + 1) * self._kernel2._r],
- axis=1)
- self._kernel1._cov._grad_dU[:, k1] = np.sum(self._kernel2._cov.U *
- grad_dU[:, self._offset + k1 * self._kernel2._r:self._offset +
- (k1 + 1) * self._kernel2._r],
- axis=1)
- if grad_dV is not None:
- self._kernel1._cov._grad_V[:, k1] += np.sum(self._kernel2._cov._dV *
- grad_dV[:, self._offset + k1 * self._kernel2._r:self._offset +
- (k1 + 1) * self._kernel2._r],
- axis=1)
- self._kernel1._cov._grad_dV[:, k1] = np.sum(self._kernel2._cov.V *
- grad_dV[:, self._offset + k1 * self._kernel2._r:self._offset +
- (k1 + 1) * self._kernel2._r],
- axis=1)
-
- for k2 in range(self._kernel2._r):
- self._kernel2._cov._grad_U[:,
- k2] = np.sum(self._kernel1._cov.U * self._cov._grad_U[:,
- self._offset + k2:self._offset + self._r:self._kernel2._r],
- axis=1)
- self._kernel2._cov._grad_V[:,
- k2] = np.sum(self._kernel1._cov.V * self._cov._grad_V[:,
- self._offset + k2:self._offset + self._r:self._kernel2._r],
- axis=1)
- self._kernel2._cov._grad_phi[:,
- k2] = np.sum(self._kernel1._cov.phi * self._cov._grad_phi[:,
- self._offset + k2:self._offset + self._r:self._kernel2._r],
- axis=1)
- if grad_dU is not None:
- self._kernel2._cov._grad_U[:,
- k2] += np.sum(self._kernel1._cov._dU * grad_dU[:,
- self._offset + k2:self._offset + self._r:self._kernel2._r],
- axis=1)
- self._kernel2._cov._grad_dU[:,
- k2] = np.sum(self._kernel1._cov.U * grad_dU[:,
- self._offset + k2:self._offset + self._r:self._kernel2._r],
- axis=1)
- if grad_dV is not None:
- self._kernel2._cov._grad_V[:,
- k2] += np.sum(self._kernel1._cov._dV * grad_dV[:,
- self._offset + k2:self._offset + self._r:self._kernel2._r],
- axis=1)
- self._kernel2._cov._grad_dV[:,
- k2] = np.sum(self._kernel1._cov.V * grad_dV[:,
- self._offset + k2:self._offset + self._r:self._kernel2._r],
- axis=1)
-
- kernel1_grad = self._kernel1._grad_param(
- self._kernel1._cov._grad_dU if grad_dU is not None else None,
- self._kernel1._cov._grad_dV if grad_dV is not None else None)
- kernel2_grad = self._kernel2._grad_param(
- self._kernel2._cov._grad_dU if grad_dU is not None else None,
- self._kernel2._cov._grad_dV if grad_dV is not None else None)
- return (self._kernel_param_back(kernel1_grad, kernel2_grad))
-
- def _compute_t2(self, t2, dt2, U2, V2, phi2, ref2left, dt2left, dt2right,
- phi2left, phi2right):
- kernel1_U2 = np.empty((t2.size, self._kernel1._r))
- kernel1_V2 = np.empty((t2.size, self._kernel1._r))
- kernel1_phi2 = np.empty((t2.size - 1, self._kernel1._r))
- kernel1_phi2left = np.empty((t2.size, self._kernel1._r))
- kernel1_phi2right = np.empty((t2.size, self._kernel1._r))
- self._kernel1._compute_t2(t2, dt2, kernel1_U2, kernel1_V2, kernel1_phi2,
- ref2left, dt2left, dt2right, kernel1_phi2left, kernel1_phi2right)
-
- kernel2_U2 = np.empty((t2.size, self._kernel2._r))
- kernel2_V2 = np.empty((t2.size, self._kernel2._r))
- kernel2_phi2 = np.empty((t2.size - 1, self._kernel2._r))
- kernel2_phi2left = np.empty((t2.size, self._kernel2._r))
- kernel2_phi2right = np.empty((t2.size, self._kernel2._r))
- self._kernel2._compute_t2(t2, dt2, kernel2_U2, kernel2_V2, kernel2_phi2,
- ref2left, dt2left, dt2right, kernel2_phi2left, kernel2_phi2right)
-
- for k1 in range(self._kernel1._r):
- U2[:, self._offset + k1 * self._kernel2._r:self._offset +
- (k1 + 1) * self._kernel2._r] = kernel1_U2[:, k1, None] * kernel2_U2
- V2[:, self._offset + k1 * self._kernel2._r:self._offset +
- (k1 + 1) * self._kernel2._r] = kernel1_V2[:, k1, None] * kernel2_V2
- phi2[:, self._offset + k1 * self._kernel2._r:self._offset +
- (k1 + 1) * self._kernel2._r] = kernel1_phi2[:, k1, None] * kernel2_phi2
- phi2left[:,
- self._offset + k1 * self._kernel2._r:self._offset + (k1 + 1) *
- self._kernel2._r] = kernel1_phi2left[:, k1, None] * kernel2_phi2left
- phi2right[:,
- self._offset + k1 * self._kernel2._r:self._offset + (k1 + 1) *
- self._kernel2._r] = kernel1_phi2right[:, k1, None] * kernel2_phi2right
-
- def _deriv(self, calc_d2=False):
- self._kernel1._deriv(calc_d2)
- self._kernel2._deriv(calc_d2)
- for k1 in range(self._kernel1._r):
- self._cov._dU[:, self._offset + k1 * self._kernel2._r:self._offset +
- (k1 + 1) * self._kernel2._r] = self._kernel1._cov._dU[:, k1,
- None] * self._kernel2._cov.U + self._kernel1._cov.U[:, k1,
- None] * self._kernel2._cov._dU
- if calc_d2:
- self._cov._dV[:, self._offset + k1 * self._kernel2._r:self._offset +
- (k1 + 1) * self._kernel2._r] = self._kernel1._cov._dV[:, k1,
- None] * self._kernel2._cov.V + self._kernel1._cov.V[:, k1,
- None] * self._kernel2._cov._dV
-
- def _deriv_t2(self,
- t2,
- dt2,
- dU2,
- V2,
- phi2,
- ref2left,
- dt2left,
- dt2right,
- phi2left,
- phi2right,
- dV2=None):
-
- kernel1_U2 = np.empty((t2.size, self._kernel1._r))
- kernel1_dU2 = np.empty((t2.size, self._kernel1._r))
- kernel1_V2 = np.empty((t2.size, self._kernel1._r))
- if dV2 is None:
- kernel1_dV2 = None
- else:
- kernel1_dV2 = np.empty((t2.size, self._kernel1._r))
- kernel1_phi2 = np.empty((t2.size - 1, self._kernel1._r))
- kernel1_phi2left = np.empty((t2.size, self._kernel1._r))
- kernel1_phi2right = np.empty((t2.size, self._kernel1._r))
- self._kernel1._compute_t2(t2, dt2, kernel1_U2, kernel1_V2, kernel1_phi2,
- ref2left, dt2left, dt2right, kernel1_phi2left, kernel1_phi2right)
- self._kernel1._deriv_t2(t2, dt2, kernel1_dU2, kernel1_V2, kernel1_phi2,
- ref2left, dt2left, dt2right, kernel1_phi2left, kernel1_phi2right,
- kernel1_dV2)
-
- kernel2_U2 = np.empty((t2.size, self._kernel2._r))
- kernel2_dU2 = np.empty((t2.size, self._kernel2._r))
- kernel2_V2 = np.empty((t2.size, self._kernel2._r))
- if dV2 is None:
- kernel2_dV2 = None
- else:
- kernel2_dV2 = np.empty((t2.size, self._kernel2._r))
- kernel2_phi2 = np.empty((t2.size - 1, self._kernel2._r))
- kernel2_phi2left = np.empty((t2.size, self._kernel2._r))
- kernel2_phi2right = np.empty((t2.size, self._kernel2._r))
- self._kernel2._compute_t2(t2, dt2, kernel2_U2, kernel2_V2, kernel2_phi2,
- ref2left, dt2left, dt2right, kernel2_phi2left, kernel2_phi2right)
- self._kernel2._deriv_t2(t2, dt2, kernel2_dU2, kernel2_V2, kernel2_phi2,
- ref2left, dt2left, dt2right, kernel2_phi2left, kernel2_phi2right,
- kernel2_dV2)
-
- for k1 in range(self._kernel1._r):
- dU2[:, self._offset + k1 * self._kernel2._r:self._offset +
- (k1 + 1) * self._kernel2._r] = kernel1_dU2[:, k1,
- None] * kernel2_U2 + kernel1_U2[:, k1, None] * kernel2_dU2
- V2[:, self._offset + k1 * self._kernel2._r:self._offset +
- (k1 + 1) * self._kernel2._r] = kernel1_V2[:, k1, None] * kernel2_V2
- phi2[:, self._offset + k1 * self._kernel2._r:self._offset +
- (k1 + 1) * self._kernel2._r] = kernel1_phi2[:, k1, None] * kernel2_phi2
- phi2left[:,
- self._offset + k1 * self._kernel2._r:self._offset + (k1 + 1) *
- self._kernel2._r] = kernel1_phi2left[:, k1, None] * kernel2_phi2left
- phi2right[:,
- self._offset + k1 * self._kernel2._r:self._offset + (k1 + 1) *
- self._kernel2._r] = kernel1_phi2right[:, k1, None] * kernel2_phi2right
- if dV2 is not None:
- dV2[:, self._offset + k1 * self._kernel2._r:self._offset +
- (k1 + 1) * self._kernel2._r] = kernel1_dV2[:, k1,
- None] * kernel2_V2 + kernel1_V2[:, k1, None] * kernel2_dV2
-
- def eval(self, dt):
- return (self._kernel1.eval(dt) * self._kernel2.eval(dt))
-
-
-class USHOKernel(QuasiperiodicKernel):
- r"""
- Under-damped SHO Kernel.
-
- This kernel follows the differential equation of
- a stochastically-driven harmonic oscillator (SHO)
- in the under-damped case (:math:`Q>0.5`).
- See `Foreman-Mackey et al. 2017 `_)
- for more details.
-
- Parameters
- ----------
- sig : float
- Amplitude (std).
- P0 : float
- Undamped period.
- Q : float
- Quality factor.
- eps : float
- Regularization parameter (1e-5 by default).
- """
-
- def __init__(self, sig, P0, Q, eps=1e-5):
- self._sig = sig
- self._P0 = P0
- self._Q = Q
- self._eps = eps
- super().__init__(*self._getcoefs())
- self._param = ['sig', 'P0', 'Q']
-
- def _getcoefs(self):
- self._sqQ = np.sqrt(max(4 * self._Q**2 - 1, self._eps))
- a = self._sig**2
- la = np.pi / (self._P0 * self._Q)
- b = a / self._sqQ
- nu = la * self._sqQ
- return (a, b, la, nu)
-
- def _set_param(self, sig=None, P0=None, Q=None):
- if sig is not None:
- self._sig = sig
- if P0 is not None:
- self._P0 = P0
- if Q is not None:
- self._Q = Q
- a, b, la, nu = self._getcoefs()
- super()._set_param(a, b, la, nu)
-
- def _grad_param(self, grad_dU=None, grad_dV=None):
- gradQP = super()._grad_param(grad_dU, grad_dV)
- grad = {}
- grad['sig'] = 2 * self._sig * (gradQP['a'] + gradQP['b'] / self._sqQ)
- grad['P0'] = -np.pi / (self._P0**2 * self._Q) * (gradQP['la'] +
- gradQP['nu'] * self._sqQ)
- grad['Q'] = -np.pi / (self._P0 * self._Q**2) * (gradQP['la'] +
- gradQP['nu'] * self._sqQ)
- if 4 * self._Q**2 - 1 > self._eps:
- grad['Q'] += 4 * self._Q / self._sqQ * (gradQP['nu'] * self._la -
- gradQP['b'] * self._a / self._sqQ**2)
- return (grad)
-
-
-class OSHOKernel(SumKernel):
- r"""
- Over-damped SHO Kernel.
-
- This kernel follows the differential equation of
- a stochastically-driven harmonic oscillator (SHO)
- in the over-damped case (:math:`Q<0.5`).
- See `Foreman-Mackey et al. 2017 `_)
- for more details.
-
- Parameters
- ----------
- sig : float
- Amplitude (std).
- P0 : float
- Undamped period.
- Q : float
- Quality factor.
- eps : float
- Regularization parameter (1e-5 by default).
- """
-
- def __init__(self, sig, P0, Q, eps=1e-5):
- self._sig = sig
- self._P0 = P0
- self._Q = Q
- self._eps = eps
- a1, la1, a2, la2 = self._getcoefs()
- self._exp1 = ExponentialKernel(a1, la1)
- self._exp2 = ExponentialKernel(a2, la2)
- super().__init__(self._exp1, self._exp2)
- self._param = ['sig', 'P0', 'Q']
-
- def _getcoefs(self):
- self._sqQ = np.sqrt(max(1 - 4 * self._Q**2, self._eps))
- self._a = self._sig**2
- self._la = np.pi / (self._P0 * self._Q)
- return (self._a * (1 + 1 / self._sqQ) / 2, self._la * (1 - self._sqQ),
- self._a * (1 - 1 / self._sqQ) / 2, self._la * (1 + self._sqQ))
-
- def _kernel_param(self, sig=None, P0=None, Q=None):
- if sig is not None:
- self._sig = sig
- if P0 is not None:
- self._P0 = P0
- if Q is not None:
- self._Q = Q
- a1, la1, a2, la2 = self._getcoefs()
- return (dict(a=a1, la=la1), dict(a=a2, la=la2))
-
- def _kernel_param_back(self, gradExp1, gradExp2):
- grad = {}
- grad['sig'] = 2 * self._sig * (gradExp1['a'] *
- (1 + 1 / self._sqQ) / 2 + gradExp2['a'] * (1 - 1 / self._sqQ) / 2)
- grad['P0'] = -np.pi / (self._P0**2 * self._Q) * (gradExp1['la'] *
- (1 - self._sqQ) + gradExp2['la'] * (1 + self._sqQ))
- grad['Q'] = -np.pi / (self._P0 * self._Q**2) * (gradExp1['la'] *
- (1 - self._sqQ) + gradExp2['la'] * (1 + self._sqQ))
- if 1 - 4 * self._Q**2 > self._eps:
- grad['Q'] -= 4 * self._Q / self._sqQ * (
- (gradExp2['a'] - gradExp1['a']) * self._a / (2 * self._sqQ**2) +
- (gradExp2['la'] - gradExp1['la']) * self._la)
- return (grad)
-
-
-class SHOKernel(Kernel):
- r"""
- SHO Kernel.
-
- This kernel follows the differential equation of
- a stochastically-driven harmonic oscillator (SHO).
- It merges the under-damped (:math:`Q>0.5`) :class:`USHOKernel`
- and the over-damped (:math:`Q<0.5`) :class:`OSHOKernel`.
- See `Foreman-Mackey et al. 2017 `_)
- for more details.
-
- Parameters
- ----------
- sig : float
- Amplitude (std).
- P0 : float
- Undamped period.
- Q : float
- Quality factor.
- eps : float
- Regularization parameter (1e-5 by default).
- """
-
- def __init__(self, sig, P0, Q, eps=1e-5):
- super().__init__()
- self._sig = sig
- self._P0 = P0
- self._Q = Q
- self._eps = eps
- self._usho = USHOKernel(sig, P0, Q, eps)
- self._osho = OSHOKernel(sig, P0, Q, eps)
- self._r = 2
- self._param = ['sig', 'P0', 'Q']
-
- def _link(self, cov, offset):
- super()._link(cov, offset)
- self._usho._link(cov, offset)
- self._osho._link(cov, offset)
-
- def _compute(self):
- if self._Q > 0.5:
- self._usho._compute()
- else:
- self._osho._compute()
-
- def _set_param(self, sig=None, P0=None, Q=None):
- if sig is not None:
- self._sig = sig
- if P0 is not None:
- self._P0 = P0
- if Q is not None:
- self._Q = Q
- if self._Q > 0.5:
- self._usho._set_param(self._sig, self._P0, self._Q)
- else:
- self._osho._set_param(self._sig, self._P0, self._Q)
-
- def _grad_param(self, grad_dU=None, grad_dV=None):
- if self._Q > 0.5:
- return (self._usho._grad_param(grad_dU, grad_dV))
- else:
- return (self._osho._grad_param(grad_dU, grad_dV))
-
- def _compute_t2(self, t2, dt2, U2, V2, phi2, ref2left, dt2left, dt2right,
- phi2left, phi2right):
- if self._Q > 0.5:
- self._usho._compute_t2(t2, dt2, U2, V2, phi2, ref2left, dt2left,
- dt2right, phi2left, phi2right)
- else:
- self._osho._compute_t2(t2, dt2, U2, V2, phi2, ref2left, dt2left,
- dt2right, phi2left, phi2right)
-
- def _deriv(self, calc_d2=False):
- if self._Q > 0.5:
- self._usho._deriv(calc_d2)
- else:
- self._osho._deriv(calc_d2)
-
- def _deriv_t2(self,
- t2,
- dt2,
- dU2,
- V2,
- phi2,
- ref2left,
- dt2left,
- dt2right,
- phi2left,
- phi2right,
- dV2=None):
- if self._Q > 0.5:
- self._usho._deriv_t2(t2, dt2, dU2, V2, phi2, ref2left, dt2left, dt2right,
- phi2left, phi2right, dV2)
- else:
- self._osho._deriv_t2(t2, dt2, dU2, V2, phi2, ref2left, dt2left, dt2right,
- phi2left, phi2right, dV2)
-
- def eval(self, dt):
- if self._Q > 0.5:
- return (self._usho.eval(dt))
- else:
- return (self._osho.eval(dt))
-
-
-class MEPKernel(SumKernel):
- r"""
- The Matérn 3/2 exponential periodic (MEP) kernel
- is a rank 6 kernel roughly approximating
- the squared-exponential periodic (SEP) kernel.
-
- The exact SEP kernel is written as
-
- .. math:: k(\Delta t) = \sigma^2 \exp \left(- \frac{\Delta t^2}{2 \rho^2}
- - \frac{\sin^2 \left( \frac{\pi \Delta t }{P}\right) }{2 \eta^2}\right),
-
- while the MEP kernel approximates it with
-
- .. math:: k(\Delta t) = \sigma^2\frac{k_{3/2}(\Delta t)
- + f k_{\mathrm{SHO,\,fund.}}(\Delta t)
- + \frac{f^2}{4} k_{\mathrm{SHO,\,harm.}}(\Delta t)}{1+f+\frac{f^2}{4}},
-
- where
-
- .. math::
- \begin{align}
- \nu &= \frac{2\pi}{P},\\
- f &= \frac{1}{4\eta^2},\\
- k_{3/2}(\Delta t) &= \exp\left(-\frac{\sqrt{3}\Delta t}{\rho}\right)
- \left(1+\frac{\sqrt{3}\Delta t}{\rho}\right),\\
- k_{\mathrm{SHO,\,fund.}}(\Delta t) &= \exp\left(-\frac{\Delta t}{\rho}\right)
- \left(\cos\left(\nu \Delta t\right)
- +\frac{1}{\nu\rho}\sin\left(\nu \Delta t\right)\right),\\
- k_{\mathrm{SHO,\,harm.}}(\Delta t) &= \exp\left(-\frac{\Delta t}{\rho}\right)
- \left(\cos\left(2\nu \Delta t\right)
- +\frac{1}{2\nu\rho}\sin\left(2\nu \Delta t\right)\right).
- \end{align}
-
- Parameters
- ----------
- sig : float
- Amplitude (std).
- P : float
- Period.
- rho : float
- Scale.
- eta : float
- Scale of oscillations.
- """
-
- def __init__(self, sig, P, rho, eta):
- self._sig = sig
- self._P = P
- self._rho = rho
- self._eta = eta
- sig0, a1, a2, b1, b2, la, nu = self._getcoefs()
- self._mat = Matern32Kernel(sig0, self._rho)
- self._qp1 = QuasiperiodicKernel(a1, b1, la, nu)
- self._qp2 = QuasiperiodicKernel(a2, b2, la, 2 * nu)
- super().__init__(self._mat, self._qp1, self._qp2)
- self._param = ['sig', 'P', 'rho', 'eta']
-
- def _getcoefs(self):
- la = 1 / self._rho
- self._var = self._sig * self._sig
- self._eta2 = self._eta * self._eta
- self._f = 1 / (4 * self._eta2)
- self._f2 = self._f * self._f
- self._f2_4 = self._f2 / 4
- self._deno = 1 + self._f + self._f2_4
- a0 = self._var / self._deno
- sig0 = np.sqrt(a0)
- a1 = self._f * a0
- a2 = self._f2_4 * a0
- nu = 2 * np.pi / self._P
- la_nu = la / nu
- b1 = a1 * la_nu
- b2 = a2 * la_nu / 2
- return (sig0, a1, a2, b1, b2, la, nu)
-
- def _kernel_param(self, sig=None, P=None, rho=None, eta=None):
- if sig is not None:
- self._sig = sig
- if P is not None:
- self._P = P
- if rho is not None:
- self._rho = rho
- if eta is not None:
- self._eta = eta
- sig0, a1, a2, b1, b2, la, nu = self._getcoefs()
- return (dict(sig=sig0, rho=self._rho), dict(a=a1, b=b1, la=la,
- nu=nu), dict(a=a2, b=b2, la=la, nu=2 * nu))
-
- def _kernel_param_back(self, gradMat, gradQP1, gradQP2):
- sgs0 = self._mat._sig * gradMat['sig']
- aga1 = self._qp1._a * gradQP1['a']
- aga2 = self._qp2._a * gradQP2['a']
- bgb1 = self._qp1._b * gradQP1['b']
- bgb2 = self._qp2._b * gradQP2['b']
- bgb = bgb1 + bgb2
- sgs = sgs0 + 2 * (aga1 + aga2 + bgb)
-
- grad = {}
- grad['sig'] = sgs / self._sig
- grad['P'] = (bgb - self._qp1._nu * gradQP1['nu'] -
- self._qp2._nu * gradQP2['nu']) / self._P
- grad['rho'] = gradMat['rho'] - (bgb + self._qp1._la *
- (gradQP1['la'] + gradQP2['la'])) / self._rho
- grad['eta'] = (sgs * (self._f + self._f2 / 2) / self._deno - 2 *
- (aga1 + bgb1 + 2 * (aga2 + bgb2))) / self._eta
- return (grad)
-
-
-class ESKernel(SumKernel):
- r"""
- The Exponential-sine (ES) kernel is a rank 3
- twice mean-square differentiable kernel
- approximating the squared-exponential (SE) kernel.
-
- The exact SE kernel is written as
-
- .. math:: k(\Delta t) = \sigma^2 \exp\left(-\frac{1}{2}
- \left(\frac{\Delta t}{\rho}\right)^2\right),
-
- while the ES kernel approximates it with
-
- .. math:: k(\Delta t) = \sigma^2 \exp\left(-\lambda \Delta t\right)
- \left(1 + \frac{1-2\mu^{-2}}{3} \left(\cos(\mu\lambda\Delta t) - 1\right)
- + \mu^{-1}\sin(\mu\lambda\Delta t)\right),
-
- with :math:`\lambda = \frac{c_\lambda}{\rho}`.
-
- Parameters
- ----------
- sig : float
- Amplitude (std).
- rho : float
- Scale.
- coef_la : float
- Coefficient :math:`c_\lambda`.
- The default value is chosen such as the deviation
- from the SE kernel is below 0.9%.
- mu : float
- Coefficient :math:`\mu`.
- The default value is chosen such as the deviation
- from the SE kernel is below 0.9%.
- """
-
- def __init__(self,
- sig,
- rho,
- coef_la=1.0907260149419182,
- mu=1.326644517327145):
-
- self._sig = sig
- self._rho = rho
-
- self._coef_la = coef_la
- self._mu = mu
- self._coef_b = 1 / self._mu
- self._coef_a0 = 2 / 3 * (1 + self._coef_b**2)
- self._coef_a = 1 - self._coef_a0
-
- a0, a, b, la, nu = self._getcoefs()
- self._exp = ExponentialKernel(a0, la)
- self._qp = QuasiperiodicKernel(a, b, la, nu)
- super().__init__(self._exp, self._qp)
- self._param = ['sig', 'rho']
-
- def _getcoefs(self):
- la = self._coef_la / self._rho
- nu = self._mu * la
- var = self._sig * self._sig
- a0 = self._coef_a0 * var
- a = self._coef_a * var
- b = self._coef_b * var
- return (a0, a, b, la, nu)
-
- def _kernel_param(self, sig=None, rho=None):
- if sig is not None:
- self._sig = sig
- if rho is not None:
- self._rho = rho
- a0, a, b, la, nu = self._getcoefs()
- return (dict(a=a0, la=la), dict(a=a, b=b, la=la, nu=nu))
-
- def _kernel_param_back(self, gradExp, gradQP):
- grad = {}
- grad['sig'] = 2 / self._sig * (gradExp['a'] * self._exp._a +
- gradQP['a'] * self._qp._a + gradQP['b'] * self._qp._b)
- grad['rho'] = -self._exp._la / self._rho * (gradExp['la'] + gradQP['la'] +
- self._mu * gradQP['nu'])
- return (grad)
-
-
-class _ESP_PKernel(SumKernel):
- r"""
- Periodic part of the :class:`ESPKernel`.
-
- Warnings
- --------
- This is not a valid kernel on its own.
- """
-
- def __init__(self, P, eta):
- self._P = P
- self._eta = eta
- a0, a1, a2, nu = self._getcoefs()
- self._exp = ExponentialKernel(a0, 0)
- self._qp1 = QuasiperiodicKernel(a1, 0, 0, nu)
- self._qp2 = QuasiperiodicKernel(a2, 0, 0, 2 * nu)
- super().__init__(self._exp, self._qp1, self._qp2)
- self._param = ['P', 'eta']
-
- def _getcoefs(self):
- self._eta2 = self._eta * self._eta
- self._f = 1 / (4 * self._eta2)
- self._f2 = self._f * self._f
- self._f2_4 = self._f2 / 4
- self._deno = 1 + self._f + self._f2_4
- a0 = 1 / self._deno
- a1 = self._f * a0
- a2 = self._f2_4 * a0
- nu = 2 * np.pi / self._P
- return (a0, a1, a2, nu)
-
- def _kernel_param(self, P=None, eta=None):
- if P is not None:
- self._P = P
- if eta is not None:
- self._eta = eta
- a0, a1, a2, nu = self._getcoefs()
- return (dict(a=a0), dict(a=a1, nu=nu), dict(a=a2, nu=2 * nu))
-
- def _kernel_param_back(self, gradExp, gradQP1, gradQP2):
- grad = {}
- aga0 = self._exp._a * gradExp['a']
- aga1 = self._qp1._a * gradQP1['a']
- aga2 = self._qp2._a * gradQP2['a']
- sgs = 2 * (aga0 + aga1 + aga2)
- grad['P'] = -(self._qp1._nu * gradQP1['nu'] +
- self._qp2._nu * gradQP2['nu']) / self._P
- grad['eta'] = (sgs * (self._f + self._f2 / 2) / self._deno - 2 *
- (aga1 + 2 * aga2)) / self._eta
- return (grad)
-
-
-class ESPKernel(ProductKernel):
- r"""
- The Exponential-sine periodic (ESP) kernel is a rank 15
- twice mean-square differentiable kernel
- approximating the squared-exponential periodic (SEP) kernel.
-
- The exact SEP kernel is written as
-
- .. math:: k(\Delta t) = \sigma^2 \exp \left(- \frac{\Delta t^2}{2 \rho^2}
- - \frac{\sin^2 \left( \frac{\pi \Delta t }{P}\right) }{2 \eta^2}\right),
-
- while the ESP kernel approximates it with
-
- .. math:: k(\Delta t) = \sigma^2 k_\mathrm{ES}(\rho;\Delta t)
- \frac{1 + f\cos\left(\nu \Delta t\right)
- + \frac{f^2}{4} \cos\left(2\nu\Delta t\right)}{1+f+\frac{f^2}{4}},
-
- where :math:`\nu = \frac{2\pi}{P}`, :math:`f = \frac{1}{4\eta^2}`,
- and :math:`k_\mathrm{ES}` is an :class:`ESKernel` with scale :math:`\rho`.
-
- Parameters
- ----------
- sig : float
- Amplitude (std).
- P : float
- Period.
- rho : float
- Scale.
- eta : float
- Scale of oscillations.
- """
-
- def __init__(self, sig, P, rho, eta):
- self._sig = sig
- self._P = P
- self._rho = rho
- self._eta = eta
- super().__init__(ESKernel(sig, rho), _ESP_PKernel(P, eta))
- self._param = ['sig', 'P', 'rho', 'eta']
-
- def _kernel_param(self, sig=None, P=None, rho=None, eta=None):
- if sig is not None:
- self._sig = sig
- if P is not None:
- self._P = P
- if rho is not None:
- self._rho = rho
- if eta is not None:
- self._eta = eta
- return (dict(sig=sig, rho=rho), dict(P=P, eta=eta))
-
- def _kernel_param_back(self, gradES, gradP):
- return ({**gradES, **gradP})
-
-
-class MultiSeriesKernel(Kernel):
- r"""
- Linear combination of a Kernel and its derivative
- applied to heterogenous time series.
-
- This kernel allows to model efficiently
- several (heterogeneous) time series (:math:`y_i`)
- which depend on different linear combinations
- of the same GP (:math:`G`)
- and its derivative (:math:`G'`):
-
- .. math:: y_{i,j} = \alpha_i G(t_{i,j}) + \beta_i G'(t_{i,j}).
-
- The times of measurements need not be the same for each time series
- (i.e. we may have :math:`t_{i,.} \neq t_{j,.}`).
-
- This allows to define models similar to
- `Rajpaul et al. (2015) `_
- but with fast and scalable algorithms.
-
- Parameters
- ----------
- kernel : Kernel
- Kernel of the GP (:math:`G`).
- series_index : list of ndarrays
- Indices corresponding to each original time series in the merged time series.
- alpha : list
- Coefficients in front of the GP for each original time series.
- beta : list or None
- Coefficients in front of the GP derivative for each original time series.
- If None, the derivative is ignored.
- """
-
- def __init__(self, kernel, series_index, alpha, beta=None):
- super().__init__()
- self._kernel = kernel
- self._series_index = series_index
- self._nseries = len(series_index)
- self._param = kernel._param + [f'alpha_{k}' for k in range(self._nseries)]
- self._alpha = alpha
- self._beta = beta
- if beta is None:
- self._with_derivative = False
- else:
- self._with_derivative = True
- self._param += [f'beta_{k}' for k in range(self._nseries)]
- self._r = kernel._r
-
- self._cond_alpha = 1
- self._cond_beta = 0
- self._cond_series_id = None
-
- def _link(self, cov, offset):
- super()._link(cov, offset)
- self._kernel._link(_FakeCov(cov.t, cov.dt, self._r), 0)
-
- def _compute(self):
- self._kernel._cov.A[:] = 0
- self._kernel._compute()
- if self._with_derivative:
- self._kernel._deriv(True)
- self._kernel._cov._B = np.sum(self._kernel._cov._dU *
- self._kernel._cov._dV,
- axis=1)
- for k in range(self._nseries):
- ik = self._series_index[k]
- # cov(GP, GP)
- self._cov.A[ik] += self._alpha[k]**2 * self._kernel._cov.A[ik]
- self._cov.U[ik, self._offset:self._offset +
- self._r] = self._alpha[k] * self._kernel._cov.U[ik]
- self._cov.V[ik, self._offset:self._offset +
- self._r] = self._alpha[k] * self._kernel._cov.V[ik]
- if self._with_derivative:
- # cov(GP, dGP), cov(dGP, GP), cov(dGP, dGP)
- self._cov.A[ik] += self._beta[k]**2 * self._kernel._cov._B[ik]
- self._cov.U[ik, self._offset:self._offset +
- self._r] += self._beta[k] * self._kernel._cov._dU[ik]
- self._cov.V[ik, self._offset:self._offset +
- self._r] += self._beta[k] * self._kernel._cov._dV[ik]
- self._cov.phi[:,
- self._offset:self._offset + self._r] = self._kernel._cov.phi
-
- def _set_param(self, *args, **kwargs):
- for karg, arg in enumerate(args):
- par = self._param[karg]
- if par in kwargs:
- raise Exception(
- f'MultiSeriesKernel._set_param: parameter {par} multiply defined.')
- kwargs[par] = arg
- kernel_kwargs = {}
- for par in kwargs:
- if par.startswith('alpha_'):
- self._alpha[int(par.replace('alpha_', ''))] = kwargs[par]
- elif par.startswith('beta_'):
- self._beta[int(par.replace('beta_', ''))] = kwargs[par]
- else:
- kernel_kwargs[par] = kwargs[par]
- self._kernel._set_param(**kernel_kwargs)
-
- def _get_param(self, par):
- if par.startswith('alpha_'):
- return (self._alpha[int(par.replace('alpha_', ''))])
- elif par.startswith('beta_'):
- return (self._beta[int(par.replace('beta_', ''))])
- else:
- return (self._kernel._get_param(par))
-
- def _grad_param(self):
- grad = {}
- for k in range(self._nseries):
- ik = self._series_index[k]
- # cov(GP, GP)
- grad[f'alpha_{k}'] = 2 * self._alpha[k] * np.sum(
- self._cov._grad_A[ik] * self._kernel._cov.A[ik])
- grad[f'alpha_{k}'] += np.sum(self._cov._grad_U[ik,
- self._offset:self._offset + self._r] * self._kernel._cov.U[ik] +
- self._cov._grad_V[ik, self._offset:self._offset + self._r] *
- self._kernel._cov.V[ik])
- self._kernel._cov._grad_A[ik] = self._alpha[k]**2 * self._cov._grad_A[ik]
- self._kernel._cov._grad_U[ik] = self._alpha[k] * self._cov._grad_U[ik,
- self._offset:self._offset + self._r]
- self._kernel._cov._grad_V[ik] = self._alpha[k] * self._cov._grad_V[ik,
- self._offset:self._offset + self._r]
- if self._with_derivative:
- # cov(GP, dGP), cov(dGP, GP), cov(dGP, dGP)
- grad[f'beta_{k}'] = 2 * self._beta[k] * np.sum(
- self._cov._grad_A[ik] * self._kernel._cov._B[ik])
- grad[f'beta_{k}'] += np.sum(self._cov._grad_U[ik,
- self._offset:self._offset + self._r] * self._kernel._cov._dU[ik] +
- self._cov._grad_V[ik, self._offset:self._offset + self._r] *
- self._kernel._cov._dV[ik])
- self._kernel._cov._grad_B[
- ik] = self._beta[k]**2 * self._cov._grad_A[ik]
- self._kernel._cov._grad_dU[ik] = self._beta[k] * self._cov._grad_U[ik,
- self._offset:self._offset + self._r]
- self._kernel._cov._grad_dV[ik] = self._beta[k] * self._cov._grad_V[ik,
- self._offset:self._offset + self._r]
- self._kernel._cov._grad_phi = self._cov._grad_phi[:,
- self._offset:self._offset + self._r]
-
- self._kernel._cov._sum_grad_A = np.sum(self._kernel._cov._grad_A)
- if self._with_derivative:
- self._kernel._cov._grad_dU += self._kernel._cov._dV * self._kernel._cov._grad_B[:,
- None]
- self._kernel._cov._grad_dV += self._kernel._cov._dU * self._kernel._cov._grad_B[:,
- None]
- grad.update(
- self._kernel._grad_param(self._kernel._cov._grad_dU,
- self._kernel._cov._grad_dV))
- else:
- grad.update(self._kernel._grad_param())
-
- return (grad)
-
- def set_conditional_coef(self, alpha=1, beta=0, series_id=None):
- r"""
- Set the coefficients used for the conditional computations.
-
- Parameters
- ----------
- alpha : float
- Amplitude in front of the GP.
- This is only used if series_id is None.
- beta : float
- Amplitude in front of the GP derivative.
- This is only used if series_id is None.
- series_id : int
- Use the coefficents corresponding to a given time series.
- """
-
- self._cond_series_id = series_id
- if series_id is None:
- self._cond_alpha = alpha
- self._cond_beta = beta
- else:
- self._cond_alpha = None
- self._cond_beta = None
-
- def set_conditionnal_coef(self, *args, **kwargs):
- r"""
- Same as the :func:`set_conditional_coef` method (here for backward-compatibility).
- """
-
- warnings.warn(
- "Please use the set_conditional_coef method (with a single n).",
- DeprecationWarning)
- self.set_conditional_coef(*args, **kwargs)
-
- def _compute_t2(self, t2, dt2, U2, V2, phi2, ref2left, dt2left, dt2right,
- phi2left, phi2right):
-
- if self._cond_series_id is None:
- alpha = self._cond_alpha
- if self._with_derivative:
- beta = self._cond_beta
- else:
- alpha = self._alpha[self._cond_series_id]
- if self._with_derivative:
- beta = self._beta[self._cond_series_id]
-
- kernel_U2 = np.empty((t2.size, self._r))
- kernel_V2 = np.empty((t2.size, self._r))
- kernel_phi2 = np.empty((t2.size - 1, self._r))
- kernel_phi2left = np.empty((t2.size, self._r))
- kernel_phi2right = np.empty((t2.size, self._r))
- self._kernel._compute_t2(t2, dt2, kernel_U2, kernel_V2, kernel_phi2,
- ref2left, dt2left, dt2right, kernel_phi2left, kernel_phi2right)
- # cov(GP, GP)
- U2[:, self._offset:self._offset + self._r] = alpha * kernel_U2
- V2[:, self._offset:self._offset + self._r] = alpha * kernel_V2
- phi2[:, self._offset:self._offset + self._r] = kernel_phi2
- phi2left[:, self._offset:self._offset + self._r] = kernel_phi2left
- phi2right[:, self._offset:self._offset + self._r] = kernel_phi2right
-
- if self._with_derivative and beta != 0:
- kernel_dU2 = np.empty((t2.size, self._r))
- kernel_dV2 = np.empty((t2.size, self._r))
- self._kernel._deriv_t2(t2, dt2, kernel_dU2, kernel_V2, kernel_phi2,
- ref2left, dt2left, dt2right, kernel_phi2left, kernel_phi2right,
- kernel_dV2)
- # cov(GP, dGP), cov(dGP, GP), cov(dGP, dGP)
- U2[:, self._offset:self._offset + self._r] += beta * kernel_dU2
- V2[:, self._offset:self._offset + self._r] += beta * kernel_dV2
-
- def _deriv(self, calc_d2=False):
- if self._with_derivative:
- raise NotImplementedError
- else:
- self._kernel._deriv(calc_d2)
- for k in range(self._nseries):
- ik = self._series_index[k]
- self._cov._dU[ik, self._offset:self._offset +
- self._r] = self._alpha[k] * self._kernel._cov._dU
- if calc_d2:
- self._cov._dV[ik, self._offset:self._offset +
- self._r] = self._alpha[k] * self._kernel._cov._dV
-
- def _deriv_t2(self,
- t2,
- dt2,
- dU2,
- V2,
- phi2,
- ref2left,
- dt2left,
- dt2right,
- phi2left,
- phi2right,
- dV2=None):
-
- if self._with_derivative:
- raise NotImplementedError
- else:
- if self._cond_series_id is None:
- alpha = self._cond_alpha
- else:
- alpha = self._alpha[self._cond_series_id]
- kernel_dU2 = np.empty((t2.size, self._r))
- kernel_V2 = np.empty((t2.size, self._r))
- kernel_phi2 = np.empty((t2.size - 1, self._r))
- kernel_phi2left = np.empty((t2.size, self._r))
- kernel_phi2right = np.empty((t2.size, self._r))
- if dV2 is None:
- kernel_dV2 = None
- else:
- kernel_dV2 = np.empty((t2.size, self._r))
- self._kernel._deriv_t2(t2, dt2, kernel_dU2, kernel_V2, kernel_phi2,
- ref2left, dt2left, dt2right, kernel_phi2left, kernel_phi2right,
- kernel_dV2)
- dU2[:, self._offset:self._offset + self._r] = alpha * kernel_dU2
- V2[:, self._offset:self._offset + self._r] = alpha * kernel_V2
- if dV2 is not None:
- dV2[:, self._offset:self._offset + self._r] = alpha * kernel_dV2
-
- phi2[:, self._offset:self._offset + self._r] = kernel_phi2
- phi2left[:, self._offset:self._offset + self._r] = kernel_phi2left
- phi2right[:, self._offset:self._offset + self._r] = kernel_phi2right
-
- def eval(self, dt):
- return (self._kernel.eval(dt))
diff --git a/kima/vendor/spleaf/spleaf_env.yml b/kima/vendor/spleaf/spleaf_env.yml
deleted file mode 100644
index d389b2e..0000000
--- a/kima/vendor/spleaf/spleaf_env.yml
+++ /dev/null
@@ -1,12 +0,0 @@
-name: spleaf
-channels:
- - conda-forge
-dependencies:
- - python>=3.6
- - numpy>=1.16
- - pytest
- - sphinx
- - numpydoc
- - matplotlib
- - scipy
- - twine
diff --git a/kima/vendor/spleaf/test/test_cov.py b/kima/vendor/spleaf/test/test_cov.py
deleted file mode 100644
index bdbc62c..0000000
--- a/kima/vendor/spleaf/test/test_cov.py
+++ /dev/null
@@ -1,844 +0,0 @@
-import pytest
-import numpy as np
-from spleaf.cov import Cov
-from spleaf.term import *
-
-prec = 1e-12
-n = 143
-ninst = 3
-calibmax = 12
-calibprob = 0.8
-nexp = 1
-nqper = 1
-nmat32 = 1
-nmat52 = 1
-nes = 1
-nusho = 1
-nosho = 1
-nsho = 1
-nmep = 1
-nesp = 1
-delta = 1e-6
-coef_delta = -1.3
-coef_num_err = 10
-
-
-def _grad1d(x, f, k, deltaxk0, deltafmin, deltafmax, maxiter, absolute, args):
- xb = x.copy()
- deltaxk = deltaxk0
- fx = f(x, *args)
- if absolute:
- scale = 1.0
- else:
- scale = 1.0 / np.mean(np.abs(fx))
- xb[k] = x[k] + deltaxk
- fxb = f(xb, *args)
- for _ in range(maxiter):
- df = scale * np.mean(np.abs(fxb - fx))
- if df < deltafmin:
- deltaxk *= 2.0
- elif df > deltafmax:
- deltaxk /= 2.0
- else:
- break
- xb[k] = x[k] + deltaxk
- fxb = f(xb, *args)
- return ((fxb - fx) / deltaxk)
-
-
-def grad(x,
- f,
- deltax0=1e-8,
- deltafmin=1e-8,
- deltafmax=5e-8,
- maxiter=50,
- absolute=False,
- args=()):
- if isinstance(deltax0, float):
- deltax = np.full_like(x, deltax0)
- else:
- deltax = deltax0
- return (np.array([
- _grad1d(x, f, k, deltax[k], deltafmin, deltafmax, maxiter, absolute, args)
- for k in range(x.size)
- ]))
-
-
-def _generate_random_C(seed=0, deriv=False):
- np.random.seed(seed)
- t = np.cumsum(10**np.random.uniform(-2, 1.5, n))
- sig_err = np.random.uniform(0.5, 1.5, n)
- sig_jitter = np.random.uniform(0.5, 1.5)
- inst_id = np.random.randint(0, ninst, n)
- sig_jitter_inst = np.random.uniform(0.5, 1.5, ninst)
- calib_file = np.empty(n, dtype=object)
- sig_calib_meas = np.empty(n)
- lastfileinst = ["" for _ in range(ninst)]
- lastvarinst = [0 for _ in range(ninst)]
- nlastinst = [0 for _ in range(ninst)]
- for k in range(n):
- i = inst_id[k]
- if lastfileinst[i] == "" or nlastinst[i] == calibmax or np.random.rand(
- ) > calibprob:
- calib_file[k] = '{}'.format(k)
- sig_calib_meas[k] = np.random.uniform(0.5, 1.5)
- lastfileinst[i] = calib_file[k]
- lastvarinst[i] = sig_calib_meas[k]
- nlastinst[i] = 1
- else:
- calib_file[k] = lastfileinst[i]
- sig_calib_meas[k] = lastvarinst[i]
- nlastinst[i] += 1
- sig_calib_inst = np.random.uniform(0.5, 1.5, ninst)
- if not deriv:
- a_exp = np.random.uniform(0.5, 1.5, nexp)
- la_exp = 10**np.random.uniform(-2, 2, nexp)
- a_qper = np.random.uniform(0.5, 1.5, nqper)
- b_qper = np.random.uniform(0.05, 0.15, nqper)
- la_qper = 10**np.random.uniform(-2, 2, nqper)
- nu_qper = 10**np.random.uniform(-2, 2, nqper)
- sig_mat32 = np.random.uniform(0.5, 1.5, nmat32)
- rho_mat32 = 10**np.random.uniform(-2, 2, nmat32)
- sig_mat52 = np.random.uniform(0.5, 1.5, nmat52)
- rho_mat52 = 10**np.random.uniform(-2, 2, nmat52)
- sig_es = np.random.uniform(0.5, 1.5, nes)
- rho_es = 10**np.random.uniform(-2, 2, nes)
- sig_usho = np.random.uniform(0.5, 1.5, nusho)
- P0_usho = 10**np.random.uniform(-2, 2, nusho)
- Q_usho = np.random.uniform(0.5, 20.0, nusho)
- sig_osho = np.random.uniform(0.5, 1.5, nosho)
- P0_osho = 10**np.random.uniform(-2, 2, nosho)
- Q_osho = np.random.uniform(0.01, 0.5, nosho)
- sig_sho = np.random.uniform(0.5, 1.5, nsho)
- P0_sho = 10**np.random.uniform(-2, 2, nsho)
- Q_sho = np.random.uniform(0.01, 2.0, nsho)
- sig_mep = np.random.uniform(0.5, 1.5, nmep)
- P_mep = 10**np.random.uniform(-2, 2, nmep)
- rho_mep = 10**np.random.uniform(-2, 2, nmep)
- eta_mep = 10**np.random.uniform(-2, 1, nmep)
- sig_esp = np.random.uniform(0.5, 1.5, nesp)
- P_esp = 10**np.random.uniform(-2, 2, nesp)
- rho_esp = 10**np.random.uniform(-2, 2, nesp)
- eta_esp = 10**np.random.uniform(-2, 1, nesp)
-
- if deriv:
- return (Cov(t,
- err=Error(sig_err),
- jit=Jitter(sig_jitter),
- **{
- f'insjit_{k}': InstrumentJitter(inst_id == k, sig_jitter_inst[k])
- for k in range(ninst)
- },
- calerr=CalibrationError(calib_file, sig_calib_meas),
- **{
- f'caljit_{k}': CalibrationJitter(inst_id == k, calib_file,
- sig_calib_inst[k])
- for k in range(ninst)
- },
- **{
- f'mat32_{k}': Matern32Kernel(sig_mat32[k], rho_mat32[k])
- for k in range(nmat32)
- },
- **{
- f'mat52_{k}': Matern52Kernel(sig_mat52[k], rho_mat52[k])
- for k in range(nmat52)
- },
- **{f'es_{k}': ESKernel(sig_es[k], rho_es[k])
- for k in range(nes)},
- **{
- f'usho_{k}': USHOKernel(sig_usho[k], P0_usho[k], Q_usho[k])
- for k in range(nusho)
- },
- **{
- f'osho_{k}': OSHOKernel(sig_osho[k], P0_osho[k], Q_osho[k])
- for k in range(nosho)
- },
- **{
- f'sho_{k}': SHOKernel(sig_sho[k], P0_sho[k], Q_sho[k])
- for k in range(nsho)
- },
- **{
- f'mep_{k}': MEPKernel(sig_mep[k], P_mep[k], rho_mep[k], eta_mep[k])
- for k in range(nmep)
- },
- **{
- f'esp_{k}': ESPKernel(sig_esp[k], P_esp[k], rho_esp[k], eta_esp[k])
- for k in range(nesp)
- }))
- else:
- return (Cov(t,
- err=Error(sig_err),
- jit=Jitter(sig_jitter),
- **{
- f'insjit_{k}': InstrumentJitter(inst_id == k, sig_jitter_inst[k])
- for k in range(ninst)
- },
- calerr=CalibrationError(calib_file, sig_calib_meas),
- **{
- f'caljit_{k}': CalibrationJitter(inst_id == k, calib_file,
- sig_calib_inst[k])
- for k in range(ninst)
- },
- **{
- f'exp_{k}': ExponentialKernel(a_exp[k], la_exp[k])
- for k in range(nexp)
- },
- **{
- f'qper_{k}': QuasiperiodicKernel(a_qper[k], b_qper[k], la_qper[k],
- nu_qper[k])
- for k in range(nqper)
- },
- **{
- f'mat32_{k}': Matern32Kernel(sig_mat32[k], rho_mat32[k])
- for k in range(nmat32)
- },
- **{
- f'mat52_{k}': Matern52Kernel(sig_mat52[k], rho_mat52[k])
- for k in range(nmat52)
- },
- **{f'es_{k}': ESKernel(sig_es[k], rho_es[k])
- for k in range(nes)},
- **{
- f'usho_{k}': USHOKernel(sig_usho[k], P0_usho[k], Q_usho[k])
- for k in range(nusho)
- },
- **{
- f'osho_{k}': OSHOKernel(sig_osho[k], P0_osho[k], Q_osho[k])
- for k in range(nosho)
- },
- **{
- f'sho_{k}': SHOKernel(sig_sho[k], P0_sho[k], Q_sho[k])
- for k in range(nsho)
- },
- **{
- f'mep_{k}': MEPKernel(sig_mep[k], P_mep[k], rho_mep[k], eta_mep[k])
- for k in range(nmep)
- },
- **{
- f'esp_{k}': ESPKernel(sig_esp[k], P_esp[k], rho_esp[k], eta_esp[k])
- for k in range(nesp)
- }))
-
-
-def _generate_random_param(seed=1):
- np.random.seed(seed)
- sig_jitter = np.random.uniform(0.5, 1.5, 1)
- sig_jitter_inst = np.random.uniform(0.5, 1.5, ninst)
- sig_calib_inst = np.random.uniform(0.5, 1.5, ninst)
- a_exp = np.random.uniform(0.5, 1.5, nexp)
- la_exp = 10**np.random.uniform(-2, 2, nexp)
- a_qper = np.random.uniform(0.5, 1.5, nqper)
- b_qper = np.random.uniform(0.05, 0.15, nqper)
- la_qper = 10**np.random.uniform(-2, 2, nqper)
- nu_qper = 10**np.random.uniform(-2, 2, nqper)
- sig_mat32 = np.random.uniform(0.5, 1.5, nmat32)
- rho_mat32 = 10**np.random.uniform(-2, 2, nmat32)
- sig_mat52 = np.random.uniform(0.5, 1.5, nmat52)
- rho_mat52 = 10**np.random.uniform(-2, 2, nmat52)
- sig_es = np.random.uniform(0.5, 1.5, nes)
- rho_es = 10**np.random.uniform(-2, 2, nes)
- sig_usho = np.random.uniform(0.5, 1.5, nusho)
- P0_usho = 10**np.random.uniform(-2, 2, nusho)
- Q_usho = np.random.uniform(0.5, 20.0, nusho)
- sig_osho = np.random.uniform(0.5, 1.5, nosho)
- P0_osho = 10**np.random.uniform(-2, 2, nosho)
- Q_osho = np.random.uniform(0.01, 0.5, nosho)
- sig_sho = np.random.uniform(0.5, 1.5, nsho)
- P0_sho = 10**np.random.uniform(-2, 2, nsho)
- Q_sho = np.random.uniform(0.01, 2.0, nsho)
- sig_mep = np.random.uniform(0.5, 1.5, nmep)
- P_mep = 10**np.random.uniform(-2, 2, nmep)
- rho_mep = 10**np.random.uniform(-2, 2, nmep)
- eta_mep = 10**np.random.uniform(-2, 1, nmep)
- sig_esp = np.random.uniform(0.5, 1.5, nesp)
- P_esp = 10**np.random.uniform(-2, 2, nesp)
- rho_esp = 10**np.random.uniform(-2, 2, nesp)
- eta_esp = 10**np.random.uniform(-2, 1, nesp)
-
- return (sig_jitter, sig_jitter_inst, sig_calib_inst, a_exp, la_exp, a_qper,
- b_qper, la_qper, nu_qper, sig_mat32, rho_mat32, sig_mat52, rho_mat52,
- sig_es, rho_es, sig_usho, P0_usho, Q_usho, sig_osho, P0_osho, Q_osho,
- sig_sho, P0_sho, Q_sho, sig_mep, P_mep, rho_mep, eta_mep, sig_esp, P_esp,
- rho_esp, eta_esp)
-
-
-def test_Cov():
- C = _generate_random_C()
-
- C_full = C.expand()
- L_full = C.expandL()
- D_full = np.diag(C.D)
-
- LDLt_full = L_full @ D_full @ L_full.T
- err = np.max(
- np.abs(C_full - LDLt_full)) / np.max(np.abs(C_full) + np.abs(LDLt_full))
- assert err < prec, ('Cholesky decomposition not working'
- ' at required precision ({} > {})').format(err, prec)
-
-
-def test_set_param():
- C = _generate_random_C()
- param = list(_generate_random_param())
- Cb = Cov(C.t,
- err=Error(C.term['err']._sig),
- jit=Jitter(param[0][0]),
- **{
- f'insjit_{k}': InstrumentJitter(C.term[f'insjit_{k}']._indices,
- param[1][k])
- for k in range(ninst)
- },
- calerr=CalibrationError(C.term['calerr']._calib_id, C.term['calerr']._sig),
- **{
- f'caljit_{k}': CalibrationJitter(C.term[f'insjit_{k}']._indices,
- C.term['calerr']._calib_id, param[2][k])
- for k in range(ninst)
- },
- **{
- f'exp_{k}': ExponentialKernel(param[3][k], param[4][k])
- for k in range(nexp)
- },
- **{
- f'qper_{k}': QuasiperiodicKernel(param[5][k], param[6][k], param[7][k],
- param[8][k])
- for k in range(nqper)
- },
- **{
- f'mat32_{k}': Matern32Kernel(param[9][k], param[10][k])
- for k in range(nmat32)
- },
- **{
- f'mat52_{k}': Matern52Kernel(param[11][k], param[12][k])
- for k in range(nmat52)
- },
- **{f'es_{k}': ESKernel(param[13][k], param[14][k])
- for k in range(nes)},
- **{
- f'usho_{k}': USHOKernel(param[15][k], param[16][k], param[17][k])
- for k in range(nusho)
- },
- **{
- f'osho_{k}': OSHOKernel(param[18][k], param[19][k], param[20][k])
- for k in range(nosho)
- },
- **{
- f'sho_{k}': SHOKernel(param[21][k], param[22][k], param[23][k])
- for k in range(nsho)
- },
- **{
- f'mep_{k}': MEPKernel(param[24][k], param[25][k], param[26][k],
- param[27][k])
- for k in range(nmep)
- },
- **{
- f'esp_{k}': ESPKernel(param[28][k], param[29][k], param[30][k],
- param[31][k])
- for k in range(nesp)
- })
-
- C.set_param(np.concatenate(param),
- ['jit.sig'] + [f'insjit_{k}.sig'
- for k in range(ninst)] + [f'caljit_{k}.sig'
- for k in range(ninst)] + [f'exp_{k}.a'
- for k in range(nexp)] + [f'exp_{k}.la'
- for k in range(nexp)] + [f'qper_{k}.a'
- for k in range(nqper)] + [f'qper_{k}.b'
- for k in range(nqper)] + [f'qper_{k}.la'
- for k in range(nqper)] + [f'qper_{k}.nu'
- for k in range(nqper)] + [f'mat32_{k}.sig'
- for k in range(nmat32)] + [f'mat32_{k}.rho'
- for k in range(nmat32)] + [f'mat52_{k}.sig'
- for k in range(nmat52)] + [f'mat52_{k}.rho'
- for k in range(nmat52)] + [f'es_{k}.sig'
- for k in range(nes)] + [f'es_{k}.rho'
- for k in range(nes)] + [f'usho_{k}.sig'
- for k in range(nusho)] + [f'usho_{k}.P0'
- for k in range(nusho)] + [f'usho_{k}.Q'
- for k in range(nusho)] + [f'osho_{k}.sig'
- for k in range(nosho)] + [f'osho_{k}.P0'
- for k in range(nosho)] + [f'osho_{k}.Q'
- for k in range(nosho)] + [f'sho_{k}.sig'
- for k in range(nsho)] + [f'sho_{k}.P0'
- for k in range(nsho)] + [f'sho_{k}.Q'
- for k in range(nsho)] + [f'mep_{k}.sig'
- for k in range(nmep)] + [f'mep_{k}.P'
- for k in range(nmep)] + [f'mep_{k}.rho'
- for k in range(nmep)] + [f'mep_{k}.eta'
- for k in range(nmep)] + [f'esp_{k}.sig'
- for k in range(nesp)] + [f'esp_{k}.P'
- for k in range(nesp)] + [f'esp_{k}.rho'
- for k in range(nesp)] + [f'esp_{k}.eta' for k in range(nesp)])
-
- C_full = C.expand()
- Cb_full = Cb.expand()
- L_full = C.expandL()
- Lb_full = Cb.expandL()
-
- err = np.max(
- np.abs(C_full - Cb_full)) / np.max(np.abs(C_full) + np.abs(Cb_full))
- err = max(
- err,
- np.max(np.abs(L_full - Lb_full)) /
- np.max(np.abs(L_full) + np.abs(Lb_full)))
- err = max(err,
- np.max(np.abs(C.D - Cb.D)) / np.max(np.abs(C.D) + np.abs(Cb.D)))
-
- assert err < prec, ('set_param not working'
- ' at required precision ({} > {})').format(err, prec)
-
-
-def test_inv():
- C = _generate_random_C()
-
- C_full = C.expand()
- invC_full = C.expandInv()
-
- CinvC_full = C_full @ invC_full
- err = np.max(np.abs(CinvC_full - np.identity(n)))
- assert err < prec, ('Inversion not working'
- ' at required precision ({} > {})').format(err, prec)
-
-
-def test_invL():
- C = _generate_random_C()
-
- L_full = C.expandL()
- invL_full = C.expandInvL()
-
- LinvL_full = L_full @ invL_full
- err = np.max(np.abs(LinvL_full - np.identity(n)))
- assert err < prec, ('Cholesky inversion not working'
- ' at required precision ({} > {})').format(err, prec)
-
-
-def test_logdet():
- C = _generate_random_C()
-
- logdet = C.logdet()
-
- C_full = C.expand()
- sign_full, logdet_full = np.linalg.slogdet(C_full)
-
- err = abs(logdet / logdet_full - 1)
-
- assert sign_full > 0, 'logdet is not positive'
- assert err < prec, ('logdet not working'
- ' at required precision ({} > {})').format(err, prec)
-
-
-def test_dotL():
- C = _generate_random_C()
- x = np.random.normal(0.0, 1.0, C.n)
-
- y = C.dotL(x)
-
- L_full = C.expandL()
- y_full = L_full.dot(x)
-
- err = np.max(np.abs(y - y_full)) / np.max(np.abs(y) + np.abs(y_full))
-
- assert err < prec, ('dotL not working'
- ' at required precision ({} > {})').format(err, prec)
-
-
-def test_solveL():
- C = _generate_random_C()
- y = np.random.normal(0.0, 5.0, C.n)
-
- x = C.solveL(y)
-
- L_full = C.expandL()
- x_full = np.linalg.solve(L_full, y)
-
- err = np.max(np.abs(x - x_full)) / np.max(np.abs(x) + np.abs(x_full))
-
- assert err < prec, ('solveL not working'
- ' at required precision ({} > {})').format(err, prec)
-
-
-def test_chi2():
- C = _generate_random_C()
- y = np.random.normal(0.0, 5.0, C.n)
-
- chi2 = C.chi2(y)
-
- C_full = C.expand()
- invC_full = np.linalg.inv(C_full)
- chi2_full = y.T @ invC_full @ y
-
- err = abs(chi2 - chi2_full) / (abs(chi2) + abs(chi2_full))
-
- assert err < prec, ('chi2 not working'
- ' at required precision ({} > {})').format(err, prec)
-
-
-def test_loglike():
- C = _generate_random_C()
- y = np.random.normal(0.0, 5.0, C.n)
-
- loglike = C.loglike(y)
-
- C_full = C.expand()
- invC_full = np.linalg.inv(C_full)
- chi2_full = y.T @ invC_full @ y
- _, logdet_full = np.linalg.slogdet(C_full)
- loglike_full = -0.5 * (chi2_full + logdet_full + C.n * np.log(2.0 * np.pi))
-
- err = abs(loglike - loglike_full) / (abs(loglike) + abs(loglike_full))
- assert err < prec, ('loglike not working'
- ' at required precision ({} > {})').format(err, prec)
-
-
-def _test_method_back(method):
- """
- Common code for testing dotL_back, solveL_back, dotLT_back, solveLT_back
- """
- C = _generate_random_C()
- a = np.random.normal(0.0, 5.0, C.n)
- grad_b = np.random.normal(0.0, 1.0, C.n)
-
- # Analytical grad
- func = getattr(C, method)
- _ = func(a)
- C.init_grad()
- grad_a = getattr(C, method + '_back')(grad_b)
- C.cholesky_back()
- grad_param = C.grad_param()
-
- # Numerical grad
- def func_param(x):
- C.set_param(x)
- return (func(a))
-
- grad_a_num = []
- grad_param_num = []
- for delta0 in [delta, coef_delta * delta]:
- grad_a_num.append(grad(a, func, deltax0=delta0) @ grad_b)
- grad_param_num.append(
- grad(C.get_param(), func_param, deltax0=delta0) @ grad_b)
-
- # Comparison
- err = np.max(
- np.abs(grad_a - np.mean(grad_a_num, axis=0)) /
- (np.abs(grad_a_num[1]) + np.abs(grad_a_num[0])))
- num_err = np.max(
- np.abs(grad_a_num[1] - grad_a_num[0]) /
- (np.abs(grad_a_num[1]) + np.abs(grad_a_num[0])))
- err = max(0.0, err - coef_num_err * num_err)
- assert err < prec, ('{}_back (a) not working'
- ' at required precision ({} > {})').format(method, err, prec)
-
- err = np.max(
- np.abs(grad_param - np.mean(grad_param_num, axis=0)) /
- (np.abs(grad_param_num[1]) + np.abs(grad_param_num[0])))
- num_err = np.max(
- np.abs(grad_param_num[1] - grad_param_num[0]) /
- (np.abs(grad_param_num[1]) + np.abs(grad_param_num[0])))
- err = max(0.0, err - coef_num_err * num_err)
- assert err < prec, ('{}_back (param) not working'
- ' at required precision ({} > {})').format(method, err, prec)
-
-
-def test_dotL_back():
- _test_method_back('dotL')
-
-
-def test_solveL_back():
- _test_method_back('solveL')
-
-
-def test_dotLT_back():
- _test_method_back('dotLT')
-
-
-def test_solveLT_back():
- _test_method_back('solveLT')
-
-
-def _test_method_grad(method):
- """
- Common code for testing chi2_grad, loglike_grad
- """
- C = _generate_random_C()
- y = np.random.normal(0.0, 5.0, C.n)
-
- # Analytical grad
- func = getattr(C, method)
- _ = func(y)
- f_grad_res, f_grad_param = getattr(C, method + '_grad')()
-
- # Numerical grad
- def func_param(x):
- C.set_param(x)
- return (func(y))
-
- f_grad_res_num = []
- f_grad_param_num = []
- for delta0 in [delta, coef_delta * delta]:
- f_grad_res_num.append(grad(y, func, deltax0=delta0))
- f_grad_param_num.append(grad(C.get_param(), func_param, deltax0=delta0))
-
- # Comparison
- err = np.max(
- np.abs(f_grad_res - np.mean(f_grad_res_num, axis=0)) /
- (np.abs(f_grad_res_num[1]) + np.abs(f_grad_res_num[0])))
- num_err = np.max(
- np.abs(f_grad_res_num[1] - f_grad_res_num[0]) /
- (np.abs(f_grad_res_num[1]) + np.abs(f_grad_res_num[0])))
- err = max(0.0, err - coef_num_err * num_err)
- assert err < prec, ('{}_grad (y) not working'
- ' at required precision ({} > {})').format(method, err, prec)
-
- err = np.max(
- np.abs(f_grad_param - np.mean(f_grad_param_num, axis=0)) /
- (np.abs(f_grad_param_num[1]) + np.abs(f_grad_param_num[0])))
- num_err = np.max(
- np.abs(f_grad_param_num[1] - f_grad_param_num[0]) /
- (np.abs(f_grad_param_num[1]) + np.abs(f_grad_param_num[0])))
- err = max(0.0, err - coef_num_err * num_err)
- assert err < prec, ('{}_grad (param) not working'
- ' at required precision ({} > {})').format(method, err, prec)
-
-
-def test_chi2_grad():
- _test_method_grad('chi2')
-
-
-def test_loglike_grad():
- _test_method_grad('loglike')
-
-
-def _test_self_conditional(kernel=None):
- print(kernel)
- C = _generate_random_C()
- y = C.sample()
-
- mu = C.self_conditional(y, kernel=kernel)
- muv, var = C.self_conditional(y, calc_cov='diag', kernel=kernel)
- muc, cov = C.self_conditional(y, calc_cov=True, kernel=kernel)
-
- invC_full = C.expandInv()
- invCy_full = invC_full.dot(y)
- term = {}
- if kernel is None:
- kernel = C.kernel
- for key in kernel:
- term[key] = C.kernel[key].__class__(
- *[getattr(C.kernel[key], f'_{param}') for param in C.kernel[key]._param])
- print(term)
- K = Cov(C.t, **term)
- K_full = K.expand()
- mu_full = K_full @ invCy_full
- cov_full = K_full - K_full @ invC_full @ K_full
- var_full = np.diag(cov_full)
-
- err = np.max(np.abs(mu - mu_full)) / np.max(np.abs(mu) + np.abs(mu_full))
- assert err < prec, ('self_conditional not working'
- ' at required precision ({} > {})').format(err, prec)
-
- err = np.max(np.abs(muv - mu_full)) / np.max(np.abs(muv) + np.abs(mu_full))
- assert err < prec, ('self_conditional not working'
- ' at required precision ({} > {})').format(err, prec)
-
- err = np.max(np.abs(muc - mu_full)) / np.max(np.abs(muc) + np.abs(mu_full))
- assert err < prec, ('self_conditional not working'
- ' at required precision ({} > {})').format(err, prec)
-
- err = np.max(np.abs(var - var_full)) / np.max(np.abs(var) + np.abs(var_full))
- assert err < prec, ('self_conditional not working'
- ' at required precision ({} > {})').format(err, prec)
-
- err = np.max(np.abs(cov - cov_full)) / np.max(np.abs(cov) + np.abs(cov_full))
- assert err < prec, ('self_conditional not working'
- ' at required precision ({} > {})').format(err, prec)
-
-
-def _test_conditional(kernel=None):
- C = _generate_random_C()
- y = C.sample()
-
- n2 = 300
- Dt = C.t[-1] - C.t[0]
- margin = Dt / 10
- t2 = np.linspace(C.t[0] - margin, C.t[-1] + margin, n2)
- mu = C.conditional(y, t2, kernel=kernel)
- muv, var = C.conditional(y, t2, calc_cov='diag', kernel=kernel)
- muc, cov = C.conditional(y, t2, calc_cov=True, kernel=kernel)
-
- invC_full = C.expandInv()
- invCy_full = invC_full.dot(y)
- Km_full = C.eval(t2[:, None] - C.t[None, :], kernel=kernel)
- term = {}
- if kernel is None:
- kernel = C.kernel
- for key in kernel:
- term[key] = C.kernel[key].__class__(
- *[getattr(C.kernel[key], f'_{param}') for param in C.kernel[key]._param])
- K = Cov(t2, **term)
- K_full = K.expand()
- mu_full = Km_full @ invCy_full
- cov_full = K_full - Km_full @ invC_full @ Km_full.T
- var_full = np.diag(cov_full)
-
- err = np.max(np.abs(mu - mu_full)) / np.max(np.abs(mu) + np.abs(mu_full))
- assert err < prec, ('conditional not working'
- ' at required precision ({} > {})').format(err, prec)
-
- err = np.max(np.abs(muv - mu_full)) / np.max(np.abs(muv) + np.abs(mu_full))
- assert err < prec, ('conditional not working'
- ' at required precision ({} > {})').format(err, prec)
-
- err = np.max(np.abs(muc - mu_full)) / np.max(np.abs(muc) + np.abs(mu_full))
- assert err < prec, ('conditional not working'
- ' at required precision ({} > {})').format(err, prec)
-
- err = np.max(np.abs(var - var_full)) / np.max(np.abs(var) + np.abs(var_full))
- assert err < prec, ('conditional not working'
- ' at required precision ({} > {})').format(err, prec)
-
- err = np.max(np.abs(cov - cov_full)) / np.max(np.abs(cov) + np.abs(cov_full))
- assert err < prec, ('conditional not working'
- ' at required precision ({} > {})').format(err, prec)
-
-
-def _test_self_conditional_derivative(kernel=None):
- C = _generate_random_C(deriv=True)
- y = C.sample()
-
- # Analytical derivative
- dmu = C.self_conditional_derivative(y, kernel=kernel)
- dmuv, dvar = C.self_conditional_derivative(y, calc_cov='diag', kernel=kernel)
- dmuc, dcov = C.self_conditional_derivative(y, calc_cov=True, kernel=kernel)
-
- # Numerical derivative
- num_dmu = []
- num_dcov = []
- for dt in [delta, coef_delta * delta]:
- tfull = np.sort(np.concatenate((C.t, C.t + dt)))
- mu, cov = C.conditional(y, tfull, calc_cov=True, kernel=kernel)
- num_dmu.append((mu[1::2] - mu[::2]) / abs(dt))
- num_dcov.append(
- (cov[1::2, 1::2] + cov[::2, ::2] - cov[1::2, ::2] - cov[::2, 1::2]) /
- dt**2)
-
- num_dmu_mean = (num_dmu[0] + num_dmu[1]) / 2
- num_dmu_err = np.max(np.abs(num_dmu[0] -
- num_dmu[1])) / np.max(np.abs(num_dmu[0]) + np.abs(num_dmu[1]))
-
- num_dcov_mean = (num_dcov[0] + num_dcov[1]) / 2
- num_dcov_err = np.max(np.abs(num_dcov[0] -
- num_dcov[1])) / np.max(np.abs(num_dcov[0]) + np.abs(num_dcov[1]))
-
- num_dvar_mean = num_dcov_mean.diagonal()
- num_dvar_err = np.max(
- np.abs(num_dcov[0].diagonal() - num_dcov[1].diagonal())) / np.max(
- np.abs(num_dcov[0].diagonal()) + np.abs(num_dcov[1].diagonal()))
-
- err = np.max(np.abs(dmu -
- num_dmu_mean)) / np.max(np.abs(num_dmu[0]) + np.abs(num_dmu[1]))
- err = max(0.0, err - coef_num_err * num_dmu_err)
- assert err < prec, ('self_conditional_derivative not working'
- ' at required precision ({} > {})').format(err, prec)
-
- err = np.max(
- np.abs(dmuv - num_dmu)) / np.max(np.abs(num_dmu[0]) + np.abs(num_dmu[1]))
- err = max(0.0, err - coef_num_err * num_dmu_err)
- assert err < prec, ('self_conditional_derivative not working'
- ' at required precision ({} > {})').format(err, prec)
-
- err = np.max(
- np.abs(dmuc - num_dmu)) / np.max(np.abs(num_dmu[0]) + np.abs(num_dmu[1]))
- err = max(0.0, err - coef_num_err * num_dmu_err)
- assert err < prec, ('self_conditional_derivative not working'
- ' at required precision ({} > {})').format(err, prec)
-
- err = np.max(np.abs(dvar - num_dvar_mean)) / np.max(
- np.abs(num_dcov[0].diagonal()) + np.abs(num_dcov[1].diagonal()))
- err = max(0.0, err - coef_num_err * num_dvar_err)
- assert err < prec, ('self_conditional_derivative not working'
- ' at required precision ({} > {})').format(err, prec)
-
- err = np.max(np.abs(dcov -
- num_dcov_mean)) / np.max(np.abs(num_dcov[0]) + np.abs(num_dcov[1]))
- err = max(0.0, err - coef_num_err * num_dcov_err)
- assert err < prec, ('self_conditional_derivative not working'
- ' at required precision ({} > {})').format(err, prec)
-
-
-def _test_conditional_derivative(kernel=None):
- C = _generate_random_C(deriv=True)
- y = C.dotL(np.random.normal(0.0, C.sqD()))
-
- n2 = 1001
- Dt = C.t[-1] - C.t[0]
- margin = Dt / 10
- t2 = np.linspace(C.t[0] - margin, C.t[-1] + margin, n2)
-
- # Analytical derivative
- dmu = C.conditional_derivative(y, t2, kernel=kernel)
- dmuv, dvar = C.conditional_derivative(y, t2, calc_cov='diag', kernel=kernel)
- dmuc, dcov = C.conditional_derivative(y, t2, calc_cov=True, kernel=kernel)
-
- # Numerical derivative
- num_dmu = []
- num_dcov = []
- for dt in [delta, coef_delta * delta]:
- tfull = np.sort(np.concatenate((t2, t2 + dt)))
- mu, cov = C.conditional(y, tfull, calc_cov=True, kernel=kernel)
- num_dmu.append((mu[1::2] - mu[::2]) / abs(dt))
- num_dcov.append(
- (cov[1::2, 1::2] + cov[::2, ::2] - cov[1::2, ::2] - cov[::2, 1::2]) /
- dt**2)
-
- num_dmu_mean = (num_dmu[0] + num_dmu[1]) / 2
- num_dmu_err = np.max(np.abs(num_dmu[0] -
- num_dmu[1])) / np.max(np.abs(num_dmu[0]) + np.abs(num_dmu[1]))
-
- num_dcov_mean = (num_dcov[0] + num_dcov[1]) / 2
- num_dcov_err = np.max(np.abs(num_dcov[0] -
- num_dcov[1])) / np.max(np.abs(num_dcov[0]) + np.abs(num_dcov[1]))
-
- num_dvar_mean = num_dcov_mean.diagonal()
- num_dvar_err = np.max(
- np.abs(num_dcov[0].diagonal() - num_dcov[1].diagonal())) / np.max(
- np.abs(num_dcov[0].diagonal()) + np.abs(num_dcov[1].diagonal()))
-
- err = np.max(np.abs(dmu -
- num_dmu_mean)) / np.max(np.abs(num_dmu[0]) + np.abs(num_dmu[1]))
- err = max(0.0, err - coef_num_err * num_dmu_err)
- assert err < prec, ('conditional_derivative not working'
- ' at required precision ({} > {})').format(err, prec)
-
- err = np.max(
- np.abs(dmuv - num_dmu)) / np.max(np.abs(num_dmu[0]) + np.abs(num_dmu[1]))
- err = max(0.0, err - coef_num_err * num_dmu_err)
- assert err < prec, ('conditional_derivative not working'
- ' at required precision ({} > {})').format(err, prec)
-
- err = np.max(
- np.abs(dmuc - num_dmu)) / np.max(np.abs(num_dmu[0]) + np.abs(num_dmu[1]))
- err = max(0.0, err - coef_num_err * num_dmu_err)
- assert err < prec, ('conditional_derivative not working'
- ' at required precision ({} > {})').format(err, prec)
-
- err = np.max(np.abs(dvar - num_dvar_mean)) / np.max(
- np.abs(num_dcov[0].diagonal()) + np.abs(num_dcov[1].diagonal()))
- err = max(0.0, err - coef_num_err * num_dvar_err)
- assert err < prec, ('conditional_derivative not working'
- ' at required precision ({} > {})').format(err, prec)
-
- err = np.max(np.abs(dcov -
- num_dcov_mean)) / np.max(np.abs(num_dcov[0]) + np.abs(num_dcov[1]))
- err = max(0.0, err - coef_num_err * num_dcov_err)
- assert err < prec, ('conditional_derivative not working'
- ' at required precision ({} > {})').format(err, prec)
-
-
-def test_all_conditional():
- for kernel in [
- None, ['mat32_0', 'usho_0'], ['osho_0'], ['mat52_0', 'sho_0'],
- ['es_0', 'sho_0'], ['mep_0'], ['esp_0']
- ]:
- _test_self_conditional(kernel)
- _test_conditional(kernel)
- _test_self_conditional_derivative(kernel)
- _test_conditional_derivative(kernel)
diff --git a/kima/vendor/spleaf/test/test_spleaf.py b/kima/vendor/spleaf/test/test_spleaf.py
deleted file mode 100644
index 25b1b49..0000000
--- a/kima/vendor/spleaf/test/test_spleaf.py
+++ /dev/null
@@ -1,418 +0,0 @@
-import pytest
-import numpy as np
-from spleaf import Spleaf
-
-prec = 1e-12
-n = 143
-r = 11
-bmax = 11
-delta = 1e-7
-
-
-def _generate_random_C(seed=0):
- np.random.seed(seed)
-
- k = np.arange(n)
-
- U = np.random.uniform(0.5, 1.5, (n, r))
- V = np.random.uniform(0.5, 1.5, (n, r))
- log10phi = np.random.uniform(-4, 0, (n - 1, r))
- phi = 10**log10phi
-
- b = np.minimum(k, np.random.randint(bmax + 1))
- offsetrow = np.cumsum(b - 1) + 1
- nF = offsetrow[-1] + n - 1
- F = np.random.uniform(0.25, 0.5, nF)**2
-
- A = np.random.uniform(1.5, 2.5, n)**2 + np.sum(U * V, axis=1)
-
- return (Spleaf(A, U, V, phi, offsetrow, b, F))
-
-
-def _generate_random_param(C, seed=1):
- np.random.seed(seed)
-
- U = np.random.uniform(0.5, 1.5, (n, r))
- V = np.random.uniform(0.5, 1.5, (n, r))
- log10phi = np.random.uniform(-4, 0, (n - 1, r))
- phi = 10**log10phi
-
- nF = C.offsetrow[-1] + n - 1
- F = np.random.uniform(0.25, 0.5, nF)**2
-
- A = np.random.uniform(1.5, 2.5, n)**2 + np.sum(U * V, axis=1)
-
- return (A, U, V, phi, F)
-
-
-def test_Spleaf():
- C = _generate_random_C()
-
- C_full = C.expand()
- L_full = C.expandL()
- D_full = np.diag(C.D)
-
- LDLt_full = L_full @ D_full @ L_full.T
- err = np.max(np.abs(C_full - LDLt_full))
- assert err < prec, ('Cholesky decomposition not working'
- ' at required precision ({} > {})').format(err, prec)
-
-
-def test_set_param():
- C = _generate_random_C()
- A, U, V, phi, F = _generate_random_param(C)
- Cb = Spleaf(A, U, V, phi, C.offsetrow, C.b, F)
- C.set_param(A, U, V, phi, F)
-
- C_full = C.expand()
- Cb_full = Cb.expand()
- L_full = C.expandL()
- Lb_full = Cb.expandL()
-
- err = np.max(np.abs(C_full - Cb_full))
- err = max(err, np.max(np.abs(L_full - Lb_full)))
- err = max(err, np.max(np.abs(C.D - Cb.D)))
-
- assert err < prec, ('set_param not working'
- ' at required precision ({} > {})').format(err, prec)
-
-
-def test_expandInv():
- C = _generate_random_C()
-
- C_full = C.expand()
- invC_full = C.expandInv()
-
- CinvC_full = C_full @ invC_full
- err = np.max(np.abs(CinvC_full - np.identity(n)))
- assert err < prec, ('Inversion not working'
- ' at required precision ({} > {})').format(err, prec)
-
-
-def test_expandInvL():
- C = _generate_random_C()
-
- L_full = C.expandL()
- invL_full = C.expandInvL()
-
- LinvL_full = L_full @ invL_full
- err = np.max(np.abs(LinvL_full - np.identity(n)))
- assert err < prec, ('Cholesky inversion not working'
- ' at required precision ({} > {})').format(err, prec)
-
-
-def test_logdet():
- C = _generate_random_C()
-
- logdet = C.logdet()
-
- C_full = C.expand()
- sign_full, logdet_full = np.linalg.slogdet(C_full)
-
- err = abs(logdet / logdet_full - 1)
-
- assert sign_full > 0, 'logdet is not positive'
- assert err < prec, ('logdet not working'
- ' at required precision ({} > {})').format(err, prec)
-
-
-def test_dotL():
- C = _generate_random_C()
- x = np.random.normal(0.0, 1.0, C.n)
-
- y = C.dotL(x)
-
- L_full = C.expandL()
- y_full = L_full.dot(x)
-
- err = np.max(np.abs(y - y_full))
-
- assert err < prec, ('dotL not working'
- ' at required precision ({} > {})').format(err, prec)
-
-
-def test_solveL():
- C = _generate_random_C()
- y = np.random.normal(0.0, 5.0, C.n)
-
- x = C.solveL(y)
-
- L_full = C.expandL()
- x_full = np.linalg.solve(L_full, y)
-
- err = np.max(np.abs(x - x_full))
-
- assert err < prec, ('solveL not working'
- ' at required precision ({} > {})').format(err, prec)
-
-
-def test_dotLT():
- C = _generate_random_C()
- x = np.random.normal(0.0, 1.0, C.n)
-
- y = C.dotLT(x)
-
- L_full = C.expandL()
- y_full = L_full.T.dot(x)
-
- err = np.max(np.abs(y - y_full))
-
- assert err < prec, ('dotL not working'
- ' at required precision ({} > {})').format(err, prec)
-
-
-def test_solveLT():
- C = _generate_random_C()
- y = np.random.normal(0.0, 5.0, C.n)
-
- x = C.solveLT(y)
-
- L_full = C.expandL()
- x_full = np.linalg.solve(L_full.T, y)
-
- err = np.max(np.abs(x - x_full))
-
- assert err < prec, ('solveL not working'
- ' at required precision ({} > {})').format(err, prec)
-
-
-def _test_method_back(method):
- """
- Common code for testing dotL_back, solveL_back, dotLT_back, solveLT_back
- """
- C = _generate_random_C()
- a = np.random.normal(0.0, 5.0, C.n)
- grad_b = np.random.normal(0.0, 1.0, C.n)
-
- func = getattr(C, method)
- b = func(a)
- C.init_grad()
- grad_a = getattr(C, method + '_back')(grad_b)
- C.cholesky_back()
- grad_param = C.grad_param()
-
- # grad_a
- grad_a_num = []
- for dx in [delta, -delta]:
- grad_a_num_dx = []
- for k in range(C.n):
- a[k] += dx
- db = func(a) - b
- grad_a_num_dx.append(db @ grad_b / dx)
- a[k] -= dx
- grad_a_num.append(grad_a_num_dx)
- grad_a_num = np.array(grad_a_num)
- err = np.max(np.abs(grad_a - np.mean(grad_a_num, axis=0)))
- num_err = np.max(np.abs(grad_a_num[1] - grad_a_num[0]))
- err = max(0.0, err - num_err)
- assert err < prec, ('{}_back (a) not working'
- ' at required precision ({} > {})').format(method, err, prec)
-
- # grad_param
- kwargs = {'A': C.A, 'U': C.U, 'V': C.V, 'phi': C.phi, 'F': C.F}
- for kparam, param in enumerate(['A', 'U', 'V', 'phi', 'F']):
- grad_param_num = []
- for dx in [delta, -delta]:
- grad_param_num_dx = []
- Cparam = getattr(C, param).copy()
- for k in range(Cparam.size):
- Cparam.flat[k] += dx
- kwargs[param] = Cparam.copy()
- C.set_param(**kwargs)
- db = getattr(C, method)(a) - b
- grad_param_num_dx.append(db @ grad_b / dx)
- Cparam.flat[k] -= dx
- kwargs[param] = Cparam
- C.set_param(**kwargs)
- grad_param_num.append(grad_param_num_dx)
- grad_param_num = np.array(grad_param_num)
- err = np.max(
- np.abs(grad_param[kparam].flat - np.mean(grad_param_num, axis=0)))
- num_err = np.max(np.abs(grad_param_num[1] - grad_param_num[0]))
- err = max(0.0, err - num_err)
- assert err < prec, ('{}_back ({}) not working'
- ' at required precision ({} > {})').format(method, param, err, prec)
-
-
-def test_dotL_back():
- _test_method_back('dotL')
-
-
-def test_solveL_back():
- _test_method_back('solveL')
-
-
-def test_dotLT_back():
- _test_method_back('dotLT')
-
-
-def test_solveLT_back():
- _test_method_back('solveLT')
-
-
-def test_chi2():
- C = _generate_random_C()
- y = np.random.normal(0.0, 5.0, C.n)
-
- chi2 = C.chi2(y)
-
- C_full = C.expand()
- invC_full = np.linalg.inv(C_full)
- chi2_full = y.T @ invC_full @ y
-
- err = abs(chi2 - chi2_full)
-
- assert err < prec, ('chi2 not working'
- ' at required precision ({} > {})').format(err, prec)
-
-
-def test_loglike():
- C = _generate_random_C()
- y = np.random.normal(0.0, 5.0, C.n)
-
- loglike = C.loglike(y)
-
- C_full = C.expand()
- invC_full = np.linalg.inv(C_full)
- chi2_full = y.T @ invC_full @ y
- _, logdet_full = np.linalg.slogdet(C_full)
- loglike_full = -0.5 * (chi2_full + logdet_full + C.n * np.log(2.0 * np.pi))
-
- err = abs(loglike - loglike_full)
- assert err < prec, ('loglike not working'
- ' at required precision ({} > {})').format(err, prec)
-
-
-def _test_method_grad(method):
- """
- Common code for testing chi2_grad, loglike_grad
- """
- C = _generate_random_C()
- y = np.random.normal(0.0, 5.0, C.n)
-
- func = getattr(C, method)
- f = func(y)
- f_grad_res, f_grad_param = getattr(C, method + '_grad')()
-
- # grad_y
- f_grad_num = []
- for dx in [delta, -delta]:
- f_grad_num_dx = []
- for k in range(C.n):
- y[k] += dx
- df = func(y) - f
- f_grad_num_dx.append(df / dx)
- y[k] -= dx
- f_grad_num.append(f_grad_num_dx)
- f_grad_num = np.array(f_grad_num)
- err = np.max(np.abs(f_grad_res - np.mean(f_grad_num, axis=0)))
- num_err = np.max(np.abs(f_grad_num[1] - f_grad_num[0]))
- err = max(0.0, err - num_err)
- assert err < prec, ('{}_grad (y) not working'
- ' at required precision ({} > {})').format(method, err, prec)
-
- # grad_param
- kwargs = {'A': C.A, 'U': C.U, 'V': C.V, 'phi': C.phi, 'F': C.F}
- for kparam, param in enumerate(['A', 'U', 'V', 'phi', 'F']):
- f_grad_num = []
- for dx in [delta, -delta]:
- f_grad_num_dx = []
- Cparam = getattr(C, param).copy()
- for k in range(Cparam.size):
- Cparam.flat[k] += dx
- kwargs[param] = Cparam.copy()
- C.set_param(**kwargs)
- df = getattr(C, method)(y) - f
- f_grad_num_dx.append(df / dx)
- Cparam.flat[k] -= dx
- kwargs[param] = Cparam
- C.set_param(**kwargs)
- f_grad_num.append(f_grad_num_dx)
- f_grad_num = np.array(f_grad_num)
- err = np.max(
- np.abs(f_grad_param[kparam].flat - np.mean(f_grad_num, axis=0)))
- num_err = np.max(np.abs(f_grad_num[1] - f_grad_num[0]))
- err = max(0.0, err - num_err)
- assert err < prec, ('{}_grad ({}) not working'
- ' at required precision ({} > {})').format(method, param, err, prec)
-
-
-def test_chi2_grad():
- _test_method_grad('chi2')
-
-
-def test_loglike_grad():
- _test_method_grad('loglike')
-
-
-def test_self_conditional():
- C = _generate_random_C()
- y = C.sample()
- mu = C.self_conditional(y)
- muv, var = C.self_conditional(y, 'diag')
- muc, cov = C.self_conditional(y, True)
-
- C_full = C.expand()
- A = np.sum(C.U * C.V, axis=1)
- b = np.zeros(C.n, dtype=int)
- offsetrow = np.cumsum(b - 1) + 1
- F = np.zeros(0)
- K_full = Spleaf(A, C.U, C.V, C.phi, offsetrow, b, F).expand()
- mu_full = K_full @ np.linalg.solve(C_full, y)
- cov_full = K_full - K_full @ np.linalg.inv(C_full) @ K_full
-
- err = np.max(np.abs(mu - mu_full))
- assert err < prec, ('conditional mean not working'
- ' at required precision ({} > {})').format(err, prec)
-
- err = np.max(np.abs(muv - mu_full))
- assert err < prec, ('conditional mean not working'
- ' at required precision ({} > {})').format(err, prec)
-
- err = np.max(np.abs(muc - mu_full))
- assert err < prec, ('conditional mean not working'
- ' at required precision ({} > {})').format(err, prec)
-
- err = np.max(np.abs(var - np.diag(cov_full)))
- assert err < prec, ('conditional var not working'
- ' at required precision ({} > {})').format(err, prec)
-
- err = np.max(np.abs(cov - cov_full))
- assert err < prec, ('conditional cov not working'
- ' at required precision ({} > {})').format(err, prec)
-
-
-def test_conditional():
- C = _generate_random_C()
- y = C.sample()
- mu_self, cov_self = C.self_conditional(y, True)
- _, var_self = C.self_conditional(y, 'diag')
-
- ref = np.arange(C.n)
- phi2left = np.ones((C.n, C.r))
- phi2right = np.concatenate((C.phi, np.ones((1, C.r))))
-
- mu = C.conditional(y, C.U, C.V, C.phi, ref, phi2left, phi2right)
- muv, var = C.conditional(y, C.U, C.V, C.phi, ref, phi2left, phi2right,
- 'diag')
- muc, cov = C.conditional(y, C.U, C.V, C.phi, ref, phi2left, phi2right, True)
-
- err = np.max(np.abs(mu - mu_self))
- assert err < prec, ('conditional mean not working'
- ' at required precision ({} > {})').format(err, prec)
-
- err = np.max(np.abs(muv - mu_self))
- assert err < prec, ('conditional mean not working'
- ' at required precision ({} > {})').format(err, prec)
-
- err = np.max(np.abs(muc - mu_self))
- assert err < prec, ('conditional mean not working'
- ' at required precision ({} > {})').format(err, prec)
-
- err = np.max(np.abs(var - var_self))
- assert err < prec, ('conditional var not working'
- ' at required precision ({} > {})').format(err, prec)
-
- err = np.max(np.abs(cov - cov_self))
- assert err < prec, ('conditional cov not working'
- ' at required precision ({} > {})').format(err, prec)