23404 lines
1016 KiB
HTML
23404 lines
1016 KiB
HTML
<!DOCTYPE html>
|
||
<html>
|
||
<head><meta charset="utf-8" />
|
||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||
|
||
<title>Correcet_Programming</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;
|
||
}
|
||
|
||
/*
|
||
* Webkit scrollbar styling
|
||
*/
|
||
|
||
/* use standard opaque scrollbars for most nodes */
|
||
|
||
[data-jp-theme-scrollbars='true'] ::-webkit-scrollbar,
|
||
[data-jp-theme-scrollbars='true'] ::-webkit-scrollbar-corner {
|
||
background: var(--jp-scrollbar-background-color);
|
||
}
|
||
|
||
[data-jp-theme-scrollbars='true'] ::-webkit-scrollbar-thumb {
|
||
background: rgb(var(--jp-scrollbar-thumb-color));
|
||
border: var(--jp-scrollbar-thumb-margin) solid transparent;
|
||
background-clip: content-box;
|
||
border-radius: var(--jp-scrollbar-thumb-radius);
|
||
}
|
||
|
||
[data-jp-theme-scrollbars='true'] ::-webkit-scrollbar-track:horizontal {
|
||
border-left: var(--jp-scrollbar-endpad) solid
|
||
var(--jp-scrollbar-background-color);
|
||
border-right: var(--jp-scrollbar-endpad) solid
|
||
var(--jp-scrollbar-background-color);
|
||
}
|
||
|
||
[data-jp-theme-scrollbars='true'] ::-webkit-scrollbar-track:vertical {
|
||
border-top: var(--jp-scrollbar-endpad) solid
|
||
var(--jp-scrollbar-background-color);
|
||
border-bottom: var(--jp-scrollbar-endpad) solid
|
||
var(--jp-scrollbar-background-color);
|
||
}
|
||
|
||
/* for code nodes, use a transparent style of scrollbar */
|
||
|
||
[data-jp-theme-scrollbars='true'] .CodeMirror-hscrollbar::-webkit-scrollbar,
|
||
[data-jp-theme-scrollbars='true'] .CodeMirror-vscrollbar::-webkit-scrollbar,
|
||
[data-jp-theme-scrollbars='true']
|
||
.CodeMirror-hscrollbar::-webkit-scrollbar-corner,
|
||
[data-jp-theme-scrollbars='true']
|
||
.CodeMirror-vscrollbar::-webkit-scrollbar-corner {
|
||
background-color: transparent;
|
||
}
|
||
|
||
[data-jp-theme-scrollbars='true']
|
||
.CodeMirror-hscrollbar::-webkit-scrollbar-thumb,
|
||
[data-jp-theme-scrollbars='true']
|
||
.CodeMirror-vscrollbar::-webkit-scrollbar-thumb {
|
||
background: rgba(var(--jp-scrollbar-thumb-color), 0.5);
|
||
border: var(--jp-scrollbar-thumb-margin) solid transparent;
|
||
background-clip: content-box;
|
||
border-radius: var(--jp-scrollbar-thumb-radius);
|
||
}
|
||
|
||
[data-jp-theme-scrollbars='true']
|
||
.CodeMirror-hscrollbar::-webkit-scrollbar-track:horizontal {
|
||
border-left: var(--jp-scrollbar-endpad) solid transparent;
|
||
border-right: var(--jp-scrollbar-endpad) solid transparent;
|
||
}
|
||
|
||
[data-jp-theme-scrollbars='true']
|
||
.CodeMirror-vscrollbar::-webkit-scrollbar-track:vertical {
|
||
border-top: var(--jp-scrollbar-endpad) solid transparent;
|
||
border-bottom: var(--jp-scrollbar-endpad) solid transparent;
|
||
}
|
||
|
||
/* 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: 0px solid transparent;
|
||
border-right: 0px solid transparent;
|
||
}
|
||
|
||
.jp-scrollbar-tiny::-webkit-scrollbar-track:vertical {
|
||
border-top: 0px solid transparent;
|
||
border-bottom: 0px solid transparent;
|
||
}
|
||
|
||
/*
|
||
* Phosphor
|
||
*/
|
||
|
||
.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.
|
||
| 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.
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
|
||
/* <DEPRECATED> */ .p-Widget, /* </DEPRECATED> */
|
||
.lm-Widget {
|
||
box-sizing: border-box;
|
||
position: relative;
|
||
overflow: hidden;
|
||
cursor: default;
|
||
}
|
||
|
||
|
||
/* <DEPRECATED> */ .p-Widget.p-mod-hidden, /* </DEPRECATED> */
|
||
.lm-Widget.lm-mod-hidden {
|
||
display: none !important;
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| 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.
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
|
||
/* <DEPRECATED> */ .p-CommandPalette, /* </DEPRECATED> */
|
||
.lm-CommandPalette {
|
||
display: flex;
|
||
flex-direction: column;
|
||
-webkit-user-select: none;
|
||
-moz-user-select: none;
|
||
-ms-user-select: none;
|
||
user-select: none;
|
||
}
|
||
|
||
|
||
/* <DEPRECATED> */ .p-CommandPalette-search, /* </DEPRECATED> */
|
||
.lm-CommandPalette-search {
|
||
flex: 0 0 auto;
|
||
}
|
||
|
||
|
||
/* <DEPRECATED> */ .p-CommandPalette-content, /* </DEPRECATED> */
|
||
.lm-CommandPalette-content {
|
||
flex: 1 1 auto;
|
||
margin: 0;
|
||
padding: 0;
|
||
min-height: 0;
|
||
overflow: auto;
|
||
list-style-type: none;
|
||
}
|
||
|
||
|
||
/* <DEPRECATED> */ .p-CommandPalette-header, /* </DEPRECATED> */
|
||
.lm-CommandPalette-header {
|
||
overflow: hidden;
|
||
white-space: nowrap;
|
||
text-overflow: ellipsis;
|
||
}
|
||
|
||
|
||
/* <DEPRECATED> */ .p-CommandPalette-item, /* </DEPRECATED> */
|
||
.lm-CommandPalette-item {
|
||
display: flex;
|
||
flex-direction: row;
|
||
}
|
||
|
||
|
||
/* <DEPRECATED> */ .p-CommandPalette-itemIcon, /* </DEPRECATED> */
|
||
.lm-CommandPalette-itemIcon {
|
||
flex: 0 0 auto;
|
||
}
|
||
|
||
|
||
/* <DEPRECATED> */ .p-CommandPalette-itemContent, /* </DEPRECATED> */
|
||
.lm-CommandPalette-itemContent {
|
||
flex: 1 1 auto;
|
||
overflow: hidden;
|
||
}
|
||
|
||
|
||
/* <DEPRECATED> */ .p-CommandPalette-itemShortcut, /* </DEPRECATED> */
|
||
.lm-CommandPalette-itemShortcut {
|
||
flex: 0 0 auto;
|
||
}
|
||
|
||
|
||
/* <DEPRECATED> */ .p-CommandPalette-itemLabel, /* </DEPRECATED> */
|
||
.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.
|
||
| 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.
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
|
||
/* <DEPRECATED> */ .p-DockPanel, /* </DEPRECATED> */
|
||
.lm-DockPanel {
|
||
z-index: 0;
|
||
}
|
||
|
||
|
||
/* <DEPRECATED> */ .p-DockPanel-widget, /* </DEPRECATED> */
|
||
.lm-DockPanel-widget {
|
||
z-index: 0;
|
||
}
|
||
|
||
|
||
/* <DEPRECATED> */ .p-DockPanel-tabBar, /* </DEPRECATED> */
|
||
.lm-DockPanel-tabBar {
|
||
z-index: 1;
|
||
}
|
||
|
||
|
||
/* <DEPRECATED> */ .p-DockPanel-handle, /* </DEPRECATED> */
|
||
.lm-DockPanel-handle {
|
||
z-index: 2;
|
||
}
|
||
|
||
|
||
/* <DEPRECATED> */ .p-DockPanel-handle.p-mod-hidden, /* </DEPRECATED> */
|
||
.lm-DockPanel-handle.lm-mod-hidden {
|
||
display: none !important;
|
||
}
|
||
|
||
|
||
/* <DEPRECATED> */ .p-DockPanel-handle:after, /* </DEPRECATED> */
|
||
.lm-DockPanel-handle:after {
|
||
position: absolute;
|
||
top: 0;
|
||
left: 0;
|
||
width: 100%;
|
||
height: 100%;
|
||
content: '';
|
||
}
|
||
|
||
|
||
/* <DEPRECATED> */
|
||
.p-DockPanel-handle[data-orientation='horizontal'],
|
||
/* </DEPRECATED> */
|
||
.lm-DockPanel-handle[data-orientation='horizontal'] {
|
||
cursor: ew-resize;
|
||
}
|
||
|
||
|
||
/* <DEPRECATED> */
|
||
.p-DockPanel-handle[data-orientation='vertical'],
|
||
/* </DEPRECATED> */
|
||
.lm-DockPanel-handle[data-orientation='vertical'] {
|
||
cursor: ns-resize;
|
||
}
|
||
|
||
|
||
/* <DEPRECATED> */
|
||
.p-DockPanel-handle[data-orientation='horizontal']:after,
|
||
/* </DEPRECATED> */
|
||
.lm-DockPanel-handle[data-orientation='horizontal']:after {
|
||
left: 50%;
|
||
min-width: 8px;
|
||
transform: translateX(-50%);
|
||
}
|
||
|
||
|
||
/* <DEPRECATED> */
|
||
.p-DockPanel-handle[data-orientation='vertical']:after,
|
||
/* </DEPRECATED> */
|
||
.lm-DockPanel-handle[data-orientation='vertical']:after {
|
||
top: 50%;
|
||
min-height: 8px;
|
||
transform: translateY(-50%);
|
||
}
|
||
|
||
|
||
/* <DEPRECATED> */ .p-DockPanel-overlay, /* </DEPRECATED> */
|
||
.lm-DockPanel-overlay {
|
||
z-index: 3;
|
||
box-sizing: border-box;
|
||
pointer-events: none;
|
||
}
|
||
|
||
|
||
/* <DEPRECATED> */ .p-DockPanel-overlay.p-mod-hidden, /* </DEPRECATED> */
|
||
.lm-DockPanel-overlay.lm-mod-hidden {
|
||
display: none !important;
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| 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.
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
|
||
/* <DEPRECATED> */ .p-Menu, /* </DEPRECATED> */
|
||
.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;
|
||
}
|
||
|
||
|
||
/* <DEPRECATED> */ .p-Menu-content, /* </DEPRECATED> */
|
||
.lm-Menu-content {
|
||
margin: 0;
|
||
padding: 0;
|
||
display: table;
|
||
list-style-type: none;
|
||
}
|
||
|
||
|
||
/* <DEPRECATED> */ .p-Menu-item, /* </DEPRECATED> */
|
||
.lm-Menu-item {
|
||
display: table-row;
|
||
}
|
||
|
||
|
||
/* <DEPRECATED> */
|
||
.p-Menu-item.p-mod-hidden,
|
||
.p-Menu-item.p-mod-collapsed,
|
||
/* </DEPRECATED> */
|
||
.lm-Menu-item.lm-mod-hidden,
|
||
.lm-Menu-item.lm-mod-collapsed {
|
||
display: none !important;
|
||
}
|
||
|
||
|
||
/* <DEPRECATED> */
|
||
.p-Menu-itemIcon,
|
||
.p-Menu-itemSubmenuIcon,
|
||
/* </DEPRECATED> */
|
||
.lm-Menu-itemIcon,
|
||
.lm-Menu-itemSubmenuIcon {
|
||
display: table-cell;
|
||
text-align: center;
|
||
}
|
||
|
||
|
||
/* <DEPRECATED> */ .p-Menu-itemLabel, /* </DEPRECATED> */
|
||
.lm-Menu-itemLabel {
|
||
display: table-cell;
|
||
text-align: left;
|
||
}
|
||
|
||
|
||
/* <DEPRECATED> */ .p-Menu-itemShortcut, /* </DEPRECATED> */
|
||
.lm-Menu-itemShortcut {
|
||
display: table-cell;
|
||
text-align: right;
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| 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.
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
|
||
/* <DEPRECATED> */ .p-MenuBar, /* </DEPRECATED> */
|
||
.lm-MenuBar {
|
||
outline: none;
|
||
-webkit-user-select: none;
|
||
-moz-user-select: none;
|
||
-ms-user-select: none;
|
||
user-select: none;
|
||
}
|
||
|
||
|
||
/* <DEPRECATED> */ .p-MenuBar-content, /* </DEPRECATED> */
|
||
.lm-MenuBar-content {
|
||
margin: 0;
|
||
padding: 0;
|
||
display: flex;
|
||
flex-direction: row;
|
||
list-style-type: none;
|
||
}
|
||
|
||
|
||
/* <DEPRECATED> */ .p--MenuBar-item, /* </DEPRECATED> */
|
||
.lm-MenuBar-item {
|
||
box-sizing: border-box;
|
||
}
|
||
|
||
|
||
/* <DEPRECATED> */
|
||
.p-MenuBar-itemIcon,
|
||
.p-MenuBar-itemLabel,
|
||
/* </DEPRECATED> */
|
||
.lm-MenuBar-itemIcon,
|
||
.lm-MenuBar-itemLabel {
|
||
display: inline-block;
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| 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.
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
|
||
/* <DEPRECATED> */ .p-ScrollBar, /* </DEPRECATED> */
|
||
.lm-ScrollBar {
|
||
display: flex;
|
||
-webkit-user-select: none;
|
||
-moz-user-select: none;
|
||
-ms-user-select: none;
|
||
user-select: none;
|
||
}
|
||
|
||
|
||
/* <DEPRECATED> */
|
||
.p-ScrollBar[data-orientation='horizontal'],
|
||
/* </DEPRECATED> */
|
||
.lm-ScrollBar[data-orientation='horizontal'] {
|
||
flex-direction: row;
|
||
}
|
||
|
||
|
||
/* <DEPRECATED> */
|
||
.p-ScrollBar[data-orientation='vertical'],
|
||
/* </DEPRECATED> */
|
||
.lm-ScrollBar[data-orientation='vertical'] {
|
||
flex-direction: column;
|
||
}
|
||
|
||
|
||
/* <DEPRECATED> */ .p-ScrollBar-button, /* </DEPRECATED> */
|
||
.lm-ScrollBar-button {
|
||
box-sizing: border-box;
|
||
flex: 0 0 auto;
|
||
}
|
||
|
||
|
||
/* <DEPRECATED> */ .p-ScrollBar-track, /* </DEPRECATED> */
|
||
.lm-ScrollBar-track {
|
||
box-sizing: border-box;
|
||
position: relative;
|
||
overflow: hidden;
|
||
flex: 1 1 auto;
|
||
}
|
||
|
||
|
||
/* <DEPRECATED> */ .p-ScrollBar-thumb, /* </DEPRECATED> */
|
||
.lm-ScrollBar-thumb {
|
||
box-sizing: border-box;
|
||
position: absolute;
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| 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.
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
|
||
/* <DEPRECATED> */ .p-SplitPanel-child, /* </DEPRECATED> */
|
||
.lm-SplitPanel-child {
|
||
z-index: 0;
|
||
}
|
||
|
||
|
||
/* <DEPRECATED> */ .p-SplitPanel-handle, /* </DEPRECATED> */
|
||
.lm-SplitPanel-handle {
|
||
z-index: 1;
|
||
}
|
||
|
||
|
||
/* <DEPRECATED> */ .p-SplitPanel-handle.p-mod-hidden, /* </DEPRECATED> */
|
||
.lm-SplitPanel-handle.lm-mod-hidden {
|
||
display: none !important;
|
||
}
|
||
|
||
|
||
/* <DEPRECATED> */ .p-SplitPanel-handle:after, /* </DEPRECATED> */
|
||
.lm-SplitPanel-handle:after {
|
||
position: absolute;
|
||
top: 0;
|
||
left: 0;
|
||
width: 100%;
|
||
height: 100%;
|
||
content: '';
|
||
}
|
||
|
||
|
||
/* <DEPRECATED> */
|
||
.p-SplitPanel[data-orientation='horizontal'] > .p-SplitPanel-handle,
|
||
/* </DEPRECATED> */
|
||
.lm-SplitPanel[data-orientation='horizontal'] > .lm-SplitPanel-handle {
|
||
cursor: ew-resize;
|
||
}
|
||
|
||
|
||
/* <DEPRECATED> */
|
||
.p-SplitPanel[data-orientation='vertical'] > .p-SplitPanel-handle,
|
||
/* </DEPRECATED> */
|
||
.lm-SplitPanel[data-orientation='vertical'] > .lm-SplitPanel-handle {
|
||
cursor: ns-resize;
|
||
}
|
||
|
||
|
||
/* <DEPRECATED> */
|
||
.p-SplitPanel[data-orientation='horizontal'] > .p-SplitPanel-handle:after,
|
||
/* </DEPRECATED> */
|
||
.lm-SplitPanel[data-orientation='horizontal'] > .lm-SplitPanel-handle:after {
|
||
left: 50%;
|
||
min-width: 8px;
|
||
transform: translateX(-50%);
|
||
}
|
||
|
||
|
||
/* <DEPRECATED> */
|
||
.p-SplitPanel[data-orientation='vertical'] > .p-SplitPanel-handle:after,
|
||
/* </DEPRECATED> */
|
||
.lm-SplitPanel[data-orientation='vertical'] > .lm-SplitPanel-handle:after {
|
||
top: 50%;
|
||
min-height: 8px;
|
||
transform: translateY(-50%);
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| 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.
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
|
||
/* <DEPRECATED> */ .p-TabBar, /* </DEPRECATED> */
|
||
.lm-TabBar {
|
||
display: flex;
|
||
-webkit-user-select: none;
|
||
-moz-user-select: none;
|
||
-ms-user-select: none;
|
||
user-select: none;
|
||
}
|
||
|
||
|
||
/* <DEPRECATED> */ .p-TabBar[data-orientation='horizontal'], /* </DEPRECATED> */
|
||
.lm-TabBar[data-orientation='horizontal'] {
|
||
flex-direction: row;
|
||
align-items: flex-end;
|
||
}
|
||
|
||
|
||
/* <DEPRECATED> */ .p-TabBar[data-orientation='vertical'], /* </DEPRECATED> */
|
||
.lm-TabBar[data-orientation='vertical'] {
|
||
flex-direction: column;
|
||
align-items: flex-end;
|
||
}
|
||
|
||
|
||
/* <DEPRECATED> */ .p-TabBar-content, /* </DEPRECATED> */
|
||
.lm-TabBar-content {
|
||
margin: 0;
|
||
padding: 0;
|
||
display: flex;
|
||
flex: 1 1 auto;
|
||
list-style-type: none;
|
||
}
|
||
|
||
|
||
/* <DEPRECATED> */
|
||
.p-TabBar[data-orientation='horizontal'] > .p-TabBar-content,
|
||
/* </DEPRECATED> */
|
||
.lm-TabBar[data-orientation='horizontal'] > .lm-TabBar-content {
|
||
flex-direction: row;
|
||
}
|
||
|
||
|
||
/* <DEPRECATED> */
|
||
.p-TabBar[data-orientation='vertical'] > .p-TabBar-content,
|
||
/* </DEPRECATED> */
|
||
.lm-TabBar[data-orientation='vertical'] > .lm-TabBar-content {
|
||
flex-direction: column;
|
||
}
|
||
|
||
|
||
/* <DEPRECATED> */ .p-TabBar-tab, /* </DEPRECATED> */
|
||
.lm-TabBar-tab {
|
||
display: flex;
|
||
flex-direction: row;
|
||
box-sizing: border-box;
|
||
overflow: hidden;
|
||
}
|
||
|
||
|
||
/* <DEPRECATED> */
|
||
.p-TabBar-tabIcon,
|
||
.p-TabBar-tabCloseIcon,
|
||
/* </DEPRECATED> */
|
||
.lm-TabBar-tabIcon,
|
||
.lm-TabBar-tabCloseIcon {
|
||
flex: 0 0 auto;
|
||
}
|
||
|
||
|
||
/* <DEPRECATED> */ .p-TabBar-tabLabel, /* </DEPRECATED> */
|
||
.lm-TabBar-tabLabel {
|
||
flex: 1 1 auto;
|
||
overflow: hidden;
|
||
white-space: nowrap;
|
||
}
|
||
|
||
|
||
.lm-TabBar-tabInput {
|
||
user-select: all;
|
||
width: 100%;
|
||
box-sizing : border-box;
|
||
}
|
||
|
||
|
||
/* <DEPRECATED> */ .p-TabBar-tab.p-mod-hidden, /* </DEPRECATED> */
|
||
.lm-TabBar-tab.lm-mod-hidden {
|
||
display: none !important;
|
||
}
|
||
|
||
|
||
.lm-TabBar-addButton.lm-mod-hidden {
|
||
display: none !important;
|
||
}
|
||
|
||
|
||
/* <DEPRECATED> */ .p-TabBar.p-mod-dragging .p-TabBar-tab, /* </DEPRECATED> */
|
||
.lm-TabBar.lm-mod-dragging .lm-TabBar-tab {
|
||
position: relative;
|
||
}
|
||
|
||
|
||
/* <DEPRECATED> */
|
||
.p-TabBar.p-mod-dragging[data-orientation='horizontal'] .p-TabBar-tab,
|
||
/* </DEPRECATED> */
|
||
.lm-TabBar.lm-mod-dragging[data-orientation='horizontal'] .lm-TabBar-tab {
|
||
left: 0;
|
||
transition: left 150ms ease;
|
||
}
|
||
|
||
|
||
/* <DEPRECATED> */
|
||
.p-TabBar.p-mod-dragging[data-orientation='vertical'] .p-TabBar-tab,
|
||
/* </DEPRECATED> */
|
||
.lm-TabBar.lm-mod-dragging[data-orientation='vertical'] .lm-TabBar-tab {
|
||
top: 0;
|
||
transition: top 150ms ease;
|
||
}
|
||
|
||
|
||
/* <DEPRECATED> */
|
||
.p-TabBar.p-mod-dragging .p-TabBar-tab.p-mod-dragging,
|
||
/* </DEPRECATED> */
|
||
.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.
|
||
| 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.
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
|
||
/* <DEPRECATED> */ .p-TabPanel-tabBar, /* </DEPRECATED> */
|
||
.lm-TabPanel-tabBar {
|
||
z-index: 1;
|
||
}
|
||
|
||
|
||
/* <DEPRECATED> */ .p-TabPanel-stackedPanel, /* </DEPRECATED> */
|
||
.lm-TabPanel-stackedPanel {
|
||
z-index: 0;
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| 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.
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
@charset "UTF-8";
|
||
html{
|
||
-webkit-box-sizing:border-box;
|
||
box-sizing:border-box; }
|
||
|
||
*,
|
||
*::before,
|
||
*::after{
|
||
-webkit-box-sizing:inherit;
|
||
box-sizing:inherit; }
|
||
|
||
body{
|
||
font-size:14px;
|
||
font-weight:400;
|
||
letter-spacing:0;
|
||
line-height:1.28581;
|
||
text-transform:none;
|
||
color:#182026;
|
||
font-family:-apple-system, "BlinkMacSystemFont", "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Open Sans", "Helvetica Neue", "Icons16", sans-serif; }
|
||
|
||
p{
|
||
margin-bottom:10px;
|
||
margin-top:0; }
|
||
|
||
small{
|
||
font-size:12px; }
|
||
|
||
strong{
|
||
font-weight:600; }
|
||
|
||
::-moz-selection{
|
||
background:rgba(125, 188, 255, 0.6); }
|
||
|
||
::selection{
|
||
background:rgba(125, 188, 255, 0.6); }
|
||
.bp3-heading{
|
||
color:#182026;
|
||
font-weight:600;
|
||
margin:0 0 10px;
|
||
padding:0; }
|
||
.bp3-dark .bp3-heading{
|
||
color:#f5f8fa; }
|
||
|
||
h1.bp3-heading, .bp3-running-text h1{
|
||
font-size:36px;
|
||
line-height:40px; }
|
||
|
||
h2.bp3-heading, .bp3-running-text h2{
|
||
font-size:28px;
|
||
line-height:32px; }
|
||
|
||
h3.bp3-heading, .bp3-running-text h3{
|
||
font-size:22px;
|
||
line-height:25px; }
|
||
|
||
h4.bp3-heading, .bp3-running-text h4{
|
||
font-size:18px;
|
||
line-height:21px; }
|
||
|
||
h5.bp3-heading, .bp3-running-text h5{
|
||
font-size:16px;
|
||
line-height:19px; }
|
||
|
||
h6.bp3-heading, .bp3-running-text h6{
|
||
font-size:14px;
|
||
line-height:16px; }
|
||
.bp3-ui-text{
|
||
font-size:14px;
|
||
font-weight:400;
|
||
letter-spacing:0;
|
||
line-height:1.28581;
|
||
text-transform:none; }
|
||
|
||
.bp3-monospace-text{
|
||
font-family:monospace;
|
||
text-transform:none; }
|
||
|
||
.bp3-text-muted{
|
||
color:#5c7080; }
|
||
.bp3-dark .bp3-text-muted{
|
||
color:#a7b6c2; }
|
||
|
||
.bp3-text-disabled{
|
||
color:rgba(92, 112, 128, 0.6); }
|
||
.bp3-dark .bp3-text-disabled{
|
||
color:rgba(167, 182, 194, 0.6); }
|
||
|
||
.bp3-text-overflow-ellipsis{
|
||
overflow:hidden;
|
||
text-overflow:ellipsis;
|
||
white-space:nowrap;
|
||
word-wrap:normal; }
|
||
.bp3-running-text{
|
||
font-size:14px;
|
||
line-height:1.5; }
|
||
.bp3-running-text h1{
|
||
color:#182026;
|
||
font-weight:600;
|
||
margin-bottom:20px;
|
||
margin-top:40px; }
|
||
.bp3-dark .bp3-running-text h1{
|
||
color:#f5f8fa; }
|
||
.bp3-running-text h2{
|
||
color:#182026;
|
||
font-weight:600;
|
||
margin-bottom:20px;
|
||
margin-top:40px; }
|
||
.bp3-dark .bp3-running-text h2{
|
||
color:#f5f8fa; }
|
||
.bp3-running-text h3{
|
||
color:#182026;
|
||
font-weight:600;
|
||
margin-bottom:20px;
|
||
margin-top:40px; }
|
||
.bp3-dark .bp3-running-text h3{
|
||
color:#f5f8fa; }
|
||
.bp3-running-text h4{
|
||
color:#182026;
|
||
font-weight:600;
|
||
margin-bottom:20px;
|
||
margin-top:40px; }
|
||
.bp3-dark .bp3-running-text h4{
|
||
color:#f5f8fa; }
|
||
.bp3-running-text h5{
|
||
color:#182026;
|
||
font-weight:600;
|
||
margin-bottom:20px;
|
||
margin-top:40px; }
|
||
.bp3-dark .bp3-running-text h5{
|
||
color:#f5f8fa; }
|
||
.bp3-running-text h6{
|
||
color:#182026;
|
||
font-weight:600;
|
||
margin-bottom:20px;
|
||
margin-top:40px; }
|
||
.bp3-dark .bp3-running-text h6{
|
||
color:#f5f8fa; }
|
||
.bp3-running-text hr{
|
||
border:none;
|
||
border-bottom:1px solid rgba(16, 22, 26, 0.15);
|
||
margin:20px 0; }
|
||
.bp3-dark .bp3-running-text hr{
|
||
border-color:rgba(255, 255, 255, 0.15); }
|
||
.bp3-running-text p{
|
||
margin:0 0 10px;
|
||
padding:0; }
|
||
|
||
.bp3-text-large{
|
||
font-size:16px; }
|
||
|
||
.bp3-text-small{
|
||
font-size:12px; }
|
||
a{
|
||
color:#106ba3;
|
||
text-decoration:none; }
|
||
a:hover{
|
||
color:#106ba3;
|
||
cursor:pointer;
|
||
text-decoration:underline; }
|
||
a .bp3-icon, a .bp3-icon-standard, a .bp3-icon-large{
|
||
color:inherit; }
|
||
a code,
|
||
.bp3-dark a code{
|
||
color:inherit; }
|
||
.bp3-dark a,
|
||
.bp3-dark a:hover{
|
||
color:#48aff0; }
|
||
.bp3-dark a .bp3-icon, .bp3-dark a .bp3-icon-standard, .bp3-dark a .bp3-icon-large,
|
||
.bp3-dark a:hover .bp3-icon,
|
||
.bp3-dark a:hover .bp3-icon-standard,
|
||
.bp3-dark a:hover .bp3-icon-large{
|
||
color:inherit; }
|
||
.bp3-running-text code, .bp3-code{
|
||
font-family:monospace;
|
||
text-transform:none;
|
||
background:rgba(255, 255, 255, 0.7);
|
||
border-radius:3px;
|
||
-webkit-box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.2);
|
||
box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.2);
|
||
color:#5c7080;
|
||
font-size:smaller;
|
||
padding:2px 5px; }
|
||
.bp3-dark .bp3-running-text code, .bp3-running-text .bp3-dark code, .bp3-dark .bp3-code{
|
||
background:rgba(16, 22, 26, 0.3);
|
||
-webkit-box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.4);
|
||
box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.4);
|
||
color:#a7b6c2; }
|
||
.bp3-running-text a > code, a > .bp3-code{
|
||
color:#137cbd; }
|
||
.bp3-dark .bp3-running-text a > code, .bp3-running-text .bp3-dark a > code, .bp3-dark a > .bp3-code{
|
||
color:inherit; }
|
||
|
||
.bp3-running-text pre, .bp3-code-block{
|
||
font-family:monospace;
|
||
text-transform:none;
|
||
background:rgba(255, 255, 255, 0.7);
|
||
border-radius:3px;
|
||
-webkit-box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.15);
|
||
box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.15);
|
||
color:#182026;
|
||
display:block;
|
||
font-size:13px;
|
||
line-height:1.4;
|
||
margin:10px 0;
|
||
padding:13px 15px 12px;
|
||
word-break:break-all;
|
||
word-wrap:break-word; }
|
||
.bp3-dark .bp3-running-text pre, .bp3-running-text .bp3-dark pre, .bp3-dark .bp3-code-block{
|
||
background:rgba(16, 22, 26, 0.3);
|
||
-webkit-box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.4);
|
||
box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.4);
|
||
color:#f5f8fa; }
|
||
.bp3-running-text pre > code, .bp3-code-block > code{
|
||
background:none;
|
||
-webkit-box-shadow:none;
|
||
box-shadow:none;
|
||
color:inherit;
|
||
font-size:inherit;
|
||
padding:0; }
|
||
|
||
.bp3-running-text kbd, .bp3-key{
|
||
-webkit-box-align:center;
|
||
-ms-flex-align:center;
|
||
align-items:center;
|
||
background:#ffffff;
|
||
border-radius:3px;
|
||
-webkit-box-shadow:0 0 0 1px rgba(16, 22, 26, 0.1), 0 0 0 rgba(16, 22, 26, 0), 0 1px 1px rgba(16, 22, 26, 0.2);
|
||
box-shadow:0 0 0 1px rgba(16, 22, 26, 0.1), 0 0 0 rgba(16, 22, 26, 0), 0 1px 1px rgba(16, 22, 26, 0.2);
|
||
color:#5c7080;
|
||
display:-webkit-inline-box;
|
||
display:-ms-inline-flexbox;
|
||
display:inline-flex;
|
||
font-family:inherit;
|
||
font-size:12px;
|
||
height:24px;
|
||
-webkit-box-pack:center;
|
||
-ms-flex-pack:center;
|
||
justify-content:center;
|
||
line-height:24px;
|
||
min-width:24px;
|
||
padding:3px 6px;
|
||
vertical-align:middle; }
|
||
.bp3-running-text kbd .bp3-icon, .bp3-key .bp3-icon, .bp3-running-text kbd .bp3-icon-standard, .bp3-key .bp3-icon-standard, .bp3-running-text kbd .bp3-icon-large, .bp3-key .bp3-icon-large{
|
||
margin-right:5px; }
|
||
.bp3-dark .bp3-running-text kbd, .bp3-running-text .bp3-dark kbd, .bp3-dark .bp3-key{
|
||
background:#394b59;
|
||
-webkit-box-shadow:0 0 0 1px rgba(16, 22, 26, 0.2), 0 0 0 rgba(16, 22, 26, 0), 0 1px 1px rgba(16, 22, 26, 0.4);
|
||
box-shadow:0 0 0 1px rgba(16, 22, 26, 0.2), 0 0 0 rgba(16, 22, 26, 0), 0 1px 1px rgba(16, 22, 26, 0.4);
|
||
color:#a7b6c2; }
|
||
.bp3-running-text blockquote, .bp3-blockquote{
|
||
border-left:solid 4px rgba(167, 182, 194, 0.5);
|
||
margin:0 0 10px;
|
||
padding:0 20px; }
|
||
.bp3-dark .bp3-running-text blockquote, .bp3-running-text .bp3-dark blockquote, .bp3-dark .bp3-blockquote{
|
||
border-color:rgba(115, 134, 148, 0.5); }
|
||
.bp3-running-text ul,
|
||
.bp3-running-text ol, .bp3-list{
|
||
margin:10px 0;
|
||
padding-left:30px; }
|
||
.bp3-running-text ul li:not(:last-child), .bp3-running-text ol li:not(:last-child), .bp3-list li:not(:last-child){
|
||
margin-bottom:5px; }
|
||
.bp3-running-text ul ol, .bp3-running-text ol ol, .bp3-list ol,
|
||
.bp3-running-text ul ul,
|
||
.bp3-running-text ol ul,
|
||
.bp3-list ul{
|
||
margin-top:5px; }
|
||
|
||
.bp3-list-unstyled{
|
||
list-style:none;
|
||
margin:0;
|
||
padding:0; }
|
||
.bp3-list-unstyled li{
|
||
padding:0; }
|
||
.bp3-rtl{
|
||
text-align:right; }
|
||
|
||
.bp3-dark{
|
||
color:#f5f8fa; }
|
||
|
||
:focus{
|
||
outline:rgba(19, 124, 189, 0.6) auto 2px;
|
||
outline-offset:2px;
|
||
-moz-outline-radius:6px; }
|
||
|
||
.bp3-focus-disabled :focus{
|
||
outline:none !important; }
|
||
.bp3-focus-disabled :focus ~ .bp3-control-indicator{
|
||
outline:none !important; }
|
||
|
||
.bp3-alert{
|
||
max-width:400px;
|
||
padding:20px; }
|
||
|
||
.bp3-alert-body{
|
||
display:-webkit-box;
|
||
display:-ms-flexbox;
|
||
display:flex; }
|
||
.bp3-alert-body .bp3-icon{
|
||
font-size:40px;
|
||
margin-right:20px;
|
||
margin-top:0; }
|
||
|
||
.bp3-alert-contents{
|
||
word-break:break-word; }
|
||
|
||
.bp3-alert-footer{
|
||
display:-webkit-box;
|
||
display:-ms-flexbox;
|
||
display:flex;
|
||
-webkit-box-orient:horizontal;
|
||
-webkit-box-direction:reverse;
|
||
-ms-flex-direction:row-reverse;
|
||
flex-direction:row-reverse;
|
||
margin-top:10px; }
|
||
.bp3-alert-footer .bp3-button{
|
||
margin-left:10px; }
|
||
.bp3-breadcrumbs{
|
||
-webkit-box-align:center;
|
||
-ms-flex-align:center;
|
||
align-items:center;
|
||
cursor:default;
|
||
display:-webkit-box;
|
||
display:-ms-flexbox;
|
||
display:flex;
|
||
-ms-flex-wrap:wrap;
|
||
flex-wrap:wrap;
|
||
height:30px;
|
||
list-style:none;
|
||
margin:0;
|
||
padding:0; }
|
||
.bp3-breadcrumbs > li{
|
||
-webkit-box-align:center;
|
||
-ms-flex-align:center;
|
||
align-items:center;
|
||
display:-webkit-box;
|
||
display:-ms-flexbox;
|
||
display:flex; }
|
||
.bp3-breadcrumbs > li::after{
|
||
background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill-rule='evenodd' clip-rule='evenodd' d='M10.71 7.29l-4-4a1.003 1.003 0 00-1.42 1.42L8.59 8 5.3 11.29c-.19.18-.3.43-.3.71a1.003 1.003 0 001.71.71l4-4c.18-.18.29-.43.29-.71 0-.28-.11-.53-.29-.71z' fill='%235C7080'/%3e%3c/svg%3e");
|
||
content:"";
|
||
display:block;
|
||
height:16px;
|
||
margin:0 5px;
|
||
width:16px; }
|
||
.bp3-breadcrumbs > li:last-of-type::after{
|
||
display:none; }
|
||
|
||
.bp3-breadcrumb,
|
||
.bp3-breadcrumb-current,
|
||
.bp3-breadcrumbs-collapsed{
|
||
-webkit-box-align:center;
|
||
-ms-flex-align:center;
|
||
align-items:center;
|
||
display:-webkit-inline-box;
|
||
display:-ms-inline-flexbox;
|
||
display:inline-flex;
|
||
font-size:16px; }
|
||
|
||
.bp3-breadcrumb,
|
||
.bp3-breadcrumbs-collapsed{
|
||
color:#5c7080; }
|
||
|
||
.bp3-breadcrumb:hover{
|
||
text-decoration:none; }
|
||
|
||
.bp3-breadcrumb.bp3-disabled{
|
||
color:rgba(92, 112, 128, 0.6);
|
||
cursor:not-allowed; }
|
||
|
||
.bp3-breadcrumb .bp3-icon{
|
||
margin-right:5px; }
|
||
|
||
.bp3-breadcrumb-current{
|
||
color:inherit;
|
||
font-weight:600; }
|
||
.bp3-breadcrumb-current .bp3-input{
|
||
font-size:inherit;
|
||
font-weight:inherit;
|
||
vertical-align:baseline; }
|
||
|
||
.bp3-breadcrumbs-collapsed{
|
||
background:#ced9e0;
|
||
border:none;
|
||
border-radius:3px;
|
||
cursor:pointer;
|
||
margin-right:2px;
|
||
padding:1px 5px;
|
||
vertical-align:text-bottom; }
|
||
.bp3-breadcrumbs-collapsed::before{
|
||
background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cg fill='%235C7080'%3e%3ccircle cx='2' cy='8.03' r='2'/%3e%3ccircle cx='14' cy='8.03' r='2'/%3e%3ccircle cx='8' cy='8.03' r='2'/%3e%3c/g%3e%3c/svg%3e") center no-repeat;
|
||
content:"";
|
||
display:block;
|
||
height:16px;
|
||
width:16px; }
|
||
.bp3-breadcrumbs-collapsed:hover{
|
||
background:#bfccd6;
|
||
color:#182026;
|
||
text-decoration:none; }
|
||
|
||
.bp3-dark .bp3-breadcrumb,
|
||
.bp3-dark .bp3-breadcrumbs-collapsed{
|
||
color:#a7b6c2; }
|
||
|
||
.bp3-dark .bp3-breadcrumbs > li::after{
|
||
color:#a7b6c2; }
|
||
|
||
.bp3-dark .bp3-breadcrumb.bp3-disabled{
|
||
color:rgba(167, 182, 194, 0.6); }
|
||
|
||
.bp3-dark .bp3-breadcrumb-current{
|
||
color:#f5f8fa; }
|
||
|
||
.bp3-dark .bp3-breadcrumbs-collapsed{
|
||
background:rgba(16, 22, 26, 0.4); }
|
||
.bp3-dark .bp3-breadcrumbs-collapsed:hover{
|
||
background:rgba(16, 22, 26, 0.6);
|
||
color:#f5f8fa; }
|
||
.bp3-button{
|
||
display:-webkit-inline-box;
|
||
display:-ms-inline-flexbox;
|
||
display:inline-flex;
|
||
-webkit-box-orient:horizontal;
|
||
-webkit-box-direction:normal;
|
||
-ms-flex-direction:row;
|
||
flex-direction:row;
|
||
-webkit-box-align:center;
|
||
-ms-flex-align:center;
|
||
align-items:center;
|
||
border:none;
|
||
border-radius:3px;
|
||
cursor:pointer;
|
||
font-size:14px;
|
||
-webkit-box-pack:center;
|
||
-ms-flex-pack:center;
|
||
justify-content:center;
|
||
padding:5px 10px;
|
||
text-align:left;
|
||
vertical-align:middle;
|
||
min-height:30px;
|
||
min-width:30px; }
|
||
.bp3-button > *{
|
||
-webkit-box-flex:0;
|
||
-ms-flex-positive:0;
|
||
flex-grow:0;
|
||
-ms-flex-negative:0;
|
||
flex-shrink:0; }
|
||
.bp3-button > .bp3-fill{
|
||
-webkit-box-flex:1;
|
||
-ms-flex-positive:1;
|
||
flex-grow:1;
|
||
-ms-flex-negative:1;
|
||
flex-shrink:1; }
|
||
.bp3-button::before,
|
||
.bp3-button > *{
|
||
margin-right:7px; }
|
||
.bp3-button:empty::before,
|
||
.bp3-button > :last-child{
|
||
margin-right:0; }
|
||
.bp3-button:empty{
|
||
padding:0 !important; }
|
||
.bp3-button:disabled, .bp3-button.bp3-disabled{
|
||
cursor:not-allowed; }
|
||
.bp3-button.bp3-fill{
|
||
display:-webkit-box;
|
||
display:-ms-flexbox;
|
||
display:flex;
|
||
width:100%; }
|
||
.bp3-button.bp3-align-right,
|
||
.bp3-align-right .bp3-button{
|
||
text-align:right; }
|
||
.bp3-button.bp3-align-left,
|
||
.bp3-align-left .bp3-button{
|
||
text-align:left; }
|
||
.bp3-button:not([class*="bp3-intent-"]){
|
||
background-color:#f5f8fa;
|
||
background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));
|
||
background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));
|
||
-webkit-box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.2), inset 0 -1px 0 rgba(16, 22, 26, 0.1);
|
||
box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.2), inset 0 -1px 0 rgba(16, 22, 26, 0.1);
|
||
color:#182026; }
|
||
.bp3-button:not([class*="bp3-intent-"]):hover{
|
||
background-clip:padding-box;
|
||
background-color:#ebf1f5;
|
||
-webkit-box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.2), inset 0 -1px 0 rgba(16, 22, 26, 0.1);
|
||
box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.2), inset 0 -1px 0 rgba(16, 22, 26, 0.1); }
|
||
.bp3-button:not([class*="bp3-intent-"]):active, .bp3-button:not([class*="bp3-intent-"]).bp3-active{
|
||
background-color:#d8e1e8;
|
||
background-image:none;
|
||
-webkit-box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.2), inset 0 1px 2px rgba(16, 22, 26, 0.2);
|
||
box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.2), inset 0 1px 2px rgba(16, 22, 26, 0.2); }
|
||
.bp3-button:not([class*="bp3-intent-"]):disabled, .bp3-button:not([class*="bp3-intent-"]).bp3-disabled{
|
||
background-color:rgba(206, 217, 224, 0.5);
|
||
background-image:none;
|
||
-webkit-box-shadow:none;
|
||
box-shadow:none;
|
||
color:rgba(92, 112, 128, 0.6);
|
||
cursor:not-allowed;
|
||
outline:none; }
|
||
.bp3-button:not([class*="bp3-intent-"]):disabled.bp3-active, .bp3-button:not([class*="bp3-intent-"]):disabled.bp3-active:hover, .bp3-button:not([class*="bp3-intent-"]).bp3-disabled.bp3-active, .bp3-button:not([class*="bp3-intent-"]).bp3-disabled.bp3-active:hover{
|
||
background:rgba(206, 217, 224, 0.7); }
|
||
.bp3-button.bp3-intent-primary{
|
||
background-color:#137cbd;
|
||
background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));
|
||
background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));
|
||
-webkit-box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.4), inset 0 -1px 0 rgba(16, 22, 26, 0.2);
|
||
box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.4), inset 0 -1px 0 rgba(16, 22, 26, 0.2);
|
||
color:#ffffff; }
|
||
.bp3-button.bp3-intent-primary:hover, .bp3-button.bp3-intent-primary:active, .bp3-button.bp3-intent-primary.bp3-active{
|
||
color:#ffffff; }
|
||
.bp3-button.bp3-intent-primary:hover{
|
||
background-color:#106ba3;
|
||
-webkit-box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.4), inset 0 -1px 0 rgba(16, 22, 26, 0.2);
|
||
box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.4), inset 0 -1px 0 rgba(16, 22, 26, 0.2); }
|
||
.bp3-button.bp3-intent-primary:active, .bp3-button.bp3-intent-primary.bp3-active{
|
||
background-color:#0e5a8a;
|
||
background-image:none;
|
||
-webkit-box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.4), inset 0 1px 2px rgba(16, 22, 26, 0.2);
|
||
box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.4), inset 0 1px 2px rgba(16, 22, 26, 0.2); }
|
||
.bp3-button.bp3-intent-primary:disabled, .bp3-button.bp3-intent-primary.bp3-disabled{
|
||
background-color:rgba(19, 124, 189, 0.5);
|
||
background-image:none;
|
||
border-color:transparent;
|
||
-webkit-box-shadow:none;
|
||
box-shadow:none;
|
||
color:rgba(255, 255, 255, 0.6); }
|
||
.bp3-button.bp3-intent-success{
|
||
background-color:#0f9960;
|
||
background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));
|
||
background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));
|
||
-webkit-box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.4), inset 0 -1px 0 rgba(16, 22, 26, 0.2);
|
||
box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.4), inset 0 -1px 0 rgba(16, 22, 26, 0.2);
|
||
color:#ffffff; }
|
||
.bp3-button.bp3-intent-success:hover, .bp3-button.bp3-intent-success:active, .bp3-button.bp3-intent-success.bp3-active{
|
||
color:#ffffff; }
|
||
.bp3-button.bp3-intent-success:hover{
|
||
background-color:#0d8050;
|
||
-webkit-box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.4), inset 0 -1px 0 rgba(16, 22, 26, 0.2);
|
||
box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.4), inset 0 -1px 0 rgba(16, 22, 26, 0.2); }
|
||
.bp3-button.bp3-intent-success:active, .bp3-button.bp3-intent-success.bp3-active{
|
||
background-color:#0a6640;
|
||
background-image:none;
|
||
-webkit-box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.4), inset 0 1px 2px rgba(16, 22, 26, 0.2);
|
||
box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.4), inset 0 1px 2px rgba(16, 22, 26, 0.2); }
|
||
.bp3-button.bp3-intent-success:disabled, .bp3-button.bp3-intent-success.bp3-disabled{
|
||
background-color:rgba(15, 153, 96, 0.5);
|
||
background-image:none;
|
||
border-color:transparent;
|
||
-webkit-box-shadow:none;
|
||
box-shadow:none;
|
||
color:rgba(255, 255, 255, 0.6); }
|
||
.bp3-button.bp3-intent-warning{
|
||
background-color:#d9822b;
|
||
background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));
|
||
background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));
|
||
-webkit-box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.4), inset 0 -1px 0 rgba(16, 22, 26, 0.2);
|
||
box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.4), inset 0 -1px 0 rgba(16, 22, 26, 0.2);
|
||
color:#ffffff; }
|
||
.bp3-button.bp3-intent-warning:hover, .bp3-button.bp3-intent-warning:active, .bp3-button.bp3-intent-warning.bp3-active{
|
||
color:#ffffff; }
|
||
.bp3-button.bp3-intent-warning:hover{
|
||
background-color:#bf7326;
|
||
-webkit-box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.4), inset 0 -1px 0 rgba(16, 22, 26, 0.2);
|
||
box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.4), inset 0 -1px 0 rgba(16, 22, 26, 0.2); }
|
||
.bp3-button.bp3-intent-warning:active, .bp3-button.bp3-intent-warning.bp3-active{
|
||
background-color:#a66321;
|
||
background-image:none;
|
||
-webkit-box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.4), inset 0 1px 2px rgba(16, 22, 26, 0.2);
|
||
box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.4), inset 0 1px 2px rgba(16, 22, 26, 0.2); }
|
||
.bp3-button.bp3-intent-warning:disabled, .bp3-button.bp3-intent-warning.bp3-disabled{
|
||
background-color:rgba(217, 130, 43, 0.5);
|
||
background-image:none;
|
||
border-color:transparent;
|
||
-webkit-box-shadow:none;
|
||
box-shadow:none;
|
||
color:rgba(255, 255, 255, 0.6); }
|
||
.bp3-button.bp3-intent-danger{
|
||
background-color:#db3737;
|
||
background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));
|
||
background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));
|
||
-webkit-box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.4), inset 0 -1px 0 rgba(16, 22, 26, 0.2);
|
||
box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.4), inset 0 -1px 0 rgba(16, 22, 26, 0.2);
|
||
color:#ffffff; }
|
||
.bp3-button.bp3-intent-danger:hover, .bp3-button.bp3-intent-danger:active, .bp3-button.bp3-intent-danger.bp3-active{
|
||
color:#ffffff; }
|
||
.bp3-button.bp3-intent-danger:hover{
|
||
background-color:#c23030;
|
||
-webkit-box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.4), inset 0 -1px 0 rgba(16, 22, 26, 0.2);
|
||
box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.4), inset 0 -1px 0 rgba(16, 22, 26, 0.2); }
|
||
.bp3-button.bp3-intent-danger:active, .bp3-button.bp3-intent-danger.bp3-active{
|
||
background-color:#a82a2a;
|
||
background-image:none;
|
||
-webkit-box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.4), inset 0 1px 2px rgba(16, 22, 26, 0.2);
|
||
box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.4), inset 0 1px 2px rgba(16, 22, 26, 0.2); }
|
||
.bp3-button.bp3-intent-danger:disabled, .bp3-button.bp3-intent-danger.bp3-disabled{
|
||
background-color:rgba(219, 55, 55, 0.5);
|
||
background-image:none;
|
||
border-color:transparent;
|
||
-webkit-box-shadow:none;
|
||
box-shadow:none;
|
||
color:rgba(255, 255, 255, 0.6); }
|
||
.bp3-button[class*="bp3-intent-"] .bp3-button-spinner .bp3-spinner-head{
|
||
stroke:#ffffff; }
|
||
.bp3-button.bp3-large,
|
||
.bp3-large .bp3-button{
|
||
min-height:40px;
|
||
min-width:40px;
|
||
font-size:16px;
|
||
padding:5px 15px; }
|
||
.bp3-button.bp3-large::before,
|
||
.bp3-button.bp3-large > *,
|
||
.bp3-large .bp3-button::before,
|
||
.bp3-large .bp3-button > *{
|
||
margin-right:10px; }
|
||
.bp3-button.bp3-large:empty::before,
|
||
.bp3-button.bp3-large > :last-child,
|
||
.bp3-large .bp3-button:empty::before,
|
||
.bp3-large .bp3-button > :last-child{
|
||
margin-right:0; }
|
||
.bp3-button.bp3-small,
|
||
.bp3-small .bp3-button{
|
||
min-height:24px;
|
||
min-width:24px;
|
||
padding:0 7px; }
|
||
.bp3-button.bp3-loading{
|
||
position:relative; }
|
||
.bp3-button.bp3-loading[class*="bp3-icon-"]::before{
|
||
visibility:hidden; }
|
||
.bp3-button.bp3-loading .bp3-button-spinner{
|
||
margin:0;
|
||
position:absolute; }
|
||
.bp3-button.bp3-loading > :not(.bp3-button-spinner){
|
||
visibility:hidden; }
|
||
.bp3-button[class*="bp3-icon-"]::before{
|
||
font-family:"Icons16", sans-serif;
|
||
font-size:16px;
|
||
font-style:normal;
|
||
font-weight:400;
|
||
line-height:1;
|
||
-moz-osx-font-smoothing:grayscale;
|
||
-webkit-font-smoothing:antialiased;
|
||
color:#5c7080; }
|
||
.bp3-button .bp3-icon, .bp3-button .bp3-icon-standard, .bp3-button .bp3-icon-large{
|
||
color:#5c7080; }
|
||
.bp3-button .bp3-icon.bp3-align-right, .bp3-button .bp3-icon-standard.bp3-align-right, .bp3-button .bp3-icon-large.bp3-align-right{
|
||
margin-left:7px; }
|
||
.bp3-button .bp3-icon:first-child:last-child,
|
||
.bp3-button .bp3-spinner + .bp3-icon:last-child{
|
||
margin:0 -7px; }
|
||
.bp3-dark .bp3-button:not([class*="bp3-intent-"]){
|
||
background-color:#394b59;
|
||
background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));
|
||
background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));
|
||
-webkit-box-shadow:0 0 0 1px rgba(16, 22, 26, 0.4);
|
||
box-shadow:0 0 0 1px rgba(16, 22, 26, 0.4);
|
||
color:#f5f8fa; }
|
||
.bp3-dark .bp3-button:not([class*="bp3-intent-"]):hover, .bp3-dark .bp3-button:not([class*="bp3-intent-"]):active, .bp3-dark .bp3-button:not([class*="bp3-intent-"]).bp3-active{
|
||
color:#f5f8fa; }
|
||
.bp3-dark .bp3-button:not([class*="bp3-intent-"]):hover{
|
||
background-color:#30404d;
|
||
-webkit-box-shadow:0 0 0 1px rgba(16, 22, 26, 0.4);
|
||
box-shadow:0 0 0 1px rgba(16, 22, 26, 0.4); }
|
||
.bp3-dark .bp3-button:not([class*="bp3-intent-"]):active, .bp3-dark .bp3-button:not([class*="bp3-intent-"]).bp3-active{
|
||
background-color:#202b33;
|
||
background-image:none;
|
||
-webkit-box-shadow:0 0 0 1px rgba(16, 22, 26, 0.6), inset 0 1px 2px rgba(16, 22, 26, 0.2);
|
||
box-shadow:0 0 0 1px rgba(16, 22, 26, 0.6), inset 0 1px 2px rgba(16, 22, 26, 0.2); }
|
||
.bp3-dark .bp3-button:not([class*="bp3-intent-"]):disabled, .bp3-dark .bp3-button:not([class*="bp3-intent-"]).bp3-disabled{
|
||
background-color:rgba(57, 75, 89, 0.5);
|
||
background-image:none;
|
||
-webkit-box-shadow:none;
|
||
box-shadow:none;
|
||
color:rgba(167, 182, 194, 0.6); }
|
||
.bp3-dark .bp3-button:not([class*="bp3-intent-"]):disabled.bp3-active, .bp3-dark .bp3-button:not([class*="bp3-intent-"]).bp3-disabled.bp3-active{
|
||
background:rgba(57, 75, 89, 0.7); }
|
||
.bp3-dark .bp3-button:not([class*="bp3-intent-"]) .bp3-button-spinner .bp3-spinner-head{
|
||
background:rgba(16, 22, 26, 0.5);
|
||
stroke:#8a9ba8; }
|
||
.bp3-dark .bp3-button:not([class*="bp3-intent-"])[class*="bp3-icon-"]::before{
|
||
color:#a7b6c2; }
|
||
.bp3-dark .bp3-button:not([class*="bp3-intent-"]) .bp3-icon, .bp3-dark .bp3-button:not([class*="bp3-intent-"]) .bp3-icon-standard, .bp3-dark .bp3-button:not([class*="bp3-intent-"]) .bp3-icon-large{
|
||
color:#a7b6c2; }
|
||
.bp3-dark .bp3-button[class*="bp3-intent-"]{
|
||
-webkit-box-shadow:0 0 0 1px rgba(16, 22, 26, 0.4);
|
||
box-shadow:0 0 0 1px rgba(16, 22, 26, 0.4); }
|
||
.bp3-dark .bp3-button[class*="bp3-intent-"]:hover{
|
||
-webkit-box-shadow:0 0 0 1px rgba(16, 22, 26, 0.4);
|
||
box-shadow:0 0 0 1px rgba(16, 22, 26, 0.4); }
|
||
.bp3-dark .bp3-button[class*="bp3-intent-"]:active, .bp3-dark .bp3-button[class*="bp3-intent-"].bp3-active{
|
||
-webkit-box-shadow:0 0 0 1px rgba(16, 22, 26, 0.4), inset 0 1px 2px rgba(16, 22, 26, 0.2);
|
||
box-shadow:0 0 0 1px rgba(16, 22, 26, 0.4), inset 0 1px 2px rgba(16, 22, 26, 0.2); }
|
||
.bp3-dark .bp3-button[class*="bp3-intent-"]:disabled, .bp3-dark .bp3-button[class*="bp3-intent-"].bp3-disabled{
|
||
background-image:none;
|
||
-webkit-box-shadow:none;
|
||
box-shadow:none;
|
||
color:rgba(255, 255, 255, 0.3); }
|
||
.bp3-dark .bp3-button[class*="bp3-intent-"] .bp3-button-spinner .bp3-spinner-head{
|
||
stroke:#8a9ba8; }
|
||
.bp3-button:disabled::before,
|
||
.bp3-button:disabled .bp3-icon, .bp3-button:disabled .bp3-icon-standard, .bp3-button:disabled .bp3-icon-large, .bp3-button.bp3-disabled::before,
|
||
.bp3-button.bp3-disabled .bp3-icon, .bp3-button.bp3-disabled .bp3-icon-standard, .bp3-button.bp3-disabled .bp3-icon-large, .bp3-button[class*="bp3-intent-"]::before,
|
||
.bp3-button[class*="bp3-intent-"] .bp3-icon, .bp3-button[class*="bp3-intent-"] .bp3-icon-standard, .bp3-button[class*="bp3-intent-"] .bp3-icon-large{
|
||
color:inherit !important; }
|
||
.bp3-button.bp3-minimal{
|
||
background:none;
|
||
-webkit-box-shadow:none;
|
||
box-shadow:none; }
|
||
.bp3-button.bp3-minimal:hover{
|
||
background:rgba(167, 182, 194, 0.3);
|
||
-webkit-box-shadow:none;
|
||
box-shadow:none;
|
||
color:#182026;
|
||
text-decoration:none; }
|
||
.bp3-button.bp3-minimal:active, .bp3-button.bp3-minimal.bp3-active{
|
||
background:rgba(115, 134, 148, 0.3);
|
||
-webkit-box-shadow:none;
|
||
box-shadow:none;
|
||
color:#182026; }
|
||
.bp3-button.bp3-minimal:disabled, .bp3-button.bp3-minimal:disabled:hover, .bp3-button.bp3-minimal.bp3-disabled, .bp3-button.bp3-minimal.bp3-disabled:hover{
|
||
background:none;
|
||
color:rgba(92, 112, 128, 0.6);
|
||
cursor:not-allowed; }
|
||
.bp3-button.bp3-minimal:disabled.bp3-active, .bp3-button.bp3-minimal:disabled:hover.bp3-active, .bp3-button.bp3-minimal.bp3-disabled.bp3-active, .bp3-button.bp3-minimal.bp3-disabled:hover.bp3-active{
|
||
background:rgba(115, 134, 148, 0.3); }
|
||
.bp3-dark .bp3-button.bp3-minimal{
|
||
background:none;
|
||
-webkit-box-shadow:none;
|
||
box-shadow:none;
|
||
color:inherit; }
|
||
.bp3-dark .bp3-button.bp3-minimal:hover, .bp3-dark .bp3-button.bp3-minimal:active, .bp3-dark .bp3-button.bp3-minimal.bp3-active{
|
||
background:none;
|
||
-webkit-box-shadow:none;
|
||
box-shadow:none; }
|
||
.bp3-dark .bp3-button.bp3-minimal:hover{
|
||
background:rgba(138, 155, 168, 0.15); }
|
||
.bp3-dark .bp3-button.bp3-minimal:active, .bp3-dark .bp3-button.bp3-minimal.bp3-active{
|
||
background:rgba(138, 155, 168, 0.3);
|
||
color:#f5f8fa; }
|
||
.bp3-dark .bp3-button.bp3-minimal:disabled, .bp3-dark .bp3-button.bp3-minimal:disabled:hover, .bp3-dark .bp3-button.bp3-minimal.bp3-disabled, .bp3-dark .bp3-button.bp3-minimal.bp3-disabled:hover{
|
||
background:none;
|
||
color:rgba(167, 182, 194, 0.6);
|
||
cursor:not-allowed; }
|
||
.bp3-dark .bp3-button.bp3-minimal:disabled.bp3-active, .bp3-dark .bp3-button.bp3-minimal:disabled:hover.bp3-active, .bp3-dark .bp3-button.bp3-minimal.bp3-disabled.bp3-active, .bp3-dark .bp3-button.bp3-minimal.bp3-disabled:hover.bp3-active{
|
||
background:rgba(138, 155, 168, 0.3); }
|
||
.bp3-button.bp3-minimal.bp3-intent-primary{
|
||
color:#106ba3; }
|
||
.bp3-button.bp3-minimal.bp3-intent-primary:hover, .bp3-button.bp3-minimal.bp3-intent-primary:active, .bp3-button.bp3-minimal.bp3-intent-primary.bp3-active{
|
||
background:none;
|
||
-webkit-box-shadow:none;
|
||
box-shadow:none;
|
||
color:#106ba3; }
|
||
.bp3-button.bp3-minimal.bp3-intent-primary:hover{
|
||
background:rgba(19, 124, 189, 0.15);
|
||
color:#106ba3; }
|
||
.bp3-button.bp3-minimal.bp3-intent-primary:active, .bp3-button.bp3-minimal.bp3-intent-primary.bp3-active{
|
||
background:rgba(19, 124, 189, 0.3);
|
||
color:#106ba3; }
|
||
.bp3-button.bp3-minimal.bp3-intent-primary:disabled, .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled{
|
||
background:none;
|
||
color:rgba(16, 107, 163, 0.5); }
|
||
.bp3-button.bp3-minimal.bp3-intent-primary:disabled.bp3-active, .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled.bp3-active{
|
||
background:rgba(19, 124, 189, 0.3); }
|
||
.bp3-button.bp3-minimal.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head{
|
||
stroke:#106ba3; }
|
||
.bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary{
|
||
color:#48aff0; }
|
||
.bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:hover{
|
||
background:rgba(19, 124, 189, 0.2);
|
||
color:#48aff0; }
|
||
.bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:active, .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary.bp3-active{
|
||
background:rgba(19, 124, 189, 0.3);
|
||
color:#48aff0; }
|
||
.bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:disabled, .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled{
|
||
background:none;
|
||
color:rgba(72, 175, 240, 0.5); }
|
||
.bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary:disabled.bp3-active, .bp3-dark .bp3-button.bp3-minimal.bp3-intent-primary.bp3-disabled.bp3-active{
|
||
background:rgba(19, 124, 189, 0.3); }
|
||
.bp3-button.bp3-minimal.bp3-intent-success{
|
||
color:#0d8050; }
|
||
.bp3-button.bp3-minimal.bp3-intent-success:hover, .bp3-button.bp3-minimal.bp3-intent-success:active, .bp3-button.bp3-minimal.bp3-intent-success.bp3-active{
|
||
background:none;
|
||
-webkit-box-shadow:none;
|
||
box-shadow:none;
|
||
color:#0d8050; }
|
||
.bp3-button.bp3-minimal.bp3-intent-success:hover{
|
||
background:rgba(15, 153, 96, 0.15);
|
||
color:#0d8050; }
|
||
.bp3-button.bp3-minimal.bp3-intent-success:active, .bp3-button.bp3-minimal.bp3-intent-success.bp3-active{
|
||
background:rgba(15, 153, 96, 0.3);
|
||
color:#0d8050; }
|
||
.bp3-button.bp3-minimal.bp3-intent-success:disabled, .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled{
|
||
background:none;
|
||
color:rgba(13, 128, 80, 0.5); }
|
||
.bp3-button.bp3-minimal.bp3-intent-success:disabled.bp3-active, .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled.bp3-active{
|
||
background:rgba(15, 153, 96, 0.3); }
|
||
.bp3-button.bp3-minimal.bp3-intent-success .bp3-button-spinner .bp3-spinner-head{
|
||
stroke:#0d8050; }
|
||
.bp3-dark .bp3-button.bp3-minimal.bp3-intent-success{
|
||
color:#3dcc91; }
|
||
.bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:hover{
|
||
background:rgba(15, 153, 96, 0.2);
|
||
color:#3dcc91; }
|
||
.bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:active, .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success.bp3-active{
|
||
background:rgba(15, 153, 96, 0.3);
|
||
color:#3dcc91; }
|
||
.bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:disabled, .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled{
|
||
background:none;
|
||
color:rgba(61, 204, 145, 0.5); }
|
||
.bp3-dark .bp3-button.bp3-minimal.bp3-intent-success:disabled.bp3-active, .bp3-dark .bp3-button.bp3-minimal.bp3-intent-success.bp3-disabled.bp3-active{
|
||
background:rgba(15, 153, 96, 0.3); }
|
||
.bp3-button.bp3-minimal.bp3-intent-warning{
|
||
color:#bf7326; }
|
||
.bp3-button.bp3-minimal.bp3-intent-warning:hover, .bp3-button.bp3-minimal.bp3-intent-warning:active, .bp3-button.bp3-minimal.bp3-intent-warning.bp3-active{
|
||
background:none;
|
||
-webkit-box-shadow:none;
|
||
box-shadow:none;
|
||
color:#bf7326; }
|
||
.bp3-button.bp3-minimal.bp3-intent-warning:hover{
|
||
background:rgba(217, 130, 43, 0.15);
|
||
color:#bf7326; }
|
||
.bp3-button.bp3-minimal.bp3-intent-warning:active, .bp3-button.bp3-minimal.bp3-intent-warning.bp3-active{
|
||
background:rgba(217, 130, 43, 0.3);
|
||
color:#bf7326; }
|
||
.bp3-button.bp3-minimal.bp3-intent-warning:disabled, .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled{
|
||
background:none;
|
||
color:rgba(191, 115, 38, 0.5); }
|
||
.bp3-button.bp3-minimal.bp3-intent-warning:disabled.bp3-active, .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled.bp3-active{
|
||
background:rgba(217, 130, 43, 0.3); }
|
||
.bp3-button.bp3-minimal.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head{
|
||
stroke:#bf7326; }
|
||
.bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning{
|
||
color:#ffb366; }
|
||
.bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:hover{
|
||
background:rgba(217, 130, 43, 0.2);
|
||
color:#ffb366; }
|
||
.bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:active, .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning.bp3-active{
|
||
background:rgba(217, 130, 43, 0.3);
|
||
color:#ffb366; }
|
||
.bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:disabled, .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled{
|
||
background:none;
|
||
color:rgba(255, 179, 102, 0.5); }
|
||
.bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning:disabled.bp3-active, .bp3-dark .bp3-button.bp3-minimal.bp3-intent-warning.bp3-disabled.bp3-active{
|
||
background:rgba(217, 130, 43, 0.3); }
|
||
.bp3-button.bp3-minimal.bp3-intent-danger{
|
||
color:#c23030; }
|
||
.bp3-button.bp3-minimal.bp3-intent-danger:hover, .bp3-button.bp3-minimal.bp3-intent-danger:active, .bp3-button.bp3-minimal.bp3-intent-danger.bp3-active{
|
||
background:none;
|
||
-webkit-box-shadow:none;
|
||
box-shadow:none;
|
||
color:#c23030; }
|
||
.bp3-button.bp3-minimal.bp3-intent-danger:hover{
|
||
background:rgba(219, 55, 55, 0.15);
|
||
color:#c23030; }
|
||
.bp3-button.bp3-minimal.bp3-intent-danger:active, .bp3-button.bp3-minimal.bp3-intent-danger.bp3-active{
|
||
background:rgba(219, 55, 55, 0.3);
|
||
color:#c23030; }
|
||
.bp3-button.bp3-minimal.bp3-intent-danger:disabled, .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled{
|
||
background:none;
|
||
color:rgba(194, 48, 48, 0.5); }
|
||
.bp3-button.bp3-minimal.bp3-intent-danger:disabled.bp3-active, .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled.bp3-active{
|
||
background:rgba(219, 55, 55, 0.3); }
|
||
.bp3-button.bp3-minimal.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head{
|
||
stroke:#c23030; }
|
||
.bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger{
|
||
color:#ff7373; }
|
||
.bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:hover{
|
||
background:rgba(219, 55, 55, 0.2);
|
||
color:#ff7373; }
|
||
.bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:active, .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger.bp3-active{
|
||
background:rgba(219, 55, 55, 0.3);
|
||
color:#ff7373; }
|
||
.bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:disabled, .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled{
|
||
background:none;
|
||
color:rgba(255, 115, 115, 0.5); }
|
||
.bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger:disabled.bp3-active, .bp3-dark .bp3-button.bp3-minimal.bp3-intent-danger.bp3-disabled.bp3-active{
|
||
background:rgba(219, 55, 55, 0.3); }
|
||
.bp3-button.bp3-outlined{
|
||
background:none;
|
||
-webkit-box-shadow:none;
|
||
box-shadow:none;
|
||
border:1px solid rgba(24, 32, 38, 0.2);
|
||
-webkit-box-sizing:border-box;
|
||
box-sizing:border-box; }
|
||
.bp3-button.bp3-outlined:hover{
|
||
background:rgba(167, 182, 194, 0.3);
|
||
-webkit-box-shadow:none;
|
||
box-shadow:none;
|
||
color:#182026;
|
||
text-decoration:none; }
|
||
.bp3-button.bp3-outlined:active, .bp3-button.bp3-outlined.bp3-active{
|
||
background:rgba(115, 134, 148, 0.3);
|
||
-webkit-box-shadow:none;
|
||
box-shadow:none;
|
||
color:#182026; }
|
||
.bp3-button.bp3-outlined:disabled, .bp3-button.bp3-outlined:disabled:hover, .bp3-button.bp3-outlined.bp3-disabled, .bp3-button.bp3-outlined.bp3-disabled:hover{
|
||
background:none;
|
||
color:rgba(92, 112, 128, 0.6);
|
||
cursor:not-allowed; }
|
||
.bp3-button.bp3-outlined:disabled.bp3-active, .bp3-button.bp3-outlined:disabled:hover.bp3-active, .bp3-button.bp3-outlined.bp3-disabled.bp3-active, .bp3-button.bp3-outlined.bp3-disabled:hover.bp3-active{
|
||
background:rgba(115, 134, 148, 0.3); }
|
||
.bp3-dark .bp3-button.bp3-outlined{
|
||
background:none;
|
||
-webkit-box-shadow:none;
|
||
box-shadow:none;
|
||
color:inherit; }
|
||
.bp3-dark .bp3-button.bp3-outlined:hover, .bp3-dark .bp3-button.bp3-outlined:active, .bp3-dark .bp3-button.bp3-outlined.bp3-active{
|
||
background:none;
|
||
-webkit-box-shadow:none;
|
||
box-shadow:none; }
|
||
.bp3-dark .bp3-button.bp3-outlined:hover{
|
||
background:rgba(138, 155, 168, 0.15); }
|
||
.bp3-dark .bp3-button.bp3-outlined:active, .bp3-dark .bp3-button.bp3-outlined.bp3-active{
|
||
background:rgba(138, 155, 168, 0.3);
|
||
color:#f5f8fa; }
|
||
.bp3-dark .bp3-button.bp3-outlined:disabled, .bp3-dark .bp3-button.bp3-outlined:disabled:hover, .bp3-dark .bp3-button.bp3-outlined.bp3-disabled, .bp3-dark .bp3-button.bp3-outlined.bp3-disabled:hover{
|
||
background:none;
|
||
color:rgba(167, 182, 194, 0.6);
|
||
cursor:not-allowed; }
|
||
.bp3-dark .bp3-button.bp3-outlined:disabled.bp3-active, .bp3-dark .bp3-button.bp3-outlined:disabled:hover.bp3-active, .bp3-dark .bp3-button.bp3-outlined.bp3-disabled.bp3-active, .bp3-dark .bp3-button.bp3-outlined.bp3-disabled:hover.bp3-active{
|
||
background:rgba(138, 155, 168, 0.3); }
|
||
.bp3-button.bp3-outlined.bp3-intent-primary{
|
||
color:#106ba3; }
|
||
.bp3-button.bp3-outlined.bp3-intent-primary:hover, .bp3-button.bp3-outlined.bp3-intent-primary:active, .bp3-button.bp3-outlined.bp3-intent-primary.bp3-active{
|
||
background:none;
|
||
-webkit-box-shadow:none;
|
||
box-shadow:none;
|
||
color:#106ba3; }
|
||
.bp3-button.bp3-outlined.bp3-intent-primary:hover{
|
||
background:rgba(19, 124, 189, 0.15);
|
||
color:#106ba3; }
|
||
.bp3-button.bp3-outlined.bp3-intent-primary:active, .bp3-button.bp3-outlined.bp3-intent-primary.bp3-active{
|
||
background:rgba(19, 124, 189, 0.3);
|
||
color:#106ba3; }
|
||
.bp3-button.bp3-outlined.bp3-intent-primary:disabled, .bp3-button.bp3-outlined.bp3-intent-primary.bp3-disabled{
|
||
background:none;
|
||
color:rgba(16, 107, 163, 0.5); }
|
||
.bp3-button.bp3-outlined.bp3-intent-primary:disabled.bp3-active, .bp3-button.bp3-outlined.bp3-intent-primary.bp3-disabled.bp3-active{
|
||
background:rgba(19, 124, 189, 0.3); }
|
||
.bp3-button.bp3-outlined.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head{
|
||
stroke:#106ba3; }
|
||
.bp3-dark .bp3-button.bp3-outlined.bp3-intent-primary{
|
||
color:#48aff0; }
|
||
.bp3-dark .bp3-button.bp3-outlined.bp3-intent-primary:hover{
|
||
background:rgba(19, 124, 189, 0.2);
|
||
color:#48aff0; }
|
||
.bp3-dark .bp3-button.bp3-outlined.bp3-intent-primary:active, .bp3-dark .bp3-button.bp3-outlined.bp3-intent-primary.bp3-active{
|
||
background:rgba(19, 124, 189, 0.3);
|
||
color:#48aff0; }
|
||
.bp3-dark .bp3-button.bp3-outlined.bp3-intent-primary:disabled, .bp3-dark .bp3-button.bp3-outlined.bp3-intent-primary.bp3-disabled{
|
||
background:none;
|
||
color:rgba(72, 175, 240, 0.5); }
|
||
.bp3-dark .bp3-button.bp3-outlined.bp3-intent-primary:disabled.bp3-active, .bp3-dark .bp3-button.bp3-outlined.bp3-intent-primary.bp3-disabled.bp3-active{
|
||
background:rgba(19, 124, 189, 0.3); }
|
||
.bp3-button.bp3-outlined.bp3-intent-success{
|
||
color:#0d8050; }
|
||
.bp3-button.bp3-outlined.bp3-intent-success:hover, .bp3-button.bp3-outlined.bp3-intent-success:active, .bp3-button.bp3-outlined.bp3-intent-success.bp3-active{
|
||
background:none;
|
||
-webkit-box-shadow:none;
|
||
box-shadow:none;
|
||
color:#0d8050; }
|
||
.bp3-button.bp3-outlined.bp3-intent-success:hover{
|
||
background:rgba(15, 153, 96, 0.15);
|
||
color:#0d8050; }
|
||
.bp3-button.bp3-outlined.bp3-intent-success:active, .bp3-button.bp3-outlined.bp3-intent-success.bp3-active{
|
||
background:rgba(15, 153, 96, 0.3);
|
||
color:#0d8050; }
|
||
.bp3-button.bp3-outlined.bp3-intent-success:disabled, .bp3-button.bp3-outlined.bp3-intent-success.bp3-disabled{
|
||
background:none;
|
||
color:rgba(13, 128, 80, 0.5); }
|
||
.bp3-button.bp3-outlined.bp3-intent-success:disabled.bp3-active, .bp3-button.bp3-outlined.bp3-intent-success.bp3-disabled.bp3-active{
|
||
background:rgba(15, 153, 96, 0.3); }
|
||
.bp3-button.bp3-outlined.bp3-intent-success .bp3-button-spinner .bp3-spinner-head{
|
||
stroke:#0d8050; }
|
||
.bp3-dark .bp3-button.bp3-outlined.bp3-intent-success{
|
||
color:#3dcc91; }
|
||
.bp3-dark .bp3-button.bp3-outlined.bp3-intent-success:hover{
|
||
background:rgba(15, 153, 96, 0.2);
|
||
color:#3dcc91; }
|
||
.bp3-dark .bp3-button.bp3-outlined.bp3-intent-success:active, .bp3-dark .bp3-button.bp3-outlined.bp3-intent-success.bp3-active{
|
||
background:rgba(15, 153, 96, 0.3);
|
||
color:#3dcc91; }
|
||
.bp3-dark .bp3-button.bp3-outlined.bp3-intent-success:disabled, .bp3-dark .bp3-button.bp3-outlined.bp3-intent-success.bp3-disabled{
|
||
background:none;
|
||
color:rgba(61, 204, 145, 0.5); }
|
||
.bp3-dark .bp3-button.bp3-outlined.bp3-intent-success:disabled.bp3-active, .bp3-dark .bp3-button.bp3-outlined.bp3-intent-success.bp3-disabled.bp3-active{
|
||
background:rgba(15, 153, 96, 0.3); }
|
||
.bp3-button.bp3-outlined.bp3-intent-warning{
|
||
color:#bf7326; }
|
||
.bp3-button.bp3-outlined.bp3-intent-warning:hover, .bp3-button.bp3-outlined.bp3-intent-warning:active, .bp3-button.bp3-outlined.bp3-intent-warning.bp3-active{
|
||
background:none;
|
||
-webkit-box-shadow:none;
|
||
box-shadow:none;
|
||
color:#bf7326; }
|
||
.bp3-button.bp3-outlined.bp3-intent-warning:hover{
|
||
background:rgba(217, 130, 43, 0.15);
|
||
color:#bf7326; }
|
||
.bp3-button.bp3-outlined.bp3-intent-warning:active, .bp3-button.bp3-outlined.bp3-intent-warning.bp3-active{
|
||
background:rgba(217, 130, 43, 0.3);
|
||
color:#bf7326; }
|
||
.bp3-button.bp3-outlined.bp3-intent-warning:disabled, .bp3-button.bp3-outlined.bp3-intent-warning.bp3-disabled{
|
||
background:none;
|
||
color:rgba(191, 115, 38, 0.5); }
|
||
.bp3-button.bp3-outlined.bp3-intent-warning:disabled.bp3-active, .bp3-button.bp3-outlined.bp3-intent-warning.bp3-disabled.bp3-active{
|
||
background:rgba(217, 130, 43, 0.3); }
|
||
.bp3-button.bp3-outlined.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head{
|
||
stroke:#bf7326; }
|
||
.bp3-dark .bp3-button.bp3-outlined.bp3-intent-warning{
|
||
color:#ffb366; }
|
||
.bp3-dark .bp3-button.bp3-outlined.bp3-intent-warning:hover{
|
||
background:rgba(217, 130, 43, 0.2);
|
||
color:#ffb366; }
|
||
.bp3-dark .bp3-button.bp3-outlined.bp3-intent-warning:active, .bp3-dark .bp3-button.bp3-outlined.bp3-intent-warning.bp3-active{
|
||
background:rgba(217, 130, 43, 0.3);
|
||
color:#ffb366; }
|
||
.bp3-dark .bp3-button.bp3-outlined.bp3-intent-warning:disabled, .bp3-dark .bp3-button.bp3-outlined.bp3-intent-warning.bp3-disabled{
|
||
background:none;
|
||
color:rgba(255, 179, 102, 0.5); }
|
||
.bp3-dark .bp3-button.bp3-outlined.bp3-intent-warning:disabled.bp3-active, .bp3-dark .bp3-button.bp3-outlined.bp3-intent-warning.bp3-disabled.bp3-active{
|
||
background:rgba(217, 130, 43, 0.3); }
|
||
.bp3-button.bp3-outlined.bp3-intent-danger{
|
||
color:#c23030; }
|
||
.bp3-button.bp3-outlined.bp3-intent-danger:hover, .bp3-button.bp3-outlined.bp3-intent-danger:active, .bp3-button.bp3-outlined.bp3-intent-danger.bp3-active{
|
||
background:none;
|
||
-webkit-box-shadow:none;
|
||
box-shadow:none;
|
||
color:#c23030; }
|
||
.bp3-button.bp3-outlined.bp3-intent-danger:hover{
|
||
background:rgba(219, 55, 55, 0.15);
|
||
color:#c23030; }
|
||
.bp3-button.bp3-outlined.bp3-intent-danger:active, .bp3-button.bp3-outlined.bp3-intent-danger.bp3-active{
|
||
background:rgba(219, 55, 55, 0.3);
|
||
color:#c23030; }
|
||
.bp3-button.bp3-outlined.bp3-intent-danger:disabled, .bp3-button.bp3-outlined.bp3-intent-danger.bp3-disabled{
|
||
background:none;
|
||
color:rgba(194, 48, 48, 0.5); }
|
||
.bp3-button.bp3-outlined.bp3-intent-danger:disabled.bp3-active, .bp3-button.bp3-outlined.bp3-intent-danger.bp3-disabled.bp3-active{
|
||
background:rgba(219, 55, 55, 0.3); }
|
||
.bp3-button.bp3-outlined.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head{
|
||
stroke:#c23030; }
|
||
.bp3-dark .bp3-button.bp3-outlined.bp3-intent-danger{
|
||
color:#ff7373; }
|
||
.bp3-dark .bp3-button.bp3-outlined.bp3-intent-danger:hover{
|
||
background:rgba(219, 55, 55, 0.2);
|
||
color:#ff7373; }
|
||
.bp3-dark .bp3-button.bp3-outlined.bp3-intent-danger:active, .bp3-dark .bp3-button.bp3-outlined.bp3-intent-danger.bp3-active{
|
||
background:rgba(219, 55, 55, 0.3);
|
||
color:#ff7373; }
|
||
.bp3-dark .bp3-button.bp3-outlined.bp3-intent-danger:disabled, .bp3-dark .bp3-button.bp3-outlined.bp3-intent-danger.bp3-disabled{
|
||
background:none;
|
||
color:rgba(255, 115, 115, 0.5); }
|
||
.bp3-dark .bp3-button.bp3-outlined.bp3-intent-danger:disabled.bp3-active, .bp3-dark .bp3-button.bp3-outlined.bp3-intent-danger.bp3-disabled.bp3-active{
|
||
background:rgba(219, 55, 55, 0.3); }
|
||
.bp3-button.bp3-outlined:disabled, .bp3-button.bp3-outlined.bp3-disabled, .bp3-button.bp3-outlined:disabled:hover, .bp3-button.bp3-outlined.bp3-disabled:hover{
|
||
border-color:rgba(92, 112, 128, 0.1); }
|
||
.bp3-dark .bp3-button.bp3-outlined{
|
||
border-color:rgba(255, 255, 255, 0.4); }
|
||
.bp3-dark .bp3-button.bp3-outlined:disabled, .bp3-dark .bp3-button.bp3-outlined:disabled:hover, .bp3-dark .bp3-button.bp3-outlined.bp3-disabled, .bp3-dark .bp3-button.bp3-outlined.bp3-disabled:hover{
|
||
border-color:rgba(255, 255, 255, 0.2); }
|
||
.bp3-button.bp3-outlined.bp3-intent-primary{
|
||
border-color:rgba(16, 107, 163, 0.6); }
|
||
.bp3-button.bp3-outlined.bp3-intent-primary:disabled, .bp3-button.bp3-outlined.bp3-intent-primary.bp3-disabled{
|
||
border-color:rgba(16, 107, 163, 0.2); }
|
||
.bp3-dark .bp3-button.bp3-outlined.bp3-intent-primary{
|
||
border-color:rgba(72, 175, 240, 0.6); }
|
||
.bp3-dark .bp3-button.bp3-outlined.bp3-intent-primary:disabled, .bp3-dark .bp3-button.bp3-outlined.bp3-intent-primary.bp3-disabled{
|
||
border-color:rgba(72, 175, 240, 0.2); }
|
||
.bp3-button.bp3-outlined.bp3-intent-success{
|
||
border-color:rgba(13, 128, 80, 0.6); }
|
||
.bp3-button.bp3-outlined.bp3-intent-success:disabled, .bp3-button.bp3-outlined.bp3-intent-success.bp3-disabled{
|
||
border-color:rgba(13, 128, 80, 0.2); }
|
||
.bp3-dark .bp3-button.bp3-outlined.bp3-intent-success{
|
||
border-color:rgba(61, 204, 145, 0.6); }
|
||
.bp3-dark .bp3-button.bp3-outlined.bp3-intent-success:disabled, .bp3-dark .bp3-button.bp3-outlined.bp3-intent-success.bp3-disabled{
|
||
border-color:rgba(61, 204, 145, 0.2); }
|
||
.bp3-button.bp3-outlined.bp3-intent-warning{
|
||
border-color:rgba(191, 115, 38, 0.6); }
|
||
.bp3-button.bp3-outlined.bp3-intent-warning:disabled, .bp3-button.bp3-outlined.bp3-intent-warning.bp3-disabled{
|
||
border-color:rgba(191, 115, 38, 0.2); }
|
||
.bp3-dark .bp3-button.bp3-outlined.bp3-intent-warning{
|
||
border-color:rgba(255, 179, 102, 0.6); }
|
||
.bp3-dark .bp3-button.bp3-outlined.bp3-intent-warning:disabled, .bp3-dark .bp3-button.bp3-outlined.bp3-intent-warning.bp3-disabled{
|
||
border-color:rgba(255, 179, 102, 0.2); }
|
||
.bp3-button.bp3-outlined.bp3-intent-danger{
|
||
border-color:rgba(194, 48, 48, 0.6); }
|
||
.bp3-button.bp3-outlined.bp3-intent-danger:disabled, .bp3-button.bp3-outlined.bp3-intent-danger.bp3-disabled{
|
||
border-color:rgba(194, 48, 48, 0.2); }
|
||
.bp3-dark .bp3-button.bp3-outlined.bp3-intent-danger{
|
||
border-color:rgba(255, 115, 115, 0.6); }
|
||
.bp3-dark .bp3-button.bp3-outlined.bp3-intent-danger:disabled, .bp3-dark .bp3-button.bp3-outlined.bp3-intent-danger.bp3-disabled{
|
||
border-color:rgba(255, 115, 115, 0.2); }
|
||
|
||
a.bp3-button{
|
||
text-align:center;
|
||
text-decoration:none;
|
||
-webkit-transition:none;
|
||
transition:none; }
|
||
a.bp3-button, a.bp3-button:hover, a.bp3-button:active{
|
||
color:#182026; }
|
||
a.bp3-button.bp3-disabled{
|
||
color:rgba(92, 112, 128, 0.6); }
|
||
|
||
.bp3-button-text{
|
||
-webkit-box-flex:0;
|
||
-ms-flex:0 1 auto;
|
||
flex:0 1 auto; }
|
||
|
||
.bp3-button.bp3-align-left .bp3-button-text, .bp3-button.bp3-align-right .bp3-button-text,
|
||
.bp3-button-group.bp3-align-left .bp3-button-text,
|
||
.bp3-button-group.bp3-align-right .bp3-button-text{
|
||
-webkit-box-flex:1;
|
||
-ms-flex:1 1 auto;
|
||
flex:1 1 auto; }
|
||
.bp3-button-group{
|
||
display:-webkit-inline-box;
|
||
display:-ms-inline-flexbox;
|
||
display:inline-flex; }
|
||
.bp3-button-group .bp3-button{
|
||
-webkit-box-flex:0;
|
||
-ms-flex:0 0 auto;
|
||
flex:0 0 auto;
|
||
position:relative;
|
||
z-index:4; }
|
||
.bp3-button-group .bp3-button:focus{
|
||
z-index:5; }
|
||
.bp3-button-group .bp3-button:hover{
|
||
z-index:6; }
|
||
.bp3-button-group .bp3-button:active, .bp3-button-group .bp3-button.bp3-active{
|
||
z-index:7; }
|
||
.bp3-button-group .bp3-button:disabled, .bp3-button-group .bp3-button.bp3-disabled{
|
||
z-index:3; }
|
||
.bp3-button-group .bp3-button[class*="bp3-intent-"]{
|
||
z-index:9; }
|
||
.bp3-button-group .bp3-button[class*="bp3-intent-"]:focus{
|
||
z-index:10; }
|
||
.bp3-button-group .bp3-button[class*="bp3-intent-"]:hover{
|
||
z-index:11; }
|
||
.bp3-button-group .bp3-button[class*="bp3-intent-"]:active, .bp3-button-group .bp3-button[class*="bp3-intent-"].bp3-active{
|
||
z-index:12; }
|
||
.bp3-button-group .bp3-button[class*="bp3-intent-"]:disabled, .bp3-button-group .bp3-button[class*="bp3-intent-"].bp3-disabled{
|
||
z-index:8; }
|
||
.bp3-button-group:not(.bp3-minimal) > .bp3-popover-wrapper:not(:first-child) .bp3-button,
|
||
.bp3-button-group:not(.bp3-minimal) > .bp3-button:not(:first-child){
|
||
border-bottom-left-radius:0;
|
||
border-top-left-radius:0; }
|
||
.bp3-button-group:not(.bp3-minimal) > .bp3-popover-wrapper:not(:last-child) .bp3-button,
|
||
.bp3-button-group:not(.bp3-minimal) > .bp3-button:not(:last-child){
|
||
border-bottom-right-radius:0;
|
||
border-top-right-radius:0;
|
||
margin-right:-1px; }
|
||
.bp3-button-group.bp3-minimal .bp3-button{
|
||
background:none;
|
||
-webkit-box-shadow:none;
|
||
box-shadow:none; }
|
||
.bp3-button-group.bp3-minimal .bp3-button:hover{
|
||
background:rgba(167, 182, 194, 0.3);
|
||
-webkit-box-shadow:none;
|
||
box-shadow:none;
|
||
color:#182026;
|
||
text-decoration:none; }
|
||
.bp3-button-group.bp3-minimal .bp3-button:active, .bp3-button-group.bp3-minimal .bp3-button.bp3-active{
|
||
background:rgba(115, 134, 148, 0.3);
|
||
-webkit-box-shadow:none;
|
||
box-shadow:none;
|
||
color:#182026; }
|
||
.bp3-button-group.bp3-minimal .bp3-button:disabled, .bp3-button-group.bp3-minimal .bp3-button:disabled:hover, .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled, .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover{
|
||
background:none;
|
||
color:rgba(92, 112, 128, 0.6);
|
||
cursor:not-allowed; }
|
||
.bp3-button-group.bp3-minimal .bp3-button:disabled.bp3-active, .bp3-button-group.bp3-minimal .bp3-button:disabled:hover.bp3-active, .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled.bp3-active, .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover.bp3-active{
|
||
background:rgba(115, 134, 148, 0.3); }
|
||
.bp3-dark .bp3-button-group.bp3-minimal .bp3-button{
|
||
background:none;
|
||
-webkit-box-shadow:none;
|
||
box-shadow:none;
|
||
color:inherit; }
|
||
.bp3-dark .bp3-button-group.bp3-minimal .bp3-button:hover, .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:active, .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-active{
|
||
background:none;
|
||
-webkit-box-shadow:none;
|
||
box-shadow:none; }
|
||
.bp3-dark .bp3-button-group.bp3-minimal .bp3-button:hover{
|
||
background:rgba(138, 155, 168, 0.15); }
|
||
.bp3-dark .bp3-button-group.bp3-minimal .bp3-button:active, .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-active{
|
||
background:rgba(138, 155, 168, 0.3);
|
||
color:#f5f8fa; }
|
||
.bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled, .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled:hover, .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled, .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover{
|
||
background:none;
|
||
color:rgba(167, 182, 194, 0.6);
|
||
cursor:not-allowed; }
|
||
.bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled.bp3-active, .bp3-dark .bp3-button-group.bp3-minimal .bp3-button:disabled:hover.bp3-active, .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled.bp3-active, .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-disabled:hover.bp3-active{
|
||
background:rgba(138, 155, 168, 0.3); }
|
||
.bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary{
|
||
color:#106ba3; }
|
||
.bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:hover, .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:active, .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-active{
|
||
background:none;
|
||
-webkit-box-shadow:none;
|
||
box-shadow:none;
|
||
color:#106ba3; }
|
||
.bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:hover{
|
||
background:rgba(19, 124, 189, 0.15);
|
||
color:#106ba3; }
|
||
.bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:active, .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-active{
|
||
background:rgba(19, 124, 189, 0.3);
|
||
color:#106ba3; }
|
||
.bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled, .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled{
|
||
background:none;
|
||
color:rgba(16, 107, 163, 0.5); }
|
||
.bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled.bp3-active, .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled.bp3-active{
|
||
background:rgba(19, 124, 189, 0.3); }
|
||
.bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head{
|
||
stroke:#106ba3; }
|
||
.bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary{
|
||
color:#48aff0; }
|
||
.bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:hover{
|
||
background:rgba(19, 124, 189, 0.2);
|
||
color:#48aff0; }
|
||
.bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:active, .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-active{
|
||
background:rgba(19, 124, 189, 0.3);
|
||
color:#48aff0; }
|
||
.bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled, .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled{
|
||
background:none;
|
||
color:rgba(72, 175, 240, 0.5); }
|
||
.bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary:disabled.bp3-active, .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-primary.bp3-disabled.bp3-active{
|
||
background:rgba(19, 124, 189, 0.3); }
|
||
.bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success{
|
||
color:#0d8050; }
|
||
.bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:hover, .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:active, .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-active{
|
||
background:none;
|
||
-webkit-box-shadow:none;
|
||
box-shadow:none;
|
||
color:#0d8050; }
|
||
.bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:hover{
|
||
background:rgba(15, 153, 96, 0.15);
|
||
color:#0d8050; }
|
||
.bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:active, .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-active{
|
||
background:rgba(15, 153, 96, 0.3);
|
||
color:#0d8050; }
|
||
.bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled, .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled{
|
||
background:none;
|
||
color:rgba(13, 128, 80, 0.5); }
|
||
.bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled.bp3-active, .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled.bp3-active{
|
||
background:rgba(15, 153, 96, 0.3); }
|
||
.bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success .bp3-button-spinner .bp3-spinner-head{
|
||
stroke:#0d8050; }
|
||
.bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success{
|
||
color:#3dcc91; }
|
||
.bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:hover{
|
||
background:rgba(15, 153, 96, 0.2);
|
||
color:#3dcc91; }
|
||
.bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:active, .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-active{
|
||
background:rgba(15, 153, 96, 0.3);
|
||
color:#3dcc91; }
|
||
.bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled, .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled{
|
||
background:none;
|
||
color:rgba(61, 204, 145, 0.5); }
|
||
.bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success:disabled.bp3-active, .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-success.bp3-disabled.bp3-active{
|
||
background:rgba(15, 153, 96, 0.3); }
|
||
.bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning{
|
||
color:#bf7326; }
|
||
.bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:hover, .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:active, .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-active{
|
||
background:none;
|
||
-webkit-box-shadow:none;
|
||
box-shadow:none;
|
||
color:#bf7326; }
|
||
.bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:hover{
|
||
background:rgba(217, 130, 43, 0.15);
|
||
color:#bf7326; }
|
||
.bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:active, .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-active{
|
||
background:rgba(217, 130, 43, 0.3);
|
||
color:#bf7326; }
|
||
.bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled, .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled{
|
||
background:none;
|
||
color:rgba(191, 115, 38, 0.5); }
|
||
.bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled.bp3-active, .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled.bp3-active{
|
||
background:rgba(217, 130, 43, 0.3); }
|
||
.bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head{
|
||
stroke:#bf7326; }
|
||
.bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning{
|
||
color:#ffb366; }
|
||
.bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:hover{
|
||
background:rgba(217, 130, 43, 0.2);
|
||
color:#ffb366; }
|
||
.bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:active, .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-active{
|
||
background:rgba(217, 130, 43, 0.3);
|
||
color:#ffb366; }
|
||
.bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled, .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled{
|
||
background:none;
|
||
color:rgba(255, 179, 102, 0.5); }
|
||
.bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning:disabled.bp3-active, .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-warning.bp3-disabled.bp3-active{
|
||
background:rgba(217, 130, 43, 0.3); }
|
||
.bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger{
|
||
color:#c23030; }
|
||
.bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:hover, .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:active, .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-active{
|
||
background:none;
|
||
-webkit-box-shadow:none;
|
||
box-shadow:none;
|
||
color:#c23030; }
|
||
.bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:hover{
|
||
background:rgba(219, 55, 55, 0.15);
|
||
color:#c23030; }
|
||
.bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:active, .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-active{
|
||
background:rgba(219, 55, 55, 0.3);
|
||
color:#c23030; }
|
||
.bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled, .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled{
|
||
background:none;
|
||
color:rgba(194, 48, 48, 0.5); }
|
||
.bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled.bp3-active, .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled.bp3-active{
|
||
background:rgba(219, 55, 55, 0.3); }
|
||
.bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head{
|
||
stroke:#c23030; }
|
||
.bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger{
|
||
color:#ff7373; }
|
||
.bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:hover{
|
||
background:rgba(219, 55, 55, 0.2);
|
||
color:#ff7373; }
|
||
.bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:active, .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-active{
|
||
background:rgba(219, 55, 55, 0.3);
|
||
color:#ff7373; }
|
||
.bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled, .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled{
|
||
background:none;
|
||
color:rgba(255, 115, 115, 0.5); }
|
||
.bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger:disabled.bp3-active, .bp3-dark .bp3-button-group.bp3-minimal .bp3-button.bp3-intent-danger.bp3-disabled.bp3-active{
|
||
background:rgba(219, 55, 55, 0.3); }
|
||
.bp3-button-group .bp3-popover-wrapper,
|
||
.bp3-button-group .bp3-popover-target{
|
||
display:-webkit-box;
|
||
display:-ms-flexbox;
|
||
display:flex;
|
||
-webkit-box-flex:1;
|
||
-ms-flex:1 1 auto;
|
||
flex:1 1 auto; }
|
||
.bp3-button-group.bp3-fill{
|
||
display:-webkit-box;
|
||
display:-ms-flexbox;
|
||
display:flex;
|
||
width:100%; }
|
||
.bp3-button-group .bp3-button.bp3-fill,
|
||
.bp3-button-group.bp3-fill .bp3-button:not(.bp3-fixed){
|
||
-webkit-box-flex:1;
|
||
-ms-flex:1 1 auto;
|
||
flex:1 1 auto; }
|
||
.bp3-button-group.bp3-vertical{
|
||
-webkit-box-align:stretch;
|
||
-ms-flex-align:stretch;
|
||
align-items:stretch;
|
||
-webkit-box-orient:vertical;
|
||
-webkit-box-direction:normal;
|
||
-ms-flex-direction:column;
|
||
flex-direction:column;
|
||
vertical-align:top; }
|
||
.bp3-button-group.bp3-vertical.bp3-fill{
|
||
height:100%;
|
||
width:unset; }
|
||
.bp3-button-group.bp3-vertical .bp3-button{
|
||
margin-right:0 !important;
|
||
width:100%; }
|
||
.bp3-button-group.bp3-vertical:not(.bp3-minimal) > .bp3-popover-wrapper:first-child .bp3-button,
|
||
.bp3-button-group.bp3-vertical:not(.bp3-minimal) > .bp3-button:first-child{
|
||
border-radius:3px 3px 0 0; }
|
||
.bp3-button-group.bp3-vertical:not(.bp3-minimal) > .bp3-popover-wrapper:last-child .bp3-button,
|
||
.bp3-button-group.bp3-vertical:not(.bp3-minimal) > .bp3-button:last-child{
|
||
border-radius:0 0 3px 3px; }
|
||
.bp3-button-group.bp3-vertical:not(.bp3-minimal) > .bp3-popover-wrapper:not(:last-child) .bp3-button,
|
||
.bp3-button-group.bp3-vertical:not(.bp3-minimal) > .bp3-button:not(:last-child){
|
||
margin-bottom:-1px; }
|
||
.bp3-button-group.bp3-align-left .bp3-button{
|
||
text-align:left; }
|
||
.bp3-dark .bp3-button-group:not(.bp3-minimal) > .bp3-popover-wrapper:not(:last-child) .bp3-button,
|
||
.bp3-dark .bp3-button-group:not(.bp3-minimal) > .bp3-button:not(:last-child){
|
||
margin-right:1px; }
|
||
.bp3-dark .bp3-button-group.bp3-vertical > .bp3-popover-wrapper:not(:last-child) .bp3-button,
|
||
.bp3-dark .bp3-button-group.bp3-vertical > .bp3-button:not(:last-child){
|
||
margin-bottom:1px; }
|
||
.bp3-callout{
|
||
font-size:14px;
|
||
line-height:1.5;
|
||
background-color:rgba(138, 155, 168, 0.15);
|
||
border-radius:3px;
|
||
padding:10px 12px 9px;
|
||
position:relative;
|
||
width:100%; }
|
||
.bp3-callout[class*="bp3-icon-"]{
|
||
padding-left:40px; }
|
||
.bp3-callout[class*="bp3-icon-"]::before{
|
||
font-family:"Icons20", sans-serif;
|
||
font-size:20px;
|
||
font-style:normal;
|
||
font-weight:400;
|
||
line-height:1;
|
||
-moz-osx-font-smoothing:grayscale;
|
||
-webkit-font-smoothing:antialiased;
|
||
color:#5c7080;
|
||
left:10px;
|
||
position:absolute;
|
||
top:10px; }
|
||
.bp3-callout.bp3-callout-icon{
|
||
padding-left:40px; }
|
||
.bp3-callout.bp3-callout-icon > .bp3-icon:first-child{
|
||
color:#5c7080;
|
||
left:10px;
|
||
position:absolute;
|
||
top:10px; }
|
||
.bp3-callout .bp3-heading{
|
||
line-height:20px;
|
||
margin-bottom:5px;
|
||
margin-top:0; }
|
||
.bp3-callout .bp3-heading:last-child{
|
||
margin-bottom:0; }
|
||
.bp3-dark .bp3-callout{
|
||
background-color:rgba(138, 155, 168, 0.2); }
|
||
.bp3-dark .bp3-callout[class*="bp3-icon-"]::before{
|
||
color:#a7b6c2; }
|
||
.bp3-callout.bp3-intent-primary{
|
||
background-color:rgba(19, 124, 189, 0.15); }
|
||
.bp3-callout.bp3-intent-primary[class*="bp3-icon-"]::before,
|
||
.bp3-callout.bp3-intent-primary > .bp3-icon:first-child,
|
||
.bp3-callout.bp3-intent-primary .bp3-heading{
|
||
color:#106ba3; }
|
||
.bp3-dark .bp3-callout.bp3-intent-primary{
|
||
background-color:rgba(19, 124, 189, 0.25); }
|
||
.bp3-dark .bp3-callout.bp3-intent-primary[class*="bp3-icon-"]::before,
|
||
.bp3-dark .bp3-callout.bp3-intent-primary > .bp3-icon:first-child,
|
||
.bp3-dark .bp3-callout.bp3-intent-primary .bp3-heading{
|
||
color:#48aff0; }
|
||
.bp3-callout.bp3-intent-success{
|
||
background-color:rgba(15, 153, 96, 0.15); }
|
||
.bp3-callout.bp3-intent-success[class*="bp3-icon-"]::before,
|
||
.bp3-callout.bp3-intent-success > .bp3-icon:first-child,
|
||
.bp3-callout.bp3-intent-success .bp3-heading{
|
||
color:#0d8050; }
|
||
.bp3-dark .bp3-callout.bp3-intent-success{
|
||
background-color:rgba(15, 153, 96, 0.25); }
|
||
.bp3-dark .bp3-callout.bp3-intent-success[class*="bp3-icon-"]::before,
|
||
.bp3-dark .bp3-callout.bp3-intent-success > .bp3-icon:first-child,
|
||
.bp3-dark .bp3-callout.bp3-intent-success .bp3-heading{
|
||
color:#3dcc91; }
|
||
.bp3-callout.bp3-intent-warning{
|
||
background-color:rgba(217, 130, 43, 0.15); }
|
||
.bp3-callout.bp3-intent-warning[class*="bp3-icon-"]::before,
|
||
.bp3-callout.bp3-intent-warning > .bp3-icon:first-child,
|
||
.bp3-callout.bp3-intent-warning .bp3-heading{
|
||
color:#bf7326; }
|
||
.bp3-dark .bp3-callout.bp3-intent-warning{
|
||
background-color:rgba(217, 130, 43, 0.25); }
|
||
.bp3-dark .bp3-callout.bp3-intent-warning[class*="bp3-icon-"]::before,
|
||
.bp3-dark .bp3-callout.bp3-intent-warning > .bp3-icon:first-child,
|
||
.bp3-dark .bp3-callout.bp3-intent-warning .bp3-heading{
|
||
color:#ffb366; }
|
||
.bp3-callout.bp3-intent-danger{
|
||
background-color:rgba(219, 55, 55, 0.15); }
|
||
.bp3-callout.bp3-intent-danger[class*="bp3-icon-"]::before,
|
||
.bp3-callout.bp3-intent-danger > .bp3-icon:first-child,
|
||
.bp3-callout.bp3-intent-danger .bp3-heading{
|
||
color:#c23030; }
|
||
.bp3-dark .bp3-callout.bp3-intent-danger{
|
||
background-color:rgba(219, 55, 55, 0.25); }
|
||
.bp3-dark .bp3-callout.bp3-intent-danger[class*="bp3-icon-"]::before,
|
||
.bp3-dark .bp3-callout.bp3-intent-danger > .bp3-icon:first-child,
|
||
.bp3-dark .bp3-callout.bp3-intent-danger .bp3-heading{
|
||
color:#ff7373; }
|
||
.bp3-running-text .bp3-callout{
|
||
margin:20px 0; }
|
||
.bp3-card{
|
||
background-color:#ffffff;
|
||
border-radius:3px;
|
||
-webkit-box-shadow:0 0 0 1px rgba(16, 22, 26, 0.15), 0 0 0 rgba(16, 22, 26, 0), 0 0 0 rgba(16, 22, 26, 0);
|
||
box-shadow:0 0 0 1px rgba(16, 22, 26, 0.15), 0 0 0 rgba(16, 22, 26, 0), 0 0 0 rgba(16, 22, 26, 0);
|
||
padding:20px;
|
||
-webkit-transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9), -webkit-box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9);
|
||
transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9), -webkit-box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9);
|
||
transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9), box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9);
|
||
transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9), box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9), -webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9), -webkit-box-shadow 200ms cubic-bezier(0.4, 1, 0.75, 0.9); }
|
||
.bp3-card.bp3-dark,
|
||
.bp3-dark .bp3-card{
|
||
background-color:#30404d;
|
||
-webkit-box-shadow:0 0 0 1px rgba(16, 22, 26, 0.4), 0 0 0 rgba(16, 22, 26, 0), 0 0 0 rgba(16, 22, 26, 0);
|
||
box-shadow:0 0 0 1px rgba(16, 22, 26, 0.4), 0 0 0 rgba(16, 22, 26, 0), 0 0 0 rgba(16, 22, 26, 0); }
|
||
|
||
.bp3-elevation-0{
|
||
-webkit-box-shadow:0 0 0 1px rgba(16, 22, 26, 0.15), 0 0 0 rgba(16, 22, 26, 0), 0 0 0 rgba(16, 22, 26, 0);
|
||
box-shadow:0 0 0 1px rgba(16, 22, 26, 0.15), 0 0 0 rgba(16, 22, 26, 0), 0 0 0 rgba(16, 22, 26, 0); }
|
||
.bp3-elevation-0.bp3-dark,
|
||
.bp3-dark .bp3-elevation-0{
|
||
-webkit-box-shadow:0 0 0 1px rgba(16, 22, 26, 0.4), 0 0 0 rgba(16, 22, 26, 0), 0 0 0 rgba(16, 22, 26, 0);
|
||
box-shadow:0 0 0 1px rgba(16, 22, 26, 0.4), 0 0 0 rgba(16, 22, 26, 0), 0 0 0 rgba(16, 22, 26, 0); }
|
||
|
||
.bp3-elevation-1{
|
||
-webkit-box-shadow:0 0 0 1px rgba(16, 22, 26, 0.1), 0 0 0 rgba(16, 22, 26, 0), 0 1px 1px rgba(16, 22, 26, 0.2);
|
||
box-shadow:0 0 0 1px rgba(16, 22, 26, 0.1), 0 0 0 rgba(16, 22, 26, 0), 0 1px 1px rgba(16, 22, 26, 0.2); }
|
||
.bp3-elevation-1.bp3-dark,
|
||
.bp3-dark .bp3-elevation-1{
|
||
-webkit-box-shadow:0 0 0 1px rgba(16, 22, 26, 0.2), 0 0 0 rgba(16, 22, 26, 0), 0 1px 1px rgba(16, 22, 26, 0.4);
|
||
box-shadow:0 0 0 1px rgba(16, 22, 26, 0.2), 0 0 0 rgba(16, 22, 26, 0), 0 1px 1px rgba(16, 22, 26, 0.4); }
|
||
|
||
.bp3-elevation-2{
|
||
-webkit-box-shadow:0 0 0 1px rgba(16, 22, 26, 0.1), 0 1px 1px rgba(16, 22, 26, 0.2), 0 2px 6px rgba(16, 22, 26, 0.2);
|
||
box-shadow:0 0 0 1px rgba(16, 22, 26, 0.1), 0 1px 1px rgba(16, 22, 26, 0.2), 0 2px 6px rgba(16, 22, 26, 0.2); }
|
||
.bp3-elevation-2.bp3-dark,
|
||
.bp3-dark .bp3-elevation-2{
|
||
-webkit-box-shadow:0 0 0 1px rgba(16, 22, 26, 0.2), 0 1px 1px rgba(16, 22, 26, 0.4), 0 2px 6px rgba(16, 22, 26, 0.4);
|
||
box-shadow:0 0 0 1px rgba(16, 22, 26, 0.2), 0 1px 1px rgba(16, 22, 26, 0.4), 0 2px 6px rgba(16, 22, 26, 0.4); }
|
||
|
||
.bp3-elevation-3{
|
||
-webkit-box-shadow:0 0 0 1px rgba(16, 22, 26, 0.1), 0 2px 4px rgba(16, 22, 26, 0.2), 0 8px 24px rgba(16, 22, 26, 0.2);
|
||
box-shadow:0 0 0 1px rgba(16, 22, 26, 0.1), 0 2px 4px rgba(16, 22, 26, 0.2), 0 8px 24px rgba(16, 22, 26, 0.2); }
|
||
.bp3-elevation-3.bp3-dark,
|
||
.bp3-dark .bp3-elevation-3{
|
||
-webkit-box-shadow:0 0 0 1px rgba(16, 22, 26, 0.2), 0 2px 4px rgba(16, 22, 26, 0.4), 0 8px 24px rgba(16, 22, 26, 0.4);
|
||
box-shadow:0 0 0 1px rgba(16, 22, 26, 0.2), 0 2px 4px rgba(16, 22, 26, 0.4), 0 8px 24px rgba(16, 22, 26, 0.4); }
|
||
|
||
.bp3-elevation-4{
|
||
-webkit-box-shadow:0 0 0 1px rgba(16, 22, 26, 0.1), 0 4px 8px rgba(16, 22, 26, 0.2), 0 18px 46px 6px rgba(16, 22, 26, 0.2);
|
||
box-shadow:0 0 0 1px rgba(16, 22, 26, 0.1), 0 4px 8px rgba(16, 22, 26, 0.2), 0 18px 46px 6px rgba(16, 22, 26, 0.2); }
|
||
.bp3-elevation-4.bp3-dark,
|
||
.bp3-dark .bp3-elevation-4{
|
||
-webkit-box-shadow:0 0 0 1px rgba(16, 22, 26, 0.2), 0 4px 8px rgba(16, 22, 26, 0.4), 0 18px 46px 6px rgba(16, 22, 26, 0.4);
|
||
box-shadow:0 0 0 1px rgba(16, 22, 26, 0.2), 0 4px 8px rgba(16, 22, 26, 0.4), 0 18px 46px 6px rgba(16, 22, 26, 0.4); }
|
||
|
||
.bp3-card.bp3-interactive:hover{
|
||
-webkit-box-shadow:0 0 0 1px rgba(16, 22, 26, 0.1), 0 2px 4px rgba(16, 22, 26, 0.2), 0 8px 24px rgba(16, 22, 26, 0.2);
|
||
box-shadow:0 0 0 1px rgba(16, 22, 26, 0.1), 0 2px 4px rgba(16, 22, 26, 0.2), 0 8px 24px rgba(16, 22, 26, 0.2);
|
||
cursor:pointer; }
|
||
.bp3-card.bp3-interactive:hover.bp3-dark,
|
||
.bp3-dark .bp3-card.bp3-interactive:hover{
|
||
-webkit-box-shadow:0 0 0 1px rgba(16, 22, 26, 0.2), 0 2px 4px rgba(16, 22, 26, 0.4), 0 8px 24px rgba(16, 22, 26, 0.4);
|
||
box-shadow:0 0 0 1px rgba(16, 22, 26, 0.2), 0 2px 4px rgba(16, 22, 26, 0.4), 0 8px 24px rgba(16, 22, 26, 0.4); }
|
||
|
||
.bp3-card.bp3-interactive:active{
|
||
-webkit-box-shadow:0 0 0 1px rgba(16, 22, 26, 0.1), 0 0 0 rgba(16, 22, 26, 0), 0 1px 1px rgba(16, 22, 26, 0.2);
|
||
box-shadow:0 0 0 1px rgba(16, 22, 26, 0.1), 0 0 0 rgba(16, 22, 26, 0), 0 1px 1px rgba(16, 22, 26, 0.2);
|
||
opacity:0.9;
|
||
-webkit-transition-duration:0;
|
||
transition-duration:0; }
|
||
.bp3-card.bp3-interactive:active.bp3-dark,
|
||
.bp3-dark .bp3-card.bp3-interactive:active{
|
||
-webkit-box-shadow:0 0 0 1px rgba(16, 22, 26, 0.2), 0 0 0 rgba(16, 22, 26, 0), 0 1px 1px rgba(16, 22, 26, 0.4);
|
||
box-shadow:0 0 0 1px rgba(16, 22, 26, 0.2), 0 0 0 rgba(16, 22, 26, 0), 0 1px 1px rgba(16, 22, 26, 0.4); }
|
||
|
||
.bp3-collapse{
|
||
height:0;
|
||
overflow-y:hidden;
|
||
-webkit-transition:height 200ms cubic-bezier(0.4, 1, 0.75, 0.9);
|
||
transition:height 200ms cubic-bezier(0.4, 1, 0.75, 0.9); }
|
||
.bp3-collapse .bp3-collapse-body{
|
||
-webkit-transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);
|
||
transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);
|
||
transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);
|
||
transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9), -webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9); }
|
||
.bp3-collapse .bp3-collapse-body[aria-hidden="true"]{
|
||
display:none; }
|
||
|
||
.bp3-context-menu .bp3-popover-target{
|
||
display:block; }
|
||
|
||
.bp3-context-menu-popover-target{
|
||
position:fixed; }
|
||
|
||
.bp3-divider{
|
||
border-bottom:1px solid rgba(16, 22, 26, 0.15);
|
||
border-right:1px solid rgba(16, 22, 26, 0.15);
|
||
margin:5px; }
|
||
.bp3-dark .bp3-divider{
|
||
border-color:rgba(16, 22, 26, 0.4); }
|
||
.bp3-dialog-container{
|
||
opacity:1;
|
||
-webkit-transform:scale(1);
|
||
transform:scale(1);
|
||
-webkit-box-align:center;
|
||
-ms-flex-align:center;
|
||
align-items:center;
|
||
display:-webkit-box;
|
||
display:-ms-flexbox;
|
||
display:flex;
|
||
-webkit-box-pack:center;
|
||
-ms-flex-pack:center;
|
||
justify-content:center;
|
||
min-height:100%;
|
||
pointer-events:none;
|
||
-webkit-user-select:none;
|
||
-moz-user-select:none;
|
||
-ms-user-select:none;
|
||
user-select:none;
|
||
width:100%; }
|
||
.bp3-dialog-container.bp3-overlay-enter > .bp3-dialog, .bp3-dialog-container.bp3-overlay-appear > .bp3-dialog{
|
||
opacity:0;
|
||
-webkit-transform:scale(0.5);
|
||
transform:scale(0.5); }
|
||
.bp3-dialog-container.bp3-overlay-enter-active > .bp3-dialog, .bp3-dialog-container.bp3-overlay-appear-active > .bp3-dialog{
|
||
opacity:1;
|
||
-webkit-transform:scale(1);
|
||
transform:scale(1);
|
||
-webkit-transition-delay:0;
|
||
transition-delay:0;
|
||
-webkit-transition-duration:300ms;
|
||
transition-duration:300ms;
|
||
-webkit-transition-property:opacity, -webkit-transform;
|
||
transition-property:opacity, -webkit-transform;
|
||
transition-property:opacity, transform;
|
||
transition-property:opacity, transform, -webkit-transform;
|
||
-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);
|
||
transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11); }
|
||
.bp3-dialog-container.bp3-overlay-exit > .bp3-dialog{
|
||
opacity:1;
|
||
-webkit-transform:scale(1);
|
||
transform:scale(1); }
|
||
.bp3-dialog-container.bp3-overlay-exit-active > .bp3-dialog{
|
||
opacity:0;
|
||
-webkit-transform:scale(0.5);
|
||
transform:scale(0.5);
|
||
-webkit-transition-delay:0;
|
||
transition-delay:0;
|
||
-webkit-transition-duration:300ms;
|
||
transition-duration:300ms;
|
||
-webkit-transition-property:opacity, -webkit-transform;
|
||
transition-property:opacity, -webkit-transform;
|
||
transition-property:opacity, transform;
|
||
transition-property:opacity, transform, -webkit-transform;
|
||
-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);
|
||
transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11); }
|
||
|
||
.bp3-dialog{
|
||
background:#ebf1f5;
|
||
border-radius:6px;
|
||
-webkit-box-shadow:0 0 0 1px rgba(16, 22, 26, 0.1), 0 4px 8px rgba(16, 22, 26, 0.2), 0 18px 46px 6px rgba(16, 22, 26, 0.2);
|
||
box-shadow:0 0 0 1px rgba(16, 22, 26, 0.1), 0 4px 8px rgba(16, 22, 26, 0.2), 0 18px 46px 6px rgba(16, 22, 26, 0.2);
|
||
display:-webkit-box;
|
||
display:-ms-flexbox;
|
||
display:flex;
|
||
-webkit-box-orient:vertical;
|
||
-webkit-box-direction:normal;
|
||
-ms-flex-direction:column;
|
||
flex-direction:column;
|
||
margin:30px 0;
|
||
padding-bottom:20px;
|
||
pointer-events:all;
|
||
-webkit-user-select:text;
|
||
-moz-user-select:text;
|
||
-ms-user-select:text;
|
||
user-select:text;
|
||
width:500px; }
|
||
.bp3-dialog:focus{
|
||
outline:0; }
|
||
.bp3-dialog.bp3-dark,
|
||
.bp3-dark .bp3-dialog{
|
||
background:#293742;
|
||
-webkit-box-shadow:0 0 0 1px rgba(16, 22, 26, 0.2), 0 4px 8px rgba(16, 22, 26, 0.4), 0 18px 46px 6px rgba(16, 22, 26, 0.4);
|
||
box-shadow:0 0 0 1px rgba(16, 22, 26, 0.2), 0 4px 8px rgba(16, 22, 26, 0.4), 0 18px 46px 6px rgba(16, 22, 26, 0.4);
|
||
color:#f5f8fa; }
|
||
|
||
.bp3-dialog-header{
|
||
-webkit-box-align:center;
|
||
-ms-flex-align:center;
|
||
align-items:center;
|
||
background:#ffffff;
|
||
border-radius:6px 6px 0 0;
|
||
-webkit-box-shadow:0 1px 0 rgba(16, 22, 26, 0.15);
|
||
box-shadow:0 1px 0 rgba(16, 22, 26, 0.15);
|
||
display:-webkit-box;
|
||
display:-ms-flexbox;
|
||
display:flex;
|
||
-webkit-box-flex:0;
|
||
-ms-flex:0 0 auto;
|
||
flex:0 0 auto;
|
||
min-height:40px;
|
||
padding-left:20px;
|
||
padding-right:5px;
|
||
z-index:30; }
|
||
.bp3-dialog-header .bp3-icon-large,
|
||
.bp3-dialog-header .bp3-icon{
|
||
color:#5c7080;
|
||
-webkit-box-flex:0;
|
||
-ms-flex:0 0 auto;
|
||
flex:0 0 auto;
|
||
margin-right:10px; }
|
||
.bp3-dialog-header .bp3-heading{
|
||
overflow:hidden;
|
||
text-overflow:ellipsis;
|
||
white-space:nowrap;
|
||
word-wrap:normal;
|
||
-webkit-box-flex:1;
|
||
-ms-flex:1 1 auto;
|
||
flex:1 1 auto;
|
||
line-height:inherit;
|
||
margin:0; }
|
||
.bp3-dialog-header .bp3-heading:last-child{
|
||
margin-right:20px; }
|
||
.bp3-dark .bp3-dialog-header{
|
||
background:#30404d;
|
||
-webkit-box-shadow:0 1px 0 rgba(16, 22, 26, 0.4);
|
||
box-shadow:0 1px 0 rgba(16, 22, 26, 0.4); }
|
||
.bp3-dark .bp3-dialog-header .bp3-icon-large,
|
||
.bp3-dark .bp3-dialog-header .bp3-icon{
|
||
color:#a7b6c2; }
|
||
|
||
.bp3-dialog-body{
|
||
-webkit-box-flex:1;
|
||
-ms-flex:1 1 auto;
|
||
flex:1 1 auto;
|
||
line-height:18px;
|
||
margin:20px; }
|
||
|
||
.bp3-dialog-footer{
|
||
-webkit-box-flex:0;
|
||
-ms-flex:0 0 auto;
|
||
flex:0 0 auto;
|
||
margin:0 20px; }
|
||
|
||
.bp3-dialog-footer-actions{
|
||
display:-webkit-box;
|
||
display:-ms-flexbox;
|
||
display:flex;
|
||
-webkit-box-pack:end;
|
||
-ms-flex-pack:end;
|
||
justify-content:flex-end; }
|
||
.bp3-dialog-footer-actions .bp3-button{
|
||
margin-left:10px; }
|
||
.bp3-multistep-dialog-panels{
|
||
display:-webkit-box;
|
||
display:-ms-flexbox;
|
||
display:flex; }
|
||
|
||
.bp3-multistep-dialog-left-panel{
|
||
display:-webkit-box;
|
||
display:-ms-flexbox;
|
||
display:flex;
|
||
-webkit-box-flex:1;
|
||
-ms-flex:1;
|
||
flex:1;
|
||
-webkit-box-orient:vertical;
|
||
-webkit-box-direction:normal;
|
||
-ms-flex-direction:column;
|
||
flex-direction:column; }
|
||
.bp3-dark .bp3-multistep-dialog-left-panel{
|
||
background:#202b33; }
|
||
|
||
.bp3-multistep-dialog-right-panel{
|
||
background-color:#f5f8fa;
|
||
border-left:1px solid rgba(16, 22, 26, 0.15);
|
||
border-radius:0 0 6px 0;
|
||
-webkit-box-flex:3;
|
||
-ms-flex:3;
|
||
flex:3;
|
||
min-width:0; }
|
||
.bp3-dark .bp3-multistep-dialog-right-panel{
|
||
background-color:#293742;
|
||
border-left:1px solid rgba(16, 22, 26, 0.4); }
|
||
|
||
.bp3-multistep-dialog-footer{
|
||
background-color:#ffffff;
|
||
border-radius:0 0 6px 0;
|
||
border-top:1px solid rgba(16, 22, 26, 0.15);
|
||
padding:10px; }
|
||
.bp3-dark .bp3-multistep-dialog-footer{
|
||
background:#30404d;
|
||
border-top:1px solid rgba(16, 22, 26, 0.4); }
|
||
|
||
.bp3-dialog-step-container{
|
||
background-color:#f5f8fa;
|
||
border-bottom:1px solid rgba(16, 22, 26, 0.15); }
|
||
.bp3-dark .bp3-dialog-step-container{
|
||
background:#293742;
|
||
border-bottom:1px solid rgba(16, 22, 26, 0.4); }
|
||
.bp3-dialog-step-container.bp3-dialog-step-viewed{
|
||
background-color:#ffffff; }
|
||
.bp3-dark .bp3-dialog-step-container.bp3-dialog-step-viewed{
|
||
background:#30404d; }
|
||
|
||
.bp3-dialog-step{
|
||
-webkit-box-align:center;
|
||
-ms-flex-align:center;
|
||
align-items:center;
|
||
background-color:#f5f8fa;
|
||
border-radius:6px;
|
||
cursor:not-allowed;
|
||
display:-webkit-box;
|
||
display:-ms-flexbox;
|
||
display:flex;
|
||
margin:4px;
|
||
padding:6px 14px; }
|
||
.bp3-dark .bp3-dialog-step{
|
||
background:#293742; }
|
||
.bp3-dialog-step-viewed .bp3-dialog-step{
|
||
background-color:#ffffff;
|
||
cursor:pointer; }
|
||
.bp3-dark .bp3-dialog-step-viewed .bp3-dialog-step{
|
||
background:#30404d; }
|
||
.bp3-dialog-step:hover{
|
||
background-color:#f5f8fa; }
|
||
.bp3-dark .bp3-dialog-step:hover{
|
||
background:#293742; }
|
||
|
||
.bp3-dialog-step-icon{
|
||
-webkit-box-align:center;
|
||
-ms-flex-align:center;
|
||
align-items:center;
|
||
background-color:rgba(92, 112, 128, 0.6);
|
||
border-radius:50%;
|
||
color:#ffffff;
|
||
display:-webkit-box;
|
||
display:-ms-flexbox;
|
||
display:flex;
|
||
height:25px;
|
||
-webkit-box-pack:center;
|
||
-ms-flex-pack:center;
|
||
justify-content:center;
|
||
width:25px; }
|
||
.bp3-dark .bp3-dialog-step-icon{
|
||
background-color:rgba(167, 182, 194, 0.6); }
|
||
.bp3-active.bp3-dialog-step-viewed .bp3-dialog-step-icon{
|
||
background-color:#2b95d6; }
|
||
.bp3-dialog-step-viewed .bp3-dialog-step-icon{
|
||
background-color:#8a9ba8; }
|
||
|
||
.bp3-dialog-step-title{
|
||
color:rgba(92, 112, 128, 0.6);
|
||
-webkit-box-flex:1;
|
||
-ms-flex:1;
|
||
flex:1;
|
||
padding-left:10px; }
|
||
.bp3-dark .bp3-dialog-step-title{
|
||
color:rgba(167, 182, 194, 0.6); }
|
||
.bp3-active.bp3-dialog-step-viewed .bp3-dialog-step-title{
|
||
color:#2b95d6; }
|
||
.bp3-dialog-step-viewed:not(.bp3-active) .bp3-dialog-step-title{
|
||
color:#182026; }
|
||
.bp3-dark .bp3-dialog-step-viewed:not(.bp3-active) .bp3-dialog-step-title{
|
||
color:#f5f8fa; }
|
||
.bp3-drawer{
|
||
background:#ffffff;
|
||
-webkit-box-shadow:0 0 0 1px rgba(16, 22, 26, 0.1), 0 4px 8px rgba(16, 22, 26, 0.2), 0 18px 46px 6px rgba(16, 22, 26, 0.2);
|
||
box-shadow:0 0 0 1px rgba(16, 22, 26, 0.1), 0 4px 8px rgba(16, 22, 26, 0.2), 0 18px 46px 6px rgba(16, 22, 26, 0.2);
|
||
display:-webkit-box;
|
||
display:-ms-flexbox;
|
||
display:flex;
|
||
-webkit-box-orient:vertical;
|
||
-webkit-box-direction:normal;
|
||
-ms-flex-direction:column;
|
||
flex-direction:column;
|
||
margin:0;
|
||
padding:0; }
|
||
.bp3-drawer:focus{
|
||
outline:0; }
|
||
.bp3-drawer.bp3-position-top{
|
||
height:50%;
|
||
left:0;
|
||
right:0;
|
||
top:0; }
|
||
.bp3-drawer.bp3-position-top.bp3-overlay-enter, .bp3-drawer.bp3-position-top.bp3-overlay-appear{
|
||
-webkit-transform:translateY(-100%);
|
||
transform:translateY(-100%); }
|
||
.bp3-drawer.bp3-position-top.bp3-overlay-enter-active, .bp3-drawer.bp3-position-top.bp3-overlay-appear-active{
|
||
-webkit-transform:translateY(0);
|
||
transform:translateY(0);
|
||
-webkit-transition-delay:0;
|
||
transition-delay:0;
|
||
-webkit-transition-duration:200ms;
|
||
transition-duration:200ms;
|
||
-webkit-transition-property:-webkit-transform;
|
||
transition-property:-webkit-transform;
|
||
transition-property:transform;
|
||
transition-property:transform, -webkit-transform;
|
||
-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);
|
||
transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9); }
|
||
.bp3-drawer.bp3-position-top.bp3-overlay-exit{
|
||
-webkit-transform:translateY(0);
|
||
transform:translateY(0); }
|
||
.bp3-drawer.bp3-position-top.bp3-overlay-exit-active{
|
||
-webkit-transform:translateY(-100%);
|
||
transform:translateY(-100%);
|
||
-webkit-transition-delay:0;
|
||
transition-delay:0;
|
||
-webkit-transition-duration:100ms;
|
||
transition-duration:100ms;
|
||
-webkit-transition-property:-webkit-transform;
|
||
transition-property:-webkit-transform;
|
||
transition-property:transform;
|
||
transition-property:transform, -webkit-transform;
|
||
-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);
|
||
transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9); }
|
||
.bp3-drawer.bp3-position-bottom{
|
||
bottom:0;
|
||
height:50%;
|
||
left:0;
|
||
right:0; }
|
||
.bp3-drawer.bp3-position-bottom.bp3-overlay-enter, .bp3-drawer.bp3-position-bottom.bp3-overlay-appear{
|
||
-webkit-transform:translateY(100%);
|
||
transform:translateY(100%); }
|
||
.bp3-drawer.bp3-position-bottom.bp3-overlay-enter-active, .bp3-drawer.bp3-position-bottom.bp3-overlay-appear-active{
|
||
-webkit-transform:translateY(0);
|
||
transform:translateY(0);
|
||
-webkit-transition-delay:0;
|
||
transition-delay:0;
|
||
-webkit-transition-duration:200ms;
|
||
transition-duration:200ms;
|
||
-webkit-transition-property:-webkit-transform;
|
||
transition-property:-webkit-transform;
|
||
transition-property:transform;
|
||
transition-property:transform, -webkit-transform;
|
||
-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);
|
||
transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9); }
|
||
.bp3-drawer.bp3-position-bottom.bp3-overlay-exit{
|
||
-webkit-transform:translateY(0);
|
||
transform:translateY(0); }
|
||
.bp3-drawer.bp3-position-bottom.bp3-overlay-exit-active{
|
||
-webkit-transform:translateY(100%);
|
||
transform:translateY(100%);
|
||
-webkit-transition-delay:0;
|
||
transition-delay:0;
|
||
-webkit-transition-duration:100ms;
|
||
transition-duration:100ms;
|
||
-webkit-transition-property:-webkit-transform;
|
||
transition-property:-webkit-transform;
|
||
transition-property:transform;
|
||
transition-property:transform, -webkit-transform;
|
||
-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);
|
||
transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9); }
|
||
.bp3-drawer.bp3-position-left{
|
||
bottom:0;
|
||
left:0;
|
||
top:0;
|
||
width:50%; }
|
||
.bp3-drawer.bp3-position-left.bp3-overlay-enter, .bp3-drawer.bp3-position-left.bp3-overlay-appear{
|
||
-webkit-transform:translateX(-100%);
|
||
transform:translateX(-100%); }
|
||
.bp3-drawer.bp3-position-left.bp3-overlay-enter-active, .bp3-drawer.bp3-position-left.bp3-overlay-appear-active{
|
||
-webkit-transform:translateX(0);
|
||
transform:translateX(0);
|
||
-webkit-transition-delay:0;
|
||
transition-delay:0;
|
||
-webkit-transition-duration:200ms;
|
||
transition-duration:200ms;
|
||
-webkit-transition-property:-webkit-transform;
|
||
transition-property:-webkit-transform;
|
||
transition-property:transform;
|
||
transition-property:transform, -webkit-transform;
|
||
-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);
|
||
transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9); }
|
||
.bp3-drawer.bp3-position-left.bp3-overlay-exit{
|
||
-webkit-transform:translateX(0);
|
||
transform:translateX(0); }
|
||
.bp3-drawer.bp3-position-left.bp3-overlay-exit-active{
|
||
-webkit-transform:translateX(-100%);
|
||
transform:translateX(-100%);
|
||
-webkit-transition-delay:0;
|
||
transition-delay:0;
|
||
-webkit-transition-duration:100ms;
|
||
transition-duration:100ms;
|
||
-webkit-transition-property:-webkit-transform;
|
||
transition-property:-webkit-transform;
|
||
transition-property:transform;
|
||
transition-property:transform, -webkit-transform;
|
||
-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);
|
||
transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9); }
|
||
.bp3-drawer.bp3-position-right{
|
||
bottom:0;
|
||
right:0;
|
||
top:0;
|
||
width:50%; }
|
||
.bp3-drawer.bp3-position-right.bp3-overlay-enter, .bp3-drawer.bp3-position-right.bp3-overlay-appear{
|
||
-webkit-transform:translateX(100%);
|
||
transform:translateX(100%); }
|
||
.bp3-drawer.bp3-position-right.bp3-overlay-enter-active, .bp3-drawer.bp3-position-right.bp3-overlay-appear-active{
|
||
-webkit-transform:translateX(0);
|
||
transform:translateX(0);
|
||
-webkit-transition-delay:0;
|
||
transition-delay:0;
|
||
-webkit-transition-duration:200ms;
|
||
transition-duration:200ms;
|
||
-webkit-transition-property:-webkit-transform;
|
||
transition-property:-webkit-transform;
|
||
transition-property:transform;
|
||
transition-property:transform, -webkit-transform;
|
||
-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);
|
||
transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9); }
|
||
.bp3-drawer.bp3-position-right.bp3-overlay-exit{
|
||
-webkit-transform:translateX(0);
|
||
transform:translateX(0); }
|
||
.bp3-drawer.bp3-position-right.bp3-overlay-exit-active{
|
||
-webkit-transform:translateX(100%);
|
||
transform:translateX(100%);
|
||
-webkit-transition-delay:0;
|
||
transition-delay:0;
|
||
-webkit-transition-duration:100ms;
|
||
transition-duration:100ms;
|
||
-webkit-transition-property:-webkit-transform;
|
||
transition-property:-webkit-transform;
|
||
transition-property:transform;
|
||
transition-property:transform, -webkit-transform;
|
||
-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);
|
||
transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9); }
|
||
.bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(
|
||
.bp3-position-right):not(.bp3-vertical){
|
||
bottom:0;
|
||
right:0;
|
||
top:0;
|
||
width:50%; }
|
||
.bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(
|
||
.bp3-position-right):not(.bp3-vertical).bp3-overlay-enter, .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(
|
||
.bp3-position-right):not(.bp3-vertical).bp3-overlay-appear{
|
||
-webkit-transform:translateX(100%);
|
||
transform:translateX(100%); }
|
||
.bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(
|
||
.bp3-position-right):not(.bp3-vertical).bp3-overlay-enter-active, .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(
|
||
.bp3-position-right):not(.bp3-vertical).bp3-overlay-appear-active{
|
||
-webkit-transform:translateX(0);
|
||
transform:translateX(0);
|
||
-webkit-transition-delay:0;
|
||
transition-delay:0;
|
||
-webkit-transition-duration:200ms;
|
||
transition-duration:200ms;
|
||
-webkit-transition-property:-webkit-transform;
|
||
transition-property:-webkit-transform;
|
||
transition-property:transform;
|
||
transition-property:transform, -webkit-transform;
|
||
-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);
|
||
transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9); }
|
||
.bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(
|
||
.bp3-position-right):not(.bp3-vertical).bp3-overlay-exit{
|
||
-webkit-transform:translateX(0);
|
||
transform:translateX(0); }
|
||
.bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(
|
||
.bp3-position-right):not(.bp3-vertical).bp3-overlay-exit-active{
|
||
-webkit-transform:translateX(100%);
|
||
transform:translateX(100%);
|
||
-webkit-transition-delay:0;
|
||
transition-delay:0;
|
||
-webkit-transition-duration:100ms;
|
||
transition-duration:100ms;
|
||
-webkit-transition-property:-webkit-transform;
|
||
transition-property:-webkit-transform;
|
||
transition-property:transform;
|
||
transition-property:transform, -webkit-transform;
|
||
-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);
|
||
transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9); }
|
||
.bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(
|
||
.bp3-position-right).bp3-vertical{
|
||
bottom:0;
|
||
height:50%;
|
||
left:0;
|
||
right:0; }
|
||
.bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(
|
||
.bp3-position-right).bp3-vertical.bp3-overlay-enter, .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(
|
||
.bp3-position-right).bp3-vertical.bp3-overlay-appear{
|
||
-webkit-transform:translateY(100%);
|
||
transform:translateY(100%); }
|
||
.bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(
|
||
.bp3-position-right).bp3-vertical.bp3-overlay-enter-active, .bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(
|
||
.bp3-position-right).bp3-vertical.bp3-overlay-appear-active{
|
||
-webkit-transform:translateY(0);
|
||
transform:translateY(0);
|
||
-webkit-transition-delay:0;
|
||
transition-delay:0;
|
||
-webkit-transition-duration:200ms;
|
||
transition-duration:200ms;
|
||
-webkit-transition-property:-webkit-transform;
|
||
transition-property:-webkit-transform;
|
||
transition-property:transform;
|
||
transition-property:transform, -webkit-transform;
|
||
-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);
|
||
transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9); }
|
||
.bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(
|
||
.bp3-position-right).bp3-vertical.bp3-overlay-exit{
|
||
-webkit-transform:translateY(0);
|
||
transform:translateY(0); }
|
||
.bp3-drawer:not(.bp3-position-top):not(.bp3-position-bottom):not(.bp3-position-left):not(
|
||
.bp3-position-right).bp3-vertical.bp3-overlay-exit-active{
|
||
-webkit-transform:translateY(100%);
|
||
transform:translateY(100%);
|
||
-webkit-transition-delay:0;
|
||
transition-delay:0;
|
||
-webkit-transition-duration:100ms;
|
||
transition-duration:100ms;
|
||
-webkit-transition-property:-webkit-transform;
|
||
transition-property:-webkit-transform;
|
||
transition-property:transform;
|
||
transition-property:transform, -webkit-transform;
|
||
-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);
|
||
transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9); }
|
||
.bp3-drawer.bp3-dark,
|
||
.bp3-dark .bp3-drawer{
|
||
background:#30404d;
|
||
-webkit-box-shadow:0 0 0 1px rgba(16, 22, 26, 0.2), 0 4px 8px rgba(16, 22, 26, 0.4), 0 18px 46px 6px rgba(16, 22, 26, 0.4);
|
||
box-shadow:0 0 0 1px rgba(16, 22, 26, 0.2), 0 4px 8px rgba(16, 22, 26, 0.4), 0 18px 46px 6px rgba(16, 22, 26, 0.4);
|
||
color:#f5f8fa; }
|
||
|
||
.bp3-drawer-header{
|
||
-webkit-box-align:center;
|
||
-ms-flex-align:center;
|
||
align-items:center;
|
||
border-radius:0;
|
||
-webkit-box-shadow:0 1px 0 rgba(16, 22, 26, 0.15);
|
||
box-shadow:0 1px 0 rgba(16, 22, 26, 0.15);
|
||
display:-webkit-box;
|
||
display:-ms-flexbox;
|
||
display:flex;
|
||
-webkit-box-flex:0;
|
||
-ms-flex:0 0 auto;
|
||
flex:0 0 auto;
|
||
min-height:40px;
|
||
padding:5px;
|
||
padding-left:20px;
|
||
position:relative; }
|
||
.bp3-drawer-header .bp3-icon-large,
|
||
.bp3-drawer-header .bp3-icon{
|
||
color:#5c7080;
|
||
-webkit-box-flex:0;
|
||
-ms-flex:0 0 auto;
|
||
flex:0 0 auto;
|
||
margin-right:10px; }
|
||
.bp3-drawer-header .bp3-heading{
|
||
overflow:hidden;
|
||
text-overflow:ellipsis;
|
||
white-space:nowrap;
|
||
word-wrap:normal;
|
||
-webkit-box-flex:1;
|
||
-ms-flex:1 1 auto;
|
||
flex:1 1 auto;
|
||
line-height:inherit;
|
||
margin:0; }
|
||
.bp3-drawer-header .bp3-heading:last-child{
|
||
margin-right:20px; }
|
||
.bp3-dark .bp3-drawer-header{
|
||
-webkit-box-shadow:0 1px 0 rgba(16, 22, 26, 0.4);
|
||
box-shadow:0 1px 0 rgba(16, 22, 26, 0.4); }
|
||
.bp3-dark .bp3-drawer-header .bp3-icon-large,
|
||
.bp3-dark .bp3-drawer-header .bp3-icon{
|
||
color:#a7b6c2; }
|
||
|
||
.bp3-drawer-body{
|
||
-webkit-box-flex:1;
|
||
-ms-flex:1 1 auto;
|
||
flex:1 1 auto;
|
||
line-height:18px;
|
||
overflow:auto; }
|
||
|
||
.bp3-drawer-footer{
|
||
-webkit-box-shadow:inset 0 1px 0 rgba(16, 22, 26, 0.15);
|
||
box-shadow:inset 0 1px 0 rgba(16, 22, 26, 0.15);
|
||
-webkit-box-flex:0;
|
||
-ms-flex:0 0 auto;
|
||
flex:0 0 auto;
|
||
padding:10px 20px;
|
||
position:relative; }
|
||
.bp3-dark .bp3-drawer-footer{
|
||
-webkit-box-shadow:inset 0 1px 0 rgba(16, 22, 26, 0.4);
|
||
box-shadow:inset 0 1px 0 rgba(16, 22, 26, 0.4); }
|
||
.bp3-editable-text{
|
||
cursor:text;
|
||
display:inline-block;
|
||
max-width:100%;
|
||
position:relative;
|
||
vertical-align:top;
|
||
white-space:nowrap; }
|
||
.bp3-editable-text::before{
|
||
bottom:-3px;
|
||
left:-3px;
|
||
position:absolute;
|
||
right:-3px;
|
||
top:-3px;
|
||
border-radius:3px;
|
||
content:"";
|
||
-webkit-transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9), -webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);
|
||
transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9), -webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);
|
||
transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9), box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);
|
||
transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9), box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9), -webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9); }
|
||
.bp3-editable-text:hover::before{
|
||
-webkit-box-shadow:0 0 0 0 rgba(19, 124, 189, 0), 0 0 0 0 rgba(19, 124, 189, 0), inset 0 0 0 1px rgba(16, 22, 26, 0.15);
|
||
box-shadow:0 0 0 0 rgba(19, 124, 189, 0), 0 0 0 0 rgba(19, 124, 189, 0), inset 0 0 0 1px rgba(16, 22, 26, 0.15); }
|
||
.bp3-editable-text.bp3-editable-text-editing::before{
|
||
background-color:#ffffff;
|
||
-webkit-box-shadow:0 0 0 1px #137cbd, 0 0 0 3px rgba(19, 124, 189, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.2);
|
||
box-shadow:0 0 0 1px #137cbd, 0 0 0 3px rgba(19, 124, 189, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.2); }
|
||
.bp3-editable-text.bp3-disabled::before{
|
||
-webkit-box-shadow:none;
|
||
box-shadow:none; }
|
||
.bp3-editable-text.bp3-intent-primary .bp3-editable-text-input,
|
||
.bp3-editable-text.bp3-intent-primary .bp3-editable-text-content{
|
||
color:#137cbd; }
|
||
.bp3-editable-text.bp3-intent-primary:hover::before{
|
||
-webkit-box-shadow:0 0 0 0 rgba(19, 124, 189, 0), 0 0 0 0 rgba(19, 124, 189, 0), inset 0 0 0 1px rgba(19, 124, 189, 0.4);
|
||
box-shadow:0 0 0 0 rgba(19, 124, 189, 0), 0 0 0 0 rgba(19, 124, 189, 0), inset 0 0 0 1px rgba(19, 124, 189, 0.4); }
|
||
.bp3-editable-text.bp3-intent-primary.bp3-editable-text-editing::before{
|
||
-webkit-box-shadow:0 0 0 1px #137cbd, 0 0 0 3px rgba(19, 124, 189, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.2);
|
||
box-shadow:0 0 0 1px #137cbd, 0 0 0 3px rgba(19, 124, 189, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.2); }
|
||
.bp3-editable-text.bp3-intent-success .bp3-editable-text-input,
|
||
.bp3-editable-text.bp3-intent-success .bp3-editable-text-content{
|
||
color:#0f9960; }
|
||
.bp3-editable-text.bp3-intent-success:hover::before{
|
||
-webkit-box-shadow:0 0 0 0 rgba(15, 153, 96, 0), 0 0 0 0 rgba(15, 153, 96, 0), inset 0 0 0 1px rgba(15, 153, 96, 0.4);
|
||
box-shadow:0 0 0 0 rgba(15, 153, 96, 0), 0 0 0 0 rgba(15, 153, 96, 0), inset 0 0 0 1px rgba(15, 153, 96, 0.4); }
|
||
.bp3-editable-text.bp3-intent-success.bp3-editable-text-editing::before{
|
||
-webkit-box-shadow:0 0 0 1px #0f9960, 0 0 0 3px rgba(15, 153, 96, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.2);
|
||
box-shadow:0 0 0 1px #0f9960, 0 0 0 3px rgba(15, 153, 96, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.2); }
|
||
.bp3-editable-text.bp3-intent-warning .bp3-editable-text-input,
|
||
.bp3-editable-text.bp3-intent-warning .bp3-editable-text-content{
|
||
color:#d9822b; }
|
||
.bp3-editable-text.bp3-intent-warning:hover::before{
|
||
-webkit-box-shadow:0 0 0 0 rgba(217, 130, 43, 0), 0 0 0 0 rgba(217, 130, 43, 0), inset 0 0 0 1px rgba(217, 130, 43, 0.4);
|
||
box-shadow:0 0 0 0 rgba(217, 130, 43, 0), 0 0 0 0 rgba(217, 130, 43, 0), inset 0 0 0 1px rgba(217, 130, 43, 0.4); }
|
||
.bp3-editable-text.bp3-intent-warning.bp3-editable-text-editing::before{
|
||
-webkit-box-shadow:0 0 0 1px #d9822b, 0 0 0 3px rgba(217, 130, 43, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.2);
|
||
box-shadow:0 0 0 1px #d9822b, 0 0 0 3px rgba(217, 130, 43, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.2); }
|
||
.bp3-editable-text.bp3-intent-danger .bp3-editable-text-input,
|
||
.bp3-editable-text.bp3-intent-danger .bp3-editable-text-content{
|
||
color:#db3737; }
|
||
.bp3-editable-text.bp3-intent-danger:hover::before{
|
||
-webkit-box-shadow:0 0 0 0 rgba(219, 55, 55, 0), 0 0 0 0 rgba(219, 55, 55, 0), inset 0 0 0 1px rgba(219, 55, 55, 0.4);
|
||
box-shadow:0 0 0 0 rgba(219, 55, 55, 0), 0 0 0 0 rgba(219, 55, 55, 0), inset 0 0 0 1px rgba(219, 55, 55, 0.4); }
|
||
.bp3-editable-text.bp3-intent-danger.bp3-editable-text-editing::before{
|
||
-webkit-box-shadow:0 0 0 1px #db3737, 0 0 0 3px rgba(219, 55, 55, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.2);
|
||
box-shadow:0 0 0 1px #db3737, 0 0 0 3px rgba(219, 55, 55, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.2); }
|
||
.bp3-dark .bp3-editable-text:hover::before{
|
||
-webkit-box-shadow:0 0 0 0 rgba(19, 124, 189, 0), 0 0 0 0 rgba(19, 124, 189, 0), inset 0 0 0 1px rgba(255, 255, 255, 0.15);
|
||
box-shadow:0 0 0 0 rgba(19, 124, 189, 0), 0 0 0 0 rgba(19, 124, 189, 0), inset 0 0 0 1px rgba(255, 255, 255, 0.15); }
|
||
.bp3-dark .bp3-editable-text.bp3-editable-text-editing::before{
|
||
background-color:rgba(16, 22, 26, 0.3);
|
||
-webkit-box-shadow:0 0 0 1px #137cbd, 0 0 0 3px rgba(19, 124, 189, 0.3), inset 0 0 0 1px rgba(16, 22, 26, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.4);
|
||
box-shadow:0 0 0 1px #137cbd, 0 0 0 3px rgba(19, 124, 189, 0.3), inset 0 0 0 1px rgba(16, 22, 26, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.4); }
|
||
.bp3-dark .bp3-editable-text.bp3-disabled::before{
|
||
-webkit-box-shadow:none;
|
||
box-shadow:none; }
|
||
.bp3-dark .bp3-editable-text.bp3-intent-primary .bp3-editable-text-content{
|
||
color:#48aff0; }
|
||
.bp3-dark .bp3-editable-text.bp3-intent-primary:hover::before{
|
||
-webkit-box-shadow:0 0 0 0 rgba(72, 175, 240, 0), 0 0 0 0 rgba(72, 175, 240, 0), inset 0 0 0 1px rgba(72, 175, 240, 0.4);
|
||
box-shadow:0 0 0 0 rgba(72, 175, 240, 0), 0 0 0 0 rgba(72, 175, 240, 0), inset 0 0 0 1px rgba(72, 175, 240, 0.4); }
|
||
.bp3-dark .bp3-editable-text.bp3-intent-primary.bp3-editable-text-editing::before{
|
||
-webkit-box-shadow:0 0 0 1px #48aff0, 0 0 0 3px rgba(72, 175, 240, 0.3), inset 0 0 0 1px rgba(16, 22, 26, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.4);
|
||
box-shadow:0 0 0 1px #48aff0, 0 0 0 3px rgba(72, 175, 240, 0.3), inset 0 0 0 1px rgba(16, 22, 26, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.4); }
|
||
.bp3-dark .bp3-editable-text.bp3-intent-success .bp3-editable-text-content{
|
||
color:#3dcc91; }
|
||
.bp3-dark .bp3-editable-text.bp3-intent-success:hover::before{
|
||
-webkit-box-shadow:0 0 0 0 rgba(61, 204, 145, 0), 0 0 0 0 rgba(61, 204, 145, 0), inset 0 0 0 1px rgba(61, 204, 145, 0.4);
|
||
box-shadow:0 0 0 0 rgba(61, 204, 145, 0), 0 0 0 0 rgba(61, 204, 145, 0), inset 0 0 0 1px rgba(61, 204, 145, 0.4); }
|
||
.bp3-dark .bp3-editable-text.bp3-intent-success.bp3-editable-text-editing::before{
|
||
-webkit-box-shadow:0 0 0 1px #3dcc91, 0 0 0 3px rgba(61, 204, 145, 0.3), inset 0 0 0 1px rgba(16, 22, 26, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.4);
|
||
box-shadow:0 0 0 1px #3dcc91, 0 0 0 3px rgba(61, 204, 145, 0.3), inset 0 0 0 1px rgba(16, 22, 26, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.4); }
|
||
.bp3-dark .bp3-editable-text.bp3-intent-warning .bp3-editable-text-content{
|
||
color:#ffb366; }
|
||
.bp3-dark .bp3-editable-text.bp3-intent-warning:hover::before{
|
||
-webkit-box-shadow:0 0 0 0 rgba(255, 179, 102, 0), 0 0 0 0 rgba(255, 179, 102, 0), inset 0 0 0 1px rgba(255, 179, 102, 0.4);
|
||
box-shadow:0 0 0 0 rgba(255, 179, 102, 0), 0 0 0 0 rgba(255, 179, 102, 0), inset 0 0 0 1px rgba(255, 179, 102, 0.4); }
|
||
.bp3-dark .bp3-editable-text.bp3-intent-warning.bp3-editable-text-editing::before{
|
||
-webkit-box-shadow:0 0 0 1px #ffb366, 0 0 0 3px rgba(255, 179, 102, 0.3), inset 0 0 0 1px rgba(16, 22, 26, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.4);
|
||
box-shadow:0 0 0 1px #ffb366, 0 0 0 3px rgba(255, 179, 102, 0.3), inset 0 0 0 1px rgba(16, 22, 26, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.4); }
|
||
.bp3-dark .bp3-editable-text.bp3-intent-danger .bp3-editable-text-content{
|
||
color:#ff7373; }
|
||
.bp3-dark .bp3-editable-text.bp3-intent-danger:hover::before{
|
||
-webkit-box-shadow:0 0 0 0 rgba(255, 115, 115, 0), 0 0 0 0 rgba(255, 115, 115, 0), inset 0 0 0 1px rgba(255, 115, 115, 0.4);
|
||
box-shadow:0 0 0 0 rgba(255, 115, 115, 0), 0 0 0 0 rgba(255, 115, 115, 0), inset 0 0 0 1px rgba(255, 115, 115, 0.4); }
|
||
.bp3-dark .bp3-editable-text.bp3-intent-danger.bp3-editable-text-editing::before{
|
||
-webkit-box-shadow:0 0 0 1px #ff7373, 0 0 0 3px rgba(255, 115, 115, 0.3), inset 0 0 0 1px rgba(16, 22, 26, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.4);
|
||
box-shadow:0 0 0 1px #ff7373, 0 0 0 3px rgba(255, 115, 115, 0.3), inset 0 0 0 1px rgba(16, 22, 26, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.4); }
|
||
|
||
.bp3-editable-text-input,
|
||
.bp3-editable-text-content{
|
||
color:inherit;
|
||
display:inherit;
|
||
font:inherit;
|
||
letter-spacing:inherit;
|
||
max-width:inherit;
|
||
min-width:inherit;
|
||
position:relative;
|
||
resize:none;
|
||
text-transform:inherit;
|
||
vertical-align:top; }
|
||
|
||
.bp3-editable-text-input{
|
||
background:none;
|
||
border:none;
|
||
-webkit-box-shadow:none;
|
||
box-shadow:none;
|
||
padding:0;
|
||
white-space:pre-wrap;
|
||
width:100%; }
|
||
.bp3-editable-text-input::-webkit-input-placeholder{
|
||
color:rgba(92, 112, 128, 0.6);
|
||
opacity:1; }
|
||
.bp3-editable-text-input::-moz-placeholder{
|
||
color:rgba(92, 112, 128, 0.6);
|
||
opacity:1; }
|
||
.bp3-editable-text-input:-ms-input-placeholder{
|
||
color:rgba(92, 112, 128, 0.6);
|
||
opacity:1; }
|
||
.bp3-editable-text-input::-ms-input-placeholder{
|
||
color:rgba(92, 112, 128, 0.6);
|
||
opacity:1; }
|
||
.bp3-editable-text-input::placeholder{
|
||
color:rgba(92, 112, 128, 0.6);
|
||
opacity:1; }
|
||
.bp3-editable-text-input:focus{
|
||
outline:none; }
|
||
.bp3-editable-text-input::-ms-clear{
|
||
display:none; }
|
||
|
||
.bp3-editable-text-content{
|
||
overflow:hidden;
|
||
padding-right:2px;
|
||
text-overflow:ellipsis;
|
||
white-space:pre; }
|
||
.bp3-editable-text-editing > .bp3-editable-text-content{
|
||
left:0;
|
||
position:absolute;
|
||
visibility:hidden; }
|
||
.bp3-editable-text-placeholder > .bp3-editable-text-content{
|
||
color:rgba(92, 112, 128, 0.6); }
|
||
.bp3-dark .bp3-editable-text-placeholder > .bp3-editable-text-content{
|
||
color:rgba(167, 182, 194, 0.6); }
|
||
|
||
.bp3-editable-text.bp3-multiline{
|
||
display:block; }
|
||
.bp3-editable-text.bp3-multiline .bp3-editable-text-content{
|
||
overflow:auto;
|
||
white-space:pre-wrap;
|
||
word-wrap:break-word; }
|
||
.bp3-divider{
|
||
border-bottom:1px solid rgba(16, 22, 26, 0.15);
|
||
border-right:1px solid rgba(16, 22, 26, 0.15);
|
||
margin:5px; }
|
||
.bp3-dark .bp3-divider{
|
||
border-color:rgba(16, 22, 26, 0.4); }
|
||
.bp3-control-group{
|
||
-webkit-transform:translateZ(0);
|
||
transform:translateZ(0);
|
||
display:-webkit-box;
|
||
display:-ms-flexbox;
|
||
display:flex;
|
||
-webkit-box-orient:horizontal;
|
||
-webkit-box-direction:normal;
|
||
-ms-flex-direction:row;
|
||
flex-direction:row;
|
||
-webkit-box-align:stretch;
|
||
-ms-flex-align:stretch;
|
||
align-items:stretch; }
|
||
.bp3-control-group > *{
|
||
-webkit-box-flex:0;
|
||
-ms-flex-positive:0;
|
||
flex-grow:0;
|
||
-ms-flex-negative:0;
|
||
flex-shrink:0; }
|
||
.bp3-control-group > .bp3-fill{
|
||
-webkit-box-flex:1;
|
||
-ms-flex-positive:1;
|
||
flex-grow:1;
|
||
-ms-flex-negative:1;
|
||
flex-shrink:1; }
|
||
.bp3-control-group .bp3-button,
|
||
.bp3-control-group .bp3-html-select,
|
||
.bp3-control-group .bp3-input,
|
||
.bp3-control-group .bp3-select{
|
||
position:relative; }
|
||
.bp3-control-group .bp3-input{
|
||
border-radius:inherit;
|
||
z-index:2; }
|
||
.bp3-control-group .bp3-input:focus{
|
||
border-radius:3px;
|
||
z-index:14; }
|
||
.bp3-control-group .bp3-input[class*="bp3-intent"]{
|
||
z-index:13; }
|
||
.bp3-control-group .bp3-input[class*="bp3-intent"]:focus{
|
||
z-index:15; }
|
||
.bp3-control-group .bp3-input[readonly], .bp3-control-group .bp3-input:disabled, .bp3-control-group .bp3-input.bp3-disabled{
|
||
z-index:1; }
|
||
.bp3-control-group .bp3-input-group[class*="bp3-intent"] .bp3-input{
|
||
z-index:13; }
|
||
.bp3-control-group .bp3-input-group[class*="bp3-intent"] .bp3-input:focus{
|
||
z-index:15; }
|
||
.bp3-control-group .bp3-button,
|
||
.bp3-control-group .bp3-html-select select,
|
||
.bp3-control-group .bp3-select select{
|
||
-webkit-transform:translateZ(0);
|
||
transform:translateZ(0);
|
||
border-radius:inherit;
|
||
z-index:4; }
|
||
.bp3-control-group .bp3-button:focus,
|
||
.bp3-control-group .bp3-html-select select:focus,
|
||
.bp3-control-group .bp3-select select:focus{
|
||
z-index:5; }
|
||
.bp3-control-group .bp3-button:hover,
|
||
.bp3-control-group .bp3-html-select select:hover,
|
||
.bp3-control-group .bp3-select select:hover{
|
||
z-index:6; }
|
||
.bp3-control-group .bp3-button:active,
|
||
.bp3-control-group .bp3-html-select select:active,
|
||
.bp3-control-group .bp3-select select:active{
|
||
z-index:7; }
|
||
.bp3-control-group .bp3-button[readonly], .bp3-control-group .bp3-button:disabled, .bp3-control-group .bp3-button.bp3-disabled,
|
||
.bp3-control-group .bp3-html-select select[readonly],
|
||
.bp3-control-group .bp3-html-select select:disabled,
|
||
.bp3-control-group .bp3-html-select select.bp3-disabled,
|
||
.bp3-control-group .bp3-select select[readonly],
|
||
.bp3-control-group .bp3-select select:disabled,
|
||
.bp3-control-group .bp3-select select.bp3-disabled{
|
||
z-index:3; }
|
||
.bp3-control-group .bp3-button[class*="bp3-intent"],
|
||
.bp3-control-group .bp3-html-select select[class*="bp3-intent"],
|
||
.bp3-control-group .bp3-select select[class*="bp3-intent"]{
|
||
z-index:9; }
|
||
.bp3-control-group .bp3-button[class*="bp3-intent"]:focus,
|
||
.bp3-control-group .bp3-html-select select[class*="bp3-intent"]:focus,
|
||
.bp3-control-group .bp3-select select[class*="bp3-intent"]:focus{
|
||
z-index:10; }
|
||
.bp3-control-group .bp3-button[class*="bp3-intent"]:hover,
|
||
.bp3-control-group .bp3-html-select select[class*="bp3-intent"]:hover,
|
||
.bp3-control-group .bp3-select select[class*="bp3-intent"]:hover{
|
||
z-index:11; }
|
||
.bp3-control-group .bp3-button[class*="bp3-intent"]:active,
|
||
.bp3-control-group .bp3-html-select select[class*="bp3-intent"]:active,
|
||
.bp3-control-group .bp3-select select[class*="bp3-intent"]:active{
|
||
z-index:12; }
|
||
.bp3-control-group .bp3-button[class*="bp3-intent"][readonly], .bp3-control-group .bp3-button[class*="bp3-intent"]:disabled, .bp3-control-group .bp3-button[class*="bp3-intent"].bp3-disabled,
|
||
.bp3-control-group .bp3-html-select select[class*="bp3-intent"][readonly],
|
||
.bp3-control-group .bp3-html-select select[class*="bp3-intent"]:disabled,
|
||
.bp3-control-group .bp3-html-select select[class*="bp3-intent"].bp3-disabled,
|
||
.bp3-control-group .bp3-select select[class*="bp3-intent"][readonly],
|
||
.bp3-control-group .bp3-select select[class*="bp3-intent"]:disabled,
|
||
.bp3-control-group .bp3-select select[class*="bp3-intent"].bp3-disabled{
|
||
z-index:8; }
|
||
.bp3-control-group .bp3-input-group > .bp3-icon,
|
||
.bp3-control-group .bp3-input-group > .bp3-button,
|
||
.bp3-control-group .bp3-input-group > .bp3-input-left-container,
|
||
.bp3-control-group .bp3-input-group > .bp3-input-action{
|
||
z-index:16; }
|
||
.bp3-control-group .bp3-select::after,
|
||
.bp3-control-group .bp3-html-select::after,
|
||
.bp3-control-group .bp3-select > .bp3-icon,
|
||
.bp3-control-group .bp3-html-select > .bp3-icon{
|
||
z-index:17; }
|
||
.bp3-control-group .bp3-select:focus-within{
|
||
z-index:5; }
|
||
.bp3-control-group:not(.bp3-vertical) > *:not(.bp3-divider){
|
||
margin-right:-1px; }
|
||
.bp3-control-group:not(.bp3-vertical) > .bp3-divider:not(:first-child){
|
||
margin-left:6px; }
|
||
.bp3-dark .bp3-control-group:not(.bp3-vertical) > *:not(.bp3-divider){
|
||
margin-right:0; }
|
||
.bp3-dark .bp3-control-group:not(.bp3-vertical) > .bp3-button + .bp3-button{
|
||
margin-left:1px; }
|
||
.bp3-control-group .bp3-popover-wrapper,
|
||
.bp3-control-group .bp3-popover-target{
|
||
border-radius:inherit; }
|
||
.bp3-control-group > :first-child{
|
||
border-radius:3px 0 0 3px; }
|
||
.bp3-control-group > :last-child{
|
||
border-radius:0 3px 3px 0;
|
||
margin-right:0; }
|
||
.bp3-control-group > :only-child{
|
||
border-radius:3px;
|
||
margin-right:0; }
|
||
.bp3-control-group .bp3-input-group .bp3-button{
|
||
border-radius:3px; }
|
||
.bp3-control-group .bp3-numeric-input:not(:first-child) .bp3-input-group{
|
||
border-bottom-left-radius:0;
|
||
border-top-left-radius:0; }
|
||
.bp3-control-group.bp3-fill{
|
||
width:100%; }
|
||
.bp3-control-group > .bp3-fill{
|
||
-webkit-box-flex:1;
|
||
-ms-flex:1 1 auto;
|
||
flex:1 1 auto; }
|
||
.bp3-control-group.bp3-fill > *:not(.bp3-fixed){
|
||
-webkit-box-flex:1;
|
||
-ms-flex:1 1 auto;
|
||
flex:1 1 auto; }
|
||
.bp3-control-group.bp3-vertical{
|
||
-webkit-box-orient:vertical;
|
||
-webkit-box-direction:normal;
|
||
-ms-flex-direction:column;
|
||
flex-direction:column; }
|
||
.bp3-control-group.bp3-vertical > *{
|
||
margin-top:-1px; }
|
||
.bp3-control-group.bp3-vertical > :first-child{
|
||
border-radius:3px 3px 0 0;
|
||
margin-top:0; }
|
||
.bp3-control-group.bp3-vertical > :last-child{
|
||
border-radius:0 0 3px 3px; }
|
||
.bp3-control{
|
||
cursor:pointer;
|
||
display:block;
|
||
margin-bottom:10px;
|
||
position:relative;
|
||
text-transform:none; }
|
||
.bp3-control input:checked ~ .bp3-control-indicator{
|
||
background-color:#137cbd;
|
||
background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));
|
||
background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));
|
||
-webkit-box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.4), inset 0 -1px 0 rgba(16, 22, 26, 0.2);
|
||
box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.4), inset 0 -1px 0 rgba(16, 22, 26, 0.2);
|
||
color:#ffffff; }
|
||
.bp3-control:hover input:checked ~ .bp3-control-indicator{
|
||
background-color:#106ba3;
|
||
-webkit-box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.4), inset 0 -1px 0 rgba(16, 22, 26, 0.2);
|
||
box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.4), inset 0 -1px 0 rgba(16, 22, 26, 0.2); }
|
||
.bp3-control input:not(:disabled):active:checked ~ .bp3-control-indicator{
|
||
background:#0e5a8a;
|
||
-webkit-box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.4), inset 0 1px 2px rgba(16, 22, 26, 0.2);
|
||
box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.4), inset 0 1px 2px rgba(16, 22, 26, 0.2); }
|
||
.bp3-control input:disabled:checked ~ .bp3-control-indicator{
|
||
background:rgba(19, 124, 189, 0.5);
|
||
-webkit-box-shadow:none;
|
||
box-shadow:none; }
|
||
.bp3-dark .bp3-control input:checked ~ .bp3-control-indicator{
|
||
-webkit-box-shadow:0 0 0 1px rgba(16, 22, 26, 0.4);
|
||
box-shadow:0 0 0 1px rgba(16, 22, 26, 0.4); }
|
||
.bp3-dark .bp3-control:hover input:checked ~ .bp3-control-indicator{
|
||
background-color:#106ba3;
|
||
-webkit-box-shadow:0 0 0 1px rgba(16, 22, 26, 0.4);
|
||
box-shadow:0 0 0 1px rgba(16, 22, 26, 0.4); }
|
||
.bp3-dark .bp3-control input:not(:disabled):active:checked ~ .bp3-control-indicator{
|
||
background-color:#0e5a8a;
|
||
-webkit-box-shadow:0 0 0 1px rgba(16, 22, 26, 0.4), inset 0 1px 2px rgba(16, 22, 26, 0.2);
|
||
box-shadow:0 0 0 1px rgba(16, 22, 26, 0.4), inset 0 1px 2px rgba(16, 22, 26, 0.2); }
|
||
.bp3-dark .bp3-control input:disabled:checked ~ .bp3-control-indicator{
|
||
background:rgba(14, 90, 138, 0.5);
|
||
-webkit-box-shadow:none;
|
||
box-shadow:none; }
|
||
.bp3-control:not(.bp3-align-right){
|
||
padding-left:26px; }
|
||
.bp3-control:not(.bp3-align-right) .bp3-control-indicator{
|
||
margin-left:-26px; }
|
||
.bp3-control.bp3-align-right{
|
||
padding-right:26px; }
|
||
.bp3-control.bp3-align-right .bp3-control-indicator{
|
||
margin-right:-26px; }
|
||
.bp3-control.bp3-disabled{
|
||
color:rgba(92, 112, 128, 0.6);
|
||
cursor:not-allowed; }
|
||
.bp3-control.bp3-inline{
|
||
display:inline-block;
|
||
margin-right:20px; }
|
||
.bp3-control input{
|
||
left:0;
|
||
opacity:0;
|
||
position:absolute;
|
||
top:0;
|
||
z-index:-1; }
|
||
.bp3-control .bp3-control-indicator{
|
||
background-clip:padding-box;
|
||
background-color:#f5f8fa;
|
||
background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));
|
||
background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));
|
||
border:none;
|
||
-webkit-box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.2), inset 0 -1px 0 rgba(16, 22, 26, 0.1);
|
||
box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.2), inset 0 -1px 0 rgba(16, 22, 26, 0.1);
|
||
cursor:pointer;
|
||
display:inline-block;
|
||
font-size:16px;
|
||
height:1em;
|
||
margin-right:10px;
|
||
margin-top:-3px;
|
||
position:relative;
|
||
-webkit-user-select:none;
|
||
-moz-user-select:none;
|
||
-ms-user-select:none;
|
||
user-select:none;
|
||
vertical-align:middle;
|
||
width:1em; }
|
||
.bp3-control .bp3-control-indicator::before{
|
||
content:"";
|
||
display:block;
|
||
height:1em;
|
||
width:1em; }
|
||
.bp3-control:hover .bp3-control-indicator{
|
||
background-color:#ebf1f5; }
|
||
.bp3-control input:not(:disabled):active ~ .bp3-control-indicator{
|
||
background:#d8e1e8;
|
||
-webkit-box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.2), inset 0 1px 2px rgba(16, 22, 26, 0.2);
|
||
box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.2), inset 0 1px 2px rgba(16, 22, 26, 0.2); }
|
||
.bp3-control input:disabled ~ .bp3-control-indicator{
|
||
background:rgba(206, 217, 224, 0.5);
|
||
-webkit-box-shadow:none;
|
||
box-shadow:none;
|
||
cursor:not-allowed; }
|
||
.bp3-control input:focus ~ .bp3-control-indicator{
|
||
outline:rgba(19, 124, 189, 0.6) auto 2px;
|
||
outline-offset:2px;
|
||
-moz-outline-radius:6px; }
|
||
.bp3-control.bp3-align-right .bp3-control-indicator{
|
||
float:right;
|
||
margin-left:10px;
|
||
margin-top:1px; }
|
||
.bp3-control.bp3-large{
|
||
font-size:16px; }
|
||
.bp3-control.bp3-large:not(.bp3-align-right){
|
||
padding-left:30px; }
|
||
.bp3-control.bp3-large:not(.bp3-align-right) .bp3-control-indicator{
|
||
margin-left:-30px; }
|
||
.bp3-control.bp3-large.bp3-align-right{
|
||
padding-right:30px; }
|
||
.bp3-control.bp3-large.bp3-align-right .bp3-control-indicator{
|
||
margin-right:-30px; }
|
||
.bp3-control.bp3-large .bp3-control-indicator{
|
||
font-size:20px; }
|
||
.bp3-control.bp3-large.bp3-align-right .bp3-control-indicator{
|
||
margin-top:0; }
|
||
.bp3-control.bp3-checkbox input:indeterminate ~ .bp3-control-indicator{
|
||
background-color:#137cbd;
|
||
background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.1)), to(rgba(255, 255, 255, 0)));
|
||
background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0));
|
||
-webkit-box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.4), inset 0 -1px 0 rgba(16, 22, 26, 0.2);
|
||
box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.4), inset 0 -1px 0 rgba(16, 22, 26, 0.2);
|
||
color:#ffffff; }
|
||
.bp3-control.bp3-checkbox:hover input:indeterminate ~ .bp3-control-indicator{
|
||
background-color:#106ba3;
|
||
-webkit-box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.4), inset 0 -1px 0 rgba(16, 22, 26, 0.2);
|
||
box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.4), inset 0 -1px 0 rgba(16, 22, 26, 0.2); }
|
||
.bp3-control.bp3-checkbox input:not(:disabled):active:indeterminate ~ .bp3-control-indicator{
|
||
background:#0e5a8a;
|
||
-webkit-box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.4), inset 0 1px 2px rgba(16, 22, 26, 0.2);
|
||
box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.4), inset 0 1px 2px rgba(16, 22, 26, 0.2); }
|
||
.bp3-control.bp3-checkbox input:disabled:indeterminate ~ .bp3-control-indicator{
|
||
background:rgba(19, 124, 189, 0.5);
|
||
-webkit-box-shadow:none;
|
||
box-shadow:none; }
|
||
.bp3-dark .bp3-control.bp3-checkbox input:indeterminate ~ .bp3-control-indicator{
|
||
-webkit-box-shadow:0 0 0 1px rgba(16, 22, 26, 0.4);
|
||
box-shadow:0 0 0 1px rgba(16, 22, 26, 0.4); }
|
||
.bp3-dark .bp3-control.bp3-checkbox:hover input:indeterminate ~ .bp3-control-indicator{
|
||
background-color:#106ba3;
|
||
-webkit-box-shadow:0 0 0 1px rgba(16, 22, 26, 0.4);
|
||
box-shadow:0 0 0 1px rgba(16, 22, 26, 0.4); }
|
||
.bp3-dark .bp3-control.bp3-checkbox input:not(:disabled):active:indeterminate ~ .bp3-control-indicator{
|
||
background-color:#0e5a8a;
|
||
-webkit-box-shadow:0 0 0 1px rgba(16, 22, 26, 0.4), inset 0 1px 2px rgba(16, 22, 26, 0.2);
|
||
box-shadow:0 0 0 1px rgba(16, 22, 26, 0.4), inset 0 1px 2px rgba(16, 22, 26, 0.2); }
|
||
.bp3-dark .bp3-control.bp3-checkbox input:disabled:indeterminate ~ .bp3-control-indicator{
|
||
background:rgba(14, 90, 138, 0.5);
|
||
-webkit-box-shadow:none;
|
||
box-shadow:none; }
|
||
.bp3-control.bp3-checkbox .bp3-control-indicator{
|
||
border-radius:3px; }
|
||
.bp3-control.bp3-checkbox input:checked ~ .bp3-control-indicator::before{
|
||
background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill-rule='evenodd' clip-rule='evenodd' d='M12 5c-.28 0-.53.11-.71.29L7 9.59l-2.29-2.3a1.003 1.003 0 00-1.42 1.42l3 3c.18.18.43.29.71.29s.53-.11.71-.29l5-5A1.003 1.003 0 0012 5z' fill='white'/%3e%3c/svg%3e"); }
|
||
.bp3-control.bp3-checkbox input:indeterminate ~ .bp3-control-indicator::before{
|
||
background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill-rule='evenodd' clip-rule='evenodd' d='M11 7H5c-.55 0-1 .45-1 1s.45 1 1 1h6c.55 0 1-.45 1-1s-.45-1-1-1z' fill='white'/%3e%3c/svg%3e"); }
|
||
.bp3-control.bp3-radio .bp3-control-indicator{
|
||
border-radius:50%; }
|
||
.bp3-control.bp3-radio input:checked ~ .bp3-control-indicator::before{
|
||
background-image:radial-gradient(#ffffff, #ffffff 28%, transparent 32%); }
|
||
.bp3-control.bp3-radio input:checked:disabled ~ .bp3-control-indicator::before{
|
||
opacity:0.5; }
|
||
.bp3-control.bp3-radio input:focus ~ .bp3-control-indicator{
|
||
-moz-outline-radius:16px; }
|
||
.bp3-control.bp3-switch input ~ .bp3-control-indicator{
|
||
background:rgba(167, 182, 194, 0.5); }
|
||
.bp3-control.bp3-switch:hover input ~ .bp3-control-indicator{
|
||
background:rgba(115, 134, 148, 0.5); }
|
||
.bp3-control.bp3-switch input:not(:disabled):active ~ .bp3-control-indicator{
|
||
background:rgba(92, 112, 128, 0.5); }
|
||
.bp3-control.bp3-switch input:disabled ~ .bp3-control-indicator{
|
||
background:rgba(206, 217, 224, 0.5); }
|
||
.bp3-control.bp3-switch input:disabled ~ .bp3-control-indicator::before{
|
||
background:rgba(255, 255, 255, 0.8); }
|
||
.bp3-control.bp3-switch input:checked ~ .bp3-control-indicator{
|
||
background:#137cbd; }
|
||
.bp3-control.bp3-switch:hover input:checked ~ .bp3-control-indicator{
|
||
background:#106ba3; }
|
||
.bp3-control.bp3-switch input:checked:not(:disabled):active ~ .bp3-control-indicator{
|
||
background:#0e5a8a; }
|
||
.bp3-control.bp3-switch input:checked:disabled ~ .bp3-control-indicator{
|
||
background:rgba(19, 124, 189, 0.5); }
|
||
.bp3-control.bp3-switch input:checked:disabled ~ .bp3-control-indicator::before{
|
||
background:rgba(255, 255, 255, 0.8); }
|
||
.bp3-control.bp3-switch:not(.bp3-align-right){
|
||
padding-left:38px; }
|
||
.bp3-control.bp3-switch:not(.bp3-align-right) .bp3-control-indicator{
|
||
margin-left:-38px; }
|
||
.bp3-control.bp3-switch.bp3-align-right{
|
||
padding-right:38px; }
|
||
.bp3-control.bp3-switch.bp3-align-right .bp3-control-indicator{
|
||
margin-right:-38px; }
|
||
.bp3-control.bp3-switch .bp3-control-indicator{
|
||
border:none;
|
||
border-radius:1.75em;
|
||
-webkit-box-shadow:none !important;
|
||
box-shadow:none !important;
|
||
min-width:1.75em;
|
||
-webkit-transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9);
|
||
transition:background-color 100ms cubic-bezier(0.4, 1, 0.75, 0.9);
|
||
width:auto; }
|
||
.bp3-control.bp3-switch .bp3-control-indicator::before{
|
||
background:#ffffff;
|
||
border-radius:50%;
|
||
-webkit-box-shadow:0 0 0 1px rgba(16, 22, 26, 0.2), 0 1px 1px rgba(16, 22, 26, 0.2);
|
||
box-shadow:0 0 0 1px rgba(16, 22, 26, 0.2), 0 1px 1px rgba(16, 22, 26, 0.2);
|
||
height:calc(1em - 4px);
|
||
left:0;
|
||
margin:2px;
|
||
position:absolute;
|
||
-webkit-transition:left 100ms cubic-bezier(0.4, 1, 0.75, 0.9);
|
||
transition:left 100ms cubic-bezier(0.4, 1, 0.75, 0.9);
|
||
width:calc(1em - 4px); }
|
||
.bp3-control.bp3-switch input:checked ~ .bp3-control-indicator::before{
|
||
left:calc(100% - 1em); }
|
||
.bp3-control.bp3-switch.bp3-large:not(.bp3-align-right){
|
||
padding-left:45px; }
|
||
.bp3-control.bp3-switch.bp3-large:not(.bp3-align-right) .bp3-control-indicator{
|
||
margin-left:-45px; }
|
||
.bp3-control.bp3-switch.bp3-large.bp3-align-right{
|
||
padding-right:45px; }
|
||
.bp3-control.bp3-switch.bp3-large.bp3-align-right .bp3-control-indicator{
|
||
margin-right:-45px; }
|
||
.bp3-dark .bp3-control.bp3-switch input ~ .bp3-control-indicator{
|
||
background:rgba(16, 22, 26, 0.5); }
|
||
.bp3-dark .bp3-control.bp3-switch:hover input ~ .bp3-control-indicator{
|
||
background:rgba(16, 22, 26, 0.7); }
|
||
.bp3-dark .bp3-control.bp3-switch input:not(:disabled):active ~ .bp3-control-indicator{
|
||
background:rgba(16, 22, 26, 0.9); }
|
||
.bp3-dark .bp3-control.bp3-switch input:disabled ~ .bp3-control-indicator{
|
||
background:rgba(57, 75, 89, 0.5); }
|
||
.bp3-dark .bp3-control.bp3-switch input:disabled ~ .bp3-control-indicator::before{
|
||
background:rgba(16, 22, 26, 0.4); }
|
||
.bp3-dark .bp3-control.bp3-switch input:checked ~ .bp3-control-indicator{
|
||
background:#137cbd; }
|
||
.bp3-dark .bp3-control.bp3-switch:hover input:checked ~ .bp3-control-indicator{
|
||
background:#106ba3; }
|
||
.bp3-dark .bp3-control.bp3-switch input:checked:not(:disabled):active ~ .bp3-control-indicator{
|
||
background:#0e5a8a; }
|
||
.bp3-dark .bp3-control.bp3-switch input:checked:disabled ~ .bp3-control-indicator{
|
||
background:rgba(14, 90, 138, 0.5); }
|
||
.bp3-dark .bp3-control.bp3-switch input:checked:disabled ~ .bp3-control-indicator::before{
|
||
background:rgba(16, 22, 26, 0.4); }
|
||
.bp3-dark .bp3-control.bp3-switch .bp3-control-indicator::before{
|
||
background:#394b59;
|
||
-webkit-box-shadow:0 0 0 1px rgba(16, 22, 26, 0.4);
|
||
box-shadow:0 0 0 1px rgba(16, 22, 26, 0.4); }
|
||
.bp3-dark .bp3-control.bp3-switch input:checked ~ .bp3-control-indicator::before{
|
||
-webkit-box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.4);
|
||
box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.4); }
|
||
.bp3-control.bp3-switch .bp3-switch-inner-text{
|
||
font-size:0.7em;
|
||
text-align:center; }
|
||
.bp3-control.bp3-switch .bp3-control-indicator-child:first-child{
|
||
line-height:0;
|
||
margin-left:0.5em;
|
||
margin-right:1.2em;
|
||
visibility:hidden; }
|
||
.bp3-control.bp3-switch .bp3-control-indicator-child:last-child{
|
||
line-height:1em;
|
||
margin-left:1.2em;
|
||
margin-right:0.5em;
|
||
visibility:visible; }
|
||
.bp3-control.bp3-switch input:checked ~ .bp3-control-indicator .bp3-control-indicator-child:first-child{
|
||
line-height:1em;
|
||
visibility:visible; }
|
||
.bp3-control.bp3-switch input:checked ~ .bp3-control-indicator .bp3-control-indicator-child:last-child{
|
||
line-height:0;
|
||
visibility:hidden; }
|
||
.bp3-dark .bp3-control{
|
||
color:#f5f8fa; }
|
||
.bp3-dark .bp3-control.bp3-disabled{
|
||
color:rgba(167, 182, 194, 0.6); }
|
||
.bp3-dark .bp3-control .bp3-control-indicator{
|
||
background-color:#394b59;
|
||
background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));
|
||
background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));
|
||
-webkit-box-shadow:0 0 0 1px rgba(16, 22, 26, 0.4);
|
||
box-shadow:0 0 0 1px rgba(16, 22, 26, 0.4); }
|
||
.bp3-dark .bp3-control:hover .bp3-control-indicator{
|
||
background-color:#30404d; }
|
||
.bp3-dark .bp3-control input:not(:disabled):active ~ .bp3-control-indicator{
|
||
background:#202b33;
|
||
-webkit-box-shadow:0 0 0 1px rgba(16, 22, 26, 0.6), inset 0 1px 2px rgba(16, 22, 26, 0.2);
|
||
box-shadow:0 0 0 1px rgba(16, 22, 26, 0.6), inset 0 1px 2px rgba(16, 22, 26, 0.2); }
|
||
.bp3-dark .bp3-control input:disabled ~ .bp3-control-indicator{
|
||
background:rgba(57, 75, 89, 0.5);
|
||
-webkit-box-shadow:none;
|
||
box-shadow:none;
|
||
cursor:not-allowed; }
|
||
.bp3-dark .bp3-control.bp3-checkbox input:disabled:checked ~ .bp3-control-indicator, .bp3-dark .bp3-control.bp3-checkbox input:disabled:indeterminate ~ .bp3-control-indicator{
|
||
color:rgba(167, 182, 194, 0.6); }
|
||
.bp3-file-input{
|
||
cursor:pointer;
|
||
display:inline-block;
|
||
height:30px;
|
||
position:relative; }
|
||
.bp3-file-input input{
|
||
margin:0;
|
||
min-width:200px;
|
||
opacity:0; }
|
||
.bp3-file-input input:disabled + .bp3-file-upload-input,
|
||
.bp3-file-input input.bp3-disabled + .bp3-file-upload-input{
|
||
background:rgba(206, 217, 224, 0.5);
|
||
-webkit-box-shadow:none;
|
||
box-shadow:none;
|
||
color:rgba(92, 112, 128, 0.6);
|
||
cursor:not-allowed;
|
||
resize:none; }
|
||
.bp3-file-input input:disabled + .bp3-file-upload-input::after,
|
||
.bp3-file-input input.bp3-disabled + .bp3-file-upload-input::after{
|
||
background-color:rgba(206, 217, 224, 0.5);
|
||
background-image:none;
|
||
-webkit-box-shadow:none;
|
||
box-shadow:none;
|
||
color:rgba(92, 112, 128, 0.6);
|
||
cursor:not-allowed;
|
||
outline:none; }
|
||
.bp3-file-input input:disabled + .bp3-file-upload-input::after.bp3-active, .bp3-file-input input:disabled + .bp3-file-upload-input::after.bp3-active:hover,
|
||
.bp3-file-input input.bp3-disabled + .bp3-file-upload-input::after.bp3-active,
|
||
.bp3-file-input input.bp3-disabled + .bp3-file-upload-input::after.bp3-active:hover{
|
||
background:rgba(206, 217, 224, 0.7); }
|
||
.bp3-dark .bp3-file-input input:disabled + .bp3-file-upload-input, .bp3-dark
|
||
.bp3-file-input input.bp3-disabled + .bp3-file-upload-input{
|
||
background:rgba(57, 75, 89, 0.5);
|
||
-webkit-box-shadow:none;
|
||
box-shadow:none;
|
||
color:rgba(167, 182, 194, 0.6); }
|
||
.bp3-dark .bp3-file-input input:disabled + .bp3-file-upload-input::after, .bp3-dark
|
||
.bp3-file-input input.bp3-disabled + .bp3-file-upload-input::after{
|
||
background-color:rgba(57, 75, 89, 0.5);
|
||
background-image:none;
|
||
-webkit-box-shadow:none;
|
||
box-shadow:none;
|
||
color:rgba(167, 182, 194, 0.6); }
|
||
.bp3-dark .bp3-file-input input:disabled + .bp3-file-upload-input::after.bp3-active, .bp3-dark
|
||
.bp3-file-input input.bp3-disabled + .bp3-file-upload-input::after.bp3-active{
|
||
background:rgba(57, 75, 89, 0.7); }
|
||
.bp3-file-input.bp3-file-input-has-selection .bp3-file-upload-input{
|
||
color:#182026; }
|
||
.bp3-dark .bp3-file-input.bp3-file-input-has-selection .bp3-file-upload-input{
|
||
color:#f5f8fa; }
|
||
.bp3-file-input.bp3-fill{
|
||
width:100%; }
|
||
.bp3-file-input.bp3-large,
|
||
.bp3-large .bp3-file-input{
|
||
height:40px; }
|
||
.bp3-file-input .bp3-file-upload-input-custom-text::after{
|
||
content:attr(bp3-button-text); }
|
||
|
||
.bp3-file-upload-input{
|
||
-webkit-appearance:none;
|
||
-moz-appearance:none;
|
||
appearance:none;
|
||
background:#ffffff;
|
||
border:none;
|
||
border-radius:3px;
|
||
-webkit-box-shadow:0 0 0 0 rgba(19, 124, 189, 0), 0 0 0 0 rgba(19, 124, 189, 0), inset 0 0 0 1px rgba(16, 22, 26, 0.15), inset 0 1px 1px rgba(16, 22, 26, 0.2);
|
||
box-shadow:0 0 0 0 rgba(19, 124, 189, 0), 0 0 0 0 rgba(19, 124, 189, 0), inset 0 0 0 1px rgba(16, 22, 26, 0.15), inset 0 1px 1px rgba(16, 22, 26, 0.2);
|
||
color:#182026;
|
||
font-size:14px;
|
||
font-weight:400;
|
||
height:30px;
|
||
line-height:30px;
|
||
outline:none;
|
||
padding:0 10px;
|
||
-webkit-transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);
|
||
transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);
|
||
transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);
|
||
transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9), -webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);
|
||
vertical-align:middle;
|
||
overflow:hidden;
|
||
text-overflow:ellipsis;
|
||
white-space:nowrap;
|
||
word-wrap:normal;
|
||
color:rgba(92, 112, 128, 0.6);
|
||
left:0;
|
||
padding-right:80px;
|
||
position:absolute;
|
||
right:0;
|
||
top:0;
|
||
-webkit-user-select:none;
|
||
-moz-user-select:none;
|
||
-ms-user-select:none;
|
||
user-select:none; }
|
||
.bp3-file-upload-input::-webkit-input-placeholder{
|
||
color:rgba(92, 112, 128, 0.6);
|
||
opacity:1; }
|
||
.bp3-file-upload-input::-moz-placeholder{
|
||
color:rgba(92, 112, 128, 0.6);
|
||
opacity:1; }
|
||
.bp3-file-upload-input:-ms-input-placeholder{
|
||
color:rgba(92, 112, 128, 0.6);
|
||
opacity:1; }
|
||
.bp3-file-upload-input::-ms-input-placeholder{
|
||
color:rgba(92, 112, 128, 0.6);
|
||
opacity:1; }
|
||
.bp3-file-upload-input::placeholder{
|
||
color:rgba(92, 112, 128, 0.6);
|
||
opacity:1; }
|
||
.bp3-file-upload-input:focus, .bp3-file-upload-input.bp3-active{
|
||
-webkit-box-shadow:0 0 0 1px #137cbd, 0 0 0 3px rgba(19, 124, 189, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.2);
|
||
box-shadow:0 0 0 1px #137cbd, 0 0 0 3px rgba(19, 124, 189, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.2); }
|
||
.bp3-file-upload-input[type="search"], .bp3-file-upload-input.bp3-round{
|
||
border-radius:30px;
|
||
-webkit-box-sizing:border-box;
|
||
box-sizing:border-box;
|
||
padding-left:10px; }
|
||
.bp3-file-upload-input[readonly]{
|
||
-webkit-box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.15);
|
||
box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.15); }
|
||
.bp3-file-upload-input:disabled, .bp3-file-upload-input.bp3-disabled{
|
||
background:rgba(206, 217, 224, 0.5);
|
||
-webkit-box-shadow:none;
|
||
box-shadow:none;
|
||
color:rgba(92, 112, 128, 0.6);
|
||
cursor:not-allowed;
|
||
resize:none; }
|
||
.bp3-file-upload-input::after{
|
||
background-color:#f5f8fa;
|
||
background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));
|
||
background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));
|
||
-webkit-box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.2), inset 0 -1px 0 rgba(16, 22, 26, 0.1);
|
||
box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.2), inset 0 -1px 0 rgba(16, 22, 26, 0.1);
|
||
color:#182026;
|
||
min-height:24px;
|
||
min-width:24px;
|
||
overflow:hidden;
|
||
text-overflow:ellipsis;
|
||
white-space:nowrap;
|
||
word-wrap:normal;
|
||
border-radius:3px;
|
||
content:"Browse";
|
||
line-height:24px;
|
||
margin:3px;
|
||
position:absolute;
|
||
right:0;
|
||
text-align:center;
|
||
top:0;
|
||
width:70px; }
|
||
.bp3-file-upload-input::after:hover{
|
||
background-clip:padding-box;
|
||
background-color:#ebf1f5;
|
||
-webkit-box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.2), inset 0 -1px 0 rgba(16, 22, 26, 0.1);
|
||
box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.2), inset 0 -1px 0 rgba(16, 22, 26, 0.1); }
|
||
.bp3-file-upload-input::after:active, .bp3-file-upload-input::after.bp3-active{
|
||
background-color:#d8e1e8;
|
||
background-image:none;
|
||
-webkit-box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.2), inset 0 1px 2px rgba(16, 22, 26, 0.2);
|
||
box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.2), inset 0 1px 2px rgba(16, 22, 26, 0.2); }
|
||
.bp3-file-upload-input::after:disabled, .bp3-file-upload-input::after.bp3-disabled{
|
||
background-color:rgba(206, 217, 224, 0.5);
|
||
background-image:none;
|
||
-webkit-box-shadow:none;
|
||
box-shadow:none;
|
||
color:rgba(92, 112, 128, 0.6);
|
||
cursor:not-allowed;
|
||
outline:none; }
|
||
.bp3-file-upload-input::after:disabled.bp3-active, .bp3-file-upload-input::after:disabled.bp3-active:hover, .bp3-file-upload-input::after.bp3-disabled.bp3-active, .bp3-file-upload-input::after.bp3-disabled.bp3-active:hover{
|
||
background:rgba(206, 217, 224, 0.7); }
|
||
.bp3-file-upload-input:hover::after{
|
||
background-clip:padding-box;
|
||
background-color:#ebf1f5;
|
||
-webkit-box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.2), inset 0 -1px 0 rgba(16, 22, 26, 0.1);
|
||
box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.2), inset 0 -1px 0 rgba(16, 22, 26, 0.1); }
|
||
.bp3-file-upload-input:active::after{
|
||
background-color:#d8e1e8;
|
||
background-image:none;
|
||
-webkit-box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.2), inset 0 1px 2px rgba(16, 22, 26, 0.2);
|
||
box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.2), inset 0 1px 2px rgba(16, 22, 26, 0.2); }
|
||
.bp3-large .bp3-file-upload-input{
|
||
font-size:16px;
|
||
height:40px;
|
||
line-height:40px;
|
||
padding-right:95px; }
|
||
.bp3-large .bp3-file-upload-input[type="search"], .bp3-large .bp3-file-upload-input.bp3-round{
|
||
padding:0 15px; }
|
||
.bp3-large .bp3-file-upload-input::after{
|
||
min-height:30px;
|
||
min-width:30px;
|
||
line-height:30px;
|
||
margin:5px;
|
||
width:85px; }
|
||
.bp3-dark .bp3-file-upload-input{
|
||
background:rgba(16, 22, 26, 0.3);
|
||
-webkit-box-shadow:0 0 0 0 rgba(19, 124, 189, 0), 0 0 0 0 rgba(19, 124, 189, 0), 0 0 0 0 rgba(19, 124, 189, 0), inset 0 0 0 1px rgba(16, 22, 26, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.4);
|
||
box-shadow:0 0 0 0 rgba(19, 124, 189, 0), 0 0 0 0 rgba(19, 124, 189, 0), 0 0 0 0 rgba(19, 124, 189, 0), inset 0 0 0 1px rgba(16, 22, 26, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.4);
|
||
color:#f5f8fa;
|
||
color:rgba(167, 182, 194, 0.6); }
|
||
.bp3-dark .bp3-file-upload-input::-webkit-input-placeholder{
|
||
color:rgba(167, 182, 194, 0.6); }
|
||
.bp3-dark .bp3-file-upload-input::-moz-placeholder{
|
||
color:rgba(167, 182, 194, 0.6); }
|
||
.bp3-dark .bp3-file-upload-input:-ms-input-placeholder{
|
||
color:rgba(167, 182, 194, 0.6); }
|
||
.bp3-dark .bp3-file-upload-input::-ms-input-placeholder{
|
||
color:rgba(167, 182, 194, 0.6); }
|
||
.bp3-dark .bp3-file-upload-input::placeholder{
|
||
color:rgba(167, 182, 194, 0.6); }
|
||
.bp3-dark .bp3-file-upload-input:focus{
|
||
-webkit-box-shadow:0 0 0 1px #137cbd, 0 0 0 1px #137cbd, 0 0 0 3px rgba(19, 124, 189, 0.3), inset 0 0 0 1px rgba(16, 22, 26, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.4);
|
||
box-shadow:0 0 0 1px #137cbd, 0 0 0 1px #137cbd, 0 0 0 3px rgba(19, 124, 189, 0.3), inset 0 0 0 1px rgba(16, 22, 26, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.4); }
|
||
.bp3-dark .bp3-file-upload-input[readonly]{
|
||
-webkit-box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.4);
|
||
box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.4); }
|
||
.bp3-dark .bp3-file-upload-input:disabled, .bp3-dark .bp3-file-upload-input.bp3-disabled{
|
||
background:rgba(57, 75, 89, 0.5);
|
||
-webkit-box-shadow:none;
|
||
box-shadow:none;
|
||
color:rgba(167, 182, 194, 0.6); }
|
||
.bp3-dark .bp3-file-upload-input::after{
|
||
background-color:#394b59;
|
||
background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));
|
||
background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));
|
||
-webkit-box-shadow:0 0 0 1px rgba(16, 22, 26, 0.4);
|
||
box-shadow:0 0 0 1px rgba(16, 22, 26, 0.4);
|
||
color:#f5f8fa; }
|
||
.bp3-dark .bp3-file-upload-input::after:hover, .bp3-dark .bp3-file-upload-input::after:active, .bp3-dark .bp3-file-upload-input::after.bp3-active{
|
||
color:#f5f8fa; }
|
||
.bp3-dark .bp3-file-upload-input::after:hover{
|
||
background-color:#30404d;
|
||
-webkit-box-shadow:0 0 0 1px rgba(16, 22, 26, 0.4);
|
||
box-shadow:0 0 0 1px rgba(16, 22, 26, 0.4); }
|
||
.bp3-dark .bp3-file-upload-input::after:active, .bp3-dark .bp3-file-upload-input::after.bp3-active{
|
||
background-color:#202b33;
|
||
background-image:none;
|
||
-webkit-box-shadow:0 0 0 1px rgba(16, 22, 26, 0.6), inset 0 1px 2px rgba(16, 22, 26, 0.2);
|
||
box-shadow:0 0 0 1px rgba(16, 22, 26, 0.6), inset 0 1px 2px rgba(16, 22, 26, 0.2); }
|
||
.bp3-dark .bp3-file-upload-input::after:disabled, .bp3-dark .bp3-file-upload-input::after.bp3-disabled{
|
||
background-color:rgba(57, 75, 89, 0.5);
|
||
background-image:none;
|
||
-webkit-box-shadow:none;
|
||
box-shadow:none;
|
||
color:rgba(167, 182, 194, 0.6); }
|
||
.bp3-dark .bp3-file-upload-input::after:disabled.bp3-active, .bp3-dark .bp3-file-upload-input::after.bp3-disabled.bp3-active{
|
||
background:rgba(57, 75, 89, 0.7); }
|
||
.bp3-dark .bp3-file-upload-input::after .bp3-button-spinner .bp3-spinner-head{
|
||
background:rgba(16, 22, 26, 0.5);
|
||
stroke:#8a9ba8; }
|
||
.bp3-dark .bp3-file-upload-input:hover::after{
|
||
background-color:#30404d;
|
||
-webkit-box-shadow:0 0 0 1px rgba(16, 22, 26, 0.4);
|
||
box-shadow:0 0 0 1px rgba(16, 22, 26, 0.4); }
|
||
.bp3-dark .bp3-file-upload-input:active::after{
|
||
background-color:#202b33;
|
||
background-image:none;
|
||
-webkit-box-shadow:0 0 0 1px rgba(16, 22, 26, 0.6), inset 0 1px 2px rgba(16, 22, 26, 0.2);
|
||
box-shadow:0 0 0 1px rgba(16, 22, 26, 0.6), inset 0 1px 2px rgba(16, 22, 26, 0.2); }
|
||
.bp3-file-upload-input::after{
|
||
-webkit-box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.2), inset 0 -1px 0 rgba(16, 22, 26, 0.1);
|
||
box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.2), inset 0 -1px 0 rgba(16, 22, 26, 0.1); }
|
||
.bp3-form-group{
|
||
display:-webkit-box;
|
||
display:-ms-flexbox;
|
||
display:flex;
|
||
-webkit-box-orient:vertical;
|
||
-webkit-box-direction:normal;
|
||
-ms-flex-direction:column;
|
||
flex-direction:column;
|
||
margin:0 0 15px; }
|
||
.bp3-form-group label.bp3-label{
|
||
margin-bottom:5px; }
|
||
.bp3-form-group .bp3-control{
|
||
margin-top:7px; }
|
||
.bp3-form-group .bp3-form-helper-text{
|
||
color:#5c7080;
|
||
font-size:12px;
|
||
margin-top:5px; }
|
||
.bp3-form-group.bp3-intent-primary .bp3-form-helper-text{
|
||
color:#106ba3; }
|
||
.bp3-form-group.bp3-intent-success .bp3-form-helper-text{
|
||
color:#0d8050; }
|
||
.bp3-form-group.bp3-intent-warning .bp3-form-helper-text{
|
||
color:#bf7326; }
|
||
.bp3-form-group.bp3-intent-danger .bp3-form-helper-text{
|
||
color:#c23030; }
|
||
.bp3-form-group.bp3-inline{
|
||
-webkit-box-align:start;
|
||
-ms-flex-align:start;
|
||
align-items:flex-start;
|
||
-webkit-box-orient:horizontal;
|
||
-webkit-box-direction:normal;
|
||
-ms-flex-direction:row;
|
||
flex-direction:row; }
|
||
.bp3-form-group.bp3-inline.bp3-large label.bp3-label{
|
||
line-height:40px;
|
||
margin:0 10px 0 0; }
|
||
.bp3-form-group.bp3-inline label.bp3-label{
|
||
line-height:30px;
|
||
margin:0 10px 0 0; }
|
||
.bp3-form-group.bp3-disabled .bp3-label,
|
||
.bp3-form-group.bp3-disabled .bp3-text-muted,
|
||
.bp3-form-group.bp3-disabled .bp3-form-helper-text{
|
||
color:rgba(92, 112, 128, 0.6) !important; }
|
||
.bp3-dark .bp3-form-group.bp3-intent-primary .bp3-form-helper-text{
|
||
color:#48aff0; }
|
||
.bp3-dark .bp3-form-group.bp3-intent-success .bp3-form-helper-text{
|
||
color:#3dcc91; }
|
||
.bp3-dark .bp3-form-group.bp3-intent-warning .bp3-form-helper-text{
|
||
color:#ffb366; }
|
||
.bp3-dark .bp3-form-group.bp3-intent-danger .bp3-form-helper-text{
|
||
color:#ff7373; }
|
||
.bp3-dark .bp3-form-group .bp3-form-helper-text{
|
||
color:#a7b6c2; }
|
||
.bp3-dark .bp3-form-group.bp3-disabled .bp3-label,
|
||
.bp3-dark .bp3-form-group.bp3-disabled .bp3-text-muted,
|
||
.bp3-dark .bp3-form-group.bp3-disabled .bp3-form-helper-text{
|
||
color:rgba(167, 182, 194, 0.6) !important; }
|
||
.bp3-input-group{
|
||
display:block;
|
||
position:relative; }
|
||
.bp3-input-group .bp3-input{
|
||
position:relative;
|
||
width:100%; }
|
||
.bp3-input-group .bp3-input:not(:first-child){
|
||
padding-left:30px; }
|
||
.bp3-input-group .bp3-input:not(:last-child){
|
||
padding-right:30px; }
|
||
.bp3-input-group .bp3-input-action,
|
||
.bp3-input-group > .bp3-input-left-container,
|
||
.bp3-input-group > .bp3-button,
|
||
.bp3-input-group > .bp3-icon{
|
||
position:absolute;
|
||
top:0; }
|
||
.bp3-input-group .bp3-input-action:first-child,
|
||
.bp3-input-group > .bp3-input-left-container:first-child,
|
||
.bp3-input-group > .bp3-button:first-child,
|
||
.bp3-input-group > .bp3-icon:first-child{
|
||
left:0; }
|
||
.bp3-input-group .bp3-input-action:last-child,
|
||
.bp3-input-group > .bp3-input-left-container:last-child,
|
||
.bp3-input-group > .bp3-button:last-child,
|
||
.bp3-input-group > .bp3-icon:last-child{
|
||
right:0; }
|
||
.bp3-input-group .bp3-button{
|
||
min-height:24px;
|
||
min-width:24px;
|
||
margin:3px;
|
||
padding:0 7px; }
|
||
.bp3-input-group .bp3-button:empty{
|
||
padding:0; }
|
||
.bp3-input-group > .bp3-input-left-container,
|
||
.bp3-input-group > .bp3-icon{
|
||
z-index:1; }
|
||
.bp3-input-group > .bp3-input-left-container > .bp3-icon,
|
||
.bp3-input-group > .bp3-icon{
|
||
color:#5c7080; }
|
||
.bp3-input-group > .bp3-input-left-container > .bp3-icon:empty,
|
||
.bp3-input-group > .bp3-icon:empty{
|
||
font-family:"Icons16", sans-serif;
|
||
font-size:16px;
|
||
font-style:normal;
|
||
font-weight:400;
|
||
line-height:1;
|
||
-moz-osx-font-smoothing:grayscale;
|
||
-webkit-font-smoothing:antialiased; }
|
||
.bp3-input-group > .bp3-input-left-container > .bp3-icon,
|
||
.bp3-input-group > .bp3-icon,
|
||
.bp3-input-group .bp3-input-action > .bp3-spinner{
|
||
margin:7px; }
|
||
.bp3-input-group .bp3-tag{
|
||
margin:5px; }
|
||
.bp3-input-group .bp3-input:not(:focus) + .bp3-button.bp3-minimal:not(:hover):not(:focus),
|
||
.bp3-input-group .bp3-input:not(:focus) + .bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus){
|
||
color:#5c7080; }
|
||
.bp3-dark .bp3-input-group .bp3-input:not(:focus) + .bp3-button.bp3-minimal:not(:hover):not(:focus), .bp3-dark
|
||
.bp3-input-group .bp3-input:not(:focus) + .bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus){
|
||
color:#a7b6c2; }
|
||
.bp3-input-group .bp3-input:not(:focus) + .bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon, .bp3-input-group .bp3-input:not(:focus) + .bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-standard, .bp3-input-group .bp3-input:not(:focus) + .bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-large,
|
||
.bp3-input-group .bp3-input:not(:focus) + .bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon,
|
||
.bp3-input-group .bp3-input:not(:focus) + .bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-standard,
|
||
.bp3-input-group .bp3-input:not(:focus) + .bp3-input-action .bp3-button.bp3-minimal:not(:hover):not(:focus) .bp3-icon-large{
|
||
color:#5c7080; }
|
||
.bp3-input-group .bp3-input:not(:focus) + .bp3-button.bp3-minimal:disabled,
|
||
.bp3-input-group .bp3-input:not(:focus) + .bp3-input-action .bp3-button.bp3-minimal:disabled{
|
||
color:rgba(92, 112, 128, 0.6) !important; }
|
||
.bp3-input-group .bp3-input:not(:focus) + .bp3-button.bp3-minimal:disabled .bp3-icon, .bp3-input-group .bp3-input:not(:focus) + .bp3-button.bp3-minimal:disabled .bp3-icon-standard, .bp3-input-group .bp3-input:not(:focus) + .bp3-button.bp3-minimal:disabled .bp3-icon-large,
|
||
.bp3-input-group .bp3-input:not(:focus) + .bp3-input-action .bp3-button.bp3-minimal:disabled .bp3-icon,
|
||
.bp3-input-group .bp3-input:not(:focus) + .bp3-input-action .bp3-button.bp3-minimal:disabled .bp3-icon-standard,
|
||
.bp3-input-group .bp3-input:not(:focus) + .bp3-input-action .bp3-button.bp3-minimal:disabled .bp3-icon-large{
|
||
color:rgba(92, 112, 128, 0.6) !important; }
|
||
.bp3-input-group.bp3-disabled{
|
||
cursor:not-allowed; }
|
||
.bp3-input-group.bp3-disabled .bp3-icon{
|
||
color:rgba(92, 112, 128, 0.6); }
|
||
.bp3-input-group.bp3-large .bp3-button{
|
||
min-height:30px;
|
||
min-width:30px;
|
||
margin:5px; }
|
||
.bp3-input-group.bp3-large > .bp3-input-left-container > .bp3-icon,
|
||
.bp3-input-group.bp3-large > .bp3-icon,
|
||
.bp3-input-group.bp3-large .bp3-input-action > .bp3-spinner{
|
||
margin:12px; }
|
||
.bp3-input-group.bp3-large .bp3-input{
|
||
font-size:16px;
|
||
height:40px;
|
||
line-height:40px; }
|
||
.bp3-input-group.bp3-large .bp3-input[type="search"], .bp3-input-group.bp3-large .bp3-input.bp3-round{
|
||
padding:0 15px; }
|
||
.bp3-input-group.bp3-large .bp3-input:not(:first-child){
|
||
padding-left:40px; }
|
||
.bp3-input-group.bp3-large .bp3-input:not(:last-child){
|
||
padding-right:40px; }
|
||
.bp3-input-group.bp3-small .bp3-button{
|
||
min-height:20px;
|
||
min-width:20px;
|
||
margin:2px; }
|
||
.bp3-input-group.bp3-small .bp3-tag{
|
||
min-height:20px;
|
||
min-width:20px;
|
||
margin:2px; }
|
||
.bp3-input-group.bp3-small > .bp3-input-left-container > .bp3-icon,
|
||
.bp3-input-group.bp3-small > .bp3-icon,
|
||
.bp3-input-group.bp3-small .bp3-input-action > .bp3-spinner{
|
||
margin:4px; }
|
||
.bp3-input-group.bp3-small .bp3-input{
|
||
font-size:12px;
|
||
height:24px;
|
||
line-height:24px;
|
||
padding-left:8px;
|
||
padding-right:8px; }
|
||
.bp3-input-group.bp3-small .bp3-input[type="search"], .bp3-input-group.bp3-small .bp3-input.bp3-round{
|
||
padding:0 12px; }
|
||
.bp3-input-group.bp3-small .bp3-input:not(:first-child){
|
||
padding-left:24px; }
|
||
.bp3-input-group.bp3-small .bp3-input:not(:last-child){
|
||
padding-right:24px; }
|
||
.bp3-input-group.bp3-fill{
|
||
-webkit-box-flex:1;
|
||
-ms-flex:1 1 auto;
|
||
flex:1 1 auto;
|
||
width:100%; }
|
||
.bp3-input-group.bp3-round .bp3-button,
|
||
.bp3-input-group.bp3-round .bp3-input,
|
||
.bp3-input-group.bp3-round .bp3-tag{
|
||
border-radius:30px; }
|
||
.bp3-dark .bp3-input-group .bp3-icon{
|
||
color:#a7b6c2; }
|
||
.bp3-dark .bp3-input-group.bp3-disabled .bp3-icon{
|
||
color:rgba(167, 182, 194, 0.6); }
|
||
.bp3-input-group.bp3-intent-primary .bp3-input{
|
||
-webkit-box-shadow:0 0 0 0 rgba(19, 124, 189, 0), 0 0 0 0 rgba(19, 124, 189, 0), inset 0 0 0 1px #137cbd, inset 0 0 0 1px rgba(16, 22, 26, 0.15), inset 0 1px 1px rgba(16, 22, 26, 0.2);
|
||
box-shadow:0 0 0 0 rgba(19, 124, 189, 0), 0 0 0 0 rgba(19, 124, 189, 0), inset 0 0 0 1px #137cbd, inset 0 0 0 1px rgba(16, 22, 26, 0.15), inset 0 1px 1px rgba(16, 22, 26, 0.2); }
|
||
.bp3-input-group.bp3-intent-primary .bp3-input:focus{
|
||
-webkit-box-shadow:0 0 0 1px #137cbd, 0 0 0 3px rgba(19, 124, 189, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.2);
|
||
box-shadow:0 0 0 1px #137cbd, 0 0 0 3px rgba(19, 124, 189, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.2); }
|
||
.bp3-input-group.bp3-intent-primary .bp3-input[readonly]{
|
||
-webkit-box-shadow:inset 0 0 0 1px #137cbd;
|
||
box-shadow:inset 0 0 0 1px #137cbd; }
|
||
.bp3-input-group.bp3-intent-primary .bp3-input:disabled, .bp3-input-group.bp3-intent-primary .bp3-input.bp3-disabled{
|
||
-webkit-box-shadow:none;
|
||
box-shadow:none; }
|
||
.bp3-input-group.bp3-intent-primary > .bp3-icon{
|
||
color:#106ba3; }
|
||
.bp3-dark .bp3-input-group.bp3-intent-primary > .bp3-icon{
|
||
color:#48aff0; }
|
||
.bp3-input-group.bp3-intent-success .bp3-input{
|
||
-webkit-box-shadow:0 0 0 0 rgba(15, 153, 96, 0), 0 0 0 0 rgba(15, 153, 96, 0), inset 0 0 0 1px #0f9960, inset 0 0 0 1px rgba(16, 22, 26, 0.15), inset 0 1px 1px rgba(16, 22, 26, 0.2);
|
||
box-shadow:0 0 0 0 rgba(15, 153, 96, 0), 0 0 0 0 rgba(15, 153, 96, 0), inset 0 0 0 1px #0f9960, inset 0 0 0 1px rgba(16, 22, 26, 0.15), inset 0 1px 1px rgba(16, 22, 26, 0.2); }
|
||
.bp3-input-group.bp3-intent-success .bp3-input:focus{
|
||
-webkit-box-shadow:0 0 0 1px #0f9960, 0 0 0 3px rgba(15, 153, 96, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.2);
|
||
box-shadow:0 0 0 1px #0f9960, 0 0 0 3px rgba(15, 153, 96, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.2); }
|
||
.bp3-input-group.bp3-intent-success .bp3-input[readonly]{
|
||
-webkit-box-shadow:inset 0 0 0 1px #0f9960;
|
||
box-shadow:inset 0 0 0 1px #0f9960; }
|
||
.bp3-input-group.bp3-intent-success .bp3-input:disabled, .bp3-input-group.bp3-intent-success .bp3-input.bp3-disabled{
|
||
-webkit-box-shadow:none;
|
||
box-shadow:none; }
|
||
.bp3-input-group.bp3-intent-success > .bp3-icon{
|
||
color:#0d8050; }
|
||
.bp3-dark .bp3-input-group.bp3-intent-success > .bp3-icon{
|
||
color:#3dcc91; }
|
||
.bp3-input-group.bp3-intent-warning .bp3-input{
|
||
-webkit-box-shadow:0 0 0 0 rgba(217, 130, 43, 0), 0 0 0 0 rgba(217, 130, 43, 0), inset 0 0 0 1px #d9822b, inset 0 0 0 1px rgba(16, 22, 26, 0.15), inset 0 1px 1px rgba(16, 22, 26, 0.2);
|
||
box-shadow:0 0 0 0 rgba(217, 130, 43, 0), 0 0 0 0 rgba(217, 130, 43, 0), inset 0 0 0 1px #d9822b, inset 0 0 0 1px rgba(16, 22, 26, 0.15), inset 0 1px 1px rgba(16, 22, 26, 0.2); }
|
||
.bp3-input-group.bp3-intent-warning .bp3-input:focus{
|
||
-webkit-box-shadow:0 0 0 1px #d9822b, 0 0 0 3px rgba(217, 130, 43, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.2);
|
||
box-shadow:0 0 0 1px #d9822b, 0 0 0 3px rgba(217, 130, 43, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.2); }
|
||
.bp3-input-group.bp3-intent-warning .bp3-input[readonly]{
|
||
-webkit-box-shadow:inset 0 0 0 1px #d9822b;
|
||
box-shadow:inset 0 0 0 1px #d9822b; }
|
||
.bp3-input-group.bp3-intent-warning .bp3-input:disabled, .bp3-input-group.bp3-intent-warning .bp3-input.bp3-disabled{
|
||
-webkit-box-shadow:none;
|
||
box-shadow:none; }
|
||
.bp3-input-group.bp3-intent-warning > .bp3-icon{
|
||
color:#bf7326; }
|
||
.bp3-dark .bp3-input-group.bp3-intent-warning > .bp3-icon{
|
||
color:#ffb366; }
|
||
.bp3-input-group.bp3-intent-danger .bp3-input{
|
||
-webkit-box-shadow:0 0 0 0 rgba(219, 55, 55, 0), 0 0 0 0 rgba(219, 55, 55, 0), inset 0 0 0 1px #db3737, inset 0 0 0 1px rgba(16, 22, 26, 0.15), inset 0 1px 1px rgba(16, 22, 26, 0.2);
|
||
box-shadow:0 0 0 0 rgba(219, 55, 55, 0), 0 0 0 0 rgba(219, 55, 55, 0), inset 0 0 0 1px #db3737, inset 0 0 0 1px rgba(16, 22, 26, 0.15), inset 0 1px 1px rgba(16, 22, 26, 0.2); }
|
||
.bp3-input-group.bp3-intent-danger .bp3-input:focus{
|
||
-webkit-box-shadow:0 0 0 1px #db3737, 0 0 0 3px rgba(219, 55, 55, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.2);
|
||
box-shadow:0 0 0 1px #db3737, 0 0 0 3px rgba(219, 55, 55, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.2); }
|
||
.bp3-input-group.bp3-intent-danger .bp3-input[readonly]{
|
||
-webkit-box-shadow:inset 0 0 0 1px #db3737;
|
||
box-shadow:inset 0 0 0 1px #db3737; }
|
||
.bp3-input-group.bp3-intent-danger .bp3-input:disabled, .bp3-input-group.bp3-intent-danger .bp3-input.bp3-disabled{
|
||
-webkit-box-shadow:none;
|
||
box-shadow:none; }
|
||
.bp3-input-group.bp3-intent-danger > .bp3-icon{
|
||
color:#c23030; }
|
||
.bp3-dark .bp3-input-group.bp3-intent-danger > .bp3-icon{
|
||
color:#ff7373; }
|
||
.bp3-input{
|
||
-webkit-appearance:none;
|
||
-moz-appearance:none;
|
||
appearance:none;
|
||
background:#ffffff;
|
||
border:none;
|
||
border-radius:3px;
|
||
-webkit-box-shadow:0 0 0 0 rgba(19, 124, 189, 0), 0 0 0 0 rgba(19, 124, 189, 0), inset 0 0 0 1px rgba(16, 22, 26, 0.15), inset 0 1px 1px rgba(16, 22, 26, 0.2);
|
||
box-shadow:0 0 0 0 rgba(19, 124, 189, 0), 0 0 0 0 rgba(19, 124, 189, 0), inset 0 0 0 1px rgba(16, 22, 26, 0.15), inset 0 1px 1px rgba(16, 22, 26, 0.2);
|
||
color:#182026;
|
||
font-size:14px;
|
||
font-weight:400;
|
||
height:30px;
|
||
line-height:30px;
|
||
outline:none;
|
||
padding:0 10px;
|
||
-webkit-transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);
|
||
transition:-webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);
|
||
transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);
|
||
transition:box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9), -webkit-box-shadow 100ms cubic-bezier(0.4, 1, 0.75, 0.9);
|
||
vertical-align:middle; }
|
||
.bp3-input::-webkit-input-placeholder{
|
||
color:rgba(92, 112, 128, 0.6);
|
||
opacity:1; }
|
||
.bp3-input::-moz-placeholder{
|
||
color:rgba(92, 112, 128, 0.6);
|
||
opacity:1; }
|
||
.bp3-input:-ms-input-placeholder{
|
||
color:rgba(92, 112, 128, 0.6);
|
||
opacity:1; }
|
||
.bp3-input::-ms-input-placeholder{
|
||
color:rgba(92, 112, 128, 0.6);
|
||
opacity:1; }
|
||
.bp3-input::placeholder{
|
||
color:rgba(92, 112, 128, 0.6);
|
||
opacity:1; }
|
||
.bp3-input:focus, .bp3-input.bp3-active{
|
||
-webkit-box-shadow:0 0 0 1px #137cbd, 0 0 0 3px rgba(19, 124, 189, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.2);
|
||
box-shadow:0 0 0 1px #137cbd, 0 0 0 3px rgba(19, 124, 189, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.2); }
|
||
.bp3-input[type="search"], .bp3-input.bp3-round{
|
||
border-radius:30px;
|
||
-webkit-box-sizing:border-box;
|
||
box-sizing:border-box;
|
||
padding-left:10px; }
|
||
.bp3-input[readonly]{
|
||
-webkit-box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.15);
|
||
box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.15); }
|
||
.bp3-input:disabled, .bp3-input.bp3-disabled{
|
||
background:rgba(206, 217, 224, 0.5);
|
||
-webkit-box-shadow:none;
|
||
box-shadow:none;
|
||
color:rgba(92, 112, 128, 0.6);
|
||
cursor:not-allowed;
|
||
resize:none; }
|
||
.bp3-input.bp3-large{
|
||
font-size:16px;
|
||
height:40px;
|
||
line-height:40px; }
|
||
.bp3-input.bp3-large[type="search"], .bp3-input.bp3-large.bp3-round{
|
||
padding:0 15px; }
|
||
.bp3-input.bp3-small{
|
||
font-size:12px;
|
||
height:24px;
|
||
line-height:24px;
|
||
padding-left:8px;
|
||
padding-right:8px; }
|
||
.bp3-input.bp3-small[type="search"], .bp3-input.bp3-small.bp3-round{
|
||
padding:0 12px; }
|
||
.bp3-input.bp3-fill{
|
||
-webkit-box-flex:1;
|
||
-ms-flex:1 1 auto;
|
||
flex:1 1 auto;
|
||
width:100%; }
|
||
.bp3-dark .bp3-input{
|
||
background:rgba(16, 22, 26, 0.3);
|
||
-webkit-box-shadow:0 0 0 0 rgba(19, 124, 189, 0), 0 0 0 0 rgba(19, 124, 189, 0), 0 0 0 0 rgba(19, 124, 189, 0), inset 0 0 0 1px rgba(16, 22, 26, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.4);
|
||
box-shadow:0 0 0 0 rgba(19, 124, 189, 0), 0 0 0 0 rgba(19, 124, 189, 0), 0 0 0 0 rgba(19, 124, 189, 0), inset 0 0 0 1px rgba(16, 22, 26, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.4);
|
||
color:#f5f8fa; }
|
||
.bp3-dark .bp3-input::-webkit-input-placeholder{
|
||
color:rgba(167, 182, 194, 0.6); }
|
||
.bp3-dark .bp3-input::-moz-placeholder{
|
||
color:rgba(167, 182, 194, 0.6); }
|
||
.bp3-dark .bp3-input:-ms-input-placeholder{
|
||
color:rgba(167, 182, 194, 0.6); }
|
||
.bp3-dark .bp3-input::-ms-input-placeholder{
|
||
color:rgba(167, 182, 194, 0.6); }
|
||
.bp3-dark .bp3-input::placeholder{
|
||
color:rgba(167, 182, 194, 0.6); }
|
||
.bp3-dark .bp3-input:focus{
|
||
-webkit-box-shadow:0 0 0 1px #137cbd, 0 0 0 1px #137cbd, 0 0 0 3px rgba(19, 124, 189, 0.3), inset 0 0 0 1px rgba(16, 22, 26, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.4);
|
||
box-shadow:0 0 0 1px #137cbd, 0 0 0 1px #137cbd, 0 0 0 3px rgba(19, 124, 189, 0.3), inset 0 0 0 1px rgba(16, 22, 26, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.4); }
|
||
.bp3-dark .bp3-input[readonly]{
|
||
-webkit-box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.4);
|
||
box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.4); }
|
||
.bp3-dark .bp3-input:disabled, .bp3-dark .bp3-input.bp3-disabled{
|
||
background:rgba(57, 75, 89, 0.5);
|
||
-webkit-box-shadow:none;
|
||
box-shadow:none;
|
||
color:rgba(167, 182, 194, 0.6); }
|
||
.bp3-input.bp3-intent-primary{
|
||
-webkit-box-shadow:0 0 0 0 rgba(19, 124, 189, 0), 0 0 0 0 rgba(19, 124, 189, 0), inset 0 0 0 1px #137cbd, inset 0 0 0 1px rgba(16, 22, 26, 0.15), inset 0 1px 1px rgba(16, 22, 26, 0.2);
|
||
box-shadow:0 0 0 0 rgba(19, 124, 189, 0), 0 0 0 0 rgba(19, 124, 189, 0), inset 0 0 0 1px #137cbd, inset 0 0 0 1px rgba(16, 22, 26, 0.15), inset 0 1px 1px rgba(16, 22, 26, 0.2); }
|
||
.bp3-input.bp3-intent-primary:focus{
|
||
-webkit-box-shadow:0 0 0 1px #137cbd, 0 0 0 3px rgba(19, 124, 189, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.2);
|
||
box-shadow:0 0 0 1px #137cbd, 0 0 0 3px rgba(19, 124, 189, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.2); }
|
||
.bp3-input.bp3-intent-primary[readonly]{
|
||
-webkit-box-shadow:inset 0 0 0 1px #137cbd;
|
||
box-shadow:inset 0 0 0 1px #137cbd; }
|
||
.bp3-input.bp3-intent-primary:disabled, .bp3-input.bp3-intent-primary.bp3-disabled{
|
||
-webkit-box-shadow:none;
|
||
box-shadow:none; }
|
||
.bp3-dark .bp3-input.bp3-intent-primary{
|
||
-webkit-box-shadow:0 0 0 0 rgba(19, 124, 189, 0), 0 0 0 0 rgba(19, 124, 189, 0), 0 0 0 0 rgba(19, 124, 189, 0), inset 0 0 0 1px #137cbd, inset 0 0 0 1px rgba(16, 22, 26, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.4);
|
||
box-shadow:0 0 0 0 rgba(19, 124, 189, 0), 0 0 0 0 rgba(19, 124, 189, 0), 0 0 0 0 rgba(19, 124, 189, 0), inset 0 0 0 1px #137cbd, inset 0 0 0 1px rgba(16, 22, 26, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.4); }
|
||
.bp3-dark .bp3-input.bp3-intent-primary:focus{
|
||
-webkit-box-shadow:0 0 0 1px #137cbd, 0 0 0 1px #137cbd, 0 0 0 3px rgba(19, 124, 189, 0.3), inset 0 0 0 1px rgba(16, 22, 26, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.4);
|
||
box-shadow:0 0 0 1px #137cbd, 0 0 0 1px #137cbd, 0 0 0 3px rgba(19, 124, 189, 0.3), inset 0 0 0 1px rgba(16, 22, 26, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.4); }
|
||
.bp3-dark .bp3-input.bp3-intent-primary[readonly]{
|
||
-webkit-box-shadow:inset 0 0 0 1px #137cbd;
|
||
box-shadow:inset 0 0 0 1px #137cbd; }
|
||
.bp3-dark .bp3-input.bp3-intent-primary:disabled, .bp3-dark .bp3-input.bp3-intent-primary.bp3-disabled{
|
||
-webkit-box-shadow:none;
|
||
box-shadow:none; }
|
||
.bp3-input.bp3-intent-success{
|
||
-webkit-box-shadow:0 0 0 0 rgba(15, 153, 96, 0), 0 0 0 0 rgba(15, 153, 96, 0), inset 0 0 0 1px #0f9960, inset 0 0 0 1px rgba(16, 22, 26, 0.15), inset 0 1px 1px rgba(16, 22, 26, 0.2);
|
||
box-shadow:0 0 0 0 rgba(15, 153, 96, 0), 0 0 0 0 rgba(15, 153, 96, 0), inset 0 0 0 1px #0f9960, inset 0 0 0 1px rgba(16, 22, 26, 0.15), inset 0 1px 1px rgba(16, 22, 26, 0.2); }
|
||
.bp3-input.bp3-intent-success:focus{
|
||
-webkit-box-shadow:0 0 0 1px #0f9960, 0 0 0 3px rgba(15, 153, 96, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.2);
|
||
box-shadow:0 0 0 1px #0f9960, 0 0 0 3px rgba(15, 153, 96, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.2); }
|
||
.bp3-input.bp3-intent-success[readonly]{
|
||
-webkit-box-shadow:inset 0 0 0 1px #0f9960;
|
||
box-shadow:inset 0 0 0 1px #0f9960; }
|
||
.bp3-input.bp3-intent-success:disabled, .bp3-input.bp3-intent-success.bp3-disabled{
|
||
-webkit-box-shadow:none;
|
||
box-shadow:none; }
|
||
.bp3-dark .bp3-input.bp3-intent-success{
|
||
-webkit-box-shadow:0 0 0 0 rgba(15, 153, 96, 0), 0 0 0 0 rgba(15, 153, 96, 0), 0 0 0 0 rgba(15, 153, 96, 0), inset 0 0 0 1px #0f9960, inset 0 0 0 1px rgba(16, 22, 26, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.4);
|
||
box-shadow:0 0 0 0 rgba(15, 153, 96, 0), 0 0 0 0 rgba(15, 153, 96, 0), 0 0 0 0 rgba(15, 153, 96, 0), inset 0 0 0 1px #0f9960, inset 0 0 0 1px rgba(16, 22, 26, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.4); }
|
||
.bp3-dark .bp3-input.bp3-intent-success:focus{
|
||
-webkit-box-shadow:0 0 0 1px #0f9960, 0 0 0 1px #0f9960, 0 0 0 3px rgba(15, 153, 96, 0.3), inset 0 0 0 1px rgba(16, 22, 26, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.4);
|
||
box-shadow:0 0 0 1px #0f9960, 0 0 0 1px #0f9960, 0 0 0 3px rgba(15, 153, 96, 0.3), inset 0 0 0 1px rgba(16, 22, 26, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.4); }
|
||
.bp3-dark .bp3-input.bp3-intent-success[readonly]{
|
||
-webkit-box-shadow:inset 0 0 0 1px #0f9960;
|
||
box-shadow:inset 0 0 0 1px #0f9960; }
|
||
.bp3-dark .bp3-input.bp3-intent-success:disabled, .bp3-dark .bp3-input.bp3-intent-success.bp3-disabled{
|
||
-webkit-box-shadow:none;
|
||
box-shadow:none; }
|
||
.bp3-input.bp3-intent-warning{
|
||
-webkit-box-shadow:0 0 0 0 rgba(217, 130, 43, 0), 0 0 0 0 rgba(217, 130, 43, 0), inset 0 0 0 1px #d9822b, inset 0 0 0 1px rgba(16, 22, 26, 0.15), inset 0 1px 1px rgba(16, 22, 26, 0.2);
|
||
box-shadow:0 0 0 0 rgba(217, 130, 43, 0), 0 0 0 0 rgba(217, 130, 43, 0), inset 0 0 0 1px #d9822b, inset 0 0 0 1px rgba(16, 22, 26, 0.15), inset 0 1px 1px rgba(16, 22, 26, 0.2); }
|
||
.bp3-input.bp3-intent-warning:focus{
|
||
-webkit-box-shadow:0 0 0 1px #d9822b, 0 0 0 3px rgba(217, 130, 43, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.2);
|
||
box-shadow:0 0 0 1px #d9822b, 0 0 0 3px rgba(217, 130, 43, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.2); }
|
||
.bp3-input.bp3-intent-warning[readonly]{
|
||
-webkit-box-shadow:inset 0 0 0 1px #d9822b;
|
||
box-shadow:inset 0 0 0 1px #d9822b; }
|
||
.bp3-input.bp3-intent-warning:disabled, .bp3-input.bp3-intent-warning.bp3-disabled{
|
||
-webkit-box-shadow:none;
|
||
box-shadow:none; }
|
||
.bp3-dark .bp3-input.bp3-intent-warning{
|
||
-webkit-box-shadow:0 0 0 0 rgba(217, 130, 43, 0), 0 0 0 0 rgba(217, 130, 43, 0), 0 0 0 0 rgba(217, 130, 43, 0), inset 0 0 0 1px #d9822b, inset 0 0 0 1px rgba(16, 22, 26, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.4);
|
||
box-shadow:0 0 0 0 rgba(217, 130, 43, 0), 0 0 0 0 rgba(217, 130, 43, 0), 0 0 0 0 rgba(217, 130, 43, 0), inset 0 0 0 1px #d9822b, inset 0 0 0 1px rgba(16, 22, 26, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.4); }
|
||
.bp3-dark .bp3-input.bp3-intent-warning:focus{
|
||
-webkit-box-shadow:0 0 0 1px #d9822b, 0 0 0 1px #d9822b, 0 0 0 3px rgba(217, 130, 43, 0.3), inset 0 0 0 1px rgba(16, 22, 26, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.4);
|
||
box-shadow:0 0 0 1px #d9822b, 0 0 0 1px #d9822b, 0 0 0 3px rgba(217, 130, 43, 0.3), inset 0 0 0 1px rgba(16, 22, 26, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.4); }
|
||
.bp3-dark .bp3-input.bp3-intent-warning[readonly]{
|
||
-webkit-box-shadow:inset 0 0 0 1px #d9822b;
|
||
box-shadow:inset 0 0 0 1px #d9822b; }
|
||
.bp3-dark .bp3-input.bp3-intent-warning:disabled, .bp3-dark .bp3-input.bp3-intent-warning.bp3-disabled{
|
||
-webkit-box-shadow:none;
|
||
box-shadow:none; }
|
||
.bp3-input.bp3-intent-danger{
|
||
-webkit-box-shadow:0 0 0 0 rgba(219, 55, 55, 0), 0 0 0 0 rgba(219, 55, 55, 0), inset 0 0 0 1px #db3737, inset 0 0 0 1px rgba(16, 22, 26, 0.15), inset 0 1px 1px rgba(16, 22, 26, 0.2);
|
||
box-shadow:0 0 0 0 rgba(219, 55, 55, 0), 0 0 0 0 rgba(219, 55, 55, 0), inset 0 0 0 1px #db3737, inset 0 0 0 1px rgba(16, 22, 26, 0.15), inset 0 1px 1px rgba(16, 22, 26, 0.2); }
|
||
.bp3-input.bp3-intent-danger:focus{
|
||
-webkit-box-shadow:0 0 0 1px #db3737, 0 0 0 3px rgba(219, 55, 55, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.2);
|
||
box-shadow:0 0 0 1px #db3737, 0 0 0 3px rgba(219, 55, 55, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.2); }
|
||
.bp3-input.bp3-intent-danger[readonly]{
|
||
-webkit-box-shadow:inset 0 0 0 1px #db3737;
|
||
box-shadow:inset 0 0 0 1px #db3737; }
|
||
.bp3-input.bp3-intent-danger:disabled, .bp3-input.bp3-intent-danger.bp3-disabled{
|
||
-webkit-box-shadow:none;
|
||
box-shadow:none; }
|
||
.bp3-dark .bp3-input.bp3-intent-danger{
|
||
-webkit-box-shadow:0 0 0 0 rgba(219, 55, 55, 0), 0 0 0 0 rgba(219, 55, 55, 0), 0 0 0 0 rgba(219, 55, 55, 0), inset 0 0 0 1px #db3737, inset 0 0 0 1px rgba(16, 22, 26, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.4);
|
||
box-shadow:0 0 0 0 rgba(219, 55, 55, 0), 0 0 0 0 rgba(219, 55, 55, 0), 0 0 0 0 rgba(219, 55, 55, 0), inset 0 0 0 1px #db3737, inset 0 0 0 1px rgba(16, 22, 26, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.4); }
|
||
.bp3-dark .bp3-input.bp3-intent-danger:focus{
|
||
-webkit-box-shadow:0 0 0 1px #db3737, 0 0 0 1px #db3737, 0 0 0 3px rgba(219, 55, 55, 0.3), inset 0 0 0 1px rgba(16, 22, 26, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.4);
|
||
box-shadow:0 0 0 1px #db3737, 0 0 0 1px #db3737, 0 0 0 3px rgba(219, 55, 55, 0.3), inset 0 0 0 1px rgba(16, 22, 26, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.4); }
|
||
.bp3-dark .bp3-input.bp3-intent-danger[readonly]{
|
||
-webkit-box-shadow:inset 0 0 0 1px #db3737;
|
||
box-shadow:inset 0 0 0 1px #db3737; }
|
||
.bp3-dark .bp3-input.bp3-intent-danger:disabled, .bp3-dark .bp3-input.bp3-intent-danger.bp3-disabled{
|
||
-webkit-box-shadow:none;
|
||
box-shadow:none; }
|
||
.bp3-input::-ms-clear{
|
||
display:none; }
|
||
textarea.bp3-input{
|
||
max-width:100%;
|
||
padding:10px; }
|
||
textarea.bp3-input, textarea.bp3-input.bp3-large, textarea.bp3-input.bp3-small{
|
||
height:auto;
|
||
line-height:inherit; }
|
||
textarea.bp3-input.bp3-small{
|
||
padding:8px; }
|
||
.bp3-dark textarea.bp3-input{
|
||
background:rgba(16, 22, 26, 0.3);
|
||
-webkit-box-shadow:0 0 0 0 rgba(19, 124, 189, 0), 0 0 0 0 rgba(19, 124, 189, 0), 0 0 0 0 rgba(19, 124, 189, 0), inset 0 0 0 1px rgba(16, 22, 26, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.4);
|
||
box-shadow:0 0 0 0 rgba(19, 124, 189, 0), 0 0 0 0 rgba(19, 124, 189, 0), 0 0 0 0 rgba(19, 124, 189, 0), inset 0 0 0 1px rgba(16, 22, 26, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.4);
|
||
color:#f5f8fa; }
|
||
.bp3-dark textarea.bp3-input::-webkit-input-placeholder{
|
||
color:rgba(167, 182, 194, 0.6); }
|
||
.bp3-dark textarea.bp3-input::-moz-placeholder{
|
||
color:rgba(167, 182, 194, 0.6); }
|
||
.bp3-dark textarea.bp3-input:-ms-input-placeholder{
|
||
color:rgba(167, 182, 194, 0.6); }
|
||
.bp3-dark textarea.bp3-input::-ms-input-placeholder{
|
||
color:rgba(167, 182, 194, 0.6); }
|
||
.bp3-dark textarea.bp3-input::placeholder{
|
||
color:rgba(167, 182, 194, 0.6); }
|
||
.bp3-dark textarea.bp3-input:focus{
|
||
-webkit-box-shadow:0 0 0 1px #137cbd, 0 0 0 1px #137cbd, 0 0 0 3px rgba(19, 124, 189, 0.3), inset 0 0 0 1px rgba(16, 22, 26, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.4);
|
||
box-shadow:0 0 0 1px #137cbd, 0 0 0 1px #137cbd, 0 0 0 3px rgba(19, 124, 189, 0.3), inset 0 0 0 1px rgba(16, 22, 26, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.4); }
|
||
.bp3-dark textarea.bp3-input[readonly]{
|
||
-webkit-box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.4);
|
||
box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.4); }
|
||
.bp3-dark textarea.bp3-input:disabled, .bp3-dark textarea.bp3-input.bp3-disabled{
|
||
background:rgba(57, 75, 89, 0.5);
|
||
-webkit-box-shadow:none;
|
||
box-shadow:none;
|
||
color:rgba(167, 182, 194, 0.6); }
|
||
label.bp3-label{
|
||
display:block;
|
||
margin-bottom:15px;
|
||
margin-top:0; }
|
||
label.bp3-label .bp3-html-select,
|
||
label.bp3-label .bp3-input,
|
||
label.bp3-label .bp3-select,
|
||
label.bp3-label .bp3-slider,
|
||
label.bp3-label .bp3-popover-wrapper{
|
||
display:block;
|
||
margin-top:5px;
|
||
text-transform:none; }
|
||
label.bp3-label .bp3-button-group{
|
||
margin-top:5px; }
|
||
label.bp3-label .bp3-select select,
|
||
label.bp3-label .bp3-html-select select{
|
||
font-weight:400;
|
||
vertical-align:top;
|
||
width:100%; }
|
||
label.bp3-label.bp3-disabled,
|
||
label.bp3-label.bp3-disabled .bp3-text-muted{
|
||
color:rgba(92, 112, 128, 0.6); }
|
||
label.bp3-label.bp3-inline{
|
||
line-height:30px; }
|
||
label.bp3-label.bp3-inline .bp3-html-select,
|
||
label.bp3-label.bp3-inline .bp3-input,
|
||
label.bp3-label.bp3-inline .bp3-input-group,
|
||
label.bp3-label.bp3-inline .bp3-select,
|
||
label.bp3-label.bp3-inline .bp3-popover-wrapper{
|
||
display:inline-block;
|
||
margin:0 0 0 5px;
|
||
vertical-align:top; }
|
||
label.bp3-label.bp3-inline .bp3-button-group{
|
||
margin:0 0 0 5px; }
|
||
label.bp3-label.bp3-inline .bp3-input-group .bp3-input{
|
||
margin-left:0; }
|
||
label.bp3-label.bp3-inline.bp3-large{
|
||
line-height:40px; }
|
||
label.bp3-label:not(.bp3-inline) .bp3-popover-target{
|
||
display:block; }
|
||
.bp3-dark label.bp3-label{
|
||
color:#f5f8fa; }
|
||
.bp3-dark label.bp3-label.bp3-disabled,
|
||
.bp3-dark label.bp3-label.bp3-disabled .bp3-text-muted{
|
||
color:rgba(167, 182, 194, 0.6); }
|
||
.bp3-numeric-input .bp3-button-group.bp3-vertical > .bp3-button{
|
||
-webkit-box-flex:1;
|
||
-ms-flex:1 1 14px;
|
||
flex:1 1 14px;
|
||
min-height:0;
|
||
padding:0;
|
||
width:30px; }
|
||
.bp3-numeric-input .bp3-button-group.bp3-vertical > .bp3-button:first-child{
|
||
border-radius:0 3px 0 0; }
|
||
.bp3-numeric-input .bp3-button-group.bp3-vertical > .bp3-button:last-child{
|
||
border-radius:0 0 3px 0; }
|
||
|
||
.bp3-numeric-input .bp3-button-group.bp3-vertical:first-child > .bp3-button:first-child{
|
||
border-radius:3px 0 0 0; }
|
||
|
||
.bp3-numeric-input .bp3-button-group.bp3-vertical:first-child > .bp3-button:last-child{
|
||
border-radius:0 0 0 3px; }
|
||
|
||
.bp3-numeric-input.bp3-large .bp3-button-group.bp3-vertical > .bp3-button{
|
||
width:40px; }
|
||
|
||
form{
|
||
display:block; }
|
||
.bp3-html-select select,
|
||
.bp3-select select{
|
||
display:-webkit-inline-box;
|
||
display:-ms-inline-flexbox;
|
||
display:inline-flex;
|
||
-webkit-box-orient:horizontal;
|
||
-webkit-box-direction:normal;
|
||
-ms-flex-direction:row;
|
||
flex-direction:row;
|
||
-webkit-box-align:center;
|
||
-ms-flex-align:center;
|
||
align-items:center;
|
||
border:none;
|
||
border-radius:3px;
|
||
cursor:pointer;
|
||
font-size:14px;
|
||
-webkit-box-pack:center;
|
||
-ms-flex-pack:center;
|
||
justify-content:center;
|
||
padding:5px 10px;
|
||
text-align:left;
|
||
vertical-align:middle;
|
||
background-color:#f5f8fa;
|
||
background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));
|
||
background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));
|
||
-webkit-box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.2), inset 0 -1px 0 rgba(16, 22, 26, 0.1);
|
||
box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.2), inset 0 -1px 0 rgba(16, 22, 26, 0.1);
|
||
color:#182026;
|
||
-moz-appearance:none;
|
||
-webkit-appearance:none;
|
||
border-radius:3px;
|
||
height:30px;
|
||
padding:0 25px 0 10px;
|
||
width:100%; }
|
||
.bp3-html-select select > *, .bp3-select select > *{
|
||
-webkit-box-flex:0;
|
||
-ms-flex-positive:0;
|
||
flex-grow:0;
|
||
-ms-flex-negative:0;
|
||
flex-shrink:0; }
|
||
.bp3-html-select select > .bp3-fill, .bp3-select select > .bp3-fill{
|
||
-webkit-box-flex:1;
|
||
-ms-flex-positive:1;
|
||
flex-grow:1;
|
||
-ms-flex-negative:1;
|
||
flex-shrink:1; }
|
||
.bp3-html-select select::before,
|
||
.bp3-select select::before, .bp3-html-select select > *, .bp3-select select > *{
|
||
margin-right:7px; }
|
||
.bp3-html-select select:empty::before,
|
||
.bp3-select select:empty::before,
|
||
.bp3-html-select select > :last-child,
|
||
.bp3-select select > :last-child{
|
||
margin-right:0; }
|
||
.bp3-html-select select:hover,
|
||
.bp3-select select:hover{
|
||
background-clip:padding-box;
|
||
background-color:#ebf1f5;
|
||
-webkit-box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.2), inset 0 -1px 0 rgba(16, 22, 26, 0.1);
|
||
box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.2), inset 0 -1px 0 rgba(16, 22, 26, 0.1); }
|
||
.bp3-html-select select:active,
|
||
.bp3-select select:active, .bp3-html-select select.bp3-active,
|
||
.bp3-select select.bp3-active{
|
||
background-color:#d8e1e8;
|
||
background-image:none;
|
||
-webkit-box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.2), inset 0 1px 2px rgba(16, 22, 26, 0.2);
|
||
box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.2), inset 0 1px 2px rgba(16, 22, 26, 0.2); }
|
||
.bp3-html-select select:disabled,
|
||
.bp3-select select:disabled, .bp3-html-select select.bp3-disabled,
|
||
.bp3-select select.bp3-disabled{
|
||
background-color:rgba(206, 217, 224, 0.5);
|
||
background-image:none;
|
||
-webkit-box-shadow:none;
|
||
box-shadow:none;
|
||
color:rgba(92, 112, 128, 0.6);
|
||
cursor:not-allowed;
|
||
outline:none; }
|
||
.bp3-html-select select:disabled.bp3-active,
|
||
.bp3-select select:disabled.bp3-active, .bp3-html-select select:disabled.bp3-active:hover,
|
||
.bp3-select select:disabled.bp3-active:hover, .bp3-html-select select.bp3-disabled.bp3-active,
|
||
.bp3-select select.bp3-disabled.bp3-active, .bp3-html-select select.bp3-disabled.bp3-active:hover,
|
||
.bp3-select select.bp3-disabled.bp3-active:hover{
|
||
background:rgba(206, 217, 224, 0.7); }
|
||
|
||
.bp3-html-select.bp3-minimal select,
|
||
.bp3-select.bp3-minimal select{
|
||
background:none;
|
||
-webkit-box-shadow:none;
|
||
box-shadow:none; }
|
||
.bp3-html-select.bp3-minimal select:hover,
|
||
.bp3-select.bp3-minimal select:hover{
|
||
background:rgba(167, 182, 194, 0.3);
|
||
-webkit-box-shadow:none;
|
||
box-shadow:none;
|
||
color:#182026;
|
||
text-decoration:none; }
|
||
.bp3-html-select.bp3-minimal select:active,
|
||
.bp3-select.bp3-minimal select:active, .bp3-html-select.bp3-minimal select.bp3-active,
|
||
.bp3-select.bp3-minimal select.bp3-active{
|
||
background:rgba(115, 134, 148, 0.3);
|
||
-webkit-box-shadow:none;
|
||
box-shadow:none;
|
||
color:#182026; }
|
||
.bp3-html-select.bp3-minimal select:disabled,
|
||
.bp3-select.bp3-minimal select:disabled, .bp3-html-select.bp3-minimal select:disabled:hover,
|
||
.bp3-select.bp3-minimal select:disabled:hover, .bp3-html-select.bp3-minimal select.bp3-disabled,
|
||
.bp3-select.bp3-minimal select.bp3-disabled, .bp3-html-select.bp3-minimal select.bp3-disabled:hover,
|
||
.bp3-select.bp3-minimal select.bp3-disabled:hover{
|
||
background:none;
|
||
color:rgba(92, 112, 128, 0.6);
|
||
cursor:not-allowed; }
|
||
.bp3-html-select.bp3-minimal select:disabled.bp3-active,
|
||
.bp3-select.bp3-minimal select:disabled.bp3-active, .bp3-html-select.bp3-minimal select:disabled:hover.bp3-active,
|
||
.bp3-select.bp3-minimal select:disabled:hover.bp3-active, .bp3-html-select.bp3-minimal select.bp3-disabled.bp3-active,
|
||
.bp3-select.bp3-minimal select.bp3-disabled.bp3-active, .bp3-html-select.bp3-minimal select.bp3-disabled:hover.bp3-active,
|
||
.bp3-select.bp3-minimal select.bp3-disabled:hover.bp3-active{
|
||
background:rgba(115, 134, 148, 0.3); }
|
||
.bp3-dark .bp3-html-select.bp3-minimal select, .bp3-html-select.bp3-minimal .bp3-dark select,
|
||
.bp3-dark .bp3-select.bp3-minimal select, .bp3-select.bp3-minimal .bp3-dark select{
|
||
background:none;
|
||
-webkit-box-shadow:none;
|
||
box-shadow:none;
|
||
color:inherit; }
|
||
.bp3-dark .bp3-html-select.bp3-minimal select:hover, .bp3-html-select.bp3-minimal .bp3-dark select:hover,
|
||
.bp3-dark .bp3-select.bp3-minimal select:hover, .bp3-select.bp3-minimal .bp3-dark select:hover, .bp3-dark .bp3-html-select.bp3-minimal select:active, .bp3-html-select.bp3-minimal .bp3-dark select:active,
|
||
.bp3-dark .bp3-select.bp3-minimal select:active, .bp3-select.bp3-minimal .bp3-dark select:active, .bp3-dark .bp3-html-select.bp3-minimal select.bp3-active, .bp3-html-select.bp3-minimal .bp3-dark select.bp3-active,
|
||
.bp3-dark .bp3-select.bp3-minimal select.bp3-active, .bp3-select.bp3-minimal .bp3-dark select.bp3-active{
|
||
background:none;
|
||
-webkit-box-shadow:none;
|
||
box-shadow:none; }
|
||
.bp3-dark .bp3-html-select.bp3-minimal select:hover, .bp3-html-select.bp3-minimal .bp3-dark select:hover,
|
||
.bp3-dark .bp3-select.bp3-minimal select:hover, .bp3-select.bp3-minimal .bp3-dark select:hover{
|
||
background:rgba(138, 155, 168, 0.15); }
|
||
.bp3-dark .bp3-html-select.bp3-minimal select:active, .bp3-html-select.bp3-minimal .bp3-dark select:active,
|
||
.bp3-dark .bp3-select.bp3-minimal select:active, .bp3-select.bp3-minimal .bp3-dark select:active, .bp3-dark .bp3-html-select.bp3-minimal select.bp3-active, .bp3-html-select.bp3-minimal .bp3-dark select.bp3-active,
|
||
.bp3-dark .bp3-select.bp3-minimal select.bp3-active, .bp3-select.bp3-minimal .bp3-dark select.bp3-active{
|
||
background:rgba(138, 155, 168, 0.3);
|
||
color:#f5f8fa; }
|
||
.bp3-dark .bp3-html-select.bp3-minimal select:disabled, .bp3-html-select.bp3-minimal .bp3-dark select:disabled,
|
||
.bp3-dark .bp3-select.bp3-minimal select:disabled, .bp3-select.bp3-minimal .bp3-dark select:disabled, .bp3-dark .bp3-html-select.bp3-minimal select:disabled:hover, .bp3-html-select.bp3-minimal .bp3-dark select:disabled:hover,
|
||
.bp3-dark .bp3-select.bp3-minimal select:disabled:hover, .bp3-select.bp3-minimal .bp3-dark select:disabled:hover, .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled, .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled,
|
||
.bp3-dark .bp3-select.bp3-minimal select.bp3-disabled, .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled, .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled:hover, .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled:hover,
|
||
.bp3-dark .bp3-select.bp3-minimal select.bp3-disabled:hover, .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled:hover{
|
||
background:none;
|
||
color:rgba(167, 182, 194, 0.6);
|
||
cursor:not-allowed; }
|
||
.bp3-dark .bp3-html-select.bp3-minimal select:disabled.bp3-active, .bp3-html-select.bp3-minimal .bp3-dark select:disabled.bp3-active,
|
||
.bp3-dark .bp3-select.bp3-minimal select:disabled.bp3-active, .bp3-select.bp3-minimal .bp3-dark select:disabled.bp3-active, .bp3-dark .bp3-html-select.bp3-minimal select:disabled:hover.bp3-active, .bp3-html-select.bp3-minimal .bp3-dark select:disabled:hover.bp3-active,
|
||
.bp3-dark .bp3-select.bp3-minimal select:disabled:hover.bp3-active, .bp3-select.bp3-minimal .bp3-dark select:disabled:hover.bp3-active, .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled.bp3-active, .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled.bp3-active,
|
||
.bp3-dark .bp3-select.bp3-minimal select.bp3-disabled.bp3-active, .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled.bp3-active, .bp3-dark .bp3-html-select.bp3-minimal select.bp3-disabled:hover.bp3-active, .bp3-html-select.bp3-minimal .bp3-dark select.bp3-disabled:hover.bp3-active,
|
||
.bp3-dark .bp3-select.bp3-minimal select.bp3-disabled:hover.bp3-active, .bp3-select.bp3-minimal .bp3-dark select.bp3-disabled:hover.bp3-active{
|
||
background:rgba(138, 155, 168, 0.3); }
|
||
.bp3-html-select.bp3-minimal select.bp3-intent-primary,
|
||
.bp3-select.bp3-minimal select.bp3-intent-primary{
|
||
color:#106ba3; }
|
||
.bp3-html-select.bp3-minimal select.bp3-intent-primary:hover,
|
||
.bp3-select.bp3-minimal select.bp3-intent-primary:hover, .bp3-html-select.bp3-minimal select.bp3-intent-primary:active,
|
||
.bp3-select.bp3-minimal select.bp3-intent-primary:active, .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-active,
|
||
.bp3-select.bp3-minimal select.bp3-intent-primary.bp3-active{
|
||
background:none;
|
||
-webkit-box-shadow:none;
|
||
box-shadow:none;
|
||
color:#106ba3; }
|
||
.bp3-html-select.bp3-minimal select.bp3-intent-primary:hover,
|
||
.bp3-select.bp3-minimal select.bp3-intent-primary:hover{
|
||
background:rgba(19, 124, 189, 0.15);
|
||
color:#106ba3; }
|
||
.bp3-html-select.bp3-minimal select.bp3-intent-primary:active,
|
||
.bp3-select.bp3-minimal select.bp3-intent-primary:active, .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-active,
|
||
.bp3-select.bp3-minimal select.bp3-intent-primary.bp3-active{
|
||
background:rgba(19, 124, 189, 0.3);
|
||
color:#106ba3; }
|
||
.bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled,
|
||
.bp3-select.bp3-minimal select.bp3-intent-primary:disabled, .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled,
|
||
.bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled{
|
||
background:none;
|
||
color:rgba(16, 107, 163, 0.5); }
|
||
.bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active,
|
||
.bp3-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active, .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active,
|
||
.bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active{
|
||
background:rgba(19, 124, 189, 0.3); }
|
||
.bp3-html-select.bp3-minimal select.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head, .bp3-select.bp3-minimal select.bp3-intent-primary .bp3-button-spinner .bp3-spinner-head{
|
||
stroke:#106ba3; }
|
||
.bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary, .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary,
|
||
.bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary, .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary{
|
||
color:#48aff0; }
|
||
.bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:hover, .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:hover,
|
||
.bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:hover, .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:hover{
|
||
background:rgba(19, 124, 189, 0.2);
|
||
color:#48aff0; }
|
||
.bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:active, .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:active,
|
||
.bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:active, .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:active, .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-active, .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-active,
|
||
.bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-active, .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-active{
|
||
background:rgba(19, 124, 189, 0.3);
|
||
color:#48aff0; }
|
||
.bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled, .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled,
|
||
.bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:disabled, .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled, .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled, .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled,
|
||
.bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled, .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled{
|
||
background:none;
|
||
color:rgba(72, 175, 240, 0.5); }
|
||
.bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active, .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled.bp3-active,
|
||
.bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary:disabled.bp3-active, .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary:disabled.bp3-active, .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active, .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled.bp3-active,
|
||
.bp3-dark .bp3-select.bp3-minimal select.bp3-intent-primary.bp3-disabled.bp3-active, .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-primary.bp3-disabled.bp3-active{
|
||
background:rgba(19, 124, 189, 0.3); }
|
||
.bp3-html-select.bp3-minimal select.bp3-intent-success,
|
||
.bp3-select.bp3-minimal select.bp3-intent-success{
|
||
color:#0d8050; }
|
||
.bp3-html-select.bp3-minimal select.bp3-intent-success:hover,
|
||
.bp3-select.bp3-minimal select.bp3-intent-success:hover, .bp3-html-select.bp3-minimal select.bp3-intent-success:active,
|
||
.bp3-select.bp3-minimal select.bp3-intent-success:active, .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-active,
|
||
.bp3-select.bp3-minimal select.bp3-intent-success.bp3-active{
|
||
background:none;
|
||
-webkit-box-shadow:none;
|
||
box-shadow:none;
|
||
color:#0d8050; }
|
||
.bp3-html-select.bp3-minimal select.bp3-intent-success:hover,
|
||
.bp3-select.bp3-minimal select.bp3-intent-success:hover{
|
||
background:rgba(15, 153, 96, 0.15);
|
||
color:#0d8050; }
|
||
.bp3-html-select.bp3-minimal select.bp3-intent-success:active,
|
||
.bp3-select.bp3-minimal select.bp3-intent-success:active, .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-active,
|
||
.bp3-select.bp3-minimal select.bp3-intent-success.bp3-active{
|
||
background:rgba(15, 153, 96, 0.3);
|
||
color:#0d8050; }
|
||
.bp3-html-select.bp3-minimal select.bp3-intent-success:disabled,
|
||
.bp3-select.bp3-minimal select.bp3-intent-success:disabled, .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled,
|
||
.bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled{
|
||
background:none;
|
||
color:rgba(13, 128, 80, 0.5); }
|
||
.bp3-html-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active,
|
||
.bp3-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active, .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active,
|
||
.bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active{
|
||
background:rgba(15, 153, 96, 0.3); }
|
||
.bp3-html-select.bp3-minimal select.bp3-intent-success .bp3-button-spinner .bp3-spinner-head, .bp3-select.bp3-minimal select.bp3-intent-success .bp3-button-spinner .bp3-spinner-head{
|
||
stroke:#0d8050; }
|
||
.bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success, .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success,
|
||
.bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success, .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success{
|
||
color:#3dcc91; }
|
||
.bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:hover, .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:hover,
|
||
.bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:hover, .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:hover{
|
||
background:rgba(15, 153, 96, 0.2);
|
||
color:#3dcc91; }
|
||
.bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:active, .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:active,
|
||
.bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:active, .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:active, .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-active, .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-active,
|
||
.bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success.bp3-active, .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-active{
|
||
background:rgba(15, 153, 96, 0.3);
|
||
color:#3dcc91; }
|
||
.bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled, .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled,
|
||
.bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:disabled, .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled, .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled, .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled,
|
||
.bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled, .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled{
|
||
background:none;
|
||
color:rgba(61, 204, 145, 0.5); }
|
||
.bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active, .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled.bp3-active,
|
||
.bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success:disabled.bp3-active, .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success:disabled.bp3-active, .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active, .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled.bp3-active,
|
||
.bp3-dark .bp3-select.bp3-minimal select.bp3-intent-success.bp3-disabled.bp3-active, .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-success.bp3-disabled.bp3-active{
|
||
background:rgba(15, 153, 96, 0.3); }
|
||
.bp3-html-select.bp3-minimal select.bp3-intent-warning,
|
||
.bp3-select.bp3-minimal select.bp3-intent-warning{
|
||
color:#bf7326; }
|
||
.bp3-html-select.bp3-minimal select.bp3-intent-warning:hover,
|
||
.bp3-select.bp3-minimal select.bp3-intent-warning:hover, .bp3-html-select.bp3-minimal select.bp3-intent-warning:active,
|
||
.bp3-select.bp3-minimal select.bp3-intent-warning:active, .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-active,
|
||
.bp3-select.bp3-minimal select.bp3-intent-warning.bp3-active{
|
||
background:none;
|
||
-webkit-box-shadow:none;
|
||
box-shadow:none;
|
||
color:#bf7326; }
|
||
.bp3-html-select.bp3-minimal select.bp3-intent-warning:hover,
|
||
.bp3-select.bp3-minimal select.bp3-intent-warning:hover{
|
||
background:rgba(217, 130, 43, 0.15);
|
||
color:#bf7326; }
|
||
.bp3-html-select.bp3-minimal select.bp3-intent-warning:active,
|
||
.bp3-select.bp3-minimal select.bp3-intent-warning:active, .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-active,
|
||
.bp3-select.bp3-minimal select.bp3-intent-warning.bp3-active{
|
||
background:rgba(217, 130, 43, 0.3);
|
||
color:#bf7326; }
|
||
.bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled,
|
||
.bp3-select.bp3-minimal select.bp3-intent-warning:disabled, .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled,
|
||
.bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled{
|
||
background:none;
|
||
color:rgba(191, 115, 38, 0.5); }
|
||
.bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active,
|
||
.bp3-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active, .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active,
|
||
.bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active{
|
||
background:rgba(217, 130, 43, 0.3); }
|
||
.bp3-html-select.bp3-minimal select.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head, .bp3-select.bp3-minimal select.bp3-intent-warning .bp3-button-spinner .bp3-spinner-head{
|
||
stroke:#bf7326; }
|
||
.bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning, .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning,
|
||
.bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning, .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning{
|
||
color:#ffb366; }
|
||
.bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:hover, .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:hover,
|
||
.bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:hover, .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:hover{
|
||
background:rgba(217, 130, 43, 0.2);
|
||
color:#ffb366; }
|
||
.bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:active, .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:active,
|
||
.bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:active, .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:active, .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-active, .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-active,
|
||
.bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-active, .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-active{
|
||
background:rgba(217, 130, 43, 0.3);
|
||
color:#ffb366; }
|
||
.bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled, .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled,
|
||
.bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:disabled, .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled, .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled, .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled,
|
||
.bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled, .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled{
|
||
background:none;
|
||
color:rgba(255, 179, 102, 0.5); }
|
||
.bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active, .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled.bp3-active,
|
||
.bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning:disabled.bp3-active, .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning:disabled.bp3-active, .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active, .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled.bp3-active,
|
||
.bp3-dark .bp3-select.bp3-minimal select.bp3-intent-warning.bp3-disabled.bp3-active, .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-warning.bp3-disabled.bp3-active{
|
||
background:rgba(217, 130, 43, 0.3); }
|
||
.bp3-html-select.bp3-minimal select.bp3-intent-danger,
|
||
.bp3-select.bp3-minimal select.bp3-intent-danger{
|
||
color:#c23030; }
|
||
.bp3-html-select.bp3-minimal select.bp3-intent-danger:hover,
|
||
.bp3-select.bp3-minimal select.bp3-intent-danger:hover, .bp3-html-select.bp3-minimal select.bp3-intent-danger:active,
|
||
.bp3-select.bp3-minimal select.bp3-intent-danger:active, .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-active,
|
||
.bp3-select.bp3-minimal select.bp3-intent-danger.bp3-active{
|
||
background:none;
|
||
-webkit-box-shadow:none;
|
||
box-shadow:none;
|
||
color:#c23030; }
|
||
.bp3-html-select.bp3-minimal select.bp3-intent-danger:hover,
|
||
.bp3-select.bp3-minimal select.bp3-intent-danger:hover{
|
||
background:rgba(219, 55, 55, 0.15);
|
||
color:#c23030; }
|
||
.bp3-html-select.bp3-minimal select.bp3-intent-danger:active,
|
||
.bp3-select.bp3-minimal select.bp3-intent-danger:active, .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-active,
|
||
.bp3-select.bp3-minimal select.bp3-intent-danger.bp3-active{
|
||
background:rgba(219, 55, 55, 0.3);
|
||
color:#c23030; }
|
||
.bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled,
|
||
.bp3-select.bp3-minimal select.bp3-intent-danger:disabled, .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled,
|
||
.bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled{
|
||
background:none;
|
||
color:rgba(194, 48, 48, 0.5); }
|
||
.bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active,
|
||
.bp3-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active, .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active,
|
||
.bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active{
|
||
background:rgba(219, 55, 55, 0.3); }
|
||
.bp3-html-select.bp3-minimal select.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head, .bp3-select.bp3-minimal select.bp3-intent-danger .bp3-button-spinner .bp3-spinner-head{
|
||
stroke:#c23030; }
|
||
.bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger, .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger,
|
||
.bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger, .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger{
|
||
color:#ff7373; }
|
||
.bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:hover, .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:hover,
|
||
.bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:hover, .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:hover{
|
||
background:rgba(219, 55, 55, 0.2);
|
||
color:#ff7373; }
|
||
.bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:active, .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:active,
|
||
.bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:active, .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:active, .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-active, .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-active,
|
||
.bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-active, .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-active{
|
||
background:rgba(219, 55, 55, 0.3);
|
||
color:#ff7373; }
|
||
.bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled, .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled,
|
||
.bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:disabled, .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled, .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled, .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled,
|
||
.bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled, .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled{
|
||
background:none;
|
||
color:rgba(255, 115, 115, 0.5); }
|
||
.bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active, .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled.bp3-active,
|
||
.bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger:disabled.bp3-active, .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger:disabled.bp3-active, .bp3-dark .bp3-html-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active, .bp3-html-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled.bp3-active,
|
||
.bp3-dark .bp3-select.bp3-minimal select.bp3-intent-danger.bp3-disabled.bp3-active, .bp3-select.bp3-minimal .bp3-dark select.bp3-intent-danger.bp3-disabled.bp3-active{
|
||
background:rgba(219, 55, 55, 0.3); }
|
||
|
||
.bp3-html-select.bp3-large select,
|
||
.bp3-select.bp3-large select{
|
||
font-size:16px;
|
||
height:40px;
|
||
padding-right:35px; }
|
||
|
||
.bp3-dark .bp3-html-select select, .bp3-dark .bp3-select select{
|
||
background-color:#394b59;
|
||
background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));
|
||
background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));
|
||
-webkit-box-shadow:0 0 0 1px rgba(16, 22, 26, 0.4);
|
||
box-shadow:0 0 0 1px rgba(16, 22, 26, 0.4);
|
||
color:#f5f8fa; }
|
||
.bp3-dark .bp3-html-select select:hover, .bp3-dark .bp3-select select:hover, .bp3-dark .bp3-html-select select:active, .bp3-dark .bp3-select select:active, .bp3-dark .bp3-html-select select.bp3-active, .bp3-dark .bp3-select select.bp3-active{
|
||
color:#f5f8fa; }
|
||
.bp3-dark .bp3-html-select select:hover, .bp3-dark .bp3-select select:hover{
|
||
background-color:#30404d;
|
||
-webkit-box-shadow:0 0 0 1px rgba(16, 22, 26, 0.4);
|
||
box-shadow:0 0 0 1px rgba(16, 22, 26, 0.4); }
|
||
.bp3-dark .bp3-html-select select:active, .bp3-dark .bp3-select select:active, .bp3-dark .bp3-html-select select.bp3-active, .bp3-dark .bp3-select select.bp3-active{
|
||
background-color:#202b33;
|
||
background-image:none;
|
||
-webkit-box-shadow:0 0 0 1px rgba(16, 22, 26, 0.6), inset 0 1px 2px rgba(16, 22, 26, 0.2);
|
||
box-shadow:0 0 0 1px rgba(16, 22, 26, 0.6), inset 0 1px 2px rgba(16, 22, 26, 0.2); }
|
||
.bp3-dark .bp3-html-select select:disabled, .bp3-dark .bp3-select select:disabled, .bp3-dark .bp3-html-select select.bp3-disabled, .bp3-dark .bp3-select select.bp3-disabled{
|
||
background-color:rgba(57, 75, 89, 0.5);
|
||
background-image:none;
|
||
-webkit-box-shadow:none;
|
||
box-shadow:none;
|
||
color:rgba(167, 182, 194, 0.6); }
|
||
.bp3-dark .bp3-html-select select:disabled.bp3-active, .bp3-dark .bp3-select select:disabled.bp3-active, .bp3-dark .bp3-html-select select.bp3-disabled.bp3-active, .bp3-dark .bp3-select select.bp3-disabled.bp3-active{
|
||
background:rgba(57, 75, 89, 0.7); }
|
||
.bp3-dark .bp3-html-select select .bp3-button-spinner .bp3-spinner-head, .bp3-dark .bp3-select select .bp3-button-spinner .bp3-spinner-head{
|
||
background:rgba(16, 22, 26, 0.5);
|
||
stroke:#8a9ba8; }
|
||
|
||
.bp3-html-select select:disabled,
|
||
.bp3-select select:disabled{
|
||
background-color:rgba(206, 217, 224, 0.5);
|
||
-webkit-box-shadow:none;
|
||
box-shadow:none;
|
||
color:rgba(92, 112, 128, 0.6);
|
||
cursor:not-allowed; }
|
||
|
||
.bp3-html-select .bp3-icon,
|
||
.bp3-select .bp3-icon, .bp3-select::after{
|
||
color:#5c7080;
|
||
pointer-events:none;
|
||
position:absolute;
|
||
right:7px;
|
||
top:7px; }
|
||
.bp3-html-select .bp3-disabled.bp3-icon,
|
||
.bp3-select .bp3-disabled.bp3-icon, .bp3-disabled.bp3-select::after{
|
||
color:rgba(92, 112, 128, 0.6); }
|
||
.bp3-html-select,
|
||
.bp3-select{
|
||
display:inline-block;
|
||
letter-spacing:normal;
|
||
position:relative;
|
||
vertical-align:middle; }
|
||
.bp3-html-select select::-ms-expand,
|
||
.bp3-select select::-ms-expand{
|
||
display:none; }
|
||
.bp3-html-select .bp3-icon,
|
||
.bp3-select .bp3-icon{
|
||
color:#5c7080; }
|
||
.bp3-html-select .bp3-icon:hover,
|
||
.bp3-select .bp3-icon:hover{
|
||
color:#182026; }
|
||
.bp3-dark .bp3-html-select .bp3-icon, .bp3-dark
|
||
.bp3-select .bp3-icon{
|
||
color:#a7b6c2; }
|
||
.bp3-dark .bp3-html-select .bp3-icon:hover, .bp3-dark
|
||
.bp3-select .bp3-icon:hover{
|
||
color:#f5f8fa; }
|
||
.bp3-html-select.bp3-large::after,
|
||
.bp3-html-select.bp3-large .bp3-icon,
|
||
.bp3-select.bp3-large::after,
|
||
.bp3-select.bp3-large .bp3-icon{
|
||
right:12px;
|
||
top:12px; }
|
||
.bp3-html-select.bp3-fill,
|
||
.bp3-html-select.bp3-fill select,
|
||
.bp3-select.bp3-fill,
|
||
.bp3-select.bp3-fill select{
|
||
width:100%; }
|
||
.bp3-dark .bp3-html-select option, .bp3-dark
|
||
.bp3-select option{
|
||
background-color:#30404d;
|
||
color:#f5f8fa; }
|
||
.bp3-dark .bp3-html-select option:disabled, .bp3-dark
|
||
.bp3-select option:disabled{
|
||
color:rgba(167, 182, 194, 0.6); }
|
||
.bp3-dark .bp3-html-select::after, .bp3-dark
|
||
.bp3-select::after{
|
||
color:#a7b6c2; }
|
||
|
||
.bp3-select::after{
|
||
font-family:"Icons16", sans-serif;
|
||
font-size:16px;
|
||
font-style:normal;
|
||
font-weight:400;
|
||
line-height:1;
|
||
-moz-osx-font-smoothing:grayscale;
|
||
-webkit-font-smoothing:antialiased;
|
||
content:""; }
|
||
.bp3-running-text table, table.bp3-html-table{
|
||
border-spacing:0;
|
||
font-size:14px; }
|
||
.bp3-running-text table th, table.bp3-html-table th,
|
||
.bp3-running-text table td,
|
||
table.bp3-html-table td{
|
||
padding:11px;
|
||
text-align:left;
|
||
vertical-align:top; }
|
||
.bp3-running-text table th, table.bp3-html-table th{
|
||
color:#182026;
|
||
font-weight:600; }
|
||
|
||
.bp3-running-text table td,
|
||
table.bp3-html-table td{
|
||
color:#182026; }
|
||
.bp3-running-text table tbody tr:first-child th, table.bp3-html-table tbody tr:first-child th,
|
||
.bp3-running-text table tbody tr:first-child td,
|
||
table.bp3-html-table tbody tr:first-child td,
|
||
.bp3-running-text table tfoot tr:first-child th,
|
||
table.bp3-html-table tfoot tr:first-child th,
|
||
.bp3-running-text table tfoot tr:first-child td,
|
||
table.bp3-html-table tfoot tr:first-child td{
|
||
-webkit-box-shadow:inset 0 1px 0 0 rgba(16, 22, 26, 0.15);
|
||
box-shadow:inset 0 1px 0 0 rgba(16, 22, 26, 0.15); }
|
||
.bp3-dark .bp3-running-text table th, .bp3-running-text .bp3-dark table th, .bp3-dark table.bp3-html-table th{
|
||
color:#f5f8fa; }
|
||
.bp3-dark .bp3-running-text table td, .bp3-running-text .bp3-dark table td, .bp3-dark table.bp3-html-table td{
|
||
color:#f5f8fa; }
|
||
.bp3-dark .bp3-running-text table tbody tr:first-child th, .bp3-running-text .bp3-dark table tbody tr:first-child th, .bp3-dark table.bp3-html-table tbody tr:first-child th,
|
||
.bp3-dark .bp3-running-text table tbody tr:first-child td,
|
||
.bp3-running-text .bp3-dark table tbody tr:first-child td,
|
||
.bp3-dark table.bp3-html-table tbody tr:first-child td,
|
||
.bp3-dark .bp3-running-text table tfoot tr:first-child th,
|
||
.bp3-running-text .bp3-dark table tfoot tr:first-child th,
|
||
.bp3-dark table.bp3-html-table tfoot tr:first-child th,
|
||
.bp3-dark .bp3-running-text table tfoot tr:first-child td,
|
||
.bp3-running-text .bp3-dark table tfoot tr:first-child td,
|
||
.bp3-dark table.bp3-html-table tfoot tr:first-child td{
|
||
-webkit-box-shadow:inset 0 1px 0 0 rgba(255, 255, 255, 0.15);
|
||
box-shadow:inset 0 1px 0 0 rgba(255, 255, 255, 0.15); }
|
||
|
||
table.bp3-html-table.bp3-html-table-condensed th,
|
||
table.bp3-html-table.bp3-html-table-condensed td, table.bp3-html-table.bp3-small th,
|
||
table.bp3-html-table.bp3-small td{
|
||
padding-bottom:6px;
|
||
padding-top:6px; }
|
||
|
||
table.bp3-html-table.bp3-html-table-striped tbody tr:nth-child(odd) td{
|
||
background:rgba(191, 204, 214, 0.15); }
|
||
|
||
table.bp3-html-table.bp3-html-table-bordered th:not(:first-child){
|
||
-webkit-box-shadow:inset 1px 0 0 0 rgba(16, 22, 26, 0.15);
|
||
box-shadow:inset 1px 0 0 0 rgba(16, 22, 26, 0.15); }
|
||
|
||
table.bp3-html-table.bp3-html-table-bordered tbody tr td,
|
||
table.bp3-html-table.bp3-html-table-bordered tfoot tr td{
|
||
-webkit-box-shadow:inset 0 1px 0 0 rgba(16, 22, 26, 0.15);
|
||
box-shadow:inset 0 1px 0 0 rgba(16, 22, 26, 0.15); }
|
||
table.bp3-html-table.bp3-html-table-bordered tbody tr td:not(:first-child),
|
||
table.bp3-html-table.bp3-html-table-bordered tfoot tr td:not(:first-child){
|
||
-webkit-box-shadow:inset 1px 1px 0 0 rgba(16, 22, 26, 0.15);
|
||
box-shadow:inset 1px 1px 0 0 rgba(16, 22, 26, 0.15); }
|
||
|
||
table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td{
|
||
-webkit-box-shadow:none;
|
||
box-shadow:none; }
|
||
table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td:not(:first-child){
|
||
-webkit-box-shadow:inset 1px 0 0 0 rgba(16, 22, 26, 0.15);
|
||
box-shadow:inset 1px 0 0 0 rgba(16, 22, 26, 0.15); }
|
||
|
||
table.bp3-html-table.bp3-interactive tbody tr:hover td{
|
||
background-color:rgba(191, 204, 214, 0.3);
|
||
cursor:pointer; }
|
||
|
||
table.bp3-html-table.bp3-interactive tbody tr:active td{
|
||
background-color:rgba(191, 204, 214, 0.4); }
|
||
|
||
.bp3-dark table.bp3-html-table{ }
|
||
.bp3-dark table.bp3-html-table.bp3-html-table-striped tbody tr:nth-child(odd) td{
|
||
background:rgba(92, 112, 128, 0.15); }
|
||
.bp3-dark table.bp3-html-table.bp3-html-table-bordered th:not(:first-child){
|
||
-webkit-box-shadow:inset 1px 0 0 0 rgba(255, 255, 255, 0.15);
|
||
box-shadow:inset 1px 0 0 0 rgba(255, 255, 255, 0.15); }
|
||
.bp3-dark table.bp3-html-table.bp3-html-table-bordered tbody tr td,
|
||
.bp3-dark table.bp3-html-table.bp3-html-table-bordered tfoot tr td{
|
||
-webkit-box-shadow:inset 0 1px 0 0 rgba(255, 255, 255, 0.15);
|
||
box-shadow:inset 0 1px 0 0 rgba(255, 255, 255, 0.15); }
|
||
.bp3-dark table.bp3-html-table.bp3-html-table-bordered tbody tr td:not(:first-child),
|
||
.bp3-dark table.bp3-html-table.bp3-html-table-bordered tfoot tr td:not(:first-child){
|
||
-webkit-box-shadow:inset 1px 1px 0 0 rgba(255, 255, 255, 0.15);
|
||
box-shadow:inset 1px 1px 0 0 rgba(255, 255, 255, 0.15); }
|
||
.bp3-dark table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td{
|
||
-webkit-box-shadow:inset 1px 0 0 0 rgba(255, 255, 255, 0.15);
|
||
box-shadow:inset 1px 0 0 0 rgba(255, 255, 255, 0.15); }
|
||
.bp3-dark table.bp3-html-table.bp3-html-table-bordered.bp3-html-table-striped tbody tr:not(:first-child) td:first-child{
|
||
-webkit-box-shadow:none;
|
||
box-shadow:none; }
|
||
.bp3-dark table.bp3-html-table.bp3-interactive tbody tr:hover td{
|
||
background-color:rgba(92, 112, 128, 0.3);
|
||
cursor:pointer; }
|
||
.bp3-dark table.bp3-html-table.bp3-interactive tbody tr:active td{
|
||
background-color:rgba(92, 112, 128, 0.4); }
|
||
|
||
.bp3-key-combo{
|
||
display:-webkit-box;
|
||
display:-ms-flexbox;
|
||
display:flex;
|
||
-webkit-box-orient:horizontal;
|
||
-webkit-box-direction:normal;
|
||
-ms-flex-direction:row;
|
||
flex-direction:row;
|
||
-webkit-box-align:center;
|
||
-ms-flex-align:center;
|
||
align-items:center; }
|
||
.bp3-key-combo > *{
|
||
-webkit-box-flex:0;
|
||
-ms-flex-positive:0;
|
||
flex-grow:0;
|
||
-ms-flex-negative:0;
|
||
flex-shrink:0; }
|
||
.bp3-key-combo > .bp3-fill{
|
||
-webkit-box-flex:1;
|
||
-ms-flex-positive:1;
|
||
flex-grow:1;
|
||
-ms-flex-negative:1;
|
||
flex-shrink:1; }
|
||
.bp3-key-combo::before,
|
||
.bp3-key-combo > *{
|
||
margin-right:5px; }
|
||
.bp3-key-combo:empty::before,
|
||
.bp3-key-combo > :last-child{
|
||
margin-right:0; }
|
||
|
||
.bp3-hotkey-dialog{
|
||
padding-bottom:0;
|
||
top:40px; }
|
||
.bp3-hotkey-dialog .bp3-dialog-body{
|
||
margin:0;
|
||
padding:0; }
|
||
.bp3-hotkey-dialog .bp3-hotkey-label{
|
||
-webkit-box-flex:1;
|
||
-ms-flex-positive:1;
|
||
flex-grow:1; }
|
||
|
||
.bp3-hotkey-column{
|
||
margin:auto;
|
||
max-height:80vh;
|
||
overflow-y:auto;
|
||
padding:30px; }
|
||
.bp3-hotkey-column .bp3-heading{
|
||
margin-bottom:20px; }
|
||
.bp3-hotkey-column .bp3-heading:not(:first-child){
|
||
margin-top:40px; }
|
||
|
||
.bp3-hotkey{
|
||
-webkit-box-align:center;
|
||
-ms-flex-align:center;
|
||
align-items:center;
|
||
display:-webkit-box;
|
||
display:-ms-flexbox;
|
||
display:flex;
|
||
-webkit-box-pack:justify;
|
||
-ms-flex-pack:justify;
|
||
justify-content:space-between;
|
||
margin-left:0;
|
||
margin-right:0; }
|
||
.bp3-hotkey:not(:last-child){
|
||
margin-bottom:10px; }
|
||
.bp3-icon{
|
||
display:inline-block;
|
||
-webkit-box-flex:0;
|
||
-ms-flex:0 0 auto;
|
||
flex:0 0 auto;
|
||
vertical-align:text-bottom; }
|
||
.bp3-icon:not(:empty)::before{
|
||
content:"" !important;
|
||
content:unset !important; }
|
||
.bp3-icon > svg{
|
||
display:block; }
|
||
.bp3-icon > svg:not([fill]){
|
||
fill:currentColor; }
|
||
|
||
.bp3-icon.bp3-intent-primary, .bp3-icon-standard.bp3-intent-primary, .bp3-icon-large.bp3-intent-primary{
|
||
color:#106ba3; }
|
||
.bp3-dark .bp3-icon.bp3-intent-primary, .bp3-dark .bp3-icon-standard.bp3-intent-primary, .bp3-dark .bp3-icon-large.bp3-intent-primary{
|
||
color:#48aff0; }
|
||
|
||
.bp3-icon.bp3-intent-success, .bp3-icon-standard.bp3-intent-success, .bp3-icon-large.bp3-intent-success{
|
||
color:#0d8050; }
|
||
.bp3-dark .bp3-icon.bp3-intent-success, .bp3-dark .bp3-icon-standard.bp3-intent-success, .bp3-dark .bp3-icon-large.bp3-intent-success{
|
||
color:#3dcc91; }
|
||
|
||
.bp3-icon.bp3-intent-warning, .bp3-icon-standard.bp3-intent-warning, .bp3-icon-large.bp3-intent-warning{
|
||
color:#bf7326; }
|
||
.bp3-dark .bp3-icon.bp3-intent-warning, .bp3-dark .bp3-icon-standard.bp3-intent-warning, .bp3-dark .bp3-icon-large.bp3-intent-warning{
|
||
color:#ffb366; }
|
||
|
||
.bp3-icon.bp3-intent-danger, .bp3-icon-standard.bp3-intent-danger, .bp3-icon-large.bp3-intent-danger{
|
||
color:#c23030; }
|
||
.bp3-dark .bp3-icon.bp3-intent-danger, .bp3-dark .bp3-icon-standard.bp3-intent-danger, .bp3-dark .bp3-icon-large.bp3-intent-danger{
|
||
color:#ff7373; }
|
||
|
||
span.bp3-icon-standard{
|
||
font-family:"Icons16", sans-serif;
|
||
font-size:16px;
|
||
font-style:normal;
|
||
font-weight:400;
|
||
line-height:1;
|
||
-moz-osx-font-smoothing:grayscale;
|
||
-webkit-font-smoothing:antialiased;
|
||
display:inline-block; }
|
||
|
||
span.bp3-icon-large{
|
||
font-family:"Icons20", sans-serif;
|
||
font-size:20px;
|
||
font-style:normal;
|
||
font-weight:400;
|
||
line-height:1;
|
||
-moz-osx-font-smoothing:grayscale;
|
||
-webkit-font-smoothing:antialiased;
|
||
display:inline-block; }
|
||
|
||
span.bp3-icon:empty{
|
||
font-family:"Icons20";
|
||
font-size:inherit;
|
||
font-style:normal;
|
||
font-weight:400;
|
||
line-height:1; }
|
||
span.bp3-icon:empty::before{
|
||
-moz-osx-font-smoothing:grayscale;
|
||
-webkit-font-smoothing:antialiased; }
|
||
|
||
.bp3-icon-add::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-add-column-left::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-add-column-right::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-add-row-bottom::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-add-row-top::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-add-to-artifact::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-add-to-folder::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-airplane::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-align-center::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-align-justify::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-align-left::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-align-right::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-alignment-bottom::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-alignment-horizontal-center::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-alignment-left::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-alignment-right::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-alignment-top::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-alignment-vertical-center::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-annotation::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-application::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-applications::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-archive::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-arrow-bottom-left::before{
|
||
content:"↙"; }
|
||
|
||
.bp3-icon-arrow-bottom-right::before{
|
||
content:"↘"; }
|
||
|
||
.bp3-icon-arrow-down::before{
|
||
content:"↓"; }
|
||
|
||
.bp3-icon-arrow-left::before{
|
||
content:"←"; }
|
||
|
||
.bp3-icon-arrow-right::before{
|
||
content:"→"; }
|
||
|
||
.bp3-icon-arrow-top-left::before{
|
||
content:"↖"; }
|
||
|
||
.bp3-icon-arrow-top-right::before{
|
||
content:"↗"; }
|
||
|
||
.bp3-icon-arrow-up::before{
|
||
content:"↑"; }
|
||
|
||
.bp3-icon-arrows-horizontal::before{
|
||
content:"↔"; }
|
||
|
||
.bp3-icon-arrows-vertical::before{
|
||
content:"↕"; }
|
||
|
||
.bp3-icon-asterisk::before{
|
||
content:"*"; }
|
||
|
||
.bp3-icon-automatic-updates::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-badge::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-ban-circle::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-bank-account::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-barcode::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-blank::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-blocked-person::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-bold::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-book::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-bookmark::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-box::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-briefcase::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-bring-data::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-build::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-calculator::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-calendar::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-camera::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-caret-down::before{
|
||
content:"⌄"; }
|
||
|
||
.bp3-icon-caret-left::before{
|
||
content:"〈"; }
|
||
|
||
.bp3-icon-caret-right::before{
|
||
content:"〉"; }
|
||
|
||
.bp3-icon-caret-up::before{
|
||
content:"⌃"; }
|
||
|
||
.bp3-icon-cell-tower::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-changes::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-chart::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-chat::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-chevron-backward::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-chevron-down::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-chevron-forward::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-chevron-left::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-chevron-right::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-chevron-up::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-circle::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-circle-arrow-down::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-circle-arrow-left::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-circle-arrow-right::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-circle-arrow-up::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-citation::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-clean::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-clipboard::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-cloud::before{
|
||
content:"☁"; }
|
||
|
||
.bp3-icon-cloud-download::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-cloud-upload::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-code::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-code-block::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-cog::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-collapse-all::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-column-layout::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-comment::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-comparison::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-compass::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-compressed::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-confirm::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-console::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-contrast::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-control::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-credit-card::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-cross::before{
|
||
content:"✗"; }
|
||
|
||
.bp3-icon-crown::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-cube::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-cube-add::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-cube-remove::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-curved-range-chart::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-cut::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-dashboard::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-data-lineage::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-database::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-delete::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-delta::before{
|
||
content:"Δ"; }
|
||
|
||
.bp3-icon-derive-column::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-desktop::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-diagnosis::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-diagram-tree::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-direction-left::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-direction-right::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-disable::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-document::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-document-open::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-document-share::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-dollar::before{
|
||
content:"$"; }
|
||
|
||
.bp3-icon-dot::before{
|
||
content:"•"; }
|
||
|
||
.bp3-icon-double-caret-horizontal::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-double-caret-vertical::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-double-chevron-down::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-double-chevron-left::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-double-chevron-right::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-double-chevron-up::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-doughnut-chart::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-download::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-drag-handle-horizontal::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-drag-handle-vertical::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-draw::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-drive-time::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-duplicate::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-edit::before{
|
||
content:"✎"; }
|
||
|
||
.bp3-icon-eject::before{
|
||
content:"⏏"; }
|
||
|
||
.bp3-icon-endorsed::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-envelope::before{
|
||
content:"✉"; }
|
||
|
||
.bp3-icon-equals::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-eraser::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-error::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-euro::before{
|
||
content:"€"; }
|
||
|
||
.bp3-icon-exchange::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-exclude-row::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-expand-all::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-export::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-eye-off::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-eye-on::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-eye-open::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-fast-backward::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-fast-forward::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-feed::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-feed-subscribed::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-film::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-filter::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-filter-keep::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-filter-list::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-filter-open::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-filter-remove::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-flag::before{
|
||
content:"⚑"; }
|
||
|
||
.bp3-icon-flame::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-flash::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-floppy-disk::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-flow-branch::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-flow-end::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-flow-linear::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-flow-review::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-flow-review-branch::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-flows::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-folder-close::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-folder-new::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-folder-open::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-folder-shared::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-folder-shared-open::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-follower::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-following::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-font::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-fork::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-form::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-full-circle::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-full-stacked-chart::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-fullscreen::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-function::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-gantt-chart::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-geolocation::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-geosearch::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-git-branch::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-git-commit::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-git-merge::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-git-new-branch::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-git-pull::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-git-push::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-git-repo::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-glass::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-globe::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-globe-network::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-graph::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-graph-remove::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-greater-than::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-greater-than-or-equal-to::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-grid::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-grid-view::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-group-objects::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-grouped-bar-chart::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-hand::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-hand-down::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-hand-left::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-hand-right::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-hand-up::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-header::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-header-one::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-header-two::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-headset::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-heart::before{
|
||
content:"♥"; }
|
||
|
||
.bp3-icon-heart-broken::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-heat-grid::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-heatmap::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-help::before{
|
||
content:"?"; }
|
||
|
||
.bp3-icon-helper-management::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-highlight::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-history::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-home::before{
|
||
content:"⌂"; }
|
||
|
||
.bp3-icon-horizontal-bar-chart::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-horizontal-bar-chart-asc::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-horizontal-bar-chart-desc::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-horizontal-distribution::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-id-number::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-image-rotate-left::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-image-rotate-right::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-import::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-inbox::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-inbox-filtered::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-inbox-geo::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-inbox-search::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-inbox-update::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-info-sign::before{
|
||
content:"ℹ"; }
|
||
|
||
.bp3-icon-inheritance::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-inner-join::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-insert::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-intersection::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-ip-address::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-issue::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-issue-closed::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-issue-new::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-italic::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-join-table::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-key::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-key-backspace::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-key-command::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-key-control::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-key-delete::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-key-enter::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-key-escape::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-key-option::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-key-shift::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-key-tab::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-known-vehicle::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-lab-test::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-label::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-layer::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-layers::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-layout::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-layout-auto::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-layout-balloon::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-layout-circle::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-layout-grid::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-layout-group-by::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-layout-hierarchy::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-layout-linear::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-layout-skew-grid::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-layout-sorted-clusters::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-learning::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-left-join::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-less-than::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-less-than-or-equal-to::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-lifesaver::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-lightbulb::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-link::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-list::before{
|
||
content:"☰"; }
|
||
|
||
.bp3-icon-list-columns::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-list-detail-view::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-locate::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-lock::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-log-in::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-log-out::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-manual::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-manually-entered-data::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-map::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-map-create::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-map-marker::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-maximize::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-media::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-menu::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-menu-closed::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-menu-open::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-merge-columns::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-merge-links::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-minimize::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-minus::before{
|
||
content:"−"; }
|
||
|
||
.bp3-icon-mobile-phone::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-mobile-video::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-moon::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-more::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-mountain::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-move::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-mugshot::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-multi-select::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-music::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-new-drawing::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-new-grid-item::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-new-layer::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-new-layers::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-new-link::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-new-object::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-new-person::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-new-prescription::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-new-text-box::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-ninja::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-not-equal-to::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-notifications::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-notifications-updated::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-numbered-list::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-numerical::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-office::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-offline::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-oil-field::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-one-column::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-outdated::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-page-layout::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-panel-stats::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-panel-table::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-paperclip::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-paragraph::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-path::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-path-search::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-pause::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-people::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-percentage::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-person::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-phone::before{
|
||
content:"☎"; }
|
||
|
||
.bp3-icon-pie-chart::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-pin::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-pivot::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-pivot-table::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-play::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-plus::before{
|
||
content:"+"; }
|
||
|
||
.bp3-icon-polygon-filter::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-power::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-predictive-analysis::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-prescription::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-presentation::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-print::before{
|
||
content:"⎙"; }
|
||
|
||
.bp3-icon-projects::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-properties::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-property::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-publish-function::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-pulse::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-random::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-record::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-redo::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-refresh::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-regression-chart::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-remove::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-remove-column::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-remove-column-left::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-remove-column-right::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-remove-row-bottom::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-remove-row-top::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-repeat::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-reset::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-resolve::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-rig::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-right-join::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-ring::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-rotate-document::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-rotate-page::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-satellite::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-saved::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-scatter-plot::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-search::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-search-around::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-search-template::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-search-text::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-segmented-control::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-select::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-selection::before{
|
||
content:"⦿"; }
|
||
|
||
.bp3-icon-send-to::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-send-to-graph::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-send-to-map::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-series-add::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-series-configuration::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-series-derived::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-series-filtered::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-series-search::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-settings::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-share::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-shield::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-shop::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-shopping-cart::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-signal-search::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-sim-card::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-slash::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-small-cross::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-small-minus::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-small-plus::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-small-tick::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-snowflake::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-social-media::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-sort::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-sort-alphabetical::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-sort-alphabetical-desc::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-sort-asc::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-sort-desc::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-sort-numerical::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-sort-numerical-desc::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-split-columns::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-square::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-stacked-chart::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-star::before{
|
||
content:"★"; }
|
||
|
||
.bp3-icon-star-empty::before{
|
||
content:"☆"; }
|
||
|
||
.bp3-icon-step-backward::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-step-chart::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-step-forward::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-stop::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-stopwatch::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-strikethrough::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-style::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-swap-horizontal::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-swap-vertical::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-symbol-circle::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-symbol-cross::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-symbol-diamond::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-symbol-square::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-symbol-triangle-down::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-symbol-triangle-up::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-tag::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-take-action::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-taxi::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-text-highlight::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-th::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-th-derived::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-th-disconnect::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-th-filtered::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-th-list::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-thumbs-down::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-thumbs-up::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-tick::before{
|
||
content:"✓"; }
|
||
|
||
.bp3-icon-tick-circle::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-time::before{
|
||
content:"⏲"; }
|
||
|
||
.bp3-icon-timeline-area-chart::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-timeline-bar-chart::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-timeline-events::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-timeline-line-chart::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-tint::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-torch::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-tractor::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-train::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-translate::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-trash::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-tree::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-trending-down::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-trending-up::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-truck::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-two-columns::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-unarchive::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-underline::before{
|
||
content:"⎁"; }
|
||
|
||
.bp3-icon-undo::before{
|
||
content:"⎌"; }
|
||
|
||
.bp3-icon-ungroup-objects::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-unknown-vehicle::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-unlock::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-unpin::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-unresolve::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-updated::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-upload::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-user::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-variable::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-vertical-bar-chart-asc::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-vertical-bar-chart-desc::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-vertical-distribution::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-video::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-volume-down::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-volume-off::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-volume-up::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-walk::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-warning-sign::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-waterfall-chart::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-widget::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-widget-button::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-widget-footer::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-widget-header::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-wrench::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-zoom-in::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-zoom-out::before{
|
||
content:""; }
|
||
|
||
.bp3-icon-zoom-to-fit::before{
|
||
content:""; }
|
||
.bp3-submenu > .bp3-popover-wrapper{
|
||
display:block; }
|
||
|
||
.bp3-submenu .bp3-popover-target{
|
||
display:block; }
|
||
.bp3-submenu .bp3-popover-target.bp3-popover-open > .bp3-menu-item{ }
|
||
|
||
.bp3-submenu.bp3-popover{
|
||
-webkit-box-shadow:none;
|
||
box-shadow:none;
|
||
padding:0 5px; }
|
||
.bp3-submenu.bp3-popover > .bp3-popover-content{
|
||
-webkit-box-shadow:0 0 0 1px rgba(16, 22, 26, 0.1), 0 2px 4px rgba(16, 22, 26, 0.2), 0 8px 24px rgba(16, 22, 26, 0.2);
|
||
box-shadow:0 0 0 1px rgba(16, 22, 26, 0.1), 0 2px 4px rgba(16, 22, 26, 0.2), 0 8px 24px rgba(16, 22, 26, 0.2); }
|
||
.bp3-dark .bp3-submenu.bp3-popover, .bp3-submenu.bp3-popover.bp3-dark{
|
||
-webkit-box-shadow:none;
|
||
box-shadow:none; }
|
||
.bp3-dark .bp3-submenu.bp3-popover > .bp3-popover-content, .bp3-submenu.bp3-popover.bp3-dark > .bp3-popover-content{
|
||
-webkit-box-shadow:0 0 0 1px rgba(16, 22, 26, 0.2), 0 2px 4px rgba(16, 22, 26, 0.4), 0 8px 24px rgba(16, 22, 26, 0.4);
|
||
box-shadow:0 0 0 1px rgba(16, 22, 26, 0.2), 0 2px 4px rgba(16, 22, 26, 0.4), 0 8px 24px rgba(16, 22, 26, 0.4); }
|
||
.bp3-menu{
|
||
background:#ffffff;
|
||
border-radius:3px;
|
||
color:#182026;
|
||
list-style:none;
|
||
margin:0;
|
||
min-width:180px;
|
||
padding:5px;
|
||
text-align:left; }
|
||
|
||
.bp3-menu-divider{
|
||
border-top:1px solid rgba(16, 22, 26, 0.15);
|
||
display:block;
|
||
margin:5px; }
|
||
.bp3-dark .bp3-menu-divider{
|
||
border-top-color:rgba(255, 255, 255, 0.15); }
|
||
|
||
.bp3-menu-item{
|
||
display:-webkit-box;
|
||
display:-ms-flexbox;
|
||
display:flex;
|
||
-webkit-box-orient:horizontal;
|
||
-webkit-box-direction:normal;
|
||
-ms-flex-direction:row;
|
||
flex-direction:row;
|
||
-webkit-box-align:start;
|
||
-ms-flex-align:start;
|
||
align-items:flex-start;
|
||
border-radius:2px;
|
||
color:inherit;
|
||
line-height:20px;
|
||
padding:5px 7px;
|
||
text-decoration:none;
|
||
-webkit-user-select:none;
|
||
-moz-user-select:none;
|
||
-ms-user-select:none;
|
||
user-select:none; }
|
||
.bp3-menu-item > *{
|
||
-webkit-box-flex:0;
|
||
-ms-flex-positive:0;
|
||
flex-grow:0;
|
||
-ms-flex-negative:0;
|
||
flex-shrink:0; }
|
||
.bp3-menu-item > .bp3-fill{
|
||
-webkit-box-flex:1;
|
||
-ms-flex-positive:1;
|
||
flex-grow:1;
|
||
-ms-flex-negative:1;
|
||
flex-shrink:1; }
|
||
.bp3-menu-item::before,
|
||
.bp3-menu-item > *{
|
||
margin-right:7px; }
|
||
.bp3-menu-item:empty::before,
|
||
.bp3-menu-item > :last-child{
|
||
margin-right:0; }
|
||
.bp3-menu-item > .bp3-fill{
|
||
word-break:break-word; }
|
||
.bp3-menu-item:hover, .bp3-submenu .bp3-popover-target.bp3-popover-open > .bp3-menu-item{
|
||
background-color:rgba(167, 182, 194, 0.3);
|
||
cursor:pointer;
|
||
text-decoration:none; }
|
||
.bp3-menu-item.bp3-disabled{
|
||
background-color:inherit;
|
||
color:rgba(92, 112, 128, 0.6);
|
||
cursor:not-allowed; }
|
||
.bp3-dark .bp3-menu-item{
|
||
color:inherit; }
|
||
.bp3-dark .bp3-menu-item:hover, .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open > .bp3-menu-item, .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open > .bp3-menu-item{
|
||
background-color:rgba(138, 155, 168, 0.15);
|
||
color:inherit; }
|
||
.bp3-dark .bp3-menu-item.bp3-disabled{
|
||
background-color:inherit;
|
||
color:rgba(167, 182, 194, 0.6); }
|
||
.bp3-menu-item.bp3-intent-primary{
|
||
color:#106ba3; }
|
||
.bp3-menu-item.bp3-intent-primary .bp3-icon{
|
||
color:inherit; }
|
||
.bp3-menu-item.bp3-intent-primary::before, .bp3-menu-item.bp3-intent-primary::after,
|
||
.bp3-menu-item.bp3-intent-primary .bp3-menu-item-label{
|
||
color:#106ba3; }
|
||
.bp3-menu-item.bp3-intent-primary:hover, .bp3-submenu .bp3-popover-target.bp3-popover-open > .bp3-intent-primary.bp3-menu-item, .bp3-menu-item.bp3-intent-primary.bp3-active{
|
||
background-color:#137cbd; }
|
||
.bp3-menu-item.bp3-intent-primary:active{
|
||
background-color:#106ba3; }
|
||
.bp3-menu-item.bp3-intent-primary:hover, .bp3-submenu .bp3-popover-target.bp3-popover-open > .bp3-intent-primary.bp3-menu-item, .bp3-menu-item.bp3-intent-primary:hover::before, .bp3-submenu .bp3-popover-target.bp3-popover-open > .bp3-intent-primary.bp3-menu-item::before, .bp3-menu-item.bp3-intent-primary:hover::after, .bp3-submenu .bp3-popover-target.bp3-popover-open > .bp3-intent-primary.bp3-menu-item::after,
|
||
.bp3-menu-item.bp3-intent-primary:hover .bp3-menu-item-label,
|
||
.bp3-submenu .bp3-popover-target.bp3-popover-open > .bp3-intent-primary.bp3-menu-item .bp3-menu-item-label, .bp3-menu-item.bp3-intent-primary:active, .bp3-menu-item.bp3-intent-primary:active::before, .bp3-menu-item.bp3-intent-primary:active::after,
|
||
.bp3-menu-item.bp3-intent-primary:active .bp3-menu-item-label, .bp3-menu-item.bp3-intent-primary.bp3-active, .bp3-menu-item.bp3-intent-primary.bp3-active::before, .bp3-menu-item.bp3-intent-primary.bp3-active::after,
|
||
.bp3-menu-item.bp3-intent-primary.bp3-active .bp3-menu-item-label{
|
||
color:#ffffff; }
|
||
.bp3-menu-item.bp3-intent-success{
|
||
color:#0d8050; }
|
||
.bp3-menu-item.bp3-intent-success .bp3-icon{
|
||
color:inherit; }
|
||
.bp3-menu-item.bp3-intent-success::before, .bp3-menu-item.bp3-intent-success::after,
|
||
.bp3-menu-item.bp3-intent-success .bp3-menu-item-label{
|
||
color:#0d8050; }
|
||
.bp3-menu-item.bp3-intent-success:hover, .bp3-submenu .bp3-popover-target.bp3-popover-open > .bp3-intent-success.bp3-menu-item, .bp3-menu-item.bp3-intent-success.bp3-active{
|
||
background-color:#0f9960; }
|
||
.bp3-menu-item.bp3-intent-success:active{
|
||
background-color:#0d8050; }
|
||
.bp3-menu-item.bp3-intent-success:hover, .bp3-submenu .bp3-popover-target.bp3-popover-open > .bp3-intent-success.bp3-menu-item, .bp3-menu-item.bp3-intent-success:hover::before, .bp3-submenu .bp3-popover-target.bp3-popover-open > .bp3-intent-success.bp3-menu-item::before, .bp3-menu-item.bp3-intent-success:hover::after, .bp3-submenu .bp3-popover-target.bp3-popover-open > .bp3-intent-success.bp3-menu-item::after,
|
||
.bp3-menu-item.bp3-intent-success:hover .bp3-menu-item-label,
|
||
.bp3-submenu .bp3-popover-target.bp3-popover-open > .bp3-intent-success.bp3-menu-item .bp3-menu-item-label, .bp3-menu-item.bp3-intent-success:active, .bp3-menu-item.bp3-intent-success:active::before, .bp3-menu-item.bp3-intent-success:active::after,
|
||
.bp3-menu-item.bp3-intent-success:active .bp3-menu-item-label, .bp3-menu-item.bp3-intent-success.bp3-active, .bp3-menu-item.bp3-intent-success.bp3-active::before, .bp3-menu-item.bp3-intent-success.bp3-active::after,
|
||
.bp3-menu-item.bp3-intent-success.bp3-active .bp3-menu-item-label{
|
||
color:#ffffff; }
|
||
.bp3-menu-item.bp3-intent-warning{
|
||
color:#bf7326; }
|
||
.bp3-menu-item.bp3-intent-warning .bp3-icon{
|
||
color:inherit; }
|
||
.bp3-menu-item.bp3-intent-warning::before, .bp3-menu-item.bp3-intent-warning::after,
|
||
.bp3-menu-item.bp3-intent-warning .bp3-menu-item-label{
|
||
color:#bf7326; }
|
||
.bp3-menu-item.bp3-intent-warning:hover, .bp3-submenu .bp3-popover-target.bp3-popover-open > .bp3-intent-warning.bp3-menu-item, .bp3-menu-item.bp3-intent-warning.bp3-active{
|
||
background-color:#d9822b; }
|
||
.bp3-menu-item.bp3-intent-warning:active{
|
||
background-color:#bf7326; }
|
||
.bp3-menu-item.bp3-intent-warning:hover, .bp3-submenu .bp3-popover-target.bp3-popover-open > .bp3-intent-warning.bp3-menu-item, .bp3-menu-item.bp3-intent-warning:hover::before, .bp3-submenu .bp3-popover-target.bp3-popover-open > .bp3-intent-warning.bp3-menu-item::before, .bp3-menu-item.bp3-intent-warning:hover::after, .bp3-submenu .bp3-popover-target.bp3-popover-open > .bp3-intent-warning.bp3-menu-item::after,
|
||
.bp3-menu-item.bp3-intent-warning:hover .bp3-menu-item-label,
|
||
.bp3-submenu .bp3-popover-target.bp3-popover-open > .bp3-intent-warning.bp3-menu-item .bp3-menu-item-label, .bp3-menu-item.bp3-intent-warning:active, .bp3-menu-item.bp3-intent-warning:active::before, .bp3-menu-item.bp3-intent-warning:active::after,
|
||
.bp3-menu-item.bp3-intent-warning:active .bp3-menu-item-label, .bp3-menu-item.bp3-intent-warning.bp3-active, .bp3-menu-item.bp3-intent-warning.bp3-active::before, .bp3-menu-item.bp3-intent-warning.bp3-active::after,
|
||
.bp3-menu-item.bp3-intent-warning.bp3-active .bp3-menu-item-label{
|
||
color:#ffffff; }
|
||
.bp3-menu-item.bp3-intent-danger{
|
||
color:#c23030; }
|
||
.bp3-menu-item.bp3-intent-danger .bp3-icon{
|
||
color:inherit; }
|
||
.bp3-menu-item.bp3-intent-danger::before, .bp3-menu-item.bp3-intent-danger::after,
|
||
.bp3-menu-item.bp3-intent-danger .bp3-menu-item-label{
|
||
color:#c23030; }
|
||
.bp3-menu-item.bp3-intent-danger:hover, .bp3-submenu .bp3-popover-target.bp3-popover-open > .bp3-intent-danger.bp3-menu-item, .bp3-menu-item.bp3-intent-danger.bp3-active{
|
||
background-color:#db3737; }
|
||
.bp3-menu-item.bp3-intent-danger:active{
|
||
background-color:#c23030; }
|
||
.bp3-menu-item.bp3-intent-danger:hover, .bp3-submenu .bp3-popover-target.bp3-popover-open > .bp3-intent-danger.bp3-menu-item, .bp3-menu-item.bp3-intent-danger:hover::before, .bp3-submenu .bp3-popover-target.bp3-popover-open > .bp3-intent-danger.bp3-menu-item::before, .bp3-menu-item.bp3-intent-danger:hover::after, .bp3-submenu .bp3-popover-target.bp3-popover-open > .bp3-intent-danger.bp3-menu-item::after,
|
||
.bp3-menu-item.bp3-intent-danger:hover .bp3-menu-item-label,
|
||
.bp3-submenu .bp3-popover-target.bp3-popover-open > .bp3-intent-danger.bp3-menu-item .bp3-menu-item-label, .bp3-menu-item.bp3-intent-danger:active, .bp3-menu-item.bp3-intent-danger:active::before, .bp3-menu-item.bp3-intent-danger:active::after,
|
||
.bp3-menu-item.bp3-intent-danger:active .bp3-menu-item-label, .bp3-menu-item.bp3-intent-danger.bp3-active, .bp3-menu-item.bp3-intent-danger.bp3-active::before, .bp3-menu-item.bp3-intent-danger.bp3-active::after,
|
||
.bp3-menu-item.bp3-intent-danger.bp3-active .bp3-menu-item-label{
|
||
color:#ffffff; }
|
||
.bp3-menu-item::before{
|
||
font-family:"Icons16", sans-serif;
|
||
font-size:16px;
|
||
font-style:normal;
|
||
font-weight:400;
|
||
line-height:1;
|
||
-moz-osx-font-smoothing:grayscale;
|
||
-webkit-font-smoothing:antialiased;
|
||
margin-right:7px; }
|
||
.bp3-menu-item::before,
|
||
.bp3-menu-item > .bp3-icon{
|
||
color:#5c7080;
|
||
margin-top:2px; }
|
||
.bp3-menu-item .bp3-menu-item-label{
|
||
color:#5c7080; }
|
||
.bp3-menu-item:hover, .bp3-submenu .bp3-popover-target.bp3-popover-open > .bp3-menu-item{
|
||
color:inherit; }
|
||
.bp3-menu-item.bp3-active, .bp3-menu-item:active{
|
||
background-color:rgba(115, 134, 148, 0.3); }
|
||
.bp3-menu-item.bp3-disabled{
|
||
background-color:inherit !important;
|
||
color:rgba(92, 112, 128, 0.6) !important;
|
||
cursor:not-allowed !important;
|
||
outline:none !important; }
|
||
.bp3-menu-item.bp3-disabled::before,
|
||
.bp3-menu-item.bp3-disabled > .bp3-icon,
|
||
.bp3-menu-item.bp3-disabled .bp3-menu-item-label{
|
||
color:rgba(92, 112, 128, 0.6) !important; }
|
||
.bp3-large .bp3-menu-item{
|
||
font-size:16px;
|
||
line-height:22px;
|
||
padding:9px 7px; }
|
||
.bp3-large .bp3-menu-item .bp3-icon{
|
||
margin-top:3px; }
|
||
.bp3-large .bp3-menu-item::before{
|
||
font-family:"Icons20", sans-serif;
|
||
font-size:20px;
|
||
font-style:normal;
|
||
font-weight:400;
|
||
line-height:1;
|
||
-moz-osx-font-smoothing:grayscale;
|
||
-webkit-font-smoothing:antialiased;
|
||
margin-right:10px;
|
||
margin-top:1px; }
|
||
|
||
button.bp3-menu-item{
|
||
background:none;
|
||
border:none;
|
||
text-align:left;
|
||
width:100%; }
|
||
.bp3-menu-header{
|
||
border-top:1px solid rgba(16, 22, 26, 0.15);
|
||
display:block;
|
||
margin:5px;
|
||
cursor:default;
|
||
padding-left:2px; }
|
||
.bp3-dark .bp3-menu-header{
|
||
border-top-color:rgba(255, 255, 255, 0.15); }
|
||
.bp3-menu-header:first-of-type{
|
||
border-top:none; }
|
||
.bp3-menu-header > h6{
|
||
color:#182026;
|
||
font-weight:600;
|
||
overflow:hidden;
|
||
text-overflow:ellipsis;
|
||
white-space:nowrap;
|
||
word-wrap:normal;
|
||
line-height:17px;
|
||
margin:0;
|
||
padding:10px 7px 0 1px; }
|
||
.bp3-dark .bp3-menu-header > h6{
|
||
color:#f5f8fa; }
|
||
.bp3-menu-header:first-of-type > h6{
|
||
padding-top:0; }
|
||
.bp3-large .bp3-menu-header > h6{
|
||
font-size:18px;
|
||
padding-bottom:5px;
|
||
padding-top:15px; }
|
||
.bp3-large .bp3-menu-header:first-of-type > h6{
|
||
padding-top:0; }
|
||
|
||
.bp3-dark .bp3-menu{
|
||
background:#30404d;
|
||
color:#f5f8fa; }
|
||
|
||
.bp3-dark .bp3-menu-item{ }
|
||
.bp3-dark .bp3-menu-item.bp3-intent-primary{
|
||
color:#48aff0; }
|
||
.bp3-dark .bp3-menu-item.bp3-intent-primary .bp3-icon{
|
||
color:inherit; }
|
||
.bp3-dark .bp3-menu-item.bp3-intent-primary::before, .bp3-dark .bp3-menu-item.bp3-intent-primary::after,
|
||
.bp3-dark .bp3-menu-item.bp3-intent-primary .bp3-menu-item-label{
|
||
color:#48aff0; }
|
||
.bp3-dark .bp3-menu-item.bp3-intent-primary:hover, .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open > .bp3-intent-primary.bp3-menu-item, .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open > .bp3-intent-primary.bp3-menu-item, .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active{
|
||
background-color:#137cbd; }
|
||
.bp3-dark .bp3-menu-item.bp3-intent-primary:active{
|
||
background-color:#106ba3; }
|
||
.bp3-dark .bp3-menu-item.bp3-intent-primary:hover, .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open > .bp3-intent-primary.bp3-menu-item, .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open > .bp3-intent-primary.bp3-menu-item, .bp3-dark .bp3-menu-item.bp3-intent-primary:hover::before, .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open > .bp3-intent-primary.bp3-menu-item::before, .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open > .bp3-intent-primary.bp3-menu-item::before, .bp3-dark .bp3-menu-item.bp3-intent-primary:hover::after, .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open > .bp3-intent-primary.bp3-menu-item::after, .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open > .bp3-intent-primary.bp3-menu-item::after,
|
||
.bp3-dark .bp3-menu-item.bp3-intent-primary:hover .bp3-menu-item-label,
|
||
.bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open > .bp3-intent-primary.bp3-menu-item .bp3-menu-item-label,
|
||
.bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open > .bp3-intent-primary.bp3-menu-item .bp3-menu-item-label, .bp3-dark .bp3-menu-item.bp3-intent-primary:active, .bp3-dark .bp3-menu-item.bp3-intent-primary:active::before, .bp3-dark .bp3-menu-item.bp3-intent-primary:active::after,
|
||
.bp3-dark .bp3-menu-item.bp3-intent-primary:active .bp3-menu-item-label, .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active, .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active::before, .bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active::after,
|
||
.bp3-dark .bp3-menu-item.bp3-intent-primary.bp3-active .bp3-menu-item-label{
|
||
color:#ffffff; }
|
||
.bp3-dark .bp3-menu-item.bp3-intent-success{
|
||
color:#3dcc91; }
|
||
.bp3-dark .bp3-menu-item.bp3-intent-success .bp3-icon{
|
||
color:inherit; }
|
||
.bp3-dark .bp3-menu-item.bp3-intent-success::before, .bp3-dark .bp3-menu-item.bp3-intent-success::after,
|
||
.bp3-dark .bp3-menu-item.bp3-intent-success .bp3-menu-item-label{
|
||
color:#3dcc91; }
|
||
.bp3-dark .bp3-menu-item.bp3-intent-success:hover, .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open > .bp3-intent-success.bp3-menu-item, .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open > .bp3-intent-success.bp3-menu-item, .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active{
|
||
background-color:#0f9960; }
|
||
.bp3-dark .bp3-menu-item.bp3-intent-success:active{
|
||
background-color:#0d8050; }
|
||
.bp3-dark .bp3-menu-item.bp3-intent-success:hover, .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open > .bp3-intent-success.bp3-menu-item, .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open > .bp3-intent-success.bp3-menu-item, .bp3-dark .bp3-menu-item.bp3-intent-success:hover::before, .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open > .bp3-intent-success.bp3-menu-item::before, .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open > .bp3-intent-success.bp3-menu-item::before, .bp3-dark .bp3-menu-item.bp3-intent-success:hover::after, .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open > .bp3-intent-success.bp3-menu-item::after, .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open > .bp3-intent-success.bp3-menu-item::after,
|
||
.bp3-dark .bp3-menu-item.bp3-intent-success:hover .bp3-menu-item-label,
|
||
.bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open > .bp3-intent-success.bp3-menu-item .bp3-menu-item-label,
|
||
.bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open > .bp3-intent-success.bp3-menu-item .bp3-menu-item-label, .bp3-dark .bp3-menu-item.bp3-intent-success:active, .bp3-dark .bp3-menu-item.bp3-intent-success:active::before, .bp3-dark .bp3-menu-item.bp3-intent-success:active::after,
|
||
.bp3-dark .bp3-menu-item.bp3-intent-success:active .bp3-menu-item-label, .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active, .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active::before, .bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active::after,
|
||
.bp3-dark .bp3-menu-item.bp3-intent-success.bp3-active .bp3-menu-item-label{
|
||
color:#ffffff; }
|
||
.bp3-dark .bp3-menu-item.bp3-intent-warning{
|
||
color:#ffb366; }
|
||
.bp3-dark .bp3-menu-item.bp3-intent-warning .bp3-icon{
|
||
color:inherit; }
|
||
.bp3-dark .bp3-menu-item.bp3-intent-warning::before, .bp3-dark .bp3-menu-item.bp3-intent-warning::after,
|
||
.bp3-dark .bp3-menu-item.bp3-intent-warning .bp3-menu-item-label{
|
||
color:#ffb366; }
|
||
.bp3-dark .bp3-menu-item.bp3-intent-warning:hover, .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open > .bp3-intent-warning.bp3-menu-item, .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open > .bp3-intent-warning.bp3-menu-item, .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active{
|
||
background-color:#d9822b; }
|
||
.bp3-dark .bp3-menu-item.bp3-intent-warning:active{
|
||
background-color:#bf7326; }
|
||
.bp3-dark .bp3-menu-item.bp3-intent-warning:hover, .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open > .bp3-intent-warning.bp3-menu-item, .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open > .bp3-intent-warning.bp3-menu-item, .bp3-dark .bp3-menu-item.bp3-intent-warning:hover::before, .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open > .bp3-intent-warning.bp3-menu-item::before, .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open > .bp3-intent-warning.bp3-menu-item::before, .bp3-dark .bp3-menu-item.bp3-intent-warning:hover::after, .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open > .bp3-intent-warning.bp3-menu-item::after, .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open > .bp3-intent-warning.bp3-menu-item::after,
|
||
.bp3-dark .bp3-menu-item.bp3-intent-warning:hover .bp3-menu-item-label,
|
||
.bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open > .bp3-intent-warning.bp3-menu-item .bp3-menu-item-label,
|
||
.bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open > .bp3-intent-warning.bp3-menu-item .bp3-menu-item-label, .bp3-dark .bp3-menu-item.bp3-intent-warning:active, .bp3-dark .bp3-menu-item.bp3-intent-warning:active::before, .bp3-dark .bp3-menu-item.bp3-intent-warning:active::after,
|
||
.bp3-dark .bp3-menu-item.bp3-intent-warning:active .bp3-menu-item-label, .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active, .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active::before, .bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active::after,
|
||
.bp3-dark .bp3-menu-item.bp3-intent-warning.bp3-active .bp3-menu-item-label{
|
||
color:#ffffff; }
|
||
.bp3-dark .bp3-menu-item.bp3-intent-danger{
|
||
color:#ff7373; }
|
||
.bp3-dark .bp3-menu-item.bp3-intent-danger .bp3-icon{
|
||
color:inherit; }
|
||
.bp3-dark .bp3-menu-item.bp3-intent-danger::before, .bp3-dark .bp3-menu-item.bp3-intent-danger::after,
|
||
.bp3-dark .bp3-menu-item.bp3-intent-danger .bp3-menu-item-label{
|
||
color:#ff7373; }
|
||
.bp3-dark .bp3-menu-item.bp3-intent-danger:hover, .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open > .bp3-intent-danger.bp3-menu-item, .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open > .bp3-intent-danger.bp3-menu-item, .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active{
|
||
background-color:#db3737; }
|
||
.bp3-dark .bp3-menu-item.bp3-intent-danger:active{
|
||
background-color:#c23030; }
|
||
.bp3-dark .bp3-menu-item.bp3-intent-danger:hover, .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open > .bp3-intent-danger.bp3-menu-item, .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open > .bp3-intent-danger.bp3-menu-item, .bp3-dark .bp3-menu-item.bp3-intent-danger:hover::before, .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open > .bp3-intent-danger.bp3-menu-item::before, .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open > .bp3-intent-danger.bp3-menu-item::before, .bp3-dark .bp3-menu-item.bp3-intent-danger:hover::after, .bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open > .bp3-intent-danger.bp3-menu-item::after, .bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open > .bp3-intent-danger.bp3-menu-item::after,
|
||
.bp3-dark .bp3-menu-item.bp3-intent-danger:hover .bp3-menu-item-label,
|
||
.bp3-dark .bp3-submenu .bp3-popover-target.bp3-popover-open > .bp3-intent-danger.bp3-menu-item .bp3-menu-item-label,
|
||
.bp3-submenu .bp3-dark .bp3-popover-target.bp3-popover-open > .bp3-intent-danger.bp3-menu-item .bp3-menu-item-label, .bp3-dark .bp3-menu-item.bp3-intent-danger:active, .bp3-dark .bp3-menu-item.bp3-intent-danger:active::before, .bp3-dark .bp3-menu-item.bp3-intent-danger:active::after,
|
||
.bp3-dark .bp3-menu-item.bp3-intent-danger:active .bp3-menu-item-label, .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active, .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active::before, .bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active::after,
|
||
.bp3-dark .bp3-menu-item.bp3-intent-danger.bp3-active .bp3-menu-item-label{
|
||
color:#ffffff; }
|
||
.bp3-dark .bp3-menu-item::before,
|
||
.bp3-dark .bp3-menu-item > .bp3-icon{
|
||
color:#a7b6c2; }
|
||
.bp3-dark .bp3-menu-item .bp3-menu-item-label{
|
||
color:#a7b6c2; }
|
||
.bp3-dark .bp3-menu-item.bp3-active, .bp3-dark .bp3-menu-item:active{
|
||
background-color:rgba(138, 155, 168, 0.3); }
|
||
.bp3-dark .bp3-menu-item.bp3-disabled{
|
||
color:rgba(167, 182, 194, 0.6) !important; }
|
||
.bp3-dark .bp3-menu-item.bp3-disabled::before,
|
||
.bp3-dark .bp3-menu-item.bp3-disabled > .bp3-icon,
|
||
.bp3-dark .bp3-menu-item.bp3-disabled .bp3-menu-item-label{
|
||
color:rgba(167, 182, 194, 0.6) !important; }
|
||
|
||
.bp3-dark .bp3-menu-divider,
|
||
.bp3-dark .bp3-menu-header{
|
||
border-color:rgba(255, 255, 255, 0.15); }
|
||
|
||
.bp3-dark .bp3-menu-header > h6{
|
||
color:#f5f8fa; }
|
||
|
||
.bp3-label .bp3-menu{
|
||
margin-top:5px; }
|
||
.bp3-navbar{
|
||
background-color:#ffffff;
|
||
-webkit-box-shadow:0 0 0 1px rgba(16, 22, 26, 0.1), 0 0 0 rgba(16, 22, 26, 0), 0 1px 1px rgba(16, 22, 26, 0.2);
|
||
box-shadow:0 0 0 1px rgba(16, 22, 26, 0.1), 0 0 0 rgba(16, 22, 26, 0), 0 1px 1px rgba(16, 22, 26, 0.2);
|
||
height:50px;
|
||
padding:0 15px;
|
||
position:relative;
|
||
width:100%;
|
||
z-index:10; }
|
||
.bp3-navbar.bp3-dark,
|
||
.bp3-dark .bp3-navbar{
|
||
background-color:#394b59; }
|
||
.bp3-navbar.bp3-dark{
|
||
-webkit-box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.2), 0 0 0 rgba(16, 22, 26, 0), 0 1px 1px rgba(16, 22, 26, 0.4);
|
||
box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.2), 0 0 0 rgba(16, 22, 26, 0), 0 1px 1px rgba(16, 22, 26, 0.4); }
|
||
.bp3-dark .bp3-navbar{
|
||
-webkit-box-shadow:0 0 0 1px rgba(16, 22, 26, 0.2), 0 0 0 rgba(16, 22, 26, 0), 0 1px 1px rgba(16, 22, 26, 0.4);
|
||
box-shadow:0 0 0 1px rgba(16, 22, 26, 0.2), 0 0 0 rgba(16, 22, 26, 0), 0 1px 1px rgba(16, 22, 26, 0.4); }
|
||
.bp3-navbar.bp3-fixed-top{
|
||
left:0;
|
||
position:fixed;
|
||
right:0;
|
||
top:0; }
|
||
|
||
.bp3-navbar-heading{
|
||
font-size:16px;
|
||
margin-right:15px; }
|
||
|
||
.bp3-navbar-group{
|
||
-webkit-box-align:center;
|
||
-ms-flex-align:center;
|
||
align-items:center;
|
||
display:-webkit-box;
|
||
display:-ms-flexbox;
|
||
display:flex;
|
||
height:50px; }
|
||
.bp3-navbar-group.bp3-align-left{
|
||
float:left; }
|
||
.bp3-navbar-group.bp3-align-right{
|
||
float:right; }
|
||
|
||
.bp3-navbar-divider{
|
||
border-left:1px solid rgba(16, 22, 26, 0.15);
|
||
height:20px;
|
||
margin:0 10px; }
|
||
.bp3-dark .bp3-navbar-divider{
|
||
border-left-color:rgba(255, 255, 255, 0.15); }
|
||
.bp3-non-ideal-state{
|
||
display:-webkit-box;
|
||
display:-ms-flexbox;
|
||
display:flex;
|
||
-webkit-box-orient:vertical;
|
||
-webkit-box-direction:normal;
|
||
-ms-flex-direction:column;
|
||
flex-direction:column;
|
||
-webkit-box-align:center;
|
||
-ms-flex-align:center;
|
||
align-items:center;
|
||
height:100%;
|
||
-webkit-box-pack:center;
|
||
-ms-flex-pack:center;
|
||
justify-content:center;
|
||
text-align:center;
|
||
width:100%; }
|
||
.bp3-non-ideal-state > *{
|
||
-webkit-box-flex:0;
|
||
-ms-flex-positive:0;
|
||
flex-grow:0;
|
||
-ms-flex-negative:0;
|
||
flex-shrink:0; }
|
||
.bp3-non-ideal-state > .bp3-fill{
|
||
-webkit-box-flex:1;
|
||
-ms-flex-positive:1;
|
||
flex-grow:1;
|
||
-ms-flex-negative:1;
|
||
flex-shrink:1; }
|
||
.bp3-non-ideal-state::before,
|
||
.bp3-non-ideal-state > *{
|
||
margin-bottom:20px; }
|
||
.bp3-non-ideal-state:empty::before,
|
||
.bp3-non-ideal-state > :last-child{
|
||
margin-bottom:0; }
|
||
.bp3-non-ideal-state > *{
|
||
max-width:400px; }
|
||
|
||
.bp3-non-ideal-state-visual{
|
||
color:rgba(92, 112, 128, 0.6);
|
||
font-size:60px; }
|
||
.bp3-dark .bp3-non-ideal-state-visual{
|
||
color:rgba(167, 182, 194, 0.6); }
|
||
|
||
.bp3-overflow-list{
|
||
display:-webkit-box;
|
||
display:-ms-flexbox;
|
||
display:flex;
|
||
-ms-flex-wrap:nowrap;
|
||
flex-wrap:nowrap;
|
||
min-width:0; }
|
||
|
||
.bp3-overflow-list-spacer{
|
||
-ms-flex-negative:1;
|
||
flex-shrink:1;
|
||
width:1px; }
|
||
|
||
body.bp3-overlay-open{
|
||
overflow:hidden; }
|
||
|
||
.bp3-overlay{
|
||
bottom:0;
|
||
left:0;
|
||
position:static;
|
||
right:0;
|
||
top:0;
|
||
z-index:20; }
|
||
.bp3-overlay:not(.bp3-overlay-open){
|
||
pointer-events:none; }
|
||
.bp3-overlay.bp3-overlay-container{
|
||
overflow:hidden;
|
||
position:fixed; }
|
||
.bp3-overlay.bp3-overlay-container.bp3-overlay-inline{
|
||
position:absolute; }
|
||
.bp3-overlay.bp3-overlay-scroll-container{
|
||
overflow:auto;
|
||
position:fixed; }
|
||
.bp3-overlay.bp3-overlay-scroll-container.bp3-overlay-inline{
|
||
position:absolute; }
|
||
.bp3-overlay.bp3-overlay-inline{
|
||
display:inline;
|
||
overflow:visible; }
|
||
|
||
.bp3-overlay-content{
|
||
position:fixed;
|
||
z-index:20; }
|
||
.bp3-overlay-inline .bp3-overlay-content,
|
||
.bp3-overlay-scroll-container .bp3-overlay-content{
|
||
position:absolute; }
|
||
|
||
.bp3-overlay-backdrop{
|
||
bottom:0;
|
||
left:0;
|
||
position:fixed;
|
||
right:0;
|
||
top:0;
|
||
opacity:1;
|
||
background-color:rgba(16, 22, 26, 0.7);
|
||
overflow:auto;
|
||
-webkit-user-select:none;
|
||
-moz-user-select:none;
|
||
-ms-user-select:none;
|
||
user-select:none;
|
||
z-index:20; }
|
||
.bp3-overlay-backdrop.bp3-overlay-enter, .bp3-overlay-backdrop.bp3-overlay-appear{
|
||
opacity:0; }
|
||
.bp3-overlay-backdrop.bp3-overlay-enter-active, .bp3-overlay-backdrop.bp3-overlay-appear-active{
|
||
opacity:1;
|
||
-webkit-transition-delay:0;
|
||
transition-delay:0;
|
||
-webkit-transition-duration:200ms;
|
||
transition-duration:200ms;
|
||
-webkit-transition-property:opacity;
|
||
transition-property:opacity;
|
||
-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);
|
||
transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9); }
|
||
.bp3-overlay-backdrop.bp3-overlay-exit{
|
||
opacity:1; }
|
||
.bp3-overlay-backdrop.bp3-overlay-exit-active{
|
||
opacity:0;
|
||
-webkit-transition-delay:0;
|
||
transition-delay:0;
|
||
-webkit-transition-duration:200ms;
|
||
transition-duration:200ms;
|
||
-webkit-transition-property:opacity;
|
||
transition-property:opacity;
|
||
-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);
|
||
transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9); }
|
||
.bp3-overlay-backdrop:focus{
|
||
outline:none; }
|
||
.bp3-overlay-inline .bp3-overlay-backdrop{
|
||
position:absolute; }
|
||
.bp3-panel-stack{
|
||
overflow:hidden;
|
||
position:relative; }
|
||
|
||
.bp3-panel-stack-header{
|
||
-webkit-box-align:center;
|
||
-ms-flex-align:center;
|
||
align-items:center;
|
||
-webkit-box-shadow:0 1px rgba(16, 22, 26, 0.15);
|
||
box-shadow:0 1px rgba(16, 22, 26, 0.15);
|
||
display:-webkit-box;
|
||
display:-ms-flexbox;
|
||
display:flex;
|
||
-ms-flex-negative:0;
|
||
flex-shrink:0;
|
||
height:30px;
|
||
z-index:1; }
|
||
.bp3-dark .bp3-panel-stack-header{
|
||
-webkit-box-shadow:0 1px rgba(255, 255, 255, 0.15);
|
||
box-shadow:0 1px rgba(255, 255, 255, 0.15); }
|
||
.bp3-panel-stack-header > span{
|
||
-webkit-box-align:stretch;
|
||
-ms-flex-align:stretch;
|
||
align-items:stretch;
|
||
display:-webkit-box;
|
||
display:-ms-flexbox;
|
||
display:flex;
|
||
-webkit-box-flex:1;
|
||
-ms-flex:1;
|
||
flex:1; }
|
||
.bp3-panel-stack-header .bp3-heading{
|
||
margin:0 5px; }
|
||
|
||
.bp3-button.bp3-panel-stack-header-back{
|
||
margin-left:5px;
|
||
padding-left:0;
|
||
white-space:nowrap; }
|
||
.bp3-button.bp3-panel-stack-header-back .bp3-icon{
|
||
margin:0 2px; }
|
||
|
||
.bp3-panel-stack-view{
|
||
bottom:0;
|
||
left:0;
|
||
position:absolute;
|
||
right:0;
|
||
top:0;
|
||
background-color:#ffffff;
|
||
border-right:1px solid rgba(16, 22, 26, 0.15);
|
||
display:-webkit-box;
|
||
display:-ms-flexbox;
|
||
display:flex;
|
||
-webkit-box-orient:vertical;
|
||
-webkit-box-direction:normal;
|
||
-ms-flex-direction:column;
|
||
flex-direction:column;
|
||
margin-right:-1px;
|
||
overflow-y:auto;
|
||
z-index:1; }
|
||
.bp3-dark .bp3-panel-stack-view{
|
||
background-color:#30404d; }
|
||
.bp3-panel-stack-view:nth-last-child(n + 4){
|
||
display:none; }
|
||
|
||
.bp3-panel-stack-push .bp3-panel-stack-enter, .bp3-panel-stack-push .bp3-panel-stack-appear{
|
||
-webkit-transform:translateX(100%);
|
||
transform:translateX(100%);
|
||
opacity:0; }
|
||
|
||
.bp3-panel-stack-push .bp3-panel-stack-enter-active, .bp3-panel-stack-push .bp3-panel-stack-appear-active{
|
||
-webkit-transform:translate(0%);
|
||
transform:translate(0%);
|
||
opacity:1;
|
||
-webkit-transition-delay:0;
|
||
transition-delay:0;
|
||
-webkit-transition-duration:400ms;
|
||
transition-duration:400ms;
|
||
-webkit-transition-property:opacity, -webkit-transform;
|
||
transition-property:opacity, -webkit-transform;
|
||
transition-property:transform, opacity;
|
||
transition-property:transform, opacity, -webkit-transform;
|
||
-webkit-transition-timing-function:ease;
|
||
transition-timing-function:ease; }
|
||
|
||
.bp3-panel-stack-push .bp3-panel-stack-exit{
|
||
-webkit-transform:translate(0%);
|
||
transform:translate(0%);
|
||
opacity:1; }
|
||
|
||
.bp3-panel-stack-push .bp3-panel-stack-exit-active{
|
||
-webkit-transform:translateX(-50%);
|
||
transform:translateX(-50%);
|
||
opacity:0;
|
||
-webkit-transition-delay:0;
|
||
transition-delay:0;
|
||
-webkit-transition-duration:400ms;
|
||
transition-duration:400ms;
|
||
-webkit-transition-property:opacity, -webkit-transform;
|
||
transition-property:opacity, -webkit-transform;
|
||
transition-property:transform, opacity;
|
||
transition-property:transform, opacity, -webkit-transform;
|
||
-webkit-transition-timing-function:ease;
|
||
transition-timing-function:ease; }
|
||
|
||
.bp3-panel-stack-pop .bp3-panel-stack-enter, .bp3-panel-stack-pop .bp3-panel-stack-appear{
|
||
-webkit-transform:translateX(-50%);
|
||
transform:translateX(-50%);
|
||
opacity:0; }
|
||
|
||
.bp3-panel-stack-pop .bp3-panel-stack-enter-active, .bp3-panel-stack-pop .bp3-panel-stack-appear-active{
|
||
-webkit-transform:translate(0%);
|
||
transform:translate(0%);
|
||
opacity:1;
|
||
-webkit-transition-delay:0;
|
||
transition-delay:0;
|
||
-webkit-transition-duration:400ms;
|
||
transition-duration:400ms;
|
||
-webkit-transition-property:opacity, -webkit-transform;
|
||
transition-property:opacity, -webkit-transform;
|
||
transition-property:transform, opacity;
|
||
transition-property:transform, opacity, -webkit-transform;
|
||
-webkit-transition-timing-function:ease;
|
||
transition-timing-function:ease; }
|
||
|
||
.bp3-panel-stack-pop .bp3-panel-stack-exit{
|
||
-webkit-transform:translate(0%);
|
||
transform:translate(0%);
|
||
opacity:1; }
|
||
|
||
.bp3-panel-stack-pop .bp3-panel-stack-exit-active{
|
||
-webkit-transform:translateX(100%);
|
||
transform:translateX(100%);
|
||
opacity:0;
|
||
-webkit-transition-delay:0;
|
||
transition-delay:0;
|
||
-webkit-transition-duration:400ms;
|
||
transition-duration:400ms;
|
||
-webkit-transition-property:opacity, -webkit-transform;
|
||
transition-property:opacity, -webkit-transform;
|
||
transition-property:transform, opacity;
|
||
transition-property:transform, opacity, -webkit-transform;
|
||
-webkit-transition-timing-function:ease;
|
||
transition-timing-function:ease; }
|
||
.bp3-panel-stack2{
|
||
overflow:hidden;
|
||
position:relative; }
|
||
|
||
.bp3-panel-stack2-header{
|
||
-webkit-box-align:center;
|
||
-ms-flex-align:center;
|
||
align-items:center;
|
||
-webkit-box-shadow:0 1px rgba(16, 22, 26, 0.15);
|
||
box-shadow:0 1px rgba(16, 22, 26, 0.15);
|
||
display:-webkit-box;
|
||
display:-ms-flexbox;
|
||
display:flex;
|
||
-ms-flex-negative:0;
|
||
flex-shrink:0;
|
||
height:30px;
|
||
z-index:1; }
|
||
.bp3-dark .bp3-panel-stack2-header{
|
||
-webkit-box-shadow:0 1px rgba(255, 255, 255, 0.15);
|
||
box-shadow:0 1px rgba(255, 255, 255, 0.15); }
|
||
.bp3-panel-stack2-header > span{
|
||
-webkit-box-align:stretch;
|
||
-ms-flex-align:stretch;
|
||
align-items:stretch;
|
||
display:-webkit-box;
|
||
display:-ms-flexbox;
|
||
display:flex;
|
||
-webkit-box-flex:1;
|
||
-ms-flex:1;
|
||
flex:1; }
|
||
.bp3-panel-stack2-header .bp3-heading{
|
||
margin:0 5px; }
|
||
|
||
.bp3-button.bp3-panel-stack2-header-back{
|
||
margin-left:5px;
|
||
padding-left:0;
|
||
white-space:nowrap; }
|
||
.bp3-button.bp3-panel-stack2-header-back .bp3-icon{
|
||
margin:0 2px; }
|
||
|
||
.bp3-panel-stack2-view{
|
||
bottom:0;
|
||
left:0;
|
||
position:absolute;
|
||
right:0;
|
||
top:0;
|
||
background-color:#ffffff;
|
||
border-right:1px solid rgba(16, 22, 26, 0.15);
|
||
display:-webkit-box;
|
||
display:-ms-flexbox;
|
||
display:flex;
|
||
-webkit-box-orient:vertical;
|
||
-webkit-box-direction:normal;
|
||
-ms-flex-direction:column;
|
||
flex-direction:column;
|
||
margin-right:-1px;
|
||
overflow-y:auto;
|
||
z-index:1; }
|
||
.bp3-dark .bp3-panel-stack2-view{
|
||
background-color:#30404d; }
|
||
.bp3-panel-stack2-view:nth-last-child(n + 4){
|
||
display:none; }
|
||
|
||
.bp3-panel-stack2-push .bp3-panel-stack2-enter, .bp3-panel-stack2-push .bp3-panel-stack2-appear{
|
||
-webkit-transform:translateX(100%);
|
||
transform:translateX(100%);
|
||
opacity:0; }
|
||
|
||
.bp3-panel-stack2-push .bp3-panel-stack2-enter-active, .bp3-panel-stack2-push .bp3-panel-stack2-appear-active{
|
||
-webkit-transform:translate(0%);
|
||
transform:translate(0%);
|
||
opacity:1;
|
||
-webkit-transition-delay:0;
|
||
transition-delay:0;
|
||
-webkit-transition-duration:400ms;
|
||
transition-duration:400ms;
|
||
-webkit-transition-property:opacity, -webkit-transform;
|
||
transition-property:opacity, -webkit-transform;
|
||
transition-property:transform, opacity;
|
||
transition-property:transform, opacity, -webkit-transform;
|
||
-webkit-transition-timing-function:ease;
|
||
transition-timing-function:ease; }
|
||
|
||
.bp3-panel-stack2-push .bp3-panel-stack2-exit{
|
||
-webkit-transform:translate(0%);
|
||
transform:translate(0%);
|
||
opacity:1; }
|
||
|
||
.bp3-panel-stack2-push .bp3-panel-stack2-exit-active{
|
||
-webkit-transform:translateX(-50%);
|
||
transform:translateX(-50%);
|
||
opacity:0;
|
||
-webkit-transition-delay:0;
|
||
transition-delay:0;
|
||
-webkit-transition-duration:400ms;
|
||
transition-duration:400ms;
|
||
-webkit-transition-property:opacity, -webkit-transform;
|
||
transition-property:opacity, -webkit-transform;
|
||
transition-property:transform, opacity;
|
||
transition-property:transform, opacity, -webkit-transform;
|
||
-webkit-transition-timing-function:ease;
|
||
transition-timing-function:ease; }
|
||
|
||
.bp3-panel-stack2-pop .bp3-panel-stack2-enter, .bp3-panel-stack2-pop .bp3-panel-stack2-appear{
|
||
-webkit-transform:translateX(-50%);
|
||
transform:translateX(-50%);
|
||
opacity:0; }
|
||
|
||
.bp3-panel-stack2-pop .bp3-panel-stack2-enter-active, .bp3-panel-stack2-pop .bp3-panel-stack2-appear-active{
|
||
-webkit-transform:translate(0%);
|
||
transform:translate(0%);
|
||
opacity:1;
|
||
-webkit-transition-delay:0;
|
||
transition-delay:0;
|
||
-webkit-transition-duration:400ms;
|
||
transition-duration:400ms;
|
||
-webkit-transition-property:opacity, -webkit-transform;
|
||
transition-property:opacity, -webkit-transform;
|
||
transition-property:transform, opacity;
|
||
transition-property:transform, opacity, -webkit-transform;
|
||
-webkit-transition-timing-function:ease;
|
||
transition-timing-function:ease; }
|
||
|
||
.bp3-panel-stack2-pop .bp3-panel-stack2-exit{
|
||
-webkit-transform:translate(0%);
|
||
transform:translate(0%);
|
||
opacity:1; }
|
||
|
||
.bp3-panel-stack2-pop .bp3-panel-stack2-exit-active{
|
||
-webkit-transform:translateX(100%);
|
||
transform:translateX(100%);
|
||
opacity:0;
|
||
-webkit-transition-delay:0;
|
||
transition-delay:0;
|
||
-webkit-transition-duration:400ms;
|
||
transition-duration:400ms;
|
||
-webkit-transition-property:opacity, -webkit-transform;
|
||
transition-property:opacity, -webkit-transform;
|
||
transition-property:transform, opacity;
|
||
transition-property:transform, opacity, -webkit-transform;
|
||
-webkit-transition-timing-function:ease;
|
||
transition-timing-function:ease; }
|
||
.bp3-popover{
|
||
-webkit-box-shadow:0 0 0 1px rgba(16, 22, 26, 0.1), 0 2px 4px rgba(16, 22, 26, 0.2), 0 8px 24px rgba(16, 22, 26, 0.2);
|
||
box-shadow:0 0 0 1px rgba(16, 22, 26, 0.1), 0 2px 4px rgba(16, 22, 26, 0.2), 0 8px 24px rgba(16, 22, 26, 0.2);
|
||
-webkit-transform:scale(1);
|
||
transform:scale(1);
|
||
border-radius:3px;
|
||
display:inline-block;
|
||
z-index:20; }
|
||
.bp3-popover .bp3-popover-arrow{
|
||
height:30px;
|
||
position:absolute;
|
||
width:30px; }
|
||
.bp3-popover .bp3-popover-arrow::before{
|
||
height:20px;
|
||
margin:5px;
|
||
width:20px; }
|
||
.bp3-tether-element-attached-bottom.bp3-tether-target-attached-top > .bp3-popover{
|
||
margin-bottom:17px;
|
||
margin-top:-17px; }
|
||
.bp3-tether-element-attached-bottom.bp3-tether-target-attached-top > .bp3-popover > .bp3-popover-arrow{
|
||
bottom:-11px; }
|
||
.bp3-tether-element-attached-bottom.bp3-tether-target-attached-top > .bp3-popover > .bp3-popover-arrow svg{
|
||
-webkit-transform:rotate(-90deg);
|
||
transform:rotate(-90deg); }
|
||
.bp3-tether-element-attached-left.bp3-tether-target-attached-right > .bp3-popover{
|
||
margin-left:17px; }
|
||
.bp3-tether-element-attached-left.bp3-tether-target-attached-right > .bp3-popover > .bp3-popover-arrow{
|
||
left:-11px; }
|
||
.bp3-tether-element-attached-left.bp3-tether-target-attached-right > .bp3-popover > .bp3-popover-arrow svg{
|
||
-webkit-transform:rotate(0);
|
||
transform:rotate(0); }
|
||
.bp3-tether-element-attached-top.bp3-tether-target-attached-bottom > .bp3-popover{
|
||
margin-top:17px; }
|
||
.bp3-tether-element-attached-top.bp3-tether-target-attached-bottom > .bp3-popover > .bp3-popover-arrow{
|
||
top:-11px; }
|
||
.bp3-tether-element-attached-top.bp3-tether-target-attached-bottom > .bp3-popover > .bp3-popover-arrow svg{
|
||
-webkit-transform:rotate(90deg);
|
||
transform:rotate(90deg); }
|
||
.bp3-tether-element-attached-right.bp3-tether-target-attached-left > .bp3-popover{
|
||
margin-left:-17px;
|
||
margin-right:17px; }
|
||
.bp3-tether-element-attached-right.bp3-tether-target-attached-left > .bp3-popover > .bp3-popover-arrow{
|
||
right:-11px; }
|
||
.bp3-tether-element-attached-right.bp3-tether-target-attached-left > .bp3-popover > .bp3-popover-arrow svg{
|
||
-webkit-transform:rotate(180deg);
|
||
transform:rotate(180deg); }
|
||
.bp3-tether-element-attached-middle > .bp3-popover > .bp3-popover-arrow{
|
||
top:50%;
|
||
-webkit-transform:translateY(-50%);
|
||
transform:translateY(-50%); }
|
||
.bp3-tether-element-attached-center > .bp3-popover > .bp3-popover-arrow{
|
||
right:50%;
|
||
-webkit-transform:translateX(50%);
|
||
transform:translateX(50%); }
|
||
.bp3-tether-element-attached-top.bp3-tether-target-attached-top > .bp3-popover > .bp3-popover-arrow{
|
||
top:-0.3934px; }
|
||
.bp3-tether-element-attached-right.bp3-tether-target-attached-right > .bp3-popover > .bp3-popover-arrow{
|
||
right:-0.3934px; }
|
||
.bp3-tether-element-attached-left.bp3-tether-target-attached-left > .bp3-popover > .bp3-popover-arrow{
|
||
left:-0.3934px; }
|
||
.bp3-tether-element-attached-bottom.bp3-tether-target-attached-bottom > .bp3-popover > .bp3-popover-arrow{
|
||
bottom:-0.3934px; }
|
||
.bp3-tether-element-attached-top.bp3-tether-element-attached-left > .bp3-popover{
|
||
-webkit-transform-origin:top left;
|
||
transform-origin:top left; }
|
||
.bp3-tether-element-attached-top.bp3-tether-element-attached-center > .bp3-popover{
|
||
-webkit-transform-origin:top center;
|
||
transform-origin:top center; }
|
||
.bp3-tether-element-attached-top.bp3-tether-element-attached-right > .bp3-popover{
|
||
-webkit-transform-origin:top right;
|
||
transform-origin:top right; }
|
||
.bp3-tether-element-attached-middle.bp3-tether-element-attached-left > .bp3-popover{
|
||
-webkit-transform-origin:center left;
|
||
transform-origin:center left; }
|
||
.bp3-tether-element-attached-middle.bp3-tether-element-attached-center > .bp3-popover{
|
||
-webkit-transform-origin:center center;
|
||
transform-origin:center center; }
|
||
.bp3-tether-element-attached-middle.bp3-tether-element-attached-right > .bp3-popover{
|
||
-webkit-transform-origin:center right;
|
||
transform-origin:center right; }
|
||
.bp3-tether-element-attached-bottom.bp3-tether-element-attached-left > .bp3-popover{
|
||
-webkit-transform-origin:bottom left;
|
||
transform-origin:bottom left; }
|
||
.bp3-tether-element-attached-bottom.bp3-tether-element-attached-center > .bp3-popover{
|
||
-webkit-transform-origin:bottom center;
|
||
transform-origin:bottom center; }
|
||
.bp3-tether-element-attached-bottom.bp3-tether-element-attached-right > .bp3-popover{
|
||
-webkit-transform-origin:bottom right;
|
||
transform-origin:bottom right; }
|
||
.bp3-popover .bp3-popover-content{
|
||
background:#ffffff;
|
||
color:inherit; }
|
||
.bp3-popover .bp3-popover-arrow::before{
|
||
-webkit-box-shadow:1px 1px 6px rgba(16, 22, 26, 0.2);
|
||
box-shadow:1px 1px 6px rgba(16, 22, 26, 0.2); }
|
||
.bp3-popover .bp3-popover-arrow-border{
|
||
fill:#10161a;
|
||
fill-opacity:0.1; }
|
||
.bp3-popover .bp3-popover-arrow-fill{
|
||
fill:#ffffff; }
|
||
.bp3-popover-enter > .bp3-popover, .bp3-popover-appear > .bp3-popover{
|
||
-webkit-transform:scale(0.3);
|
||
transform:scale(0.3); }
|
||
.bp3-popover-enter-active > .bp3-popover, .bp3-popover-appear-active > .bp3-popover{
|
||
-webkit-transform:scale(1);
|
||
transform:scale(1);
|
||
-webkit-transition-delay:0;
|
||
transition-delay:0;
|
||
-webkit-transition-duration:300ms;
|
||
transition-duration:300ms;
|
||
-webkit-transition-property:-webkit-transform;
|
||
transition-property:-webkit-transform;
|
||
transition-property:transform;
|
||
transition-property:transform, -webkit-transform;
|
||
-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);
|
||
transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11); }
|
||
.bp3-popover-exit > .bp3-popover{
|
||
-webkit-transform:scale(1);
|
||
transform:scale(1); }
|
||
.bp3-popover-exit-active > .bp3-popover{
|
||
-webkit-transform:scale(0.3);
|
||
transform:scale(0.3);
|
||
-webkit-transition-delay:0;
|
||
transition-delay:0;
|
||
-webkit-transition-duration:300ms;
|
||
transition-duration:300ms;
|
||
-webkit-transition-property:-webkit-transform;
|
||
transition-property:-webkit-transform;
|
||
transition-property:transform;
|
||
transition-property:transform, -webkit-transform;
|
||
-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);
|
||
transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11); }
|
||
.bp3-popover .bp3-popover-content{
|
||
border-radius:3px;
|
||
position:relative; }
|
||
.bp3-popover.bp3-popover-content-sizing .bp3-popover-content{
|
||
max-width:350px;
|
||
padding:20px; }
|
||
.bp3-popover-target + .bp3-overlay .bp3-popover.bp3-popover-content-sizing{
|
||
width:350px; }
|
||
.bp3-popover.bp3-minimal{
|
||
margin:0 !important; }
|
||
.bp3-popover.bp3-minimal .bp3-popover-arrow{
|
||
display:none; }
|
||
.bp3-popover.bp3-minimal.bp3-popover{
|
||
-webkit-transform:scale(1);
|
||
transform:scale(1); }
|
||
.bp3-popover-enter > .bp3-popover.bp3-minimal.bp3-popover, .bp3-popover-appear > .bp3-popover.bp3-minimal.bp3-popover{
|
||
-webkit-transform:scale(1);
|
||
transform:scale(1); }
|
||
.bp3-popover-enter-active > .bp3-popover.bp3-minimal.bp3-popover, .bp3-popover-appear-active > .bp3-popover.bp3-minimal.bp3-popover{
|
||
-webkit-transform:scale(1);
|
||
transform:scale(1);
|
||
-webkit-transition-delay:0;
|
||
transition-delay:0;
|
||
-webkit-transition-duration:100ms;
|
||
transition-duration:100ms;
|
||
-webkit-transition-property:-webkit-transform;
|
||
transition-property:-webkit-transform;
|
||
transition-property:transform;
|
||
transition-property:transform, -webkit-transform;
|
||
-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);
|
||
transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9); }
|
||
.bp3-popover-exit > .bp3-popover.bp3-minimal.bp3-popover{
|
||
-webkit-transform:scale(1);
|
||
transform:scale(1); }
|
||
.bp3-popover-exit-active > .bp3-popover.bp3-minimal.bp3-popover{
|
||
-webkit-transform:scale(1);
|
||
transform:scale(1);
|
||
-webkit-transition-delay:0;
|
||
transition-delay:0;
|
||
-webkit-transition-duration:100ms;
|
||
transition-duration:100ms;
|
||
-webkit-transition-property:-webkit-transform;
|
||
transition-property:-webkit-transform;
|
||
transition-property:transform;
|
||
transition-property:transform, -webkit-transform;
|
||
-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);
|
||
transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9); }
|
||
.bp3-popover.bp3-dark,
|
||
.bp3-dark .bp3-popover{
|
||
-webkit-box-shadow:0 0 0 1px rgba(16, 22, 26, 0.2), 0 2px 4px rgba(16, 22, 26, 0.4), 0 8px 24px rgba(16, 22, 26, 0.4);
|
||
box-shadow:0 0 0 1px rgba(16, 22, 26, 0.2), 0 2px 4px rgba(16, 22, 26, 0.4), 0 8px 24px rgba(16, 22, 26, 0.4); }
|
||
.bp3-popover.bp3-dark .bp3-popover-content,
|
||
.bp3-dark .bp3-popover .bp3-popover-content{
|
||
background:#30404d;
|
||
color:inherit; }
|
||
.bp3-popover.bp3-dark .bp3-popover-arrow::before,
|
||
.bp3-dark .bp3-popover .bp3-popover-arrow::before{
|
||
-webkit-box-shadow:1px 1px 6px rgba(16, 22, 26, 0.4);
|
||
box-shadow:1px 1px 6px rgba(16, 22, 26, 0.4); }
|
||
.bp3-popover.bp3-dark .bp3-popover-arrow-border,
|
||
.bp3-dark .bp3-popover .bp3-popover-arrow-border{
|
||
fill:#10161a;
|
||
fill-opacity:0.2; }
|
||
.bp3-popover.bp3-dark .bp3-popover-arrow-fill,
|
||
.bp3-dark .bp3-popover .bp3-popover-arrow-fill{
|
||
fill:#30404d; }
|
||
|
||
.bp3-popover-arrow::before{
|
||
border-radius:2px;
|
||
content:"";
|
||
display:block;
|
||
position:absolute;
|
||
-webkit-transform:rotate(45deg);
|
||
transform:rotate(45deg); }
|
||
|
||
.bp3-tether-pinned .bp3-popover-arrow{
|
||
display:none; }
|
||
|
||
.bp3-popover-backdrop{
|
||
background:rgba(255, 255, 255, 0); }
|
||
|
||
.bp3-transition-container{
|
||
opacity:1;
|
||
display:-webkit-box;
|
||
display:-ms-flexbox;
|
||
display:flex;
|
||
z-index:20; }
|
||
.bp3-transition-container.bp3-popover-enter, .bp3-transition-container.bp3-popover-appear{
|
||
opacity:0; }
|
||
.bp3-transition-container.bp3-popover-enter-active, .bp3-transition-container.bp3-popover-appear-active{
|
||
opacity:1;
|
||
-webkit-transition-delay:0;
|
||
transition-delay:0;
|
||
-webkit-transition-duration:100ms;
|
||
transition-duration:100ms;
|
||
-webkit-transition-property:opacity;
|
||
transition-property:opacity;
|
||
-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);
|
||
transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9); }
|
||
.bp3-transition-container.bp3-popover-exit{
|
||
opacity:1; }
|
||
.bp3-transition-container.bp3-popover-exit-active{
|
||
opacity:0;
|
||
-webkit-transition-delay:0;
|
||
transition-delay:0;
|
||
-webkit-transition-duration:100ms;
|
||
transition-duration:100ms;
|
||
-webkit-transition-property:opacity;
|
||
transition-property:opacity;
|
||
-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);
|
||
transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9); }
|
||
.bp3-transition-container:focus{
|
||
outline:none; }
|
||
.bp3-transition-container.bp3-popover-leave .bp3-popover-content{
|
||
pointer-events:none; }
|
||
.bp3-transition-container[data-x-out-of-boundaries]{
|
||
display:none; }
|
||
|
||
span.bp3-popover-target{
|
||
display:inline-block; }
|
||
|
||
.bp3-popover-wrapper.bp3-fill{
|
||
width:100%; }
|
||
|
||
.bp3-portal{
|
||
left:0;
|
||
position:absolute;
|
||
right:0;
|
||
top:0; }
|
||
@-webkit-keyframes linear-progress-bar-stripes{
|
||
from{
|
||
background-position:0 0; }
|
||
to{
|
||
background-position:30px 0; } }
|
||
@keyframes linear-progress-bar-stripes{
|
||
from{
|
||
background-position:0 0; }
|
||
to{
|
||
background-position:30px 0; } }
|
||
|
||
.bp3-progress-bar{
|
||
background:rgba(92, 112, 128, 0.2);
|
||
border-radius:40px;
|
||
display:block;
|
||
height:8px;
|
||
overflow:hidden;
|
||
position:relative;
|
||
width:100%; }
|
||
.bp3-progress-bar .bp3-progress-meter{
|
||
background: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%);
|
||
background-color:rgba(92, 112, 128, 0.8);
|
||
background-size:30px 30px;
|
||
border-radius:40px;
|
||
height:100%;
|
||
position:absolute;
|
||
-webkit-transition:width 200ms cubic-bezier(0.4, 1, 0.75, 0.9);
|
||
transition:width 200ms cubic-bezier(0.4, 1, 0.75, 0.9);
|
||
width:100%; }
|
||
.bp3-progress-bar:not(.bp3-no-animation):not(.bp3-no-stripes) .bp3-progress-meter{
|
||
animation:linear-progress-bar-stripes 300ms linear infinite reverse; }
|
||
.bp3-progress-bar.bp3-no-stripes .bp3-progress-meter{
|
||
background-image:none; }
|
||
|
||
.bp3-dark .bp3-progress-bar{
|
||
background:rgba(16, 22, 26, 0.5); }
|
||
.bp3-dark .bp3-progress-bar .bp3-progress-meter{
|
||
background-color:#8a9ba8; }
|
||
|
||
.bp3-progress-bar.bp3-intent-primary .bp3-progress-meter{
|
||
background-color:#137cbd; }
|
||
|
||
.bp3-progress-bar.bp3-intent-success .bp3-progress-meter{
|
||
background-color:#0f9960; }
|
||
|
||
.bp3-progress-bar.bp3-intent-warning .bp3-progress-meter{
|
||
background-color:#d9822b; }
|
||
|
||
.bp3-progress-bar.bp3-intent-danger .bp3-progress-meter{
|
||
background-color:#db3737; }
|
||
@-webkit-keyframes skeleton-glow{
|
||
from{
|
||
background:rgba(206, 217, 224, 0.2);
|
||
border-color:rgba(206, 217, 224, 0.2); }
|
||
to{
|
||
background:rgba(92, 112, 128, 0.2);
|
||
border-color:rgba(92, 112, 128, 0.2); } }
|
||
@keyframes skeleton-glow{
|
||
from{
|
||
background:rgba(206, 217, 224, 0.2);
|
||
border-color:rgba(206, 217, 224, 0.2); }
|
||
to{
|
||
background:rgba(92, 112, 128, 0.2);
|
||
border-color:rgba(92, 112, 128, 0.2); } }
|
||
.bp3-skeleton{
|
||
-webkit-animation:1000ms linear infinite alternate skeleton-glow;
|
||
animation:1000ms linear infinite alternate skeleton-glow;
|
||
background:rgba(206, 217, 224, 0.2);
|
||
background-clip:padding-box !important;
|
||
border-color:rgba(206, 217, 224, 0.2) !important;
|
||
border-radius:2px;
|
||
-webkit-box-shadow:none !important;
|
||
box-shadow:none !important;
|
||
color:transparent !important;
|
||
cursor:default;
|
||
pointer-events:none;
|
||
-webkit-user-select:none;
|
||
-moz-user-select:none;
|
||
-ms-user-select:none;
|
||
user-select:none; }
|
||
.bp3-skeleton::before, .bp3-skeleton::after,
|
||
.bp3-skeleton *{
|
||
visibility:hidden !important; }
|
||
.bp3-slider{
|
||
height:40px;
|
||
min-width:150px;
|
||
width:100%;
|
||
cursor:default;
|
||
outline:none;
|
||
position:relative;
|
||
-webkit-user-select:none;
|
||
-moz-user-select:none;
|
||
-ms-user-select:none;
|
||
user-select:none; }
|
||
.bp3-slider:hover{
|
||
cursor:pointer; }
|
||
.bp3-slider:active{
|
||
cursor:-webkit-grabbing;
|
||
cursor:grabbing; }
|
||
.bp3-slider.bp3-disabled{
|
||
cursor:not-allowed;
|
||
opacity:0.5; }
|
||
.bp3-slider.bp3-slider-unlabeled{
|
||
height:16px; }
|
||
|
||
.bp3-slider-track,
|
||
.bp3-slider-progress{
|
||
height:6px;
|
||
left:0;
|
||
right:0;
|
||
top:5px;
|
||
position:absolute; }
|
||
|
||
.bp3-slider-track{
|
||
border-radius:3px;
|
||
overflow:hidden; }
|
||
|
||
.bp3-slider-progress{
|
||
background:rgba(92, 112, 128, 0.2); }
|
||
.bp3-dark .bp3-slider-progress{
|
||
background:rgba(16, 22, 26, 0.5); }
|
||
.bp3-slider-progress.bp3-intent-primary{
|
||
background-color:#137cbd; }
|
||
.bp3-slider-progress.bp3-intent-success{
|
||
background-color:#0f9960; }
|
||
.bp3-slider-progress.bp3-intent-warning{
|
||
background-color:#d9822b; }
|
||
.bp3-slider-progress.bp3-intent-danger{
|
||
background-color:#db3737; }
|
||
|
||
.bp3-slider-handle{
|
||
background-color:#f5f8fa;
|
||
background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.8)), to(rgba(255, 255, 255, 0)));
|
||
background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));
|
||
-webkit-box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.2), inset 0 -1px 0 rgba(16, 22, 26, 0.1);
|
||
box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.2), inset 0 -1px 0 rgba(16, 22, 26, 0.1);
|
||
color:#182026;
|
||
border-radius:3px;
|
||
-webkit-box-shadow:0 0 0 1px rgba(16, 22, 26, 0.2), 0 1px 1px rgba(16, 22, 26, 0.2);
|
||
box-shadow:0 0 0 1px rgba(16, 22, 26, 0.2), 0 1px 1px rgba(16, 22, 26, 0.2);
|
||
cursor:pointer;
|
||
height:16px;
|
||
left:0;
|
||
position:absolute;
|
||
top:0;
|
||
width:16px; }
|
||
.bp3-slider-handle:hover{
|
||
background-clip:padding-box;
|
||
background-color:#ebf1f5;
|
||
-webkit-box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.2), inset 0 -1px 0 rgba(16, 22, 26, 0.1);
|
||
box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.2), inset 0 -1px 0 rgba(16, 22, 26, 0.1); }
|
||
.bp3-slider-handle:active, .bp3-slider-handle.bp3-active{
|
||
background-color:#d8e1e8;
|
||
background-image:none;
|
||
-webkit-box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.2), inset 0 1px 2px rgba(16, 22, 26, 0.2);
|
||
box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.2), inset 0 1px 2px rgba(16, 22, 26, 0.2); }
|
||
.bp3-slider-handle:disabled, .bp3-slider-handle.bp3-disabled{
|
||
background-color:rgba(206, 217, 224, 0.5);
|
||
background-image:none;
|
||
-webkit-box-shadow:none;
|
||
box-shadow:none;
|
||
color:rgba(92, 112, 128, 0.6);
|
||
cursor:not-allowed;
|
||
outline:none; }
|
||
.bp3-slider-handle:disabled.bp3-active, .bp3-slider-handle:disabled.bp3-active:hover, .bp3-slider-handle.bp3-disabled.bp3-active, .bp3-slider-handle.bp3-disabled.bp3-active:hover{
|
||
background:rgba(206, 217, 224, 0.7); }
|
||
.bp3-slider-handle:focus{
|
||
z-index:1; }
|
||
.bp3-slider-handle:hover{
|
||
background-clip:padding-box;
|
||
background-color:#ebf1f5;
|
||
-webkit-box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.2), inset 0 -1px 0 rgba(16, 22, 26, 0.1);
|
||
box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.2), inset 0 -1px 0 rgba(16, 22, 26, 0.1);
|
||
-webkit-box-shadow:0 0 0 1px rgba(16, 22, 26, 0.2), 0 1px 1px rgba(16, 22, 26, 0.2);
|
||
box-shadow:0 0 0 1px rgba(16, 22, 26, 0.2), 0 1px 1px rgba(16, 22, 26, 0.2);
|
||
cursor:-webkit-grab;
|
||
cursor:grab;
|
||
z-index:2; }
|
||
.bp3-slider-handle.bp3-active{
|
||
background-color:#d8e1e8;
|
||
background-image:none;
|
||
-webkit-box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.2), inset 0 1px 2px rgba(16, 22, 26, 0.2);
|
||
box-shadow:inset 0 0 0 1px rgba(16, 22, 26, 0.2), inset 0 1px 2px rgba(16, 22, 26, 0.2);
|
||
-webkit-box-shadow:0 0 0 1px rgba(16, 22, 26, 0.2), inset 0 1px 1px rgba(16, 22, 26, 0.1);
|
||
box-shadow:0 0 0 1px rgba(16, 22, 26, 0.2), inset 0 1px 1px rgba(16, 22, 26, 0.1);
|
||
cursor:-webkit-grabbing;
|
||
cursor:grabbing; }
|
||
.bp3-disabled .bp3-slider-handle{
|
||
background:#bfccd6;
|
||
-webkit-box-shadow:none;
|
||
box-shadow:none;
|
||
pointer-events:none; }
|
||
.bp3-dark .bp3-slider-handle{
|
||
background-color:#394b59;
|
||
background-image:-webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.05)), to(rgba(255, 255, 255, 0)));
|
||
background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0));
|
||
-webkit-box-shadow:0 0 0 1px rgba(16, 22, 26, 0.4);
|
||
box-shadow:0 0 0 1px rgba(16, 22, 26, 0.4);
|
||
color:#f5f8fa; }
|
||
.bp3-dark .bp3-slider-handle:hover, .bp3-dark .bp3-slider-handle:active, .bp3-dark .bp3-slider-handle.bp3-active{
|
||
color:#f5f8fa; }
|
||
.bp3-dark .bp3-slider-handle:hover{
|
||
background-color:#30404d;
|
||
-webkit-box-shadow:0 0 0 1px rgba(16, 22, 26, 0.4);
|
||
box-shadow:0 0 0 1px rgba(16, 22, 26, 0.4); }
|
||
.bp3-dark .bp3-slider-handle:active, .bp3-dark .bp3-slider-handle.bp3-active{
|
||
background-color:#202b33;
|
||
background-image:none;
|
||
-webkit-box-shadow:0 0 0 1px rgba(16, 22, 26, 0.6), inset 0 1px 2px rgba(16, 22, 26, 0.2);
|
||
box-shadow:0 0 0 1px rgba(16, 22, 26, 0.6), inset 0 1px 2px rgba(16, 22, 26, 0.2); }
|
||
.bp3-dark .bp3-slider-handle:disabled, .bp3-dark .bp3-slider-handle.bp3-disabled{
|
||
background-color:rgba(57, 75, 89, 0.5);
|
||
background-image:none;
|
||
-webkit-box-shadow:none;
|
||
box-shadow:none;
|
||
color:rgba(167, 182, 194, 0.6); }
|
||
.bp3-dark .bp3-slider-handle:disabled.bp3-active, .bp3-dark .bp3-slider-handle.bp3-disabled.bp3-active{
|
||
background:rgba(57, 75, 89, 0.7); }
|
||
.bp3-dark .bp3-slider-handle .bp3-button-spinner .bp3-spinner-head{
|
||
background:rgba(16, 22, 26, 0.5);
|
||
stroke:#8a9ba8; }
|
||
.bp3-dark .bp3-slider-handle, .bp3-dark .bp3-slider-handle:hover{
|
||
background-color:#394b59; }
|
||
.bp3-dark .bp3-slider-handle.bp3-active{
|
||
background-color:#293742; }
|
||
.bp3-dark .bp3-disabled .bp3-slider-handle{
|
||
background:#5c7080;
|
||
border-color:#5c7080;
|
||
-webkit-box-shadow:none;
|
||
box-shadow:none; }
|
||
.bp3-slider-handle .bp3-slider-label{
|
||
background:#394b59;
|
||
border-radius:3px;
|
||
-webkit-box-shadow:0 0 0 1px rgba(16, 22, 26, 0.1), 0 2px 4px rgba(16, 22, 26, 0.2), 0 8px 24px rgba(16, 22, 26, 0.2);
|
||
box-shadow:0 0 0 1px rgba(16, 22, 26, 0.1), 0 2px 4px rgba(16, 22, 26, 0.2), 0 8px 24px rgba(16, 22, 26, 0.2);
|
||
color:#f5f8fa;
|
||
margin-left:8px; }
|
||
.bp3-dark .bp3-slider-handle .bp3-slider-label{
|
||
background:#e1e8ed;
|
||
-webkit-box-shadow:0 0 0 1px rgba(16, 22, 26, 0.2), 0 2px 4px rgba(16, 22, 26, 0.4), 0 8px 24px rgba(16, 22, 26, 0.4);
|
||
box-shadow:0 0 0 1px rgba(16, 22, 26, 0.2), 0 2px 4px rgba(16, 22, 26, 0.4), 0 8px 24px rgba(16, 22, 26, 0.4);
|
||
color:#394b59; }
|
||
.bp3-disabled .bp3-slider-handle .bp3-slider-label{
|
||
-webkit-box-shadow:none;
|
||
box-shadow:none; }
|
||
.bp3-slider-handle.bp3-start, .bp3-slider-handle.bp3-end{
|
||
width:8px; }
|
||
.bp3-slider-handle.bp3-start{
|
||
border-bottom-right-radius:0;
|
||
border-top-right-radius:0; }
|
||
.bp3-slider-handle.bp3-end{
|
||
border-bottom-left-radius:0;
|
||
border-top-left-radius:0;
|
||
margin-left:8px; }
|
||
.bp3-slider-handle.bp3-end .bp3-slider-label{
|
||
margin-left:0; }
|
||
|
||
.bp3-slider-label{
|
||
-webkit-transform:translate(-50%, 20px);
|
||
transform:translate(-50%, 20px);
|
||
display:inline-block;
|
||
font-size:12px;
|
||
line-height:1;
|
||
padding:2px 5px;
|
||
position:absolute;
|
||
vertical-align:top; }
|
||
|
||
.bp3-slider.bp3-vertical{
|
||
height:150px;
|
||
min-width:40px;
|
||
width:40px; }
|
||
.bp3-slider.bp3-vertical .bp3-slider-track,
|
||
.bp3-slider.bp3-vertical .bp3-slider-progress{
|
||
bottom:0;
|
||
height:auto;
|
||
left:5px;
|
||
top:0;
|
||
width:6px; }
|
||
.bp3-slider.bp3-vertical .bp3-slider-progress{
|
||
top:auto; }
|
||
.bp3-slider.bp3-vertical .bp3-slider-label{
|
||
-webkit-transform:translate(20px, 50%);
|
||
transform:translate(20px, 50%); }
|
||
.bp3-slider.bp3-vertical .bp3-slider-handle{
|
||
top:auto; }
|
||
.bp3-slider.bp3-vertical .bp3-slider-handle .bp3-slider-label{
|
||
margin-left:0;
|
||
margin-top:-8px; }
|
||
.bp3-slider.bp3-vertical .bp3-slider-handle.bp3-end, .bp3-slider.bp3-vertical .bp3-slider-handle.bp3-start{
|
||
height:8px;
|
||
margin-left:0;
|
||
width:16px; }
|
||
.bp3-slider.bp3-vertical .bp3-slider-handle.bp3-start{
|
||
border-bottom-right-radius:3px;
|
||
border-top-left-radius:0; }
|
||
.bp3-slider.bp3-vertical .bp3-slider-handle.bp3-start .bp3-slider-label{
|
||
-webkit-transform:translate(20px);
|
||
transform:translate(20px); }
|
||
.bp3-slider.bp3-vertical .bp3-slider-handle.bp3-end{
|
||
border-bottom-left-radius:0;
|
||
border-bottom-right-radius:0;
|
||
border-top-left-radius:3px;
|
||
margin-bottom:8px; }
|
||
|
||
@-webkit-keyframes pt-spinner-animation{
|
||
from{
|
||
-webkit-transform:rotate(0deg);
|
||
transform:rotate(0deg); }
|
||
to{
|
||
-webkit-transform:rotate(360deg);
|
||
transform:rotate(360deg); } }
|
||
|
||
@keyframes pt-spinner-animation{
|
||
from{
|
||
-webkit-transform:rotate(0deg);
|
||
transform:rotate(0deg); }
|
||
to{
|
||
-webkit-transform:rotate(360deg);
|
||
transform:rotate(360deg); } }
|
||
|
||
.bp3-spinner{
|
||
-webkit-box-align:center;
|
||
-ms-flex-align:center;
|
||
align-items:center;
|
||
display:-webkit-box;
|
||
display:-ms-flexbox;
|
||
display:flex;
|
||
-webkit-box-pack:center;
|
||
-ms-flex-pack:center;
|
||
justify-content:center;
|
||
overflow:visible;
|
||
vertical-align:middle; }
|
||
.bp3-spinner svg{
|
||
display:block; }
|
||
.bp3-spinner path{
|
||
fill-opacity:0; }
|
||
.bp3-spinner .bp3-spinner-head{
|
||
stroke:rgba(92, 112, 128, 0.8);
|
||
stroke-linecap:round;
|
||
-webkit-transform-origin:center;
|
||
transform-origin:center;
|
||
-webkit-transition:stroke-dashoffset 200ms cubic-bezier(0.4, 1, 0.75, 0.9);
|
||
transition:stroke-dashoffset 200ms cubic-bezier(0.4, 1, 0.75, 0.9); }
|
||
.bp3-spinner .bp3-spinner-track{
|
||
stroke:rgba(92, 112, 128, 0.2); }
|
||
|
||
.bp3-spinner-animation{
|
||
-webkit-animation:pt-spinner-animation 500ms linear infinite;
|
||
animation:pt-spinner-animation 500ms linear infinite; }
|
||
.bp3-no-spin > .bp3-spinner-animation{
|
||
-webkit-animation:none;
|
||
animation:none; }
|
||
|
||
.bp3-dark .bp3-spinner .bp3-spinner-head{
|
||
stroke:#8a9ba8; }
|
||
|
||
.bp3-dark .bp3-spinner .bp3-spinner-track{
|
||
stroke:rgba(16, 22, 26, 0.5); }
|
||
|
||
.bp3-spinner.bp3-intent-primary .bp3-spinner-head{
|
||
stroke:#137cbd; }
|
||
|
||
.bp3-spinner.bp3-intent-success .bp3-spinner-head{
|
||
stroke:#0f9960; }
|
||
|
||
.bp3-spinner.bp3-intent-warning .bp3-spinner-head{
|
||
stroke:#d9822b; }
|
||
|
||
.bp3-spinner.bp3-intent-danger .bp3-spinner-head{
|
||
stroke:#db3737; }
|
||
.bp3-tabs.bp3-vertical{
|
||
display:-webkit-box;
|
||
display:-ms-flexbox;
|
||
display:flex; }
|
||
.bp3-tabs.bp3-vertical > .bp3-tab-list{
|
||
-webkit-box-align:start;
|
||
-ms-flex-align:start;
|
||
align-items:flex-start;
|
||
-webkit-box-orient:vertical;
|
||
-webkit-box-direction:normal;
|
||
-ms-flex-direction:column;
|
||
flex-direction:column; }
|
||
.bp3-tabs.bp3-vertical > .bp3-tab-list .bp3-tab{
|
||
border-radius:3px;
|
||
padding:0 10px;
|
||
width:100%; }
|
||
.bp3-tabs.bp3-vertical > .bp3-tab-list .bp3-tab[aria-selected="true"]{
|
||
background-color:rgba(19, 124, 189, 0.2);
|
||
-webkit-box-shadow:none;
|
||
box-shadow:none; }
|
||
.bp3-tabs.bp3-vertical > .bp3-tab-list .bp3-tab-indicator-wrapper .bp3-tab-indicator{
|
||
background-color:rgba(19, 124, 189, 0.2);
|
||
border-radius:3px;
|
||
bottom:0;
|
||
height:auto;
|
||
left:0;
|
||
right:0;
|
||
top:0; }
|
||
.bp3-tabs.bp3-vertical > .bp3-tab-panel{
|
||
margin-top:0;
|
||
padding-left:20px; }
|
||
|
||
.bp3-tab-list{
|
||
-webkit-box-align:end;
|
||
-ms-flex-align:end;
|
||
align-items:flex-end;
|
||
border:none;
|
||
display:-webkit-box;
|
||
display:-ms-flexbox;
|
||
display:flex;
|
||
-webkit-box-flex:0;
|
||
-ms-flex:0 0 auto;
|
||
flex:0 0 auto;
|
||
list-style:none;
|
||
margin:0;
|
||
padding:0;
|
||
position:relative; }
|
||
.bp3-tab-list > *:not(:last-child){
|
||
margin-right:20px; }
|
||
|
||
.bp3-tab{
|
||
overflow:hidden;
|
||
text-overflow:ellipsis;
|
||
white-space:nowrap;
|
||
word-wrap:normal;
|
||
color:#182026;
|
||
cursor:pointer;
|
||
-webkit-box-flex:0;
|
||
-ms-flex:0 0 auto;
|
||
flex:0 0 auto;
|
||
font-size:14px;
|
||
line-height:30px;
|
||
max-width:100%;
|
||
position:relative;
|
||
vertical-align:top; }
|
||
.bp3-tab a{
|
||
color:inherit;
|
||
display:block;
|
||
text-decoration:none; }
|
||
.bp3-tab-indicator-wrapper ~ .bp3-tab{
|
||
background-color:transparent !important;
|
||
-webkit-box-shadow:none !important;
|
||
box-shadow:none !important; }
|
||
.bp3-tab[aria-disabled="true"]{
|
||
color:rgba(92, 112, 128, 0.6);
|
||
cursor:not-allowed; }
|
||
.bp3-tab[aria-selected="true"]{
|
||
border-radius:0;
|
||
-webkit-box-shadow:inset 0 -3px 0 #106ba3;
|
||
box-shadow:inset 0 -3px 0 #106ba3; }
|
||
.bp3-tab[aria-selected="true"], .bp3-tab:not([aria-disabled="true"]):hover{
|
||
color:#106ba3; }
|
||
.bp3-tab:focus{
|
||
-moz-outline-radius:0; }
|
||
.bp3-large > .bp3-tab{
|
||
font-size:16px;
|
||
line-height:40px; }
|
||
|
||
.bp3-tab-panel{
|
||
margin-top:20px; }
|
||
.bp3-tab-panel[aria-hidden="true"]{
|
||
display:none; }
|
||
|
||
.bp3-tab-indicator-wrapper{
|
||
left:0;
|
||
pointer-events:none;
|
||
position:absolute;
|
||
top:0;
|
||
-webkit-transform:translateX(0), translateY(0);
|
||
transform:translateX(0), translateY(0);
|
||
-webkit-transition:height, width, -webkit-transform;
|
||
transition:height, width, -webkit-transform;
|
||
transition:height, transform, width;
|
||
transition:height, transform, width, -webkit-transform;
|
||
-webkit-transition-duration:200ms;
|
||
transition-duration:200ms;
|
||
-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);
|
||
transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9); }
|
||
.bp3-tab-indicator-wrapper .bp3-tab-indicator{
|
||
background-color:#106ba3;
|
||
bottom:0;
|
||
height:3px;
|
||
left:0;
|
||
position:absolute;
|
||
right:0; }
|
||
.bp3-tab-indicator-wrapper.bp3-no-animation{
|
||
-webkit-transition:none;
|
||
transition:none; }
|
||
|
||
.bp3-dark .bp3-tab{
|
||
color:#f5f8fa; }
|
||
.bp3-dark .bp3-tab[aria-disabled="true"]{
|
||
color:rgba(167, 182, 194, 0.6); }
|
||
.bp3-dark .bp3-tab[aria-selected="true"]{
|
||
-webkit-box-shadow:inset 0 -3px 0 #48aff0;
|
||
box-shadow:inset 0 -3px 0 #48aff0; }
|
||
.bp3-dark .bp3-tab[aria-selected="true"], .bp3-dark .bp3-tab:not([aria-disabled="true"]):hover{
|
||
color:#48aff0; }
|
||
|
||
.bp3-dark .bp3-tab-indicator{
|
||
background-color:#48aff0; }
|
||
|
||
.bp3-flex-expander{
|
||
-webkit-box-flex:1;
|
||
-ms-flex:1 1;
|
||
flex:1 1; }
|
||
.bp3-tag{
|
||
display:-webkit-inline-box;
|
||
display:-ms-inline-flexbox;
|
||
display:inline-flex;
|
||
-webkit-box-orient:horizontal;
|
||
-webkit-box-direction:normal;
|
||
-ms-flex-direction:row;
|
||
flex-direction:row;
|
||
-webkit-box-align:center;
|
||
-ms-flex-align:center;
|
||
align-items:center;
|
||
background-color:#5c7080;
|
||
border:none;
|
||
border-radius:3px;
|
||
-webkit-box-shadow:none;
|
||
box-shadow:none;
|
||
color:#f5f8fa;
|
||
font-size:12px;
|
||
line-height:16px;
|
||
max-width:100%;
|
||
min-height:20px;
|
||
min-width:20px;
|
||
padding:2px 6px;
|
||
position:relative; }
|
||
.bp3-tag.bp3-interactive{
|
||
cursor:pointer; }
|
||
.bp3-tag.bp3-interactive:hover{
|
||
background-color:rgba(92, 112, 128, 0.85); }
|
||
.bp3-tag.bp3-interactive.bp3-active, .bp3-tag.bp3-interactive:active{
|
||
background-color:rgba(92, 112, 128, 0.7); }
|
||
.bp3-tag > *{
|
||
-webkit-box-flex:0;
|
||
-ms-flex-positive:0;
|
||
flex-grow:0;
|
||
-ms-flex-negative:0;
|
||
flex-shrink:0; }
|
||
.bp3-tag > .bp3-fill{
|
||
-webkit-box-flex:1;
|
||
-ms-flex-positive:1;
|
||
flex-grow:1;
|
||
-ms-flex-negative:1;
|
||
flex-shrink:1; }
|
||
.bp3-tag::before,
|
||
.bp3-tag > *{
|
||
margin-right:4px; }
|
||
.bp3-tag:empty::before,
|
||
.bp3-tag > :last-child{
|
||
margin-right:0; }
|
||
.bp3-tag:focus{
|
||
outline:rgba(19, 124, 189, 0.6) auto 2px;
|
||
outline-offset:0;
|
||
-moz-outline-radius:6px; }
|
||
.bp3-tag.bp3-round{
|
||
border-radius:30px;
|
||
padding-left:8px;
|
||
padding-right:8px; }
|
||
.bp3-dark .bp3-tag{
|
||
background-color:#bfccd6;
|
||
color:#182026; }
|
||
.bp3-dark .bp3-tag.bp3-interactive{
|
||
cursor:pointer; }
|
||
.bp3-dark .bp3-tag.bp3-interactive:hover{
|
||
background-color:rgba(191, 204, 214, 0.85); }
|
||
.bp3-dark .bp3-tag.bp3-interactive.bp3-active, .bp3-dark .bp3-tag.bp3-interactive:active{
|
||
background-color:rgba(191, 204, 214, 0.7); }
|
||
.bp3-dark .bp3-tag > .bp3-icon, .bp3-dark .bp3-tag .bp3-icon-standard, .bp3-dark .bp3-tag .bp3-icon-large{
|
||
fill:currentColor; }
|
||
.bp3-tag > .bp3-icon, .bp3-tag .bp3-icon-standard, .bp3-tag .bp3-icon-large{
|
||
fill:#ffffff; }
|
||
.bp3-tag.bp3-large,
|
||
.bp3-large .bp3-tag{
|
||
font-size:14px;
|
||
line-height:20px;
|
||
min-height:30px;
|
||
min-width:30px;
|
||
padding:5px 10px; }
|
||
.bp3-tag.bp3-large::before,
|
||
.bp3-tag.bp3-large > *,
|
||
.bp3-large .bp3-tag::before,
|
||
.bp3-large .bp3-tag > *{
|
||
margin-right:7px; }
|
||
.bp3-tag.bp3-large:empty::before,
|
||
.bp3-tag.bp3-large > :last-child,
|
||
.bp3-large .bp3-tag:empty::before,
|
||
.bp3-large .bp3-tag > :last-child{
|
||
margin-right:0; }
|
||
.bp3-tag.bp3-large.bp3-round,
|
||
.bp3-large .bp3-tag.bp3-round{
|
||
padding-left:12px;
|
||
padding-right:12px; }
|
||
.bp3-tag.bp3-intent-primary{
|
||
background:#137cbd;
|
||
color:#ffffff; }
|
||
.bp3-tag.bp3-intent-primary.bp3-interactive{
|
||
cursor:pointer; }
|
||
.bp3-tag.bp3-intent-primary.bp3-interactive:hover{
|
||
background-color:rgba(19, 124, 189, 0.85); }
|
||
.bp3-tag.bp3-intent-primary.bp3-interactive.bp3-active, .bp3-tag.bp3-intent-primary.bp3-interactive:active{
|
||
background-color:rgba(19, 124, 189, 0.7); }
|
||
.bp3-tag.bp3-intent-success{
|
||
background:#0f9960;
|
||
color:#ffffff; }
|
||
.bp3-tag.bp3-intent-success.bp3-interactive{
|
||
cursor:pointer; }
|
||
.bp3-tag.bp3-intent-success.bp3-interactive:hover{
|
||
background-color:rgba(15, 153, 96, 0.85); }
|
||
.bp3-tag.bp3-intent-success.bp3-interactive.bp3-active, .bp3-tag.bp3-intent-success.bp3-interactive:active{
|
||
background-color:rgba(15, 153, 96, 0.7); }
|
||
.bp3-tag.bp3-intent-warning{
|
||
background:#d9822b;
|
||
color:#ffffff; }
|
||
.bp3-tag.bp3-intent-warning.bp3-interactive{
|
||
cursor:pointer; }
|
||
.bp3-tag.bp3-intent-warning.bp3-interactive:hover{
|
||
background-color:rgba(217, 130, 43, 0.85); }
|
||
.bp3-tag.bp3-intent-warning.bp3-interactive.bp3-active, .bp3-tag.bp3-intent-warning.bp3-interactive:active{
|
||
background-color:rgba(217, 130, 43, 0.7); }
|
||
.bp3-tag.bp3-intent-danger{
|
||
background:#db3737;
|
||
color:#ffffff; }
|
||
.bp3-tag.bp3-intent-danger.bp3-interactive{
|
||
cursor:pointer; }
|
||
.bp3-tag.bp3-intent-danger.bp3-interactive:hover{
|
||
background-color:rgba(219, 55, 55, 0.85); }
|
||
.bp3-tag.bp3-intent-danger.bp3-interactive.bp3-active, .bp3-tag.bp3-intent-danger.bp3-interactive:active{
|
||
background-color:rgba(219, 55, 55, 0.7); }
|
||
.bp3-tag.bp3-fill{
|
||
display:-webkit-box;
|
||
display:-ms-flexbox;
|
||
display:flex;
|
||
width:100%; }
|
||
.bp3-tag.bp3-minimal > .bp3-icon, .bp3-tag.bp3-minimal .bp3-icon-standard, .bp3-tag.bp3-minimal .bp3-icon-large{
|
||
fill:#5c7080; }
|
||
.bp3-tag.bp3-minimal:not([class*="bp3-intent-"]){
|
||
background-color:rgba(138, 155, 168, 0.2);
|
||
color:#182026; }
|
||
.bp3-tag.bp3-minimal:not([class*="bp3-intent-"]).bp3-interactive{
|
||
cursor:pointer; }
|
||
.bp3-tag.bp3-minimal:not([class*="bp3-intent-"]).bp3-interactive:hover{
|
||
background-color:rgba(92, 112, 128, 0.3); }
|
||
.bp3-tag.bp3-minimal:not([class*="bp3-intent-"]).bp3-interactive.bp3-active, .bp3-tag.bp3-minimal:not([class*="bp3-intent-"]).bp3-interactive:active{
|
||
background-color:rgba(92, 112, 128, 0.4); }
|
||
.bp3-dark .bp3-tag.bp3-minimal:not([class*="bp3-intent-"]){
|
||
color:#f5f8fa; }
|
||
.bp3-dark .bp3-tag.bp3-minimal:not([class*="bp3-intent-"]).bp3-interactive{
|
||
cursor:pointer; }
|
||
.bp3-dark .bp3-tag.bp3-minimal:not([class*="bp3-intent-"]).bp3-interactive:hover{
|
||
background-color:rgba(191, 204, 214, 0.3); }
|
||
.bp3-dark .bp3-tag.bp3-minimal:not([class*="bp3-intent-"]).bp3-interactive.bp3-active, .bp3-dark .bp3-tag.bp3-minimal:not([class*="bp3-intent-"]).bp3-interactive:active{
|
||
background-color:rgba(191, 204, 214, 0.4); }
|
||
.bp3-dark .bp3-tag.bp3-minimal:not([class*="bp3-intent-"]) > .bp3-icon, .bp3-dark .bp3-tag.bp3-minimal:not([class*="bp3-intent-"]) .bp3-icon-standard, .bp3-dark .bp3-tag.bp3-minimal:not([class*="bp3-intent-"]) .bp3-icon-large{
|
||
fill:#a7b6c2; }
|
||
.bp3-tag.bp3-minimal.bp3-intent-primary{
|
||
background-color:rgba(19, 124, 189, 0.15);
|
||
color:#106ba3; }
|
||
.bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive{
|
||
cursor:pointer; }
|
||
.bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:hover{
|
||
background-color:rgba(19, 124, 189, 0.25); }
|
||
.bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive.bp3-active, .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:active{
|
||
background-color:rgba(19, 124, 189, 0.35); }
|
||
.bp3-tag.bp3-minimal.bp3-intent-primary > .bp3-icon, .bp3-tag.bp3-minimal.bp3-intent-primary .bp3-icon-standard, .bp3-tag.bp3-minimal.bp3-intent-primary .bp3-icon-large{
|
||
fill:#137cbd; }
|
||
.bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary{
|
||
background-color:rgba(19, 124, 189, 0.25);
|
||
color:#48aff0; }
|
||
.bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive{
|
||
cursor:pointer; }
|
||
.bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:hover{
|
||
background-color:rgba(19, 124, 189, 0.35); }
|
||
.bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive.bp3-active, .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-primary.bp3-interactive:active{
|
||
background-color:rgba(19, 124, 189, 0.45); }
|
||
.bp3-tag.bp3-minimal.bp3-intent-success{
|
||
background-color:rgba(15, 153, 96, 0.15);
|
||
color:#0d8050; }
|
||
.bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive{
|
||
cursor:pointer; }
|
||
.bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:hover{
|
||
background-color:rgba(15, 153, 96, 0.25); }
|
||
.bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive.bp3-active, .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:active{
|
||
background-color:rgba(15, 153, 96, 0.35); }
|
||
.bp3-tag.bp3-minimal.bp3-intent-success > .bp3-icon, .bp3-tag.bp3-minimal.bp3-intent-success .bp3-icon-standard, .bp3-tag.bp3-minimal.bp3-intent-success .bp3-icon-large{
|
||
fill:#0f9960; }
|
||
.bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success{
|
||
background-color:rgba(15, 153, 96, 0.25);
|
||
color:#3dcc91; }
|
||
.bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive{
|
||
cursor:pointer; }
|
||
.bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:hover{
|
||
background-color:rgba(15, 153, 96, 0.35); }
|
||
.bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive.bp3-active, .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-success.bp3-interactive:active{
|
||
background-color:rgba(15, 153, 96, 0.45); }
|
||
.bp3-tag.bp3-minimal.bp3-intent-warning{
|
||
background-color:rgba(217, 130, 43, 0.15);
|
||
color:#bf7326; }
|
||
.bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive{
|
||
cursor:pointer; }
|
||
.bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:hover{
|
||
background-color:rgba(217, 130, 43, 0.25); }
|
||
.bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive.bp3-active, .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:active{
|
||
background-color:rgba(217, 130, 43, 0.35); }
|
||
.bp3-tag.bp3-minimal.bp3-intent-warning > .bp3-icon, .bp3-tag.bp3-minimal.bp3-intent-warning .bp3-icon-standard, .bp3-tag.bp3-minimal.bp3-intent-warning .bp3-icon-large{
|
||
fill:#d9822b; }
|
||
.bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning{
|
||
background-color:rgba(217, 130, 43, 0.25);
|
||
color:#ffb366; }
|
||
.bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive{
|
||
cursor:pointer; }
|
||
.bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:hover{
|
||
background-color:rgba(217, 130, 43, 0.35); }
|
||
.bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive.bp3-active, .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-warning.bp3-interactive:active{
|
||
background-color:rgba(217, 130, 43, 0.45); }
|
||
.bp3-tag.bp3-minimal.bp3-intent-danger{
|
||
background-color:rgba(219, 55, 55, 0.15);
|
||
color:#c23030; }
|
||
.bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive{
|
||
cursor:pointer; }
|
||
.bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:hover{
|
||
background-color:rgba(219, 55, 55, 0.25); }
|
||
.bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive.bp3-active, .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:active{
|
||
background-color:rgba(219, 55, 55, 0.35); }
|
||
.bp3-tag.bp3-minimal.bp3-intent-danger > .bp3-icon, .bp3-tag.bp3-minimal.bp3-intent-danger .bp3-icon-standard, .bp3-tag.bp3-minimal.bp3-intent-danger .bp3-icon-large{
|
||
fill:#db3737; }
|
||
.bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger{
|
||
background-color:rgba(219, 55, 55, 0.25);
|
||
color:#ff7373; }
|
||
.bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive{
|
||
cursor:pointer; }
|
||
.bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:hover{
|
||
background-color:rgba(219, 55, 55, 0.35); }
|
||
.bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive.bp3-active, .bp3-dark .bp3-tag.bp3-minimal.bp3-intent-danger.bp3-interactive:active{
|
||
background-color:rgba(219, 55, 55, 0.45); }
|
||
|
||
.bp3-tag-remove{
|
||
background:none;
|
||
border:none;
|
||
color:inherit;
|
||
cursor:pointer;
|
||
display:-webkit-box;
|
||
display:-ms-flexbox;
|
||
display:flex;
|
||
margin-bottom:-2px;
|
||
margin-right:-6px !important;
|
||
margin-top:-2px;
|
||
opacity:0.5;
|
||
padding:2px;
|
||
padding-left:0; }
|
||
.bp3-tag-remove:hover{
|
||
background:none;
|
||
opacity:0.8;
|
||
text-decoration:none; }
|
||
.bp3-tag-remove:active{
|
||
opacity:1; }
|
||
.bp3-tag-remove:empty::before{
|
||
font-family:"Icons16", sans-serif;
|
||
font-size:16px;
|
||
font-style:normal;
|
||
font-weight:400;
|
||
line-height:1;
|
||
-moz-osx-font-smoothing:grayscale;
|
||
-webkit-font-smoothing:antialiased;
|
||
content:""; }
|
||
.bp3-large .bp3-tag-remove{
|
||
margin-right:-10px !important;
|
||
padding:0 5px 0 0; }
|
||
.bp3-large .bp3-tag-remove:empty::before{
|
||
font-family:"Icons20", sans-serif;
|
||
font-size:20px;
|
||
font-style:normal;
|
||
font-weight:400;
|
||
line-height:1; }
|
||
.bp3-tag-input{
|
||
display:-webkit-box;
|
||
display:-ms-flexbox;
|
||
display:flex;
|
||
-webkit-box-orient:horizontal;
|
||
-webkit-box-direction:normal;
|
||
-ms-flex-direction:row;
|
||
flex-direction:row;
|
||
-webkit-box-align:start;
|
||
-ms-flex-align:start;
|
||
align-items:flex-start;
|
||
cursor:text;
|
||
height:auto;
|
||
line-height:inherit;
|
||
min-height:30px;
|
||
padding-left:5px;
|
||
padding-right:0; }
|
||
.bp3-tag-input > *{
|
||
-webkit-box-flex:0;
|
||
-ms-flex-positive:0;
|
||
flex-grow:0;
|
||
-ms-flex-negative:0;
|
||
flex-shrink:0; }
|
||
.bp3-tag-input > .bp3-tag-input-values{
|
||
-webkit-box-flex:1;
|
||
-ms-flex-positive:1;
|
||
flex-grow:1;
|
||
-ms-flex-negative:1;
|
||
flex-shrink:1; }
|
||
.bp3-tag-input .bp3-tag-input-icon{
|
||
color:#5c7080;
|
||
margin-left:2px;
|
||
margin-right:7px;
|
||
margin-top:7px; }
|
||
.bp3-tag-input .bp3-tag-input-values{
|
||
display:-webkit-box;
|
||
display:-ms-flexbox;
|
||
display:flex;
|
||
-webkit-box-orient:horizontal;
|
||
-webkit-box-direction:normal;
|
||
-ms-flex-direction:row;
|
||
flex-direction:row;
|
||
-webkit-box-align:center;
|
||
-ms-flex-align:center;
|
||
align-items:center;
|
||
-ms-flex-item-align:stretch;
|
||
align-self:stretch;
|
||
-ms-flex-wrap:wrap;
|
||
flex-wrap:wrap;
|
||
margin-right:7px;
|
||
margin-top:5px;
|
||
min-width:0; }
|
||
.bp3-tag-input .bp3-tag-input-values > *{
|
||
-webkit-box-flex:0;
|
||
-ms-flex-positive:0;
|
||
flex-grow:0;
|
||
-ms-flex-negative:0;
|
||
flex-shrink:0; }
|
||
.bp3-tag-input .bp3-tag-input-values > .bp3-fill{
|
||
-webkit-box-flex:1;
|
||
-ms-flex-positive:1;
|
||
flex-grow:1;
|
||
-ms-flex-negative:1;
|
||
flex-shrink:1; }
|
||
.bp3-tag-input .bp3-tag-input-values::before,
|
||
.bp3-tag-input .bp3-tag-input-values > *{
|
||
margin-right:5px; }
|
||
.bp3-tag-input .bp3-tag-input-values:empty::before,
|
||
.bp3-tag-input .bp3-tag-input-values > :last-child{
|
||
margin-right:0; }
|
||
.bp3-tag-input .bp3-tag-input-values:first-child .bp3-input-ghost:first-child{
|
||
padding-left:5px; }
|
||
.bp3-tag-input .bp3-tag-input-values > *{
|
||
margin-bottom:5px; }
|
||
.bp3-tag-input .bp3-tag{
|
||
overflow-wrap:break-word; }
|
||
.bp3-tag-input .bp3-tag.bp3-active{
|
||
outline:rgba(19, 124, 189, 0.6) auto 2px;
|
||
outline-offset:0;
|
||
-moz-outline-radius:6px; }
|
||
.bp3-tag-input .bp3-input-ghost{
|
||
-webkit-box-flex:1;
|
||
-ms-flex:1 1 auto;
|
||
flex:1 1 auto;
|
||
line-height:20px;
|
||
width:80px; }
|
||
.bp3-tag-input .bp3-input-ghost:disabled, .bp3-tag-input .bp3-input-ghost.bp3-disabled{
|
||
cursor:not-allowed; }
|
||
.bp3-tag-input .bp3-button,
|
||
.bp3-tag-input .bp3-spinner{
|
||
margin:3px;
|
||
margin-left:0; }
|
||
.bp3-tag-input .bp3-button{
|
||
min-height:24px;
|
||
min-width:24px;
|
||
padding:0 7px; }
|
||
.bp3-tag-input.bp3-large{
|
||
height:auto;
|
||
min-height:40px; }
|
||
.bp3-tag-input.bp3-large::before,
|
||
.bp3-tag-input.bp3-large > *{
|
||
margin-right:10px; }
|
||
.bp3-tag-input.bp3-large:empty::before,
|
||
.bp3-tag-input.bp3-large > :last-child{
|
||
margin-right:0; }
|
||
.bp3-tag-input.bp3-large .bp3-tag-input-icon{
|
||
margin-left:5px;
|
||
margin-top:10px; }
|
||
.bp3-tag-input.bp3-large .bp3-input-ghost{
|
||
line-height:30px; }
|
||
.bp3-tag-input.bp3-large .bp3-button{
|
||
min-height:30px;
|
||
min-width:30px;
|
||
padding:5px 10px;
|
||
margin:5px;
|
||
margin-left:0; }
|
||
.bp3-tag-input.bp3-large .bp3-spinner{
|
||
margin:8px;
|
||
margin-left:0; }
|
||
.bp3-tag-input.bp3-active{
|
||
background-color:#ffffff;
|
||
-webkit-box-shadow:0 0 0 1px #137cbd, 0 0 0 3px rgba(19, 124, 189, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.2);
|
||
box-shadow:0 0 0 1px #137cbd, 0 0 0 3px rgba(19, 124, 189, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.2); }
|
||
.bp3-tag-input.bp3-active.bp3-intent-primary{
|
||
-webkit-box-shadow:0 0 0 1px #106ba3, 0 0 0 3px rgba(16, 107, 163, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.2);
|
||
box-shadow:0 0 0 1px #106ba3, 0 0 0 3px rgba(16, 107, 163, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.2); }
|
||
.bp3-tag-input.bp3-active.bp3-intent-success{
|
||
-webkit-box-shadow:0 0 0 1px #0d8050, 0 0 0 3px rgba(13, 128, 80, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.2);
|
||
box-shadow:0 0 0 1px #0d8050, 0 0 0 3px rgba(13, 128, 80, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.2); }
|
||
.bp3-tag-input.bp3-active.bp3-intent-warning{
|
||
-webkit-box-shadow:0 0 0 1px #bf7326, 0 0 0 3px rgba(191, 115, 38, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.2);
|
||
box-shadow:0 0 0 1px #bf7326, 0 0 0 3px rgba(191, 115, 38, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.2); }
|
||
.bp3-tag-input.bp3-active.bp3-intent-danger{
|
||
-webkit-box-shadow:0 0 0 1px #c23030, 0 0 0 3px rgba(194, 48, 48, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.2);
|
||
box-shadow:0 0 0 1px #c23030, 0 0 0 3px rgba(194, 48, 48, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.2); }
|
||
.bp3-dark .bp3-tag-input .bp3-tag-input-icon, .bp3-tag-input.bp3-dark .bp3-tag-input-icon{
|
||
color:#a7b6c2; }
|
||
.bp3-dark .bp3-tag-input .bp3-input-ghost, .bp3-tag-input.bp3-dark .bp3-input-ghost{
|
||
color:#f5f8fa; }
|
||
.bp3-dark .bp3-tag-input .bp3-input-ghost::-webkit-input-placeholder, .bp3-tag-input.bp3-dark .bp3-input-ghost::-webkit-input-placeholder{
|
||
color:rgba(167, 182, 194, 0.6); }
|
||
.bp3-dark .bp3-tag-input .bp3-input-ghost::-moz-placeholder, .bp3-tag-input.bp3-dark .bp3-input-ghost::-moz-placeholder{
|
||
color:rgba(167, 182, 194, 0.6); }
|
||
.bp3-dark .bp3-tag-input .bp3-input-ghost:-ms-input-placeholder, .bp3-tag-input.bp3-dark .bp3-input-ghost:-ms-input-placeholder{
|
||
color:rgba(167, 182, 194, 0.6); }
|
||
.bp3-dark .bp3-tag-input .bp3-input-ghost::-ms-input-placeholder, .bp3-tag-input.bp3-dark .bp3-input-ghost::-ms-input-placeholder{
|
||
color:rgba(167, 182, 194, 0.6); }
|
||
.bp3-dark .bp3-tag-input .bp3-input-ghost::placeholder, .bp3-tag-input.bp3-dark .bp3-input-ghost::placeholder{
|
||
color:rgba(167, 182, 194, 0.6); }
|
||
.bp3-dark .bp3-tag-input.bp3-active, .bp3-tag-input.bp3-dark.bp3-active{
|
||
background-color:rgba(16, 22, 26, 0.3);
|
||
-webkit-box-shadow:0 0 0 1px #137cbd, 0 0 0 1px #137cbd, 0 0 0 3px rgba(19, 124, 189, 0.3), inset 0 0 0 1px rgba(16, 22, 26, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.4);
|
||
box-shadow:0 0 0 1px #137cbd, 0 0 0 1px #137cbd, 0 0 0 3px rgba(19, 124, 189, 0.3), inset 0 0 0 1px rgba(16, 22, 26, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.4); }
|
||
.bp3-dark .bp3-tag-input.bp3-active.bp3-intent-primary, .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-primary{
|
||
-webkit-box-shadow:0 0 0 1px #106ba3, 0 0 0 3px rgba(16, 107, 163, 0.3), inset 0 0 0 1px rgba(16, 22, 26, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.4);
|
||
box-shadow:0 0 0 1px #106ba3, 0 0 0 3px rgba(16, 107, 163, 0.3), inset 0 0 0 1px rgba(16, 22, 26, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.4); }
|
||
.bp3-dark .bp3-tag-input.bp3-active.bp3-intent-success, .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-success{
|
||
-webkit-box-shadow:0 0 0 1px #0d8050, 0 0 0 3px rgba(13, 128, 80, 0.3), inset 0 0 0 1px rgba(16, 22, 26, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.4);
|
||
box-shadow:0 0 0 1px #0d8050, 0 0 0 3px rgba(13, 128, 80, 0.3), inset 0 0 0 1px rgba(16, 22, 26, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.4); }
|
||
.bp3-dark .bp3-tag-input.bp3-active.bp3-intent-warning, .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-warning{
|
||
-webkit-box-shadow:0 0 0 1px #bf7326, 0 0 0 3px rgba(191, 115, 38, 0.3), inset 0 0 0 1px rgba(16, 22, 26, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.4);
|
||
box-shadow:0 0 0 1px #bf7326, 0 0 0 3px rgba(191, 115, 38, 0.3), inset 0 0 0 1px rgba(16, 22, 26, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.4); }
|
||
.bp3-dark .bp3-tag-input.bp3-active.bp3-intent-danger, .bp3-tag-input.bp3-dark.bp3-active.bp3-intent-danger{
|
||
-webkit-box-shadow:0 0 0 1px #c23030, 0 0 0 3px rgba(194, 48, 48, 0.3), inset 0 0 0 1px rgba(16, 22, 26, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.4);
|
||
box-shadow:0 0 0 1px #c23030, 0 0 0 3px rgba(194, 48, 48, 0.3), inset 0 0 0 1px rgba(16, 22, 26, 0.3), inset 0 1px 1px rgba(16, 22, 26, 0.4); }
|
||
|
||
.bp3-input-ghost{
|
||
background:none;
|
||
border:none;
|
||
-webkit-box-shadow:none;
|
||
box-shadow:none;
|
||
padding:0; }
|
||
.bp3-input-ghost::-webkit-input-placeholder{
|
||
color:rgba(92, 112, 128, 0.6);
|
||
opacity:1; }
|
||
.bp3-input-ghost::-moz-placeholder{
|
||
color:rgba(92, 112, 128, 0.6);
|
||
opacity:1; }
|
||
.bp3-input-ghost:-ms-input-placeholder{
|
||
color:rgba(92, 112, 128, 0.6);
|
||
opacity:1; }
|
||
.bp3-input-ghost::-ms-input-placeholder{
|
||
color:rgba(92, 112, 128, 0.6);
|
||
opacity:1; }
|
||
.bp3-input-ghost::placeholder{
|
||
color:rgba(92, 112, 128, 0.6);
|
||
opacity:1; }
|
||
.bp3-input-ghost:focus{
|
||
outline:none !important; }
|
||
.bp3-toast{
|
||
-webkit-box-align:start;
|
||
-ms-flex-align:start;
|
||
align-items:flex-start;
|
||
background-color:#ffffff;
|
||
border-radius:3px;
|
||
-webkit-box-shadow:0 0 0 1px rgba(16, 22, 26, 0.1), 0 2px 4px rgba(16, 22, 26, 0.2), 0 8px 24px rgba(16, 22, 26, 0.2);
|
||
box-shadow:0 0 0 1px rgba(16, 22, 26, 0.1), 0 2px 4px rgba(16, 22, 26, 0.2), 0 8px 24px rgba(16, 22, 26, 0.2);
|
||
display:-webkit-box;
|
||
display:-ms-flexbox;
|
||
display:flex;
|
||
margin:20px 0 0;
|
||
max-width:500px;
|
||
min-width:300px;
|
||
pointer-events:all;
|
||
position:relative !important; }
|
||
.bp3-toast.bp3-toast-enter, .bp3-toast.bp3-toast-appear{
|
||
-webkit-transform:translateY(-40px);
|
||
transform:translateY(-40px); }
|
||
.bp3-toast.bp3-toast-enter-active, .bp3-toast.bp3-toast-appear-active{
|
||
-webkit-transform:translateY(0);
|
||
transform:translateY(0);
|
||
-webkit-transition-delay:0;
|
||
transition-delay:0;
|
||
-webkit-transition-duration:300ms;
|
||
transition-duration:300ms;
|
||
-webkit-transition-property:-webkit-transform;
|
||
transition-property:-webkit-transform;
|
||
transition-property:transform;
|
||
transition-property:transform, -webkit-transform;
|
||
-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);
|
||
transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11); }
|
||
.bp3-toast.bp3-toast-enter ~ .bp3-toast, .bp3-toast.bp3-toast-appear ~ .bp3-toast{
|
||
-webkit-transform:translateY(-40px);
|
||
transform:translateY(-40px); }
|
||
.bp3-toast.bp3-toast-enter-active ~ .bp3-toast, .bp3-toast.bp3-toast-appear-active ~ .bp3-toast{
|
||
-webkit-transform:translateY(0);
|
||
transform:translateY(0);
|
||
-webkit-transition-delay:0;
|
||
transition-delay:0;
|
||
-webkit-transition-duration:300ms;
|
||
transition-duration:300ms;
|
||
-webkit-transition-property:-webkit-transform;
|
||
transition-property:-webkit-transform;
|
||
transition-property:transform;
|
||
transition-property:transform, -webkit-transform;
|
||
-webkit-transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11);
|
||
transition-timing-function:cubic-bezier(0.54, 1.12, 0.38, 1.11); }
|
||
.bp3-toast.bp3-toast-exit{
|
||
opacity:1;
|
||
-webkit-filter:blur(0);
|
||
filter:blur(0); }
|
||
.bp3-toast.bp3-toast-exit-active{
|
||
opacity:0;
|
||
-webkit-filter:blur(10px);
|
||
filter:blur(10px);
|
||
-webkit-transition-delay:0;
|
||
transition-delay:0;
|
||
-webkit-transition-duration:300ms;
|
||
transition-duration:300ms;
|
||
-webkit-transition-property:opacity, -webkit-filter;
|
||
transition-property:opacity, -webkit-filter;
|
||
transition-property:opacity, filter;
|
||
transition-property:opacity, filter, -webkit-filter;
|
||
-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);
|
||
transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9); }
|
||
.bp3-toast.bp3-toast-exit ~ .bp3-toast{
|
||
-webkit-transform:translateY(0);
|
||
transform:translateY(0); }
|
||
.bp3-toast.bp3-toast-exit-active ~ .bp3-toast{
|
||
-webkit-transform:translateY(-40px);
|
||
transform:translateY(-40px);
|
||
-webkit-transition-delay:50ms;
|
||
transition-delay:50ms;
|
||
-webkit-transition-duration:100ms;
|
||
transition-duration:100ms;
|
||
-webkit-transition-property:-webkit-transform;
|
||
transition-property:-webkit-transform;
|
||
transition-property:transform;
|
||
transition-property:transform, -webkit-transform;
|
||
-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);
|
||
transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9); }
|
||
.bp3-toast .bp3-button-group{
|
||
-webkit-box-flex:0;
|
||
-ms-flex:0 0 auto;
|
||
flex:0 0 auto;
|
||
padding:5px;
|
||
padding-left:0; }
|
||
.bp3-toast > .bp3-icon{
|
||
color:#5c7080;
|
||
margin:12px;
|
||
margin-right:0; }
|
||
.bp3-toast.bp3-dark,
|
||
.bp3-dark .bp3-toast{
|
||
background-color:#394b59;
|
||
-webkit-box-shadow:0 0 0 1px rgba(16, 22, 26, 0.2), 0 2px 4px rgba(16, 22, 26, 0.4), 0 8px 24px rgba(16, 22, 26, 0.4);
|
||
box-shadow:0 0 0 1px rgba(16, 22, 26, 0.2), 0 2px 4px rgba(16, 22, 26, 0.4), 0 8px 24px rgba(16, 22, 26, 0.4); }
|
||
.bp3-toast.bp3-dark > .bp3-icon,
|
||
.bp3-dark .bp3-toast > .bp3-icon{
|
||
color:#a7b6c2; }
|
||
.bp3-toast[class*="bp3-intent-"] a{
|
||
color:rgba(255, 255, 255, 0.7); }
|
||
.bp3-toast[class*="bp3-intent-"] a:hover{
|
||
color:#ffffff; }
|
||
.bp3-toast[class*="bp3-intent-"] > .bp3-icon{
|
||
color:#ffffff; }
|
||
.bp3-toast[class*="bp3-intent-"] .bp3-button, .bp3-toast[class*="bp3-intent-"] .bp3-button::before,
|
||
.bp3-toast[class*="bp3-intent-"] .bp3-button .bp3-icon, .bp3-toast[class*="bp3-intent-"] .bp3-button:active{
|
||
color:rgba(255, 255, 255, 0.7) !important; }
|
||
.bp3-toast[class*="bp3-intent-"] .bp3-button:focus{
|
||
outline-color:rgba(255, 255, 255, 0.5); }
|
||
.bp3-toast[class*="bp3-intent-"] .bp3-button:hover{
|
||
background-color:rgba(255, 255, 255, 0.15) !important;
|
||
color:#ffffff !important; }
|
||
.bp3-toast[class*="bp3-intent-"] .bp3-button:active{
|
||
background-color:rgba(255, 255, 255, 0.3) !important;
|
||
color:#ffffff !important; }
|
||
.bp3-toast[class*="bp3-intent-"] .bp3-button::after{
|
||
background:rgba(255, 255, 255, 0.3) !important; }
|
||
.bp3-toast.bp3-intent-primary{
|
||
background-color:#137cbd;
|
||
color:#ffffff; }
|
||
.bp3-toast.bp3-intent-success{
|
||
background-color:#0f9960;
|
||
color:#ffffff; }
|
||
.bp3-toast.bp3-intent-warning{
|
||
background-color:#d9822b;
|
||
color:#ffffff; }
|
||
.bp3-toast.bp3-intent-danger{
|
||
background-color:#db3737;
|
||
color:#ffffff; }
|
||
|
||
.bp3-toast-message{
|
||
-webkit-box-flex:1;
|
||
-ms-flex:1 1 auto;
|
||
flex:1 1 auto;
|
||
padding:11px;
|
||
word-break:break-word; }
|
||
|
||
.bp3-toast-container{
|
||
-webkit-box-align:center;
|
||
-ms-flex-align:center;
|
||
align-items:center;
|
||
display:-webkit-box !important;
|
||
display:-ms-flexbox !important;
|
||
display:flex !important;
|
||
-webkit-box-orient:vertical;
|
||
-webkit-box-direction:normal;
|
||
-ms-flex-direction:column;
|
||
flex-direction:column;
|
||
left:0;
|
||
overflow:hidden;
|
||
padding:0 20px 20px;
|
||
pointer-events:none;
|
||
right:0;
|
||
z-index:40; }
|
||
.bp3-toast-container.bp3-toast-container-in-portal{
|
||
position:fixed; }
|
||
.bp3-toast-container.bp3-toast-container-inline{
|
||
position:absolute; }
|
||
.bp3-toast-container.bp3-toast-container-top{
|
||
top:0; }
|
||
.bp3-toast-container.bp3-toast-container-bottom{
|
||
bottom:0;
|
||
-webkit-box-orient:vertical;
|
||
-webkit-box-direction:reverse;
|
||
-ms-flex-direction:column-reverse;
|
||
flex-direction:column-reverse;
|
||
top:auto; }
|
||
.bp3-toast-container.bp3-toast-container-left{
|
||
-webkit-box-align:start;
|
||
-ms-flex-align:start;
|
||
align-items:flex-start; }
|
||
.bp3-toast-container.bp3-toast-container-right{
|
||
-webkit-box-align:end;
|
||
-ms-flex-align:end;
|
||
align-items:flex-end; }
|
||
|
||
.bp3-toast-container-bottom .bp3-toast.bp3-toast-enter:not(.bp3-toast-enter-active),
|
||
.bp3-toast-container-bottom .bp3-toast.bp3-toast-enter:not(.bp3-toast-enter-active) ~ .bp3-toast, .bp3-toast-container-bottom .bp3-toast.bp3-toast-appear:not(.bp3-toast-appear-active),
|
||
.bp3-toast-container-bottom .bp3-toast.bp3-toast-appear:not(.bp3-toast-appear-active) ~ .bp3-toast,
|
||
.bp3-toast-container-bottom .bp3-toast.bp3-toast-exit-active ~ .bp3-toast,
|
||
.bp3-toast-container-bottom .bp3-toast.bp3-toast-leave-active ~ .bp3-toast{
|
||
-webkit-transform:translateY(60px);
|
||
transform:translateY(60px); }
|
||
.bp3-tooltip{
|
||
-webkit-box-shadow:0 0 0 1px rgba(16, 22, 26, 0.1), 0 2px 4px rgba(16, 22, 26, 0.2), 0 8px 24px rgba(16, 22, 26, 0.2);
|
||
box-shadow:0 0 0 1px rgba(16, 22, 26, 0.1), 0 2px 4px rgba(16, 22, 26, 0.2), 0 8px 24px rgba(16, 22, 26, 0.2);
|
||
-webkit-transform:scale(1);
|
||
transform:scale(1); }
|
||
.bp3-tooltip .bp3-popover-arrow{
|
||
height:22px;
|
||
position:absolute;
|
||
width:22px; }
|
||
.bp3-tooltip .bp3-popover-arrow::before{
|
||
height:14px;
|
||
margin:4px;
|
||
width:14px; }
|
||
.bp3-tether-element-attached-bottom.bp3-tether-target-attached-top > .bp3-tooltip{
|
||
margin-bottom:11px;
|
||
margin-top:-11px; }
|
||
.bp3-tether-element-attached-bottom.bp3-tether-target-attached-top > .bp3-tooltip > .bp3-popover-arrow{
|
||
bottom:-8px; }
|
||
.bp3-tether-element-attached-bottom.bp3-tether-target-attached-top > .bp3-tooltip > .bp3-popover-arrow svg{
|
||
-webkit-transform:rotate(-90deg);
|
||
transform:rotate(-90deg); }
|
||
.bp3-tether-element-attached-left.bp3-tether-target-attached-right > .bp3-tooltip{
|
||
margin-left:11px; }
|
||
.bp3-tether-element-attached-left.bp3-tether-target-attached-right > .bp3-tooltip > .bp3-popover-arrow{
|
||
left:-8px; }
|
||
.bp3-tether-element-attached-left.bp3-tether-target-attached-right > .bp3-tooltip > .bp3-popover-arrow svg{
|
||
-webkit-transform:rotate(0);
|
||
transform:rotate(0); }
|
||
.bp3-tether-element-attached-top.bp3-tether-target-attached-bottom > .bp3-tooltip{
|
||
margin-top:11px; }
|
||
.bp3-tether-element-attached-top.bp3-tether-target-attached-bottom > .bp3-tooltip > .bp3-popover-arrow{
|
||
top:-8px; }
|
||
.bp3-tether-element-attached-top.bp3-tether-target-attached-bottom > .bp3-tooltip > .bp3-popover-arrow svg{
|
||
-webkit-transform:rotate(90deg);
|
||
transform:rotate(90deg); }
|
||
.bp3-tether-element-attached-right.bp3-tether-target-attached-left > .bp3-tooltip{
|
||
margin-left:-11px;
|
||
margin-right:11px; }
|
||
.bp3-tether-element-attached-right.bp3-tether-target-attached-left > .bp3-tooltip > .bp3-popover-arrow{
|
||
right:-8px; }
|
||
.bp3-tether-element-attached-right.bp3-tether-target-attached-left > .bp3-tooltip > .bp3-popover-arrow svg{
|
||
-webkit-transform:rotate(180deg);
|
||
transform:rotate(180deg); }
|
||
.bp3-tether-element-attached-middle > .bp3-tooltip > .bp3-popover-arrow{
|
||
top:50%;
|
||
-webkit-transform:translateY(-50%);
|
||
transform:translateY(-50%); }
|
||
.bp3-tether-element-attached-center > .bp3-tooltip > .bp3-popover-arrow{
|
||
right:50%;
|
||
-webkit-transform:translateX(50%);
|
||
transform:translateX(50%); }
|
||
.bp3-tether-element-attached-top.bp3-tether-target-attached-top > .bp3-tooltip > .bp3-popover-arrow{
|
||
top:-0.22183px; }
|
||
.bp3-tether-element-attached-right.bp3-tether-target-attached-right > .bp3-tooltip > .bp3-popover-arrow{
|
||
right:-0.22183px; }
|
||
.bp3-tether-element-attached-left.bp3-tether-target-attached-left > .bp3-tooltip > .bp3-popover-arrow{
|
||
left:-0.22183px; }
|
||
.bp3-tether-element-attached-bottom.bp3-tether-target-attached-bottom > .bp3-tooltip > .bp3-popover-arrow{
|
||
bottom:-0.22183px; }
|
||
.bp3-tether-element-attached-top.bp3-tether-element-attached-left > .bp3-tooltip{
|
||
-webkit-transform-origin:top left;
|
||
transform-origin:top left; }
|
||
.bp3-tether-element-attached-top.bp3-tether-element-attached-center > .bp3-tooltip{
|
||
-webkit-transform-origin:top center;
|
||
transform-origin:top center; }
|
||
.bp3-tether-element-attached-top.bp3-tether-element-attached-right > .bp3-tooltip{
|
||
-webkit-transform-origin:top right;
|
||
transform-origin:top right; }
|
||
.bp3-tether-element-attached-middle.bp3-tether-element-attached-left > .bp3-tooltip{
|
||
-webkit-transform-origin:center left;
|
||
transform-origin:center left; }
|
||
.bp3-tether-element-attached-middle.bp3-tether-element-attached-center > .bp3-tooltip{
|
||
-webkit-transform-origin:center center;
|
||
transform-origin:center center; }
|
||
.bp3-tether-element-attached-middle.bp3-tether-element-attached-right > .bp3-tooltip{
|
||
-webkit-transform-origin:center right;
|
||
transform-origin:center right; }
|
||
.bp3-tether-element-attached-bottom.bp3-tether-element-attached-left > .bp3-tooltip{
|
||
-webkit-transform-origin:bottom left;
|
||
transform-origin:bottom left; }
|
||
.bp3-tether-element-attached-bottom.bp3-tether-element-attached-center > .bp3-tooltip{
|
||
-webkit-transform-origin:bottom center;
|
||
transform-origin:bottom center; }
|
||
.bp3-tether-element-attached-bottom.bp3-tether-element-attached-right > .bp3-tooltip{
|
||
-webkit-transform-origin:bottom right;
|
||
transform-origin:bottom right; }
|
||
.bp3-tooltip .bp3-popover-content{
|
||
background:#394b59;
|
||
color:#f5f8fa; }
|
||
.bp3-tooltip .bp3-popover-arrow::before{
|
||
-webkit-box-shadow:1px 1px 6px rgba(16, 22, 26, 0.2);
|
||
box-shadow:1px 1px 6px rgba(16, 22, 26, 0.2); }
|
||
.bp3-tooltip .bp3-popover-arrow-border{
|
||
fill:#10161a;
|
||
fill-opacity:0.1; }
|
||
.bp3-tooltip .bp3-popover-arrow-fill{
|
||
fill:#394b59; }
|
||
.bp3-popover-enter > .bp3-tooltip, .bp3-popover-appear > .bp3-tooltip{
|
||
-webkit-transform:scale(0.8);
|
||
transform:scale(0.8); }
|
||
.bp3-popover-enter-active > .bp3-tooltip, .bp3-popover-appear-active > .bp3-tooltip{
|
||
-webkit-transform:scale(1);
|
||
transform:scale(1);
|
||
-webkit-transition-delay:0;
|
||
transition-delay:0;
|
||
-webkit-transition-duration:100ms;
|
||
transition-duration:100ms;
|
||
-webkit-transition-property:-webkit-transform;
|
||
transition-property:-webkit-transform;
|
||
transition-property:transform;
|
||
transition-property:transform, -webkit-transform;
|
||
-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);
|
||
transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9); }
|
||
.bp3-popover-exit > .bp3-tooltip{
|
||
-webkit-transform:scale(1);
|
||
transform:scale(1); }
|
||
.bp3-popover-exit-active > .bp3-tooltip{
|
||
-webkit-transform:scale(0.8);
|
||
transform:scale(0.8);
|
||
-webkit-transition-delay:0;
|
||
transition-delay:0;
|
||
-webkit-transition-duration:100ms;
|
||
transition-duration:100ms;
|
||
-webkit-transition-property:-webkit-transform;
|
||
transition-property:-webkit-transform;
|
||
transition-property:transform;
|
||
transition-property:transform, -webkit-transform;
|
||
-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);
|
||
transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9); }
|
||
.bp3-tooltip .bp3-popover-content{
|
||
padding:10px 12px; }
|
||
.bp3-tooltip.bp3-dark,
|
||
.bp3-dark .bp3-tooltip{
|
||
-webkit-box-shadow:0 0 0 1px rgba(16, 22, 26, 0.2), 0 2px 4px rgba(16, 22, 26, 0.4), 0 8px 24px rgba(16, 22, 26, 0.4);
|
||
box-shadow:0 0 0 1px rgba(16, 22, 26, 0.2), 0 2px 4px rgba(16, 22, 26, 0.4), 0 8px 24px rgba(16, 22, 26, 0.4); }
|
||
.bp3-tooltip.bp3-dark .bp3-popover-content,
|
||
.bp3-dark .bp3-tooltip .bp3-popover-content{
|
||
background:#e1e8ed;
|
||
color:#394b59; }
|
||
.bp3-tooltip.bp3-dark .bp3-popover-arrow::before,
|
||
.bp3-dark .bp3-tooltip .bp3-popover-arrow::before{
|
||
-webkit-box-shadow:1px 1px 6px rgba(16, 22, 26, 0.4);
|
||
box-shadow:1px 1px 6px rgba(16, 22, 26, 0.4); }
|
||
.bp3-tooltip.bp3-dark .bp3-popover-arrow-border,
|
||
.bp3-dark .bp3-tooltip .bp3-popover-arrow-border{
|
||
fill:#10161a;
|
||
fill-opacity:0.2; }
|
||
.bp3-tooltip.bp3-dark .bp3-popover-arrow-fill,
|
||
.bp3-dark .bp3-tooltip .bp3-popover-arrow-fill{
|
||
fill:#e1e8ed; }
|
||
.bp3-tooltip.bp3-intent-primary .bp3-popover-content{
|
||
background:#137cbd;
|
||
color:#ffffff; }
|
||
.bp3-tooltip.bp3-intent-primary .bp3-popover-arrow-fill{
|
||
fill:#137cbd; }
|
||
.bp3-tooltip.bp3-intent-success .bp3-popover-content{
|
||
background:#0f9960;
|
||
color:#ffffff; }
|
||
.bp3-tooltip.bp3-intent-success .bp3-popover-arrow-fill{
|
||
fill:#0f9960; }
|
||
.bp3-tooltip.bp3-intent-warning .bp3-popover-content{
|
||
background:#d9822b;
|
||
color:#ffffff; }
|
||
.bp3-tooltip.bp3-intent-warning .bp3-popover-arrow-fill{
|
||
fill:#d9822b; }
|
||
.bp3-tooltip.bp3-intent-danger .bp3-popover-content{
|
||
background:#db3737;
|
||
color:#ffffff; }
|
||
.bp3-tooltip.bp3-intent-danger .bp3-popover-arrow-fill{
|
||
fill:#db3737; }
|
||
|
||
.bp3-tooltip-indicator{
|
||
border-bottom:dotted 1px;
|
||
cursor:help; }
|
||
.bp3-tree .bp3-icon, .bp3-tree .bp3-icon-standard, .bp3-tree .bp3-icon-large{
|
||
color:#5c7080; }
|
||
.bp3-tree .bp3-icon.bp3-intent-primary, .bp3-tree .bp3-icon-standard.bp3-intent-primary, .bp3-tree .bp3-icon-large.bp3-intent-primary{
|
||
color:#137cbd; }
|
||
.bp3-tree .bp3-icon.bp3-intent-success, .bp3-tree .bp3-icon-standard.bp3-intent-success, .bp3-tree .bp3-icon-large.bp3-intent-success{
|
||
color:#0f9960; }
|
||
.bp3-tree .bp3-icon.bp3-intent-warning, .bp3-tree .bp3-icon-standard.bp3-intent-warning, .bp3-tree .bp3-icon-large.bp3-intent-warning{
|
||
color:#d9822b; }
|
||
.bp3-tree .bp3-icon.bp3-intent-danger, .bp3-tree .bp3-icon-standard.bp3-intent-danger, .bp3-tree .bp3-icon-large.bp3-intent-danger{
|
||
color:#db3737; }
|
||
|
||
.bp3-tree-node-list{
|
||
list-style:none;
|
||
margin:0;
|
||
padding-left:0; }
|
||
|
||
.bp3-tree-root{
|
||
background-color:transparent;
|
||
cursor:default;
|
||
padding-left:0;
|
||
position:relative; }
|
||
|
||
.bp3-tree-node-content-0{
|
||
padding-left:0px; }
|
||
|
||
.bp3-tree-node-content-1{
|
||
padding-left:23px; }
|
||
|
||
.bp3-tree-node-content-2{
|
||
padding-left:46px; }
|
||
|
||
.bp3-tree-node-content-3{
|
||
padding-left:69px; }
|
||
|
||
.bp3-tree-node-content-4{
|
||
padding-left:92px; }
|
||
|
||
.bp3-tree-node-content-5{
|
||
padding-left:115px; }
|
||
|
||
.bp3-tree-node-content-6{
|
||
padding-left:138px; }
|
||
|
||
.bp3-tree-node-content-7{
|
||
padding-left:161px; }
|
||
|
||
.bp3-tree-node-content-8{
|
||
padding-left:184px; }
|
||
|
||
.bp3-tree-node-content-9{
|
||
padding-left:207px; }
|
||
|
||
.bp3-tree-node-content-10{
|
||
padding-left:230px; }
|
||
|
||
.bp3-tree-node-content-11{
|
||
padding-left:253px; }
|
||
|
||
.bp3-tree-node-content-12{
|
||
padding-left:276px; }
|
||
|
||
.bp3-tree-node-content-13{
|
||
padding-left:299px; }
|
||
|
||
.bp3-tree-node-content-14{
|
||
padding-left:322px; }
|
||
|
||
.bp3-tree-node-content-15{
|
||
padding-left:345px; }
|
||
|
||
.bp3-tree-node-content-16{
|
||
padding-left:368px; }
|
||
|
||
.bp3-tree-node-content-17{
|
||
padding-left:391px; }
|
||
|
||
.bp3-tree-node-content-18{
|
||
padding-left:414px; }
|
||
|
||
.bp3-tree-node-content-19{
|
||
padding-left:437px; }
|
||
|
||
.bp3-tree-node-content-20{
|
||
padding-left:460px; }
|
||
|
||
.bp3-tree-node-content{
|
||
-webkit-box-align:center;
|
||
-ms-flex-align:center;
|
||
align-items:center;
|
||
display:-webkit-box;
|
||
display:-ms-flexbox;
|
||
display:flex;
|
||
height:30px;
|
||
padding-right:5px;
|
||
width:100%; }
|
||
.bp3-tree-node-content:hover{
|
||
background-color:rgba(191, 204, 214, 0.4); }
|
||
|
||
.bp3-tree-node-caret,
|
||
.bp3-tree-node-caret-none{
|
||
min-width:30px; }
|
||
|
||
.bp3-tree-node-caret{
|
||
color:#5c7080;
|
||
cursor:pointer;
|
||
padding:7px;
|
||
-webkit-transform:rotate(0deg);
|
||
transform:rotate(0deg);
|
||
-webkit-transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);
|
||
transition:-webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);
|
||
transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9);
|
||
transition:transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9), -webkit-transform 200ms cubic-bezier(0.4, 1, 0.75, 0.9); }
|
||
.bp3-tree-node-caret:hover{
|
||
color:#182026; }
|
||
.bp3-dark .bp3-tree-node-caret{
|
||
color:#a7b6c2; }
|
||
.bp3-dark .bp3-tree-node-caret:hover{
|
||
color:#f5f8fa; }
|
||
.bp3-tree-node-caret.bp3-tree-node-caret-open{
|
||
-webkit-transform:rotate(90deg);
|
||
transform:rotate(90deg); }
|
||
.bp3-tree-node-caret.bp3-icon-standard::before{
|
||
content:""; }
|
||
|
||
.bp3-tree-node-icon{
|
||
margin-right:7px;
|
||
position:relative; }
|
||
|
||
.bp3-tree-node-label{
|
||
overflow:hidden;
|
||
text-overflow:ellipsis;
|
||
white-space:nowrap;
|
||
word-wrap:normal;
|
||
-webkit-box-flex:1;
|
||
-ms-flex:1 1 auto;
|
||
flex:1 1 auto;
|
||
position:relative;
|
||
-webkit-user-select:none;
|
||
-moz-user-select:none;
|
||
-ms-user-select:none;
|
||
user-select:none; }
|
||
.bp3-tree-node-label span{
|
||
display:inline; }
|
||
|
||
.bp3-tree-node-secondary-label{
|
||
padding:0 5px;
|
||
-webkit-user-select:none;
|
||
-moz-user-select:none;
|
||
-ms-user-select:none;
|
||
user-select:none; }
|
||
.bp3-tree-node-secondary-label .bp3-popover-wrapper,
|
||
.bp3-tree-node-secondary-label .bp3-popover-target{
|
||
-webkit-box-align:center;
|
||
-ms-flex-align:center;
|
||
align-items:center;
|
||
display:-webkit-box;
|
||
display:-ms-flexbox;
|
||
display:flex; }
|
||
|
||
.bp3-tree-node.bp3-disabled .bp3-tree-node-content{
|
||
background-color:inherit;
|
||
color:rgba(92, 112, 128, 0.6);
|
||
cursor:not-allowed; }
|
||
|
||
.bp3-tree-node.bp3-disabled .bp3-tree-node-caret,
|
||
.bp3-tree-node.bp3-disabled .bp3-tree-node-icon{
|
||
color:rgba(92, 112, 128, 0.6);
|
||
cursor:not-allowed; }
|
||
|
||
.bp3-tree-node.bp3-tree-node-selected > .bp3-tree-node-content{
|
||
background-color:#137cbd; }
|
||
.bp3-tree-node.bp3-tree-node-selected > .bp3-tree-node-content,
|
||
.bp3-tree-node.bp3-tree-node-selected > .bp3-tree-node-content .bp3-icon, .bp3-tree-node.bp3-tree-node-selected > .bp3-tree-node-content .bp3-icon-standard, .bp3-tree-node.bp3-tree-node-selected > .bp3-tree-node-content .bp3-icon-large{
|
||
color:#ffffff; }
|
||
.bp3-tree-node.bp3-tree-node-selected > .bp3-tree-node-content .bp3-tree-node-caret::before{
|
||
color:rgba(255, 255, 255, 0.7); }
|
||
.bp3-tree-node.bp3-tree-node-selected > .bp3-tree-node-content .bp3-tree-node-caret:hover::before{
|
||
color:#ffffff; }
|
||
|
||
.bp3-dark .bp3-tree-node-content:hover{
|
||
background-color:rgba(92, 112, 128, 0.3); }
|
||
|
||
.bp3-dark .bp3-tree .bp3-icon, .bp3-dark .bp3-tree .bp3-icon-standard, .bp3-dark .bp3-tree .bp3-icon-large{
|
||
color:#a7b6c2; }
|
||
.bp3-dark .bp3-tree .bp3-icon.bp3-intent-primary, .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-primary, .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-primary{
|
||
color:#137cbd; }
|
||
.bp3-dark .bp3-tree .bp3-icon.bp3-intent-success, .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-success, .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-success{
|
||
color:#0f9960; }
|
||
.bp3-dark .bp3-tree .bp3-icon.bp3-intent-warning, .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-warning, .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-warning{
|
||
color:#d9822b; }
|
||
.bp3-dark .bp3-tree .bp3-icon.bp3-intent-danger, .bp3-dark .bp3-tree .bp3-icon-standard.bp3-intent-danger, .bp3-dark .bp3-tree .bp3-icon-large.bp3-intent-danger{
|
||
color:#db3737; }
|
||
|
||
.bp3-dark .bp3-tree-node.bp3-tree-node-selected > .bp3-tree-node-content{
|
||
background-color:#137cbd; }
|
||
.bp3-omnibar{
|
||
-webkit-filter:blur(0);
|
||
filter:blur(0);
|
||
opacity:1;
|
||
background-color:#ffffff;
|
||
border-radius:3px;
|
||
-webkit-box-shadow:0 0 0 1px rgba(16, 22, 26, 0.1), 0 4px 8px rgba(16, 22, 26, 0.2), 0 18px 46px 6px rgba(16, 22, 26, 0.2);
|
||
box-shadow:0 0 0 1px rgba(16, 22, 26, 0.1), 0 4px 8px rgba(16, 22, 26, 0.2), 0 18px 46px 6px rgba(16, 22, 26, 0.2);
|
||
left:calc(50% - 250px);
|
||
top:20vh;
|
||
width:500px;
|
||
z-index:21; }
|
||
.bp3-omnibar.bp3-overlay-enter, .bp3-omnibar.bp3-overlay-appear{
|
||
-webkit-filter:blur(20px);
|
||
filter:blur(20px);
|
||
opacity:0.2; }
|
||
.bp3-omnibar.bp3-overlay-enter-active, .bp3-omnibar.bp3-overlay-appear-active{
|
||
-webkit-filter:blur(0);
|
||
filter:blur(0);
|
||
opacity:1;
|
||
-webkit-transition-delay:0;
|
||
transition-delay:0;
|
||
-webkit-transition-duration:200ms;
|
||
transition-duration:200ms;
|
||
-webkit-transition-property:opacity, -webkit-filter;
|
||
transition-property:opacity, -webkit-filter;
|
||
transition-property:filter, opacity;
|
||
transition-property:filter, opacity, -webkit-filter;
|
||
-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);
|
||
transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9); }
|
||
.bp3-omnibar.bp3-overlay-exit{
|
||
-webkit-filter:blur(0);
|
||
filter:blur(0);
|
||
opacity:1; }
|
||
.bp3-omnibar.bp3-overlay-exit-active{
|
||
-webkit-filter:blur(20px);
|
||
filter:blur(20px);
|
||
opacity:0.2;
|
||
-webkit-transition-delay:0;
|
||
transition-delay:0;
|
||
-webkit-transition-duration:200ms;
|
||
transition-duration:200ms;
|
||
-webkit-transition-property:opacity, -webkit-filter;
|
||
transition-property:opacity, -webkit-filter;
|
||
transition-property:filter, opacity;
|
||
transition-property:filter, opacity, -webkit-filter;
|
||
-webkit-transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9);
|
||
transition-timing-function:cubic-bezier(0.4, 1, 0.75, 0.9); }
|
||
.bp3-omnibar .bp3-input{
|
||
background-color:transparent;
|
||
border-radius:0; }
|
||
.bp3-omnibar .bp3-input, .bp3-omnibar .bp3-input:focus{
|
||
-webkit-box-shadow:none;
|
||
box-shadow:none; }
|
||
.bp3-omnibar .bp3-menu{
|
||
background-color:transparent;
|
||
border-radius:0;
|
||
-webkit-box-shadow:inset 0 1px 0 rgba(16, 22, 26, 0.15);
|
||
box-shadow:inset 0 1px 0 rgba(16, 22, 26, 0.15);
|
||
max-height:calc(60vh - 40px);
|
||
overflow:auto; }
|
||
.bp3-omnibar .bp3-menu:empty{
|
||
display:none; }
|
||
.bp3-dark .bp3-omnibar, .bp3-omnibar.bp3-dark{
|
||
background-color:#30404d;
|
||
-webkit-box-shadow:0 0 0 1px rgba(16, 22, 26, 0.2), 0 4px 8px rgba(16, 22, 26, 0.4), 0 18px 46px 6px rgba(16, 22, 26, 0.4);
|
||
box-shadow:0 0 0 1px rgba(16, 22, 26, 0.2), 0 4px 8px rgba(16, 22, 26, 0.4), 0 18px 46px 6px rgba(16, 22, 26, 0.4); }
|
||
|
||
.bp3-omnibar-overlay .bp3-overlay-backdrop{
|
||
background-color:rgba(16, 22, 26, 0.2); }
|
||
|
||
.bp3-select-popover .bp3-popover-content{
|
||
padding:5px; }
|
||
|
||
.bp3-select-popover .bp3-input-group{
|
||
margin-bottom:0; }
|
||
|
||
.bp3-select-popover .bp3-menu{
|
||
max-height:300px;
|
||
max-width:400px;
|
||
overflow:auto;
|
||
padding:0; }
|
||
.bp3-select-popover .bp3-menu:not(:first-child){
|
||
padding-top:5px; }
|
||
|
||
.bp3-multi-select{
|
||
min-width:150px; }
|
||
|
||
.bp3-multi-select-popover .bp3-menu{
|
||
max-height:300px;
|
||
max-width:400px;
|
||
overflow:auto; }
|
||
|
||
.bp3-select-popover .bp3-popover-content{
|
||
padding:5px; }
|
||
|
||
.bp3-select-popover .bp3-input-group{
|
||
margin-bottom:0; }
|
||
|
||
.bp3-select-popover .bp3-menu{
|
||
max-height:300px;
|
||
max-width:400px;
|
||
overflow:auto;
|
||
padding:0; }
|
||
.bp3-select-popover .bp3-menu:not(:first-child){
|
||
padding-top:5px; }
|
||
/*-----------------------------------------------------------------------------
|
||
| 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: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE5IDEzaC02djZoLTJ2LTZINXYtMmg2VjVoMnY2aDZ2MnoiLz4KICA8L2c+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: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjIiIGhlaWdodD0iMjIiIHZpZXdCb3g9IjAgMCAyOCAyOCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CgkJPHBhdGggZD0iTTExLjQgMTguNkw2LjggMTRMMTEuNCA5LjRMMTAgOEw0IDE0TDEwIDIwTDExLjQgMTguNlpNMTYuNiAxOC42TDIxLjIgMTRMMTYuNiA5LjRMMTggOEwyNCAxNEwxOCAyMEwxNi42IDE4LjZWMTguNloiLz4KCTwvZz4KPC9zdmc+Cg==);
|
||
--jp-icon-console: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIwMCAyMDAiPgogIDxnIGNsYXNzPSJqcC1pY29uLWJyYW5kMSBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiMwMjg4RDEiPgogICAgPHBhdGggZD0iTTIwIDE5LjhoMTYwdjE1OS45SDIweiIvPgogIDwvZz4KICA8ZyBjbGFzcz0ianAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGZpbGw9IiNmZmYiPgogICAgPHBhdGggZD0iTTEwNSAxMjcuM2g0MHYxMi44aC00MHpNNTEuMSA3N0w3NCA5OS45bC0yMy4zIDIzLjMgMTAuNSAxMC41IDIzLjMtMjMuM0w5NSA5OS45IDg0LjUgODkuNCA2MS42IDY2LjV6Ii8+CiAgPC9nPgo8L3N2Zz4K);
|
||
--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-download: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTE5IDloLTRWM0g5djZINWw3IDcgNy03ek01IDE4djJoMTR2LTJINXoiLz4KICA8L2c+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-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-list: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEwIDE4aDR2LTJoLTR2MnpNMyA2djJoMThWNkgzem0zIDdoMTJ2LTJINnYyeiIvPgogIDwvZz4KPC9zdmc+Cg==);
|
||
--jp-icon-folder: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTAgNEg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMThjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY4YzAtMS4xLS45LTItMi0yaC04bC0yLTJ6Ii8+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-inspector: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMjAgNEg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMThjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY2YzAtMS4xLS45LTItMi0yem0tNSAxNEg0di00aDExdjR6bTAtNUg0VjloMTF2NHptNSA1aC00VjloNHY5eiIvPgo8L3N2Zz4K);
|
||
--jp-icon-json: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMSBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiNGOUE4MjUiPgogICAgPHBhdGggZD0iTTIwLjIgMTEuOGMtMS42IDAtMS43LjUtMS43IDEgMCAuNC4xLjkuMSAxLjMuMS41LjEuOS4xIDEuMyAwIDEuNy0xLjQgMi4zLTMuNSAyLjNoLS45di0xLjloLjVjMS4xIDAgMS40IDAgMS40LS44IDAtLjMgMC0uNi0uMS0xIDAtLjQtLjEtLjgtLjEtMS4yIDAtMS4zIDAtMS44IDEuMy0yLTEuMy0uMi0xLjMtLjctMS4zLTIgMC0uNC4xLS44LjEtMS4yLjEtLjQuMS0uNy4xLTEgMC0uOC0uNC0uNy0xLjQtLjhoLS41VjQuMWguOWMyLjIgMCAzLjUuNyAzLjUgMi4zIDAgLjQtLjEuOS0uMSAxLjMtLjEuNS0uMS45LS4xIDEuMyAwIC41LjIgMSAxLjcgMXYxLjh6TTEuOCAxMC4xYzEuNiAwIDEuNy0uNSAxLjctMSAwLS40LS4xLS45LS4xLTEuMy0uMS0uNS0uMS0uOS0uMS0xLjMgMC0xLjYgMS40LTIuMyAzLjUtMi4zaC45djEuOWgtLjVjLTEgMC0xLjQgMC0xLjQuOCAwIC4zIDAgLjYuMSAxIDAgLjIuMS42LjEgMSAwIDEuMyAwIDEuOC0xLjMgMkM2IDExLjIgNiAxMS43IDYgMTNjMCAuNC0uMS44LS4xIDEuMi0uMS4zLS4xLjctLjEgMSAwIC44LjMuOCAxLjQuOGguNXYxLjloLS45Yy0yLjEgMC0zLjUtLjYtMy41LTIuMyAwLS40LjEtLjkuMS0xLjMuMS0uNS4xLS45LjEtMS4zIDAtLjUtLjItMS0xLjctMXYtMS45eiIvPgogICAgPGNpcmNsZSBjeD0iMTEiIGN5PSIxMy44IiByPSIyLjEiLz4KICAgIDxjaXJjbGUgY3g9IjExIiBjeT0iOC4yIiByPSIyLjEiLz4KICA8L2c+Cjwvc3ZnPgo=);
|
||
--jp-icon-julia: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDMyNSAzMDAiPgogIDxnIGNsYXNzPSJqcC1icmFuZDAganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjY2IzYzMzIj4KICAgIDxwYXRoIGQ9Ik0gMTUwLjg5ODQzOCAyMjUgQyAxNTAuODk4NDM4IDI2Ni40MjE4NzUgMTE3LjMyMDMxMiAzMDAgNzUuODk4NDM4IDMwMCBDIDM0LjQ3NjU2MiAzMDAgMC44OTg0MzggMjY2LjQyMTg3NSAwLjg5ODQzOCAyMjUgQyAwLjg5ODQzOCAxODMuNTc4MTI1IDM0LjQ3NjU2MiAxNTAgNzUuODk4NDM4IDE1MCBDIDExNy4zMjAzMTIgMTUwIDE1MC44OTg0MzggMTgzLjU3ODEyNSAxNTAuODk4NDM4IDIyNSIvPgogIDwvZz4KICA8ZyBjbGFzcz0ianAtYnJhbmQwIGpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iIzM4OTgyNiI+CiAgICA8cGF0aCBkPSJNIDIzNy41IDc1IEMgMjM3LjUgMTE2LjQyMTg3NSAyMDMuOTIxODc1IDE1MCAxNjIuNSAxNTAgQyAxMjEuMDc4MTI1IDE1MCA4Ny41IDExNi40MjE4NzUgODcuNSA3NSBDIDg3LjUgMzMuNTc4MTI1IDEyMS4wNzgxMjUgMCAxNjIuNSAwIEMgMjAzLjkyMTg3NSAwIDIzNy41IDMzLjU3ODEyNSAyMzcuNSA3NSIvPgogIDwvZz4KICA8ZyBjbGFzcz0ianAtYnJhbmQwIGpwLWljb24tc2VsZWN0YWJsZSIgZmlsbD0iIzk1NThiMiI+CiAgICA8cGF0aCBkPSJNIDMyNC4xMDE1NjIgMjI1IEMgMzI0LjEwMTU2MiAyNjYuNDIxODc1IDI5MC41MjM0MzggMzAwIDI0OS4xMDE1NjIgMzAwIEMgMjA3LjY3OTY4OCAzMDAgMTc0LjEwMTU2MiAyNjYuNDIxODc1IDE3NC4xMDE1NjIgMjI1IEMgMTc0LjEwMTU2MiAxODMuNTc4MTI1IDIwNy42Nzk2ODggMTUwIDI0OS4xMDE1NjIgMTUwIEMgMjkwLjUyMzQzOCAxNTAgMzI0LjEwMTU2MiAxODMuNTc4MTI1IDMyNC4xMDE1NjIgMjI1Ii8+CiAgPC9nPgo8L3N2Zz4K);
|
||
--jp-icon-jupyter-favicon: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTUyIiBoZWlnaHQ9IjE2NSIgdmlld0JveD0iMCAwIDE1MiAxNjUiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMCIgZmlsbD0iI0YzNzcyNiI+CiAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLjA3ODk0NywgMTEwLjU4MjkyNykiIGQ9Ik03NS45NDIyODQyLDI5LjU4MDQ1NjEgQzQzLjMwMjM5NDcsMjkuNTgwNDU2MSAxNC43OTY3ODMyLDE3LjY1MzQ2MzQgMCwwIEM1LjUxMDgzMjExLDE1Ljg0MDY4MjkgMTUuNzgxNTM4OSwyOS41NjY3NzMyIDI5LjM5MDQ5NDcsMzkuMjc4NDE3MSBDNDIuOTk5Nyw0OC45ODk4NTM3IDU5LjI3MzcsNTQuMjA2NzgwNSA3NS45NjA1Nzg5LDU0LjIwNjc4MDUgQzkyLjY0NzQ1NzksNTQuMjA2NzgwNSAxMDguOTIxNDU4LDQ4Ljk4OTg1MzcgMTIyLjUzMDY2MywzOS4yNzg0MTcxIEMxMzYuMTM5NDUzLDI5LjU2Njc3MzIgMTQ2LjQxMDI4NCwxNS44NDA2ODI5IDE1MS45MjExNTgsMCBDMTM3LjA4Nzg2OCwxNy42NTM0NjM0IDEwOC41ODI1ODksMjkuNTgwNDU2MSA3NS45NDIyODQyLDI5LjU4MDQ1NjEgTDc1Ljk0MjI4NDIsMjkuNTgwNDU2MSBaIiAvPgogICAgPHBhdGggdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC4wMzczNjgsIDAuNzA0ODc4KSIgZD0iTTc1Ljk3ODQ1NzksMjQuNjI2NDA3MyBDMTA4LjYxODc2MywyNC42MjY0MDczIDEzNy4xMjQ0NTgsMzYuNTUzNDQxNSAxNTEuOTIxMTU4LDU0LjIwNjc4MDUgQzE0Ni40MTAyODQsMzguMzY2MjIyIDEzNi4xMzk0NTMsMjQuNjQwMTMxNyAxMjIuNTMwNjYzLDE0LjkyODQ4NzggQzEwOC45MjE0NTgsNS4yMTY4NDM5IDkyLjY0NzQ1NzksMCA3NS45NjA1Nzg5LDAgQzU5LjI3MzcsMCA0Mi45OTk3LDUuMjE2ODQzOSAyOS4zOTA0OTQ3LDE0LjkyODQ4NzggQzE1Ljc4MTUzODksMjQuNjQwMTMxNyA1LjUxMDgzMjExLDM4LjM2NjIyMiAwLDU0LjIwNjc4MDUgQzE0LjgzMzA4MTYsMzYuNTg5OTI5MyA0My4zMzg1Njg0LDI0LjYyNjQwNzMgNzUuOTc4NDU3OSwyNC42MjY0MDczIEw3NS45Nzg0NTc5LDI0LjYyNjQwNzMgWiIgLz4KICA8L2c+Cjwvc3ZnPgo=);
|
||
--jp-icon-jupyter: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzkiIGhlaWdodD0iNTEiIHZpZXdCb3g9IjAgMCAzOSA1MSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMTYzOCAtMjI4MSkiPgogICAgPGcgY2xhc3M9ImpwLWljb24td2FybjAiIGZpbGw9IiNGMzc3MjYiPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjM5Ljc0IDIzMTEuOTgpIiBkPSJNIDE4LjI2NDYgNy4xMzQxMUMgMTAuNDE0NSA3LjEzNDExIDMuNTU4NzIgNC4yNTc2IDAgMEMgMS4zMjUzOSAzLjgyMDQgMy43OTU1NiA3LjEzMDgxIDcuMDY4NiA5LjQ3MzAzQyAxMC4zNDE3IDExLjgxNTIgMTQuMjU1NyAxMy4wNzM0IDE4LjI2OSAxMy4wNzM0QyAyMi4yODIzIDEzLjA3MzQgMjYuMTk2MyAxMS44MTUyIDI5LjQ2OTQgOS40NzMwM0MgMzIuNzQyNCA3LjEzMDgxIDM1LjIxMjYgMy44MjA0IDM2LjUzOCAwQyAzMi45NzA1IDQuMjU3NiAyNi4xMTQ4IDcuMTM0MTEgMTguMjY0NiA3LjEzNDExWiIvPgogICAgICA8cGF0aCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjM5LjczIDIyODUuNDgpIiBkPSJNIDE4LjI3MzMgNS45MzkzMUMgMjYuMTIzNSA1LjkzOTMxIDMyLjk3OTMgOC44MTU4MyAzNi41MzggMTMuMDczNEMgMzUuMjEyNiA5LjI1MzAzIDMyLjc0MjQgNS45NDI2MiAyOS40Njk0IDMuNjAwNEMgMjYuMTk2MyAxLjI1ODE4IDIyLjI4MjMgMCAxOC4yNjkgMEMgMTQuMjU1NyAwIDEwLjM0MTcgMS4yNTgxOCA3LjA2ODYgMy42MDA0QyAzLjc5NTU2IDUuOTQyNjIgMS4zMjUzOSA5LjI1MzAzIDAgMTMuMDczNEMgMy41Njc0NSA4LjgyNDYzIDEwLjQyMzIgNS45MzkzMSAxOC4yNzMzIDUuOTM5MzFaIi8+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-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,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiM2MTYxNjEiIGQ9Ik0xOSA1djE0SDVWNWgxNG0xLjEtMkgzLjljLS41IDAtLjkuNC0uOS45djE2LjJjMCAuNC40LjkuOS45aDE2LjJjLjQgMCAuOS0uNS45LS45VjMuOWMwLS41LS41LS45LS45LS45ek0xMSA3aDZ2MmgtNlY3em0wIDRoNnYyaC02di0yem0wIDRoNnYyaC02ek03IDdoMnYySDd6bTAgNGgydjJIN3ptMCA0aDJ2Mkg3eiIvPgo8L3N2Zz4=);
|
||
--jp-icon-listings-info: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA1MC45NzggNTAuOTc4IiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCA1MC45NzggNTAuOTc4OyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+Cgk8Zz4KCQk8cGF0aCBzdHlsZT0iZmlsbDojMDEwMDAyOyIgZD0iTTQzLjUyLDcuNDU4QzM4LjcxMSwyLjY0OCwzMi4zMDcsMCwyNS40ODksMEMxOC42NywwLDEyLjI2NiwyLjY0OCw3LjQ1OCw3LjQ1OAoJCQljLTkuOTQzLDkuOTQxLTkuOTQzLDI2LjExOSwwLDM2LjA2MmM0LjgwOSw0LjgwOSwxMS4yMTIsNy40NTYsMTguMDMxLDcuNDU4YzAsMCwwLjAwMSwwLDAuMDAyLDAKCQkJYzYuODE2LDAsMTMuMjIxLTIuNjQ4LDE4LjAyOS03LjQ1OGM0LjgwOS00LjgwOSw3LjQ1Ny0xMS4yMTIsNy40NTctMTguMDNDNTAuOTc3LDE4LjY3LDQ4LjMyOCwxMi4yNjYsNDMuNTIsNy40NTh6CgkJCSBNNDIuMTA2LDQyLjEwNWMtNC40MzIsNC40MzEtMTAuMzMyLDYuODcyLTE2LjYxNSw2Ljg3MmgtMC4wMDJjLTYuMjg1LTAuMDAxLTEyLjE4Ny0yLjQ0MS0xNi42MTctNi44NzIKCQkJYy05LjE2Mi05LjE2My05LjE2Mi0yNC4wNzEsMC0zMy4yMzNDMTMuMzAzLDQuNDQsMTkuMjA0LDIsMjUuNDg5LDJjNi4yODQsMCwxMi4xODYsMi40NCwxNi42MTcsNi44NzIKCQkJYzQuNDMxLDQuNDMxLDYuODcxLDEwLjMzMiw2Ljg3MSwxNi42MTdDNDguOTc3LDMxLjc3Miw0Ni41MzYsMzcuNjc1LDQyLjEwNiw0Mi4xMDV6Ii8+CgkJPHBhdGggc3R5bGU9ImZpbGw6IzAxMDAwMjsiIGQ9Ik0yMy41NzgsMzIuMjE4Yy0wLjAyMy0xLjczNCwwLjE0My0zLjA1OSwwLjQ5Ni0zLjk3MmMwLjM1My0wLjkxMywxLjExLTEuOTk3LDIuMjcyLTMuMjUzCgkJCWMwLjQ2OC0wLjUzNiwwLjkyMy0xLjA2MiwxLjM2Ny0xLjU3NWMwLjYyNi0wLjc1MywxLjEwNC0xLjQ3OCwxLjQzNi0yLjE3NWMwLjMzMS0wLjcwNywwLjQ5NS0xLjU0MSwwLjQ5NS0yLjUKCQkJYzAtMS4wOTYtMC4yNi0yLjA4OC0wLjc3OS0yLjk3OWMtMC41NjUtMC44NzktMS41MDEtMS4zMzYtMi44MDYtMS4zNjljLTEuODAyLDAuMDU3LTIuOTg1LDAuNjY3LTMuNTUsMS44MzIKCQkJYy0wLjMwMSwwLjUzNS0wLjUwMywxLjE0MS0wLjYwNywxLjgxNGMtMC4xMzksMC43MDctMC4yMDcsMS40MzItMC4yMDcsMi4xNzRoLTIuOTM3Yy0wLjA5MS0yLjIwOCwwLjQwNy00LjExNCwxLjQ5My01LjcxOQoJCQljMS4wNjItMS42NCwyLjg1NS0yLjQ4MSw1LjM3OC0yLjUyN2MyLjE2LDAuMDIzLDMuODc0LDAuNjA4LDUuMTQxLDEuNzU4YzEuMjc4LDEuMTYsMS45MjksMi43NjQsMS45NSw0LjgxMQoJCQljMCwxLjE0Mi0wLjEzNywyLjExMS0wLjQxLDIuOTExYy0wLjMwOSwwLjg0NS0wLjczMSwxLjU5My0xLjI2OCwyLjI0M2MtMC40OTIsMC42NS0xLjA2OCwxLjMxOC0xLjczLDIuMDAyCgkJCWMtMC42NSwwLjY5Ny0xLjMxMywxLjQ3OS0xLjk4NywyLjM0NmMtMC4yMzksMC4zNzctMC40MjksMC43NzctMC41NjUsMS4xOTljLTAuMTYsMC45NTktMC4yMTcsMS45NTEtMC4xNzEsMi45NzkKCQkJQzI2LjU4OSwzMi4yMTgsMjMuNTc4LDMyLjIxOCwyMy41NzgsMzIuMjE4eiBNMjMuNTc4LDM4LjIydi0zLjQ4NGgzLjA3NnYzLjQ4NEgyMy41Nzh6Ii8+Cgk8L2c+Cjwvc3ZnPgo=);
|
||
--jp-icon-markdown: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8cGF0aCBjbGFzcz0ianAtaWNvbi1jb250cmFzdDAganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjN0IxRkEyIiBkPSJNNSAxNC45aDEybC02LjEgNnptOS40LTYuOGMwLTEuMy0uMS0yLjktLjEtNC41LS40IDEuNC0uOSAyLjktMS4zIDQuM2wtMS4zIDQuM2gtMkw4LjUgNy45Yy0uNC0xLjMtLjctMi45LTEtNC4zLS4xIDEuNi0uMSAzLjItLjIgNC42TDcgMTIuNEg0LjhsLjctMTFoMy4zTDEwIDVjLjQgMS4yLjcgMi43IDEgMy45LjMtMS4yLjctMi42IDEtMy45bDEuMi0zLjdoMy4zbC42IDExaC0yLjRsLS4zLTQuMnoiLz4KPC9zdmc+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,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi13YXJuMCBqcC1pY29uLXNlbGVjdGFibGUiIGZpbGw9IiNFRjZDMDAiPgogICAgPHBhdGggZD0iTTE4LjcgMy4zdjE1LjRIMy4zVjMuM2gxNS40bTEuNS0xLjVIMS44djE4LjNoMTguM2wuMS0xOC4zeiIvPgogICAgPHBhdGggZD0iTTE2LjUgMTYuNWwtNS40LTQuMy01LjYgNC4zdi0xMWgxMXoiLz4KICA8L2c+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,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi1icmFuZDAganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjMEQ0N0ExIj4KICAgIDxwYXRoIGQ9Ik0xMS4xIDYuOVY1LjhINi45YzAtLjUgMC0xLjMuMi0xLjYuNC0uNy44LTEuMSAxLjctMS40IDEuNy0uMyAyLjUtLjMgMy45LS4xIDEgLjEgMS45LjkgMS45IDEuOXY0LjJjMCAuNS0uOSAxLjYtMiAxLjZIOC44Yy0xLjUgMC0yLjQgMS40LTIuNCAyLjh2Mi4ySDQuN0MzLjUgMTUuMSAzIDE0IDMgMTMuMVY5Yy0uMS0xIC42LTIgMS44LTIgMS41LS4xIDYuMy0uMSA2LjMtLjF6Ii8+CiAgICA8cGF0aCBkPSJNMTAuOSAxNS4xdjEuMWg0LjJjMCAuNSAwIDEuMy0uMiAxLjYtLjQuNy0uOCAxLjEtMS43IDEuNC0xLjcuMy0yLjUuMy0zLjkuMS0xLS4xLTEuOS0uOS0xLjktMS45di00LjJjMC0uNS45LTEuNiAyLTEuNmgzLjhjMS41IDAgMi40LTEuNCAyLjQtMi44VjYuNmgxLjdDMTguNSA2LjkgMTkgOCAxOSA4LjlWMTNjMCAxLS43IDIuMS0xLjkgMi4xaC02LjJ6Ii8+CiAgPC9nPgo8L3N2Zz4K);
|
||
--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-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+CiAgICAgICAgPHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPgogICAgICAgIDxwYXRoIGQ9Ik0yMSw4SDNWNGgxOFY4eiBNMjEsMTBIM3Y0aDE4VjEweiBNMjEsMTZIM3Y0aDE4VjE2eiIvPgogICAgPC9nPgo8L3N2Zz4=);
|
||
--jp-icon-tag: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjgiIGhlaWdodD0iMjgiIHZpZXdCb3g9IjAgMCA0MyAyOCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KCTxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CgkJPHBhdGggZD0iTTI4LjgzMzIgMTIuMzM0TDMyLjk5OTggMTYuNTAwN0wzNy4xNjY1IDEyLjMzNEgyOC44MzMyWiIvPgoJCTxwYXRoIGQ9Ik0xNi4yMDk1IDIxLjYxMDRDMTUuNjg3MyAyMi4xMjk5IDE0Ljg0NDMgMjIuMTI5OSAxNC4zMjQ4IDIxLjYxMDRMNi45ODI5IDE0LjcyNDVDNi41NzI0IDE0LjMzOTQgNi4wODMxMyAxMy42MDk4IDYuMDQ3ODYgMTMuMDQ4MkM1Ljk1MzQ3IDExLjUyODggNi4wMjAwMiA4LjYxOTQ0IDYuMDY2MjEgNy4wNzY5NUM2LjA4MjgxIDYuNTE0NzcgNi41NTU0OCA2LjA0MzQ3IDcuMTE4MDQgNi4wMzA1NUM5LjA4ODYzIDUuOTg0NzMgMTMuMjYzOCA1LjkzNTc5IDEzLjY1MTggNi4zMjQyNUwyMS43MzY5IDEzLjYzOUMyMi4yNTYgMTQuMTU4NSAyMS43ODUxIDE1LjQ3MjQgMjEuMjYyIDE1Ljk5NDZMMTYuMjA5NSAyMS42MTA0Wk05Ljc3NTg1IDguMjY1QzkuMzM1NTEgNy44MjU2NiA4LjYyMzUxIDcuODI1NjYgOC4xODI4IDguMjY1QzcuNzQzNDYgOC43MDU3MSA3Ljc0MzQ2IDkuNDE3MzMgOC4xODI4IDkuODU2NjdDOC42MjM4MiAxMC4yOTY0IDkuMzM1ODIgMTAuMjk2NCA5Ljc3NTg1IDkuODU2NjdDMTAuMjE1NiA5LjQxNzMzIDEwLjIxNTYgOC43MDUzMyA5Ljc3NTg1IDguMjY1WiIvPgoJPC9nPgo8L3N2Zz4K);
|
||
--jp-icon-terminal: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0IiA+CiAgICA8cmVjdCBjbGFzcz0ianAtaWNvbjIganAtaWNvbi1zZWxlY3RhYmxlIiB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIgMikiIGZpbGw9IiMzMzMzMzMiLz4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uLWFjY2VudDIganAtaWNvbi1zZWxlY3RhYmxlLWludmVyc2UiIGQ9Ik01LjA1NjY0IDguNzYxNzJDNS4wNTY2NCA4LjU5NzY2IDUuMDMxMjUgOC40NTMxMiA0Ljk4MDQ3IDguMzI4MTJDNC45MzM1OSA4LjE5OTIyIDQuODU1NDcgOC4wODIwMyA0Ljc0NjA5IDcuOTc2NTZDNC42NDA2MiA3Ljg3MTA5IDQuNSA3Ljc3NTM5IDQuMzI0MjIgNy42ODk0NUM0LjE1MjM0IDcuNTk5NjEgMy45NDMzNiA3LjUxMTcyIDMuNjk3MjcgNy40MjU3OEMzLjMwMjczIDcuMjg1MTYgMi45NDMzNiA3LjEzNjcyIDIuNjE5MTQgNi45ODA0N0MyLjI5NDkyIDYuODI0MjIgMi4wMTc1OCA2LjY0MjU4IDEuNzg3MTEgNi40MzU1NUMxLjU2MDU1IDYuMjI4NTIgMS4zODQ3NyA1Ljk4ODI4IDEuMjU5NzcgNS43MTQ4NEMxLjEzNDc3IDUuNDM3NSAxLjA3MjI3IDUuMTA5MzggMS4wNzIyNyA0LjczMDQ3QzEuMDcyMjcgNC4zOTg0NCAxLjEyODkxIDQuMDk1NyAxLjI0MjE5IDMuODIyMjdDMS4zNTU0NyAzLjU0NDkyIDEuNTE1NjIgMy4zMDQ2OSAxLjcyMjY2IDMuMTAxNTZDMS45Mjk2OSAyLjg5ODQ0IDIuMTc5NjkgMi43MzQzNyAyLjQ3MjY2IDIuNjA5MzhDMi43NjU2MiAyLjQ4NDM4IDMuMDkxOCAyLjQwNDMgMy40NTExNyAyLjM2OTE0VjEuMTA5MzhINC4zODg2N1YyLjM4MDg2QzQuNzQwMjMgMi40Mjc3MyA1LjA1NjY0IDIuNTIzNDQgNS4zMzc4OSAyLjY2Nzk3QzUuNjE5MTQgMi44MTI1IDUuODU3NDIgMy4wMDE5NSA2LjA1MjczIDMuMjM2MzNDNi4yNTE5NSAzLjQ2NjggNi40MDQzIDMuNzQwMjMgNi41MDk3NyA0LjA1NjY0QzYuNjE5MTQgNC4zNjkxNCA2LjY3MzgzIDQuNzIwNyA2LjY3MzgzIDUuMTExMzNINS4wNDQ5MkM1LjA0NDkyIDQuNjM4NjcgNC45Mzc1IDQuMjgxMjUgNC43MjI2NiA0LjAzOTA2QzQuNTA3ODEgMy43OTI5NyA0LjIxNjggMy42Njk5MiAzLjg0OTYxIDMuNjY5OTJDMy42NTAzOSAzLjY2OTkyIDMuNDc2NTYgMy42OTcyNyAzLjMyODEyIDMuNzUxOTVDMy4xODM1OSAzLjgwMjczIDMuMDY0NDUgMy44NzY5NSAyLjk3MDcgMy45NzQ2MUMyLjg3Njk1IDQuMDY4MzYgMi44MDY2NCA0LjE3OTY5IDIuNzU5NzcgNC4zMDg1OUMyLjcxNjggNC40Mzc1IDIuNjk1MzEgNC41NzgxMiAyLjY5NTMxIDQuNzMwNDdDMi42OTUzMSA0Ljg4MjgxIDIuNzE2OCA1LjAxOTUzIDIuNzU5NzcgNS4xNDA2MkMyLjgwNjY0IDUuMjU3ODEgMi44ODI4MSA1LjM2NzE5IDIuOTg4MjggNS40Njg3NUMzLjA5NzY2IDUuNTcwMzEgMy4yNDAyMyA1LjY2Nzk3IDMuNDE2MDIgNS43NjE3MkMzLjU5MTggNS44NTE1NiAzLjgxMDU1IDUuOTQzMzYgNC4wNzIyNyA2LjAzNzExQzQuNDY2OCA2LjE4NTU1IDQuODI0MjIgNi4zMzk4NCA1LjE0NDUzIDYuNUM1LjQ2NDg0IDYuNjU2MjUgNS43MzgyOCA2LjgzOTg0IDUuOTY0ODQgNy4wNTA3OEM2LjE5NTMxIDcuMjU3ODEgNi4zNzEwOSA3LjUgNi40OTIxOSA3Ljc3NzM0QzYuNjE3MTkgOC4wNTA3OCA2LjY3OTY5IDguMzc1IDYuNjc5NjkgOC43NUM2LjY3OTY5IDkuMDkzNzUgNi42MjMwNSA5LjQwNDMgNi41MDk3NyA5LjY4MTY0QzYuMzk2NDggOS45NTUwOCA2LjIzNDM4IDEwLjE5MTQgNi4wMjM0NCAxMC4zOTA2QzUuODEyNSAxMC41ODk4IDUuNTU4NTkgMTAuNzUgNS4yNjE3MiAxMC44NzExQzQuOTY0ODQgMTAuOTg4MyA0LjYzMjgxIDExLjA2NDUgNC4yNjU2MiAxMS4wOTk2VjEyLjI0OEgzLjMzMzk4VjExLjA5OTZDMy4wMDE5NSAxMS4wNjg0IDIuNjc5NjkgMTAuOTk2MSAyLjM2NzE5IDEwLjg4MjhDMi4wNTQ2OSAxMC43NjU2IDEuNzc3MzQgMTAuNTk3NyAxLjUzNTE2IDEwLjM3ODlDMS4yOTY4OCAxMC4xNjAyIDEuMTA1NDcgOS44ODQ3NyAwLjk2MDkzOCA5LjU1MjczQzAuODE2NDA2IDkuMjE2OCAwLjc0NDE0MSA4LjgxNDQ1IDAuNzQ0MTQxIDguMzQ1N0gyLjM3ODkxQzIuMzc4OTEgOC42MjY5NSAyLjQxOTkyIDguODYzMjggMi41MDE5NSA5LjA1NDY5QzIuNTgzOTggOS4yNDIxOSAyLjY4OTQ1IDkuMzkyNTggMi44MTgzNiA5LjUwNTg2QzIuOTUxMTcgOS42MTUyMyAzLjEwMTU2IDkuNjkzMzYgMy4yNjk1MyA5Ljc0MDIzQzMuNDM3NSA5Ljc4NzExIDMuNjA5MzggOS44MTA1NSAzLjc4NTE2IDkuODEwNTVDNC4yMDMxMiA5LjgxMDU1IDQuNTE5NTMgOS43MTI4OSA0LjczNDM4IDkuNTE3NThDNC45NDkyMiA5LjMyMjI3IDUuMDU2NjQgOS4wNzAzMSA1LjA1NjY0IDguNzYxNzJaTTEzLjQxOCAxMi4yNzE1SDguMDc0MjJWMTFIMTMuNDE4VjEyLjI3MTVaIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzLjk1MjY0IDYpIiBmaWxsPSJ3aGl0ZSIvPgo8L3N2Zz4K);
|
||
--jp-icon-text-editor: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8cGF0aCBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIiBkPSJNMTUgMTVIM3YyaDEydi0yem0wLThIM3YyaDEyVjd6TTMgMTNoMTh2LTJIM3Yyem0wIDhoMTh2LTJIM3Yyek0zIDN2MmgxOFYzSDN6Ii8+Cjwvc3ZnPgo=);
|
||
--jp-icon-toc: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBjbGFzcz0ianAtaWNvbjMganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjNjE2MTYxIj4KICAgIDxwYXRoIGQ9Ik03LDVIMjFWN0g3VjVNNywxM1YxMUgyMVYxM0g3TTQsNC41QTEuNSwxLjUgMCAwLDEgNS41LDZBMS41LDEuNSAwIDAsMSA0LDcuNUExLjUsMS41IDAgMCwxIDIuNSw2QTEuNSwxLjUgMCAwLDEgNCw0LjVNNCwxMC41QTEuNSwxLjUgMCAwLDEgNS41LDEyQTEuNSwxLjUgMCAwLDEgNCwxMy41QTEuNSwxLjUgMCAwLDEgMi41LDEyQTEuNSwxLjUgMCAwLDEgNCwxMC41TTcsMTlWMTdIMjFWMTlIN000LDE2LjVBMS41LDEuNSAwIDAsMSA1LjUsMThBMS41LDEuNSAwIDAsMSA0LDE5LjVBMS41LDEuNSAwIDAsMSAyLjUsMThBMS41LDEuNSAwIDAsMSA0LDE2LjVaIiAvPgogIDwvZz4KPC9zdmc+Cg==);
|
||
--jp-icon-tree-view: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxnIGNsYXNzPSJqcC1pY29uMyIgZmlsbD0iIzYxNjE2MSI+CiAgICAgICAgPHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPgogICAgICAgIDxwYXRoIGQ9Ik0yMiAxMVYzaC03djNIOVYzSDJ2OGg3VjhoMnYxMGg0djNoN3YtOGgtN3YzaC0yVjhoMnYzeiIvPgogICAgPC9nPgo8L3N2Zz4=);
|
||
--jp-icon-trusted: url(data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDI0IDI1Ij4KICAgIDxwYXRoIGNsYXNzPSJqcC1pY29uMiIgc3Ryb2tlPSIjMzMzMzMzIiBzdHJva2Utd2lkdGg9IjIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIgMykiIGQ9Ik0xLjg2MDk0IDExLjQ0MDlDMC44MjY0NDggOC43NzAyNyAwLjg2Mzc3OSA2LjA1NzY0IDEuMjQ5MDcgNC4xOTkzMkMyLjQ4MjA2IDMuOTMzNDcgNC4wODA2OCAzLjQwMzQ3IDUuNjAxMDIgMi44NDQ5QzcuMjM1NDkgMi4yNDQ0IDguODU2NjYgMS41ODE1IDkuOTg3NiAxLjA5NTM5QzExLjA1OTcgMS41ODM0MSAxMi42MDk0IDIuMjQ0NCAxNC4yMTggMi44NDMzOUMxNS43NTAzIDMuNDEzOTQgMTcuMzk5NSAzLjk1MjU4IDE4Ljc1MzkgNC4yMTM4NUMxOS4xMzY0IDYuMDcxNzcgMTkuMTcwOSA4Ljc3NzIyIDE4LjEzOSAxMS40NDA5QzE3LjAzMDMgMTQuMzAzMiAxNC42NjY4IDE3LjE4NDQgOS45OTk5OSAxOC45MzU0QzUuMzMzMiAxNy4xODQ0IDIuOTY5NjggMTQuMzAzMiAxLjg2MDk0IDExLjQ0MDlaIi8+CiAgICA8cGF0aCBjbGFzcz0ianAtaWNvbjIiIGZpbGw9IiMzMzMzMzMiIHN0cm9rZT0iIzMzMzMzMyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOCA5Ljg2NzE5KSIgZD0iTTIuODYwMTUgNC44NjUzNUwwLjcyNjU0OSAyLjk5OTU5TDAgMy42MzA0NUwyLjg2MDE1IDYuMTMxNTdMOCAwLjYzMDg3Mkw3LjI3ODU3IDBMMi44NjAxNSA0Ljg2NTM1WiIvPgo8L3N2Zz4K);
|
||
--jp-icon-undo: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyBjbGFzcz0ianAtaWNvbjMiIGZpbGw9IiM2MTYxNjEiPgogICAgPHBhdGggZD0iTTEyLjUgOGMtMi42NSAwLTUuMDUuOTktNi45IDIuNkwyIDd2OWg5bC0zLjYyLTMuNjJjMS4zOS0xLjE2IDMuMTYtMS44OCA1LjEyLTEuODggMy41NCAwIDYuNTUgMi4zMSA3LjYgNS41bDIuMzctLjc4QzIxLjA4IDExLjAzIDE3LjE1IDggMTIuNSA4eiIvPgogIDwvZz4KPC9zdmc+Cg==);
|
||
--jp-icon-vega: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbjEganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjMjEyMTIxIj4KICAgIDxwYXRoIGQ9Ik0xMC42IDUuNGwyLjItMy4ySDIuMnY3LjNsNC02LjZ6Ii8+CiAgICA8cGF0aCBkPSJNMTUuOCAyLjJsLTQuNCA2LjZMNyA2LjNsLTQuOCA4djUuNWgxNy42VjIuMmgtNHptLTcgMTUuNEg1LjV2LTQuNGgzLjN2NC40em00LjQgMEg5LjhWOS44aDMuNHY3Ljh6bTQuNCAwaC0zLjRWNi41aDMuNHYxMS4xeiIvPgogIDwvZz4KPC9zdmc+Cg==);
|
||
--jp-icon-yaml: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgdmlld0JveD0iMCAwIDIyIDIyIj4KICA8ZyBjbGFzcz0ianAtaWNvbi1jb250cmFzdDIganAtaWNvbi1zZWxlY3RhYmxlIiBmaWxsPSIjRDgxQjYwIj4KICAgIDxwYXRoIGQ9Ik03LjIgMTguNnYtNS40TDMgNS42aDMuM2wxLjQgMy4xYy4zLjkuNiAxLjYgMSAyLjUuMy0uOC42LTEuNiAxLTIuNWwxLjQtMy4xaDMuNGwtNC40IDcuNnY1LjVsLTIuOS0uMXoiLz4KICAgIDxjaXJjbGUgY2xhc3M9InN0MCIgY3g9IjE3LjYiIGN5PSIxNi41IiByPSIyLjEiLz4KICAgIDxjaXJjbGUgY2xhc3M9InN0MCIgY3g9IjE3LjYiIGN5PSIxMSIgcj0iMi4xIi8+CiAgPC9nPgo8L3N2Zz4K);
|
||
}
|
||
|
||
/* Icon CSS class declarations */
|
||
|
||
.jp-AddIcon {
|
||
background-image: var(--jp-icon-add);
|
||
}
|
||
.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-CodeIcon {
|
||
background-image: var(--jp-icon-code);
|
||
}
|
||
.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-DownloadIcon {
|
||
background-image: var(--jp-icon-download);
|
||
}
|
||
.jp-EditIcon {
|
||
background-image: var(--jp-icon-edit);
|
||
}
|
||
.jp-EllipsesIcon {
|
||
background-image: var(--jp-icon-ellipses);
|
||
}
|
||
.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-FilterListIcon {
|
||
background-image: var(--jp-icon-filter-list);
|
||
}
|
||
.jp-FolderIcon {
|
||
background-image: var(--jp-icon-folder);
|
||
}
|
||
.jp-Html5Icon {
|
||
background-image: var(--jp-icon-html5);
|
||
}
|
||
.jp-ImageIcon {
|
||
background-image: var(--jp-icon-image);
|
||
}
|
||
.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-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-ListingsInfoIcon {
|
||
background-image: var(--jp-icon-listings-info);
|
||
}
|
||
.jp-MarkdownIcon {
|
||
background-image: var(--jp-icon-markdown);
|
||
}
|
||
.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-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-VegaIcon {
|
||
background-image: var(--jp-icon-vega);
|
||
}
|
||
.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.
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
/**
|
||
* 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);
|
||
}
|
||
|
||
/* CSS for icons in selected items in the settings editor */
|
||
#setting-editor .jp-PluginList .jp-mod-selected .jp-icon-selectable[fill] {
|
||
fill: #fff;
|
||
}
|
||
#setting-editor
|
||
.jp-PluginList
|
||
.jp-mod-selected
|
||
.jp-icon-selectable-inverse[fill] {
|
||
fill: var(--jp-brand-color1);
|
||
}
|
||
|
||
/* 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);
|
||
}
|
||
|
||
/* CSS for icons in selected tabs in the sidebar tab manager */
|
||
#tab-manager .lm-TabBar-tab.jp-mod-active .jp-icon-selectable[fill] {
|
||
fill: #fff;
|
||
}
|
||
|
||
#tab-manager .lm-TabBar-tab.jp-mod-active .jp-icon-selectable-inverse[fill] {
|
||
fill: var(--jp-brand-color1);
|
||
}
|
||
#tab-manager
|
||
.lm-TabBar-tab.jp-mod-active
|
||
.jp-icon-hover
|
||
:hover
|
||
.jp-icon-selectable[fill] {
|
||
fill: var(--jp-brand-color1);
|
||
}
|
||
|
||
#tab-manager
|
||
.lm-TabBar-tab.jp-mod-active
|
||
.jp-icon-hover
|
||
:hover
|
||
.jp-icon-selectable-inverse[fill] {
|
||
fill: #fff;
|
||
}
|
||
|
||
/**
|
||
* 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 sidebar tab manager
|
||
*/
|
||
#tab-manager
|
||
.lm-TabBar-tab.jp-mod-dirty
|
||
> .lm-TabBar-tabCloseIcon
|
||
> :not(:hover)
|
||
> .jp-icon3[fill] {
|
||
fill: none;
|
||
}
|
||
#tab-manager
|
||
.lm-TabBar-tab.jp-mod-dirty
|
||
> .lm-TabBar-tabCloseIcon
|
||
> :not(:hover)
|
||
> .jp-icon-busy[fill] {
|
||
fill: var(--jp-inverse-layout-color3);
|
||
}
|
||
|
||
#tab-manager
|
||
.lm-TabBar-tab.jp-mod-dirty.jp-mod-active
|
||
> .lm-TabBar-tabCloseIcon
|
||
> :not(:hover)
|
||
> .jp-icon-busy[fill] {
|
||
fill: #fff;
|
||
}
|
||
|
||
/**
|
||
* 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);
|
||
}
|
||
|
||
/* 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) svg {
|
||
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-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;
|
||
}
|
||
|
||
.jp-switch-track {
|
||
cursor: pointer;
|
||
background-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: 0px;
|
||
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-warn-color0);
|
||
}
|
||
|
||
.jp-switch[aria-checked='true'] .jp-switch-track::before {
|
||
/* track width (35) - margins (3 + 3) - thumb width (10) */
|
||
left: 19px;
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Copyright (c) Jupyter Development Team.
|
||
| Distributed under the terms of the Modified BSD License.
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
/* Sibling imports */
|
||
|
||
/* Override Blueprint's _reset.scss styles */
|
||
html {
|
||
box-sizing: unset;
|
||
}
|
||
|
||
*,
|
||
*::before,
|
||
*::after {
|
||
box-sizing: unset;
|
||
}
|
||
|
||
body {
|
||
color: unset;
|
||
font-family: var(--jp-ui-font-family);
|
||
}
|
||
|
||
p {
|
||
margin-top: unset;
|
||
margin-bottom: unset;
|
||
}
|
||
|
||
small {
|
||
font-size: unset;
|
||
}
|
||
|
||
strong {
|
||
font-weight: unset;
|
||
}
|
||
|
||
/* Override Blueprint's _typography.scss styles */
|
||
a {
|
||
text-decoration: unset;
|
||
color: unset;
|
||
}
|
||
a:hover {
|
||
text-decoration: unset;
|
||
color: unset;
|
||
}
|
||
|
||
/* Override Blueprint's _accessibility.scss styles */
|
||
:focus {
|
||
outline: unset;
|
||
outline-offset: unset;
|
||
-moz-outline-radius: unset;
|
||
}
|
||
|
||
/* Styles for ui-components */
|
||
.jp-Button {
|
||
border-radius: var(--jp-border-radius);
|
||
padding: 0px 12px;
|
||
font-size: var(--jp-ui-font-size1);
|
||
}
|
||
|
||
/* Use our own theme for hover styles */
|
||
button.jp-Button.bp3-button.bp3-minimal:hover {
|
||
background-color: var(--jp-layout-color2);
|
||
}
|
||
.jp-Button.minimal {
|
||
color: unset !important;
|
||
}
|
||
|
||
.jp-Button.jp-ToolbarButtonComponent {
|
||
text-transform: none;
|
||
}
|
||
|
||
.jp-InputGroup input {
|
||
box-sizing: border-box;
|
||
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);
|
||
}
|
||
|
||
.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::placeholder,
|
||
input::placeholder {
|
||
color: var(--jp-ui-font-color3);
|
||
}
|
||
|
||
.jp-BPIcon {
|
||
display: inline-block;
|
||
vertical-align: middle;
|
||
margin: auto;
|
||
}
|
||
|
||
/* Stop blueprint futzing with our icon fills */
|
||
.bp3-icon.jp-BPIcon > svg:not([fill]) {
|
||
fill: var(--jp-inverse-layout-color3);
|
||
}
|
||
|
||
.jp-InputGroupAction {
|
||
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);
|
||
height: 24px;
|
||
line-height: 14px;
|
||
padding: 0 25px 0 10px;
|
||
text-align: left;
|
||
-moz-appearance: none;
|
||
-webkit-appearance: none;
|
||
}
|
||
|
||
/* Use our own theme for hover and option styles */
|
||
.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.
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
.jp-Collapse {
|
||
display: flex;
|
||
flex-direction: column;
|
||
align-items: stretch;
|
||
border-top: 1px solid var(--jp-border-color2);
|
||
border-bottom: 1px solid var(--jp-border-color2);
|
||
}
|
||
|
||
.jp-Collapse-header {
|
||
padding: 1px 12px;
|
||
color: var(--jp-ui-font-color1);
|
||
background-color: var(--jp-layout-color1);
|
||
font-size: var(--jp-ui-font-size2);
|
||
}
|
||
|
||
.jp-Collapse-header:hover {
|
||
background-color: var(--jp-layout-color2);
|
||
}
|
||
|
||
.jp-Collapse-contents {
|
||
padding: 0px 12px 0px 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.
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Variables
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
:root {
|
||
--jp-private-commandpalette-search-height: 28px;
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Overall styles
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
.lm-CommandPalette {
|
||
padding-bottom: 0px;
|
||
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: 0px 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 5px;
|
||
}
|
||
|
||
.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: 0px;
|
||
}
|
||
|
||
.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 .lm-CommandPalette-itemLabel > mark {
|
||
color: var(--jp-ui-inverse-font-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: 0px 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: 0px;
|
||
left: 0px;
|
||
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;
|
||
padding-bottom: 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-button {
|
||
overflow: visible;
|
||
}
|
||
|
||
button.jp-Dialog-button:focus {
|
||
outline: 1px solid var(--jp-brand-color1);
|
||
outline-offset: 4px;
|
||
-moz-outline-radius: 0px;
|
||
}
|
||
|
||
button.jp-Dialog-button:focus::-moz-focus-inner {
|
||
border: 0;
|
||
}
|
||
|
||
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-color0);
|
||
}
|
||
|
||
.jp-Dialog-body {
|
||
display: flex;
|
||
flex-direction: column;
|
||
flex: 1 1 auto;
|
||
font-size: var(--jp-ui-font-size1);
|
||
background: var(--jp-layout-color1);
|
||
overflow: auto;
|
||
}
|
||
|
||
.jp-Dialog-footer {
|
||
display: flex;
|
||
flex-direction: row;
|
||
justify-content: flex-end;
|
||
flex: 0 0 auto;
|
||
margin-left: -12px;
|
||
margin-right: -12px;
|
||
padding: 12px;
|
||
}
|
||
|
||
.jp-Dialog-title {
|
||
overflow: hidden;
|
||
white-space: nowrap;
|
||
text-overflow: ellipsis;
|
||
}
|
||
|
||
.jp-Dialog-body > .jp-select-wrapper {
|
||
width: 100%;
|
||
}
|
||
|
||
.jp-Dialog-body > button {
|
||
padding: 0px 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) 2014-2016, Jupyter Development Team.
|
||
|
|
||
| Distributed under the terms of the Modified BSD License.
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
.jp-HoverBox {
|
||
position: fixed;
|
||
}
|
||
|
||
.jp-HoverBox.jp-mod-outofview {
|
||
display: none;
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| 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, `p-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;
|
||
}
|
||
|
||
.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;
|
||
}
|
||
|
||
/**
|
||
* 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: #aa00ff;
|
||
|
||
--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: #ffff00;
|
||
--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: #eeeeee;
|
||
--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) 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 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: 0px 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-FileDialog-Checkbox {
|
||
margin-top: 35px;
|
||
display: flex;
|
||
flex-direction: row;
|
||
align-items: end;
|
||
width: 100%;
|
||
}
|
||
|
||
.jp-FileDialog-Checkbox > label {
|
||
flex: 1 1 auto;
|
||
}
|
||
|
||
.jp-select-wrapper {
|
||
display: flex;
|
||
position: relative;
|
||
flex-direction: column;
|
||
padding: 1px;
|
||
background-color: var(--jp-layout-color1);
|
||
height: 28px;
|
||
box-sizing: border-box;
|
||
margin-bottom: 12px;
|
||
}
|
||
|
||
.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 {
|
||
background-color: var(--jp-layout-color1);
|
||
cursor: pointer;
|
||
color: var(--jp-ui-font-color0);
|
||
background-color: var(--jp-input-hover-background);
|
||
box-shadow: inset 0 0px 1px rgba(0, 0, 0, 0.5);
|
||
}
|
||
|
||
select.jp-mod-styled {
|
||
flex: 1 1 auto;
|
||
height: 32px;
|
||
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: 0px;
|
||
outline: none;
|
||
appearance: none;
|
||
-webkit-appearance: none;
|
||
-moz-appearance: none;
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| 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: 1;
|
||
overflow-x: auto;
|
||
}
|
||
|
||
/* 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: 0px;
|
||
margin: 0px;
|
||
}
|
||
|
||
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: 0px 6px;
|
||
margin: 0px;
|
||
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: 0px;
|
||
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);
|
||
}
|
||
|
||
#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) 2014-2017, 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.
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
|
||
/* <DEPRECATED> */ body.p-mod-override-cursor *, /* </DEPRECATED> */
|
||
body.lm-mod-override-cursor * {
|
||
cursor: inherit !important;
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| 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: 0px;
|
||
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);
|
||
}
|
||
|
||
/* BASICS */
|
||
|
||
.CodeMirror {
|
||
/* Set height, width, borders, and global font properties here */
|
||
font-family: monospace;
|
||
height: 300px;
|
||
color: black;
|
||
direction: ltr;
|
||
}
|
||
|
||
/* PADDING */
|
||
|
||
.CodeMirror-lines {
|
||
padding: 4px 0; /* Vertical padding around content */
|
||
}
|
||
.CodeMirror pre.CodeMirror-line,
|
||
.CodeMirror pre.CodeMirror-line-like {
|
||
padding: 0 4px; /* Horizontal padding of content */
|
||
}
|
||
|
||
.CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler {
|
||
background-color: white; /* The little square between H and V scrollbars */
|
||
}
|
||
|
||
/* GUTTER */
|
||
|
||
.CodeMirror-gutters {
|
||
border-right: 1px solid #ddd;
|
||
background-color: #f7f7f7;
|
||
white-space: nowrap;
|
||
}
|
||
.CodeMirror-linenumbers {}
|
||
.CodeMirror-linenumber {
|
||
padding: 0 3px 0 5px;
|
||
min-width: 20px;
|
||
text-align: right;
|
||
color: #999;
|
||
white-space: nowrap;
|
||
}
|
||
|
||
.CodeMirror-guttermarker { color: black; }
|
||
.CodeMirror-guttermarker-subtle { color: #999; }
|
||
|
||
/* CURSOR */
|
||
|
||
.CodeMirror-cursor {
|
||
border-left: 1px solid black;
|
||
border-right: none;
|
||
width: 0;
|
||
}
|
||
/* Shown when moving in bi-directional text */
|
||
.CodeMirror div.CodeMirror-secondarycursor {
|
||
border-left: 1px solid silver;
|
||
}
|
||
.cm-fat-cursor .CodeMirror-cursor {
|
||
width: auto;
|
||
border: 0 !important;
|
||
background: #7e7;
|
||
}
|
||
.cm-fat-cursor div.CodeMirror-cursors {
|
||
z-index: 1;
|
||
}
|
||
.cm-fat-cursor-mark {
|
||
background-color: rgba(20, 255, 20, 0.5);
|
||
-webkit-animation: blink 1.06s steps(1) infinite;
|
||
-moz-animation: blink 1.06s steps(1) infinite;
|
||
animation: blink 1.06s steps(1) infinite;
|
||
}
|
||
.cm-animate-fat-cursor {
|
||
width: auto;
|
||
border: 0;
|
||
-webkit-animation: blink 1.06s steps(1) infinite;
|
||
-moz-animation: blink 1.06s steps(1) infinite;
|
||
animation: blink 1.06s steps(1) infinite;
|
||
background-color: #7e7;
|
||
}
|
||
@-moz-keyframes blink {
|
||
0% {}
|
||
50% { background-color: transparent; }
|
||
100% {}
|
||
}
|
||
@-webkit-keyframes blink {
|
||
0% {}
|
||
50% { background-color: transparent; }
|
||
100% {}
|
||
}
|
||
@keyframes blink {
|
||
0% {}
|
||
50% { background-color: transparent; }
|
||
100% {}
|
||
}
|
||
|
||
/* Can style cursor different in overwrite (non-insert) mode */
|
||
.CodeMirror-overwrite .CodeMirror-cursor {}
|
||
|
||
.cm-tab { display: inline-block; text-decoration: inherit; }
|
||
|
||
.CodeMirror-rulers {
|
||
position: absolute;
|
||
left: 0; right: 0; top: -50px; bottom: 0;
|
||
overflow: hidden;
|
||
}
|
||
.CodeMirror-ruler {
|
||
border-left: 1px solid #ccc;
|
||
top: 0; bottom: 0;
|
||
position: absolute;
|
||
}
|
||
|
||
/* DEFAULT THEME */
|
||
|
||
.cm-s-default .cm-header {color: blue;}
|
||
.cm-s-default .cm-quote {color: #090;}
|
||
.cm-negative {color: #d44;}
|
||
.cm-positive {color: #292;}
|
||
.cm-header, .cm-strong {font-weight: bold;}
|
||
.cm-em {font-style: italic;}
|
||
.cm-link {text-decoration: underline;}
|
||
.cm-strikethrough {text-decoration: line-through;}
|
||
|
||
.cm-s-default .cm-keyword {color: #708;}
|
||
.cm-s-default .cm-atom {color: #219;}
|
||
.cm-s-default .cm-number {color: #164;}
|
||
.cm-s-default .cm-def {color: #00f;}
|
||
.cm-s-default .cm-variable,
|
||
.cm-s-default .cm-punctuation,
|
||
.cm-s-default .cm-property,
|
||
.cm-s-default .cm-operator {}
|
||
.cm-s-default .cm-variable-2 {color: #05a;}
|
||
.cm-s-default .cm-variable-3, .cm-s-default .cm-type {color: #085;}
|
||
.cm-s-default .cm-comment {color: #a50;}
|
||
.cm-s-default .cm-string {color: #a11;}
|
||
.cm-s-default .cm-string-2 {color: #f50;}
|
||
.cm-s-default .cm-meta {color: #555;}
|
||
.cm-s-default .cm-qualifier {color: #555;}
|
||
.cm-s-default .cm-builtin {color: #30a;}
|
||
.cm-s-default .cm-bracket {color: #997;}
|
||
.cm-s-default .cm-tag {color: #170;}
|
||
.cm-s-default .cm-attribute {color: #00c;}
|
||
.cm-s-default .cm-hr {color: #999;}
|
||
.cm-s-default .cm-link {color: #00c;}
|
||
|
||
.cm-s-default .cm-error {color: #f00;}
|
||
.cm-invalidchar {color: #f00;}
|
||
|
||
.CodeMirror-composing { border-bottom: 2px solid; }
|
||
|
||
/* Default styles for common addons */
|
||
|
||
div.CodeMirror span.CodeMirror-matchingbracket {color: #0b0;}
|
||
div.CodeMirror span.CodeMirror-nonmatchingbracket {color: #a22;}
|
||
.CodeMirror-matchingtag { background: rgba(255, 150, 0, .3); }
|
||
.CodeMirror-activeline-background {background: #e8f2ff;}
|
||
|
||
/* STOP */
|
||
|
||
/* The rest of this file contains styles related to the mechanics of
|
||
the editor. You probably shouldn't touch them. */
|
||
|
||
.CodeMirror {
|
||
position: relative;
|
||
overflow: hidden;
|
||
background: white;
|
||
}
|
||
|
||
.CodeMirror-scroll {
|
||
overflow: scroll !important; /* Things will break if this is overridden */
|
||
/* 50px is the magic margin used to hide the element's real scrollbars */
|
||
/* See overflow: hidden in .CodeMirror */
|
||
margin-bottom: -50px; margin-right: -50px;
|
||
padding-bottom: 50px;
|
||
height: 100%;
|
||
outline: none; /* Prevent dragging from highlighting the element */
|
||
position: relative;
|
||
}
|
||
.CodeMirror-sizer {
|
||
position: relative;
|
||
border-right: 50px solid transparent;
|
||
}
|
||
|
||
/* The fake, visible scrollbars. Used to force redraw during scrolling
|
||
before actual scrolling happens, thus preventing shaking and
|
||
flickering artifacts. */
|
||
.CodeMirror-vscrollbar, .CodeMirror-hscrollbar, .CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler {
|
||
position: absolute;
|
||
z-index: 6;
|
||
display: none;
|
||
outline: none;
|
||
}
|
||
.CodeMirror-vscrollbar {
|
||
right: 0; top: 0;
|
||
overflow-x: hidden;
|
||
overflow-y: scroll;
|
||
}
|
||
.CodeMirror-hscrollbar {
|
||
bottom: 0; left: 0;
|
||
overflow-y: hidden;
|
||
overflow-x: scroll;
|
||
}
|
||
.CodeMirror-scrollbar-filler {
|
||
right: 0; bottom: 0;
|
||
}
|
||
.CodeMirror-gutter-filler {
|
||
left: 0; bottom: 0;
|
||
}
|
||
|
||
.CodeMirror-gutters {
|
||
position: absolute; left: 0; top: 0;
|
||
min-height: 100%;
|
||
z-index: 3;
|
||
}
|
||
.CodeMirror-gutter {
|
||
white-space: normal;
|
||
height: 100%;
|
||
display: inline-block;
|
||
vertical-align: top;
|
||
margin-bottom: -50px;
|
||
}
|
||
.CodeMirror-gutter-wrapper {
|
||
position: absolute;
|
||
z-index: 4;
|
||
background: none !important;
|
||
border: none !important;
|
||
}
|
||
.CodeMirror-gutter-background {
|
||
position: absolute;
|
||
top: 0; bottom: 0;
|
||
z-index: 4;
|
||
}
|
||
.CodeMirror-gutter-elt {
|
||
position: absolute;
|
||
cursor: default;
|
||
z-index: 4;
|
||
}
|
||
.CodeMirror-gutter-wrapper ::selection { background-color: transparent }
|
||
.CodeMirror-gutter-wrapper ::-moz-selection { background-color: transparent }
|
||
|
||
.CodeMirror-lines {
|
||
cursor: text;
|
||
min-height: 1px; /* prevents collapsing before first draw */
|
||
}
|
||
.CodeMirror pre.CodeMirror-line,
|
||
.CodeMirror pre.CodeMirror-line-like {
|
||
/* Reset some styles that the rest of the page might have set */
|
||
-moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0;
|
||
border-width: 0;
|
||
background: transparent;
|
||
font-family: inherit;
|
||
font-size: inherit;
|
||
margin: 0;
|
||
white-space: pre;
|
||
word-wrap: normal;
|
||
line-height: inherit;
|
||
color: inherit;
|
||
z-index: 2;
|
||
position: relative;
|
||
overflow: visible;
|
||
-webkit-tap-highlight-color: transparent;
|
||
-webkit-font-variant-ligatures: contextual;
|
||
font-variant-ligatures: contextual;
|
||
}
|
||
.CodeMirror-wrap pre.CodeMirror-line,
|
||
.CodeMirror-wrap pre.CodeMirror-line-like {
|
||
word-wrap: break-word;
|
||
white-space: pre-wrap;
|
||
word-break: normal;
|
||
}
|
||
|
||
.CodeMirror-linebackground {
|
||
position: absolute;
|
||
left: 0; right: 0; top: 0; bottom: 0;
|
||
z-index: 0;
|
||
}
|
||
|
||
.CodeMirror-linewidget {
|
||
position: relative;
|
||
z-index: 2;
|
||
padding: 0.1px; /* Force widget margins to stay inside of the container */
|
||
}
|
||
|
||
.CodeMirror-widget {}
|
||
|
||
.CodeMirror-rtl pre { direction: rtl; }
|
||
|
||
.CodeMirror-code {
|
||
outline: none;
|
||
}
|
||
|
||
/* Force content-box sizing for the elements where we expect it */
|
||
.CodeMirror-scroll,
|
||
.CodeMirror-sizer,
|
||
.CodeMirror-gutter,
|
||
.CodeMirror-gutters,
|
||
.CodeMirror-linenumber {
|
||
-moz-box-sizing: content-box;
|
||
box-sizing: content-box;
|
||
}
|
||
|
||
.CodeMirror-measure {
|
||
position: absolute;
|
||
width: 100%;
|
||
height: 0;
|
||
overflow: hidden;
|
||
visibility: hidden;
|
||
}
|
||
|
||
.CodeMirror-cursor {
|
||
position: absolute;
|
||
pointer-events: none;
|
||
}
|
||
.CodeMirror-measure pre { position: static; }
|
||
|
||
div.CodeMirror-cursors {
|
||
visibility: hidden;
|
||
position: relative;
|
||
z-index: 3;
|
||
}
|
||
div.CodeMirror-dragcursors {
|
||
visibility: visible;
|
||
}
|
||
|
||
.CodeMirror-focused div.CodeMirror-cursors {
|
||
visibility: visible;
|
||
}
|
||
|
||
.CodeMirror-selected { background: #d9d9d9; }
|
||
.CodeMirror-focused .CodeMirror-selected { background: #d7d4f0; }
|
||
.CodeMirror-crosshair { cursor: crosshair; }
|
||
.CodeMirror-line::selection, .CodeMirror-line > span::selection, .CodeMirror-line > span > span::selection { background: #d7d4f0; }
|
||
.CodeMirror-line::-moz-selection, .CodeMirror-line > span::-moz-selection, .CodeMirror-line > span > span::-moz-selection { background: #d7d4f0; }
|
||
|
||
.cm-searching {
|
||
background-color: #ffa;
|
||
background-color: rgba(255, 255, 0, .4);
|
||
}
|
||
|
||
/* Used to force a border model for a node */
|
||
.cm-force-border { padding-right: .1px; }
|
||
|
||
@media print {
|
||
/* Hide the cursor when printing */
|
||
.CodeMirror div.CodeMirror-cursors {
|
||
visibility: hidden;
|
||
}
|
||
}
|
||
|
||
/* See issue #2901 */
|
||
.cm-tab-wrap-hack:after { content: ''; }
|
||
|
||
/* Help users use markselection to safely style text background */
|
||
span.CodeMirror-selectedtext { background: none; }
|
||
|
||
.CodeMirror-dialog {
|
||
position: absolute;
|
||
left: 0; right: 0;
|
||
background: inherit;
|
||
z-index: 15;
|
||
padding: .1em .8em;
|
||
overflow: hidden;
|
||
color: inherit;
|
||
}
|
||
|
||
.CodeMirror-dialog-top {
|
||
border-bottom: 1px solid #eee;
|
||
top: 0;
|
||
}
|
||
|
||
.CodeMirror-dialog-bottom {
|
||
border-top: 1px solid #eee;
|
||
bottom: 0;
|
||
}
|
||
|
||
.CodeMirror-dialog input {
|
||
border: none;
|
||
outline: none;
|
||
background: transparent;
|
||
width: 20em;
|
||
color: inherit;
|
||
font-family: monospace;
|
||
}
|
||
|
||
.CodeMirror-dialog button {
|
||
font-size: 70%;
|
||
}
|
||
|
||
.CodeMirror-foldmarker {
|
||
color: blue;
|
||
text-shadow: #b9f 1px 1px 2px, #b9f -1px -1px 2px, #b9f 1px -1px 2px, #b9f -1px 1px 2px;
|
||
font-family: arial;
|
||
line-height: .3;
|
||
cursor: pointer;
|
||
}
|
||
.CodeMirror-foldgutter {
|
||
width: .7em;
|
||
}
|
||
.CodeMirror-foldgutter-open,
|
||
.CodeMirror-foldgutter-folded {
|
||
cursor: pointer;
|
||
}
|
||
.CodeMirror-foldgutter-open:after {
|
||
content: "\25BE";
|
||
}
|
||
.CodeMirror-foldgutter-folded:after {
|
||
content: "\25B8";
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Copyright (c) Jupyter Development Team.
|
||
| Distributed under the terms of the Modified BSD License.
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
.CodeMirror {
|
||
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 */
|
||
}
|
||
|
||
.CodeMirror pre {
|
||
padding: 0 var(--jp-code-padding);
|
||
}
|
||
|
||
.jp-CodeMirrorEditor[data-type='inline'] .CodeMirror-dialog {
|
||
background-color: var(--jp-layout-color0);
|
||
color: var(--jp-content-font-color1);
|
||
}
|
||
|
||
/* This causes https://github.com/jupyter/jupyterlab/issues/522 */
|
||
/* May not cause it not because we changed it! */
|
||
.CodeMirror-lines {
|
||
padding: var(--jp-code-padding) 0;
|
||
}
|
||
|
||
.CodeMirror-linenumber {
|
||
padding: 0 8px;
|
||
}
|
||
|
||
.jp-CodeMirrorEditor {
|
||
cursor: text;
|
||
}
|
||
|
||
.jp-CodeMirrorEditor[data-type='inline'] .CodeMirror-cursor {
|
||
border-left: var(--jp-code-cursor-width0) solid var(--jp-editor-cursor-color);
|
||
}
|
||
|
||
/* 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'] .CodeMirror-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'] .CodeMirror-cursor {
|
||
border-left: var(--jp-code-cursor-width2) solid
|
||
var(--jp-editor-cursor-color);
|
||
}
|
||
}
|
||
|
||
.CodeMirror.jp-mod-readOnly .CodeMirror-cursor {
|
||
display: none;
|
||
}
|
||
|
||
.CodeMirror-gutters {
|
||
border-right: 1px solid var(--jp-border-color2);
|
||
background-color: var(--jp-layout-color0);
|
||
}
|
||
|
||
.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;
|
||
}
|
||
|
||
.CodeMirror-selectedtext.cm-searching {
|
||
background-color: var(--jp-search-selected-match-background-color) !important;
|
||
color: var(--jp-search-selected-match-color) !important;
|
||
}
|
||
|
||
.cm-searching {
|
||
background-color: var(
|
||
--jp-search-unselected-match-background-color
|
||
) !important;
|
||
color: var(--jp-search-unselected-match-color) !important;
|
||
}
|
||
|
||
.CodeMirror-focused .CodeMirror-selected {
|
||
background-color: var(--jp-editor-selected-focused-background);
|
||
}
|
||
|
||
.CodeMirror-selected {
|
||
background-color: var(--jp-editor-selected-background);
|
||
}
|
||
|
||
.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);
|
||
}
|
||
|
||
/**
|
||
* Here is our jupyter theme for CodeMirror syntax highlighting
|
||
* This is used in our marked.js syntax highlighting and CodeMirror itself
|
||
* The string "jupyter" is set in ../codemirror/widget.DEFAULT_CODEMIRROR_THEME
|
||
* This came from the classic notebook, which came form highlight.js/GitHub
|
||
*/
|
||
|
||
/**
|
||
* CodeMirror themes are handling the background/color in this way. This works
|
||
* fine for CodeMirror editors outside the notebook, but the notebook styles
|
||
* these things differently.
|
||
*/
|
||
.CodeMirror.cm-s-jupyter {
|
||
background: var(--jp-layout-color0);
|
||
color: var(--jp-content-font-color1);
|
||
}
|
||
|
||
/* In the notebook, we want this styling to be handled by its container */
|
||
.jp-CodeConsole .CodeMirror.cm-s-jupyter,
|
||
.jp-Notebook .CodeMirror.cm-s-jupyter {
|
||
background: transparent;
|
||
}
|
||
|
||
.cm-s-jupyter .CodeMirror-cursor {
|
||
border-left: var(--jp-code-cursor-width0) solid var(--jp-editor-cursor-color);
|
||
}
|
||
.cm-s-jupyter span.cm-keyword {
|
||
color: var(--jp-mirror-editor-keyword-color);
|
||
font-weight: bold;
|
||
}
|
||
.cm-s-jupyter span.cm-atom {
|
||
color: var(--jp-mirror-editor-atom-color);
|
||
}
|
||
.cm-s-jupyter span.cm-number {
|
||
color: var(--jp-mirror-editor-number-color);
|
||
}
|
||
.cm-s-jupyter span.cm-def {
|
||
color: var(--jp-mirror-editor-def-color);
|
||
}
|
||
.cm-s-jupyter span.cm-variable {
|
||
color: var(--jp-mirror-editor-variable-color);
|
||
}
|
||
.cm-s-jupyter span.cm-variable-2 {
|
||
color: var(--jp-mirror-editor-variable-2-color);
|
||
}
|
||
.cm-s-jupyter span.cm-variable-3 {
|
||
color: var(--jp-mirror-editor-variable-3-color);
|
||
}
|
||
.cm-s-jupyter span.cm-punctuation {
|
||
color: var(--jp-mirror-editor-punctuation-color);
|
||
}
|
||
.cm-s-jupyter span.cm-property {
|
||
color: var(--jp-mirror-editor-property-color);
|
||
}
|
||
.cm-s-jupyter span.cm-operator {
|
||
color: var(--jp-mirror-editor-operator-color);
|
||
font-weight: bold;
|
||
}
|
||
.cm-s-jupyter span.cm-comment {
|
||
color: var(--jp-mirror-editor-comment-color);
|
||
font-style: italic;
|
||
}
|
||
.cm-s-jupyter span.cm-string {
|
||
color: var(--jp-mirror-editor-string-color);
|
||
}
|
||
.cm-s-jupyter span.cm-string-2 {
|
||
color: var(--jp-mirror-editor-string-2-color);
|
||
}
|
||
.cm-s-jupyter span.cm-meta {
|
||
color: var(--jp-mirror-editor-meta-color);
|
||
}
|
||
.cm-s-jupyter span.cm-qualifier {
|
||
color: var(--jp-mirror-editor-qualifier-color);
|
||
}
|
||
.cm-s-jupyter span.cm-builtin {
|
||
color: var(--jp-mirror-editor-builtin-color);
|
||
}
|
||
.cm-s-jupyter span.cm-bracket {
|
||
color: var(--jp-mirror-editor-bracket-color);
|
||
}
|
||
.cm-s-jupyter span.cm-tag {
|
||
color: var(--jp-mirror-editor-tag-color);
|
||
}
|
||
.cm-s-jupyter span.cm-attribute {
|
||
color: var(--jp-mirror-editor-attribute-color);
|
||
}
|
||
.cm-s-jupyter span.cm-header {
|
||
color: var(--jp-mirror-editor-header-color);
|
||
}
|
||
.cm-s-jupyter span.cm-quote {
|
||
color: var(--jp-mirror-editor-quote-color);
|
||
}
|
||
.cm-s-jupyter span.cm-link {
|
||
color: var(--jp-mirror-editor-link-color);
|
||
}
|
||
.cm-s-jupyter span.cm-error {
|
||
color: var(--jp-mirror-editor-error-color);
|
||
}
|
||
.cm-s-jupyter span.cm-hr {
|
||
color: #999;
|
||
}
|
||
|
||
.cm-s-jupyter span.cm-tab {
|
||
background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAMCAYAAAAkuj5RAAAAAXNSR0IArs4c6QAAAGFJREFUSMft1LsRQFAQheHPowAKoACx3IgEKtaEHujDjORSgWTH/ZOdnZOcM/sgk/kFFWY0qV8foQwS4MKBCS3qR6ixBJvElOobYAtivseIE120FaowJPN75GMu8j/LfMwNjh4HUpwg4LUAAAAASUVORK5CYII=);
|
||
background-position: right;
|
||
background-repeat: no-repeat;
|
||
}
|
||
|
||
.cm-s-jupyter .CodeMirror-activeline-background,
|
||
.cm-s-jupyter .CodeMirror-gutter {
|
||
background-color: var(--jp-layout-color2);
|
||
}
|
||
|
||
/* Styles for shared cursors (remote cursor locations and selected ranges) */
|
||
.jp-CodeMirrorEditor .remote-caret {
|
||
position: relative;
|
||
border-left: 2px solid black;
|
||
margin-left: -1px;
|
||
margin-right: -1px;
|
||
box-sizing: border-box;
|
||
}
|
||
|
||
.jp-CodeMirrorEditor .remote-caret > div {
|
||
white-space: nowrap;
|
||
position: absolute;
|
||
top: -1.15em;
|
||
padding-bottom: 0.05em;
|
||
left: -2px;
|
||
font-size: 0.95em;
|
||
background-color: rgb(250, 129, 0);
|
||
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: 3;
|
||
transition: opacity 0.3s ease-in-out;
|
||
}
|
||
|
||
.jp-CodeMirrorEditor .remote-caret.hide-name > div {
|
||
transition-delay: 0.7s;
|
||
opacity: 0;
|
||
}
|
||
|
||
.jp-CodeMirrorEditor .remote-caret:hover > div {
|
||
opacity: 1;
|
||
transition-delay: 0s;
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| 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: 0px;
|
||
padding: 0px;
|
||
}
|
||
|
||
.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 */
|
||
|
||
.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: 0em;
|
||
}
|
||
|
||
.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: 12px;
|
||
table-layout: fixed;
|
||
margin-left: auto;
|
||
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 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 table {
|
||
margin-bottom: 1em;
|
||
}
|
||
|
||
.jp-RenderedHTMLCommon p {
|
||
text-align: left;
|
||
margin: 0px;
|
||
}
|
||
|
||
.jp-RenderedHTMLCommon p {
|
||
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);
|
||
}
|
||
/* ...or leave it untouched if they don't */
|
||
[data-jp-theme-light='false'] .jp-RenderedImage img.jp-needs-dark-background {
|
||
}
|
||
[data-jp-theme-light='true'] .jp-RenderedImage img.jp-needs-light-background {
|
||
}
|
||
|
||
.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: 0.8em;
|
||
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.
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
.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 {
|
||
display: flex;
|
||
flex-direction: column;
|
||
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);
|
||
}
|
||
|
||
.jp-FileBrowser-toolbar.jp-Toolbar {
|
||
border-bottom: none;
|
||
height: auto;
|
||
margin: var(--jp-toolbar-header-margin);
|
||
box-shadow: none;
|
||
}
|
||
|
||
.jp-BreadCrumbs {
|
||
flex: 0 0 auto;
|
||
margin: 8px 12px 8px 12px;
|
||
}
|
||
|
||
.jp-BreadCrumbs-item {
|
||
margin: 0px 2px;
|
||
padding: 0px 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: 0px;
|
||
}
|
||
|
||
.jp-BreadCrumbs-item.jp-mod-dropTarget {
|
||
background-color: var(--jp-brand-color2);
|
||
opacity: 0.7;
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Buttons
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
.jp-FileBrowser-toolbar.jp-Toolbar {
|
||
padding: 0px;
|
||
margin: 8px 12px 0px 12px;
|
||
}
|
||
|
||
.jp-FileBrowser-toolbar.jp-Toolbar {
|
||
justify-content: flex-start;
|
||
}
|
||
|
||
.jp-FileBrowser-toolbar.jp-Toolbar .jp-Toolbar-item {
|
||
flex: 0 0 auto;
|
||
padding-left: 0px;
|
||
padding-right: 2px;
|
||
}
|
||
|
||
.jp-FileBrowser-toolbar.jp-Toolbar .jp-ToolbarButtonComponent {
|
||
width: 40px;
|
||
}
|
||
|
||
.jp-FileBrowser-toolbar.jp-Toolbar
|
||
.jp-Toolbar-item:first-child
|
||
.jp-ToolbarButtonComponent {
|
||
width: 72px;
|
||
background: var(--jp-brand-color1);
|
||
}
|
||
|
||
.jp-FileBrowser-toolbar.jp-Toolbar
|
||
.jp-Toolbar-item:first-child
|
||
.jp-ToolbarButtonComponent:focus-visible {
|
||
background-color: var(--jp-brand-color0);
|
||
}
|
||
|
||
.jp-FileBrowser-toolbar.jp-Toolbar
|
||
.jp-Toolbar-item:first-child
|
||
.jp-ToolbarButtonComponent
|
||
.jp-icon3 {
|
||
fill: white;
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| 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-FileBrowser-filterBox {
|
||
padding: 0px;
|
||
flex: 0 0 auto;
|
||
margin: 8px 12px 0px 12px;
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| DirListing
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
.jp-DirListing {
|
||
flex: 1 1 auto;
|
||
display: flex;
|
||
flex-direction: column;
|
||
outline: 0;
|
||
}
|
||
|
||
.jp-DirListing:focus-visible {
|
||
border: 1px solid var(--jp-brand-color1);
|
||
}
|
||
|
||
.jp-DirListing-header {
|
||
flex: 0 0 auto;
|
||
display: flex;
|
||
flex-direction: row;
|
||
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 12px;
|
||
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-id-narrow {
|
||
display: none;
|
||
flex: 0 0 5px;
|
||
padding: 4px 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;
|
||
padding: 4px 12px;
|
||
-webkit-user-select: none;
|
||
-moz-user-select: none;
|
||
-ms-user-select: none;
|
||
user-select: none;
|
||
}
|
||
|
||
.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-itemModified {
|
||
flex: 0 0 125px;
|
||
text-align: right;
|
||
}
|
||
|
||
.jp-DirListing-editor {
|
||
flex: 1 0 64px;
|
||
outline: none;
|
||
border: none;
|
||
}
|
||
|
||
.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: 0px;
|
||
color: var(--jp-ui-font-color1);
|
||
transform: translateX(-40%) translateY(-58%);
|
||
}
|
||
|
||
.jp-DirListing-deadSpace {
|
||
flex: 1 1 auto;
|
||
margin: 0;
|
||
padding: 0;
|
||
list-style-type: none;
|
||
overflow: auto;
|
||
background-color: var(--jp-layout-color1);
|
||
}
|
||
|
||
.jp-Document {
|
||
min-width: 120px;
|
||
min-height: 120px;
|
||
outline: none;
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Copyright (c) Jupyter Development Team.
|
||
| Distributed under the terms of the Modified BSD License.
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Private CSS variables
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
:root {
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Main OutputArea
|
||
| OutputArea has a list of Outputs
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
.jp-OutputArea {
|
||
overflow-y: auto;
|
||
}
|
||
|
||
.jp-OutputArea-child {
|
||
display: flex;
|
||
flex-direction: row;
|
||
}
|
||
|
||
body[data-format='mobile'] .jp-OutputArea-child {
|
||
flex-direction: column;
|
||
}
|
||
|
||
.jp-OutputPrompt {
|
||
flex: 0 0 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;
|
||
}
|
||
|
||
body[data-format='mobile'] .jp-OutputPrompt {
|
||
flex: 0 0 auto;
|
||
text-align: left;
|
||
}
|
||
|
||
.jp-OutputArea-output {
|
||
height: auto;
|
||
overflow: auto;
|
||
user-select: text;
|
||
-moz-user-select: text;
|
||
-webkit-user-select: text;
|
||
-ms-user-select: text;
|
||
}
|
||
|
||
.jp-OutputArea-child .jp-OutputArea-output {
|
||
flex-grow: 1;
|
||
flex-shrink: 1;
|
||
}
|
||
|
||
body[data-format='mobile'] .jp-OutputArea-child .jp-OutputArea-output {
|
||
margin-left: var(--jp-notebook-padding);
|
||
}
|
||
|
||
/**
|
||
* Isolated output.
|
||
*/
|
||
.jp-OutputArea-output.jp-mod-isolated {
|
||
width: 100%;
|
||
display: block;
|
||
}
|
||
|
||
/*
|
||
When drag events occur, `p-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: 0px;
|
||
padding: 0px;
|
||
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;
|
||
}
|
||
|
||
/* 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;
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| 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: 0px;
|
||
flex: 1 1 auto;
|
||
}
|
||
|
||
/* 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-OutputArea-stdin {
|
||
line-height: var(--jp-code-line-height);
|
||
padding-top: var(--jp-code-padding);
|
||
display: flex;
|
||
}
|
||
|
||
.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: 0em 0.25em;
|
||
margin: 0em 0.25em;
|
||
flex: 0 0 70%;
|
||
}
|
||
|
||
.jp-Stdin-input:focus {
|
||
box-shadow: none;
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Output Area View
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
.jp-LinkedOutputView .jp-OutputArea {
|
||
height: 100%;
|
||
display: block;
|
||
}
|
||
|
||
.jp-LinkedOutputView .jp-OutputArea-output:only-child {
|
||
height: 100%;
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| 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: 0px;
|
||
margin: 0px;
|
||
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: 0px;
|
||
bottom: 0px;
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| 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: 0px;
|
||
width: 100%;
|
||
padding: 0px;
|
||
margin: 0px;
|
||
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: flex;
|
||
flex-direction: row;
|
||
overflow: hidden;
|
||
}
|
||
|
||
body[data-format='mobile'] .jp-InputArea {
|
||
flex-direction: column;
|
||
}
|
||
|
||
.jp-InputArea-editor {
|
||
flex: 1 1 auto;
|
||
overflow: hidden;
|
||
}
|
||
|
||
.jp-InputArea-editor {
|
||
/* This is the non-active, default styling */
|
||
border: var(--jp-border-width) solid var(--jp-cell-editor-border-color);
|
||
border-radius: 0px;
|
||
background: var(--jp-cell-editor-background);
|
||
}
|
||
|
||
body[data-format='mobile'] .jp-InputArea-editor {
|
||
margin-left: var(--jp-notebook-padding);
|
||
}
|
||
|
||
.jp-InputPrompt {
|
||
flex: 0 0 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;
|
||
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;
|
||
}
|
||
|
||
body[data-format='mobile'] .jp-InputPrompt {
|
||
flex: 0 0 auto;
|
||
text-align: left;
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Copyright (c) Jupyter Development Team.
|
||
| Distributed under the terms of the Modified BSD License.
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Placeholder
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
.jp-Placeholder {
|
||
display: flex;
|
||
flex-direction: row;
|
||
flex: 1 1 auto;
|
||
}
|
||
|
||
.jp-Placeholder-prompt {
|
||
box-sizing: border-box;
|
||
}
|
||
|
||
.jp-Placeholder-content {
|
||
flex: 1 1 auto;
|
||
border: none;
|
||
background: transparent;
|
||
height: 20px;
|
||
box-sizing: border-box;
|
||
}
|
||
|
||
.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: 0px 0px 2px 0px rgba(0, 0, 0, 0.25);
|
||
background-color: var(--jp-layout-color0);
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| 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: 0px;
|
||
border: none;
|
||
outline: none;
|
||
background: transparent;
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Common input/output
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
.jp-Cell-inputWrapper,
|
||
.jp-Cell-outputWrapper {
|
||
display: flex;
|
||
flex-direction: row;
|
||
padding: 0px;
|
||
margin: 0px;
|
||
/* 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: 200px;
|
||
box-shadow: inset 0 0 6px 2px rgba(0, 0, 0, 0.3);
|
||
margin-left: var(--jp-private-cell-scrolling-output-offset);
|
||
}
|
||
|
||
.jp-CodeCell.jp-mod-outputsScrolled .jp-OutputArea-prompt {
|
||
flex: 0 0
|
||
calc(
|
||
var(--jp-cell-prompt-width) -
|
||
var(--jp-private-cell-scrolling-output-offset)
|
||
);
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| CodeCell
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| MarkdownCell
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
.jp-MarkdownOutput {
|
||
flex: 1 1 auto;
|
||
margin-top: 0;
|
||
margin-bottom: 0;
|
||
padding-left: var(--jp-code-padding);
|
||
}
|
||
|
||
.jp-MarkdownOutput.jp-RenderedHTMLCommon {
|
||
overflow: auto;
|
||
}
|
||
|
||
.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;
|
||
}
|
||
|
||
.jp-showHiddenCellsButton:hover {
|
||
background-color: var(--jp-border-color2) !important;
|
||
}
|
||
|
||
.jp-collapseHeadingButton {
|
||
display: none;
|
||
}
|
||
|
||
.jp-MarkdownCell:hover .jp-collapseHeadingButton {
|
||
display: flex;
|
||
min-height: var(--jp-cell-collapser-min-height);
|
||
position: absolute;
|
||
right: 0;
|
||
top: 0;
|
||
bottom: 0;
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| 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
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Styles
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
.jp-NotebookPanel-toolbar {
|
||
padding: 2px;
|
||
}
|
||
|
||
.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;
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Copyright (c) Jupyter Development Team.
|
||
| Distributed under the terms of the Modified BSD License.
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Private CSS variables
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
:root {
|
||
--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);
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Imports
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| Notebook
|
||
|----------------------------------------------------------------------------*/
|
||
|
||
.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-render * {
|
||
contain: none !important;
|
||
}
|
||
|
||
.jp-Notebook .jp-Cell {
|
||
overflow: visible;
|
||
}
|
||
|
||
.jp-Notebook .jp-Cell .jp-InputPrompt {
|
||
cursor: move;
|
||
float: left;
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| 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 0px 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 0px;
|
||
}
|
||
|
||
.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 0px 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-NotebookTools-tool {
|
||
padding: 0px 12px 0 12px;
|
||
}
|
||
|
||
.jp-ActiveCellTool {
|
||
padding: 12px;
|
||
background-color: var(--jp-layout-color1);
|
||
border-top: none !important;
|
||
}
|
||
|
||
.jp-ActiveCellTool .jp-InputArea-prompt {
|
||
flex: 0 0 auto;
|
||
padding-left: 0px;
|
||
}
|
||
|
||
.jp-ActiveCellTool .jp-InputArea-editor {
|
||
flex: 1 1 auto;
|
||
background: var(--jp-cell-editor-background);
|
||
border-color: var(--jp-cell-editor-border-color);
|
||
}
|
||
|
||
.jp-ActiveCellTool .jp-InputArea-editor .CodeMirror {
|
||
background: transparent;
|
||
}
|
||
|
||
.jp-MetadataEditorTool {
|
||
flex-direction: column;
|
||
padding: 12px 0px 12px 0px;
|
||
}
|
||
|
||
.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 {
|
||
line-height: 1.4;
|
||
}
|
||
|
||
.jp-NotebookTools .jp-select-wrapper {
|
||
margin-top: 4px;
|
||
margin-bottom: 0px;
|
||
}
|
||
|
||
.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;
|
||
}
|
||
|
||
/*-----------------------------------------------------------------------------
|
||
| 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: relative;
|
||
}
|
||
|
||
.jp-Cell-Placeholder-wrapper-body div {
|
||
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: 0px 2px 1px -1px var(--jp-shadow-umbra-color),
|
||
0px 1px 1px 0px var(--jp-shadow-penumbra-color),
|
||
0px 1px 3px 0px var(--jp-shadow-ambient-color);
|
||
--jp-elevation-z2: 0px 3px 1px -2px var(--jp-shadow-umbra-color),
|
||
0px 2px 2px 0px var(--jp-shadow-penumbra-color),
|
||
0px 1px 5px 0px var(--jp-shadow-ambient-color);
|
||
--jp-elevation-z4: 0px 2px 4px -1px var(--jp-shadow-umbra-color),
|
||
0px 4px 5px 0px var(--jp-shadow-penumbra-color),
|
||
0px 1px 10px 0px var(--jp-shadow-ambient-color);
|
||
--jp-elevation-z6: 0px 3px 5px -1px var(--jp-shadow-umbra-color),
|
||
0px 6px 10px 0px var(--jp-shadow-penumbra-color),
|
||
0px 1px 18px 0px var(--jp-shadow-ambient-color);
|
||
--jp-elevation-z8: 0px 5px 5px -3px var(--jp-shadow-umbra-color),
|
||
0px 8px 10px 1px var(--jp-shadow-penumbra-color),
|
||
0px 3px 14px 2px var(--jp-shadow-ambient-color);
|
||
--jp-elevation-z12: 0px 7px 8px -4px var(--jp-shadow-umbra-color),
|
||
0px 12px 17px 2px var(--jp-shadow-penumbra-color),
|
||
0px 5px 22px 4px var(--jp-shadow-ambient-color);
|
||
--jp-elevation-z16: 0px 8px 10px -5px var(--jp-shadow-umbra-color),
|
||
0px 16px 24px 2px var(--jp-shadow-penumbra-color),
|
||
0px 6px 30px 5px var(--jp-shadow-ambient-color);
|
||
--jp-elevation-z20: 0px 10px 13px -6px var(--jp-shadow-umbra-color),
|
||
0px 20px 31px 3px var(--jp-shadow-penumbra-color),
|
||
0px 8px 38px 7px var(--jp-shadow-ambient-color);
|
||
--jp-elevation-z24: 0px 11px 15px -7px var(--jp-shadow-umbra-color),
|
||
0px 24px 38px 3px var(--jp-shadow-penumbra-color),
|
||
0px 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-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: -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-700);
|
||
|
||
--jp-content-font-family: -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: #111111;
|
||
--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: 0px;
|
||
--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: 0px 0px 2px 0px rgba(0, 0, 0, 0.24);
|
||
--jp-toolbar-header-margin: 4px 4px 0px 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-border-color1);
|
||
--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: #05a;
|
||
--jp-mirror-editor-variable-3-color: #085;
|
||
--jp-mirror-editor-punctuation-color: #05a;
|
||
--jp-mirror-editor-property-color: #05a;
|
||
--jp-mirror-editor-operator-color: #aa22ff;
|
||
--jp-mirror-editor-comment-color: #408080;
|
||
--jp-mirror-editor-string-color: #ba2121;
|
||
--jp-mirror-editor-string-2-color: #708;
|
||
--jp-mirror-editor-meta-color: #aa22ff;
|
||
--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;
|
||
|
||
/* 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);
|
||
}
|
||
</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;
|
||
}
|
||
|
||
.CodeMirror.cm-s-jupyter .highlight pre {
|
||
/* weird, but --jp-code-padding defined to be 5px but 4px horizontal padding is hardcoded for pre.CodeMirror-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);
|
||
}
|
||
|
||
/* Using table instead of flexbox so that we can use break-inside property */
|
||
/* CSS rules under this comment should not be required anymore after we move to the JupyterLab 4.0 CSS */
|
||
|
||
|
||
.jp-CodeCell.jp-mod-outputsScrolled .jp-OutputArea-prompt {
|
||
min-width: calc(
|
||
var(--jp-cell-prompt-width) - var(--jp-private-cell-scrolling-output-offset)
|
||
);
|
||
}
|
||
|
||
.jp-OutputArea-child {
|
||
display: table;
|
||
width: 100%;
|
||
}
|
||
|
||
.jp-OutputPrompt {
|
||
display: table-cell;
|
||
vertical-align: top;
|
||
min-width: var(--jp-cell-prompt-width);
|
||
}
|
||
|
||
body[data-format='mobile'] .jp-OutputPrompt {
|
||
display: table-row;
|
||
}
|
||
|
||
.jp-OutputArea-output {
|
||
display: table-cell;
|
||
width: 100%;
|
||
}
|
||
|
||
body[data-format='mobile'] .jp-OutputArea-child .jp-OutputArea-output {
|
||
display: table-row;
|
||
}
|
||
|
||
.jp-OutputArea-output.jp-OutputArea-executeResult {
|
||
width: 100%;
|
||
}
|
||
|
||
/* Hiding the collapser by default */
|
||
.jp-Collapser {
|
||
display: none;
|
||
}
|
||
|
||
@media print {
|
||
.jp-Cell-inputWrapper,
|
||
.jp-Cell-outputWrapper {
|
||
display: block;
|
||
}
|
||
|
||
.jp-OutputArea-child {
|
||
break-inside: avoid-page;
|
||
}
|
||
}
|
||
</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',
|
||
CommonHTML: {
|
||
linebreaks: {
|
||
automatic: true
|
||
}
|
||
}
|
||
});
|
||
|
||
MathJax.Hub.Queue(["Typeset", MathJax.Hub]);
|
||
}
|
||
}
|
||
init_mathjax();
|
||
</script>
|
||
<!-- End of mathjax configuration --></head>
|
||
<body class="jp-Notebook" data-jp-theme-light="true" data-jp-theme-name="JupyterLab Light">
|
||
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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="~~Cerrect~~">~~Cerrect~~<a class="anchor-link" href="#~~Cerrect~~">¶</a></h1><h1 id="~~Corroct~~">~~Corroct~~<a class="anchor-link" href="#~~Corroct~~">¶</a></h1><h1 id="Correct-Programming">Correct Programming<a class="anchor-link" href="#Correct-Programming">¶</a></h1><p>Symbolic Logic in the Laws of Form ○ Python Expressions to Represent Forms ○ Reify Forms in an Environment ○ Building Circuits ○ Simplifying Expressions ○ SAT Solver ○ A Model of Computation</p>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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="Introduction">Introduction<a class="anchor-link" href="#Introduction">¶</a></h1><p>In 1969 George Spencer-Brown (GSB) published <a href="https://en.wikipedia.org/wiki/Laws_of_Form">"Laws of Form"</a> which presented a logical system based on a single action, a distinction, that is both an operation and a value. This notebook describes a Python implementation that mimics the Laws of Form notation and uses it to develop a model of computer circuits.</p>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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="The-Laws-of-Form">The Laws of Form<a class="anchor-link" href="#The-Laws-of-Form">¶</a></h2><p>See <a href="http://www.markability.net/">The Markable Mark</a>.</p>
|
||
<h4 id="Arithmetic">Arithmetic<a class="anchor-link" href="#Arithmetic">¶</a></h4><pre><code>(()) =
|
||
()() = ()
|
||
|
||
</code></pre>
|
||
<h4 id="Calculus">Calculus<a class="anchor-link" href="#Calculus">¶</a></h4><pre><code>A((B)) = AB
|
||
A() = ()
|
||
A(AB) = A(B)
|
||
|
||
</code></pre>
|
||
<p>I call these three laws the <strong>Bricken Basis</strong> after <a href="http://wbricken.com/">William Bricken</a> who figured out that the third law is complete with the other two. GSB had the first two laws and "Each Way" as the basis. (TODO: Find and include the references for all this.)</p>
|
||
<p>(If anything here is unclear read <a href="http://www.markability.net/">The Markable Mark</a>. George Burnett-Stuart has done a fantastic job there explaining the <em>Laws of Form</em>.)</p>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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="Python-Sets-and-Strings-as-Laws-of-Form-Calculus-Expressions">Python Sets and Strings as Laws of Form Calculus Expressions<a class="anchor-link" href="#Python-Sets-and-Strings-as-Laws-of-Form-Calculus-Expressions">¶</a></h2><p>We can use data structures made solely out of Python <code>frozenset</code> and string objects to represent the forms of the Laws of Form notation. I'm going to use the terms "expression" and "form" interchangably in this document.</p>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="k">class</span> <span class="nc">Form</span><span class="p">(</span><span class="nb">frozenset</span><span class="p">):</span>
|
||
|
||
<span class="k">def</span> <span class="fm">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||
<span class="c1"># Because frozenset is immutable, and the contents are all string or frozenset,</span>
|
||
<span class="c1"># we can cache the string repr of a form.</span>
|
||
<span class="k">try</span><span class="p">:</span>
|
||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_str</span>
|
||
<span class="k">except</span> <span class="ne">AttributeError</span><span class="p">:</span>
|
||
<span class="bp">self</span><span class="o">.</span><span class="n">_str</span> <span class="o">=</span> <span class="s1">'(</span><span class="si">%s</span><span class="s1">)'</span> <span class="o">%</span> <span class="s1">' '</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="nb">sorted</span><span class="p">(</span><span class="nb">map</span><span class="p">(</span><span class="nb">str</span><span class="p">,</span> <span class="bp">self</span><span class="p">)))</span>
|
||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_str</span>
|
||
|
||
<span class="fm">__repr__</span> <span class="o">=</span> <span class="fm">__str__</span>
|
||
|
||
|
||
<span class="k">def</span> <span class="nf">F</span><span class="p">(</span><span class="o">*</span><span class="n">terms</span><span class="p">):</span>
|
||
<span class="sd">'''Create a Form from terms.'''</span>
|
||
<span class="k">return</span> <span class="n">Form</span><span class="p">([</span>
|
||
<span class="n">term</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">term</span><span class="p">,</span> <span class="p">(</span><span class="n">basestring</span><span class="p">,</span> <span class="n">Form</span><span class="p">))</span> <span class="k">else</span> <span class="n">F</span><span class="p">(</span><span class="o">*</span><span class="n">term</span><span class="p">)</span>
|
||
<span class="k">for</span> <span class="n">term</span> <span class="ow">in</span> <span class="n">terms</span>
|
||
<span class="p">])</span>
|
||
</pre></div>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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>Define a few variable names.</p>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">,</span> <span class="n">c</span> <span class="o">=</span> <span class="s1">'abc'</span>
|
||
</pre></div>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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>Some examples of forms.</p>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="n">A</span> <span class="o">=</span> <span class="n">F</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">,</span> <span class="n">c</span><span class="p">)</span>
|
||
<span class="n">A</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">
|
||
<pre>(a b c)</pre>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="n">B</span> <span class="o">=</span> <span class="n">F</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="p">(</span><span class="n">b</span><span class="p">,</span> <span class="p">(</span><span class="n">c</span><span class="p">,)))</span>
|
||
<span class="n">B</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">
|
||
<pre>(((c) b) a)</pre>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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>Forms like <code>a b c</code> must be enclosed in a pair of nested containers like so <code>(( a b c ))</code>, this lets us treat them as a single (Python) object without inverting the logical value of the form.</p>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="n">C</span> <span class="o">=</span> <span class="n">F</span><span class="p">((</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">,</span> <span class="n">c</span><span class="p">))</span>
|
||
<span class="n">C</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">
|
||
<pre>((a b c))</pre>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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>Duplicate terms in a form are automatically removed by <code>frozenset</code>.</p>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="n">F</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="p">(</span><span class="n">b</span><span class="p">,),</span> <span class="n">a</span><span class="p">,</span> <span class="p">(</span><span class="n">b</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[6]:</div>
|
||
|
||
|
||
|
||
|
||
<div class="jp-RenderedText jp-OutputArea-output jp-OutputArea-executeResult" data-mime-type="text/plain">
|
||
<pre>((b) a)</pre>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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>Order is irrelevant, again due to <code>frozenset</code>.</p>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="n">F</span><span class="p">(</span><span class="n">b</span><span class="p">,</span> <span class="n">a</span><span class="p">,</span> <span class="n">c</span><span class="p">)</span> <span class="o">==</span> <span class="n">F</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">,</span> <span class="n">c</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[7]:</div>
|
||
|
||
|
||
|
||
|
||
<div class="jp-RenderedText jp-OutputArea-output jp-OutputArea-executeResult" data-mime-type="text/plain">
|
||
<pre>True</pre>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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>It's prefectly okay to create forms out of other forms (not just strings.)</p>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="n">F</span><span class="p">(</span><span class="n">A</span><span class="p">,</span> <span class="p">(</span><span class="n">B</span><span class="p">,</span> <span class="p">(</span><span class="n">C</span><span class="p">,)),</span> <span class="n">a</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">
|
||
<pre>(((((a b c))) (((c) b) a)) (a b c) a)</pre>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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="Mark-and-Void.">Mark and Void.<a class="anchor-link" href="#Mark-and-Void.">¶</a></h2>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="n">Mark</span> <span class="o">=</span> <span class="n">F</span><span class="p">()</span>
|
||
<span class="n">Mark</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[9]:</div>
|
||
|
||
|
||
|
||
|
||
<div class="jp-RenderedText jp-OutputArea-output jp-OutputArea-executeResult" data-mime-type="text/plain">
|
||
<pre>()</pre>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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>There is no way to represent Void directly in a programming language so we have to use the simplest Void-valued form instead.</p>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="n">Void</span> <span class="o">=</span> <span class="n">F</span><span class="p">(</span><span class="n">Mark</span><span class="p">)</span>
|
||
<span class="n">Void</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[10]:</div>
|
||
|
||
|
||
|
||
|
||
<div class="jp-RenderedText jp-OutputArea-output jp-OutputArea-executeResult" data-mime-type="text/plain">
|
||
<pre>(())</pre>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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="Environments">Environments<a class="anchor-link" href="#Environments">¶</a></h2><p>We can use a Python <code>dict</code> as a context or environment that supplies values (Mark or Void) for the names in a form.</p>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="n">env</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">(</span><span class="n">a</span><span class="o">=</span><span class="n">Mark</span><span class="p">,</span> <span class="n">b</span><span class="o">=</span><span class="n">Mark</span><span class="p">,</span> <span class="n">c</span><span class="o">=</span><span class="n">Mark</span><span class="p">)</span>
|
||
</pre></div>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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="The-reify(form,-environment)-Function">The <code>reify(form, environment)</code> Function<a class="anchor-link" href="#The-reify(form,-environment)-Function">¶</a></h2><p>Given forms with string variable names in them we want to be able to substitute values from an environment. If these values are Mark or Void the result will be a pure arithmentic form.</p>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="k">def</span> <span class="nf">reify</span><span class="p">(</span><span class="n">form</span><span class="p">,</span> <span class="n">environment</span><span class="p">):</span>
|
||
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">form</span><span class="p">,</span> <span class="n">basestring</span><span class="p">):</span>
|
||
<span class="k">return</span> <span class="n">environment</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">form</span><span class="p">,</span> <span class="n">form</span><span class="p">)</span>
|
||
<span class="k">return</span> <span class="n">Form</span><span class="p">(</span><span class="n">reify</span><span class="p">(</span><span class="n">inner</span><span class="p">,</span> <span class="n">environment</span><span class="p">)</span> <span class="k">for</span> <span class="n">inner</span> <span class="ow">in</span> <span class="n">form</span><span class="p">)</span>
|
||
</pre></div>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="k">for</span> <span class="n">form</span> <span class="ow">in</span> <span class="p">(</span><span class="n">A</span><span class="p">,</span> <span class="n">B</span><span class="p">,</span> <span class="n">C</span><span class="p">):</span>
|
||
<span class="nb">print</span> <span class="n">form</span><span class="p">,</span> <span class="sa">u</span><span class="s1">'⟶'</span><span class="p">,</span> <span class="n">reify</span><span class="p">(</span><span class="n">form</span><span class="p">,</span> <span class="n">env</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">
|
||
<pre>(a b c) ⟶ (())
|
||
(((c) b) a) ⟶ (((()) ()) ())
|
||
((a b c)) ⟶ ((()))
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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="The-void(form)-Function">The <code>void(form)</code> Function<a class="anchor-link" href="#The-void(form)-Function">¶</a></h2><p>Once the forms have been rendered to pure arithmetic we can use the <code>void()</code> function to find the value of each expression.</p>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="k">def</span> <span class="nf">void</span><span class="p">(</span><span class="n">form</span><span class="p">):</span>
|
||
<span class="k">return</span> <span class="nb">any</span><span class="p">(</span><span class="ow">not</span> <span class="n">void</span><span class="p">(</span><span class="n">i</span><span class="p">)</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">form</span><span class="p">)</span>
|
||
</pre></div>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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>The <code>void()</code> function returns a Boolean value (Python <code>True</code> or <code>False</code>), for convenience let's write a function that returns the Mark or Void value of a form.</p>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="k">def</span> <span class="nf">value_of</span><span class="p">(</span><span class="n">form</span><span class="p">,</span> <span class="n">m</span><span class="o">=</span><span class="n">Mark</span><span class="p">,</span> <span class="n">v</span><span class="o">=</span><span class="n">Void</span><span class="p">):</span>
|
||
<span class="k">return</span> <span class="p">(</span><span class="n">m</span><span class="p">,</span> <span class="n">v</span><span class="p">)[</span><span class="n">void</span><span class="p">(</span><span class="n">form</span><span class="p">)]</span>
|
||
</pre></div>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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>Now we can use the <code>void()</code> function (by way of <code>value_of()</code>) to calculate the base value of each expression structure.</p>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="k">for</span> <span class="n">form</span> <span class="ow">in</span> <span class="p">(</span><span class="n">A</span><span class="p">,</span> <span class="n">B</span><span class="p">,</span> <span class="n">C</span><span class="p">):</span>
|
||
<span class="n">arith</span> <span class="o">=</span> <span class="n">reify</span><span class="p">(</span><span class="n">form</span><span class="p">,</span> <span class="n">env</span><span class="p">)</span>
|
||
<span class="nb">print</span> <span class="n">form</span><span class="p">,</span> <span class="sa">u</span><span class="s1">'⟶'</span><span class="p">,</span> <span class="n">arith</span><span class="p">,</span> <span class="sa">u</span><span class="s1">'⟶'</span><span class="p">,</span> <span class="n">value_of</span><span class="p">(</span><span class="n">arith</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">
|
||
<pre>(a b c) ⟶ (()) ⟶ (())
|
||
(((c) b) a) ⟶ (((()) ()) ()) ⟶ (())
|
||
((a b c)) ⟶ ((())) ⟶ ()
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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="All-Possible-Environments">All Possible Environments<a class="anchor-link" href="#All-Possible-Environments">¶</a></h2><p>For $n$ variables there are $2^n$ possible assignments of the two values of Mark and Void. If we generate environments that each contain one of the possible assignments of names to the base value we can evaluate an expression containing those names and compute its value.</p>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [17]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="kn">from</span> <span class="nn">itertools</span> <span class="kn">import</span> <span class="n">product</span><span class="p">,</span> <span class="n">izip</span>
|
||
|
||
|
||
<span class="n">BASE</span> <span class="o">=</span> <span class="n">Void</span><span class="p">,</span> <span class="n">Mark</span>
|
||
|
||
|
||
<span class="k">def</span> <span class="nf">environments_of_variables</span><span class="p">(</span><span class="o">*</span><span class="n">variables</span><span class="p">):</span>
|
||
<span class="n">universe</span> <span class="o">=</span> <span class="p">[</span><span class="n">BASE</span><span class="p">]</span> <span class="o">*</span> <span class="nb">len</span><span class="p">(</span><span class="n">variables</span><span class="p">)</span>
|
||
<span class="k">for</span> <span class="n">values</span> <span class="ow">in</span> <span class="n">product</span><span class="p">(</span><span class="o">*</span><span class="n">universe</span><span class="p">):</span>
|
||
<span class="k">yield</span> <span class="nb">dict</span><span class="p">(</span><span class="n">izip</span><span class="p">(</span><span class="n">variables</span><span class="p">,</span> <span class="n">values</span><span class="p">))</span>
|
||
|
||
|
||
<span class="n">envs</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">environments_of_variables</span><span class="p">(</span><span class="o">*</span><span class="s1">'abc'</span><span class="p">))</span>
|
||
|
||
|
||
<span class="n">envs</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[17]:</div>
|
||
|
||
|
||
|
||
|
||
<div class="jp-RenderedText jp-OutputArea-output jp-OutputArea-executeResult" data-mime-type="text/plain">
|
||
<pre>[{'a': (()), 'b': (()), 'c': (())},
|
||
{'a': (()), 'b': (()), 'c': ()},
|
||
{'a': (()), 'b': (), 'c': (())},
|
||
{'a': (()), 'b': (), 'c': ()},
|
||
{'a': (), 'b': (()), 'c': (())},
|
||
{'a': (), 'b': (()), 'c': ()},
|
||
{'a': (), 'b': (), 'c': (())},
|
||
{'a': (), 'b': (), 'c': ()}]</pre>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 is a bit hard to read, so let's define a helper function to convert an environment to a string format.</p>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [18]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="k">def</span> <span class="nf">format_env</span><span class="p">(</span><span class="n">env</span><span class="p">,</span> <span class="n">m</span><span class="o">=</span><span class="s1">'()'</span><span class="p">,</span> <span class="n">v</span><span class="o">=</span><span class="s1">' '</span><span class="p">):</span>
|
||
<span class="k">return</span> <span class="s1">' '</span><span class="o">.</span><span class="n">join</span><span class="p">((</span><span class="n">v</span><span class="p">,</span> <span class="n">m</span><span class="p">)[</span><span class="ow">not</span> <span class="n">env</span><span class="p">[</span><span class="n">k</span><span class="p">]]</span> <span class="k">for</span> <span class="n">k</span> <span class="ow">in</span> <span class="nb">sorted</span><span class="p">(</span><span class="n">env</span><span class="p">))</span>
|
||
|
||
<span class="c1"># Note that Mark is an empty frozenset so in a Boolean context in Python it is False,</span>
|
||
<span class="c1"># likewise Void is a set with one member, so Python considers it True in a Boolean context.</span>
|
||
<span class="c1"># The `not` in the expression is just to force such a Boolean context, and we compensate</span>
|
||
<span class="c1"># by putting `v` in the zero-is-False position in the indexed tuple.</span>
|
||
</pre></div>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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>Now we can print out the environments in a table. Notice that it looks just like a list of the eight three-bit binary numbers.</p>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [19]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="nb">print</span> <span class="s1">'i a b c i in Binary'</span>
|
||
<span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">env</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">envs</span><span class="p">):</span>
|
||
<span class="nb">print</span> <span class="n">i</span><span class="p">,</span> <span class="n">format_env</span><span class="p">(</span><span class="n">env</span><span class="p">,</span> <span class="n">v</span><span class="o">=</span><span class="s1">'--'</span><span class="p">),</span> <span class="s1">'</span><span class="si">%3s</span><span class="s1">'</span> <span class="o">%</span> <span class="p">(</span><span class="nb">bin</span><span class="p">(</span><span class="n">i</span><span class="p">)[</span><span class="mi">2</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">
|
||
<pre>i a b c i in Binary
|
||
0 -- -- -- 0
|
||
1 -- -- () 1
|
||
2 -- () -- 10
|
||
3 -- () () 11
|
||
4 () -- -- 100
|
||
5 () -- () 101
|
||
6 () () -- 110
|
||
7 () () () 111
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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="Reify-the-Forms-with-Each-Meaning">Reify the Forms with Each Meaning<a class="anchor-link" href="#Reify-the-Forms-with-Each-Meaning">¶</a></h2><p>Let's pick one of the expressions and iterate through the environments showing the result of reifying that expression in that environment.</p>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [20]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="nb">print</span> <span class="n">B</span>
|
||
<span class="nb">print</span> <span class="s1">'-----------'</span>
|
||
<span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">env</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">envs</span><span class="p">):</span>
|
||
<span class="n">e</span> <span class="o">=</span> <span class="n">reify</span><span class="p">(</span><span class="n">B</span><span class="p">,</span> <span class="n">env</span><span class="p">)</span>
|
||
<span class="nb">print</span> <span class="n">i</span><span class="p">,</span> <span class="n">format_env</span><span class="p">(</span><span class="n">env</span><span class="p">,</span> <span class="n">v</span><span class="o">=</span><span class="s1">'--'</span><span class="p">),</span> <span class="sa">u</span><span class="s1">'⟶'</span><span class="p">,</span> <span class="n">e</span><span class="p">,</span> <span class="sa">u</span><span class="s1">'⟶'</span><span class="p">,</span> <span class="n">value_of</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="n">m</span><span class="o">=</span><span class="s1">'()'</span><span class="p">,</span> <span class="n">v</span><span class="o">=</span><span class="s1">''</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">
|
||
<pre>(((c) b) a)
|
||
-----------
|
||
0 -- -- -- ⟶ ((((())) (())) (())) ⟶ ()
|
||
1 -- -- () ⟶ (((())) (())) ⟶
|
||
2 -- () -- ⟶ ((((())) ()) (())) ⟶ ()
|
||
3 -- () () ⟶ (((()) ()) (())) ⟶ ()
|
||
4 () -- -- ⟶ ((((())) (())) ()) ⟶
|
||
5 () -- () ⟶ (((())) ()) ⟶
|
||
6 () () -- ⟶ ((((())) ()) ()) ⟶
|
||
7 () () () ⟶ (((()) ()) ()) ⟶
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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="Truth-Table">Truth Table<a class="anchor-link" href="#Truth-Table">¶</a></h2><p>Let's render the above as a <a href="https://en.wikipedia.org/wiki/Truth_table">Truth Table</a>.</p>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [21]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="k">def</span> <span class="nf">truth_table_3</span><span class="p">(</span><span class="n">expression</span><span class="p">):</span>
|
||
<span class="nb">print</span> <span class="n">expression</span>
|
||
<span class="nb">print</span> <span class="s1">' a b c | Value'</span>
|
||
<span class="nb">print</span> <span class="s1">'---------+------'</span>
|
||
<span class="k">for</span> <span class="n">E</span> <span class="ow">in</span> <span class="n">envs</span><span class="p">:</span>
|
||
<span class="n">e</span> <span class="o">=</span> <span class="n">reify</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">E</span><span class="p">)</span>
|
||
<span class="nb">print</span> <span class="n">format_env</span><span class="p">(</span><span class="n">E</span><span class="p">),</span> <span class="s1">'|'</span><span class="p">,</span> <span class="n">value_of</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="n">m</span><span class="o">=</span><span class="s1">'()'</span><span class="p">,</span> <span class="n">v</span><span class="o">=</span><span class="s1">''</span><span class="p">)</span>
|
||
</pre></div>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [22]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="n">truth_table_3</span><span class="p">(</span><span class="n">B</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">
|
||
<pre>(((c) b) a)
|
||
a b c | Value
|
||
---------+------
|
||
| ()
|
||
() |
|
||
() | ()
|
||
() () | ()
|
||
() |
|
||
() () |
|
||
() () |
|
||
() () () |
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 makes it clear that <em>each expression in Laws of Form calculus is describing a digital Boolean circuit</em>. The names are its inputs and its Void/Mark value is its output. Each boundary is a <a href="https://en.wikipedia.org/wiki/Logical_NOR">multi-input <strong>NOR</strong> gate</a>, known as the Peirce arrow or Quine dagger (See <a href="https://en.wikipedia.org/wiki/Sheffer_stroke">Sheffer stroke</a> and <a href="https://en.wikipedia.org/wiki/NOR_gate">NOR gate</a>.) Instead of two Boolean values there is only one value and non-existance.</p>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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="Let's-build-Circuits">Let's build Circuits<a class="anchor-link" href="#Let's-build-Circuits">¶</a></h1><p>In order to work with expressions as digital circuits, let's define some helper functions that will create logic circuits out of simpler forms. The names of the functions below reflect the choice of Mark as Boolean <code>True</code> but this is <a href="#Appendix:-Duals">just a convention</a>.</p>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [23]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="n">nor</span> <span class="o">=</span> <span class="k">lambda</span> <span class="o">*</span><span class="n">bits</span><span class="p">:</span> <span class="n">F</span><span class="p">(</span><span class="o">*</span><span class="n">bits</span><span class="p">)</span>
|
||
<span class="n">or_</span> <span class="o">=</span> <span class="k">lambda</span> <span class="o">*</span><span class="n">bits</span><span class="p">:</span> <span class="n">F</span><span class="p">(</span><span class="n">bits</span><span class="p">)</span>
|
||
<span class="n">and_</span> <span class="o">=</span> <span class="k">lambda</span> <span class="o">*</span><span class="n">bits</span><span class="p">:</span> <span class="n">Form</span><span class="p">(</span><span class="n">F</span><span class="p">(</span><span class="n">bit</span><span class="p">)</span> <span class="k">for</span> <span class="n">bit</span> <span class="ow">in</span> <span class="n">bits</span><span class="p">)</span>
|
||
<span class="n">nand</span> <span class="o">=</span> <span class="k">lambda</span> <span class="o">*</span><span class="n">bits</span><span class="p">:</span> <span class="n">nor</span><span class="p">(</span><span class="n">and_</span><span class="p">(</span><span class="o">*</span><span class="n">bits</span><span class="p">))</span>
|
||
<span class="n">nxor</span> <span class="o">=</span> <span class="n">eqiv</span> <span class="o">=</span> <span class="k">lambda</span> <span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">:</span> <span class="n">F</span><span class="p">((</span><span class="n">a</span><span class="p">,</span> <span class="p">(</span><span class="n">b</span><span class="p">,)),</span> <span class="p">((</span><span class="n">a</span><span class="p">,),</span> <span class="n">b</span><span class="p">))</span>
|
||
<span class="n">xor</span> <span class="o">=</span> <span class="k">lambda</span> <span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">:</span> <span class="n">F</span><span class="p">(</span><span class="n">nxor</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">))</span>
|
||
|
||
<span class="c1"># To build logical expressions with Void as Boolean True use these functions.</span>
|
||
<span class="n">anti_nor</span> <span class="o">=</span> <span class="n">nand</span>
|
||
<span class="n">anti_or</span> <span class="o">=</span> <span class="n">and_</span>
|
||
<span class="n">anti_and</span> <span class="o">=</span> <span class="n">or_</span>
|
||
<span class="n">anti_nand</span> <span class="o">=</span> <span class="n">nor</span>
|
||
<span class="n">anti_eqiv</span> <span class="o">=</span> <span class="n">xor</span>
|
||
<span class="n">anti_xor</span> <span class="o">=</span> <span class="n">eqiv</span>
|
||
</pre></div>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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>Some examples:</p>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [24]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">,</span> <span class="n">c</span> <span class="o">=</span> <span class="s1">'abc'</span>
|
||
|
||
|
||
<span class="n">some_expressions</span> <span class="o">=</span> <span class="p">(</span>
|
||
<span class="n">nor</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">,</span> <span class="n">c</span><span class="p">),</span>
|
||
<span class="n">or_</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">,</span> <span class="n">c</span><span class="p">),</span>
|
||
<span class="n">and_</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">,</span> <span class="n">c</span><span class="p">),</span>
|
||
<span class="n">nand</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">,</span> <span class="n">c</span><span class="p">),</span>
|
||
<span class="n">xor</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">),</span>
|
||
<span class="n">eqiv</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">),</span>
|
||
<span class="n">xor</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">xor</span><span class="p">(</span><span class="n">b</span><span class="p">,</span> <span class="n">c</span><span class="p">)),</span>
|
||
<span class="p">)</span>
|
||
|
||
|
||
<span class="k">for</span> <span class="n">expression</span> <span class="ow">in</span> <span class="n">some_expressions</span><span class="p">:</span>
|
||
<span class="nb">print</span> <span class="n">expression</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">
|
||
<pre>(a b c)
|
||
((a b c))
|
||
((a) (b) (c))
|
||
(((a) (b) (c)))
|
||
((((a) b) ((b) a)))
|
||
(((a) b) ((b) a))
|
||
((((((((b) c) ((c) b)))) a) (((((b) c) ((c) b))) (a))))
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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>And let's rewrite the <code>truth_table_3()</code> function to make it work for any number of variables.</p>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [25]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="k">def</span> <span class="nf">yield_variables_of</span><span class="p">(</span><span class="n">expression</span><span class="p">):</span>
|
||
<span class="sd">'''Yield all string members of an expression.'''</span>
|
||
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">basestring</span><span class="p">):</span>
|
||
<span class="k">yield</span> <span class="n">expression</span>
|
||
<span class="k">else</span><span class="p">:</span>
|
||
<span class="k">for</span> <span class="n">inner</span> <span class="ow">in</span> <span class="n">expression</span><span class="p">:</span>
|
||
<span class="k">for</span> <span class="n">leaf</span> <span class="ow">in</span> <span class="n">yield_variables_of</span><span class="p">(</span><span class="n">inner</span><span class="p">):</span>
|
||
<span class="k">yield</span> <span class="n">leaf</span>
|
||
|
||
|
||
<span class="k">def</span> <span class="nf">collect_names</span><span class="p">(</span><span class="n">expression</span><span class="p">):</span>
|
||
<span class="sd">'''Return a set of the variables mentioned in an expression.'''</span>
|
||
<span class="k">return</span> <span class="nb">set</span><span class="p">(</span><span class="n">yield_variables_of</span><span class="p">(</span><span class="n">expression</span><span class="p">))</span>
|
||
|
||
|
||
<span class="k">def</span> <span class="nf">truth_table</span><span class="p">(</span><span class="n">expression</span><span class="p">):</span>
|
||
<span class="sd">'''Print a truth table for an expression.'''</span>
|
||
<span class="n">names</span> <span class="o">=</span> <span class="nb">sorted</span><span class="p">(</span><span class="n">collect_names</span><span class="p">(</span><span class="n">expression</span><span class="p">))</span>
|
||
<span class="n">header</span> <span class="o">=</span> <span class="s1">' '</span> <span class="o">+</span> <span class="s1">' '</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">names</span><span class="p">)</span>
|
||
<span class="n">n</span> <span class="o">=</span> <span class="mi">1</span> <span class="o">+</span> <span class="nb">len</span><span class="p">(</span><span class="n">header</span><span class="p">)</span>
|
||
<span class="n">header</span> <span class="o">+=</span> <span class="s1">' | Value'</span>
|
||
<span class="nb">print</span> <span class="n">expression</span>
|
||
<span class="nb">print</span> <span class="n">header</span>
|
||
<span class="nb">print</span> <span class="s1">'-'</span> <span class="o">*</span> <span class="n">n</span> <span class="o">+</span> <span class="s1">'+------'</span>
|
||
<span class="k">for</span> <span class="n">env</span> <span class="ow">in</span> <span class="n">environments_of_variables</span><span class="p">(</span><span class="o">*</span><span class="n">names</span><span class="p">):</span>
|
||
<span class="n">e</span> <span class="o">=</span> <span class="n">reify</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">env</span><span class="p">)</span>
|
||
<span class="nb">print</span> <span class="n">format_env</span><span class="p">(</span><span class="n">env</span><span class="p">),</span> <span class="s1">'|'</span><span class="p">,</span> <span class="p">[</span><span class="s1">'()'</span><span class="p">,</span> <span class="s1">''</span><span class="p">][</span><span class="n">void</span><span class="p">(</span><span class="n">e</span><span class="p">)]</span>
|
||
</pre></div>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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>We can use this <code>truth_table()</code> function to examine the expressions we created above.</p>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [26]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="n">truth_table</span><span class="p">(</span><span class="n">nor</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">,</span> <span class="n">c</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">
|
||
<pre>(a b c)
|
||
a b c | Value
|
||
---------+------
|
||
| ()
|
||
() |
|
||
() |
|
||
() () |
|
||
() |
|
||
() () |
|
||
() () |
|
||
() () () |
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [27]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="n">truth_table</span><span class="p">(</span><span class="n">or_</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">,</span> <span class="n">c</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">
|
||
<pre>((a b c))
|
||
a b c | Value
|
||
---------+------
|
||
|
|
||
() | ()
|
||
() | ()
|
||
() () | ()
|
||
() | ()
|
||
() () | ()
|
||
() () | ()
|
||
() () () | ()
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [28]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="n">truth_table</span><span class="p">(</span><span class="n">and_</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">,</span> <span class="n">c</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">
|
||
<pre>((a) (b) (c))
|
||
a b c | Value
|
||
---------+------
|
||
|
|
||
() |
|
||
() |
|
||
() () |
|
||
() |
|
||
() () |
|
||
() () |
|
||
() () () | ()
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [29]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="n">truth_table</span><span class="p">(</span><span class="n">xor</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</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">
|
||
<pre>((((a) b) ((b) a)))
|
||
a b | Value
|
||
------+------
|
||
|
|
||
() | ()
|
||
() | ()
|
||
() () |
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [30]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="n">truth_table</span><span class="p">(</span><span class="n">eqiv</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</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">
|
||
<pre>(((a) b) ((b) a))
|
||
a b | Value
|
||
------+------
|
||
| ()
|
||
() |
|
||
() |
|
||
() () | ()
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [31]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="n">truth_table</span><span class="p">(</span><span class="n">xor</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">xor</span><span class="p">(</span><span class="n">b</span><span class="p">,</span> <span class="n">c</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">
|
||
<pre>((((((((b) c) ((c) b)))) a) (((((b) c) ((c) b))) (a))))
|
||
a b c | Value
|
||
---------+------
|
||
|
|
||
() | ()
|
||
() | ()
|
||
() () |
|
||
() | ()
|
||
() () |
|
||
() () |
|
||
() () () | ()
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [32]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="n">E1</span> <span class="o">=</span> <span class="n">and_</span><span class="p">(</span>
|
||
<span class="n">or_</span><span class="p">(</span><span class="n">and_</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">),</span> <span class="n">and_</span><span class="p">(</span><span class="n">b</span><span class="p">,</span> <span class="n">c</span><span class="p">),</span> <span class="n">and_</span><span class="p">(</span><span class="n">c</span><span class="p">,</span> <span class="n">a</span><span class="p">)),</span> <span class="c1"># Any two variables...</span>
|
||
<span class="n">nand</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">,</span> <span class="n">c</span><span class="p">)</span> <span class="c1"># ...but not all three.</span>
|
||
<span class="p">)</span>
|
||
<span class="n">truth_table</span><span class="p">(</span><span class="n">E1</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">
|
||
<pre>((((((a) (b)) ((a) (c)) ((b) (c))))) ((((a) (b) (c)))))
|
||
a b c | Value
|
||
---------+------
|
||
|
|
||
() |
|
||
() |
|
||
() () | ()
|
||
() |
|
||
() () | ()
|
||
() () | ()
|
||
() () () |
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 is a <a href="https://en.wikipedia.org/wiki/Brute-force_search">brute-force</a> <a href="https://en.wikipedia.org/wiki/Boolean_satisfiability_problem">SAT</a> <a href="https://en.wikipedia.org/wiki/Boolean_satisfiability_problem#Algorithms_for_solving_SAT">solver</a> that doesn't even bother to stop once it's found a solution.</p>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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="Expressions-from-Truth-Tables">Expressions from Truth Tables<a class="anchor-link" href="#Expressions-from-Truth-Tables">¶</a></h2><p>Sometimes we will have a function for which we know the behavior (truth table) but not an expression and we want the expression. For example, imagine that we didn't just create the expression for this table:</p>
|
||
<pre><code> a b c | Value
|
||
---------+------
|
||
|
|
||
() |
|
||
() |
|
||
() () | ()
|
||
() |
|
||
() () | ()
|
||
() () | ()
|
||
() () () |
|
||
|
||
</code></pre>
|
||
<h3 id="Each-Row-can-be-Represented-as-an-Expression">Each Row can be Represented as an Expression<a class="anchor-link" href="#Each-Row-can-be-Represented-as-an-Expression">¶</a></h3><p>To write an expression for this table, first we should understand that each row can be represented as an expression.</p>
|
||
<pre><code> ⟶ ( a b c )
|
||
() ⟶ ( a b (c))
|
||
() ⟶ ( a (b) c )
|
||
() () ⟶ ( a (b) (c))
|
||
() ⟶ ((a) b c )
|
||
() () ⟶ ((a) b (c))
|
||
() () ⟶ ((a) (b) c )
|
||
() () () ⟶ ((a) (b) (c))
|
||
|
||
</code></pre>
|
||
<p>Each of the above expressions will be true (Mark-valued) for only one possible combination of the three input variables. For example, let's look at the sixth expression above:</p>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [33]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="n">e6</span> <span class="o">=</span> <span class="n">F</span><span class="p">((</span><span class="n">a</span><span class="p">,),</span> <span class="n">b</span><span class="p">,</span> <span class="p">(</span><span class="n">c</span><span class="p">,))</span>
|
||
<span class="n">truth_table</span><span class="p">(</span><span class="n">e6</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">
|
||
<pre>((a) (c) b)
|
||
a b c | Value
|
||
---------+------
|
||
|
|
||
() |
|
||
() |
|
||
() () |
|
||
() |
|
||
() () | ()
|
||
() () |
|
||
() () () |
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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>To make an expression that is Mark-valued for just certain rows of the table, pick those rows' expressions,</p>
|
||
<pre><code> () () | ( a (b) (c))
|
||
() () | ((a) b (c))
|
||
() () | ((a) (b) c )
|
||
|
||
</code></pre>
|
||
<p>And write them down as terms in an <strong>OR</strong> expression:</p>
|
||
<pre><code>E = (a(b)(c)) ((a)b(c)) ((a)(b)c)
|
||
|
||
</code></pre>
|
||
<p>In conventional notation this is called <a href="https://en.wikipedia.org/wiki/Disjunctive_normal_form">Disjunctive normal form</a>:</p>
|
||
<pre><code>E = (¬a ∧ b ∧ c) ∨ (a ∧ ¬b ∧ c) ∨ (a ∧ b ∧ ¬c)
|
||
|
||
</code></pre>
|
||
<p>Here it is in action:</p>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [34]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="n">e4</span> <span class="o">=</span> <span class="p">(</span> <span class="n">a</span><span class="p">,</span> <span class="p">(</span><span class="n">b</span><span class="p">,),</span> <span class="p">(</span><span class="n">c</span><span class="p">,))</span>
|
||
<span class="n">e6</span> <span class="o">=</span> <span class="p">((</span><span class="n">a</span><span class="p">,),</span> <span class="n">b</span><span class="p">,</span> <span class="p">(</span><span class="n">c</span><span class="p">,))</span>
|
||
<span class="n">e7</span> <span class="o">=</span> <span class="p">((</span><span class="n">a</span><span class="p">,),</span> <span class="p">(</span><span class="n">b</span><span class="p">,),</span> <span class="n">c</span> <span class="p">)</span>
|
||
|
||
<span class="n">E2</span> <span class="o">=</span> <span class="n">or_</span><span class="p">(</span><span class="n">e4</span><span class="p">,</span> <span class="n">e6</span><span class="p">,</span> <span class="n">e7</span><span class="p">)</span>
|
||
|
||
<span class="n">truth_table</span><span class="p">(</span><span class="n">E2</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">
|
||
<pre>((((a) (b) c) ((a) (c) b) ((b) (c) a)))
|
||
a b c | Value
|
||
---------+------
|
||
|
|
||
() |
|
||
() |
|
||
() () | ()
|
||
() |
|
||
() () | ()
|
||
() () | ()
|
||
() () () |
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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="Equivalence">Equivalence<a class="anchor-link" href="#Equivalence">¶</a></h3><p>Note that the expression E2 above is equivalent to the ealier expression E1 that has the same truth table, in other words:</p>
|
||
<pre><code>((((((a) (b)) ((b) (c)) ((c) (a))))) ((((a) (b) (c)))))
|
||
|
||
</code></pre>
|
||
<p>equals</p>
|
||
<pre><code>(((a (b) (c)) ((a) b (c)) ((a) (b) c)))
|
||
|
||
</code></pre>
|
||
<p>We can demonstrate this equivalence by evaluating the expression formed by <code>eqiv()</code> from these two.</p>
|
||
<p>For every environment (from the set of possible values for the variables) if both expressions have the same value when evaluated then the <code>eqiv()</code> of those expressions will be Mark-valued (true in our chosen context.)</p>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [35]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="n">truth_table</span><span class="p">(</span><span class="n">eqiv</span><span class="p">(</span><span class="n">E1</span><span class="p">,</span> <span class="n">E2</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">
|
||
<pre>(((((((((a) (b)) ((a) (c)) ((b) (c))))) ((((a) (b) (c)))))) ((((a) (b) c) ((a) (c) b) ((b) (c) a)))) (((((((a) (b)) ((a) (c)) ((b) (c))))) ((((a) (b) (c))))) (((((a) (b) c) ((a) (c) b) ((b) (c) a))))))
|
||
a b c | Value
|
||
---------+------
|
||
| ()
|
||
() | ()
|
||
() | ()
|
||
() () | ()
|
||
() | ()
|
||
() () | ()
|
||
() () | ()
|
||
() () () | ()
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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>The truth table above shows that the equivalence expression is true (Mark-valued by our current convention) for all possible assignments of Mark/Void to the three variables <code>a</code>, <code>b</code>, and <code>c</code>. This indicates that the expression is a <strong>tautology</strong>.</p>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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="Half-Bit-Adder"><a href="https://en.wikipedia.org/wiki/Adder_%28electronics%29#Half_adder">Half-Bit Adder</a><a class="anchor-link" href="#Half-Bit-Adder">¶</a></h2><p>If you have two binary digits ("bits") and you are interested in the (binary) sum of these digits you will need two circuits, one for the "ones place" and one for the "twos place" or "carry bit".</p>
|
||
<p>Consider:</p>
|
||
<pre><code>a b | c s
|
||
----+----
|
||
0 0 | 0 0
|
||
0 1 | 0 1
|
||
1 0 | 0 1
|
||
1 1 | 1 0
|
||
|
||
</code></pre>
|
||
<p>Treating each output column ('c' for carry, 's' for sum) as a single expression, it's easy to see that the carry bit is just <strong>AND</strong> and the sum bit is just <strong>XOR</strong> of the two input bits.</p>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [36]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="n">a</span><span class="p">,</span> <span class="n">b</span> <span class="o">=</span> <span class="s1">'ab'</span>
|
||
|
||
|
||
<span class="n">half_bit_adder</span> <span class="o">=</span> <span class="p">{</span>
|
||
<span class="s1">'Sum'</span><span class="p">:</span> <span class="n">xor</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">),</span>
|
||
<span class="s1">'Carry'</span><span class="p">:</span> <span class="n">and_</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">),</span>
|
||
<span class="p">}</span>
|
||
|
||
|
||
<span class="k">for</span> <span class="n">name</span><span class="p">,</span> <span class="n">expr</span> <span class="ow">in</span> <span class="n">half_bit_adder</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
|
||
<span class="nb">print</span> <span class="n">name</span>
|
||
<span class="n">truth_table</span><span class="p">(</span><span class="n">expr</span><span class="p">)</span>
|
||
<span class="nb">print</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">
|
||
<pre>Carry
|
||
((a) (b))
|
||
a b | Value
|
||
------+------
|
||
|
|
||
() |
|
||
() |
|
||
() () | ()
|
||
|
||
Sum
|
||
((((a) b) ((b) a)))
|
||
a b | Value
|
||
------+------
|
||
|
|
||
() | ()
|
||
() | ()
|
||
() () |
|
||
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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="Full-bit-Adder"><a href="https://en.wikipedia.org/wiki/Adder_%28electronics%29#Full_adder">Full-bit Adder</a><a class="anchor-link" href="#Full-bit-Adder">¶</a></h2><p>In order to add two multi-bit binary numbers we need adder circuits that are designed to work with <em>three</em> input bits: the two bits to add together and a carry bit from the previous addition:</p>
|
||
<pre><code> a b Cin Sum Cout
|
||
0 0 0 | 0 0
|
||
0 0 1 | 1 0
|
||
0 1 0 | 1 0
|
||
0 1 1 | 0 1
|
||
1 0 0 | 1 0
|
||
1 0 1 | 0 1
|
||
1 1 0 | 0 1
|
||
1 1 1 | 1 1
|
||
|
||
</code></pre>
|
||
<p>Looking back at our table of three-variable expressions:</p>
|
||
<pre><code> ⟶ ( a b c )
|
||
() ⟶ ( a b (c))
|
||
() ⟶ ( a (b) c )
|
||
() () ⟶ ( a (b) (c))
|
||
() ⟶ ((a) b c )
|
||
() () ⟶ ((a) b (c))
|
||
() () ⟶ ((a) (b) c )
|
||
() () () ⟶ ((a) (b) (c))
|
||
|
||
</code></pre>
|
||
<p>We can easily determine expressions for sum and carry:</p>
|
||
<pre><code>Sum = (a b (c)) (a (b) c) ((a) b c) ((a) (b) (c))
|
||
|
||
Cout = (a (b) (c)) ((a) b (c)) ((a) (b) c) ((a) (b) (c))
|
||
</code></pre>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [37]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="n">Sum</span> <span class="o">=</span> <span class="n">F</span><span class="p">((</span> <span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">,</span> <span class="p">(</span><span class="n">c</span><span class="p">,)),</span> <span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="p">(</span><span class="n">b</span><span class="p">,),</span> <span class="n">c</span><span class="p">),</span> <span class="p">((</span><span class="n">a</span><span class="p">,),</span> <span class="n">b</span><span class="p">,</span> <span class="n">c</span><span class="p">),</span> <span class="p">((</span><span class="n">a</span><span class="p">,),</span> <span class="p">(</span><span class="n">b</span><span class="p">,),</span> <span class="p">(</span><span class="n">c</span><span class="p">,))</span> <span class="p">),)</span>
|
||
<span class="n">Carry</span> <span class="o">=</span> <span class="n">F</span><span class="p">((</span> <span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="p">(</span><span class="n">b</span><span class="p">,),</span> <span class="p">(</span><span class="n">c</span><span class="p">,)),</span> <span class="p">((</span><span class="n">a</span><span class="p">,),</span> <span class="n">b</span><span class="p">,</span> <span class="p">(</span><span class="n">c</span><span class="p">,)),</span> <span class="p">((</span><span class="n">a</span><span class="p">,),</span> <span class="p">(</span><span class="n">b</span><span class="p">,),</span> <span class="n">c</span><span class="p">),</span> <span class="p">((</span><span class="n">a</span><span class="p">,),</span> <span class="p">(</span><span class="n">b</span><span class="p">,),</span> <span class="p">(</span><span class="n">c</span><span class="p">,))</span> <span class="p">),)</span>
|
||
</pre></div>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [38]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="nb">print</span> <span class="s1">'Sum'</span>
|
||
<span class="n">truth_table</span><span class="p">(</span><span class="n">Sum</span><span class="p">)</span>
|
||
<span class="nb">print</span>
|
||
<span class="nb">print</span> <span class="s1">'Carry'</span>
|
||
<span class="n">truth_table</span><span class="p">(</span><span class="n">Carry</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">
|
||
<pre>Sum
|
||
((((a) (b) (c)) ((a) b c) ((b) a c) ((c) a b)))
|
||
a b c | Value
|
||
---------+------
|
||
|
|
||
() | ()
|
||
() | ()
|
||
() () |
|
||
() | ()
|
||
() () |
|
||
() () |
|
||
() () () | ()
|
||
|
||
Carry
|
||
((((a) (b) (c)) ((a) (b) c) ((a) (c) b) ((b) (c) a)))
|
||
a b c | Value
|
||
---------+------
|
||
|
|
||
() |
|
||
() |
|
||
() () | ()
|
||
() |
|
||
() () | ()
|
||
() () | ()
|
||
() () () | ()
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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>Let's make a <code>full_bit_adder()</code> function that can define new expressions in terms of variables (or expressions) passed into it.</p>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [39]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="k">def</span> <span class="nf">full_bit_adder</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">,</span> <span class="n">c</span><span class="p">):</span>
|
||
<span class="k">return</span> <span class="p">(</span>
|
||
<span class="n">F</span><span class="p">((</span> <span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">,</span> <span class="p">(</span><span class="n">c</span><span class="p">,)),</span> <span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="p">(</span><span class="n">b</span><span class="p">,),</span> <span class="n">c</span><span class="p">),</span> <span class="p">((</span><span class="n">a</span><span class="p">,),</span> <span class="n">b</span><span class="p">,</span> <span class="n">c</span><span class="p">),</span> <span class="p">((</span><span class="n">a</span><span class="p">,),</span> <span class="p">(</span><span class="n">b</span><span class="p">,),</span> <span class="p">(</span><span class="n">c</span><span class="p">,))</span> <span class="p">),),</span>
|
||
<span class="n">F</span><span class="p">((</span> <span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="p">(</span><span class="n">b</span><span class="p">,),</span> <span class="p">(</span><span class="n">c</span><span class="p">,)),</span> <span class="p">((</span><span class="n">a</span><span class="p">,),</span> <span class="n">b</span><span class="p">,</span> <span class="p">(</span><span class="n">c</span><span class="p">,)),</span> <span class="p">((</span><span class="n">a</span><span class="p">,),</span> <span class="p">(</span><span class="n">b</span><span class="p">,),</span> <span class="n">c</span><span class="p">),</span> <span class="p">((</span><span class="n">a</span><span class="p">,),</span> <span class="p">(</span><span class="n">b</span><span class="p">,),</span> <span class="p">(</span><span class="n">c</span><span class="p">,))</span> <span class="p">),),</span>
|
||
<span class="p">)</span>
|
||
</pre></div>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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>Now we can chain it to make a set of circuits that define together an eight-bit adder circuit with carry.</p>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [40]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="n">sum0</span><span class="p">,</span> <span class="n">cout</span> <span class="o">=</span> <span class="n">full_bit_adder</span><span class="p">(</span><span class="s1">'a0'</span><span class="p">,</span> <span class="s1">'b0'</span><span class="p">,</span> <span class="s1">'Cin'</span><span class="p">)</span>
|
||
<span class="n">sum1</span><span class="p">,</span> <span class="n">cout</span> <span class="o">=</span> <span class="n">full_bit_adder</span><span class="p">(</span><span class="s1">'a1'</span><span class="p">,</span> <span class="s1">'b1'</span><span class="p">,</span> <span class="n">cout</span><span class="p">)</span>
|
||
<span class="n">sum2</span><span class="p">,</span> <span class="n">cout</span> <span class="o">=</span> <span class="n">full_bit_adder</span><span class="p">(</span><span class="s1">'a2'</span><span class="p">,</span> <span class="s1">'b2'</span><span class="p">,</span> <span class="n">cout</span><span class="p">)</span>
|
||
<span class="n">sum3</span><span class="p">,</span> <span class="n">cout</span> <span class="o">=</span> <span class="n">full_bit_adder</span><span class="p">(</span><span class="s1">'a3'</span><span class="p">,</span> <span class="s1">'b3'</span><span class="p">,</span> <span class="n">cout</span><span class="p">)</span>
|
||
<span class="n">sum4</span><span class="p">,</span> <span class="n">cout</span> <span class="o">=</span> <span class="n">full_bit_adder</span><span class="p">(</span><span class="s1">'a4'</span><span class="p">,</span> <span class="s1">'b4'</span><span class="p">,</span> <span class="n">cout</span><span class="p">)</span>
|
||
<span class="n">sum5</span><span class="p">,</span> <span class="n">cout</span> <span class="o">=</span> <span class="n">full_bit_adder</span><span class="p">(</span><span class="s1">'a5'</span><span class="p">,</span> <span class="s1">'b5'</span><span class="p">,</span> <span class="n">cout</span><span class="p">)</span>
|
||
<span class="n">sum6</span><span class="p">,</span> <span class="n">cout</span> <span class="o">=</span> <span class="n">full_bit_adder</span><span class="p">(</span><span class="s1">'a6'</span><span class="p">,</span> <span class="s1">'b6'</span><span class="p">,</span> <span class="n">cout</span><span class="p">)</span>
|
||
<span class="n">sum7</span><span class="p">,</span> <span class="n">cout</span> <span class="o">=</span> <span class="n">full_bit_adder</span><span class="p">(</span><span class="s1">'a7'</span><span class="p">,</span> <span class="s1">'b7'</span><span class="p">,</span> <span class="n">cout</span><span class="p">)</span>
|
||
</pre></div>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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>Unfortunately, the sizes of the resulting expression explode:</p>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [41]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="nb">map</span><span class="p">(</span><span class="nb">len</span><span class="p">,</span> <span class="nb">map</span><span class="p">(</span><span class="nb">str</span><span class="p">,</span> <span class="p">(</span><span class="n">sum0</span><span class="p">,</span> <span class="n">sum1</span><span class="p">,</span> <span class="n">sum2</span><span class="p">,</span> <span class="n">sum3</span><span class="p">,</span> <span class="n">sum4</span><span class="p">,</span> <span class="n">sum5</span><span class="p">,</span> <span class="n">sum6</span><span class="p">,</span> <span class="n">sum7</span><span class="p">,</span> <span class="n">cout</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[41]:</div>
|
||
|
||
|
||
|
||
|
||
<div class="jp-RenderedText jp-OutputArea-output jp-OutputArea-executeResult" data-mime-type="text/plain">
|
||
<pre>[63, 327, 1383, 5607, 22503, 90087, 360423, 1441767, 1441773]</pre>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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="Using-the-definitions-for-Sum-and-Carry">Using the definitions for Sum and Carry<a class="anchor-link" href="#Using-the-definitions-for-Sum-and-Carry">¶</a></h3><p>We could also use the definitions from the <a href="https://en.wikipedia.org/wiki/Adder_%28electronics%29#Full_adder">Wikipedia article</a>:</p>
|
||
<pre><code>S = A ⊕ B ⊕ C
|
||
Cout = (A ⋅ B) + (Cin ⋅ (A ⊕ B))
|
||
</code></pre>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [42]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="k">def</span> <span class="nf">full_bit_adder</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">,</span> <span class="n">c</span><span class="p">):</span>
|
||
<span class="k">return</span> <span class="p">(</span>
|
||
<span class="n">xor</span><span class="p">(</span><span class="n">xor</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">),</span> <span class="n">c</span><span class="p">),</span>
|
||
<span class="n">or_</span><span class="p">(</span><span class="n">and_</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">),</span> <span class="n">and_</span><span class="p">(</span><span class="n">c</span><span class="p">,</span> <span class="n">xor</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">))),</span>
|
||
<span class="p">)</span>
|
||
</pre></div>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [43]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="n">sum0</span><span class="p">,</span> <span class="n">cout</span> <span class="o">=</span> <span class="n">full_bit_adder</span><span class="p">(</span><span class="s1">'a0'</span><span class="p">,</span> <span class="s1">'b0'</span><span class="p">,</span> <span class="s1">'Cin'</span><span class="p">)</span>
|
||
</pre></div>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [44]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="nb">print</span> <span class="s1">'Sum'</span>
|
||
<span class="n">truth_table</span><span class="p">(</span><span class="n">sum0</span><span class="p">)</span>
|
||
<span class="nb">print</span>
|
||
<span class="nb">print</span> <span class="s1">'Carry'</span>
|
||
<span class="n">truth_table</span><span class="p">(</span><span class="n">cout</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">
|
||
<pre>Sum
|
||
((((((((a0) b0) ((b0) a0)))) Cin) (((((a0) b0) ((b0) a0))) (Cin))))
|
||
Cin a0 b0 | Value
|
||
-------------+------
|
||
|
|
||
() | ()
|
||
() | ()
|
||
() () |
|
||
() | ()
|
||
() () |
|
||
() () |
|
||
() () () | ()
|
||
|
||
Carry
|
||
((((((((a0) b0) ((b0) a0)))) (Cin)) ((a0) (b0))))
|
||
Cin a0 b0 | Value
|
||
-------------+------
|
||
|
|
||
() |
|
||
() |
|
||
() () | ()
|
||
() |
|
||
() () | ()
|
||
() () | ()
|
||
() () () | ()
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [45]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="n">sum1</span><span class="p">,</span> <span class="n">cout</span> <span class="o">=</span> <span class="n">full_bit_adder</span><span class="p">(</span><span class="s1">'a1'</span><span class="p">,</span> <span class="s1">'b1'</span><span class="p">,</span> <span class="n">cout</span><span class="p">)</span>
|
||
<span class="n">sum2</span><span class="p">,</span> <span class="n">cout</span> <span class="o">=</span> <span class="n">full_bit_adder</span><span class="p">(</span><span class="s1">'a2'</span><span class="p">,</span> <span class="s1">'b2'</span><span class="p">,</span> <span class="n">cout</span><span class="p">)</span>
|
||
<span class="n">sum3</span><span class="p">,</span> <span class="n">cout</span> <span class="o">=</span> <span class="n">full_bit_adder</span><span class="p">(</span><span class="s1">'a3'</span><span class="p">,</span> <span class="s1">'b3'</span><span class="p">,</span> <span class="n">cout</span><span class="p">)</span>
|
||
<span class="n">sum4</span><span class="p">,</span> <span class="n">cout</span> <span class="o">=</span> <span class="n">full_bit_adder</span><span class="p">(</span><span class="s1">'a4'</span><span class="p">,</span> <span class="s1">'b4'</span><span class="p">,</span> <span class="n">cout</span><span class="p">)</span>
|
||
<span class="n">sum5</span><span class="p">,</span> <span class="n">cout</span> <span class="o">=</span> <span class="n">full_bit_adder</span><span class="p">(</span><span class="s1">'a5'</span><span class="p">,</span> <span class="s1">'b5'</span><span class="p">,</span> <span class="n">cout</span><span class="p">)</span>
|
||
<span class="n">sum6</span><span class="p">,</span> <span class="n">cout</span> <span class="o">=</span> <span class="n">full_bit_adder</span><span class="p">(</span><span class="s1">'a6'</span><span class="p">,</span> <span class="s1">'b6'</span><span class="p">,</span> <span class="n">cout</span><span class="p">)</span>
|
||
<span class="n">sum7</span><span class="p">,</span> <span class="n">cout</span> <span class="o">=</span> <span class="n">full_bit_adder</span><span class="p">(</span><span class="s1">'a7'</span><span class="p">,</span> <span class="s1">'b7'</span><span class="p">,</span> <span class="n">cout</span><span class="p">)</span>
|
||
</pre></div>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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>The sizes of these expression are much more tractable:</p>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [46]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="nb">map</span><span class="p">(</span><span class="nb">len</span><span class="p">,</span> <span class="nb">map</span><span class="p">(</span><span class="nb">str</span><span class="p">,</span> <span class="p">(</span><span class="n">sum0</span><span class="p">,</span> <span class="n">sum1</span><span class="p">,</span> <span class="n">sum2</span><span class="p">,</span> <span class="n">sum3</span><span class="p">,</span> <span class="n">sum4</span><span class="p">,</span> <span class="n">sum5</span><span class="p">,</span> <span class="n">sum6</span><span class="p">,</span> <span class="n">sum7</span><span class="p">,</span> <span class="n">cout</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[46]:</div>
|
||
|
||
|
||
|
||
|
||
<div class="jp-RenderedText jp-OutputArea-output jp-OutputArea-executeResult" data-mime-type="text/plain">
|
||
<pre>[67, 159, 251, 343, 435, 527, 619, 711, 371]</pre>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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="Simplifying-Expressions">Simplifying Expressions<a class="anchor-link" href="#Simplifying-Expressions">¶</a></h1><p>The <code>Form</code> Python datastructure is based on <code>frozenset</code> so duplicate terms are automatically removed and order of terms is irrelevant just as we would prefer. But we want to be able to automatically simplify forms beyond just that. Ideally, we would like a function that applies the rules of the calculus automatically:</p>
|
||
<pre><code>A((B)) = AB
|
||
A() = ()
|
||
A(AB) = A(B)
|
||
|
||
</code></pre>
|
||
<p>I'm going to specify the behaviour of the desired function in a unittest.</p>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [47]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="kn">import</span> <span class="nn">unittest</span>
|
||
</pre></div>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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="Three-Easy-Cases">Three Easy Cases<a class="anchor-link" href="#Three-Easy-Cases">¶</a></h3><p>Let's deal with three easy cases first: string, the Mark, and the Void. The <code>simplify()</code> function should just return them unchanged.</p>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [48]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="k">class</span> <span class="nc">UnwrapTest0</span><span class="p">(</span><span class="n">unittest</span><span class="o">.</span><span class="n">TestCase</span><span class="p">):</span>
|
||
|
||
<span class="k">def</span> <span class="nf">testMark</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="n">Mark</span><span class="p">,</span> <span class="n">simplify</span><span class="p">(</span><span class="n">Mark</span><span class="p">))</span>
|
||
|
||
<span class="k">def</span> <span class="nf">testVoid</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="n">Void</span><span class="p">,</span> <span class="n">simplify</span><span class="p">(</span><span class="n">Void</span><span class="p">))</span>
|
||
|
||
<span class="k">def</span> <span class="nf">testLeaf</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="s1">'a'</span><span class="p">,</span> <span class="n">simplify</span><span class="p">(</span><span class="s1">'a'</span><span class="p">))</span>
|
||
|
||
|
||
<span class="k">def</span> <span class="nf">simplify</span><span class="p">(</span><span class="n">form</span><span class="p">):</span>
|
||
<span class="c1"># Three easy cases, for strings, Mark, or Void, just return it.</span>
|
||
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">form</span><span class="p">,</span> <span class="n">basestring</span><span class="p">)</span> <span class="ow">or</span> <span class="n">form</span> <span class="ow">in</span> <span class="n">BASE</span><span class="p">:</span>
|
||
<span class="k">return</span> <span class="n">form</span>
|
||
|
||
|
||
<span class="k">if</span> <span class="vm">__name__</span> <span class="o">==</span> <span class="s1">'__main__'</span><span class="p">:</span>
|
||
<span class="n">unittest</span><span class="o">.</span><span class="n">main</span><span class="p">(</span><span class="n">argv</span><span class="o">=</span><span class="p">[</span><span class="s1">'ignored'</span><span class="p">,</span> <span class="s1">'UnwrapTest0'</span><span class="p">],</span> <span class="n">exit</span><span class="o">=</span><span class="kc">False</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="application/vnd.jupyter.stderr">
|
||
<pre>...
|
||
----------------------------------------------------------------------
|
||
Ran 3 tests in 0.004s
|
||
|
||
OK
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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="(a)"><code>(a)</code><a class="anchor-link" href="#(a)">¶</a></h3><p>A single string in a form <code>(a)</code> should also be returned unchanged:</p>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [49]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="k">class</span> <span class="nc">UnwrapTest1</span><span class="p">(</span><span class="n">unittest</span><span class="o">.</span><span class="n">TestCase</span><span class="p">):</span>
|
||
|
||
<span class="k">def</span> <span class="nf">testNegatedLeaf</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||
<span class="n">a</span> <span class="o">=</span> <span class="n">nor</span><span class="p">(</span><span class="s1">'a'</span><span class="p">)</span>
|
||
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">simplify</span><span class="p">(</span><span class="n">a</span><span class="p">))</span>
|
||
|
||
|
||
<span class="k">def</span> <span class="nf">simplify</span><span class="p">(</span><span class="n">form</span><span class="p">):</span>
|
||
|
||
<span class="c1"># Three easy cases, for strings, Mark, or Void, just return it.</span>
|
||
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">form</span><span class="p">,</span> <span class="n">basestring</span><span class="p">)</span> <span class="ow">or</span> <span class="n">form</span> <span class="ow">in</span> <span class="n">BASE</span><span class="p">:</span>
|
||
<span class="k">return</span> <span class="n">form</span>
|
||
|
||
<span class="c1"># We know it's a Form and it's not empty (else it would be the Mark and</span>
|
||
<span class="c1"># returned above.)</span>
|
||
|
||
<span class="c1"># Let's just recurse.</span>
|
||
<span class="k">return</span> <span class="n">Form</span><span class="p">(</span><span class="n">simplify</span><span class="p">(</span><span class="n">inner</span><span class="p">)</span> <span class="k">for</span> <span class="n">inner</span> <span class="ow">in</span> <span class="n">form</span><span class="p">)</span>
|
||
|
||
|
||
<span class="k">if</span> <span class="vm">__name__</span> <span class="o">==</span> <span class="s1">'__main__'</span><span class="p">:</span>
|
||
<span class="n">unittest</span><span class="o">.</span><span class="n">main</span><span class="p">(</span><span class="n">argv</span><span class="o">=</span><span class="p">[</span><span class="s1">'ignored'</span><span class="p">,</span> <span class="s1">'UnwrapTest1'</span><span class="p">],</span> <span class="n">exit</span><span class="o">=</span><span class="kc">False</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="application/vnd.jupyter.stderr">
|
||
<pre>.
|
||
----------------------------------------------------------------------
|
||
Ran 1 test in 0.001s
|
||
|
||
OK
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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="Doubly-Wrapped-Forms">Doubly-Wrapped Forms<a class="anchor-link" href="#Doubly-Wrapped-Forms">¶</a></h3><p>So far, so good. But what about <code>((a))</code>? This should be returned as just <code>a</code>. And <code>((a b))</code> should remain <code>((a b))</code> because we can't represent just <code>a b</code> as a single Python object, so we have to retain the outer pair of containers to hold them without inverting the Mark/Void value (if we just used one container.)</p>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [50]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="k">class</span> <span class="nc">UnwrapTest2</span><span class="p">(</span><span class="n">unittest</span><span class="o">.</span><span class="n">TestCase</span><span class="p">):</span>
|
||
|
||
<span class="k">def</span> <span class="nf">testUnwrapLeaf</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||
<span class="sd">'''((a)) = a'''</span>
|
||
<span class="n">a</span> <span class="o">=</span> <span class="n">or_</span><span class="p">(</span><span class="s1">'a'</span><span class="p">)</span>
|
||
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="s1">'a'</span><span class="p">,</span> <span class="n">simplify</span><span class="p">(</span><span class="n">a</span><span class="p">))</span>
|
||
|
||
<span class="k">def</span> <span class="nf">testDoNotUnwrapTwoLeaves</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||
<span class="sd">'''((a b)) = ((a b))'''</span>
|
||
<span class="n">a</span> <span class="o">=</span> <span class="n">or_</span><span class="p">(</span><span class="s1">'a'</span><span class="p">,</span> <span class="s1">'b'</span><span class="p">)</span>
|
||
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">simplify</span><span class="p">(</span><span class="n">a</span><span class="p">))</span>
|
||
|
||
|
||
<span class="k">def</span> <span class="nf">simplify</span><span class="p">(</span><span class="n">form</span><span class="p">):</span>
|
||
|
||
<span class="c1"># Three easy cases, for strings, Mark, or Void, just return it.</span>
|
||
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">form</span><span class="p">,</span> <span class="n">basestring</span><span class="p">)</span> <span class="ow">or</span> <span class="n">form</span> <span class="ow">in</span> <span class="n">BASE</span><span class="p">:</span>
|
||
<span class="k">return</span> <span class="n">form</span>
|
||
|
||
<span class="c1"># We know it's a Form and it's not empty (else it would be the Mark and</span>
|
||
<span class="c1"># returned above.)</span>
|
||
|
||
<span class="c1"># Let's just recurse.</span>
|
||
<span class="n">result</span> <span class="o">=</span> <span class="n">Form</span><span class="p">(</span><span class="n">simplify</span><span class="p">(</span><span class="n">inner</span><span class="p">)</span> <span class="k">for</span> <span class="n">inner</span> <span class="ow">in</span> <span class="n">form</span><span class="p">)</span>
|
||
|
||
<span class="c1"># Check for ((a)) and return just a.</span>
|
||
<span class="c1"># If there is more than one item in the inner container ((a b..))</span>
|
||
<span class="c1"># then we must keep the outer containers.</span>
|
||
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">result</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
|
||
<span class="n">inner</span><span class="p">,</span> <span class="o">=</span> <span class="n">result</span> <span class="c1"># inner = (a)</span>
|
||
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">inner</span><span class="p">,</span> <span class="n">Form</span><span class="p">)</span> <span class="ow">and</span> <span class="nb">len</span><span class="p">(</span><span class="n">inner</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
|
||
<span class="n">a</span><span class="p">,</span> <span class="o">=</span> <span class="n">inner</span>
|
||
<span class="k">return</span> <span class="n">a</span>
|
||
|
||
<span class="k">return</span> <span class="n">result</span>
|
||
|
||
|
||
<span class="k">if</span> <span class="vm">__name__</span> <span class="o">==</span> <span class="s1">'__main__'</span><span class="p">:</span>
|
||
<span class="n">unittest</span><span class="o">.</span><span class="n">main</span><span class="p">(</span><span class="n">argv</span><span class="o">=</span><span class="p">[</span><span class="s1">'ignored'</span><span class="p">,</span> <span class="s1">'UnwrapTest2'</span><span class="p">],</span> <span class="n">exit</span><span class="o">=</span><span class="kc">False</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="application/vnd.jupyter.stderr">
|
||
<pre>..
|
||
----------------------------------------------------------------------
|
||
Ran 2 tests in 0.002s
|
||
|
||
OK
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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>Does it work for <code>(((a))) = (a)</code> and <code>((((a)))) = a</code> and so on?</p>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [51]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="k">class</span> <span class="nc">UnwrapTest3</span><span class="p">(</span><span class="n">unittest</span><span class="o">.</span><span class="n">TestCase</span><span class="p">):</span>
|
||
|
||
<span class="k">def</span> <span class="nf">testMultiUnwrapLeaf</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||
<span class="n">A</span> <span class="o">=</span> <span class="s1">'a'</span>
|
||
<span class="n">B</span> <span class="o">=</span> <span class="n">nor</span><span class="p">(</span><span class="n">A</span><span class="p">)</span>
|
||
<span class="n">a</span> <span class="o">=</span> <span class="n">nor</span><span class="p">(</span><span class="n">B</span><span class="p">)</span>
|
||
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="n">A</span><span class="p">,</span> <span class="n">simplify</span><span class="p">(</span><span class="n">a</span><span class="p">))</span>
|
||
<span class="n">a</span> <span class="o">=</span> <span class="n">nor</span><span class="p">(</span><span class="n">a</span><span class="p">)</span>
|
||
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="n">B</span><span class="p">,</span> <span class="n">simplify</span><span class="p">(</span><span class="n">a</span><span class="p">))</span>
|
||
<span class="n">a</span> <span class="o">=</span> <span class="n">nor</span><span class="p">(</span><span class="n">a</span><span class="p">)</span>
|
||
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="n">A</span><span class="p">,</span> <span class="n">simplify</span><span class="p">(</span><span class="n">a</span><span class="p">))</span>
|
||
<span class="n">a</span> <span class="o">=</span> <span class="n">nor</span><span class="p">(</span><span class="n">a</span><span class="p">)</span>
|
||
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="n">B</span><span class="p">,</span> <span class="n">simplify</span><span class="p">(</span><span class="n">a</span><span class="p">))</span>
|
||
<span class="n">a</span> <span class="o">=</span> <span class="n">nor</span><span class="p">(</span><span class="n">a</span><span class="p">)</span>
|
||
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="n">A</span><span class="p">,</span> <span class="n">simplify</span><span class="p">(</span><span class="n">a</span><span class="p">))</span>
|
||
<span class="n">a</span> <span class="o">=</span> <span class="n">nor</span><span class="p">(</span><span class="n">a</span><span class="p">)</span>
|
||
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="n">B</span><span class="p">,</span> <span class="n">simplify</span><span class="p">(</span><span class="n">a</span><span class="p">))</span>
|
||
|
||
<span class="k">def</span> <span class="nf">testMultiDoNotUnwrapTwoLeaves</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||
<span class="n">e</span> <span class="o">=</span> <span class="n">F</span><span class="p">(</span><span class="s1">'a'</span><span class="p">,</span> <span class="s1">'b'</span><span class="p">)</span>
|
||
<span class="n">f</span> <span class="o">=</span> <span class="n">a</span> <span class="o">=</span> <span class="n">nor</span><span class="p">(</span><span class="n">e</span><span class="p">)</span>
|
||
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="n">f</span><span class="p">,</span> <span class="n">simplify</span><span class="p">(</span><span class="n">a</span><span class="p">))</span>
|
||
<span class="n">a</span> <span class="o">=</span> <span class="n">nor</span><span class="p">(</span><span class="n">a</span><span class="p">)</span>
|
||
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="n">simplify</span><span class="p">(</span><span class="n">a</span><span class="p">))</span>
|
||
<span class="n">a</span> <span class="o">=</span> <span class="n">nor</span><span class="p">(</span><span class="n">a</span><span class="p">)</span>
|
||
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="n">f</span><span class="p">,</span> <span class="n">simplify</span><span class="p">(</span><span class="n">a</span><span class="p">))</span>
|
||
<span class="n">a</span> <span class="o">=</span> <span class="n">nor</span><span class="p">(</span><span class="n">a</span><span class="p">)</span>
|
||
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="n">simplify</span><span class="p">(</span><span class="n">a</span><span class="p">))</span>
|
||
<span class="n">a</span> <span class="o">=</span> <span class="n">nor</span><span class="p">(</span><span class="n">a</span><span class="p">)</span>
|
||
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="n">f</span><span class="p">,</span> <span class="n">simplify</span><span class="p">(</span><span class="n">a</span><span class="p">))</span>
|
||
<span class="n">a</span> <span class="o">=</span> <span class="n">nor</span><span class="p">(</span><span class="n">a</span><span class="p">)</span>
|
||
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="n">simplify</span><span class="p">(</span><span class="n">a</span><span class="p">))</span>
|
||
|
||
<span class="c1"># Technically, several of the tests above are redundant,</span>
|
||
<span class="c1"># I'm not willing to figure out the right point ot stop</span>
|
||
<span class="c1"># right now, so I just do extra tests.</span>
|
||
|
||
<span class="k">if</span> <span class="vm">__name__</span> <span class="o">==</span> <span class="s1">'__main__'</span><span class="p">:</span>
|
||
<span class="n">unittest</span><span class="o">.</span><span class="n">main</span><span class="p">(</span><span class="n">argv</span><span class="o">=</span><span class="p">[</span><span class="s1">'ignored'</span><span class="p">,</span> <span class="s1">'UnwrapTest3'</span><span class="p">],</span> <span class="n">exit</span><span class="o">=</span><span class="kc">False</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="application/vnd.jupyter.stderr">
|
||
<pre>..
|
||
----------------------------------------------------------------------
|
||
Ran 2 tests in 0.003s
|
||
|
||
OK
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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="Unwrapping-Inner-Forms">Unwrapping Inner Forms<a class="anchor-link" href="#Unwrapping-Inner-Forms">¶</a></h3><p>But now let's trick our function, it can't handle <code>(a ((b c))) = (a b c)</code> yet. This is going to require an auxiliary helper function that is similar to <code>simplify()</code> but that yields terms into an outer context.</p>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [52]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="k">class</span> <span class="nc">UnwrapTest4</span><span class="p">(</span><span class="n">unittest</span><span class="o">.</span><span class="n">TestCase</span><span class="p">):</span>
|
||
|
||
<span class="k">def</span> <span class="nf">testMultiUnwrapLeaf</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||
<span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">,</span> <span class="n">c</span> <span class="o">=</span> <span class="s1">'abc'</span>
|
||
<span class="n">f</span> <span class="o">=</span> <span class="n">F</span><span class="p">(</span><span class="n">a</span><span class="p">,((</span><span class="n">b</span><span class="p">,</span> <span class="n">c</span><span class="p">),))</span>
|
||
<span class="n">e</span> <span class="o">=</span> <span class="n">F</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">,</span> <span class="n">c</span><span class="p">)</span>
|
||
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="n">simplify</span><span class="p">(</span><span class="n">f</span><span class="p">))</span>
|
||
|
||
<span class="k">def</span> <span class="nf">testMulti_blah_Leaf</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||
<span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">,</span> <span class="n">c</span> <span class="o">=</span> <span class="s1">'abc'</span>
|
||
<span class="n">f</span> <span class="o">=</span> <span class="n">F</span><span class="p">(</span><span class="n">a</span><span class="p">,(((</span><span class="n">b</span><span class="p">,</span> <span class="n">c</span><span class="p">),),),)</span>
|
||
<span class="n">e</span> <span class="o">=</span> <span class="n">F</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="p">(</span><span class="n">b</span><span class="p">,</span> <span class="n">c</span><span class="p">))</span>
|
||
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="n">simplify</span><span class="p">(</span><span class="n">f</span><span class="p">))</span>
|
||
|
||
<span class="k">def</span> <span class="nf">testMulti_blah_blah_Leaf</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||
<span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">,</span> <span class="n">c</span><span class="p">,</span> <span class="n">d</span> <span class="o">=</span> <span class="s1">'abcd'</span>
|
||
<span class="n">f</span> <span class="o">=</span> <span class="n">F</span><span class="p">(</span><span class="n">a</span><span class="p">,((((</span><span class="n">b</span><span class="p">,</span> <span class="n">c</span><span class="p">),),</span> <span class="n">d</span><span class="p">),))</span>
|
||
<span class="n">e</span> <span class="o">=</span> <span class="n">F</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">,</span> <span class="n">c</span><span class="p">,</span> <span class="n">d</span><span class="p">)</span>
|
||
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="n">simplify</span><span class="p">(</span><span class="n">f</span><span class="p">))</span>
|
||
|
||
|
||
<span class="k">def</span> <span class="nf">simplify</span><span class="p">(</span><span class="n">form</span><span class="p">):</span>
|
||
|
||
<span class="c1"># Three easy cases, for strings, Mark, or Void, just return it.</span>
|
||
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">form</span><span class="p">,</span> <span class="n">basestring</span><span class="p">)</span> <span class="ow">or</span> <span class="n">form</span> <span class="ow">in</span> <span class="n">BASE</span><span class="p">:</span>
|
||
<span class="k">return</span> <span class="n">form</span>
|
||
|
||
<span class="c1"># We know it's a Form and it's not empty (else it would be the Mark and</span>
|
||
<span class="c1"># returned above.)</span>
|
||
|
||
<span class="n">result</span> <span class="o">=</span> <span class="p">[]</span>
|
||
<span class="k">for</span> <span class="n">inner</span> <span class="ow">in</span> <span class="n">simplify_gen</span><span class="p">(</span><span class="n">form</span><span class="p">):</span> <span class="c1"># Use the generator instead of recursing into simplify().</span>
|
||
<span class="n">result</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">inner</span><span class="p">)</span>
|
||
<span class="n">result</span> <span class="o">=</span> <span class="n">Form</span><span class="p">(</span><span class="n">result</span><span class="p">)</span>
|
||
|
||
<span class="c1"># Check for ((a)) and return just a.</span>
|
||
<span class="c1"># If there is more than one item in the inner container ((a b..))</span>
|
||
<span class="c1"># then we must keep the outer containers.</span>
|
||
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">result</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
|
||
<span class="n">inner</span><span class="p">,</span> <span class="o">=</span> <span class="n">result</span> <span class="c1"># inner = (a)</span>
|
||
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">inner</span><span class="p">,</span> <span class="n">Form</span><span class="p">):</span>
|
||
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">inner</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
|
||
<span class="n">a</span><span class="p">,</span> <span class="o">=</span> <span class="n">inner</span>
|
||
<span class="k">return</span> <span class="n">a</span>
|
||
<span class="k">else</span><span class="p">:</span>
|
||
<span class="c1"># len(inner) cannot be 0, because that means form is Void</span>
|
||
<span class="c1"># and would already have been returned.</span>
|
||
<span class="k">assert</span> <span class="nb">len</span><span class="p">(</span><span class="n">inner</span><span class="p">)</span> <span class="o">></span> <span class="mi">1</span><span class="p">,</span> <span class="nb">repr</span><span class="p">(</span><span class="n">inner</span><span class="p">)</span>
|
||
|
||
<span class="c1"># What to do here?</span>
|
||
<span class="c1"># We cannot yield the items in inner into the containing context</span>
|
||
<span class="c1"># because we don't have it (or even know if it exists.)</span>
|
||
<span class="c1"># Therefore we need a different simplify() generator function that yields</span>
|
||
<span class="c1"># the simplified contents of a form, and we have to call that instead</span>
|
||
<span class="c1"># of recurring on simplify() above.</span>
|
||
<span class="k">pass</span>
|
||
|
||
|
||
<span class="k">return</span> <span class="n">result</span>
|
||
|
||
|
||
<span class="k">def</span> <span class="nf">simplify_gen</span><span class="p">(</span><span class="n">form</span><span class="p">):</span>
|
||
|
||
<span class="k">for</span> <span class="n">inner</span> <span class="ow">in</span> <span class="n">form</span><span class="p">:</span>
|
||
|
||
<span class="n">inner</span> <span class="o">=</span> <span class="n">simplify</span><span class="p">(</span><span class="n">inner</span><span class="p">)</span>
|
||
<span class="c1"># Now inner is simplified, except for ((a b...)) which simplify() can't handle.</span>
|
||
|
||
<span class="c1"># Three easy cases, strings, Mark, or Void.</span>
|
||
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">inner</span><span class="p">,</span> <span class="n">basestring</span><span class="p">):</span>
|
||
<span class="k">yield</span> <span class="n">inner</span>
|
||
<span class="k">continue</span>
|
||
|
||
<span class="k">if</span> <span class="n">inner</span> <span class="o">==</span> <span class="n">Mark</span><span class="p">:</span>
|
||
<span class="k">yield</span> <span class="n">inner</span>
|
||
<span class="k">assert</span> <span class="kc">False</span> <span class="c1"># The simplify() function will not keep iterating after this.</span>
|
||
<span class="k">return</span> <span class="c1"># Partial implementation of ()A = ().</span>
|
||
|
||
<span class="k">if</span> <span class="n">inner</span> <span class="o">==</span> <span class="n">Void</span><span class="p">:</span>
|
||
<span class="k">continue</span> <span class="c1"># Omit Void. Implementation of (()) = .</span>
|
||
|
||
<span class="c1"># We know it's a Form and it's not empty (else it would be the Mark and</span>
|
||
<span class="c1"># yielded above.)</span>
|
||
|
||
<span class="c1"># Check for ((...)) and return just ... .</span>
|
||
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">inner</span><span class="p">)</span> <span class="o">></span> <span class="mi">1</span><span class="p">:</span> <span class="c1"># (foo bar)</span>
|
||
<span class="k">yield</span> <span class="n">inner</span>
|
||
<span class="k">continue</span>
|
||
|
||
<span class="k">assert</span> <span class="nb">len</span><span class="p">(</span><span class="n">inner</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">,</span> <span class="nb">repr</span><span class="p">(</span><span class="n">inner</span><span class="p">)</span> <span class="c1"># Just in case...</span>
|
||
|
||
<span class="n">inner_inner</span><span class="p">,</span> <span class="o">=</span> <span class="n">inner</span>
|
||
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">inner_inner</span><span class="p">,</span> <span class="n">Form</span><span class="p">):</span> <span class="c1"># inner_inner = (...)</span>
|
||
<span class="k">for</span> <span class="n">inner_inner_inner</span> <span class="ow">in</span> <span class="n">inner_inner</span><span class="p">:</span>
|
||
<span class="k">yield</span> <span class="n">inner_inner_inner</span>
|
||
<span class="k">continue</span>
|
||
|
||
<span class="c1">#else: # inner_inner = foo ; inner = (foo)</span>
|
||
|
||
<span class="k">yield</span> <span class="n">inner</span>
|
||
|
||
|
||
<span class="k">if</span> <span class="vm">__name__</span> <span class="o">==</span> <span class="s1">'__main__'</span><span class="p">:</span>
|
||
<span class="n">unittest</span><span class="o">.</span><span class="n">main</span><span class="p">(</span><span class="n">argv</span><span class="o">=</span><span class="p">[</span><span class="s1">'ignored'</span><span class="p">,</span> <span class="s1">'UnwrapTest4'</span><span class="p">],</span> <span class="n">exit</span><span class="o">=</span><span class="kc">False</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="application/vnd.jupyter.stderr">
|
||
<pre>...
|
||
----------------------------------------------------------------------
|
||
Ran 3 tests in 0.005s
|
||
|
||
OK
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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="Marks">Marks<a class="anchor-link" href="#Marks">¶</a></h3><p>If the Mark occurs in a sub-form it should <em>Occlude</em> all sibling sub-forms, rendering its container form Void.</p>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [53]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="k">class</span> <span class="nc">MarkTest0</span><span class="p">(</span><span class="n">unittest</span><span class="o">.</span><span class="n">TestCase</span><span class="p">):</span>
|
||
|
||
<span class="k">def</span> <span class="nf">testMarkOccludes0</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||
<span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">,</span> <span class="n">c</span> <span class="o">=</span> <span class="s1">'abc'</span>
|
||
<span class="n">f</span> <span class="o">=</span> <span class="n">F</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="p">(),</span> <span class="n">b</span><span class="p">,</span> <span class="n">c</span><span class="p">)</span>
|
||
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="n">Void</span><span class="p">,</span> <span class="n">simplify</span><span class="p">(</span><span class="n">f</span><span class="p">))</span>
|
||
|
||
<span class="k">def</span> <span class="nf">testMarkOccludes1</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||
<span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">,</span> <span class="n">c</span> <span class="o">=</span> <span class="s1">'abc'</span>
|
||
<span class="n">f</span> <span class="o">=</span> <span class="n">F</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="p">(</span><span class="n">b</span><span class="p">,</span> <span class="n">c</span><span class="p">,</span> <span class="p">()))</span>
|
||
<span class="n">e</span> <span class="o">=</span> <span class="n">F</span><span class="p">(</span><span class="n">a</span><span class="p">)</span>
|
||
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="n">simplify</span><span class="p">(</span><span class="n">f</span><span class="p">))</span>
|
||
|
||
<span class="k">def</span> <span class="nf">testMarkOccludes2</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||
<span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">,</span> <span class="n">c</span> <span class="o">=</span> <span class="s1">'abc'</span>
|
||
<span class="n">f</span> <span class="o">=</span> <span class="n">F</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="p">(</span><span class="n">b</span><span class="p">,</span> <span class="p">((),</span> <span class="n">c</span><span class="p">)))</span>
|
||
<span class="n">e</span> <span class="o">=</span> <span class="n">F</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="p">(</span><span class="n">b</span><span class="p">,))</span>
|
||
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="n">simplify</span><span class="p">(</span><span class="n">f</span><span class="p">))</span>
|
||
|
||
|
||
<span class="k">def</span> <span class="nf">simplify</span><span class="p">(</span><span class="n">form</span><span class="p">):</span>
|
||
|
||
<span class="c1"># Three easy cases, for strings, Mark, or Void, just return it.</span>
|
||
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">form</span><span class="p">,</span> <span class="n">basestring</span><span class="p">)</span> <span class="ow">or</span> <span class="n">form</span> <span class="ow">in</span> <span class="n">BASE</span><span class="p">:</span>
|
||
<span class="k">return</span> <span class="n">form</span>
|
||
|
||
<span class="c1"># We know it's a Form and it's not empty (else it would be the Mark and</span>
|
||
<span class="c1"># returned above.)</span>
|
||
|
||
<span class="n">result</span> <span class="o">=</span> <span class="p">[]</span>
|
||
<span class="k">for</span> <span class="n">inner</span> <span class="ow">in</span> <span class="n">simplify_gen</span><span class="p">(</span><span class="n">form</span><span class="p">):</span>
|
||
<span class="k">if</span> <span class="n">inner</span> <span class="o">==</span> <span class="n">Mark</span><span class="p">:</span>
|
||
<span class="k">return</span> <span class="n">Void</span> <span class="c1"># Discard any other inner forms, form is Void.</span>
|
||
<span class="n">result</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">inner</span><span class="p">)</span>
|
||
<span class="n">result</span> <span class="o">=</span> <span class="n">Form</span><span class="p">(</span><span class="n">result</span><span class="p">)</span>
|
||
|
||
<span class="c1"># Check for ((a)) and return just a.</span>
|
||
<span class="c1"># If there is more than one item in the inner container ((a b..))</span>
|
||
<span class="c1"># then we must keep the outer containers.</span>
|
||
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">result</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
|
||
<span class="n">inner</span><span class="p">,</span> <span class="o">=</span> <span class="n">result</span> <span class="c1"># inner = (a)</span>
|
||
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">inner</span><span class="p">,</span> <span class="n">Form</span><span class="p">):</span>
|
||
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">inner</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
|
||
<span class="n">a</span><span class="p">,</span> <span class="o">=</span> <span class="n">inner</span>
|
||
<span class="k">return</span> <span class="n">a</span>
|
||
|
||
<span class="k">return</span> <span class="n">result</span>
|
||
|
||
|
||
<span class="k">if</span> <span class="vm">__name__</span> <span class="o">==</span> <span class="s1">'__main__'</span><span class="p">:</span>
|
||
<span class="n">unittest</span><span class="o">.</span><span class="n">main</span><span class="p">(</span><span class="n">argv</span><span class="o">=</span><span class="p">[</span><span class="s1">'ignored'</span><span class="p">,</span> <span class="s1">'MarkTest0'</span><span class="p">],</span> <span class="n">exit</span><span class="o">=</span><span class="kc">False</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="application/vnd.jupyter.stderr">
|
||
<pre>...
|
||
----------------------------------------------------------------------
|
||
Ran 3 tests in 0.004s
|
||
|
||
OK
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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="Pervade">Pervade<a class="anchor-link" href="#Pervade">¶</a></h3><p>So we have <code>(()) = --</code> and <code>()A = ()</code> what about <code>A(AB) = A(B)</code>?</p>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [54]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="k">class</span> <span class="nc">PervadeTest0</span><span class="p">(</span><span class="n">unittest</span><span class="o">.</span><span class="n">TestCase</span><span class="p">):</span>
|
||
|
||
<span class="k">def</span> <span class="nf">testPervade0</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||
<span class="n">a</span> <span class="o">=</span> <span class="s1">'a'</span>
|
||
<span class="n">f</span> <span class="o">=</span> <span class="n">F</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="p">(</span><span class="n">a</span><span class="p">,))</span>
|
||
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="n">Void</span><span class="p">,</span> <span class="n">simplify</span><span class="p">(</span><span class="n">f</span><span class="p">))</span>
|
||
|
||
<span class="k">def</span> <span class="nf">testPervade1</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||
<span class="n">a</span> <span class="o">=</span> <span class="s1">'a'</span>
|
||
<span class="n">f</span> <span class="o">=</span> <span class="n">F</span><span class="p">(((</span><span class="n">a</span><span class="p">,),),</span> <span class="p">(</span><span class="n">a</span><span class="p">,))</span>
|
||
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="n">Void</span><span class="p">,</span> <span class="n">simplify</span><span class="p">(</span><span class="n">f</span><span class="p">))</span>
|
||
|
||
<span class="k">def</span> <span class="nf">testPervade2</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||
<span class="n">a</span> <span class="o">=</span> <span class="s1">'a'</span>
|
||
<span class="n">b</span> <span class="o">=</span> <span class="s1">'b'</span>
|
||
<span class="n">f</span> <span class="o">=</span> <span class="n">F</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="p">(</span><span class="n">b</span><span class="p">,</span> <span class="p">(</span><span class="n">a</span><span class="p">,)))</span>
|
||
<span class="n">e</span> <span class="o">=</span> <span class="n">F</span><span class="p">(</span><span class="n">a</span><span class="p">)</span>
|
||
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="n">simplify</span><span class="p">(</span><span class="n">f</span><span class="p">))</span>
|
||
|
||
|
||
<span class="k">def</span> <span class="nf">simplify</span><span class="p">(</span><span class="n">form</span><span class="p">,</span> <span class="n">exclude</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||
|
||
<span class="c1"># Three easy cases, for strings, Mark, or Void, just return it.</span>
|
||
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">form</span><span class="p">,</span> <span class="n">basestring</span><span class="p">)</span> <span class="ow">or</span> <span class="n">form</span> <span class="ow">in</span> <span class="n">BASE</span><span class="p">:</span>
|
||
<span class="k">return</span> <span class="n">form</span>
|
||
|
||
<span class="c1"># We know it's a Form and it's not empty (else it would be the Mark and</span>
|
||
<span class="c1"># returned above.)</span>
|
||
|
||
<span class="k">if</span> <span class="n">exclude</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
||
<span class="n">exclude</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
|
||
|
||
<span class="n">new_stuff</span> <span class="o">=</span> <span class="n">form</span> <span class="o">-</span> <span class="n">exclude</span>
|
||
<span class="n">exclude</span> <span class="o">=</span> <span class="n">exclude</span> <span class="o">|</span> <span class="n">new_stuff</span>
|
||
|
||
<span class="n">result</span> <span class="o">=</span> <span class="p">[]</span>
|
||
<span class="k">for</span> <span class="n">inner</span> <span class="ow">in</span> <span class="n">simplify_gen</span><span class="p">(</span><span class="n">new_stuff</span><span class="p">,</span> <span class="n">exclude</span><span class="p">):</span>
|
||
<span class="k">if</span> <span class="n">inner</span> <span class="o">==</span> <span class="n">Mark</span><span class="p">:</span>
|
||
<span class="k">return</span> <span class="n">Void</span> <span class="c1"># Discard any other inner forms, form is Void.</span>
|
||
<span class="n">result</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">inner</span><span class="p">)</span>
|
||
<span class="n">result</span> <span class="o">=</span> <span class="n">Form</span><span class="p">(</span><span class="n">result</span><span class="p">)</span>
|
||
|
||
<span class="c1"># Check for ((a)) and return just a.</span>
|
||
<span class="c1"># If there is more than one item in the inner container ((a b..))</span>
|
||
<span class="c1"># then we must keep the outer containers.</span>
|
||
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">result</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
|
||
<span class="n">inner</span><span class="p">,</span> <span class="o">=</span> <span class="n">result</span> <span class="c1"># inner = (a)</span>
|
||
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">inner</span><span class="p">,</span> <span class="n">Form</span><span class="p">):</span>
|
||
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">inner</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
|
||
<span class="n">a</span><span class="p">,</span> <span class="o">=</span> <span class="n">inner</span>
|
||
<span class="k">return</span> <span class="n">a</span>
|
||
|
||
<span class="k">return</span> <span class="n">result</span>
|
||
|
||
|
||
<span class="k">def</span> <span class="nf">simplify_gen</span><span class="p">(</span><span class="n">form</span><span class="p">,</span> <span class="n">exclude</span><span class="p">):</span>
|
||
|
||
<span class="k">for</span> <span class="n">inner</span> <span class="ow">in</span> <span class="n">form</span><span class="p">:</span>
|
||
|
||
<span class="n">inner</span> <span class="o">=</span> <span class="n">simplify</span><span class="p">(</span><span class="n">inner</span><span class="p">,</span> <span class="n">exclude</span><span class="p">)</span>
|
||
<span class="c1"># Now inner is simplified, except for ((a b...)) which simplify() can't handle.</span>
|
||
|
||
<span class="c1"># Three easy cases, strings, Mark, or Void.</span>
|
||
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">inner</span><span class="p">,</span> <span class="n">basestring</span><span class="p">):</span>
|
||
<span class="k">yield</span> <span class="n">inner</span>
|
||
<span class="k">continue</span>
|
||
|
||
<span class="k">if</span> <span class="n">inner</span> <span class="o">==</span> <span class="n">Mark</span><span class="p">:</span>
|
||
<span class="k">yield</span> <span class="n">inner</span>
|
||
<span class="k">assert</span> <span class="kc">False</span> <span class="c1"># The simplify() function will not keep iterating after this.</span>
|
||
<span class="k">return</span> <span class="c1"># Partial implementation of ()A = ().</span>
|
||
|
||
<span class="k">if</span> <span class="n">inner</span> <span class="o">==</span> <span class="n">Void</span><span class="p">:</span>
|
||
<span class="k">continue</span> <span class="c1"># Omit Void. Implementation of (()) = .</span>
|
||
|
||
<span class="c1"># We know it's a Form and it's not empty (else it would be the Mark and</span>
|
||
<span class="c1"># yielded above.)</span>
|
||
|
||
<span class="c1"># Check for ((...)) and return just ... .</span>
|
||
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">inner</span><span class="p">)</span> <span class="o">></span> <span class="mi">1</span><span class="p">:</span> <span class="c1"># (foo bar)</span>
|
||
<span class="k">yield</span> <span class="n">inner</span>
|
||
<span class="k">continue</span>
|
||
|
||
<span class="k">assert</span> <span class="nb">len</span><span class="p">(</span><span class="n">inner</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">,</span> <span class="nb">repr</span><span class="p">(</span><span class="n">inner</span><span class="p">)</span> <span class="c1"># Just in case...</span>
|
||
|
||
<span class="n">inner_inner</span><span class="p">,</span> <span class="o">=</span> <span class="n">inner</span>
|
||
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">inner_inner</span><span class="p">,</span> <span class="n">Form</span><span class="p">):</span> <span class="c1"># inner_inner = (...)</span>
|
||
<span class="k">for</span> <span class="n">inner_inner_inner</span> <span class="ow">in</span> <span class="n">inner_inner</span><span class="p">:</span>
|
||
<span class="k">yield</span> <span class="n">inner_inner_inner</span>
|
||
<span class="k">continue</span>
|
||
|
||
<span class="c1">#else: # inner_inner = foo ; inner = (foo)</span>
|
||
|
||
<span class="k">yield</span> <span class="n">inner</span>
|
||
|
||
|
||
<span class="k">if</span> <span class="vm">__name__</span> <span class="o">==</span> <span class="s1">'__main__'</span><span class="p">:</span>
|
||
<span class="n">unittest</span><span class="o">.</span><span class="n">main</span><span class="p">(</span><span class="n">argv</span><span class="o">=</span><span class="p">[</span><span class="s1">'ignored'</span><span class="p">,</span> <span class="s1">'PervadeTest0'</span><span class="p">],</span> <span class="n">exit</span><span class="o">=</span><span class="kc">False</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="application/vnd.jupyter.stderr">
|
||
<pre>...
|
||
----------------------------------------------------------------------
|
||
Ran 3 tests in 0.004s
|
||
|
||
OK
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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>TODO set up <a href="http://hypothesis.works/">Hypothesis</a> to generate test cases...</p>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [55]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="c1"># Run ALL the tests!</span>
|
||
|
||
<span class="k">if</span> <span class="vm">__name__</span> <span class="o">==</span> <span class="s1">'__main__'</span><span class="p">:</span>
|
||
<span class="n">unittest</span><span class="o">.</span><span class="n">main</span><span class="p">(</span><span class="n">argv</span><span class="o">=</span><span class="p">[</span><span class="s1">'ignored'</span><span class="p">],</span> <span class="n">exit</span><span class="o">=</span><span class="kc">False</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="application/vnd.jupyter.stderr">
|
||
<pre>.................
|
||
----------------------------------------------------------------------
|
||
Ran 17 tests in 0.022s
|
||
|
||
OK
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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="Using-%22Each-Way%22-to-Simplify-Forms"><a href="http://www.markability.net/case_analysis.htm">Using "Each-Way" to Simplify Forms</a><a class="anchor-link" href="#Using-%22Each-Way%22-to-Simplify-Forms">¶</a></h2><p>GSB called this "Each-Way":</p>
|
||
<pre><code>a = ((a b) (a (b)))
|
||
</code></pre>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [56]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="n">truth_table</span><span class="p">(</span><span class="n">F</span><span class="p">((</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">),</span> <span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="p">(</span><span class="n">b</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">
|
||
<pre>(((b) a) (a b))
|
||
a b | Value
|
||
------+------
|
||
|
|
||
() |
|
||
() | ()
|
||
() () | ()
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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>The form says, "if b then a else a". I'll come back to the interpretation of "Each-Way" as an <code>if-then-else</code> statement later.</p>
|
||
<p>The thing to note here is that the value for <code>a</code> can be a whole expression which appears twice in the new form: once next to <code>b</code> and once next to <code>(b)</code>.</p>
|
||
<p>In the first case we can remove any occurances of <code>b</code> from the <code>a</code> next to it</p>
|
||
<pre><code>b (...(b c (d ...)))
|
||
b (...( c (d ...)))
|
||
|
||
</code></pre>
|
||
<p>and in the second case we can change any occurances of <code>b</code> to the Mark.</p>
|
||
<pre><code>(b)(...(b c (d ...)))
|
||
(b)((b)(b c (d ...)))
|
||
(b)(...(b (b) c (d ...)))
|
||
(b)(...(b ( ) c (d ...)))
|
||
(b)(...( ( ) ))
|
||
(b)(... )
|
||
|
||
</code></pre>
|
||
<p>We can send <code>(b)</code> into the form until it reaches and <code>b</code>, at which point <code>b(b)</code> becomes <code>()</code> and sweeps out any siblings rendering its containing form Void.</p>
|
||
<p>For the first case we can use <code>simplify()</code> and pass in <code>b</code> as a member of the <code>exclude</code> set.</p>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [57]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="n">A</span> <span class="o">=</span> <span class="n">F</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="p">(</span><span class="n">b</span><span class="p">,</span> <span class="p">(</span><span class="n">c</span><span class="p">,)))</span>
|
||
<span class="n">A</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[57]:</div>
|
||
|
||
|
||
|
||
|
||
<div class="jp-RenderedText jp-OutputArea-output jp-OutputArea-executeResult" data-mime-type="text/plain">
|
||
<pre>(((c) b) a)</pre>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [58]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="n">simplify</span><span class="p">(</span><span class="n">A</span><span class="p">,</span> <span class="p">{</span><span class="n">b</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[58]:</div>
|
||
|
||
|
||
|
||
|
||
<div class="jp-RenderedText jp-OutputArea-output jp-OutputArea-executeResult" data-mime-type="text/plain">
|
||
<pre>(a c)</pre>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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="with_mark"><code>with_mark</code><a class="anchor-link" href="#with_mark">¶</a></h3><p>In the second case <code>(b)...b... = (b)...()...</code> we can modify the <code>simplify()</code> function to accept a name that it should treat as Mark-valued.</p>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [59]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="k">class</span> <span class="nc">MarkitTest0</span><span class="p">(</span><span class="n">unittest</span><span class="o">.</span><span class="n">TestCase</span><span class="p">):</span>
|
||
|
||
<span class="k">def</span> <span class="nf">testMarkit0</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||
<span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">,</span> <span class="n">c</span> <span class="o">=</span> <span class="s1">'abc'</span>
|
||
<span class="n">f</span> <span class="o">=</span> <span class="n">F</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="p">(</span><span class="n">b</span><span class="p">,</span> <span class="p">(</span><span class="n">c</span><span class="p">,)))</span>
|
||
<span class="n">e</span> <span class="o">=</span> <span class="n">F</span><span class="p">(</span><span class="n">a</span><span class="p">)</span>
|
||
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="n">simplify</span><span class="p">(</span><span class="n">f</span><span class="p">,</span> <span class="n">with_mark</span><span class="o">=</span><span class="n">b</span><span class="p">))</span>
|
||
|
||
|
||
<span class="k">def</span> <span class="nf">simplify</span><span class="p">(</span><span class="n">form</span><span class="p">,</span> <span class="n">exclude</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">with_mark</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||
|
||
<span class="c1"># Three easy cases, for strings, Mark, or Void, just return it.</span>
|
||
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">form</span><span class="p">,</span> <span class="n">basestring</span><span class="p">)</span> <span class="ow">or</span> <span class="n">form</span> <span class="ow">in</span> <span class="n">BASE</span><span class="p">:</span>
|
||
<span class="k">return</span> <span class="n">form</span>
|
||
|
||
<span class="c1"># We know it's a Form and it's not empty (else it would be the Mark and</span>
|
||
<span class="c1"># returned above.)</span>
|
||
|
||
<span class="k">if</span> <span class="n">exclude</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
||
<span class="n">exclude</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
|
||
|
||
<span class="n">new_stuff</span> <span class="o">=</span> <span class="n">form</span> <span class="o">-</span> <span class="n">exclude</span>
|
||
<span class="n">exclude</span> <span class="o">=</span> <span class="n">exclude</span> <span class="o">|</span> <span class="n">new_stuff</span>
|
||
|
||
<span class="n">result</span> <span class="o">=</span> <span class="p">[]</span>
|
||
<span class="k">for</span> <span class="n">inner</span> <span class="ow">in</span> <span class="n">simplify_gen</span><span class="p">(</span><span class="n">new_stuff</span><span class="p">,</span> <span class="n">exclude</span><span class="p">,</span> <span class="n">with_mark</span><span class="p">):</span>
|
||
<span class="k">if</span> <span class="n">inner</span> <span class="o">==</span> <span class="n">Mark</span> <span class="ow">or</span> <span class="n">inner</span> <span class="o">==</span> <span class="n">with_mark</span><span class="p">:</span>
|
||
<span class="k">return</span> <span class="n">Void</span> <span class="c1"># Discard any other inner forms, form is Void.</span>
|
||
<span class="n">result</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">inner</span><span class="p">)</span>
|
||
<span class="n">result</span> <span class="o">=</span> <span class="n">Form</span><span class="p">(</span><span class="n">result</span><span class="p">)</span>
|
||
|
||
<span class="c1"># Check for ((a)) and return just a.</span>
|
||
<span class="c1"># If there is more than one item in the inner container ((a b..))</span>
|
||
<span class="c1"># then we must keep the outer containers.</span>
|
||
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">result</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
|
||
<span class="n">inner</span><span class="p">,</span> <span class="o">=</span> <span class="n">result</span> <span class="c1"># inner = (a)</span>
|
||
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">inner</span><span class="p">,</span> <span class="n">Form</span><span class="p">):</span>
|
||
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">inner</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
|
||
<span class="n">a</span><span class="p">,</span> <span class="o">=</span> <span class="n">inner</span>
|
||
<span class="k">return</span> <span class="n">a</span>
|
||
|
||
<span class="k">return</span> <span class="n">result</span>
|
||
|
||
|
||
<span class="k">def</span> <span class="nf">simplify_gen</span><span class="p">(</span><span class="n">form</span><span class="p">,</span> <span class="n">exclude</span><span class="p">,</span> <span class="n">with_mark</span><span class="p">):</span>
|
||
|
||
<span class="k">for</span> <span class="n">inner</span> <span class="ow">in</span> <span class="n">form</span><span class="p">:</span>
|
||
|
||
<span class="n">inner</span> <span class="o">=</span> <span class="n">simplify</span><span class="p">(</span><span class="n">inner</span><span class="p">,</span> <span class="n">exclude</span><span class="p">,</span> <span class="n">with_mark</span><span class="p">)</span>
|
||
<span class="c1"># Now inner is simplified, except for ((a b...)) which simplify() can't handle.</span>
|
||
|
||
<span class="c1"># Three easy cases, strings, Mark, or Void.</span>
|
||
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">inner</span><span class="p">,</span> <span class="n">basestring</span><span class="p">):</span>
|
||
<span class="k">yield</span> <span class="n">inner</span>
|
||
<span class="k">continue</span>
|
||
|
||
<span class="k">if</span> <span class="n">inner</span> <span class="o">==</span> <span class="n">Mark</span> <span class="ow">or</span> <span class="n">inner</span> <span class="o">==</span> <span class="n">with_mark</span><span class="p">:</span>
|
||
<span class="k">yield</span> <span class="n">Mark</span>
|
||
<span class="k">assert</span> <span class="kc">False</span> <span class="c1"># The simplify() function will not keep iterating after this.</span>
|
||
<span class="k">return</span> <span class="c1"># Partial implementation of ()A = ().</span>
|
||
|
||
<span class="k">if</span> <span class="n">inner</span> <span class="o">==</span> <span class="n">Void</span><span class="p">:</span>
|
||
<span class="k">continue</span> <span class="c1"># Omit Void. Implementation of (()) = .</span>
|
||
|
||
<span class="c1"># We know it's a Form and it's not empty (else it would be the Mark and</span>
|
||
<span class="c1"># yielded above.)</span>
|
||
|
||
<span class="c1"># Check for ((...)) and return just ... .</span>
|
||
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">inner</span><span class="p">)</span> <span class="o">></span> <span class="mi">1</span><span class="p">:</span> <span class="c1"># (foo bar)</span>
|
||
<span class="k">yield</span> <span class="n">inner</span>
|
||
<span class="k">continue</span>
|
||
|
||
<span class="k">assert</span> <span class="nb">len</span><span class="p">(</span><span class="n">inner</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">,</span> <span class="nb">repr</span><span class="p">(</span><span class="n">inner</span><span class="p">)</span> <span class="c1"># Just in case...</span>
|
||
|
||
<span class="n">inner_inner</span><span class="p">,</span> <span class="o">=</span> <span class="n">inner</span>
|
||
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">inner_inner</span><span class="p">,</span> <span class="n">Form</span><span class="p">):</span> <span class="c1"># inner_inner = (...)</span>
|
||
<span class="k">for</span> <span class="n">inner_inner_inner</span> <span class="ow">in</span> <span class="n">inner_inner</span><span class="p">:</span>
|
||
<span class="k">if</span> <span class="n">inner_inner_inner</span> <span class="o">==</span> <span class="n">with_mark</span><span class="p">:</span>
|
||
<span class="k">yield</span> <span class="n">Mark</span>
|
||
<span class="k">assert</span> <span class="kc">False</span> <span class="c1"># The simplify() function will not keep iterating after this.</span>
|
||
<span class="k">return</span> <span class="c1"># Never reached, could delete this line.</span>
|
||
<span class="k">yield</span> <span class="n">inner_inner_inner</span>
|
||
<span class="k">continue</span>
|
||
|
||
<span class="c1">#else: # inner_inner = foo ; inner = (foo)</span>
|
||
|
||
<span class="k">yield</span> <span class="n">inner</span>
|
||
|
||
|
||
<span class="k">if</span> <span class="vm">__name__</span> <span class="o">==</span> <span class="s1">'__main__'</span><span class="p">:</span>
|
||
<span class="n">unittest</span><span class="o">.</span><span class="n">main</span><span class="p">(</span><span class="n">argv</span><span class="o">=</span><span class="p">[</span><span class="s1">'ignored'</span><span class="p">,</span> <span class="s1">'MarkitTest0'</span><span class="p">],</span> <span class="n">exit</span><span class="o">=</span><span class="kc">False</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="application/vnd.jupyter.stderr">
|
||
<pre>.
|
||
----------------------------------------------------------------------
|
||
Ran 1 test in 0.001s
|
||
|
||
OK
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [60]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="n">simplify</span><span class="p">(</span><span class="n">A</span><span class="p">,</span> <span class="n">with_mark</span><span class="o">=</span><span class="n">b</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[60]:</div>
|
||
|
||
|
||
|
||
|
||
<div class="jp-RenderedText jp-OutputArea-output jp-OutputArea-executeResult" data-mime-type="text/plain">
|
||
<pre>(a)</pre>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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>Now we can create a new form that is equivalent to <code>A</code>.</p>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [61]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="k">def</span> <span class="nf">each_way</span><span class="p">(</span><span class="n">form</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
|
||
<span class="k">return</span> <span class="n">simplify</span><span class="p">(</span><span class="n">F</span><span class="p">(</span>
|
||
<span class="p">(</span> <span class="n">name</span> <span class="p">,</span> <span class="n">form</span><span class="p">),</span>
|
||
<span class="p">((</span><span class="n">name</span><span class="p">,),</span> <span class="n">simplify</span><span class="p">(</span><span class="n">form</span><span class="p">,</span> <span class="n">with_mark</span><span class="o">=</span><span class="n">name</span><span class="p">)),</span>
|
||
<span class="p">))</span>
|
||
|
||
<span class="n">Ab</span> <span class="o">=</span> <span class="n">each_way</span><span class="p">(</span><span class="n">A</span><span class="p">,</span> <span class="n">b</span><span class="p">)</span>
|
||
|
||
<span class="nb">print</span> <span class="n">A</span><span class="p">,</span> <span class="s1">'='</span><span class="p">,</span> <span class="n">Ab</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">
|
||
<pre>(((c) b) a) = (((a c) b) ((a) (b)))
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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>In this particular case the original form <code>A</code> was so simple that the new version <code>Ab</code> is actually a bit larger. With a large expression to start with the form after simplification would (usually) be smaller.</p>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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="Simplifying-the-Full-Bit-Adder">Simplifying the Full-Bit Adder<a class="anchor-link" href="#Simplifying-the-Full-Bit-Adder">¶</a></h3><p>Recall our original expressions for the sum and carry bits of a full-bit adder circuit, derived from the truth tables:</p>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [62]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="n">Sum</span> <span class="o">=</span> <span class="n">F</span><span class="p">((</span> <span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">,</span> <span class="p">(</span><span class="n">c</span><span class="p">,)),</span> <span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="p">(</span><span class="n">b</span><span class="p">,),</span> <span class="n">c</span><span class="p">),</span> <span class="p">((</span><span class="n">a</span><span class="p">,),</span> <span class="n">b</span><span class="p">,</span> <span class="n">c</span><span class="p">),</span> <span class="p">((</span><span class="n">a</span><span class="p">,),</span> <span class="p">(</span><span class="n">b</span><span class="p">,),</span> <span class="p">(</span><span class="n">c</span><span class="p">,))</span> <span class="p">),)</span>
|
||
<span class="n">Carry</span> <span class="o">=</span> <span class="n">F</span><span class="p">((</span> <span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="p">(</span><span class="n">b</span><span class="p">,),</span> <span class="p">(</span><span class="n">c</span><span class="p">,)),</span> <span class="p">((</span><span class="n">a</span><span class="p">,),</span> <span class="n">b</span><span class="p">,</span> <span class="p">(</span><span class="n">c</span><span class="p">,)),</span> <span class="p">((</span><span class="n">a</span><span class="p">,),</span> <span class="p">(</span><span class="n">b</span><span class="p">,),</span> <span class="n">c</span><span class="p">),</span> <span class="p">((</span><span class="n">a</span><span class="p">,),</span> <span class="p">(</span><span class="n">b</span><span class="p">,),</span> <span class="p">(</span><span class="n">c</span><span class="p">,))</span> <span class="p">),)</span>
|
||
</pre></div>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [63]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="n">Sum</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[63]:</div>
|
||
|
||
|
||
|
||
|
||
<div class="jp-RenderedText jp-OutputArea-output jp-OutputArea-executeResult" data-mime-type="text/plain">
|
||
<pre>((((a) (b) (c)) ((a) b c) ((b) a c) ((c) a b)))</pre>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [64]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="n">Carry</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[64]:</div>
|
||
|
||
|
||
|
||
|
||
<div class="jp-RenderedText jp-OutputArea-output jp-OutputArea-executeResult" data-mime-type="text/plain">
|
||
<pre>((((a) (b) (c)) ((a) (b) c) ((a) (c) b) ((b) (c) a)))</pre>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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>And the expressions derived from the definitions on Wikipedia:</p>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [65]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="n">Sum</span><span class="p">,</span> <span class="n">Carry</span> <span class="o">=</span> <span class="n">full_bit_adder</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">,</span> <span class="n">c</span><span class="p">)</span>
|
||
</pre></div>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [66]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="n">Sum</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[66]:</div>
|
||
|
||
|
||
|
||
|
||
<div class="jp-RenderedText jp-OutputArea-output jp-OutputArea-executeResult" data-mime-type="text/plain">
|
||
<pre>((((((((a) b) ((b) a)))) c) (((((a) b) ((b) a))) (c))))</pre>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [67]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="n">Carry</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[67]:</div>
|
||
|
||
|
||
|
||
|
||
<div class="jp-RenderedText jp-OutputArea-output jp-OutputArea-executeResult" data-mime-type="text/plain">
|
||
<pre>((((((((a) b) ((b) a)))) (c)) ((a) (b))))</pre>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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>We can use the <code>each_way()</code> function to look for simpler equivalent forms by, for example, iterating though the names and trying it with each. Try the following cells with both versions of the <code>Sum</code> and <code>Carry</code> above.</p>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [68]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="nb">print</span> <span class="n">Sum</span>
|
||
<span class="k">for</span> <span class="n">name</span> <span class="ow">in</span> <span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">,</span> <span class="n">c</span><span class="p">,</span> <span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">,</span> <span class="n">c</span><span class="p">):</span>
|
||
<span class="n">Sum</span> <span class="o">=</span> <span class="n">each_way</span><span class="p">(</span><span class="n">Sum</span><span class="p">,</span> <span class="n">name</span><span class="p">)</span>
|
||
<span class="nb">print</span> <span class="n">Sum</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">
|
||
<pre>((((((((a) b) ((b) a)))) c) (((((a) b) ((b) a))) (c))))
|
||
((((b) (c)) (a) (b c)) (((b) c) ((c) b) a))
|
||
(((((a) (c)) (a c)) b) ((((a) c) ((c) a)) (b)))
|
||
(((((a) (b)) (a b)) c) ((((a) b) ((b) a)) (c)))
|
||
(((((b) (c)) (b c)) a) ((((b) c) ((c) b)) (a)))
|
||
(((((a) (c)) (a c)) b) ((((a) c) ((c) a)) (b)))
|
||
(((((a) (b)) (a b)) c) ((((a) b) ((b) a)) (c)))
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [69]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="nb">print</span> <span class="n">Carry</span>
|
||
<span class="k">for</span> <span class="n">name</span> <span class="ow">in</span> <span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">,</span> <span class="n">c</span><span class="p">,</span> <span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">,</span> <span class="n">c</span><span class="p">):</span>
|
||
<span class="n">Carry</span> <span class="o">=</span> <span class="n">each_way</span><span class="p">(</span><span class="n">Carry</span><span class="p">,</span> <span class="n">name</span><span class="p">)</span>
|
||
<span class="nb">print</span> <span class="n">Carry</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">
|
||
<pre>((((((((a) b) ((b) a)))) (c)) ((a) (b))))
|
||
((((b) (c)) a) ((a) b c))
|
||
(((((a) c) (a)) b) ((b) a c))
|
||
(((((b) a) (b)) c) ((c) a b))
|
||
(((((c) b) (c)) a) ((a) b c))
|
||
(((((a) c) (a)) b) ((b) a c))
|
||
(((((b) a) (b)) c) ((c) a b))
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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>Let's redefine the <code>full_bit_adder()</code> function with the smallest version of each above.</p>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [70]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="k">def</span> <span class="nf">full_bit_adder</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">,</span> <span class="n">c</span><span class="p">):</span>
|
||
<span class="sd">'''From the truth table.'''</span>
|
||
<span class="k">return</span> <span class="p">(</span>
|
||
<span class="n">F</span><span class="p">((</span> <span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">,</span> <span class="p">(</span><span class="n">c</span><span class="p">,)),</span> <span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="p">(</span><span class="n">b</span><span class="p">,),</span> <span class="n">c</span><span class="p">),</span> <span class="p">((</span><span class="n">a</span><span class="p">,),</span> <span class="n">b</span><span class="p">,</span> <span class="n">c</span><span class="p">),</span> <span class="p">((</span><span class="n">a</span><span class="p">,),</span> <span class="p">(</span><span class="n">b</span><span class="p">,),</span> <span class="p">(</span><span class="n">c</span><span class="p">,))</span> <span class="p">),),</span>
|
||
<span class="n">F</span><span class="p">((</span> <span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="p">(</span><span class="n">b</span><span class="p">,),</span> <span class="p">(</span><span class="n">c</span><span class="p">,)),</span> <span class="p">((</span><span class="n">a</span><span class="p">,),</span> <span class="n">b</span><span class="p">,</span> <span class="p">(</span><span class="n">c</span><span class="p">,)),</span> <span class="p">((</span><span class="n">a</span><span class="p">,),</span> <span class="p">(</span><span class="n">b</span><span class="p">,),</span> <span class="n">c</span><span class="p">),</span> <span class="p">((</span><span class="n">a</span><span class="p">,),</span> <span class="p">(</span><span class="n">b</span><span class="p">,),</span> <span class="p">(</span><span class="n">c</span><span class="p">,))</span> <span class="p">),),</span>
|
||
<span class="p">)</span>
|
||
<span class="c1"># Sizes: [63, 327, 1383, 5607, 22503, 90087, 360423, 1441767, 1441773]</span>
|
||
</pre></div>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [71]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="k">def</span> <span class="nf">full_bit_adder</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">,</span> <span class="n">c</span><span class="p">):</span>
|
||
<span class="sd">'''Simplest forms from above.'''</span>
|
||
<span class="k">return</span> <span class="p">(</span>
|
||
<span class="n">F</span><span class="p">(</span> <span class="p">(((</span><span class="n">b</span><span class="p">,),</span> <span class="p">(</span><span class="n">c</span><span class="p">,)),</span> <span class="p">(</span><span class="n">a</span><span class="p">,),</span> <span class="p">(</span><span class="n">b</span><span class="p">,</span> <span class="n">c</span><span class="p">)),</span> <span class="p">(((</span><span class="n">b</span><span class="p">,),</span> <span class="n">c</span><span class="p">),</span> <span class="p">((</span><span class="n">c</span><span class="p">,),</span> <span class="n">b</span><span class="p">),</span> <span class="n">a</span><span class="p">)</span> <span class="p">),</span>
|
||
<span class="n">F</span><span class="p">(</span> <span class="p">(((</span><span class="n">a</span><span class="p">,),</span> <span class="p">(</span><span class="n">c</span><span class="p">,)),</span> <span class="n">b</span><span class="p">),</span> <span class="p">((</span><span class="n">b</span><span class="p">,),</span> <span class="n">a</span><span class="p">,</span> <span class="n">c</span><span class="p">)</span> <span class="p">),</span>
|
||
<span class="p">)</span>
|
||
<span class="c1"># Sizes: [57, 177, 417, 897, 1857, 3777, 7617, 15297, 7653]</span>
|
||
</pre></div>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [72]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="k">def</span> <span class="nf">full_bit_adder</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">,</span> <span class="n">c</span><span class="p">):</span>
|
||
<span class="sd">'''Based on the definitions from Wikipedia.'''</span>
|
||
<span class="k">return</span> <span class="p">(</span>
|
||
<span class="n">xor</span><span class="p">(</span><span class="n">xor</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">),</span> <span class="n">c</span><span class="p">),</span> <span class="c1"># ((((((((a) b) ((b) a)))) c) (((((a) b) ((b) a))) (c))))</span>
|
||
<span class="n">or_</span><span class="p">(</span><span class="n">and_</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">),</span> <span class="n">and_</span><span class="p">(</span><span class="n">c</span><span class="p">,</span> <span class="n">xor</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">))),</span> <span class="c1"># ((((((((a) b) ((b) a)))) (c)) ((a) (b))))</span>
|
||
<span class="p">)</span>
|
||
<span class="c1"># Sizes: [67, 159, 251, 343, 435, 527, 619, 711, 371]</span>
|
||
</pre></div>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [73]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="k">def</span> <span class="nf">full_bit_adder</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">,</span> <span class="n">c</span><span class="p">):</span>
|
||
<span class="sd">'''Based on the definitions from Wikipedia.'''</span>
|
||
<span class="k">return</span> <span class="p">(</span>
|
||
<span class="n">simplify</span><span class="p">(</span><span class="n">xor</span><span class="p">(</span><span class="n">xor</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">),</span> <span class="n">c</span><span class="p">)),</span>
|
||
<span class="n">simplify</span><span class="p">(</span><span class="n">or_</span><span class="p">(</span><span class="n">and_</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">),</span> <span class="n">and_</span><span class="p">(</span><span class="n">c</span><span class="p">,</span> <span class="n">xor</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">)))),</span>
|
||
<span class="p">)</span>
|
||
<span class="c1"># Sizes: [59, 135, 211, 287, 363, 439, 515, 591, 311]</span>
|
||
</pre></div>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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>In this case, the version from the definitions does much better than the other two.</p>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [74]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="n">Sum</span><span class="p">,</span> <span class="n">Carry</span> <span class="o">=</span> <span class="n">full_bit_adder</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">,</span> <span class="n">c</span><span class="p">)</span>
|
||
|
||
<span class="n">truth_table</span><span class="p">(</span><span class="n">Sum</span><span class="p">)</span>
|
||
<span class="nb">print</span>
|
||
<span class="n">truth_table</span><span class="p">(</span><span class="n">Carry</span><span class="p">)</span>
|
||
<span class="nb">print</span>
|
||
|
||
<span class="n">sum0</span><span class="p">,</span> <span class="n">cout</span> <span class="o">=</span> <span class="n">full_bit_adder</span><span class="p">(</span><span class="s1">'a0'</span><span class="p">,</span> <span class="s1">'b0'</span><span class="p">,</span> <span class="s1">'Cin'</span><span class="p">)</span>
|
||
<span class="n">sum1</span><span class="p">,</span> <span class="n">cout</span> <span class="o">=</span> <span class="n">full_bit_adder</span><span class="p">(</span><span class="s1">'a1'</span><span class="p">,</span> <span class="s1">'b1'</span><span class="p">,</span> <span class="n">cout</span><span class="p">)</span>
|
||
<span class="n">sum2</span><span class="p">,</span> <span class="n">cout</span> <span class="o">=</span> <span class="n">full_bit_adder</span><span class="p">(</span><span class="s1">'a2'</span><span class="p">,</span> <span class="s1">'b2'</span><span class="p">,</span> <span class="n">cout</span><span class="p">)</span>
|
||
<span class="n">sum3</span><span class="p">,</span> <span class="n">cout</span> <span class="o">=</span> <span class="n">full_bit_adder</span><span class="p">(</span><span class="s1">'a3'</span><span class="p">,</span> <span class="s1">'b3'</span><span class="p">,</span> <span class="n">cout</span><span class="p">)</span>
|
||
<span class="n">sum4</span><span class="p">,</span> <span class="n">cout</span> <span class="o">=</span> <span class="n">full_bit_adder</span><span class="p">(</span><span class="s1">'a4'</span><span class="p">,</span> <span class="s1">'b4'</span><span class="p">,</span> <span class="n">cout</span><span class="p">)</span>
|
||
<span class="n">sum5</span><span class="p">,</span> <span class="n">cout</span> <span class="o">=</span> <span class="n">full_bit_adder</span><span class="p">(</span><span class="s1">'a5'</span><span class="p">,</span> <span class="s1">'b5'</span><span class="p">,</span> <span class="n">cout</span><span class="p">)</span>
|
||
<span class="n">sum6</span><span class="p">,</span> <span class="n">cout</span> <span class="o">=</span> <span class="n">full_bit_adder</span><span class="p">(</span><span class="s1">'a6'</span><span class="p">,</span> <span class="s1">'b6'</span><span class="p">,</span> <span class="n">cout</span><span class="p">)</span>
|
||
<span class="n">sum7</span><span class="p">,</span> <span class="n">cout</span> <span class="o">=</span> <span class="n">full_bit_adder</span><span class="p">(</span><span class="s1">'a7'</span><span class="p">,</span> <span class="s1">'b7'</span><span class="p">,</span> <span class="n">cout</span><span class="p">)</span>
|
||
|
||
<span class="nb">print</span> <span class="nb">map</span><span class="p">(</span><span class="nb">len</span><span class="p">,</span> <span class="nb">map</span><span class="p">(</span><span class="nb">str</span><span class="p">,</span> <span class="p">(</span><span class="n">sum0</span><span class="p">,</span> <span class="n">sum1</span><span class="p">,</span> <span class="n">sum2</span><span class="p">,</span> <span class="n">sum3</span><span class="p">,</span> <span class="n">sum4</span><span class="p">,</span> <span class="n">sum5</span><span class="p">,</span> <span class="n">sum6</span><span class="p">,</span> <span class="n">sum7</span><span class="p">,</span> <span class="n">cout</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">
|
||
<pre>((((((a) b) ((b) a)) c) (((a) b) ((b) a) (c))))
|
||
a b c | Value
|
||
---------+------
|
||
|
|
||
() | ()
|
||
() | ()
|
||
() () |
|
||
() | ()
|
||
() () |
|
||
() () |
|
||
() () () | ()
|
||
|
||
((((((a) b) ((b) a)) (c)) ((a) (b))))
|
||
a b c | Value
|
||
---------+------
|
||
|
|
||
() |
|
||
() |
|
||
() () | ()
|
||
() |
|
||
() () | ()
|
||
() () | ()
|
||
() () () | ()
|
||
|
||
[59, 135, 211, 287, 363, 439, 515, 591, 311]
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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="Davis%E2%80%93Putnam%E2%80%93Logemann%E2%80%93Loveland-(DPLL)-algorithm-SAT-Solver"><a href="https://en.wikipedia.org/wiki/Davis%E2%80%93Putnam%E2%80%93Logemann%E2%80%93Loveland_algorithm">Davis–Putnam–Logemann–Loveland (DPLL) algorithm</a> SAT Solver<a class="anchor-link" href="#Davis%E2%80%93Putnam%E2%80%93Logemann%E2%80%93Loveland-(DPLL)-algorithm-SAT-Solver">¶</a></h1><p>This is something of an Interlude, we aren't going to use it below, but it's too cool to omit mention.</p>
|
||
<p>We can use the <code>simplify()</code> function to create a more efficient SAT solver along the lines of the DPLL algorithm.</p>
|
||
<p>It works by selecting a name from the form, and simplifying the form with that name first as <code>Void</code> then as <code>Mark</code>, then recursing with the new form and the next name. If the resulting simplified form becomes the <code>Mark</code> then our choices (of assigning <code>Void</code> or <code>Mark</code> to the names selected so far) constitute a "solution" to the original form. That is, if we <code>reify()</code> the form with the <em>environment</em> returned by the <code>dpll()</code> function the result will be Mark-valued.</p>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [75]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="k">def</span> <span class="nf">dpll</span><span class="p">(</span><span class="n">E</span><span class="p">,</span> <span class="n">partial</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">unit</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
|
||
<span class="k">if</span> <span class="n">partial</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
||
<span class="n">partial</span> <span class="o">=</span> <span class="p">{}</span>
|
||
<span class="k">else</span><span class="p">:</span>
|
||
<span class="n">partial</span> <span class="o">=</span> <span class="n">partial</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span> <span class="c1"># so we can backtrack later..</span>
|
||
|
||
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">E</span><span class="p">,</span> <span class="n">basestring</span><span class="p">):</span>
|
||
<span class="n">partial</span><span class="p">[</span><span class="n">E</span><span class="p">]</span> <span class="o">=</span> <span class="n">Mark</span>
|
||
<span class="k">return</span> <span class="n">partial</span>
|
||
|
||
<span class="k">if</span> <span class="n">unit</span><span class="p">:</span>
|
||
<span class="n">E</span> <span class="o">=</span> <span class="n">assign_unit_clauses</span><span class="p">(</span><span class="n">E</span><span class="p">,</span> <span class="n">partial</span><span class="p">)</span>
|
||
|
||
<span class="k">if</span> <span class="ow">not</span> <span class="n">E</span><span class="p">:</span>
|
||
<span class="k">return</span> <span class="n">partial</span>
|
||
|
||
<span class="k">if</span> <span class="n">Mark</span> <span class="ow">in</span> <span class="n">E</span><span class="p">:</span>
|
||
<span class="k">return</span>
|
||
|
||
<span class="n">v</span> <span class="o">=</span> <span class="n">next_symbol_of</span><span class="p">(</span><span class="n">E</span><span class="p">)</span>
|
||
|
||
<span class="n">partial</span><span class="p">[</span><span class="n">v</span><span class="p">]</span> <span class="o">=</span> <span class="n">Void</span>
|
||
|
||
<span class="n">res</span> <span class="o">=</span> <span class="n">dpll</span><span class="p">(</span><span class="n">simplify</span><span class="p">(</span><span class="n">E</span><span class="p">,</span> <span class="p">{</span><span class="n">v</span><span class="p">}),</span> <span class="n">partial</span><span class="p">,</span> <span class="n">unit</span><span class="p">)</span>
|
||
<span class="k">if</span> <span class="n">res</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
|
||
<span class="k">return</span> <span class="n">res</span>
|
||
|
||
<span class="n">partial</span><span class="p">[</span><span class="n">v</span><span class="p">]</span> <span class="o">=</span> <span class="n">Mark</span>
|
||
|
||
<span class="k">return</span> <span class="n">dpll</span><span class="p">(</span><span class="n">simplify</span><span class="p">(</span><span class="n">E</span><span class="p">,</span> <span class="n">with_mark</span><span class="o">=</span><span class="n">v</span><span class="p">),</span> <span class="n">partial</span><span class="p">,</span> <span class="n">unit</span><span class="p">)</span>
|
||
|
||
|
||
<span class="k">def</span> <span class="nf">assign_unit_clauses</span><span class="p">(</span><span class="n">E</span><span class="p">,</span> <span class="n">partial</span><span class="p">):</span>
|
||
<span class="sd">'''</span>
|
||
<span class="sd"> Find and assign values to an "unit clauses" in the form, simplifying as you go.</span>
|
||
<span class="sd"> A unit clause is a bare name or a negated name: a or (a), for these clauses we</span>
|
||
<span class="sd"> can set them to Void or Mark, respectively, to contibute to making their containing</span>
|
||
<span class="sd"> Form the Mark.</span>
|
||
<span class="sd"> '''</span>
|
||
<span class="n">on</span><span class="p">,</span> <span class="n">off</span><span class="p">,</span> <span class="n">E</span> <span class="o">=</span> <span class="n">find_units</span><span class="p">(</span><span class="n">E</span><span class="p">)</span>
|
||
<span class="k">while</span> <span class="n">on</span> <span class="ow">or</span> <span class="n">off</span><span class="p">:</span>
|
||
<span class="k">while</span> <span class="n">on</span><span class="p">:</span>
|
||
<span class="k">if</span> <span class="n">on</span> <span class="o">&</span> <span class="n">off</span><span class="p">:</span> <span class="k">return</span> <span class="n">Void</span>
|
||
<span class="n">term</span> <span class="o">=</span> <span class="n">first_of</span><span class="p">(</span><span class="n">on</span><span class="p">)</span>
|
||
<span class="n">partial</span><span class="p">[</span><span class="n">term</span><span class="p">]</span> <span class="o">=</span> <span class="n">Mark</span>
|
||
<span class="n">ON</span><span class="p">,</span> <span class="n">OFF</span><span class="p">,</span> <span class="n">E</span> <span class="o">=</span> <span class="n">find_units</span><span class="p">(</span><span class="n">simplify</span><span class="p">(</span><span class="n">E</span><span class="p">,</span> <span class="n">with_mark</span><span class="o">=</span><span class="n">term</span><span class="p">))</span>
|
||
<span class="n">on</span> <span class="o">|=</span> <span class="n">ON</span>
|
||
<span class="n">on</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">term</span><span class="p">)</span>
|
||
<span class="n">off</span> <span class="o">|=</span> <span class="n">OFF</span>
|
||
<span class="k">while</span> <span class="n">off</span><span class="p">:</span>
|
||
<span class="k">if</span> <span class="n">on</span> <span class="o">&</span> <span class="n">off</span><span class="p">:</span> <span class="k">return</span> <span class="n">Void</span>
|
||
<span class="n">term</span> <span class="o">=</span> <span class="n">first_of</span><span class="p">(</span><span class="n">off</span><span class="p">)</span>
|
||
<span class="n">partial</span><span class="p">[</span><span class="n">term</span><span class="p">]</span> <span class="o">=</span> <span class="n">Void</span>
|
||
<span class="n">ON</span><span class="p">,</span> <span class="n">OFF</span><span class="p">,</span> <span class="n">E</span> <span class="o">=</span> <span class="n">find_units</span><span class="p">(</span><span class="n">simplify</span><span class="p">(</span><span class="n">E</span><span class="p">,</span> <span class="p">{</span><span class="n">term</span><span class="p">}))</span>
|
||
<span class="n">off</span> <span class="o">|=</span> <span class="n">OFF</span>
|
||
<span class="n">off</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">term</span><span class="p">)</span>
|
||
<span class="n">on</span> <span class="o">|=</span> <span class="n">ON</span>
|
||
<span class="k">return</span> <span class="n">E</span>
|
||
|
||
|
||
<span class="k">def</span> <span class="nf">next_symbol_of</span><span class="p">(</span><span class="n">E</span><span class="p">):</span>
|
||
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">E</span><span class="p">,</span> <span class="n">basestring</span><span class="p">):</span>
|
||
<span class="k">return</span> <span class="n">E</span>
|
||
<span class="k">for</span> <span class="n">it</span> <span class="ow">in</span> <span class="n">E</span><span class="p">:</span>
|
||
<span class="k">return</span> <span class="n">next_symbol_of</span><span class="p">(</span><span class="n">it</span><span class="p">)</span>
|
||
<span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span><span class="s2">"no more symbols"</span><span class="p">)</span>
|
||
|
||
|
||
<span class="k">def</span> <span class="nf">find_units</span><span class="p">(</span><span class="n">E</span><span class="p">):</span>
|
||
<span class="sd">'''</span>
|
||
<span class="sd"> Return two sets and a possibly-reduced E. The literals in the first</span>
|
||
<span class="sd"> set must be Void and those in the second must be set Mark to have the</span>
|
||
<span class="sd"> entire expression become Void.</span>
|
||
<span class="sd"> '''</span>
|
||
<span class="n">on</span><span class="p">,</span> <span class="n">off</span><span class="p">,</span> <span class="n">poly</span> <span class="o">=</span> <span class="nb">set</span><span class="p">(),</span> <span class="nb">set</span><span class="p">(),</span> <span class="nb">set</span><span class="p">()</span>
|
||
<span class="k">for</span> <span class="n">clause</span> <span class="ow">in</span> <span class="n">E</span><span class="p">:</span>
|
||
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">clause</span><span class="p">,</span> <span class="n">basestring</span><span class="p">):</span>
|
||
<span class="n">off</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">clause</span><span class="p">)</span>
|
||
<span class="k">continue</span>
|
||
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">clause</span><span class="p">)</span> <span class="o">!=</span> <span class="mi">1</span><span class="p">:</span>
|
||
<span class="n">poly</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">clause</span><span class="p">)</span>
|
||
<span class="k">continue</span>
|
||
<span class="p">(</span><span class="n">n</span><span class="p">,)</span> <span class="o">=</span> <span class="n">clause</span> <span class="c1"># Unwrap one layer of containment.</span>
|
||
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">n</span><span class="p">,</span> <span class="n">basestring</span><span class="p">):</span>
|
||
<span class="n">on</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">n</span><span class="p">)</span>
|
||
<span class="k">else</span><span class="p">:</span>
|
||
<span class="n">poly</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">clause</span><span class="p">)</span>
|
||
<span class="k">return</span> <span class="n">on</span><span class="p">,</span> <span class="n">off</span><span class="p">,</span> <span class="n">Form</span><span class="p">(</span><span class="n">poly</span><span class="p">)</span>
|
||
|
||
|
||
<span class="c1"># Return any item from a form.</span>
|
||
<span class="n">first_of</span> <span class="o">=</span> <span class="k">lambda</span> <span class="n">form</span><span class="p">:</span> <span class="nb">next</span><span class="p">(</span><span class="nb">iter</span><span class="p">(</span><span class="n">form</span><span class="p">))</span>
|
||
</pre></div>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [76]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="n">A</span> <span class="o">=</span> <span class="n">F</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="p">(</span><span class="n">b</span><span class="p">,</span> <span class="p">(</span><span class="n">c</span><span class="p">,)))</span>
|
||
<span class="n">truth_table</span><span class="p">(</span><span class="n">A</span><span class="p">)</span>
|
||
<span class="n">solution</span> <span class="o">=</span> <span class="n">dpll</span><span class="p">(</span><span class="n">A</span><span class="p">)</span>
|
||
<span class="n">arith</span> <span class="o">=</span> <span class="n">reify</span><span class="p">(</span><span class="n">A</span><span class="p">,</span> <span class="n">solution</span><span class="p">)</span>
|
||
<span class="nb">print</span>
|
||
<span class="nb">print</span> <span class="s1">'A solution:'</span><span class="p">,</span> <span class="n">solution</span>
|
||
<span class="nb">print</span>
|
||
<span class="nb">print</span> <span class="s1">'Reifies to'</span><span class="p">,</span> <span class="n">arith</span><span class="p">,</span> <span class="sa">u</span><span class="s1">'⟶'</span><span class="p">,</span> <span class="n">value_of</span><span class="p">(</span><span class="n">arith</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">
|
||
<pre>(((c) b) a)
|
||
a b c | Value
|
||
---------+------
|
||
| ()
|
||
() |
|
||
() | ()
|
||
() () | ()
|
||
() |
|
||
() () |
|
||
() () |
|
||
() () () |
|
||
|
||
A solution: {'a': (()), 'c': (()), 'b': (())}
|
||
|
||
Reifies to ((((())) (())) (())) ⟶ ()
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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="dpll_iter()"><code>dpll_iter()</code><a class="anchor-link" href="#dpll_iter()">¶</a></h3><p>We can write a generator version of the function that keeps looking for solutions after the first.</p>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [77]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="k">def</span> <span class="nf">dpll_iter</span><span class="p">(</span><span class="n">E</span><span class="p">,</span> <span class="n">partial</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">unit</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
|
||
<span class="k">if</span> <span class="n">partial</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
||
<span class="n">partial</span> <span class="o">=</span> <span class="p">{}</span>
|
||
<span class="k">else</span><span class="p">:</span>
|
||
<span class="n">partial</span> <span class="o">=</span> <span class="n">partial</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span> <span class="c1"># so we can backtrack later..</span>
|
||
|
||
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">E</span><span class="p">,</span> <span class="n">basestring</span><span class="p">):</span>
|
||
<span class="n">partial</span><span class="p">[</span><span class="n">E</span><span class="p">]</span> <span class="o">=</span> <span class="n">Mark</span>
|
||
<span class="k">yield</span> <span class="n">partial</span>
|
||
<span class="k">return</span>
|
||
|
||
<span class="k">if</span> <span class="n">unit</span><span class="p">:</span>
|
||
<span class="n">E</span> <span class="o">=</span> <span class="n">assign_unit_clauses</span><span class="p">(</span><span class="n">E</span><span class="p">,</span> <span class="n">partial</span><span class="p">)</span>
|
||
|
||
<span class="k">if</span> <span class="ow">not</span> <span class="n">E</span><span class="p">:</span>
|
||
<span class="k">yield</span> <span class="n">partial</span>
|
||
<span class="k">return</span>
|
||
|
||
<span class="k">if</span> <span class="n">Mark</span> <span class="ow">in</span> <span class="n">E</span><span class="p">:</span>
|
||
<span class="k">return</span>
|
||
|
||
<span class="n">v</span> <span class="o">=</span> <span class="n">next_symbol_of</span><span class="p">(</span><span class="n">E</span><span class="p">)</span>
|
||
|
||
<span class="n">partial</span><span class="p">[</span><span class="n">v</span><span class="p">]</span> <span class="o">=</span> <span class="n">Void</span>
|
||
|
||
<span class="k">for</span> <span class="n">res</span> <span class="ow">in</span> <span class="n">dpll_iter</span><span class="p">(</span><span class="n">simplify</span><span class="p">(</span><span class="n">E</span><span class="p">,</span> <span class="p">{</span><span class="n">v</span><span class="p">}),</span> <span class="n">partial</span><span class="p">,</span> <span class="n">unit</span><span class="p">):</span>
|
||
<span class="k">yield</span> <span class="n">res</span>
|
||
|
||
<span class="n">partial</span><span class="p">[</span><span class="n">v</span><span class="p">]</span> <span class="o">=</span> <span class="n">Mark</span>
|
||
|
||
<span class="k">for</span> <span class="n">res</span> <span class="ow">in</span> <span class="n">dpll_iter</span><span class="p">(</span><span class="n">simplify</span><span class="p">(</span><span class="n">E</span><span class="p">,</span> <span class="n">with_mark</span><span class="o">=</span><span class="n">v</span><span class="p">),</span> <span class="n">partial</span><span class="p">,</span> <span class="n">unit</span><span class="p">):</span>
|
||
<span class="k">yield</span> <span class="n">res</span>
|
||
</pre></div>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [78]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="k">for</span> <span class="n">solution</span> <span class="ow">in</span> <span class="n">dpll_iter</span><span class="p">(</span><span class="n">A</span><span class="p">):</span>
|
||
<span class="nb">print</span> <span class="p">(</span><span class="n">solution</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">
|
||
<pre>{'a': (()), 'c': (()), 'b': (())}
|
||
{'a': (()), 'b': ()}
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [79]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="n">Sum</span><span class="p">,</span> <span class="n">Carry</span> <span class="o">=</span> <span class="n">full_bit_adder</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">,</span> <span class="n">c</span><span class="p">)</span>
|
||
</pre></div>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [80]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="k">for</span> <span class="n">solution</span> <span class="ow">in</span> <span class="n">dpll_iter</span><span class="p">(</span><span class="n">Sum</span><span class="p">,</span> <span class="n">unit</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
|
||
<span class="n">r</span> <span class="o">=</span> <span class="n">reify</span><span class="p">(</span><span class="n">Sum</span><span class="p">,</span> <span class="n">solution</span><span class="p">)</span>
|
||
<span class="nb">print</span> <span class="p">(</span><span class="n">solution</span><span class="p">),</span> <span class="n">r</span><span class="p">,</span> <span class="s1">'='</span><span class="p">,</span> <span class="n">simplify</span><span class="p">(</span><span class="n">r</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">
|
||
<pre>{'a': (()), 'c': (), 'b': (())} (((((((())) (()))) ()) ((((())) (())) (())))) = ()
|
||
{'a': (()), 'c': (()), 'b': ()} (((((((())) ()) ((()))) (())) ((((())) ()) ((()))))) = ()
|
||
{'a': (), 'c': (()), 'b': (())} (((((((())) ()) ((()))) (())) ((((())) ()) ((()))))) = ()
|
||
{'a': (), 'c': (), 'b': ()} ((((((()) ())) ()) (((()) ()) (())))) = ()
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [81]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="k">for</span> <span class="n">solution</span> <span class="ow">in</span> <span class="n">dpll_iter</span><span class="p">(</span><span class="n">Carry</span><span class="p">,</span> <span class="n">unit</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
|
||
<span class="n">r</span> <span class="o">=</span> <span class="n">reify</span><span class="p">(</span><span class="n">Carry</span><span class="p">,</span> <span class="n">solution</span><span class="p">)</span>
|
||
<span class="nb">print</span> <span class="p">(</span><span class="n">solution</span><span class="p">),</span> <span class="n">r</span><span class="p">,</span> <span class="s1">'='</span><span class="p">,</span> <span class="n">simplify</span><span class="p">(</span><span class="n">r</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">
|
||
<pre>{'a': (()), 'c': (), 'b': ()} (((((((())) ()) ((()))) (())) (((())) (())))) = ()
|
||
{'a': (), 'c': (), 'b': (())} (((((((())) ()) ((()))) (())) (((())) (())))) = ()
|
||
{'a': (), 'b': ()} ((((((()) ())) (c)) ((())))) = ()
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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>Notice that the reified form still has <code>c</code> in it but that doesn't prevent the <code>simplify()</code> function from reducing the form to the Mark. This should be the case for all solutions generated by the <code>dpll_iter()</code> function.</p>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [82]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="k">for</span> <span class="n">solution</span> <span class="ow">in</span> <span class="n">dpll_iter</span><span class="p">(</span><span class="n">cout</span><span class="p">):</span>
|
||
<span class="nb">print</span> <span class="n">simplify</span><span class="p">(</span><span class="n">reify</span><span class="p">(</span><span class="n">cout</span><span class="p">,</span> <span class="n">solution</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">
|
||
<pre>() () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () (((a5) a5)) (((a5) a5)) () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () (((a5) a5)) (((a5) a5)) () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () (((a5) a5)) (((a5) a5)) () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () (((a5) a5)) (((a5) a5)) () ()
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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>Interesting! Some solutions do not <code>simplify()</code> completely in one go. The form <code>(((a5) a5))</code> is Mark-valued:</p>
|
||
<pre><code>(((a5) a5))
|
||
((( ) a5))
|
||
((( ) ))
|
||
( )
|
||
()
|
||
</code></pre>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [83]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="n">E</span> <span class="o">=</span> <span class="n">F</span><span class="p">(((</span><span class="n">a</span><span class="p">,),</span> <span class="n">a</span><span class="p">))</span>
|
||
<span class="nb">print</span> <span class="n">E</span>
|
||
<span class="nb">print</span> <span class="n">simplify</span><span class="p">(</span><span class="n">E</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">
|
||
<pre>(((a) a))
|
||
()
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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>Something to keep in mind.</p>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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="Now-back-to-Circuits">Now back to Circuits<a class="anchor-link" href="#Now-back-to-Circuits">¶</a></h1><h2 id="Using-the-Adder-Circuits-to-Add">Using the Adder Circuits to Add<a class="anchor-link" href="#Using-the-Adder-Circuits-to-Add">¶</a></h2><p>In order to keep things tractable I'm going to use just four bits rather than eight.</p>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [84]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="n">sum0</span><span class="p">,</span> <span class="n">cout</span> <span class="o">=</span> <span class="n">full_bit_adder</span><span class="p">(</span><span class="s1">'a0'</span><span class="p">,</span> <span class="s1">'b0'</span><span class="p">,</span> <span class="s1">'Cin'</span><span class="p">)</span>
|
||
<span class="n">sum1</span><span class="p">,</span> <span class="n">cout</span> <span class="o">=</span> <span class="n">full_bit_adder</span><span class="p">(</span><span class="s1">'a1'</span><span class="p">,</span> <span class="s1">'b1'</span><span class="p">,</span> <span class="n">cout</span><span class="p">)</span>
|
||
<span class="n">sum2</span><span class="p">,</span> <span class="n">cout</span> <span class="o">=</span> <span class="n">full_bit_adder</span><span class="p">(</span><span class="s1">'a2'</span><span class="p">,</span> <span class="s1">'b2'</span><span class="p">,</span> <span class="n">cout</span><span class="p">)</span>
|
||
<span class="n">sum3</span><span class="p">,</span> <span class="n">cout</span> <span class="o">=</span> <span class="n">full_bit_adder</span><span class="p">(</span><span class="s1">'a3'</span><span class="p">,</span> <span class="s1">'b3'</span><span class="p">,</span> <span class="n">cout</span><span class="p">)</span>
|
||
</pre></div>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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>Put the circuit expressions into a handy dictionary, and we are ready to add some numbers.</p>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [85]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="n">CIRCUITS</span> <span class="o">=</span> <span class="p">{</span>
|
||
<span class="s1">'sum0'</span><span class="p">:</span> <span class="n">sum0</span><span class="p">,</span>
|
||
<span class="s1">'sum1'</span><span class="p">:</span> <span class="n">sum1</span><span class="p">,</span>
|
||
<span class="s1">'sum2'</span><span class="p">:</span> <span class="n">sum2</span><span class="p">,</span>
|
||
<span class="s1">'sum3'</span><span class="p">:</span> <span class="n">sum3</span><span class="p">,</span>
|
||
<span class="s1">'cout'</span><span class="p">:</span> <span class="n">cout</span><span class="p">,</span>
|
||
<span class="p">}</span>
|
||
</pre></div>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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>A bunch of crufty junk to print out a nice truth table with the columns arranged to make it (relatively) easy to see the addition.</p>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [86]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="k">def</span> <span class="nf">stringy_env</span><span class="p">(</span><span class="n">env</span><span class="p">):</span>
|
||
<span class="k">return</span> <span class="p">{</span>
|
||
<span class="n">k</span><span class="p">:</span> <span class="n">value_of</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="n">v</span><span class="o">=</span><span class="s1">'--'</span><span class="p">,</span> <span class="n">m</span><span class="o">=</span><span class="s1">'()'</span><span class="p">)</span>
|
||
<span class="k">for</span> <span class="n">k</span><span class="p">,</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">env</span><span class="o">.</span><span class="n">items</span><span class="p">()</span>
|
||
<span class="p">}</span>
|
||
|
||
<span class="n">INPUTs</span> <span class="o">=</span> <span class="p">(</span><span class="s1">'Cin'</span><span class="p">,</span> <span class="s1">'a3'</span><span class="p">,</span> <span class="s1">'a2'</span><span class="p">,</span> <span class="s1">'a1'</span><span class="p">,</span> <span class="s1">'a0'</span><span class="p">,</span> <span class="s1">'b3'</span><span class="p">,</span> <span class="s1">'b2'</span><span class="p">,</span> <span class="s1">'b1'</span><span class="p">,</span> <span class="s1">'b0'</span><span class="p">)</span>
|
||
<span class="n">OUTPUTs</span> <span class="o">=</span> <span class="p">(</span><span class="s1">'cout'</span><span class="p">,</span> <span class="s1">'sum3'</span><span class="p">,</span> <span class="s1">'sum2'</span><span class="p">,</span> <span class="s1">'sum1'</span><span class="p">,</span> <span class="s1">'sum0'</span><span class="p">)</span>
|
||
|
||
<span class="n">format_string</span> <span class="o">=</span> <span class="s1">'%('</span> <span class="o">+</span> <span class="s1">')s %('</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">INPUTs</span><span class="p">)</span> <span class="o">+</span> <span class="s1">')s | %('</span> <span class="o">+</span> <span class="s1">')s %('</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">OUTPUTs</span><span class="p">)</span> <span class="o">+</span> <span class="s1">')s'</span>
|
||
|
||
|
||
<span class="nb">print</span> <span class="s1">'Ci|a3 a2 a1 a0|b3 b2 b1 b0 | Co s3 s2 s1 s0'</span>
|
||
<span class="n">results</span> <span class="o">=</span> <span class="p">{}</span>
|
||
<span class="k">for</span> <span class="n">env</span> <span class="ow">in</span> <span class="n">environments_of_variables</span><span class="p">(</span><span class="o">*</span><span class="n">INPUTs</span><span class="p">):</span>
|
||
|
||
<span class="k">for</span> <span class="n">name</span><span class="p">,</span> <span class="n">expression</span> <span class="ow">in</span> <span class="n">CIRCUITS</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
|
||
<span class="n">results</span><span class="p">[</span><span class="n">name</span><span class="p">]</span> <span class="o">=</span> <span class="n">value_of</span><span class="p">(</span><span class="n">reify</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">env</span><span class="p">))</span>
|
||
|
||
<span class="n">env</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">results</span><span class="p">)</span>
|
||
<span class="nb">print</span> <span class="n">format_string</span> <span class="o">%</span> <span class="n">stringy_env</span><span class="p">(</span><span class="n">env</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">
|
||
<pre>Ci|a3 a2 a1 a0|b3 b2 b1 b0 | Co s3 s2 s1 s0
|
||
-- -- -- -- -- -- -- -- -- | -- -- -- -- --
|
||
-- -- -- -- -- -- -- -- () | -- -- -- -- ()
|
||
-- -- -- -- -- -- -- () -- | -- -- -- () --
|
||
-- -- -- -- -- -- -- () () | -- -- -- () ()
|
||
-- -- -- -- -- -- () -- -- | -- -- () -- --
|
||
-- -- -- -- -- -- () -- () | -- -- () -- ()
|
||
-- -- -- -- -- -- () () -- | -- -- () () --
|
||
-- -- -- -- -- -- () () () | -- -- () () ()
|
||
-- -- -- -- -- () -- -- -- | -- () -- -- --
|
||
-- -- -- -- -- () -- -- () | -- () -- -- ()
|
||
-- -- -- -- -- () -- () -- | -- () -- () --
|
||
-- -- -- -- -- () -- () () | -- () -- () ()
|
||
-- -- -- -- -- () () -- -- | -- () () -- --
|
||
-- -- -- -- -- () () -- () | -- () () -- ()
|
||
-- -- -- -- -- () () () -- | -- () () () --
|
||
-- -- -- -- -- () () () () | -- () () () ()
|
||
-- -- -- -- () -- -- -- -- | -- -- -- -- ()
|
||
-- -- -- -- () -- -- -- () | -- -- -- () --
|
||
-- -- -- -- () -- -- () -- | -- -- -- () ()
|
||
-- -- -- -- () -- -- () () | -- -- () -- --
|
||
-- -- -- -- () -- () -- -- | -- -- () -- ()
|
||
-- -- -- -- () -- () -- () | -- -- () () --
|
||
-- -- -- -- () -- () () -- | -- -- () () ()
|
||
-- -- -- -- () -- () () () | -- () -- -- --
|
||
-- -- -- -- () () -- -- -- | -- () -- -- ()
|
||
-- -- -- -- () () -- -- () | -- () -- () --
|
||
-- -- -- -- () () -- () -- | -- () -- () ()
|
||
-- -- -- -- () () -- () () | -- () () -- --
|
||
-- -- -- -- () () () -- -- | -- () () -- ()
|
||
-- -- -- -- () () () -- () | -- () () () --
|
||
-- -- -- -- () () () () -- | -- () () () ()
|
||
-- -- -- -- () () () () () | () -- -- -- --
|
||
-- -- -- () -- -- -- -- -- | -- -- -- () --
|
||
-- -- -- () -- -- -- -- () | -- -- -- () ()
|
||
-- -- -- () -- -- -- () -- | -- -- () -- --
|
||
-- -- -- () -- -- -- () () | -- -- () -- ()
|
||
-- -- -- () -- -- () -- -- | -- -- () () --
|
||
-- -- -- () -- -- () -- () | -- -- () () ()
|
||
-- -- -- () -- -- () () -- | -- () -- -- --
|
||
-- -- -- () -- -- () () () | -- () -- -- ()
|
||
-- -- -- () -- () -- -- -- | -- () -- () --
|
||
-- -- -- () -- () -- -- () | -- () -- () ()
|
||
-- -- -- () -- () -- () -- | -- () () -- --
|
||
-- -- -- () -- () -- () () | -- () () -- ()
|
||
-- -- -- () -- () () -- -- | -- () () () --
|
||
-- -- -- () -- () () -- () | -- () () () ()
|
||
-- -- -- () -- () () () -- | () -- -- -- --
|
||
-- -- -- () -- () () () () | () -- -- -- ()
|
||
-- -- -- () () -- -- -- -- | -- -- -- () ()
|
||
-- -- -- () () -- -- -- () | -- -- () -- --
|
||
-- -- -- () () -- -- () -- | -- -- () -- ()
|
||
-- -- -- () () -- -- () () | -- -- () () --
|
||
-- -- -- () () -- () -- -- | -- -- () () ()
|
||
-- -- -- () () -- () -- () | -- () -- -- --
|
||
-- -- -- () () -- () () -- | -- () -- -- ()
|
||
-- -- -- () () -- () () () | -- () -- () --
|
||
-- -- -- () () () -- -- -- | -- () -- () ()
|
||
-- -- -- () () () -- -- () | -- () () -- --
|
||
-- -- -- () () () -- () -- | -- () () -- ()
|
||
-- -- -- () () () -- () () | -- () () () --
|
||
-- -- -- () () () () -- -- | -- () () () ()
|
||
-- -- -- () () () () -- () | () -- -- -- --
|
||
-- -- -- () () () () () -- | () -- -- -- ()
|
||
-- -- -- () () () () () () | () -- -- () --
|
||
-- -- () -- -- -- -- -- -- | -- -- () -- --
|
||
-- -- () -- -- -- -- -- () | -- -- () -- ()
|
||
-- -- () -- -- -- -- () -- | -- -- () () --
|
||
-- -- () -- -- -- -- () () | -- -- () () ()
|
||
-- -- () -- -- -- () -- -- | -- () -- -- --
|
||
-- -- () -- -- -- () -- () | -- () -- -- ()
|
||
-- -- () -- -- -- () () -- | -- () -- () --
|
||
-- -- () -- -- -- () () () | -- () -- () ()
|
||
-- -- () -- -- () -- -- -- | -- () () -- --
|
||
-- -- () -- -- () -- -- () | -- () () -- ()
|
||
-- -- () -- -- () -- () -- | -- () () () --
|
||
-- -- () -- -- () -- () () | -- () () () ()
|
||
-- -- () -- -- () () -- -- | () -- -- -- --
|
||
-- -- () -- -- () () -- () | () -- -- -- ()
|
||
-- -- () -- -- () () () -- | () -- -- () --
|
||
-- -- () -- -- () () () () | () -- -- () ()
|
||
-- -- () -- () -- -- -- -- | -- -- () -- ()
|
||
-- -- () -- () -- -- -- () | -- -- () () --
|
||
-- -- () -- () -- -- () -- | -- -- () () ()
|
||
-- -- () -- () -- -- () () | -- () -- -- --
|
||
-- -- () -- () -- () -- -- | -- () -- -- ()
|
||
-- -- () -- () -- () -- () | -- () -- () --
|
||
-- -- () -- () -- () () -- | -- () -- () ()
|
||
-- -- () -- () -- () () () | -- () () -- --
|
||
-- -- () -- () () -- -- -- | -- () () -- ()
|
||
-- -- () -- () () -- -- () | -- () () () --
|
||
-- -- () -- () () -- () -- | -- () () () ()
|
||
-- -- () -- () () -- () () | () -- -- -- --
|
||
-- -- () -- () () () -- -- | () -- -- -- ()
|
||
-- -- () -- () () () -- () | () -- -- () --
|
||
-- -- () -- () () () () -- | () -- -- () ()
|
||
-- -- () -- () () () () () | () -- () -- --
|
||
-- -- () () -- -- -- -- -- | -- -- () () --
|
||
-- -- () () -- -- -- -- () | -- -- () () ()
|
||
-- -- () () -- -- -- () -- | -- () -- -- --
|
||
-- -- () () -- -- -- () () | -- () -- -- ()
|
||
-- -- () () -- -- () -- -- | -- () -- () --
|
||
-- -- () () -- -- () -- () | -- () -- () ()
|
||
-- -- () () -- -- () () -- | -- () () -- --
|
||
-- -- () () -- -- () () () | -- () () -- ()
|
||
-- -- () () -- () -- -- -- | -- () () () --
|
||
-- -- () () -- () -- -- () | -- () () () ()
|
||
-- -- () () -- () -- () -- | () -- -- -- --
|
||
-- -- () () -- () -- () () | () -- -- -- ()
|
||
-- -- () () -- () () -- -- | () -- -- () --
|
||
-- -- () () -- () () -- () | () -- -- () ()
|
||
-- -- () () -- () () () -- | () -- () -- --
|
||
-- -- () () -- () () () () | () -- () -- ()
|
||
-- -- () () () -- -- -- -- | -- -- () () ()
|
||
-- -- () () () -- -- -- () | -- () -- -- --
|
||
-- -- () () () -- -- () -- | -- () -- -- ()
|
||
-- -- () () () -- -- () () | -- () -- () --
|
||
-- -- () () () -- () -- -- | -- () -- () ()
|
||
-- -- () () () -- () -- () | -- () () -- --
|
||
-- -- () () () -- () () -- | -- () () -- ()
|
||
-- -- () () () -- () () () | -- () () () --
|
||
-- -- () () () () -- -- -- | -- () () () ()
|
||
-- -- () () () () -- -- () | () -- -- -- --
|
||
-- -- () () () () -- () -- | () -- -- -- ()
|
||
-- -- () () () () -- () () | () -- -- () --
|
||
-- -- () () () () () -- -- | () -- -- () ()
|
||
-- -- () () () () () -- () | () -- () -- --
|
||
-- -- () () () () () () -- | () -- () -- ()
|
||
-- -- () () () () () () () | () -- () () --
|
||
-- () -- -- -- -- -- -- -- | -- () -- -- --
|
||
-- () -- -- -- -- -- -- () | -- () -- -- ()
|
||
-- () -- -- -- -- -- () -- | -- () -- () --
|
||
-- () -- -- -- -- -- () () | -- () -- () ()
|
||
-- () -- -- -- -- () -- -- | -- () () -- --
|
||
-- () -- -- -- -- () -- () | -- () () -- ()
|
||
-- () -- -- -- -- () () -- | -- () () () --
|
||
-- () -- -- -- -- () () () | -- () () () ()
|
||
-- () -- -- -- () -- -- -- | () -- -- -- --
|
||
-- () -- -- -- () -- -- () | () -- -- -- ()
|
||
-- () -- -- -- () -- () -- | () -- -- () --
|
||
-- () -- -- -- () -- () () | () -- -- () ()
|
||
-- () -- -- -- () () -- -- | () -- () -- --
|
||
-- () -- -- -- () () -- () | () -- () -- ()
|
||
-- () -- -- -- () () () -- | () -- () () --
|
||
-- () -- -- -- () () () () | () -- () () ()
|
||
-- () -- -- () -- -- -- -- | -- () -- -- ()
|
||
-- () -- -- () -- -- -- () | -- () -- () --
|
||
-- () -- -- () -- -- () -- | -- () -- () ()
|
||
-- () -- -- () -- -- () () | -- () () -- --
|
||
-- () -- -- () -- () -- -- | -- () () -- ()
|
||
-- () -- -- () -- () -- () | -- () () () --
|
||
-- () -- -- () -- () () -- | -- () () () ()
|
||
-- () -- -- () -- () () () | () -- -- -- --
|
||
-- () -- -- () () -- -- -- | () -- -- -- ()
|
||
-- () -- -- () () -- -- () | () -- -- () --
|
||
-- () -- -- () () -- () -- | () -- -- () ()
|
||
-- () -- -- () () -- () () | () -- () -- --
|
||
-- () -- -- () () () -- -- | () -- () -- ()
|
||
-- () -- -- () () () -- () | () -- () () --
|
||
-- () -- -- () () () () -- | () -- () () ()
|
||
-- () -- -- () () () () () | () () -- -- --
|
||
-- () -- () -- -- -- -- -- | -- () -- () --
|
||
-- () -- () -- -- -- -- () | -- () -- () ()
|
||
-- () -- () -- -- -- () -- | -- () () -- --
|
||
-- () -- () -- -- -- () () | -- () () -- ()
|
||
-- () -- () -- -- () -- -- | -- () () () --
|
||
-- () -- () -- -- () -- () | -- () () () ()
|
||
-- () -- () -- -- () () -- | () -- -- -- --
|
||
-- () -- () -- -- () () () | () -- -- -- ()
|
||
-- () -- () -- () -- -- -- | () -- -- () --
|
||
-- () -- () -- () -- -- () | () -- -- () ()
|
||
-- () -- () -- () -- () -- | () -- () -- --
|
||
-- () -- () -- () -- () () | () -- () -- ()
|
||
-- () -- () -- () () -- -- | () -- () () --
|
||
-- () -- () -- () () -- () | () -- () () ()
|
||
-- () -- () -- () () () -- | () () -- -- --
|
||
-- () -- () -- () () () () | () () -- -- ()
|
||
-- () -- () () -- -- -- -- | -- () -- () ()
|
||
-- () -- () () -- -- -- () | -- () () -- --
|
||
-- () -- () () -- -- () -- | -- () () -- ()
|
||
-- () -- () () -- -- () () | -- () () () --
|
||
-- () -- () () -- () -- -- | -- () () () ()
|
||
-- () -- () () -- () -- () | () -- -- -- --
|
||
-- () -- () () -- () () -- | () -- -- -- ()
|
||
-- () -- () () -- () () () | () -- -- () --
|
||
-- () -- () () () -- -- -- | () -- -- () ()
|
||
-- () -- () () () -- -- () | () -- () -- --
|
||
-- () -- () () () -- () -- | () -- () -- ()
|
||
-- () -- () () () -- () () | () -- () () --
|
||
-- () -- () () () () -- -- | () -- () () ()
|
||
-- () -- () () () () -- () | () () -- -- --
|
||
-- () -- () () () () () -- | () () -- -- ()
|
||
-- () -- () () () () () () | () () -- () --
|
||
-- () () -- -- -- -- -- -- | -- () () -- --
|
||
-- () () -- -- -- -- -- () | -- () () -- ()
|
||
-- () () -- -- -- -- () -- | -- () () () --
|
||
-- () () -- -- -- -- () () | -- () () () ()
|
||
-- () () -- -- -- () -- -- | () -- -- -- --
|
||
-- () () -- -- -- () -- () | () -- -- -- ()
|
||
-- () () -- -- -- () () -- | () -- -- () --
|
||
-- () () -- -- -- () () () | () -- -- () ()
|
||
-- () () -- -- () -- -- -- | () -- () -- --
|
||
-- () () -- -- () -- -- () | () -- () -- ()
|
||
-- () () -- -- () -- () -- | () -- () () --
|
||
-- () () -- -- () -- () () | () -- () () ()
|
||
-- () () -- -- () () -- -- | () () -- -- --
|
||
-- () () -- -- () () -- () | () () -- -- ()
|
||
-- () () -- -- () () () -- | () () -- () --
|
||
-- () () -- -- () () () () | () () -- () ()
|
||
-- () () -- () -- -- -- -- | -- () () -- ()
|
||
-- () () -- () -- -- -- () | -- () () () --
|
||
-- () () -- () -- -- () -- | -- () () () ()
|
||
-- () () -- () -- -- () () | () -- -- -- --
|
||
-- () () -- () -- () -- -- | () -- -- -- ()
|
||
-- () () -- () -- () -- () | () -- -- () --
|
||
-- () () -- () -- () () -- | () -- -- () ()
|
||
-- () () -- () -- () () () | () -- () -- --
|
||
-- () () -- () () -- -- -- | () -- () -- ()
|
||
-- () () -- () () -- -- () | () -- () () --
|
||
-- () () -- () () -- () -- | () -- () () ()
|
||
-- () () -- () () -- () () | () () -- -- --
|
||
-- () () -- () () () -- -- | () () -- -- ()
|
||
-- () () -- () () () -- () | () () -- () --
|
||
-- () () -- () () () () -- | () () -- () ()
|
||
-- () () -- () () () () () | () () () -- --
|
||
-- () () () -- -- -- -- -- | -- () () () --
|
||
-- () () () -- -- -- -- () | -- () () () ()
|
||
-- () () () -- -- -- () -- | () -- -- -- --
|
||
-- () () () -- -- -- () () | () -- -- -- ()
|
||
-- () () () -- -- () -- -- | () -- -- () --
|
||
-- () () () -- -- () -- () | () -- -- () ()
|
||
-- () () () -- -- () () -- | () -- () -- --
|
||
-- () () () -- -- () () () | () -- () -- ()
|
||
-- () () () -- () -- -- -- | () -- () () --
|
||
-- () () () -- () -- -- () | () -- () () ()
|
||
-- () () () -- () -- () -- | () () -- -- --
|
||
-- () () () -- () -- () () | () () -- -- ()
|
||
-- () () () -- () () -- -- | () () -- () --
|
||
-- () () () -- () () -- () | () () -- () ()
|
||
-- () () () -- () () () -- | () () () -- --
|
||
-- () () () -- () () () () | () () () -- ()
|
||
-- () () () () -- -- -- -- | -- () () () ()
|
||
-- () () () () -- -- -- () | () -- -- -- --
|
||
-- () () () () -- -- () -- | () -- -- -- ()
|
||
-- () () () () -- -- () () | () -- -- () --
|
||
-- () () () () -- () -- -- | () -- -- () ()
|
||
-- () () () () -- () -- () | () -- () -- --
|
||
-- () () () () -- () () -- | () -- () -- ()
|
||
-- () () () () -- () () () | () -- () () --
|
||
-- () () () () () -- -- -- | () -- () () ()
|
||
-- () () () () () -- -- () | () () -- -- --
|
||
-- () () () () () -- () -- | () () -- -- ()
|
||
-- () () () () () -- () () | () () -- () --
|
||
-- () () () () () () -- -- | () () -- () ()
|
||
-- () () () () () () -- () | () () () -- --
|
||
-- () () () () () () () -- | () () () -- ()
|
||
-- () () () () () () () () | () () () () --
|
||
() -- -- -- -- -- -- -- -- | -- -- -- -- ()
|
||
() -- -- -- -- -- -- -- () | -- -- -- () --
|
||
() -- -- -- -- -- -- () -- | -- -- -- () ()
|
||
() -- -- -- -- -- -- () () | -- -- () -- --
|
||
() -- -- -- -- -- () -- -- | -- -- () -- ()
|
||
() -- -- -- -- -- () -- () | -- -- () () --
|
||
() -- -- -- -- -- () () -- | -- -- () () ()
|
||
() -- -- -- -- -- () () () | -- () -- -- --
|
||
() -- -- -- -- () -- -- -- | -- () -- -- ()
|
||
() -- -- -- -- () -- -- () | -- () -- () --
|
||
() -- -- -- -- () -- () -- | -- () -- () ()
|
||
() -- -- -- -- () -- () () | -- () () -- --
|
||
() -- -- -- -- () () -- -- | -- () () -- ()
|
||
() -- -- -- -- () () -- () | -- () () () --
|
||
() -- -- -- -- () () () -- | -- () () () ()
|
||
() -- -- -- -- () () () () | () -- -- -- --
|
||
() -- -- -- () -- -- -- -- | -- -- -- () --
|
||
() -- -- -- () -- -- -- () | -- -- -- () ()
|
||
() -- -- -- () -- -- () -- | -- -- () -- --
|
||
() -- -- -- () -- -- () () | -- -- () -- ()
|
||
() -- -- -- () -- () -- -- | -- -- () () --
|
||
() -- -- -- () -- () -- () | -- -- () () ()
|
||
() -- -- -- () -- () () -- | -- () -- -- --
|
||
() -- -- -- () -- () () () | -- () -- -- ()
|
||
() -- -- -- () () -- -- -- | -- () -- () --
|
||
() -- -- -- () () -- -- () | -- () -- () ()
|
||
() -- -- -- () () -- () -- | -- () () -- --
|
||
() -- -- -- () () -- () () | -- () () -- ()
|
||
() -- -- -- () () () -- -- | -- () () () --
|
||
() -- -- -- () () () -- () | -- () () () ()
|
||
() -- -- -- () () () () -- | () -- -- -- --
|
||
() -- -- -- () () () () () | () -- -- -- ()
|
||
() -- -- () -- -- -- -- -- | -- -- -- () ()
|
||
() -- -- () -- -- -- -- () | -- -- () -- --
|
||
() -- -- () -- -- -- () -- | -- -- () -- ()
|
||
() -- -- () -- -- -- () () | -- -- () () --
|
||
() -- -- () -- -- () -- -- | -- -- () () ()
|
||
() -- -- () -- -- () -- () | -- () -- -- --
|
||
() -- -- () -- -- () () -- | -- () -- -- ()
|
||
() -- -- () -- -- () () () | -- () -- () --
|
||
() -- -- () -- () -- -- -- | -- () -- () ()
|
||
() -- -- () -- () -- -- () | -- () () -- --
|
||
() -- -- () -- () -- () -- | -- () () -- ()
|
||
() -- -- () -- () -- () () | -- () () () --
|
||
() -- -- () -- () () -- -- | -- () () () ()
|
||
() -- -- () -- () () -- () | () -- -- -- --
|
||
() -- -- () -- () () () -- | () -- -- -- ()
|
||
() -- -- () -- () () () () | () -- -- () --
|
||
() -- -- () () -- -- -- -- | -- -- () -- --
|
||
() -- -- () () -- -- -- () | -- -- () -- ()
|
||
() -- -- () () -- -- () -- | -- -- () () --
|
||
() -- -- () () -- -- () () | -- -- () () ()
|
||
() -- -- () () -- () -- -- | -- () -- -- --
|
||
() -- -- () () -- () -- () | -- () -- -- ()
|
||
() -- -- () () -- () () -- | -- () -- () --
|
||
() -- -- () () -- () () () | -- () -- () ()
|
||
() -- -- () () () -- -- -- | -- () () -- --
|
||
() -- -- () () () -- -- () | -- () () -- ()
|
||
() -- -- () () () -- () -- | -- () () () --
|
||
() -- -- () () () -- () () | -- () () () ()
|
||
() -- -- () () () () -- -- | () -- -- -- --
|
||
() -- -- () () () () -- () | () -- -- -- ()
|
||
() -- -- () () () () () -- | () -- -- () --
|
||
() -- -- () () () () () () | () -- -- () ()
|
||
() -- () -- -- -- -- -- -- | -- -- () -- ()
|
||
() -- () -- -- -- -- -- () | -- -- () () --
|
||
() -- () -- -- -- -- () -- | -- -- () () ()
|
||
() -- () -- -- -- -- () () | -- () -- -- --
|
||
() -- () -- -- -- () -- -- | -- () -- -- ()
|
||
() -- () -- -- -- () -- () | -- () -- () --
|
||
() -- () -- -- -- () () -- | -- () -- () ()
|
||
() -- () -- -- -- () () () | -- () () -- --
|
||
() -- () -- -- () -- -- -- | -- () () -- ()
|
||
() -- () -- -- () -- -- () | -- () () () --
|
||
() -- () -- -- () -- () -- | -- () () () ()
|
||
() -- () -- -- () -- () () | () -- -- -- --
|
||
() -- () -- -- () () -- -- | () -- -- -- ()
|
||
() -- () -- -- () () -- () | () -- -- () --
|
||
() -- () -- -- () () () -- | () -- -- () ()
|
||
() -- () -- -- () () () () | () -- () -- --
|
||
() -- () -- () -- -- -- -- | -- -- () () --
|
||
() -- () -- () -- -- -- () | -- -- () () ()
|
||
() -- () -- () -- -- () -- | -- () -- -- --
|
||
() -- () -- () -- -- () () | -- () -- -- ()
|
||
() -- () -- () -- () -- -- | -- () -- () --
|
||
() -- () -- () -- () -- () | -- () -- () ()
|
||
() -- () -- () -- () () -- | -- () () -- --
|
||
() -- () -- () -- () () () | -- () () -- ()
|
||
() -- () -- () () -- -- -- | -- () () () --
|
||
() -- () -- () () -- -- () | -- () () () ()
|
||
() -- () -- () () -- () -- | () -- -- -- --
|
||
() -- () -- () () -- () () | () -- -- -- ()
|
||
() -- () -- () () () -- -- | () -- -- () --
|
||
() -- () -- () () () -- () | () -- -- () ()
|
||
() -- () -- () () () () -- | () -- () -- --
|
||
() -- () -- () () () () () | () -- () -- ()
|
||
() -- () () -- -- -- -- -- | -- -- () () ()
|
||
() -- () () -- -- -- -- () | -- () -- -- --
|
||
() -- () () -- -- -- () -- | -- () -- -- ()
|
||
() -- () () -- -- -- () () | -- () -- () --
|
||
() -- () () -- -- () -- -- | -- () -- () ()
|
||
() -- () () -- -- () -- () | -- () () -- --
|
||
() -- () () -- -- () () -- | -- () () -- ()
|
||
() -- () () -- -- () () () | -- () () () --
|
||
() -- () () -- () -- -- -- | -- () () () ()
|
||
() -- () () -- () -- -- () | () -- -- -- --
|
||
() -- () () -- () -- () -- | () -- -- -- ()
|
||
() -- () () -- () -- () () | () -- -- () --
|
||
() -- () () -- () () -- -- | () -- -- () ()
|
||
() -- () () -- () () -- () | () -- () -- --
|
||
() -- () () -- () () () -- | () -- () -- ()
|
||
() -- () () -- () () () () | () -- () () --
|
||
() -- () () () -- -- -- -- | -- () -- -- --
|
||
() -- () () () -- -- -- () | -- () -- -- ()
|
||
() -- () () () -- -- () -- | -- () -- () --
|
||
() -- () () () -- -- () () | -- () -- () ()
|
||
() -- () () () -- () -- -- | -- () () -- --
|
||
() -- () () () -- () -- () | -- () () -- ()
|
||
() -- () () () -- () () -- | -- () () () --
|
||
() -- () () () -- () () () | -- () () () ()
|
||
() -- () () () () -- -- -- | () -- -- -- --
|
||
() -- () () () () -- -- () | () -- -- -- ()
|
||
() -- () () () () -- () -- | () -- -- () --
|
||
() -- () () () () -- () () | () -- -- () ()
|
||
() -- () () () () () -- -- | () -- () -- --
|
||
() -- () () () () () -- () | () -- () -- ()
|
||
() -- () () () () () () -- | () -- () () --
|
||
() -- () () () () () () () | () -- () () ()
|
||
() () -- -- -- -- -- -- -- | -- () -- -- ()
|
||
() () -- -- -- -- -- -- () | -- () -- () --
|
||
() () -- -- -- -- -- () -- | -- () -- () ()
|
||
() () -- -- -- -- -- () () | -- () () -- --
|
||
() () -- -- -- -- () -- -- | -- () () -- ()
|
||
() () -- -- -- -- () -- () | -- () () () --
|
||
() () -- -- -- -- () () -- | -- () () () ()
|
||
() () -- -- -- -- () () () | () -- -- -- --
|
||
() () -- -- -- () -- -- -- | () -- -- -- ()
|
||
() () -- -- -- () -- -- () | () -- -- () --
|
||
() () -- -- -- () -- () -- | () -- -- () ()
|
||
() () -- -- -- () -- () () | () -- () -- --
|
||
() () -- -- -- () () -- -- | () -- () -- ()
|
||
() () -- -- -- () () -- () | () -- () () --
|
||
() () -- -- -- () () () -- | () -- () () ()
|
||
() () -- -- -- () () () () | () () -- -- --
|
||
() () -- -- () -- -- -- -- | -- () -- () --
|
||
() () -- -- () -- -- -- () | -- () -- () ()
|
||
() () -- -- () -- -- () -- | -- () () -- --
|
||
() () -- -- () -- -- () () | -- () () -- ()
|
||
() () -- -- () -- () -- -- | -- () () () --
|
||
() () -- -- () -- () -- () | -- () () () ()
|
||
() () -- -- () -- () () -- | () -- -- -- --
|
||
() () -- -- () -- () () () | () -- -- -- ()
|
||
() () -- -- () () -- -- -- | () -- -- () --
|
||
() () -- -- () () -- -- () | () -- -- () ()
|
||
() () -- -- () () -- () -- | () -- () -- --
|
||
() () -- -- () () -- () () | () -- () -- ()
|
||
() () -- -- () () () -- -- | () -- () () --
|
||
() () -- -- () () () -- () | () -- () () ()
|
||
() () -- -- () () () () -- | () () -- -- --
|
||
() () -- -- () () () () () | () () -- -- ()
|
||
() () -- () -- -- -- -- -- | -- () -- () ()
|
||
() () -- () -- -- -- -- () | -- () () -- --
|
||
() () -- () -- -- -- () -- | -- () () -- ()
|
||
() () -- () -- -- -- () () | -- () () () --
|
||
() () -- () -- -- () -- -- | -- () () () ()
|
||
() () -- () -- -- () -- () | () -- -- -- --
|
||
() () -- () -- -- () () -- | () -- -- -- ()
|
||
() () -- () -- -- () () () | () -- -- () --
|
||
() () -- () -- () -- -- -- | () -- -- () ()
|
||
() () -- () -- () -- -- () | () -- () -- --
|
||
() () -- () -- () -- () -- | () -- () -- ()
|
||
() () -- () -- () -- () () | () -- () () --
|
||
() () -- () -- () () -- -- | () -- () () ()
|
||
() () -- () -- () () -- () | () () -- -- --
|
||
() () -- () -- () () () -- | () () -- -- ()
|
||
() () -- () -- () () () () | () () -- () --
|
||
() () -- () () -- -- -- -- | -- () () -- --
|
||
() () -- () () -- -- -- () | -- () () -- ()
|
||
() () -- () () -- -- () -- | -- () () () --
|
||
() () -- () () -- -- () () | -- () () () ()
|
||
() () -- () () -- () -- -- | () -- -- -- --
|
||
() () -- () () -- () -- () | () -- -- -- ()
|
||
() () -- () () -- () () -- | () -- -- () --
|
||
() () -- () () -- () () () | () -- -- () ()
|
||
() () -- () () () -- -- -- | () -- () -- --
|
||
() () -- () () () -- -- () | () -- () -- ()
|
||
() () -- () () () -- () -- | () -- () () --
|
||
() () -- () () () -- () () | () -- () () ()
|
||
() () -- () () () () -- -- | () () -- -- --
|
||
() () -- () () () () -- () | () () -- -- ()
|
||
() () -- () () () () () -- | () () -- () --
|
||
() () -- () () () () () () | () () -- () ()
|
||
() () () -- -- -- -- -- -- | -- () () -- ()
|
||
() () () -- -- -- -- -- () | -- () () () --
|
||
() () () -- -- -- -- () -- | -- () () () ()
|
||
() () () -- -- -- -- () () | () -- -- -- --
|
||
() () () -- -- -- () -- -- | () -- -- -- ()
|
||
() () () -- -- -- () -- () | () -- -- () --
|
||
() () () -- -- -- () () -- | () -- -- () ()
|
||
() () () -- -- -- () () () | () -- () -- --
|
||
() () () -- -- () -- -- -- | () -- () -- ()
|
||
() () () -- -- () -- -- () | () -- () () --
|
||
() () () -- -- () -- () -- | () -- () () ()
|
||
() () () -- -- () -- () () | () () -- -- --
|
||
() () () -- -- () () -- -- | () () -- -- ()
|
||
() () () -- -- () () -- () | () () -- () --
|
||
() () () -- -- () () () -- | () () -- () ()
|
||
() () () -- -- () () () () | () () () -- --
|
||
() () () -- () -- -- -- -- | -- () () () --
|
||
() () () -- () -- -- -- () | -- () () () ()
|
||
() () () -- () -- -- () -- | () -- -- -- --
|
||
() () () -- () -- -- () () | () -- -- -- ()
|
||
() () () -- () -- () -- -- | () -- -- () --
|
||
() () () -- () -- () -- () | () -- -- () ()
|
||
() () () -- () -- () () -- | () -- () -- --
|
||
() () () -- () -- () () () | () -- () -- ()
|
||
() () () -- () () -- -- -- | () -- () () --
|
||
() () () -- () () -- -- () | () -- () () ()
|
||
() () () -- () () -- () -- | () () -- -- --
|
||
() () () -- () () -- () () | () () -- -- ()
|
||
() () () -- () () () -- -- | () () -- () --
|
||
() () () -- () () () -- () | () () -- () ()
|
||
() () () -- () () () () -- | () () () -- --
|
||
() () () -- () () () () () | () () () -- ()
|
||
() () () () -- -- -- -- -- | -- () () () ()
|
||
() () () () -- -- -- -- () | () -- -- -- --
|
||
() () () () -- -- -- () -- | () -- -- -- ()
|
||
() () () () -- -- -- () () | () -- -- () --
|
||
() () () () -- -- () -- -- | () -- -- () ()
|
||
() () () () -- -- () -- () | () -- () -- --
|
||
() () () () -- -- () () -- | () -- () -- ()
|
||
() () () () -- -- () () () | () -- () () --
|
||
() () () () -- () -- -- -- | () -- () () ()
|
||
() () () () -- () -- -- () | () () -- -- --
|
||
() () () () -- () -- () -- | () () -- -- ()
|
||
() () () () -- () -- () () | () () -- () --
|
||
() () () () -- () () -- -- | () () -- () ()
|
||
() () () () -- () () -- () | () () () -- --
|
||
() () () () -- () () () -- | () () () -- ()
|
||
() () () () -- () () () () | () () () () --
|
||
() () () () () -- -- -- -- | () -- -- -- --
|
||
() () () () () -- -- -- () | () -- -- -- ()
|
||
() () () () () -- -- () -- | () -- -- () --
|
||
() () () () () -- -- () () | () -- -- () ()
|
||
() () () () () -- () -- -- | () -- () -- --
|
||
() () () () () -- () -- () | () -- () -- ()
|
||
() () () () () -- () () -- | () -- () () --
|
||
() () () () () -- () () () | () -- () () ()
|
||
() () () () () () -- -- -- | () () -- -- --
|
||
() () () () () () -- -- () | () () -- -- ()
|
||
() () () () () () -- () -- | () () -- () --
|
||
() () () () () () -- () () | () () -- () ()
|
||
() () () () () () () -- -- | () () () -- --
|
||
() () () () () () () -- () | () () () -- ()
|
||
() () () () () () () () -- | () () () () --
|
||
() () () () () () () () () | () () () () ()
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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="A-Model-of-Computation.">A Model of Computation.<a class="anchor-link" href="#A-Model-of-Computation.">¶</a></h1><p>That was a bit steep, let's formalize it and make it a little easier to work with.</p>
|
||
<p>First let's have a <em>register</em> of named values:</p>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [87]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="n">R</span> <span class="o">=</span> <span class="p">{</span><span class="n">name</span><span class="p">:</span> <span class="n">Void</span> <span class="k">for</span> <span class="n">name</span> <span class="ow">in</span> <span class="s1">'Cin a3 a2 a1 a0 b3 b2 b1 b0 Cout'</span><span class="o">.</span><span class="n">split</span><span class="p">()}</span>
|
||
</pre></div>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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>Let's have a <em>program</em> of named expressions that give new values when evaluated in terms of the current values in <strong>R</strong> (this is just the same <code>CIRCUITS</code>, but feeding back the results into the "b" bits):</p>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [88]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="n">P</span> <span class="o">=</span> <span class="p">{</span>
|
||
<span class="s1">'b0'</span><span class="p">:</span> <span class="n">sum0</span><span class="p">,</span>
|
||
<span class="s1">'b1'</span><span class="p">:</span> <span class="n">sum1</span><span class="p">,</span>
|
||
<span class="s1">'b2'</span><span class="p">:</span> <span class="n">sum2</span><span class="p">,</span>
|
||
<span class="s1">'b3'</span><span class="p">:</span> <span class="n">sum3</span><span class="p">,</span>
|
||
<span class="s1">'Cout'</span><span class="p">:</span> <span class="n">cout</span><span class="p">,</span>
|
||
<span class="p">}</span>
|
||
</pre></div>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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>One <em>cycle</em> of the machine means to evaluate each named expression in the program with the current values in the register.</p>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [89]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="n">make_reify_reducer</span> <span class="o">=</span> <span class="k">lambda</span> <span class="n">env</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">form</span><span class="p">:</span> <span class="n">value_of</span><span class="p">(</span><span class="n">reify</span><span class="p">(</span><span class="n">form</span><span class="p">,</span> <span class="n">env</span><span class="p">))</span>
|
||
|
||
|
||
<span class="k">def</span> <span class="nf">cycle</span><span class="p">(</span><span class="n">program</span><span class="p">,</span> <span class="n">register</span><span class="p">):</span>
|
||
<span class="n">rr</span> <span class="o">=</span> <span class="n">make_reify_reducer</span><span class="p">(</span><span class="n">register</span><span class="p">)</span>
|
||
<span class="k">return</span> <span class="p">{</span><span class="n">bit</span><span class="p">:</span> <span class="n">rr</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span> <span class="k">for</span> <span class="n">bit</span><span class="p">,</span> <span class="n">expression</span> <span class="ow">in</span> <span class="n">program</span><span class="o">.</span><span class="n">iteritems</span><span class="p">()}</span>
|
||
</pre></div>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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>With all the register values at "zero" (Void) nothing happens.</p>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [90]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="n">R</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">cycle</span><span class="p">(</span><span class="n">P</span><span class="p">,</span> <span class="n">R</span><span class="p">))</span>
|
||
<span class="n">R</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[90]:</div>
|
||
|
||
|
||
|
||
|
||
<div class="jp-RenderedText jp-OutputArea-output jp-OutputArea-executeResult" data-mime-type="text/plain">
|
||
<pre>{'Cin': (()),
|
||
'Cout': (()),
|
||
'a0': (()),
|
||
'a1': (()),
|
||
'a2': (()),
|
||
'a3': (()),
|
||
'b0': (()),
|
||
'b1': (()),
|
||
'b2': (()),
|
||
'b3': (())}</pre>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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>Let's make a nice display function to inspect our little adder computer.</p>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [91]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="k">def</span> <span class="nf">show_as_int</span><span class="p">(</span><span class="o">*</span><span class="n">names</span><span class="p">):</span>
|
||
<span class="sd">'''</span>
|
||
<span class="sd"> Return a function that converts a sequence of</span>
|
||
<span class="sd"> named bits (as Void/Mark values) into a integer.</span>
|
||
<span class="sd"> '''</span>
|
||
<span class="k">def</span> <span class="nf">inner</span><span class="p">(</span><span class="n">register</span><span class="p">):</span>
|
||
<span class="n">i</span><span class="p">,</span> <span class="n">n</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">1</span>
|
||
<span class="k">for</span> <span class="n">name</span> <span class="ow">in</span> <span class="n">names</span><span class="p">:</span>
|
||
<span class="k">if</span> <span class="ow">not</span> <span class="n">register</span><span class="p">[</span><span class="n">name</span><span class="p">]:</span>
|
||
<span class="n">i</span> <span class="o">+=</span> <span class="n">n</span>
|
||
<span class="n">n</span> <span class="o"><<=</span> <span class="mi">1</span>
|
||
<span class="k">return</span> <span class="n">i</span>
|
||
<span class="k">return</span> <span class="n">inner</span>
|
||
</pre></div>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [92]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="n">a_register</span> <span class="o">=</span> <span class="n">show_as_int</span><span class="p">(</span><span class="s1">'a0'</span><span class="p">,</span> <span class="s1">'a1'</span><span class="p">,</span> <span class="s1">'a2'</span><span class="p">,</span> <span class="s1">'a3'</span><span class="p">)</span>
|
||
<span class="n">b_register</span> <span class="o">=</span> <span class="n">show_as_int</span><span class="p">(</span><span class="s1">'b0'</span><span class="p">,</span> <span class="s1">'b1'</span><span class="p">,</span> <span class="s1">'b2'</span><span class="p">,</span> <span class="s1">'b3'</span><span class="p">)</span>
|
||
|
||
|
||
<span class="k">def</span> <span class="nf">show_computer_state</span><span class="p">(</span><span class="n">R</span><span class="p">):</span>
|
||
<span class="nb">print</span> <span class="s1">'a: </span><span class="si">%-3i</span><span class="s1"> b: </span><span class="si">%-3i</span><span class="s1"> Cin: </span><span class="si">%-3i</span><span class="s1"> Cout: </span><span class="si">%-3i</span><span class="s1">'</span> <span class="o">%</span> <span class="p">(</span>
|
||
<span class="n">a_register</span><span class="p">(</span><span class="n">R</span><span class="p">),</span>
|
||
<span class="n">b_register</span><span class="p">(</span><span class="n">R</span><span class="p">),</span>
|
||
<span class="nb">int</span><span class="p">(</span><span class="ow">not</span> <span class="n">R</span><span class="p">[</span><span class="s1">'Cin'</span><span class="p">]),</span>
|
||
<span class="nb">int</span><span class="p">(</span><span class="ow">not</span> <span class="n">R</span><span class="p">[</span><span class="s1">'Cout'</span><span class="p">]),</span>
|
||
<span class="p">)</span>
|
||
</pre></div>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [93]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="n">show_computer_state</span><span class="p">(</span><span class="n">R</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">
|
||
<pre>a: 0 b: 0 Cin: 0 Cout: 0
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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>Let's set one bit to true (Mark-valued in the chosen convention. We could have Void be true but we would have to form the circuit expressions differently.)</p>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [94]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="n">R</span><span class="p">[</span><span class="s1">'a0'</span><span class="p">]</span> <span class="o">=</span> <span class="n">Mark</span>
|
||
</pre></div>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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>Now let's count to twenty.</p>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [95]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="k">for</span> <span class="n">_</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">20</span><span class="p">):</span>
|
||
<span class="n">show_computer_state</span><span class="p">(</span><span class="n">R</span><span class="p">)</span>
|
||
<span class="n">R</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">cycle</span><span class="p">(</span><span class="n">P</span><span class="p">,</span> <span class="n">R</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">
|
||
<pre>a: 1 b: 0 Cin: 0 Cout: 0
|
||
a: 1 b: 1 Cin: 0 Cout: 0
|
||
a: 1 b: 2 Cin: 0 Cout: 0
|
||
a: 1 b: 3 Cin: 0 Cout: 0
|
||
a: 1 b: 4 Cin: 0 Cout: 0
|
||
a: 1 b: 5 Cin: 0 Cout: 0
|
||
a: 1 b: 6 Cin: 0 Cout: 0
|
||
a: 1 b: 7 Cin: 0 Cout: 0
|
||
a: 1 b: 8 Cin: 0 Cout: 0
|
||
a: 1 b: 9 Cin: 0 Cout: 0
|
||
a: 1 b: 10 Cin: 0 Cout: 0
|
||
a: 1 b: 11 Cin: 0 Cout: 0
|
||
a: 1 b: 12 Cin: 0 Cout: 0
|
||
a: 1 b: 13 Cin: 0 Cout: 0
|
||
a: 1 b: 14 Cin: 0 Cout: 0
|
||
a: 1 b: 15 Cin: 0 Cout: 0
|
||
a: 1 b: 0 Cin: 0 Cout: 1
|
||
a: 1 b: 1 Cin: 0 Cout: 0
|
||
a: 1 b: 2 Cin: 0 Cout: 0
|
||
a: 1 b: 3 Cin: 0 Cout: 0
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 see that at the sixteenth step the "Cout" carry bit is true and the count cycles back to zero.</p>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [96]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="c1"># Reset the register.</span>
|
||
<span class="n">R</span> <span class="o">=</span> <span class="p">{</span><span class="n">name</span><span class="p">:</span> <span class="n">Void</span> <span class="k">for</span> <span class="n">name</span> <span class="ow">in</span> <span class="s1">'Cin a3 a2 a1 a0 b3 b2 b1 b0 Cout'</span><span class="o">.</span><span class="n">split</span><span class="p">()}</span>
|
||
|
||
<span class="c1"># Count by three.</span>
|
||
<span class="n">R</span><span class="p">[</span><span class="s1">'a0'</span><span class="p">]</span> <span class="o">=</span> <span class="n">R</span><span class="p">[</span><span class="s1">'a1'</span><span class="p">]</span> <span class="o">=</span> <span class="n">Mark</span>
|
||
|
||
<span class="c1"># Print out twenty cycles.</span>
|
||
<span class="k">for</span> <span class="n">_</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">20</span><span class="p">):</span>
|
||
<span class="n">show_computer_state</span><span class="p">(</span><span class="n">R</span><span class="p">)</span>
|
||
<span class="n">R</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">cycle</span><span class="p">(</span><span class="n">P</span><span class="p">,</span> <span class="n">R</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">
|
||
<pre>a: 3 b: 0 Cin: 0 Cout: 0
|
||
a: 3 b: 3 Cin: 0 Cout: 0
|
||
a: 3 b: 6 Cin: 0 Cout: 0
|
||
a: 3 b: 9 Cin: 0 Cout: 0
|
||
a: 3 b: 12 Cin: 0 Cout: 0
|
||
a: 3 b: 15 Cin: 0 Cout: 0
|
||
a: 3 b: 2 Cin: 0 Cout: 1
|
||
a: 3 b: 5 Cin: 0 Cout: 0
|
||
a: 3 b: 8 Cin: 0 Cout: 0
|
||
a: 3 b: 11 Cin: 0 Cout: 0
|
||
a: 3 b: 14 Cin: 0 Cout: 0
|
||
a: 3 b: 1 Cin: 0 Cout: 1
|
||
a: 3 b: 4 Cin: 0 Cout: 0
|
||
a: 3 b: 7 Cin: 0 Cout: 0
|
||
a: 3 b: 10 Cin: 0 Cout: 0
|
||
a: 3 b: 13 Cin: 0 Cout: 0
|
||
a: 3 b: 0 Cin: 0 Cout: 1
|
||
a: 3 b: 3 Cin: 0 Cout: 0
|
||
a: 3 b: 6 Cin: 0 Cout: 0
|
||
a: 3 b: 9 Cin: 0 Cout: 0
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 see that the "b" bits are indeed counting by threes: 0, 3, 6, 9, 12, 15 & carry, 2, 5, 8, 11, 14 & carry, 1, 4, 7, 10, 13 & carry, 0, 3, 6, 9, ...</p>
|
||
<p>This is my basic model for computation: A register, a program, and a cycle function. Note that reducing the form on each cycle isn't necessary, we can run the cycles and just <code>reify()</code> without reducing and we get new circuits that define bits in terms of the register values N cycles in the past.</p>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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="Simple-One-Dimensional-Cellular-Automaton">Simple One-Dimensional Cellular Automaton<a class="anchor-link" href="#Simple-One-Dimensional-Cellular-Automaton">¶</a></h3>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [97]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="c1"># Universe</span>
|
||
<span class="n">U</span> <span class="o">=</span> <span class="s1">'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'</span>
|
||
|
||
|
||
<span class="c1"># Register.</span>
|
||
<span class="n">R</span> <span class="o">=</span> <span class="p">{</span><span class="n">name</span><span class="p">:</span> <span class="n">Void</span> <span class="k">for</span> <span class="n">name</span> <span class="ow">in</span> <span class="n">U</span><span class="p">}</span>
|
||
|
||
|
||
<span class="c1"># A program to XOR each bit with its neighbor, wrapping at the edge.</span>
|
||
<span class="n">P</span> <span class="o">=</span> <span class="p">{</span>
|
||
<span class="n">name</span><span class="p">:</span> <span class="n">xor</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">U</span><span class="p">[(</span><span class="n">U</span><span class="o">.</span><span class="n">index</span><span class="p">(</span><span class="n">name</span><span class="p">)</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span> <span class="o">%</span> <span class="nb">len</span><span class="p">(</span><span class="n">U</span><span class="p">)])</span>
|
||
<span class="k">for</span> <span class="n">name</span> <span class="ow">in</span> <span class="n">U</span>
|
||
<span class="p">}</span>
|
||
|
||
|
||
<span class="k">def</span> <span class="nf">show</span><span class="p">(</span><span class="n">reg</span><span class="p">):</span>
|
||
<span class="sd">'''Simple visualization of the register.'''</span>
|
||
<span class="nb">print</span> <span class="s1">''</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="s1">'.0'</span><span class="p">[</span><span class="ow">not</span> <span class="n">reg</span><span class="p">[</span><span class="n">name</span><span class="p">]]</span> <span class="k">for</span> <span class="n">name</span> <span class="ow">in</span> <span class="n">U</span><span class="p">)</span>
|
||
|
||
|
||
<span class="c1"># Set one "bit" in the register.</span>
|
||
<span class="n">R</span><span class="p">[</span><span class="n">U</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">Mark</span>
|
||
|
||
|
||
<span class="c1"># Run through some cycles.</span>
|
||
<span class="k">for</span> <span class="n">_</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">100</span><span class="p">):</span>
|
||
<span class="n">show</span><span class="p">(</span><span class="n">R</span><span class="p">)</span>
|
||
<span class="n">R</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">cycle</span><span class="p">(</span><span class="n">P</span><span class="p">,</span> <span class="n">R</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">
|
||
<pre>...................................................0
|
||
..................................................00
|
||
.................................................0.0
|
||
................................................0000
|
||
...............................................0...0
|
||
..............................................00..00
|
||
.............................................0.0.0.0
|
||
............................................00000000
|
||
...........................................0.......0
|
||
..........................................00......00
|
||
.........................................0.0.....0.0
|
||
........................................0000....0000
|
||
.......................................0...0...0...0
|
||
......................................00..00..00..00
|
||
.....................................0.0.0.0.0.0.0.0
|
||
....................................0000000000000000
|
||
...................................0...............0
|
||
..................................00..............00
|
||
.................................0.0.............0.0
|
||
................................0000............0000
|
||
...............................0...0...........0...0
|
||
..............................00..00..........00..00
|
||
.............................0.0.0.0.........0.0.0.0
|
||
............................00000000........00000000
|
||
...........................0.......0.......0.......0
|
||
..........................00......00......00......00
|
||
.........................0.0.....0.0.....0.0.....0.0
|
||
........................0000....0000....0000....0000
|
||
.......................0...0...0...0...0...0...0...0
|
||
......................00..00..00..00..00..00..00..00
|
||
.....................0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0
|
||
....................00000000000000000000000000000000
|
||
...................0...............................0
|
||
..................00..............................00
|
||
.................0.0.............................0.0
|
||
................0000............................0000
|
||
...............0...0...........................0...0
|
||
..............00..00..........................00..00
|
||
.............0.0.0.0.........................0.0.0.0
|
||
............00000000........................00000000
|
||
...........0.......0.......................0.......0
|
||
..........00......00......................00......00
|
||
.........0.0.....0.0.....................0.0.....0.0
|
||
........0000....0000....................0000....0000
|
||
.......0...0...0...0...................0...0...0...0
|
||
......00..00..00..00..................00..00..00..00
|
||
.....0.0.0.0.0.0.0.0.................0.0.0.0.0.0.0.0
|
||
....0000000000000000................0000000000000000
|
||
...0...............0...............0...............0
|
||
..00..............00..............00..............00
|
||
.0.0.............0.0.............0.0.............0.0
|
||
0000............0000............0000............0000
|
||
...0...........0...0...........0...0...........0....
|
||
..00..........00..00..........00..00..........00....
|
||
.0.0.........0.0.0.0.........0.0.0.0.........0.0....
|
||
0000........00000000........00000000........0000....
|
||
...0.......0.......0.......0.......0.......0...0...0
|
||
..00......00......00......00......00......00..00..00
|
||
.0.0.....0.0.....0.0.....0.0.....0.0.....0.0.0.0.0.0
|
||
0000....0000....0000....0000....0000....000000000000
|
||
...0...0...0...0...0...0...0...0...0...0............
|
||
..00..00..00..00..00..00..00..00..00..00............
|
||
.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0............
|
||
0000000000000000000000000000000000000000............
|
||
.......................................0...........0
|
||
......................................00..........00
|
||
.....................................0.0.........0.0
|
||
....................................0000........0000
|
||
...................................0...0.......0...0
|
||
..................................00..00......00..00
|
||
.................................0.0.0.0.....0.0.0.0
|
||
................................00000000....00000000
|
||
...............................0.......0...0.......0
|
||
..............................00......00..00......00
|
||
.............................0.0.....0.0.0.0.....0.0
|
||
............................0000....00000000....0000
|
||
...........................0...0...0.......0...0...0
|
||
..........................00..00..00......00..00..00
|
||
.........................0.0.0.0.0.0.....0.0.0.0.0.0
|
||
........................000000000000....000000000000
|
||
.......................0...........0...0...........0
|
||
......................00..........00..00..........00
|
||
.....................0.0.........0.0.0.0.........0.0
|
||
....................0000........00000000........0000
|
||
...................0...0.......0.......0.......0...0
|
||
..................00..00......00......00......00..00
|
||
.................0.0.0.0.....0.0.....0.0.....0.0.0.0
|
||
................00000000....0000....0000....00000000
|
||
...............0.......0...0...0...0...0...0.......0
|
||
..............00......00..00..00..00..00..00......00
|
||
.............0.0.....0.0.0.0.0.0.0.0.0.0.0.0.....0.0
|
||
............0000....000000000000000000000000....0000
|
||
...........0...0...0.......................0...0...0
|
||
..........00..00..00......................00..00..00
|
||
.........0.0.0.0.0.0.....................0.0.0.0.0.0
|
||
........000000000000....................000000000000
|
||
.......0...........0...................0...........0
|
||
......00..........00..................00..........00
|
||
.....0.0.........0.0.................0.0.........0.0
|
||
....0000........0000................0000........0000
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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="A-More-Efficient-Implementation">A More Efficient Implementation<a class="anchor-link" href="#A-More-Efficient-Implementation">¶</a></h3><p>Before building larger "computers" I want to switch to a more efficient implementation based on a register as a <code>set</code> of names that are currently Mark-valued, and a <code>set_solve()</code> function that evaluates a form in terms of such a <code>set</code>, and assuming all other names are Void-valued.</p>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [98]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="k">def</span> <span class="nf">set_solve</span><span class="p">(</span><span class="n">form</span><span class="p">,</span> <span class="n">marks</span><span class="p">):</span>
|
||
<span class="sd">'''</span>
|
||
<span class="sd"> Given a form and a set of names that are Marks assume all other names</span>
|
||
<span class="sd"> in the form are Void and reduce to basic value (Mark or Void.)</span>
|
||
<span class="sd"> '''</span>
|
||
<span class="k">return</span> <span class="p">(</span>
|
||
<span class="p">(</span><span class="n">Void</span><span class="p">,</span> <span class="n">Mark</span><span class="p">)[</span><span class="n">form</span> <span class="ow">in</span> <span class="n">marks</span><span class="p">]</span>
|
||
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">form</span><span class="p">,</span> <span class="n">basestring</span><span class="p">)</span>
|
||
<span class="k">else</span> <span class="n">_set_solve</span><span class="p">(</span><span class="n">form</span><span class="p">,</span> <span class="n">marks</span><span class="p">)</span>
|
||
<span class="p">)</span>
|
||
|
||
|
||
<span class="k">def</span> <span class="nf">_set_solve</span><span class="p">(</span><span class="n">form</span><span class="p">,</span> <span class="n">marks</span><span class="p">):</span>
|
||
<span class="k">for</span> <span class="n">inner</span> <span class="ow">in</span> <span class="n">form</span><span class="p">:</span>
|
||
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">inner</span><span class="p">,</span> <span class="n">basestring</span><span class="p">):</span>
|
||
<span class="k">if</span> <span class="n">inner</span> <span class="ow">in</span> <span class="n">marks</span><span class="p">:</span>
|
||
<span class="k">return</span> <span class="n">Void</span>
|
||
<span class="k">continue</span>
|
||
<span class="k">if</span> <span class="ow">not</span> <span class="n">_set_solve</span><span class="p">(</span><span class="n">inner</span><span class="p">,</span> <span class="n">marks</span><span class="p">):</span> <span class="c1"># Mark</span>
|
||
<span class="k">return</span> <span class="n">Void</span>
|
||
<span class="k">return</span> <span class="n">Mark</span>
|
||
</pre></div>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [99]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="n">A</span> <span class="o">=</span> <span class="n">F</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="p">(</span><span class="n">b</span><span class="p">,</span> <span class="p">(</span><span class="n">c</span><span class="p">,)))</span>
|
||
<span class="nb">print</span> <span class="n">A</span>
|
||
<span class="nb">print</span> <span class="n">set_solve</span><span class="p">(</span><span class="n">A</span><span class="p">,</span> <span class="p">{</span><span class="n">a</span><span class="p">})</span>
|
||
<span class="nb">print</span> <span class="n">set_solve</span><span class="p">(</span><span class="n">A</span><span class="p">,</span> <span class="p">{</span><span class="n">b</span><span class="p">})</span>
|
||
<span class="nb">print</span> <span class="n">set_solve</span><span class="p">(</span><span class="n">A</span><span class="p">,</span> <span class="p">{</span><span class="n">c</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">
|
||
<pre>(((c) b) a)
|
||
(())
|
||
()
|
||
(())
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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>To calculate the new R first collect all the names in R that are not mentioned in P (and so cannot be
|
||
set to Void by it) then add the names evaluated by solving P's expressions with the marks in R.</p>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [100]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="k">def</span> <span class="nf">set_cycle</span><span class="p">(</span><span class="n">R</span><span class="p">,</span> <span class="n">P</span><span class="p">):</span>
|
||
<span class="k">return</span> <span class="n">R</span><span class="o">.</span><span class="n">difference</span><span class="p">(</span><span class="n">P</span><span class="p">)</span><span class="o">.</span><span class="n">union</span><span class="p">(</span>
|
||
<span class="n">signal</span>
|
||
<span class="k">for</span> <span class="n">signal</span><span class="p">,</span> <span class="n">expression</span> <span class="ow">in</span> <span class="n">P</span><span class="o">.</span><span class="n">iteritems</span><span class="p">()</span>
|
||
<span class="k">if</span> <span class="ow">not</span> <span class="n">set_solve</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">R</span><span class="p">)</span>
|
||
<span class="p">)</span>
|
||
</pre></div>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [101]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="c1"># Universe</span>
|
||
<span class="n">U</span> <span class="o">=</span> <span class="s1">'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'</span>
|
||
|
||
|
||
<span class="c1"># Register.</span>
|
||
<span class="n">R</span> <span class="o">=</span> <span class="p">{</span><span class="n">U</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]}</span>
|
||
|
||
|
||
<span class="c1"># A program to XOR each bit with its neighbor, wrapping at the edge.</span>
|
||
<span class="n">P</span> <span class="o">=</span> <span class="p">{</span>
|
||
<span class="n">name</span><span class="p">:</span> <span class="n">xor</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">U</span><span class="p">[(</span><span class="n">U</span><span class="o">.</span><span class="n">index</span><span class="p">(</span><span class="n">name</span><span class="p">)</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span> <span class="o">%</span> <span class="nb">len</span><span class="p">(</span><span class="n">U</span><span class="p">)])</span>
|
||
<span class="k">for</span> <span class="n">name</span> <span class="ow">in</span> <span class="n">U</span>
|
||
<span class="p">}</span>
|
||
|
||
|
||
<span class="k">def</span> <span class="nf">show</span><span class="p">(</span><span class="n">reg</span><span class="p">):</span>
|
||
<span class="sd">'''Simple visualization of the register.'''</span>
|
||
<span class="nb">print</span> <span class="s1">''</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="s1">'.0'</span><span class="p">[</span><span class="n">name</span> <span class="ow">in</span> <span class="n">reg</span><span class="p">]</span> <span class="k">for</span> <span class="n">name</span> <span class="ow">in</span> <span class="n">U</span><span class="p">)</span>
|
||
|
||
|
||
<span class="c1"># Run through some cycles.</span>
|
||
<span class="k">for</span> <span class="n">_</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">100</span><span class="p">):</span>
|
||
<span class="n">show</span><span class="p">(</span><span class="n">R</span><span class="p">)</span>
|
||
<span class="n">R</span> <span class="o">=</span> <span class="n">set_cycle</span><span class="p">(</span><span class="n">R</span><span class="p">,</span> <span class="n">P</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">
|
||
<pre>...................................................0
|
||
..................................................00
|
||
.................................................0.0
|
||
................................................0000
|
||
...............................................0...0
|
||
..............................................00..00
|
||
.............................................0.0.0.0
|
||
............................................00000000
|
||
...........................................0.......0
|
||
..........................................00......00
|
||
.........................................0.0.....0.0
|
||
........................................0000....0000
|
||
.......................................0...0...0...0
|
||
......................................00..00..00..00
|
||
.....................................0.0.0.0.0.0.0.0
|
||
....................................0000000000000000
|
||
...................................0...............0
|
||
..................................00..............00
|
||
.................................0.0.............0.0
|
||
................................0000............0000
|
||
...............................0...0...........0...0
|
||
..............................00..00..........00..00
|
||
.............................0.0.0.0.........0.0.0.0
|
||
............................00000000........00000000
|
||
...........................0.......0.......0.......0
|
||
..........................00......00......00......00
|
||
.........................0.0.....0.0.....0.0.....0.0
|
||
........................0000....0000....0000....0000
|
||
.......................0...0...0...0...0...0...0...0
|
||
......................00..00..00..00..00..00..00..00
|
||
.....................0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0
|
||
....................00000000000000000000000000000000
|
||
...................0...............................0
|
||
..................00..............................00
|
||
.................0.0.............................0.0
|
||
................0000............................0000
|
||
...............0...0...........................0...0
|
||
..............00..00..........................00..00
|
||
.............0.0.0.0.........................0.0.0.0
|
||
............00000000........................00000000
|
||
...........0.......0.......................0.......0
|
||
..........00......00......................00......00
|
||
.........0.0.....0.0.....................0.0.....0.0
|
||
........0000....0000....................0000....0000
|
||
.......0...0...0...0...................0...0...0...0
|
||
......00..00..00..00..................00..00..00..00
|
||
.....0.0.0.0.0.0.0.0.................0.0.0.0.0.0.0.0
|
||
....0000000000000000................0000000000000000
|
||
...0...............0...............0...............0
|
||
..00..............00..............00..............00
|
||
.0.0.............0.0.............0.0.............0.0
|
||
0000............0000............0000............0000
|
||
...0...........0...0...........0...0...........0....
|
||
..00..........00..00..........00..00..........00....
|
||
.0.0.........0.0.0.0.........0.0.0.0.........0.0....
|
||
0000........00000000........00000000........0000....
|
||
...0.......0.......0.......0.......0.......0...0...0
|
||
..00......00......00......00......00......00..00..00
|
||
.0.0.....0.0.....0.0.....0.0.....0.0.....0.0.0.0.0.0
|
||
0000....0000....0000....0000....0000....000000000000
|
||
...0...0...0...0...0...0...0...0...0...0............
|
||
..00..00..00..00..00..00..00..00..00..00............
|
||
.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0............
|
||
0000000000000000000000000000000000000000............
|
||
.......................................0...........0
|
||
......................................00..........00
|
||
.....................................0.0.........0.0
|
||
....................................0000........0000
|
||
...................................0...0.......0...0
|
||
..................................00..00......00..00
|
||
.................................0.0.0.0.....0.0.0.0
|
||
................................00000000....00000000
|
||
...............................0.......0...0.......0
|
||
..............................00......00..00......00
|
||
.............................0.0.....0.0.0.0.....0.0
|
||
............................0000....00000000....0000
|
||
...........................0...0...0.......0...0...0
|
||
..........................00..00..00......00..00..00
|
||
.........................0.0.0.0.0.0.....0.0.0.0.0.0
|
||
........................000000000000....000000000000
|
||
.......................0...........0...0...........0
|
||
......................00..........00..00..........00
|
||
.....................0.0.........0.0.0.0.........0.0
|
||
....................0000........00000000........0000
|
||
...................0...0.......0.......0.......0...0
|
||
..................00..00......00......00......00..00
|
||
.................0.0.0.0.....0.0.....0.0.....0.0.0.0
|
||
................00000000....0000....0000....00000000
|
||
...............0.......0...0...0...0...0...0.......0
|
||
..............00......00..00..00..00..00..00......00
|
||
.............0.0.....0.0.0.0.0.0.0.0.0.0.0.0.....0.0
|
||
............0000....000000000000000000000000....0000
|
||
...........0...0...0.......................0...0...0
|
||
..........00..00..00......................00..00..00
|
||
.........0.0.0.0.0.0.....................0.0.0.0.0.0
|
||
........000000000000....................000000000000
|
||
.......0...........0...................0...........0
|
||
......00..........00..................00..........00
|
||
.....0.0.........0.0.................0.0.........0.0
|
||
....0000........0000................0000........0000
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [102]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="k">def</span> <span class="nf">set_show_as_int</span><span class="p">(</span><span class="o">*</span><span class="n">names</span><span class="p">):</span>
|
||
<span class="k">def</span> <span class="nf">inner</span><span class="p">(</span><span class="n">register</span><span class="p">):</span>
|
||
<span class="n">i</span><span class="p">,</span> <span class="n">n</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">1</span>
|
||
<span class="k">for</span> <span class="n">name</span> <span class="ow">in</span> <span class="n">names</span><span class="p">:</span>
|
||
<span class="k">if</span> <span class="n">name</span> <span class="ow">in</span> <span class="n">register</span><span class="p">:</span>
|
||
<span class="n">i</span> <span class="o">+=</span> <span class="n">n</span>
|
||
<span class="n">n</span> <span class="o"><<=</span> <span class="mi">1</span>
|
||
<span class="k">return</span> <span class="n">i</span>
|
||
<span class="k">return</span> <span class="n">inner</span>
|
||
</pre></div>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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="Each-Way-as-If...-Then...">Each-Way as If... Then...<a class="anchor-link" href="#Each-Way-as-If...-Then...">¶</a></h3>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [103]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="k">def</span> <span class="nf">ifte</span><span class="p">(</span><span class="n">predicate</span><span class="p">,</span> <span class="n">true</span><span class="p">,</span> <span class="n">false</span><span class="p">):</span>
|
||
<span class="k">return</span> <span class="n">F</span><span class="p">(</span>
|
||
<span class="p">((</span><span class="n">predicate</span><span class="p">,),</span> <span class="n">true</span><span class="p">),</span>
|
||
<span class="p">(</span> <span class="n">predicate</span> <span class="p">,</span> <span class="n">false</span><span class="p">),</span>
|
||
<span class="p">)</span>
|
||
|
||
|
||
<span class="n">E</span> <span class="o">=</span> <span class="n">ifte</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">,</span> <span class="n">c</span><span class="p">)</span>
|
||
|
||
|
||
<span class="n">truth_table</span><span class="p">(</span><span class="n">E</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">
|
||
<pre>(((a) b) (a c))
|
||
a b c | Value
|
||
---------+------
|
||
|
|
||
() | ()
|
||
() |
|
||
() () | ()
|
||
() |
|
||
() () |
|
||
() () | ()
|
||
() () () | ()
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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>If <code>a</code> is Mark-valued the value of the whole form is that of <code>b</code>, but if <code>a</code> is Void-valued the value of the whole form is that of <code>c</code>.</p>
|
||
<pre><code>w/ a = ()
|
||
|
||
((( a) b) ( a c))
|
||
(((()) b) (() c))
|
||
(( b) (() ))
|
||
(( b) )
|
||
b
|
||
|
||
w/ a =
|
||
|
||
(((a) b) (a c))
|
||
((( ) b) ( c))
|
||
((( ) ) ( c))
|
||
( ( c))
|
||
c
|
||
</code></pre>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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="Flip-Flops-for-Memory">Flip-Flops for Memory<a class="anchor-link" href="#Flip-Flops-for-Memory">¶</a></h2>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [104]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="k">def</span> <span class="nf">flip_flop</span><span class="p">(</span><span class="n">q</span><span class="p">,</span> <span class="n">reset</span><span class="p">,</span> <span class="n">set_</span><span class="p">):</span>
|
||
<span class="k">return</span> <span class="n">F</span><span class="p">(</span><span class="n">reset</span><span class="p">,</span> <span class="p">(</span><span class="n">q</span><span class="p">,</span> <span class="n">set_</span><span class="p">))</span>
|
||
|
||
<span class="n">q</span><span class="p">,</span> <span class="n">r</span><span class="p">,</span> <span class="n">s</span> <span class="o">=</span> <span class="s1">'qrs'</span>
|
||
<span class="n">E</span> <span class="o">=</span> <span class="n">flip_flop</span><span class="p">(</span><span class="n">q</span><span class="p">,</span> <span class="n">r</span><span class="p">,</span> <span class="n">s</span><span class="p">)</span>
|
||
<span class="n">truth_table</span><span class="p">(</span><span class="n">E</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">
|
||
<pre>((q s) r)
|
||
q r s | Value
|
||
---------+------
|
||
|
|
||
() | ()
|
||
() |
|
||
() () |
|
||
() | ()
|
||
() () | ()
|
||
() () |
|
||
() () () |
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 is a form that can be used in a circuit to "remember" a value.</p>
|
||
<pre><code>w/ r = ()
|
||
|
||
((q s) r)
|
||
((q s) ())
|
||
( ())
|
||
|
||
w/ s = (), r = ___
|
||
|
||
((q s) r)
|
||
((q ()) )
|
||
(( ()) )
|
||
( )
|
||
|
||
w/ s = ___, r = ___
|
||
|
||
((q s) r)
|
||
((q ) )
|
||
q
|
||
|
||
</code></pre>
|
||
<p>If both are Void then the form is just <code>q</code>, if <code>r</code> is Mark then the form is Void, otherwise if <code>s</code> is Mark the form becomes Mark. This is called a "flip-flop" circuit, and it comprises a simple machine to remember one bit.</p>
|
||
<p>Consider a simple computer:</p>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [105]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="n">U</span> <span class="o">=</span> <span class="n">q</span><span class="p">,</span> <span class="n">r</span><span class="p">,</span> <span class="n">s</span> <span class="o">=</span> <span class="s1">'qrs'</span>
|
||
|
||
<span class="n">P</span> <span class="o">=</span> <span class="p">{</span>
|
||
<span class="n">q</span><span class="p">:</span> <span class="n">flip_flop</span><span class="p">(</span><span class="n">q</span><span class="p">,</span> <span class="n">r</span><span class="p">,</span> <span class="n">s</span><span class="p">),</span>
|
||
<span class="n">r</span><span class="p">:</span> <span class="n">Void</span><span class="p">,</span>
|
||
<span class="n">s</span><span class="p">:</span> <span class="n">Void</span><span class="p">,</span>
|
||
<span class="p">}</span>
|
||
|
||
<span class="n">R</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span> <span class="c1"># Initially all signals are off, Void-valued.</span>
|
||
</pre></div>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [106]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="n">bools_of</span> <span class="o">=</span> <span class="k">lambda</span> <span class="n">universe</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">register</span><span class="p">:</span> <span class="p">(</span><span class="n">name</span> <span class="ow">in</span> <span class="n">register</span> <span class="k">for</span> <span class="n">name</span> <span class="ow">in</span> <span class="n">universe</span><span class="p">)</span>
|
||
|
||
|
||
<span class="k">def</span> <span class="nf">simple_show</span><span class="p">(</span><span class="n">universe</span><span class="p">):</span>
|
||
<span class="n">B</span> <span class="o">=</span> <span class="n">bools_of</span><span class="p">(</span><span class="n">universe</span><span class="p">)</span>
|
||
<span class="k">def</span> <span class="nf">_shower</span><span class="p">(</span><span class="n">register</span><span class="p">):</span>
|
||
<span class="nb">print</span> <span class="s1">''</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="s1">'.0'</span><span class="p">[</span><span class="n">b</span><span class="p">]</span> <span class="k">for</span> <span class="n">b</span> <span class="ow">in</span> <span class="n">B</span><span class="p">(</span><span class="n">register</span><span class="p">))</span>
|
||
<span class="k">return</span> <span class="n">_shower</span>
|
||
</pre></div>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [107]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="n">show</span> <span class="o">=</span> <span class="n">simple_show</span><span class="p">(</span><span class="n">U</span><span class="p">)</span>
|
||
<span class="n">show</span><span class="p">(</span><span class="n">R</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">
|
||
<pre>...
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [108]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="k">def</span> <span class="nf">SET</span><span class="p">(</span><span class="n">R</span><span class="p">):</span>
|
||
<span class="n">R</span> <span class="o">|=</span> <span class="p">{</span><span class="n">s</span><span class="p">}</span>
|
||
<span class="n">show</span><span class="p">(</span><span class="n">R</span><span class="p">)</span>
|
||
<span class="k">return</span> <span class="n">set_cycle</span><span class="p">(</span><span class="n">R</span><span class="p">,</span> <span class="n">P</span><span class="p">)</span>
|
||
|
||
|
||
<span class="k">def</span> <span class="nf">RESET</span><span class="p">(</span><span class="n">R</span><span class="p">):</span>
|
||
<span class="n">R</span> <span class="o">|=</span> <span class="p">{</span><span class="n">r</span><span class="p">}</span>
|
||
<span class="n">show</span><span class="p">(</span><span class="n">R</span><span class="p">)</span>
|
||
<span class="k">return</span> <span class="n">set_cycle</span><span class="p">(</span><span class="n">R</span><span class="p">,</span> <span class="n">P</span><span class="p">)</span>
|
||
</pre></div>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [109]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="nb">print</span> <span class="n">U</span>
|
||
<span class="n">show</span><span class="p">(</span><span class="n">R</span><span class="p">)</span> <span class="p">;</span> <span class="n">R</span> <span class="o">=</span> <span class="n">set_cycle</span><span class="p">(</span><span class="n">R</span><span class="p">,</span> <span class="n">P</span><span class="p">)</span>
|
||
<span class="n">show</span><span class="p">(</span><span class="n">R</span><span class="p">)</span> <span class="p">;</span> <span class="n">R</span> <span class="o">=</span> <span class="n">set_cycle</span><span class="p">(</span><span class="n">R</span><span class="p">,</span> <span class="n">P</span><span class="p">)</span>
|
||
<span class="n">show</span><span class="p">(</span><span class="n">R</span><span class="p">)</span> <span class="p">;</span> <span class="n">R</span> <span class="o">=</span> <span class="n">set_cycle</span><span class="p">(</span><span class="n">R</span><span class="p">,</span> <span class="n">P</span><span class="p">)</span>
|
||
|
||
<span class="n">R</span> <span class="o">=</span> <span class="n">SET</span><span class="p">(</span><span class="n">R</span><span class="p">)</span>
|
||
|
||
<span class="n">show</span><span class="p">(</span><span class="n">R</span><span class="p">)</span> <span class="p">;</span> <span class="n">R</span> <span class="o">=</span> <span class="n">set_cycle</span><span class="p">(</span><span class="n">R</span><span class="p">,</span> <span class="n">P</span><span class="p">)</span>
|
||
<span class="n">show</span><span class="p">(</span><span class="n">R</span><span class="p">)</span> <span class="p">;</span> <span class="n">R</span> <span class="o">=</span> <span class="n">set_cycle</span><span class="p">(</span><span class="n">R</span><span class="p">,</span> <span class="n">P</span><span class="p">)</span>
|
||
|
||
<span class="n">R</span> <span class="o">=</span> <span class="n">SET</span><span class="p">(</span><span class="n">R</span><span class="p">)</span>
|
||
|
||
<span class="n">show</span><span class="p">(</span><span class="n">R</span><span class="p">)</span> <span class="p">;</span> <span class="n">R</span> <span class="o">=</span> <span class="n">set_cycle</span><span class="p">(</span><span class="n">R</span><span class="p">,</span> <span class="n">P</span><span class="p">)</span>
|
||
<span class="n">show</span><span class="p">(</span><span class="n">R</span><span class="p">)</span> <span class="p">;</span> <span class="n">R</span> <span class="o">=</span> <span class="n">set_cycle</span><span class="p">(</span><span class="n">R</span><span class="p">,</span> <span class="n">P</span><span class="p">)</span>
|
||
|
||
<span class="n">R</span> <span class="o">=</span> <span class="n">RESET</span><span class="p">(</span><span class="n">R</span><span class="p">)</span>
|
||
|
||
<span class="n">show</span><span class="p">(</span><span class="n">R</span><span class="p">)</span> <span class="p">;</span> <span class="n">R</span> <span class="o">=</span> <span class="n">set_cycle</span><span class="p">(</span><span class="n">R</span><span class="p">,</span> <span class="n">P</span><span class="p">)</span>
|
||
<span class="n">show</span><span class="p">(</span><span class="n">R</span><span class="p">)</span> <span class="p">;</span> <span class="n">R</span> <span class="o">=</span> <span class="n">set_cycle</span><span class="p">(</span><span class="n">R</span><span class="p">,</span> <span class="n">P</span><span class="p">)</span>
|
||
|
||
<span class="n">R</span> <span class="o">=</span> <span class="n">RESET</span><span class="p">(</span><span class="n">R</span><span class="p">)</span>
|
||
|
||
<span class="n">show</span><span class="p">(</span><span class="n">R</span><span class="p">)</span> <span class="p">;</span> <span class="n">R</span> <span class="o">=</span> <span class="n">set_cycle</span><span class="p">(</span><span class="n">R</span><span class="p">,</span> <span class="n">P</span><span class="p">)</span>
|
||
<span class="n">show</span><span class="p">(</span><span class="n">R</span><span class="p">)</span> <span class="p">;</span> <span class="n">R</span> <span class="o">=</span> <span class="n">set_cycle</span><span class="p">(</span><span class="n">R</span><span class="p">,</span> <span class="n">P</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">
|
||
<pre>qrs
|
||
...
|
||
...
|
||
...
|
||
..0
|
||
0..
|
||
0..
|
||
0.0
|
||
0..
|
||
0..
|
||
00.
|
||
...
|
||
...
|
||
.0.
|
||
...
|
||
...
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 see that <code>q</code> is stable unless <code>s</code> or <code>r</code> set or reset it.</p>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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="Using-Flip-Flops-and-If...Then...Else...-to-make-RAM">Using Flip-Flops and If...Then...Else... to make RAM<a class="anchor-link" href="#Using-Flip-Flops-and-If...Then...Else...-to-make-RAM">¶</a></h3><p>We can use the system we have developed so far to build addressable RAM.</p>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [110]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="c1"># Width in bits of the DATA registers.</span>
|
||
<span class="n">WIDTH</span> <span class="o">=</span> <span class="mi">2</span>
|
||
|
||
<span class="c1"># Width in bits of the ADDR registers.</span>
|
||
<span class="n">LENGTH</span> <span class="o">=</span> <span class="mi">3</span> <span class="c1"># Actual length 2**LENGTH</span>
|
||
</pre></div>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [111]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="n">P</span> <span class="o">=</span> <span class="p">{}</span>
|
||
</pre></div>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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>We'll assume a single <code>WRITE</code> bit that sets a RAM location determined by the <code>ADDR</code> sub-register to the contents of the <code>DATA</code> sub-register.</p>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [112]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="n">WRITE</span> <span class="o">=</span> <span class="s1">'WRITE'</span>
|
||
</pre></div>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [113]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="c1"># Address register.</span>
|
||
<span class="n">ADDR</span> <span class="o">=</span> <span class="p">[</span><span class="s1">'addr_</span><span class="si">%i</span><span class="s1">'</span> <span class="o">%</span> <span class="n">i</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">LENGTH</span><span class="p">)]</span>
|
||
<span class="n">ADDR</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[113]:</div>
|
||
|
||
|
||
|
||
|
||
<div class="jp-RenderedText jp-OutputArea-output jp-OutputArea-executeResult" data-mime-type="text/plain">
|
||
<pre>['addr_0', 'addr_1', 'addr_2']</pre>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [114]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="c1"># Data register.</span>
|
||
<span class="n">DATA</span> <span class="o">=</span> <span class="p">[</span><span class="s1">'a</span><span class="si">%i</span><span class="s1">'</span> <span class="o">%</span> <span class="n">i</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">WIDTH</span><span class="p">)]</span>
|
||
<span class="n">DATA</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[114]:</div>
|
||
|
||
|
||
|
||
|
||
<div class="jp-RenderedText jp-OutputArea-output jp-OutputArea-executeResult" data-mime-type="text/plain">
|
||
<pre>['a0', 'a1']</pre>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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>We can recognize which <code>RAM</code> location we want to address by using the <a href="#Each-Row-can-be-Represented-as-an-Expression">expressions for each row from above</a> to create a predicate for each location that depends on the <code>ADDR</code> bits.</p>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [115]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="k">def</span> <span class="nf">make_ram</span><span class="p">(</span><span class="n">program</span><span class="p">,</span> <span class="n">addrs</span><span class="p">,</span> <span class="n">data</span><span class="p">,</span> <span class="n">width</span><span class="p">,</span> <span class="n">write</span><span class="p">):</span>
|
||
<span class="n">RAM</span> <span class="o">=</span> <span class="p">[]</span>
|
||
<span class="k">for</span> <span class="n">addr</span><span class="p">,</span> <span class="n">env</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">environments_of_variables</span><span class="p">(</span><span class="o">*</span><span class="n">addrs</span><span class="p">)):</span>
|
||
|
||
<span class="n">addr_predicate</span> <span class="o">=</span> <span class="n">F</span><span class="p">((</span><span class="n">name</span><span class="p">,)</span> <span class="k">if</span> <span class="n">env</span><span class="p">[</span><span class="n">name</span><span class="p">]</span> <span class="k">else</span> <span class="n">name</span> <span class="k">for</span> <span class="n">name</span> <span class="ow">in</span> <span class="n">env</span><span class="p">)</span>
|
||
|
||
<span class="n">predicate</span> <span class="o">=</span> <span class="n">and_</span><span class="p">(</span><span class="n">write</span><span class="p">,</span> <span class="n">addr_predicate</span><span class="p">)</span>
|
||
|
||
<span class="k">for</span> <span class="n">bit</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">width</span><span class="p">):</span>
|
||
<span class="n">ram</span> <span class="o">=</span> <span class="s1">'RAM_</span><span class="si">%i</span><span class="s1">_</span><span class="si">%i</span><span class="s1">'</span> <span class="o">%</span> <span class="p">(</span><span class="n">addr</span><span class="p">,</span> <span class="n">bit</span><span class="p">)</span>
|
||
<span class="n">RAM</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">ram</span><span class="p">)</span>
|
||
<span class="n">program</span><span class="p">[</span><span class="n">ram</span><span class="p">]</span> <span class="o">=</span> <span class="n">simplify</span><span class="p">(</span><span class="n">ifte</span><span class="p">(</span><span class="n">predicate</span><span class="p">,</span> <span class="n">data</span><span class="p">[</span><span class="n">bit</span><span class="p">],</span> <span class="n">ram</span><span class="p">))</span>
|
||
|
||
<span class="k">return</span> <span class="n">RAM</span>
|
||
</pre></div>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [116]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="n">RAM</span> <span class="o">=</span> <span class="n">make_ram</span><span class="p">(</span><span class="n">P</span><span class="p">,</span> <span class="n">ADDR</span><span class="p">,</span> <span class="n">DATA</span><span class="p">,</span> <span class="n">WIDTH</span><span class="p">,</span> <span class="n">WRITE</span><span class="p">)</span>
|
||
<span class="n">RAM</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[116]:</div>
|
||
|
||
|
||
|
||
|
||
<div class="jp-RenderedText jp-OutputArea-output jp-OutputArea-executeResult" data-mime-type="text/plain">
|
||
<pre>['RAM_0_0',
|
||
'RAM_0_1',
|
||
'RAM_1_0',
|
||
'RAM_1_1',
|
||
'RAM_2_0',
|
||
'RAM_2_1',
|
||
'RAM_3_0',
|
||
'RAM_3_1',
|
||
'RAM_4_0',
|
||
'RAM_4_1',
|
||
'RAM_5_0',
|
||
'RAM_5_1',
|
||
'RAM_6_0',
|
||
'RAM_6_1',
|
||
'RAM_7_0',
|
||
'RAM_7_1']</pre>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [117]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="n">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[117]:</div>
|
||
|
||
|
||
|
||
|
||
<div class="jp-RenderedText jp-OutputArea-output jp-OutputArea-executeResult" data-mime-type="text/plain">
|
||
<pre>{'RAM_0_0': (((((addr_0) (addr_1) (addr_2)) (WRITE)) RAM_0_0) (((addr_0) (addr_1) (addr_2)) (WRITE) a0)),
|
||
'RAM_0_1': (((((addr_0) (addr_1) (addr_2)) (WRITE)) RAM_0_1) (((addr_0) (addr_1) (addr_2)) (WRITE) a1)),
|
||
'RAM_1_0': (((((addr_0) (addr_1) addr_2) (WRITE)) RAM_1_0) (((addr_0) (addr_1) addr_2) (WRITE) a0)),
|
||
'RAM_1_1': (((((addr_0) (addr_1) addr_2) (WRITE)) RAM_1_1) (((addr_0) (addr_1) addr_2) (WRITE) a1)),
|
||
'RAM_2_0': (((((addr_0) (addr_2) addr_1) (WRITE)) RAM_2_0) (((addr_0) (addr_2) addr_1) (WRITE) a0)),
|
||
'RAM_2_1': (((((addr_0) (addr_2) addr_1) (WRITE)) RAM_2_1) (((addr_0) (addr_2) addr_1) (WRITE) a1)),
|
||
'RAM_3_0': (((((addr_0) addr_1 addr_2) (WRITE)) RAM_3_0) (((addr_0) addr_1 addr_2) (WRITE) a0)),
|
||
'RAM_3_1': (((((addr_0) addr_1 addr_2) (WRITE)) RAM_3_1) (((addr_0) addr_1 addr_2) (WRITE) a1)),
|
||
'RAM_4_0': (((((addr_1) (addr_2) addr_0) (WRITE)) RAM_4_0) (((addr_1) (addr_2) addr_0) (WRITE) a0)),
|
||
'RAM_4_1': (((((addr_1) (addr_2) addr_0) (WRITE)) RAM_4_1) (((addr_1) (addr_2) addr_0) (WRITE) a1)),
|
||
'RAM_5_0': (((((addr_1) addr_0 addr_2) (WRITE)) RAM_5_0) (((addr_1) addr_0 addr_2) (WRITE) a0)),
|
||
'RAM_5_1': (((((addr_1) addr_0 addr_2) (WRITE)) RAM_5_1) (((addr_1) addr_0 addr_2) (WRITE) a1)),
|
||
'RAM_6_0': (((((addr_2) addr_0 addr_1) (WRITE)) RAM_6_0) (((addr_2) addr_0 addr_1) (WRITE) a0)),
|
||
'RAM_6_1': (((((addr_2) addr_0 addr_1) (WRITE)) RAM_6_1) (((addr_2) addr_0 addr_1) (WRITE) a1)),
|
||
'RAM_7_0': ((((WRITE) (addr_0 addr_1 addr_2)) RAM_7_0) ((WRITE) (addr_0 addr_1 addr_2) a0)),
|
||
'RAM_7_1': ((((WRITE) (addr_0 addr_1 addr_2)) RAM_7_1) ((WRITE) (addr_0 addr_1 addr_2) a1))}</pre>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [118]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="n">E</span> <span class="o">=</span> <span class="n">P</span><span class="p">[</span><span class="s1">'RAM_0_0'</span><span class="p">]</span>
|
||
<span class="n">E</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[118]:</div>
|
||
|
||
|
||
|
||
|
||
<div class="jp-RenderedText jp-OutputArea-output jp-OutputArea-executeResult" data-mime-type="text/plain">
|
||
<pre>(((((addr_0) (addr_1) (addr_2)) (WRITE)) RAM_0_0) (((addr_0) (addr_1) (addr_2)) (WRITE) a0))</pre>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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>Note that if the <code>WRITE</code> bit is unset then each <code>RAM</code> bit is just set to itself.</p>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [119]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="n">simplify</span><span class="p">(</span><span class="n">E</span><span class="p">,</span> <span class="n">exclude</span><span class="o">=</span><span class="p">{</span><span class="s1">'WRITE'</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[119]:</div>
|
||
|
||
|
||
|
||
|
||
<div class="jp-RenderedText jp-OutputArea-output jp-OutputArea-executeResult" data-mime-type="text/plain">
|
||
<pre>'RAM_0_0'</pre>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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>But if the <code>WRITE</code> bit is set then each <code>RAM</code> location still depends on the -per-location-predicate.</p>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [120]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="n">simplify</span><span class="p">(</span><span class="n">E</span><span class="p">,</span> <span class="n">with_mark</span><span class="o">=</span><span class="s1">'WRITE'</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[120]:</div>
|
||
|
||
|
||
|
||
|
||
<div class="jp-RenderedText jp-OutputArea-output jp-OutputArea-executeResult" data-mime-type="text/plain">
|
||
<pre>((((addr_0) (addr_1) (addr_2)) a0) ((addr_0) (addr_1) (addr_2) RAM_0_0))</pre>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [121]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="k">def</span> <span class="nf">make_accumulator</span><span class="p">(</span><span class="n">program</span><span class="p">,</span> <span class="n">addrs</span><span class="p">,</span> <span class="n">data</span><span class="p">,</span> <span class="n">width</span><span class="p">,</span> <span class="n">read</span><span class="p">,</span> <span class="n">alts</span><span class="p">):</span>
|
||
|
||
<span class="n">addr_predicates</span> <span class="o">=</span> <span class="p">[</span>
|
||
<span class="n">F</span><span class="p">((</span><span class="n">name</span><span class="p">,)</span> <span class="k">if</span> <span class="n">env</span><span class="p">[</span><span class="n">name</span><span class="p">]</span> <span class="k">else</span> <span class="n">name</span> <span class="k">for</span> <span class="n">name</span> <span class="ow">in</span> <span class="n">env</span><span class="p">)</span>
|
||
<span class="k">for</span> <span class="n">env</span> <span class="ow">in</span> <span class="n">environments_of_variables</span><span class="p">(</span><span class="o">*</span><span class="n">addrs</span><span class="p">)</span>
|
||
<span class="p">]</span>
|
||
|
||
<span class="k">for</span> <span class="n">bit</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">width</span><span class="p">):</span>
|
||
<span class="n">a</span> <span class="o">=</span> <span class="n">data</span><span class="p">[</span><span class="n">bit</span><span class="p">]</span>
|
||
<span class="n">alt</span> <span class="o">=</span> <span class="n">alts</span><span class="p">[</span><span class="n">bit</span><span class="p">]</span>
|
||
<span class="n">foo</span> <span class="o">=</span> <span class="n">Void</span>
|
||
<span class="k">for</span> <span class="n">addr</span><span class="p">,</span> <span class="n">predicate</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">addr_predicates</span><span class="p">):</span>
|
||
<span class="n">ram</span> <span class="o">=</span> <span class="s1">'RAM_</span><span class="si">%i</span><span class="s1">_</span><span class="si">%i</span><span class="s1">'</span> <span class="o">%</span> <span class="p">(</span><span class="n">addr</span><span class="p">,</span> <span class="n">bit</span><span class="p">)</span>
|
||
<span class="n">foo</span> <span class="o">=</span> <span class="p">(</span><span class="n">ifte</span><span class="p">(</span><span class="n">predicate</span><span class="p">,</span> <span class="n">ram</span><span class="p">,</span> <span class="n">foo</span><span class="p">))</span>
|
||
<span class="n">program</span><span class="p">[</span><span class="n">a</span><span class="p">]</span> <span class="o">=</span> <span class="n">ifte</span><span class="p">(</span><span class="n">read</span><span class="p">,</span> <span class="n">foo</span><span class="p">,</span> <span class="n">alt</span><span class="p">)</span>
|
||
</pre></div>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [122]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="n">p</span> <span class="o">=</span> <span class="p">{}</span>
|
||
<span class="n">make_accumulator</span><span class="p">(</span><span class="n">p</span><span class="p">,</span> <span class="n">ADDR</span><span class="p">,</span> <span class="n">DATA</span><span class="p">,</span> <span class="n">WIDTH</span><span class="p">,</span> <span class="s1">'READ'</span><span class="p">,</span> <span class="n">DATA</span><span class="p">)</span>
|
||
<span class="n">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[122]:</div>
|
||
|
||
|
||
|
||
|
||
<div class="jp-RenderedText jp-OutputArea-output jp-OutputArea-executeResult" data-mime-type="text/plain">
|
||
<pre>{'a0': ((((((((((((((((((((((addr_0) (addr_1) (addr_2)))) RAM_0_0) ((((addr_0) (addr_1) (addr_2))) (()))) (((addr_0) (addr_1) addr_2))) (((((addr_0) (addr_1) addr_2))) RAM_1_0)) (((addr_0) (addr_2) addr_1))) (((((addr_0) (addr_2) addr_1))) RAM_2_0)) (((addr_0) addr_1 addr_2))) (((((addr_0) addr_1 addr_2))) RAM_3_0)) (((addr_1) (addr_2) addr_0))) (((((addr_1) (addr_2) addr_0))) RAM_4_0)) (((addr_1) addr_0 addr_2))) (((((addr_1) addr_0 addr_2))) RAM_5_0)) (((addr_2) addr_0 addr_1))) (((((addr_2) addr_0 addr_1))) RAM_6_0)) ((addr_0 addr_1 addr_2))) ((((addr_0 addr_1 addr_2))) RAM_7_0)) (READ)) (READ a0)),
|
||
'a1': ((((((((((((((((((((((addr_0) (addr_1) (addr_2)))) RAM_0_1) ((((addr_0) (addr_1) (addr_2))) (()))) (((addr_0) (addr_1) addr_2))) (((((addr_0) (addr_1) addr_2))) RAM_1_1)) (((addr_0) (addr_2) addr_1))) (((((addr_0) (addr_2) addr_1))) RAM_2_1)) (((addr_0) addr_1 addr_2))) (((((addr_0) addr_1 addr_2))) RAM_3_1)) (((addr_1) (addr_2) addr_0))) (((((addr_1) (addr_2) addr_0))) RAM_4_1)) (((addr_1) addr_0 addr_2))) (((((addr_1) addr_0 addr_2))) RAM_5_1)) (((addr_2) addr_0 addr_1))) (((((addr_2) addr_0 addr_1))) RAM_6_1)) ((addr_0 addr_1 addr_2))) ((((addr_0 addr_1 addr_2))) RAM_7_1)) (READ)) (READ a1))}</pre>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [123]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="n">E</span> <span class="o">=</span> <span class="n">p</span><span class="p">[</span><span class="n">DATA</span><span class="p">[</span><span class="mi">0</span><span class="p">]]</span>
|
||
<span class="n">E</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[123]:</div>
|
||
|
||
|
||
|
||
|
||
<div class="jp-RenderedText jp-OutputArea-output jp-OutputArea-executeResult" data-mime-type="text/plain">
|
||
<pre>((((((((((((((((((((((addr_0) (addr_1) (addr_2)))) RAM_0_0) ((((addr_0) (addr_1) (addr_2))) (()))) (((addr_0) (addr_1) addr_2))) (((((addr_0) (addr_1) addr_2))) RAM_1_0)) (((addr_0) (addr_2) addr_1))) (((((addr_0) (addr_2) addr_1))) RAM_2_0)) (((addr_0) addr_1 addr_2))) (((((addr_0) addr_1 addr_2))) RAM_3_0)) (((addr_1) (addr_2) addr_0))) (((((addr_1) (addr_2) addr_0))) RAM_4_0)) (((addr_1) addr_0 addr_2))) (((((addr_1) addr_0 addr_2))) RAM_5_0)) (((addr_2) addr_0 addr_1))) (((((addr_2) addr_0 addr_1))) RAM_6_0)) ((addr_0 addr_1 addr_2))) ((((addr_0 addr_1 addr_2))) RAM_7_0)) (READ)) (READ a0))</pre>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [124]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="n">simplify</span><span class="p">(</span><span class="n">E</span><span class="p">,</span> <span class="n">with_mark</span><span class="o">=</span><span class="s1">'READ'</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[124]:</div>
|
||
|
||
|
||
|
||
|
||
<div class="jp-RenderedText jp-OutputArea-output jp-OutputArea-executeResult" data-mime-type="text/plain">
|
||
<pre>((((((((((((((((((addr_0) (addr_1) (addr_2)) RAM_0_0) ((addr_0) (addr_1) (addr_2))) (addr_0) (addr_1) addr_2) (((addr_0) (addr_1) addr_2) RAM_1_0)) (addr_0) (addr_2) addr_1) (((addr_0) (addr_2) addr_1) RAM_2_0)) (addr_0) addr_1 addr_2) (((addr_0) addr_1 addr_2) RAM_3_0)) (addr_1) (addr_2) addr_0) (((addr_1) (addr_2) addr_0) RAM_4_0)) (addr_1) addr_0 addr_2) (((addr_1) addr_0 addr_2) RAM_5_0)) (addr_2) addr_0 addr_1) (((addr_2) addr_0 addr_1) RAM_6_0)) addr_0 addr_1 addr_2) ((addr_0 addr_1 addr_2) RAM_7_0))</pre>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [125]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="n">simplify</span><span class="p">(</span><span class="n">E</span><span class="p">,</span> <span class="p">{</span><span class="s1">'READ'</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[125]:</div>
|
||
|
||
|
||
|
||
|
||
<div class="jp-RenderedText jp-OutputArea-output jp-OutputArea-executeResult" data-mime-type="text/plain">
|
||
<pre>'a0'</pre>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [126]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="n">each_way</span><span class="p">(</span><span class="n">E</span><span class="p">,</span> <span class="s1">'a0'</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[126]:</div>
|
||
|
||
|
||
|
||
|
||
<div class="jp-RenderedText jp-OutputArea-output jp-OutputArea-executeResult" data-mime-type="text/plain">
|
||
<pre>((((((((((((((((((((((addr_0) (addr_1) (addr_2)) RAM_0_0) ((addr_0) (addr_1) (addr_2))) (addr_0) (addr_1) addr_2) (((addr_0) (addr_1) addr_2) RAM_1_0)) (addr_0) (addr_2) addr_1) (((addr_0) (addr_2) addr_1) RAM_2_0)) (addr_0) addr_1 addr_2) (((addr_0) addr_1 addr_2) RAM_3_0)) (addr_1) (addr_2) addr_0) (((addr_1) (addr_2) addr_0) RAM_4_0)) (addr_1) addr_0 addr_2) (((addr_1) addr_0 addr_2) RAM_5_0)) (addr_2) addr_0 addr_1) (((addr_2) addr_0 addr_1) RAM_6_0)) addr_0 addr_1 addr_2) ((addr_0 addr_1 addr_2) RAM_7_0)) (READ)) (READ)) a0) ((((addr_0 addr_1 addr_2) RAM_7_0) (RAM_6_0 addr_0 addr_1 addr_2)) (READ) (a0)))</pre>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [ ]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span>
|
||
</pre></div>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [ ]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span>
|
||
</pre></div>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [ ]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span>
|
||
</pre></div>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [127]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="n">each_way</span><span class="p">(</span><span class="n">E</span><span class="p">,</span> <span class="s1">'WRITE'</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[127]:</div>
|
||
|
||
|
||
|
||
|
||
<div class="jp-RenderedText jp-OutputArea-output jp-OutputArea-executeResult" data-mime-type="text/plain">
|
||
<pre>((((((((((((((((((((((addr_0) (addr_1) (addr_2)) RAM_0_0) ((addr_0) (addr_1) (addr_2))) (addr_0) (addr_1) addr_2) (((addr_0) (addr_1) addr_2) RAM_1_0)) (addr_0) (addr_2) addr_1) (((addr_0) (addr_2) addr_1) RAM_2_0)) (addr_0) addr_1 addr_2) (((addr_0) addr_1 addr_2) RAM_3_0)) (addr_1) (addr_2) addr_0) (((addr_1) (addr_2) addr_0) RAM_4_0)) (addr_1) addr_0 addr_2) (((addr_1) addr_0 addr_2) RAM_5_0)) (addr_2) addr_0 addr_1) (((addr_2) addr_0 addr_1) RAM_6_0)) addr_0 addr_1 addr_2) ((addr_0 addr_1 addr_2) RAM_7_0)) (READ)) (READ a0)) WRITE) ((((((addr_0 addr_1 addr_2) RAM_7_0) (RAM_6_0 addr_0 addr_1 addr_2)) (READ)) (READ a0)) (WRITE)))</pre>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [128]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="n">each_way</span><span class="p">(</span><span class="n">E</span><span class="p">,</span> <span class="s1">'addr_0'</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[128]:</div>
|
||
|
||
|
||
|
||
|
||
<div class="jp-RenderedText jp-OutputArea-output jp-OutputArea-executeResult" data-mime-type="text/plain">
|
||
<pre>((((((((((((((addr_1) (addr_2)) RAM_4_0) ((addr_1) (addr_2) RAM_3_0)) (addr_1) addr_2) (((addr_1) addr_2) RAM_5_0)) (addr_2) addr_1) (((addr_2) addr_1) RAM_6_0)) addr_1 addr_2) ((addr_1 addr_2) RAM_7_0)) (READ)) (READ a0)) addr_0) ((((READ) RAM_7_0) (READ a0)) (addr_0)))</pre>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [129]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="n">each_way</span><span class="p">(</span><span class="n">E</span><span class="p">,</span> <span class="s1">'a0'</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[129]:</div>
|
||
|
||
|
||
|
||
|
||
<div class="jp-RenderedText jp-OutputArea-output jp-OutputArea-executeResult" data-mime-type="text/plain">
|
||
<pre>((((((((((((((((((((((addr_0) (addr_1) (addr_2)) RAM_0_0) ((addr_0) (addr_1) (addr_2))) (addr_0) (addr_1) addr_2) (((addr_0) (addr_1) addr_2) RAM_1_0)) (addr_0) (addr_2) addr_1) (((addr_0) (addr_2) addr_1) RAM_2_0)) (addr_0) addr_1 addr_2) (((addr_0) addr_1 addr_2) RAM_3_0)) (addr_1) (addr_2) addr_0) (((addr_1) (addr_2) addr_0) RAM_4_0)) (addr_1) addr_0 addr_2) (((addr_1) addr_0 addr_2) RAM_5_0)) (addr_2) addr_0 addr_1) (((addr_2) addr_0 addr_1) RAM_6_0)) addr_0 addr_1 addr_2) ((addr_0 addr_1 addr_2) RAM_7_0)) (READ)) (READ)) a0) ((((addr_0 addr_1 addr_2) RAM_7_0) (RAM_6_0 addr_0 addr_1 addr_2)) (READ) (a0)))</pre>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [130]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="n">simplify</span><span class="p">(</span><span class="n">each_way</span><span class="p">(</span><span class="n">E</span><span class="p">,</span> <span class="s1">'WRITE'</span><span class="p">),</span> <span class="n">with_mark</span><span class="o">=</span><span class="s1">'WRITE'</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[130]:</div>
|
||
|
||
|
||
|
||
|
||
<div class="jp-RenderedText jp-OutputArea-output jp-OutputArea-executeResult" data-mime-type="text/plain">
|
||
<pre>(((((addr_0 addr_1 addr_2) RAM_7_0) (RAM_6_0 addr_0 addr_1 addr_2)) (READ)) (READ a0))</pre>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [ ]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span>
|
||
</pre></div>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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>, Sorting Networks for routing, more basic functions.</p>
|
||
<p>Eventually: Orchestration with Joy.</p>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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="FIN-for-now.">FIN for now.<a class="anchor-link" href="#FIN-for-now.">¶</a></h1>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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="Appendix:-Demonstration-of-A(AB)-=-A(B)">Appendix: Demonstration of A(AB) = A(B)<a class="anchor-link" href="#Appendix:-Demonstration-of-A(AB)-=-A(B)">¶</a></h2><p>The rule <code>A(AB) = A(B)</code> is the powerhouse of LoF.</p>
|
||
<p>w/ A = ()</p>
|
||
<pre><code> A(AB) = A(B)
|
||
()(()B) = ()(B)
|
||
() = ()
|
||
|
||
</code></pre>
|
||
<p>w/ A =</p>
|
||
<pre><code> A(AB) = A(B)
|
||
(B) = (B)
|
||
|
||
|
||
</code></pre>
|
||
<p>Be aware of the recursive nature of this rule:</p>
|
||
<pre><code>A(...(...(A B)))
|
||
A(.A.(...(A B)))
|
||
A(.A.(.A.(A B)))
|
||
A(.A.(.A.( B)))
|
||
A(.A.(...( B)))
|
||
A(...(...( B)))
|
||
|
||
</code></pre>
|
||
<p>There is this too:</p>
|
||
<pre><code>(A)(...(...(... A B)))
|
||
(A)((A)(...(... A B)))
|
||
(A)((A)((A)(... A B)))
|
||
(A)((A)((A)((A) A B)))
|
||
(A)((A)((A)(( ) A B)))
|
||
(A)((A)(...(( ) )))
|
||
(A)(...(... ))
|
||
|
||
</code></pre>
|
||
<p>Summarized:</p>
|
||
<pre><code>(A)(...(...(... A )))
|
||
(A)(...(...(... () )))
|
||
(A)(...(... ))
|
||
</code></pre>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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="Appendix:-Reduce-String-Expressions-by-Substitution">Appendix: Reduce String Expressions by Substitution<a class="anchor-link" href="#Appendix:-Reduce-String-Expressions-by-Substitution">¶</a></h2><p>Given a string form of an arithmetic expression (in other words a string that consists of only balanced pairs of parentheses) we can reduce it to its Mark/Void value by substitution to a <a href="https://en.wikipedia.org/wiki/Fixed_point_%28mathematics%29">fixed-point</a>.</p>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [131]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="c1"># Translate the LoF Arithmetic rules to string substitution rules.</span>
|
||
<span class="n">reduce_string</span> <span class="o">=</span> <span class="k">lambda</span> <span class="n">s</span><span class="p">:</span> <span class="p">(</span>
|
||
<span class="n">s</span>
|
||
<span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s1">'()()'</span><span class="p">,</span> <span class="s1">'()'</span><span class="p">)</span>
|
||
<span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s1">'(())'</span><span class="p">,</span> <span class="s1">''</span><span class="p">)</span>
|
||
<span class="p">)</span>
|
||
</pre></div>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [132]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="k">def</span> <span class="nf">to_fixed_point</span><span class="p">(</span><span class="n">initial_value</span><span class="p">,</span> <span class="n">F</span><span class="p">,</span> <span class="n">limit</span><span class="o">=</span><span class="mi">10000</span><span class="p">):</span>
|
||
<span class="sd">'''Do value = F(value) until value == F(value).'''</span>
|
||
|
||
<span class="n">next_value</span> <span class="o">=</span> <span class="n">F</span><span class="p">(</span><span class="n">initial_value</span><span class="p">)</span>
|
||
|
||
<span class="k">while</span> <span class="n">next_value</span> <span class="o">!=</span> <span class="n">initial_value</span><span class="p">:</span>
|
||
|
||
<span class="k">if</span> <span class="ow">not</span> <span class="n">limit</span><span class="p">:</span> <span class="c1"># A safety mechanism. Bail out after N iterations.</span>
|
||
<span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="s1">'Reached limit of allowed iterations without finding fixed point.'</span><span class="p">)</span>
|
||
<span class="n">limit</span> <span class="o">-=</span> <span class="mi">1</span>
|
||
|
||
<span class="n">initial_value</span> <span class="o">=</span> <span class="n">next_value</span>
|
||
<span class="n">next_value</span> <span class="o">=</span> <span class="n">F</span><span class="p">(</span><span class="n">initial_value</span><span class="p">)</span>
|
||
|
||
<span class="k">return</span> <span class="n">initial_value</span>
|
||
</pre></div>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [133]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="kn">from</span> <span class="nn">operator</span> <span class="kn">import</span> <span class="n">add</span>
|
||
|
||
|
||
<span class="k">def</span> <span class="nf">dyck_language</span><span class="p">(</span><span class="n">left</span><span class="p">,</span> <span class="n">right</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">t</span><span class="o">=</span><span class="s1">''</span><span class="p">,</span> <span class="n">A</span><span class="o">=</span><span class="s1">'('</span><span class="p">,</span> <span class="n">B</span><span class="o">=</span><span class="s1">')'</span><span class="p">,</span> <span class="n">op</span><span class="o">=</span><span class="n">add</span><span class="p">):</span>
|
||
<span class="sd">'''Yield balanced pairs of A and B.'''</span>
|
||
<span class="k">if</span> <span class="ow">not</span> <span class="p">(</span><span class="n">left</span> <span class="ow">or</span> <span class="n">right</span><span class="p">):</span>
|
||
<span class="k">yield</span> <span class="n">t</span>
|
||
<span class="k">return</span>
|
||
|
||
<span class="k">if</span> <span class="n">left</span> <span class="o">></span> <span class="mi">0</span><span class="p">:</span>
|
||
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">dyck_language</span><span class="p">(</span><span class="n">left</span> <span class="o">-</span> <span class="mi">1</span><span class="p">,</span> <span class="n">right</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span> <span class="n">op</span><span class="p">(</span><span class="n">t</span><span class="p">,</span> <span class="n">A</span><span class="p">),</span> <span class="n">A</span><span class="p">,</span> <span class="n">B</span><span class="p">,</span> <span class="n">op</span><span class="p">):</span>
|
||
<span class="k">yield</span> <span class="n">i</span>
|
||
|
||
<span class="k">if</span> <span class="n">right</span> <span class="o">></span> <span class="mi">0</span><span class="p">:</span>
|
||
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">dyck_language</span><span class="p">(</span><span class="n">left</span><span class="p">,</span> <span class="n">right</span> <span class="o">-</span> <span class="mi">1</span><span class="p">,</span> <span class="n">op</span><span class="p">(</span><span class="n">t</span><span class="p">,</span> <span class="n">B</span><span class="p">),</span> <span class="n">A</span><span class="p">,</span> <span class="n">B</span><span class="p">,</span> <span class="n">op</span><span class="p">):</span>
|
||
<span class="k">yield</span> <span class="n">i</span>
|
||
</pre></div>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [134]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="k">for</span> <span class="n">s</span> <span class="ow">in</span> <span class="n">dyck_language</span><span class="p">(</span><span class="mi">5</span><span class="p">):</span>
|
||
<span class="nb">print</span> <span class="n">s</span><span class="p">,</span> <span class="sa">u</span><span class="s1">'⟶'</span><span class="p">,</span> <span class="n">to_fixed_point</span><span class="p">(</span><span class="n">s</span><span class="p">,</span> <span class="n">reduce_string</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">
|
||
<pre>((((())))) ⟶ ()
|
||
(((()()))) ⟶
|
||
(((())())) ⟶ ()
|
||
(((()))()) ⟶
|
||
(((())))() ⟶ ()
|
||
((()(()))) ⟶ ()
|
||
((()()())) ⟶ ()
|
||
((()())()) ⟶
|
||
((()()))() ⟶ ()
|
||
((())(())) ⟶ ()
|
||
((())()()) ⟶
|
||
((())())() ⟶ ()
|
||
((()))(()) ⟶ ()
|
||
((()))()() ⟶ ()
|
||
(()((()))) ⟶
|
||
(()(()())) ⟶
|
||
(()(())()) ⟶
|
||
(()(()))() ⟶ ()
|
||
(()()(())) ⟶
|
||
(()()()()) ⟶
|
||
(()()())() ⟶ ()
|
||
(()())(()) ⟶
|
||
(()())()() ⟶ ()
|
||
(())((())) ⟶ ()
|
||
(())(()()) ⟶
|
||
(())(())() ⟶ ()
|
||
(())()(()) ⟶ ()
|
||
(())()()() ⟶ ()
|
||
()(((()))) ⟶ ()
|
||
()((()())) ⟶ ()
|
||
()((())()) ⟶ ()
|
||
()((()))() ⟶ ()
|
||
()(()(())) ⟶ ()
|
||
()(()()()) ⟶ ()
|
||
()(()())() ⟶ ()
|
||
()(())(()) ⟶ ()
|
||
()(())()() ⟶ ()
|
||
()()((())) ⟶ ()
|
||
()()(()()) ⟶ ()
|
||
()()(())() ⟶ ()
|
||
()()()(()) ⟶ ()
|
||
()()()()() ⟶ ()
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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="Appendix:-void()-and-mark()">Appendix: <code>void()</code> and <code>mark()</code><a class="anchor-link" href="#Appendix:-void()-and-mark()">¶</a></h2><p>The <code>void()</code> and <code>mark()</code> functions can be defined recursively in terms of each other. Note that <code>void()</code> uses <code>any()</code> while <code>mark()</code> uses <code>all()</code>. These functions implement a depth-first search. If we used versions of <code>any()</code> and <code>all()</code> that evaluated their arguments in parallel <code>void()</code> could return after the <code>True</code> result while <code>mark()</code> depends on all terms's results so its runtime will be bound by term with the greatest runtime.</p>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [135]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="k">def</span> <span class="nf">void</span><span class="p">(</span><span class="n">form</span><span class="p">):</span>
|
||
<span class="k">return</span> <span class="nb">any</span><span class="p">(</span><span class="n">mark</span><span class="p">(</span><span class="n">i</span><span class="p">)</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">form</span><span class="p">)</span>
|
||
|
||
<span class="k">def</span> <span class="nf">mark</span><span class="p">(</span><span class="n">form</span><span class="p">):</span>
|
||
<span class="k">return</span> <span class="nb">all</span><span class="p">(</span><span class="n">void</span><span class="p">(</span><span class="n">i</span><span class="p">)</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">form</span><span class="p">)</span>
|
||
|
||
<span class="k">for</span> <span class="n">form</span> <span class="ow">in</span> <span class="n">BASE</span><span class="p">:</span>
|
||
<span class="k">for</span> <span class="n">func</span> <span class="ow">in</span> <span class="p">(</span><span class="n">void</span><span class="p">,</span> <span class="n">mark</span><span class="p">):</span>
|
||
<span class="nb">print</span> <span class="n">form</span><span class="p">,</span> <span class="s1">'is'</span><span class="p">,</span> <span class="n">func</span><span class="o">.</span><span class="vm">__name__</span><span class="p">,</span> <span class="s1">'?'</span><span class="p">,</span> <span class="n">func</span><span class="p">(</span><span class="n">form</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">
|
||
<pre>(()) is void ? True
|
||
(()) is mark ? False
|
||
() is void ? False
|
||
() is mark ? True
|
||
</pre>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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="Appendix:-Duals">Appendix: Duals<a class="anchor-link" href="#Appendix:-Duals">¶</a></h2><p>The Void and the Mark are not Boolean true and false. Rather they correspond to non-existance and existance. When translating a traditional logical statement into Laws of Form the first thing we must do is choose which mapping we would like to use: true = Mark or true = Void. The notation works the same way once the translation is made, so the only real criteria for choosing is which gives the smaller form.</p>
|
||
<p>If you examine the truth tables for the basic forms above in light of this, you can see that each defines two logical functions depending on whether you treat Void as true and Mark as false, or Void as false and Mark as true.</p>
|
||
<p>For example, the juxtaposition of two terms next to each other <code>a b</code> corresponds to <strong>OR</strong> if Mark is true, and to <strong>AND</strong> if Void is true. Likewise, the form <code>((a)(b))</code> is <strong>AND</strong> if Mark is true and <strong>OR</strong> if Void is true.</p>
|
||
<p>Consider:</p>
|
||
<pre><code>(A ∧ ¬B) ∨ (C ∧ D)
|
||
|
||
</code></pre>
|
||
<p>(This reads "(A and not B) or (C and D)" in case you have a hard time remembering what the symbols mean like I do.)</p>
|
||
<p>If we choose Mark to be true then the form is:</p>
|
||
<pre><code>((A) B) ((C)(D))
|
||
|
||
</code></pre>
|
||
<p>If we choose Void to be true then the form is:</p>
|
||
<pre><code>((A (B)) (C D))
|
||
|
||
</code></pre>
|
||
<p>As I said above, the notation works the same way either way, so once the translation is made you can forget about the Boolean true/false and just work with the Laws of Form rules. Logic is containers.</p>
|
||
<h3 id="De-Morgan-Duals">De Morgan Duals<a class="anchor-link" href="#De-Morgan-Duals">¶</a></h3><p>Consider also the <a href="https://en.wikipedia.org/wiki/De_Morgan%27s_laws">De Morgan dual</a> of the original statement:</p>
|
||
<pre><code>¬((¬A ∨ B) ∧ (¬C ∨ ¬D))
|
||
|
||
</code></pre>
|
||
<p>If we choose Mark to be true then the form is:</p>
|
||
<pre><code>(( ((A) B) ((C)(D)) ))
|
||
|
||
</code></pre>
|
||
<p>The outer pair of containers can be deleted leaving the same form as above:</p>
|
||
<pre><code>((A) B) ((C)(D))
|
||
|
||
</code></pre>
|
||
<p>Likewise, if we choose Void to be true then the form is:</p>
|
||
<pre><code>((((A)) (B)) (((C)) ((D))))
|
||
|
||
</code></pre>
|
||
<p>Again, A((B)) => AB reduces this form to the same one above:</p>
|
||
<pre><code>((A (B)) (C D))
|
||
|
||
</code></pre>
|
||
<p>In the Laws of Form there are no De Morgan Dual statements. If you translate a logic statement and its dual into Laws of Form notation they both reduce to the same form.</p>
|
||
<p>To me this is a clear indication that the Laws of Form are superior to the traditional notation involving <code>¬ ∨ ∧</code>, etc. LoF replaces all the symbols with just names and boundaries. The Laws of Form are not dualistic, they work directly in terms of existance and non-existance. Duality only comes in when you interpret the forms as Boolean statements and have to pick a mapping.</p>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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="Misc.-Junk">Misc. Junk<a class="anchor-link" href="#Misc.-Junk">¶</a></h1>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [136]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="kn">from</span> <span class="nn">collections</span> <span class="kn">import</span> <span class="n">Counter</span>
|
||
|
||
<span class="n">histo</span> <span class="o">=</span> <span class="n">Counter</span><span class="p">(</span><span class="n">yield_variables_of</span><span class="p">(</span><span class="n">cout</span><span class="p">))</span>
|
||
<span class="n">histo</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[136]:</div>
|
||
|
||
|
||
|
||
|
||
<div class="jp-RenderedText jp-OutputArea-output jp-OutputArea-executeResult" data-mime-type="text/plain">
|
||
<pre>Counter({'Cin': 1,
|
||
'a0': 3,
|
||
'a1': 3,
|
||
'a2': 3,
|
||
'a3': 3,
|
||
'b0': 3,
|
||
'b1': 3,
|
||
'b2': 3,
|
||
'b3': 3})</pre>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [137]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="c1">#import pprint as pp</span>
|
||
|
||
|
||
<span class="c1">#E = cout</span>
|
||
<span class="c1">#for var, count in histo.most_common():</span>
|
||
<span class="c1"># print 'stan', var, count</span>
|
||
<span class="c1"># E = to_fixed_point(simplify(standardize(E, var)), simplify)</span>
|
||
<span class="c1"># print len(str(E))</span>
|
||
<span class="c1"># pp.pprint(dict(Counter(yield_variables_of(E))))</span>
|
||
<span class="c1"># print '------'</span>
|
||
</pre></div>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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>Rather than manually calling <code>standard_form()</code> let's define a function that reduces a form to a (hopefully) smaller equivalent form by going through all the variables in the form and using <code>standard_form()</code> with each. Along with clean and unwrap we can drive an expression to a fixed point.</p>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [138]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="k">def</span> <span class="nf">STAN</span><span class="p">(</span><span class="n">form</span><span class="p">):</span>
|
||
<span class="k">for</span> <span class="n">var</span><span class="p">,</span> <span class="n">_</span> <span class="ow">in</span> <span class="n">Counter</span><span class="p">(</span><span class="n">yield_variables_of</span><span class="p">(</span><span class="n">form</span><span class="p">))</span><span class="o">.</span><span class="n">most_common</span><span class="p">():</span>
|
||
<span class="n">form</span> <span class="o">=</span> <span class="n">to_fixed_point</span><span class="p">(</span><span class="n">simplify</span><span class="p">(</span><span class="n">standardize</span><span class="p">(</span><span class="n">form</span><span class="p">,</span> <span class="n">var</span><span class="p">)),</span> <span class="n">simplify</span><span class="p">)</span>
|
||
<span class="k">return</span> <span class="n">form</span>
|
||
</pre></div>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [139]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="n">sum0</span><span class="p">,</span> <span class="n">cout</span> <span class="o">=</span> <span class="n">full_bit_adder</span><span class="p">(</span><span class="s1">'a0'</span><span class="p">,</span> <span class="s1">'b0'</span><span class="p">,</span> <span class="s1">'Cin'</span><span class="p">)</span>
|
||
<span class="n">sum1</span><span class="p">,</span> <span class="n">cout</span> <span class="o">=</span> <span class="n">full_bit_adder</span><span class="p">(</span><span class="s1">'a1'</span><span class="p">,</span> <span class="s1">'b1'</span><span class="p">,</span> <span class="n">cout</span><span class="p">)</span>
|
||
<span class="n">sum2</span><span class="p">,</span> <span class="n">cout</span> <span class="o">=</span> <span class="n">full_bit_adder</span><span class="p">(</span><span class="s1">'a2'</span><span class="p">,</span> <span class="s1">'b2'</span><span class="p">,</span> <span class="n">cout</span><span class="p">)</span>
|
||
<span class="n">sum3</span><span class="p">,</span> <span class="n">cout</span> <span class="o">=</span> <span class="n">full_bit_adder</span><span class="p">(</span><span class="s1">'a3'</span><span class="p">,</span> <span class="s1">'b3'</span><span class="p">,</span> <span class="n">cout</span><span class="p">)</span>
|
||
|
||
<span class="nb">map</span><span class="p">(</span><span class="nb">len</span><span class="p">,</span> <span class="nb">map</span><span class="p">(</span><span class="nb">str</span><span class="p">,</span> <span class="p">(</span><span class="n">sum0</span><span class="p">,</span> <span class="n">sum1</span><span class="p">,</span> <span class="n">sum2</span><span class="p">,</span> <span class="n">sum3</span><span class="p">,</span> <span class="n">cout</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[139]:</div>
|
||
|
||
|
||
|
||
|
||
<div class="jp-RenderedText jp-OutputArea-output jp-OutputArea-executeResult" data-mime-type="text/plain">
|
||
<pre>[59, 135, 211, 287, 159]</pre>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [140]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="n">sum0</span><span class="p">,</span> <span class="n">cout</span> <span class="o">=</span> <span class="n">full_bit_adder</span><span class="p">(</span><span class="s1">'a0'</span><span class="p">,</span> <span class="s1">'b0'</span><span class="p">,</span> <span class="s1">'Cin'</span><span class="p">)</span>
|
||
<span class="n">sum0</span> <span class="o">=</span> <span class="n">to_fixed_point</span><span class="p">(</span><span class="n">sum0</span><span class="p">,</span> <span class="n">STAN</span><span class="p">)</span>
|
||
<span class="n">cout</span> <span class="o">=</span> <span class="n">to_fixed_point</span><span class="p">(</span><span class="n">cout</span><span class="p">,</span> <span class="n">STAN</span><span class="p">)</span>
|
||
|
||
<span class="n">sum1</span><span class="p">,</span> <span class="n">cout</span> <span class="o">=</span> <span class="n">full_bit_adder</span><span class="p">(</span><span class="s1">'a1'</span><span class="p">,</span> <span class="s1">'b1'</span><span class="p">,</span> <span class="n">cout</span><span class="p">)</span>
|
||
<span class="n">sum1</span> <span class="o">=</span> <span class="n">to_fixed_point</span><span class="p">(</span><span class="n">sum1</span><span class="p">,</span> <span class="n">STAN</span><span class="p">)</span>
|
||
<span class="n">cout</span> <span class="o">=</span> <span class="n">to_fixed_point</span><span class="p">(</span><span class="n">cout</span><span class="p">,</span> <span class="n">STAN</span><span class="p">)</span>
|
||
|
||
<span class="n">sum2</span><span class="p">,</span> <span class="n">cout</span> <span class="o">=</span> <span class="n">full_bit_adder</span><span class="p">(</span><span class="s1">'a2'</span><span class="p">,</span> <span class="s1">'b2'</span><span class="p">,</span> <span class="n">cout</span><span class="p">)</span>
|
||
<span class="n">sum2</span> <span class="o">=</span> <span class="n">to_fixed_point</span><span class="p">(</span><span class="n">sum2</span><span class="p">,</span> <span class="n">STAN</span><span class="p">)</span>
|
||
<span class="n">cout</span> <span class="o">=</span> <span class="n">to_fixed_point</span><span class="p">(</span><span class="n">cout</span><span class="p">,</span> <span class="n">STAN</span><span class="p">)</span>
|
||
|
||
<span class="n">sum3</span><span class="p">,</span> <span class="n">cout</span> <span class="o">=</span> <span class="n">full_bit_adder</span><span class="p">(</span><span class="s1">'a3'</span><span class="p">,</span> <span class="s1">'b3'</span><span class="p">,</span> <span class="n">cout</span><span class="p">)</span>
|
||
<span class="n">sum3</span> <span class="o">=</span> <span class="n">to_fixed_point</span><span class="p">(</span><span class="n">sum3</span><span class="p">,</span> <span class="n">STAN</span><span class="p">)</span>
|
||
<span class="n">cout</span> <span class="o">=</span> <span class="n">to_fixed_point</span><span class="p">(</span><span class="n">cout</span><span class="p">,</span> <span class="n">STAN</span><span class="p">)</span>
|
||
|
||
|
||
<span class="nb">map</span><span class="p">(</span><span class="nb">len</span><span class="p">,</span> <span class="nb">map</span><span class="p">(</span><span class="nb">str</span><span class="p">,</span> <span class="p">(</span><span class="n">sum0</span><span class="p">,</span> <span class="n">sum1</span><span class="p">,</span> <span class="n">sum2</span><span class="p">,</span> <span class="n">sum3</span><span class="p">,</span> <span class="n">cout</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="application/vnd.jupyter.stderr">
|
||
<pre>
|
||
<span class="ansi-red-fg">---------------------------------------------------------------------------</span>
|
||
<span class="ansi-red-fg">NameError</span> Traceback (most recent call last)
|
||
<span class="ansi-green-fg"><ipython-input-140-34665b9e1d61></span> in <span class="ansi-cyan-fg"><module></span><span class="ansi-blue-fg">()</span>
|
||
<span class="ansi-green-intense-fg ansi-bold"> 1</span> sum0<span class="ansi-blue-fg">,</span> cout <span class="ansi-blue-fg">=</span> full_bit_adder<span class="ansi-blue-fg">(</span><span class="ansi-blue-fg">'a0'</span><span class="ansi-blue-fg">,</span> <span class="ansi-blue-fg">'b0'</span><span class="ansi-blue-fg">,</span> <span class="ansi-blue-fg">'Cin'</span><span class="ansi-blue-fg">)</span>
|
||
<span class="ansi-green-fg">----> 2</span><span class="ansi-red-fg"> </span>sum0 <span class="ansi-blue-fg">=</span> to_fixed_point<span class="ansi-blue-fg">(</span>sum0<span class="ansi-blue-fg">,</span> STAN<span class="ansi-blue-fg">)</span>
|
||
<span class="ansi-green-intense-fg ansi-bold"> 3</span> cout <span class="ansi-blue-fg">=</span> to_fixed_point<span class="ansi-blue-fg">(</span>cout<span class="ansi-blue-fg">,</span> STAN<span class="ansi-blue-fg">)</span>
|
||
<span class="ansi-green-intense-fg ansi-bold"> 4</span>
|
||
<span class="ansi-green-intense-fg ansi-bold"> 5</span> sum1<span class="ansi-blue-fg">,</span> cout <span class="ansi-blue-fg">=</span> full_bit_adder<span class="ansi-blue-fg">(</span><span class="ansi-blue-fg">'a1'</span><span class="ansi-blue-fg">,</span> <span class="ansi-blue-fg">'b1'</span><span class="ansi-blue-fg">,</span> cout<span class="ansi-blue-fg">)</span>
|
||
|
||
<span class="ansi-green-fg"><ipython-input-132-bf263ba512a2></span> in <span class="ansi-cyan-fg">to_fixed_point</span><span class="ansi-blue-fg">(initial_value, F, limit)</span>
|
||
<span class="ansi-green-intense-fg ansi-bold"> 2</span> <span class="ansi-blue-fg">'''Do value = F(value) until value == F(value).'''</span>
|
||
<span class="ansi-green-intense-fg ansi-bold"> 3</span>
|
||
<span class="ansi-green-fg">----> 4</span><span class="ansi-red-fg"> </span>next_value <span class="ansi-blue-fg">=</span> F<span class="ansi-blue-fg">(</span>initial_value<span class="ansi-blue-fg">)</span>
|
||
<span class="ansi-green-intense-fg ansi-bold"> 5</span>
|
||
<span class="ansi-green-intense-fg ansi-bold"> 6</span> <span class="ansi-green-fg">while</span> next_value <span class="ansi-blue-fg">!=</span> initial_value<span class="ansi-blue-fg">:</span>
|
||
|
||
<span class="ansi-green-fg"><ipython-input-138-99179e550c4a></span> in <span class="ansi-cyan-fg">STAN</span><span class="ansi-blue-fg">(form)</span>
|
||
<span class="ansi-green-intense-fg ansi-bold"> 1</span> <span class="ansi-green-fg">def</span> STAN<span class="ansi-blue-fg">(</span>form<span class="ansi-blue-fg">)</span><span class="ansi-blue-fg">:</span>
|
||
<span class="ansi-green-intense-fg ansi-bold"> 2</span> <span class="ansi-green-fg">for</span> var<span class="ansi-blue-fg">,</span> _ <span class="ansi-green-fg">in</span> Counter<span class="ansi-blue-fg">(</span>yield_variables_of<span class="ansi-blue-fg">(</span>form<span class="ansi-blue-fg">)</span><span class="ansi-blue-fg">)</span><span class="ansi-blue-fg">.</span>most_common<span class="ansi-blue-fg">(</span><span class="ansi-blue-fg">)</span><span class="ansi-blue-fg">:</span>
|
||
<span class="ansi-green-fg">----> 3</span><span class="ansi-red-fg"> </span>form <span class="ansi-blue-fg">=</span> to_fixed_point<span class="ansi-blue-fg">(</span>simplify<span class="ansi-blue-fg">(</span>standardize<span class="ansi-blue-fg">(</span>form<span class="ansi-blue-fg">,</span> var<span class="ansi-blue-fg">)</span><span class="ansi-blue-fg">)</span><span class="ansi-blue-fg">,</span> simplify<span class="ansi-blue-fg">)</span>
|
||
<span class="ansi-green-intense-fg ansi-bold"> 4</span> <span class="ansi-green-fg">return</span> form
|
||
|
||
<span class="ansi-red-fg">NameError</span>: global name 'standardize' is not defined</pre>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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>It would be useful and fun to write a simple search algorithm that tried different ways to reduce a form to see if it could find particulaly compact versions.</p>
|
||
<p>Let's generate the expressions for the next two output bits, and the carry bit.</p>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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>The <code>sum3</code> bit expression is pretty big.</p>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [ ]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="n">sum3</span>
|
||
</pre></div>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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>But it's only about 1/9th of size of the previous version (which was 9261.)</p>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [ ]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="nb">len</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">sum3</span><span class="p">))</span>
|
||
</pre></div>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [ ]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span>
|
||
</pre></div>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [ ]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span>
|
||
</pre></div>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [ ]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span>
|
||
</pre></div>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [ ]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span>
|
||
</pre></div>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [ ]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span>
|
||
</pre></div>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [ ]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span>
|
||
</pre></div>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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>Let's simplify the first one manually just for fun:</p>
|
||
<pre><code>(((((())) (())) ((()))))
|
||
(( ) ) ( )
|
||
( )
|
||
|
||
</code></pre>
|
||
<p>Sure enough, it reduces to Mark after just a few applications of the rule <code>(()) = __</code> (the underscores indicates the absence of any value, aka Void.) We could also just delete variables that are Void in the original expression:</p>
|
||
<pre><code>((((a)b)(c)))
|
||
(( ) )( )
|
||
( )
|
||
</code></pre>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [ ]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span>
|
||
</pre></div>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [ ]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="n">C</span> <span class="o">=</span> <span class="n">F</span><span class="p">((</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">))</span>
|
||
<span class="k">for</span> <span class="n">form</span> <span class="ow">in</span> <span class="p">(</span><span class="n">A</span><span class="p">,</span> <span class="n">B</span><span class="p">,</span> <span class="n">C</span><span class="p">):</span>
|
||
<span class="n">arth</span> <span class="o">=</span> <span class="n">reify</span><span class="p">(</span><span class="n">form</span><span class="p">,</span> <span class="n">env</span><span class="p">)</span>
|
||
<span class="nb">print</span> <span class="n">form</span><span class="p">,</span> <span class="sa">u</span><span class="s1">'⟶'</span><span class="p">,</span> <span class="n">arth</span><span class="p">,</span> <span class="sa">u</span><span class="s1">'⟶'</span><span class="p">,</span> <span class="n">value_of</span><span class="p">(</span><span class="n">arth</span><span class="p">)</span>
|
||
</pre></div>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [ ]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span>
|
||
</pre></div>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [ ]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span>
|
||
</pre></div>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [ ]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span>
|
||
</pre></div>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [ ]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="nb">print</span> <span class="n">A</span>
|
||
<span class="n">Aa</span> <span class="o">=</span> <span class="n">simplify</span><span class="p">(</span><span class="n">A</span><span class="p">,</span> <span class="p">{</span><span class="n">a</span><span class="p">})</span>
|
||
<span class="nb">print</span> <span class="n">a</span><span class="p">,</span> <span class="n">Aa</span>
|
||
<span class="n">Aab</span> <span class="o">=</span> <span class="n">simplify</span><span class="p">(</span><span class="n">Aa</span><span class="p">,</span> <span class="p">{</span><span class="n">b</span><span class="p">})</span>
|
||
<span class="nb">print</span> <span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">,</span> <span class="n">Aab</span>
|
||
<span class="n">Aabc</span> <span class="o">=</span> <span class="n">simplify</span><span class="p">(</span><span class="n">Aab</span><span class="p">,</span> <span class="p">{</span><span class="n">c</span><span class="p">})</span>
|
||
<span class="nb">print</span> <span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">,</span> <span class="n">c</span><span class="p">,</span> <span class="n">Aabc</span>
|
||
</pre></div>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [ ]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="nb">print</span> <span class="n">a</span><span class="p">,</span> <span class="n">Aa</span>
|
||
<span class="n">Aab</span> <span class="o">=</span> <span class="n">simplify</span><span class="p">(</span><span class="n">Aa</span><span class="p">,</span> <span class="n">with_mark</span><span class="o">=</span><span class="n">b</span><span class="p">)</span>
|
||
<span class="nb">print</span> <span class="n">a</span><span class="p">,</span> <span class="n">F</span><span class="p">(</span><span class="n">b</span><span class="p">),</span> <span class="n">Aab</span>
|
||
</pre></div>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [ ]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="nb">print</span> <span class="n">a</span><span class="p">,</span> <span class="n">Aa</span>
|
||
<span class="n">Aac</span> <span class="o">=</span> <span class="n">simplify</span><span class="p">(</span><span class="n">Aa</span><span class="p">,</span> <span class="n">with_mark</span><span class="o">=</span><span class="n">c</span><span class="p">)</span>
|
||
<span class="nb">print</span> <span class="n">a</span><span class="p">,</span> <span class="n">F</span><span class="p">(</span><span class="n">c</span><span class="p">),</span> <span class="n">Aac</span>
|
||
</pre></div>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [ ]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="nb">print</span> <span class="n">a</span><span class="p">,</span> <span class="n">Aa</span>
|
||
<span class="n">Aac</span> <span class="o">=</span> <span class="n">simplify</span><span class="p">(</span><span class="n">Aa</span><span class="p">,</span> <span class="p">{</span><span class="n">c</span><span class="p">})</span>
|
||
<span class="nb">print</span> <span class="n">a</span><span class="p">,</span> <span class="n">c</span><span class="p">,</span> <span class="n">Aac</span>
|
||
</pre></div>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [ ]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span>
|
||
</pre></div>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [ ]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span>
|
||
</pre></div>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [ ]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span>
|
||
</pre></div>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [ ]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span>
|
||
</pre></div>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [ ]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="kn">from</span> <span class="nn">collections</span> <span class="kn">import</span> <span class="n">Counter</span>
|
||
|
||
<span class="n">histo</span> <span class="o">=</span> <span class="n">Counter</span><span class="p">(</span><span class="n">yield_variables_of</span><span class="p">(</span><span class="n">sum7</span><span class="p">))</span>
|
||
<span class="n">histo</span>
|
||
</pre></div>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [ ]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="nb">len</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">sum7</span><span class="p">))</span>
|
||
</pre></div>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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>Immediately we can just call <code>simplify()</code> until it stops shinking the expression.</p>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [ ]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="n">s7</span> <span class="o">=</span> <span class="n">simplify</span><span class="p">(</span><span class="n">sum7</span><span class="p">)</span>
|
||
<span class="nb">len</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">s7</span><span class="p">))</span>
|
||
</pre></div>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [ ]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="n">s7</span> <span class="o">=</span> <span class="n">simplify</span><span class="p">(</span><span class="n">s7</span><span class="p">)</span>
|
||
<span class="nb">len</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">s7</span><span class="p">))</span>
|
||
</pre></div>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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>Once was enough (we should consider adding a call to <code>simplify()</code> in the <code>full_bit_adder()</code> function.)</p>
|
||
<p>Let's try using <code>each_way()</code> with the most common names in the form.</p>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [ ]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="n">s7</span> <span class="o">=</span> <span class="n">simplify</span><span class="p">(</span><span class="n">each_way</span><span class="p">(</span><span class="n">s7</span><span class="p">,</span> <span class="s1">'a0'</span><span class="p">))</span>
|
||
<span class="nb">len</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">s7</span><span class="p">))</span>
|
||
</pre></div>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [ ]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="n">s7</span> <span class="o">=</span> <span class="n">simplify</span><span class="p">(</span><span class="n">s7</span><span class="p">)</span>
|
||
<span class="nb">len</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">s7</span><span class="p">))</span>
|
||
</pre></div>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [ ]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="n">Counter</span><span class="p">(</span><span class="n">yield_variables_of</span><span class="p">(</span><span class="n">s7</span><span class="p">))</span>
|
||
</pre></div>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [ ]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="n">s7</span> <span class="o">=</span> <span class="n">sum7</span>
|
||
|
||
<span class="c1">#for name, count in histo.most_common():</span>
|
||
<span class="c1"># s7 = simplify(each_way(s7, name))</span>
|
||
<span class="c1"># print len(str(s7))</span>
|
||
</pre></div>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [ ]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span>
|
||
</pre></div>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [ ]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="k">def</span> <span class="nf">super_simple</span><span class="p">(</span><span class="n">form</span><span class="p">):</span>
|
||
<span class="k">return</span> <span class="n">to_fixed_point</span><span class="p">(</span><span class="n">form</span><span class="p">,</span> <span class="n">simplify</span><span class="p">)</span>
|
||
</pre></div>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [ ]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="nb">len</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">sum7</span><span class="p">))</span>
|
||
<span class="n">s7</span> <span class="o">=</span> <span class="n">super_simple</span><span class="p">(</span><span class="n">sum7</span><span class="p">)</span>
|
||
<span class="nb">len</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">s7</span><span class="p">))</span>
|
||
</pre></div>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [ ]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="n">s7</span> <span class="o">=</span> <span class="n">sum7</span>
|
||
|
||
<span class="c1">#for name, count in histo.most_common():</span>
|
||
<span class="c1"># s7 = super_simple(each_way(s7, name))</span>
|
||
<span class="c1"># print len(str(s7))</span>
|
||
</pre></div>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [ ]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span>
|
||
</pre></div>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [ ]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span>
|
||
</pre></div>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [ ]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span>
|
||
</pre></div>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [ ]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span><span class="nb">print</span> <span class="s1">' '</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">name</span><span class="p">[:</span><span class="mi">2</span><span class="p">]</span> <span class="k">for</span> <span class="n">name</span> <span class="ow">in</span> <span class="nb">sorted</span><span class="p">(</span><span class="n">R</span><span class="p">))</span>
|
||
<span class="k">for</span> <span class="n">_</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">20</span><span class="p">):</span>
|
||
<span class="nb">print</span> <span class="n">format_env</span><span class="p">(</span><span class="n">R</span><span class="p">),</span> <span class="s1">'='</span><span class="p">,</span> <span class="n">b_register</span><span class="p">(</span><span class="n">R</span><span class="p">)</span>
|
||
<span class="n">R</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">cycle</span><span class="p">(</span><span class="n">P</span><span class="p">,</span> <span class="n">R</span><span class="p">))</span>
|
||
</pre></div>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [ ]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span>
|
||
</pre></div>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [ ]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span>
|
||
</pre></div>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [ ]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span>
|
||
</pre></div>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs ">
|
||
<div class="jp-Cell-inputWrapper">
|
||
<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 [ ]:</div>
|
||
<div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
||
<div class="CodeMirror cm-s-jupyter">
|
||
<div class=" highlight hl-ipython2"><pre><span></span>
|
||
</pre></div>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
</body>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
</html>
|