8396 lines
466 KiB
HTML
8396 lines
466 KiB
HTML
<!DOCTYPE html>
|
||
|
||
<html lang="en">
|
||
<head><meta charset="utf-8"/>
|
||
<meta content="width=device-width, initial-scale=1.0" name="viewport"/>
|
||
<title>exercisesweek37</title><script src="https://cdnjs.cloudflare.com/ajax/libs/require.js/2.1.10/require.min.js"></script>
|
||
<style type="text/css">
|
||
pre { line-height: 125%; }
|
||
td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
|
||
span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
|
||
td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
|
||
span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
|
||
.highlight .hll { background-color: var(--jp-cell-editor-active-background) }
|
||
.highlight { background: var(--jp-cell-editor-background); color: var(--jp-mirror-editor-variable-color) }
|
||
.highlight .c { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment */
|
||
.highlight .err { color: var(--jp-mirror-editor-error-color) } /* Error */
|
||
.highlight .k { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword */
|
||
.highlight .o { color: var(--jp-mirror-editor-operator-color); font-weight: bold } /* Operator */
|
||
.highlight .p { color: var(--jp-mirror-editor-punctuation-color) } /* Punctuation */
|
||
.highlight .ch { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Hashbang */
|
||
.highlight .cm { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Multiline */
|
||
.highlight .cp { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Preproc */
|
||
.highlight .cpf { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.PreprocFile */
|
||
.highlight .c1 { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Single */
|
||
.highlight .cs { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Special */
|
||
.highlight .kc { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Constant */
|
||
.highlight .kd { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Declaration */
|
||
.highlight .kn { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Namespace */
|
||
.highlight .kp { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Pseudo */
|
||
.highlight .kr { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Reserved */
|
||
.highlight .kt { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Type */
|
||
.highlight .m { color: var(--jp-mirror-editor-number-color) } /* Literal.Number */
|
||
.highlight .s { color: var(--jp-mirror-editor-string-color) } /* Literal.String */
|
||
.highlight .ow { color: var(--jp-mirror-editor-operator-color); font-weight: bold } /* Operator.Word */
|
||
.highlight .pm { color: var(--jp-mirror-editor-punctuation-color) } /* Punctuation.Marker */
|
||
.highlight .w { color: var(--jp-mirror-editor-variable-color) } /* Text.Whitespace */
|
||
.highlight .mb { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Bin */
|
||
.highlight .mf { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Float */
|
||
.highlight .mh { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Hex */
|
||
.highlight .mi { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Integer */
|
||
.highlight .mo { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Oct */
|
||
.highlight .sa { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Affix */
|
||
.highlight .sb { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Backtick */
|
||
.highlight .sc { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Char */
|
||
.highlight .dl { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Delimiter */
|
||
.highlight .sd { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Doc */
|
||
.highlight .s2 { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Double */
|
||
.highlight .se { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Escape */
|
||
.highlight .sh { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Heredoc */
|
||
.highlight .si { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Interpol */
|
||
.highlight .sx { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Other */
|
||
.highlight .sr { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Regex */
|
||
.highlight .s1 { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Single */
|
||
.highlight .ss { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Symbol */
|
||
.highlight .il { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Integer.Long */
|
||
</style>
|
||
<style type="text/css">
|
||
/*-----------------------------------------------------------------------------
|
||
| Copyright (c) Jupyter Development Team.
|
||
| Distributed under the terms of the Modified BSD License.
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
/*
|
||
* Mozilla scrollbar styling
|
||
*/
|
||
|
||
/* use standard opaque scrollbars for most nodes */
|
||
[data-jp-theme-scrollbars='true'] {
|
||
scrollbar-color: rgb(var(--jp-scrollbar-thumb-color))
|
||
var(--jp-scrollbar-background-color);
|
||
}
|
||
|
||
/* for code nodes, use a transparent style of scrollbar. These selectors
|
||
* will match lower in the tree, and so will override the above */
|
||
[data-jp-theme-scrollbars='true'] .CodeMirror-hscrollbar,
|
||
[data-jp-theme-scrollbars='true'] .CodeMirror-vscrollbar {
|
||
scrollbar-color: rgba(var(--jp-scrollbar-thumb-color), 0.5) transparent;
|
||
}
|
||
|
||
/* tiny scrollbar */
|
||
|
||
.jp-scrollbar-tiny {
|
||
scrollbar-color: rgba(var(--jp-scrollbar-thumb-color), 0.5) transparent;
|
||
scrollbar-width: thin;
|
||
}
|
||
|
||
/* tiny scrollbar */
|
||
|
||
.jp-scrollbar-tiny::-webkit-scrollbar,
|
||
.jp-scrollbar-tiny::-webkit-scrollbar-corner {
|
||
background-color: transparent;
|
||
height: 4px;
|
||
width: 4px;
|
||
}
|
||
|
||
.jp-scrollbar-tiny::-webkit-scrollbar-thumb {
|
||
background: rgba(var(--jp-scrollbar-thumb-color), 0.5);
|
||
}
|
||
|
||
.jp-scrollbar-tiny::-webkit-scrollbar-track:horizontal {
|
||
border-left: 0 solid transparent;
|
||
border-right: 0 solid transparent;
|
||
}
|
||
|
||
.jp-scrollbar-tiny::-webkit-scrollbar-track:vertical {
|
||
border-top: 0 solid transparent;
|
||
border-bottom: 0 solid transparent;
|
||
}
|
||
|
||
/*
|
||
* Lumino
|
||
*/
|
||
|
||
.lm-ScrollBar[data-orientation='horizontal'] {
|
||
min-height: 16px;
|
||
max-height: 16px;
|
||
min-width: 45px;
|
||
border-top: 1px solid #a0a0a0;
|
||
}
|
||
|
||
.lm-ScrollBar[data-orientation='vertical'] {
|
||
min-width: 16px;
|
||
max-width: 16px;
|
||
min-height: 45px;
|
||
border-left: 1px solid #a0a0a0;
|
||
}
|
||
|
||
.lm-ScrollBar-button {
|
||
background-color: #f0f0f0;
|
||
background-position: center center;
|
||
min-height: 15px;
|
||
max-height: 15px;
|
||
min-width: 15px;
|
||
max-width: 15px;
|
||
}
|
||
|
||
.lm-ScrollBar-button:hover {
|
||
background-color: #dadada;
|
||
}
|
||
|
||
.lm-ScrollBar-button.lm-mod-active {
|
||
background-color: #cdcdcd;
|
||
}
|
||
|
||
.lm-ScrollBar-track {
|
||
background: #f0f0f0;
|
||
}
|
||
|
||
.lm-ScrollBar-thumb {
|
||
background: #cdcdcd;
|
||
}
|
||
|
||
.lm-ScrollBar-thumb:hover {
|
||
background: #bababa;
|
||
}
|
||
|
||
.lm-ScrollBar-thumb.lm-mod-active {
|
||
background: #a0a0a0;
|
||
}
|
||
|
||
.lm-ScrollBar[data-orientation='horizontal'] .lm-ScrollBar-thumb {
|
||
height: 100%;
|
||
min-width: 15px;
|
||
border-left: 1px solid #a0a0a0;
|
||
border-right: 1px solid #a0a0a0;
|
||
}
|
||
|
||
.lm-ScrollBar[data-orientation='vertical'] .lm-ScrollBar-thumb {
|
||
width: 100%;
|
||
min-height: 15px;
|
||
border-top: 1px solid #a0a0a0;
|
||
border-bottom: 1px solid #a0a0a0;
|
||
}
|
||
|
||
.lm-ScrollBar[data-orientation='horizontal']
|
||
.lm-ScrollBar-button[data-action='decrement'] {
|
||
background-image: var(--jp-icon-caret-left);
|
||
background-size: 17px;
|
||
}
|
||
|
||
.lm-ScrollBar[data-orientation='horizontal']
|
||
.lm-ScrollBar-button[data-action='increment'] {
|
||
background-image: var(--jp-icon-caret-right);
|
||
background-size: 17px;
|
||
}
|
||
|
||
.lm-ScrollBar[data-orientation='vertical']
|
||
.lm-ScrollBar-button[data-action='decrement'] {
|
||
background-image: var(--jp-icon-caret-up);
|
||
background-size: 17px;
|
||
}
|
||
|
||
.lm-ScrollBar[data-orientation='vertical']
|
||
.lm-ScrollBar-button[data-action='increment'] {
|
||
background-image: var(--jp-icon-caret-down);
|
||
background-size: 17px;
|
||
}
|
||
|
||
/*
|
||
* Copyright (c) Jupyter Development Team.
|
||
* Distributed under the terms of the Modified BSD License.
|
||
*/
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Copyright (c) Jupyter Development Team.
|
||
| Copyright (c) 2014-2017, PhosphorJS Contributors
|
||
|
|
||
| Distributed under the terms of the BSD 3-Clause License.
|
||
|
|
||
| The full license is in the file LICENSE, distributed with this software.
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
.lm-Widget {
|
||
box-sizing: border-box;
|
||
position: relative;
|
||
overflow: hidden;
|
||
}
|
||
|
||
.lm-Widget.lm-mod-hidden {
|
||
display: none !important;
|
||
}
|
||
|
||
/*
|
||
* Copyright (c) Jupyter Development Team.
|
||
* Distributed under the terms of the Modified BSD License.
|
||
*/
|
||
|
||
.lm-AccordionPanel[data-orientation='horizontal'] > .lm-AccordionPanel-title {
|
||
/* Title is rotated for horizontal accordion panel using CSS */
|
||
display: block;
|
||
transform-origin: top left;
|
||
transform: rotate(-90deg) translate(-100%);
|
||
}
|
||
|
||
/*
|
||
* Copyright (c) Jupyter Development Team.
|
||
* Distributed under the terms of the Modified BSD License.
|
||
*/
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Copyright (c) Jupyter Development Team.
|
||
| Copyright (c) 2014-2017, PhosphorJS Contributors
|
||
|
|
||
| Distributed under the terms of the BSD 3-Clause License.
|
||
|
|
||
| The full license is in the file LICENSE, distributed with this software.
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
.lm-CommandPalette {
|
||
display: flex;
|
||
flex-direction: column;
|
||
-webkit-user-select: none;
|
||
-moz-user-select: none;
|
||
-ms-user-select: none;
|
||
user-select: none;
|
||
}
|
||
|
||
.lm-CommandPalette-search {
|
||
flex: 0 0 auto;
|
||
}
|
||
|
||
.lm-CommandPalette-content {
|
||
flex: 1 1 auto;
|
||
margin: 0;
|
||
padding: 0;
|
||
min-height: 0;
|
||
overflow: auto;
|
||
list-style-type: none;
|
||
}
|
||
|
||
.lm-CommandPalette-header {
|
||
overflow: hidden;
|
||
white-space: nowrap;
|
||
text-overflow: ellipsis;
|
||
}
|
||
|
||
.lm-CommandPalette-item {
|
||
display: flex;
|
||
flex-direction: row;
|
||
}
|
||
|
||
.lm-CommandPalette-itemIcon {
|
||
flex: 0 0 auto;
|
||
}
|
||
|
||
.lm-CommandPalette-itemContent {
|
||
flex: 1 1 auto;
|
||
overflow: hidden;
|
||
}
|
||
|
||
.lm-CommandPalette-itemShortcut {
|
||
flex: 0 0 auto;
|
||
}
|
||
|
||
.lm-CommandPalette-itemLabel {
|
||
overflow: hidden;
|
||
white-space: nowrap;
|
||
text-overflow: ellipsis;
|
||
}
|
||
|
||
.lm-close-icon {
|
||
border: 1px solid transparent;
|
||
background-color: transparent;
|
||
position: absolute;
|
||
z-index: 1;
|
||
right: 3%;
|
||
top: 0;
|
||
bottom: 0;
|
||
margin: auto;
|
||
padding: 7px 0;
|
||
display: none;
|
||
vertical-align: middle;
|
||
outline: 0;
|
||
cursor: pointer;
|
||
}
|
||
.lm-close-icon:after {
|
||
content: 'X';
|
||
display: block;
|
||
width: 15px;
|
||
height: 15px;
|
||
text-align: center;
|
||
color: #000;
|
||
font-weight: normal;
|
||
font-size: 12px;
|
||
cursor: pointer;
|
||
}
|
||
|
||
/*
|
||
* Copyright (c) Jupyter Development Team.
|
||
* Distributed under the terms of the Modified BSD License.
|
||
*/
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Copyright (c) Jupyter Development Team.
|
||
| Copyright (c) 2014-2017, PhosphorJS Contributors
|
||
|
|
||
| Distributed under the terms of the BSD 3-Clause License.
|
||
|
|
||
| The full license is in the file LICENSE, distributed with this software.
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
.lm-DockPanel {
|
||
z-index: 0;
|
||
}
|
||
|
||
.lm-DockPanel-widget {
|
||
z-index: 0;
|
||
}
|
||
|
||
.lm-DockPanel-tabBar {
|
||
z-index: 1;
|
||
}
|
||
|
||
.lm-DockPanel-handle {
|
||
z-index: 2;
|
||
}
|
||
|
||
.lm-DockPanel-handle.lm-mod-hidden {
|
||
display: none !important;
|
||
}
|
||
|
||
.lm-DockPanel-handle:after {
|
||
position: absolute;
|
||
top: 0;
|
||
left: 0;
|
||
width: 100%;
|
||
height: 100%;
|
||
content: '';
|
||
}
|
||
|
||
.lm-DockPanel-handle[data-orientation='horizontal'] {
|
||
cursor: ew-resize;
|
||
}
|
||
|
||
.lm-DockPanel-handle[data-orientation='vertical'] {
|
||
cursor: ns-resize;
|
||
}
|
||
|
||
.lm-DockPanel-handle[data-orientation='horizontal']:after {
|
||
left: 50%;
|
||
min-width: 8px;
|
||
transform: translateX(-50%);
|
||
}
|
||
|
||
.lm-DockPanel-handle[data-orientation='vertical']:after {
|
||
top: 50%;
|
||
min-height: 8px;
|
||
transform: translateY(-50%);
|
||
}
|
||
|
||
.lm-DockPanel-overlay {
|
||
z-index: 3;
|
||
box-sizing: border-box;
|
||
pointer-events: none;
|
||
}
|
||
|
||
.lm-DockPanel-overlay.lm-mod-hidden {
|
||
display: none !important;
|
||
}
|
||
|
||
/*
|
||
* Copyright (c) Jupyter Development Team.
|
||
* Distributed under the terms of the Modified BSD License.
|
||
*/
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Copyright (c) Jupyter Development Team.
|
||
| Copyright (c) 2014-2017, PhosphorJS Contributors
|
||
|
|
||
| Distributed under the terms of the BSD 3-Clause License.
|
||
|
|
||
| The full license is in the file LICENSE, distributed with this software.
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
.lm-Menu {
|
||
z-index: 10000;
|
||
position: absolute;
|
||
white-space: nowrap;
|
||
overflow-x: hidden;
|
||
overflow-y: auto;
|
||
outline: none;
|
||
-webkit-user-select: none;
|
||
-moz-user-select: none;
|
||
-ms-user-select: none;
|
||
user-select: none;
|
||
}
|
||
|
||
.lm-Menu-content {
|
||
margin: 0;
|
||
padding: 0;
|
||
display: table;
|
||
list-style-type: none;
|
||
}
|
||
|
||
.lm-Menu-item {
|
||
display: table-row;
|
||
}
|
||
|
||
.lm-Menu-item.lm-mod-hidden,
|
||
.lm-Menu-item.lm-mod-collapsed {
|
||
display: none !important;
|
||
}
|
||
|
||
.lm-Menu-itemIcon,
|
||
.lm-Menu-itemSubmenuIcon {
|
||
display: table-cell;
|
||
text-align: center;
|
||
}
|
||
|
||
.lm-Menu-itemLabel {
|
||
display: table-cell;
|
||
text-align: left;
|
||
}
|
||
|
||
.lm-Menu-itemShortcut {
|
||
display: table-cell;
|
||
text-align: right;
|
||
}
|
||
|
||
/*
|
||
* Copyright (c) Jupyter Development Team.
|
||
* Distributed under the terms of the Modified BSD License.
|
||
*/
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Copyright (c) Jupyter Development Team.
|
||
| Copyright (c) 2014-2017, PhosphorJS Contributors
|
||
|
|
||
| Distributed under the terms of the BSD 3-Clause License.
|
||
|
|
||
| The full license is in the file LICENSE, distributed with this software.
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
.lm-MenuBar {
|
||
outline: none;
|
||
-webkit-user-select: none;
|
||
-moz-user-select: none;
|
||
-ms-user-select: none;
|
||
user-select: none;
|
||
}
|
||
|
||
.lm-MenuBar-content {
|
||
margin: 0;
|
||
padding: 0;
|
||
display: flex;
|
||
flex-direction: row;
|
||
list-style-type: none;
|
||
}
|
||
|
||
.lm-MenuBar-item {
|
||
box-sizing: border-box;
|
||
}
|
||
|
||
.lm-MenuBar-itemIcon,
|
||
.lm-MenuBar-itemLabel {
|
||
display: inline-block;
|
||
}
|
||
|
||
/*
|
||
* Copyright (c) Jupyter Development Team.
|
||
* Distributed under the terms of the Modified BSD License.
|
||
*/
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Copyright (c) Jupyter Development Team.
|
||
| Copyright (c) 2014-2017, PhosphorJS Contributors
|
||
|
|
||
| Distributed under the terms of the BSD 3-Clause License.
|
||
|
|
||
| The full license is in the file LICENSE, distributed with this software.
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
.lm-ScrollBar {
|
||
display: flex;
|
||
-webkit-user-select: none;
|
||
-moz-user-select: none;
|
||
-ms-user-select: none;
|
||
user-select: none;
|
||
}
|
||
|
||
.lm-ScrollBar[data-orientation='horizontal'] {
|
||
flex-direction: row;
|
||
}
|
||
|
||
.lm-ScrollBar[data-orientation='vertical'] {
|
||
flex-direction: column;
|
||
}
|
||
|
||
.lm-ScrollBar-button {
|
||
box-sizing: border-box;
|
||
flex: 0 0 auto;
|
||
}
|
||
|
||
.lm-ScrollBar-track {
|
||
box-sizing: border-box;
|
||
position: relative;
|
||
overflow: hidden;
|
||
flex: 1 1 auto;
|
||
}
|
||
|
||
.lm-ScrollBar-thumb {
|
||
box-sizing: border-box;
|
||
position: absolute;
|
||
}
|
||
|
||
/*
|
||
* Copyright (c) Jupyter Development Team.
|
||
* Distributed under the terms of the Modified BSD License.
|
||
*/
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Copyright (c) Jupyter Development Team.
|
||
| Copyright (c) 2014-2017, PhosphorJS Contributors
|
||
|
|
||
| Distributed under the terms of the BSD 3-Clause License.
|
||
|
|
||
| The full license is in the file LICENSE, distributed with this software.
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
.lm-SplitPanel-child {
|
||
z-index: 0;
|
||
}
|
||
|
||
.lm-SplitPanel-handle {
|
||
z-index: 1;
|
||
}
|
||
|
||
.lm-SplitPanel-handle.lm-mod-hidden {
|
||
display: none !important;
|
||
}
|
||
|
||
.lm-SplitPanel-handle:after {
|
||
position: absolute;
|
||
top: 0;
|
||
left: 0;
|
||
width: 100%;
|
||
height: 100%;
|
||
content: '';
|
||
}
|
||
|
||
.lm-SplitPanel[data-orientation='horizontal'] > .lm-SplitPanel-handle {
|
||
cursor: ew-resize;
|
||
}
|
||
|
||
.lm-SplitPanel[data-orientation='vertical'] > .lm-SplitPanel-handle {
|
||
cursor: ns-resize;
|
||
}
|
||
|
||
.lm-SplitPanel[data-orientation='horizontal'] > .lm-SplitPanel-handle:after {
|
||
left: 50%;
|
||
min-width: 8px;
|
||
transform: translateX(-50%);
|
||
}
|
||
|
||
.lm-SplitPanel[data-orientation='vertical'] > .lm-SplitPanel-handle:after {
|
||
top: 50%;
|
||
min-height: 8px;
|
||
transform: translateY(-50%);
|
||
}
|
||
|
||
/*
|
||
* Copyright (c) Jupyter Development Team.
|
||
* Distributed under the terms of the Modified BSD License.
|
||
*/
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Copyright (c) Jupyter Development Team.
|
||
| Copyright (c) 2014-2017, PhosphorJS Contributors
|
||
|
|
||
| Distributed under the terms of the BSD 3-Clause License.
|
||
|
|
||
| The full license is in the file LICENSE, distributed with this software.
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
.lm-TabBar {
|
||
display: flex;
|
||
-webkit-user-select: none;
|
||
-moz-user-select: none;
|
||
-ms-user-select: none;
|
||
user-select: none;
|
||
}
|
||
|
||
.lm-TabBar[data-orientation='horizontal'] {
|
||
flex-direction: row;
|
||
align-items: flex-end;
|
||
}
|
||
|
||
.lm-TabBar[data-orientation='vertical'] {
|
||
flex-direction: column;
|
||
align-items: flex-end;
|
||
}
|
||
|
||
.lm-TabBar-content {
|
||
margin: 0;
|
||
padding: 0;
|
||
display: flex;
|
||
flex: 1 1 auto;
|
||
list-style-type: none;
|
||
}
|
||
|
||
.lm-TabBar[data-orientation='horizontal'] > .lm-TabBar-content {
|
||
flex-direction: row;
|
||
}
|
||
|
||
.lm-TabBar[data-orientation='vertical'] > .lm-TabBar-content {
|
||
flex-direction: column;
|
||
}
|
||
|
||
.lm-TabBar-tab {
|
||
display: flex;
|
||
flex-direction: row;
|
||
box-sizing: border-box;
|
||
overflow: hidden;
|
||
touch-action: none; /* Disable native Drag/Drop */
|
||
}
|
||
|
||
.lm-TabBar-tabIcon,
|
||
.lm-TabBar-tabCloseIcon {
|
||
flex: 0 0 auto;
|
||
}
|
||
|
||
.lm-TabBar-tabLabel {
|
||
flex: 1 1 auto;
|
||
overflow: hidden;
|
||
white-space: nowrap;
|
||
}
|
||
|
||
.lm-TabBar-tabInput {
|
||
user-select: all;
|
||
width: 100%;
|
||
box-sizing: border-box;
|
||
}
|
||
|
||
.lm-TabBar-tab.lm-mod-hidden {
|
||
display: none !important;
|
||
}
|
||
|
||
.lm-TabBar-addButton.lm-mod-hidden {
|
||
display: none !important;
|
||
}
|
||
|
||
.lm-TabBar.lm-mod-dragging .lm-TabBar-tab {
|
||
position: relative;
|
||
}
|
||
|
||
.lm-TabBar.lm-mod-dragging[data-orientation='horizontal'] .lm-TabBar-tab {
|
||
left: 0;
|
||
transition: left 150ms ease;
|
||
}
|
||
|
||
.lm-TabBar.lm-mod-dragging[data-orientation='vertical'] .lm-TabBar-tab {
|
||
top: 0;
|
||
transition: top 150ms ease;
|
||
}
|
||
|
||
.lm-TabBar.lm-mod-dragging .lm-TabBar-tab.lm-mod-dragging {
|
||
transition: none;
|
||
}
|
||
|
||
.lm-TabBar-tabLabel .lm-TabBar-tabInput {
|
||
user-select: all;
|
||
width: 100%;
|
||
box-sizing: border-box;
|
||
background: inherit;
|
||
}
|
||
|
||
/*
|
||
* Copyright (c) Jupyter Development Team.
|
||
* Distributed under the terms of the Modified BSD License.
|
||
*/
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Copyright (c) Jupyter Development Team.
|
||
| Copyright (c) 2014-2017, PhosphorJS Contributors
|
||
|
|
||
| Distributed under the terms of the BSD 3-Clause License.
|
||
|
|
||
| The full license is in the file LICENSE, distributed with this software.
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
.lm-TabPanel-tabBar {
|
||
z-index: 1;
|
||
}
|
||
|
||
.lm-TabPanel-stackedPanel {
|
||
z-index: 0;
|
||
}
|
||
|
||
/*
|
||
* Copyright (c) Jupyter Development Team.
|
||
* Distributed under the terms of the Modified BSD License.
|
||
*/
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Copyright (c) Jupyter Development Team.
|
||
| Copyright (c) 2014-2017, PhosphorJS Contributors
|
||
|
|
||
| Distributed under the terms of the BSD 3-Clause License.
|
||
|
|
||
| The full license is in the file LICENSE, distributed with this software.
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Copyright (c) Jupyter Development Team.
|
||
| Distributed under the terms of the Modified BSD License.
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
.jp-Collapse {
|
||
display: flex;
|
||
flex-direction: column;
|
||
align-items: stretch;
|
||
}
|
||
|
||
.jp-Collapse-header {
|
||
padding: 1px 12px;
|
||
background-color: var(--jp-layout-color1);
|
||
border-bottom: solid var(--jp-border-width) var(--jp-border-color2);
|
||
color: var(--jp-ui-font-color1);
|
||
cursor: pointer;
|
||
display: flex;
|
||
align-items: center;
|
||
font-size: var(--jp-ui-font-size0);
|
||
font-weight: 600;
|
||
text-transform: uppercase;
|
||
user-select: none;
|
||
}
|
||
|
||
.jp-Collapser-icon {
|
||
height: 16px;
|
||
}
|
||
|
||
.jp-Collapse-header-collapsed .jp-Collapser-icon {
|
||
transform: rotate(-90deg);
|
||
margin: auto 0;
|
||
}
|
||
|
||
.jp-Collapser-title {
|
||
line-height: 25px;
|
||
}
|
||
|
||
.jp-Collapse-contents {
|
||
padding: 0 12px;
|
||
background-color: var(--jp-layout-color1);
|
||
color: var(--jp-ui-font-color1);
|
||
overflow: auto;
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Copyright (c) Jupyter Development Team.
|
||
| Distributed under the terms of the Modified BSD License.
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
/* This file was auto-generated by ensureUiComponents() in @jupyterlab/buildutils */
|
||
|
||
/**
|
||
* (DEPRECATED) Support for consuming icons as CSS background images
|
||
*/
|
||
|
||
/* Icons urls */
|
||
|
||
:root {
|
||
--jp-icon-add-above: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTQiIGhlaWdodD0iMTQiIHZpZXdCb3g9IjAgMCAxNCAxNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGcgY2xpcC1wYXRoPSJ1cmwoI2NsaXAwXzEzN18xOTQ5MikiPgo8cGF0aCBjbGFzcz0ianAtaWNvbjMiIGQ9Ik00Ljc1IDQuOTMwNjZINi42MjVWNi44MDU2NkM2LjYyNSA3LjAxMTkxIDYuNzkzNzUgNy4xODA2NiA3IDcuMTgwNjZDNy4yMDYyNSA3LjE4MDY2IDcuMzc1IDcuMDExOTEgNy4zNzUgNi44MDU2NlY0LjkzMDY2SDkuMjVDOS40NTYyNSA0LjkzMDY2IDkuNjI1IDQuNzYxOTEgOS42MjUgNC41NTU2NkM5LjYyNSA0LjM0OTQxIDkuNDU2MjUgNC4xODA2NiA5LjI1IDQuMTgwNjZINy4zNzVWMi4zMDU2NkM3LjM3NSAyLjA5OTQxIDcuMjA2MjUgMS45MzA2NiA3IDEuOTMwNjZDNi43OTM3NSAxLjkzMDY2IDYuNjI1IDIuMDk5NDEgNi42MjUgMi4zMDU2NlY0LjE4MDY2SDQuNzVDNC41NDM3NSA0LjE4MDY2IDQuMzc1IDQuMzQ5NDEgNC4zNzUgNC41NTU2NkM0LjM3NSA0Ljc2MTkxIDQuNTQzNzUgNC45MzA2NiA0Ljc1IDQuOTMwNjZaIiBmaWxsPSIjNjE2MTYxIiBzdHJva2U9IiM2MTYxNjEiIHN0cm9rZS13aWR0aD0iMC43Ii8+CjwvZz4KPHBhdGggY2xhc3M9ImpwLWljb24zIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTExLjUgOS41VjExLjVMMi41IDExLjVWOS41TDExLjUgOS41Wk0xMiA4QzEyLjU1MjMgOCAxMyA4LjQ0NzcyIDEzIDlWMTJDMTMgMTIuNTUyMyAxMi41NTIzIDEzIDEyIDEzTDIgMTNDMS40NDc3MiAxMyAxIDEyLjU1MjMgMSAxMlY5QzEgOC40NDc3MiAxLjQ0NzcxIDggMiA4TDEyIDhaIiBmaWxsPSIjNjE2MTYxIi8+CjxkZWZzPgo8Y2xpcFBhdGggaWQ9ImNsaXAwXzEzN18xOTQ5MiI+CjxyZWN0IGNsYXNzPSJqcC1pY29uMyIgd2lkdGg9IjYiIGhlaWdodD0iNiIgZmlsbD0id2hpdGUiIHRyYW5zZm9ybT0ibWF0cml4KC0xIDAgMCAxIDEwIDEuNTU1NjYpIi8+CjwvY2xpcFBhdGg+CjwvZGVmcz4KPC9zdmc+Cg==);
|
||
--jp-icon-add-below: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTQiIGhlaWdodD0iMTQiIHZpZXdCb3g9IjAgMCAxNCAxNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGcgY2xpcC1wYXRoPSJ1cmwoI2NsaXAwXzEzN18xOTQ5OCkiPgo8cGF0aCBjbGFzcz0ianAtaWNvbjMiIGQ9Ik05LjI1IDEwLjA2OTNMNy4zNzUgMTAuMDY5M0w3LjM3NSA4LjE5NDM0QzcuMzc1IDcuOTg4MDkgNy4yMDYyNSA3LjgxOTM0IDcgNy44MTkzNEM2Ljc5Mzc1IDcuODE5MzQgNi42MjUgNy45ODgwOSA2LjYyNSA4LjE5NDM0TDYuNjI1IDEwLjA2OTNMNC43NSAxMC4wNjkzQzQuNTQzNzUgMTAuMDY5MyA0LjM3NSAxMC4yMzgxIDQuMzc1IDEwLjQ0NDNDNC4zNzUgMTAuNjUwNiA0LjU0Mzc1IDEwLjgxOTMgNC43NSAxMC44MTkzTDYuNjI1IDEwLjgxOTNMNi42MjUgMTIuNjk0M0M2LjYyNSAxMi45MDA2IDYuNzkzNzUgMTMuMDY5MyA3IDEzLjA2OTNDNy4yMDYyNSAxMy4wNjkzIDcuMzc1IDEyLjkwMDYgNy4zNzUgMTIuNjk0M0w3LjM3NSAxMC44MTkzTDkuMjUgMTAuODE5M0M5LjQ1NjI1IDEwLjgxOTMgOS42MjUgMTAuNjUwNiA5LjYyNSAxMC40NDQzQzkuNjI1IDEwLjIzODEgOS40NTYyNSAxMC4wNjkzIDkuMjUgMTAuMDY5M1oiIGZpbGw9IiM2MTYxNjEiIHN0cm9rZT0iIzYxNjE2MSIgc3Ryb2tlLXdpZHRoPSIwLjciLz4KPC9nPgo8cGF0aCBjbGFzcz0ianAtaWNvbjMiIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMi41IDUuNUwyLjUgMy41TDExLjUgMy41TDExLjUgNS41TDIuNSA1LjVaTTIgN0MxLjQ0NzcyIDcgMSA2LjU1MjI4IDEgNkwxIDNDMSAyLjQ0NzcyIDEuNDQ3NzIgMiAyIDJMMTIgMkMxMi41NTIzIDIgMTMgMi40NDc3MiAxMyAzTDEzIDZDMTMgNi41NTIyOSAxMi41NTIzIDcgMTIgN0wyIDdaIiBmaWxsPSIjNjE2MTYxIi8+CjxkZWZzPgo8Y2xpcFBhdGggaWQ9ImNsaXAwXzEzN18xOTQ5OCI+CjxyZWN0IGNsYXNzPSJqcC1pY29uMyIgd2lkdGg9IjYiIGhlaWdodD0iNiIgZmlsbD0id2hpdGUiIHRyYW5zZm9ybT0ibWF0cml4KDEgMS43NDg0NmUtMDcgMS43NDg0NmUtMDcgLTEgNCAxMy40NDQzKSIvPgo8L2NsaXBQYXRoPgo8L2RlZnM+Cjwvc3ZnPgo=);
|
||
--jp-icon-add: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE5IDEzaC02djZoLTJ2LTZINXYtMmg2VjVoMnY2aDZ2MnoiLz4KICA8L2c+Cjwvc3ZnPgo=);
|
||
--jp-icon-bell: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE2IDE2IiB2ZXJzaW9uPSIxLjEiPgogICA8cGF0aCBjbGFzcz0ianAtaWNvbjIganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjMzMzMzMzIgogICAgICBkPSJtOCAwLjI5Yy0xLjQgMC0yLjcgMC43My0zLjYgMS44LTEuMiAxLjUtMS40IDMuNC0xLjUgNS4yLTAuMTggMi4yLTAuNDQgNC0yLjMgNS4zbDAuMjggMS4zaDVjMC4wMjYgMC42NiAwLjMyIDEuMSAwLjcxIDEuNSAwLjg0IDAuNjEgMiAwLjYxIDIuOCAwIDAuNTItMC40IDAuNi0xIDAuNzEtMS41aDVsMC4yOC0xLjNjLTEuOS0wLjk3LTIuMi0zLjMtMi4zLTUuMy0wLjEzLTEuOC0wLjI2LTMuNy0xLjUtNS4yLTAuODUtMS0yLjItMS44LTMuNi0xLjh6bTAgMS40YzAuODggMCAxLjkgMC41NSAyLjUgMS4zIDAuODggMS4xIDEuMSAyLjcgMS4yIDQuNCAwLjEzIDEuNyAwLjIzIDMuNiAxLjMgNS4yaC0xMGMxLjEtMS42IDEuMi0zLjQgMS4zLTUuMiAwLjEzLTEuNyAwLjMtMy4zIDEuMi00LjQgMC41OS0wLjcyIDEuNi0xLjMgMi41LTEuM3ptLTAuNzQgMTJoMS41Yy0wLjAwMTUgMC4yOCAwLjAxNSAwLjc5LTAuNzQgMC43OS0wLjczIDAuMDAxNi0wLjcyLTAuNTMtMC43NC0wLjc5eiIgLz4KPC9zdmc+Cg==);
|
||
--jp-icon-bug-dot: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiM2MTYxNjEiPgogICAgICAgIDxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMTcuMTkgOEgyMFYxMEgxNy45MUMxNy45NiAxMC4zMyAxOCAxMC42NiAxOCAxMVYxMkgyMFYxNEgxOC41SDE4VjE0LjAyNzVDMTUuNzUgMTQuMjc2MiAxNCAxNi4xODM3IDE0IDE4LjVDMTQgMTkuMjA4IDE0LjE2MzUgMTkuODc3OSAxNC40NTQ5IDIwLjQ3MzlDMTMuNzA2MyAyMC44MTE3IDEyLjg3NTcgMjEgMTIgMjFDOS43OCAyMSA3Ljg1IDE5Ljc5IDYuODEgMThINFYxNkg2LjA5QzYuMDQgMTUuNjcgNiAxNS4zNCA2IDE1VjE0SDRWMTJINlYxMUM2IDEwLjY2IDYuMDQgMTAuMzMgNi4wOSAxMEg0VjhINi44MUM3LjI2IDcuMjIgNy44OCA2LjU1IDguNjIgNi4wNEw3IDQuNDFMOC40MSAzTDEwLjU5IDUuMTdDMTEuMDQgNS4wNiAxMS41MSA1IDEyIDVDMTIuNDkgNSAxMi45NiA1LjA2IDEzLjQyIDUuMTdMMTUuNTkgM0wxNyA0LjQxTDE1LjM3IDYuMDRDMTYuMTIgNi41NSAxNi43NCA3LjIyIDE3LjE5IDhaTTEwIDE2SDE0VjE0SDEwVjE2Wk0xMCAxMkgxNFYxMEgxMFYxMloiIGZpbGw9IiM2MTYxNjEiLz4KICAgICAgICA8cGF0aCBkPSJNMjIgMTguNUMyMiAyMC40MzMgMjAuNDMzIDIyIDE4LjUgMjJDMTYuNTY3IDIyIDE1IDIwLjQzMyAxNSAxOC41QzE1IDE2LjU2NyAxNi41NjcgMTUgMTguNSAxNUMyMC40MzMgMTUgMjIgMTYuNTY3IDIyIDE4LjVaIiBmaWxsPSIjNjE2MTYxIi8+CiAgICA8L2c+Cjwvc3ZnPgo=);
|
||
--jp-icon-bug: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIj4KICAgIDxwYXRoIGQ9Ik0yMCA4aC0yLjgxYy0uNDUtLjc4LTEuMDctMS40NS0xLjgyLTEuOTZMMTcgNC40MSAxNS41OSAzbC0yLjE3IDIuMTdDMTIuOTYgNS4wNiAxMi40OSA1IDEyIDVjLS40OSAwLS45Ni4wNi0xLjQxLjE3TDguNDEgMyA3IDQuNDFsMS42MiAxLjYzQzcuODggNi41NSA3LjI2IDcuMjIgNi44MSA4SDR2MmgyLjA5Yy0uMDUuMzMtLjA5LjY2LS4wOSAxdjFINHYyaDJ2MWMwIC4zNC4wNC42Ny4wOSAxSDR2MmgyLjgxYzEuMDQgMS43OSAyLjk3IDMgNS4xOSAzczQuMTUtMS4yMSA1LjE5LTNIMjB2LTJoLTIuMDljLjA1LS4zMy4wOS0uNjYuMDktMXYtMWgydi0yaC0ydi0xYzAtLjM0LS4wNC0uNjctLjA5LTFIMjBWOHptLTYgOGgtNHYtMmg0djJ6bTAtNGgtNHYtMmg0djJ6Ii8+CiAgPC9nPgo8L3N2Zz4K);
|
||
--jp-icon-build: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIHZpZXdCb3g9IjAgMCAyNCAyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE0LjkgMTcuNDVDMTYuMjUgMTcuNDUgMTcuMzUgMTYuMzUgMTcuMzUgMTVDMTcuMzUgMTMuNjUgMTYuMjUgMTIuNTUgMTQuOSAxMi41NUMxMy41NCAxMi41NSAxMi40NSAxMy42NSAxMi40NSAxNUMxMi40NSAxNi4zNSAxMy41NCAxNy40NSAxNC45IDE3LjQ1Wk0yMC4xIDE1LjY4TDIxLjU4IDE2Ljg0QzIxLjcxIDE2Ljk1IDIxLjc1IDE3LjEzIDIxLjY2IDE3LjI5TDIwLjI2IDE5LjcxQzIwLjE3IDE5Ljg2IDIwIDE5LjkyIDE5LjgzIDE5Ljg2TDE4LjA5IDE5LjE2QzE3LjczIDE5LjQ0IDE3LjMzIDE5LjY3IDE2LjkxIDE5Ljg1TDE2LjY0IDIxLjdDMTYuNjIgMjEuODcgMTYuNDcgMjIgMTYuMyAyMkgxMy41QzEzLjMyIDIyIDEzLjE4IDIxLjg3IDEzLjE1IDIxLjdMMTIuODkgMTkuODVDMTIuNDYgMTkuNjcgMTIuMDcgMTkuNDQgMTEuNzEgMTkuMTZMOS45NjAwMiAxOS44NkM5LjgxMDAyIDE5LjkyIDkuNjIwMDIgMTkuODYgOS41NDAwMiAxOS43MUw4LjE0MDAyIDE3LjI5QzguMDUwMDIgMTcuMTMgOC4wOTAwMiAxNi45NSA4LjIyMDAyIDE2Ljg0TDkuNzAwMDIgMTUuNjhMOS42NTAwMSAxNUw5LjcwMDAyIDE0LjMxTDguMjIwMDIgMTMuMTZDOC4wOTAwMiAxMy4wNSA4LjA1MDAyIDEyLjg2IDguMTQwMDIgMTIuNzFMOS41NDAwMiAxMC4yOUM5LjYyMDAyIDEwLjEzIDkuODEwMDIgMTAuMDcgOS45NjAwMiAxMC4xM0wxMS43MSAxMC44NEMxMi4wNyAxMC41NiAxMi40NiAxMC4zMiAxMi44OSAxMC4xNUwxMy4xNSA4LjI4OTk4QzEzLjE4IDguMTI5OTggMTMuMzIgNy45OTk5OCAxMy41IDcuOTk5OThIMTYuM0MxNi40NyA3Ljk5OTk4IDE2LjYyIDguMTI5OTggMTYuNjQgOC4yODk5OEwxNi45MSAxMC4xNUMxNy4zMyAxMC4zMiAxNy43MyAxMC41NiAxOC4wOSAxMC44NEwxOS44MyAxMC4xM0MyMCAxMC4wNyAyMC4xNyAxMC4xMyAyMC4yNiAxMC4yOUwyMS42NiAxMi43MUMyMS43NSAxMi44NiAyMS43MSAxMy4wNSAyMS41OCAxMy4xNkwyMC4xIDE0LjMxTDIwLjE1IDE1TDIwLjEgMTUuNjhaIi8+CiAgICA8cGF0aCBkPSJNNy4zMjk2NiA3LjQ0NDU0QzguMDgzMSA3LjAwOTU0IDguMzM5MzIgNi4wNTMzMiA3LjkwNDMyIDUuMjk5ODhDNy40NjkzMiA0LjU0NjQzIDYuNTA4MSA0LjI4MTU2IDUuNzU0NjYgNC43MTY1NkM1LjM5MTc2IDQuOTI2MDggNS4xMjY5NSA1LjI3MTE4IDUuMDE4NDkgNS42NzU5NEM0LjkxMDA0IDYuMDgwNzEgNC45NjY4MiA2LjUxMTk4IDUuMTc2MzQgNi44NzQ4OEM1LjYxMTM0IDcuNjI4MzIgNi41NzYyMiA3Ljg3OTU0IDcuMzI5NjYgNy40NDQ1NFpNOS42NTcxOCA0Ljc5NTkzTDEwLjg2NzIgNC45NTE3OUMxMC45NjI4IDQuOTc3NDEgMTEuMDQwMiA1LjA3MTMzIDExLjAzODIgNS4xODc5M0wxMS4wMzg4IDYuOTg4OTNDMTEuMDQ1NSA3LjEwMDU0IDEwLjk2MTYgNy4xOTUxOCAxMC44NTUgNy4yMTA1NEw5LjY2MDAxIDcuMzgwODNMOS4yMzkxNSA4LjEzMTg4TDkuNjY5NjEgOS4yNTc0NUM5LjcwNzI5IDkuMzYyNzEgOS42NjkzNCA5LjQ3Njk5IDkuNTc0MDggOS41MzE5OUw4LjAxNTIzIDEwLjQzMkM3LjkxMTMxIDEwLjQ5MiA3Ljc5MzM3IDEwLjQ2NzcgNy43MjEwNSAxMC4zODI0TDYuOTg3NDggOS40MzE4OEw2LjEwOTMxIDkuNDMwODNMNS4zNDcwNCAxMC4zOTA1QzUuMjg5MDkgMTAuNDcwMiA1LjE3MzgzIDEwLjQ5MDUgNS4wNzE4NyAxMC40MzM5TDMuNTEyNDUgOS41MzI5M0MzLjQxMDQ5IDkuNDc2MzMgMy4zNzY0NyA5LjM1NzQxIDMuNDEwNzUgOS4yNTY3OUwzLjg2MzQ3IDguMTQwOTNMMy42MTc0OSA3Ljc3NDg4TDMuNDIzNDcgNy4zNzg4M0wyLjIzMDc1IDcuMjEyOTdDMi4xMjY0NyA3LjE5MjM1IDIuMDQwNDkgNy4xMDM0MiAyLjA0MjQ1IDYuOTg2ODJMMi4wNDE4NyA1LjE4NTgyQzIuMDQzODMgNS4wNjkyMiAyLjExOTA5IDQuOTc5NTggMi4yMTcwNCA0Ljk2OTIyTDMuNDIwNjUgNC43OTM5M0wzLjg2NzQ5IDQuMDI3ODhMMy40MTEwNSAyLjkxNzMxQzMuMzczMzcgMi44MTIwNCAzLjQxMTMxIDIuNjk3NzYgMy41MTUyMyAyLjYzNzc2TDUuMDc0MDggMS43Mzc3NkM1LjE2OTM0IDEuNjgyNzYgNS4yODcyOSAxLjcwNzA0IDUuMzU5NjEgMS43OTIzMUw2LjExOTE1IDIuNzI3ODhMNi45ODAwMSAyLjczODkzTDcuNzI0OTYgMS43ODkyMkM3Ljc5MTU2IDEuNzA0NTggNy45MTU0OCAxLjY3OTIyIDguMDA4NzkgMS43NDA4Mkw5LjU2ODIxIDIuNjQxODJDOS42NzAxNyAyLjY5ODQyIDkuNzEyODUgMi44MTIzNCA5LjY4NzIzIDIuOTA3OTdMOS4yMTcxOCA0LjAzMzgzTDkuNDYzMTYgNC4zOTk4OEw5LjY1NzE4IDQuNzk1OTNaIi8+CiAgPC9nPgo8L3N2Zz4K);
|
||
--jp-icon-caret-down-empty-thin: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwb2x5Z29uIGNsYXNzPSJzdDEiIHBvaW50cz0iOS45LDEzLjYgMy42LDcuNCA0LjQsNi42IDkuOSwxMi4yIDE1LjQsNi43IDE2LjEsNy40ICIvPgoJPC9nPgo8L3N2Zz4K);
|
||
--jp-icon-caret-down-empty: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4KICAgIDxwYXRoIGQ9Ik01LjIsNS45TDksOS43bDMuOC0zLjhsMS4yLDEuMmwtNC45LDVsLTQuOS01TDUuMiw1Ljl6Ii8+CiAgPC9nPgo8L3N2Zz4K);
|
||
--jp-icon-caret-down: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4KICAgIDxwYXRoIGQ9Ik01LjIsNy41TDksMTEuMmwzLjgtMy44SDUuMnoiLz4KICA8L2c+Cjwvc3ZnPgo=);
|
||
--jp-icon-caret-left: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwYXRoIGQ9Ik0xMC44LDEyLjhMNy4xLDlsMy44LTMuOGwwLDcuNkgxMC44eiIvPgogIDwvZz4KPC9zdmc+Cg==);
|
||
--jp-icon-caret-right: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIj4KICAgIDxwYXRoIGQ9Ik03LjIsNS4yTDEwLjksOWwtMy44LDMuOFY1LjJINy4yeiIvPgogIDwvZz4KPC9zdmc+Cg==);
|
||
--jp-icon-caret-up-empty-thin: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwb2x5Z29uIGNsYXNzPSJzdDEiIHBvaW50cz0iMTUuNCwxMy4zIDkuOSw3LjcgNC40LDEzLjIgMy42LDEyLjUgOS45LDYuMyAxNi4xLDEyLjYgIi8+Cgk8L2c+Cjwvc3ZnPgo=);
|
||
--jp-icon-caret-up: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSIgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iPgoJCTxwYXRoIGQ9Ik01LjIsMTAuNUw5LDYuOGwzLjgsMy44SDUuMnoiLz4KICA8L2c+Cjwvc3ZnPgo=);
|
||
--jp-icon-case-sensitive: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KICA8ZyBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiM0MTQxNDEiPgogICAgPHJlY3QgeD0iMiIgeT0iMiIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2Ii8+CiAgPC9nPgogIDxnIGNsYXNzPSJqcC1pY29uLWFjY2VudDIiIGZpbGw9IiNGRkYiPgogICAgPHBhdGggZD0iTTcuNiw4aDAuOWwzLjUsOGgtMS4xTDEwLDE0SDZsLTAuOSwySDRMNy42LDh6IE04LDkuMUw2LjQsMTNoMy4yTDgsOS4xeiIvPgogICAgPHBhdGggZD0iTTE2LjYsOS44Yy0wLjIsMC4xLTAuNCwwLjEtMC43LDAuMWMtMC4yLDAtMC40LTAuMS0wLjYtMC4yYy0wLjEtMC4xLTAuMi0wLjQtMC4yLTAuNyBjLTAuMywwLjMtMC42LDAuNS0wLjksMC43Yy0wLjMsMC4xLTAuNywwLjItMS4xLDAuMmMtMC4zLDAtMC41LDAtMC43LTAuMWMtMC4yLTAuMS0wLjQtMC4yLTAuNi0wLjNjLTAuMi0wLjEtMC4zLTAuMy0wLjQtMC41IGMtMC4xLTAuMi0wLjEtMC40LTAuMS0wLjdjMC0wLjMsMC4xLTAuNiwwLjItMC44YzAuMS0wLjIsMC4zLTAuNCwwLjQtMC41QzEyLDcsMTIuMiw2LjksMTIuNSw2LjhjMC4yLTAuMSwwLjUtMC4xLDAuNy0wLjIgYzAuMy0wLjEsMC41LTAuMSwwLjctMC4xYzAuMiwwLDAuNC0wLjEsMC42LTAuMWMwLjIsMCwwLjMtMC4xLDAuNC0wLjJjMC4xLTAuMSwwLjItMC4yLDAuMi0wLjRjMC0xLTEuMS0xLTEuMy0xIGMtMC40LDAtMS40LDAtMS40LDEuMmgtMC45YzAtMC40LDAuMS0wLjcsMC4yLTFjMC4xLTAuMiwwLjMtMC40LDAuNS0wLjZjMC4yLTAuMiwwLjUtMC4zLDAuOC0wLjNDMTMuMyw0LDEzLjYsNCwxMy45LDQgYzAuMywwLDAuNSwwLDAuOCwwLjFjMC4zLDAsMC41LDAuMSwwLjcsMC4yYzAuMiwwLjEsMC40LDAuMywwLjUsMC41QzE2LDUsMTYsNS4yLDE2LDUuNnYyLjljMCwwLjIsMCwwLjQsMCwwLjUgYzAsMC4xLDAuMSwwLjIsMC4zLDAuMmMwLjEsMCwwLjIsMCwwLjMsMFY5Ljh6IE0xNS4yLDYuOWMtMS4yLDAuNi0zLjEsMC4yLTMuMSwxLjRjMCwxLjQsMy4xLDEsMy4xLTAuNVY2Ljl6Ii8+CiAgPC9nPgo8L3N2Zz4K);
|
||
--jp-icon-check: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIj4KICAgIDxwYXRoIGQ9Ik05IDE2LjE3TDQuODMgMTJsLTEuNDIgMS40MUw5IDE5IDIxIDdsLTEuNDEtMS40MXoiLz4KICA8L2c+Cjwvc3ZnPgo=);
|
||
--jp-icon-circle-empty: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyIDJDNi40NyAyIDIgNi40NyAyIDEyczQuNDcgMTAgMTAgMTAgMTAtNC40NyAxMC0xMFMxNy41MyAyIDEyIDJ6bTAgMThjLTQuNDEgMC04LTMuNTktOC04czMuNTktOCA4LTggOCAzLjU5IDggOC0zLjU5IDgtOCA4eiIvPgogIDwvZz4KPC9zdmc+Cg==);
|
||
--jp-icon-circle: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPGNpcmNsZSBjeD0iOSIgY3k9IjkiIHI9IjgiLz4KICA8L2c+Cjwvc3ZnPgo=);
|
||
--jp-icon-clear: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8bWFzayBpZD0iZG9udXRIb2xlIj4KICAgIDxyZWN0IHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0id2hpdGUiIC8+CiAgICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSI4IiBmaWxsPSJibGFjayIvPgogIDwvbWFzaz4KCiAgPGcgY2xhc3M9ImpwLWljb24zIiBmaWxsPSIjNjE2MTYxIj4KICAgIDxyZWN0IGhlaWdodD0iMTgiIHdpZHRoPSIyIiB4PSIxMSIgeT0iMyIgdHJhbnNmb3JtPSJyb3RhdGUoMzE1LCAxMiwgMTIpIi8+CiAgICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIxMCIgbWFzaz0idXJsKCNkb251dEhvbGUpIi8+CiAgPC9nPgo8L3N2Zz4K);
|
||
--jp-icon-close: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbi1ub25lIGpwLWljb24tc2VsZWN0YWJsZS1pbnZlcnNlIGpwLWljb24zLWhvdmVyIiBmaWxsPSJub25lIj4KICAgIDxjaXJjbGUgY3g9IjEyIiBjeT0iMTIiIHI9IjExIi8+CiAgPC9nPgoKICA8ZyBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIGpwLWljb24tYWNjZW50Mi1ob3ZlciIgZmlsbD0iIzYxNjE2MSI+CiAgICA8cGF0aCBkPSJNMTkgNi40MUwxNy41OSA1IDEyIDEwLjU5IDYuNDEgNSA1IDYuNDEgMTAuNTkgMTIgNSAxNy41OSA2LjQxIDE5IDEyIDEzLjQxIDE3LjU5IDE5IDE5IDE3LjU5IDEzLjQxIDEyeiIvPgogIDwvZz4KCiAgPGcgY2xhc3M9ImpwLWljb24tbm9uZSBqcC1pY29uLWJ1c3kiIGZpbGw9Im5vbmUiPgogICAgPGNpcmNsZSBjeD0iMTIiIGN5PSIxMiIgcj0iNyIvPgogIDwvZz4KPC9zdmc+Cg==);
|
||
--jp-icon-code-check: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBzaGFwZS1yZW5kZXJpbmc9Imdlb21ldHJpY1ByZWNpc2lvbiI+CiAgICA8cGF0aCBkPSJNNi41OSwzLjQxTDIsOEw2LjU5LDEyLjZMOCwxMS4xOEw0LjgyLDhMOCw0LjgyTDYuNTksMy40MU0xMi40MSwzLjQxTDExLDQuODJMMTQuMTgsOEwxMSwxMS4xOEwxMi40MSwxMi42TDE3LDhMMTIuNDEsMy40MU0yMS41OSwxMS41OUwxMy41LDE5LjY4TDkuODMsMTZMOC40MiwxNy40MUwxMy41LDIyLjVMMjMsMTNMMjEuNTksMTEuNTlaIiAvPgogIDwvZz4KPC9zdmc+Cg==);
|
||
--jp-icon-code: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjIiIGhlaWdodD0iMjIiIHZpZXdCb3g9IjAgMCAyOCAyOCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CgkJPHBhdGggZD0iTTExLjQgMTguNkw2LjggMTRMMTEuNCA5LjRMMTAgOEw0IDE0TDEwIDIwTDExLjQgMTguNlpNMTYuNiAxOC42TDIxLjIgMTRMMTYuNiA5LjRMMTggOEwyNCAxNEwxOCAyMEwxNi42IDE4LjZWMTguNloiLz4KCTwvZz4KPC9zdmc+Cg==);
|
||
--jp-icon-collapse-all: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGgKICAgICAgICAgICAgZD0iTTggMmMxIDAgMTEgMCAxMiAwczIgMSAyIDJjMCAxIDAgMTEgMCAxMnMwIDItMiAyQzIwIDE0IDIwIDQgMjAgNFMxMCA0IDYgNGMwLTIgMS0yIDItMnoiIC8+CiAgICAgICAgPHBhdGgKICAgICAgICAgICAgZD0iTTE4IDhjMC0xLTEtMi0yLTJTNSA2IDQgNnMtMiAxLTIgMmMwIDEgMCAxMSAwIDEyczEgMiAyIDJjMSAwIDExIDAgMTIgMHMyLTEgMi0yYzAtMSAwLTExIDAtMTJ6bS0yIDB2MTJINFY4eiIgLz4KICAgICAgICA8cGF0aCBkPSJNNiAxM3YyaDh2LTJ6IiAvPgogICAgPC9nPgo8L3N2Zz4K);
|
||
--jp-icon-console: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwMCAyMDAiPgogIDxnIGNsYXNzPSJqcC1jb25zb2xlLWljb24tYmFja2dyb3VuZC1jb2xvciBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiMwMjg4RDEiPgogICAgPHBhdGggZD0iTTIwIDE5LjhoMTYwdjE1OS45SDIweiIvPgogIDwvZz4KICA8ZyBjbGFzcz0ianAtY29uc29sZS1pY29uLWNvbG9yIGpwLWljb24tc2VsZWN0YWJsZS1pbnZlcnNlIiBmaWxsPSIjZmZmIj4KICAgIDxwYXRoIGQ9Ik0xMDUgMTI3LjNoNDB2MTIuOGgtNDB6TTUxLjEgNzdMNzQgOTkuOWwtMjMuMyAyMy4zIDEwLjUgMTAuNSAyMy4zLTIzLjNMOTUgOTkuOSA4NC41IDg5LjQgNjEuNiA2Ni41eiIvPgogIDwvZz4KPC9zdmc+Cg==);
|
||
--jp-icon-copy: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTExLjksMUgzLjJDMi40LDEsMS43LDEuNywxLjcsMi41djEwLjJoMS41VjIuNWg4LjdWMXogTTE0LjEsMy45aC04Yy0wLjgsMC0xLjUsMC43LTEuNSwxLjV2MTAuMmMwLDAuOCwwLjcsMS41LDEuNSwxLjVoOCBjMC44LDAsMS41LTAuNywxLjUtMS41VjUuNEMxNS41LDQuNiwxNC45LDMuOSwxNC4xLDMuOXogTTE0LjEsMTUuNWgtOFY1LjRoOFYxNS41eiIvPgogIDwvZz4KPC9zdmc+Cg==);
|
||
--jp-icon-copyright: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDI0IDI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCI+CiAgPGcgY2xhc3M9ImpwLWljb24zIiBmaWxsPSIjNjE2MTYxIj4KICAgIDxwYXRoIGQ9Ik0xMS44OCw5LjE0YzEuMjgsMC4wNiwxLjYxLDEuMTUsMS42MywxLjY2aDEuNzljLTAuMDgtMS45OC0xLjQ5LTMuMTktMy40NS0zLjE5QzkuNjQsNy42MSw4LDksOCwxMi4xNCBjMCwxLjk0LDAuOTMsNC4yNCwzLjg0LDQuMjRjMi4yMiwwLDMuNDEtMS42NSwzLjQ0LTIuOTVoLTEuNzljLTAuMDMsMC41OS0wLjQ1LDEuMzgtMS42MywxLjQ0QzEwLjU1LDE0LjgzLDEwLDEzLjgxLDEwLDEyLjE0IEMxMCw5LjI1LDExLjI4LDkuMTYsMTEuODgsOS4xNHogTTEyLDJDNi40OCwyLDIsNi40OCwyLDEyczQuNDgsMTAsMTAsMTBzMTAtNC40OCwxMC0xMFMxNy41MiwyLDEyLDJ6IE0xMiwyMGMtNC40MSwwLTgtMy41OS04LTggczMuNTktOCw4LThzOCwzLjU5LDgsOFMxNi40MSwyMCwxMiwyMHoiLz4KICA8L2c+Cjwvc3ZnPgo=);
|
||
--jp-icon-cut: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTkuNjQgNy42NGMuMjMtLjUuMzYtMS4wNS4zNi0xLjY0IDAtMi4yMS0xLjc5LTQtNC00UzIgMy43OSAyIDZzMS43OSA0IDQgNGMuNTkgMCAxLjE0LS4xMyAxLjY0LS4zNkwxMCAxMmwtMi4zNiAyLjM2QzcuMTQgMTQuMTMgNi41OSAxNCA2IDE0Yy0yLjIxIDAtNCAxLjc5LTQgNHMxLjc5IDQgNCA0IDQtMS43OSA0LTRjMC0uNTktLjEzLTEuMTQtLjM2LTEuNjRMMTIgMTRsNyA3aDN2LTFMOS42NCA3LjY0ek02IDhjLTEuMSAwLTItLjg5LTItMnMuOS0yIDItMiAyIC44OSAyIDItLjkgMi0yIDJ6bTAgMTJjLTEuMSAwLTItLjg5LTItMnMuOS0yIDItMiAyIC44OSAyIDItLjkgMi0yIDJ6bTYtNy41Yy0uMjggMC0uNS0uMjItLjUtLjVzLjIyLS41LjUtLjUuNS4yMi41LjUtLjIyLjUtLjUuNXpNMTkgM2wtNiA2IDIgMiA3LTdWM3oiLz4KICA8L2c+Cjwvc3ZnPgo=);
|
||
--jp-icon-delete: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjE2cHgiIGhlaWdodD0iMTZweCI+CiAgICA8cGF0aCBkPSJNMCAwaDI0djI0SDB6IiBmaWxsPSJub25lIiAvPgogICAgPHBhdGggY2xhc3M9ImpwLWljb24zIiBmaWxsPSIjNjI2MjYyIiBkPSJNNiAxOWMwIDEuMS45IDIgMiAyaDhjMS4xIDAgMi0uOSAyLTJWN0g2djEyek0xOSA0aC0zLjVsLTEtMWgtNWwtMSAxSDV2MmgxNFY0eiIgLz4KPC9zdmc+Cg==);
|
||
--jp-icon-download: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE5IDloLTRWM0g5djZINWw3IDcgNy03ek01IDE4djJoMTR2LTJINXoiLz4KICA8L2c+Cjwvc3ZnPgo=);
|
||
--jp-icon-duplicate: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTQiIGhlaWdodD0iMTQiIHZpZXdCb3g9IjAgMCAxNCAxNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggY2xhc3M9ImpwLWljb24zIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTIuNzk5OTggMC44NzVIOC44OTU4MkM5LjIwMDYxIDAuODc1IDkuNDQ5OTggMS4xMzkxNCA5LjQ0OTk4IDEuNDYxOThDOS40NDk5OCAxLjc4NDgyIDkuMjAwNjEgMi4wNDg5NiA4Ljg5NTgyIDIuMDQ4OTZIMy4zNTQxNUMzLjA0OTM2IDIuMDQ4OTYgMi43OTk5OCAyLjMxMzEgMi43OTk5OCAyLjYzNTk0VjkuNjc5NjlDMi43OTk5OCAxMC4wMDI1IDIuNTUwNjEgMTAuMjY2NyAyLjI0NTgyIDEwLjI2NjdDMS45NDEwMyAxMC4yNjY3IDEuNjkxNjUgMTAuMDAyNSAxLjY5MTY1IDkuNjc5NjlWMi4wNDg5NkMxLjY5MTY1IDEuNDAzMjggMi4xOTA0IDAuODc1IDIuNzk5OTggMC44NzVaTTUuMzY2NjUgMTEuOVY0LjU1SDExLjA4MzNWMTEuOUg1LjM2NjY1Wk00LjE0MTY1IDQuMTQxNjdDNC4xNDE2NSAzLjY5MDYzIDQuNTA3MjggMy4zMjUgNC45NTgzMiAzLjMyNUgxMS40OTE3QzExLjk0MjcgMy4zMjUgMTIuMzA4MyAzLjY5MDYzIDEyLjMwODMgNC4xNDE2N1YxMi4zMDgzQzEyLjMwODMgMTIuNzU5NCAxMS45NDI3IDEzLjEyNSAxMS40OTE3IDEzLjEyNUg0Ljk1ODMyQzQuNTA3MjggMTMuMTI1IDQuMTQxNjUgMTIuNzU5NCA0LjE0MTY1IDEyLjMwODNWNC4xNDE2N1oiIGZpbGw9IiM2MTYxNjEiLz4KPHBhdGggY2xhc3M9ImpwLWljb24zIiBkPSJNOS40MzU3NCA4LjI2NTA3SDguMzY0MzFWOS4zMzY1QzguMzY0MzEgOS40NTQzNSA4LjI2Nzg4IDkuNTUwNzggOC4xNTAwMiA5LjU1MDc4QzguMDMyMTcgOS41NTA3OCA3LjkzNTc0IDkuNDU0MzUgNy45MzU3NCA5LjMzNjVWOC4yNjUwN0g2Ljg2NDMxQzYuNzQ2NDUgOC4yNjUwNyA2LjY1MDAyIDguMTY4NjQgNi42NTAwMiA4LjA1MDc4QzYuNjUwMDIgNy45MzI5MiA2Ljc0NjQ1IDcuODM2NSA2Ljg2NDMxIDcuODM2NUg3LjkzNTc0VjYuNzY1MDdDNy45MzU3NCA2LjY0NzIxIDguMDMyMTcgNi41NTA3OCA4LjE1MDAyIDYuNTUwNzhDOC4yNjc4OCA2LjU1MDc4IDguMzY0MzEgNi42NDcyMSA4LjM2NDMxIDYuNzY1MDdWNy44MzY1SDkuNDM1NzRDOS41NTM2IDcuODM2NSA5LjY1MDAyIDcuOTMyOTIgOS42NTAwMiA4LjA1MDc4QzkuNjUwMDIgOC4xNjg2NCA5LjU1MzYgOC4yNjUwNyA5LjQzNTc0IDguMjY1MDdaIiBmaWxsPSIjNjE2MTYxIiBzdHJva2U9IiM2MTYxNjEiIHN0cm9rZS13aWR0aD0iMC41Ii8+Cjwvc3ZnPgo=);
|
||
--jp-icon-edit: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTMgMTcuMjVWMjFoMy43NUwxNy44MSA5Ljk0bC0zLjc1LTMuNzVMMyAxNy4yNXpNMjAuNzEgNy4wNGMuMzktLjM5LjM5LTEuMDIgMC0xLjQxbC0yLjM0LTIuMzRjLS4zOS0uMzktMS4wMi0uMzktMS40MSAwbC0xLjgzIDEuODMgMy43NSAzLjc1IDEuODMtMS44M3oiLz4KICA8L2c+Cjwvc3ZnPgo=);
|
||
--jp-icon-ellipses: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPGNpcmNsZSBjeD0iNSIgY3k9IjEyIiByPSIyIi8+CiAgICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIyIi8+CiAgICA8Y2lyY2xlIGN4PSIxOSIgY3k9IjEyIiByPSIyIi8+CiAgPC9nPgo8L3N2Zz4K);
|
||
--jp-icon-error: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KPGcgY2xhc3M9ImpwLWljb24zIiBmaWxsPSIjNjE2MTYxIj48Y2lyY2xlIGN4PSIxMiIgY3k9IjE5IiByPSIyIi8+PHBhdGggZD0iTTEwIDNoNHYxMmgtNHoiLz48L2c+CjxwYXRoIGZpbGw9Im5vbmUiIGQ9Ik0wIDBoMjR2MjRIMHoiLz4KPC9zdmc+Cg==);
|
||
--jp-icon-expand-all: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGgKICAgICAgICAgICAgZD0iTTggMmMxIDAgMTEgMCAxMiAwczIgMSAyIDJjMCAxIDAgMTEgMCAxMnMwIDItMiAyQzIwIDE0IDIwIDQgMjAgNFMxMCA0IDYgNGMwLTIgMS0yIDItMnoiIC8+CiAgICAgICAgPHBhdGgKICAgICAgICAgICAgZD0iTTE4IDhjMC0xLTEtMi0yLTJTNSA2IDQgNnMtMiAxLTIgMmMwIDEgMCAxMSAwIDEyczEgMiAyIDJjMSAwIDExIDAgMTIgMHMyLTEgMi0yYzAtMSAwLTExIDAtMTJ6bS0yIDB2MTJINFY4eiIgLz4KICAgICAgICA8cGF0aCBkPSJNMTEgMTBIOXYzSDZ2MmgzdjNoMnYtM2gzdi0yaC0zeiIgLz4KICAgIDwvZz4KPC9zdmc+Cg==);
|
||
--jp-icon-extension: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIwLjUgMTFIMTlWN2MwLTEuMS0uOS0yLTItMmgtNFYzLjVDMTMgMi4xMiAxMS44OCAxIDEwLjUgMVM4IDIuMTIgOCAzLjVWNUg0Yy0xLjEgMC0xLjk5LjktMS45OSAydjMuOEgzLjVjMS40OSAwIDIuNyAxLjIxIDIuNyAyLjdzLTEuMjEgMi43LTIuNyAyLjdIMlYyMGMwIDEuMS45IDIgMiAyaDMuOHYtMS41YzAtMS40OSAxLjIxLTIuNyAyLjctMi43IDEuNDkgMCAyLjcgMS4yMSAyLjcgMi43VjIySDE3YzEuMSAwIDItLjkgMi0ydi00aDEuNWMxLjM4IDAgMi41LTEuMTIgMi41LTIuNVMyMS44OCAxMSAyMC41IDExeiIvPgogIDwvZz4KPC9zdmc+Cg==);
|
||
--jp-icon-fast-forward: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTQgMThsOC41LTZMNCA2djEyem05LTEydjEybDguNS02TDEzIDZ6Ii8+CiAgICA8L2c+Cjwvc3ZnPgo=);
|
||
--jp-icon-file-upload: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTkgMTZoNnYtNmg0bC03LTctNyA3aDR6bS00IDJoMTR2Mkg1eiIvPgogIDwvZz4KPC9zdmc+Cg==);
|
||
--jp-icon-file: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTkuMyA4LjJsLTUuNS01LjVjLS4zLS4zLS43LS41LTEuMi0uNUgzLjljLS44LjEtMS42LjktMS42IDEuOHYxNC4xYzAgLjkuNyAxLjYgMS42IDEuNmgxNC4yYy45IDAgMS42LS43IDEuNi0xLjZWOS40Yy4xLS41LS4xLS45LS40LTEuMnptLTUuOC0zLjNsMy40IDMuNmgtMy40VjQuOXptMy45IDEyLjdINC43Yy0uMSAwLS4yIDAtLjItLjJWNC43YzAtLjIuMS0uMy4yLS4zaDcuMnY0LjRzMCAuOC4zIDEuMWMuMy4zIDEuMS4zIDEuMS4zaDQuM3Y3LjJzLS4xLjItLjIuMnoiLz4KPC9zdmc+Cg==);
|
||
--jp-icon-filter-dot: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiNGRkYiPgogICAgPHBhdGggZD0iTTE0LDEyVjE5Ljg4QzE0LjA0LDIwLjE4IDEzLjk0LDIwLjUgMTMuNzEsMjAuNzFDMTMuMzIsMjEuMSAxMi42OSwyMS4xIDEyLjMsMjAuNzFMMTAuMjksMTguN0MxMC4wNiwxOC40NyA5Ljk2LDE4LjE2IDEwLDE3Ljg3VjEySDkuOTdMNC4yMSw0LjYyQzMuODcsNC4xOSAzLjk1LDMuNTYgNC4zOCwzLjIyQzQuNTcsMy4wOCA0Ljc4LDMgNSwzVjNIMTlWM0MxOS4yMiwzIDE5LjQzLDMuMDggMTkuNjIsMy4yMkMyMC4wNSwzLjU2IDIwLjEzLDQuMTkgMTkuNzksNC42MkwxNC4wMywxMkgxNFoiIC8+CiAgPC9nPgogIDxnIGNsYXNzPSJqcC1pY29uLWRvdCIgZmlsbD0iI0ZGRiI+CiAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjE3IiByPSIzIj48L2NpcmNsZT4KICA8L2c+Cjwvc3ZnPgo=);
|
||
--jp-icon-filter-list: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEwIDE4aDR2LTJoLTR2MnpNMyA2djJoMThWNkgzem0zIDdoMTJ2LTJINnYyeiIvPgogIDwvZz4KPC9zdmc+Cg==);
|
||
--jp-icon-filter: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiNGRkYiPgogICAgPHBhdGggZD0iTTE0LDEyVjE5Ljg4QzE0LjA0LDIwLjE4IDEzLjk0LDIwLjUgMTMuNzEsMjAuNzFDMTMuMzIsMjEuMSAxMi42OSwyMS4xIDEyLjMsMjAuNzFMMTAuMjksMTguN0MxMC4wNiwxOC40NyA5Ljk2LDE4LjE2IDEwLDE3Ljg3VjEySDkuOTdMNC4yMSw0LjYyQzMuODcsNC4xOSAzLjk1LDMuNTYgNC4zOCwzLjIyQzQuNTcsMy4wOCA0Ljc4LDMgNSwzVjNIMTlWM0MxOS4yMiwzIDE5LjQzLDMuMDggMTkuNjIsMy4yMkMyMC4wNSwzLjU2IDIwLjEzLDQuMTkgMTkuNzksNC42MkwxNC4wMywxMkgxNFoiIC8+CiAgPC9nPgo8L3N2Zz4K);
|
||
--jp-icon-folder-favorite: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjRweCIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMjRweCIgZmlsbD0iIzAwMDAwMCI+CiAgPHBhdGggZD0iTTAgMGgyNHYyNEgwVjB6IiBmaWxsPSJub25lIi8+PHBhdGggY2xhc3M9ImpwLWljb24zIGpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iIzYxNjE2MSIgZD0iTTIwIDZoLThsLTItMkg0Yy0xLjEgMC0yIC45LTIgMnYxMmMwIDEuMS45IDIgMiAyaDE2YzEuMSAwIDItLjkgMi0yVjhjMC0xLjEtLjktMi0yLTJ6bS0yLjA2IDExTDE1IDE1LjI4IDEyLjA2IDE3bC43OC0zLjMzLTIuNTktMi4yNCAzLjQxLS4yOUwxNSA4bDEuMzQgMy4xNCAzLjQxLjI5LTIuNTkgMi4yNC43OCAzLjMzeiIvPgo8L3N2Zz4K);
|
||
--jp-icon-folder: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTAgNEg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMThjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY4YzAtMS4xLS45LTItMi0yaC04bC0yLTJ6Ii8+Cjwvc3ZnPgo=);
|
||
--jp-icon-home: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjRweCIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMjRweCIgZmlsbD0iIzAwMDAwMCI+CiAgPHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPjxwYXRoIGNsYXNzPSJqcC1pY29uMyBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiM2MTYxNjEiIGQ9Ik0xMCAyMHYtNmg0djZoNXYtOGgzTDEyIDMgMiAxMmgzdjh6Ii8+Cjwvc3ZnPgo=);
|
||
--jp-icon-html5: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDUxMiA1MTIiPgogIDxwYXRoIGNsYXNzPSJqcC1pY29uMCBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiMwMDAiIGQ9Ik0xMDguNCAwaDIzdjIyLjhoMjEuMlYwaDIzdjY5aC0yM1Y0NmgtMjF2MjNoLTIzLjJNMjA2IDIzaC0yMC4zVjBoNjMuN3YyM0gyMjl2NDZoLTIzbTUzLjUtNjloMjQuMWwxNC44IDI0LjNMMzEzLjIgMGgyNC4xdjY5aC0yM1YzNC44bC0xNi4xIDI0LjgtMTYuMS0yNC44VjY5aC0yMi42bTg5LjItNjloMjN2NDYuMmgzMi42VjY5aC01NS42Ii8+CiAgPHBhdGggY2xhc3M9ImpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iI2U0NGQyNiIgZD0iTTEwNy42IDQ3MWwtMzMtMzcwLjRoMzYyLjhsLTMzIDM3MC4yTDI1NS43IDUxMiIvPgogIDxwYXRoIGNsYXNzPSJqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiNmMTY1MjkiIGQ9Ik0yNTYgNDgwLjVWMTMxaDE0OC4zTDM3NiA0NDciLz4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGZpbGw9IiNlYmViZWIiIGQ9Ik0xNDIgMTc2LjNoMTE0djQ1LjRoLTY0LjJsNC4yIDQ2LjVoNjB2NDUuM0gxNTQuNG0yIDIyLjhIMjAybDMuMiAzNi4zIDUwLjggMTMuNnY0Ny40bC05My4yLTI2Ii8+CiAgPHBhdGggY2xhc3M9ImpwLWljb24tc2VsZWN0YWJsZS1pbnZlcnNlIiBmaWxsPSIjZmZmIiBkPSJNMzY5LjYgMTc2LjNIMjU1Ljh2NDUuNGgxMDkuNm0tNC4xIDQ2LjVIMjU1Ljh2NDUuNGg1NmwtNS4zIDU5LTUwLjcgMTMuNnY0Ny4ybDkzLTI1LjgiLz4KPC9zdmc+Cg==);
|
||
--jp-icon-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1icmFuZDQganAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGZpbGw9IiNGRkYiIGQ9Ik0yLjIgMi4yaDE3LjV2MTcuNUgyLjJ6Ii8+CiAgPHBhdGggY2xhc3M9ImpwLWljb24tYnJhbmQwIGpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iIzNGNTFCNSIgZD0iTTIuMiAyLjJ2MTcuNWgxNy41bC4xLTE3LjVIMi4yem0xMi4xIDIuMmMxLjIgMCAyLjIgMSAyLjIgMi4ycy0xIDIuMi0yLjIgMi4yLTIuMi0xLTIuMi0yLjIgMS0yLjIgMi4yLTIuMnpNNC40IDE3LjZsMy4zLTguOCAzLjMgNi42IDIuMi0zLjIgNC40IDUuNEg0LjR6Ii8+Cjwvc3ZnPgo=);
|
||
--jp-icon-info: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDUwLjk3OCA1MC45NzgiPgoJPGcgY2xhc3M9ImpwLWljb24zIiBmaWxsPSIjNjE2MTYxIj4KCQk8cGF0aCBkPSJNNDMuNTIsNy40NThDMzguNzExLDIuNjQ4LDMyLjMwNywwLDI1LjQ4OSwwQzE4LjY3LDAsMTIuMjY2LDIuNjQ4LDcuNDU4LDcuNDU4CgkJCWMtOS45NDMsOS45NDEtOS45NDMsMjYuMTE5LDAsMzYuMDYyYzQuODA5LDQuODA5LDExLjIxMiw3LjQ1NiwxOC4wMzEsNy40NThjMCwwLDAuMDAxLDAsMC4wMDIsMAoJCQljNi44MTYsMCwxMy4yMjEtMi42NDgsMTguMDI5LTcuNDU4YzQuODA5LTQuODA5LDcuNDU3LTExLjIxMiw3LjQ1Ny0xOC4wM0M1MC45NzcsMTguNjcsNDguMzI4LDEyLjI2Niw0My41Miw3LjQ1OHoKCQkJIE00Mi4xMDYsNDIuMTA1Yy00LjQzMiw0LjQzMS0xMC4zMzIsNi44NzItMTYuNjE1LDYuODcyaC0wLjAwMmMtNi4yODUtMC4wMDEtMTIuMTg3LTIuNDQxLTE2LjYxNy02Ljg3MgoJCQljLTkuMTYyLTkuMTYzLTkuMTYyLTI0LjA3MSwwLTMzLjIzM0MxMy4zMDMsNC40NCwxOS4yMDQsMiwyNS40ODksMmM2LjI4NCwwLDEyLjE4NiwyLjQ0LDE2LjYxNyw2Ljg3MgoJCQljNC40MzEsNC40MzEsNi44NzEsMTAuMzMyLDYuODcxLDE2LjYxN0M0OC45NzcsMzEuNzcyLDQ2LjUzNiwzNy42NzUsNDIuMTA2LDQyLjEwNXoiLz4KCQk8cGF0aCBkPSJNMjMuNTc4LDMyLjIxOGMtMC4wMjMtMS43MzQsMC4xNDMtMy4wNTksMC40OTYtMy45NzJjMC4zNTMtMC45MTMsMS4xMS0xLjk5NywyLjI3Mi0zLjI1MwoJCQljMC40NjgtMC41MzYsMC45MjMtMS4wNjIsMS4zNjctMS41NzVjMC42MjYtMC43NTMsMS4xMDQtMS40NzgsMS40MzYtMi4xNzVjMC4zMzEtMC43MDcsMC40OTUtMS41NDEsMC40OTUtMi41CgkJCWMwLTEuMDk2LTAuMjYtMi4wODgtMC43NzktMi45NzljLTAuNTY1LTAuODc5LTEuNTAxLTEuMzM2LTIuODA2LTEuMzY5Yy0xLjgwMiwwLjA1Ny0yLjk4NSwwLjY2Ny0zLjU1LDEuODMyCgkJCWMtMC4zMDEsMC41MzUtMC41MDMsMS4xNDEtMC42MDcsMS44MTRjLTAuMTM5LDAuNzA3LTAuMjA3LDEuNDMyLTAuMjA3LDIuMTc0aC0yLjkzN2MtMC4wOTEtMi4yMDgsMC40MDctNC4xMTQsMS40OTMtNS43MTkKCQkJYzEuMDYyLTEuNjQsMi44NTUtMi40ODEsNS4zNzgtMi41MjdjMi4xNiwwLjAyMywzLjg3NCwwLjYwOCw1LjE0MSwxLjc1OGMxLjI3OCwxLjE2LDEuOTI5LDIuNzY0LDEuOTUsNC44MTEKCQkJYzAsMS4xNDItMC4xMzcsMi4xMTEtMC40MSwyLjkxMWMtMC4zMDksMC44NDUtMC43MzEsMS41OTMtMS4yNjgsMi4yNDNjLTAuNDkyLDAuNjUtMS4wNjgsMS4zMTgtMS43MywyLjAwMgoJCQljLTAuNjUsMC42OTctMS4zMTMsMS40NzktMS45ODcsMi4zNDZjLTAuMjM5LDAuMzc3LTAuNDI5LDAuNzc3LTAuNTY1LDEuMTk5Yy0wLjE2LDAuOTU5LTAuMjE3LDEuOTUxLTAuMTcxLDIuOTc5CgkJCUMyNi41ODksMzIuMjE4LDIzLjU3OCwzMi4yMTgsMjMuNTc4LDMyLjIxOHogTTIzLjU3OCwzOC4yMnYtMy40ODRoMy4wNzZ2My40ODRIMjMuNTc4eiIvPgoJPC9nPgo8L3N2Zz4K);
|
||
--jp-icon-inspector: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaW5zcGVjdG9yLWljb24tY29sb3IganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMjAgNEg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMThjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY2YzAtMS4xLS45LTItMi0yem0tNSAxNEg0di00aDExdjR6bTAtNUg0VjloMTF2NHptNSA1aC00VjloNHY5eiIvPgo8L3N2Zz4K);
|
||
--jp-icon-json: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtanNvbi1pY29uLWNvbG9yIGpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iI0Y5QTgyNSI+CiAgICA8cGF0aCBkPSJNMjAuMiAxMS44Yy0xLjYgMC0xLjcuNS0xLjcgMSAwIC40LjEuOS4xIDEuMy4xLjUuMS45LjEgMS4zIDAgMS43LTEuNCAyLjMtMy41IDIuM2gtLjl2LTEuOWguNWMxLjEgMCAxLjQgMCAxLjQtLjggMC0uMyAwLS42LS4xLTEgMC0uNC0uMS0uOC0uMS0xLjIgMC0xLjMgMC0xLjggMS4zLTItMS4zLS4yLTEuMy0uNy0xLjMtMiAwLS40LjEtLjguMS0xLjIuMS0uNC4xLS43LjEtMSAwLS44LS40LS43LTEuNC0uOGgtLjVWNC4xaC45YzIuMiAwIDMuNS43IDMuNSAyLjMgMCAuNC0uMS45LS4xIDEuMy0uMS41LS4xLjktLjEgMS4zIDAgLjUuMiAxIDEuNyAxdjEuOHpNMS44IDEwLjFjMS42IDAgMS43LS41IDEuNy0xIDAtLjQtLjEtLjktLjEtMS4zLS4xLS41LS4xLS45LS4xLTEuMyAwLTEuNiAxLjQtMi4zIDMuNS0yLjNoLjl2MS45aC0uNWMtMSAwLTEuNCAwLTEuNC44IDAgLjMgMCAuNi4xIDEgMCAuMi4xLjYuMSAxIDAgMS4zIDAgMS44LTEuMyAyQzYgMTEuMiA2IDExLjcgNiAxM2MwIC40LS4xLjgtLjEgMS4yLS4xLjMtLjEuNy0uMSAxIDAgLjguMy44IDEuNC44aC41djEuOWgtLjljLTIuMSAwLTMuNS0uNi0zLjUtMi4zIDAtLjQuMS0uOS4xLTEuMy4xLS41LjEtLjkuMS0xLjMgMC0uNS0uMi0xLTEuNy0xdi0xLjl6Ii8+CiAgICA8Y2lyY2xlIGN4PSIxMSIgY3k9IjEzLjgiIHI9IjIuMSIvPgogICAgPGNpcmNsZSBjeD0iMTEiIGN5PSI4LjIiIHI9IjIuMSIvPgogIDwvZz4KPC9zdmc+Cg==);
|
||
--jp-icon-julia: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDMyNSAzMDAiPgogIDxnIGNsYXNzPSJqcC1icmFuZDAganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjY2IzYzMzIj4KICAgIDxwYXRoIGQ9Ik0gMTUwLjg5ODQzOCAyMjUgQyAxNTAuODk4NDM4IDI2Ni40MjE4NzUgMTE3LjMyMDMxMiAzMDAgNzUuODk4NDM4IDMwMCBDIDM0LjQ3NjU2MiAzMDAgMC44OTg0MzggMjY2LjQyMTg3NSAwLjg5ODQzOCAyMjUgQyAwLjg5ODQzOCAxODMuNTc4MTI1IDM0LjQ3NjU2MiAxNTAgNzUuODk4NDM4IDE1MCBDIDExNy4zMjAzMTIgMTUwIDE1MC44OTg0MzggMTgzLjU3ODEyNSAxNTAuODk4NDM4IDIyNSIvPgogIDwvZz4KICA8ZyBjbGFzcz0ianAtYnJhbmQwIGpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iIzM4OTgyNiI+CiAgICA8cGF0aCBkPSJNIDIzNy41IDc1IEMgMjM3LjUgMTE2LjQyMTg3NSAyMDMuOTIxODc1IDE1MCAxNjIuNSAxNTAgQyAxMjEuMDc4MTI1IDE1MCA4Ny41IDExNi40MjE4NzUgODcuNSA3NSBDIDg3LjUgMzMuNTc4MTI1IDEyMS4wNzgxMjUgMCAxNjIuNSAwIEMgMjAzLjkyMTg3NSAwIDIzNy41IDMzLjU3ODEyNSAyMzcuNSA3NSIvPgogIDwvZz4KICA8ZyBjbGFzcz0ianAtYnJhbmQwIGpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iIzk1NThiMiI+CiAgICA8cGF0aCBkPSJNIDMyNC4xMDE1NjIgMjI1IEMgMzI0LjEwMTU2MiAyNjYuNDIxODc1IDI5MC41MjM0MzggMzAwIDI0OS4xMDE1NjIgMzAwIEMgMjA3LjY3OTY4OCAzMDAgMTc0LjEwMTU2MiAyNjYuNDIxODc1IDE3NC4xMDE1NjIgMjI1IEMgMTc0LjEwMTU2MiAxODMuNTc4MTI1IDIwNy42Nzk2ODggMTUwIDI0OS4xMDE1NjIgMTUwIEMgMjkwLjUyMzQzOCAxNTAgMzI0LjEwMTU2MiAxODMuNTc4MTI1IDMyNC4xMDE1NjIgMjI1Ii8+CiAgPC9nPgo8L3N2Zz4K);
|
||
--jp-icon-jupyter-favicon: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTUyIiBoZWlnaHQ9IjE2NSIgdmlld0JveD0iMCAwIDE1MiAxNjUiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgPGcgY2xhc3M9ImpwLWp1cHl0ZXItaWNvbi1jb2xvciIgZmlsbD0iI0YzNzcyNiI+CiAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLjA3ODk0NywgMTEwLjU4MjkyNykiIGQ9Ik03NS45NDIyODQyLDI5LjU4MDQ1NjEgQzQzLjMwMjM5NDcsMjkuNTgwNDU2MSAxNC43OTY3ODMyLDE3LjY1MzQ2MzQgMCwwIEM1LjUxMDgzMjExLDE1Ljg0MDY4MjkgMTUuNzgxNTM4OSwyOS41NjY3NzMyIDI5LjM5MDQ5NDcsMzkuMjc4NDE3MSBDNDIuOTk5Nyw0OC45ODk4NTM3IDU5LjI3MzcsNTQuMjA2NzgwNSA3NS45NjA1Nzg5LDU0LjIwNjc4MDUgQzkyLjY0NzQ1NzksNTQuMjA2NzgwNSAxMDguOTIxNDU4LDQ4Ljk4OTg1MzcgMTIyLjUzMDY2MywzOS4yNzg0MTcxIEMxMzYuMTM5NDUzLDI5LjU2Njc3MzIgMTQ2LjQxMDI4NCwxNS44NDA2ODI5IDE1MS45MjExNTgsMCBDMTM3LjA4Nzg2OCwxNy42NTM0NjM0IDEwOC41ODI1ODksMjkuNTgwNDU2MSA3NS45NDIyODQyLDI5LjU4MDQ1NjEgTDc1Ljk0MjI4NDIsMjkuNTgwNDU2MSBaIiAvPgogICAgPHBhdGggdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC4wMzczNjgsIDAuNzA0ODc4KSIgZD0iTTc1Ljk3ODQ1NzksMjQuNjI2NDA3MyBDMTA4LjYxODc2MywyNC42MjY0MDczIDEzNy4xMjQ0NTgsMzYuNTUzNDQxNSAxNTEuOTIxMTU4LDU0LjIwNjc4MDUgQzE0Ni40MTAyODQsMzguMzY2MjIyIDEzNi4xMzk0NTMsMjQuNjQwMTMxNyAxMjIuNTMwNjYzLDE0LjkyODQ4NzggQzEwOC45MjE0NTgsNS4yMTY4NDM5IDkyLjY0NzQ1NzksMCA3NS45NjA1Nzg5LDAgQzU5LjI3MzcsMCA0Mi45OTk3LDUuMjE2ODQzOSAyOS4zOTA0OTQ3LDE0LjkyODQ4NzggQzE1Ljc4MTUzODksMjQuNjQwMTMxNyA1LjUxMDgzMjExLDM4LjM2NjIyMiAwLDU0LjIwNjc4MDUgQzE0LjgzMzA4MTYsMzYuNTg5OTI5MyA0My4zMzg1Njg0LDI0LjYyNjQwNzMgNzUuOTc4NDU3OSwyNC42MjY0MDczIEw3NS45Nzg0NTc5LDI0LjYyNjQwNzMgWiIgLz4KICA8L2c+Cjwvc3ZnPgo=);
|
||
--jp-icon-jupyter: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzkiIGhlaWdodD0iNTEiIHZpZXdCb3g9IjAgMCAzOSA1MSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMTYzOCAtMjI4MSkiPgogICAgIDxnIGNsYXNzPSJqcC1qdXB5dGVyLWljb24tY29sb3IiIGZpbGw9IiNGMzc3MjYiPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjM5Ljc0IDIzMTEuOTgpIiBkPSJNIDE4LjI2NDYgNy4xMzQxMUMgMTAuNDE0NSA3LjEzNDExIDMuNTU4NzIgNC4yNTc2IDAgMEMgMS4zMjUzOSAzLjgyMDQgMy43OTU1NiA3LjEzMDgxIDcuMDY4NiA5LjQ3MzAzQyAxMC4zNDE3IDExLjgxNTIgMTQuMjU1NyAxMy4wNzM0IDE4LjI2OSAxMy4wNzM0QyAyMi4yODIzIDEzLjA3MzQgMjYuMTk2MyAxMS44MTUyIDI5LjQ2OTQgOS40NzMwM0MgMzIuNzQyNCA3LjEzMDgxIDM1LjIxMjYgMy44MjA0IDM2LjUzOCAwQyAzMi45NzA1IDQuMjU3NiAyNi4xMTQ4IDcuMTM0MTEgMTguMjY0NiA3LjEzNDExWiIvPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjM5LjczIDIyODUuNDgpIiBkPSJNIDE4LjI3MzMgNS45MzkzMUMgMjYuMTIzNSA1LjkzOTMxIDMyLjk3OTMgOC44MTU4MyAzNi41MzggMTMuMDczNEMgMzUuMjEyNiA5LjI1MzAzIDMyLjc0MjQgNS45NDI2MiAyOS40Njk0IDMuNjAwNEMgMjYuMTk2MyAxLjI1ODE4IDIyLjI4MjMgMCAxOC4yNjkgMEMgMTQuMjU1NyAwIDEwLjM0MTcgMS4yNTgxOCA3LjA2ODYgMy42MDA0QyAzLjc5NTU2IDUuOTQyNjIgMS4zMjUzOSA5LjI1MzAzIDAgMTMuMDczNEMgMy41Njc0NSA4LjgyNDYzIDEwLjQyMzIgNS45MzkzMSAxOC4yNzMzIDUuOTM5MzFaIi8+CiAgICA8L2c+CiAgICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjY5LjMgMjI4MS4zMSkiIGQ9Ik0gNS44OTM1MyAyLjg0NEMgNS45MTg4OSAzLjQzMTY1IDUuNzcwODUgNC4wMTM2NyA1LjQ2ODE1IDQuNTE2NDVDIDUuMTY1NDUgNS4wMTkyMiA0LjcyMTY4IDUuNDIwMTUgNC4xOTI5OSA1LjY2ODUxQyAzLjY2NDMgNS45MTY4OCAzLjA3NDQ0IDYuMDAxNTEgMi40OTgwNSA1LjkxMTcxQyAxLjkyMTY2IDUuODIxOSAxLjM4NDYzIDUuNTYxNyAwLjk1NDg5OCA1LjE2NDAxQyAwLjUyNTE3IDQuNzY2MzMgMC4yMjIwNTYgNC4yNDkwMyAwLjA4MzkwMzcgMy42Nzc1N0MgLTAuMDU0MjQ4MyAzLjEwNjExIC0wLjAyMTIzIDIuNTA2MTcgMC4xNzg3ODEgMS45NTM2NEMgMC4zNzg3OTMgMS40MDExIDAuNzM2ODA5IDAuOTIwODE3IDEuMjA3NTQgMC41NzM1MzhDIDEuNjc4MjYgMC4yMjYyNTkgMi4yNDA1NSAwLjAyNzU5MTkgMi44MjMyNiAwLjAwMjY3MjI5QyAzLjYwMzg5IC0wLjAzMDcxMTUgNC4zNjU3MyAwLjI0OTc4OSA0Ljk0MTQyIDAuNzgyNTUxQyA1LjUxNzExIDEuMzE1MzEgNS44NTk1NiAyLjA1Njc2IDUuODkzNTMgMi44NDRaIi8+CiAgICAgIDxwYXRoIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE2MzkuOCAyMzIzLjgxKSIgZD0iTSA3LjQyNzg5IDMuNTgzMzhDIDcuNDYwMDggNC4zMjQzIDcuMjczNTUgNS4wNTgxOSA2Ljg5MTkzIDUuNjkyMTNDIDYuNTEwMzEgNi4zMjYwNyA1Ljk1MDc1IDYuODMxNTYgNS4yODQxMSA3LjE0NDZDIDQuNjE3NDcgNy40NTc2MyAzLjg3MzcxIDcuNTY0MTQgMy4xNDcwMiA3LjQ1MDYzQyAyLjQyMDMyIDcuMzM3MTIgMS43NDMzNiA3LjAwODcgMS4yMDE4NCA2LjUwNjk1QyAwLjY2MDMyOCA2LjAwNTIgMC4yNzg2MSA1LjM1MjY4IDAuMTA1MDE3IDQuNjMyMDJDIC0wLjA2ODU3NTcgMy45MTEzNSAtMC4wMjYyMzYxIDMuMTU0OTQgMC4yMjY2NzUgMi40NTg1NkMgMC40Nzk1ODcgMS43NjIxNyAwLjkzMTY5NyAxLjE1NzEzIDEuNTI1NzYgMC43MjAwMzNDIDIuMTE5ODMgMC4yODI5MzUgMi44MjkxNCAwLjAzMzQzOTUgMy41NjM4OSAwLjAwMzEzMzQ0QyA0LjU0NjY3IC0wLjAzNzQwMzMgNS41MDUyOSAwLjMxNjcwNiA2LjIyOTYxIDAuOTg3ODM1QyA2Ljk1MzkzIDEuNjU4OTYgNy4zODQ4NCAyLjU5MjM1IDcuNDI3ODkgMy41ODMzOEwgNy40Mjc4OSAzLjU4MzM4WiIvPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjM4LjM2IDIyODYuMDYpIiBkPSJNIDIuMjc0NzEgNC4zOTYyOUMgMS44NDM2MyA0LjQxNTA4IDEuNDE2NzEgNC4zMDQ0NSAxLjA0Nzk5IDQuMDc4NDNDIDAuNjc5MjY4IDMuODUyNCAwLjM4NTMyOCAzLjUyMTE0IDAuMjAzMzcxIDMuMTI2NTZDIDAuMDIxNDEzNiAyLjczMTk4IC0wLjA0MDM3OTggMi4yOTE4MyAwLjAyNTgxMTYgMS44NjE4MUMgMC4wOTIwMDMxIDEuNDMxOCAwLjI4MzIwNCAxLjAzMTI2IDAuNTc1MjEzIDAuNzEwODgzQyAwLjg2NzIyMiAwLjM5MDUxIDEuMjQ2OTEgMC4xNjQ3MDggMS42NjYyMiAwLjA2MjA1OTJDIDIuMDg1NTMgLTAuMDQwNTg5NyAyLjUyNTYxIC0wLjAxNTQ3MTQgMi45MzA3NiAwLjEzNDIzNUMgMy4zMzU5MSAwLjI4Mzk0MSAzLjY4NzkyIDAuNTUxNTA1IDMuOTQyMjIgMC45MDMwNkMgNC4xOTY1MiAxLjI1NDYyIDQuMzQxNjkgMS42NzQzNiA0LjM1OTM1IDIuMTA5MTZDIDQuMzgyOTkgMi42OTEwNyA0LjE3Njc4IDMuMjU4NjkgMy43ODU5NyAzLjY4NzQ2QyAzLjM5NTE2IDQuMTE2MjQgMi44NTE2NiA0LjM3MTE2IDIuMjc0NzEgNC4zOTYyOUwgMi4yNzQ3MSA0LjM5NjI5WiIvPgogICAgPC9nPgogIDwvZz4+Cjwvc3ZnPgo=);
|
||
--jp-icon-jupyterlab-wordmark: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMDAiIHZpZXdCb3g9IjAgMCAxODYwLjggNDc1Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiM0RTRFNEUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDQ4MC4xMzY0MDEsIDY0LjI3MTQ5MykiPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC4wMDAwMDAsIDU4Ljg3NTU2NikiPgogICAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLjA4NzYwMywgMC4xNDAyOTQpIj4KICAgICAgICA8cGF0aCBkPSJNLTQyNi45LDE2OS44YzAsNDguNy0zLjcsNjQuNy0xMy42LDc2LjRjLTEwLjgsMTAtMjUsMTUuNS0zOS43LDE1LjVsMy43LDI5IGMyMi44LDAuMyw0NC44LTcuOSw2MS45LTIzLjFjMTcuOC0xOC41LDI0LTQ0LjEsMjQtODMuM1YwSC00Mjd2MTcwLjFMLTQyNi45LDE2OS44TC00MjYuOSwxNjkuOHoiLz4KICAgICAgPC9nPgogICAgPC9nPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTU1LjA0NTI5NiwgNTYuODM3MTA0KSI+CiAgICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEuNTYyNDUzLCAxLjc5OTg0MikiPgogICAgICAgIDxwYXRoIGQ9Ik0tMzEyLDE0OGMwLDIxLDAsMzkuNSwxLjcsNTUuNGgtMzEuOGwtMi4xLTMzLjNoLTAuOGMtNi43LDExLjYtMTYuNCwyMS4zLTI4LDI3LjkgYy0xMS42LDYuNi0yNC44LDEwLTM4LjIsOS44Yy0zMS40LDAtNjktMTcuNy02OS04OVYwaDM2LjR2MTEyLjdjMCwzOC43LDExLjYsNjQuNyw0NC42LDY0LjdjMTAuMy0wLjIsMjAuNC0zLjUsMjguOS05LjQgYzguNS01LjksMTUuMS0xNC4zLDE4LjktMjMuOWMyLjItNi4xLDMuMy0xMi41LDMuMy0xOC45VjAuMmgzNi40VjE0OEgtMzEyTC0zMTIsMTQ4eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzOTAuMDEzMzIyLCA1My40Nzk2MzgpIj4KICAgICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMS43MDY0NTgsIDAuMjMxNDI1KSI+CiAgICAgICAgPHBhdGggZD0iTS00NzguNiw3MS40YzAtMjYtMC44LTQ3LTEuNy02Ni43aDMyLjdsMS43LDM0LjhoMC44YzcuMS0xMi41LDE3LjUtMjIuOCwzMC4xLTI5LjcgYzEyLjUtNywyNi43LTEwLjMsNDEtOS44YzQ4LjMsMCw4NC43LDQxLjcsODQuNywxMDMuM2MwLDczLjEtNDMuNywxMDkuMi05MSwxMDkuMmMtMTIuMSwwLjUtMjQuMi0yLjItMzUtNy44IGMtMTAuOC01LjYtMTkuOS0xMy45LTI2LjYtMjQuMmgtMC44VjI5MWgtMzZ2LTIyMEwtNDc4LjYsNzEuNEwtNDc4LjYsNzEuNHogTS00NDIuNiwxMjUuNmMwLjEsNS4xLDAuNiwxMC4xLDEuNywxNS4xIGMzLDEyLjMsOS45LDIzLjMsMTkuOCwzMS4xYzkuOSw3LjgsMjIuMSwxMi4xLDM0LjcsMTIuMWMzOC41LDAsNjAuNy0zMS45LDYwLjctNzguNWMwLTQwLjctMjEuMS03NS42LTU5LjUtNzUuNiBjLTEyLjksMC40LTI1LjMsNS4xLTM1LjMsMTMuNGMtOS45LDguMy0xNi45LDE5LjctMTkuNiwzMi40Yy0xLjUsNC45LTIuMywxMC0yLjUsMTUuMVYxMjUuNkwtNDQyLjYsMTI1LjZMLTQ0Mi42LDEyNS42eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSg2MDYuNzQwNzI2LCA1Ni44MzcxMDQpIj4KICAgICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC43NTEyMjYsIDEuOTg5Mjk5KSI+CiAgICAgICAgPHBhdGggZD0iTS00NDAuOCwwbDQzLjcsMTIwLjFjNC41LDEzLjQsOS41LDI5LjQsMTIuOCw0MS43aDAuOGMzLjctMTIuMiw3LjktMjcuNywxMi44LTQyLjQgbDM5LjctMTE5LjJoMzguNUwtMzQ2LjksMTQ1Yy0yNiw2OS43LTQzLjcsMTA1LjQtNjguNiwxMjcuMmMtMTIuNSwxMS43LTI3LjksMjAtNDQuNiwyMy45bC05LjEtMzEuMSBjMTEuNy0zLjksMjIuNS0xMC4xLDMxLjgtMTguMWMxMy4yLTExLjEsMjMuNy0yNS4yLDMwLjYtNDEuMmMxLjUtMi44LDIuNS01LjcsMi45LTguOGMtMC4zLTMuMy0xLjItNi42LTIuNS05LjdMLTQ4MC4yLDAuMSBoMzkuN0wtNDQwLjgsMEwtNDQwLjgsMHoiLz4KICAgICAgPC9nPgogICAgPC9nPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoODIyLjc0ODEwNCwgMC4wMDAwMDApIj4KICAgICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMS40NjQwNTAsIDAuMzc4OTE0KSI+CiAgICAgICAgPHBhdGggZD0iTS00MTMuNywwdjU4LjNoNTJ2MjguMmgtNTJWMTk2YzAsMjUsNywzOS41LDI3LjMsMzkuNWM3LjEsMC4xLDE0LjItMC43LDIxLjEtMi41IGwxLjcsMjcuN2MtMTAuMywzLjctMjEuMyw1LjQtMzIuMiw1Yy03LjMsMC40LTE0LjYtMC43LTIxLjMtMy40Yy02LjgtMi43LTEyLjktNi44LTE3LjktMTIuMWMtMTAuMy0xMC45LTE0LjEtMjktMTQuMS01Mi45IFY4Ni41aC0zMVY1OC4zaDMxVjkuNkwtNDEzLjcsMEwtNDEzLjcsMHoiLz4KICAgICAgPC9nPgogICAgPC9nPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOTc0LjQzMzI4NiwgNTMuNDc5NjM4KSI+CiAgICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAuOTkwMDM0LCAwLjYxMDMzOSkiPgogICAgICAgIDxwYXRoIGQ9Ik0tNDQ1LjgsMTEzYzAuOCw1MCwzMi4yLDcwLjYsNjguNiw3MC42YzE5LDAuNiwzNy45LTMsNTUuMy0xMC41bDYuMiwyNi40IGMtMjAuOSw4LjktNDMuNSwxMy4xLTY2LjIsMTIuNmMtNjEuNSwwLTk4LjMtNDEuMi05OC4zLTEwMi41Qy00ODAuMiw0OC4yLTQ0NC43LDAtMzg2LjUsMGM2NS4yLDAsODIuNyw1OC4zLDgyLjcsOTUuNyBjLTAuMSw1LjgtMC41LDExLjUtMS4yLDE3LjJoLTE0MC42SC00NDUuOEwtNDQ1LjgsMTEzeiBNLTMzOS4yLDg2LjZjMC40LTIzLjUtOS41LTYwLjEtNTAuNC02MC4xIGMtMzYuOCwwLTUyLjgsMzQuNC01NS43LDYwLjFILTMzOS4yTC0zMzkuMiw4Ni42TC0zMzkuMiw4Ni42eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMjAxLjk2MTA1OCwgNTMuNDc5NjM4KSI+CiAgICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEuMTc5NjQwLCAwLjcwNTA2OCkiPgogICAgICAgIDxwYXRoIGQ9Ik0tNDc4LjYsNjhjMC0yMy45LTAuNC00NC41LTEuNy02My40aDMxLjhsMS4yLDM5LjloMS43YzkuMS0yNy4zLDMxLTQ0LjUsNTUuMy00NC41IGMzLjUtMC4xLDcsMC40LDEwLjMsMS4ydjM0LjhjLTQuMS0wLjktOC4yLTEuMy0xMi40LTEuMmMtMjUuNiwwLTQzLjcsMTkuNy00OC43LDQ3LjRjLTEsNS43LTEuNiwxMS41LTEuNywxNy4ydjEwOC4zaC0zNlY2OCBMLTQ3OC42LDY4eiIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgPC9nPgoKICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMCIgZmlsbD0iI0YzNzcyNiI+CiAgICA8cGF0aCBkPSJNMTM1Mi4zLDMyNi4yaDM3VjI4aC0zN1YzMjYuMnogTTE2MDQuOCwzMjYuMmMtMi41LTEzLjktMy40LTMxLjEtMy40LTQ4Ljd2LTc2IGMwLTQwLjctMTUuMS04My4xLTc3LjMtODMuMWMtMjUuNiwwLTUwLDcuMS02Ni44LDE4LjFsOC40LDI0LjRjMTQuMy05LjIsMzQtMTUuMSw1My0xNS4xYzQxLjYsMCw0Ni4yLDMwLjIsNDYuMiw0N3Y0LjIgYy03OC42LTAuNC0xMjIuMywyNi41LTEyMi4zLDc1LjZjMCwyOS40LDIxLDU4LjQsNjIuMiw1OC40YzI5LDAsNTAuOS0xNC4zLDYyLjItMzAuMmgxLjNsMi45LDI1LjZIMTYwNC44eiBNMTU2NS43LDI1Ny43IGMwLDMuOC0wLjgsOC0yLjEsMTEuOGMtNS45LDE3LjItMjIuNywzNC00OS4yLDM0Yy0xOC45LDAtMzQuOS0xMS4zLTM0LjktMzUuM2MwLTM5LjUsNDUuOC00Ni42LDg2LjItNDUuOFYyNTcuN3ogTTE2OTguNSwzMjYuMiBsMS43LTMzLjZoMS4zYzE1LjEsMjYuOSwzOC43LDM4LjIsNjguMSwzOC4yYzQ1LjQsMCw5MS4yLTM2LjEsOTEuMi0xMDguOGMwLjQtNjEuNy0zNS4zLTEwMy43LTg1LjctMTAzLjcgYy0zMi44LDAtNTYuMywxNC43LTY5LjMsMzcuNGgtMC44VjI4aC0zNi42djI0NS43YzAsMTguMS0wLjgsMzguNi0xLjcsNTIuNUgxNjk4LjV6IE0xNzA0LjgsMjA4LjJjMC01LjksMS4zLTEwLjksMi4xLTE1LjEgYzcuNi0yOC4xLDMxLjEtNDUuNCw1Ni4zLTQ1LjRjMzkuNSwwLDYwLjUsMzQuOSw2MC41LDc1LjZjMCw0Ni42LTIzLjEsNzguMS02MS44LDc4LjFjLTI2LjksMC00OC4zLTE3LjYtNTUuNS00My4zIGMtMC44LTQuMi0xLjctOC44LTEuNy0xMy40VjIwOC4yeiIvPgogIDwvZz4KPC9zdmc+Cg==);
|
||
--jp-icon-kernel: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgZmlsbD0iIzYxNjE2MSIgZD0iTTE1IDlIOXY2aDZWOXptLTIgNGgtMnYtMmgydjJ6bTgtMlY5aC0yVjdjMC0xLjEtLjktMi0yLTJoLTJWM2gtMnYyaC0yVjNIOXYySDdjLTEuMSAwLTIgLjktMiAydjJIM3YyaDJ2MkgzdjJoMnYyYzAgMS4xLjkgMiAyIDJoMnYyaDJ2LTJoMnYyaDJ2LTJoMmMxLjEgMCAyLS45IDItMnYtMmgydi0yaC0ydi0yaDJ6bS00IDZIN1Y3aDEwdjEweiIvPgo8L3N2Zz4K);
|
||
--jp-icon-keyboard: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMjAgNUg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMTdjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY3YzAtMS4xLS45LTItMi0yem0tOSAzaDJ2MmgtMlY4em0wIDNoMnYyaC0ydi0yek04IDhoMnYySDhWOHptMCAzaDJ2Mkg4di0yem0tMSAySDV2LTJoMnYyem0wLTNINVY4aDJ2MnptOSA3SDh2LTJoOHYyem0wLTRoLTJ2LTJoMnYyem0wLTNoLTJWOGgydjJ6bTMgM2gtMnYtMmgydjJ6bTAtM2gtMlY4aDJ2MnoiLz4KPC9zdmc+Cg==);
|
||
--jp-icon-launch: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMzIgMzIiIHdpZHRoPSIzMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIj4KICAgIDxwYXRoIGQ9Ik0yNiwyOEg2YTIuMDAyNywyLjAwMjcsMCwwLDEtMi0yVjZBMi4wMDI3LDIuMDAyNywwLDAsMSw2LDRIMTZWNkg2VjI2SDI2VjE2aDJWMjZBMi4wMDI3LDIuMDAyNywwLDAsMSwyNiwyOFoiLz4KICAgIDxwb2x5Z29uIHBvaW50cz0iMjAgMiAyMCA0IDI2LjU4NiA0IDE4IDEyLjU4NiAxOS40MTQgMTQgMjggNS40MTQgMjggMTIgMzAgMTIgMzAgMiAyMCAyIi8+CiAgPC9nPgo8L3N2Zz4K);
|
||
--jp-icon-launcher: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTkgMTlINVY1aDdWM0g1YTIgMiAwIDAwLTIgMnYxNGEyIDIgMCAwMDIgMmgxNGMxLjEgMCAyLS45IDItMnYtN2gtMnY3ek0xNCAzdjJoMy41OWwtOS44MyA5LjgzIDEuNDEgMS40MUwxOSA2LjQxVjEwaDJWM2gtN3oiLz4KPC9zdmc+Cg==);
|
||
--jp-icon-line-form: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxwYXRoIGZpbGw9IndoaXRlIiBkPSJNNS44OCA0LjEyTDEzLjc2IDEybC03Ljg4IDcuODhMOCAyMmwxMC0xMEw4IDJ6Ii8+Cjwvc3ZnPgo=);
|
||
--jp-icon-link: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTMuOSAxMmMwLTEuNzEgMS4zOS0zLjEgMy4xLTMuMWg0VjdIN2MtMi43NiAwLTUgMi4yNC01IDVzMi4yNCA1IDUgNWg0di0xLjlIN2MtMS43MSAwLTMuMS0xLjM5LTMuMS0zLjF6TTggMTNoOHYtMkg4djJ6bTktNmgtNHYxLjloNGMxLjcxIDAgMy4xIDEuMzkgMy4xIDMuMXMtMS4zOSAzLjEtMy4xIDMuMWgtNFYxN2g0YzIuNzYgMCA1LTIuMjQgNS01cy0yLjI0LTUtNS01eiIvPgogIDwvZz4KPC9zdmc+Cg==);
|
||
--jp-icon-list: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiM2MTYxNjEiIGQ9Ik0xOSA1djE0SDVWNWgxNG0xLjEtMkgzLjljLS41IDAtLjkuNC0uOS45djE2LjJjMCAuNC40LjkuOS45aDE2LjJjLjQgMCAuOS0uNS45LS45VjMuOWMwLS41LS41LS45LS45LS45ek0xMSA3aDZ2MmgtNlY3em0wIDRoNnYyaC02di0yem0wIDRoNnYyaC02ek03IDdoMnYySDd6bTAgNGgydjJIN3ptMCA0aDJ2Mkg3eiIvPgo8L3N2Zz4K);
|
||
--jp-icon-markdown: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1jb250cmFzdDAganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjN0IxRkEyIiBkPSJNNSAxNC45aDEybC02LjEgNnptOS40LTYuOGMwLTEuMy0uMS0yLjktLjEtNC41LS40IDEuNC0uOSAyLjktMS4zIDQuM2wtMS4zIDQuM2gtMkw4LjUgNy45Yy0uNC0xLjMtLjctMi45LTEtNC4zLS4xIDEuNi0uMSAzLjItLjIgNC42TDcgMTIuNEg0LjhsLjctMTFoMy4zTDEwIDVjLjQgMS4yLjcgMi43IDEgMy45LjMtMS4yLjctMi42IDEtMy45bDEuMi0zLjdoMy4zbC42IDExaC0yLjRsLS4zLTQuMnoiLz4KPC9zdmc+Cg==);
|
||
--jp-icon-move-down: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTQiIGhlaWdodD0iMTQiIHZpZXdCb3g9IjAgMCAxNCAxNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggY2xhc3M9ImpwLWljb24zIiBkPSJNMTIuNDcxIDcuNTI4OTlDMTIuNzYzMiA3LjIzNjg0IDEyLjc2MzIgNi43NjMxNiAxMi40NzEgNi40NzEwMVY2LjQ3MTAxQzEyLjE3OSA2LjE3OTA1IDExLjcwNTcgNi4xNzg4NCAxMS40MTM1IDYuNDcwNTRMNy43NSAxMC4xMjc1VjEuNzVDNy43NSAxLjMzNTc5IDcuNDE0MjEgMSA3IDFWMUM2LjU4NTc5IDEgNi4yNSAxLjMzNTc5IDYuMjUgMS43NVYxMC4xMjc1TDIuNTk3MjYgNi40NjgyMkMyLjMwMzM4IDYuMTczODEgMS44MjY0MSA2LjE3MzU5IDEuNTMyMjYgNi40Njc3NFY2LjQ2Nzc0QzEuMjM4MyA2Ljc2MTcgMS4yMzgzIDcuMjM4MyAxLjUzMjI2IDcuNTMyMjZMNi4yOTI4OSAxMi4yOTI5QzYuNjgzNDIgMTIuNjgzNCA3LjMxNjU4IDEyLjY4MzQgNy43MDcxMSAxMi4yOTI5TDEyLjQ3MSA3LjUyODk5WiIgZmlsbD0iIzYxNjE2MSIvPgo8L3N2Zz4K);
|
||
--jp-icon-move-up: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTQiIGhlaWdodD0iMTQiIHZpZXdCb3g9IjAgMCAxNCAxNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggY2xhc3M9ImpwLWljb24zIiBkPSJNMS41Mjg5OSA2LjQ3MTAxQzEuMjM2ODQgNi43NjMxNiAxLjIzNjg0IDcuMjM2ODQgMS41Mjg5OSA3LjUyODk5VjcuNTI4OTlDMS44MjA5NSA3LjgyMDk1IDIuMjk0MjYgNy44MjExNiAyLjU4NjQ5IDcuNTI5NDZMNi4yNSAzLjg3MjVWMTIuMjVDNi4yNSAxMi42NjQyIDYuNTg1NzkgMTMgNyAxM1YxM0M3LjQxNDIxIDEzIDcuNzUgMTIuNjY0MiA3Ljc1IDEyLjI1VjMuODcyNUwxMS40MDI3IDcuNTMxNzhDMTEuNjk2NiA3LjgyNjE5IDEyLjE3MzYgNy44MjY0MSAxMi40Njc3IDcuNTMyMjZWNy41MzIyNkMxMi43NjE3IDcuMjM4MyAxMi43NjE3IDYuNzYxNyAxMi40Njc3IDYuNDY3NzRMNy43MDcxMSAxLjcwNzExQzcuMzE2NTggMS4zMTY1OCA2LjY4MzQyIDEuMzE2NTggNi4yOTI4OSAxLjcwNzExTDEuNTI4OTkgNi40NzEwMVoiIGZpbGw9IiM2MTYxNjEiLz4KPC9zdmc+Cg==);
|
||
--jp-icon-new-folder: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIwIDZoLThsLTItMkg0Yy0xLjExIDAtMS45OS44OS0xLjk5IDJMMiAxOGMwIDEuMTEuODkgMiAyIDJoMTZjMS4xMSAwIDItLjg5IDItMlY4YzAtMS4xMS0uODktMi0yLTJ6bS0xIDhoLTN2M2gtMnYtM2gtM3YtMmgzVjloMnYzaDN2MnoiLz4KICA8L2c+Cjwvc3ZnPgo=);
|
||
--jp-icon-not-trusted: url(data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI1IDI1Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgc3Ryb2tlPSIjMzMzMzMzIiBzdHJva2Utd2lkdGg9IjIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDMgMykiIGQ9Ik0xLjg2MDk0IDExLjQ0MDlDMC44MjY0NDggOC43NzAyNyAwLjg2Mzc3OSA2LjA1NzY0IDEuMjQ5MDcgNC4xOTkzMkMyLjQ4MjA2IDMuOTMzNDcgNC4wODA2OCAzLjQwMzQ3IDUuNjAxMDIgMi44NDQ5QzcuMjM1NDkgMi4yNDQ0IDguODU2NjYgMS41ODE1IDkuOTg3NiAxLjA5NTM5QzExLjA1OTcgMS41ODM0MSAxMi42MDk0IDIuMjQ0NCAxNC4yMTggMi44NDMzOUMxNS43NTAzIDMuNDEzOTQgMTcuMzk5NSAzLjk1MjU4IDE4Ljc1MzkgNC4yMTM4NUMxOS4xMzY0IDYuMDcxNzcgMTkuMTcwOSA4Ljc3NzIyIDE4LjEzOSAxMS40NDA5QzE3LjAzMDMgMTQuMzAzMiAxNC42NjY4IDE3LjE4NDQgOS45OTk5OSAxOC45MzU0QzUuMzMzMTkgMTcuMTg0NCAyLjk2OTY4IDE0LjMwMzIgMS44NjA5NCAxMS40NDA5WiIvPgogICAgPHBhdGggY2xhc3M9ImpwLWljb24yIiBzdHJva2U9IiMzMzMzMzMiIHN0cm9rZS13aWR0aD0iMiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOS4zMTU5MiA5LjMyMDMxKSIgZD0iTTcuMzY4NDIgMEwwIDcuMzY0NzkiLz4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgc3Ryb2tlPSIjMzMzMzMzIiBzdHJva2Utd2lkdGg9IjIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDkuMzE1OTIgMTYuNjgzNikgc2NhbGUoMSAtMSkiIGQ9Ik03LjM2ODQyIDBMMCA3LjM2NDc5Ii8+Cjwvc3ZnPgo=);
|
||
--jp-icon-notebook: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtbm90ZWJvb2staWNvbi1jb2xvciBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiNFRjZDMDAiPgogICAgPHBhdGggZD0iTTE4LjcgMy4zdjE1LjRIMy4zVjMuM2gxNS40bTEuNS0xLjVIMS44djE4LjNoMTguM2wuMS0xOC4zeiIvPgogICAgPHBhdGggZD0iTTE2LjUgMTYuNWwtNS40LTQuMy01LjYgNC4zdi0xMWgxMXoiLz4KICA8L2c+Cjwvc3ZnPgo=);
|
||
--jp-icon-numbering: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjIiIGhlaWdodD0iMjIiIHZpZXdCb3g9IjAgMCAyOCAyOCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CgkJPHBhdGggZD0iTTQgMTlINlYxOS41SDVWMjAuNUg2VjIxSDRWMjJIN1YxOEg0VjE5Wk01IDEwSDZWNkg0VjdINVYxMFpNNCAxM0g1LjhMNCAxNS4xVjE2SDdWMTVINS4yTDcgMTIuOVYxMkg0VjEzWk05IDdWOUgyM1Y3SDlaTTkgMjFIMjNWMTlIOVYyMVpNOSAxNUgyM1YxM0g5VjE1WiIvPgoJPC9nPgo8L3N2Zz4K);
|
||
--jp-icon-offline-bolt: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjE2Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyIDIuMDJjLTUuNTEgMC05Ljk4IDQuNDctOS45OCA5Ljk4czQuNDcgOS45OCA5Ljk4IDkuOTggOS45OC00LjQ3IDkuOTgtOS45OFMxNy41MSAyLjAyIDEyIDIuMDJ6TTExLjQ4IDIwdi02LjI2SDhMMTMgNHY2LjI2aDMuMzVMMTEuNDggMjB6Ii8+CiAgPC9nPgo8L3N2Zz4K);
|
||
--jp-icon-palette: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE4IDEzVjIwSDRWNkg5LjAyQzkuMDcgNS4yOSA5LjI0IDQuNjIgOS41IDRINEMyLjkgNCAyIDQuOSAyIDZWMjBDMiAyMS4xIDIuOSAyMiA0IDIySDE4QzE5LjEgMjIgMjAgMjEuMSAyMCAyMFYxNUwxOCAxM1pNMTkuMyA4Ljg5QzE5Ljc0IDguMTkgMjAgNy4zOCAyMCA2LjVDMjAgNC4wMSAxNy45OSAyIDE1LjUgMkMxMy4wMSAyIDExIDQuMDEgMTEgNi41QzExIDguOTkgMTMuMDEgMTEgMTUuNDkgMTFDMTYuMzcgMTEgMTcuMTkgMTAuNzQgMTcuODggMTAuM0wyMSAxMy40MkwyMi40MiAxMkwxOS4zIDguODlaTTE1LjUgOUMxNC4xMiA5IDEzIDcuODggMTMgNi41QzEzIDUuMTIgMTQuMTIgNCAxNS41IDRDMTYuODggNCAxOCA1LjEyIDE4IDYuNUMxOCA3Ljg4IDE2Ljg4IDkgMTUuNSA5WiIvPgogICAgPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik00IDZIOS4wMTg5NEM5LjAwNjM5IDYuMTY1MDIgOSA2LjMzMTc2IDkgNi41QzkgOC44MTU3NyAxMC4yMTEgMTAuODQ4NyAxMi4wMzQzIDEySDlWMTRIMTZWMTIuOTgxMUMxNi41NzAzIDEyLjkzNzcgMTcuMTIgMTIuODIwNyAxNy42Mzk2IDEyLjYzOTZMMTggMTNWMjBINFY2Wk04IDhINlYxMEg4VjhaTTYgMTJIOFYxNEg2VjEyWk04IDE2SDZWMThIOFYxNlpNOSAxNkgxNlYxOEg5VjE2WiIvPgogIDwvZz4KPC9zdmc+Cg==);
|
||
--jp-icon-paste: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTE5IDJoLTQuMThDMTQuNC44NCAxMy4zIDAgMTIgMGMtMS4zIDAtMi40Ljg0LTIuODIgMkg1Yy0xLjEgMC0yIC45LTIgMnYxNmMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjRjMC0xLjEtLjktMi0yLTJ6bS03IDBjLjU1IDAgMSAuNDUgMSAxcy0uNDUgMS0xIDEtMS0uNDUtMS0xIC40NS0xIDEtMXptNyAxOEg1VjRoMnYzaDEwVjRoMnYxNnoiLz4KICAgIDwvZz4KPC9zdmc+Cg==);
|
||
--jp-icon-pdf: url(data:image/svg+xml;base64,PHN2ZwogICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyMiAyMiIgd2lkdGg9IjE2Ij4KICAgIDxwYXRoIHRyYW5zZm9ybT0icm90YXRlKDQ1KSIgY2xhc3M9ImpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iI0ZGMkEyQSIKICAgICAgIGQ9Im0gMjIuMzQ0MzY5LC0zLjAxNjM2NDIgaCA1LjYzODYwNCB2IDEuNTc5MjQzMyBoIC0zLjU0OTIyNyB2IDEuNTA4NjkyOTkgaCAzLjMzNzU3NiBWIDEuNjUwODE1NCBoIC0zLjMzNzU3NiB2IDMuNDM1MjYxMyBoIC0yLjA4OTM3NyB6IG0gLTcuMTM2NDQ0LDEuNTc5MjQzMyB2IDQuOTQzOTU0MyBoIDAuNzQ4OTIgcSAxLjI4MDc2MSwwIDEuOTUzNzAzLC0wLjYzNDk1MzUgMC42NzgzNjksLTAuNjM0OTUzNSAwLjY3ODM2OSwtMS44NDUxNjQxIDAsLTEuMjA0NzgzNTUgLTAuNjcyOTQyLC0xLjgzNDMxMDExIC0wLjY3Mjk0MiwtMC42Mjk1MjY1OSAtMS45NTkxMywtMC42Mjk1MjY1OSB6IG0gLTIuMDg5Mzc3LC0xLjU3OTI0MzMgaCAyLjIwMzM0MyBxIDEuODQ1MTY0LDAgMi43NDYwMzksMC4yNjU5MjA3IDAuOTA2MzAxLDAuMjYwNDkzNyAxLjU1MjEwOCwwLjg5MDAyMDMgMC41Njk4MywwLjU0ODEyMjMgMC44NDY2MDUsMS4yNjQ0ODAwNiAwLjI3Njc3NCwwLjcxNjM1NzgxIDAuMjc2Nzc0LDEuNjIyNjU4OTQgMCwwLjkxNzE1NTEgLTAuMjc2Nzc0LDEuNjM4OTM5OSAtMC4yNzY3NzUsMC43MTYzNTc4IC0wLjg0NjYwNSwxLjI2NDQ4IC0wLjY1MTIzNCwwLjYyOTUyNjYgLTEuNTYyOTYyLDAuODk1NDQ3MyAtMC45MTE3MjgsMC4yNjA0OTM3IC0yLjczNTE4NSwwLjI2MDQ5MzcgaCAtMi4yMDMzNDMgeiBtIC04LjE0NTg1NjUsMCBoIDMuNDY3ODIzIHEgMS41NDY2ODE2LDAgMi4zNzE1Nzg1LDAuNjg5MjIzIDAuODMwMzI0LDAuNjgzNzk2MSAwLjgzMDMyNCwxLjk1MzcwMzE0IDAsMS4yNzUzMzM5NyAtMC44MzAzMjQsMS45NjQ1NTcwNiBRIDkuOTg3MTk2MSwyLjI3NDkxNSA4LjQ0MDUxNDUsMi4yNzQ5MTUgSCA3LjA2MjA2ODQgViA1LjA4NjA3NjcgSCA0Ljk3MjY5MTUgWiBtIDIuMDg5Mzc2OSwxLjUxNDExOTkgdiAyLjI2MzAzOTQzIGggMS4xNTU5NDEgcSAwLjYwNzgxODgsMCAwLjkzODg2MjksLTAuMjkzMDU1NDcgMC4zMzEwNDQxLC0wLjI5ODQ4MjQxIDAuMzMxMDQ0MSwtMC44NDExNzc3MiAwLC0wLjU0MjY5NTMxIC0wLjMzMTA0NDEsLTAuODM1NzUwNzQgLTAuMzMxMDQ0MSwtMC4yOTMwNTU1IC0wLjkzODg2MjksLTAuMjkzMDU1NSB6IgovPgo8L3N2Zz4K);
|
||
--jp-icon-python: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iLTEwIC0xMCAxMzEuMTYxMzYxNjk0MzM1OTQgMTMyLjM4ODk5OTkzODk2NDg0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjMzA2OTk4IiBkPSJNIDU0LjkxODc4NSw5LjE5Mjc0MjFlLTQgQyA1MC4zMzUxMzIsMC4wMjIyMTcyNyA0NS45NTc4NDYsMC40MTMxMzY5NyA0Mi4xMDYyODUsMS4wOTQ2NjkzIDMwLjc2MDA2OSwzLjA5OTE3MzEgMjguNzAwMDM2LDcuMjk0NzcxNCAyOC43MDAwMzUsMTUuMDMyMTY5IHYgMTAuMjE4NzUgaCAyNi44MTI1IHYgMy40MDYyNSBoIC0yNi44MTI1IC0xMC4wNjI1IGMgLTcuNzkyNDU5LDAgLTE0LjYxNTc1ODgsNC42ODM3MTcgLTE2Ljc0OTk5OTgsMTMuNTkzNzUgLTIuNDYxODE5OTgsMTAuMjEyOTY2IC0yLjU3MTAxNTA4LDE2LjU4NjAyMyAwLDI3LjI1IDEuOTA1OTI4Myw3LjkzNzg1MiA2LjQ1NzU0MzIsMTMuNTkzNzQ4IDE0LjI0OTk5OTgsMTMuNTkzNzUgaCA5LjIxODc1IHYgLTEyLjI1IGMgMCwtOC44NDk5MDIgNy42NTcxNDQsLTE2LjY1NjI0OCAxNi43NSwtMTYuNjU2MjUgaCAyNi43ODEyNSBjIDcuNDU0OTUxLDAgMTMuNDA2MjUzLC02LjEzODE2NCAxMy40MDYyNSwtMTMuNjI1IHYgLTI1LjUzMTI1IGMgMCwtNy4yNjYzMzg2IC02LjEyOTk4LC0xMi43MjQ3NzcxIC0xMy40MDYyNSwtMTMuOTM3NDk5NyBDIDY0LjI4MTU0OCwwLjMyNzk0Mzk3IDU5LjUwMjQzOCwtMC4wMjAzNzkwMyA1NC45MTg3ODUsOS4xOTI3NDIxZS00IFogbSAtMTQuNSw4LjIxODc1MDEyNTc5IGMgMi43Njk1NDcsMCA1LjAzMTI1LDIuMjk4NjQ1NiA1LjAzMTI1LDUuMTI0OTk5NiAtMmUtNiwyLjgxNjMzNiAtMi4yNjE3MDMsNS4wOTM3NSAtNS4wMzEyNSw1LjA5Mzc1IC0yLjc3OTQ3NiwtMWUtNiAtNS4wMzEyNSwtMi4yNzc0MTUgLTUuMDMxMjUsLTUuMDkzNzUgLTEwZS03LC0yLjgyNjM1MyAyLjI1MTc3NCwtNS4xMjQ5OTk2IDUuMDMxMjUsLTUuMTI0OTk5NiB6Ii8+CiAgPHBhdGggY2xhc3M9ImpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iI2ZmZDQzYiIgZD0ibSA4NS42Mzc1MzUsMjguNjU3MTY5IHYgMTEuOTA2MjUgYyAwLDkuMjMwNzU1IC03LjgyNTg5NSwxNi45OTk5OTkgLTE2Ljc1LDE3IGggLTI2Ljc4MTI1IGMgLTcuMzM1ODMzLDAgLTEzLjQwNjI0OSw2LjI3ODQ4MyAtMTMuNDA2MjUsMTMuNjI1IHYgMjUuNTMxMjQ3IGMgMCw3LjI2NjM0NCA2LjMxODU4OCwxMS41NDAzMjQgMTMuNDA2MjUsMTMuNjI1MDA0IDguNDg3MzMxLDIuNDk1NjEgMTYuNjI2MjM3LDIuOTQ2NjMgMjYuNzgxMjUsMCA2Ljc1MDE1NSwtMS45NTQzOSAxMy40MDYyNTMsLTUuODg3NjEgMTMuNDA2MjUsLTEzLjYyNTAwNCBWIDg2LjUwMDkxOSBoIC0yNi43ODEyNSB2IC0zLjQwNjI1IGggMjYuNzgxMjUgMTMuNDA2MjU0IGMgNy43OTI0NjEsMCAxMC42OTYyNTEsLTUuNDM1NDA4IDEzLjQwNjI0MSwtMTMuNTkzNzUgMi43OTkzMywtOC4zOTg4ODYgMi42ODAyMiwtMTYuNDc1Nzc2IDAsLTI3LjI1IC0xLjkyNTc4LC03Ljc1NzQ0MSAtNS42MDM4NywtMTMuNTkzNzUgLTEzLjQwNjI0MSwtMTMuNTkzNzUgeiBtIC0xNS4wNjI1LDY0LjY1NjI1IGMgMi43Nzk0NzgsM2UtNiA1LjAzMTI1LDIuMjc3NDE3IDUuMDMxMjUsNS4wOTM3NDcgLTJlLTYsMi44MjYzNTQgLTIuMjUxNzc1LDUuMTI1MDA0IC01LjAzMTI1LDUuMTI1MDA0IC0yLjc2OTU1LDAgLTUuMDMxMjUsLTIuMjk4NjUgLTUuMDMxMjUsLTUuMTI1MDA0IDJlLTYsLTIuODE2MzMgMi4yNjE2OTcsLTUuMDkzNzQ3IDUuMDMxMjUsLTUuMDkzNzQ3IHoiLz4KPC9zdmc+Cg==);
|
||
--jp-icon-r-kernel: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1jb250cmFzdDMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjMjE5NkYzIiBkPSJNNC40IDIuNWMxLjItLjEgMi45LS4zIDQuOS0uMyAyLjUgMCA0LjEuNCA1LjIgMS4zIDEgLjcgMS41IDEuOSAxLjUgMy41IDAgMi0xLjQgMy41LTIuOSA0LjEgMS4yLjQgMS43IDEuNiAyLjIgMyAuNiAxLjkgMSAzLjkgMS4zIDQuNmgtMy44Yy0uMy0uNC0uOC0xLjctMS4yLTMuN3MtMS4yLTIuNi0yLjYtMi42aC0uOXY2LjRINC40VjIuNXptMy43IDYuOWgxLjRjMS45IDAgMi45LS45IDIuOS0yLjNzLTEtMi4zLTIuOC0yLjNjLS43IDAtMS4zIDAtMS42LjJ2NC41aC4xdi0uMXoiLz4KPC9zdmc+Cg==);
|
||
--jp-icon-react: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMTUwIDE1MCA1NDEuOSAyOTUuMyI+CiAgPGcgY2xhc3M9ImpwLWljb24tYnJhbmQyIGpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iIzYxREFGQiI+CiAgICA8cGF0aCBkPSJNNjY2LjMgMjk2LjVjMC0zMi41LTQwLjctNjMuMy0xMDMuMS04Mi40IDE0LjQtNjMuNiA4LTExNC4yLTIwLjItMTMwLjQtNi41LTMuOC0xNC4xLTUuNi0yMi40LTUuNnYyMi4zYzQuNiAwIDguMy45IDExLjQgMi42IDEzLjYgNy44IDE5LjUgMzcuNSAxNC45IDc1LjctMS4xIDkuNC0yLjkgMTkuMy01LjEgMjkuNC0xOS42LTQuOC00MS04LjUtNjMuNS0xMC45LTEzLjUtMTguNS0yNy41LTM1LjMtNDEuNi01MCAzMi42LTMwLjMgNjMuMi00Ni45IDg0LTQ2LjlWNzhjLTI3LjUgMC02My41IDE5LjYtOTkuOSA1My42LTM2LjQtMzMuOC03Mi40LTUzLjItOTkuOS01My4ydjIyLjNjMjAuNyAwIDUxLjQgMTYuNSA4NCA0Ni42LTE0IDE0LjctMjggMzEuNC00MS4zIDQ5LjktMjIuNiAyLjQtNDQgNi4xLTYzLjYgMTEtMi4zLTEwLTQtMTkuNy01LjItMjktNC43LTM4LjIgMS4xLTY3LjkgMTQuNi03NS44IDMtMS44IDYuOS0yLjYgMTEuNS0yLjZWNzguNWMtOC40IDAtMTYgMS44LTIyLjYgNS42LTI4LjEgMTYuMi0zNC40IDY2LjctMTkuOSAxMzAuMS02Mi4yIDE5LjItMTAyLjcgNDkuOS0xMDIuNyA4Mi4zIDAgMzIuNSA0MC43IDYzLjMgMTAzLjEgODIuNC0xNC40IDYzLjYtOCAxMTQuMiAyMC4yIDEzMC40IDYuNSAzLjggMTQuMSA1LjYgMjIuNSA1LjYgMjcuNSAwIDYzLjUtMTkuNiA5OS45LTUzLjYgMzYuNCAzMy44IDcyLjQgNTMuMiA5OS45IDUzLjIgOC40IDAgMTYtMS44IDIyLjYtNS42IDI4LjEtMTYuMiAzNC40LTY2LjcgMTkuOS0xMzAuMSA2Mi0xOS4xIDEwMi41LTQ5LjkgMTAyLjUtODIuM3ptLTEzMC4yLTY2LjdjLTMuNyAxMi45LTguMyAyNi4yLTEzLjUgMzkuNS00LjEtOC04LjQtMTYtMTMuMS0yNC00LjYtOC05LjUtMTUuOC0xNC40LTIzLjQgMTQuMiAyLjEgMjcuOSA0LjcgNDEgNy45em0tNDUuOCAxMDYuNWMtNy44IDEzLjUtMTUuOCAyNi4zLTI0LjEgMzguMi0xNC45IDEuMy0zMCAyLTQ1LjIgMi0xNS4xIDAtMzAuMi0uNy00NS0xLjktOC4zLTExLjktMTYuNC0yNC42LTI0LjItMzgtNy42LTEzLjEtMTQuNS0yNi40LTIwLjgtMzkuOCA2LjItMTMuNCAxMy4yLTI2LjggMjAuNy0zOS45IDcuOC0xMy41IDE1LjgtMjYuMyAyNC4xLTM4LjIgMTQuOS0xLjMgMzAtMiA0NS4yLTIgMTUuMSAwIDMwLjIuNyA0NSAxLjkgOC4zIDExLjkgMTYuNCAyNC42IDI0LjIgMzggNy42IDEzLjEgMTQuNSAyNi40IDIwLjggMzkuOC02LjMgMTMuNC0xMy4yIDI2LjgtMjAuNyAzOS45em0zMi4zLTEzYzUuNCAxMy40IDEwIDI2LjggMTMuOCAzOS44LTEzLjEgMy4yLTI2LjkgNS45LTQxLjIgOCA0LjktNy43IDkuOC0xNS42IDE0LjQtMjMuNyA0LjYtOCA4LjktMTYuMSAxMy0yNC4xek00MjEuMiA0MzBjLTkuMy05LjYtMTguNi0yMC4zLTI3LjgtMzIgOSAuNCAxOC4yLjcgMjcuNS43IDkuNCAwIDE4LjctLjIgMjcuOC0uNy05IDExLjctMTguMyAyMi40LTI3LjUgMzJ6bS03NC40LTU4LjljLTE0LjItMi4xLTI3LjktNC43LTQxLTcuOSAzLjctMTIuOSA4LjMtMjYuMiAxMy41LTM5LjUgNC4xIDggOC40IDE2IDEzLjEgMjQgNC43IDggOS41IDE1LjggMTQuNCAyMy40ek00MjAuNyAxNjNjOS4zIDkuNiAxOC42IDIwLjMgMjcuOCAzMi05LS40LTE4LjItLjctMjcuNS0uNy05LjQgMC0xOC43LjItMjcuOC43IDktMTEuNyAxOC4zLTIyLjQgMjcuNS0zMnptLTc0IDU4LjljLTQuOSA3LjctOS44IDE1LjYtMTQuNCAyMy43LTQuNiA4LTguOSAxNi0xMyAyNC01LjQtMTMuNC0xMC0yNi44LTEzLjgtMzkuOCAxMy4xLTMuMSAyNi45LTUuOCA0MS4yLTcuOXptLTkwLjUgMTI1LjJjLTM1LjQtMTUuMS01OC4zLTM0LjktNTguMy01MC42IDAtMTUuNyAyMi45LTM1LjYgNTguMy01MC42IDguNi0zLjcgMTgtNyAyNy43LTEwLjEgNS43IDE5LjYgMTMuMiA0MCAyMi41IDYwLjktOS4yIDIwLjgtMTYuNiA0MS4xLTIyLjIgNjAuNi05LjktMy4xLTE5LjMtNi41LTI4LTEwLjJ6TTMxMCA0OTBjLTEzLjYtNy44LTE5LjUtMzcuNS0xNC45LTc1LjcgMS4xLTkuNCAyLjktMTkuMyA1LjEtMjkuNCAxOS42IDQuOCA0MSA4LjUgNjMuNSAxMC45IDEzLjUgMTguNSAyNy41IDM1LjMgNDEuNiA1MC0zMi42IDMwLjMtNjMuMiA0Ni45LTg0IDQ2LjktNC41LS4xLTguMy0xLTExLjMtMi43em0yMzcuMi03Ni4yYzQuNyAzOC4yLTEuMSA2Ny45LTE0LjYgNzUuOC0zIDEuOC02LjkgMi42LTExLjUgMi42LTIwLjcgMC01MS40LTE2LjUtODQtNDYuNiAxNC0xNC43IDI4LTMxLjQgNDEuMy00OS45IDIyLjYtMi40IDQ0LTYuMSA2My42LTExIDIuMyAxMC4xIDQuMSAxOS44IDUuMiAyOS4xem0zOC41LTY2LjdjLTguNiAzLjctMTggNy0yNy43IDEwLjEtNS43LTE5LjYtMTMuMi00MC0yMi41LTYwLjkgOS4yLTIwLjggMTYuNi00MS4xIDIyLjItNjAuNiA5LjkgMy4xIDE5LjMgNi41IDI4LjEgMTAuMiAzNS40IDE1LjEgNTguMyAzNC45IDU4LjMgNTAuNi0uMSAxNS43LTIzIDM1LjYtNTguNCA1MC42ek0zMjAuOCA3OC40eiIvPgogICAgPGNpcmNsZSBjeD0iNDIwLjkiIGN5PSIyOTYuNSIgcj0iNDUuNyIvPgogIDwvZz4KPC9zdmc+Cg==);
|
||
--jp-icon-redo: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjE2Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgICA8cGF0aCBkPSJNMCAwaDI0djI0SDB6IiBmaWxsPSJub25lIi8+PHBhdGggZD0iTTE4LjQgMTAuNkMxNi41NSA4Ljk5IDE0LjE1IDggMTEuNSA4Yy00LjY1IDAtOC41OCAzLjAzLTkuOTYgNy4yMkwzLjkgMTZjMS4wNS0zLjE5IDQuMDUtNS41IDcuNi01LjUgMS45NSAwIDMuNzMuNzIgNS4xMiAxLjg4TDEzIDE2aDlWN2wtMy42IDMuNnoiLz4KICA8L2c+Cjwvc3ZnPgo=);
|
||
--jp-icon-refresh: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDE4IDE4Ij4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTkgMTMuNWMtMi40OSAwLTQuNS0yLjAxLTQuNS00LjVTNi41MSA0LjUgOSA0LjVjMS4yNCAwIDIuMzYuNTIgMy4xNyAxLjMzTDEwIDhoNVYzbC0xLjc2IDEuNzZDMTIuMTUgMy42OCAxMC42NiAzIDkgMyA1LjY5IDMgMy4wMSA1LjY5IDMuMDEgOVM1LjY5IDE1IDkgMTVjMi45NyAwIDUuNDMtMi4xNiA1LjktNWgtMS41MmMtLjQ2IDItMi4yNCAzLjUtNC4zOCAzLjV6Ii8+CiAgICA8L2c+Cjwvc3ZnPgo=);
|
||
--jp-icon-regex: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KICA8ZyBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiM0MTQxNDEiPgogICAgPHJlY3QgeD0iMiIgeT0iMiIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2Ii8+CiAgPC9nPgoKICA8ZyBjbGFzcz0ianAtaWNvbi1hY2NlbnQyIiBmaWxsPSIjRkZGIj4KICAgIDxjaXJjbGUgY2xhc3M9InN0MiIgY3g9IjUuNSIgY3k9IjE0LjUiIHI9IjEuNSIvPgogICAgPHJlY3QgeD0iMTIiIHk9IjQiIGNsYXNzPSJzdDIiIHdpZHRoPSIxIiBoZWlnaHQ9IjgiLz4KICAgIDxyZWN0IHg9IjguNSIgeT0iNy41IiB0cmFuc2Zvcm09Im1hdHJpeCgwLjg2NiAtMC41IDAuNSAwLjg2NiAtMi4zMjU1IDcuMzIxOSkiIGNsYXNzPSJzdDIiIHdpZHRoPSI4IiBoZWlnaHQ9IjEiLz4KICAgIDxyZWN0IHg9IjEyIiB5PSI0IiB0cmFuc2Zvcm09Im1hdHJpeCgwLjUgLTAuODY2IDAuODY2IDAuNSAtMC42Nzc5IDE0LjgyNTIpIiBjbGFzcz0ic3QyIiB3aWR0aD0iMSIgaGVpZ2h0PSI4Ii8+CiAgPC9nPgo8L3N2Zz4K);
|
||
--jp-icon-run: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTggNXYxNGwxMS03eiIvPgogICAgPC9nPgo8L3N2Zz4K);
|
||
--jp-icon-running: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDUxMiA1MTIiPgogIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICA8cGF0aCBkPSJNMjU2IDhDMTE5IDggOCAxMTkgOCAyNTZzMTExIDI0OCAyNDggMjQ4IDI0OC0xMTEgMjQ4LTI0OFMzOTMgOCAyNTYgOHptOTYgMzI4YzAgOC44LTcuMiAxNi0xNiAxNkgxNzZjLTguOCAwLTE2LTcuMi0xNi0xNlYxNzZjMC04LjggNy4yLTE2IDE2LTE2aDE2MGM4LjggMCAxNiA3LjIgMTYgMTZ2MTYweiIvPgogIDwvZz4KPC9zdmc+Cg==);
|
||
--jp-icon-save: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTE3IDNINWMtMS4xMSAwLTIgLjktMiAydjE0YzAgMS4xLjg5IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjdsLTQtNHptLTUgMTZjLTEuNjYgMC0zLTEuMzQtMy0zczEuMzQtMyAzLTMgMyAxLjM0IDMgMy0xLjM0IDMtMyAzem0zLTEwSDVWNWgxMHY0eiIvPgogICAgPC9nPgo8L3N2Zz4K);
|
||
--jp-icon-search: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTggMTgiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyLjEsMTAuOWgtMC43bC0wLjItMC4yYzAuOC0wLjksMS4zLTIuMiwxLjMtMy41YzAtMy0yLjQtNS40LTUuNC01LjRTMS44LDQuMiwxLjgsNy4xczIuNCw1LjQsNS40LDUuNCBjMS4zLDAsMi41LTAuNSwzLjUtMS4zbDAuMiwwLjJ2MC43bDQuMSw0LjFsMS4yLTEuMkwxMi4xLDEwLjl6IE03LjEsMTAuOWMtMi4xLDAtMy43LTEuNy0zLjctMy43czEuNy0zLjcsMy43LTMuN3MzLjcsMS43LDMuNywzLjcgUzkuMiwxMC45LDcuMSwxMC45eiIvPgogIDwvZz4KPC9zdmc+Cg==);
|
||
--jp-icon-settings: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTkuNDMgMTIuOThjLjA0LS4zMi4wNy0uNjQuMDctLjk4cy0uMDMtLjY2LS4wNy0uOThsMi4xMS0xLjY1Yy4xOS0uMTUuMjQtLjQyLjEyLS42NGwtMi0zLjQ2Yy0uMTItLjIyLS4zOS0uMy0uNjEtLjIybC0yLjQ5IDFjLS41Mi0uNC0xLjA4LS43My0xLjY5LS45OGwtLjM4LTIuNjVBLjQ4OC40ODggMCAwMDE0IDJoLTRjLS4yNSAwLS40Ni4xOC0uNDkuNDJsLS4zOCAyLjY1Yy0uNjEuMjUtMS4xNy41OS0xLjY5Ljk4bC0yLjQ5LTFjLS4yMy0uMDktLjQ5IDAtLjYxLjIybC0yIDMuNDZjLS4xMy4yMi0uMDcuNDkuMTIuNjRsMi4xMSAxLjY1Yy0uMDQuMzItLjA3LjY1LS4wNy45OHMuMDMuNjYuMDcuOThsLTIuMTEgMS42NWMtLjE5LjE1LS4yNC40Mi0uMTIuNjRsMiAzLjQ2Yy4xMi4yMi4zOS4zLjYxLjIybDIuNDktMWMuNTIuNCAxLjA4LjczIDEuNjkuOThsLjM4IDIuNjVjLjAzLjI0LjI0LjQyLjQ5LjQyaDRjLjI1IDAgLjQ2LS4xOC40OS0uNDJsLjM4LTIuNjVjLjYxLS4yNSAxLjE3LS41OSAxLjY5LS45OGwyLjQ5IDFjLjIzLjA5LjQ5IDAgLjYxLS4yMmwyLTMuNDZjLjEyLS4yMi4wNy0uNDktLjEyLS42NGwtMi4xMS0xLjY1ek0xMiAxNS41Yy0xLjkzIDAtMy41LTEuNTctMy41LTMuNXMxLjU3LTMuNSAzLjUtMy41IDMuNSAxLjU3IDMuNSAzLjUtMS41NyAzLjUtMy41IDMuNXoiLz4KPC9zdmc+Cg==);
|
||
--jp-icon-share: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIHZpZXdCb3g9IjAgMCAyNCAyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTSAxOCAyIEMgMTYuMzU0OTkgMiAxNSAzLjM1NDk5MDQgMTUgNSBDIDE1IDUuMTkwOTUyOSAxNS4wMjE3OTEgNS4zNzcxMjI0IDE1LjA1NjY0MSA1LjU1ODU5MzggTCA3LjkyMTg3NSA5LjcyMDcwMzEgQyA3LjM5ODUzOTkgOS4yNzc4NTM5IDYuNzMyMDc3MSA5IDYgOSBDIDQuMzU0OTkwNCA5IDMgMTAuMzU0OTkgMyAxMiBDIDMgMTMuNjQ1MDEgNC4zNTQ5OTA0IDE1IDYgMTUgQyA2LjczMjA3NzEgMTUgNy4zOTg1Mzk5IDE0LjcyMjE0NiA3LjkyMTg3NSAxNC4yNzkyOTcgTCAxNS4wNTY2NDEgMTguNDM5NDUzIEMgMTUuMDIxNTU1IDE4LjYyMTUxNCAxNSAxOC44MDgzODYgMTUgMTkgQyAxNSAyMC42NDUwMSAxNi4zNTQ5OSAyMiAxOCAyMiBDIDE5LjY0NTAxIDIyIDIxIDIwLjY0NTAxIDIxIDE5IEMgMjEgMTcuMzU0OTkgMTkuNjQ1MDEgMTYgMTggMTYgQyAxNy4yNjc0OCAxNiAxNi42MDE1OTMgMTYuMjc5MzI4IDE2LjA3ODEyNSAxNi43MjI2NTYgTCA4Ljk0MzM1OTQgMTIuNTU4NTk0IEMgOC45NzgyMDk1IDEyLjM3NzEyMiA5IDEyLjE5MDk1MyA5IDEyIEMgOSAxMS44MDkwNDcgOC45NzgyMDk1IDExLjYyMjg3OCA4Ljk0MzM1OTQgMTEuNDQxNDA2IEwgMTYuMDc4MTI1IDcuMjc5Mjk2OSBDIDE2LjYwMTQ2IDcuNzIyMTQ2MSAxNy4yNjc5MjMgOCAxOCA4IEMgMTkuNjQ1MDEgOCAyMSA2LjY0NTAwOTYgMjEgNSBDIDIxIDMuMzU0OTkwNCAxOS42NDUwMSAyIDE4IDIgeiBNIDE4IDQgQyAxOC41NjQxMjkgNCAxOSA0LjQzNTg3MDYgMTkgNSBDIDE5IDUuNTY0MTI5NCAxOC41NjQxMjkgNiAxOCA2IEMgMTcuNDM1ODcxIDYgMTcgNS41NjQxMjk0IDE3IDUgQyAxNyA0LjQzNTg3MDYgMTcuNDM1ODcxIDQgMTggNCB6IE0gNiAxMSBDIDYuNTY0MTI5NCAxMSA3IDExLjQzNTg3MSA3IDEyIEMgNyAxMi41NjQxMjkgNi41NjQxMjk0IDEzIDYgMTMgQyA1LjQzNTg3MDYgMTMgNSAxMi41NjQxMjkgNSAxMiBDIDUgMTEuNDM1ODcxIDUuNDM1ODcwNiAxMSA2IDExIHogTSAxOCAxOCBDIDE4LjU2NDEyOSAxOCAxOSAxOC40MzU4NzEgMTkgMTkgQyAxOSAxOS41NjQxMjkgMTguNTY0MTI5IDIwIDE4IDIwIEMgMTcuNDM1ODcxIDIwIDE3IDE5LjU2NDEyOSAxNyAxOSBDIDE3IDE4LjQzNTg3MSAxNy40MzU4NzEgMTggMTggMTggeiIvPgogIDwvZz4KPC9zdmc+Cg==);
|
||
--jp-icon-spreadsheet: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1jb250cmFzdDEganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNENBRjUwIiBkPSJNMi4yIDIuMnYxNy42aDE3LjZWMi4ySDIuMnptMTUuNCA3LjdoLTUuNVY0LjRoNS41djUuNXpNOS45IDQuNHY1LjVINC40VjQuNGg1LjV6bS01LjUgNy43aDUuNXY1LjVINC40di01LjV6bTcuNyA1LjV2LTUuNWg1LjV2NS41aC01LjV6Ii8+Cjwvc3ZnPgo=);
|
||
--jp-icon-stop: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPgogICAgICAgIDxwYXRoIGQ9Ik02IDZoMTJ2MTJINnoiLz4KICAgIDwvZz4KPC9zdmc+Cg==);
|
||
--jp-icon-tab: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTIxIDNIM2MtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxOGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0wIDE2SDNWNWgxMHY0aDh2MTB6Ii8+CiAgPC9nPgo8L3N2Zz4K);
|
||
--jp-icon-table-rows: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPgogICAgICAgIDxwYXRoIGQ9Ik0yMSw4SDNWNGgxOFY4eiBNMjEsMTBIM3Y0aDE4VjEweiBNMjEsMTZIM3Y0aDE4VjE2eiIvPgogICAgPC9nPgo8L3N2Zz4K);
|
||
--jp-icon-tag: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjgiIGhlaWdodD0iMjgiIHZpZXdCb3g9IjAgMCA0MyAyOCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CgkJPHBhdGggZD0iTTI4LjgzMzIgMTIuMzM0TDMyLjk5OTggMTYuNTAwN0wzNy4xNjY1IDEyLjMzNEgyOC44MzMyWiIvPgoJCTxwYXRoIGQ9Ik0xNi4yMDk1IDIxLjYxMDRDMTUuNjg3MyAyMi4xMjk5IDE0Ljg0NDMgMjIuMTI5OSAxNC4zMjQ4IDIxLjYxMDRMNi45ODI5IDE0LjcyNDVDNi41NzI0IDE0LjMzOTQgNi4wODMxMyAxMy42MDk4IDYuMDQ3ODYgMTMuMDQ4MkM1Ljk1MzQ3IDExLjUyODggNi4wMjAwMiA4LjYxOTQ0IDYuMDY2MjEgNy4wNzY5NUM2LjA4MjgxIDYuNTE0NzcgNi41NTU0OCA2LjA0MzQ3IDcuMTE4MDQgNi4wMzA1NUM5LjA4ODYzIDUuOTg0NzMgMTMuMjYzOCA1LjkzNTc5IDEzLjY1MTggNi4zMjQyNUwyMS43MzY5IDEzLjYzOUMyMi4yNTYgMTQuMTU4NSAyMS43ODUxIDE1LjQ3MjQgMjEuMjYyIDE1Ljk5NDZMMTYuMjA5NSAyMS42MTA0Wk05Ljc3NTg1IDguMjY1QzkuMzM1NTEgNy44MjU2NiA4LjYyMzUxIDcuODI1NjYgOC4xODI4IDguMjY1QzcuNzQzNDYgOC43MDU3MSA3Ljc0MzQ2IDkuNDE3MzMgOC4xODI4IDkuODU2NjdDOC42MjM4MiAxMC4yOTY0IDkuMzM1ODIgMTAuMjk2NCA5Ljc3NTg1IDkuODU2NjdDMTAuMjE1NiA5LjQxNzMzIDEwLjIxNTYgOC43MDUzMyA5Ljc3NTg1IDguMjY1WiIvPgoJPC9nPgo8L3N2Zz4K);
|
||
--jp-icon-terminal: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0IiA+CiAgICA8cmVjdCBjbGFzcz0ianAtdGVybWluYWwtaWNvbi1iYWNrZ3JvdW5kLWNvbG9yIGpwLWljb24tc2VsZWN0YWJsZSIgd2lkdGg9IjIwIiBoZWlnaHQ9IjIwIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyIDIpIiBmaWxsPSIjMzMzMzMzIi8+CiAgICA8cGF0aCBjbGFzcz0ianAtdGVybWluYWwtaWNvbi1jb2xvciBqcC1pY29uLXNlbGVjdGFibGUtaW52ZXJzZSIgZD0iTTUuMDU2NjQgOC43NjE3MkM1LjA1NjY0IDguNTk3NjYgNS4wMzEyNSA4LjQ1MzEyIDQuOTgwNDcgOC4zMjgxMkM0LjkzMzU5IDguMTk5MjIgNC44NTU0NyA4LjA4MjAzIDQuNzQ2MDkgNy45NzY1NkM0LjY0MDYyIDcuODcxMDkgNC41IDcuNzc1MzkgNC4zMjQyMiA3LjY4OTQ1QzQuMTUyMzQgNy41OTk2MSAzLjk0MzM2IDcuNTExNzIgMy42OTcyNyA3LjQyNTc4QzMuMzAyNzMgNy4yODUxNiAyLjk0MzM2IDcuMTM2NzIgMi42MTkxNCA2Ljk4MDQ3QzIuMjk0OTIgNi44MjQyMiAyLjAxNzU4IDYuNjQyNTggMS43ODcxMSA2LjQzNTU1QzEuNTYwNTUgNi4yMjg1MiAxLjM4NDc3IDUuOTg4MjggMS4yNTk3NyA1LjcxNDg0QzEuMTM0NzcgNS40Mzc1IDEuMDcyMjcgNS4xMDkzOCAxLjA3MjI3IDQuNzMwNDdDMS4wNzIyNyA0LjM5ODQ0IDEuMTI4OTEgNC4wOTU3IDEuMjQyMTkgMy44MjIyN0MxLjM1NTQ3IDMuNTQ0OTIgMS41MTU2MiAzLjMwNDY5IDEuNzIyNjYgMy4xMDE1NkMxLjkyOTY5IDIuODk4NDQgMi4xNzk2OSAyLjczNDM3IDIuNDcyNjYgMi42MDkzOEMyLjc2NTYyIDIuNDg0MzggMy4wOTE4IDIuNDA0MyAzLjQ1MTE3IDIuMzY5MTRWMS4xMDkzOEg0LjM4ODY3VjIuMzgwODZDNC43NDAyMyAyLjQyNzczIDUuMDU2NjQgMi41MjM0NCA1LjMzNzg5IDIuNjY3OTdDNS42MTkxNCAyLjgxMjUgNS44NTc0MiAzLjAwMTk1IDYuMDUyNzMgMy4yMzYzM0M2LjI1MTk1IDMuNDY2OCA2LjQwNDMgMy43NDAyMyA2LjUwOTc3IDQuMDU2NjRDNi42MTkxNCA0LjM2OTE0IDYuNjczODMgNC43MjA3IDYuNjczODMgNS4xMTEzM0g1LjA0NDkyQzUuMDQ0OTIgNC42Mzg2NyA0LjkzNzUgNC4yODEyNSA0LjcyMjY2IDQuMDM5MDZDNC41MDc4MSAzLjc5Mjk3IDQuMjE2OCAzLjY2OTkyIDMuODQ5NjEgMy42Njk5MkMzLjY1MDM5IDMuNjY5OTIgMy40NzY1NiAzLjY5NzI3IDMuMzI4MTIgMy43NTE5NUMzLjE4MzU5IDMuODAyNzMgMy4wNjQ0NSAzLjg3Njk1IDIuOTcwNyAzLjk3NDYxQzIuODc2OTUgNC4wNjgzNiAyLjgwNjY0IDQuMTc5NjkgMi43NTk3NyA0LjMwODU5QzIuNzE2OCA0LjQzNzUgMi42OTUzMSA0LjU3ODEyIDIuNjk1MzEgNC43MzA0N0MyLjY5NTMxIDQuODgyODEgMi43MTY4IDUuMDE5NTMgMi43NTk3NyA1LjE0MDYyQzIuODA2NjQgNS4yNTc4MSAyLjg4MjgxIDUuMzY3MTkgMi45ODgyOCA1LjQ2ODc1QzMuMDk3NjYgNS41NzAzMSAzLjI0MDIzIDUuNjY3OTcgMy40MTYwMiA1Ljc2MTcyQzMuNTkxOCA1Ljg1MTU2IDMuODEwNTUgNS45NDMzNiA0LjA3MjI3IDYuMDM3MTFDNC40NjY4IDYuMTg1NTUgNC44MjQyMiA2LjMzOTg0IDUuMTQ0NTMgNi41QzUuNDY0ODQgNi42NTYyNSA1LjczODI4IDYuODM5ODQgNS45NjQ4NCA3LjA1MDc4QzYuMTk1MzEgNy4yNTc4MSA2LjM3MTA5IDcuNSA2LjQ5MjE5IDcuNzc3MzRDNi42MTcxOSA4LjA1MDc4IDYuNjc5NjkgOC4zNzUgNi42Nzk2OSA4Ljc1QzYuNjc5NjkgOS4wOTM3NSA2LjYyMzA1IDkuNDA0MyA2LjUwOTc3IDkuNjgxNjRDNi4zOTY0OCA5Ljk1NTA4IDYuMjM0MzggMTAuMTkxNCA2LjAyMzQ0IDEwLjM5MDZDNS44MTI1IDEwLjU4OTggNS41NTg1OSAxMC43NSA1LjI2MTcyIDEwLjg3MTFDNC45NjQ4NCAxMC45ODgzIDQuNjMyODEgMTEuMDY0NSA0LjI2NTYyIDExLjA5OTZWMTIuMjQ4SDMuMzMzOThWMTEuMDk5NkMzLjAwMTk1IDExLjA2ODQgMi42Nzk2OSAxMC45OTYxIDIuMzY3MTkgMTAuODgyOEMyLjA1NDY5IDEwLjc2NTYgMS43NzczNCAxMC41OTc3IDEuNTM1MTYgMTAuMzc4OUMxLjI5Njg4IDEwLjE2MDIgMS4xMDU0NyA5Ljg4NDc3IDAuOTYwOTM4IDkuNTUyNzNDMC44MTY0MDYgOS4yMTY4IDAuNzQ0MTQxIDguODE0NDUgMC43NDQxNDEgOC4zNDU3SDIuMzc4OTFDMi4zNzg5MSA4LjYyNjk1IDIuNDE5OTIgOC44NjMyOCAyLjUwMTk1IDkuMDU0NjlDMi41ODM5OCA5LjI0MjE5IDIuNjg5NDUgOS4zOTI1OCAyLjgxODM2IDkuNTA1ODZDMi45NTExNyA5LjYxNTIzIDMuMTAxNTYgOS42OTMzNiAzLjI2OTUzIDkuNzQwMjNDMy40Mzc1IDkuNzg3MTEgMy42MDkzOCA5LjgxMDU1IDMuNzg1MTYgOS44MTA1NUM0LjIwMzEyIDkuODEwNTUgNC41MTk1MyA5LjcxMjg5IDQuNzM0MzggOS41MTc1OEM0Ljk0OTIyIDkuMzIyMjcgNS4wNTY2NCA5LjA3MDMxIDUuMDU2NjQgOC43NjE3MlpNMTMuNDE4IDEyLjI3MTVIOC4wNzQyMlYxMUgxMy40MThWMTIuMjcxNVoiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDMuOTUyNjQgNikiIGZpbGw9IndoaXRlIi8+Cjwvc3ZnPgo=);
|
||
--jp-icon-text-editor: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtdGV4dC1lZGl0b3ItaWNvbi1jb2xvciBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiM2MTYxNjEiIGQ9Ik0xNSAxNUgzdjJoMTJ2LTJ6bTAtOEgzdjJoMTJWN3pNMyAxM2gxOHYtMkgzdjJ6bTAgOGgxOHYtMkgzdjJ6TTMgM3YyaDE4VjNIM3oiLz4KPC9zdmc+Cg==);
|
||
--jp-icon-toc: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIj4KICAgIDxwYXRoIGQ9Ik03LDVIMjFWN0g3VjVNNywxM1YxMUgyMVYxM0g3TTQsNC41QTEuNSwxLjUgMCAwLDEgNS41LDZBMS41LDEuNSAwIDAsMSA0LDcuNUExLjUsMS41IDAgMCwxIDIuNSw2QTEuNSwxLjUgMCAwLDEgNCw0LjVNNCwxMC41QTEuNSwxLjUgMCAwLDEgNS41LDEyQTEuNSwxLjUgMCAwLDEgNCwxMy41QTEuNSwxLjUgMCAwLDEgMi41LDEyQTEuNSwxLjUgMCAwLDEgNCwxMC41TTcsMTlWMTdIMjFWMTlIN000LDE2LjVBMS41LDEuNSAwIDAsMSA1LjUsMThBMS41LDEuNSAwIDAsMSA0LDE5LjVBMS41LDEuNSAwIDAsMSAyLjUsMThBMS41LDEuNSAwIDAsMSA0LDE2LjVaIiAvPgogIDwvZz4KPC9zdmc+Cg==);
|
||
--jp-icon-tree-view: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPgogICAgICAgIDxwYXRoIGQ9Ik0yMiAxMVYzaC03djNIOVYzSDJ2OGg3VjhoMnYxMGg0djNoN3YtOGgtN3YzaC0yVjhoMnYzeiIvPgogICAgPC9nPgo8L3N2Zz4K);
|
||
--jp-icon-trusted: url(data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI1Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgc3Ryb2tlPSIjMzMzMzMzIiBzdHJva2Utd2lkdGg9IjIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIgMykiIGQ9Ik0xLjg2MDk0IDExLjQ0MDlDMC44MjY0NDggOC43NzAyNyAwLjg2Mzc3OSA2LjA1NzY0IDEuMjQ5MDcgNC4xOTkzMkMyLjQ4MjA2IDMuOTMzNDcgNC4wODA2OCAzLjQwMzQ3IDUuNjAxMDIgMi44NDQ5QzcuMjM1NDkgMi4yNDQ0IDguODU2NjYgMS41ODE1IDkuOTg3NiAxLjA5NTM5QzExLjA1OTcgMS41ODM0MSAxMi42MDk0IDIuMjQ0NCAxNC4yMTggMi44NDMzOUMxNS43NTAzIDMuNDEzOTQgMTcuMzk5NSAzLjk1MjU4IDE4Ljc1MzkgNC4yMTM4NUMxOS4xMzY0IDYuMDcxNzcgMTkuMTcwOSA4Ljc3NzIyIDE4LjEzOSAxMS40NDA5QzE3LjAzMDMgMTQuMzAzMiAxNC42NjY4IDE3LjE4NDQgOS45OTk5OSAxOC45MzU0QzUuMzMzMiAxNy4xODQ0IDIuOTY5NjggMTQuMzAzMiAxLjg2MDk0IDExLjQ0MDlaIi8+CiAgICA8cGF0aCBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiMzMzMzMzMiIHN0cm9rZT0iIzMzMzMzMyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOCA5Ljg2NzE5KSIgZD0iTTIuODYwMTUgNC44NjUzNUwwLjcyNjU0OSAyLjk5OTU5TDAgMy42MzA0NUwyLjg2MDE1IDYuMTMxNTdMOCAwLjYzMDg3Mkw3LjI3ODU3IDBMMi44NjAxNSA0Ljg2NTM1WiIvPgo8L3N2Zz4K);
|
||
--jp-icon-undo: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyLjUgOGMtMi42NSAwLTUuMDUuOTktNi45IDIuNkwyIDd2OWg5bC0zLjYyLTMuNjJjMS4zOS0xLjE2IDMuMTYtMS44OCA1LjEyLTEuODggMy41NCAwIDYuNTUgMi4zMSA3LjYgNS41bDIuMzctLjc4QzIxLjA4IDExLjAzIDE3LjE1IDggMTIuNSA4eiIvPgogIDwvZz4KPC9zdmc+Cg==);
|
||
--jp-icon-user: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIHZpZXdCb3g9IjAgMCAyNCAyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE2IDdhNCA0IDAgMTEtOCAwIDQgNCAwIDAxOCAwek0xMiAxNGE3IDcgMCAwMC03IDdoMTRhNyA3IDAgMDAtNy03eiIvPgogIDwvZz4KPC9zdmc+Cg==);
|
||
--jp-icon-users: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZlcnNpb249IjEuMSIgdmlld0JveD0iMCAwIDM2IDI0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgogPGcgY2xhc3M9ImpwLWljb24zIiB0cmFuc2Zvcm09Im1hdHJpeCgxLjczMjcgMCAwIDEuNzMyNyAtMy42MjgyIC4wOTk1NzcpIiBmaWxsPSIjNjE2MTYxIj4KICA8cGF0aCB0cmFuc2Zvcm09Im1hdHJpeCgxLjUsMCwwLDEuNSwwLC02KSIgZD0ibTEyLjE4NiA3LjUwOThjLTEuMDUzNSAwLTEuOTc1NyAwLjU2NjUtMi40Nzg1IDEuNDEwMiAwLjc1MDYxIDAuMzEyNzcgMS4zOTc0IDAuODI2NDggMS44NzMgMS40NzI3aDMuNDg2M2MwLTEuNTkyLTEuMjg4OS0yLjg4MjgtMi44ODA5LTIuODgyOHoiLz4KICA8cGF0aCBkPSJtMjAuNDY1IDIuMzg5NWEyLjE4ODUgMi4xODg1IDAgMCAxLTIuMTg4NCAyLjE4ODUgMi4xODg1IDIuMTg4NSAwIDAgMS0yLjE4ODUtMi4xODg1IDIuMTg4NSAyLjE4ODUgMCAwIDEgMi4xODg1LTIuMTg4NSAyLjE4ODUgMi4xODg1IDAgMCAxIDIuMTg4NCAyLjE4ODV6Ii8+CiAgPHBhdGggdHJhbnNmb3JtPSJtYXRyaXgoMS41LDAsMCwxLjUsMCwtNikiIGQ9Im0zLjU4OTggOC40MjE5Yy0xLjExMjYgMC0yLjAxMzcgMC45MDExMS0yLjAxMzcgMi4wMTM3aDIuODE0NWMwLjI2Nzk3LTAuMzczMDkgMC41OTA3LTAuNzA0MzUgMC45NTg5OC0wLjk3ODUyLTAuMzQ0MzMtMC42MTY4OC0xLjAwMzEtMS4wMzUyLTEuNzU5OC0xLjAzNTJ6Ii8+CiAgPHBhdGggZD0ibTYuOTE1NCA0LjYyM2ExLjUyOTQgMS41Mjk0IDAgMCAxLTEuNTI5NCAxLjUyOTQgMS41Mjk0IDEuNTI5NCAwIDAgMS0xLjUyOTQtMS41Mjk0IDEuNTI5NCAxLjUyOTQgMCAwIDEgMS41Mjk0LTEuNTI5NCAxLjUyOTQgMS41Mjk0IDAgMCAxIDEuNTI5NCAxLjUyOTR6Ii8+CiAgPHBhdGggZD0ibTYuMTM1IDEzLjUzNWMwLTMuMjM5MiAyLjYyNTktNS44NjUgNS44NjUtNS44NjUgMy4yMzkyIDAgNS44NjUgMi42MjU5IDUuODY1IDUuODY1eiIvPgogIDxjaXJjbGUgY3g9IjEyIiBjeT0iMy43Njg1IiByPSIyLjk2ODUiLz4KIDwvZz4KPC9zdmc+Cg==);
|
||
--jp-icon-vega: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbjEganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjMjEyMTIxIj4KICAgIDxwYXRoIGQ9Ik0xMC42IDUuNGwyLjItMy4ySDIuMnY3LjNsNC02LjZ6Ii8+CiAgICA8cGF0aCBkPSJNMTUuOCAyLjJsLTQuNCA2LjZMNyA2LjNsLTQuOCA4djUuNWgxNy42VjIuMmgtNHptLTcgMTUuNEg1LjV2LTQuNGgzLjN2NC40em00LjQgMEg5LjhWOS44aDMuNHY3Ljh6bTQuNCAwaC0zLjRWNi41aDMuNHYxMS4xeiIvPgogIDwvZz4KPC9zdmc+Cg==);
|
||
--jp-icon-word: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwIDIwIj4KIDxnIGNsYXNzPSJqcC1pY29uMiIgZmlsbD0iIzQxNDE0MSI+CiAgPHJlY3QgeD0iMiIgeT0iMiIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2Ii8+CiA8L2c+CiA8ZyBjbGFzcz0ianAtaWNvbi1hY2NlbnQyIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNDMgLjA0MDEpIiBmaWxsPSIjZmZmIj4KICA8cGF0aCBkPSJtNC4xNCA4Ljc2cTAuMDY4Mi0xLjg5IDIuNDItMS44OSAxLjE2IDAgMS42OCAwLjQyIDAuNTY3IDAuNDEgMC41NjcgMS4xNnYzLjQ3cTAgMC40NjIgMC41MTQgMC40NjIgMC4xMDMgMCAwLjItMC4wMjMxdjAuNzE0cS0wLjM5OSAwLjEwMy0wLjY1MSAwLjEwMy0wLjQ1MiAwLTAuNjkzLTAuMjItMC4yMzEtMC4yLTAuMjg0LTAuNjYyLTAuOTU2IDAuODcyLTIgMC44NzItMC45MDMgMC0xLjQ3LTAuNDcyLTAuNTI1LTAuNDcyLTAuNTI1LTEuMjYgMC0wLjI2MiAwLjA0NTItMC40NzIgMC4wNTY3LTAuMjIgMC4xMTYtMC4zNzggMC4wNjgyLTAuMTY4IDAuMjMxLTAuMzA0IDAuMTU4LTAuMTQ3IDAuMjYyLTAuMjQyIDAuMTE2LTAuMDkxNCAwLjM2OC0wLjE2OCAwLjI2Mi0wLjA5MTQgMC4zOTktMC4xMjYgMC4xMzYtMC4wNDUyIDAuNDcyLTAuMTAzIDAuMzM2LTAuMDU3OCAwLjUwNC0wLjA3OTggMC4xNTgtMC4wMjMxIDAuNTY3LTAuMDc5OCAwLjU1Ni0wLjA2ODIgMC43NzctMC4yMjEgMC4yMi0wLjE1MiAwLjIyLTAuNDQxdi0wLjI1MnEwLTAuNDMtMC4zNTctMC42NjItMC4zMzYtMC4yMzEtMC45NzYtMC4yMzEtMC42NjIgMC0wLjk5OCAwLjI2Mi0wLjMzNiAwLjI1Mi0wLjM5OSAwLjc5OHptMS44OSAzLjY4cTAuNzg4IDAgMS4yNi0wLjQxIDAuNTA0LTAuNDIgMC41MDQtMC45MDN2LTEuMDVxLTAuMjg0IDAuMTM2LTAuODYxIDAuMjMxLTAuNTY3IDAuMDkxNC0wLjk4NyAwLjE1OC0wLjQyIDAuMDY4Mi0wLjc2NiAwLjMyNi0wLjMzNiAwLjI1Mi0wLjMzNiAwLjcwNHQwLjMwNCAwLjcwNCAwLjg2MSAwLjI1MnoiIHN0cm9rZS13aWR0aD0iMS4wNSIvPgogIDxwYXRoIGQ9Im0xMCA0LjU2aDAuOTQ1djMuMTVxMC42NTEtMC45NzYgMS44OS0wLjk3NiAxLjE2IDAgMS44OSAwLjg0IDAuNjgyIDAuODQgMC42ODIgMi4zMSAwIDEuNDctMC43MDQgMi40Mi0wLjcwNCAwLjg4Mi0xLjg5IDAuODgyLTEuMjYgMC0xLjg5LTEuMDJ2MC43NjZoLTAuODV6bTIuNjIgMy4wNHEtMC43NDYgMC0xLjE2IDAuNjQtMC40NTIgMC42My0wLjQ1MiAxLjY4IDAgMS4wNSAwLjQ1MiAxLjY4dDEuMTYgMC42M3EwLjc3NyAwIDEuMjYtMC42MyAwLjQ5NC0wLjY0IDAuNDk0LTEuNjggMC0xLjA1LTAuNDcyLTEuNjgtMC40NjItMC42NC0xLjI2LTAuNjR6IiBzdHJva2Utd2lkdGg9IjEuMDUiLz4KICA8cGF0aCBkPSJtMi43MyAxNS44IDEzLjYgMC4wMDgxYzAuMDA2OSAwIDAtMi42IDAtMi42IDAtMC4wMDc4LTEuMTUgMC0xLjE1IDAtMC4wMDY5IDAtMC4wMDgzIDEuNS0wLjAwODMgMS41LTJlLTMgLTAuMDAxNC0xMS4zLTAuMDAxNC0xMS4zLTAuMDAxNGwtMC4wMDU5Mi0xLjVjMC0wLjAwNzgtMS4xNyAwLjAwMTMtMS4xNyAwLjAwMTN6IiBzdHJva2Utd2lkdGg9Ii45NzUiLz4KIDwvZz4KPC9zdmc+Cg==);
|
||
--jp-icon-yaml: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi1jb250cmFzdDIganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjRDgxQjYwIj4KICAgIDxwYXRoIGQ9Ik03LjIgMTguNnYtNS40TDMgNS42aDMuM2wxLjQgMy4xYy4zLjkuNiAxLjYgMSAyLjUuMy0uOC42LTEuNiAxLTIuNWwxLjQtMy4xaDMuNGwtNC40IDcuNnY1LjVsLTIuOS0uMXoiLz4KICAgIDxjaXJjbGUgY2xhc3M9InN0MCIgY3g9IjE3LjYiIGN5PSIxNi41IiByPSIyLjEiLz4KICAgIDxjaXJjbGUgY2xhc3M9InN0MCIgY3g9IjE3LjYiIGN5PSIxMSIgcj0iMi4xIi8+CiAgPC9nPgo8L3N2Zz4K);
|
||
}
|
||
|
||
/* Icon CSS class declarations */
|
||
|
||
.jp-AddAboveIcon {
|
||
background-image: var(--jp-icon-add-above);
|
||
}
|
||
|
||
.jp-AddBelowIcon {
|
||
background-image: var(--jp-icon-add-below);
|
||
}
|
||
|
||
.jp-AddIcon {
|
||
background-image: var(--jp-icon-add);
|
||
}
|
||
|
||
.jp-BellIcon {
|
||
background-image: var(--jp-icon-bell);
|
||
}
|
||
|
||
.jp-BugDotIcon {
|
||
background-image: var(--jp-icon-bug-dot);
|
||
}
|
||
|
||
.jp-BugIcon {
|
||
background-image: var(--jp-icon-bug);
|
||
}
|
||
|
||
.jp-BuildIcon {
|
||
background-image: var(--jp-icon-build);
|
||
}
|
||
|
||
.jp-CaretDownEmptyIcon {
|
||
background-image: var(--jp-icon-caret-down-empty);
|
||
}
|
||
|
||
.jp-CaretDownEmptyThinIcon {
|
||
background-image: var(--jp-icon-caret-down-empty-thin);
|
||
}
|
||
|
||
.jp-CaretDownIcon {
|
||
background-image: var(--jp-icon-caret-down);
|
||
}
|
||
|
||
.jp-CaretLeftIcon {
|
||
background-image: var(--jp-icon-caret-left);
|
||
}
|
||
|
||
.jp-CaretRightIcon {
|
||
background-image: var(--jp-icon-caret-right);
|
||
}
|
||
|
||
.jp-CaretUpEmptyThinIcon {
|
||
background-image: var(--jp-icon-caret-up-empty-thin);
|
||
}
|
||
|
||
.jp-CaretUpIcon {
|
||
background-image: var(--jp-icon-caret-up);
|
||
}
|
||
|
||
.jp-CaseSensitiveIcon {
|
||
background-image: var(--jp-icon-case-sensitive);
|
||
}
|
||
|
||
.jp-CheckIcon {
|
||
background-image: var(--jp-icon-check);
|
||
}
|
||
|
||
.jp-CircleEmptyIcon {
|
||
background-image: var(--jp-icon-circle-empty);
|
||
}
|
||
|
||
.jp-CircleIcon {
|
||
background-image: var(--jp-icon-circle);
|
||
}
|
||
|
||
.jp-ClearIcon {
|
||
background-image: var(--jp-icon-clear);
|
||
}
|
||
|
||
.jp-CloseIcon {
|
||
background-image: var(--jp-icon-close);
|
||
}
|
||
|
||
.jp-CodeCheckIcon {
|
||
background-image: var(--jp-icon-code-check);
|
||
}
|
||
|
||
.jp-CodeIcon {
|
||
background-image: var(--jp-icon-code);
|
||
}
|
||
|
||
.jp-CollapseAllIcon {
|
||
background-image: var(--jp-icon-collapse-all);
|
||
}
|
||
|
||
.jp-ConsoleIcon {
|
||
background-image: var(--jp-icon-console);
|
||
}
|
||
|
||
.jp-CopyIcon {
|
||
background-image: var(--jp-icon-copy);
|
||
}
|
||
|
||
.jp-CopyrightIcon {
|
||
background-image: var(--jp-icon-copyright);
|
||
}
|
||
|
||
.jp-CutIcon {
|
||
background-image: var(--jp-icon-cut);
|
||
}
|
||
|
||
.jp-DeleteIcon {
|
||
background-image: var(--jp-icon-delete);
|
||
}
|
||
|
||
.jp-DownloadIcon {
|
||
background-image: var(--jp-icon-download);
|
||
}
|
||
|
||
.jp-DuplicateIcon {
|
||
background-image: var(--jp-icon-duplicate);
|
||
}
|
||
|
||
.jp-EditIcon {
|
||
background-image: var(--jp-icon-edit);
|
||
}
|
||
|
||
.jp-EllipsesIcon {
|
||
background-image: var(--jp-icon-ellipses);
|
||
}
|
||
|
||
.jp-ErrorIcon {
|
||
background-image: var(--jp-icon-error);
|
||
}
|
||
|
||
.jp-ExpandAllIcon {
|
||
background-image: var(--jp-icon-expand-all);
|
||
}
|
||
|
||
.jp-ExtensionIcon {
|
||
background-image: var(--jp-icon-extension);
|
||
}
|
||
|
||
.jp-FastForwardIcon {
|
||
background-image: var(--jp-icon-fast-forward);
|
||
}
|
||
|
||
.jp-FileIcon {
|
||
background-image: var(--jp-icon-file);
|
||
}
|
||
|
||
.jp-FileUploadIcon {
|
||
background-image: var(--jp-icon-file-upload);
|
||
}
|
||
|
||
.jp-FilterDotIcon {
|
||
background-image: var(--jp-icon-filter-dot);
|
||
}
|
||
|
||
.jp-FilterIcon {
|
||
background-image: var(--jp-icon-filter);
|
||
}
|
||
|
||
.jp-FilterListIcon {
|
||
background-image: var(--jp-icon-filter-list);
|
||
}
|
||
|
||
.jp-FolderFavoriteIcon {
|
||
background-image: var(--jp-icon-folder-favorite);
|
||
}
|
||
|
||
.jp-FolderIcon {
|
||
background-image: var(--jp-icon-folder);
|
||
}
|
||
|
||
.jp-HomeIcon {
|
||
background-image: var(--jp-icon-home);
|
||
}
|
||
|
||
.jp-Html5Icon {
|
||
background-image: var(--jp-icon-html5);
|
||
}
|
||
|
||
.jp-ImageIcon {
|
||
background-image: var(--jp-icon-image);
|
||
}
|
||
|
||
.jp-InfoIcon {
|
||
background-image: var(--jp-icon-info);
|
||
}
|
||
|
||
.jp-InspectorIcon {
|
||
background-image: var(--jp-icon-inspector);
|
||
}
|
||
|
||
.jp-JsonIcon {
|
||
background-image: var(--jp-icon-json);
|
||
}
|
||
|
||
.jp-JuliaIcon {
|
||
background-image: var(--jp-icon-julia);
|
||
}
|
||
|
||
.jp-JupyterFaviconIcon {
|
||
background-image: var(--jp-icon-jupyter-favicon);
|
||
}
|
||
|
||
.jp-JupyterIcon {
|
||
background-image: var(--jp-icon-jupyter);
|
||
}
|
||
|
||
.jp-JupyterlabWordmarkIcon {
|
||
background-image: var(--jp-icon-jupyterlab-wordmark);
|
||
}
|
||
|
||
.jp-KernelIcon {
|
||
background-image: var(--jp-icon-kernel);
|
||
}
|
||
|
||
.jp-KeyboardIcon {
|
||
background-image: var(--jp-icon-keyboard);
|
||
}
|
||
|
||
.jp-LaunchIcon {
|
||
background-image: var(--jp-icon-launch);
|
||
}
|
||
|
||
.jp-LauncherIcon {
|
||
background-image: var(--jp-icon-launcher);
|
||
}
|
||
|
||
.jp-LineFormIcon {
|
||
background-image: var(--jp-icon-line-form);
|
||
}
|
||
|
||
.jp-LinkIcon {
|
||
background-image: var(--jp-icon-link);
|
||
}
|
||
|
||
.jp-ListIcon {
|
||
background-image: var(--jp-icon-list);
|
||
}
|
||
|
||
.jp-MarkdownIcon {
|
||
background-image: var(--jp-icon-markdown);
|
||
}
|
||
|
||
.jp-MoveDownIcon {
|
||
background-image: var(--jp-icon-move-down);
|
||
}
|
||
|
||
.jp-MoveUpIcon {
|
||
background-image: var(--jp-icon-move-up);
|
||
}
|
||
|
||
.jp-NewFolderIcon {
|
||
background-image: var(--jp-icon-new-folder);
|
||
}
|
||
|
||
.jp-NotTrustedIcon {
|
||
background-image: var(--jp-icon-not-trusted);
|
||
}
|
||
|
||
.jp-NotebookIcon {
|
||
background-image: var(--jp-icon-notebook);
|
||
}
|
||
|
||
.jp-NumberingIcon {
|
||
background-image: var(--jp-icon-numbering);
|
||
}
|
||
|
||
.jp-OfflineBoltIcon {
|
||
background-image: var(--jp-icon-offline-bolt);
|
||
}
|
||
|
||
.jp-PaletteIcon {
|
||
background-image: var(--jp-icon-palette);
|
||
}
|
||
|
||
.jp-PasteIcon {
|
||
background-image: var(--jp-icon-paste);
|
||
}
|
||
|
||
.jp-PdfIcon {
|
||
background-image: var(--jp-icon-pdf);
|
||
}
|
||
|
||
.jp-PythonIcon {
|
||
background-image: var(--jp-icon-python);
|
||
}
|
||
|
||
.jp-RKernelIcon {
|
||
background-image: var(--jp-icon-r-kernel);
|
||
}
|
||
|
||
.jp-ReactIcon {
|
||
background-image: var(--jp-icon-react);
|
||
}
|
||
|
||
.jp-RedoIcon {
|
||
background-image: var(--jp-icon-redo);
|
||
}
|
||
|
||
.jp-RefreshIcon {
|
||
background-image: var(--jp-icon-refresh);
|
||
}
|
||
|
||
.jp-RegexIcon {
|
||
background-image: var(--jp-icon-regex);
|
||
}
|
||
|
||
.jp-RunIcon {
|
||
background-image: var(--jp-icon-run);
|
||
}
|
||
|
||
.jp-RunningIcon {
|
||
background-image: var(--jp-icon-running);
|
||
}
|
||
|
||
.jp-SaveIcon {
|
||
background-image: var(--jp-icon-save);
|
||
}
|
||
|
||
.jp-SearchIcon {
|
||
background-image: var(--jp-icon-search);
|
||
}
|
||
|
||
.jp-SettingsIcon {
|
||
background-image: var(--jp-icon-settings);
|
||
}
|
||
|
||
.jp-ShareIcon {
|
||
background-image: var(--jp-icon-share);
|
||
}
|
||
|
||
.jp-SpreadsheetIcon {
|
||
background-image: var(--jp-icon-spreadsheet);
|
||
}
|
||
|
||
.jp-StopIcon {
|
||
background-image: var(--jp-icon-stop);
|
||
}
|
||
|
||
.jp-TabIcon {
|
||
background-image: var(--jp-icon-tab);
|
||
}
|
||
|
||
.jp-TableRowsIcon {
|
||
background-image: var(--jp-icon-table-rows);
|
||
}
|
||
|
||
.jp-TagIcon {
|
||
background-image: var(--jp-icon-tag);
|
||
}
|
||
|
||
.jp-TerminalIcon {
|
||
background-image: var(--jp-icon-terminal);
|
||
}
|
||
|
||
.jp-TextEditorIcon {
|
||
background-image: var(--jp-icon-text-editor);
|
||
}
|
||
|
||
.jp-TocIcon {
|
||
background-image: var(--jp-icon-toc);
|
||
}
|
||
|
||
.jp-TreeViewIcon {
|
||
background-image: var(--jp-icon-tree-view);
|
||
}
|
||
|
||
.jp-TrustedIcon {
|
||
background-image: var(--jp-icon-trusted);
|
||
}
|
||
|
||
.jp-UndoIcon {
|
||
background-image: var(--jp-icon-undo);
|
||
}
|
||
|
||
.jp-UserIcon {
|
||
background-image: var(--jp-icon-user);
|
||
}
|
||
|
||
.jp-UsersIcon {
|
||
background-image: var(--jp-icon-users);
|
||
}
|
||
|
||
.jp-VegaIcon {
|
||
background-image: var(--jp-icon-vega);
|
||
}
|
||
|
||
.jp-WordIcon {
|
||
background-image: var(--jp-icon-word);
|
||
}
|
||
|
||
.jp-YamlIcon {
|
||
background-image: var(--jp-icon-yaml);
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Copyright (c) Jupyter Development Team.
|
||
| Distributed under the terms of the Modified BSD License.
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
/**
|
||
* (DEPRECATED) Support for consuming icons as CSS background images
|
||
*/
|
||
|
||
.jp-Icon,
|
||
.jp-MaterialIcon {
|
||
background-position: center;
|
||
background-repeat: no-repeat;
|
||
background-size: 16px;
|
||
min-width: 16px;
|
||
min-height: 16px;
|
||
}
|
||
|
||
.jp-Icon-cover {
|
||
background-position: center;
|
||
background-repeat: no-repeat;
|
||
background-size: cover;
|
||
}
|
||
|
||
/**
|
||
* (DEPRECATED) Support for specific CSS icon sizes
|
||
*/
|
||
|
||
.jp-Icon-16 {
|
||
background-size: 16px;
|
||
min-width: 16px;
|
||
min-height: 16px;
|
||
}
|
||
|
||
.jp-Icon-18 {
|
||
background-size: 18px;
|
||
min-width: 18px;
|
||
min-height: 18px;
|
||
}
|
||
|
||
.jp-Icon-20 {
|
||
background-size: 20px;
|
||
min-width: 20px;
|
||
min-height: 20px;
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Copyright (c) Jupyter Development Team.
|
||
| Distributed under the terms of the Modified BSD License.
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
.lm-TabBar .lm-TabBar-addButton {
|
||
align-items: center;
|
||
display: flex;
|
||
padding: 4px;
|
||
padding-bottom: 5px;
|
||
margin-right: 1px;
|
||
background-color: var(--jp-layout-color2);
|
||
}
|
||
|
||
.lm-TabBar .lm-TabBar-addButton:hover {
|
||
background-color: var(--jp-layout-color1);
|
||
}
|
||
|
||
.lm-DockPanel-tabBar .lm-TabBar-tab {
|
||
width: var(--jp-private-horizontal-tab-width);
|
||
}
|
||
|
||
.lm-DockPanel-tabBar .lm-TabBar-content {
|
||
flex: unset;
|
||
}
|
||
|
||
.lm-DockPanel-tabBar[data-orientation='horizontal'] {
|
||
flex: 1 1 auto;
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Copyright (c) Jupyter Development Team.
|
||
| Distributed under the terms of the Modified BSD License.
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
/**
|
||
* Support for icons as inline SVG HTMLElements
|
||
*/
|
||
|
||
/* recolor the primary elements of an icon */
|
||
.jp-icon0[fill] {
|
||
fill: var(--jp-inverse-layout-color0);
|
||
}
|
||
|
||
.jp-icon1[fill] {
|
||
fill: var(--jp-inverse-layout-color1);
|
||
}
|
||
|
||
.jp-icon2[fill] {
|
||
fill: var(--jp-inverse-layout-color2);
|
||
}
|
||
|
||
.jp-icon3[fill] {
|
||
fill: var(--jp-inverse-layout-color3);
|
||
}
|
||
|
||
.jp-icon4[fill] {
|
||
fill: var(--jp-inverse-layout-color4);
|
||
}
|
||
|
||
.jp-icon0[stroke] {
|
||
stroke: var(--jp-inverse-layout-color0);
|
||
}
|
||
|
||
.jp-icon1[stroke] {
|
||
stroke: var(--jp-inverse-layout-color1);
|
||
}
|
||
|
||
.jp-icon2[stroke] {
|
||
stroke: var(--jp-inverse-layout-color2);
|
||
}
|
||
|
||
.jp-icon3[stroke] {
|
||
stroke: var(--jp-inverse-layout-color3);
|
||
}
|
||
|
||
.jp-icon4[stroke] {
|
||
stroke: var(--jp-inverse-layout-color4);
|
||
}
|
||
|
||
/* recolor the accent elements of an icon */
|
||
.jp-icon-accent0[fill] {
|
||
fill: var(--jp-layout-color0);
|
||
}
|
||
|
||
.jp-icon-accent1[fill] {
|
||
fill: var(--jp-layout-color1);
|
||
}
|
||
|
||
.jp-icon-accent2[fill] {
|
||
fill: var(--jp-layout-color2);
|
||
}
|
||
|
||
.jp-icon-accent3[fill] {
|
||
fill: var(--jp-layout-color3);
|
||
}
|
||
|
||
.jp-icon-accent4[fill] {
|
||
fill: var(--jp-layout-color4);
|
||
}
|
||
|
||
.jp-icon-accent0[stroke] {
|
||
stroke: var(--jp-layout-color0);
|
||
}
|
||
|
||
.jp-icon-accent1[stroke] {
|
||
stroke: var(--jp-layout-color1);
|
||
}
|
||
|
||
.jp-icon-accent2[stroke] {
|
||
stroke: var(--jp-layout-color2);
|
||
}
|
||
|
||
.jp-icon-accent3[stroke] {
|
||
stroke: var(--jp-layout-color3);
|
||
}
|
||
|
||
.jp-icon-accent4[stroke] {
|
||
stroke: var(--jp-layout-color4);
|
||
}
|
||
|
||
/* set the color of an icon to transparent */
|
||
.jp-icon-none[fill] {
|
||
fill: none;
|
||
}
|
||
|
||
.jp-icon-none[stroke] {
|
||
stroke: none;
|
||
}
|
||
|
||
/* brand icon colors. Same for light and dark */
|
||
.jp-icon-brand0[fill] {
|
||
fill: var(--jp-brand-color0);
|
||
}
|
||
|
||
.jp-icon-brand1[fill] {
|
||
fill: var(--jp-brand-color1);
|
||
}
|
||
|
||
.jp-icon-brand2[fill] {
|
||
fill: var(--jp-brand-color2);
|
||
}
|
||
|
||
.jp-icon-brand3[fill] {
|
||
fill: var(--jp-brand-color3);
|
||
}
|
||
|
||
.jp-icon-brand4[fill] {
|
||
fill: var(--jp-brand-color4);
|
||
}
|
||
|
||
.jp-icon-brand0[stroke] {
|
||
stroke: var(--jp-brand-color0);
|
||
}
|
||
|
||
.jp-icon-brand1[stroke] {
|
||
stroke: var(--jp-brand-color1);
|
||
}
|
||
|
||
.jp-icon-brand2[stroke] {
|
||
stroke: var(--jp-brand-color2);
|
||
}
|
||
|
||
.jp-icon-brand3[stroke] {
|
||
stroke: var(--jp-brand-color3);
|
||
}
|
||
|
||
.jp-icon-brand4[stroke] {
|
||
stroke: var(--jp-brand-color4);
|
||
}
|
||
|
||
/* warn icon colors. Same for light and dark */
|
||
.jp-icon-warn0[fill] {
|
||
fill: var(--jp-warn-color0);
|
||
}
|
||
|
||
.jp-icon-warn1[fill] {
|
||
fill: var(--jp-warn-color1);
|
||
}
|
||
|
||
.jp-icon-warn2[fill] {
|
||
fill: var(--jp-warn-color2);
|
||
}
|
||
|
||
.jp-icon-warn3[fill] {
|
||
fill: var(--jp-warn-color3);
|
||
}
|
||
|
||
.jp-icon-warn0[stroke] {
|
||
stroke: var(--jp-warn-color0);
|
||
}
|
||
|
||
.jp-icon-warn1[stroke] {
|
||
stroke: var(--jp-warn-color1);
|
||
}
|
||
|
||
.jp-icon-warn2[stroke] {
|
||
stroke: var(--jp-warn-color2);
|
||
}
|
||
|
||
.jp-icon-warn3[stroke] {
|
||
stroke: var(--jp-warn-color3);
|
||
}
|
||
|
||
/* icon colors that contrast well with each other and most backgrounds */
|
||
.jp-icon-contrast0[fill] {
|
||
fill: var(--jp-icon-contrast-color0);
|
||
}
|
||
|
||
.jp-icon-contrast1[fill] {
|
||
fill: var(--jp-icon-contrast-color1);
|
||
}
|
||
|
||
.jp-icon-contrast2[fill] {
|
||
fill: var(--jp-icon-contrast-color2);
|
||
}
|
||
|
||
.jp-icon-contrast3[fill] {
|
||
fill: var(--jp-icon-contrast-color3);
|
||
}
|
||
|
||
.jp-icon-contrast0[stroke] {
|
||
stroke: var(--jp-icon-contrast-color0);
|
||
}
|
||
|
||
.jp-icon-contrast1[stroke] {
|
||
stroke: var(--jp-icon-contrast-color1);
|
||
}
|
||
|
||
.jp-icon-contrast2[stroke] {
|
||
stroke: var(--jp-icon-contrast-color2);
|
||
}
|
||
|
||
.jp-icon-contrast3[stroke] {
|
||
stroke: var(--jp-icon-contrast-color3);
|
||
}
|
||
|
||
.jp-icon-dot[fill] {
|
||
fill: var(--jp-warn-color0);
|
||
}
|
||
|
||
.jp-jupyter-icon-color[fill] {
|
||
fill: var(--jp-jupyter-icon-color, var(--jp-warn-color0));
|
||
}
|
||
|
||
.jp-notebook-icon-color[fill] {
|
||
fill: var(--jp-notebook-icon-color, var(--jp-warn-color0));
|
||
}
|
||
|
||
.jp-json-icon-color[fill] {
|
||
fill: var(--jp-json-icon-color, var(--jp-warn-color1));
|
||
}
|
||
|
||
.jp-console-icon-color[fill] {
|
||
fill: var(--jp-console-icon-color, white);
|
||
}
|
||
|
||
.jp-console-icon-background-color[fill] {
|
||
fill: var(--jp-console-icon-background-color, var(--jp-brand-color1));
|
||
}
|
||
|
||
.jp-terminal-icon-color[fill] {
|
||
fill: var(--jp-terminal-icon-color, var(--jp-layout-color2));
|
||
}
|
||
|
||
.jp-terminal-icon-background-color[fill] {
|
||
fill: var(
|
||
--jp-terminal-icon-background-color,
|
||
var(--jp-inverse-layout-color2)
|
||
);
|
||
}
|
||
|
||
.jp-text-editor-icon-color[fill] {
|
||
fill: var(--jp-text-editor-icon-color, var(--jp-inverse-layout-color3));
|
||
}
|
||
|
||
.jp-inspector-icon-color[fill] {
|
||
fill: var(--jp-inspector-icon-color, var(--jp-inverse-layout-color3));
|
||
}
|
||
|
||
/* CSS for icons in selected filebrowser listing items */
|
||
.jp-DirListing-item.jp-mod-selected .jp-icon-selectable[fill] {
|
||
fill: #fff;
|
||
}
|
||
|
||
.jp-DirListing-item.jp-mod-selected .jp-icon-selectable-inverse[fill] {
|
||
fill: var(--jp-brand-color1);
|
||
}
|
||
|
||
/* stylelint-disable selector-max-class, selector-max-compound-selectors */
|
||
|
||
/**
|
||
* TODO: come up with non css-hack solution for showing the busy icon on top
|
||
* of the close icon
|
||
* CSS for complex behavior of close icon of tabs in the main area tabbar
|
||
*/
|
||
.lm-DockPanel-tabBar
|
||
.lm-TabBar-tab.lm-mod-closable.jp-mod-dirty
|
||
> .lm-TabBar-tabCloseIcon
|
||
> :not(:hover)
|
||
> .jp-icon3[fill] {
|
||
fill: none;
|
||
}
|
||
|
||
.lm-DockPanel-tabBar
|
||
.lm-TabBar-tab.lm-mod-closable.jp-mod-dirty
|
||
> .lm-TabBar-tabCloseIcon
|
||
> :not(:hover)
|
||
> .jp-icon-busy[fill] {
|
||
fill: var(--jp-inverse-layout-color3);
|
||
}
|
||
|
||
/* stylelint-enable selector-max-class, selector-max-compound-selectors */
|
||
|
||
/* CSS for icons in status bar */
|
||
#jp-main-statusbar .jp-mod-selected .jp-icon-selectable[fill] {
|
||
fill: #fff;
|
||
}
|
||
|
||
#jp-main-statusbar .jp-mod-selected .jp-icon-selectable-inverse[fill] {
|
||
fill: var(--jp-brand-color1);
|
||
}
|
||
|
||
/* special handling for splash icon CSS. While the theme CSS reloads during
|
||
splash, the splash icon can loose theming. To prevent that, we set a
|
||
default for its color variable */
|
||
:root {
|
||
--jp-warn-color0: var(--md-orange-700);
|
||
}
|
||
|
||
/* not sure what to do with this one, used in filebrowser listing */
|
||
.jp-DragIcon {
|
||
margin-right: 4px;
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Copyright (c) Jupyter Development Team.
|
||
| Distributed under the terms of the Modified BSD License.
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
/**
|
||
* Support for alt colors for icons as inline SVG HTMLElements
|
||
*/
|
||
|
||
/* alt recolor the primary elements of an icon */
|
||
.jp-icon-alt .jp-icon0[fill] {
|
||
fill: var(--jp-layout-color0);
|
||
}
|
||
|
||
.jp-icon-alt .jp-icon1[fill] {
|
||
fill: var(--jp-layout-color1);
|
||
}
|
||
|
||
.jp-icon-alt .jp-icon2[fill] {
|
||
fill: var(--jp-layout-color2);
|
||
}
|
||
|
||
.jp-icon-alt .jp-icon3[fill] {
|
||
fill: var(--jp-layout-color3);
|
||
}
|
||
|
||
.jp-icon-alt .jp-icon4[fill] {
|
||
fill: var(--jp-layout-color4);
|
||
}
|
||
|
||
.jp-icon-alt .jp-icon0[stroke] {
|
||
stroke: var(--jp-layout-color0);
|
||
}
|
||
|
||
.jp-icon-alt .jp-icon1[stroke] {
|
||
stroke: var(--jp-layout-color1);
|
||
}
|
||
|
||
.jp-icon-alt .jp-icon2[stroke] {
|
||
stroke: var(--jp-layout-color2);
|
||
}
|
||
|
||
.jp-icon-alt .jp-icon3[stroke] {
|
||
stroke: var(--jp-layout-color3);
|
||
}
|
||
|
||
.jp-icon-alt .jp-icon4[stroke] {
|
||
stroke: var(--jp-layout-color4);
|
||
}
|
||
|
||
/* alt recolor the accent elements of an icon */
|
||
.jp-icon-alt .jp-icon-accent0[fill] {
|
||
fill: var(--jp-inverse-layout-color0);
|
||
}
|
||
|
||
.jp-icon-alt .jp-icon-accent1[fill] {
|
||
fill: var(--jp-inverse-layout-color1);
|
||
}
|
||
|
||
.jp-icon-alt .jp-icon-accent2[fill] {
|
||
fill: var(--jp-inverse-layout-color2);
|
||
}
|
||
|
||
.jp-icon-alt .jp-icon-accent3[fill] {
|
||
fill: var(--jp-inverse-layout-color3);
|
||
}
|
||
|
||
.jp-icon-alt .jp-icon-accent4[fill] {
|
||
fill: var(--jp-inverse-layout-color4);
|
||
}
|
||
|
||
.jp-icon-alt .jp-icon-accent0[stroke] {
|
||
stroke: var(--jp-inverse-layout-color0);
|
||
}
|
||
|
||
.jp-icon-alt .jp-icon-accent1[stroke] {
|
||
stroke: var(--jp-inverse-layout-color1);
|
||
}
|
||
|
||
.jp-icon-alt .jp-icon-accent2[stroke] {
|
||
stroke: var(--jp-inverse-layout-color2);
|
||
}
|
||
|
||
.jp-icon-alt .jp-icon-accent3[stroke] {
|
||
stroke: var(--jp-inverse-layout-color3);
|
||
}
|
||
|
||
.jp-icon-alt .jp-icon-accent4[stroke] {
|
||
stroke: var(--jp-inverse-layout-color4);
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Copyright (c) Jupyter Development Team.
|
||
| Distributed under the terms of the Modified BSD License.
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
.jp-icon-hoverShow:not(:hover) .jp-icon-hoverShow-content {
|
||
display: none !important;
|
||
}
|
||
|
||
/**
|
||
* Support for hover colors for icons as inline SVG HTMLElements
|
||
*/
|
||
|
||
/**
|
||
* regular colors
|
||
*/
|
||
|
||
/* recolor the primary elements of an icon */
|
||
.jp-icon-hover :hover .jp-icon0-hover[fill] {
|
||
fill: var(--jp-inverse-layout-color0);
|
||
}
|
||
|
||
.jp-icon-hover :hover .jp-icon1-hover[fill] {
|
||
fill: var(--jp-inverse-layout-color1);
|
||
}
|
||
|
||
.jp-icon-hover :hover .jp-icon2-hover[fill] {
|
||
fill: var(--jp-inverse-layout-color2);
|
||
}
|
||
|
||
.jp-icon-hover :hover .jp-icon3-hover[fill] {
|
||
fill: var(--jp-inverse-layout-color3);
|
||
}
|
||
|
||
.jp-icon-hover :hover .jp-icon4-hover[fill] {
|
||
fill: var(--jp-inverse-layout-color4);
|
||
}
|
||
|
||
.jp-icon-hover :hover .jp-icon0-hover[stroke] {
|
||
stroke: var(--jp-inverse-layout-color0);
|
||
}
|
||
|
||
.jp-icon-hover :hover .jp-icon1-hover[stroke] {
|
||
stroke: var(--jp-inverse-layout-color1);
|
||
}
|
||
|
||
.jp-icon-hover :hover .jp-icon2-hover[stroke] {
|
||
stroke: var(--jp-inverse-layout-color2);
|
||
}
|
||
|
||
.jp-icon-hover :hover .jp-icon3-hover[stroke] {
|
||
stroke: var(--jp-inverse-layout-color3);
|
||
}
|
||
|
||
.jp-icon-hover :hover .jp-icon4-hover[stroke] {
|
||
stroke: var(--jp-inverse-layout-color4);
|
||
}
|
||
|
||
/* recolor the accent elements of an icon */
|
||
.jp-icon-hover :hover .jp-icon-accent0-hover[fill] {
|
||
fill: var(--jp-layout-color0);
|
||
}
|
||
|
||
.jp-icon-hover :hover .jp-icon-accent1-hover[fill] {
|
||
fill: var(--jp-layout-color1);
|
||
}
|
||
|
||
.jp-icon-hover :hover .jp-icon-accent2-hover[fill] {
|
||
fill: var(--jp-layout-color2);
|
||
}
|
||
|
||
.jp-icon-hover :hover .jp-icon-accent3-hover[fill] {
|
||
fill: var(--jp-layout-color3);
|
||
}
|
||
|
||
.jp-icon-hover :hover .jp-icon-accent4-hover[fill] {
|
||
fill: var(--jp-layout-color4);
|
||
}
|
||
|
||
.jp-icon-hover :hover .jp-icon-accent0-hover[stroke] {
|
||
stroke: var(--jp-layout-color0);
|
||
}
|
||
|
||
.jp-icon-hover :hover .jp-icon-accent1-hover[stroke] {
|
||
stroke: var(--jp-layout-color1);
|
||
}
|
||
|
||
.jp-icon-hover :hover .jp-icon-accent2-hover[stroke] {
|
||
stroke: var(--jp-layout-color2);
|
||
}
|
||
|
||
.jp-icon-hover :hover .jp-icon-accent3-hover[stroke] {
|
||
stroke: var(--jp-layout-color3);
|
||
}
|
||
|
||
.jp-icon-hover :hover .jp-icon-accent4-hover[stroke] {
|
||
stroke: var(--jp-layout-color4);
|
||
}
|
||
|
||
/* set the color of an icon to transparent */
|
||
.jp-icon-hover :hover .jp-icon-none-hover[fill] {
|
||
fill: none;
|
||
}
|
||
|
||
.jp-icon-hover :hover .jp-icon-none-hover[stroke] {
|
||
stroke: none;
|
||
}
|
||
|
||
/**
|
||
* inverse colors
|
||
*/
|
||
|
||
/* inverse recolor the primary elements of an icon */
|
||
.jp-icon-hover.jp-icon-alt :hover .jp-icon0-hover[fill] {
|
||
fill: var(--jp-layout-color0);
|
||
}
|
||
|
||
.jp-icon-hover.jp-icon-alt :hover .jp-icon1-hover[fill] {
|
||
fill: var(--jp-layout-color1);
|
||
}
|
||
|
||
.jp-icon-hover.jp-icon-alt :hover .jp-icon2-hover[fill] {
|
||
fill: var(--jp-layout-color2);
|
||
}
|
||
|
||
.jp-icon-hover.jp-icon-alt :hover .jp-icon3-hover[fill] {
|
||
fill: var(--jp-layout-color3);
|
||
}
|
||
|
||
.jp-icon-hover.jp-icon-alt :hover .jp-icon4-hover[fill] {
|
||
fill: var(--jp-layout-color4);
|
||
}
|
||
|
||
.jp-icon-hover.jp-icon-alt :hover .jp-icon0-hover[stroke] {
|
||
stroke: var(--jp-layout-color0);
|
||
}
|
||
|
||
.jp-icon-hover.jp-icon-alt :hover .jp-icon1-hover[stroke] {
|
||
stroke: var(--jp-layout-color1);
|
||
}
|
||
|
||
.jp-icon-hover.jp-icon-alt :hover .jp-icon2-hover[stroke] {
|
||
stroke: var(--jp-layout-color2);
|
||
}
|
||
|
||
.jp-icon-hover.jp-icon-alt :hover .jp-icon3-hover[stroke] {
|
||
stroke: var(--jp-layout-color3);
|
||
}
|
||
|
||
.jp-icon-hover.jp-icon-alt :hover .jp-icon4-hover[stroke] {
|
||
stroke: var(--jp-layout-color4);
|
||
}
|
||
|
||
/* inverse recolor the accent elements of an icon */
|
||
.jp-icon-hover.jp-icon-alt :hover .jp-icon-accent0-hover[fill] {
|
||
fill: var(--jp-inverse-layout-color0);
|
||
}
|
||
|
||
.jp-icon-hover.jp-icon-alt :hover .jp-icon-accent1-hover[fill] {
|
||
fill: var(--jp-inverse-layout-color1);
|
||
}
|
||
|
||
.jp-icon-hover.jp-icon-alt :hover .jp-icon-accent2-hover[fill] {
|
||
fill: var(--jp-inverse-layout-color2);
|
||
}
|
||
|
||
.jp-icon-hover.jp-icon-alt :hover .jp-icon-accent3-hover[fill] {
|
||
fill: var(--jp-inverse-layout-color3);
|
||
}
|
||
|
||
.jp-icon-hover.jp-icon-alt :hover .jp-icon-accent4-hover[fill] {
|
||
fill: var(--jp-inverse-layout-color4);
|
||
}
|
||
|
||
.jp-icon-hover.jp-icon-alt :hover .jp-icon-accent0-hover[stroke] {
|
||
stroke: var(--jp-inverse-layout-color0);
|
||
}
|
||
|
||
.jp-icon-hover.jp-icon-alt :hover .jp-icon-accent1-hover[stroke] {
|
||
stroke: var(--jp-inverse-layout-color1);
|
||
}
|
||
|
||
.jp-icon-hover.jp-icon-alt :hover .jp-icon-accent2-hover[stroke] {
|
||
stroke: var(--jp-inverse-layout-color2);
|
||
}
|
||
|
||
.jp-icon-hover.jp-icon-alt :hover .jp-icon-accent3-hover[stroke] {
|
||
stroke: var(--jp-inverse-layout-color3);
|
||
}
|
||
|
||
.jp-icon-hover.jp-icon-alt :hover .jp-icon-accent4-hover[stroke] {
|
||
stroke: var(--jp-inverse-layout-color4);
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Copyright (c) Jupyter Development Team.
|
||
| Distributed under the terms of the Modified BSD License.
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
.jp-IFrame {
|
||
width: 100%;
|
||
height: 100%;
|
||
}
|
||
|
||
.jp-IFrame > iframe {
|
||
border: none;
|
||
}
|
||
|
||
/*
|
||
When drag events occur, `lm-mod-override-cursor` is added to the body.
|
||
Because iframes steal all cursor events, the following two rules are necessary
|
||
to suppress pointer events while resize drags are occurring. There may be a
|
||
better solution to this problem.
|
||
*/
|
||
body.lm-mod-override-cursor .jp-IFrame {
|
||
position: relative;
|
||
}
|
||
|
||
body.lm-mod-override-cursor .jp-IFrame::before {
|
||
content: '';
|
||
position: absolute;
|
||
top: 0;
|
||
left: 0;
|
||
right: 0;
|
||
bottom: 0;
|
||
background: transparent;
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Copyright (c) 2014-2016, Jupyter Development Team.
|
||
|
|
||
| Distributed under the terms of the Modified BSD License.
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
.jp-HoverBox {
|
||
position: fixed;
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Copyright (c) Jupyter Development Team.
|
||
| Distributed under the terms of the Modified BSD License.
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
.jp-FormGroup-content fieldset {
|
||
border: none;
|
||
padding: 0;
|
||
min-width: 0;
|
||
width: 100%;
|
||
}
|
||
|
||
/* stylelint-disable selector-max-type */
|
||
|
||
.jp-FormGroup-content fieldset .jp-inputFieldWrapper input,
|
||
.jp-FormGroup-content fieldset .jp-inputFieldWrapper select,
|
||
.jp-FormGroup-content fieldset .jp-inputFieldWrapper textarea {
|
||
font-size: var(--jp-content-font-size2);
|
||
border-color: var(--jp-input-border-color);
|
||
border-style: solid;
|
||
border-radius: var(--jp-border-radius);
|
||
border-width: 1px;
|
||
padding: 6px 8px;
|
||
background: none;
|
||
color: var(--jp-ui-font-color0);
|
||
height: inherit;
|
||
}
|
||
|
||
.jp-FormGroup-content fieldset input[type='checkbox'] {
|
||
position: relative;
|
||
top: 2px;
|
||
margin-left: 0;
|
||
}
|
||
|
||
.jp-FormGroup-content button.jp-mod-styled {
|
||
cursor: pointer;
|
||
}
|
||
|
||
.jp-FormGroup-content .checkbox label {
|
||
cursor: pointer;
|
||
font-size: var(--jp-content-font-size1);
|
||
}
|
||
|
||
.jp-FormGroup-content .jp-root > fieldset > legend {
|
||
display: none;
|
||
}
|
||
|
||
.jp-FormGroup-content .jp-root > fieldset > p {
|
||
display: none;
|
||
}
|
||
|
||
/** copy of `input.jp-mod-styled:focus` style */
|
||
.jp-FormGroup-content fieldset input:focus,
|
||
.jp-FormGroup-content fieldset select:focus {
|
||
-moz-outline-radius: unset;
|
||
outline: var(--jp-border-width) solid var(--md-blue-500);
|
||
outline-offset: -1px;
|
||
box-shadow: inset 0 0 4px var(--md-blue-300);
|
||
}
|
||
|
||
.jp-FormGroup-content fieldset input:hover:not(:focus),
|
||
.jp-FormGroup-content fieldset select:hover:not(:focus) {
|
||
background-color: var(--jp-border-color2);
|
||
}
|
||
|
||
/* stylelint-enable selector-max-type */
|
||
|
||
.jp-FormGroup-content .checkbox .field-description {
|
||
/* Disable default description field for checkbox:
|
||
because other widgets do not have description fields,
|
||
we add descriptions to each widget on the field level.
|
||
*/
|
||
display: none;
|
||
}
|
||
|
||
.jp-FormGroup-content #root__description {
|
||
display: none;
|
||
}
|
||
|
||
.jp-FormGroup-content .jp-modifiedIndicator {
|
||
width: 5px;
|
||
background-color: var(--jp-brand-color2);
|
||
margin-top: 0;
|
||
margin-left: calc(var(--jp-private-settingeditor-modifier-indent) * -1);
|
||
flex-shrink: 0;
|
||
}
|
||
|
||
.jp-FormGroup-content .jp-modifiedIndicator.jp-errorIndicator {
|
||
background-color: var(--jp-error-color0);
|
||
margin-right: 0.5em;
|
||
}
|
||
|
||
/* RJSF ARRAY style */
|
||
|
||
.jp-arrayFieldWrapper legend {
|
||
font-size: var(--jp-content-font-size2);
|
||
color: var(--jp-ui-font-color0);
|
||
flex-basis: 100%;
|
||
padding: 4px 0;
|
||
font-weight: var(--jp-content-heading-font-weight);
|
||
border-bottom: 1px solid var(--jp-border-color2);
|
||
}
|
||
|
||
.jp-arrayFieldWrapper .field-description {
|
||
padding: 4px 0;
|
||
white-space: pre-wrap;
|
||
}
|
||
|
||
.jp-arrayFieldWrapper .array-item {
|
||
width: 100%;
|
||
border: 1px solid var(--jp-border-color2);
|
||
border-radius: 4px;
|
||
margin: 4px;
|
||
}
|
||
|
||
.jp-ArrayOperations {
|
||
display: flex;
|
||
margin-left: 8px;
|
||
}
|
||
|
||
.jp-ArrayOperationsButton {
|
||
margin: 2px;
|
||
}
|
||
|
||
.jp-ArrayOperationsButton .jp-icon3[fill] {
|
||
fill: var(--jp-ui-font-color0);
|
||
}
|
||
|
||
button.jp-ArrayOperationsButton.jp-mod-styled:disabled {
|
||
cursor: not-allowed;
|
||
opacity: 0.5;
|
||
}
|
||
|
||
/* RJSF form validation error */
|
||
|
||
.jp-FormGroup-content .validationErrors {
|
||
color: var(--jp-error-color0);
|
||
}
|
||
|
||
/* Hide panel level error as duplicated the field level error */
|
||
.jp-FormGroup-content .panel.errors {
|
||
display: none;
|
||
}
|
||
|
||
/* RJSF normal content (settings-editor) */
|
||
|
||
.jp-FormGroup-contentNormal {
|
||
display: flex;
|
||
align-items: center;
|
||
flex-wrap: wrap;
|
||
}
|
||
|
||
.jp-FormGroup-contentNormal .jp-FormGroup-contentItem {
|
||
margin-left: 7px;
|
||
color: var(--jp-ui-font-color0);
|
||
}
|
||
|
||
.jp-FormGroup-contentNormal .jp-FormGroup-description {
|
||
flex-basis: 100%;
|
||
padding: 4px 7px;
|
||
}
|
||
|
||
.jp-FormGroup-contentNormal .jp-FormGroup-default {
|
||
flex-basis: 100%;
|
||
padding: 4px 7px;
|
||
}
|
||
|
||
.jp-FormGroup-contentNormal .jp-FormGroup-fieldLabel {
|
||
font-size: var(--jp-content-font-size1);
|
||
font-weight: normal;
|
||
min-width: 120px;
|
||
}
|
||
|
||
.jp-FormGroup-contentNormal fieldset:not(:first-child) {
|
||
margin-left: 7px;
|
||
}
|
||
|
||
.jp-FormGroup-contentNormal .field-array-of-string .array-item {
|
||
/* Display `jp-ArrayOperations` buttons side-by-side with content except
|
||
for small screens where flex-wrap will place them one below the other.
|
||
*/
|
||
display: flex;
|
||
align-items: center;
|
||
flex-wrap: wrap;
|
||
}
|
||
|
||
.jp-FormGroup-contentNormal .jp-objectFieldWrapper .form-group {
|
||
padding: 2px 8px 2px var(--jp-private-settingeditor-modifier-indent);
|
||
margin-top: 2px;
|
||
}
|
||
|
||
/* RJSF compact content (metadata-form) */
|
||
|
||
.jp-FormGroup-content.jp-FormGroup-contentCompact {
|
||
width: 100%;
|
||
}
|
||
|
||
.jp-FormGroup-contentCompact .form-group {
|
||
display: flex;
|
||
padding: 0.5em 0.2em 0.5em 0;
|
||
}
|
||
|
||
.jp-FormGroup-contentCompact
|
||
.jp-FormGroup-compactTitle
|
||
.jp-FormGroup-description {
|
||
font-size: var(--jp-ui-font-size1);
|
||
color: var(--jp-ui-font-color2);
|
||
}
|
||
|
||
.jp-FormGroup-contentCompact .jp-FormGroup-fieldLabel {
|
||
padding-bottom: 0.3em;
|
||
}
|
||
|
||
.jp-FormGroup-contentCompact .jp-inputFieldWrapper .form-control {
|
||
width: 100%;
|
||
box-sizing: border-box;
|
||
}
|
||
|
||
.jp-FormGroup-contentCompact .jp-arrayFieldWrapper .jp-FormGroup-compactTitle {
|
||
padding-bottom: 7px;
|
||
}
|
||
|
||
.jp-FormGroup-contentCompact
|
||
.jp-objectFieldWrapper
|
||
.jp-objectFieldWrapper
|
||
.form-group {
|
||
padding: 2px 8px 2px var(--jp-private-settingeditor-modifier-indent);
|
||
margin-top: 2px;
|
||
}
|
||
|
||
.jp-FormGroup-contentCompact ul.error-detail {
|
||
margin-block-start: 0.5em;
|
||
margin-block-end: 0.5em;
|
||
padding-inline-start: 1em;
|
||
}
|
||
|
||
/*
|
||
* Copyright (c) Jupyter Development Team.
|
||
* Distributed under the terms of the Modified BSD License.
|
||
*/
|
||
|
||
.jp-SidePanel {
|
||
display: flex;
|
||
flex-direction: column;
|
||
min-width: var(--jp-sidebar-min-width);
|
||
overflow-y: auto;
|
||
color: var(--jp-ui-font-color1);
|
||
background: var(--jp-layout-color1);
|
||
font-size: var(--jp-ui-font-size1);
|
||
}
|
||
|
||
.jp-SidePanel-header {
|
||
flex: 0 0 auto;
|
||
display: flex;
|
||
border-bottom: var(--jp-border-width) solid var(--jp-border-color2);
|
||
font-size: var(--jp-ui-font-size0);
|
||
font-weight: 600;
|
||
letter-spacing: 1px;
|
||
margin: 0;
|
||
padding: 2px;
|
||
text-transform: uppercase;
|
||
}
|
||
|
||
.jp-SidePanel-toolbar {
|
||
flex: 0 0 auto;
|
||
}
|
||
|
||
.jp-SidePanel-content {
|
||
flex: 1 1 auto;
|
||
}
|
||
|
||
.jp-SidePanel-toolbar,
|
||
.jp-AccordionPanel-toolbar {
|
||
height: var(--jp-private-toolbar-height);
|
||
}
|
||
|
||
.jp-SidePanel-toolbar.jp-Toolbar-micro {
|
||
display: none;
|
||
}
|
||
|
||
.lm-AccordionPanel .jp-AccordionPanel-title {
|
||
box-sizing: border-box;
|
||
line-height: 25px;
|
||
margin: 0;
|
||
display: flex;
|
||
align-items: center;
|
||
background: var(--jp-layout-color1);
|
||
color: var(--jp-ui-font-color1);
|
||
border-bottom: var(--jp-border-width) solid var(--jp-toolbar-border-color);
|
||
box-shadow: var(--jp-toolbar-box-shadow);
|
||
font-size: var(--jp-ui-font-size0);
|
||
}
|
||
|
||
.jp-AccordionPanel-title {
|
||
cursor: pointer;
|
||
user-select: none;
|
||
-moz-user-select: none;
|
||
-webkit-user-select: none;
|
||
text-transform: uppercase;
|
||
}
|
||
|
||
.lm-AccordionPanel[data-orientation='horizontal'] > .jp-AccordionPanel-title {
|
||
/* Title is rotated for horizontal accordion panel using CSS */
|
||
display: block;
|
||
transform-origin: top left;
|
||
transform: rotate(-90deg) translate(-100%);
|
||
}
|
||
|
||
.jp-AccordionPanel-title .lm-AccordionPanel-titleLabel {
|
||
user-select: none;
|
||
text-overflow: ellipsis;
|
||
white-space: nowrap;
|
||
overflow: hidden;
|
||
}
|
||
|
||
.jp-AccordionPanel-title .lm-AccordionPanel-titleCollapser {
|
||
transform: rotate(-90deg);
|
||
margin: auto 0;
|
||
height: 16px;
|
||
}
|
||
|
||
.jp-AccordionPanel-title.lm-mod-expanded .lm-AccordionPanel-titleCollapser {
|
||
transform: rotate(0deg);
|
||
}
|
||
|
||
.lm-AccordionPanel .jp-AccordionPanel-toolbar {
|
||
background: none;
|
||
box-shadow: none;
|
||
border: none;
|
||
margin-left: auto;
|
||
}
|
||
|
||
.lm-AccordionPanel .lm-SplitPanel-handle:hover {
|
||
background: var(--jp-layout-color3);
|
||
}
|
||
|
||
.jp-text-truncated {
|
||
overflow: hidden;
|
||
text-overflow: ellipsis;
|
||
white-space: nowrap;
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Copyright (c) 2017, Jupyter Development Team.
|
||
|
|
||
| Distributed under the terms of the Modified BSD License.
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
.jp-Spinner {
|
||
position: absolute;
|
||
display: flex;
|
||
justify-content: center;
|
||
align-items: center;
|
||
z-index: 10;
|
||
left: 0;
|
||
top: 0;
|
||
width: 100%;
|
||
height: 100%;
|
||
background: var(--jp-layout-color0);
|
||
outline: none;
|
||
}
|
||
|
||
.jp-SpinnerContent {
|
||
font-size: 10px;
|
||
margin: 50px auto;
|
||
text-indent: -9999em;
|
||
width: 3em;
|
||
height: 3em;
|
||
border-radius: 50%;
|
||
background: var(--jp-brand-color3);
|
||
background: linear-gradient(
|
||
to right,
|
||
#f37626 10%,
|
||
rgba(255, 255, 255, 0) 42%
|
||
);
|
||
position: relative;
|
||
animation: load3 1s infinite linear, fadeIn 1s;
|
||
}
|
||
|
||
.jp-SpinnerContent::before {
|
||
width: 50%;
|
||
height: 50%;
|
||
background: #f37626;
|
||
border-radius: 100% 0 0;
|
||
position: absolute;
|
||
top: 0;
|
||
left: 0;
|
||
content: '';
|
||
}
|
||
|
||
.jp-SpinnerContent::after {
|
||
background: var(--jp-layout-color0);
|
||
width: 75%;
|
||
height: 75%;
|
||
border-radius: 50%;
|
||
content: '';
|
||
margin: auto;
|
||
position: absolute;
|
||
top: 0;
|
||
left: 0;
|
||
bottom: 0;
|
||
right: 0;
|
||
}
|
||
|
||
@keyframes fadeIn {
|
||
0% {
|
||
opacity: 0;
|
||
}
|
||
|
||
100% {
|
||
opacity: 1;
|
||
}
|
||
}
|
||
|
||
@keyframes load3 {
|
||
0% {
|
||
transform: rotate(0deg);
|
||
}
|
||
|
||
100% {
|
||
transform: rotate(360deg);
|
||
}
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Copyright (c) 2014-2017, Jupyter Development Team.
|
||
|
|
||
| Distributed under the terms of the Modified BSD License.
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
button.jp-mod-styled {
|
||
font-size: var(--jp-ui-font-size1);
|
||
color: var(--jp-ui-font-color0);
|
||
border: none;
|
||
box-sizing: border-box;
|
||
text-align: center;
|
||
line-height: 32px;
|
||
height: 32px;
|
||
padding: 0 12px;
|
||
letter-spacing: 0.8px;
|
||
outline: none;
|
||
appearance: none;
|
||
-webkit-appearance: none;
|
||
-moz-appearance: none;
|
||
}
|
||
|
||
input.jp-mod-styled {
|
||
background: var(--jp-input-background);
|
||
height: 28px;
|
||
box-sizing: border-box;
|
||
border: var(--jp-border-width) solid var(--jp-border-color1);
|
||
padding-left: 7px;
|
||
padding-right: 7px;
|
||
font-size: var(--jp-ui-font-size2);
|
||
color: var(--jp-ui-font-color0);
|
||
outline: none;
|
||
appearance: none;
|
||
-webkit-appearance: none;
|
||
-moz-appearance: none;
|
||
}
|
||
|
||
input[type='checkbox'].jp-mod-styled {
|
||
appearance: checkbox;
|
||
-webkit-appearance: checkbox;
|
||
-moz-appearance: checkbox;
|
||
height: auto;
|
||
}
|
||
|
||
input.jp-mod-styled:focus {
|
||
border: var(--jp-border-width) solid var(--md-blue-500);
|
||
box-shadow: inset 0 0 4px var(--md-blue-300);
|
||
}
|
||
|
||
.jp-select-wrapper {
|
||
display: flex;
|
||
position: relative;
|
||
flex-direction: column;
|
||
padding: 1px;
|
||
background-color: var(--jp-layout-color1);
|
||
box-sizing: border-box;
|
||
margin-bottom: 12px;
|
||
}
|
||
|
||
.jp-select-wrapper:not(.multiple) {
|
||
height: 28px;
|
||
}
|
||
|
||
.jp-select-wrapper.jp-mod-focused select.jp-mod-styled {
|
||
border: var(--jp-border-width) solid var(--jp-input-active-border-color);
|
||
box-shadow: var(--jp-input-box-shadow);
|
||
background-color: var(--jp-input-active-background);
|
||
}
|
||
|
||
select.jp-mod-styled:hover {
|
||
cursor: pointer;
|
||
color: var(--jp-ui-font-color0);
|
||
background-color: var(--jp-input-hover-background);
|
||
box-shadow: inset 0 0 1px rgba(0, 0, 0, 0.5);
|
||
}
|
||
|
||
select.jp-mod-styled {
|
||
flex: 1 1 auto;
|
||
width: 100%;
|
||
font-size: var(--jp-ui-font-size2);
|
||
background: var(--jp-input-background);
|
||
color: var(--jp-ui-font-color0);
|
||
padding: 0 25px 0 8px;
|
||
border: var(--jp-border-width) solid var(--jp-input-border-color);
|
||
border-radius: 0;
|
||
outline: none;
|
||
appearance: none;
|
||
-webkit-appearance: none;
|
||
-moz-appearance: none;
|
||
}
|
||
|
||
select.jp-mod-styled:not([multiple]) {
|
||
height: 32px;
|
||
}
|
||
|
||
select.jp-mod-styled[multiple] {
|
||
max-height: 200px;
|
||
overflow-y: auto;
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Copyright (c) Jupyter Development Team.
|
||
| Distributed under the terms of the Modified BSD License.
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
.jp-switch {
|
||
display: flex;
|
||
align-items: center;
|
||
padding-left: 4px;
|
||
padding-right: 4px;
|
||
font-size: var(--jp-ui-font-size1);
|
||
background-color: transparent;
|
||
color: var(--jp-ui-font-color1);
|
||
border: none;
|
||
height: 20px;
|
||
}
|
||
|
||
.jp-switch:hover {
|
||
background-color: var(--jp-layout-color2);
|
||
}
|
||
|
||
.jp-switch-label {
|
||
margin-right: 5px;
|
||
font-family: var(--jp-ui-font-family);
|
||
}
|
||
|
||
.jp-switch-track {
|
||
cursor: pointer;
|
||
background-color: var(--jp-switch-color, var(--jp-border-color1));
|
||
-webkit-transition: 0.4s;
|
||
transition: 0.4s;
|
||
border-radius: 34px;
|
||
height: 16px;
|
||
width: 35px;
|
||
position: relative;
|
||
}
|
||
|
||
.jp-switch-track::before {
|
||
content: '';
|
||
position: absolute;
|
||
height: 10px;
|
||
width: 10px;
|
||
margin: 3px;
|
||
left: 0;
|
||
background-color: var(--jp-ui-inverse-font-color1);
|
||
-webkit-transition: 0.4s;
|
||
transition: 0.4s;
|
||
border-radius: 50%;
|
||
}
|
||
|
||
.jp-switch[aria-checked='true'] .jp-switch-track {
|
||
background-color: var(--jp-switch-true-position-color, var(--jp-warn-color0));
|
||
}
|
||
|
||
.jp-switch[aria-checked='true'] .jp-switch-track::before {
|
||
/* track width (35) - margins (3 + 3) - thumb width (10) */
|
||
left: 19px;
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Copyright (c) 2014-2016, Jupyter Development Team.
|
||
|
|
||
| Distributed under the terms of the Modified BSD License.
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
:root {
|
||
--jp-private-toolbar-height: calc(
|
||
28px + var(--jp-border-width)
|
||
); /* leave 28px for content */
|
||
}
|
||
|
||
.jp-Toolbar {
|
||
color: var(--jp-ui-font-color1);
|
||
flex: 0 0 auto;
|
||
display: flex;
|
||
flex-direction: row;
|
||
border-bottom: var(--jp-border-width) solid var(--jp-toolbar-border-color);
|
||
box-shadow: var(--jp-toolbar-box-shadow);
|
||
background: var(--jp-toolbar-background);
|
||
min-height: var(--jp-toolbar-micro-height);
|
||
padding: 2px;
|
||
z-index: 8;
|
||
overflow-x: hidden;
|
||
}
|
||
|
||
/* Toolbar items */
|
||
|
||
.jp-Toolbar > .jp-Toolbar-item.jp-Toolbar-spacer {
|
||
flex-grow: 1;
|
||
flex-shrink: 1;
|
||
}
|
||
|
||
.jp-Toolbar-item.jp-Toolbar-kernelStatus {
|
||
display: inline-block;
|
||
width: 32px;
|
||
background-repeat: no-repeat;
|
||
background-position: center;
|
||
background-size: 16px;
|
||
}
|
||
|
||
.jp-Toolbar > .jp-Toolbar-item {
|
||
flex: 0 0 auto;
|
||
display: flex;
|
||
padding-left: 1px;
|
||
padding-right: 1px;
|
||
font-size: var(--jp-ui-font-size1);
|
||
line-height: var(--jp-private-toolbar-height);
|
||
height: 100%;
|
||
}
|
||
|
||
/* Toolbar buttons */
|
||
|
||
/* This is the div we use to wrap the react component into a Widget */
|
||
div.jp-ToolbarButton {
|
||
color: transparent;
|
||
border: none;
|
||
box-sizing: border-box;
|
||
outline: none;
|
||
appearance: none;
|
||
-webkit-appearance: none;
|
||
-moz-appearance: none;
|
||
padding: 0;
|
||
margin: 0;
|
||
}
|
||
|
||
button.jp-ToolbarButtonComponent {
|
||
background: var(--jp-layout-color1);
|
||
border: none;
|
||
box-sizing: border-box;
|
||
outline: none;
|
||
appearance: none;
|
||
-webkit-appearance: none;
|
||
-moz-appearance: none;
|
||
padding: 0 6px;
|
||
margin: 0;
|
||
height: 24px;
|
||
border-radius: var(--jp-border-radius);
|
||
display: flex;
|
||
align-items: center;
|
||
text-align: center;
|
||
font-size: 14px;
|
||
min-width: unset;
|
||
min-height: unset;
|
||
}
|
||
|
||
button.jp-ToolbarButtonComponent:disabled {
|
||
opacity: 0.4;
|
||
}
|
||
|
||
button.jp-ToolbarButtonComponent > span {
|
||
padding: 0;
|
||
flex: 0 0 auto;
|
||
}
|
||
|
||
button.jp-ToolbarButtonComponent .jp-ToolbarButtonComponent-label {
|
||
font-size: var(--jp-ui-font-size1);
|
||
line-height: 100%;
|
||
padding-left: 2px;
|
||
color: var(--jp-ui-font-color1);
|
||
font-family: var(--jp-ui-font-family);
|
||
}
|
||
|
||
#jp-main-dock-panel[data-mode='single-document']
|
||
.jp-MainAreaWidget
|
||
> .jp-Toolbar.jp-Toolbar-micro {
|
||
padding: 0;
|
||
min-height: 0;
|
||
}
|
||
|
||
#jp-main-dock-panel[data-mode='single-document']
|
||
.jp-MainAreaWidget
|
||
> .jp-Toolbar {
|
||
border: none;
|
||
box-shadow: none;
|
||
}
|
||
|
||
/*
|
||
* Copyright (c) Jupyter Development Team.
|
||
* Distributed under the terms of the Modified BSD License.
|
||
*/
|
||
|
||
.jp-WindowedPanel-outer {
|
||
position: relative;
|
||
overflow-y: auto;
|
||
}
|
||
|
||
.jp-WindowedPanel-inner {
|
||
position: relative;
|
||
}
|
||
|
||
.jp-WindowedPanel-window {
|
||
position: absolute;
|
||
left: 0;
|
||
right: 0;
|
||
overflow: visible;
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Copyright (c) Jupyter Development Team.
|
||
| Distributed under the terms of the Modified BSD License.
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
/* Sibling imports */
|
||
|
||
body {
|
||
color: var(--jp-ui-font-color1);
|
||
font-size: var(--jp-ui-font-size1);
|
||
}
|
||
|
||
/* Disable native link decoration styles everywhere outside of dialog boxes */
|
||
a {
|
||
text-decoration: unset;
|
||
color: unset;
|
||
}
|
||
|
||
a:hover {
|
||
text-decoration: unset;
|
||
color: unset;
|
||
}
|
||
|
||
/* Accessibility for links inside dialog box text */
|
||
.jp-Dialog-content a {
|
||
text-decoration: revert;
|
||
color: var(--jp-content-link-color);
|
||
}
|
||
|
||
.jp-Dialog-content a:hover {
|
||
text-decoration: revert;
|
||
}
|
||
|
||
/* Styles for ui-components */
|
||
.jp-Button {
|
||
color: var(--jp-ui-font-color2);
|
||
border-radius: var(--jp-border-radius);
|
||
padding: 0 12px;
|
||
font-size: var(--jp-ui-font-size1);
|
||
|
||
/* Copy from blueprint 3 */
|
||
display: inline-flex;
|
||
flex-direction: row;
|
||
border: none;
|
||
cursor: pointer;
|
||
align-items: center;
|
||
justify-content: center;
|
||
text-align: left;
|
||
vertical-align: middle;
|
||
min-height: 30px;
|
||
min-width: 30px;
|
||
}
|
||
|
||
.jp-Button:disabled {
|
||
cursor: not-allowed;
|
||
}
|
||
|
||
.jp-Button:empty {
|
||
padding: 0 !important;
|
||
}
|
||
|
||
.jp-Button.jp-mod-small {
|
||
min-height: 24px;
|
||
min-width: 24px;
|
||
font-size: 12px;
|
||
padding: 0 7px;
|
||
}
|
||
|
||
/* Use our own theme for hover styles */
|
||
.jp-Button.jp-mod-minimal:hover {
|
||
background-color: var(--jp-layout-color2);
|
||
}
|
||
|
||
.jp-Button.jp-mod-minimal {
|
||
background: none;
|
||
}
|
||
|
||
.jp-InputGroup {
|
||
display: block;
|
||
position: relative;
|
||
}
|
||
|
||
.jp-InputGroup input {
|
||
box-sizing: border-box;
|
||
border: none;
|
||
border-radius: 0;
|
||
background-color: transparent;
|
||
color: var(--jp-ui-font-color0);
|
||
box-shadow: inset 0 0 0 var(--jp-border-width) var(--jp-input-border-color);
|
||
padding-bottom: 0;
|
||
padding-top: 0;
|
||
padding-left: 10px;
|
||
padding-right: 28px;
|
||
position: relative;
|
||
width: 100%;
|
||
-webkit-appearance: none;
|
||
-moz-appearance: none;
|
||
appearance: none;
|
||
font-size: 14px;
|
||
font-weight: 400;
|
||
height: 30px;
|
||
line-height: 30px;
|
||
outline: none;
|
||
vertical-align: middle;
|
||
}
|
||
|
||
.jp-InputGroup input:focus {
|
||
box-shadow: inset 0 0 0 var(--jp-border-width)
|
||
var(--jp-input-active-box-shadow-color),
|
||
inset 0 0 0 3px var(--jp-input-active-box-shadow-color);
|
||
}
|
||
|
||
.jp-InputGroup input:disabled {
|
||
cursor: not-allowed;
|
||
resize: block;
|
||
background-color: var(--jp-layout-color2);
|
||
color: var(--jp-ui-font-color2);
|
||
}
|
||
|
||
.jp-InputGroup input:disabled ~ span {
|
||
cursor: not-allowed;
|
||
color: var(--jp-ui-font-color2);
|
||
}
|
||
|
||
.jp-InputGroup input::placeholder,
|
||
input::placeholder {
|
||
color: var(--jp-ui-font-color2);
|
||
}
|
||
|
||
.jp-InputGroupAction {
|
||
position: absolute;
|
||
bottom: 1px;
|
||
right: 0;
|
||
padding: 6px;
|
||
}
|
||
|
||
.jp-HTMLSelect.jp-DefaultStyle select {
|
||
background-color: initial;
|
||
border: none;
|
||
border-radius: 0;
|
||
box-shadow: none;
|
||
color: var(--jp-ui-font-color0);
|
||
display: block;
|
||
font-size: var(--jp-ui-font-size1);
|
||
font-family: var(--jp-ui-font-family);
|
||
height: 24px;
|
||
line-height: 14px;
|
||
padding: 0 25px 0 10px;
|
||
text-align: left;
|
||
-moz-appearance: none;
|
||
-webkit-appearance: none;
|
||
}
|
||
|
||
.jp-HTMLSelect.jp-DefaultStyle select:disabled {
|
||
background-color: var(--jp-layout-color2);
|
||
color: var(--jp-ui-font-color2);
|
||
cursor: not-allowed;
|
||
resize: block;
|
||
}
|
||
|
||
.jp-HTMLSelect.jp-DefaultStyle select:disabled ~ span {
|
||
cursor: not-allowed;
|
||
}
|
||
|
||
/* Use our own theme for hover and option styles */
|
||
/* stylelint-disable-next-line selector-max-type */
|
||
.jp-HTMLSelect.jp-DefaultStyle select:hover,
|
||
.jp-HTMLSelect.jp-DefaultStyle select > option {
|
||
background-color: var(--jp-layout-color2);
|
||
color: var(--jp-ui-font-color0);
|
||
}
|
||
|
||
select {
|
||
box-sizing: border-box;
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Copyright (c) Jupyter Development Team.
|
||
| Distributed under the terms of the Modified BSD License.
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Styles
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
.jp-StatusBar-Widget {
|
||
display: flex;
|
||
align-items: center;
|
||
background: var(--jp-layout-color2);
|
||
min-height: var(--jp-statusbar-height);
|
||
justify-content: space-between;
|
||
padding: 0 10px;
|
||
}
|
||
|
||
.jp-StatusBar-Left {
|
||
display: flex;
|
||
align-items: center;
|
||
flex-direction: row;
|
||
}
|
||
|
||
.jp-StatusBar-Middle {
|
||
display: flex;
|
||
align-items: center;
|
||
}
|
||
|
||
.jp-StatusBar-Right {
|
||
display: flex;
|
||
align-items: center;
|
||
flex-direction: row-reverse;
|
||
}
|
||
|
||
.jp-StatusBar-Item {
|
||
max-height: var(--jp-statusbar-height);
|
||
margin: 0 2px;
|
||
height: var(--jp-statusbar-height);
|
||
white-space: nowrap;
|
||
text-overflow: ellipsis;
|
||
color: var(--jp-ui-font-color1);
|
||
padding: 0 6px;
|
||
}
|
||
|
||
.jp-mod-highlighted:hover {
|
||
background-color: var(--jp-layout-color3);
|
||
}
|
||
|
||
.jp-mod-clicked {
|
||
background-color: var(--jp-brand-color1);
|
||
}
|
||
|
||
.jp-mod-clicked:hover {
|
||
background-color: var(--jp-brand-color0);
|
||
}
|
||
|
||
.jp-mod-clicked .jp-StatusBar-TextItem {
|
||
color: var(--jp-ui-inverse-font-color1);
|
||
}
|
||
|
||
.jp-StatusBar-HoverItem {
|
||
box-shadow: '0px 4px 4px rgba(0, 0, 0, 0.25)';
|
||
}
|
||
|
||
.jp-StatusBar-TextItem {
|
||
font-size: var(--jp-ui-font-size1);
|
||
font-family: var(--jp-ui-font-family);
|
||
line-height: 24px;
|
||
color: var(--jp-ui-font-color1);
|
||
}
|
||
|
||
.jp-StatusBar-GroupItem {
|
||
display: flex;
|
||
align-items: center;
|
||
flex-direction: row;
|
||
}
|
||
|
||
.jp-Statusbar-ProgressCircle svg {
|
||
display: block;
|
||
margin: 0 auto;
|
||
width: 16px;
|
||
height: 24px;
|
||
align-self: normal;
|
||
}
|
||
|
||
.jp-Statusbar-ProgressCircle path {
|
||
fill: var(--jp-inverse-layout-color3);
|
||
}
|
||
|
||
.jp-Statusbar-ProgressBar-progress-bar {
|
||
height: 10px;
|
||
width: 100px;
|
||
border: solid 0.25px var(--jp-brand-color2);
|
||
border-radius: 3px;
|
||
overflow: hidden;
|
||
align-self: center;
|
||
}
|
||
|
||
.jp-Statusbar-ProgressBar-progress-bar > div {
|
||
background-color: var(--jp-brand-color2);
|
||
background-image: linear-gradient(
|
||
-45deg,
|
||
rgba(255, 255, 255, 0.2) 25%,
|
||
transparent 25%,
|
||
transparent 50%,
|
||
rgba(255, 255, 255, 0.2) 50%,
|
||
rgba(255, 255, 255, 0.2) 75%,
|
||
transparent 75%,
|
||
transparent
|
||
);
|
||
background-size: 40px 40px;
|
||
float: left;
|
||
width: 0%;
|
||
height: 100%;
|
||
font-size: 12px;
|
||
line-height: 14px;
|
||
color: #fff;
|
||
text-align: center;
|
||
animation: jp-Statusbar-ExecutionTime-progress-bar 2s linear infinite;
|
||
}
|
||
|
||
.jp-Statusbar-ProgressBar-progress-bar p {
|
||
color: var(--jp-ui-font-color1);
|
||
font-family: var(--jp-ui-font-family);
|
||
font-size: var(--jp-ui-font-size1);
|
||
line-height: 10px;
|
||
width: 100px;
|
||
}
|
||
|
||
@keyframes jp-Statusbar-ExecutionTime-progress-bar {
|
||
0% {
|
||
background-position: 0 0;
|
||
}
|
||
|
||
100% {
|
||
background-position: 40px 40px;
|
||
}
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Copyright (c) Jupyter Development Team.
|
||
| Distributed under the terms of the Modified BSD License.
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Variables
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
:root {
|
||
--jp-private-commandpalette-search-height: 28px;
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Overall styles
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
.lm-CommandPalette {
|
||
padding-bottom: 0;
|
||
color: var(--jp-ui-font-color1);
|
||
background: var(--jp-layout-color1);
|
||
|
||
/* This is needed so that all font sizing of children done in ems is
|
||
* relative to this base size */
|
||
font-size: var(--jp-ui-font-size1);
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Modal variant
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
.jp-ModalCommandPalette {
|
||
position: absolute;
|
||
z-index: 10000;
|
||
top: 38px;
|
||
left: 30%;
|
||
margin: 0;
|
||
padding: 4px;
|
||
width: 40%;
|
||
box-shadow: var(--jp-elevation-z4);
|
||
border-radius: 4px;
|
||
background: var(--jp-layout-color0);
|
||
}
|
||
|
||
.jp-ModalCommandPalette .lm-CommandPalette {
|
||
max-height: 40vh;
|
||
}
|
||
|
||
.jp-ModalCommandPalette .lm-CommandPalette .lm-close-icon::after {
|
||
display: none;
|
||
}
|
||
|
||
.jp-ModalCommandPalette .lm-CommandPalette .lm-CommandPalette-header {
|
||
display: none;
|
||
}
|
||
|
||
.jp-ModalCommandPalette .lm-CommandPalette .lm-CommandPalette-item {
|
||
margin-left: 4px;
|
||
margin-right: 4px;
|
||
}
|
||
|
||
.jp-ModalCommandPalette
|
||
.lm-CommandPalette
|
||
.lm-CommandPalette-item.lm-mod-disabled {
|
||
display: none;
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Search
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
.lm-CommandPalette-search {
|
||
padding: 4px;
|
||
background-color: var(--jp-layout-color1);
|
||
z-index: 2;
|
||
}
|
||
|
||
.lm-CommandPalette-wrapper {
|
||
overflow: overlay;
|
||
padding: 0 9px;
|
||
background-color: var(--jp-input-active-background);
|
||
height: 30px;
|
||
box-shadow: inset 0 0 0 var(--jp-border-width) var(--jp-input-border-color);
|
||
}
|
||
|
||
.lm-CommandPalette.lm-mod-focused .lm-CommandPalette-wrapper {
|
||
box-shadow: inset 0 0 0 1px var(--jp-input-active-box-shadow-color),
|
||
inset 0 0 0 3px var(--jp-input-active-box-shadow-color);
|
||
}
|
||
|
||
.jp-SearchIconGroup {
|
||
color: white;
|
||
background-color: var(--jp-brand-color1);
|
||
position: absolute;
|
||
top: 4px;
|
||
right: 4px;
|
||
padding: 5px 5px 1px;
|
||
}
|
||
|
||
.jp-SearchIconGroup svg {
|
||
height: 20px;
|
||
width: 20px;
|
||
}
|
||
|
||
.jp-SearchIconGroup .jp-icon3[fill] {
|
||
fill: var(--jp-layout-color0);
|
||
}
|
||
|
||
.lm-CommandPalette-input {
|
||
background: transparent;
|
||
width: calc(100% - 18px);
|
||
float: left;
|
||
border: none;
|
||
outline: none;
|
||
font-size: var(--jp-ui-font-size1);
|
||
color: var(--jp-ui-font-color0);
|
||
line-height: var(--jp-private-commandpalette-search-height);
|
||
}
|
||
|
||
.lm-CommandPalette-input::-webkit-input-placeholder,
|
||
.lm-CommandPalette-input::-moz-placeholder,
|
||
.lm-CommandPalette-input:-ms-input-placeholder {
|
||
color: var(--jp-ui-font-color2);
|
||
font-size: var(--jp-ui-font-size1);
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Results
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
.lm-CommandPalette-header:first-child {
|
||
margin-top: 0;
|
||
}
|
||
|
||
.lm-CommandPalette-header {
|
||
border-bottom: solid var(--jp-border-width) var(--jp-border-color2);
|
||
color: var(--jp-ui-font-color1);
|
||
cursor: pointer;
|
||
display: flex;
|
||
font-size: var(--jp-ui-font-size0);
|
||
font-weight: 600;
|
||
letter-spacing: 1px;
|
||
margin-top: 8px;
|
||
padding: 8px 0 8px 12px;
|
||
text-transform: uppercase;
|
||
}
|
||
|
||
.lm-CommandPalette-header.lm-mod-active {
|
||
background: var(--jp-layout-color2);
|
||
}
|
||
|
||
.lm-CommandPalette-header > mark {
|
||
background-color: transparent;
|
||
font-weight: bold;
|
||
color: var(--jp-ui-font-color1);
|
||
}
|
||
|
||
.lm-CommandPalette-item {
|
||
padding: 4px 12px 4px 4px;
|
||
color: var(--jp-ui-font-color1);
|
||
font-size: var(--jp-ui-font-size1);
|
||
font-weight: 400;
|
||
display: flex;
|
||
}
|
||
|
||
.lm-CommandPalette-item.lm-mod-disabled {
|
||
color: var(--jp-ui-font-color2);
|
||
}
|
||
|
||
.lm-CommandPalette-item.lm-mod-active {
|
||
color: var(--jp-ui-inverse-font-color1);
|
||
background: var(--jp-brand-color1);
|
||
}
|
||
|
||
.lm-CommandPalette-item.lm-mod-active .lm-CommandPalette-itemLabel > mark {
|
||
color: var(--jp-ui-inverse-font-color0);
|
||
}
|
||
|
||
.lm-CommandPalette-item.lm-mod-active .jp-icon-selectable[fill] {
|
||
fill: var(--jp-layout-color0);
|
||
}
|
||
|
||
.lm-CommandPalette-item.lm-mod-active:hover:not(.lm-mod-disabled) {
|
||
color: var(--jp-ui-inverse-font-color1);
|
||
background: var(--jp-brand-color1);
|
||
}
|
||
|
||
.lm-CommandPalette-item:hover:not(.lm-mod-active):not(.lm-mod-disabled) {
|
||
background: var(--jp-layout-color2);
|
||
}
|
||
|
||
.lm-CommandPalette-itemContent {
|
||
overflow: hidden;
|
||
}
|
||
|
||
.lm-CommandPalette-itemLabel > mark {
|
||
color: var(--jp-ui-font-color0);
|
||
background-color: transparent;
|
||
font-weight: bold;
|
||
}
|
||
|
||
.lm-CommandPalette-item.lm-mod-disabled mark {
|
||
color: var(--jp-ui-font-color2);
|
||
}
|
||
|
||
.lm-CommandPalette-item .lm-CommandPalette-itemIcon {
|
||
margin: 0 4px 0 0;
|
||
position: relative;
|
||
width: 16px;
|
||
top: 2px;
|
||
flex: 0 0 auto;
|
||
}
|
||
|
||
.lm-CommandPalette-item.lm-mod-disabled .lm-CommandPalette-itemIcon {
|
||
opacity: 0.6;
|
||
}
|
||
|
||
.lm-CommandPalette-item .lm-CommandPalette-itemShortcut {
|
||
flex: 0 0 auto;
|
||
}
|
||
|
||
.lm-CommandPalette-itemCaption {
|
||
display: none;
|
||
}
|
||
|
||
.lm-CommandPalette-content {
|
||
background-color: var(--jp-layout-color1);
|
||
}
|
||
|
||
.lm-CommandPalette-content:empty::after {
|
||
content: 'No results';
|
||
margin: auto;
|
||
margin-top: 20px;
|
||
width: 100px;
|
||
display: block;
|
||
font-size: var(--jp-ui-font-size2);
|
||
font-family: var(--jp-ui-font-family);
|
||
font-weight: lighter;
|
||
}
|
||
|
||
.lm-CommandPalette-emptyMessage {
|
||
text-align: center;
|
||
margin-top: 24px;
|
||
line-height: 1.32;
|
||
padding: 0 8px;
|
||
color: var(--jp-content-font-color3);
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Copyright (c) 2014-2017, Jupyter Development Team.
|
||
|
|
||
| Distributed under the terms of the Modified BSD License.
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
.jp-Dialog {
|
||
position: absolute;
|
||
z-index: 10000;
|
||
display: flex;
|
||
flex-direction: column;
|
||
align-items: center;
|
||
justify-content: center;
|
||
top: 0;
|
||
left: 0;
|
||
margin: 0;
|
||
padding: 0;
|
||
width: 100%;
|
||
height: 100%;
|
||
background: var(--jp-dialog-background);
|
||
}
|
||
|
||
.jp-Dialog-content {
|
||
display: flex;
|
||
flex-direction: column;
|
||
margin-left: auto;
|
||
margin-right: auto;
|
||
background: var(--jp-layout-color1);
|
||
padding: 24px 24px 12px;
|
||
min-width: 300px;
|
||
min-height: 150px;
|
||
max-width: 1000px;
|
||
max-height: 500px;
|
||
box-sizing: border-box;
|
||
box-shadow: var(--jp-elevation-z20);
|
||
word-wrap: break-word;
|
||
border-radius: var(--jp-border-radius);
|
||
|
||
/* This is needed so that all font sizing of children done in ems is
|
||
* relative to this base size */
|
||
font-size: var(--jp-ui-font-size1);
|
||
color: var(--jp-ui-font-color1);
|
||
resize: both;
|
||
}
|
||
|
||
.jp-Dialog-content.jp-Dialog-content-small {
|
||
max-width: 500px;
|
||
}
|
||
|
||
.jp-Dialog-button {
|
||
overflow: visible;
|
||
}
|
||
|
||
button.jp-Dialog-button:focus {
|
||
outline: 1px solid var(--jp-brand-color1);
|
||
outline-offset: 4px;
|
||
-moz-outline-radius: 0;
|
||
}
|
||
|
||
button.jp-Dialog-button:focus::-moz-focus-inner {
|
||
border: 0;
|
||
}
|
||
|
||
button.jp-Dialog-button.jp-mod-styled.jp-mod-accept:focus,
|
||
button.jp-Dialog-button.jp-mod-styled.jp-mod-warn:focus,
|
||
button.jp-Dialog-button.jp-mod-styled.jp-mod-reject:focus {
|
||
outline-offset: 4px;
|
||
-moz-outline-radius: 0;
|
||
}
|
||
|
||
button.jp-Dialog-button.jp-mod-styled.jp-mod-accept:focus {
|
||
outline: 1px solid var(--jp-accept-color-normal, var(--jp-brand-color1));
|
||
}
|
||
|
||
button.jp-Dialog-button.jp-mod-styled.jp-mod-warn:focus {
|
||
outline: 1px solid var(--jp-warn-color-normal, var(--jp-error-color1));
|
||
}
|
||
|
||
button.jp-Dialog-button.jp-mod-styled.jp-mod-reject:focus {
|
||
outline: 1px solid var(--jp-reject-color-normal, var(--md-grey-600));
|
||
}
|
||
|
||
button.jp-Dialog-close-button {
|
||
padding: 0;
|
||
height: 100%;
|
||
min-width: unset;
|
||
min-height: unset;
|
||
}
|
||
|
||
.jp-Dialog-header {
|
||
display: flex;
|
||
justify-content: space-between;
|
||
flex: 0 0 auto;
|
||
padding-bottom: 12px;
|
||
font-size: var(--jp-ui-font-size3);
|
||
font-weight: 400;
|
||
color: var(--jp-ui-font-color1);
|
||
}
|
||
|
||
.jp-Dialog-body {
|
||
display: flex;
|
||
flex-direction: column;
|
||
flex: 1 1 auto;
|
||
font-size: var(--jp-ui-font-size1);
|
||
background: var(--jp-layout-color1);
|
||
color: var(--jp-ui-font-color1);
|
||
overflow: auto;
|
||
}
|
||
|
||
.jp-Dialog-footer {
|
||
display: flex;
|
||
flex-direction: row;
|
||
justify-content: flex-end;
|
||
align-items: center;
|
||
flex: 0 0 auto;
|
||
margin-left: -12px;
|
||
margin-right: -12px;
|
||
padding: 12px;
|
||
}
|
||
|
||
.jp-Dialog-checkbox {
|
||
padding-right: 5px;
|
||
}
|
||
|
||
.jp-Dialog-checkbox > input:focus-visible {
|
||
outline: 1px solid var(--jp-input-active-border-color);
|
||
outline-offset: 1px;
|
||
}
|
||
|
||
.jp-Dialog-spacer {
|
||
flex: 1 1 auto;
|
||
}
|
||
|
||
.jp-Dialog-title {
|
||
overflow: hidden;
|
||
white-space: nowrap;
|
||
text-overflow: ellipsis;
|
||
}
|
||
|
||
.jp-Dialog-body > .jp-select-wrapper {
|
||
width: 100%;
|
||
}
|
||
|
||
.jp-Dialog-body > button {
|
||
padding: 0 16px;
|
||
}
|
||
|
||
.jp-Dialog-body > label {
|
||
line-height: 1.4;
|
||
color: var(--jp-ui-font-color0);
|
||
}
|
||
|
||
.jp-Dialog-button.jp-mod-styled:not(:last-child) {
|
||
margin-right: 12px;
|
||
}
|
||
|
||
/*
|
||
* Copyright (c) Jupyter Development Team.
|
||
* Distributed under the terms of the Modified BSD License.
|
||
*/
|
||
|
||
.jp-Input-Boolean-Dialog {
|
||
flex-direction: row-reverse;
|
||
align-items: end;
|
||
width: 100%;
|
||
}
|
||
|
||
.jp-Input-Boolean-Dialog > label {
|
||
flex: 1 1 auto;
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Copyright (c) 2014-2016, Jupyter Development Team.
|
||
|
|
||
| Distributed under the terms of the Modified BSD License.
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
.jp-MainAreaWidget > :focus {
|
||
outline: none;
|
||
}
|
||
|
||
.jp-MainAreaWidget .jp-MainAreaWidget-error {
|
||
padding: 6px;
|
||
}
|
||
|
||
.jp-MainAreaWidget .jp-MainAreaWidget-error > pre {
|
||
width: auto;
|
||
padding: 10px;
|
||
background: var(--jp-error-color3);
|
||
border: var(--jp-border-width) solid var(--jp-error-color1);
|
||
border-radius: var(--jp-border-radius);
|
||
color: var(--jp-ui-font-color1);
|
||
font-size: var(--jp-ui-font-size1);
|
||
white-space: pre-wrap;
|
||
word-wrap: break-word;
|
||
}
|
||
|
||
/*
|
||
* Copyright (c) Jupyter Development Team.
|
||
* Distributed under the terms of the Modified BSD License.
|
||
*/
|
||
|
||
/**
|
||
* google-material-color v1.2.6
|
||
* https://github.com/danlevan/google-material-color
|
||
*/
|
||
:root {
|
||
--md-red-50: #ffebee;
|
||
--md-red-100: #ffcdd2;
|
||
--md-red-200: #ef9a9a;
|
||
--md-red-300: #e57373;
|
||
--md-red-400: #ef5350;
|
||
--md-red-500: #f44336;
|
||
--md-red-600: #e53935;
|
||
--md-red-700: #d32f2f;
|
||
--md-red-800: #c62828;
|
||
--md-red-900: #b71c1c;
|
||
--md-red-A100: #ff8a80;
|
||
--md-red-A200: #ff5252;
|
||
--md-red-A400: #ff1744;
|
||
--md-red-A700: #d50000;
|
||
--md-pink-50: #fce4ec;
|
||
--md-pink-100: #f8bbd0;
|
||
--md-pink-200: #f48fb1;
|
||
--md-pink-300: #f06292;
|
||
--md-pink-400: #ec407a;
|
||
--md-pink-500: #e91e63;
|
||
--md-pink-600: #d81b60;
|
||
--md-pink-700: #c2185b;
|
||
--md-pink-800: #ad1457;
|
||
--md-pink-900: #880e4f;
|
||
--md-pink-A100: #ff80ab;
|
||
--md-pink-A200: #ff4081;
|
||
--md-pink-A400: #f50057;
|
||
--md-pink-A700: #c51162;
|
||
--md-purple-50: #f3e5f5;
|
||
--md-purple-100: #e1bee7;
|
||
--md-purple-200: #ce93d8;
|
||
--md-purple-300: #ba68c8;
|
||
--md-purple-400: #ab47bc;
|
||
--md-purple-500: #9c27b0;
|
||
--md-purple-600: #8e24aa;
|
||
--md-purple-700: #7b1fa2;
|
||
--md-purple-800: #6a1b9a;
|
||
--md-purple-900: #4a148c;
|
||
--md-purple-A100: #ea80fc;
|
||
--md-purple-A200: #e040fb;
|
||
--md-purple-A400: #d500f9;
|
||
--md-purple-A700: #a0f;
|
||
--md-deep-purple-50: #ede7f6;
|
||
--md-deep-purple-100: #d1c4e9;
|
||
--md-deep-purple-200: #b39ddb;
|
||
--md-deep-purple-300: #9575cd;
|
||
--md-deep-purple-400: #7e57c2;
|
||
--md-deep-purple-500: #673ab7;
|
||
--md-deep-purple-600: #5e35b1;
|
||
--md-deep-purple-700: #512da8;
|
||
--md-deep-purple-800: #4527a0;
|
||
--md-deep-purple-900: #311b92;
|
||
--md-deep-purple-A100: #b388ff;
|
||
--md-deep-purple-A200: #7c4dff;
|
||
--md-deep-purple-A400: #651fff;
|
||
--md-deep-purple-A700: #6200ea;
|
||
--md-indigo-50: #e8eaf6;
|
||
--md-indigo-100: #c5cae9;
|
||
--md-indigo-200: #9fa8da;
|
||
--md-indigo-300: #7986cb;
|
||
--md-indigo-400: #5c6bc0;
|
||
--md-indigo-500: #3f51b5;
|
||
--md-indigo-600: #3949ab;
|
||
--md-indigo-700: #303f9f;
|
||
--md-indigo-800: #283593;
|
||
--md-indigo-900: #1a237e;
|
||
--md-indigo-A100: #8c9eff;
|
||
--md-indigo-A200: #536dfe;
|
||
--md-indigo-A400: #3d5afe;
|
||
--md-indigo-A700: #304ffe;
|
||
--md-blue-50: #e3f2fd;
|
||
--md-blue-100: #bbdefb;
|
||
--md-blue-200: #90caf9;
|
||
--md-blue-300: #64b5f6;
|
||
--md-blue-400: #42a5f5;
|
||
--md-blue-500: #2196f3;
|
||
--md-blue-600: #1e88e5;
|
||
--md-blue-700: #1976d2;
|
||
--md-blue-800: #1565c0;
|
||
--md-blue-900: #0d47a1;
|
||
--md-blue-A100: #82b1ff;
|
||
--md-blue-A200: #448aff;
|
||
--md-blue-A400: #2979ff;
|
||
--md-blue-A700: #2962ff;
|
||
--md-light-blue-50: #e1f5fe;
|
||
--md-light-blue-100: #b3e5fc;
|
||
--md-light-blue-200: #81d4fa;
|
||
--md-light-blue-300: #4fc3f7;
|
||
--md-light-blue-400: #29b6f6;
|
||
--md-light-blue-500: #03a9f4;
|
||
--md-light-blue-600: #039be5;
|
||
--md-light-blue-700: #0288d1;
|
||
--md-light-blue-800: #0277bd;
|
||
--md-light-blue-900: #01579b;
|
||
--md-light-blue-A100: #80d8ff;
|
||
--md-light-blue-A200: #40c4ff;
|
||
--md-light-blue-A400: #00b0ff;
|
||
--md-light-blue-A700: #0091ea;
|
||
--md-cyan-50: #e0f7fa;
|
||
--md-cyan-100: #b2ebf2;
|
||
--md-cyan-200: #80deea;
|
||
--md-cyan-300: #4dd0e1;
|
||
--md-cyan-400: #26c6da;
|
||
--md-cyan-500: #00bcd4;
|
||
--md-cyan-600: #00acc1;
|
||
--md-cyan-700: #0097a7;
|
||
--md-cyan-800: #00838f;
|
||
--md-cyan-900: #006064;
|
||
--md-cyan-A100: #84ffff;
|
||
--md-cyan-A200: #18ffff;
|
||
--md-cyan-A400: #00e5ff;
|
||
--md-cyan-A700: #00b8d4;
|
||
--md-teal-50: #e0f2f1;
|
||
--md-teal-100: #b2dfdb;
|
||
--md-teal-200: #80cbc4;
|
||
--md-teal-300: #4db6ac;
|
||
--md-teal-400: #26a69a;
|
||
--md-teal-500: #009688;
|
||
--md-teal-600: #00897b;
|
||
--md-teal-700: #00796b;
|
||
--md-teal-800: #00695c;
|
||
--md-teal-900: #004d40;
|
||
--md-teal-A100: #a7ffeb;
|
||
--md-teal-A200: #64ffda;
|
||
--md-teal-A400: #1de9b6;
|
||
--md-teal-A700: #00bfa5;
|
||
--md-green-50: #e8f5e9;
|
||
--md-green-100: #c8e6c9;
|
||
--md-green-200: #a5d6a7;
|
||
--md-green-300: #81c784;
|
||
--md-green-400: #66bb6a;
|
||
--md-green-500: #4caf50;
|
||
--md-green-600: #43a047;
|
||
--md-green-700: #388e3c;
|
||
--md-green-800: #2e7d32;
|
||
--md-green-900: #1b5e20;
|
||
--md-green-A100: #b9f6ca;
|
||
--md-green-A200: #69f0ae;
|
||
--md-green-A400: #00e676;
|
||
--md-green-A700: #00c853;
|
||
--md-light-green-50: #f1f8e9;
|
||
--md-light-green-100: #dcedc8;
|
||
--md-light-green-200: #c5e1a5;
|
||
--md-light-green-300: #aed581;
|
||
--md-light-green-400: #9ccc65;
|
||
--md-light-green-500: #8bc34a;
|
||
--md-light-green-600: #7cb342;
|
||
--md-light-green-700: #689f38;
|
||
--md-light-green-800: #558b2f;
|
||
--md-light-green-900: #33691e;
|
||
--md-light-green-A100: #ccff90;
|
||
--md-light-green-A200: #b2ff59;
|
||
--md-light-green-A400: #76ff03;
|
||
--md-light-green-A700: #64dd17;
|
||
--md-lime-50: #f9fbe7;
|
||
--md-lime-100: #f0f4c3;
|
||
--md-lime-200: #e6ee9c;
|
||
--md-lime-300: #dce775;
|
||
--md-lime-400: #d4e157;
|
||
--md-lime-500: #cddc39;
|
||
--md-lime-600: #c0ca33;
|
||
--md-lime-700: #afb42b;
|
||
--md-lime-800: #9e9d24;
|
||
--md-lime-900: #827717;
|
||
--md-lime-A100: #f4ff81;
|
||
--md-lime-A200: #eeff41;
|
||
--md-lime-A400: #c6ff00;
|
||
--md-lime-A700: #aeea00;
|
||
--md-yellow-50: #fffde7;
|
||
--md-yellow-100: #fff9c4;
|
||
--md-yellow-200: #fff59d;
|
||
--md-yellow-300: #fff176;
|
||
--md-yellow-400: #ffee58;
|
||
--md-yellow-500: #ffeb3b;
|
||
--md-yellow-600: #fdd835;
|
||
--md-yellow-700: #fbc02d;
|
||
--md-yellow-800: #f9a825;
|
||
--md-yellow-900: #f57f17;
|
||
--md-yellow-A100: #ffff8d;
|
||
--md-yellow-A200: #ff0;
|
||
--md-yellow-A400: #ffea00;
|
||
--md-yellow-A700: #ffd600;
|
||
--md-amber-50: #fff8e1;
|
||
--md-amber-100: #ffecb3;
|
||
--md-amber-200: #ffe082;
|
||
--md-amber-300: #ffd54f;
|
||
--md-amber-400: #ffca28;
|
||
--md-amber-500: #ffc107;
|
||
--md-amber-600: #ffb300;
|
||
--md-amber-700: #ffa000;
|
||
--md-amber-800: #ff8f00;
|
||
--md-amber-900: #ff6f00;
|
||
--md-amber-A100: #ffe57f;
|
||
--md-amber-A200: #ffd740;
|
||
--md-amber-A400: #ffc400;
|
||
--md-amber-A700: #ffab00;
|
||
--md-orange-50: #fff3e0;
|
||
--md-orange-100: #ffe0b2;
|
||
--md-orange-200: #ffcc80;
|
||
--md-orange-300: #ffb74d;
|
||
--md-orange-400: #ffa726;
|
||
--md-orange-500: #ff9800;
|
||
--md-orange-600: #fb8c00;
|
||
--md-orange-700: #f57c00;
|
||
--md-orange-800: #ef6c00;
|
||
--md-orange-900: #e65100;
|
||
--md-orange-A100: #ffd180;
|
||
--md-orange-A200: #ffab40;
|
||
--md-orange-A400: #ff9100;
|
||
--md-orange-A700: #ff6d00;
|
||
--md-deep-orange-50: #fbe9e7;
|
||
--md-deep-orange-100: #ffccbc;
|
||
--md-deep-orange-200: #ffab91;
|
||
--md-deep-orange-300: #ff8a65;
|
||
--md-deep-orange-400: #ff7043;
|
||
--md-deep-orange-500: #ff5722;
|
||
--md-deep-orange-600: #f4511e;
|
||
--md-deep-orange-700: #e64a19;
|
||
--md-deep-orange-800: #d84315;
|
||
--md-deep-orange-900: #bf360c;
|
||
--md-deep-orange-A100: #ff9e80;
|
||
--md-deep-orange-A200: #ff6e40;
|
||
--md-deep-orange-A400: #ff3d00;
|
||
--md-deep-orange-A700: #dd2c00;
|
||
--md-brown-50: #efebe9;
|
||
--md-brown-100: #d7ccc8;
|
||
--md-brown-200: #bcaaa4;
|
||
--md-brown-300: #a1887f;
|
||
--md-brown-400: #8d6e63;
|
||
--md-brown-500: #795548;
|
||
--md-brown-600: #6d4c41;
|
||
--md-brown-700: #5d4037;
|
||
--md-brown-800: #4e342e;
|
||
--md-brown-900: #3e2723;
|
||
--md-grey-50: #fafafa;
|
||
--md-grey-100: #f5f5f5;
|
||
--md-grey-200: #eee;
|
||
--md-grey-300: #e0e0e0;
|
||
--md-grey-400: #bdbdbd;
|
||
--md-grey-500: #9e9e9e;
|
||
--md-grey-600: #757575;
|
||
--md-grey-700: #616161;
|
||
--md-grey-800: #424242;
|
||
--md-grey-900: #212121;
|
||
--md-blue-grey-50: #eceff1;
|
||
--md-blue-grey-100: #cfd8dc;
|
||
--md-blue-grey-200: #b0bec5;
|
||
--md-blue-grey-300: #90a4ae;
|
||
--md-blue-grey-400: #78909c;
|
||
--md-blue-grey-500: #607d8b;
|
||
--md-blue-grey-600: #546e7a;
|
||
--md-blue-grey-700: #455a64;
|
||
--md-blue-grey-800: #37474f;
|
||
--md-blue-grey-900: #263238;
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Copyright (c) 2014-2017, Jupyter Development Team.
|
||
|
|
||
| Distributed under the terms of the Modified BSD License.
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Copyright (c) Jupyter Development Team.
|
||
| Distributed under the terms of the Modified BSD License.
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| RenderedText
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
:root {
|
||
/* This is the padding value to fill the gaps between lines containing spans with background color. */
|
||
--jp-private-code-span-padding: calc(
|
||
(var(--jp-code-line-height) - 1) * var(--jp-code-font-size) / 2
|
||
);
|
||
}
|
||
|
||
.jp-RenderedText {
|
||
text-align: left;
|
||
padding-left: var(--jp-code-padding);
|
||
line-height: var(--jp-code-line-height);
|
||
font-family: var(--jp-code-font-family);
|
||
}
|
||
|
||
.jp-RenderedText pre,
|
||
.jp-RenderedJavaScript pre,
|
||
.jp-RenderedHTMLCommon pre {
|
||
color: var(--jp-content-font-color1);
|
||
font-size: var(--jp-code-font-size);
|
||
border: none;
|
||
margin: 0;
|
||
padding: 0;
|
||
}
|
||
|
||
.jp-RenderedText pre a:link {
|
||
text-decoration: none;
|
||
color: var(--jp-content-link-color);
|
||
}
|
||
|
||
.jp-RenderedText pre a:hover {
|
||
text-decoration: underline;
|
||
color: var(--jp-content-link-color);
|
||
}
|
||
|
||
.jp-RenderedText pre a:visited {
|
||
text-decoration: none;
|
||
color: var(--jp-content-link-color);
|
||
}
|
||
|
||
/* console foregrounds and backgrounds */
|
||
.jp-RenderedText pre .ansi-black-fg {
|
||
color: #3e424d;
|
||
}
|
||
|
||
.jp-RenderedText pre .ansi-red-fg {
|
||
color: #e75c58;
|
||
}
|
||
|
||
.jp-RenderedText pre .ansi-green-fg {
|
||
color: #00a250;
|
||
}
|
||
|
||
.jp-RenderedText pre .ansi-yellow-fg {
|
||
color: #ddb62b;
|
||
}
|
||
|
||
.jp-RenderedText pre .ansi-blue-fg {
|
||
color: #208ffb;
|
||
}
|
||
|
||
.jp-RenderedText pre .ansi-magenta-fg {
|
||
color: #d160c4;
|
||
}
|
||
|
||
.jp-RenderedText pre .ansi-cyan-fg {
|
||
color: #60c6c8;
|
||
}
|
||
|
||
.jp-RenderedText pre .ansi-white-fg {
|
||
color: #c5c1b4;
|
||
}
|
||
|
||
.jp-RenderedText pre .ansi-black-bg {
|
||
background-color: #3e424d;
|
||
padding: var(--jp-private-code-span-padding) 0;
|
||
}
|
||
|
||
.jp-RenderedText pre .ansi-red-bg {
|
||
background-color: #e75c58;
|
||
padding: var(--jp-private-code-span-padding) 0;
|
||
}
|
||
|
||
.jp-RenderedText pre .ansi-green-bg {
|
||
background-color: #00a250;
|
||
padding: var(--jp-private-code-span-padding) 0;
|
||
}
|
||
|
||
.jp-RenderedText pre .ansi-yellow-bg {
|
||
background-color: #ddb62b;
|
||
padding: var(--jp-private-code-span-padding) 0;
|
||
}
|
||
|
||
.jp-RenderedText pre .ansi-blue-bg {
|
||
background-color: #208ffb;
|
||
padding: var(--jp-private-code-span-padding) 0;
|
||
}
|
||
|
||
.jp-RenderedText pre .ansi-magenta-bg {
|
||
background-color: #d160c4;
|
||
padding: var(--jp-private-code-span-padding) 0;
|
||
}
|
||
|
||
.jp-RenderedText pre .ansi-cyan-bg {
|
||
background-color: #60c6c8;
|
||
padding: var(--jp-private-code-span-padding) 0;
|
||
}
|
||
|
||
.jp-RenderedText pre .ansi-white-bg {
|
||
background-color: #c5c1b4;
|
||
padding: var(--jp-private-code-span-padding) 0;
|
||
}
|
||
|
||
.jp-RenderedText pre .ansi-black-intense-fg {
|
||
color: #282c36;
|
||
}
|
||
|
||
.jp-RenderedText pre .ansi-red-intense-fg {
|
||
color: #b22b31;
|
||
}
|
||
|
||
.jp-RenderedText pre .ansi-green-intense-fg {
|
||
color: #007427;
|
||
}
|
||
|
||
.jp-RenderedText pre .ansi-yellow-intense-fg {
|
||
color: #b27d12;
|
||
}
|
||
|
||
.jp-RenderedText pre .ansi-blue-intense-fg {
|
||
color: #0065ca;
|
||
}
|
||
|
||
.jp-RenderedText pre .ansi-magenta-intense-fg {
|
||
color: #a03196;
|
||
}
|
||
|
||
.jp-RenderedText pre .ansi-cyan-intense-fg {
|
||
color: #258f8f;
|
||
}
|
||
|
||
.jp-RenderedText pre .ansi-white-intense-fg {
|
||
color: #a1a6b2;
|
||
}
|
||
|
||
.jp-RenderedText pre .ansi-black-intense-bg {
|
||
background-color: #282c36;
|
||
padding: var(--jp-private-code-span-padding) 0;
|
||
}
|
||
|
||
.jp-RenderedText pre .ansi-red-intense-bg {
|
||
background-color: #b22b31;
|
||
padding: var(--jp-private-code-span-padding) 0;
|
||
}
|
||
|
||
.jp-RenderedText pre .ansi-green-intense-bg {
|
||
background-color: #007427;
|
||
padding: var(--jp-private-code-span-padding) 0;
|
||
}
|
||
|
||
.jp-RenderedText pre .ansi-yellow-intense-bg {
|
||
background-color: #b27d12;
|
||
padding: var(--jp-private-code-span-padding) 0;
|
||
}
|
||
|
||
.jp-RenderedText pre .ansi-blue-intense-bg {
|
||
background-color: #0065ca;
|
||
padding: var(--jp-private-code-span-padding) 0;
|
||
}
|
||
|
||
.jp-RenderedText pre .ansi-magenta-intense-bg {
|
||
background-color: #a03196;
|
||
padding: var(--jp-private-code-span-padding) 0;
|
||
}
|
||
|
||
.jp-RenderedText pre .ansi-cyan-intense-bg {
|
||
background-color: #258f8f;
|
||
padding: var(--jp-private-code-span-padding) 0;
|
||
}
|
||
|
||
.jp-RenderedText pre .ansi-white-intense-bg {
|
||
background-color: #a1a6b2;
|
||
padding: var(--jp-private-code-span-padding) 0;
|
||
}
|
||
|
||
.jp-RenderedText pre .ansi-default-inverse-fg {
|
||
color: var(--jp-ui-inverse-font-color0);
|
||
}
|
||
|
||
.jp-RenderedText pre .ansi-default-inverse-bg {
|
||
background-color: var(--jp-inverse-layout-color0);
|
||
padding: var(--jp-private-code-span-padding) 0;
|
||
}
|
||
|
||
.jp-RenderedText pre .ansi-bold {
|
||
font-weight: bold;
|
||
}
|
||
|
||
.jp-RenderedText pre .ansi-underline {
|
||
text-decoration: underline;
|
||
}
|
||
|
||
.jp-RenderedText[data-mime-type='application/vnd.jupyter.stderr'] {
|
||
background: var(--jp-rendermime-error-background);
|
||
padding-top: var(--jp-code-padding);
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| RenderedLatex
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
.jp-RenderedLatex {
|
||
color: var(--jp-content-font-color1);
|
||
font-size: var(--jp-content-font-size1);
|
||
line-height: var(--jp-content-line-height);
|
||
}
|
||
|
||
/* Left-justify outputs.*/
|
||
.jp-OutputArea-output.jp-RenderedLatex {
|
||
padding: var(--jp-code-padding);
|
||
text-align: left;
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| RenderedHTML
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
.jp-RenderedHTMLCommon {
|
||
color: var(--jp-content-font-color1);
|
||
font-family: var(--jp-content-font-family);
|
||
font-size: var(--jp-content-font-size1);
|
||
line-height: var(--jp-content-line-height);
|
||
|
||
/* Give a bit more R padding on Markdown text to keep line lengths reasonable */
|
||
padding-right: 20px;
|
||
}
|
||
|
||
.jp-RenderedHTMLCommon em {
|
||
font-style: italic;
|
||
}
|
||
|
||
.jp-RenderedHTMLCommon strong {
|
||
font-weight: bold;
|
||
}
|
||
|
||
.jp-RenderedHTMLCommon u {
|
||
text-decoration: underline;
|
||
}
|
||
|
||
.jp-RenderedHTMLCommon a:link {
|
||
text-decoration: none;
|
||
color: var(--jp-content-link-color);
|
||
}
|
||
|
||
.jp-RenderedHTMLCommon a:hover {
|
||
text-decoration: underline;
|
||
color: var(--jp-content-link-color);
|
||
}
|
||
|
||
.jp-RenderedHTMLCommon a:visited {
|
||
text-decoration: none;
|
||
color: var(--jp-content-link-color);
|
||
}
|
||
|
||
/* Headings */
|
||
|
||
.jp-RenderedHTMLCommon h1,
|
||
.jp-RenderedHTMLCommon h2,
|
||
.jp-RenderedHTMLCommon h3,
|
||
.jp-RenderedHTMLCommon h4,
|
||
.jp-RenderedHTMLCommon h5,
|
||
.jp-RenderedHTMLCommon h6 {
|
||
line-height: var(--jp-content-heading-line-height);
|
||
font-weight: var(--jp-content-heading-font-weight);
|
||
font-style: normal;
|
||
margin: var(--jp-content-heading-margin-top) 0
|
||
var(--jp-content-heading-margin-bottom) 0;
|
||
}
|
||
|
||
.jp-RenderedHTMLCommon h1:first-child,
|
||
.jp-RenderedHTMLCommon h2:first-child,
|
||
.jp-RenderedHTMLCommon h3:first-child,
|
||
.jp-RenderedHTMLCommon h4:first-child,
|
||
.jp-RenderedHTMLCommon h5:first-child,
|
||
.jp-RenderedHTMLCommon h6:first-child {
|
||
margin-top: calc(0.5 * var(--jp-content-heading-margin-top));
|
||
}
|
||
|
||
.jp-RenderedHTMLCommon h1:last-child,
|
||
.jp-RenderedHTMLCommon h2:last-child,
|
||
.jp-RenderedHTMLCommon h3:last-child,
|
||
.jp-RenderedHTMLCommon h4:last-child,
|
||
.jp-RenderedHTMLCommon h5:last-child,
|
||
.jp-RenderedHTMLCommon h6:last-child {
|
||
margin-bottom: calc(0.5 * var(--jp-content-heading-margin-bottom));
|
||
}
|
||
|
||
.jp-RenderedHTMLCommon h1 {
|
||
font-size: var(--jp-content-font-size5);
|
||
}
|
||
|
||
.jp-RenderedHTMLCommon h2 {
|
||
font-size: var(--jp-content-font-size4);
|
||
}
|
||
|
||
.jp-RenderedHTMLCommon h3 {
|
||
font-size: var(--jp-content-font-size3);
|
||
}
|
||
|
||
.jp-RenderedHTMLCommon h4 {
|
||
font-size: var(--jp-content-font-size2);
|
||
}
|
||
|
||
.jp-RenderedHTMLCommon h5 {
|
||
font-size: var(--jp-content-font-size1);
|
||
}
|
||
|
||
.jp-RenderedHTMLCommon h6 {
|
||
font-size: var(--jp-content-font-size0);
|
||
}
|
||
|
||
/* Lists */
|
||
|
||
/* stylelint-disable selector-max-type, selector-max-compound-selectors */
|
||
|
||
.jp-RenderedHTMLCommon ul:not(.list-inline),
|
||
.jp-RenderedHTMLCommon ol:not(.list-inline) {
|
||
padding-left: 2em;
|
||
}
|
||
|
||
.jp-RenderedHTMLCommon ul {
|
||
list-style: disc;
|
||
}
|
||
|
||
.jp-RenderedHTMLCommon ul ul {
|
||
list-style: square;
|
||
}
|
||
|
||
.jp-RenderedHTMLCommon ul ul ul {
|
||
list-style: circle;
|
||
}
|
||
|
||
.jp-RenderedHTMLCommon ol {
|
||
list-style: decimal;
|
||
}
|
||
|
||
.jp-RenderedHTMLCommon ol ol {
|
||
list-style: upper-alpha;
|
||
}
|
||
|
||
.jp-RenderedHTMLCommon ol ol ol {
|
||
list-style: lower-alpha;
|
||
}
|
||
|
||
.jp-RenderedHTMLCommon ol ol ol ol {
|
||
list-style: lower-roman;
|
||
}
|
||
|
||
.jp-RenderedHTMLCommon ol ol ol ol ol {
|
||
list-style: decimal;
|
||
}
|
||
|
||
.jp-RenderedHTMLCommon ol,
|
||
.jp-RenderedHTMLCommon ul {
|
||
margin-bottom: 1em;
|
||
}
|
||
|
||
.jp-RenderedHTMLCommon ul ul,
|
||
.jp-RenderedHTMLCommon ul ol,
|
||
.jp-RenderedHTMLCommon ol ul,
|
||
.jp-RenderedHTMLCommon ol ol {
|
||
margin-bottom: 0;
|
||
}
|
||
|
||
/* stylelint-enable selector-max-type, selector-max-compound-selectors */
|
||
|
||
.jp-RenderedHTMLCommon hr {
|
||
color: var(--jp-border-color2);
|
||
background-color: var(--jp-border-color1);
|
||
margin-top: 1em;
|
||
margin-bottom: 1em;
|
||
}
|
||
|
||
.jp-RenderedHTMLCommon > pre {
|
||
margin: 1.5em 2em;
|
||
}
|
||
|
||
.jp-RenderedHTMLCommon pre,
|
||
.jp-RenderedHTMLCommon code {
|
||
border: 0;
|
||
background-color: var(--jp-layout-color0);
|
||
color: var(--jp-content-font-color1);
|
||
font-family: var(--jp-code-font-family);
|
||
font-size: inherit;
|
||
line-height: var(--jp-code-line-height);
|
||
padding: 0;
|
||
white-space: pre-wrap;
|
||
}
|
||
|
||
.jp-RenderedHTMLCommon :not(pre) > code {
|
||
background-color: var(--jp-layout-color2);
|
||
padding: 1px 5px;
|
||
}
|
||
|
||
/* Tables */
|
||
|
||
.jp-RenderedHTMLCommon table {
|
||
border-collapse: collapse;
|
||
border-spacing: 0;
|
||
border: none;
|
||
color: var(--jp-ui-font-color1);
|
||
font-size: var(--jp-ui-font-size1);
|
||
table-layout: fixed;
|
||
margin-left: auto;
|
||
margin-bottom: 1em;
|
||
margin-right: auto;
|
||
}
|
||
|
||
.jp-RenderedHTMLCommon thead {
|
||
border-bottom: var(--jp-border-width) solid var(--jp-border-color1);
|
||
vertical-align: bottom;
|
||
}
|
||
|
||
.jp-RenderedHTMLCommon td,
|
||
.jp-RenderedHTMLCommon th,
|
||
.jp-RenderedHTMLCommon tr {
|
||
vertical-align: middle;
|
||
padding: 0.5em;
|
||
line-height: normal;
|
||
white-space: normal;
|
||
max-width: none;
|
||
border: none;
|
||
}
|
||
|
||
.jp-RenderedMarkdown.jp-RenderedHTMLCommon td,
|
||
.jp-RenderedMarkdown.jp-RenderedHTMLCommon th {
|
||
max-width: none;
|
||
}
|
||
|
||
:not(.jp-RenderedMarkdown).jp-RenderedHTMLCommon td,
|
||
:not(.jp-RenderedMarkdown).jp-RenderedHTMLCommon th,
|
||
:not(.jp-RenderedMarkdown).jp-RenderedHTMLCommon tr {
|
||
text-align: right;
|
||
}
|
||
|
||
.jp-RenderedHTMLCommon th {
|
||
font-weight: bold;
|
||
}
|
||
|
||
.jp-RenderedHTMLCommon tbody tr:nth-child(odd) {
|
||
background: var(--jp-layout-color0);
|
||
}
|
||
|
||
.jp-RenderedHTMLCommon tbody tr:nth-child(even) {
|
||
background: var(--jp-rendermime-table-row-background);
|
||
}
|
||
|
||
.jp-RenderedHTMLCommon tbody tr:hover {
|
||
background: var(--jp-rendermime-table-row-hover-background);
|
||
}
|
||
|
||
.jp-RenderedHTMLCommon p {
|
||
text-align: left;
|
||
margin: 0;
|
||
margin-bottom: 1em;
|
||
}
|
||
|
||
.jp-RenderedHTMLCommon img {
|
||
-moz-force-broken-image-icon: 1;
|
||
}
|
||
|
||
/* Restrict to direct children as other images could be nested in other content. */
|
||
.jp-RenderedHTMLCommon > img {
|
||
display: block;
|
||
margin-left: 0;
|
||
margin-right: 0;
|
||
margin-bottom: 1em;
|
||
}
|
||
|
||
/* Change color behind transparent images if they need it... */
|
||
[data-jp-theme-light='false'] .jp-RenderedImage img.jp-needs-light-background {
|
||
background-color: var(--jp-inverse-layout-color1);
|
||
}
|
||
|
||
[data-jp-theme-light='true'] .jp-RenderedImage img.jp-needs-dark-background {
|
||
background-color: var(--jp-inverse-layout-color1);
|
||
}
|
||
|
||
.jp-RenderedHTMLCommon img,
|
||
.jp-RenderedImage img,
|
||
.jp-RenderedHTMLCommon svg,
|
||
.jp-RenderedSVG svg {
|
||
max-width: 100%;
|
||
height: auto;
|
||
}
|
||
|
||
.jp-RenderedHTMLCommon img.jp-mod-unconfined,
|
||
.jp-RenderedImage img.jp-mod-unconfined,
|
||
.jp-RenderedHTMLCommon svg.jp-mod-unconfined,
|
||
.jp-RenderedSVG svg.jp-mod-unconfined {
|
||
max-width: none;
|
||
}
|
||
|
||
.jp-RenderedHTMLCommon .alert {
|
||
padding: var(--jp-notebook-padding);
|
||
border: var(--jp-border-width) solid transparent;
|
||
border-radius: var(--jp-border-radius);
|
||
margin-bottom: 1em;
|
||
}
|
||
|
||
.jp-RenderedHTMLCommon .alert-info {
|
||
color: var(--jp-info-color0);
|
||
background-color: var(--jp-info-color3);
|
||
border-color: var(--jp-info-color2);
|
||
}
|
||
|
||
.jp-RenderedHTMLCommon .alert-info hr {
|
||
border-color: var(--jp-info-color3);
|
||
}
|
||
|
||
.jp-RenderedHTMLCommon .alert-info > p:last-child,
|
||
.jp-RenderedHTMLCommon .alert-info > ul:last-child {
|
||
margin-bottom: 0;
|
||
}
|
||
|
||
.jp-RenderedHTMLCommon .alert-warning {
|
||
color: var(--jp-warn-color0);
|
||
background-color: var(--jp-warn-color3);
|
||
border-color: var(--jp-warn-color2);
|
||
}
|
||
|
||
.jp-RenderedHTMLCommon .alert-warning hr {
|
||
border-color: var(--jp-warn-color3);
|
||
}
|
||
|
||
.jp-RenderedHTMLCommon .alert-warning > p:last-child,
|
||
.jp-RenderedHTMLCommon .alert-warning > ul:last-child {
|
||
margin-bottom: 0;
|
||
}
|
||
|
||
.jp-RenderedHTMLCommon .alert-success {
|
||
color: var(--jp-success-color0);
|
||
background-color: var(--jp-success-color3);
|
||
border-color: var(--jp-success-color2);
|
||
}
|
||
|
||
.jp-RenderedHTMLCommon .alert-success hr {
|
||
border-color: var(--jp-success-color3);
|
||
}
|
||
|
||
.jp-RenderedHTMLCommon .alert-success > p:last-child,
|
||
.jp-RenderedHTMLCommon .alert-success > ul:last-child {
|
||
margin-bottom: 0;
|
||
}
|
||
|
||
.jp-RenderedHTMLCommon .alert-danger {
|
||
color: var(--jp-error-color0);
|
||
background-color: var(--jp-error-color3);
|
||
border-color: var(--jp-error-color2);
|
||
}
|
||
|
||
.jp-RenderedHTMLCommon .alert-danger hr {
|
||
border-color: var(--jp-error-color3);
|
||
}
|
||
|
||
.jp-RenderedHTMLCommon .alert-danger > p:last-child,
|
||
.jp-RenderedHTMLCommon .alert-danger > ul:last-child {
|
||
margin-bottom: 0;
|
||
}
|
||
|
||
.jp-RenderedHTMLCommon blockquote {
|
||
margin: 1em 2em;
|
||
padding: 0 1em;
|
||
border-left: 5px solid var(--jp-border-color2);
|
||
}
|
||
|
||
a.jp-InternalAnchorLink {
|
||
visibility: hidden;
|
||
margin-left: 8px;
|
||
color: var(--md-blue-800);
|
||
}
|
||
|
||
h1:hover .jp-InternalAnchorLink,
|
||
h2:hover .jp-InternalAnchorLink,
|
||
h3:hover .jp-InternalAnchorLink,
|
||
h4:hover .jp-InternalAnchorLink,
|
||
h5:hover .jp-InternalAnchorLink,
|
||
h6:hover .jp-InternalAnchorLink {
|
||
visibility: visible;
|
||
}
|
||
|
||
.jp-RenderedHTMLCommon kbd {
|
||
background-color: var(--jp-rendermime-table-row-background);
|
||
border: 1px solid var(--jp-border-color0);
|
||
border-bottom-color: var(--jp-border-color2);
|
||
border-radius: 3px;
|
||
box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25);
|
||
display: inline-block;
|
||
font-size: var(--jp-ui-font-size0);
|
||
line-height: 1em;
|
||
padding: 0.2em 0.5em;
|
||
}
|
||
|
||
/* Most direct children of .jp-RenderedHTMLCommon have a margin-bottom of 1.0.
|
||
* At the bottom of cells this is a bit too much as there is also spacing
|
||
* between cells. Going all the way to 0 gets too tight between markdown and
|
||
* code cells.
|
||
*/
|
||
.jp-RenderedHTMLCommon > *:last-child {
|
||
margin-bottom: 0.5em;
|
||
}
|
||
|
||
/*
|
||
* Copyright (c) Jupyter Development Team.
|
||
* Distributed under the terms of the Modified BSD License.
|
||
*/
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Copyright (c) Jupyter Development Team.
|
||
| Copyright (c) 2014-2017, PhosphorJS Contributors
|
||
|
|
||
| Distributed under the terms of the BSD 3-Clause License.
|
||
|
|
||
| The full license is in the file LICENSE, distributed with this software.
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
.lm-cursor-backdrop {
|
||
position: fixed;
|
||
width: 200px;
|
||
height: 200px;
|
||
margin-top: -100px;
|
||
margin-left: -100px;
|
||
will-change: transform;
|
||
z-index: 100;
|
||
}
|
||
|
||
.lm-mod-drag-image {
|
||
will-change: transform;
|
||
}
|
||
|
||
/*
|
||
* Copyright (c) Jupyter Development Team.
|
||
* Distributed under the terms of the Modified BSD License.
|
||
*/
|
||
|
||
.jp-lineFormSearch {
|
||
padding: 4px 12px;
|
||
background-color: var(--jp-layout-color2);
|
||
box-shadow: var(--jp-toolbar-box-shadow);
|
||
z-index: 2;
|
||
font-size: var(--jp-ui-font-size1);
|
||
}
|
||
|
||
.jp-lineFormCaption {
|
||
font-size: var(--jp-ui-font-size0);
|
||
line-height: var(--jp-ui-font-size1);
|
||
margin-top: 4px;
|
||
color: var(--jp-ui-font-color0);
|
||
}
|
||
|
||
.jp-baseLineForm {
|
||
border: none;
|
||
border-radius: 0;
|
||
position: absolute;
|
||
background-size: 16px;
|
||
background-repeat: no-repeat;
|
||
background-position: center;
|
||
outline: none;
|
||
}
|
||
|
||
.jp-lineFormButtonContainer {
|
||
top: 4px;
|
||
right: 8px;
|
||
height: 24px;
|
||
padding: 0 12px;
|
||
width: 12px;
|
||
}
|
||
|
||
.jp-lineFormButtonIcon {
|
||
top: 0;
|
||
right: 0;
|
||
background-color: var(--jp-brand-color1);
|
||
height: 100%;
|
||
width: 100%;
|
||
box-sizing: border-box;
|
||
padding: 4px 6px;
|
||
}
|
||
|
||
.jp-lineFormButton {
|
||
top: 0;
|
||
right: 0;
|
||
background-color: transparent;
|
||
height: 100%;
|
||
width: 100%;
|
||
box-sizing: border-box;
|
||
}
|
||
|
||
.jp-lineFormWrapper {
|
||
overflow: hidden;
|
||
padding: 0 8px;
|
||
border: 1px solid var(--jp-border-color0);
|
||
background-color: var(--jp-input-active-background);
|
||
height: 22px;
|
||
}
|
||
|
||
.jp-lineFormWrapperFocusWithin {
|
||
border: var(--jp-border-width) solid var(--md-blue-500);
|
||
box-shadow: inset 0 0 4px var(--md-blue-300);
|
||
}
|
||
|
||
.jp-lineFormInput {
|
||
background: transparent;
|
||
width: 200px;
|
||
height: 100%;
|
||
border: none;
|
||
outline: none;
|
||
color: var(--jp-ui-font-color0);
|
||
line-height: 28px;
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Copyright (c) 2014-2016, Jupyter Development Team.
|
||
|
|
||
| Distributed under the terms of the Modified BSD License.
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
.jp-JSONEditor {
|
||
display: flex;
|
||
flex-direction: column;
|
||
width: 100%;
|
||
}
|
||
|
||
.jp-JSONEditor-host {
|
||
flex: 1 1 auto;
|
||
border: var(--jp-border-width) solid var(--jp-input-border-color);
|
||
border-radius: 0;
|
||
background: var(--jp-layout-color0);
|
||
min-height: 50px;
|
||
padding: 1px;
|
||
}
|
||
|
||
.jp-JSONEditor.jp-mod-error .jp-JSONEditor-host {
|
||
border-color: red;
|
||
outline-color: red;
|
||
}
|
||
|
||
.jp-JSONEditor-header {
|
||
display: flex;
|
||
flex: 1 0 auto;
|
||
padding: 0 0 0 12px;
|
||
}
|
||
|
||
.jp-JSONEditor-header label {
|
||
flex: 0 0 auto;
|
||
}
|
||
|
||
.jp-JSONEditor-commitButton {
|
||
height: 16px;
|
||
width: 16px;
|
||
background-size: 18px;
|
||
background-repeat: no-repeat;
|
||
background-position: center;
|
||
}
|
||
|
||
.jp-JSONEditor-host.jp-mod-focused {
|
||
background-color: var(--jp-input-active-background);
|
||
border: 1px solid var(--jp-input-active-border-color);
|
||
box-shadow: var(--jp-input-box-shadow);
|
||
}
|
||
|
||
.jp-Editor.jp-mod-dropTarget {
|
||
border: var(--jp-border-width) solid var(--jp-input-active-border-color);
|
||
box-shadow: var(--jp-input-box-shadow);
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Copyright (c) Jupyter Development Team.
|
||
| Distributed under the terms of the Modified BSD License.
|
||
|----------------------------------------------------------------------------*/
|
||
.jp-DocumentSearch-input {
|
||
border: none;
|
||
outline: none;
|
||
color: var(--jp-ui-font-color0);
|
||
font-size: var(--jp-ui-font-size1);
|
||
background-color: var(--jp-layout-color0);
|
||
font-family: var(--jp-ui-font-family);
|
||
padding: 2px 1px;
|
||
resize: none;
|
||
}
|
||
|
||
.jp-DocumentSearch-overlay {
|
||
position: absolute;
|
||
background-color: var(--jp-toolbar-background);
|
||
border-bottom: var(--jp-border-width) solid var(--jp-toolbar-border-color);
|
||
border-left: var(--jp-border-width) solid var(--jp-toolbar-border-color);
|
||
top: 0;
|
||
right: 0;
|
||
z-index: 7;
|
||
min-width: 405px;
|
||
padding: 2px;
|
||
font-size: var(--jp-ui-font-size1);
|
||
|
||
--jp-private-document-search-button-height: 20px;
|
||
}
|
||
|
||
.jp-DocumentSearch-overlay button {
|
||
background-color: var(--jp-toolbar-background);
|
||
outline: 0;
|
||
}
|
||
|
||
.jp-DocumentSearch-overlay button:hover {
|
||
background-color: var(--jp-layout-color2);
|
||
}
|
||
|
||
.jp-DocumentSearch-overlay button:active {
|
||
background-color: var(--jp-layout-color3);
|
||
}
|
||
|
||
.jp-DocumentSearch-overlay-row {
|
||
display: flex;
|
||
align-items: center;
|
||
margin-bottom: 2px;
|
||
}
|
||
|
||
.jp-DocumentSearch-button-content {
|
||
display: inline-block;
|
||
cursor: pointer;
|
||
box-sizing: border-box;
|
||
width: 100%;
|
||
height: 100%;
|
||
}
|
||
|
||
.jp-DocumentSearch-button-content svg {
|
||
width: 100%;
|
||
height: 100%;
|
||
}
|
||
|
||
.jp-DocumentSearch-input-wrapper {
|
||
border: var(--jp-border-width) solid var(--jp-border-color0);
|
||
display: flex;
|
||
background-color: var(--jp-layout-color0);
|
||
margin: 2px;
|
||
}
|
||
|
||
.jp-DocumentSearch-input-wrapper:focus-within {
|
||
border-color: var(--jp-cell-editor-active-border-color);
|
||
}
|
||
|
||
.jp-DocumentSearch-toggle-wrapper,
|
||
.jp-DocumentSearch-button-wrapper {
|
||
all: initial;
|
||
overflow: hidden;
|
||
display: inline-block;
|
||
border: none;
|
||
box-sizing: border-box;
|
||
}
|
||
|
||
.jp-DocumentSearch-toggle-wrapper {
|
||
width: 14px;
|
||
height: 14px;
|
||
}
|
||
|
||
.jp-DocumentSearch-button-wrapper {
|
||
width: var(--jp-private-document-search-button-height);
|
||
height: var(--jp-private-document-search-button-height);
|
||
}
|
||
|
||
.jp-DocumentSearch-toggle-wrapper:focus,
|
||
.jp-DocumentSearch-button-wrapper:focus {
|
||
outline: var(--jp-border-width) solid
|
||
var(--jp-cell-editor-active-border-color);
|
||
outline-offset: -1px;
|
||
}
|
||
|
||
.jp-DocumentSearch-toggle-wrapper,
|
||
.jp-DocumentSearch-button-wrapper,
|
||
.jp-DocumentSearch-button-content:focus {
|
||
outline: none;
|
||
}
|
||
|
||
.jp-DocumentSearch-toggle-placeholder {
|
||
width: 5px;
|
||
}
|
||
|
||
.jp-DocumentSearch-input-button::before {
|
||
display: block;
|
||
padding-top: 100%;
|
||
}
|
||
|
||
.jp-DocumentSearch-input-button-off {
|
||
opacity: var(--jp-search-toggle-off-opacity);
|
||
}
|
||
|
||
.jp-DocumentSearch-input-button-off:hover {
|
||
opacity: var(--jp-search-toggle-hover-opacity);
|
||
}
|
||
|
||
.jp-DocumentSearch-input-button-on {
|
||
opacity: var(--jp-search-toggle-on-opacity);
|
||
}
|
||
|
||
.jp-DocumentSearch-index-counter {
|
||
padding-left: 10px;
|
||
padding-right: 10px;
|
||
user-select: none;
|
||
min-width: 35px;
|
||
display: inline-block;
|
||
}
|
||
|
||
.jp-DocumentSearch-up-down-wrapper {
|
||
display: inline-block;
|
||
padding-right: 2px;
|
||
margin-left: auto;
|
||
white-space: nowrap;
|
||
}
|
||
|
||
.jp-DocumentSearch-spacer {
|
||
margin-left: auto;
|
||
}
|
||
|
||
.jp-DocumentSearch-up-down-wrapper button {
|
||
outline: 0;
|
||
border: none;
|
||
width: var(--jp-private-document-search-button-height);
|
||
height: var(--jp-private-document-search-button-height);
|
||
vertical-align: middle;
|
||
margin: 1px 5px 2px;
|
||
}
|
||
|
||
.jp-DocumentSearch-up-down-button:hover {
|
||
background-color: var(--jp-layout-color2);
|
||
}
|
||
|
||
.jp-DocumentSearch-up-down-button:active {
|
||
background-color: var(--jp-layout-color3);
|
||
}
|
||
|
||
.jp-DocumentSearch-filter-button {
|
||
border-radius: var(--jp-border-radius);
|
||
}
|
||
|
||
.jp-DocumentSearch-filter-button:hover {
|
||
background-color: var(--jp-layout-color2);
|
||
}
|
||
|
||
.jp-DocumentSearch-filter-button-enabled {
|
||
background-color: var(--jp-layout-color2);
|
||
}
|
||
|
||
.jp-DocumentSearch-filter-button-enabled:hover {
|
||
background-color: var(--jp-layout-color3);
|
||
}
|
||
|
||
.jp-DocumentSearch-search-options {
|
||
padding: 0 8px;
|
||
margin-left: 3px;
|
||
width: 100%;
|
||
display: grid;
|
||
justify-content: start;
|
||
grid-template-columns: 1fr 1fr;
|
||
align-items: center;
|
||
justify-items: stretch;
|
||
}
|
||
|
||
.jp-DocumentSearch-search-filter-disabled {
|
||
color: var(--jp-ui-font-color2);
|
||
}
|
||
|
||
.jp-DocumentSearch-search-filter {
|
||
display: flex;
|
||
align-items: center;
|
||
user-select: none;
|
||
}
|
||
|
||
.jp-DocumentSearch-regex-error {
|
||
color: var(--jp-error-color0);
|
||
}
|
||
|
||
.jp-DocumentSearch-replace-button-wrapper {
|
||
overflow: hidden;
|
||
display: inline-block;
|
||
box-sizing: border-box;
|
||
border: var(--jp-border-width) solid var(--jp-border-color0);
|
||
margin: auto 2px;
|
||
padding: 1px 4px;
|
||
height: calc(var(--jp-private-document-search-button-height) + 2px);
|
||
}
|
||
|
||
.jp-DocumentSearch-replace-button-wrapper:focus {
|
||
border: var(--jp-border-width) solid var(--jp-cell-editor-active-border-color);
|
||
}
|
||
|
||
.jp-DocumentSearch-replace-button {
|
||
display: inline-block;
|
||
text-align: center;
|
||
cursor: pointer;
|
||
box-sizing: border-box;
|
||
color: var(--jp-ui-font-color1);
|
||
|
||
/* height - 2 * (padding of wrapper) */
|
||
line-height: calc(var(--jp-private-document-search-button-height) - 2px);
|
||
width: 100%;
|
||
height: 100%;
|
||
}
|
||
|
||
.jp-DocumentSearch-replace-button:focus {
|
||
outline: none;
|
||
}
|
||
|
||
.jp-DocumentSearch-replace-wrapper-class {
|
||
margin-left: 14px;
|
||
display: flex;
|
||
}
|
||
|
||
.jp-DocumentSearch-replace-toggle {
|
||
border: none;
|
||
background-color: var(--jp-toolbar-background);
|
||
border-radius: var(--jp-border-radius);
|
||
}
|
||
|
||
.jp-DocumentSearch-replace-toggle:hover {
|
||
background-color: var(--jp-layout-color2);
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Copyright (c) Jupyter Development Team.
|
||
| Distributed under the terms of the Modified BSD License.
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
.cm-editor {
|
||
line-height: var(--jp-code-line-height);
|
||
font-size: var(--jp-code-font-size);
|
||
font-family: var(--jp-code-font-family);
|
||
border: 0;
|
||
border-radius: 0;
|
||
height: auto;
|
||
|
||
/* Changed to auto to autogrow */
|
||
}
|
||
|
||
.cm-editor pre {
|
||
padding: 0 var(--jp-code-padding);
|
||
}
|
||
|
||
.jp-CodeMirrorEditor[data-type='inline'] .cm-dialog {
|
||
background-color: var(--jp-layout-color0);
|
||
color: var(--jp-content-font-color1);
|
||
}
|
||
|
||
.jp-CodeMirrorEditor {
|
||
cursor: text;
|
||
}
|
||
|
||
/* When zoomed out 67% and 33% on a screen of 1440 width x 900 height */
|
||
@media screen and (min-width: 2138px) and (max-width: 4319px) {
|
||
.jp-CodeMirrorEditor[data-type='inline'] .cm-cursor {
|
||
border-left: var(--jp-code-cursor-width1) solid
|
||
var(--jp-editor-cursor-color);
|
||
}
|
||
}
|
||
|
||
/* When zoomed out less than 33% */
|
||
@media screen and (min-width: 4320px) {
|
||
.jp-CodeMirrorEditor[data-type='inline'] .cm-cursor {
|
||
border-left: var(--jp-code-cursor-width2) solid
|
||
var(--jp-editor-cursor-color);
|
||
}
|
||
}
|
||
|
||
.cm-editor.jp-mod-readOnly .cm-cursor {
|
||
display: none;
|
||
}
|
||
|
||
.jp-CollaboratorCursor {
|
||
border-left: 5px solid transparent;
|
||
border-right: 5px solid transparent;
|
||
border-top: none;
|
||
border-bottom: 3px solid;
|
||
background-clip: content-box;
|
||
margin-left: -5px;
|
||
margin-right: -5px;
|
||
}
|
||
|
||
.cm-searching,
|
||
.cm-searching span {
|
||
/* `.cm-searching span`: we need to override syntax highlighting */
|
||
background-color: var(--jp-search-unselected-match-background-color);
|
||
color: var(--jp-search-unselected-match-color);
|
||
}
|
||
|
||
.cm-searching::selection,
|
||
.cm-searching span::selection {
|
||
background-color: var(--jp-search-unselected-match-background-color);
|
||
color: var(--jp-search-unselected-match-color);
|
||
}
|
||
|
||
.jp-current-match > .cm-searching,
|
||
.jp-current-match > .cm-searching span,
|
||
.cm-searching > .jp-current-match,
|
||
.cm-searching > .jp-current-match span {
|
||
background-color: var(--jp-search-selected-match-background-color);
|
||
color: var(--jp-search-selected-match-color);
|
||
}
|
||
|
||
.jp-current-match > .cm-searching::selection,
|
||
.cm-searching > .jp-current-match::selection,
|
||
.jp-current-match > .cm-searching span::selection {
|
||
background-color: var(--jp-search-selected-match-background-color);
|
||
color: var(--jp-search-selected-match-color);
|
||
}
|
||
|
||
.cm-trailingspace {
|
||
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAFCAYAAAB4ka1VAAAAsElEQVQIHQGlAFr/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA7+r3zKmT0/+pk9P/7+r3zAAAAAAAAAAABAAAAAAAAAAA6OPzM+/q9wAAAAAA6OPzMwAAAAAAAAAAAgAAAAAAAAAAGR8NiRQaCgAZIA0AGR8NiQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQyoYJ/SY80UAAAAASUVORK5CYII=);
|
||
background-position: center left;
|
||
background-repeat: repeat-x;
|
||
}
|
||
|
||
.jp-CollaboratorCursor-hover {
|
||
position: absolute;
|
||
z-index: 1;
|
||
transform: translateX(-50%);
|
||
color: white;
|
||
border-radius: 3px;
|
||
padding-left: 4px;
|
||
padding-right: 4px;
|
||
padding-top: 1px;
|
||
padding-bottom: 1px;
|
||
text-align: center;
|
||
font-size: var(--jp-ui-font-size1);
|
||
white-space: nowrap;
|
||
}
|
||
|
||
.jp-CodeMirror-ruler {
|
||
border-left: 1px dashed var(--jp-border-color2);
|
||
}
|
||
|
||
/* Styles for shared cursors (remote cursor locations and selected ranges) */
|
||
.jp-CodeMirrorEditor .cm-ySelectionCaret {
|
||
position: relative;
|
||
border-left: 1px solid black;
|
||
margin-left: -1px;
|
||
margin-right: -1px;
|
||
box-sizing: border-box;
|
||
}
|
||
|
||
.jp-CodeMirrorEditor .cm-ySelectionCaret > .cm-ySelectionInfo {
|
||
white-space: nowrap;
|
||
position: absolute;
|
||
top: -1.15em;
|
||
padding-bottom: 0.05em;
|
||
left: -1px;
|
||
font-size: 0.95em;
|
||
font-family: var(--jp-ui-font-family);
|
||
font-weight: bold;
|
||
line-height: normal;
|
||
user-select: none;
|
||
color: white;
|
||
padding-left: 2px;
|
||
padding-right: 2px;
|
||
z-index: 101;
|
||
transition: opacity 0.3s ease-in-out;
|
||
}
|
||
|
||
.jp-CodeMirrorEditor .cm-ySelectionInfo {
|
||
transition-delay: 0.7s;
|
||
opacity: 0;
|
||
}
|
||
|
||
.jp-CodeMirrorEditor .cm-ySelectionCaret:hover > .cm-ySelectionInfo {
|
||
opacity: 1;
|
||
transition-delay: 0s;
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Copyright (c) Jupyter Development Team.
|
||
| Distributed under the terms of the Modified BSD License.
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
.jp-MimeDocument {
|
||
outline: none;
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Copyright (c) Jupyter Development Team.
|
||
| Distributed under the terms of the Modified BSD License.
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Variables
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
:root {
|
||
--jp-private-filebrowser-button-height: 28px;
|
||
--jp-private-filebrowser-button-width: 48px;
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Copyright (c) Jupyter Development Team.
|
||
| Distributed under the terms of the Modified BSD License.
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
.jp-FileBrowser .jp-SidePanel-content {
|
||
display: flex;
|
||
flex-direction: column;
|
||
}
|
||
|
||
.jp-FileBrowser-toolbar.jp-Toolbar {
|
||
flex-wrap: wrap;
|
||
row-gap: 12px;
|
||
border-bottom: none;
|
||
height: auto;
|
||
margin: 8px 12px 0;
|
||
box-shadow: none;
|
||
padding: 0;
|
||
justify-content: flex-start;
|
||
}
|
||
|
||
.jp-FileBrowser-Panel {
|
||
flex: 1 1 auto;
|
||
display: flex;
|
||
flex-direction: column;
|
||
}
|
||
|
||
.jp-BreadCrumbs {
|
||
flex: 0 0 auto;
|
||
margin: 8px 12px;
|
||
}
|
||
|
||
.jp-BreadCrumbs-item {
|
||
margin: 0 2px;
|
||
padding: 0 2px;
|
||
border-radius: var(--jp-border-radius);
|
||
cursor: pointer;
|
||
}
|
||
|
||
.jp-BreadCrumbs-item:hover {
|
||
background-color: var(--jp-layout-color2);
|
||
}
|
||
|
||
.jp-BreadCrumbs-item:first-child {
|
||
margin-left: 0;
|
||
}
|
||
|
||
.jp-BreadCrumbs-item.jp-mod-dropTarget {
|
||
background-color: var(--jp-brand-color2);
|
||
opacity: 0.7;
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Buttons
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
.jp-FileBrowser-toolbar > .jp-Toolbar-item {
|
||
flex: 0 0 auto;
|
||
padding-left: 0;
|
||
padding-right: 2px;
|
||
align-items: center;
|
||
height: unset;
|
||
}
|
||
|
||
.jp-FileBrowser-toolbar > .jp-Toolbar-item .jp-ToolbarButtonComponent {
|
||
width: 40px;
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Other styles
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
.jp-FileDialog.jp-mod-conflict input {
|
||
color: var(--jp-error-color1);
|
||
}
|
||
|
||
.jp-FileDialog .jp-new-name-title {
|
||
margin-top: 12px;
|
||
}
|
||
|
||
.jp-LastModified-hidden {
|
||
display: none;
|
||
}
|
||
|
||
.jp-FileSize-hidden {
|
||
display: none;
|
||
}
|
||
|
||
.jp-FileBrowser .lm-AccordionPanel > h3:first-child {
|
||
display: none;
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| DirListing
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
.jp-DirListing {
|
||
flex: 1 1 auto;
|
||
display: flex;
|
||
flex-direction: column;
|
||
outline: 0;
|
||
}
|
||
|
||
.jp-DirListing-header {
|
||
flex: 0 0 auto;
|
||
display: flex;
|
||
flex-direction: row;
|
||
align-items: center;
|
||
overflow: hidden;
|
||
border-top: var(--jp-border-width) solid var(--jp-border-color2);
|
||
border-bottom: var(--jp-border-width) solid var(--jp-border-color1);
|
||
box-shadow: var(--jp-toolbar-box-shadow);
|
||
z-index: 2;
|
||
}
|
||
|
||
.jp-DirListing-headerItem {
|
||
padding: 4px 12px 2px;
|
||
font-weight: 500;
|
||
}
|
||
|
||
.jp-DirListing-headerItem:hover {
|
||
background: var(--jp-layout-color2);
|
||
}
|
||
|
||
.jp-DirListing-headerItem.jp-id-name {
|
||
flex: 1 0 84px;
|
||
}
|
||
|
||
.jp-DirListing-headerItem.jp-id-modified {
|
||
flex: 0 0 112px;
|
||
border-left: var(--jp-border-width) solid var(--jp-border-color2);
|
||
text-align: right;
|
||
}
|
||
|
||
.jp-DirListing-headerItem.jp-id-filesize {
|
||
flex: 0 0 75px;
|
||
border-left: var(--jp-border-width) solid var(--jp-border-color2);
|
||
text-align: right;
|
||
}
|
||
|
||
.jp-id-narrow {
|
||
display: none;
|
||
flex: 0 0 5px;
|
||
padding: 4px;
|
||
border-left: var(--jp-border-width) solid var(--jp-border-color2);
|
||
text-align: right;
|
||
color: var(--jp-border-color2);
|
||
}
|
||
|
||
.jp-DirListing-narrow .jp-id-narrow {
|
||
display: block;
|
||
}
|
||
|
||
.jp-DirListing-narrow .jp-id-modified,
|
||
.jp-DirListing-narrow .jp-DirListing-itemModified {
|
||
display: none;
|
||
}
|
||
|
||
.jp-DirListing-headerItem.jp-mod-selected {
|
||
font-weight: 600;
|
||
}
|
||
|
||
/* increase specificity to override bundled default */
|
||
.jp-DirListing-content {
|
||
flex: 1 1 auto;
|
||
margin: 0;
|
||
padding: 0;
|
||
list-style-type: none;
|
||
overflow: auto;
|
||
background-color: var(--jp-layout-color1);
|
||
}
|
||
|
||
.jp-DirListing-content mark {
|
||
color: var(--jp-ui-font-color0);
|
||
background-color: transparent;
|
||
font-weight: bold;
|
||
}
|
||
|
||
.jp-DirListing-content .jp-DirListing-item.jp-mod-selected mark {
|
||
color: var(--jp-ui-inverse-font-color0);
|
||
}
|
||
|
||
/* Style the directory listing content when a user drops a file to upload */
|
||
.jp-DirListing.jp-mod-native-drop .jp-DirListing-content {
|
||
outline: 5px dashed rgba(128, 128, 128, 0.5);
|
||
outline-offset: -10px;
|
||
cursor: copy;
|
||
}
|
||
|
||
.jp-DirListing-item {
|
||
display: flex;
|
||
flex-direction: row;
|
||
align-items: center;
|
||
padding: 4px 12px;
|
||
-webkit-user-select: none;
|
||
-moz-user-select: none;
|
||
-ms-user-select: none;
|
||
user-select: none;
|
||
}
|
||
|
||
.jp-DirListing-checkboxWrapper {
|
||
/* Increases hit area of checkbox. */
|
||
padding: 4px;
|
||
}
|
||
|
||
.jp-DirListing-header
|
||
.jp-DirListing-checkboxWrapper
|
||
+ .jp-DirListing-headerItem {
|
||
padding-left: 4px;
|
||
}
|
||
|
||
.jp-DirListing-content .jp-DirListing-checkboxWrapper {
|
||
position: relative;
|
||
left: -4px;
|
||
margin: -4px 0 -4px -8px;
|
||
}
|
||
|
||
.jp-DirListing-checkboxWrapper.jp-mod-visible {
|
||
visibility: visible;
|
||
}
|
||
|
||
/* For devices that support hovering, hide checkboxes until hovered, selected...
|
||
*/
|
||
@media (hover: hover) {
|
||
.jp-DirListing-checkboxWrapper {
|
||
visibility: hidden;
|
||
}
|
||
|
||
.jp-DirListing-item:hover .jp-DirListing-checkboxWrapper,
|
||
.jp-DirListing-item.jp-mod-selected .jp-DirListing-checkboxWrapper {
|
||
visibility: visible;
|
||
}
|
||
}
|
||
|
||
.jp-DirListing-item[data-is-dot] {
|
||
opacity: 75%;
|
||
}
|
||
|
||
.jp-DirListing-item.jp-mod-selected {
|
||
color: var(--jp-ui-inverse-font-color1);
|
||
background: var(--jp-brand-color1);
|
||
}
|
||
|
||
.jp-DirListing-item.jp-mod-dropTarget {
|
||
background: var(--jp-brand-color3);
|
||
}
|
||
|
||
.jp-DirListing-item:hover:not(.jp-mod-selected) {
|
||
background: var(--jp-layout-color2);
|
||
}
|
||
|
||
.jp-DirListing-itemIcon {
|
||
flex: 0 0 20px;
|
||
margin-right: 4px;
|
||
}
|
||
|
||
.jp-DirListing-itemText {
|
||
flex: 1 0 64px;
|
||
white-space: nowrap;
|
||
overflow: hidden;
|
||
text-overflow: ellipsis;
|
||
user-select: none;
|
||
}
|
||
|
||
.jp-DirListing-itemText:focus {
|
||
outline-width: 2px;
|
||
outline-color: var(--jp-inverse-layout-color1);
|
||
outline-style: solid;
|
||
outline-offset: 1px;
|
||
}
|
||
|
||
.jp-DirListing-item.jp-mod-selected .jp-DirListing-itemText:focus {
|
||
outline-color: var(--jp-layout-color1);
|
||
}
|
||
|
||
.jp-DirListing-itemModified {
|
||
flex: 0 0 125px;
|
||
text-align: right;
|
||
}
|
||
|
||
.jp-DirListing-itemFileSize {
|
||
flex: 0 0 90px;
|
||
text-align: right;
|
||
}
|
||
|
||
.jp-DirListing-editor {
|
||
flex: 1 0 64px;
|
||
outline: none;
|
||
border: none;
|
||
color: var(--jp-ui-font-color1);
|
||
background-color: var(--jp-layout-color1);
|
||
}
|
||
|
||
.jp-DirListing-item.jp-mod-running .jp-DirListing-itemIcon::before {
|
||
color: var(--jp-success-color1);
|
||
content: '\25CF';
|
||
font-size: 8px;
|
||
position: absolute;
|
||
left: -8px;
|
||
}
|
||
|
||
.jp-DirListing-item.jp-mod-running.jp-mod-selected
|
||
.jp-DirListing-itemIcon::before {
|
||
color: var(--jp-ui-inverse-font-color1);
|
||
}
|
||
|
||
.jp-DirListing-item.lm-mod-drag-image,
|
||
.jp-DirListing-item.jp-mod-selected.lm-mod-drag-image {
|
||
font-size: var(--jp-ui-font-size1);
|
||
padding-left: 4px;
|
||
margin-left: 4px;
|
||
width: 160px;
|
||
background-color: var(--jp-ui-inverse-font-color2);
|
||
box-shadow: var(--jp-elevation-z2);
|
||
border-radius: 0;
|
||
color: var(--jp-ui-font-color1);
|
||
transform: translateX(-40%) translateY(-58%);
|
||
}
|
||
|
||
.jp-Document {
|
||
min-width: 120px;
|
||
min-height: 120px;
|
||
outline: none;
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Copyright (c) Jupyter Development Team.
|
||
| Distributed under the terms of the Modified BSD License.
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Main OutputArea
|
||
| OutputArea has a list of Outputs
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
.jp-OutputArea {
|
||
overflow-y: auto;
|
||
}
|
||
|
||
.jp-OutputArea-child {
|
||
display: table;
|
||
table-layout: fixed;
|
||
width: 100%;
|
||
overflow: hidden;
|
||
}
|
||
|
||
.jp-OutputPrompt {
|
||
width: var(--jp-cell-prompt-width);
|
||
color: var(--jp-cell-outprompt-font-color);
|
||
font-family: var(--jp-cell-prompt-font-family);
|
||
padding: var(--jp-code-padding);
|
||
letter-spacing: var(--jp-cell-prompt-letter-spacing);
|
||
line-height: var(--jp-code-line-height);
|
||
font-size: var(--jp-code-font-size);
|
||
border: var(--jp-border-width) solid transparent;
|
||
opacity: var(--jp-cell-prompt-opacity);
|
||
|
||
/* Right align prompt text, don't wrap to handle large prompt numbers */
|
||
text-align: right;
|
||
white-space: nowrap;
|
||
overflow: hidden;
|
||
text-overflow: ellipsis;
|
||
|
||
/* Disable text selection */
|
||
-webkit-user-select: none;
|
||
-moz-user-select: none;
|
||
-ms-user-select: none;
|
||
user-select: none;
|
||
}
|
||
|
||
.jp-OutputArea-prompt {
|
||
display: table-cell;
|
||
vertical-align: top;
|
||
}
|
||
|
||
.jp-OutputArea-output {
|
||
display: table-cell;
|
||
width: 100%;
|
||
height: auto;
|
||
overflow: auto;
|
||
user-select: text;
|
||
-moz-user-select: text;
|
||
-webkit-user-select: text;
|
||
-ms-user-select: text;
|
||
}
|
||
|
||
.jp-OutputArea .jp-RenderedText {
|
||
padding-left: 1ch;
|
||
}
|
||
|
||
/**
|
||
* Prompt overlay.
|
||
*/
|
||
|
||
.jp-OutputArea-promptOverlay {
|
||
position: absolute;
|
||
top: 0;
|
||
width: var(--jp-cell-prompt-width);
|
||
height: 100%;
|
||
opacity: 0.5;
|
||
}
|
||
|
||
.jp-OutputArea-promptOverlay:hover {
|
||
background: var(--jp-layout-color2);
|
||
box-shadow: inset 0 0 1px var(--jp-inverse-layout-color0);
|
||
cursor: zoom-out;
|
||
}
|
||
|
||
.jp-mod-outputsScrolled .jp-OutputArea-promptOverlay:hover {
|
||
cursor: zoom-in;
|
||
}
|
||
|
||
/**
|
||
* Isolated output.
|
||
*/
|
||
.jp-OutputArea-output.jp-mod-isolated {
|
||
width: 100%;
|
||
display: block;
|
||
}
|
||
|
||
/*
|
||
When drag events occur, `lm-mod-override-cursor` is added to the body.
|
||
Because iframes steal all cursor events, the following two rules are necessary
|
||
to suppress pointer events while resize drags are occurring. There may be a
|
||
better solution to this problem.
|
||
*/
|
||
body.lm-mod-override-cursor .jp-OutputArea-output.jp-mod-isolated {
|
||
position: relative;
|
||
}
|
||
|
||
body.lm-mod-override-cursor .jp-OutputArea-output.jp-mod-isolated::before {
|
||
content: '';
|
||
position: absolute;
|
||
top: 0;
|
||
left: 0;
|
||
right: 0;
|
||
bottom: 0;
|
||
background: transparent;
|
||
}
|
||
|
||
/* pre */
|
||
|
||
.jp-OutputArea-output pre {
|
||
border: none;
|
||
margin: 0;
|
||
padding: 0;
|
||
overflow-x: auto;
|
||
overflow-y: auto;
|
||
word-break: break-all;
|
||
word-wrap: break-word;
|
||
white-space: pre-wrap;
|
||
}
|
||
|
||
/* tables */
|
||
|
||
.jp-OutputArea-output.jp-RenderedHTMLCommon table {
|
||
margin-left: 0;
|
||
margin-right: 0;
|
||
}
|
||
|
||
/* description lists */
|
||
|
||
.jp-OutputArea-output dl,
|
||
.jp-OutputArea-output dt,
|
||
.jp-OutputArea-output dd {
|
||
display: block;
|
||
}
|
||
|
||
.jp-OutputArea-output dl {
|
||
width: 100%;
|
||
overflow: hidden;
|
||
padding: 0;
|
||
margin: 0;
|
||
}
|
||
|
||
.jp-OutputArea-output dt {
|
||
font-weight: bold;
|
||
float: left;
|
||
width: 20%;
|
||
padding: 0;
|
||
margin: 0;
|
||
}
|
||
|
||
.jp-OutputArea-output dd {
|
||
float: left;
|
||
width: 80%;
|
||
padding: 0;
|
||
margin: 0;
|
||
}
|
||
|
||
.jp-TrimmedOutputs pre {
|
||
background: var(--jp-layout-color3);
|
||
font-size: calc(var(--jp-code-font-size) * 1.4);
|
||
text-align: center;
|
||
text-transform: uppercase;
|
||
}
|
||
|
||
/* Hide the gutter in case of
|
||
* - nested output areas (e.g. in the case of output widgets)
|
||
* - mirrored output areas
|
||
*/
|
||
.jp-OutputArea .jp-OutputArea .jp-OutputArea-prompt {
|
||
display: none;
|
||
}
|
||
|
||
/* Hide empty lines in the output area, for instance due to cleared widgets */
|
||
.jp-OutputArea-prompt:empty {
|
||
padding: 0;
|
||
border: 0;
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| executeResult is added to any Output-result for the display of the object
|
||
| returned by a cell
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
.jp-OutputArea-output.jp-OutputArea-executeResult {
|
||
margin-left: 0;
|
||
width: 100%;
|
||
}
|
||
|
||
/* Text output with the Out[] prompt needs a top padding to match the
|
||
* alignment of the Out[] prompt itself.
|
||
*/
|
||
.jp-OutputArea-executeResult .jp-RenderedText.jp-OutputArea-output {
|
||
padding-top: var(--jp-code-padding);
|
||
border-top: var(--jp-border-width) solid transparent;
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| The Stdin output
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
.jp-Stdin-prompt {
|
||
color: var(--jp-content-font-color0);
|
||
padding-right: var(--jp-code-padding);
|
||
vertical-align: baseline;
|
||
flex: 0 0 auto;
|
||
}
|
||
|
||
.jp-Stdin-input {
|
||
font-family: var(--jp-code-font-family);
|
||
font-size: inherit;
|
||
color: inherit;
|
||
background-color: inherit;
|
||
width: 42%;
|
||
min-width: 200px;
|
||
|
||
/* make sure input baseline aligns with prompt */
|
||
vertical-align: baseline;
|
||
|
||
/* padding + margin = 0.5em between prompt and cursor */
|
||
padding: 0 0.25em;
|
||
margin: 0 0.25em;
|
||
flex: 0 0 70%;
|
||
}
|
||
|
||
.jp-Stdin-input::placeholder {
|
||
opacity: 0;
|
||
}
|
||
|
||
.jp-Stdin-input:focus {
|
||
box-shadow: none;
|
||
}
|
||
|
||
.jp-Stdin-input:focus::placeholder {
|
||
opacity: 1;
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Output Area View
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
.jp-LinkedOutputView .jp-OutputArea {
|
||
height: 100%;
|
||
display: block;
|
||
}
|
||
|
||
.jp-LinkedOutputView .jp-OutputArea-output:only-child {
|
||
height: 100%;
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Printing
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
@media print {
|
||
.jp-OutputArea-child {
|
||
break-inside: avoid-page;
|
||
}
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Mobile
|
||
|----------------------------------------------------------------------------*/
|
||
@media only screen and (max-width: 760px) {
|
||
.jp-OutputPrompt {
|
||
display: table-row;
|
||
text-align: left;
|
||
}
|
||
|
||
.jp-OutputArea-child .jp-OutputArea-output {
|
||
display: table-row;
|
||
margin-left: var(--jp-notebook-padding);
|
||
}
|
||
}
|
||
|
||
/* Trimmed outputs warning */
|
||
.jp-TrimmedOutputs > a {
|
||
margin: 10px;
|
||
text-decoration: none;
|
||
cursor: pointer;
|
||
}
|
||
|
||
.jp-TrimmedOutputs > a:hover {
|
||
text-decoration: none;
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Copyright (c) Jupyter Development Team.
|
||
| Distributed under the terms of the Modified BSD License.
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Table of Contents
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
:root {
|
||
--jp-private-toc-active-width: 4px;
|
||
}
|
||
|
||
.jp-TableOfContents {
|
||
display: flex;
|
||
flex-direction: column;
|
||
background: var(--jp-layout-color1);
|
||
color: var(--jp-ui-font-color1);
|
||
font-size: var(--jp-ui-font-size1);
|
||
height: 100%;
|
||
}
|
||
|
||
.jp-TableOfContents-placeholder {
|
||
text-align: center;
|
||
}
|
||
|
||
.jp-TableOfContents-placeholderContent {
|
||
color: var(--jp-content-font-color2);
|
||
padding: 8px;
|
||
}
|
||
|
||
.jp-TableOfContents-placeholderContent > h3 {
|
||
margin-bottom: var(--jp-content-heading-margin-bottom);
|
||
}
|
||
|
||
.jp-TableOfContents .jp-SidePanel-content {
|
||
overflow-y: auto;
|
||
}
|
||
|
||
.jp-TableOfContents-tree {
|
||
margin: 4px;
|
||
}
|
||
|
||
.jp-TableOfContents ol {
|
||
list-style-type: none;
|
||
}
|
||
|
||
/* stylelint-disable-next-line selector-max-type */
|
||
.jp-TableOfContents li > ol {
|
||
/* Align left border with triangle icon center */
|
||
padding-left: 11px;
|
||
}
|
||
|
||
.jp-TableOfContents-content {
|
||
/* left margin for the active heading indicator */
|
||
margin: 0 0 0 var(--jp-private-toc-active-width);
|
||
padding: 0;
|
||
background-color: var(--jp-layout-color1);
|
||
}
|
||
|
||
.jp-tocItem {
|
||
-webkit-user-select: none;
|
||
-moz-user-select: none;
|
||
-ms-user-select: none;
|
||
user-select: none;
|
||
}
|
||
|
||
.jp-tocItem-heading {
|
||
display: flex;
|
||
cursor: pointer;
|
||
}
|
||
|
||
.jp-tocItem-heading:hover {
|
||
background-color: var(--jp-layout-color2);
|
||
}
|
||
|
||
.jp-tocItem-content {
|
||
display: block;
|
||
padding: 4px 0;
|
||
white-space: nowrap;
|
||
text-overflow: ellipsis;
|
||
overflow-x: hidden;
|
||
}
|
||
|
||
.jp-tocItem-collapser {
|
||
height: 20px;
|
||
margin: 2px 2px 0;
|
||
padding: 0;
|
||
background: none;
|
||
border: none;
|
||
cursor: pointer;
|
||
}
|
||
|
||
.jp-tocItem-collapser:hover {
|
||
background-color: var(--jp-layout-color3);
|
||
}
|
||
|
||
/* Active heading indicator */
|
||
|
||
.jp-tocItem-heading::before {
|
||
content: ' ';
|
||
background: transparent;
|
||
width: var(--jp-private-toc-active-width);
|
||
height: 24px;
|
||
position: absolute;
|
||
left: 0;
|
||
border-radius: var(--jp-border-radius);
|
||
}
|
||
|
||
.jp-tocItem-heading.jp-tocItem-active::before {
|
||
background-color: var(--jp-brand-color1);
|
||
}
|
||
|
||
.jp-tocItem-heading:hover.jp-tocItem-active::before {
|
||
background: var(--jp-brand-color0);
|
||
opacity: 1;
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Copyright (c) Jupyter Development Team.
|
||
| Distributed under the terms of the Modified BSD License.
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
.jp-Collapser {
|
||
flex: 0 0 var(--jp-cell-collapser-width);
|
||
padding: 0;
|
||
margin: 0;
|
||
border: none;
|
||
outline: none;
|
||
background: transparent;
|
||
border-radius: var(--jp-border-radius);
|
||
opacity: 1;
|
||
}
|
||
|
||
.jp-Collapser-child {
|
||
display: block;
|
||
width: 100%;
|
||
box-sizing: border-box;
|
||
|
||
/* height: 100% doesn't work because the height of its parent is computed from content */
|
||
position: absolute;
|
||
top: 0;
|
||
bottom: 0;
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Printing
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
/*
|
||
Hiding collapsers in print mode.
|
||
|
||
Note: input and output wrappers have "display: block" propery in print mode.
|
||
*/
|
||
|
||
@media print {
|
||
.jp-Collapser {
|
||
display: none;
|
||
}
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Copyright (c) Jupyter Development Team.
|
||
| Distributed under the terms of the Modified BSD License.
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Header/Footer
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
/* Hidden by zero height by default */
|
||
.jp-CellHeader,
|
||
.jp-CellFooter {
|
||
height: 0;
|
||
width: 100%;
|
||
padding: 0;
|
||
margin: 0;
|
||
border: none;
|
||
outline: none;
|
||
background: transparent;
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Copyright (c) Jupyter Development Team.
|
||
| Distributed under the terms of the Modified BSD License.
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Input
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
/* All input areas */
|
||
.jp-InputArea {
|
||
display: table;
|
||
table-layout: fixed;
|
||
width: 100%;
|
||
overflow: hidden;
|
||
}
|
||
|
||
.jp-InputArea-editor {
|
||
display: table-cell;
|
||
overflow: hidden;
|
||
vertical-align: top;
|
||
|
||
/* This is the non-active, default styling */
|
||
border: var(--jp-border-width) solid var(--jp-cell-editor-border-color);
|
||
border-radius: 0;
|
||
background: var(--jp-cell-editor-background);
|
||
}
|
||
|
||
.jp-InputPrompt {
|
||
display: table-cell;
|
||
vertical-align: top;
|
||
width: var(--jp-cell-prompt-width);
|
||
color: var(--jp-cell-inprompt-font-color);
|
||
font-family: var(--jp-cell-prompt-font-family);
|
||
padding: var(--jp-code-padding);
|
||
letter-spacing: var(--jp-cell-prompt-letter-spacing);
|
||
opacity: var(--jp-cell-prompt-opacity);
|
||
line-height: var(--jp-code-line-height);
|
||
font-size: var(--jp-code-font-size);
|
||
border: var(--jp-border-width) solid transparent;
|
||
|
||
/* Right align prompt text, don't wrap to handle large prompt numbers */
|
||
text-align: right;
|
||
white-space: nowrap;
|
||
overflow: hidden;
|
||
text-overflow: ellipsis;
|
||
|
||
/* Disable text selection */
|
||
-webkit-user-select: none;
|
||
-moz-user-select: none;
|
||
-ms-user-select: none;
|
||
user-select: none;
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Mobile
|
||
|----------------------------------------------------------------------------*/
|
||
@media only screen and (max-width: 760px) {
|
||
.jp-InputArea-editor {
|
||
display: table-row;
|
||
margin-left: var(--jp-notebook-padding);
|
||
}
|
||
|
||
.jp-InputPrompt {
|
||
display: table-row;
|
||
text-align: left;
|
||
}
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Copyright (c) Jupyter Development Team.
|
||
| Distributed under the terms of the Modified BSD License.
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Placeholder
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
.jp-Placeholder {
|
||
display: table;
|
||
table-layout: fixed;
|
||
width: 100%;
|
||
}
|
||
|
||
.jp-Placeholder-prompt {
|
||
display: table-cell;
|
||
box-sizing: border-box;
|
||
}
|
||
|
||
.jp-Placeholder-content {
|
||
display: table-cell;
|
||
padding: 4px 6px;
|
||
border: 1px solid transparent;
|
||
border-radius: 0;
|
||
background: none;
|
||
box-sizing: border-box;
|
||
cursor: pointer;
|
||
}
|
||
|
||
.jp-Placeholder-contentContainer {
|
||
display: flex;
|
||
}
|
||
|
||
.jp-Placeholder-content:hover,
|
||
.jp-InputPlaceholder > .jp-Placeholder-content:hover {
|
||
border-color: var(--jp-layout-color3);
|
||
}
|
||
|
||
.jp-Placeholder-content .jp-MoreHorizIcon {
|
||
width: 32px;
|
||
height: 16px;
|
||
border: 1px solid transparent;
|
||
border-radius: var(--jp-border-radius);
|
||
}
|
||
|
||
.jp-Placeholder-content .jp-MoreHorizIcon:hover {
|
||
border: 1px solid var(--jp-border-color1);
|
||
box-shadow: 0 0 2px 0 rgba(0, 0, 0, 0.25);
|
||
background-color: var(--jp-layout-color0);
|
||
}
|
||
|
||
.jp-PlaceholderText {
|
||
white-space: nowrap;
|
||
overflow-x: hidden;
|
||
color: var(--jp-inverse-layout-color3);
|
||
font-family: var(--jp-code-font-family);
|
||
}
|
||
|
||
.jp-InputPlaceholder > .jp-Placeholder-content {
|
||
border-color: var(--jp-cell-editor-border-color);
|
||
background: var(--jp-cell-editor-background);
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Copyright (c) Jupyter Development Team.
|
||
| Distributed under the terms of the Modified BSD License.
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Private CSS variables
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
:root {
|
||
--jp-private-cell-scrolling-output-offset: 5px;
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Cell
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
.jp-Cell {
|
||
padding: var(--jp-cell-padding);
|
||
margin: 0;
|
||
border: none;
|
||
outline: none;
|
||
background: transparent;
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Common input/output
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
.jp-Cell-inputWrapper,
|
||
.jp-Cell-outputWrapper {
|
||
display: flex;
|
||
flex-direction: row;
|
||
padding: 0;
|
||
margin: 0;
|
||
|
||
/* Added to reveal the box-shadow on the input and output collapsers. */
|
||
overflow: visible;
|
||
}
|
||
|
||
/* Only input/output areas inside cells */
|
||
.jp-Cell-inputArea,
|
||
.jp-Cell-outputArea {
|
||
flex: 1 1 auto;
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Collapser
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
/* Make the output collapser disappear when there is not output, but do so
|
||
* in a manner that leaves it in the layout and preserves its width.
|
||
*/
|
||
.jp-Cell.jp-mod-noOutputs .jp-Cell-outputCollapser {
|
||
border: none !important;
|
||
background: transparent !important;
|
||
}
|
||
|
||
.jp-Cell:not(.jp-mod-noOutputs) .jp-Cell-outputCollapser {
|
||
min-height: var(--jp-cell-collapser-min-height);
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Output
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
/* Put a space between input and output when there IS output */
|
||
.jp-Cell:not(.jp-mod-noOutputs) .jp-Cell-outputWrapper {
|
||
margin-top: 5px;
|
||
}
|
||
|
||
.jp-CodeCell.jp-mod-outputsScrolled .jp-Cell-outputArea {
|
||
overflow-y: auto;
|
||
max-height: 24em;
|
||
margin-left: var(--jp-private-cell-scrolling-output-offset);
|
||
resize: vertical;
|
||
}
|
||
|
||
.jp-CodeCell.jp-mod-outputsScrolled .jp-Cell-outputArea[style*='height'] {
|
||
max-height: unset;
|
||
}
|
||
|
||
.jp-CodeCell.jp-mod-outputsScrolled .jp-Cell-outputArea::after {
|
||
content: ' ';
|
||
box-shadow: inset 0 0 6px 2px rgb(0 0 0 / 30%);
|
||
width: 100%;
|
||
height: 100%;
|
||
position: sticky;
|
||
bottom: 0;
|
||
top: 0;
|
||
margin-top: -50%;
|
||
float: left;
|
||
display: block;
|
||
pointer-events: none;
|
||
}
|
||
|
||
.jp-CodeCell.jp-mod-outputsScrolled .jp-OutputArea-child {
|
||
padding-top: 6px;
|
||
}
|
||
|
||
.jp-CodeCell.jp-mod-outputsScrolled .jp-OutputArea-prompt {
|
||
width: calc(
|
||
var(--jp-cell-prompt-width) - var(--jp-private-cell-scrolling-output-offset)
|
||
);
|
||
}
|
||
|
||
.jp-CodeCell.jp-mod-outputsScrolled .jp-OutputArea-promptOverlay {
|
||
left: calc(-1 * var(--jp-private-cell-scrolling-output-offset));
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| CodeCell
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| MarkdownCell
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
.jp-MarkdownOutput {
|
||
display: table-cell;
|
||
width: 100%;
|
||
margin-top: 0;
|
||
margin-bottom: 0;
|
||
padding-left: var(--jp-code-padding);
|
||
}
|
||
|
||
.jp-MarkdownOutput.jp-RenderedHTMLCommon {
|
||
overflow: auto;
|
||
}
|
||
|
||
/* collapseHeadingButton (show always if hiddenCellsButton is _not_ shown) */
|
||
.jp-collapseHeadingButton {
|
||
display: flex;
|
||
min-height: var(--jp-cell-collapser-min-height);
|
||
font-size: var(--jp-code-font-size);
|
||
position: absolute;
|
||
background-color: transparent;
|
||
background-size: 25px;
|
||
background-repeat: no-repeat;
|
||
background-position-x: center;
|
||
background-position-y: top;
|
||
background-image: var(--jp-icon-caret-down);
|
||
right: 0;
|
||
top: 0;
|
||
bottom: 0;
|
||
}
|
||
|
||
.jp-collapseHeadingButton.jp-mod-collapsed {
|
||
background-image: var(--jp-icon-caret-right);
|
||
}
|
||
|
||
/*
|
||
set the container font size to match that of content
|
||
so that the nested collapse buttons have the right size
|
||
*/
|
||
.jp-MarkdownCell .jp-InputPrompt {
|
||
font-size: var(--jp-content-font-size1);
|
||
}
|
||
|
||
/*
|
||
Align collapseHeadingButton with cell top header
|
||
The font sizes are identical to the ones in packages/rendermime/style/base.css
|
||
*/
|
||
.jp-mod-rendered .jp-collapseHeadingButton[data-heading-level='1'] {
|
||
font-size: var(--jp-content-font-size5);
|
||
background-position-y: calc(0.3 * var(--jp-content-font-size5));
|
||
}
|
||
|
||
.jp-mod-rendered .jp-collapseHeadingButton[data-heading-level='2'] {
|
||
font-size: var(--jp-content-font-size4);
|
||
background-position-y: calc(0.3 * var(--jp-content-font-size4));
|
||
}
|
||
|
||
.jp-mod-rendered .jp-collapseHeadingButton[data-heading-level='3'] {
|
||
font-size: var(--jp-content-font-size3);
|
||
background-position-y: calc(0.3 * var(--jp-content-font-size3));
|
||
}
|
||
|
||
.jp-mod-rendered .jp-collapseHeadingButton[data-heading-level='4'] {
|
||
font-size: var(--jp-content-font-size2);
|
||
background-position-y: calc(0.3 * var(--jp-content-font-size2));
|
||
}
|
||
|
||
.jp-mod-rendered .jp-collapseHeadingButton[data-heading-level='5'] {
|
||
font-size: var(--jp-content-font-size1);
|
||
background-position-y: top;
|
||
}
|
||
|
||
.jp-mod-rendered .jp-collapseHeadingButton[data-heading-level='6'] {
|
||
font-size: var(--jp-content-font-size0);
|
||
background-position-y: top;
|
||
}
|
||
|
||
/* collapseHeadingButton (show only on (hover,active) if hiddenCellsButton is shown) */
|
||
.jp-Notebook.jp-mod-showHiddenCellsButton .jp-collapseHeadingButton {
|
||
display: none;
|
||
}
|
||
|
||
.jp-Notebook.jp-mod-showHiddenCellsButton
|
||
:is(.jp-MarkdownCell:hover, .jp-mod-active)
|
||
.jp-collapseHeadingButton {
|
||
display: flex;
|
||
}
|
||
|
||
/* showHiddenCellsButton (only show if jp-mod-showHiddenCellsButton is set, which
|
||
is a consequence of the showHiddenCellsButton option in Notebook Settings)*/
|
||
.jp-Notebook.jp-mod-showHiddenCellsButton .jp-showHiddenCellsButton {
|
||
margin-left: calc(var(--jp-cell-prompt-width) + 2 * var(--jp-code-padding));
|
||
margin-top: var(--jp-code-padding);
|
||
border: 1px solid var(--jp-border-color2);
|
||
background-color: var(--jp-border-color3) !important;
|
||
color: var(--jp-content-font-color0) !important;
|
||
display: flex;
|
||
}
|
||
|
||
.jp-Notebook.jp-mod-showHiddenCellsButton .jp-showHiddenCellsButton:hover {
|
||
background-color: var(--jp-border-color2) !important;
|
||
}
|
||
|
||
.jp-showHiddenCellsButton {
|
||
display: none;
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Printing
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
/*
|
||
Using block instead of flex to allow the use of the break-inside CSS property for
|
||
cell outputs.
|
||
*/
|
||
|
||
@media print {
|
||
.jp-Cell-inputWrapper,
|
||
.jp-Cell-outputWrapper {
|
||
display: block;
|
||
}
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Copyright (c) Jupyter Development Team.
|
||
| Distributed under the terms of the Modified BSD License.
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Copyright (c) Jupyter Development Team.
|
||
| Distributed under the terms of the Modified BSD License.
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Variables
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
:root {
|
||
--jp-notebook-toolbar-padding: 2px 5px 2px 2px;
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Styles
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
.jp-NotebookPanel-toolbar {
|
||
padding: var(--jp-notebook-toolbar-padding);
|
||
|
||
/* disable paint containment from lumino 2.0 default strict CSS containment */
|
||
contain: style size !important;
|
||
}
|
||
|
||
.jp-Toolbar-item.jp-Notebook-toolbarCellType .jp-select-wrapper.jp-mod-focused {
|
||
border: none;
|
||
box-shadow: none;
|
||
}
|
||
|
||
.jp-Notebook-toolbarCellTypeDropdown select {
|
||
height: 24px;
|
||
font-size: var(--jp-ui-font-size1);
|
||
line-height: 14px;
|
||
border-radius: 0;
|
||
display: block;
|
||
}
|
||
|
||
.jp-Notebook-toolbarCellTypeDropdown span {
|
||
top: 5px !important;
|
||
}
|
||
|
||
.jp-Toolbar-responsive-popup {
|
||
position: absolute;
|
||
height: fit-content;
|
||
display: flex;
|
||
flex-direction: row;
|
||
flex-wrap: wrap;
|
||
justify-content: flex-end;
|
||
border-bottom: var(--jp-border-width) solid var(--jp-toolbar-border-color);
|
||
box-shadow: var(--jp-toolbar-box-shadow);
|
||
background: var(--jp-toolbar-background);
|
||
min-height: var(--jp-toolbar-micro-height);
|
||
padding: var(--jp-notebook-toolbar-padding);
|
||
z-index: 1;
|
||
right: 0;
|
||
top: 0;
|
||
}
|
||
|
||
.jp-Toolbar > .jp-Toolbar-responsive-opener {
|
||
margin-left: auto;
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Copyright (c) Jupyter Development Team.
|
||
| Distributed under the terms of the Modified BSD License.
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Variables
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Styles
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
.jp-Notebook-ExecutionIndicator {
|
||
position: relative;
|
||
display: inline-block;
|
||
height: 100%;
|
||
z-index: 9997;
|
||
}
|
||
|
||
.jp-Notebook-ExecutionIndicator-tooltip {
|
||
visibility: hidden;
|
||
height: auto;
|
||
width: max-content;
|
||
width: -moz-max-content;
|
||
background-color: var(--jp-layout-color2);
|
||
color: var(--jp-ui-font-color1);
|
||
text-align: justify;
|
||
border-radius: 6px;
|
||
padding: 0 5px;
|
||
position: fixed;
|
||
display: table;
|
||
}
|
||
|
||
.jp-Notebook-ExecutionIndicator-tooltip.up {
|
||
transform: translateX(-50%) translateY(-100%) translateY(-32px);
|
||
}
|
||
|
||
.jp-Notebook-ExecutionIndicator-tooltip.down {
|
||
transform: translateX(calc(-100% + 16px)) translateY(5px);
|
||
}
|
||
|
||
.jp-Notebook-ExecutionIndicator-tooltip.hidden {
|
||
display: none;
|
||
}
|
||
|
||
.jp-Notebook-ExecutionIndicator:hover .jp-Notebook-ExecutionIndicator-tooltip {
|
||
visibility: visible;
|
||
}
|
||
|
||
.jp-Notebook-ExecutionIndicator span {
|
||
font-size: var(--jp-ui-font-size1);
|
||
font-family: var(--jp-ui-font-family);
|
||
color: var(--jp-ui-font-color1);
|
||
line-height: 24px;
|
||
display: block;
|
||
}
|
||
|
||
.jp-Notebook-ExecutionIndicator-progress-bar {
|
||
display: flex;
|
||
justify-content: center;
|
||
height: 100%;
|
||
}
|
||
|
||
/*
|
||
* Copyright (c) Jupyter Development Team.
|
||
* Distributed under the terms of the Modified BSD License.
|
||
*/
|
||
|
||
/*
|
||
* Execution indicator
|
||
*/
|
||
.jp-tocItem-content::after {
|
||
content: '';
|
||
|
||
/* Must be identical to form a circle */
|
||
width: 12px;
|
||
height: 12px;
|
||
background: none;
|
||
border: none;
|
||
position: absolute;
|
||
right: 0;
|
||
}
|
||
|
||
.jp-tocItem-content[data-running='0']::after {
|
||
border-radius: 50%;
|
||
border: var(--jp-border-width) solid var(--jp-inverse-layout-color3);
|
||
background: none;
|
||
}
|
||
|
||
.jp-tocItem-content[data-running='1']::after {
|
||
border-radius: 50%;
|
||
border: var(--jp-border-width) solid var(--jp-inverse-layout-color3);
|
||
background-color: var(--jp-inverse-layout-color3);
|
||
}
|
||
|
||
.jp-tocItem-content[data-running='0'],
|
||
.jp-tocItem-content[data-running='1'] {
|
||
margin-right: 12px;
|
||
}
|
||
|
||
/*
|
||
* Copyright (c) Jupyter Development Team.
|
||
* Distributed under the terms of the Modified BSD License.
|
||
*/
|
||
|
||
.jp-Notebook-footer {
|
||
height: 27px;
|
||
margin-left: calc(
|
||
var(--jp-cell-prompt-width) + var(--jp-cell-collapser-width) +
|
||
var(--jp-cell-padding)
|
||
);
|
||
width: calc(
|
||
100% -
|
||
(
|
||
var(--jp-cell-prompt-width) + var(--jp-cell-collapser-width) +
|
||
var(--jp-cell-padding) + var(--jp-cell-padding)
|
||
)
|
||
);
|
||
border: var(--jp-border-width) solid var(--jp-cell-editor-border-color);
|
||
color: var(--jp-ui-font-color3);
|
||
margin-top: 6px;
|
||
background: none;
|
||
cursor: pointer;
|
||
}
|
||
|
||
.jp-Notebook-footer:focus {
|
||
border-color: var(--jp-cell-editor-active-border-color);
|
||
}
|
||
|
||
/* For devices that support hovering, hide footer until hover */
|
||
@media (hover: hover) {
|
||
.jp-Notebook-footer {
|
||
opacity: 0;
|
||
}
|
||
|
||
.jp-Notebook-footer:focus,
|
||
.jp-Notebook-footer:hover {
|
||
opacity: 1;
|
||
}
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Copyright (c) Jupyter Development Team.
|
||
| Distributed under the terms of the Modified BSD License.
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Imports
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| CSS variables
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
:root {
|
||
--jp-side-by-side-output-size: 1fr;
|
||
--jp-side-by-side-resized-cell: var(--jp-side-by-side-output-size);
|
||
--jp-private-notebook-dragImage-width: 304px;
|
||
--jp-private-notebook-dragImage-height: 36px;
|
||
--jp-private-notebook-selected-color: var(--md-blue-400);
|
||
--jp-private-notebook-active-color: var(--md-green-400);
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Notebook
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
/* stylelint-disable selector-max-class */
|
||
|
||
.jp-NotebookPanel {
|
||
display: block;
|
||
height: 100%;
|
||
}
|
||
|
||
.jp-NotebookPanel.jp-Document {
|
||
min-width: 240px;
|
||
min-height: 120px;
|
||
}
|
||
|
||
.jp-Notebook {
|
||
padding: var(--jp-notebook-padding);
|
||
outline: none;
|
||
overflow: auto;
|
||
background: var(--jp-layout-color0);
|
||
}
|
||
|
||
.jp-Notebook.jp-mod-scrollPastEnd::after {
|
||
display: block;
|
||
content: '';
|
||
min-height: var(--jp-notebook-scroll-padding);
|
||
}
|
||
|
||
.jp-MainAreaWidget-ContainStrict .jp-Notebook * {
|
||
contain: strict;
|
||
}
|
||
|
||
.jp-Notebook .jp-Cell {
|
||
overflow: visible;
|
||
}
|
||
|
||
.jp-Notebook .jp-Cell .jp-InputPrompt {
|
||
cursor: move;
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Notebook state related styling
|
||
|
|
||
| The notebook and cells each have states, here are the possibilities:
|
||
|
|
||
| - Notebook
|
||
| - Command
|
||
| - Edit
|
||
| - Cell
|
||
| - None
|
||
| - Active (only one can be active)
|
||
| - Selected (the cells actions are applied to)
|
||
| - Multiselected (when multiple selected, the cursor)
|
||
| - No outputs
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
/* Command or edit modes */
|
||
|
||
.jp-Notebook .jp-Cell:not(.jp-mod-active) .jp-InputPrompt {
|
||
opacity: var(--jp-cell-prompt-not-active-opacity);
|
||
color: var(--jp-cell-prompt-not-active-font-color);
|
||
}
|
||
|
||
.jp-Notebook .jp-Cell:not(.jp-mod-active) .jp-OutputPrompt {
|
||
opacity: var(--jp-cell-prompt-not-active-opacity);
|
||
color: var(--jp-cell-prompt-not-active-font-color);
|
||
}
|
||
|
||
/* cell is active */
|
||
.jp-Notebook .jp-Cell.jp-mod-active .jp-Collapser {
|
||
background: var(--jp-brand-color1);
|
||
}
|
||
|
||
/* cell is dirty */
|
||
.jp-Notebook .jp-Cell.jp-mod-dirty .jp-InputPrompt {
|
||
color: var(--jp-warn-color1);
|
||
}
|
||
|
||
.jp-Notebook .jp-Cell.jp-mod-dirty .jp-InputPrompt::before {
|
||
color: var(--jp-warn-color1);
|
||
content: '•';
|
||
}
|
||
|
||
.jp-Notebook .jp-Cell.jp-mod-active.jp-mod-dirty .jp-Collapser {
|
||
background: var(--jp-warn-color1);
|
||
}
|
||
|
||
/* collapser is hovered */
|
||
.jp-Notebook .jp-Cell .jp-Collapser:hover {
|
||
box-shadow: var(--jp-elevation-z2);
|
||
background: var(--jp-brand-color1);
|
||
opacity: var(--jp-cell-collapser-not-active-hover-opacity);
|
||
}
|
||
|
||
/* cell is active and collapser is hovered */
|
||
.jp-Notebook .jp-Cell.jp-mod-active .jp-Collapser:hover {
|
||
background: var(--jp-brand-color0);
|
||
opacity: 1;
|
||
}
|
||
|
||
/* Command mode */
|
||
|
||
.jp-Notebook.jp-mod-commandMode .jp-Cell.jp-mod-selected {
|
||
background: var(--jp-notebook-multiselected-color);
|
||
}
|
||
|
||
.jp-Notebook.jp-mod-commandMode
|
||
.jp-Cell.jp-mod-active.jp-mod-selected:not(.jp-mod-multiSelected) {
|
||
background: transparent;
|
||
}
|
||
|
||
/* Edit mode */
|
||
|
||
.jp-Notebook.jp-mod-editMode .jp-Cell.jp-mod-active .jp-InputArea-editor {
|
||
border: var(--jp-border-width) solid var(--jp-cell-editor-active-border-color);
|
||
box-shadow: var(--jp-input-box-shadow);
|
||
background-color: var(--jp-cell-editor-active-background);
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Notebook drag and drop
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
.jp-Notebook-cell.jp-mod-dropSource {
|
||
opacity: 0.5;
|
||
}
|
||
|
||
.jp-Notebook-cell.jp-mod-dropTarget,
|
||
.jp-Notebook.jp-mod-commandMode
|
||
.jp-Notebook-cell.jp-mod-active.jp-mod-selected.jp-mod-dropTarget {
|
||
border-top-color: var(--jp-private-notebook-selected-color);
|
||
border-top-style: solid;
|
||
border-top-width: 2px;
|
||
}
|
||
|
||
.jp-dragImage {
|
||
display: block;
|
||
flex-direction: row;
|
||
width: var(--jp-private-notebook-dragImage-width);
|
||
height: var(--jp-private-notebook-dragImage-height);
|
||
border: var(--jp-border-width) solid var(--jp-cell-editor-border-color);
|
||
background: var(--jp-cell-editor-background);
|
||
overflow: visible;
|
||
}
|
||
|
||
.jp-dragImage-singlePrompt {
|
||
box-shadow: 2px 2px 4px 0 rgba(0, 0, 0, 0.12);
|
||
}
|
||
|
||
.jp-dragImage .jp-dragImage-content {
|
||
flex: 1 1 auto;
|
||
z-index: 2;
|
||
font-size: var(--jp-code-font-size);
|
||
font-family: var(--jp-code-font-family);
|
||
line-height: var(--jp-code-line-height);
|
||
padding: var(--jp-code-padding);
|
||
border: var(--jp-border-width) solid var(--jp-cell-editor-border-color);
|
||
background: var(--jp-cell-editor-background-color);
|
||
color: var(--jp-content-font-color3);
|
||
text-align: left;
|
||
margin: 4px 4px 4px 0;
|
||
}
|
||
|
||
.jp-dragImage .jp-dragImage-prompt {
|
||
flex: 0 0 auto;
|
||
min-width: 36px;
|
||
color: var(--jp-cell-inprompt-font-color);
|
||
padding: var(--jp-code-padding);
|
||
padding-left: 12px;
|
||
font-family: var(--jp-cell-prompt-font-family);
|
||
letter-spacing: var(--jp-cell-prompt-letter-spacing);
|
||
line-height: 1.9;
|
||
font-size: var(--jp-code-font-size);
|
||
border: var(--jp-border-width) solid transparent;
|
||
}
|
||
|
||
.jp-dragImage-multipleBack {
|
||
z-index: -1;
|
||
position: absolute;
|
||
height: 32px;
|
||
width: 300px;
|
||
top: 8px;
|
||
left: 8px;
|
||
background: var(--jp-layout-color2);
|
||
border: var(--jp-border-width) solid var(--jp-input-border-color);
|
||
box-shadow: 2px 2px 4px 0 rgba(0, 0, 0, 0.12);
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Cell toolbar
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
.jp-NotebookTools {
|
||
display: block;
|
||
min-width: var(--jp-sidebar-min-width);
|
||
color: var(--jp-ui-font-color1);
|
||
background: var(--jp-layout-color1);
|
||
|
||
/* This is needed so that all font sizing of children done in ems is
|
||
* relative to this base size */
|
||
font-size: var(--jp-ui-font-size1);
|
||
overflow: auto;
|
||
}
|
||
|
||
.jp-ActiveCellTool {
|
||
padding: 12px 0;
|
||
display: flex;
|
||
}
|
||
|
||
.jp-ActiveCellTool-Content {
|
||
flex: 1 1 auto;
|
||
}
|
||
|
||
.jp-ActiveCellTool .jp-ActiveCellTool-CellContent {
|
||
background: var(--jp-cell-editor-background);
|
||
border: var(--jp-border-width) solid var(--jp-cell-editor-border-color);
|
||
border-radius: 0;
|
||
min-height: 29px;
|
||
}
|
||
|
||
.jp-ActiveCellTool .jp-InputPrompt {
|
||
min-width: calc(var(--jp-cell-prompt-width) * 0.75);
|
||
}
|
||
|
||
.jp-ActiveCellTool-CellContent > pre {
|
||
padding: 5px 4px;
|
||
margin: 0;
|
||
white-space: normal;
|
||
}
|
||
|
||
.jp-MetadataEditorTool {
|
||
flex-direction: column;
|
||
padding: 12px 0;
|
||
}
|
||
|
||
.jp-RankedPanel > :not(:first-child) {
|
||
margin-top: 12px;
|
||
}
|
||
|
||
.jp-KeySelector select.jp-mod-styled {
|
||
font-size: var(--jp-ui-font-size1);
|
||
color: var(--jp-ui-font-color0);
|
||
border: var(--jp-border-width) solid var(--jp-border-color1);
|
||
}
|
||
|
||
.jp-KeySelector label,
|
||
.jp-MetadataEditorTool label,
|
||
.jp-NumberSetter label {
|
||
line-height: 1.4;
|
||
}
|
||
|
||
.jp-NotebookTools .jp-select-wrapper {
|
||
margin-top: 4px;
|
||
margin-bottom: 0;
|
||
}
|
||
|
||
.jp-NumberSetter input {
|
||
width: 100%;
|
||
margin-top: 4px;
|
||
}
|
||
|
||
.jp-NotebookTools .jp-Collapse {
|
||
margin-top: 16px;
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Presentation Mode (.jp-mod-presentationMode)
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
.jp-mod-presentationMode .jp-Notebook {
|
||
--jp-content-font-size1: var(--jp-content-presentation-font-size1);
|
||
--jp-code-font-size: var(--jp-code-presentation-font-size);
|
||
}
|
||
|
||
.jp-mod-presentationMode .jp-Notebook .jp-Cell .jp-InputPrompt,
|
||
.jp-mod-presentationMode .jp-Notebook .jp-Cell .jp-OutputPrompt {
|
||
flex: 0 0 110px;
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Side-by-side Mode (.jp-mod-sideBySide)
|
||
|----------------------------------------------------------------------------*/
|
||
.jp-mod-sideBySide.jp-Notebook .jp-Notebook-cell {
|
||
margin-top: 3em;
|
||
margin-bottom: 3em;
|
||
margin-left: 5%;
|
||
margin-right: 5%;
|
||
}
|
||
|
||
.jp-mod-sideBySide.jp-Notebook .jp-CodeCell {
|
||
display: grid;
|
||
grid-template-columns: minmax(0, 1fr) min-content minmax(
|
||
0,
|
||
var(--jp-side-by-side-output-size)
|
||
);
|
||
grid-template-rows: auto minmax(0, 1fr) auto;
|
||
grid-template-areas:
|
||
'header header header'
|
||
'input handle output'
|
||
'footer footer footer';
|
||
}
|
||
|
||
.jp-mod-sideBySide.jp-Notebook .jp-CodeCell.jp-mod-resizedCell {
|
||
grid-template-columns: minmax(0, 1fr) min-content minmax(
|
||
0,
|
||
var(--jp-side-by-side-resized-cell)
|
||
);
|
||
}
|
||
|
||
.jp-mod-sideBySide.jp-Notebook .jp-CodeCell .jp-CellHeader {
|
||
grid-area: header;
|
||
}
|
||
|
||
.jp-mod-sideBySide.jp-Notebook .jp-CodeCell .jp-Cell-inputWrapper {
|
||
grid-area: input;
|
||
}
|
||
|
||
.jp-mod-sideBySide.jp-Notebook .jp-CodeCell .jp-Cell-outputWrapper {
|
||
/* overwrite the default margin (no vertical separation needed in side by side move */
|
||
margin-top: 0;
|
||
grid-area: output;
|
||
}
|
||
|
||
.jp-mod-sideBySide.jp-Notebook .jp-CodeCell .jp-CellFooter {
|
||
grid-area: footer;
|
||
}
|
||
|
||
.jp-mod-sideBySide.jp-Notebook .jp-CodeCell .jp-CellResizeHandle {
|
||
grid-area: handle;
|
||
user-select: none;
|
||
display: block;
|
||
height: 100%;
|
||
cursor: ew-resize;
|
||
padding: 0 var(--jp-cell-padding);
|
||
}
|
||
|
||
.jp-mod-sideBySide.jp-Notebook .jp-CodeCell .jp-CellResizeHandle::after {
|
||
content: '';
|
||
display: block;
|
||
background: var(--jp-border-color2);
|
||
height: 100%;
|
||
width: 5px;
|
||
}
|
||
|
||
.jp-mod-sideBySide.jp-Notebook
|
||
.jp-CodeCell.jp-mod-resizedCell
|
||
.jp-CellResizeHandle::after {
|
||
background: var(--jp-border-color0);
|
||
}
|
||
|
||
.jp-CellResizeHandle {
|
||
display: none;
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Placeholder
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
.jp-Cell-Placeholder {
|
||
padding-left: 55px;
|
||
}
|
||
|
||
.jp-Cell-Placeholder-wrapper {
|
||
background: #fff;
|
||
border: 1px solid;
|
||
border-color: #e5e6e9 #dfe0e4 #d0d1d5;
|
||
border-radius: 4px;
|
||
-webkit-border-radius: 4px;
|
||
margin: 10px 15px;
|
||
}
|
||
|
||
.jp-Cell-Placeholder-wrapper-inner {
|
||
padding: 15px;
|
||
position: relative;
|
||
}
|
||
|
||
.jp-Cell-Placeholder-wrapper-body {
|
||
background-repeat: repeat;
|
||
background-size: 50% auto;
|
||
}
|
||
|
||
.jp-Cell-Placeholder-wrapper-body div {
|
||
background: #f6f7f8;
|
||
background-image: -webkit-linear-gradient(
|
||
left,
|
||
#f6f7f8 0%,
|
||
#edeef1 20%,
|
||
#f6f7f8 40%,
|
||
#f6f7f8 100%
|
||
);
|
||
background-repeat: no-repeat;
|
||
background-size: 800px 104px;
|
||
height: 104px;
|
||
position: absolute;
|
||
right: 15px;
|
||
left: 15px;
|
||
top: 15px;
|
||
}
|
||
|
||
div.jp-Cell-Placeholder-h1 {
|
||
top: 20px;
|
||
height: 20px;
|
||
left: 15px;
|
||
width: 150px;
|
||
}
|
||
|
||
div.jp-Cell-Placeholder-h2 {
|
||
left: 15px;
|
||
top: 50px;
|
||
height: 10px;
|
||
width: 100px;
|
||
}
|
||
|
||
div.jp-Cell-Placeholder-content-1,
|
||
div.jp-Cell-Placeholder-content-2,
|
||
div.jp-Cell-Placeholder-content-3 {
|
||
left: 15px;
|
||
right: 15px;
|
||
height: 10px;
|
||
}
|
||
|
||
div.jp-Cell-Placeholder-content-1 {
|
||
top: 100px;
|
||
}
|
||
|
||
div.jp-Cell-Placeholder-content-2 {
|
||
top: 120px;
|
||
}
|
||
|
||
div.jp-Cell-Placeholder-content-3 {
|
||
top: 140px;
|
||
}
|
||
|
||
</style>
|
||
<style type="text/css">
|
||
/*-----------------------------------------------------------------------------
|
||
| Copyright (c) Jupyter Development Team.
|
||
| Distributed under the terms of the Modified BSD License.
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
/*
|
||
The following CSS variables define the main, public API for styling JupyterLab.
|
||
These variables should be used by all plugins wherever possible. In other
|
||
words, plugins should not define custom colors, sizes, etc unless absolutely
|
||
necessary. This enables users to change the visual theme of JupyterLab
|
||
by changing these variables.
|
||
|
||
Many variables appear in an ordered sequence (0,1,2,3). These sequences
|
||
are designed to work well together, so for example, `--jp-border-color1` should
|
||
be used with `--jp-layout-color1`. The numbers have the following meanings:
|
||
|
||
* 0: super-primary, reserved for special emphasis
|
||
* 1: primary, most important under normal situations
|
||
* 2: secondary, next most important under normal situations
|
||
* 3: tertiary, next most important under normal situations
|
||
|
||
Throughout JupyterLab, we are mostly following principles from Google's
|
||
Material Design when selecting colors. We are not, however, following
|
||
all of MD as it is not optimized for dense, information rich UIs.
|
||
*/
|
||
|
||
:root {
|
||
/* Elevation
|
||
*
|
||
* We style box-shadows using Material Design's idea of elevation. These particular numbers are taken from here:
|
||
*
|
||
* https://github.com/material-components/material-components-web
|
||
* https://material-components-web.appspot.com/elevation.html
|
||
*/
|
||
|
||
--jp-shadow-base-lightness: 0;
|
||
--jp-shadow-umbra-color: rgba(
|
||
var(--jp-shadow-base-lightness),
|
||
var(--jp-shadow-base-lightness),
|
||
var(--jp-shadow-base-lightness),
|
||
0.2
|
||
);
|
||
--jp-shadow-penumbra-color: rgba(
|
||
var(--jp-shadow-base-lightness),
|
||
var(--jp-shadow-base-lightness),
|
||
var(--jp-shadow-base-lightness),
|
||
0.14
|
||
);
|
||
--jp-shadow-ambient-color: rgba(
|
||
var(--jp-shadow-base-lightness),
|
||
var(--jp-shadow-base-lightness),
|
||
var(--jp-shadow-base-lightness),
|
||
0.12
|
||
);
|
||
--jp-elevation-z0: none;
|
||
--jp-elevation-z1: 0 2px 1px -1px var(--jp-shadow-umbra-color),
|
||
0 1px 1px 0 var(--jp-shadow-penumbra-color),
|
||
0 1px 3px 0 var(--jp-shadow-ambient-color);
|
||
--jp-elevation-z2: 0 3px 1px -2px var(--jp-shadow-umbra-color),
|
||
0 2px 2px 0 var(--jp-shadow-penumbra-color),
|
||
0 1px 5px 0 var(--jp-shadow-ambient-color);
|
||
--jp-elevation-z4: 0 2px 4px -1px var(--jp-shadow-umbra-color),
|
||
0 4px 5px 0 var(--jp-shadow-penumbra-color),
|
||
0 1px 10px 0 var(--jp-shadow-ambient-color);
|
||
--jp-elevation-z6: 0 3px 5px -1px var(--jp-shadow-umbra-color),
|
||
0 6px 10px 0 var(--jp-shadow-penumbra-color),
|
||
0 1px 18px 0 var(--jp-shadow-ambient-color);
|
||
--jp-elevation-z8: 0 5px 5px -3px var(--jp-shadow-umbra-color),
|
||
0 8px 10px 1px var(--jp-shadow-penumbra-color),
|
||
0 3px 14px 2px var(--jp-shadow-ambient-color);
|
||
--jp-elevation-z12: 0 7px 8px -4px var(--jp-shadow-umbra-color),
|
||
0 12px 17px 2px var(--jp-shadow-penumbra-color),
|
||
0 5px 22px 4px var(--jp-shadow-ambient-color);
|
||
--jp-elevation-z16: 0 8px 10px -5px var(--jp-shadow-umbra-color),
|
||
0 16px 24px 2px var(--jp-shadow-penumbra-color),
|
||
0 6px 30px 5px var(--jp-shadow-ambient-color);
|
||
--jp-elevation-z20: 0 10px 13px -6px var(--jp-shadow-umbra-color),
|
||
0 20px 31px 3px var(--jp-shadow-penumbra-color),
|
||
0 8px 38px 7px var(--jp-shadow-ambient-color);
|
||
--jp-elevation-z24: 0 11px 15px -7px var(--jp-shadow-umbra-color),
|
||
0 24px 38px 3px var(--jp-shadow-penumbra-color),
|
||
0 9px 46px 8px var(--jp-shadow-ambient-color);
|
||
|
||
/* Borders
|
||
*
|
||
* The following variables, specify the visual styling of borders in JupyterLab.
|
||
*/
|
||
|
||
--jp-border-width: 1px;
|
||
--jp-border-color0: var(--md-grey-400);
|
||
--jp-border-color1: var(--md-grey-400);
|
||
--jp-border-color2: var(--md-grey-300);
|
||
--jp-border-color3: var(--md-grey-200);
|
||
--jp-inverse-border-color: var(--md-grey-600);
|
||
--jp-border-radius: 2px;
|
||
|
||
/* UI Fonts
|
||
*
|
||
* The UI font CSS variables are used for the typography all of the JupyterLab
|
||
* user interface elements that are not directly user generated content.
|
||
*
|
||
* The font sizing here is done assuming that the body font size of --jp-ui-font-size1
|
||
* is applied to a parent element. When children elements, such as headings, are sized
|
||
* in em all things will be computed relative to that body size.
|
||
*/
|
||
|
||
--jp-ui-font-scale-factor: 1.2;
|
||
--jp-ui-font-size0: 0.83333em;
|
||
--jp-ui-font-size1: 13px; /* Base font size */
|
||
--jp-ui-font-size2: 1.2em;
|
||
--jp-ui-font-size3: 1.44em;
|
||
--jp-ui-font-family: system-ui, -apple-system, blinkmacsystemfont, 'Segoe UI',
|
||
helvetica, arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji',
|
||
'Segoe UI Symbol';
|
||
|
||
/*
|
||
* Use these font colors against the corresponding main layout colors.
|
||
* In a light theme, these go from dark to light.
|
||
*/
|
||
|
||
/* Defaults use Material Design specification */
|
||
--jp-ui-font-color0: rgba(0, 0, 0, 1);
|
||
--jp-ui-font-color1: rgba(0, 0, 0, 0.87);
|
||
--jp-ui-font-color2: rgba(0, 0, 0, 0.54);
|
||
--jp-ui-font-color3: rgba(0, 0, 0, 0.38);
|
||
|
||
/*
|
||
* Use these against the brand/accent/warn/error colors.
|
||
* These will typically go from light to darker, in both a dark and light theme.
|
||
*/
|
||
|
||
--jp-ui-inverse-font-color0: rgba(255, 255, 255, 1);
|
||
--jp-ui-inverse-font-color1: rgba(255, 255, 255, 1);
|
||
--jp-ui-inverse-font-color2: rgba(255, 255, 255, 0.7);
|
||
--jp-ui-inverse-font-color3: rgba(255, 255, 255, 0.5);
|
||
|
||
/* Content Fonts
|
||
*
|
||
* Content font variables are used for typography of user generated content.
|
||
*
|
||
* The font sizing here is done assuming that the body font size of --jp-content-font-size1
|
||
* is applied to a parent element. When children elements, such as headings, are sized
|
||
* in em all things will be computed relative to that body size.
|
||
*/
|
||
|
||
--jp-content-line-height: 1.6;
|
||
--jp-content-font-scale-factor: 1.2;
|
||
--jp-content-font-size0: 0.83333em;
|
||
--jp-content-font-size1: 14px; /* Base font size */
|
||
--jp-content-font-size2: 1.2em;
|
||
--jp-content-font-size3: 1.44em;
|
||
--jp-content-font-size4: 1.728em;
|
||
--jp-content-font-size5: 2.0736em;
|
||
|
||
/* This gives a magnification of about 125% in presentation mode over normal. */
|
||
--jp-content-presentation-font-size1: 17px;
|
||
--jp-content-heading-line-height: 1;
|
||
--jp-content-heading-margin-top: 1.2em;
|
||
--jp-content-heading-margin-bottom: 0.8em;
|
||
--jp-content-heading-font-weight: 500;
|
||
|
||
/* Defaults use Material Design specification */
|
||
--jp-content-font-color0: rgba(0, 0, 0, 1);
|
||
--jp-content-font-color1: rgba(0, 0, 0, 0.87);
|
||
--jp-content-font-color2: rgba(0, 0, 0, 0.54);
|
||
--jp-content-font-color3: rgba(0, 0, 0, 0.38);
|
||
--jp-content-link-color: var(--md-blue-900);
|
||
--jp-content-font-family: system-ui, -apple-system, blinkmacsystemfont,
|
||
'Segoe UI', helvetica, arial, sans-serif, 'Apple Color Emoji',
|
||
'Segoe UI Emoji', 'Segoe UI Symbol';
|
||
|
||
/*
|
||
* Code Fonts
|
||
*
|
||
* Code font variables are used for typography of code and other monospaces content.
|
||
*/
|
||
|
||
--jp-code-font-size: 13px;
|
||
--jp-code-line-height: 1.3077; /* 17px for 13px base */
|
||
--jp-code-padding: 5px; /* 5px for 13px base, codemirror highlighting needs integer px value */
|
||
--jp-code-font-family-default: menlo, consolas, 'DejaVu Sans Mono', monospace;
|
||
--jp-code-font-family: var(--jp-code-font-family-default);
|
||
|
||
/* This gives a magnification of about 125% in presentation mode over normal. */
|
||
--jp-code-presentation-font-size: 16px;
|
||
|
||
/* may need to tweak cursor width if you change font size */
|
||
--jp-code-cursor-width0: 1.4px;
|
||
--jp-code-cursor-width1: 2px;
|
||
--jp-code-cursor-width2: 4px;
|
||
|
||
/* Layout
|
||
*
|
||
* The following are the main layout colors use in JupyterLab. In a light
|
||
* theme these would go from light to dark.
|
||
*/
|
||
|
||
--jp-layout-color0: white;
|
||
--jp-layout-color1: white;
|
||
--jp-layout-color2: var(--md-grey-200);
|
||
--jp-layout-color3: var(--md-grey-400);
|
||
--jp-layout-color4: var(--md-grey-600);
|
||
|
||
/* Inverse Layout
|
||
*
|
||
* The following are the inverse layout colors use in JupyterLab. In a light
|
||
* theme these would go from dark to light.
|
||
*/
|
||
|
||
--jp-inverse-layout-color0: #111;
|
||
--jp-inverse-layout-color1: var(--md-grey-900);
|
||
--jp-inverse-layout-color2: var(--md-grey-800);
|
||
--jp-inverse-layout-color3: var(--md-grey-700);
|
||
--jp-inverse-layout-color4: var(--md-grey-600);
|
||
|
||
/* Brand/accent */
|
||
|
||
--jp-brand-color0: var(--md-blue-900);
|
||
--jp-brand-color1: var(--md-blue-700);
|
||
--jp-brand-color2: var(--md-blue-300);
|
||
--jp-brand-color3: var(--md-blue-100);
|
||
--jp-brand-color4: var(--md-blue-50);
|
||
--jp-accent-color0: var(--md-green-900);
|
||
--jp-accent-color1: var(--md-green-700);
|
||
--jp-accent-color2: var(--md-green-300);
|
||
--jp-accent-color3: var(--md-green-100);
|
||
|
||
/* State colors (warn, error, success, info) */
|
||
|
||
--jp-warn-color0: var(--md-orange-900);
|
||
--jp-warn-color1: var(--md-orange-700);
|
||
--jp-warn-color2: var(--md-orange-300);
|
||
--jp-warn-color3: var(--md-orange-100);
|
||
--jp-error-color0: var(--md-red-900);
|
||
--jp-error-color1: var(--md-red-700);
|
||
--jp-error-color2: var(--md-red-300);
|
||
--jp-error-color3: var(--md-red-100);
|
||
--jp-success-color0: var(--md-green-900);
|
||
--jp-success-color1: var(--md-green-700);
|
||
--jp-success-color2: var(--md-green-300);
|
||
--jp-success-color3: var(--md-green-100);
|
||
--jp-info-color0: var(--md-cyan-900);
|
||
--jp-info-color1: var(--md-cyan-700);
|
||
--jp-info-color2: var(--md-cyan-300);
|
||
--jp-info-color3: var(--md-cyan-100);
|
||
|
||
/* Cell specific styles */
|
||
|
||
--jp-cell-padding: 5px;
|
||
--jp-cell-collapser-width: 8px;
|
||
--jp-cell-collapser-min-height: 20px;
|
||
--jp-cell-collapser-not-active-hover-opacity: 0.6;
|
||
--jp-cell-editor-background: var(--md-grey-100);
|
||
--jp-cell-editor-border-color: var(--md-grey-300);
|
||
--jp-cell-editor-box-shadow: inset 0 0 2px var(--md-blue-300);
|
||
--jp-cell-editor-active-background: var(--jp-layout-color0);
|
||
--jp-cell-editor-active-border-color: var(--jp-brand-color1);
|
||
--jp-cell-prompt-width: 64px;
|
||
--jp-cell-prompt-font-family: var(--jp-code-font-family-default);
|
||
--jp-cell-prompt-letter-spacing: 0;
|
||
--jp-cell-prompt-opacity: 1;
|
||
--jp-cell-prompt-not-active-opacity: 0.5;
|
||
--jp-cell-prompt-not-active-font-color: var(--md-grey-700);
|
||
|
||
/* A custom blend of MD grey and blue 600
|
||
* See https://meyerweb.com/eric/tools/color-blend/#546E7A:1E88E5:5:hex */
|
||
--jp-cell-inprompt-font-color: #307fc1;
|
||
|
||
/* A custom blend of MD grey and orange 600
|
||
* https://meyerweb.com/eric/tools/color-blend/#546E7A:F4511E:5:hex */
|
||
--jp-cell-outprompt-font-color: #bf5b3d;
|
||
|
||
/* Notebook specific styles */
|
||
|
||
--jp-notebook-padding: 10px;
|
||
--jp-notebook-select-background: var(--jp-layout-color1);
|
||
--jp-notebook-multiselected-color: var(--md-blue-50);
|
||
|
||
/* The scroll padding is calculated to fill enough space at the bottom of the
|
||
notebook to show one single-line cell (with appropriate padding) at the top
|
||
when the notebook is scrolled all the way to the bottom. We also subtract one
|
||
pixel so that no scrollbar appears if we have just one single-line cell in the
|
||
notebook. This padding is to enable a 'scroll past end' feature in a notebook.
|
||
*/
|
||
--jp-notebook-scroll-padding: calc(
|
||
100% - var(--jp-code-font-size) * var(--jp-code-line-height) -
|
||
var(--jp-code-padding) - var(--jp-cell-padding) - 1px
|
||
);
|
||
|
||
/* Rendermime styles */
|
||
|
||
--jp-rendermime-error-background: #fdd;
|
||
--jp-rendermime-table-row-background: var(--md-grey-100);
|
||
--jp-rendermime-table-row-hover-background: var(--md-light-blue-50);
|
||
|
||
/* Dialog specific styles */
|
||
|
||
--jp-dialog-background: rgba(0, 0, 0, 0.25);
|
||
|
||
/* Console specific styles */
|
||
|
||
--jp-console-padding: 10px;
|
||
|
||
/* Toolbar specific styles */
|
||
|
||
--jp-toolbar-border-color: var(--jp-border-color1);
|
||
--jp-toolbar-micro-height: 8px;
|
||
--jp-toolbar-background: var(--jp-layout-color1);
|
||
--jp-toolbar-box-shadow: 0 0 2px 0 rgba(0, 0, 0, 0.24);
|
||
--jp-toolbar-header-margin: 4px 4px 0 4px;
|
||
--jp-toolbar-active-background: var(--md-grey-300);
|
||
|
||
/* Statusbar specific styles */
|
||
|
||
--jp-statusbar-height: 24px;
|
||
|
||
/* Input field styles */
|
||
|
||
--jp-input-box-shadow: inset 0 0 2px var(--md-blue-300);
|
||
--jp-input-active-background: var(--jp-layout-color1);
|
||
--jp-input-hover-background: var(--jp-layout-color1);
|
||
--jp-input-background: var(--md-grey-100);
|
||
--jp-input-border-color: var(--jp-inverse-border-color);
|
||
--jp-input-active-border-color: var(--jp-brand-color1);
|
||
--jp-input-active-box-shadow-color: rgba(19, 124, 189, 0.3);
|
||
|
||
/* General editor styles */
|
||
|
||
--jp-editor-selected-background: #d9d9d9;
|
||
--jp-editor-selected-focused-background: #d7d4f0;
|
||
--jp-editor-cursor-color: var(--jp-ui-font-color0);
|
||
|
||
/* Code mirror specific styles */
|
||
|
||
--jp-mirror-editor-keyword-color: #008000;
|
||
--jp-mirror-editor-atom-color: #88f;
|
||
--jp-mirror-editor-number-color: #080;
|
||
--jp-mirror-editor-def-color: #00f;
|
||
--jp-mirror-editor-variable-color: var(--md-grey-900);
|
||
--jp-mirror-editor-variable-2-color: rgb(0, 54, 109);
|
||
--jp-mirror-editor-variable-3-color: #085;
|
||
--jp-mirror-editor-punctuation-color: #05a;
|
||
--jp-mirror-editor-property-color: #05a;
|
||
--jp-mirror-editor-operator-color: #a2f;
|
||
--jp-mirror-editor-comment-color: #408080;
|
||
--jp-mirror-editor-string-color: #ba2121;
|
||
--jp-mirror-editor-string-2-color: #708;
|
||
--jp-mirror-editor-meta-color: #a2f;
|
||
--jp-mirror-editor-qualifier-color: #555;
|
||
--jp-mirror-editor-builtin-color: #008000;
|
||
--jp-mirror-editor-bracket-color: #997;
|
||
--jp-mirror-editor-tag-color: #170;
|
||
--jp-mirror-editor-attribute-color: #00c;
|
||
--jp-mirror-editor-header-color: blue;
|
||
--jp-mirror-editor-quote-color: #090;
|
||
--jp-mirror-editor-link-color: #00c;
|
||
--jp-mirror-editor-error-color: #f00;
|
||
--jp-mirror-editor-hr-color: #999;
|
||
|
||
/*
|
||
RTC user specific colors.
|
||
These colors are used for the cursor, username in the editor,
|
||
and the icon of the user.
|
||
*/
|
||
|
||
--jp-collaborator-color1: #ffad8e;
|
||
--jp-collaborator-color2: #dac83d;
|
||
--jp-collaborator-color3: #72dd76;
|
||
--jp-collaborator-color4: #00e4d0;
|
||
--jp-collaborator-color5: #45d4ff;
|
||
--jp-collaborator-color6: #e2b1ff;
|
||
--jp-collaborator-color7: #ff9de6;
|
||
|
||
/* Vega extension styles */
|
||
|
||
--jp-vega-background: white;
|
||
|
||
/* Sidebar-related styles */
|
||
|
||
--jp-sidebar-min-width: 250px;
|
||
|
||
/* Search-related styles */
|
||
|
||
--jp-search-toggle-off-opacity: 0.5;
|
||
--jp-search-toggle-hover-opacity: 0.8;
|
||
--jp-search-toggle-on-opacity: 1;
|
||
--jp-search-selected-match-background-color: rgb(245, 200, 0);
|
||
--jp-search-selected-match-color: black;
|
||
--jp-search-unselected-match-background-color: var(
|
||
--jp-inverse-layout-color0
|
||
);
|
||
--jp-search-unselected-match-color: var(--jp-ui-inverse-font-color0);
|
||
|
||
/* Icon colors that work well with light or dark backgrounds */
|
||
--jp-icon-contrast-color0: var(--md-purple-600);
|
||
--jp-icon-contrast-color1: var(--md-green-600);
|
||
--jp-icon-contrast-color2: var(--md-pink-600);
|
||
--jp-icon-contrast-color3: var(--md-blue-600);
|
||
|
||
/* Button colors */
|
||
--jp-accept-color-normal: var(--md-blue-700);
|
||
--jp-accept-color-hover: var(--md-blue-800);
|
||
--jp-accept-color-active: var(--md-blue-900);
|
||
--jp-warn-color-normal: var(--md-red-700);
|
||
--jp-warn-color-hover: var(--md-red-800);
|
||
--jp-warn-color-active: var(--md-red-900);
|
||
--jp-reject-color-normal: var(--md-grey-600);
|
||
--jp-reject-color-hover: var(--md-grey-700);
|
||
--jp-reject-color-active: var(--md-grey-800);
|
||
|
||
/* File or activity icons and switch semantic variables */
|
||
--jp-jupyter-icon-color: #f37626;
|
||
--jp-notebook-icon-color: #f37626;
|
||
--jp-json-icon-color: var(--md-orange-700);
|
||
--jp-console-icon-background-color: var(--md-blue-700);
|
||
--jp-console-icon-color: white;
|
||
--jp-terminal-icon-background-color: var(--md-grey-800);
|
||
--jp-terminal-icon-color: var(--md-grey-200);
|
||
--jp-text-editor-icon-color: var(--md-grey-700);
|
||
--jp-inspector-icon-color: var(--md-grey-700);
|
||
--jp-switch-color: var(--md-grey-400);
|
||
--jp-switch-true-position-color: var(--md-orange-900);
|
||
}
|
||
</style>
|
||
<style type="text/css">
|
||
/* Force rendering true colors when outputing to pdf */
|
||
* {
|
||
-webkit-print-color-adjust: exact;
|
||
}
|
||
|
||
/* Misc */
|
||
a.anchor-link {
|
||
display: none;
|
||
}
|
||
|
||
/* Input area styling */
|
||
.jp-InputArea {
|
||
overflow: hidden;
|
||
}
|
||
|
||
.jp-InputArea-editor {
|
||
overflow: hidden;
|
||
}
|
||
|
||
.cm-editor.cm-s-jupyter .highlight pre {
|
||
/* weird, but --jp-code-padding defined to be 5px but 4px horizontal padding is hardcoded for pre.cm-line */
|
||
padding: var(--jp-code-padding) 4px;
|
||
margin: 0;
|
||
|
||
font-family: inherit;
|
||
font-size: inherit;
|
||
line-height: inherit;
|
||
color: inherit;
|
||
|
||
}
|
||
|
||
.jp-OutputArea-output pre {
|
||
line-height: inherit;
|
||
font-family: inherit;
|
||
}
|
||
|
||
.jp-RenderedText pre {
|
||
color: var(--jp-content-font-color1);
|
||
font-size: var(--jp-code-font-size);
|
||
}
|
||
|
||
/* Hiding the collapser by default */
|
||
.jp-Collapser {
|
||
display: none;
|
||
}
|
||
|
||
@page {
|
||
margin: 0.5in; /* Margin for each printed piece of paper */
|
||
}
|
||
|
||
@media print {
|
||
.jp-Cell-inputWrapper,
|
||
.jp-Cell-outputWrapper {
|
||
display: block;
|
||
}
|
||
}
|
||
</style>
|
||
<!-- Load mathjax -->
|
||
<script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.7/latest.js?config=TeX-AMS_CHTML-full,Safe"> </script>
|
||
<!-- MathJax configuration -->
|
||
<script type="text/x-mathjax-config">
|
||
init_mathjax = function() {
|
||
if (window.MathJax) {
|
||
// MathJax loaded
|
||
MathJax.Hub.Config({
|
||
TeX: {
|
||
equationNumbers: {
|
||
autoNumber: "AMS",
|
||
useLabelIds: true
|
||
}
|
||
},
|
||
tex2jax: {
|
||
inlineMath: [ ['$','$'], ["\\(","\\)"] ],
|
||
displayMath: [ ['$$','$$'], ["\\[","\\]"] ],
|
||
processEscapes: true,
|
||
processEnvironments: true
|
||
},
|
||
displayAlign: 'center',
|
||
messageStyle: 'none',
|
||
CommonHTML: {
|
||
linebreaks: {
|
||
automatic: true
|
||
}
|
||
}
|
||
});
|
||
|
||
MathJax.Hub.Queue(["Typeset", MathJax.Hub]);
|
||
}
|
||
}
|
||
init_mathjax();
|
||
</script>
|
||
<!-- End of mathjax configuration --><script type="module">
|
||
document.addEventListener("DOMContentLoaded", async () => {
|
||
const diagrams = document.querySelectorAll(".jp-Mermaid > pre.mermaid");
|
||
// do not load mermaidjs if not needed
|
||
if (!diagrams.length) {
|
||
return;
|
||
}
|
||
const mermaid = (await import("https://cdnjs.cloudflare.com/ajax/libs/mermaid/10.7.0/mermaid.esm.min.mjs")).default;
|
||
const parser = new DOMParser();
|
||
|
||
mermaid.initialize({
|
||
maxTextSize: 100000,
|
||
maxEdges: 100000,
|
||
startOnLoad: false,
|
||
fontFamily: window
|
||
.getComputedStyle(document.body)
|
||
.getPropertyValue("--jp-ui-font-family"),
|
||
theme: document.querySelector("body[data-jp-theme-light='true']")
|
||
? "default"
|
||
: "dark",
|
||
});
|
||
|
||
let _nextMermaidId = 0;
|
||
|
||
function makeMermaidImage(svg) {
|
||
const img = document.createElement("img");
|
||
const doc = parser.parseFromString(svg, "image/svg+xml");
|
||
const svgEl = doc.querySelector("svg");
|
||
const { maxWidth } = svgEl?.style || {};
|
||
const firstTitle = doc.querySelector("title");
|
||
const firstDesc = doc.querySelector("desc");
|
||
|
||
img.setAttribute("src", `data:image/svg+xml,${encodeURIComponent(svg)}`);
|
||
if (maxWidth) {
|
||
img.width = parseInt(maxWidth);
|
||
}
|
||
if (firstTitle) {
|
||
img.setAttribute("alt", firstTitle.textContent);
|
||
}
|
||
if (firstDesc) {
|
||
const caption = document.createElement("figcaption");
|
||
caption.className = "sr-only";
|
||
caption.textContent = firstDesc.textContent;
|
||
return [img, caption];
|
||
}
|
||
return [img];
|
||
}
|
||
|
||
async function makeMermaidError(text) {
|
||
let errorMessage = "";
|
||
try {
|
||
await mermaid.parse(text);
|
||
} catch (err) {
|
||
errorMessage = `${err}`;
|
||
}
|
||
|
||
const result = document.createElement("details");
|
||
result.className = 'jp-RenderedMermaid-Details';
|
||
const summary = document.createElement("summary");
|
||
summary.className = 'jp-RenderedMermaid-Summary';
|
||
const pre = document.createElement("pre");
|
||
const code = document.createElement("code");
|
||
code.innerText = text;
|
||
pre.appendChild(code);
|
||
summary.appendChild(pre);
|
||
result.appendChild(summary);
|
||
|
||
const warning = document.createElement("pre");
|
||
warning.innerText = errorMessage;
|
||
result.appendChild(warning);
|
||
return [result];
|
||
}
|
||
|
||
async function renderOneMarmaid(src) {
|
||
const id = `jp-mermaid-${_nextMermaidId++}`;
|
||
const parent = src.parentNode;
|
||
let raw = src.textContent.trim();
|
||
const el = document.createElement("div");
|
||
el.style.visibility = "hidden";
|
||
document.body.appendChild(el);
|
||
let results = null;
|
||
let output = null;
|
||
try {
|
||
let { svg } = await mermaid.render(id, raw, el);
|
||
svg = cleanMermaidSvg(svg);
|
||
results = makeMermaidImage(svg);
|
||
output = document.createElement("figure");
|
||
results.map(output.appendChild, output);
|
||
} catch (err) {
|
||
parent.classList.add("jp-mod-warning");
|
||
results = await makeMermaidError(raw);
|
||
output = results[0];
|
||
} finally {
|
||
el.remove();
|
||
}
|
||
parent.classList.add("jp-RenderedMermaid");
|
||
parent.appendChild(output);
|
||
}
|
||
|
||
|
||
/**
|
||
* Post-process to ensure mermaid diagrams contain only valid SVG and XHTML.
|
||
*/
|
||
function cleanMermaidSvg(svg) {
|
||
return svg.replace(RE_VOID_ELEMENT, replaceVoidElement);
|
||
}
|
||
|
||
|
||
/**
|
||
* A regular expression for all void elements, which may include attributes and
|
||
* a slash.
|
||
*
|
||
* @see https://developer.mozilla.org/en-US/docs/Glossary/Void_element
|
||
*
|
||
* Of these, only `<br>` is generated by Mermaid in place of `\n`,
|
||
* but _any_ "malformed" tag will break the SVG rendering entirely.
|
||
*/
|
||
const RE_VOID_ELEMENT =
|
||
/<\s*(area|base|br|col|embed|hr|img|input|link|meta|param|source|track|wbr)\s*([^>]*?)\s*>/gi;
|
||
|
||
/**
|
||
* Ensure a void element is closed with a slash, preserving any attributes.
|
||
*/
|
||
function replaceVoidElement(match, tag, rest) {
|
||
rest = rest.trim();
|
||
if (!rest.endsWith('/')) {
|
||
rest = `${rest} /`;
|
||
}
|
||
return `<${tag} ${rest}>`;
|
||
}
|
||
|
||
void Promise.all([...diagrams].map(renderOneMarmaid));
|
||
});
|
||
</script>
|
||
<style>
|
||
.jp-Mermaid:not(.jp-RenderedMermaid) {
|
||
display: none;
|
||
}
|
||
|
||
.jp-RenderedMermaid {
|
||
overflow: auto;
|
||
display: flex;
|
||
}
|
||
|
||
.jp-RenderedMermaid.jp-mod-warning {
|
||
width: auto;
|
||
padding: 0.5em;
|
||
margin-top: 0.5em;
|
||
border: var(--jp-border-width) solid var(--jp-warn-color2);
|
||
border-radius: var(--jp-border-radius);
|
||
color: var(--jp-ui-font-color1);
|
||
font-size: var(--jp-ui-font-size1);
|
||
white-space: pre-wrap;
|
||
word-wrap: break-word;
|
||
}
|
||
|
||
.jp-RenderedMermaid figure {
|
||
margin: 0;
|
||
overflow: auto;
|
||
max-width: 100%;
|
||
}
|
||
|
||
.jp-RenderedMermaid img {
|
||
max-width: 100%;
|
||
}
|
||
|
||
.jp-RenderedMermaid-Details > pre {
|
||
margin-top: 1em;
|
||
}
|
||
|
||
.jp-RenderedMermaid-Summary {
|
||
color: var(--jp-warn-color2);
|
||
}
|
||
|
||
.jp-RenderedMermaid:not(.jp-mod-warning) pre {
|
||
display: none;
|
||
}
|
||
|
||
.jp-RenderedMermaid-Summary > pre {
|
||
display: inline-block;
|
||
white-space: normal;
|
||
}
|
||
</style>
|
||
<!-- End of mermaid configuration --></head>
|
||
<body class="jp-Notebook" data-jp-theme-light="true" data-jp-theme-name="JupyterLab Light">
|
||
<main>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=1b638450">
|
||
<div class="jp-Cell-inputWrapper" tabindex="0">
|
||
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
|
||
</div>
|
||
<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt">
|
||
</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown">
|
||
<!-- HTML file automatically generated from DocOnce source (https://github.com/doconce/doconce/)
|
||
doconce format html exercisesweek37.do.txt -->
|
||
<!-- dom:TITLE: Exercises week 37 -->
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=60060788">
|
||
<div class="jp-Cell-inputWrapper" tabindex="0">
|
||
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
|
||
</div>
|
||
<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt">
|
||
</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown">
|
||
<h1 id="Exercises-week-37">Exercises week 37<a class="anchor-link" href="#Exercises-week-37">¶</a></h1><p><strong>Implementing gradient descent for Ridge and ordinary Least Squares Regression</strong></p>
|
||
<p>Date: <strong>September 8-12, 2025</strong></p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=b5bb413f">
|
||
<div class="jp-Cell-inputWrapper" tabindex="0">
|
||
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
|
||
</div>
|
||
<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt">
|
||
</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown">
|
||
<p><strong>Python Code can be found at <a href="https://github.uio.no/larsbog/FYS-STK4155">https://github.uio.no/larsbog/FYS-STK4155</a></strong></p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=7cdd88e4">
|
||
<div class="jp-Cell-inputWrapper" tabindex="0">
|
||
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
|
||
</div>
|
||
<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt">
|
||
</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown">
|
||
<h2 id="Learning-goals">Learning goals<a class="anchor-link" href="#Learning-goals">¶</a></h2><p>After having completed these exercises you will have:</p>
|
||
<ol>
|
||
<li><p>Your own code for the implementation of the simplest gradient descent approach applied to ordinary least squares (OLS) and Ridge regression</p>
|
||
</li>
|
||
<li><p>Be able to compare the analytical expressions for OLS and Rudge regression with the gradient descent approach</p>
|
||
</li>
|
||
<li><p>Explore the role of the learning rate in the gradient descent approach and the hyperparameter $\lambda$ in Ridge regression</p>
|
||
</li>
|
||
<li><p>Scale the data properly</p>
|
||
</li>
|
||
</ol>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=0328fa2a">
|
||
<div class="jp-Cell-inputWrapper" tabindex="0">
|
||
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
|
||
</div>
|
||
<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt">
|
||
</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown">
|
||
<h2 id="Simple-one-dimensional-second-order-polynomial">Simple one-dimensional second-order polynomial<a class="anchor-link" href="#Simple-one-dimensional-second-order-polynomial">¶</a></h2><p>We start with a very simple function</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=ac760265">
|
||
<div class="jp-Cell-inputWrapper" tabindex="0">
|
||
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
|
||
</div>
|
||
<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt">
|
||
</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown">
|
||
<p>$$
|
||
f(x)= 2-x+5x^2,
|
||
$$</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=8d4b0753">
|
||
<div class="jp-Cell-inputWrapper" tabindex="0">
|
||
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
|
||
</div>
|
||
<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt">
|
||
</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown">
|
||
<p>defined for $x\in [-2,2]$. You can add noise if you wish.</p>
|
||
<p>We are going to fit this function with a polynomial ansatz. The easiest thing is to set up a second-order polynomial and see if you can fit the above function.
|
||
Feel free to play around with higher-order polynomials.</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=4517d311">
|
||
<div class="jp-Cell-inputWrapper" tabindex="0">
|
||
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
|
||
</div>
|
||
<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt">
|
||
</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown">
|
||
<h2 id="Exercise-1,-scale-your-data">Exercise 1, scale your data<a class="anchor-link" href="#Exercise-1,-scale-your-data">¶</a></h2><p>Before fitting a regression model, it is good practice to normalize or
|
||
standardize the features. This ensures all features are on a
|
||
comparable scale, which is especially important when using
|
||
regularization. Here we will perform standardization, scaling each
|
||
feature to have mean 0 and standard deviation 1.</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=da1834a9">
|
||
<div class="jp-Cell-inputWrapper" tabindex="0">
|
||
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
|
||
</div>
|
||
<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt">
|
||
</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown">
|
||
<h3 id="1a)">1a)<a class="anchor-link" href="#1a)">¶</a></h3><p>Compute the mean and standard deviation of each column (feature) in your design/feature matrix $\boldsymbol{X}$.
|
||
Subtract the mean and divide by the standard deviation for each feature.</p>
|
||
<p>We will also center the target $\boldsymbol{y}$ to mean $0$. Centering $\boldsymbol{y}$
|
||
(and each feature) means the model does not require a separate intercept
|
||
term, the data is shifted such that the intercept is effectively 0
|
||
. (In practice, one could include an intercept in the model and not
|
||
penalize it, but here we simplify by centering.)
|
||
Choose $n=100$ data points and set up $\boldsymbol{x}, $\boldsymbol{y}$ and the design matrix $\boldsymbol{X}$.</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs" id="cell-id=2fb97177">
|
||
<div class="jp-Cell-inputWrapper" tabindex="0">
|
||
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
|
||
</div>
|
||
<div class="jp-InputArea jp-Cell-inputArea">
|
||
<div class="jp-InputPrompt jp-InputArea-prompt">In [1]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="cm-editor cm-s-jupyter">
|
||
<div class="highlight hl-ipython3"><pre><span></span><span class="kn">import</span><span class="w"> </span><span class="nn">numpy</span><span class="w"> </span><span class="k">as</span><span class="w"> </span><span class="nn">np</span>
|
||
|
||
|
||
<span class="k">def</span><span class="w"> </span><span class="nf">polynomial_features</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">p</span><span class="p">,</span> <span class="n">intercept</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
|
||
<span class="n">n</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">x</span><span class="p">)</span>
|
||
<span class="k">if</span> <span class="n">intercept</span><span class="p">:</span>
|
||
<span class="n">P</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">arange</span><span class="p">(</span><span class="n">p</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span>
|
||
<span class="k">else</span><span class="p">:</span>
|
||
<span class="n">P</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">arange</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="n">p</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span>
|
||
<span class="n">X</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">power</span><span class="p">(</span><span class="n">x</span><span class="p">[:,</span> <span class="n">np</span><span class="o">.</span><span class="n">newaxis</span><span class="p">],</span> <span class="n">P</span><span class="p">)</span>
|
||
<span class="k">return</span> <span class="n">X</span>
|
||
|
||
|
||
<span class="n">theta_true</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">([</span><span class="o">-</span><span class="mf">2.0</span><span class="p">,</span> <span class="mf">5.0</span><span class="p">])</span>
|
||
<span class="n">X</span> <span class="o">=</span> <span class="n">polynomial_features</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">linspace</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">100</span><span class="p">),</span> <span class="n">p</span><span class="o">=</span><span class="mi">2</span><span class="p">)</span>
|
||
<span class="n">y</span> <span class="o">=</span> <span class="mi">2</span> <span class="o">+</span> <span class="n">theta_true</span><span class="nd">@X</span><span class="o">.</span><span class="n">T</span> <span class="o">+</span> <span class="mf">0.1</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">random</span><span class="o">.</span><span class="n">randn</span><span class="p">(</span><span class="mi">100</span><span class="p">)</span>
|
||
</pre></div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs" id="cell-id=590b2fb0">
|
||
<div class="jp-Cell-inputWrapper" tabindex="0">
|
||
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
|
||
</div>
|
||
<div class="jp-InputArea jp-Cell-inputArea">
|
||
<div class="jp-InputPrompt jp-InputArea-prompt">In [2]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="cm-editor cm-s-jupyter">
|
||
<div class="highlight hl-ipython3"><pre><span></span><span class="c1"># Standardize features (zero mean, unit variance for each feature)</span>
|
||
<span class="n">X_mean</span> <span class="o">=</span> <span class="n">X</span><span class="o">.</span><span class="n">mean</span><span class="p">(</span><span class="n">axis</span><span class="o">=</span><span class="mi">0</span><span class="p">)</span>
|
||
<span class="n">X_std</span> <span class="o">=</span> <span class="n">X</span><span class="o">.</span><span class="n">std</span><span class="p">(</span><span class="n">axis</span><span class="o">=</span><span class="mi">0</span><span class="p">)</span>
|
||
<span class="n">X_std</span><span class="p">[</span><span class="n">X_std</span> <span class="o">==</span> <span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="mi">1</span> <span class="c1"># safeguard to avoid division by zero for constant features</span>
|
||
<span class="n">X_norm</span> <span class="o">=</span> <span class="p">(</span><span class="n">X</span> <span class="o">-</span> <span class="n">X_mean</span><span class="p">)</span> <span class="o">/</span> <span class="n">X_std</span>
|
||
|
||
<span class="c1"># Center the target to zero mean (optional, to simplify intercept handling)</span>
|
||
<span class="n">y_mean</span> <span class="o">=</span> <span class="n">y</span><span class="o">.</span><span class="n">mean</span><span class="p">(</span><span class="n">axis</span><span class="o">=</span><span class="mi">0</span><span class="p">)</span>
|
||
<span class="n">y_centered</span> <span class="o">=</span> <span class="n">y</span> <span class="o">-</span> <span class="n">y_mean</span>
|
||
|
||
<span class="n">n_features</span> <span class="o">=</span> <span class="n">X_norm</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
|
||
<span class="n">theta_true</span> <span class="o">*=</span> <span class="n">X_std</span>
|
||
</pre></div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell" id="cell-id=cf63b06e">
|
||
<div class="jp-Cell-inputWrapper" tabindex="0">
|
||
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
|
||
</div>
|
||
<div class="jp-InputArea jp-Cell-inputArea">
|
||
<div class="jp-InputPrompt jp-InputArea-prompt">In [3]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="cm-editor cm-s-jupyter">
|
||
<div class="highlight hl-ipython3"><pre><span></span><span class="n">theta_true</span>
|
||
</pre></div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="jp-Cell-outputWrapper">
|
||
<div class="jp-Collapser jp-OutputCollapser jp-Cell-outputCollapser">
|
||
</div>
|
||
<div class="jp-OutputArea jp-Cell-outputArea">
|
||
<div class="jp-OutputArea-child jp-OutputArea-executeResult">
|
||
<div class="jp-OutputPrompt jp-OutputArea-prompt">Out[3]:</div>
|
||
<div class="jp-RenderedText jp-OutputArea-output jp-OutputArea-executeResult" data-mime-type="text/plain" tabindex="0">
|
||
<pre>array([-0.58315293, 1.50663026])</pre>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell" id="cell-id=bab1bb8d">
|
||
<div class="jp-Cell-inputWrapper" tabindex="0">
|
||
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
|
||
</div>
|
||
<div class="jp-InputArea jp-Cell-inputArea">
|
||
<div class="jp-InputPrompt jp-InputArea-prompt">In [4]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="cm-editor cm-s-jupyter">
|
||
<div class="highlight hl-ipython3"><pre><span></span><span class="n">X_std</span>
|
||
</pre></div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="jp-Cell-outputWrapper">
|
||
<div class="jp-Collapser jp-OutputCollapser jp-Cell-outputCollapser">
|
||
</div>
|
||
<div class="jp-OutputArea jp-Cell-outputArea">
|
||
<div class="jp-OutputArea-child jp-OutputArea-executeResult">
|
||
<div class="jp-OutputPrompt jp-OutputArea-prompt">Out[4]:</div>
|
||
<div class="jp-RenderedText jp-OutputArea-output jp-OutputArea-executeResult" data-mime-type="text/plain" tabindex="0">
|
||
<pre>array([0.29157647, 0.30132605])</pre>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell" id="cell-id=3b714989">
|
||
<div class="jp-Cell-inputWrapper" tabindex="0">
|
||
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
|
||
</div>
|
||
<div class="jp-InputArea jp-Cell-inputArea">
|
||
<div class="jp-InputPrompt jp-InputArea-prompt">In [5]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="cm-editor cm-s-jupyter">
|
||
<div class="highlight hl-ipython3"><pre><span></span><span class="kn">import</span><span class="w"> </span><span class="nn">matplotlib.pyplot</span><span class="w"> </span><span class="k">as</span><span class="w"> </span><span class="nn">plt</span>
|
||
|
||
<span class="n">plt</span><span class="o">.</span><span class="n">scatter</span><span class="p">(</span><span class="n">X_norm</span><span class="p">[:,</span> <span class="mi">0</span><span class="p">],</span> <span class="n">y_centered</span><span class="p">)</span>
|
||
<span class="n">plt</span><span class="o">.</span><span class="n">xlabel</span><span class="p">(</span><span class="s2">"Feature 1"</span><span class="p">)</span>
|
||
<span class="n">plt</span><span class="o">.</span><span class="n">ylabel</span><span class="p">(</span><span class="s2">"Target"</span><span class="p">)</span>
|
||
</pre></div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="jp-Cell-outputWrapper">
|
||
<div class="jp-Collapser jp-OutputCollapser jp-Cell-outputCollapser">
|
||
</div>
|
||
<div class="jp-OutputArea jp-Cell-outputArea">
|
||
<div class="jp-OutputArea-child jp-OutputArea-executeResult">
|
||
<div class="jp-OutputPrompt jp-OutputArea-prompt">Out[5]:</div>
|
||
<div class="jp-RenderedText jp-OutputArea-output jp-OutputArea-executeResult" data-mime-type="text/plain" tabindex="0">
|
||
<pre>Text(0, 0.5, 'Target')</pre>
|
||
</div>
|
||
</div>
|
||
<div class="jp-OutputArea-child">
|
||
<div class="jp-OutputPrompt jp-OutputArea-prompt"></div>
|
||
<div class="jp-RenderedImage jp-OutputArea-output" tabindex="0">
|
||
<img alt="No description has been provided for this image" class="" src="data:image/png;base64,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"/>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=24dd92fc">
|
||
<div class="jp-Cell-inputWrapper" tabindex="0">
|
||
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
|
||
</div>
|
||
<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt">
|
||
</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown">
|
||
<p>Fill in the necessary details.</p>
|
||
<p>After this preprocessing, each column of $\boldsymbol{X}_{\mathrm{norm}}$ has mean zero and standard deviation $1$
|
||
and $\boldsymbol{y}_{\mathrm{centered}}$ has mean 0. This makes the optimization landscape
|
||
nicer and ensures the regularization penalty $\lambda \sum_j
|
||
\theta_j^2$ in Ridge regression treats each coefficient fairly (since features are on the
|
||
same scale).</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=4ba80e16">
|
||
<div class="jp-Cell-inputWrapper" tabindex="0">
|
||
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
|
||
</div>
|
||
<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt">
|
||
</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown">
|
||
<h2 id="Exercise-2,-calculate-the-gradients">Exercise 2, calculate the gradients<a class="anchor-link" href="#Exercise-2,-calculate-the-gradients">¶</a></h2><p>Find the gradients for OLS and Ridge regression using the mean-squared error as cost/loss function.</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=5e5da080">
|
||
<div class="jp-Cell-inputWrapper" tabindex="0">
|
||
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
|
||
</div>
|
||
<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt">
|
||
</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown">
|
||
<div class="alert alert-block alert-success">
|
||
The gradients can be calculated as
|
||
|
||
<p>$$
|
||
\nabla_\theta C_{OLS} = \nabla_\theta (X\cdot\theta - y)^2 = 2 X (X\cdot \theta - y)
|
||
$$</p>
|
||
<p>The gradient of the Ridge cost function then directly follows as</p>
|
||
<p>$$
|
||
\nabla_\theta C_\mathrm{Ridge} = \nabla_\theta C_{OLS} + \nabla_\theta \lambda \theta^2 = 2 X (X\cdot \theta - y) + 2 \lambda \theta
|
||
$$</p>
|
||
<p>Because the factors of 2 are somewhat tedious, I will from here on use $\tilde C = \frac{C}{2}$.</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=be65f56f">
|
||
<div class="jp-Cell-inputWrapper" tabindex="0">
|
||
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
|
||
</div>
|
||
<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt">
|
||
</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown">
|
||
<h2 id="Exercise-3,-use-the-analytical-formulae-for-OLS-and-Ridge-regression-to-find-the-optimal-paramters-$%5Cboldsymbol%7B%5Ctheta%7D$">Exercise 3, use the analytical formulae for OLS and Ridge regression to find the optimal paramters $\boldsymbol{\theta}$<a class="anchor-link" href="#Exercise-3,-use-the-analytical-formulae-for-OLS-and-Ridge-regression-to-find-the-optimal-paramters-$%5Cboldsymbol%7B%5Ctheta%7D$">¶</a></h2>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs" id="cell-id=a616cdee">
|
||
<div class="jp-Cell-inputWrapper" tabindex="0">
|
||
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
|
||
</div>
|
||
<div class="jp-InputArea jp-Cell-inputArea">
|
||
<div class="jp-InputPrompt jp-InputArea-prompt">In [6]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="cm-editor cm-s-jupyter">
|
||
<div class="highlight hl-ipython3"><pre><span></span><span class="k">def</span><span class="w"> </span><span class="nf">Ridge_parameters</span><span class="p">(</span><span class="n">X</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">lam</span> <span class="o">=</span> <span class="mf">0.01</span><span class="p">):</span>
|
||
<span class="c1"># Assumes X is scaled and has no intercept column</span>
|
||
<span class="k">return</span> <span class="n">np</span><span class="o">.</span><span class="n">linalg</span><span class="o">.</span><span class="n">inv</span><span class="p">(</span><span class="n">X</span><span class="o">.</span><span class="n">T</span> <span class="o">@</span> <span class="n">X</span> <span class="o">+</span> <span class="n">lam</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">eye</span><span class="p">(</span><span class="n">X</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="mi">1</span><span class="p">]))</span> <span class="o">@</span> <span class="n">X</span><span class="o">.</span><span class="n">T</span> <span class="o">@</span> <span class="n">y</span>
|
||
<span class="k">def</span><span class="w"> </span><span class="nf">OLS_parameters</span><span class="p">(</span><span class="n">X</span><span class="p">,</span> <span class="n">y</span><span class="p">):</span>
|
||
<span class="k">return</span> <span class="n">Ridge_parameters</span><span class="p">(</span><span class="n">X</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">lam</span> <span class="o">=</span> <span class="mf">0.0</span><span class="p">)</span>
|
||
</pre></div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell" id="cell-id=a7256776">
|
||
<div class="jp-Cell-inputWrapper" tabindex="0">
|
||
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
|
||
</div>
|
||
<div class="jp-InputArea jp-Cell-inputArea">
|
||
<div class="jp-InputPrompt jp-InputArea-prompt">In [7]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="cm-editor cm-s-jupyter">
|
||
<div class="highlight hl-ipython3"><pre><span></span><span class="c1"># Set regularization parameter, either a single value or a vector of values</span>
|
||
<span class="n">lambda_</span> <span class="o">=</span> <span class="mf">0.1</span>
|
||
|
||
<span class="c1"># Analytical form for OLS and Ridge solution: theta_Ridge = (X^T X + lambda * I)^{-1} X^T y and theta_OLS = (X^T X)^{-1} X^T y</span>
|
||
<span class="n">I</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">eye</span><span class="p">(</span><span class="n">n_features</span><span class="p">)</span>
|
||
<span class="n">theta_closed_formRidge</span> <span class="o">=</span> <span class="n">Ridge_parameters</span><span class="p">(</span><span class="n">X_norm</span><span class="p">,</span> <span class="n">y_centered</span><span class="p">,</span> <span class="n">lam</span><span class="o">=</span><span class="n">lambda_</span><span class="p">)</span>
|
||
<span class="n">theta_closed_formOLS</span> <span class="o">=</span> <span class="n">OLS_parameters</span><span class="p">(</span><span class="n">X_norm</span><span class="p">,</span> <span class="n">y_centered</span><span class="p">)</span>
|
||
|
||
<span class="nb">print</span><span class="p">(</span><span class="s2">"Closed-form Ridge coefficients:"</span><span class="p">,</span> <span class="n">theta_closed_formRidge</span><span class="p">)</span>
|
||
<span class="nb">print</span><span class="p">(</span><span class="s2">"Closed-form OLS coefficients:"</span><span class="p">,</span> <span class="n">theta_closed_formOLS</span><span class="p">)</span>
|
||
</pre></div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="jp-Cell-outputWrapper">
|
||
<div class="jp-Collapser jp-OutputCollapser jp-Cell-outputCollapser">
|
||
</div>
|
||
<div class="jp-OutputArea jp-Cell-outputArea">
|
||
<div class="jp-OutputArea-child">
|
||
<div class="jp-OutputPrompt jp-OutputArea-prompt"></div>
|
||
<div class="jp-RenderedText jp-OutputArea-output" data-mime-type="text/plain" tabindex="0">
|
||
<pre>Closed-form Ridge coefficients: [-0.4835408 1.41698898]
|
||
Closed-form OLS coefficients: [-0.51267301 1.44659558]
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=b989efb9">
|
||
<div class="jp-Cell-inputWrapper" tabindex="0">
|
||
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
|
||
</div>
|
||
<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt">
|
||
</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown">
|
||
<p>This computes the Ridge and OLS regression coefficients directly. The identity
|
||
matrix $I$ has the same size as $X^T X$. It adds $\lambda$ to the diagonal of $X^T X$ for Ridge regression. We
|
||
then invert this matrix and multiply by $X^T y$. The result
|
||
for $\boldsymbol{\theta}$ is a NumPy array of shape (n$\_$features,) containing the
|
||
fitted parameters $\boldsymbol{\theta}$.</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=17b08af7">
|
||
<div class="jp-Cell-inputWrapper" tabindex="0">
|
||
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
|
||
</div>
|
||
<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt">
|
||
</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown">
|
||
<h3 id="3a)">3a)<a class="anchor-link" href="#3a)">¶</a></h3><p>Finalize, in the above code, the OLS and Ridge regression determination of the optimal parameters $\boldsymbol{\theta}$.</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=6acd4708">
|
||
<div class="jp-Cell-inputWrapper" tabindex="0">
|
||
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
|
||
</div>
|
||
<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt">
|
||
</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown">
|
||
<h3 id="3b)">3b)<a class="anchor-link" href="#3b)">¶</a></h3><p>Explore the results as function of different values of the hyperparameter $\lambda$. See for example exercise 4 from week 36.</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell" id="cell-id=3edc1a2c">
|
||
<div class="jp-Cell-inputWrapper" tabindex="0">
|
||
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
|
||
</div>
|
||
<div class="jp-InputArea jp-Cell-inputArea">
|
||
<div class="jp-InputPrompt jp-InputArea-prompt">In [8]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="cm-editor cm-s-jupyter">
|
||
<div class="highlight hl-ipython3"><pre><span></span><span class="kn">import</span><span class="w"> </span><span class="nn">matplotlib.pyplot</span><span class="w"> </span><span class="k">as</span><span class="w"> </span><span class="nn">plt</span>
|
||
|
||
<span class="n">n_lam</span> <span class="o">=</span> <span class="mi">8</span>
|
||
<span class="n">thetas</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">zeros</span><span class="p">((</span><span class="n">n_features</span><span class="p">,</span> <span class="n">n_lam</span><span class="p">))</span>
|
||
<span class="n">lambdas</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">concatenate</span><span class="p">([[</span><span class="mi">0</span><span class="p">],</span> <span class="n">np</span><span class="o">.</span><span class="n">logspace</span><span class="p">(</span><span class="o">-</span><span class="mi">5</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="n">n_lam</span><span class="o">-</span><span class="mi">1</span><span class="p">)])</span>
|
||
|
||
|
||
<span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">lam</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">lambdas</span><span class="p">):</span>
|
||
<span class="n">thetas</span><span class="p">[:,</span> <span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="n">Ridge_parameters</span><span class="p">(</span><span class="n">X_norm</span><span class="p">,</span> <span class="n">y_centered</span><span class="p">,</span> <span class="n">lam</span><span class="o">=</span><span class="n">lam</span><span class="p">)</span>
|
||
|
||
<span class="n">avg_thetas</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">mean</span><span class="p">(</span><span class="n">thetas</span><span class="p">,</span> <span class="n">axis</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>
|
||
<span class="n">norm_thetas</span> <span class="o">=</span> <span class="n">thetas</span> <span class="o">-</span> <span class="n">avg_thetas</span><span class="p">[:,</span> <span class="n">np</span><span class="o">.</span><span class="n">newaxis</span><span class="p">]</span>
|
||
|
||
<span class="n">fig</span><span class="p">,</span> <span class="n">ax</span> <span class="o">=</span> <span class="n">plt</span><span class="o">.</span><span class="n">subplots</span><span class="p">(</span><span class="n">figsize</span><span class="o">=</span><span class="p">(</span><span class="mi">8</span><span class="p">,</span><span class="mi">6</span><span class="p">))</span>
|
||
<span class="c1"># Annotation</span>
|
||
<span class="n">im</span> <span class="o">=</span> <span class="n">ax</span><span class="o">.</span><span class="n">imshow</span><span class="p">(</span><span class="n">norm_thetas</span><span class="p">,</span> <span class="n">aspect</span><span class="o">=</span><span class="s1">'auto'</span><span class="p">,</span> <span class="n">cmap</span><span class="o">=</span><span class="s1">'viridis'</span><span class="p">)</span>
|
||
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">n_features</span><span class="p">):</span>
|
||
<span class="k">for</span> <span class="n">j</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">n_lam</span><span class="p">):</span>
|
||
<span class="n">text</span> <span class="o">=</span> <span class="n">ax</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="n">j</span><span class="p">,</span> <span class="n">i</span><span class="p">,</span> <span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">norm_thetas</span><span class="p">[</span><span class="n">i</span><span class="p">,</span><span class="w"> </span><span class="n">j</span><span class="p">]</span><span class="si">:</span><span class="s2">.2e</span><span class="si">}</span><span class="s2">"</span><span class="p">,</span>
|
||
<span class="n">ha</span><span class="o">=</span><span class="s2">"center"</span><span class="p">,</span> <span class="n">va</span><span class="o">=</span><span class="s2">"center"</span><span class="p">,</span> <span class="n">color</span><span class="o">=</span><span class="s2">"w"</span> <span class="k">if</span> <span class="nb">abs</span><span class="p">(</span><span class="n">norm_thetas</span><span class="p">[</span><span class="n">i</span><span class="p">,</span> <span class="n">j</span><span class="p">])</span> <span class="o"><</span> <span class="mf">0.5</span> <span class="k">else</span> <span class="s2">"black"</span><span class="p">)</span>
|
||
<span class="n">ax</span><span class="o">.</span><span class="n">set_yticks</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">arange</span><span class="p">(</span><span class="n">n_features</span><span class="p">))</span>
|
||
<span class="n">ax</span><span class="o">.</span><span class="n">set_xticks</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">arange</span><span class="p">(</span><span class="n">n_lam</span><span class="p">))</span>
|
||
<span class="n">ax</span><span class="o">.</span><span class="n">set_xticklabels</span><span class="p">([</span><span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">l</span><span class="si">:</span><span class="s2">.2e</span><span class="si">}</span><span class="s2">"</span> <span class="k">for</span> <span class="n">l</span> <span class="ow">in</span> <span class="n">lambdas</span><span class="p">],</span> <span class="n">rotation</span><span class="o">=</span><span class="mi">45</span><span class="p">)</span>
|
||
<span class="n">ax</span><span class="o">.</span><span class="n">set_ylabel</span><span class="p">(</span><span class="s2">"Features"</span><span class="p">)</span>
|
||
<span class="n">ax</span><span class="o">.</span><span class="n">set_xlabel</span><span class="p">(</span><span class="s2">"Regularization Parameter (lambda)"</span><span class="p">)</span>
|
||
<span class="n">ax</span><span class="o">.</span><span class="n">set_title</span><span class="p">(</span><span class="sa">r</span><span class="s2">"Feature Coefficients ($\theta^\lambda_i - \bar{\theta}_i$)"</span><span class="p">)</span>
|
||
</pre></div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="jp-Cell-outputWrapper">
|
||
<div class="jp-Collapser jp-OutputCollapser jp-Cell-outputCollapser">
|
||
</div>
|
||
<div class="jp-OutputArea jp-Cell-outputArea">
|
||
<div class="jp-OutputArea-child jp-OutputArea-executeResult">
|
||
<div class="jp-OutputPrompt jp-OutputArea-prompt">Out[8]:</div>
|
||
<div class="jp-RenderedText jp-OutputArea-output jp-OutputArea-executeResult" data-mime-type="text/plain" tabindex="0">
|
||
<pre>Text(0.5, 1.0, 'Feature Coefficients ($\\theta^\\lambda_i - \\bar{\\theta}_i$)')</pre>
|
||
</div>
|
||
</div>
|
||
<div class="jp-OutputArea-child">
|
||
<div class="jp-OutputPrompt jp-OutputArea-prompt"></div>
|
||
<div class="jp-RenderedImage jp-OutputArea-output" tabindex="0">
|
||
<img alt="No description has been provided for this image" class="" src="data:image/png;base64,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kVKmTBkxMDAQc3Nzady4sfz000+SmJioXu/ixYvSrl07MTMzExMTE2nZsqWcPHmy0H181ctFiYg8fPhQBg8eLPb29mJoaChly5aV8ePHS1JSUp7b5Le+vPqe130+/299+/ZtmTp1qlSvXl3Mzc3F1NRUqlevLosXL87Xv8uPP/4oZmZmOS77FR4eLj169BBTU1NxdHSUiRMnSnR0dI7thw8fLgsWLMjXYxWV/NSWlpYmJiYmOS7X9dFHH0np0qX5laRE+aSS/Ix0JyIiKgJRUVEoW7Ys5s2bh3fffbfA29etWxfz5s3L90z7N+XOnTto0aKFxiW0kpKSUKZMGUyfPl3j28aIKG8cY0pERG+MpaUlpk2bhu+++y7fV3vIkp6ejhs3bmh1zGlechtfumrVKujr6+e4ZiwR5Y1HTImI6K2Q21FJpfjss8+QkJCQY2wyERUMJz8REdFbIa9Z70owe/ZsbZdA9J/AU/lERPRW8PHxUWwwJaKiwVP5RERERKQIPGJKRERERIrAYEpEREREivBWT35KT09HQEAAzM3NX/idzkRERESkHSKCmJgYODk5QUfnxcdE3+pgGhAQABcXF22XQUREREQv4e/vj1KlSr1wnbc6mJqbmwMAyk78FLqGRtouh4ioSAhPABWY6Gq7grdTsn2atkt461ztvErbJbx1omPT4VrrgTq3vchbHUyzTt/rGhoxmBLRfwaDacExmBaOjjGDaUFZmHN6TmHlZ9glu0tEREREisBgSkRERESKwGBKRERERIrAYEpEREREisBgSkRERESKwGBKRERERIrAYEpEREREisBgSkRERESKwGBKRERERIrAYEpEREREisBgSkRERESKwGBKRERERIrAYEpEREREisBgSkRERESKwGBKRERERIrAYEpEREREisBgSkRERESKwGBKRERERIrAYEpEREREisBgSkRERESKwGBKRERERIrAYEpEREREisBgSkRERESKwGBKRERERIrAYEpEREREisBgSkRERESKwGBKRERERIrAYEpEREREisBgSkRERESKwGBKRERERIrAYEpEREREisBgSkRERESKwGBKRERERIrAYEpEREREisBgSkRERESKwGBKRERERIrAYEpEREREisBgSkRERESKwGBKRERERIrAYEpEREREisBgSkRERESKwGBKRERERIrAYEpEREREisBgSkRERESKwGBKRERERIrAYEpEREREisBgSkRERESKwGBKRERERIrAYEpEREREisBgSkRERESKwGBKRERERIrAYEpEREREisBgSkRERESKwGBKRERERIrAYEpEREREisBgSkRERESKwGBKRERERIrAYEpEREREisBgSkRERESKwGBKRERERIrAYEpEREREisBgSkRERESKwGBKRERERIrAYEpEREREisBgSkRERESKwGBKRERERIrAYEpEREREisBgSkRERESKwGBKRERERIrAYEpEREREisBgSkRERESKwGBKRERERIrAYEpEREREisBgSkRERESKwGBKRERERIrAYEpEREREisBgSkRERESKwGBKRERERIrAYEpEREREisBgSkRERESKwGBKRERERIrAYEpEREREisBgSkRERESKwGBKRERERIrAYEpEREREisBgSkRERESKwGBKRERERIrAYEpEREREisBgSkRERESKwGBKRERERIrAYEpEREREisBgSkRERESKwGBKRERERIrAYEpEREREisBgSkRERESKwGBKRERERIrAYEpEREREisBgSkRERESKwGBKRERERIrAYEpEREREisBgSkRERESKwGBKRERERIrAYEpEREREisBgSkRERESKwGBKRERERIrAYEpEREREisBgSkRERESKoKftAt6k8a0aoENVd5SwNEdKWhpuBARjwb4TuPr4ab62H9GsLj7waoI1Jy9izs4j6uV2ZiaY2r4ZGpYrDVNDAzwIDccvh89i3417r1zzgPrVMbxJbdiZmeLW0xB8veMQfJ4EAQAsjQ0xoVVDNC7vipJWFgiPi8eBm7743/6TiE1KfuXHzsK+FRx7Vjivo29OVhY48OG7ua4/+Y8d2HP97ivVPLF1Q/SuUxXmRoa49CgAs7cdwMOwSPVjj2tZH/XLusDOzBTBMbHYfvkWlh45g5S09Fd63CwTWmr27HpAMBbsf3HP+tWthv71qsHZygIAcC84DIsOn8Gxuw/U67hYW2Ja+2ao7eoEA11dHLv3EF/tOISwuPhXrnlAvep4N9u+9tW/mvvaxKx9zfLZvrbwQNHta3o6OpjcqhGaVXCDi7UlYpOScPL+I/yw/ziCY+Ly3E5HpcLEFg3QpVol9b/nlss3sPjomVzXn92pNfrVqYZvdh/G6tOXXrnuAXWr493GtWGf2bcvdz3XtxYN0aRcZt/i47H/li8WHnz1vh0fOBKlLCxzLF9z7RI+PXYgx/J2bhUwvlZ9lLG0gp6OLh5EReDXK+ex5c6NXO//62ZtMLBKDXxx4iBWXr34SrUCwDtVamB0jbqwNzHFzbAQfHb8AK4EP3s+fNOsLRqXcoWjqSniUlJw8WkAvj19FL6R4a/82Br060JlOgLQrwKVriPSI8YCSftfvI3JQKhM3gF0nYG0AEjsEiDxn9zXNeoIHasFkMR9kMhxr16vQT2ozD8G9CoAaYGQuMVAwuZX+3sKoVgF0wehEfhqxyH4h0fBSF8PQxrVxPKhPdDux1WIiE944baezo7oW7cqbgWG5Ljt217tYW5kiPFrtyIiPhGdqrtjfr+O6L1kPW7msn5+eXtWxEfezfD5tgO46v8UgxvVwq9De6DDgt8QHpcAB3MzOFiYYd7uY/ANCYOTlQU+79IaDuZmmPznjkI/7vPYt4JjzwrndfTtaVQMmn67VGNZn7pVMbxJHY0gVhgjmtbBoAY1MOPvPXgcEY1JbRrh1yE90Ol/q5Gcmoay9tZQqVT4bOt+PAqLQgVHW3zRrQ2MDfTw3e5jr/TYWR6EReDLHYfgH5HZs4Y1sWJID3jNz7tnQdGx+GHvcTwMi4RKBXSrWRmLBnRBjyXrcC84DMb6elgxtAduPQ3B0FWbAACTWjfCkkFd0XfZHxApfL3enhUxPXNfu/L4KYY0rIXlQ3rAe2G2fc08Y1+7F5yxr83u0hoOFmZ4r4j2NSN9PVQu6YAlR8/g1tMQWBgbYmb7FljSvyt6Lluf53Yjm9RB/7rV8dGWPbgXEgZPJ0fM6eqFmKQk/H7mssa6bTzKoXqpEgiKji2Smr2rVMSMds3w2Y4DuPLkKYY0qIUVg3qg/c+afZu79xjuhYTB2coCn3fKeI6+t+HV+tbl77XQVanUv1e0scO6Ln2w0/dOrutHJSVi0cXTuBcRjpT0NLR2LYfvWrZHWEI8jvprPufauZVHTUcnPI2NeaUas3Qq545ZjVtg1pH9uBQciOHVamFNp15o9cdKhCVkfKjyCQnCP3dvIiA2GpaGRphctxHWdOqFput+Rfqr7NzPUxkDqbcgCZugsl788vWNB0Bl9iEkeiaQ4gPoV4PK4iuIRANJBzXX1XWGynw6JPlc0dSqWwoqq1+BhD8gkR8Ahg2hsvgakhYMJB8v3N9TSIo4lb9o0SKUKVMGRkZGqF+/Ps6ePftaHuffq7dxyvcRHkdE4V5wGL7ddRTmRoZwL2H3wu1MDPTxXW9vfPrPfkQnJua4vYZLSaw7fRk+T4LwOCIKvxw+i5jEJFRxclSvU8LSDD/27YgzM8fi1Mdj8fPALnDKPFqRlyGNa2Hj+WvYcvEGfEPC8fm2/UhMSUWP2p4AgLvBYXjvjx04fPs+/MOjcOa+PxbsO4GWHm7Q1VG98L4Lgn0rOPascF5H39JFEBobr/HTulJ57L52B/HJKer1KjjYYungbjj/yXgcmz4Kc3u1h5WJ0Qsfd3CjWvjl8FkcvHUfd4JCMX3TbjiYm6JNpXIAgON3H2Lm5r04eS/jbzp06z5WHb+AtpUrvFKfsttx9TZO3c/Ws90v79mh2/dx9O4DPAyPxIOwSCzYfxLxySmoXqoEAKBWaSc4W1lgxua9uBMUhjtBYZj+9x54OjmigVtp9f2UsDDD/L4dcfbjsTg9YywWDeiiPgqbl6GNMva1zZcy9rXPtmfsaz1rPdvXJv25A4du34d/RBTO+Plj/v4TaOledPtabFIyhv++Gbuu34FfWASuPH6KL3cegqeTI0pamue5XU0XJxy45Ysjd/3wJDIae27cxXHfh6jmXEJjPQdzU3zSoSU+/Hs3UtLTctxPCQszLOjdEeemj8WZj8Zicb+X921Yw1rYcPEaNl/O7NuOzL7VzNa3DTtw6E5G3077+WPBgRNoVfHV+xaemICQhHj1T+sy5fAgKgKnA/xzXf90gD/2+N2Db2Q4HkVHYZXPRdwKC0GdEs4a6zmamuHzJq3x3v5/kZqe8wxCSVNz/Ny2M64On4DLw8bj1/bdUMr8xX0aUb0O/rzhg423r+FeRBhmHtmHhJQU9PHwVK/zx82rOBv4GI9jonE9NBg/nDkOZ3OLl953gSUfhcTOB5L25Wt1lXFXIOFPIHEnkOYPJP4LJPwFlenI59bUgcryB0jswoz1cjCAyvwjqOyPQeVwBSqbTYBBvZc8dn8g7TEk5lsgzReIXwsk7obKdFih/57C0now/euvv/D+++/js88+w8WLF1G9enW0a9cOwcHBr/Vx9XV10KdOVUQnJOLW0xcfafqkcyscue2HU76Pcr39sn8gvD0rwtLYECoV0KFqRRjo6eGsX8YOo6ejg1+H9EB8cjIGLd+Agb/+hfjkZPw6pDv0dXP/J9DX1UEVJ0eNxxQBTvk+Qg2XknnWam5kiNikZKSlF+GnvufqYt8Khj0rnKLsW3aVnRxQ2ckBm85fUy8zNzLEquG9cDMwBL2XrMeo1Vtga2aC+f065nk/pawtYW9uqvGYsUnJuPr4Kaq7OOW5nbmRIaIScn7oKAr6ujrom8+eZdFRqdChakWYGOjhsn8gAMBATw8iQHLqs1CVlJqGdBHUds342/R0dLB8SA/EJSVj0IoNGLA8c18b/PJ97eR9Ze1rAGBmZIh0EUQnJuW5ziX/ADQo64IytlYAAHdHO9Qu7YSj2Y68q1TAdz3aY8WJC7gXEpbjPvR0dLDinYy+DVy5Af1XZPRt+aCC9+3k/UeoWSrvvpm9hr7p6+igW4VK2HDrWj7WztDIuTTKWtngbOBj9TIVgPmtO2DZ5XO4G5F7n9Z06oW4lGT0/udP9NzyB+JSkrG6Y0/o6+TRJx0deNo74sTjh+plAuDEk0eo5Zj7c9JYTx+9PTzxKDoSgUV01LbQVAaAPLf/SRKgX03jBLfKbAKQHgYkbMr9biw+BfRrQiKnQMI6QxJ3QWW9EtB1zfuxDWoCySc1Hzr5OKBf8xX/qILT+qn8H3/8ESNHjsSwYRmp/JdffsG///6LlStXYvr06UX+eC3c3fB9nw4w1tdHSGwc3v1tMyLj836T6FC1IiqXdEDvX/I+vTPlz3/xY98OOD1zHFLS0pCYkoqJ67fhUXgUAMC7akXoqFSYteXZp4yZm/fizMxxqOtWCifv5XwztTIxhp6uDsJiNcdzhcXGw83OOtc6rEyMMLZlfWw455OvXhQE+1Zw7FnhvI6+ZdertifuBYepQxgADGxQHTcDM8azZpm5eS8OTxuJMrZWeJA5ZjQ7OzMTILNP2YXGxsPe3CTXxy5tY4mBDWrgu91H81VrfrWo6IYfsvVs+OoX9wwAKjra4o+R/WCop4f45GRMWL8dviEZY+wu+wciISUFH3o1wfz9J6AC8IFXE+jp6sDe3BTIvq/982xf+3jLXpz9eBzqlSmFE7l8SLDOY18Lfdm+1qI+Npwv+n0ti4GeLj5s0wT/+txC3AvGYy47fg5mhobYNWEo0tLToaujg/kHTmC7zy31OiMb10VqumDNmdzHlHbwzOjbzG3P+jZj616cm/6Svunk8hyNi0fZPPpmbWKEcc3q468LRds3L7cKsDA0wqaXBFNzAwOcHjwGBjq6SBfBrGP7cTxbYBxbsx5S09Oxyif3MaWdyrlDRwV8dHiPetnUQ7txdfhENHBywbFs95XF2iijT6EJmuOEQ+LjUM7KRmPZoCo1MKNhM5jqG8A3IgyDtm9ESi5Hbd+opGOAcW8gcR+Qeh3Q8wSMe0OlMoDoWAPpIYB+bcC4NyS0S+73oVMSMO4JCWkOpGce4ItfARg2hcq4JyT2xzy2s4Okh2ouSwuFSsccAkMAeX9gK2paDabJycm4cOECZsyYoV6mo6ODNm3a4NSpUznWT0pKQlLSs+ZER0fned+dqnvg8y6t1b+PXvMPLjx8gjP3/dFj0VpYmxijd92qmN+vI/r+8gfC43KOxSphaYYZHVvg3VWbNY4cPG9S64YwNzLEsJWbEBGfgNaVymN+344YtHwD7gaFwb2EPUrbWOH8J+M1tjPU00NpGyskuaZh6eBu6uWfbzuAM/dzP0WSF1NDA/zyTreMSQwHTxdo2+zYt4JjzwrnTfYti6GeLjpWc8eSw5qTVdxL2KOem0uOvgGAi40VPEuVyFFrWgHfxBzMTbFsSA/suXYHG8/n/2hTdp2qeWB2tjpG/Z7ZMz9/dF+c2bM6VbGgb0f0WZp7z7L4hUag++K1MDcyRLsqFfBtz3Z4Z8VG+IaEIyI+AZP/3IHPurTGOw1qIl0E//rcxvUnQeoxeB6Z+9qFWTn3NRcbK9ROTcOyd57ta59tO6A+sp9fpoYGWDqoG3yDw/DzK+xrnat6YHbnZ30bufYfXHj0BMg8Mrewd0eoVMBn/x58wb1kjPPsXNUDH/y9E/eCw1CphANmtG+O4Jg4/HPlBqqUdMDgBjXRY+m6PO/DwzGjbxc/zuU5am2FxNJp+HVQtr5tP4AzDwrRtwHd4BsShp8PF75vuenr4YnDj/wQHJ/3JDEAiE1ORocNa2Cqr49GpVzxSaMW8I+OwukAf3jaOWJYtdrouHFNnttXsnOAq6U1ro+YpLHcUE8PrpZWSExLxW8de6qXf3xkH049efkZkyxb797A8ccP4GBihpE16mCRV2f02vIHktJe/jryukjsIqh07KGy3ZhxTDk9FEjYApiNApAOqEyhsvwOEjUTkIjc70TfHSqVHmC3V3O5ygBIz/iArXLINh46cRsk+tPX+WcVmFaDaWhoKNLS0uDo6Kix3NHREbdu3cqx/pw5czB79ux83ffBm764mu2ISNYA9ISUVDwKj8Kj8ChcefwUuycPRc/anvj1aM4BxFWcHGFnZoq/xw1UL9PT1UEd11IYUL8Gqn/+PzhbW2BQw5ro/L81uBeccTri9tNQ1CnjjAH1a2D2tgMwNdDH9YAgTNu4K8djhMclICUtDT0WrX3Wl9h4pKSlITUtHbZmmkdebM1MEPrcp2YTA338OqQ74pNTMHH99lzH6uQX+8aevYmevcm+ZZ/M0M6zIoz09bH10s0cf9fh2/fxw56cE5JCYuKgUqly1GpvbgZk9ikk9tmbtJ2ZSY6JaPbmplj9bm9cfhSAT7cWfhbroVu+uPo4fz3rVdsTy3LpWZaUtHT1kfbrAcHwdC6BwQ1r4rNtGbOsT/g+gtf8VbAyMUJauiAmMQnHpo2Cv0+UumfXA4IwdVPe+1r3xc/2tbDYeCTnsa/Z5bKvmRroY/ng7ohLTsGEP15xX7vtiytPcvZNT0cHC3p3hJOlBYas3vTCo6UAMK1tMyw7fg47r2VM+rkTHAYnK3OMbloX/1y5gTquzrA1NcGhKSPU2+jp6OAjr2YY3KAmWi9Yqe7bh5vz7lu3X3LpW3ouz1HTPPo2KKNv4/96tb49z9nMAo1LuWLMnq0vXVcAPIzOCEI3wkJQ3toG42rWw+kAf9RzcoatsQlOvjNavb6ejg5mNmyB4VVro8m6X2Gqr49rIUF4b/+/Oe47PDEeyWnp6LDhWbANTYhT98nO2FRjfXsTU4Q8F6RjkpMRk5yMB1GRuBQUgCvDJ6KdWwVsu5cze7w5SZDoGUD0J4COXcYRT+N+QHoskB4O6HlApecCWGefzJkxrEHleBMS2g5QmUAkFRLWHcBzIVsy9hUJy3a0VTIn56WHQqVjB41BH7p2kPSYN3q0FNoOpgU1Y8YMvP/+++rfo6Oj4eLikuu68ckp6hfdF1HpqGCgp5vrbad8H6HL/zQ/0X3dwwt+oRFYfvQc0kVgpJ/Rwudn8qWlp0MncxbjjcBgtK/qjrC4hDxf+HKr9XpAEBqUdcGBm74ZtaqABmVdsO7MFfU6poYGWD6kO5LT0jBu7dZ8HTV6Efat4NizwnlTfcuuZ+0qOHTrfo7Z6jcCguFVpQKeREbnOR7v+VofR0QhJCYODcq5qMdzmhoaoFqpEvjz7LO+OWSG0usBQfh4895XmtEel5yCuHz0TEelgoFu7j3Lexvkuk3WkID6bi4Zoev2fSCzZ96ehdvXGuZjX1sxOHNfW/fq+1pufcsKpa62Vhj82yZE5mPcr5G+HiTH80+gynz+bb1yU2McKACsGNQDW6/exOZL1wEA1wNfoW9uLjhw61nfGpZ1wdqzz/VtUEbfxv7x6n17Xm8PT4QlxOPgw/sF3lYHKhjoZryGbb59A8cfa/ZpTcee2HLnBjbezjibcC0kCJ3KuSMsIR6xKbn3KSv4ZnctJAiNSpXG3gcZl9BTZY5xXXMt78t1qaCCCrnv/9qRCqRnXN5KZdwRSDqUEfVTfZEe2kFjTZXZFEBlCon5CkgLzOi0Sg+iYwuknM/97tNyObKcfAkwbK553waNgZRXv8xZQWl18pOdnR10dXURFBSksTwoKAglSpTIsb6hoSEsLCw0fvLLWF8Pk9s2RvVSJeBkZY7KTg74qntbOJqbYc+1Z9cxXDmsJwbUrw5kvnHeDQ7T+ElISUFkfALuZh6x8guJwMPQCMzu2hpVnR3hYmOJoY1roVE5Vxy4mfHE2H7lFiLjE7BoYBfUdnWGs7UF6rqVwscdW8DRwizPmlefuIjedaqia83KKGtvg8+6tIaxgT62XMh4gTM1NMCKoT1gbKCPWVv2wczQAHZmJrAzM1EHlVfFvrFnb6Jnr7NvWUrbWKKOaylsymXM3fozV2BpbITv+3SAZ2ZvG5d3xdc9vF749605eRFjWtRHS4+yqOBoi297tkNwTBz2Z4YuB3NTrHm3NwKjYjBv11HYmBqr+1ZUPZvSJrNnluao4uSAr7tl9Gx3tuuzrhraEwMzewYA77dtjDquznC2skBFR1u837Yx6pVxwfarz44W9ahZGdVLlYCLtSU6V/fAwn4dsfrURfiFZpxC3H41Y19bPCBzX7OyQL0ypTCzw4v3td9OXkTv2lXRrUbGvvZ554x9bfPFbPvakIx9beZr2tf0dHTwvz6d4OnkiA//3gVdHZX6MbJPQPptcE8MrPesb4fu3MeYZvXQvIIbnK0s0MajHIY1rIX9mc+/yITEHPtjSnoaQmPj4BeW2TefW4iIT8CSfl1Qu7QzSmX1zfvFfVt16iL61K6KbtUro6ydDT7v2BrG+vrqwGtqaICV7/SAiYE+Zm4t+r6pAPTy8MTft68j7blw/kMrb0yr31T9+7ia9dCklCtczC1RzsoGI6rXQfeKlbHlbsZ1TCOTEnEnPFTjJzU9HSEJcbgfmdGnf+7eRHhiAn717oa6JZ1RytwSDZxc8FnjVihhmnefll85j/6VqqGnexWUs7LB183awkRfHxszx8S6mFtiXM168LRzhJOZOWo5OmFRu85ITEvFoUd+r9wnzaaZAHqVMn6QcUkm6FXKGAcKQGX2AVSW856tr1sGMOqSMUlJvxpUlvMBvQqQ2B8yV0gGUu9q/kgMIHEZ/48UIO0BJGFrxv0aemU8pn41wHQ0YNgiz1Il4Q9A1wUqs2mAblnAeABg5A2JW5Xvv6eoaPWIqYGBAWrXro0DBw6gW7eMMTXp6ek4cOAAJkyYUKSPlSaCsnbW6DagM6xNjBAZnwifJ0EYtHyD+rQoMt+8rE2N832/qenpGP37P3jfqwkWv9MVJgYGeBQWiRmb9+DonYyZmokpqXhn+QZ80K4p/jegE0wNDBAUE4vTvv4vvPDxrmt3YG1qjEmtG6pPD45avUV9gevKTg6onjmTde/7wzW2bf39CgRE5j0GN7/Yt4JjzwrndfUtS4/anngaHYMT93JOmgiJicPAX//CB15NsHxoDxjo6iIgMhrH7z584XUNlx87D2MDfczu2gYWRoa4+CgAo1Y/G+/aqLwrXO2s4WpnjSMfjdLYttKs+QX+G56XJgI3e2v8r6ZmzwauyKVnJs96ZmNqgrk928He3BQxicm4HRSKEWs242S2iTdl7GwwpW0TWBobISAyGr8cOYvfTj6bqJKYkopBKzbgQ6+m+Kl/wfY1G1NjTGzdEPaZ+9rINc/2tSolHdQz9Pc9v6/9sAJPimBfc7QwQ2uPjEt6bRv7jsZt7/y2EWcfZMwed3mub1/tPIT3WjXCZx1bwdbUBMExsfjrgg8WHcn/OM7ElFQMWrUBH7Zpip/7doKpoQGComNxyu8lfbue0bdJLTP79jQEI9Y+17fMGfr739PsW6sFr963JqVcUcrcItfZ+M5mFhpHko319fFl0zYoaWaGxNRU+EaGY8qBndjhezvfj5eYmoq+//yJ6Q2b45d2XWGmb4CncbE48eQhYpPz7tMO39uwMTbBlLqNYW9igpuhIRiyYxNCM69hmpSWirolS2FYtdqwNDRCaEIczgY8Rs8t69XXOS0y+p7QsXk23ljHYiYAQBI2Q6I+AnQdAN3sVwvQhcr0XUDPDZBUIPk0JKwvkPakQA8rUdOhMhsHlfl0QNcRSI8AUq5Akg7lvVHaY0jkSKjMZ0JlOgRIe5pxPdWsa5jm5+8pIip5/rzEG/bXX39hyJAhWLp0KerVq4cFCxZgw4YNuHXrVo6xp8+Ljo6GpaUlKnz4DXQNX3y9QSKit4UU3aVhiw1RylnYt0ySo/Ym+7yt7ndfmo+1KLvomHRYV7yPqKiol57t1voY0759+yIkJASffvopnj59iho1amD37t0vDaVERERE9N+i9WAKABMmTCjyU/dERERE9HbR+jc/ERERERGBwZSIiIiIlILBlIiIiIgUgcGUiIiIiBSBwZSIiIiIFIHBlIiIiIgUgcGUiIiIiBSBwZSIiIiIFIHBlIiIiIgUgcGUiIiIiBSBwZSIiIiIFIHBlIiIiIgUgcGUiIiIiBSBwZSIiIiIFIHBlIiIiIgUgcGUiIiIiBSBwZSIiIiIFIHBlIiIiIgUgcGUiIiIiBSBwZSIiIiIFIHBlIiIiIgUgcGUiIiIiBSBwZSIiIiIFIHBlIiIiIgUgcGUiIiIiBSBwZSIiIiIFIHBlIiIiIgUgcGUiIiIiBSBwZSIiIiIFIHBlIiIiIgUgcGUiIiIiBSBwZSIiIiIFIHBlIiIiIgUgcGUiIiIiBSBwZSIiIiIFIHBlIiIiIgUgcGUiIiIiBSBwZSIiIiIFIHBlIiIiIgUgcGUiIiIiBSBwZSIiIiIFIHBlIiIiIgUgcGUiIiIiBSBwZSIiIiIFIHBlIiIiIgUgcGUiIiIiBSBwZSIiIiIFIHBlIiIiIgUgcGUiIiIiBSBwZSIiIiIFIHBlIiIiIgUgcGUiIiIiBSBwZSIiIiIFIHBlIiIiIgUgcGUiIiIiBSBwZSIiIiIFIHBlIiIiIgUgcGUiIiIiBSBwZSIiIiIFIHBlIiIiIgUgcGUiIiIiBSBwZSIiIiIFIHBlIiIiIgUgcGUiIiIiBSBwZSIiIiIFIHBlIiIiIgUgcGUiIiIiBSBwZSIiIiIFIHBlIiIiIgUgcGUiIiIiBSBwZSIiIiIFIHBlIiIiIgUgcGUiIiIiBSBwZSIiIiIFIHBlIiIiIgUgcGUiIiIiBSBwZSIiIiIFIHBlIiIiIgUgcGUiIiIiBSBwZSIiIiIFIHBlIiIiIgUgcGUiIiIiBShyIJpZGRkUd0VERERERVDhQqmc+fOxV9//aX+vU+fPrC1tYWzszOuXLlSlPURERERUTFRqGD6yy+/wMXFBQCwb98+7Nu3D7t27YK3tzemTp1a1DUSERERUTGgV5iNnj59qg6mO3bsQJ8+feDl5YUyZcqgfv36RV0jERERERUDhTpiam1tDX9/fwDA7t270aZNGwCAiCAtLa1oKyQiIiKiYqFQR0x79OiBAQMGoEKFCggLC4O3tzcA4NKlSyhfvnxR10hERERExUChgun8+fNRpkwZ+Pv7Y968eTAzMwMABAYGYty4cUVdIxEREREVA4UKpvr6+vjwww9zLJ8yZUpR1ERERERExVChr2P6+++/o0mTJnBycsLDhw8BAAsWLMDWrVuLsj4iIiIiKiYKFUyXLFmC999/H97e3oiMjFRPeLKyssKCBQuKukYiIiIiKgYKFUx/+ukn/Prrr5g5cyZ0dXXVy+vUqQMfH5+irI+IiIiIiolCBVM/Pz/UrFkzx3JDQ0PExcUVRV1EREREVMwUKpi6ubnh8uXLOZbv3r0blSpVKoq6iIiIiKiYKdSs/Pfffx/jx49HYmIiRARnz57FH3/8gTlz5mD58uVFXyURERER/ecVKpiOGDECxsbGmDVrFuLj4zFgwAA4OTlh4cKF6NevX9FXSURERET/eQUOpqmpqVi/fj3atWuHgQMHIj4+HrGxsXBwcHg9FRIRERFRsVDgMaZ6enoYM2YMEhMTAQAmJiYMpURERET0ygo1+alevXq4dOlS0VdDRERERMVWocaYjhs3Dh988AEeP36M2rVrw9TUVOP2atWqFVV9RERERFRMFCqYZk1wmjRpknqZSqWCiEClUqm/CYqIiIiIKL8KFUz9/PyKvhIiIiIiKtYKFUxdXV2LvhIiIiIiKtYKFUzXrFnzwtsHDx5c2HqIiIiIqJgqVDB97733NH5PSUlBfHw8DAwMYGJiwmBKRERERAVWqMtFRUREaPzExsbi9u3baNKkCf7444+ir5KIiIiI/vMKFUxzU6FCBXz77bc5jqYSEREREeVHoU7l53lnenoICAgoyrvMl+RK8dAxSX/jj0tE9FqIStsVvHXS09izwtAJMtR2CW+ddk41tF3CWydVUgDcz9e6hQqm27Zt0/hdRBAYGIiff/4ZjRs3LsxdEhEREVExV6hg2q1bN43fVSoV7O3t0apVK/zwww9FVRsRERERFSOFCqbp6TxtTkRERERFq1CTn7744gvEx8fnWJ6QkIAvvviiKOoiIiIiomKmUMF09uzZiI2NzbE8Pj4es2fPLoq6iIiIiKiYKVQwFRGoVDlnQF65cgU2NjZFURcRERERFTMFGmNqbW0NlUoFlUqFihUraoTTtLQ0xMbGYsyYMa+jTiIiIiL6jytQMF2wYAFEBMOHD8fs2bNhaWmpvs3AwABlypRBw4YNX0edRERERPQfV6BgOmTIEACAm5sbGjVqBH19/ddVFxEREREVM4W6XFTz5s3V/5+YmIjk5GSN2y0sLF69MiIiIiIqVgo1+Sk+Ph4TJkyAg4MDTE1NYW1trfFDRERERFRQhQqmU6dOxcGDB7FkyRIYGhpi+fLlmD17NpycnLBmzZqir5KIiIiI/vMKdSp/+/btWLNmDVq0aIFhw4ahadOmKF++PFxdXbFu3ToMHDiw6CslIiIiov+0Qh0xDQ8PR9myZYHM8aTh4eEAgCZNmuDo0aNFWyERERERFQuFCqZly5aFn58fAMDDwwMbNmwAMo+kWllZFW2FRERERFQsFCqYDhs2DFeuXAEATJ8+HYsWLYKRkRGmTJmCqVOnFnWNRERERFQMFGqM6ZQpU9T/36ZNG9y6dQsXLlxA+fLlUa1ataKsj4iIiIiKiUIF0+wSExPh6uoKV1fXoqmIiIiIiIqlQp3KT0tLw5dffglnZ2eYmZnh/v37AIBPPvkEK1asKOoaiYiIiKgYKFQw/frrr/Hbb79h3rx5MDAwUC/39PTE8uXLi7I+IiIiIiomChVM16xZg2XLlmHgwIHQ1dVVL69evTpu3bpVlPURERERUTFRqGD65MkTlC9fPsfy9PR0pKSkFEVdRERERFTMFCqYVq5cGceOHcuxfNOmTahZs2ZR1EVERERExUyhZuV/+umnGDJkCJ48eYL09HRs3rwZt2/fxpo1a7Bjx46ir5KIiIiI/vMKdMT0/v37EBF07doV27dvx/79+2FqaopPP/0UN2/exPbt29G2bdvXVy0RERER/WcV6IhphQoVEBgYCAcHBzRt2hQ2Njbw8fGBo6Pj66uQiIiIiIqFAh0xFRGN33ft2oW4uLiiromIiIiIiqFCTX7K8nxQJSIiIiIqrAIFU5VKBZVKlWMZEREREdGrKtAYUxHB0KFDYWhoCABITEzEmDFjYGpqqrHe5s2bi7ZKIiIiIvrPK1AwHTJkiMbvgwYNKup6iIiIiKiYKlAwXbVq1eurhIiIiIiKtVea/EREREREVFQYTImIiIhIERhMiYiIiEgRGEyJiIiISBEYTImIiIhIERhMiYiIiEgRGEyJiIiISBEYTImIiIhIERhMiYiIiEgRGEyJiIiISBEYTImIiIhIERhMiYiIiEgRGEyJiIiISBEYTImIiIhIERhMiYiIiEgRGEyJiIiISBEYTImIiIhIERhMiYiIiEgRGEyJiIiISBEYTImIiIhIERhMiYiIiEgRGEyJiIiISBEYTImIiIhIERhMiYiIiEgRGEyJiIiISBEYTImIiIhIERhMiYiIiEgRGEyJiIiISBEYTImIiIhIERhMiYiIiEgRGEyJiIiISBEYTImIiIhIERhMiYiIiEgRGEyJiIiISBEYTImIiIhIERhMiYiIiEgRGEyJiIiISBEYTImIiIhIERhMiYiIiEgRGEyJiIiISBEYTImIiIhIERhMiYiIiEgRGEyJiIiISBEYTImIiIhIERhMiYiIiEgRGEyJiIiISBEYTImIiIhIERhMiYiIiEgRGEyJiIiISBEYTImIiIhIERhMiYiIiEgRGEyJiIiISBEYTImIiIhIERhMiYiIiEgRGEyJiIiISBEYTImIiIhIERhMiYiIiEgRGEyJiIiISBEYTImIiIhIERhMiYiIiEgRGEyJiIiISBEYTImIiIhIERhMiYiIiEgRGEyJiIiISBEYTImIiIhIERhMiYiIiEgRGEyJiIiISBEYTImIiIhIERhMiYiIiEgRGEyJiIiISBEYTImIiIhIERhMiYiIiEgRGEyJiIiISBEYTImIiIhIERhMiYiIiEgRGEyJiIiISBEYTImIiIhIEfS0XcCbMLB8LQwsXwvOplYAgLtRIfjp+nEcCfTNdf2ebtXwXf3OGsuS0lJRaeNc9e/z6ndCL7fqGuscCfTFsCN/vnK975SvjZGVGsDeyAw3I4Pw+YW9uBoeAACwNDDCZM9maFqiLJxMLBCeFI+9T+5gvs8RxKQkvfJjZ8e+FRx7Vjivo2/ZfVXHGwPK18KXF/di1Z1zr1yvEvo2sHwtDKxQC86mlkBWz64dx5HA+y/dtlPpyvhf427Y+/g2xhz7W+O2cha2+Kh6S9R3KA1dHR3ciwrFuOObERAf/Ur1ert44P1qzVHK1BIPYsIx9/IhHM7899VT6eCDas3RwqkcXMysEJOchBNBDzDvyiEEJ8S+0uM+b1yVhmhX2h3lLGyQmJaKiyFP8O2lQ7gfHZ7nNnoqHYzzbIieZauihIk57keH4duLh3P0+p2KtTC6cn3YG5vhZkQwPju3F1fCAl+55g6lPfBB9WYoZWYJv+hwfHvpMA4HPOvdhzWaoYVTOZQ2z+jd8acPMPfS4SLv3f0P3s91+ZwjR/Hr+fO53jawejUMrF4dzhYWAIC7YWH46dRpHHnwINf1V/bojhZubhi9dSv23cv9+V8Qkxs1Qr+qnrAwNMKFgCf4ZP8BPIiMVN++rFtXVLa3h62JCaISE3Hi0SPMPXoMwXFxr/zYWZp0r4dOo71QoXZZWNiaY0zNqfC9kvvfn0VXTxf9Z3RH28HNYedsA//bAVg+fR3O77msXkdHRwfvfN4brQc2g00JK4QFhGPv6sNY99XfL7zv/KjWvDLG/DAErlVcEOIfhvVf/429qw+rb6/atBJ6f9gFFWuXha2TDT7rPg8nt776ayuKSzANjI/BvCuH8CAmHCqVCj3KVMPSJr3Rec9y3I0OzXWbmOREtN75y7MFknOdwwG+mHZ2u/r35LS0V661o0slfFyzDT45vwuXwwIwzL0eVrfohzb//oKwpHg4GpvD0dgc31w+gHvRIXA2scRXdbzhaGyG8Sc2v/LjZ8e+FRx7Vjivq28A4OXsjhq2zngaH1MktSqlb4Hx0Zh3OVvP3KpiadPe6Lx7RZ49AwBnU0vMqNkKZ4Mf5bittJkVNrR5BxvuX8GCa8cQm5KECpb2SEpLfaVaa9k5Y2GjbvjuyiEcDLiHLq5V8EvTXuiyZyXuRIXAWE8fVWxK4KdrJ3AzMgiWBkb4tFZb/Nq0N7ruXfVKj/28+o6l8fvtC7gSFgg9lQ6m1myONa36oe32X5GQlpLrNh/WaIZubp6YfnoXfKPD0LykG5Y274Gee37H9YggAEAn10qYVbs1Zp3ZjUthARjuURdrWvVFq23LEJYUX+h6a9k5439NumLe5cM48PgeurpVwbLmPdFp50rciQp91jufE7gZGQxLAyN8VqctlrfohS67fiv04+am3pJfNH5v4eaGb9t5Yffdu3luExgTi3nHjuNBRARUKqBH5SpY2q0rOv++FnfDwjTWHV6rVp7P48IYXbcuhtasgQ9378HjqChMadwIv/XsAa/fVqtfQ08/8sfiM2cRHBuLEuZmmNG8ORZ16Yzef7z6B/8sRqZGuHbiFo5sPIn3fx2br22GfdUPrQc2w/xRv+DRrSeo064GPt88Fe81ngnfyxmhtu9HXdF5jBfmDV2Eh9f9UbFOOXy4chziouLxz0+7Cl1viTIO+GrHDPy7dB++HfQ/1GxdFe//OgbhgRE4v/dK5t9kiPtXH2LPqkP4fPPUQj9WbrQaTI8ePYrvvvsOFy5cQGBgILZs2YJu3boV+eMcDNB80vzgcxgDy9dCTTvnPF/ABUBo4os/MSWnp75wnZIm5vi4Rhs0LVEW6SI4F+KPLy7txZO4qDy3edejPv7yvYxNflcBALPO7UTLkuXRu2x1/HLzFO5EhWDciWefhh7FRuJ7n8P4sUFX6KpUSJOie1azbwXHnhXO6+qbo7E5PqvthaGH/8CK5n1z3P429+1gwD2N33+4euSlPdNRqTC/YRcs9DmGOvYusDAw1Lj9g2otcDjAF3MvH9KoPztzfUN8XLM12jhXhIGuLnzCA/HVxf24FRmcZ61DK9bF0UBf/HrrDABgvs9RNCnhhsEVamPW+d2ISUnC4EN/aGzz+YW9+KfdMDiZWLzy0drshhz8S+P3D0/uwMXek1HVtgTOBvvnuk13N0/8fO2k+ijl2ruX0LhkGYyoXA9TTmR8YBxRqR7+vHcFG+/7AABmntmNVs7l0ad8NSy5fhoAYKFviI9rt0LbUhVhoJPRuy/PH8DNF/RuuEcdHAm4j2U3Mnr345WjaFqiDIa418bMs3sQk5KEdw5ohqhPz+3FNu+hRd670HjNgN2mfDmcfuQP/6i8ny8H72seVf7hxAkMrF4dNUuW1Aimlezt8W6d2ui6dh3Ojh2T434q2tpievNmqOvsjISUFBx7+BBfHT6MiITEPB97WK2a+PnMGez3zfh3+3DXbpwdOwZe5ctjx+3bAICVFy+q1w+IicEvZ89iadeu0NPRQWp6er768jL71x4FADi62ud7mzaDmmH9N5txdtclAMCOX/aiVuuq6PV+Z8wd/BMAoHJDd5zcdh5nd2b8DUEPQ9CyX2O41y2vvh99Az0M+7o/WvZrAlMrEzy45o/l09fi6pEbeT52pzFt8dQvGEs/XAMAeHTrCao09kCPyZ3UwfTc7ss4t/tynvfxKrQ6xjQuLg7Vq1fHokWL3thj6qhU6FS6Moz19HEx9Eme65noGeBY5wk43mUiljbpjQoWdjnWaeDgirPdJmN/hzH4snZ7WBkYq2/TU+ngt+b9EZeajL4H1qD3gdWIT03Gb837QV8n97br6+jA07okTgT5qZcJgBNBfqhpWyrPWs31jRCbklSkQeF57FvBsWeFU1R9UwH4oUEX/HrrdK5B7b/Ut/z2bFKVJghLjMeG+1dy3KYC0NKpHPxiwvFbi3442/09bG47BG2dK2qst6hJD9gammD4kT/RdfdKXA9/irWtBsDSwCjPx61l54wTQZqnLo8F3kdNO+c8tzHXN0S6CKKT8w4eRcFcP6PuyKSEPNcx0NXLcdQ4MS0Vde0z/s31dXTgaVMCJwKf2y8CH6BWtr9xUbPusDUyxdCDf6HzrlW4Fh6EdW36v7B3Ne2dceKpZu+OBvqhln0+epfy+npnZ2KClm5u2HDtWr630VGp0MndHcb6ergYEKBebqSnhwUdO+CzAwdzhF8AMDc0xNo+vXEjOBhd163D0M2bYWdigp86dcrzsVwsLeFgZoYTD5+dGYhJTsblwKeo6VQy120sjYzQtVIlXAwIKLJQWlj6hvpITtQ8gp+UkAzPJh7q32+cuo2arTzhXCHj7ylbzRWeTTxwbvcl9ToTfn4XlRtUxNf952N09Q9xdNMpzNk1E87lS+T52JUaVMSlAz4ayy7svYzKDSvmuU1R0uoRU29vb3h7e7+Rx3K3tMemNkNhqKuH+NRkjD2+CffyOKpwPzoMH53dgVuRwTDXN8RIjwbY1GYI2u1ahqcJGacDjwbexx7/23gcF4nSZtb4sFoLrGreDz33/4Z0EXQsXRk6KhWmn/1Xfb/Tzm7H5R4for6DK44/9cvxuNYGJtDT0clxFCg0MQ7lLGxzrdXawBgTqzTBn76v55ML+1Zw7FnhFHXfxlRqhDRJx295jCn9L/TN3dIem9oOedazY3/n2bM6dqXQu1x1dNq1ItfbbY1MYaZviDGVG+LHq0cw9/JBNC9ZDkua9sSAA+twNuQR6tiVQnWbkqi7ZSGS0zNOhc65fBBtS1WEt4tHnn+jnZFZrj2zNzbLdX0DHV1Mq9ES2x9eR2xqcgG7kn8qAJ/WaYNzwf64E5X38IejAfcxolI9nA32x8OYCDQuUQbtXdyho1IBAKwNs/YLzVAVkhiHcpYZ+0Ud+1KoblsSdTb9T927by4ehJdLRXQo7YE/7uXeO/tceheSGAc7o9x7Z6iji+k1W2DbgxuITXl9vetRpTLiklNeeBo/i7udHTb17wdDPT3EJydj7LbtuBf+bEzvrBYtcDEgQH1k83mDa9TAjeBgfH/8hHrZR3v24uToUXCztoJfRGSObexNTYBcjvKGxsfB3tRUY9lHTZvinZo1YKKvj4sBARix5Z98dOD1Or/nCnpO6QSfozcQ4BuEmq2rokmP+tDRffah+c9v/4GJhQlW3lyA9LR06OjqYNWsP3Bw/XEAgL2LHdoNbYmBrmMRFhgBANj0w3bUbVcD7Ya1xMqZf+T62DYlrBARpNnTiKAomFqawMDIAMmJr2+/graDaUElJSUhKenZ5IHo6PyforgfE4ZOe5bDXN8Q3i4e+K5+Z/Q/uDbXF/FLYU9wKezZUYeLoY+xt8No9C9fC/N9jgAAdjx6dhj8dlQIbkUG40jn8Wjg4IqTQQ9QycoBrmY28OmpOfbCUFcPrmbWSLJPxcpm/dTLZ53fiVNBDwvQDcBMzwArmvfF3ahQLLx2tEDb5hf7VnDsWeEUZd88rUtgaMW66Lwn9xAG4D/Rt/sxYei0e0VGz0p74LsGndH/QM6emeoZ4IeGXfDx2Z2ISM79yGBWyNr/+C5W3s4I8zcjg1HLzhkDK9TE2ZBHqGTtCBM9A1zoMUVjW6PMnjmZWGBPh1Hq5UtunMTiGycL9DfpqXTwc+PuUEGFT87tLtC2BfVlvXZwt7JDr71rX7je7PP78G2DDjjQeRQEwMPYCGz0vYo+5arl+7EqWTvAVM8Al3pP1lhupKsHV3MrOJlYYF/nkerli66dxOLrpwr09+ipdPBzs+5QqVSYdfbVetfVwwNftW2j/n345i049+TZc663pye23rqZr/Hu98PD0en3tTA3MIB3xYr4rn079P9rA+6Fh6N1ubJoVNoFnX7P+9+gkr09Gri4wGfihBy3lba0QjXHEjlqTZP8H/Fcdv4cNlzzgbOFBSY1bIgfvNvj3UKG01YDmmDyL6PVv3/c4WtcO36rwPezePIqTFk2GituLgREEOAbhL2/HUK7Ya3U6zTv0xCtBjTBnIEL8eD6Y5SvUQZj5w9FWEAE9q05AreqpaGrp4tVt/+ncd/6hnqIDsuYGLct+nf18gPrjmLh2F8L9XcXpbcqmM6ZMwezZ88u1LYp6el4GJvxieFaxFNUs3HC0Ip1Mev8ywcIp0o6bkQEoYyZdZ7r+MdFIiwxDq5m1jgZ9ACmega4FhGIKae25lg3PCkeyelp6LRnuXpZaGIcktNTkZqeDjsjzU9zdkamCEnQ/MRsqmeAVS36Iy4lGWOOb0RqAZ6EBcG+FRx7VjhF2be69i6wNTLF8S4T1evo6ejg4xptMMy9HpptX/Sf6FvOnpXEUPe6mHVOs2elzazgYmaFX5v1US/LCqJ3+k5Hm39/QWB8NFLS03IMe/CNDkPtzFPWJnr6CE6MxYAD63LUEp2ciOiURHTa/ezDQGRmCA5NjM2jZ5qzxvVUOvipcXc4m1pi4MH1r/Vo6ey6XhljQPeufenEuPCkBIw68jcMdXRhZWiMoIRYTK/ZQj3+NiIpPnO/MNHYzj7b32iqZ4DghFj027c+x/1HpyQiOjkRHf5dqV6W1buQXHpnb2SK0MScvVvUtBtKmVqg/74/Xvlo6X5fX1x++lT9+9PYZ49X19kZ5WxsMHHHjnzdV0p6Oh5mzoS/FhyMaiUcMbRWLczavx+NXEqjtJUVLk8Yr7HN4s6dce7JEwzYsBEmBvo46Hsfc48dy3HfwbGx0FGpctTqkHlU1M7EBCHZZtjbmZjiRojmmN6IhEREJCTCLyIS98LCcXL0KNQsWRKXAgt+RYVT287j1pln479Dn+R9tYcXiQqNxuc9voO+oT4sbM0RFhCOEd8OROD9IPU6I+e9g7/m/oPDf2V8+Htw7REcXO3Qb3p37FtzBMZmRkhLTcO4Oh8hPU3z9SchNmOYx5iazz6Yx0dnHF0OfxoJa0crjfWtHS0RFxX/2o+W4m0LpjNmzMD77z+7XEV0dDRcXFwKdV8qlQoGurr5WldHpYK7lb164HtuShibw9rQRH15jmsRT9GxdGWEJcbl+eKa9YaS3bWIQDRyLIN9T+5k1AmgkWMZ/H732aU4zPQM8FuL/khOT8PIYxvUp4XeBPat4NizwnmVvm15cC3HmMbfmvfHPw98sNEvY3zlf7FvKpUKBjo5e+YbHYb2OzWPhLxfrRnM9AzxxcV9maE0HVfDAlHW3EZjvTLmNgiIyzg7dT3iKeyNzJAq6XlOEMutZxdDn6CRYxmsuv1sWEXjEm64lG08bFYoLWNug4EH16mD2eswu64X2rlURL996/D4BRPdnpeUnoaghFjoqXTQvrQH/n14E8gMXtfCn6JRiTLY+zjj1LYKQKMSrlhz5wIA4Fr4U9gbmyFN0vN8zNx6dynkCRqVcMXKW89616RkGVwM0ezdoqbdUMbCBv33FU3v4lJSEBeZ8xQ5Mo+W+jx9ilsheQ9/eJHsz+0lZ8/iLx/N8Yy7hw7BV4eP4EDmqf3rQcFoX7ECHkdF5TlO+/la/aOiEBwbi0alS+NmSAgAwMzAADVKlsC6KznHWGfJ+sCW39ee5yXEJiIh9mk+1syflKQUhAWEQ1dPF016NMDRjc/OQBiZGCI9XbMf6Wnp0NHJ+BvuXfKDrp4urBws8jxqG+Cbs9abp++gnnctjWW12lTHjVN3iuiverG36gL7hoaGsLCw0PjJj6nVWqCuvQucTS3hbmmPqdVaoIGDK7Y9uA4A+L5+Z0yt1kK9/sQqTdCkhBtcTK1QxboE5jfoCmcTS/x1P2MMkImePqZXb4Uatk5wNrVEI8cyWNq0Nx7GhOPY04wZiFsfXkNEUjyWNu2NuvYuKGVqifoOpfFpLS+UMDbPs9YVt86gX7ma6FGmKspZ2OLLOt4w0dPHpvsZM4DN9AywusWAjBrO7oCZviHsjExhZ2SqfkIVFfaNPXtb97XI5ATciQrR+EmVNIQkxsIvJvw/0bep1Z/rWfXMnj3MmIzyfYPOmFo9o2fJ6Wk5+hGdnITY1CTciQpBSuZEj19vnUbH0pXRt1wNuJpZ450KtdHauQLW3s0IV8efPsCl0CdY2rQXmpRwg7OpJWrZOeODas1R1SbvyRS/3TmHZiXL4l2Peihrbov3PJuiqk1JrMm8Xz2VDhY16YGqNiUx5dRW6KhU6p7lNRGtsL6s2w7d3argveNbEZeSDHsjU9gbmcJQ99lxmh8adcK0Gs3Vv9ewdUI7l4pwMbNCXftSWN2qL3QALM2cbQ8Ay2+eRf8KNdCzbMZ+8XX99jDR08dG36vq3l0MfYJlzXuiaUk3lMrs3YfVm72wdytvnUdzp7IYUakeylnYYHK1JqhqUxKrbz/r3ZJm3VHVtiQmH98GXZWO+m8q6t4hM9x1cK+Iv3xyn/S0tlcvvFOjhvr3qU2aoK6zM5wtLOBuZ4epTZqggYsLtt3KCPWh8fG4Exam8QMAATHReJw5XO/3y5dhaWSEhR07opqjI0pbWqKpqyvmtfN64XNq1cVLmNCgPlqXKwt3Ozt8790eQbGx2Hsv44hm9RIl8E6NGqhkbw8nc3M0dHHBgo4d8CAislBHS/Nibm2GctXLwLVyxpmHUu5OKFe9jMZRyWm/TcDwbwaof/eoVx5NutdDCTcHeDbxwJxdM6Gjo8Jf856d4Tm9/QIGfNwD9TrUgqOrPRp3q4eeUzrjxD9nAQBP7gZi/9qjmLZ6YsZ9lXGAe93y6De9G+p10Aye2e34ZR9KlHXAiLmD4OLuhM5jvdC8T0NsXvDsCLmRqRHKVS+DctXLAABKuDmgXPUysHfJOXm3oN6qI6aFZWtkih8adIG9kRliUpJwOzIYQw//geOZM2udTC2Rnu3iaZYGRphTtyPsjEwRnZyIaxFP0Wv/avW4rTQReFg5oIdbNVjoGyE4MQbHnvph/tUj6iMjiWmp6Hvwd3xUvRUWN+4JM31DPE2IwcmgB4h9wUW2//W/CRsjU0yp2hx2Rqa4GRmEoYf/RGhSxqmIKjYl1DNZD3fSPPXRdPvPL7zMDfv2+vvGnimjb/nxtvfN1tAEPzToDHvj53qWOYPbycQC6QW8CsDex3fwyfldGFu5ET6r1Rb3Y8Ix7vjfOB/6WL3O8CN/4YNqzTGvfifYGJogNDEWZ0P8X3jprouhTzD55FZ8UK05PqzWAg9iIjDm2Cbcico4kuVoYo62pTJm/O70HqGxbf8Da3Eml2uuFtY77hlvyH95DdJY/uHJHdiUeaknZ1MLSLbeGerq4sPqzVHa3ApxKck4FOCLKSe3IzrbfrLj4U3YGJpgSrWmsDc2xc2IYAw5uEFjQtSwgxvwYY3m+K5hR9gYmiAkMRZng1/eu/eOb8MHNZphao3meBATgVFH/lZP1iphYo62Lhm929XpXY1t++1bh9NBRdc7AOjk7g4VgO23cj8CV9rKEjbGz64aYmtigh+828Pe1BQxycm4HRKCoX//jeMP819XcFwc+vzxJz5q1hSre/WEga4unkRH4+iDBy/cx5eeOwdjfX1807YtLAwNcf7JEwzbvFk9LjYxNRXtKpTH5EYNYaKvj+C4OBz1e4CJZ/4tkmtFZ2nYpQ6mrnr2WjDrz4wx2mtmb8DvszcCABxK20GyHf00MDLA0C/7o2RZByTEJuLszkuYO/gnxEU9259+nrQCQ7/sh0mLRsDKwRJhAeH4d9k+rP1ik3qd74cvxsBZPTHq+yGwc7ZBdGg0bp6+i9M7nl0m63lPHwRjVqc5GPvjUHSf1AGhj8Pw48hf1JeKAoCKdcrih0PPhlaO/XEoAGDvb4fx3fBXu9KSSuQ1XvflJWJjY3Ev85NLzZo18eOPP6Jly5awsbFB6dKlX7p9dHQ0LC0t4bpiFnRM8r7cBhHRW0WK9oh0cZCexp4Vhk6QYT7WouzKTS3YpDQCUiUFh7EVUVFRLz3brdUjpufPn0fLli3Vv2eNHx0yZAh++61ov7GCiIiIiJRNq8G0RYsW0OIBWyIiIiJSkLdq8hMRERER/XcxmBIRERGRIjCYEhEREZEiMJgSERERkSIwmBIRERGRIjCYEhEREZEiMJgSERERkSIwmBIRERGRIjCYEhEREZEiMJgSERERkSIwmBIRERGRIjCYEhEREZEiMJgSERERkSIwmBIRERGRIjCYEhEREZEiMJgSERERkSIwmBIRERGRIjCYEhEREZEiMJgSERERkSIwmBIRERGRIjCYEhEREZEiMJgSERERkSIwmBIRERGRIjCYEhEREZEiMJgSERERkSIwmBIRERGRIjCYEhEREZEiMJgSERERkSIwmBIRERGRIjCYEhEREZEiMJgSERERkSIwmBIRERGRIjCYEhEREZEiMJgSERERkSIwmBIRERGRIjCYEhEREZEiMJgSERERkSIwmBIRERGRIjCYEhEREZEiMJgSERERkSIwmBIRERGRIjCYEhEREZEiMJgSERERkSIwmBIRERGRIjCYEhEREZEiMJgSERERkSIwmBIRERGRIjCYEhEREZEiMJgSERERkSIwmBIRERGRIjCYEhEREZEiMJgSERERkSIwmBIRERGRIjCYEhEREZEiMJgSERERkSIwmBIRERGRIjCYEhEREZEiMJgSERERkSIwmBIRERGRIjCYEhEREZEiMJgSERERkSIwmBIRERGRIjCYEhEREZEiMJgSERERkSIwmBIRERGRIjCYEhEREZEiMJgSERERkSIwmBIRERGRIjCYEhEREZEiMJgSERERkSIwmBIRERGRIjCYEhEREZEiMJgSERERkSIwmBIRERGRIjCYEhEREZEiMJgSERERkSIwmBIRERGRIjCYEhEREZEiMJgSERERkSIwmBIRERGRIjCYEhEREZEiMJgSERERkSIwmBIRERGRIjCYEhEREZEiMJgSERERkSIwmBIRERGRIjCYEhEREZEiMJgSERERkSIwmBIRERGRIjCYEhEREZEiMJgS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"/>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=50579422">
|
||
<div class="jp-Cell-inputWrapper" tabindex="0">
|
||
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
|
||
</div>
|
||
<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt">
|
||
</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown">
|
||
<h2 id="Exercise-4,-Implementing-the-simplest-form-for-gradient-descent">Exercise 4, Implementing the simplest form for gradient descent<a class="anchor-link" href="#Exercise-4,-Implementing-the-simplest-form-for-gradient-descent">¶</a></h2><p>Alternatively, we can fit the ridge regression model using gradient
|
||
descent. This is useful to visualize the iterative convergence and is
|
||
necessary if $n$ and $p$ are so large that the closed-form might be
|
||
too slow or memory-intensive. We derive the gradients from the cost
|
||
functions defined above. Use the gradients of the Ridge and OLS cost functions with respect to
|
||
the parameters $\boldsymbol{\theta}$ and set up (using the template below) your own gradient descent code for OLS and Ridge regression.</p>
|
||
<p>Below is a template code for gradient descent implementation of ridge:</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs" id="cell-id=392b0bb7">
|
||
<div class="jp-Cell-inputWrapper" tabindex="0">
|
||
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
|
||
</div>
|
||
<div class="jp-InputArea jp-Cell-inputArea">
|
||
<div class="jp-InputPrompt jp-InputArea-prompt">In [9]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="cm-editor cm-s-jupyter">
|
||
<div class="highlight hl-ipython3"><pre><span></span><span class="k">def</span><span class="w"> </span><span class="nf">gradient_descent</span><span class="p">(</span><span class="n">X</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">cost_func</span><span class="p">,</span> <span class="n">grad_cost_func</span><span class="p">,</span> <span class="n">eta</span><span class="o">=</span><span class="mf">0.1</span><span class="p">,</span> <span class="n">num_iters</span><span class="o">=</span><span class="mi">1000</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
|
||
<span class="c1"># Initialize weights</span>
|
||
<span class="n">theta</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">zeros</span><span class="p">(</span><span class="n">X</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span>
|
||
<span class="c1"># Store cost history</span>
|
||
<span class="n">cost_history</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">zeros</span><span class="p">(</span><span class="n">num_iters</span><span class="p">)</span>
|
||
<span class="k">for</span> <span class="n">t</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">num_iters</span><span class="p">):</span>
|
||
<span class="c1"># Compute cost</span>
|
||
<span class="n">cost_history</span><span class="p">[</span><span class="n">t</span><span class="p">]</span> <span class="o">=</span> <span class="n">cost_func</span><span class="p">(</span><span class="n">X</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">theta</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
|
||
<span class="c1"># Compute gradient</span>
|
||
<span class="n">grad</span> <span class="o">=</span> <span class="n">grad_cost_func</span><span class="p">(</span><span class="n">X</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">theta</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
|
||
<span class="c1"># Update weights</span>
|
||
<span class="n">theta</span> <span class="o">-=</span> <span class="n">eta</span> <span class="o">*</span> <span class="n">grad</span>
|
||
<span class="k">return</span> <span class="n">theta</span><span class="p">,</span> <span class="n">cost_history</span>
|
||
|
||
<span class="k">def</span><span class="w"> </span><span class="nf">OLS_cost_func</span><span class="p">(</span><span class="n">X</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">theta</span><span class="p">):</span>
|
||
<span class="n">error</span> <span class="o">=</span> <span class="n">X</span><span class="o">.</span><span class="n">dot</span><span class="p">(</span><span class="n">theta</span><span class="p">)</span> <span class="o">-</span> <span class="n">y</span>
|
||
<span class="k">return</span> <span class="mf">0.5</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">mean</span><span class="p">(</span><span class="n">error</span><span class="o">**</span><span class="mi">2</span><span class="p">)</span>
|
||
|
||
<span class="k">def</span><span class="w"> </span><span class="nf">OLS_grad_cost_func</span><span class="p">(</span><span class="n">X</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">theta</span><span class="p">):</span>
|
||
<span class="n">error</span> <span class="o">=</span> <span class="n">X</span><span class="o">.</span><span class="n">dot</span><span class="p">(</span><span class="n">theta</span><span class="p">)</span> <span class="o">-</span> <span class="n">y</span>
|
||
<span class="k">return</span> <span class="n">X</span><span class="o">.</span><span class="n">T</span><span class="o">.</span><span class="n">dot</span><span class="p">(</span><span class="n">error</span><span class="p">)</span> <span class="o">/</span> <span class="nb">len</span><span class="p">(</span><span class="n">y</span><span class="p">)</span>
|
||
|
||
<span class="k">def</span><span class="w"> </span><span class="nf">Ridge_cost_func</span><span class="p">(</span><span class="n">X</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">theta</span><span class="p">,</span> <span class="n">lam</span><span class="p">):</span>
|
||
<span class="k">return</span> <span class="n">OLS_cost_func</span><span class="p">(</span><span class="n">X</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">theta</span><span class="p">)</span> <span class="o">+</span> <span class="mf">0.5</span> <span class="o">*</span> <span class="n">lam</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">sum</span><span class="p">(</span><span class="n">theta</span><span class="o">**</span><span class="mi">2</span><span class="p">)</span>
|
||
|
||
<span class="k">def</span><span class="w"> </span><span class="nf">Ridge_grad_cost_func</span><span class="p">(</span><span class="n">X</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">theta</span><span class="p">,</span> <span class="n">lam</span><span class="p">):</span>
|
||
<span class="k">return</span> <span class="n">OLS_grad_cost_func</span><span class="p">(</span><span class="n">X</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">theta</span><span class="p">)</span> <span class="o">+</span> <span class="n">lam</span> <span class="o">*</span> <span class="n">theta</span>
|
||
</pre></div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell" id="cell-id=be6ebfa8">
|
||
<div class="jp-Cell-inputWrapper" tabindex="0">
|
||
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
|
||
</div>
|
||
<div class="jp-InputArea jp-Cell-inputArea">
|
||
<div class="jp-InputPrompt jp-InputArea-prompt">In [10]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="cm-editor cm-s-jupyter">
|
||
<div class="highlight hl-ipython3"><pre><span></span><span class="n">eta</span> <span class="o">=</span> <span class="mf">0.1</span>
|
||
<span class="n">num_iters</span> <span class="o">=</span> <span class="mi">1000</span>
|
||
<span class="n">lam</span> <span class="o">=</span> <span class="mf">1e-3</span>
|
||
|
||
<span class="n">theta_gdOLS</span><span class="p">,</span> <span class="n">history_gdOLS</span> <span class="o">=</span> <span class="n">gradient_descent</span><span class="p">(</span><span class="n">X_norm</span><span class="p">,</span> <span class="n">y_centered</span><span class="p">,</span> <span class="n">OLS_cost_func</span><span class="p">,</span> <span class="n">OLS_grad_cost_func</span><span class="p">,</span> <span class="n">eta</span><span class="o">=</span><span class="n">eta</span><span class="p">,</span> <span class="n">num_iters</span><span class="o">=</span><span class="n">num_iters</span><span class="p">)</span>
|
||
<span class="n">theta_gdRidge</span><span class="p">,</span> <span class="n">history_gdRidge</span> <span class="o">=</span> <span class="n">gradient_descent</span><span class="p">(</span><span class="n">X_norm</span><span class="p">,</span> <span class="n">y_centered</span><span class="p">,</span> <span class="n">Ridge_cost_func</span><span class="p">,</span> <span class="n">Ridge_grad_cost_func</span><span class="p">,</span> <span class="n">eta</span><span class="o">=</span><span class="n">eta</span><span class="p">,</span> <span class="n">num_iters</span><span class="o">=</span><span class="n">num_iters</span><span class="p">,</span> <span class="n">lam</span><span class="o">=</span><span class="n">lam</span><span class="p">)</span>
|
||
|
||
<span class="nb">print</span><span class="p">(</span><span class="s2">"Gradient Descent OLS coefficients:"</span><span class="p">,</span> <span class="n">theta_gdOLS</span><span class="p">)</span>
|
||
<span class="nb">print</span><span class="p">(</span><span class="s2">"Gradient Descent Ridge coefficients:"</span><span class="p">,</span> <span class="n">theta_gdRidge</span><span class="p">)</span>
|
||
</pre></div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="jp-Cell-outputWrapper">
|
||
<div class="jp-Collapser jp-OutputCollapser jp-Cell-outputCollapser">
|
||
</div>
|
||
<div class="jp-OutputArea jp-Cell-outputArea">
|
||
<div class="jp-OutputArea-child">
|
||
<div class="jp-OutputPrompt jp-OutputArea-prompt"></div>
|
||
<div class="jp-RenderedText jp-OutputArea-output" data-mime-type="text/plain" tabindex="0">
|
||
<pre>Gradient Descent OLS coefficients: [-0.47433764 1.40826022]
|
||
Gradient Descent Ridge coefficients: [-0.44990454 1.38335272]
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell" id="cell-id=32a7e3a3">
|
||
<div class="jp-Cell-inputWrapper" tabindex="0">
|
||
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
|
||
</div>
|
||
<div class="jp-InputArea jp-Cell-inputArea">
|
||
<div class="jp-InputPrompt jp-InputArea-prompt">In [11]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="cm-editor cm-s-jupyter">
|
||
<div class="highlight hl-ipython3"><pre><span></span><span class="k">def</span><span class="w"> </span><span class="nf">theta_error</span><span class="p">(</span><span class="n">theta_est</span><span class="p">):</span>
|
||
<span class="k">return</span> <span class="n">theta_est</span> <span class="o">-</span> <span class="n">theta_true</span><span class="p">,</span> <span class="n">np</span><span class="o">.</span><span class="n">mean</span><span class="p">((</span><span class="n">theta_est</span> <span class="o">-</span> <span class="n">theta_true</span><span class="p">)</span><span class="o">**</span><span class="mi">2</span><span class="p">)</span>
|
||
|
||
<span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Gradient Descent OLS error: </span><span class="si">{</span><span class="n">theta_error</span><span class="p">(</span><span class="n">theta_gdOLS</span><span class="p">)</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
||
<span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Gradient Descent Ridge error: </span><span class="si">{</span><span class="n">theta_error</span><span class="p">(</span><span class="n">theta_gdRidge</span><span class="p">)</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
||
</pre></div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="jp-Cell-outputWrapper">
|
||
<div class="jp-Collapser jp-OutputCollapser jp-Cell-outputCollapser">
|
||
</div>
|
||
<div class="jp-OutputArea jp-Cell-outputArea">
|
||
<div class="jp-OutputArea-child">
|
||
<div class="jp-OutputPrompt jp-OutputArea-prompt"></div>
|
||
<div class="jp-RenderedText jp-OutputArea-output" data-mime-type="text/plain" tabindex="0">
|
||
<pre>Gradient Descent OLS error: (array([ 0.10881529, -0.09837005]), np.float64(0.010758716397832158))
|
||
Gradient Descent Ridge error: (array([ 0.13324839, -0.12327754]), np.float64(0.016476242667611243))
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=e2654903">
|
||
<div class="jp-Cell-inputWrapper" tabindex="0">
|
||
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
|
||
</div>
|
||
<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt">
|
||
</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown">
|
||
<h3 id="4a)">4a)<a class="anchor-link" href="#4a)">¶</a></h3><p>Discuss the results as function of the learning rate parameters and the number of iterations.</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs" id="cell-id=006ce51b">
|
||
<div class="jp-Cell-inputWrapper" tabindex="0">
|
||
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
|
||
</div>
|
||
<div class="jp-InputArea jp-Cell-inputArea">
|
||
<div class="jp-InputPrompt jp-InputArea-prompt">In [12]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="cm-editor cm-s-jupyter">
|
||
<div class="highlight hl-ipython3"><pre><span></span><span class="n">etas</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">logspace</span><span class="p">(</span><span class="o">-</span><span class="mi">4</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">10</span><span class="p">)</span>
|
||
<span class="n">max_iterations</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">logspace</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">5</span><span class="p">,</span> <span class="mi">10</span><span class="p">,</span> <span class="n">dtype</span><span class="o">=</span><span class="nb">int</span><span class="p">)</span>
|
||
<span class="n">theta_errors</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">zeros</span><span class="p">((</span><span class="nb">len</span><span class="p">(</span><span class="n">etas</span><span class="p">),</span> <span class="nb">len</span><span class="p">(</span><span class="n">max_iterations</span><span class="p">),</span> <span class="mi">2</span><span class="p">))</span>
|
||
|
||
<span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">eta</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">etas</span><span class="p">):</span>
|
||
<span class="k">for</span> <span class="n">j</span><span class="p">,</span> <span class="n">max_iter</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">max_iterations</span><span class="p">):</span>
|
||
<span class="c1"># print(f"Running GD with eta={eta}, max_iter={max_iter}")</span>
|
||
<span class="n">theta_gdOLS</span><span class="p">,</span> <span class="n">_</span> <span class="o">=</span> <span class="n">gradient_descent</span><span class="p">(</span><span class="n">X_norm</span><span class="p">,</span> <span class="n">y_centered</span><span class="p">,</span> <span class="n">OLS_cost_func</span><span class="p">,</span> <span class="n">OLS_grad_cost_func</span><span class="p">,</span> <span class="n">eta</span><span class="o">=</span><span class="n">eta</span><span class="p">,</span> <span class="n">num_iters</span><span class="o">=</span><span class="n">max_iter</span><span class="p">)</span>
|
||
<span class="n">theta_gdRidge</span><span class="p">,</span> <span class="n">_</span> <span class="o">=</span> <span class="n">gradient_descent</span><span class="p">(</span><span class="n">X_norm</span><span class="p">,</span> <span class="n">y_centered</span><span class="p">,</span> <span class="n">Ridge_cost_func</span><span class="p">,</span> <span class="n">Ridge_grad_cost_func</span><span class="p">,</span> <span class="n">eta</span><span class="o">=</span><span class="n">eta</span><span class="p">,</span> <span class="n">num_iters</span><span class="o">=</span><span class="n">max_iter</span><span class="p">,</span> <span class="n">lam</span><span class="o">=</span><span class="n">lam</span><span class="p">)</span>
|
||
|
||
<span class="n">theta_errors</span><span class="p">[</span><span class="n">i</span><span class="p">,</span> <span class="n">j</span><span class="p">,</span> <span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="n">theta_error</span><span class="p">(</span><span class="n">theta_gdOLS</span><span class="p">)[</span><span class="mi">1</span><span class="p">]</span>
|
||
<span class="n">theta_errors</span><span class="p">[</span><span class="n">i</span><span class="p">,</span> <span class="n">j</span><span class="p">,</span> <span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="n">theta_error</span><span class="p">(</span><span class="n">theta_gdRidge</span><span class="p">)[</span><span class="mi">1</span><span class="p">]</span>
|
||
</pre></div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell" id="cell-id=b06f0bc6">
|
||
<div class="jp-Cell-inputWrapper" tabindex="0">
|
||
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
|
||
</div>
|
||
<div class="jp-InputArea jp-Cell-inputArea">
|
||
<div class="jp-InputPrompt jp-InputArea-prompt">In [13]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="cm-editor cm-s-jupyter">
|
||
<div class="highlight hl-ipython3"><pre><span></span><span class="kn">import</span><span class="w"> </span><span class="nn">matplotlib.cm</span><span class="w"> </span><span class="k">as</span><span class="w"> </span><span class="nn">mcm</span>
|
||
<span class="kn">import</span><span class="w"> </span><span class="nn">matplotlib.colors</span><span class="w"> </span><span class="k">as</span><span class="w"> </span><span class="nn">mcolors</span>
|
||
|
||
<span class="n">fig</span><span class="p">,</span> <span class="p">(</span><span class="n">ax1</span><span class="p">,</span> <span class="n">ax2</span><span class="p">)</span> <span class="o">=</span> <span class="n">plt</span><span class="o">.</span><span class="n">subplots</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="n">figsize</span><span class="o">=</span><span class="p">(</span><span class="mi">12</span><span class="p">,</span> <span class="mi">5</span><span class="p">))</span>
|
||
|
||
<span class="c1"># Log Colormap</span>
|
||
<span class="n">cm</span> <span class="o">=</span> <span class="n">plt</span><span class="o">.</span><span class="n">get_cmap</span><span class="p">(</span><span class="s1">'viridis'</span><span class="p">)</span>
|
||
<span class="c1"># Create LogNorm between min and max of theta_errors</span>
|
||
<span class="n">norm</span> <span class="o">=</span> <span class="n">mcolors</span><span class="o">.</span><span class="n">LogNorm</span><span class="p">(</span><span class="n">vmin</span><span class="o">=</span><span class="n">theta_errors</span><span class="o">.</span><span class="n">min</span><span class="p">(),</span> <span class="n">vmax</span><span class="o">=</span><span class="n">theta_errors</span><span class="o">.</span><span class="n">max</span><span class="p">())</span>
|
||
|
||
|
||
<span class="n">im1</span> <span class="o">=</span> <span class="n">ax1</span><span class="o">.</span><span class="n">imshow</span><span class="p">(</span><span class="n">theta_errors</span><span class="p">[:,</span> <span class="p">:,</span> <span class="mi">0</span><span class="p">],</span> <span class="n">aspect</span><span class="o">=</span><span class="s1">'auto'</span><span class="p">,</span> <span class="n">interpolation</span><span class="o">=</span><span class="s1">'nearest'</span><span class="p">,</span> <span class="n">cmap</span><span class="o">=</span><span class="n">cm</span><span class="p">,</span> <span class="n">norm</span><span class="o">=</span><span class="n">norm</span><span class="p">)</span>
|
||
<span class="n">ax1</span><span class="o">.</span><span class="n">set_title</span><span class="p">(</span><span class="s1">'Gradient Descent OLS Error'</span><span class="p">)</span>
|
||
<span class="n">fig</span><span class="o">.</span><span class="n">colorbar</span><span class="p">(</span><span class="n">im1</span><span class="p">,</span> <span class="n">ax</span><span class="o">=</span><span class="n">ax1</span><span class="p">)</span>
|
||
|
||
<span class="n">im2</span> <span class="o">=</span> <span class="n">ax2</span><span class="o">.</span><span class="n">imshow</span><span class="p">(</span><span class="n">theta_errors</span><span class="p">[:,</span> <span class="p">:,</span> <span class="mi">1</span><span class="p">],</span> <span class="n">aspect</span><span class="o">=</span><span class="s1">'auto'</span><span class="p">,</span> <span class="n">interpolation</span><span class="o">=</span><span class="s1">'nearest'</span><span class="p">,</span> <span class="n">cmap</span><span class="o">=</span><span class="n">cm</span><span class="p">,</span> <span class="n">norm</span><span class="o">=</span><span class="n">norm</span><span class="p">)</span>
|
||
<span class="n">ax2</span><span class="o">.</span><span class="n">set_title</span><span class="p">(</span><span class="s1">'Gradient Descent Ridge Error'</span><span class="p">)</span>
|
||
<span class="n">fig</span><span class="o">.</span><span class="n">colorbar</span><span class="p">(</span><span class="n">im2</span><span class="p">,</span> <span class="n">ax</span><span class="o">=</span><span class="n">ax2</span><span class="p">)</span>
|
||
|
||
<span class="k">for</span> <span class="n">ax</span> <span class="ow">in</span> <span class="p">(</span><span class="n">ax1</span><span class="p">,</span> <span class="n">ax2</span><span class="p">):</span>
|
||
<span class="n">ax</span><span class="o">.</span><span class="n">set_xlabel</span><span class="p">(</span><span class="s1">'Max Iterations'</span><span class="p">)</span>
|
||
<span class="n">ax</span><span class="o">.</span><span class="n">set_ylabel</span><span class="p">(</span><span class="s1">'Learning Rate'</span><span class="p">)</span>
|
||
<span class="n">ax</span><span class="o">.</span><span class="n">set_xticks</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">arange</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">max_iterations</span><span class="p">)))</span>
|
||
<span class="n">ax</span><span class="o">.</span><span class="n">set_yticks</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">arange</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">etas</span><span class="p">)))</span>
|
||
<span class="n">ax</span><span class="o">.</span><span class="n">set_xticklabels</span><span class="p">(</span><span class="n">max_iterations</span><span class="p">,</span> <span class="n">rotation</span><span class="o">=</span><span class="mi">45</span><span class="p">)</span>
|
||
<span class="n">ax</span><span class="o">.</span><span class="n">set_yticklabels</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">round</span><span class="p">(</span><span class="n">etas</span><span class="p">,</span> <span class="mi">4</span><span class="p">))</span>
|
||
</pre></div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="jp-Cell-outputWrapper">
|
||
<div class="jp-Collapser jp-OutputCollapser jp-Cell-outputCollapser">
|
||
</div>
|
||
<div class="jp-OutputArea jp-Cell-outputArea">
|
||
<div class="jp-OutputArea-child">
|
||
<div class="jp-OutputPrompt jp-OutputArea-prompt"></div>
|
||
<div class="jp-RenderedImage jp-OutputArea-output" tabindex="0">
|
||
<img alt="No description has been provided for this image" class="" src="data:image/png;base64,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MetlWcSIgJ9//hnPPvssPD09odFosHXr1kdus2fPHjz++OOws7ND06ZNER8fXym1EhFRJdFfHFR0ARAcHAw/Pz/ExsaqfVYWjXlPREQGmPWyLKIjIC8vD/7+/qX+pqWmpqJXr17o0qULUlJSMGnSJLz66qvYsWOH0WslIqKqJzk5GSdPnsTYsWPVLsWiMe+JiMhYzC3rLeLWgB49eqBHjx6lbh8XFwcfHx8sXboUANCyZUv88ssvePfddxERESG7XX5+PvLz86Wvc3JyKlg5EREZjU5U/OHAOvMcLlhVVUbeM+uJiKoQZr0sixgRUFZJSUkIDw83WBcREYGkpKQSt4uJiYGLi4u0eHl5GblSIiIqLyF0iixUdZUn75n1RERVB7NeHjsCipGeng43NzeDdW5ubsjJycGdO3dkt5s5cyays7Ol5dKlS5VQLREREZVHefKeWU9ERObAIm4NqCx2dnaws7NTuwwiIioNISo+3M9MZxImecx6IqIqhFkvix0BxXB3d0dGRobBuoyMDDg7O8PBwUG1uoiISEFCgfsGzfTiwFIw74mIzByzXhZvDShGaGgoEhMTDdbt2rULoaGhqtVEREREymLeExGRpbKIjoDc3FykpKQgJSUFuP+4oJSUFKSlpQH37/cbMmSI1H706NH4888/MX36dJw+fRoffPABPv/8c0yePFm1cyAiIoXpdMosZDKY90REZIBZL8sibg04cOAAunTpIn0dHR0NABg6dCji4+Px119/SRcJAODj44PvvvsOkydPxnvvvYcGDRrg448/LvHRgUREVMVwuKDZYd4TEZEBZr0si+gICAsLgyjhGxgfH1/sNocPHzZyZURERKQU5j0REVHpWERHABER0cOETgehqdhwP3N9tjAREZE5YNbLs4g5AoiIiIoQQpkFQHBwMPz8/BAbG6v2WREREZEes14WRwQQERFVUHJyMpydndUug4iIiIzE3LKeHQFERGSZdALQcAIhIiIis8Wsl8WOACIiskxCAKjgfX9menFARERkFpj1sjhHABEREREREZEF4YgAIiKySEInICo4XLCkR9URERGRupj18tgRQERElknoFBguaJ6PFCIiIjILzHpZvDWAiIiIiIiIyIJwRAAREVkkDhckIiIyb8x6eewIICIiy8ThgkREROaNWS+LHQFGpO89up2rVbsU3MsrULsEAID23l21SwAAFIp7apdgto8iIVJSIf75t2qM3vhC3AMquFt9fWS5mPVFaQtMJOu1+WqXQESloP+3yqyvXOwIMKJbt24BAIZ0PK92KQD+ULsAIqJyu3XrFlxcXBTZl62tLdzd3fFL+nZF9ufu7g5bW1tF9kVVD7OeiEgZzPrKpRHmetODCdDpdLh69SqcnJyg0WjKtY+cnBx4eXnh0qVLcHZ2VrzGqlID62Adpl4D6zBOHUII3Lp1C56enrCyUm5+27t376KgQJlPT21tbWFvb6/IvqjqMZesN5U6TKEG1sE6qkIdplCDUnUw69XBEQFGZGVlhQYNGiiyL2dnZ1X/kZtKDayDdZh6DaxD+TqU+nTgQfb29mYX6KQOc8t6U6nDFGpgHayjKtRhCjUoUQezvvLx8YFEREREREREFoQdAUREREREREQWhB0BJs7Ozg7z5s2DnZ2dRdfAOliHqdfAOky3DiJTZyr/VkyhDlOogXWwjqpQhynUYEp1UNlxskAiIiIiIiIiC8IRAUREREREREQWhB0BRERERERERBaEHQFEREREREREFoQdAUREREREREQWhB0BVGqcV5KIiMi8MeuJiCwDOwKoVC5evIgdO3YAAHQ6nWp15Ofnq3ZsOVevXsUff/yhdhlEREQVwqyXx6wnInPDjoAqqLJ7648fP46mTZti2rRpAAArK3V+bM6cOYPZs2fj3r17qhy/OIcPH8Zjjz1mEhcHQgh+klMCU3pvsrKyUFBQoHYZBtS86Ceiopj1zHo5zHt5pvS+mGLWg3lPD7BRuwCS98cff2D16tW4du0aAgIC0LNnT/j6+kKj0UAIAY1GY/QaUlJS0LFjR0REROD06dNYv349Bg8ebPTjPuzo0aMICQlBfn4+unTpgl69elV6DQ87cuQInnzySYwYMQLPPPNMkdcr63uUn58POzs73Lt3D7a2tkY/XmlcuHABu3fvxuXLlzFo0CA0bty4Ut6Lh12+fBkZGRkIDAxU5fjFOXToEHr06IGdO3fC399flRouXLiAr7/+GlqtFs2aNcMzzzyj2kX/gy5evIiUlBRkZGSgV69ecHV1hYODg9plERkVs/5fzPqSMe+Lx6yXZ4p5z6w3IYJM0okTJ4SLi4vo3r276NOnj3BxcRHh4eHio48+ktrodDqj1pCSkiKqV68uXnvtNVFQUCDat28vBg8ebNRjytXh4OAgxo4dK/r37y8GDRok8vLyjH7+JTlx4oRwcnIS06ZNE0IIUVhYKPbu3Su2b98ufvrpp0qto0+fPqJXr14iLCxMbN++XWRnZ1fa8Ytz9OhRUb9+fdGpUyfh5uYm6tevLy5fvlzpdZw+fVq4ubmJ4OBgsXfv3ko/fnFSUlKEk5OTmDBhgmo1HD16VHh4eIiwsDDRsmVL4e/vLxITE1WrR+/IkSOiXr16wt/fX9StW1fUrVtXzJ49W/zxxx9CVMLvOyI1MOsN62DWl1wL874oZr08U8x7Zr1pYUeACcrPzxcvv/yyGDFihLTu7Nmzol+/fqJ9+/bivffeM3oNZ8+eFRqNRsyePVtat3nzZmFnZyd+/PFHox9f7+DBg8LJyUmqY9myZcLZ2VmcPXtWCJV+YRQWForw8HDh7OwsTp06JbRarejVq5d4/PHHhaurq3BwcBBjxowRhYWFRq3j1KlTwtXVVYwbN0688847YtSoUUKj0Yjo6Ghx6tQpox5bzuXLl0XTpk3FggULRF5enhBCiCZNmojPPvusUuv466+/RFhYmHjiiSdEjx49RLdu3cTPP/9cqTU87MiRI8LZ2Vm6oNTpdOLChQvi6NGj4sqVK1I7Y/5MX7lyRfj4+IgZM2YIIYQ4fvy4CAgIEF9//bVBO61Wa7QaipOVlSVCQkLEtGnTRGZmphBCiPnz54v27duLvn37ipMnT1ZqPUSVgVn/L2Z9yZj3xWPWyzPFvGfWmx52BJiop59+WowcOVKIB35ZXLx4UQwbNkw8+eST4ptvvjHq8S9duiRWrlwpfa3T6cTly5fFE088ISZPnixEJfzyyM7OFo6OjtLxhBCioKBABAUFiSFDhqjaa3ju3DkRGBgonn76aREQECAiIiLEwYMHxalTp8TXX38tHB0dpRAwhsLCQhEVFSWGDRtmsL579+6iRo0aYvz48eLixYtGO76cHTt2iMcff9zgE4Fnn31WLFy4UIwbN05s375dZGRkGL2O5ORk0bVrV/Hrr7+K77//XvULhDt37ohWrVqJunXrCnH/305kZKQIDg4WNjY2ol27dmLJkiVGr+Pbb78VwcHB4tatW9K63r17i6lTp4q5c+eKjz/+WFpfmRcHf/31l/Dx8RFbt241WL927VrRsWNHERUVZXABRWQumPXM+kdh3stj1sszxbxn1psedgSYmMLCQlFQUCCioqLEiy++KO7evSt0Op30j/T8+fMiNDRU9OvXT5X65s6dK2rVqiVu3LghhBF7NC9duiSOHTsmzpw5I63T6XSisLBQzJo1S7Rq1Upcu3bNqDXI0ff+nz9/XrRq1Up06NBBpKWlGbR55513hLe3t7h06ZJR6issLBRPPfWUeOONN4QQQvpFP3XqVPH0008LZ2dn8eGHHwpRye/PJ598IpycnMTRo0eFEEIsWbJEVKtWTbz88sviiSeeEE2bNhWLFi2qlE9QUlJSpP//7rvvpAuEB4dz6v9dVUYI7tq1S9SqVUsMHTpUhIeHi27duonvv/9efPfdd2LmzJmibt26YtWqVUat4fvvvxc1a9aUQnjhwoVCo9GI/v37i8jISGFjYyNmzZpl1BqKk56eLvz9/UVcXJwQQoh79+5Jr3344YeiWbNmYsOGDUKoMFqByBiY9f9g1peuDua9PGZ98Uwx75n1pocdASbi4V+Ue/bsEdbW1gZDA/Vt9uzZI6ysrMTx48cVrSE3N1fk5OQUe8+ZPlyuX78uWrZsKWbMmGG0wDl27Jjw8vIS0dHRQjxw3vrjZWRkCCcnJykUK4O+Bv0vJv3XV65cERs3bhQFBQUG7d99913x2GOPidu3bxutpsGDB4u2bdtKNV29elXUrl1b7N+/X8ydO1e4ublJQ6+M6cFf5EIIERwcLFxdXUVERISwtbUVO3fulF6bPHmy8PHxMUpdubm5Jb6+fft20b17dxERESF9WjBx4kTx+++/K16LnMTERFG9enURFBQk0tPTpfUZGRliwIAB4qWXXhJ379412vFPnz4t+vXrJ5ydnUWvXr2ERqMx6JmPjY0VjRo1ku7Vq0wDBw4UTZs2FX/99ZcQD/1c9e/fXwQGBlZ6TURKY9b/i1lfesz7fzHrS8dU855Zb1rYEWACzpw5I5YsWSKuXr1qsH7JkiXCysrKYNIgcf9eupYtW4rU1FTFajhx4oTo1q2baNu2rfD09BSffvqpEMX0Lt+7d09ERUWJ0NDQIoGoBP2kRT4+PsLd3b3IsDJ9KE+dOlV06NChUobDHTt2TISFhUmfBJSmZ3n8+PGib9++Rr042LNnj2jXrp1wd3cXQ4YMEY6OjtK9pkeOHBFeXl7i9OnTRju+uP9zM3jw4CKTA23fvl2sX79ehIWFidzcXOl92L59u2jRooW4dOmSonWcPHlSNG/eXGzevLnIaw/+DOuHDnbv3l1ERkYKjUYjDh06pGgtD3v4wunAgQNi48aNRdaPGTNGdOjQQdFe8MzMTJGammrwc/DHH3+IvXv3ik8++UR07drV4HibNm0SzZs3lwLaWK5duyaOHDkijh07Jl0k3rlzR/j5+Yl27doV+QNl1apVon379kb5nUNUWZj1/2LWlw3z/h/MenmmmPfMetPHjgCVnT17Vri6ugqNRiNmzpwprl+/Lr2Wl5cn5s+fLzQajZgzZ444dOiQuHnzppgxY4Zo2rSpNFyuok6cOCFq164tJk+eLD777DMRHR0tqlWrJg4fPmzQTv9L9s8//xQajcbgvkIl6GcMnjVrlrh+/bpo1aqVWLhwodDpdEUuUnbu3CmcnJzEV199pWgND0tNTRVNmzYVGo1G+Pr6SoEm9wv8zz//FLNnzxY1a9YUx44dU6yOs2fPirfeektMmzZNrFmzRmRlZQlxPxSjo6PF5MmTDS4if/rpJ9GsWTNx4cIFxWp42NGjR4Wrq6sYNmyY9InVg+9LfHy8eOyxxwy2mTRpkujYsaPiMx3PmDFDaDQa4erqWuwFwoNB/O2334patWqJmjVrGgwpVNKpU6fEiBEjRE5OjhDFfAr44Puk/9keOnSomDBhgmIXB8eOHRMdOnQQvr6+olWrVmLKlCkGr+/YsUMEBQUZXGDPnDlTdO7cWfz999+K1FCco0ePCh8fH9GqVSthbW0tevXqJd2rePz4cdG0aVMREBAgUlJSpCGwo0aNEl27dhV37twxWl1ExsSs/xezvmTMe3nM+uKZYt4z66sGdgSoKDc3V7zyyiti2LBhIjY2Vmg0GjFt2jSD0NdqtWLdunXC3d1d1K9fX7Ro0UJ4enqKgwcPKlLDzZs3Rbdu3Yo84iQsLEyMHz9eiId6WbVarcjJyRHjx49XdDjRkSNHhJ2dnXS/klarFS+++KIIDg6W2jx8gdCjRw/x5JNPCq1Wa5Shi3fu3BFz5swRvXv3FomJiaJTp06iUaNGshcIKSkpYuDAgaJhw4ZFLqwq4tixY8LV1VX07NlTvPjii8LOzk48+eSTYtu2bVKbh3tPJ0+eLDp06CBdQCgtMzNTPP7442LcuHHSutzcXIMhcJcvXxaurq6iR48eYsWKFWLUqFHC1dVVHDlyRPF6tmzZIiZNmiQWLFggbG1txaZNm6TX9D8bWq1WaLVaMWnSJOHk5KT4xZveuXPnRP369YW9vb3o06eP7AWCXmZmppgzZ46oV6+eYjPmnjhxQtSqVUtMmzZN7Nq1S7z++uvC39/f4JOZ3377Tfj6+opXX31VzJ8/X4wfP17UrFnTKN8fvYyMDNGoUSMxefJkcf78ebF9+3YRFRUlGjRoIGJiYoQQQly4cEG0b99eNGzYUPj7+4sePXoIJycno13IERkbs/5fzPqSMe9LxqwvyhTznllfdbAjQEW3b98WsbGxYuPGjULcH6ZT3AWCuN9b/dNPP4nvv/9e0We0pqeni3bt2kn3UekDLyoqSgwaNEh2O6Xvbdq/f7947bXXDGo4ffq0cHFxER988EGx23z11Vfi3LlzitbxsI0bN0pBc+HCBfHkk0/KXiBkZ2eLnTt3KjqMMysrS3To0EHMnDlTWnfq1ClhY2Mj2rZtK9auXWvQfvfu3WLChAlG/2V68eJFERoaKm7cuCG0Wq3o06ePeOKJJ4Sjo6P4z3/+Iz2ndufOneLxxx8Xbdu2Fc8884zRAnnPnj2idevW4s6dO+I///mPsLe3Fzt37hRTp04VsbGxUrtjx46J+vXriwMHDhiljlu3bolBgwaJF198USxbtky0b99ePP/887IXCD/88IMYNmyYcHd3V2zYon4yngdnsj5//rzo0qWLOHDggMHPxZo1a0S3bt1EmzZtRO/evaVJn4zlwIEDonXr1gYXKBcvXhQLFiwQrq6uYunSpQa1LViwQPz3v/81mEiMqKph1v+LWS+Pef9ozHpDppr3zPqqgx0BKnt40pONGzcKjUYjpk6dKg0dvHfvnlHvj3uwt1/f0zxnzhwxePBgg3YPPoLE2HQ6ncjKyhKRkZGib9++orCwUNVHCOlrOn/+vPRpgf4i7c6dO+LQoUNGGcp0/fp18fjjj4sff/xR6HQ6kZeXJwoLC0WnTp1EQECA6Nq1q8FEUjt27KiUP+iOHDkiPD09xalTp8QLL7wgIiIixDfffCNWrFghunTpIrp37y7VoNPpRE5OjuL3UOp/HvSPu2rXrp0UwjNnzhTW1tbS858fpPRtCQ+LiYkR69evF4WFhWL9+vVFLhAevKA8duyYiI2NlZ6VrYSLFy+K+fPnG1yEvf7666JGjRqiUaNGolmzZgaT8dy4cUPcuXNHeg60MemHBO/YscNgfXp6unjttddE69ati7xGZA6Y9cVj1v+LeV88Zr08U817Zn3VwY4AE/Fg+P3vf/+TPi24cuWKmDx5snjhhRdEbm6uUQPywV9as2fPFhEREdLX//3vf8XSpUuLTHpibF988YXQaDTil19+qZTjyc2m/OB7c+7cOekC4c8//xRjx44VQUFBit5npe9NPnfunHBwcBD/+9//pNcuXrwo2rVrJ/73v/8JV1dXMXfuXINtK+MPurS0NNG6dWvxwQcfiL59+4oTJ05Ir+3Zs0f4+fkVmfhKKdeuXSv230HHjh2l3v/BgwcLJycnYWtrW+R5tcb6N1Tcv438/HzxySefFLlAuH37tvQzpvSjlQoLCw3uP46LixM1a9YUmzZtEidOnBAHDhwQXl5elfaM8Af99ddfomvXrmLs2LFFJig6ffq0CAwMFIsXLxbioYs/InPBrC+epWa9YN7LYtY/mqnmPbO+6mBHgAl58BnCGzduFNWqVRPNmzcXNjY2it+HVlIN4v7FQY8ePYQQQrz22mtCo9Goct9Ofn6+6Natmxg0aJDRZ+Ut7WzK4v7Qq7CwMKHRaISjo6PYv3+/YnUcPnxYPPPMM9InSP/3f/8nbG1txezZs8V7770nXFxcxMiRI4W4/wzjDh06iNzcXKNeuJ09e1Z8+eWXIj8/X1o3ZcoUodFohK2trUhOTjZo//zzz4u+ffsqXsexY8dE8+bNRWxsrPRvRX/evXr1El9//bWYMGGC8PDwECkpKWL69OlFHpmjNP3Q2QffG/HAJ2737t0T69atky4Qbty4IUaNGiW6deum2PdMvx/9fx8M+z179hhcXBcWForw8HBpxmljys7OFunp6eLmzZvSupUrVwpnZ2fx9ttvF3ms1IABA0TPnj35/GAya8z6oiwx6wXzXhazXp4p5j2zvuqyAZkMjUYDABBCoF+/fli1ahVSUlJw6NAhtGnTplJqEEJAo9HAxsYGXl5eWLJkCRYtWoQDBw7A39+/Ump4kK2tLbp06YKYmBhkZ2fDwcHBKMc5efIkOnXqhCFDhiAoKAgHDx5EVFQUWrVqhYCAgCLtGzRoAHd3d9SqVQt79+6Fn5+fInUcOXIEHTp0wPjx4+Ho6AgAGD9+PGrUqIG1a9eiXr16mDJlCl577TUAwM2bNyGEkNoaw9GjRxEeHo7IyEiEhITAw8MDGo0GCxcuRHZ2NlavXo3ExET4+vrCxcUFAFC9enU0b95c0TpOnz6NTp06ISoqCs888wysrKwAADY2//wa69ixI1566SXUq1cP27Ztg7+/P/z9/WFjY6N4LXonT57E3LlzcffuXeTl5WH69Ol44okn4OzsjGrVqkGr1cLGxgYDBw6ERqNBXFwcWrRogTt37iAxMVGqvSJOnTqFpUuXIjc3F7a2toiOjjb4me3cubNBeyEEXFxc0KxZM+lr/e8eJR07dgyjR49Geno6ateuDT8/P6xZswYjR47EzZs3MXv2bBQUFGDAgAFo0qSJVEuTJk2MUg+RqWDWF2VpWQ/mvSxmvTxTzHtmfRWndk8EFVVYWCgmT54sNBqNUWfwLsnChQuFRqMRLi4uRXp/K4u+dz4zM1MEBgYqPjGPXnlmU37//feFtbW1opO+HDlyRDg6OkqTvuiPqe9tvn37dpFZgUeOHCmGDx8uCgoKjDKs6uLFi6Jhw4YGE9E86Pr162LgwIHCxsZGjBs3Trz99tti8uTJwtXVVdFZcbVarRg5cqSIioqSvv7555/F2rVrxZkzZ8Tt27fFvn37xEsvvVRpn6idOnVKuLq6inHjxol33nlHjBo1Smg0GhEdHW1wr6K+xzs3N1d07NhR1KpVS7FJlPSzBY8aNUpER0eLF154Qdja2orly5cXeS633muvvSa8vLyMOvnWhQsXRN26dcWUKVPEF198IRYtWiR8fX2Fn5+fOH/+vBBCiMWLFwtvb28RFhYmBg8eLAYPHiycnZ2NNqEkkalh1v/D0rJeMO9lMevlmWLeM+urPnYEmKDCwkLx8ccfV9ovueIkJycLjUZjcC+YWnQ6XZGJlpRUntmUv/nmG0UfqfTXX38Jd3d36V7NwsJCMWnSJNGzZ0/RvHlz8c4774jTp09L7f/44w8xffp04ezsbDB5kNK+/fZb0bNnTyHuX6DMnj1bREZGiuHDh4v169dL7d5++20REREhAgICxDPPPKP40NLCwkLRsWNHsW7dOiGEEJ07dxaBgYHCxcVFNG7cWIwZM6bI0DNjKiwsFFFRUWLYsGEG67t37y5q1Kghxo8fbzDp171798ScOXOEvb29Yu9Nfn6+ePHFF8WYMWOkdXfu3BEBAQHC2dlZxMTEGNw/+ttvv4nRo0eL2rVrK35R+7AvvvhCBAUFGdx/e/78eRESEiJ8fX2lexq/++478eabb4pu3bqJMWPG8MKALAqz3pAlZL1g3peIWV88U817Zn3VZ6X2iAQqytraGq+88kqxw9QqS1BQEG7duqXoMLjy0mg0Rh0K5+bmhk8//RRPPvkkAECr1QIA6tevLw1J07t16xYA4Nlnn4Wvr6+idYSGhuLmzZv4+uuv8f/t3XlUVOf5B/DvHWRAkAEFJCioKFJciIKSo8Zjo7jgFkVMcAMVrVtTDAoGl0jsYoyx1qTaFquVuIFJJefEYjSaILE2FUTBYKKgsqhgMRiMILLN8/vjJ7cQ0Ng4IxPm+znHc+Ted+Y+jMj3nve+97kTJkzAl19+iV69emHkyJH44x//iLfffhuFhYUoKyvDnj17kJKSgtTUVPTp08egdTR09uxZ3L59GwAwbtw4nDp1Cl27dkVhYSE2bdqElStXAgBWrFiBgwcP4vTp03j//fcNvrTUwsICHTt2RFlZGdauXQsrKyscOHAA33zzDSIiInD27Fls3boVDyY3DXrshykoKED37t0BAOXl5QCAvn37YvDgwXjvvfdw+PBh4MESuDZt2sDGxganT5822GdTW1uL/Px89ffE/fv3YW1tDX9/f/j7++P1119HSkoKAODOnTu4cOEC7t27h9TUVPj6+hqkhocpLi5Gfn4+dDodAECv16N79+748MMPYWNjg4kTJwIPfqZWrVqFI0eOYOvWrejbt69R6yIyJcz6xswl68G8fyhmffNMNe+Z9a1AS89EEJmSluymXFRUJGFhYdK2bVsZNWqUfPPNN+q+ffv2iYODgyQnJ6tjH7YUzJCOHTsmI0aMkB07dsioUaPUxyiVlZXJunXrZNCgQepjgwzd9KWoqKjRVaqFCxdK//79ZebMmRIXF9dobFRUlPTq1UtdVvk0hIaGiq+vr/p9FxUViaOjo6SlpcnatWvFxcXF6Fcuxo8fL0FBQWoN169fF2dnZ0lLS5Pw8HDx8fFRrxJUVFQY9WqbNFjeWlBQIJ07d5Y333xT3Vdf46lTp8TT01PtjM1OwUT0tLX0kxOY9//FrH88ppT3zPrWgysCiBrQaDSNZpnrrxKsXbsWq1evRkBAgMGavnyfq6sr3nzzTbz66quIiYmBo6OjWsuMGTPg5OSkzvi6urqiY8eOBq+h/gpJPTc3N1y8eBGbN2+GiKBz584AAHt7e8ydOxfnz59HdnY20OCzMoQbN27Ax8cHa9asQVpaGgBg8+bN0Ov12L9/PwoKChqNHz16NLRaLSoqKgxWww+ZM2cOrKys0LlzZ8yePRs9e/bElClT4O/vj+DgYGi1WpSUlBj0mIWFhbh48aL6dXBwMG7evIkBAwYgJiYG3t7emDx5Mvz9/REUFITKykr1M7GxsTHa1baqqirgwVULAHBwcMBLL72Ew4cPIyEhAWjw89G3b19oNBpcvXoVaNA4jYjoaWnJrAfzXsWsfzhTzHtmfevDiQCi76kP45boptypUyfExMRg6NChwINfnCKC0tJSODs7G3WJV05ODrZs2YLi4mJ1m7e3N7Zv346cnBycP38eX3zxhbrPxcUFgwYNQocOHQxeS25uLu7cuYM7d+5g27ZtSEtLg42NDbZv3w5vb2/s2bMHR48eVUPv6NGjcHBwgFarNXgtAJCXl4c//OEPWL58ORITE4EH3Xn/9Kc/ITQ0FI6OjtiyZQu2b98OACgrK0Pbtm1hbW1tsBrOnTuHgQMHqidiABAaGoqYmBj069cP165dw/r169Ua9Ho9LC0tDTpB05wLFy5g+vTpGDVqFCZOnIjU1FTodDpERkZCp9MhLi4Ou3btUsfrdDp0794dVlZWQIP/b0RET1NLZj2Y9wCz/qFMMe+Z9a1USy9JIDJVptBNud7atWulZ8+ekp+fb5T3z83NlQ4dOoiiKLJy5Uq1wUu9hIQE0Wg0MmbMGElISJDc3FyJiYmRTp06SWFhocHrKS0tlRdffFHi4uLEz89PZs6cqXYlzsrKkhdeeEHc3d2lX79+MnHiRHFwcDDas6/Pnz8vbm5uEhAQIEOGDBGNRtNoGZw0s0wyMjJShgwZ0qTr84+VmZkptra2EhkZ+dAx9c84rrdkyRIZOXJkowZChpaTkyM6nU4WLFgg0dHRMnXqVFEURdasWSMVFRWSl5cnL7/8svj4+MisWbNkz549smjRItHpdAZvwEVE9GOYUtaLmeU9s74pU8x7Zn3rxYkAoocwhW7KCQkJsmDBAmnfvr3ROr+Wl5dLeHi4zJkzR7Zt2yaKokh0dHSTk4Pjx4/L4MGDxcXFRby9vcXLy8soNdXW1kpJSYl4eXnJ9evXJSkpSfz9/WX+/PkyZMgQCQ0NFRGRv/zlL7J27VrZsGGDXLp0yeB1yINH43h6esqKFSvUE4CdO3eKi4uL5OTkNLnn7bPPPpOIiAixs7Mz2MnK119/LTY2NrJq1SqRB12JT5w4IR9++KGkpqY2GX/s2DGJiIgQe3t7oz+SbM2aNTJ69OhG2959913p0KGDREVFSXV1tRQVFcmOHTvEz89P/P39Zfjw4UY7kSMi+l+ZQtaLGeY9s74pU817Zn3rZbwboIh+4uq7KRuzi/EP6d27N/bu3YuTJ08arVuwRqPBgAED4OjoiJCQEDg5OWHatGnAg+7ATk5OAICAgAD0798ft2/fRkVFBdzc3NR9hq7H2dkZ/v7+yM7ORlBQEKysrDB79mzcv38fc+fOBQAsXLjQ4MduSK/XIzExEZ6enli1apW65M7f3x+WlpbQ6/VN7nmrrq7GtWvXcOrUKfj4+DxxDTU1NVi1ahVsbW3x4osvAgCmTJmCwsJC3Lx5E7dv38aCBQsQGxsLZ2dn4EG369OnT+Pzzz/Hs88++8Q1PEplZaX699raWrRp0wa/+tWvoNVqsWzZMnh4eGDJkiWYN28e5s2bh/v37wOAwZdREhH9WKaQ9TDDvGfWN2bKec+sb8VaeiaCiB6tqqrK6Mf4fnfZxMREURRFoqKi1G7GNTU1kpeXZ/Ra6oWFhUlMTIyIiMybN0/at28vvXv3lvDwcPn3v/+tjjNmJ9rU1FS1hnp1dXXSrVs3SUlJafY1hl6al5GRIWPGjJHRo0eLt7e3BAYGytmzZ6WgoECSk5NFq9XKypUrG73mu+++M2gND/POO++InZ2d3LhxQ+R7P6vr1q0TW1vbRs9YJiKihzPHvGfW/5ep5j2zvvXiRAARqWpra9WwTUhIUJcN3rhxQyIjI2XKlClSXl5u1ECuf+/4+HiJjY2VxYsXi6urq1y9elWSkpKkR48esmjRoib3yBlKbW3tI+uqq6sTDw8P+eSTT9R9x48fl5s3bxqshtLSUvnqq6/k4sWLIg+WCz7//PMyatSoJidnW7duFScnJ7l27dpDazeWqqoqGTZsmAwaNEg9gaysrBQRkeLiYnF3d5ekpKSnWhMREf2wls57Zv3/+ynkPbO+9eKtAUSksrCwgIhAr9dj2rRpUBQFoaGh+Oijj3DlyhWkp6cbfflk/RI8Dw8PzJ07Fy4uLvjHP/4BDw8PeHh4QFEU9OvXT+1Ea0g5OTk4dOgQZsyYAVdXV+BBp1tFUaAoCmpra1FVVQULCwvodDoAwKpVq7BhwwZcv37dIDVkZ2cjLCwMtbW1uHjxIlavXo3Y2Fjs3LkT2dnZ6iOd6uvCg8dLOTk5wcLCwiA1NCcnJwc7d+5ESUkJ+vfvj3HjxqFnz56IjY3FypUrERISgvfff1/tKm1lZQVbW1tYWloarSYiIvpxWjrvzT3rYaJ5z6w3My09E0FEpkev16uz4iNGjJAOHTrI+fPnn2oN1dXVsnPnTrUBjjFXIchjdFKWB1cIKisrpUePHnLmzBn59a9/Lba2tpKWlmaQGi5cuCCOjo4SFRUlFy5ckE2bNomiKGr36O93LBYRWbp0qQQHBxv16QAXLlwQe3t7CQwMlODgYLG3t5cRI0bI7t27RUTk0KFD8txzz4mHh4ccPXpUPvvsM1mzZo0888wzXC5IRGTCWjrvzTHrxUTznllvfjgRQETNqq2tlcjISFEUxejd5x+muSA0hsftpFzP19dX/P39RavVGuxxU7du3ZJhw4bJ0qVL1W16vV4CAwPl1KlT6n2C9S5fviyvv/66ODg4SHZ2tkFqaE5VVZXMmjVLfvGLX6jbcnNzJSQkRPz9/SUuLk5ERL766iuZPn26ODs7i5eXl/Tp00cyMjKMVhcRERlGS+e9OWW9mGjeM+vNE28NIKKH6tOnD86ePWv07vMPU9+992kc53E6KdfV1eHOnTu4evUqysvLce7cOYN1DFYUBYGBgZg6daq67be//S2OHj2KmzdvorS0FL1798brr7+OZ555BsuXL0dWVhZSUlKM1mEaALRaLf7zn//Aw8MDeLBE0dPTExs3bkRsbCx2794Nd3d3jB07Fvv378fFixeh0+mg1WqN8lQJIiIyvJbMe3PKepho3jPrzZMiItLSRRCRaWp4X1prV1FR0eh+yAMHDmD69OlYvnw5YmJi4OjoiNraWpSVlSEjIwNubm4GD+S7d+/Czs4OAJCYmIgZM2YgMTERI0eORHZ2NqKiojBhwgSsXLkS//znP+Hh4YFu3boZtIaG6urqoNfrsXDhQty9exd79+6FVquFiECj0eDq1auYNWsW3N3dceDAAcDMfmaIiFoLc/ndbQpZDxPLe2a9+eJEABFRA3V1ddBoNFAURQ3nqKgovPrqq9i0aRPy8/Oxd+9e2NjYGLWOgoIClJaWws/PT902YcIEaDQafPTRR0Y9dl1dXaNGRKmpqQgICMDmzZsRERHRaExqaipGjBiB8+fPG3VlAhERkaGYStajBfOeWU+8NYCIqIFHdVK+fPkyzpw581RODLp27YquXbsCAPR6Paqrq9GuXTujL9tsrpvyz3/+c7z11luIjIyEjY0N5s+fr5482NnZ4Wc/+5nRnyZBRERkKKaS9WihvGfWEzgRQETUVP1yNxFBSEgItm/fjszMTIPfJ/i4NBoN1q9fjy+++AK/+c1vjHacy5cvY/Dgwfj2229RWlqKZcuWqff+LV68GBUVFViwYAEKCgowZcoUdO3aFR988AFqamp4ckBERD8pppb1eEp5z6ynerw1gIjoIerq6hAdHY0tW7YgMzOzRZooffDBB0hNTUViYiKOHTsGX19foxynoqICERER0Ov18Pf3xyuvvIKoqChER0fD2dkZeHClYu/evXjttddgYWEBOzs7fPfddzh06FCjJY1EREQ/FaaQ9XhKec+sp4a4IoCI6BFa+skJvXv3xt///necPHkSvXr1MtpxHtVNuf4EQaPRICwsDMOGDUNhYSHu3bsHHx8fdO7c2Wh1ERERGVtLZz2eUt4z66khrgggInoEU+iMW1NTA0tLS6Mf51HdlF977TU4OTmhtrYWRUVF6NKli9HrISIiehpMIevxlPKeWU/1uCKAiOgRTOHE4GlMAgBQTwzquymHhIRARDBjxgwoiqJ2Uy4oKMDu3bthY2NjEp8PERHRkzCVLHsaec+sp3pcEUBERE2IiPoM4QMHDiA0NBTdu3fHlStXkJ6ejv79+7d0iURERPQEmPXmjRMBRETUrPp4UBQFAQEByMzMxIkTJ1qsmzIREREZFrPefPHWACIiapaiKGo35ZSUFGRmZvLEgIiIqBVh1psvTUsXQEREps0UuikTERGR8TDrzQ9vDSAiokcylW7KREREZBzMevPDiQAiIiIiIiIiM8JbA4iIiIiIiIjMCCcCiIiIiIiIiMwIJwKIiIiIiIiIzAgnAoiIiIiIiIjMCCcCiIiIiIiIiMwIJwKIiIiIiIiIzAgnAojIKObMmYPJkye3dBlERERkJMx6op8uTgQQPYE5c+ZAURQsWrSoyb5f/vKXUBQFc+bMMWoN8fHxcHBwUL9+44030L9/f6Mes6H8/HwoioLMzMxG29955x3Ex8c/tTqIiIiMgVnPrCdqjTgRQPSE3N3dkZiYiMrKSnXb/fv3sX//fnTp0qVFa3sS1dXVT/R6e3v7RictREREP1XM+uYx64l+ujgRQPSE/Pz84O7ujqSkJHVbUlISunTpAl9f30Zjjxw5gqFDh8LBwQGOjo6YMGECrly5ou7fvXs32rVrh9zcXHXbkiVL4O3tjXv37v1gLfHx8Vi3bh2ysrKgKAoURVFn6svKyjB//nw4OztDp9NhxIgRyMrKUl9bf3Vhx44d8PDwgLW19WPV7OHhAQDw9fWFoih44YUXgGaWC1ZVVSEiIgIdO3aEtbU1hg4divT0dHX/iRMnoCgKPv30UwwcOBA2NjYYMmQILl26pI7JysrC8OHDYWdnB51OhwEDBuDMmTOP8a9ERET04zHrmfVErQ0nAogMIDw8HLt27VK//tvf/oa5c+c2GVdRUYFly5bhzJkz+PTTT6HRaBAUFAS9Xg8ACAsLw7hx4zBz5kzU1tYiOTkZO3bswL59+2BjY/ODdYSEhGD58uXo06cPiouLUVxcjJCQEADASy+9hJKSEnz88cfIyMiAn58fAgICcPv2bfX1ly9fxsGDB5GUlKQu//uhmtPS0gAAx48fR3FxcaOTpIZWrFiBgwcP4r333sPZs2fh6emJMWPGNDo+AKxevRq///3vcebMGbRp0wbh4eHqvpkzZ8LNzQ3p6enIyMhATEwMLC0tf/BzISIielLMemY9UasiRPSjzZ49WyZNmiQlJSViZWUl+fn5kp+fL9bW1nLr1i2ZNGmSzJ49+6Gvv3XrlgCQL7/8Ut12+/ZtcXNzk8WLF4uLi4v87ne/e2QNu3btEnt7e/Xr2NhY6devX6MxJ0+eFJ1OJ/fv32+0vUePHhIXF6e+ztLSUkpKSh55vO/XnJeXJwDk3LlzzX42IiLl5eViaWkp+/btU/dXV1dLp06dZOPGjSIikpKSIgDk+PHj6pjk5GQBIJWVlSIiYmdnJ/Hx8Y+sj4iIyJCY9cx6otaIKwKIDMDZ2Rnjx49HfHw8du3ahfHjx8PJyanJuNzcXEyfPh3du3eHTqdDt27dAACFhYXqmPbt22Pnzp3485//jB49eiAmJuaJ68vKykJ5eTkcHR3Rrl079U9eXl6jpX9du3aFs7Pz/1zzD7ly5Qpqamrw/PPPq9ssLS3x3HPP4euvv2409tlnn1X/7urqCgAoKSkBACxbtgzz58/HyJEjsWHDhka1ExERGROz/tGY9UQ/LW1augCi1iI8PByvvPIKAGDbtm3Njpk4cSK6du2Kv/71r+jUqRP0ej369u3bpFnP559/DgsLCxQXF6OiogJ2dnZPVFt5eTlcXV1x4sSJJvsaNvmxtbX90TUbSsPlf4qiAIC6NPGNN97AjBkzkJycjI8//hixsbFITExEUFCQUWohIiJqiFlvGMx6opbHFQFEBhIYGIjq6mrU1NRgzJgxTfaXlpbi0qVLWLNmDQICAtCrVy98++23Tcb961//wltvvYVDhw6hXbt26gnH49Jqtairq2u0zc/PDzdv3kSbNm3g6enZ6E9zVzP+l5q1Wi0ANDlmQz169IBWq8WpU6fUbTU1NUhPT0fv3r3/p+/Py8sLkZGR+OSTTzBlypRG92sSEREZE7OeWU/UWnBFAJGBWFhYqEvfLCwsmuxv3749HB0dsX37dri6uqKwsLDJUsC7d+8iNDQUERERGDt2LNzc3ODv74+JEydi6tSpj1VHt27dkJeXh8zMTLi5ucHOzg4jR47E4MGDMXnyZGzcuBFeXl4oKipCcnIygoKCMHDgwGbf63Fq7tixI9q2bYsjR47Azc0N1tbWsLe3bzTG1tYWixcvRnR0NDp06IAuXbpg48aNuHfvHubNm/dY31dlZSWio6MxdepUeHh44Pr160hPT0dwcPBjvZ6IiOhJMeuZ9UStBVcEEBmQTqeDTqdrdp9Go0FiYiIyMjLQt29fREZG4u233240ZunSpbC1tcX69esBAD4+Pli/fj0WLlyIGzduPFYNwcHBCAwMxPDhw+Hs7IyEhAQoioLDhw9j2LBhmDt3Lry8vDBt2jQUFBTAxcXloe/1ODW3adMG7777LuLi4tCpUydMmjSp2ffasGEDgoODERoaCj8/P1y+fBlHjx5F+/btH+v7srCwQGlpKcLCwuDl5YWXX34ZY8eOxbp16x7r9URERIbArGfWE7UGiohISxdBRERERERERE8HVwQQERERERERmRFOBBARERERERGZEU4EEBEREREREZkRTgQQERERERERmRFOBBARERERERGZEU4EEBEREREREZkRTgQQERERERERmRFOBBARERERERGZEU4EEBEREREREZkRTgQQERERERERmRFOBBARERERERGZkf8DnVBMdp18YvwAAAAASUVORK5CYII="/>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=adc1a742">
|
||
<div class="jp-Cell-inputWrapper" tabindex="0">
|
||
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
|
||
</div>
|
||
<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt">
|
||
</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown">
|
||
<div class="alert alert-block alert-success">
|
||
In this simple example (well converging function) the gradient descent converges for all learning rates given enough iterations. The Error on the paramters approaches 10^-3 and stays at this plateau indicating the parameters have converged
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=7e7e7de6">
|
||
<div class="jp-Cell-inputWrapper" tabindex="0">
|
||
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
|
||
</div>
|
||
<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt">
|
||
</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown">
|
||
<h3 id="4b)">4b)<a class="anchor-link" href="#4b)">¶</a></h3><p>Try to add a stopping parameter as function of the number iterations. How would you define a stopping criterion?</p>
|
||
<div class="alert alert-block alert-success">
|
||
We define the stopping criterion via the decrease in the cost function. If the decrease gets too small we stop. This will be implemented using a custom stopping_criterion function so it can easily be replaced.
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs" id="cell-id=e214e0be">
|
||
<div class="jp-Cell-inputWrapper" tabindex="0">
|
||
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
|
||
</div>
|
||
<div class="jp-InputArea jp-Cell-inputArea">
|
||
<div class="jp-InputPrompt jp-InputArea-prompt">In [14]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="cm-editor cm-s-jupyter">
|
||
<div class="highlight hl-ipython3"><pre><span></span><span class="k">def</span><span class="w"> </span><span class="nf">gradient_descent</span><span class="p">(</span><span class="n">X</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">cost_func</span><span class="p">,</span> <span class="n">grad_cost_func</span><span class="p">,</span> <span class="n">eta</span><span class="o">=</span><span class="mf">0.1</span><span class="p">,</span> <span class="n">num_iters</span><span class="o">=</span><span class="mi">1000</span><span class="p">,</span> <span class="n">stopping_criterion</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
|
||
<span class="c1"># Initialize weights</span>
|
||
<span class="n">theta</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">zeros</span><span class="p">(</span><span class="n">X</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span>
|
||
<span class="c1"># Store cost history</span>
|
||
<span class="n">cost_history</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">zeros</span><span class="p">(</span><span class="n">num_iters</span><span class="p">)</span>
|
||
<span class="k">for</span> <span class="n">t</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">num_iters</span><span class="p">):</span>
|
||
<span class="c1"># Compute cost</span>
|
||
<span class="n">cost_history</span><span class="p">[</span><span class="n">t</span><span class="p">]</span> <span class="o">=</span> <span class="n">cost_func</span><span class="p">(</span><span class="n">X</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">theta</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
|
||
<span class="c1"># Compute gradient</span>
|
||
<span class="n">grad</span> <span class="o">=</span> <span class="n">grad_cost_func</span><span class="p">(</span><span class="n">X</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">theta</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
|
||
<span class="c1"># Update weights</span>
|
||
<span class="n">theta</span> <span class="o">-=</span> <span class="n">eta</span> <span class="o">*</span> <span class="n">grad</span>
|
||
<span class="k">if</span> <span class="n">stopping_criterion</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="ow">and</span> <span class="n">stopping_criterion</span><span class="p">(</span><span class="n">cost_history</span><span class="p">[:</span><span class="n">t</span><span class="o">+</span><span class="mi">1</span><span class="p">]):</span>
|
||
<span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Converged at iteration </span><span class="si">{</span><span class="n">t</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
||
<span class="k">break</span>
|
||
<span class="k">return</span> <span class="n">theta</span><span class="p">,</span> <span class="n">cost_history</span>
|
||
|
||
<span class="k">def</span><span class="w"> </span><span class="nf">stopping_criterion</span><span class="p">(</span><span class="n">cost_history</span><span class="p">,</span> <span class="n">tol</span><span class="o">=</span><span class="mf">1e-5</span><span class="p">):</span>
|
||
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">cost_history</span><span class="p">)</span> <span class="o"><</span> <span class="mi">2</span><span class="p">:</span>
|
||
<span class="k">return</span> <span class="kc">False</span>
|
||
<span class="k">return</span> <span class="n">np</span><span class="o">.</span><span class="n">abs</span><span class="p">(</span><span class="n">cost_history</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">-</span> <span class="n">cost_history</span><span class="p">[</span><span class="o">-</span><span class="mi">2</span><span class="p">])</span> <span class="o"><</span> <span class="n">tol</span>
|
||
</pre></div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=75542708">
|
||
<div class="jp-Cell-inputWrapper" tabindex="0">
|
||
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
|
||
</div>
|
||
<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt">
|
||
</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown">
|
||
<h2 id="Exercise-5,-Ridge-regression-and-a-new-Synthetic-Dataset">Exercise 5, Ridge regression and a new Synthetic Dataset<a class="anchor-link" href="#Exercise-5,-Ridge-regression-and-a-new-Synthetic-Dataset">¶</a></h2><p>We create a synthetic linear regression dataset with a sparse
|
||
underlying relationship. This means we have many features but only a
|
||
few of them actually contribute to the target. In our example, we’ll
|
||
use 10 features with only 3 non-zero weights in the true model. This
|
||
way, the target is generated as a linear combination of a few features
|
||
(with known coefficients) plus some random noise. The steps we include are:</p>
|
||
<p>Decide on the number of samples and features (e.g. 100 samples, 10 features).
|
||
Define the <strong>true</strong> coefficient vector with mostly zeros (for sparsity). For example, we set $\hat{\boldsymbol{\theta}} = [5.0, -3.0, 0.0, 0.0, 0.0, 0.0, 2.0, 0.0, 0.0, 0.0]$, meaning only features 0, 1, and 6 have a real effect on y.</p>
|
||
<p>Then we sample feature values for $\boldsymbol{X}$ randomly (e.g. from a normal distribution). We use a normal distribution so features are roughly centered around 0.
|
||
Then we compute the target values $y$ using the linear combination $\boldsymbol{X}\hat{\boldsymbol{\theta}}$ and add some noise (to simulate measurement error or unexplained variance).</p>
|
||
<p>Below is the code to generate the dataset:</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs" id="cell-id=06077986">
|
||
<div class="jp-Cell-inputWrapper" tabindex="0">
|
||
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
|
||
</div>
|
||
<div class="jp-InputArea jp-Cell-inputArea">
|
||
<div class="jp-InputPrompt jp-InputArea-prompt">In [15]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="cm-editor cm-s-jupyter">
|
||
<div class="highlight hl-ipython3"><pre><span></span><span class="kn">import</span><span class="w"> </span><span class="nn">numpy</span><span class="w"> </span><span class="k">as</span><span class="w"> </span><span class="nn">np</span>
|
||
|
||
<span class="c1"># Set random seed for reproducibility</span>
|
||
<span class="n">np</span><span class="o">.</span><span class="n">random</span><span class="o">.</span><span class="n">seed</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
|
||
|
||
<span class="c1"># Define dataset size</span>
|
||
<span class="n">n_samples</span> <span class="o">=</span> <span class="mi">100</span>
|
||
<span class="n">n_features</span> <span class="o">=</span> <span class="mi">10</span>
|
||
|
||
<span class="c1"># Define true coefficients (sparse linear relationship)</span>
|
||
<span class="n">theta_true</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">([</span><span class="mf">5.0</span><span class="p">,</span> <span class="o">-</span><span class="mf">3.0</span><span class="p">,</span> <span class="mf">0.0</span><span class="p">,</span> <span class="mf">0.0</span><span class="p">,</span> <span class="mf">0.0</span><span class="p">,</span> <span class="mf">0.0</span><span class="p">,</span> <span class="mf">2.0</span><span class="p">,</span> <span class="mf">0.0</span><span class="p">,</span> <span class="mf">0.0</span><span class="p">,</span> <span class="mf">0.0</span><span class="p">])</span>
|
||
|
||
<span class="c1"># Generate feature matrix X (n_samples x n_features) with random values</span>
|
||
<span class="n">X</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">random</span><span class="o">.</span><span class="n">randn</span><span class="p">(</span><span class="n">n_samples</span><span class="p">,</span> <span class="n">n_features</span><span class="p">)</span> <span class="c1"># standard normal distribution</span>
|
||
|
||
<span class="c1"># Generate target values y with a linear combination of X and theta_true, plus noise</span>
|
||
<span class="n">noise</span> <span class="o">=</span> <span class="mf">0.5</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">random</span><span class="o">.</span><span class="n">randn</span><span class="p">(</span><span class="n">n_samples</span><span class="p">)</span> <span class="c1"># Gaussian noise</span>
|
||
<span class="n">y</span> <span class="o">=</span> <span class="n">X</span><span class="o">.</span><span class="n">dot</span><span class="p">(</span><span class="n">theta_true</span><span class="p">)</span> <span class="o">+</span> <span class="n">noise</span>
|
||
</pre></div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=86d46505">
|
||
<div class="jp-Cell-inputWrapper" tabindex="0">
|
||
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
|
||
</div>
|
||
<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt">
|
||
</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown">
|
||
<p>This code produces a dataset where only features 0, 1, and 6
|
||
significantly influence $\boldsymbol{y}$. The rest of the features have zero true
|
||
coefficient. For example, feature 0 has
|
||
a true weight of 5.0, feature 1 has -3.0, and feature 6 has 2.0, so
|
||
the expected relationship is:</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=f1d2f848">
|
||
<div class="jp-Cell-inputWrapper" tabindex="0">
|
||
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
|
||
</div>
|
||
<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt">
|
||
</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown">
|
||
<p>$$
|
||
y \approx 5 \times x_0 \;-\; 3 \times x_1 \;+\; 2 \times x_6 \;+\; \text{noise}.
|
||
$$</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=f1c91e84">
|
||
<div class="jp-Cell-inputWrapper" tabindex="0">
|
||
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
|
||
</div>
|
||
<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt">
|
||
</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown">
|
||
<p>You can remove the noise if you wish to.</p>
|
||
<p>Try to fit the above data set using OLS and Ridge regression with the analytical expressions and your own gradient descent codes.</p>
|
||
<p>If everything worked correctly, the learned coefficients should be
|
||
close to the true values [5.0, -3.0, 0.0, …, 2.0, …] that we used to
|
||
generate the data. Keep in mind that due to regularization and noise,
|
||
the learned values will not exactly equal the true ones, but they
|
||
should be in the same ballpark. Which method (OLS or Ridge) gives the best results?</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell" id="cell-id=1aaa2666">
|
||
<div class="jp-Cell-inputWrapper" tabindex="0">
|
||
<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
|
||
</div>
|
||
<div class="jp-InputArea jp-Cell-inputArea">
|
||
<div class="jp-InputPrompt jp-InputArea-prompt">In [16]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="cm-editor cm-s-jupyter">
|
||
<div class="highlight hl-ipython3"><pre><span></span><span class="n">res</span> <span class="o">=</span> <span class="n">gradient_descent</span><span class="p">(</span><span class="n">X</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">OLS_cost_func</span><span class="p">,</span> <span class="n">OLS_grad_cost_func</span><span class="p">,</span> <span class="n">num_iters</span><span class="o">=</span><span class="mi">100000</span><span class="p">,</span> <span class="n">stopping_criterion</span><span class="o">=</span><span class="n">stopping_criterion</span><span class="p">)</span>
|
||
<span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Terminated with error on theta of </span><span class="si">{</span><span class="n">theta_error</span><span class="p">(</span><span class="n">res</span><span class="p">[</span><span class="mi">0</span><span class="p">])[</span><span class="mi">1</span><span class="p">]</span><span class="si">:</span><span class="s2">.3e</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
||
</pre></div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="jp-Cell-outputWrapper">
|
||
<div class="jp-Collapser jp-OutputCollapser jp-Cell-outputCollapser">
|
||
</div>
|
||
<div class="jp-OutputArea jp-Cell-outputArea">
|
||
<div class="jp-OutputArea-child">
|
||
<div class="jp-OutputPrompt jp-OutputArea-prompt"></div>
|
||
<div class="jp-RenderedText jp-OutputArea-output" data-mime-type="text/plain" tabindex="0">
|
||
<pre>Converged at iteration 85
|
||
Terminated with error on theta of 3.750e-03
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</main>
|
||
</body>
|
||
</html>
|