diff --git a/README.md b/README.md index 72660df2..da6a1ba0 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@

- +

Bayesian Active Learning (Baal)
@@ -92,7 +92,7 @@ The framework consists of four main parts, as demonstrated in the flowchart belo - ActiveLearningLoop

- +

To get started, wrap your dataset in our _[**ActiveLearningDataset**](baal/active/dataset.py)_ class. This will ensure diff --git a/docs/Makefile b/docs/Makefile index a16605d4..554dcade 100644 --- a/docs/Makefile +++ b/docs/Makefile @@ -1,23 +1,10 @@ -# Minimal makefile for Sphinx documentation +# Minimal makefile for Mkdocs documentation # -# You can set these variables from the command line. -SPHINXOPTS = -SPHINXBUILD = sphinx-build -SOURCEDIR = . -BUILDDIR = _build - # Put it first so that "make" without argument is like "make help". -help: - @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) - -.PHONY: help Makefile - -# Catch-all target: route all unknown targets to Sphinx using the new -# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). -%: Makefile - @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) +build: + mkdocs build server: - open _build/html/index.html \ No newline at end of file + mkdocs watch \ No newline at end of file diff --git a/docs/_static/css/default.css b/docs/_static/css/default.css deleted file mode 100644 index 18dba0dd..00000000 --- a/docs/_static/css/default.css +++ /dev/null @@ -1,5116 +0,0 @@ -/*CSS from divio-docs-theme*/ -@charset "UTF-8"; -@import url("https://fonts.googleapis.com/css?family=Nunito:400:600"); -* { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; } - -article, aside, details, figcaption, figure, footer, header, hgroup, nav, section { - display: block; } - -audio, canvas, video { - display: inline-block; - *display: inline; - *zoom: 1; } - -audio:not([controls]) { - display: none; } - -[hidden] { - display: none; } - -* { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; } - -html { - font-size: 100%; - -webkit-text-size-adjust: 100%; - -ms-text-size-adjust: 100%; } - -body { - margin: 0; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; } - -a:hover, a:active { - outline: 0; } - -abbr[title] { - border-bottom: 1px dotted; } - -b, strong { - font-weight: 600; } - -blockquote { - margin: 0; } - -dfn { - font-style: italic; } - -ins { - background: #ff9; - color: #000; - text-decoration: none; } - -mark { - background: #ff0; - color: #000; - font-style: italic; - font-weight: 600; } - -pre, code, .rst-content tt, .rst-content code, kbd, samp { - font-family: monospace, serif; - _font-family: "courier new", monospace; - font-size: 1em; } - -pre { - white-space: pre; } - -q { - quotes: none; } - -q:before, q:after { - content: ""; - content: none; } - -small { - font-size: 85%; } - -sub, sup { - font-size: 75%; - line-height: 0; - position: relative; - vertical-align: baseline; } - -sup { - top: -0.5em; } - -sub { - bottom: -0.25em; } - -ul, ol, dl { - padding-left:20px; - list-style-type: circle; -} - -li { - list-style: none; } - -dd { - margin: 0; } - -img { - border: 0; - -ms-interpolation-mode: bicubic; - vertical-align: middle; - max-width: 100%; } - -svg:not(:root) { - overflow: hidden; } - -figure { - margin: 0; } - -form { - margin: 0; } - -fieldset { - border: 0; - margin: 0; - padding: 0; } - -label { - cursor: pointer; } - -legend { - border: 0; - *margin-left: -7px; - padding: 0; - white-space: normal; } - -button, input, select, textarea { - font-size: 100%; - margin: 0; - vertical-align: baseline; - *vertical-align: middle; } - -button, input { - line-height: normal; } - -button, input[type="button"], input[type="reset"], input[type="submit"] { - cursor: pointer; - -webkit-appearance: button; - *overflow: visible; } - -button[disabled], input[disabled] { - cursor: default; } - -input[type="checkbox"], input[type="radio"] { - box-sizing: border-box; - padding: 0; - *width: 13px; - *height: 13px; } - -input[type="search"] { - -webkit-appearance: textfield; - -moz-box-sizing: content-box; - -webkit-box-sizing: content-box; - box-sizing: content-box; } - -input[type="search"]::-webkit-search-decoration, input[type="search"]::-webkit-search-cancel-button { - -webkit-appearance: none; } - -button::-moz-focus-inner, input::-moz-focus-inner { - border: 0; - padding: 0; } - -textarea { - overflow: auto; - vertical-align: top; - resize: vertical; } - -table { - border-collapse: collapse; - border-spacing: 0; } - -td { - vertical-align: top; } - -.chromeframe { - margin: 0.2em 0; - background: #ccc; - color: black; - padding: 0.2em 0; } - -.ir { - display: block; - border: 0; - text-indent: -999em; - overflow: hidden; - background-color: transparent; - background-repeat: no-repeat; - text-align: left; - direction: ltr; - *line-height: 0; } - -.ir br { - display: none; } - -.hidden { - display: none !important; - visibility: hidden; } - -.visuallyhidden { - border: 0; - clip: rect(0 0 0 0); - height: 1px; - margin: -1px; - overflow: hidden; - padding: 0; - position: absolute; - width: 1px; } - -.visuallyhidden.focusable:active, .visuallyhidden.focusable:focus { - clip: auto; - height: auto; - margin: 0; - overflow: visible; - position: static; - width: auto; } - -.invisible { - visibility: hidden; } - -.relative { - position: relative; } - -big, small { - font-size: 100%; } - -@media print { - html, body, section { - background: none !important; } - * { - box-shadow: none !important; - text-shadow: none !important; - filter: none !important; - -ms-filter: none !important; } - a, a:visited { - text-decoration: underline; } - .ir a:after, a[href^="javascript:"]:after, a[href^="#"]:after { - content: ""; } - pre, blockquote { - page-break-inside: avoid; } - thead { - display: table-header-group; } - tr, img { - page-break-inside: avoid; } - img { - max-width: 100% !important; } - @page { - margin: 0.5cm; } - p, h2, .rst-content .toctree-wrapper p.caption, h3 { - orphans: 3; - widows: 3; } - h2, .rst-content .toctree-wrapper p.caption, h3 { - page-break-after: avoid; } } - -.fa:before, .wy-menu-vertical li span.toctree-expand:before, .wy-menu-vertical li.on a span.toctree-expand:before, .wy-menu-vertical li.current > a span.toctree-expand:before, .rst-content .admonition-title:before, .rst-content h1 .headerlink:before, .rst-content h2 .headerlink:before, .rst-content h3 .headerlink:before, .rst-content h4 .headerlink:before, .rst-content h5 .headerlink:before, .rst-content h6 .headerlink:before, .rst-content dl dt .headerlink:before, .rst-content p.caption .headerlink:before, .rst-content tt.download span:first-child:before, .rst-content code.download span:first-child:before, .icon:before, .wy-dropdown .caret:before, .wy-inline-validate.wy-inline-validate-success .wy-input-context:before, .wy-inline-validate.wy-inline-validate-danger .wy-input-context:before, .wy-inline-validate.wy-inline-validate-warning .wy-input-context:before, .wy-inline-validate.wy-inline-validate-info .wy-input-context:before, .wy-alert, .rst-content .note, .rst-content .attention, .rst-content .caution, .rst-content .danger, .rst-content .error, .rst-content .hint, .rst-content .important, .rst-content .tip, .rst-content .warning, .rst-content .seealso, .rst-content .admonition-todo, .rst-content .admonition, .btn, input[type="text"], input[type="password"], input[type="email"], input[type="url"], input[type="date"], input[type="month"], input[type="time"], input[type="datetime"], input[type="datetime-local"], input[type="week"], input[type="number"], input[type="search"], input[type="tel"], input[type="color"], select, textarea, .wy-menu-vertical li.on a, .wy-menu-vertical li.current > a, .wy-side-nav-search > a, .wy-side-nav-search .wy-dropdown > a, .wy-nav-top a { - -webkit-font-smoothing: antialiased; } - -.clearfix { - *zoom: 1; } - -.clearfix:before, .clearfix:after { - display: table; - content: ""; } - -.clearfix:after { - clear: both; } - -/*! - * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome - * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) - */ -/* FONT PATH - * -------------------------- */ -@font-face { - font-family: 'FontAwesome'; - src: url("../fonts/fontawesome-webfont.eot?v=4.7.0"); - src: url("../fonts/fontawesome-webfont.eot?#iefix&v=4.7.0") format("embedded-opentype"), url("../fonts/fontawesome-webfont.woff2?v=4.7.0") format("woff2"), url("../fonts/fontawesome-webfont.woff?v=4.7.0") format("woff"), url("../fonts/fontawesome-webfont.ttf?v=4.7.0") format("truetype"), url("../fonts/fontawesome-webfont.svg?v=4.7.0#fontawesomeregular") format("svg"); - font-weight: normal; - font-style: normal; } - -.fa, .wy-menu-vertical li span.toctree-expand, .wy-menu-vertical li.on a span.toctree-expand, .wy-menu-vertical li.current > a span.toctree-expand, .rst-content .admonition-title, .rst-content h1 .headerlink, .rst-content h2 .headerlink, .rst-content h3 .headerlink, .rst-content h4 .headerlink, .rst-content h5 .headerlink, .rst-content h6 .headerlink, .rst-content dl dt .headerlink, .rst-content p.caption .headerlink, .rst-content tt.download span:first-child, .rst-content code.download span:first-child, .icon { - display: inline-block; - font: normal normal normal 14px/1 FontAwesome; - font-size: inherit; - text-rendering: auto; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; } - -/* makes the font 33% larger relative to the icon container */ -.fa-lg { - font-size: 1.3333333333em; - line-height: 0.75em; - vertical-align: -15%; } - -.fa-2x { - font-size: 2em; } - -.fa-3x { - font-size: 3em; } - -.fa-4x { - font-size: 4em; } - -.fa-5x { - font-size: 5em; } - -.fa-fw { - width: 1.2857142857em; - text-align: center; } - -.fa-ul { - padding-left: 0; - margin-left: 2.1428571429em; - list-style-type: circle; } - -.fa-ul > li { - position: relative; } - -.fa-li { - position: absolute; - left: -2.1428571429em; - width: 2.1428571429em; - top: 0.1428571429em; - text-align: center; } - -.fa-li.fa-lg { - left: -1.8571428571em; } - -.fa-border { - padding: .2em .25em .15em; - border: solid 0.08em #eee; - border-radius: .1em; } - -.fa-pull-left { - float: left; } - -.fa-pull-right { - float: right; } - -.fa.fa-pull-left, .wy-menu-vertical li span.fa-pull-left.toctree-expand, .wy-menu-vertical li.on a span.fa-pull-left.toctree-expand, .wy-menu-vertical li.current > a span.fa-pull-left.toctree-expand, .rst-content .fa-pull-left.admonition-title, .rst-content h1 .fa-pull-left.headerlink, .rst-content h2 .fa-pull-left.headerlink, .rst-content h3 .fa-pull-left.headerlink, .rst-content h4 .fa-pull-left.headerlink, .rst-content h5 .fa-pull-left.headerlink, .rst-content h6 .fa-pull-left.headerlink, .rst-content dl dt .fa-pull-left.headerlink, .rst-content p.caption .fa-pull-left.headerlink, .rst-content tt.download span.fa-pull-left:first-child, .rst-content code.download span.fa-pull-left:first-child, .fa-pull-left.icon { - margin-right: .3em; } - -.fa.fa-pull-right, .wy-menu-vertical li span.fa-pull-right.toctree-expand, .wy-menu-vertical li.on a span.fa-pull-right.toctree-expand, .wy-menu-vertical li.current > a span.fa-pull-right.toctree-expand, .rst-content .fa-pull-right.admonition-title, .rst-content h1 .fa-pull-right.headerlink, .rst-content h2 .fa-pull-right.headerlink, .rst-content h3 .fa-pull-right.headerlink, .rst-content h4 .fa-pull-right.headerlink, .rst-content h5 .fa-pull-right.headerlink, .rst-content h6 .fa-pull-right.headerlink, .rst-content dl dt .fa-pull-right.headerlink, .rst-content p.caption .fa-pull-right.headerlink, .rst-content tt.download span.fa-pull-right:first-child, .rst-content code.download span.fa-pull-right:first-child, .fa-pull-right.icon { - margin-left: .3em; } - -/* Deprecated as of 4.4.0 */ -.pull-right { - float: right; } - -.pull-left { - float: left; } - -.fa.pull-left, .wy-menu-vertical li span.pull-left.toctree-expand, .wy-menu-vertical li.on a span.pull-left.toctree-expand, .wy-menu-vertical li.current > a span.pull-left.toctree-expand, .rst-content .pull-left.admonition-title, .rst-content h1 .pull-left.headerlink, .rst-content h2 .pull-left.headerlink, .rst-content h3 .pull-left.headerlink, .rst-content h4 .pull-left.headerlink, .rst-content h5 .pull-left.headerlink, .rst-content h6 .pull-left.headerlink, .rst-content dl dt .pull-left.headerlink, .rst-content p.caption .pull-left.headerlink, .rst-content tt.download span.pull-left:first-child, .rst-content code.download span.pull-left:first-child, .pull-left.icon { - margin-right: .3em; } - -.fa.pull-right, .wy-menu-vertical li span.pull-right.toctree-expand, .wy-menu-vertical li.on a span.pull-right.toctree-expand, .wy-menu-vertical li.current > a span.pull-right.toctree-expand, .rst-content .pull-right.admonition-title, .rst-content h1 .pull-right.headerlink, .rst-content h2 .pull-right.headerlink, .rst-content h3 .pull-right.headerlink, .rst-content h4 .pull-right.headerlink, .rst-content h5 .pull-right.headerlink, .rst-content h6 .pull-right.headerlink, .rst-content dl dt .pull-right.headerlink, .rst-content p.caption .pull-right.headerlink, .rst-content tt.download span.pull-right:first-child, .rst-content code.download span.pull-right:first-child, .pull-right.icon { - margin-left: .3em; } - -.fa-spin { - -webkit-animation: fa-spin 2s infinite linear; - animation: fa-spin 2s infinite linear; } - -.fa-pulse { - -webkit-animation: fa-spin 1s infinite steps(8); - animation: fa-spin 1s infinite steps(8); } - -@-webkit-keyframes fa-spin { - 0% { - -webkit-transform: rotate(0deg); - transform: rotate(0deg); } - 100% { - -webkit-transform: rotate(359deg); - transform: rotate(359deg); } } - -@keyframes fa-spin { - 0% { - -webkit-transform: rotate(0deg); - transform: rotate(0deg); } - 100% { - -webkit-transform: rotate(359deg); - transform: rotate(359deg); } } - -.fa-rotate-90 { - -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=1)"; - -webkit-transform: rotate(90deg); - -ms-transform: rotate(90deg); - transform: rotate(90deg); } - -.fa-rotate-180 { - -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2)"; - -webkit-transform: rotate(180deg); - -ms-transform: rotate(180deg); - transform: rotate(180deg); } - -.fa-rotate-270 { - -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=3)"; - -webkit-transform: rotate(270deg); - -ms-transform: rotate(270deg); - transform: rotate(270deg); } - -.fa-flip-horizontal { - -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)"; - -webkit-transform: scale(-1, 1); - -ms-transform: scale(-1, 1); - transform: scale(-1, 1); } - -.fa-flip-vertical { - -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)"; - -webkit-transform: scale(1, -1); - -ms-transform: scale(1, -1); - transform: scale(1, -1); } - -:root .fa-rotate-90, -:root .fa-rotate-180, -:root .fa-rotate-270, -:root .fa-flip-horizontal, -:root .fa-flip-vertical { - filter: none; } - -.fa-stack { - position: relative; - display: inline-block; - width: 2em; - height: 2em; - line-height: 2em; - vertical-align: middle; } - -.fa-stack-1x, .fa-stack-2x { - position: absolute; - left: 0; - width: 100%; - text-align: center; } - -.fa-stack-1x { - line-height: inherit; } - -.fa-stack-2x { - font-size: 2em; } - -.fa-inverse { - color: #fff; } - -/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen - readers do not read off random characters that represent icons */ -.fa-glass:before { - content: ""; } - -.fa-music:before { - content: ""; } - -.fa-search:before, .icon-search:before { - content: ""; } - -.fa-envelope-o:before { - content: ""; } - -.fa-heart:before { - content: ""; } - -.fa-star:before { - content: ""; } - -.fa-star-o:before { - content: ""; } - -.fa-user:before { - content: ""; } - -.fa-film:before { - content: ""; } - -.fa-th-large:before { - content: ""; } - -.fa-th:before { - content: ""; } - -.fa-th-list:before { - content: ""; } - -.fa-check:before { - content: ""; } - -.fa-remove:before, -.fa-close:before, -.fa-times:before { - content: ""; } - -.fa-search-plus:before { - content: ""; } - -.fa-search-minus:before { - content: ""; } - -.fa-power-off:before { - content: ""; } - -.fa-signal:before { - content: ""; } - -.fa-gear:before, -.fa-cog:before { - content: ""; } - -.fa-trash-o:before { - content: ""; } - -.fa-home:before, .icon-home:before { - content: ""; } - -.fa-file-o:before { - content: ""; } - -.fa-clock-o:before { - content: ""; } - -.fa-road:before { - content: ""; } - -.fa-download:before, .rst-content tt.download span:first-child:before, .rst-content code.download span:first-child:before { - content: ""; } - -.fa-arrow-circle-o-down:before { - content: ""; } - -.fa-arrow-circle-o-up:before { - content: ""; } - -.fa-inbox:before { - content: ""; } - -.fa-play-circle-o:before { - content: ""; } - -.fa-rotate-right:before, -.fa-repeat:before { - content: ""; } - -.fa-refresh:before { - content: ""; } - -.fa-list-alt:before { - content: ""; } - -.fa-lock:before { - content: ""; } - -.fa-flag:before { - content: ""; } - -.fa-headphones:before { - content: ""; } - -.fa-volume-off:before { - content: ""; } - -.fa-volume-down:before { - content: ""; } - -.fa-volume-up:before { - content: ""; } - -.fa-qrcode:before { - content: ""; } - -.fa-barcode:before { - content: ""; } - -.fa-tag:before { - content: ""; } - -.fa-tags:before { - content: ""; } - -.fa-book:before, .icon-book:before { - content: ""; } - -.fa-bookmark:before { - content: ""; } - -.fa-print:before { - content: ""; } - -.fa-camera:before { - content: ""; } - -.fa-font:before { - content: ""; } - -.fa-bold:before { - content: ""; } - -.fa-italic:before { - content: ""; } - -.fa-text-height:before { - content: ""; } - -.fa-text-width:before { - content: ""; } - -.fa-align-left:before { - content: ""; } - -.fa-align-center:before { - content: ""; } - -.fa-align-right:before { - content: ""; } - -.fa-align-justify:before { - content: ""; } - -.fa-list:before { - content: ""; } - -.fa-dedent:before, -.fa-outdent:before { - content: ""; } - -.fa-indent:before { - content: ""; } - -.fa-video-camera:before { - content: ""; } - -.fa-photo:before, -.fa-image:before, -.fa-picture-o:before { - content: ""; } - -.fa-pencil:before { - content: ""; } - -.fa-map-marker:before { - content: ""; } - -.fa-adjust:before { - content: ""; } - -.fa-tint:before { - content: ""; } - -.fa-edit:before, -.fa-pencil-square-o:before { - content: ""; } - -.fa-share-square-o:before { - content: ""; } - -.fa-check-square-o:before { - content: ""; } - -.fa-arrows:before { - content: ""; } - -.fa-step-backward:before { - content: ""; } - -.fa-fast-backward:before { - content: ""; } - -.fa-backward:before { - content: ""; } - -.fa-play:before { - content: ""; } - -.fa-pause:before { - content: ""; } - -.fa-stop:before { - content: ""; } - -.fa-forward:before { - content: ""; } - -.fa-fast-forward:before { - content: ""; } - -.fa-step-forward:before { - content: ""; } - -.fa-eject:before { - content: ""; } - -.fa-chevron-left:before { - content: ""; } - -.fa-chevron-right:before, -.wy-menu-vertical li span.toctree-expand:before { - content: ""; } - -.fa-plus-circle:before { - content: ""; } - -.fa-minus-circle:before { - content: ""; } - -.fa-times-circle:before, .wy-inline-validate.wy-inline-validate-danger .wy-input-context:before { - content: ""; } - -.fa-check-circle:before, .wy-inline-validate.wy-inline-validate-success .wy-input-context:before { - content: ""; } - -.fa-question-circle:before { - content: ""; } - -.fa-info-circle:before { - content: ""; } - -.fa-crosshairs:before { - content: ""; } - -.fa-times-circle-o:before { - content: ""; } - -.fa-check-circle-o:before { - content: ""; } - -.fa-ban:before { - content: ""; } - -.fa-arrow-left:before { - content: ""; } - -.fa-arrow-right:before { - content: ""; } - -.fa-arrow-up:before { - content: ""; } - -.fa-arrow-down:before { - content: ""; } - -.fa-mail-forward:before, -.fa-share:before { - content: ""; } - -.fa-expand:before { - content: ""; } - -.fa-compress:before { - content: ""; } - -.fa-plus:before { - content: ""; } - -.fa-minus:before { - content: ""; } - -.fa-asterisk:before { - content: ""; } - -.fa-exclamation-circle:before, .wy-inline-validate.wy-inline-validate-warning .wy-input-context:before, .wy-inline-validate.wy-inline-validate-info .wy-input-context:before, .rst-content .admonition-title:before { - content: ""; } - -.fa-gift:before { - content: ""; } - -.fa-leaf:before { - content: ""; } - -.fa-fire:before, .icon-fire:before { - content: ""; } - -.fa-eye:before { - content: ""; } - -.fa-eye-slash:before { - content: ""; } - -.fa-warning:before, -.fa-exclamation-triangle:before { - content: ""; } - -.fa-plane:before { - content: ""; } - -.fa-calendar:before { - content: ""; } - -.fa-random:before { - content: ""; } - -.fa-comment:before { - content: ""; } - -.fa-magnet:before { - content: ""; } - -.fa-chevron-up:before { - content: ""; } - -.fa-chevron-down:before, -.wy-menu-vertical li.on a span.toctree-expand:before, -.wy-menu-vertical li.current > a span.toctree-expand:before { - content: ""; } - -.fa-retweet:before { - content: ""; } - -.fa-shopping-cart:before { - content: ""; } - -.fa-folder:before { - content: ""; } - -.fa-folder-open:before { - content: ""; } - -.fa-arrows-v:before { - content: ""; } - -.fa-arrows-h:before { - content: ""; } - -.fa-bar-chart-o:before, -.fa-bar-chart:before { - content: ""; } - -.fa-twitter-square:before { - content: ""; } - -.fa-facebook-square:before { - content: ""; } - -.fa-camera-retro:before { - content: ""; } - -.fa-key:before { - content: ""; } - -.fa-gears:before, -.fa-cogs:before { - content: ""; } - -.fa-comments:before { - content: ""; } - -.fa-thumbs-o-up:before { - content: ""; } - -.fa-thumbs-o-down:before { - content: ""; } - -.fa-star-half:before { - content: ""; } - -.fa-heart-o:before { - content: ""; } - -.fa-sign-out:before { - content: ""; } - -.fa-linkedin-square:before { - content: ""; } - -.fa-thumb-tack:before { - content: ""; } - -.fa-external-link:before { - content: ""; } - -.fa-sign-in:before { - content: ""; } - -.fa-trophy:before { - content: ""; } - -.fa-github-square:before { - content: ""; } - -.fa-upload:before { - content: ""; } - -.fa-lemon-o:before { - content: ""; } - -.fa-phone:before { - content: ""; } - -.fa-square-o:before { - content: ""; } - -.fa-bookmark-o:before { - content: ""; } - -.fa-phone-square:before { - content: ""; } - -.fa-twitter:before { - content: ""; } - -.fa-facebook-f:before, -.fa-facebook:before { - content: ""; } - -.fa-github:before, .icon-github:before { - content: ""; } - -.fa-unlock:before { - content: ""; } - -.fa-credit-card:before { - content: ""; } - -.fa-feed:before, -.fa-rss:before { - content: ""; } - -.fa-hdd-o:before { - content: ""; } - -.fa-bullhorn:before { - content: ""; } - -.fa-bell:before { - content: ""; } - -.fa-certificate:before { - content: ""; } - -.fa-hand-o-right:before { - content: ""; } - -.fa-hand-o-left:before { - content: ""; } - -.fa-hand-o-up:before { - content: ""; } - -.fa-hand-o-down:before { - content: ""; } - -.fa-arrow-circle-left:before, .icon-circle-arrow-left:before { - margin: 2px 5px 1px 1px; - content: ""; } - -.fa-arrow-circle-right:before, .icon-circle-arrow-right:before { - margin: 2px 1px 1px 5px; - content: ""; } - -.fa-arrow-circle-up:before { - content: ""; } - -.fa-arrow-circle-down:before { - content: ""; } - -.fa-globe:before { - content: ""; } - -.fa-wrench:before { - content: ""; } - -.fa-tasks:before { - content: ""; } - -.fa-filter:before { - content: ""; } - -.fa-briefcase:before { - content: ""; } - -.fa-arrows-alt:before { - content: ""; } - -.fa-group:before, -.fa-users:before { - content: ""; } - -.fa-chain:before, -.fa-link:before, -.icon-link:before { - content: ""; } - -.fa-cloud:before { - content: ""; } - -.fa-flask:before { - content: ""; } - -.fa-cut:before, -.fa-scissors:before { - content: ""; } - -.fa-copy:before, -.fa-files-o:before { - content: ""; } - -.fa-paperclip:before { - content: ""; } - -.fa-save:before, -.fa-floppy-o:before { - content: ""; } - -.fa-square:before { - content: ""; } - -.fa-navicon:before, -.fa-reorder:before, -.fa-bars:before { - content: ""; } - -.fa-list-ul:before { - content: ""; } - -.fa-list-ol:before { - content: ""; } - -.fa-strikethrough:before { - content: ""; } - -.fa-underline:before { - content: ""; } - -.fa-table:before { - content: ""; } - -.fa-magic:before { - content: ""; } - -.fa-truck:before { - content: ""; } - -.fa-pinterest:before { - content: ""; } - -.fa-pinterest-square:before { - content: ""; } - -.fa-google-plus-square:before { - content: ""; } - -.fa-google-plus:before { - content: ""; } - -.fa-money:before { - content: ""; } - -.fa-caret-down:before, .wy-dropdown .caret:before, .icon-caret-down:before { - content: ""; } - -.fa-caret-up:before { - content: ""; } - -.fa-caret-left:before { - content: ""; } - -.fa-caret-right:before { - content: ""; } - -.fa-columns:before { - content: ""; } - -.fa-unsorted:before, -.fa-sort:before { - content: ""; } - -.fa-sort-down:before, -.fa-sort-desc:before { - content: ""; } - -.fa-sort-up:before, -.fa-sort-asc:before { - content: ""; } - -.fa-envelope:before { - content: ""; } - -.fa-linkedin:before { - content: ""; } - -.fa-rotate-left:before, -.fa-undo:before { - content: ""; } - -.fa-legal:before, -.fa-gavel:before { - content: ""; } - -.fa-dashboard:before, -.fa-tachometer:before { - content: ""; } - -.fa-comment-o:before { - content: ""; } - -.fa-comments-o:before { - content: ""; } - -.fa-flash:before, -.fa-bolt:before { - content: ""; } - -.fa-sitemap:before { - content: ""; } - -.fa-umbrella:before { - content: ""; } - -.fa-paste:before, -.fa-clipboard:before { - content: ""; } - -.fa-lightbulb-o:before { - content: ""; } - -.fa-exchange:before { - content: ""; } - -.fa-cloud-download:before { - content: ""; } - -.fa-cloud-upload:before { - content: ""; } - -.fa-user-md:before { - content: ""; } - -.fa-stethoscope:before { - content: ""; } - -.fa-suitcase:before { - content: ""; } - -.fa-bell-o:before { - content: ""; } - -.fa-coffee:before { - content: ""; } - -.fa-cutlery:before { - content: ""; } - -.fa-file-text-o:before { - content: ""; } - -.fa-building-o:before { - content: ""; } - -.fa-hospital-o:before { - content: ""; } - -.fa-ambulance:before { - content: ""; } - -.fa-medkit:before { - content: ""; } - -.fa-fighter-jet:before { - content: ""; } - -.fa-beer:before { - content: ""; } - -.fa-h-square:before { - content: ""; } - -.fa-plus-square:before { - content: ""; } - -.fa-angle-double-left:before { - content: ""; } - -.fa-angle-double-right:before { - content: ""; } - -.fa-angle-double-up:before { - content: ""; } - -.fa-angle-double-down:before { - content: ""; } - -.fa-angle-left:before { - content: ""; } - -.fa-angle-right:before { - content: ""; } - -.fa-angle-up:before { - content: ""; } - -.fa-angle-down:before { - content: ""; } - -.fa-desktop:before { - content: ""; } - -.fa-laptop:before { - content: ""; } - -.fa-tablet:before { - content: ""; } - -.fa-mobile-phone:before, -.fa-mobile:before { - content: ""; } - -.fa-circle-o:before { - content: ""; } - -.fa-quote-left:before { - content: ""; } - -.fa-quote-right:before { - content: ""; } - -.fa-spinner:before { - content: ""; } - -.fa-circle:before { - content: ""; } - -.fa-mail-reply:before, -.fa-reply:before { - content: ""; } - -.fa-github-alt:before { - content: ""; } - -.fa-folder-o:before { - content: ""; } - -.fa-folder-open-o:before { - content: ""; } - -.fa-smile-o:before { - content: ""; } - -.fa-frown-o:before { - content: ""; } - -.fa-meh-o:before { - content: ""; } - -.fa-gamepad:before { - content: ""; } - -.fa-keyboard-o:before { - content: ""; } - -.fa-flag-o:before { - content: ""; } - -.fa-flag-checkered:before { - content: ""; } - -.fa-terminal:before { - content: ""; } - -.fa-code:before { - content: ""; } - -.fa-mail-reply-all:before, -.fa-reply-all:before { - content: ""; } - -.fa-star-half-empty:before, -.fa-star-half-full:before, -.fa-star-half-o:before { - content: ""; } - -.fa-location-arrow:before { - content: ""; } - -.fa-crop:before { - content: ""; } - -.fa-code-fork:before { - content: ""; } - -.fa-unlink:before, -.fa-chain-broken:before { - content: ""; } - -.fa-question:before { - content: ""; } - -.fa-info:before { - content: ""; } - -.fa-exclamation:before { - content: ""; } - -.fa-superscript:before { - content: ""; } - -.fa-subscript:before { - content: ""; } - -.fa-eraser:before { - content: ""; } - -.fa-puzzle-piece:before { - content: ""; } - -.fa-microphone:before { - content: ""; } - -.fa-microphone-slash:before { - content: ""; } - -.fa-shield:before { - content: ""; } - -.fa-calendar-o:before { - content: ""; } - -.fa-fire-extinguisher:before { - content: ""; } - -.fa-rocket:before { - content: ""; } - -.fa-maxcdn:before { - content: ""; } - -.fa-chevron-circle-left:before { - content: ""; } - -.fa-chevron-circle-right:before { - content: ""; } - -.fa-chevron-circle-up:before { - content: ""; } - -.fa-chevron-circle-down:before { - content: ""; } - -.fa-html5:before { - content: ""; } - -.fa-css3:before { - content: ""; } - -.fa-anchor:before { - content: ""; } - -.fa-unlock-alt:before { - content: ""; } - -.fa-bullseye:before { - content: ""; } - -.fa-ellipsis-h:before { - content: ""; } - -.fa-ellipsis-v:before { - content: ""; } - -.fa-rss-square:before { - content: ""; } - -.fa-play-circle:before { - content: ""; } - -.fa-ticket:before { - content: ""; } - -.fa-minus-square:before { - content: ""; } - -.fa-minus-square-o:before { - content: ""; } - -.fa-level-up:before { - content: ""; } - -.fa-level-down:before { - content: ""; } - -.fa-check-square:before { - content: ""; } - -.fa-pencil-square:before { - content: ""; } - -.fa-external-link-square:before { - content: ""; } - -.fa-share-square:before { - content: ""; } - -.fa-compass:before { - content: ""; } - -.fa-toggle-down:before, -.fa-caret-square-o-down:before { - content: ""; } - -.fa-toggle-up:before, -.fa-caret-square-o-up:before { - content: ""; } - -.fa-toggle-right:before, -.fa-caret-square-o-right:before { - content: ""; } - -.fa-euro:before, -.fa-eur:before { - content: ""; } - -.fa-gbp:before { - content: ""; } - -.fa-dollar:before, -.fa-usd:before { - content: ""; } - -.fa-rupee:before, -.fa-inr:before { - content: ""; } - -.fa-cny:before, -.fa-rmb:before, -.fa-yen:before, -.fa-jpy:before { - content: ""; } - -.fa-ruble:before, -.fa-rouble:before, -.fa-rub:before { - content: ""; } - -.fa-won:before, -.fa-krw:before { - content: ""; } - -.fa-bitcoin:before, -.fa-btc:before { - content: ""; } - -.fa-file:before { - content: ""; } - -.fa-file-text:before { - content: ""; } - -.fa-sort-alpha-asc:before { - content: ""; } - -.fa-sort-alpha-desc:before { - content: ""; } - -.fa-sort-amount-asc:before { - content: ""; } - -.fa-sort-amount-desc:before { - content: ""; } - -.fa-sort-numeric-asc:before { - content: ""; } - -.fa-sort-numeric-desc:before { - content: ""; } - -.fa-thumbs-up:before { - content: ""; } - -.fa-thumbs-down:before { - content: ""; } - -.fa-youtube-square:before { - content: ""; } - -.fa-youtube:before { - content: ""; } - -.fa-xing:before { - content: ""; } - -.fa-xing-square:before { - content: ""; } - -.fa-youtube-play:before { - content: ""; } - -.fa-dropbox:before { - content: ""; } - -.fa-stack-overflow:before { - content: ""; } - -.fa-instagram:before { - content: ""; } - -.fa-flickr:before { - content: ""; } - -.fa-adn:before { - content: ""; } - -.fa-bitbucket:before, .icon-bitbucket:before { - content: ""; } - -.fa-bitbucket-square:before { - content: ""; } - -.fa-tumblr:before { - content: ""; } - -.fa-tumblr-square:before { - content: ""; } - -.fa-long-arrow-down:before { - content: ""; } - -.fa-long-arrow-up:before { - content: ""; } - -.fa-long-arrow-left:before { - content: ""; } - -.fa-long-arrow-right:before { - content: ""; } - -.fa-apple:before { - content: ""; } - -.fa-windows:before { - content: ""; } - -.fa-android:before { - content: ""; } - -.fa-linux:before { - content: ""; } - -.fa-dribbble:before { - content: ""; } - -.fa-skype:before { - content: ""; } - -.fa-foursquare:before { - content: ""; } - -.fa-trello:before { - content: ""; } - -.fa-female:before { - content: ""; } - -.fa-male:before { - content: ""; } - -.fa-gittip:before, -.fa-gratipay:before { - content: ""; } - -.fa-sun-o:before { - content: ""; } - -.fa-moon-o:before { - content: ""; } - -.fa-archive:before { - content: ""; } - -.fa-bug:before { - content: ""; } - -.fa-vk:before { - content: ""; } - -.fa-weibo:before { - content: ""; } - -.fa-renren:before { - content: ""; } - -.fa-pagelines:before { - content: ""; } - -.fa-stack-exchange:before { - content: ""; } - -.fa-arrow-circle-o-right:before { - content: ""; } - -.fa-arrow-circle-o-left:before { - content: ""; } - -.fa-toggle-left:before, -.fa-caret-square-o-left:before { - content: ""; } - -.fa-dot-circle-o:before { - content: ""; } - -.fa-wheelchair:before { - content: ""; } - -.fa-vimeo-square:before { - content: ""; } - -.fa-turkish-lira:before, -.fa-try:before { - content: ""; } - -.fa-plus-square-o:before { - content: ""; } - -.fa-space-shuttle:before { - content: ""; } - -.fa-slack:before { - content: ""; } - -.fa-envelope-square:before { - content: ""; } - -.fa-wordpress:before { - content: ""; } - -.fa-openid:before { - content: ""; } - -.fa-institution:before, -.fa-bank:before, -.fa-university:before { - content: ""; } - -.fa-mortar-board:before, -.fa-graduation-cap:before { - content: ""; } - -.fa-yahoo:before { - content: ""; } - -.fa-google:before { - content: ""; } - -.fa-reddit:before { - content: ""; } - -.fa-reddit-square:before { - content: ""; } - -.fa-stumbleupon-circle:before { - content: ""; } - -.fa-stumbleupon:before { - content: ""; } - -.fa-delicious:before { - content: ""; } - -.fa-digg:before { - content: ""; } - -.fa-pied-piper-pp:before { - content: ""; } - -.fa-pied-piper-alt:before { - content: ""; } - -.fa-drupal:before { - content: ""; } - -.fa-joomla:before { - content: ""; } - -.fa-language:before { - content: ""; } - -.fa-fax:before { - content: ""; } - -.fa-building:before { - content: ""; } - -.fa-child:before { - content: ""; } - -.fa-paw:before { - content: ""; } - -.fa-spoon:before { - content: ""; } - -.fa-cube:before { - content: ""; } - -.fa-cubes:before { - content: ""; } - -.fa-behance:before { - content: ""; } - -.fa-behance-square:before { - content: ""; } - -.fa-steam:before { - content: ""; } - -.fa-steam-square:before { - content: ""; } - -.fa-recycle:before { - content: ""; } - -.fa-automobile:before, -.fa-car:before { - content: ""; } - -.fa-cab:before, -.fa-taxi:before { - content: ""; } - -.fa-tree:before { - content: ""; } - -.fa-spotify:before { - content: ""; } - -.fa-deviantart:before { - content: ""; } - -.fa-soundcloud:before { - content: ""; } - -.fa-database:before { - content: ""; } - -.fa-file-pdf-o:before { - content: ""; } - -.fa-file-word-o:before { - content: ""; } - -.fa-file-excel-o:before { - content: ""; } - -.fa-file-powerpoint-o:before { - content: ""; } - -.fa-file-photo-o:before, -.fa-file-picture-o:before, -.fa-file-image-o:before { - content: ""; } - -.fa-file-zip-o:before, -.fa-file-archive-o:before { - content: ""; } - -.fa-file-sound-o:before, -.fa-file-audio-o:before { - content: ""; } - -.fa-file-movie-o:before, -.fa-file-video-o:before { - content: ""; } - -.fa-file-code-o:before { - content: ""; } - -.fa-vine:before { - content: ""; } - -.fa-codepen:before { - content: ""; } - -.fa-jsfiddle:before { - content: ""; } - -.fa-life-bouy:before, -.fa-life-buoy:before, -.fa-life-saver:before, -.fa-support:before, -.fa-life-ring:before { - content: ""; } - -.fa-circle-o-notch:before { - content: ""; } - -.fa-ra:before, -.fa-resistance:before, -.fa-rebel:before { - content: ""; } - -.fa-ge:before, -.fa-empire:before { - content: ""; } - -.fa-git-square:before { - content: ""; } - -.fa-git:before { - content: ""; } - -.fa-y-combinator-square:before, -.fa-yc-square:before, -.fa-hacker-news:before { - content: ""; } - -.fa-tencent-weibo:before { - content: ""; } - -.fa-qq:before { - content: ""; } - -.fa-wechat:before, -.fa-weixin:before { - content: ""; } - -.fa-send:before, -.fa-paper-plane:before { - content: ""; } - -.fa-send-o:before, -.fa-paper-plane-o:before { - content: ""; } - -.fa-history:before { - content: ""; } - -.fa-circle-thin:before { - content: ""; } - -.fa-header:before { - content: ""; } - -.fa-paragraph:before { - content: ""; } - -.fa-sliders:before { - content: ""; } - -.fa-share-alt:before { - content: ""; } - -.fa-share-alt-square:before { - content: ""; } - -.fa-bomb:before { - content: ""; } - -.fa-soccer-ball-o:before, -.fa-futbol-o:before { - content: ""; } - -.fa-tty:before { - content: ""; } - -.fa-binoculars:before { - content: ""; } - -.fa-plug:before { - content: ""; } - -.fa-slideshare:before { - content: ""; } - -.fa-twitch:before { - content: ""; } - -.fa-yelp:before { - content: ""; } - -.fa-newspaper-o:before { - content: ""; } - -.fa-wifi:before { - content: ""; } - -.fa-calculator:before { - content: ""; } - -.fa-paypal:before { - content: ""; } - -.fa-google-wallet:before { - content: ""; } - -.fa-cc-visa:before { - content: ""; } - -.fa-cc-mastercard:before { - content: ""; } - -.fa-cc-discover:before { - content: ""; } - -.fa-cc-amex:before { - content: ""; } - -.fa-cc-paypal:before { - content: ""; } - -.fa-cc-stripe:before { - content: ""; } - -.fa-bell-slash:before { - content: ""; } - -.fa-bell-slash-o:before { - content: ""; } - -.fa-trash:before { - content: ""; } - -.fa-copyright:before { - content: ""; } - -.fa-at:before { - content: ""; } - -.fa-eyedropper:before { - content: ""; } - -.fa-paint-brush:before { - content: ""; } - -.fa-birthday-cake:before { - content: ""; } - -.fa-area-chart:before { - content: ""; } - -.fa-pie-chart:before { - content: ""; } - -.fa-line-chart:before { - content: ""; } - -.fa-lastfm:before { - content: ""; } - -.fa-lastfm-square:before { - content: ""; } - -.fa-toggle-off:before { - content: ""; } - -.fa-toggle-on:before { - content: ""; } - -.fa-bicycle:before { - content: ""; } - -.fa-bus:before { - content: ""; } - -.fa-ioxhost:before { - content: ""; } - -.fa-angellist:before { - content: ""; } - -.fa-cc:before { - content: ""; } - -.fa-shekel:before, -.fa-sheqel:before, -.fa-ils:before { - content: ""; } - -.fa-meanpath:before { - content: ""; } - -.fa-buysellads:before { - content: ""; } - -.fa-connectdevelop:before { - content: ""; } - -.fa-dashcube:before { - content: ""; } - -.fa-forumbee:before { - content: ""; } - -.fa-leanpub:before { - content: ""; } - -.fa-sellsy:before { - content: ""; } - -.fa-shirtsinbulk:before { - content: ""; } - -.fa-simplybuilt:before { - content: ""; } - -.fa-skyatlas:before { - content: ""; } - -.fa-cart-plus:before { - content: ""; } - -.fa-cart-arrow-down:before { - content: ""; } - -.fa-diamond:before { - content: ""; } - -.fa-ship:before { - content: ""; } - -.fa-user-secret:before { - content: ""; } - -.fa-motorcycle:before { - content: ""; } - -.fa-street-view:before { - content: ""; } - -.fa-heartbeat:before { - content: ""; } - -.fa-venus:before { - content: ""; } - -.fa-mars:before { - content: ""; } - -.fa-mercury:before { - content: ""; } - -.fa-intersex:before, -.fa-transgender:before { - content: ""; } - -.fa-transgender-alt:before { - content: ""; } - -.fa-venus-double:before { - content: ""; } - -.fa-mars-double:before { - content: ""; } - -.fa-venus-mars:before { - content: ""; } - -.fa-mars-stroke:before { - content: ""; } - -.fa-mars-stroke-v:before { - content: ""; } - -.fa-mars-stroke-h:before { - content: ""; } - -.fa-neuter:before { - content: ""; } - -.fa-genderless:before { - content: ""; } - -.fa-facebook-official:before { - content: ""; } - -.fa-pinterest-p:before { - content: ""; } - -.fa-whatsapp:before { - content: ""; } - -.fa-server:before { - content: ""; } - -.fa-user-plus:before { - content: ""; } - -.fa-user-times:before { - content: ""; } - -.fa-hotel:before, -.fa-bed:before { - content: ""; } - -.fa-viacoin:before { - content: ""; } - -.fa-train:before { - content: ""; } - -.fa-subway:before { - content: ""; } - -.fa-medium:before { - content: ""; } - -.fa-yc:before, -.fa-y-combinator:before { - content: ""; } - -.fa-optin-monster:before { - content: ""; } - -.fa-opencart:before { - content: ""; } - -.fa-expeditedssl:before { - content: ""; } - -.fa-battery-4:before, -.fa-battery:before, -.fa-battery-full:before { - content: ""; } - -.fa-battery-3:before, -.fa-battery-three-quarters:before { - content: ""; } - -.fa-battery-2:before, -.fa-battery-half:before { - content: ""; } - -.fa-battery-1:before, -.fa-battery-quarter:before { - content: ""; } - -.fa-battery-0:before, -.fa-battery-empty:before { - content: ""; } - -.fa-mouse-pointer:before { - content: ""; } - -.fa-i-cursor:before { - content: ""; } - -.fa-object-group:before { - content: ""; } - -.fa-object-ungroup:before { - content: ""; } - -.fa-sticky-note:before { - content: ""; } - -.fa-sticky-note-o:before { - content: ""; } - -.fa-cc-jcb:before { - content: ""; } - -.fa-cc-diners-club:before { - content: ""; } - -.fa-clone:before { - content: ""; } - -.fa-balance-scale:before { - content: ""; } - -.fa-hourglass-o:before { - content: ""; } - -.fa-hourglass-1:before, -.fa-hourglass-start:before { - content: ""; } - -.fa-hourglass-2:before, -.fa-hourglass-half:before { - content: ""; } - -.fa-hourglass-3:before, -.fa-hourglass-end:before { - content: ""; } - -.fa-hourglass:before { - content: ""; } - -.fa-hand-grab-o:before, -.fa-hand-rock-o:before { - content: ""; } - -.fa-hand-stop-o:before, -.fa-hand-paper-o:before { - content: ""; } - -.fa-hand-scissors-o:before { - content: ""; } - -.fa-hand-lizard-o:before { - content: ""; } - -.fa-hand-spock-o:before { - content: ""; } - -.fa-hand-pointer-o:before { - content: ""; } - -.fa-hand-peace-o:before { - content: ""; } - -.fa-trademark:before { - content: ""; } - -.fa-registered:before { - content: ""; } - -.fa-creative-commons:before { - content: ""; } - -.fa-gg:before { - content: ""; } - -.fa-gg-circle:before { - content: ""; } - -.fa-tripadvisor:before { - content: ""; } - -.fa-odnoklassniki:before { - content: ""; } - -.fa-odnoklassniki-square:before { - content: ""; } - -.fa-get-pocket:before { - content: ""; } - -.fa-wikipedia-w:before { - content: ""; } - -.fa-safari:before { - content: ""; } - -.fa-chrome:before { - content: ""; } - -.fa-firefox:before { - content: ""; } - -.fa-opera:before { - content: ""; } - -.fa-internet-explorer:before { - content: ""; } - -.fa-tv:before, -.fa-television:before { - content: ""; } - -.fa-contao:before { - content: ""; } - -.fa-500px:before { - content: ""; } - -.fa-amazon:before { - content: ""; } - -.fa-calendar-plus-o:before { - content: ""; } - -.fa-calendar-minus-o:before { - content: ""; } - -.fa-calendar-times-o:before { - content: ""; } - -.fa-calendar-check-o:before { - content: ""; } - -.fa-industry:before { - content: ""; } - -.fa-map-pin:before { - content: ""; } - -.fa-map-signs:before { - content: ""; } - -.fa-map-o:before { - content: ""; } - -.fa-map:before { - content: ""; } - -.fa-commenting:before { - content: ""; } - -.fa-commenting-o:before { - content: ""; } - -.fa-houzz:before { - content: ""; } - -.fa-vimeo:before { - content: ""; } - -.fa-black-tie:before { - content: ""; } - -.fa-fonticons:before { - content: ""; } - -.fa-reddit-alien:before { - content: ""; } - -.fa-edge:before { - content: ""; } - -.fa-credit-card-alt:before { - content: ""; } - -.fa-codiepie:before { - content: ""; } - -.fa-modx:before { - content: ""; } - -.fa-fort-awesome:before { - content: ""; } - -.fa-usb:before { - content: ""; } - -.fa-product-hunt:before { - content: ""; } - -.fa-mixcloud:before { - content: ""; } - -.fa-scribd:before { - content: ""; } - -.fa-pause-circle:before { - content: ""; } - -.fa-pause-circle-o:before { - content: ""; } - -.fa-stop-circle:before { - content: ""; } - -.fa-stop-circle-o:before { - content: ""; } - -.fa-shopping-bag:before { - content: ""; } - -.fa-shopping-basket:before { - content: ""; } - -.fa-hashtag:before { - content: ""; } - -.fa-bluetooth:before { - content: ""; } - -.fa-bluetooth-b:before { - content: ""; } - -.fa-percent:before { - content: ""; } - -.fa-gitlab:before, .icon-gitlab:before { - content: ""; } - -.fa-wpbeginner:before { - content: ""; } - -.fa-wpforms:before { - content: ""; } - -.fa-envira:before { - content: ""; } - -.fa-universal-access:before { - content: ""; } - -.fa-wheelchair-alt:before { - content: ""; } - -.fa-question-circle-o:before { - content: ""; } - -.fa-blind:before { - content: ""; } - -.fa-audio-description:before { - content: ""; } - -.fa-volume-control-phone:before { - content: ""; } - -.fa-braille:before { - content: ""; } - -.fa-assistive-listening-systems:before { - content: ""; } - -.fa-asl-interpreting:before, -.fa-american-sign-language-interpreting:before { - content: ""; } - -.fa-deafness:before, -.fa-hard-of-hearing:before, -.fa-deaf:before { - content: ""; } - -.fa-glide:before { - content: ""; } - -.fa-glide-g:before { - content: ""; } - -.fa-signing:before, -.fa-sign-language:before { - content: ""; } - -.fa-low-vision:before { - content: ""; } - -.fa-viadeo:before { - content: ""; } - -.fa-viadeo-square:before { - content: ""; } - -.fa-snapchat:before { - content: ""; } - -.fa-snapchat-ghost:before { - content: ""; } - -.fa-snapchat-square:before { - content: ""; } - -.fa-pied-piper:before { - content: ""; } - -.fa-first-order:before { - content: ""; } - -.fa-yoast:before { - content: ""; } - -.fa-themeisle:before { - content: ""; } - -.fa-google-plus-circle:before, -.fa-google-plus-official:before { - content: ""; } - -.fa-fa:before, -.fa-font-awesome:before { - content: ""; } - -.fa-handshake-o:before { - content: ""; } - -.fa-envelope-open:before { - content: ""; } - -.fa-envelope-open-o:before { - content: ""; } - -.fa-linode:before { - content: ""; } - -.fa-address-book:before { - content: ""; } - -.fa-address-book-o:before { - content: ""; } - -.fa-vcard:before, -.fa-address-card:before { - content: ""; } - -.fa-vcard-o:before, -.fa-address-card-o:before { - content: ""; } - -.fa-user-circle:before { - content: ""; } - -.fa-user-circle-o:before { - content: ""; } - -.fa-user-o:before { - content: ""; } - -.fa-id-badge:before { - content: ""; } - -.fa-drivers-license:before, -.fa-id-card:before { - content: ""; } - -.fa-drivers-license-o:before, -.fa-id-card-o:before { - content: ""; } - -.fa-quora:before { - content: ""; } - -.fa-free-code-camp:before { - content: ""; } - -.fa-telegram:before { - content: ""; } - -.fa-thermometer-4:before, -.fa-thermometer:before, -.fa-thermometer-full:before { - content: ""; } - -.fa-thermometer-3:before, -.fa-thermometer-three-quarters:before { - content: ""; } - -.fa-thermometer-2:before, -.fa-thermometer-half:before { - content: ""; } - -.fa-thermometer-1:before, -.fa-thermometer-quarter:before { - content: ""; } - -.fa-thermometer-0:before, -.fa-thermometer-empty:before { - content: ""; } - -.fa-shower:before { - content: ""; } - -.fa-bathtub:before, -.fa-s15:before, -.fa-bath:before { - content: ""; } - -.fa-podcast:before { - content: ""; } - -.fa-window-maximize:before { - content: ""; } - -.fa-window-minimize:before { - content: ""; } - -.fa-window-restore:before { - content: ""; } - -.fa-times-rectangle:before, -.fa-window-close:before { - content: ""; } - -.fa-times-rectangle-o:before, -.fa-window-close-o:before { - content: ""; } - -.fa-bandcamp:before { - content: ""; } - -.fa-grav:before { - content: ""; } - -.fa-etsy:before { - content: ""; } - -.fa-imdb:before { - content: ""; } - -.fa-ravelry:before { - content: ""; } - -.fa-eercast:before { - content: ""; } - -.fa-microchip:before { - content: ""; } - -.fa-snowflake-o:before { - content: ""; } - -.fa-superpowers:before { - content: ""; } - -.fa-wpexplorer:before { - content: ""; } - -.fa-meetup:before { - content: ""; } - -.sr-only { - position: absolute; - width: 1px; - height: 1px; - padding: 0; - margin: -1px; - overflow: hidden; - clip: rect(0, 0, 0, 0); - border: 0; } - -.sr-only-focusable:active, .sr-only-focusable:focus { - position: static; - width: auto; - height: auto; - margin: 0; - overflow: visible; - clip: auto; } - -.fa, .wy-menu-vertical li span.toctree-expand, .wy-menu-vertical li.on a span.toctree-expand, .wy-menu-vertical li.current > a span.toctree-expand, .rst-content .admonition-title, .rst-content h1 .headerlink, .rst-content h2 .headerlink, .rst-content h3 .headerlink, .rst-content h4 .headerlink, .rst-content h5 .headerlink, .rst-content h6 .headerlink, .rst-content dl dt .headerlink, .rst-content p.caption .headerlink, .rst-content tt.download span:first-child, .rst-content code.download span:first-child, .icon, .wy-dropdown .caret, .wy-inline-validate.wy-inline-validate-success .wy-input-context, .wy-inline-validate.wy-inline-validate-danger .wy-input-context, .wy-inline-validate.wy-inline-validate-warning .wy-input-context, .wy-inline-validate.wy-inline-validate-info .wy-input-context { - font-family: inherit; } - -.fa:before, .wy-menu-vertical li span.toctree-expand:before, .wy-menu-vertical li.on a span.toctree-expand:before, .wy-menu-vertical li.current > a span.toctree-expand:before, .rst-content .admonition-title:before, .rst-content h1 .headerlink:before, .rst-content h2 .headerlink:before, .rst-content h3 .headerlink:before, .rst-content h4 .headerlink:before, .rst-content h5 .headerlink:before, .rst-content h6 .headerlink:before, .rst-content dl dt .headerlink:before, .rst-content p.caption .headerlink:before, .rst-content tt.download span:first-child:before, .rst-content code.download span:first-child:before, .icon:before, .wy-dropdown .caret:before, .wy-inline-validate.wy-inline-validate-success .wy-input-context:before, .wy-inline-validate.wy-inline-validate-danger .wy-input-context:before, .wy-inline-validate.wy-inline-validate-warning .wy-input-context:before, .wy-inline-validate.wy-inline-validate-info .wy-input-context:before { - font-family: "FontAwesome"; - display: inline-block; - font-style: normal; - font-weight: normal; - line-height: 1; - text-decoration: inherit; } - -a .fa, a .wy-menu-vertical li span.toctree-expand, .wy-menu-vertical li a span.toctree-expand, .wy-menu-vertical li.on a span.toctree-expand, .wy-menu-vertical li.current > a span.toctree-expand, a .rst-content .admonition-title, .rst-content a .admonition-title, a .rst-content h1 .headerlink, .rst-content h1 a .headerlink, a .rst-content h2 .headerlink, .rst-content h2 a .headerlink, a .rst-content h3 .headerlink, .rst-content h3 a .headerlink, a .rst-content h4 .headerlink, .rst-content h4 a .headerlink, a .rst-content h5 .headerlink, .rst-content h5 a .headerlink, a .rst-content h6 .headerlink, .rst-content h6 a .headerlink, a .rst-content dl dt .headerlink, .rst-content dl dt a .headerlink, a .rst-content p.caption .headerlink, .rst-content p.caption a .headerlink, a .rst-content tt.download span:first-child, .rst-content tt.download a span:first-child, a .rst-content code.download span:first-child, .rst-content code.download a span:first-child, a .icon { - display: inline-block; - text-decoration: inherit; } - -.btn .fa, .btn .wy-menu-vertical li span.toctree-expand, .wy-menu-vertical li .btn span.toctree-expand, .btn .wy-menu-vertical li.on a span.toctree-expand, .wy-menu-vertical li.on a .btn span.toctree-expand, .btn .wy-menu-vertical li.current > a span.toctree-expand, .wy-menu-vertical li.current > a .btn span.toctree-expand, .btn .rst-content .admonition-title, .rst-content .btn .admonition-title, .btn .rst-content h1 .headerlink, .rst-content h1 .btn .headerlink, .btn .rst-content h2 .headerlink, .rst-content h2 .btn .headerlink, .btn .rst-content h3 .headerlink, .rst-content h3 .btn .headerlink, .btn .rst-content h4 .headerlink, .rst-content h4 .btn .headerlink, .btn .rst-content h5 .headerlink, .rst-content h5 .btn .headerlink, .btn .rst-content h6 .headerlink, .rst-content h6 .btn .headerlink, .btn .rst-content dl dt .headerlink, .rst-content dl dt .btn .headerlink, .btn .rst-content p.caption .headerlink, .rst-content p.caption .btn .headerlink, .btn .rst-content tt.download span:first-child, .rst-content tt.download .btn span:first-child, .btn .rst-content code.download span:first-child, .rst-content code.download .btn span:first-child, .btn .icon, .nav .fa, .nav .wy-menu-vertical li span.toctree-expand, .wy-menu-vertical li .nav span.toctree-expand, .nav .wy-menu-vertical li.on a span.toctree-expand, .wy-menu-vertical li.on a .nav span.toctree-expand, .nav .wy-menu-vertical li.current > a span.toctree-expand, .wy-menu-vertical li.current > a .nav span.toctree-expand, .nav .rst-content .admonition-title, .rst-content .nav .admonition-title, .nav .rst-content h1 .headerlink, .rst-content h1 .nav .headerlink, .nav .rst-content h2 .headerlink, .rst-content h2 .nav .headerlink, .nav .rst-content h3 .headerlink, .rst-content h3 .nav .headerlink, .nav .rst-content h4 .headerlink, .rst-content h4 .nav .headerlink, .nav .rst-content h5 .headerlink, .rst-content h5 .nav .headerlink, .nav .rst-content h6 .headerlink, .rst-content h6 .nav .headerlink, .nav .rst-content dl dt .headerlink, .rst-content dl dt .nav .headerlink, .nav .rst-content p.caption .headerlink, .rst-content p.caption .nav .headerlink, .nav .rst-content tt.download span:first-child, .rst-content tt.download .nav span:first-child, .nav .rst-content code.download span:first-child, .rst-content code.download .nav span:first-child, .nav .icon { - display: inline; } - -.btn .fa.fa-large, .btn .wy-menu-vertical li span.fa-large.toctree-expand, .wy-menu-vertical li .btn span.fa-large.toctree-expand, .btn .rst-content .fa-large.admonition-title, .rst-content .btn .fa-large.admonition-title, .btn .rst-content h1 .fa-large.headerlink, .rst-content h1 .btn .fa-large.headerlink, .btn .rst-content h2 .fa-large.headerlink, .rst-content h2 .btn .fa-large.headerlink, .btn .rst-content h3 .fa-large.headerlink, .rst-content h3 .btn .fa-large.headerlink, .btn .rst-content h4 .fa-large.headerlink, .rst-content h4 .btn .fa-large.headerlink, .btn .rst-content h5 .fa-large.headerlink, .rst-content h5 .btn .fa-large.headerlink, .btn .rst-content h6 .fa-large.headerlink, .rst-content h6 .btn .fa-large.headerlink, .btn .rst-content dl dt .fa-large.headerlink, .rst-content dl dt .btn .fa-large.headerlink, .btn .rst-content p.caption .fa-large.headerlink, .rst-content p.caption .btn .fa-large.headerlink, .btn .rst-content tt.download span.fa-large:first-child, .rst-content tt.download .btn span.fa-large:first-child, .btn .rst-content code.download span.fa-large:first-child, .rst-content code.download .btn span.fa-large:first-child, .btn .fa-large.icon, .nav .fa.fa-large, .nav .wy-menu-vertical li span.fa-large.toctree-expand, .wy-menu-vertical li .nav span.fa-large.toctree-expand, .nav .rst-content .fa-large.admonition-title, .rst-content .nav .fa-large.admonition-title, .nav .rst-content h1 .fa-large.headerlink, .rst-content h1 .nav .fa-large.headerlink, .nav .rst-content h2 .fa-large.headerlink, .rst-content h2 .nav .fa-large.headerlink, .nav .rst-content h3 .fa-large.headerlink, .rst-content h3 .nav .fa-large.headerlink, .nav .rst-content h4 .fa-large.headerlink, .rst-content h4 .nav .fa-large.headerlink, .nav .rst-content h5 .fa-large.headerlink, .rst-content h5 .nav .fa-large.headerlink, .nav .rst-content h6 .fa-large.headerlink, .rst-content h6 .nav .fa-large.headerlink, .nav .rst-content dl dt .fa-large.headerlink, .rst-content dl dt .nav .fa-large.headerlink, .nav .rst-content p.caption .fa-large.headerlink, .rst-content p.caption .nav .fa-large.headerlink, .nav .rst-content tt.download span.fa-large:first-child, .rst-content tt.download .nav span.fa-large:first-child, .nav .rst-content code.download span.fa-large:first-child, .rst-content code.download .nav span.fa-large:first-child, .nav .fa-large.icon { - line-height: 0.9em; } - -.btn .fa.fa-spin, .btn .wy-menu-vertical li span.fa-spin.toctree-expand, .wy-menu-vertical li .btn span.fa-spin.toctree-expand, .btn .rst-content .fa-spin.admonition-title, .rst-content .btn .fa-spin.admonition-title, .btn .rst-content h1 .fa-spin.headerlink, .rst-content h1 .btn .fa-spin.headerlink, .btn .rst-content h2 .fa-spin.headerlink, .rst-content h2 .btn .fa-spin.headerlink, .btn .rst-content h3 .fa-spin.headerlink, .rst-content h3 .btn .fa-spin.headerlink, .btn .rst-content h4 .fa-spin.headerlink, .rst-content h4 .btn .fa-spin.headerlink, .btn .rst-content h5 .fa-spin.headerlink, .rst-content h5 .btn .fa-spin.headerlink, .btn .rst-content h6 .fa-spin.headerlink, .rst-content h6 .btn .fa-spin.headerlink, .btn .rst-content dl dt .fa-spin.headerlink, .rst-content dl dt .btn .fa-spin.headerlink, .btn .rst-content p.caption .fa-spin.headerlink, .rst-content p.caption .btn .fa-spin.headerlink, .btn .rst-content tt.download span.fa-spin:first-child, .rst-content tt.download .btn span.fa-spin:first-child, .btn .rst-content code.download span.fa-spin:first-child, .rst-content code.download .btn span.fa-spin:first-child, .btn .fa-spin.icon, .nav .fa.fa-spin, .nav .wy-menu-vertical li span.fa-spin.toctree-expand, .wy-menu-vertical li .nav span.fa-spin.toctree-expand, .nav .rst-content .fa-spin.admonition-title, .rst-content .nav .fa-spin.admonition-title, .nav .rst-content h1 .fa-spin.headerlink, .rst-content h1 .nav .fa-spin.headerlink, .nav .rst-content h2 .fa-spin.headerlink, .rst-content h2 .nav .fa-spin.headerlink, .nav .rst-content h3 .fa-spin.headerlink, .rst-content h3 .nav .fa-spin.headerlink, .nav .rst-content h4 .fa-spin.headerlink, .rst-content h4 .nav .fa-spin.headerlink, .nav .rst-content h5 .fa-spin.headerlink, .rst-content h5 .nav .fa-spin.headerlink, .nav .rst-content h6 .fa-spin.headerlink, .rst-content h6 .nav .fa-spin.headerlink, .nav .rst-content dl dt .fa-spin.headerlink, .rst-content dl dt .nav .fa-spin.headerlink, .nav .rst-content p.caption .fa-spin.headerlink, .rst-content p.caption .nav .fa-spin.headerlink, .nav .rst-content tt.download span.fa-spin:first-child, .rst-content tt.download .nav span.fa-spin:first-child, .nav .rst-content code.download span.fa-spin:first-child, .rst-content code.download .nav span.fa-spin:first-child, .nav .fa-spin.icon { - display: inline-block; } - -.btn.fa:before, .wy-menu-vertical li span.btn.toctree-expand:before, .rst-content .btn.admonition-title:before, .rst-content h1 .btn.headerlink:before, .rst-content h2 .btn.headerlink:before, .rst-content h3 .btn.headerlink:before, .rst-content h4 .btn.headerlink:before, .rst-content h5 .btn.headerlink:before, .rst-content h6 .btn.headerlink:before, .rst-content dl dt .btn.headerlink:before, .rst-content p.caption .btn.headerlink:before, .rst-content tt.download span.btn:first-child:before, .rst-content code.download span.btn:first-child:before, .btn.icon:before { - opacity: 0.5; - -webkit-transition: opacity 0.05s ease-in; - -moz-transition: opacity 0.05s ease-in; - transition: opacity 0.05s ease-in; } - -.btn.fa:hover:before, .wy-menu-vertical li span.btn.toctree-expand:hover:before, .rst-content .btn.admonition-title:hover:before, .rst-content h1 .btn.headerlink:hover:before, .rst-content h2 .btn.headerlink:hover:before, .rst-content h3 .btn.headerlink:hover:before, .rst-content h4 .btn.headerlink:hover:before, .rst-content h5 .btn.headerlink:hover:before, .rst-content h6 .btn.headerlink:hover:before, .rst-content dl dt .btn.headerlink:hover:before, .rst-content p.caption .btn.headerlink:hover:before, .rst-content tt.download span.btn:first-child:hover:before, .rst-content code.download span.btn:first-child:hover:before, .btn.icon:hover:before { - opacity: 1; } - -.btn-mini .fa:before, .btn-mini .wy-menu-vertical li span.toctree-expand:before, .wy-menu-vertical li .btn-mini span.toctree-expand:before, .btn-mini .rst-content .admonition-title:before, .rst-content .btn-mini .admonition-title:before, .btn-mini .rst-content h1 .headerlink:before, .rst-content h1 .btn-mini .headerlink:before, .btn-mini .rst-content h2 .headerlink:before, .rst-content h2 .btn-mini .headerlink:before, .btn-mini .rst-content h3 .headerlink:before, .rst-content h3 .btn-mini .headerlink:before, .btn-mini .rst-content h4 .headerlink:before, .rst-content h4 .btn-mini .headerlink:before, .btn-mini .rst-content h5 .headerlink:before, .rst-content h5 .btn-mini .headerlink:before, .btn-mini .rst-content h6 .headerlink:before, .rst-content h6 .btn-mini .headerlink:before, .btn-mini .rst-content dl dt .headerlink:before, .rst-content dl dt .btn-mini .headerlink:before, .btn-mini .rst-content p.caption .headerlink:before, .rst-content p.caption .btn-mini .headerlink:before, .btn-mini .rst-content tt.download span:first-child:before, .rst-content tt.download .btn-mini span:first-child:before, .btn-mini .rst-content code.download span:first-child:before, .rst-content code.download .btn-mini span:first-child:before, .btn-mini .icon:before { - font-size: 14px; - vertical-align: -15%; } - -.wy-alert, .rst-content .note, .rst-content .attention, .rst-content .caution, .rst-content .danger, .rst-content .error, .rst-content .hint, .rst-content .important, .rst-content .tip, .rst-content .warning, .rst-content .seealso, .rst-content .admonition-todo, .rst-content .admonition { - padding: 12px; - line-height: 24px; - margin-bottom: 24px; - background: #e7f2fa; - border-radius: 5px; - overflow: hidden; } - -.wy-alert-title, .rst-content .admonition-title { - color: #fff; - font-weight: 600; - display: block; - color: #fff; - background: #6ab0de; - margin: -12px; - padding: 6px 12px; - margin-bottom: 12px; } - -.wy-alert.wy-alert-danger, .rst-content .wy-alert-danger.note, .rst-content .wy-alert-danger.attention, .rst-content .wy-alert-danger.caution, .rst-content .danger, .rst-content .error, .rst-content .wy-alert-danger.hint, .rst-content .wy-alert-danger.important, .rst-content .wy-alert-danger.tip, .rst-content .wy-alert-danger.warning, .rst-content .wy-alert-danger.seealso, .rst-content .wy-alert-danger.admonition-todo, .rst-content .wy-alert-danger.admonition { - background: #fdf3f2; } - -.wy-alert.wy-alert-danger .wy-alert-title, .rst-content .wy-alert-danger.note .wy-alert-title, .rst-content .wy-alert-danger.attention .wy-alert-title, .rst-content .wy-alert-danger.caution .wy-alert-title, .rst-content .danger .wy-alert-title, .rst-content .error .wy-alert-title, .rst-content .wy-alert-danger.hint .wy-alert-title, .rst-content .wy-alert-danger.important .wy-alert-title, .rst-content .wy-alert-danger.tip .wy-alert-title, .rst-content .wy-alert-danger.warning .wy-alert-title, .rst-content .wy-alert-danger.seealso .wy-alert-title, .rst-content .wy-alert-danger.admonition-todo .wy-alert-title, .rst-content .wy-alert-danger.admonition .wy-alert-title, .wy-alert.wy-alert-danger .rst-content .admonition-title, .rst-content .wy-alert.wy-alert-danger .admonition-title, .rst-content .wy-alert-danger.note .admonition-title, .rst-content .wy-alert-danger.attention .admonition-title, .rst-content .wy-alert-danger.caution .admonition-title, .rst-content .danger .admonition-title, .rst-content .error .admonition-title, .rst-content .wy-alert-danger.hint .admonition-title, .rst-content .wy-alert-danger.important .admonition-title, .rst-content .wy-alert-danger.tip .admonition-title, .rst-content .wy-alert-danger.warning .admonition-title, .rst-content .wy-alert-danger.seealso .admonition-title, .rst-content .wy-alert-danger.admonition-todo .admonition-title, .rst-content .wy-alert-danger.admonition .admonition-title { - background: #f29f97; } - -.wy-alert.wy-alert-warning, .rst-content .wy-alert-warning.note, .rst-content .attention, .rst-content .caution, .rst-content .wy-alert-warning.danger, .rst-content .wy-alert-warning.error, .rst-content .wy-alert-warning.hint, .rst-content .wy-alert-warning.important, .rst-content .wy-alert-warning.tip, .rst-content .warning, .rst-content .wy-alert-warning.seealso, .rst-content .admonition-todo, .rst-content .wy-alert-warning.admonition { - background: #ffedcc; } - -.wy-alert.wy-alert-warning .wy-alert-title, .rst-content .wy-alert-warning.note .wy-alert-title, .rst-content .attention .wy-alert-title, .rst-content .caution .wy-alert-title, .rst-content .wy-alert-warning.danger .wy-alert-title, .rst-content .wy-alert-warning.error .wy-alert-title, .rst-content .wy-alert-warning.hint .wy-alert-title, .rst-content .wy-alert-warning.important .wy-alert-title, .rst-content .wy-alert-warning.tip .wy-alert-title, .rst-content .warning .wy-alert-title, .rst-content .wy-alert-warning.seealso .wy-alert-title, .rst-content .admonition-todo .wy-alert-title, .rst-content .wy-alert-warning.admonition .wy-alert-title, .wy-alert.wy-alert-warning .rst-content .admonition-title, .rst-content .wy-alert.wy-alert-warning .admonition-title, .rst-content .wy-alert-warning.note .admonition-title, .rst-content .attention .admonition-title, .rst-content .caution .admonition-title, .rst-content .wy-alert-warning.danger .admonition-title, .rst-content .wy-alert-warning.error .admonition-title, .rst-content .wy-alert-warning.hint .admonition-title, .rst-content .wy-alert-warning.important .admonition-title, .rst-content .wy-alert-warning.tip .admonition-title, .rst-content .warning .admonition-title, .rst-content .wy-alert-warning.seealso .admonition-title, .rst-content .admonition-todo .admonition-title, .rst-content .wy-alert-warning.admonition .admonition-title { - background: #f0b37e; } - -.wy-alert.wy-alert-info, .rst-content .note, .rst-content .wy-alert-info.attention, .rst-content .wy-alert-info.caution, .rst-content .wy-alert-info.danger, .rst-content .wy-alert-info.error, .rst-content .wy-alert-info.hint, .rst-content .wy-alert-info.important, .rst-content .wy-alert-info.tip, .rst-content .wy-alert-info.warning, .rst-content .seealso, .rst-content .wy-alert-info.admonition-todo, .rst-content .wy-alert-info.admonition { - background: #e7f2fa; } - -.wy-alert.wy-alert-info .wy-alert-title, .rst-content .note .wy-alert-title, .rst-content .wy-alert-info.attention .wy-alert-title, .rst-content .wy-alert-info.caution .wy-alert-title, .rst-content .wy-alert-info.danger .wy-alert-title, .rst-content .wy-alert-info.error .wy-alert-title, .rst-content .wy-alert-info.hint .wy-alert-title, .rst-content .wy-alert-info.important .wy-alert-title, .rst-content .wy-alert-info.tip .wy-alert-title, .rst-content .wy-alert-info.warning .wy-alert-title, .rst-content .seealso .wy-alert-title, .rst-content .wy-alert-info.admonition-todo .wy-alert-title, .rst-content .wy-alert-info.admonition .wy-alert-title, .wy-alert.wy-alert-info .rst-content .admonition-title, .rst-content .wy-alert.wy-alert-info .admonition-title, .rst-content .note .admonition-title, .rst-content .wy-alert-info.attention .admonition-title, .rst-content .wy-alert-info.caution .admonition-title, .rst-content .wy-alert-info.danger .admonition-title, .rst-content .wy-alert-info.error .admonition-title, .rst-content .wy-alert-info.hint .admonition-title, .rst-content .wy-alert-info.important .admonition-title, .rst-content .wy-alert-info.tip .admonition-title, .rst-content .wy-alert-info.warning .admonition-title, .rst-content .seealso .admonition-title, .rst-content .wy-alert-info.admonition-todo .admonition-title, .rst-content .wy-alert-info.admonition .admonition-title { - background: #6ab0de; } - -.wy-alert.wy-alert-success, .rst-content .wy-alert-success.note, .rst-content .wy-alert-success.attention, .rst-content .wy-alert-success.caution, .rst-content .wy-alert-success.danger, .rst-content .wy-alert-success.error, .rst-content .hint, .rst-content .important, .rst-content .tip, .rst-content .wy-alert-success.warning, .rst-content .wy-alert-success.seealso, .rst-content .wy-alert-success.admonition-todo, .rst-content .wy-alert-success.admonition { - background: #dbfaf4; } - -.wy-alert.wy-alert-success .wy-alert-title, .rst-content .wy-alert-success.note .wy-alert-title, .rst-content .wy-alert-success.attention .wy-alert-title, .rst-content .wy-alert-success.caution .wy-alert-title, .rst-content .wy-alert-success.danger .wy-alert-title, .rst-content .wy-alert-success.error .wy-alert-title, .rst-content .hint .wy-alert-title, .rst-content .important .wy-alert-title, .rst-content .tip .wy-alert-title, .rst-content .wy-alert-success.warning .wy-alert-title, .rst-content .wy-alert-success.seealso .wy-alert-title, .rst-content .wy-alert-success.admonition-todo .wy-alert-title, .rst-content .wy-alert-success.admonition .wy-alert-title, .wy-alert.wy-alert-success .rst-content .admonition-title, .rst-content .wy-alert.wy-alert-success .admonition-title, .rst-content .wy-alert-success.note .admonition-title, .rst-content .wy-alert-success.attention .admonition-title, .rst-content .wy-alert-success.caution .admonition-title, .rst-content .wy-alert-success.danger .admonition-title, .rst-content .wy-alert-success.error .admonition-title, .rst-content .hint .admonition-title, .rst-content .important .admonition-title, .rst-content .tip .admonition-title, .rst-content .wy-alert-success.warning .admonition-title, .rst-content .wy-alert-success.seealso .admonition-title, .rst-content .wy-alert-success.admonition-todo .admonition-title, .rst-content .wy-alert-success.admonition .admonition-title { - background: #1abc9c; } - -.wy-alert.wy-alert-neutral, .rst-content .wy-alert-neutral.note, .rst-content .wy-alert-neutral.attention, .rst-content .wy-alert-neutral.caution, .rst-content .wy-alert-neutral.danger, .rst-content .wy-alert-neutral.error, .rst-content .wy-alert-neutral.hint, .rst-content .wy-alert-neutral.important, .rst-content .wy-alert-neutral.tip, .rst-content .wy-alert-neutral.warning, .rst-content .wy-alert-neutral.seealso, .rst-content .wy-alert-neutral.admonition-todo, .rst-content .wy-alert-neutral.admonition { - background: #f3f6f6; } - -.wy-alert.wy-alert-neutral .wy-alert-title, .rst-content .wy-alert-neutral.note .wy-alert-title, .rst-content .wy-alert-neutral.attention .wy-alert-title, .rst-content .wy-alert-neutral.caution .wy-alert-title, .rst-content .wy-alert-neutral.danger .wy-alert-title, .rst-content .wy-alert-neutral.error .wy-alert-title, .rst-content .wy-alert-neutral.hint .wy-alert-title, .rst-content .wy-alert-neutral.important .wy-alert-title, .rst-content .wy-alert-neutral.tip .wy-alert-title, .rst-content .wy-alert-neutral.warning .wy-alert-title, .rst-content .wy-alert-neutral.seealso .wy-alert-title, .rst-content .wy-alert-neutral.admonition-todo .wy-alert-title, .rst-content .wy-alert-neutral.admonition .wy-alert-title, .wy-alert.wy-alert-neutral .rst-content .admonition-title, .rst-content .wy-alert.wy-alert-neutral .admonition-title, .rst-content .wy-alert-neutral.note .admonition-title, .rst-content .wy-alert-neutral.attention .admonition-title, .rst-content .wy-alert-neutral.caution .admonition-title, .rst-content .wy-alert-neutral.danger .admonition-title, .rst-content .wy-alert-neutral.error .admonition-title, .rst-content .wy-alert-neutral.hint .admonition-title, .rst-content .wy-alert-neutral.important .admonition-title, .rst-content .wy-alert-neutral.tip .admonition-title, .rst-content .wy-alert-neutral.warning .admonition-title, .rst-content .wy-alert-neutral.seealso .admonition-title, .rst-content .wy-alert-neutral.admonition-todo .admonition-title, .rst-content .wy-alert-neutral.admonition .admonition-title { - color: #404040; - background: #e1e4e5; } - -.wy-alert.wy-alert-neutral a, .rst-content .wy-alert-neutral.note a, .rst-content .wy-alert-neutral.attention a, .rst-content .wy-alert-neutral.caution a, .rst-content .wy-alert-neutral.danger a, .rst-content .wy-alert-neutral.error a, .rst-content .wy-alert-neutral.hint a, .rst-content .wy-alert-neutral.important a, .rst-content .wy-alert-neutral.tip a, .rst-content .wy-alert-neutral.warning a, .rst-content .wy-alert-neutral.seealso a, .rst-content .wy-alert-neutral.admonition-todo a, .rst-content .wy-alert-neutral.admonition a { - color: #2980B9; } - -.wy-alert p:last-child, .rst-content .note p:last-child, .rst-content .attention p:last-child, .rst-content .caution p:last-child, .rst-content .danger p:last-child, .rst-content .error p:last-child, .rst-content .hint p:last-child, .rst-content .important p:last-child, .rst-content .tip p:last-child, .rst-content .warning p:last-child, .rst-content .seealso p:last-child, .rst-content .admonition-todo p:last-child, .rst-content .admonition p:last-child { - margin-bottom: 0; } - -.wy-tray-container { - position: fixed; - bottom: 0px; - left: 0; - z-index: 600; } - -.wy-tray-container li { - display: block; - width: 300px; - background: transparent; - color: #fff; - text-align: center; - box-shadow: 0 5px 5px 0 rgba(0, 0, 0, 0.1); - padding: 0 24px; - min-width: 20%; - opacity: 0; - height: 0; - line-height: 56px; - overflow: hidden; - -webkit-transition: all 0.3s ease-in; - -moz-transition: all 0.3s ease-in; - transition: all 0.3s ease-in; } - -.wy-tray-container li.wy-tray-item-success { - background: #27AE60; } - -.wy-tray-container li.wy-tray-item-info { - background: #2980B9; } - -.wy-tray-container li.wy-tray-item-warning { - background: #E67E22; } - -.wy-tray-container li.wy-tray-item-danger { - background: #E74C3C; } - -.wy-tray-container li.on { - opacity: 1; - height: 56px; } - -@media screen and (max-width: 768px) { - .wy-tray-container { - bottom: auto; - top: 0; - width: 100%; } - .wy-tray-container li { - width: 100%; } } - -button { - font-size: 100%; - margin: 0; - vertical-align: baseline; - *vertical-align: middle; - cursor: pointer; - line-height: normal; - -webkit-appearance: button; - *overflow: visible; } - -button::-moz-focus-inner, input::-moz-focus-inner { - border: 0; - padding: 0; } - -button[disabled] { - cursor: default; } - -.btn { - /* Structure */ - display: inline-flex; - align-items: center; - border-radius: 2px; - line-height: normal; - white-space: nowrap; - text-align: center; - cursor: pointer; - font-size: 100%; - padding: 6px 12px 6px 12px; - color: #fff; - background-color: #27AE60; - text-decoration: none; - border-radius: 5px; - font-weight: normal; - outline-none: false; - vertical-align: middle; - *display: inline; - zoom: 1; - -webkit-user-drag: none; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - -webkit-transition: all 0.1s linear; - -moz-transition: all 0.1s linear; - transition: all 0.1s linear; } - -.btn-hover { - background: #2e8ece; - color: #fff; } - -.btn:hover { - background: #2cc36b; - color: #fff; } - -.btn:focus { - background: #2cc36b; - outline: 0; } - -.btn:active { - box-shadow: 0px -1px 0px 0px rgba(0, 0, 0, 0.05) inset, 0px 2px 0px 0px rgba(0, 0, 0, 0.1) inset; } - -.btn:visited { - color: #fff; } - -.btn:disabled { - background-image: none; - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); - filter: alpha(opacity=40); - opacity: 0.4; - cursor: not-allowed; - box-shadow: none; } - -.btn-disabled { - background-image: none; - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); - filter: alpha(opacity=40); - opacity: 0.4; - cursor: not-allowed; - box-shadow: none; } - -.btn-disabled:hover, .btn-disabled:focus, .btn-disabled:active { - background-image: none; - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); - filter: alpha(opacity=40); - opacity: 0.4; - cursor: not-allowed; - box-shadow: none; } - -.btn::-moz-focus-inner { - padding: 0; - border: 0; } - -.btn-small { - font-size: 80%; } - -.btn-info { - background-color: #2980B9 !important; } - -.btn-info:hover { - background-color: #2e8ece !important; } - -.btn-neutral { - background-color: #f5f7f9 !important; - color: #039bee !important; } - -.btn-neutral:hover { - background-color: #057eb6 !important; - color: #fff !important; } - -.btn-success { - background-color: #27AE60 !important; } - -.btn-success:hover { - background-color: #229955 !important; } - -.btn-danger { - background-color: #E74C3C !important; } - -.btn-danger:hover { - background-color: #ea6153 !important; } - -.btn-warning { - background-color: #E67E22 !important; } - -.btn-warning:hover { - background-color: #e98b39 !important; } - -.btn-invert { - background-color: #222; } - -.btn-invert:hover { - background-color: #2f2f2f !important; } - -.btn-link { - background-color: transparent !important; - color: #2980B9; - box-shadow: none; - border-color: transparent !important; } - -.btn-link:hover { - background-color: transparent !important; - color: #409ad5 !important; - box-shadow: none; } - -.btn-link:active { - background-color: transparent !important; - color: #409ad5 !important; - box-shadow: none; } - -.btn-link:visited { - color: #9B59B6; } - -.wy-btn-group .btn, .wy-control .btn { - vertical-align: middle; } - -.wy-btn-group { - margin-bottom: 24px; - *zoom: 1; } - -.wy-btn-group:before, .wy-btn-group:after { - display: table; - content: ""; } - -.wy-btn-group:after { - clear: both; } - -.wy-dropdown { - position: relative; - display: inline-block; } - -.wy-dropdown-active .wy-dropdown-menu { - display: block; } - -.wy-dropdown-menu { - position: absolute; - left: 0; - display: none; - float: left; - top: 100%; - min-width: 100%; - background: #fcfcfc; - z-index: 100; - border: solid 1px #cfd7dd; - box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.1); - padding: 12px; } - -.wy-dropdown-menu > dd > a { - display: block; - clear: both; - color: #404040; - white-space: nowrap; - font-size: 90%; - padding: 0 12px; - cursor: pointer; } - -.wy-dropdown-menu > dd > a:hover { - background: #2980B9; - color: #fff; } - -.wy-dropdown-menu > dd.divider { - border-top: solid 1px #cfd7dd; - margin: 6px 0; } - -.wy-dropdown-menu > dd.search { - padding-bottom: 12px; } - -.wy-dropdown-menu > dd.search input[type="search"] { - width: 100%; } - -.wy-dropdown-menu > dd.call-to-action { - background: #e3e3e3; - text-transform: uppercase; - font-weight: 500; - font-size: 80%; } - -.wy-dropdown-menu > dd.call-to-action:hover { - background: #e3e3e3; } - -.wy-dropdown-menu > dd.call-to-action .btn { - color: #fff; } - -.wy-dropdown.wy-dropdown-up .wy-dropdown-menu { - bottom: 100%; - top: auto; - left: auto; - right: 0; } - -.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu { - background: #fcfcfc; - margin-top: 2px; } - -.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu a { - padding: 6px 12px; } - -.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu a:hover { - background: #2980B9; - color: #fff; } - -.wy-dropdown.wy-dropdown-left .wy-dropdown-menu { - right: 0; - left: auto; - text-align: right; } - -.wy-dropdown-arrow:before { - content: " "; - border-bottom: 5px solid whitesmoke; - border-left: 5px solid transparent; - border-right: 5px solid transparent; - position: absolute; - display: block; - top: -4px; - left: 50%; - margin-left: -3px; } - -.wy-dropdown-arrow.wy-dropdown-arrow-left:before { - left: 11px; } - -.wy-form-stacked select { - display: block; - padding-top: 30px;} - -.wy-form-aligned input, .wy-form-aligned textarea, .wy-form-aligned select, .wy-form-aligned .wy-help-inline, .wy-form-aligned label { - display: inline-block; - *display: inline; - *zoom: 1; - vertical-align: middle; } - -.wy-form-aligned .wy-control-group > label { - display: inline-block; - vertical-align: middle; - width: 10em; - margin: 6px 12px 0 0; - float: left; } - -.wy-form-aligned .wy-control { - float: left; } - -.wy-form-aligned .wy-control label { - display: block; } - -.wy-form-aligned .wy-control select { - margin-top: 6px; } - -fieldset { - border: 0; - margin: 0; - padding: 0; } - -legend { - display: block; - width: 100%; - border: 0; - padding: 0; - white-space: normal; - margin-bottom: 24px; - font-size: 150%; - *margin-left: -7px; } - -label { - display: block; - margin: 0 0 0.3125em 0; - color: #333; - font-size: 90%; } - -input, select, textarea { - font-size: 100%; - margin: 0; - vertical-align: baseline; - *vertical-align: middle; } - -.wy-control-group { - margin-bottom: 24px; - *zoom: 1; - max-width: 68em; - margin-left: auto; - margin-right: auto; - *zoom: 1; } - -.wy-control-group:before, .wy-control-group:after { - display: table; - content: ""; } - -.wy-control-group:after { - clear: both; } - -.wy-control-group:before, .wy-control-group:after { - display: table; - content: ""; } - -.wy-control-group:after { - clear: both; } - -.wy-control-group.wy-control-group-required > label:after { - content: " *"; - color: #E74C3C; } - -.wy-control-group .wy-form-full, .wy-control-group .wy-form-halves, .wy-control-group .wy-form-thirds { - padding-bottom: 12px; } - -.wy-control-group .wy-form-full select, .wy-control-group .wy-form-halves select, .wy-control-group .wy-form-thirds select { - width: 100%; } - -.wy-control-group .wy-form-full input[type="text"], .wy-control-group .wy-form-full input[type="password"], .wy-control-group .wy-form-full input[type="email"], .wy-control-group .wy-form-full input[type="url"], .wy-control-group .wy-form-full input[type="date"], .wy-control-group .wy-form-full input[type="month"], .wy-control-group .wy-form-full input[type="time"], .wy-control-group .wy-form-full input[type="datetime"], .wy-control-group .wy-form-full input[type="datetime-local"], .wy-control-group .wy-form-full input[type="week"], .wy-control-group .wy-form-full input[type="number"], .wy-control-group .wy-form-full input[type="search"], .wy-control-group .wy-form-full input[type="tel"], .wy-control-group .wy-form-full input[type="color"], .wy-control-group .wy-form-halves input[type="text"], .wy-control-group .wy-form-halves input[type="password"], .wy-control-group .wy-form-halves input[type="email"], .wy-control-group .wy-form-halves input[type="url"], .wy-control-group .wy-form-halves input[type="date"], .wy-control-group .wy-form-halves input[type="month"], .wy-control-group .wy-form-halves input[type="time"], .wy-control-group .wy-form-halves input[type="datetime"], .wy-control-group .wy-form-halves input[type="datetime-local"], .wy-control-group .wy-form-halves input[type="week"], .wy-control-group .wy-form-halves input[type="number"], .wy-control-group .wy-form-halves input[type="search"], .wy-control-group .wy-form-halves input[type="tel"], .wy-control-group .wy-form-halves input[type="color"], .wy-control-group .wy-form-thirds input[type="text"], .wy-control-group .wy-form-thirds input[type="password"], .wy-control-group .wy-form-thirds input[type="email"], .wy-control-group .wy-form-thirds input[type="url"], .wy-control-group .wy-form-thirds input[type="date"], .wy-control-group .wy-form-thirds input[type="month"], .wy-control-group .wy-form-thirds input[type="time"], .wy-control-group .wy-form-thirds input[type="datetime"], .wy-control-group .wy-form-thirds input[type="datetime-local"], .wy-control-group .wy-form-thirds input[type="week"], .wy-control-group .wy-form-thirds input[type="number"], .wy-control-group .wy-form-thirds input[type="search"], .wy-control-group .wy-form-thirds input[type="tel"], .wy-control-group .wy-form-thirds input[type="color"] { - width: 100%; } - -.wy-control-group .wy-form-full { - float: left; - display: block; - margin-right: 2.3576515979%; - width: 100%; - margin-right: 0; } - -.wy-control-group .wy-form-full:last-child { - margin-right: 0; } - -.wy-control-group .wy-form-halves { - float: left; - display: block; - margin-right: 2.3576515979%; - width: 48.821174201%; } - -.wy-control-group .wy-form-halves:last-child { - margin-right: 0; } - -.wy-control-group .wy-form-halves:nth-of-type(2n) { - margin-right: 0; } - -.wy-control-group .wy-form-halves:nth-of-type(2n+1) { - clear: left; } - -.wy-control-group .wy-form-thirds { - float: left; - display: block; - margin-right: 2.3576515979%; - width: 31.7615656014%; } - -.wy-control-group .wy-form-thirds:last-child { - margin-right: 0; } - -.wy-control-group .wy-form-thirds:nth-of-type(3n) { - margin-right: 0; } - -.wy-control-group .wy-form-thirds:nth-of-type(3n+1) { - clear: left; } - -.wy-control-group.wy-control-group-no-input .wy-control { - margin: 6px 0 0 0; - font-size: 90%; } - -.wy-control-no-input { - display: inline-block; - margin: 6px 0 0 0; - font-size: 90%; } - -.wy-control-group.fluid-input input[type="text"], .wy-control-group.fluid-input input[type="password"], .wy-control-group.fluid-input input[type="email"], .wy-control-group.fluid-input input[type="url"], .wy-control-group.fluid-input input[type="date"], .wy-control-group.fluid-input input[type="month"], .wy-control-group.fluid-input input[type="time"], .wy-control-group.fluid-input input[type="datetime"], .wy-control-group.fluid-input input[type="datetime-local"], .wy-control-group.fluid-input input[type="week"], .wy-control-group.fluid-input input[type="number"], .wy-control-group.fluid-input input[type="search"], .wy-control-group.fluid-input input[type="tel"], .wy-control-group.fluid-input input[type="color"] { - width: 100%; } - -.wy-form-message-inline { - display: inline-block; - padding-left: 0.3em; - color: #666; - vertical-align: middle; - font-size: 90%; } - -.wy-form-message { - display: block; - color: #999; - font-size: 70%; - margin-top: 0.3125em; - font-style: italic; } - -.wy-form-message p { - font-size: inherit; - font-style: italic; - margin-bottom: 6px; } - -.wy-form-message p:last-child { - margin-bottom: 0; } - -input { - line-height: normal; } - -input[type="button"], input[type="reset"], input[type="submit"] { - -webkit-appearance: button; - cursor: pointer; - font-family: "Nunito", Arial, sans-serif; - *overflow: visible; } - -input[type="text"], input[type="password"], input[type="email"], input[type="url"], input[type="date"], input[type="month"], input[type="time"], input[type="datetime"], input[type="datetime-local"], input[type="week"], input[type="number"], input[type="search"], input[type="tel"], input[type="color"] { - -webkit-appearance: none; - padding: 6px; - display: inline-block; - border: 1px solid #ccc; - font-size: 80%; - font-family: "Nunito", Arial, sans-serif; - box-shadow: inset 0 1px 3px #ddd; - border-radius: 0; - -webkit-transition: border 0.3s linear; - -moz-transition: border 0.3s linear; - transition: border 0.3s linear; } - -input[type="datetime-local"] { - padding: 0.34375em 0.625em; } - -input[disabled] { - cursor: default; } - -input[type="checkbox"], input[type="radio"] { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - padding: 0; - margin-right: 0.3125em; - *height: 13px; - *width: 13px; } - -input[type="search"] { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; } - -input[type="search"]::-webkit-search-cancel-button, input[type="search"]::-webkit-search-decoration { - -webkit-appearance: none; } - -input[type="text"]:focus, input[type="password"]:focus, input[type="email"]:focus, input[type="url"]:focus, input[type="date"]:focus, input[type="month"]:focus, input[type="time"]:focus, input[type="datetime"]:focus, input[type="datetime-local"]:focus, input[type="week"]:focus, input[type="number"]:focus, input[type="search"]:focus, input[type="tel"]:focus, input[type="color"]:focus { - outline: 0; - outline: thin dotted \9; - border-color: #333; } - -input.no-focus:focus { - border-color: #ccc !important; } - -input[type="file"]:focus, input[type="radio"]:focus, input[type="checkbox"]:focus { - outline: thin dotted #333; - outline: 1px auto #129FEA; } - -input[type="text"][disabled], input[type="password"][disabled], input[type="email"][disabled], input[type="url"][disabled], input[type="date"][disabled], input[type="month"][disabled], input[type="time"][disabled], input[type="datetime"][disabled], input[type="datetime-local"][disabled], input[type="week"][disabled], input[type="number"][disabled], input[type="search"][disabled], input[type="tel"][disabled], input[type="color"][disabled] { - cursor: not-allowed; - background-color: #fafafa; } - -input:focus:invalid, textarea:focus:invalid, select:focus:invalid { - color: #E74C3C; - border: 1px solid #E74C3C; } - -input:focus:invalid:focus, textarea:focus:invalid:focus, select:focus:invalid:focus { - border-color: #E74C3C; } - -input[type="file"]:focus:invalid:focus, input[type="radio"]:focus:invalid:focus, input[type="checkbox"]:focus:invalid:focus { - outline-color: #E74C3C; } - -input.wy-input-large { - padding: 12px; - font-size: 100%; } - -textarea { - overflow: auto; - vertical-align: top; - width: 100%; - font-family: "Nunito", Arial, sans-serif; } - -select, textarea { - padding: 0.5em 0.625em; - display: inline-block; - border: 1px solid #ccc; - font-size: 80%; - box-shadow: inset 0 1px 3px #ddd; - -webkit-transition: border 0.3s linear; - -moz-transition: border 0.3s linear; - transition: border 0.3s linear; } - -select { - border: 1px solid #ccc; - background-color: #fff; } - -select[multiple] { - height: auto; } - -select:focus, textarea:focus { - outline: 0; } - -select[disabled], textarea[disabled], input[readonly], select[readonly], textarea[readonly] { - cursor: not-allowed; - background-color: #fafafa; } - -input[type="radio"][disabled], input[type="checkbox"][disabled] { - cursor: not-allowed; } - -.wy-checkbox, .wy-radio { - margin: 6px 0; - color: #404040; - display: block; } - -.wy-checkbox input, .wy-radio input { - vertical-align: baseline; } - -.wy-form-message-inline { - display: inline-block; - *display: inline; - *zoom: 1; - vertical-align: middle; } - -.wy-input-prefix, .wy-input-suffix { - white-space: nowrap; - padding: 6px; } - -.wy-input-prefix .wy-input-context, .wy-input-suffix .wy-input-context { - line-height: 27px; - padding: 0 8px; - display: inline-block; - font-size: 80%; - background-color: #f3f6f6; - border: solid 1px #ccc; - color: #999; } - -.wy-input-suffix .wy-input-context { - border-left: 0; } - -.wy-input-prefix .wy-input-context { - border-right: 0; } - -.wy-switch { - position: relative; - display: block; - height: 24px; - margin-top: 12px; - cursor: pointer; } - -.wy-switch:before { - position: absolute; - content: ""; - display: block; - left: 0; - top: 0; - width: 36px; - height: 12px; - border-radius: 4px; - background: #ccc; - -webkit-transition: all 0.2s ease-in-out; - -moz-transition: all 0.2s ease-in-out; - transition: all 0.2s ease-in-out; } - -.wy-switch:after { - position: absolute; - content: ""; - display: block; - width: 18px; - height: 18px; - border-radius: 4px; - background: #999; - left: -3px; - top: -3px; - -webkit-transition: all 0.2s ease-in-out; - -moz-transition: all 0.2s ease-in-out; - transition: all 0.2s ease-in-out; } - -.wy-switch span { - position: absolute; - left: 48px; - display: block; - font-size: 12px; - color: #ccc; - line-height: 1; } - -.wy-switch.active:before { - background: #1e8449; } - -.wy-switch.active:after { - left: 24px; - background: #27AE60; } - -.wy-switch.disabled { - cursor: not-allowed; - opacity: 0.8; } - -.wy-control-group.wy-control-group-error .wy-form-message, .wy-control-group.wy-control-group-error > label { - color: #E74C3C; } - -.wy-control-group.wy-control-group-error input[type="text"], .wy-control-group.wy-control-group-error input[type="password"], .wy-control-group.wy-control-group-error input[type="email"], .wy-control-group.wy-control-group-error input[type="url"], .wy-control-group.wy-control-group-error input[type="date"], .wy-control-group.wy-control-group-error input[type="month"], .wy-control-group.wy-control-group-error input[type="time"], .wy-control-group.wy-control-group-error input[type="datetime"], .wy-control-group.wy-control-group-error input[type="datetime-local"], .wy-control-group.wy-control-group-error input[type="week"], .wy-control-group.wy-control-group-error input[type="number"], .wy-control-group.wy-control-group-error input[type="search"], .wy-control-group.wy-control-group-error input[type="tel"], .wy-control-group.wy-control-group-error input[type="color"] { - border: solid 1px #E74C3C; } - -.wy-control-group.wy-control-group-error textarea { - border: solid 1px #E74C3C; } - -.wy-inline-validate { - white-space: nowrap; } - -.wy-inline-validate .wy-input-context { - padding: 0.5em 0.625em; - display: inline-block; - font-size: 80%; } - -.wy-inline-validate.wy-inline-validate-success .wy-input-context { - color: #27AE60; } - -.wy-inline-validate.wy-inline-validate-danger .wy-input-context { - color: #E74C3C; } - -.wy-inline-validate.wy-inline-validate-warning .wy-input-context { - color: #E67E22; } - -.wy-inline-validate.wy-inline-validate-info .wy-input-context { - color: #2980B9; } - -.rotate-90 { - -webkit-transform: rotate(90deg); - -moz-transform: rotate(90deg); - -ms-transform: rotate(90deg); - -o-transform: rotate(90deg); - transform: rotate(90deg); } - -.rotate-180 { - -webkit-transform: rotate(180deg); - -moz-transform: rotate(180deg); - -ms-transform: rotate(180deg); - -o-transform: rotate(180deg); - transform: rotate(180deg); } - -.rotate-270 { - -webkit-transform: rotate(270deg); - -moz-transform: rotate(270deg); - -ms-transform: rotate(270deg); - -o-transform: rotate(270deg); - transform: rotate(270deg); } - -.mirror { - -webkit-transform: scaleX(-1); - -moz-transform: scaleX(-1); - -ms-transform: scaleX(-1); - -o-transform: scaleX(-1); - transform: scaleX(-1); } - -.mirror.rotate-90 { - -webkit-transform: scaleX(-1) rotate(90deg); - -moz-transform: scaleX(-1) rotate(90deg); - -ms-transform: scaleX(-1) rotate(90deg); - -o-transform: scaleX(-1) rotate(90deg); - transform: scaleX(-1) rotate(90deg); } - -.mirror.rotate-180 { - -webkit-transform: scaleX(-1) rotate(180deg); - -moz-transform: scaleX(-1) rotate(180deg); - -ms-transform: scaleX(-1) rotate(180deg); - -o-transform: scaleX(-1) rotate(180deg); - transform: scaleX(-1) rotate(180deg); } - -.mirror.rotate-270 { - -webkit-transform: scaleX(-1) rotate(270deg); - -moz-transform: scaleX(-1) rotate(270deg); - -ms-transform: scaleX(-1) rotate(270deg); - -o-transform: scaleX(-1) rotate(270deg); - transform: scaleX(-1) rotate(270deg); } - -@media only screen and (max-width: 480px) { - .wy-form button[type="submit"] { - margin: 0.7em 0 0; } - .wy-form input[type="text"], .wy-form input[type="password"], .wy-form input[type="email"], .wy-form input[type="url"], .wy-form input[type="date"], .wy-form input[type="month"], .wy-form input[type="time"], .wy-form input[type="datetime"], .wy-form input[type="datetime-local"], .wy-form input[type="week"], .wy-form input[type="number"], .wy-form input[type="search"], .wy-form input[type="tel"], .wy-form input[type="color"] { - margin-bottom: 0.3em; - display: block; } - .wy-form label { - margin-bottom: 0.3em; - display: block; } - .wy-form input[type="password"], .wy-form input[type="email"], .wy-form input[type="url"], .wy-form input[type="date"], .wy-form input[type="month"], .wy-form input[type="time"], .wy-form input[type="datetime"], .wy-form input[type="datetime-local"], .wy-form input[type="week"], .wy-form input[type="number"], .wy-form input[type="search"], .wy-form input[type="tel"], .wy-form input[type="color"] { - margin-bottom: 0; } - .wy-form-aligned .wy-control-group label { - margin-bottom: 0.3em; - text-align: left; - display: block; - width: 100%; } - .wy-form-aligned .wy-control { - margin: 1.5em 0 0 0; } - .wy-form .wy-help-inline, .wy-form-message-inline, .wy-form-message { - display: block; - font-size: 80%; - padding: 6px 0; } } - -@media screen and (max-width: 768px) { - .tablet-hide { - display: none; } } - -@media screen and (max-width: 480px) { - .mobile-hide { - display: none; } } - -.float-left { - float: left; } - -.float-right { - float: right; } - -.full-width { - width: 100%; } - -.wy-table, .rst-content table.docutils, .rst-content table.field-list { - border-collapse: collapse; - border-spacing: 0; - empty-cells: show; - margin-bottom: 24px; } - -.wy-table caption, .rst-content table.docutils caption, .rst-content table.field-list caption { - color: #000; - font: italic 85%/1 arial, sans-serif; - padding: 1em 0; - text-align: center; } - -.wy-table td, .rst-content table.docutils td, .rst-content table.field-list td, .wy-table th, .rst-content table.docutils th, .rst-content table.field-list th { - font-size: 90%; - margin: 0; - overflow: visible; - padding: 8px 16px; } - -.wy-table td:first-child, .rst-content table.docutils td:first-child, .rst-content table.field-list td:first-child, .wy-table th:first-child, .rst-content table.docutils th:first-child, .rst-content table.field-list th:first-child { - border-left-width: 0; } - -.wy-table thead, .rst-content table.docutils thead, .rst-content table.field-list thead { - color: #000; - text-align: left; - vertical-align: bottom; - white-space: nowrap; } - -.wy-table thead th, .rst-content table.docutils thead th, .rst-content table.field-list thead th { - font-weight: 600; - border-bottom: solid 2px #e1e4e5; } - -.wy-table td, .rst-content table.docutils td, .rst-content table.field-list td { - background-color: transparent; - vertical-align: middle; } - -.wy-table td p, .rst-content table.docutils td p, .rst-content table.field-list td p { - line-height: 18px; } - -.wy-table td p:last-child, .rst-content table.docutils td p:last-child, .rst-content table.field-list td p:last-child { - margin-bottom: 0; } - -.wy-table .wy-table-cell-min, .rst-content table.docutils .wy-table-cell-min, .rst-content table.field-list .wy-table-cell-min { - width: 1%; - padding-right: 0; } - -.wy-table .wy-table-cell-min input[type=checkbox], .rst-content table.docutils .wy-table-cell-min input[type=checkbox], .rst-content table.field-list .wy-table-cell-min input[type=checkbox], .wy-table .wy-table-cell-min input[type=checkbox], .rst-content table.docutils .wy-table-cell-min input[type=checkbox], .rst-content table.field-list .wy-table-cell-min input[type=checkbox] { - margin: 0; } - -.wy-table-secondary { - color: gray; - font-size: 90%; } - -.wy-table-tertiary { - color: gray; - font-size: 80%; } - -.wy-table-odd td, .wy-table-striped tr:nth-child(2n-1) td, .rst-content table.docutils:not(.field-list) tr:nth-child(2n-1) td { - background-color: #f3f6f6; } - -.wy-table-backed { - background-color: #f3f6f6; } - -/* BORDERED TABLES */ -.wy-table-bordered-all, .rst-content table.docutils { - border: 1px solid #e1e4e5; } - -.wy-table-bordered-all td, .rst-content table.docutils td { - border-bottom: 1px solid #e1e4e5; - border-left: 1px solid #e1e4e5; } - -.wy-table-bordered-all tbody > tr:last-child td, .rst-content table.docutils tbody > tr:last-child td { - border-bottom-width: 0; } - -.wy-table-bordered { - border: 1px solid #e1e4e5; } - -.wy-table-bordered-rows td { - border-bottom: 1px solid #e1e4e5; } - -.wy-table-bordered-rows tbody > tr:last-child td { - border-bottom-width: 0; } - -.wy-table-horizontal tbody > tr:last-child td { - border-bottom-width: 0; } - -.wy-table-horizontal td, .wy-table-horizontal th { - border-width: 0 0 1px 0; - border-bottom: 1px solid #e1e4e5; } - -.wy-table-horizontal tbody > tr:last-child td { - border-bottom-width: 0; } - -/* RESPONSIVE TABLES */ -.wy-table-responsive { - margin-bottom: 24px; - max-width: 100%; - overflow: auto; } - -.wy-table-responsive table { - margin-bottom: 0 !important; } - -.wy-table-responsive table td, .wy-table-responsive table th { - white-space: nowrap; } - -a { - color: #0099ee; - text-decoration: none; - cursor: pointer; } - -a:hover { - color: #057eb6; } - -a:visited { - color: #007ba8; } - -html { - height: 100%; - overflow-x: hidden; } - -body { - font-family: "Nunito", Arial, sans-serif; - font-weight: normal; - color: #404040; - min-height: 100%; - overflow-x: hidden; - background: #edf0f2; } - -.wy-text-left { - text-align: left; } - -.wy-text-center { - text-align: center; } - -.wy-text-right { - text-align: right; } - -.wy-text-large { - font-size: 120%; } - -.wy-text-normal { - font-size: 100%; } - -.wy-text-small, small { - font-size: 80%; } - -.wy-text-strike { - text-decoration: line-through; } - -.wy-text-warning { - color: #E67E22 !important; } - -a.wy-text-warning:hover { - color: #eb9950 !important; } - -.wy-text-info { - color: #2980B9 !important; } - -a.wy-text-info:hover { - color: #409ad5 !important; } - -.wy-text-success { - color: #27AE60 !important; } - -a.wy-text-success:hover { - color: #36d278 !important; } - -.wy-text-danger { - color: #E74C3C !important; } - -a.wy-text-danger:hover { - color: #ed7669 !important; } - -.wy-text-neutral { - color: #404040 !important; } - -a.wy-text-neutral:hover { - color: #595959 !important; } - -h1, h2, .rst-content .toctree-wrapper p.caption, h3, h4, h5, h6, legend { - margin-top: 0; - font-weight: 700; - font-family: "Nunito", Arial, sans-serif; } - -p { - line-height: 24px; - margin: 0; - font-size: 16px; - margin-bottom: 24px; } - -h1 { - font-size: 36px; } - -h2, .rst-content .toctree-wrapper p.caption { - font-size: 28px; } - -h3 { - font-size: 20px; } - -h4 { - font-size: 16px; } - -h5 { - font-size: 16px; } - -h6 { - font-size: 16px; } - -hr { - display: block; - height: 1px; - border: 0; - border-top: 1px solid #e1e4e5; - margin: 24px 0; - padding: 0; } - -code, .rst-content tt, .rst-content code { - white-space: nowrap; - max-width: 100%; - background: #fff; - border: solid 1px #e1e4e5; - font-size: 90%; - padding: 0 5px; - font-family: "Operator mono", "Hack", "Menlo", Consolas, "Andale Mono WT", "Andale Mono", "Lucida Console", "Lucida Sans Typewriter", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Liberation Mono", "Nimbus Mono L", Monaco, "Courier New", Courier, monospace; - color: #E74C3C; - overflow-x: auto; } - -code.code-large, .rst-content tt.code-large { - font-size: 90%; } - -.wy-plain-list-disc, .rst-content .section ul, .rst-content .toctree-wrapper ul, article ul { - list-style: disc; - line-height: 24px; - margin-bottom: 24px; } - -.wy-plain-list-disc li, .rst-content .section ul li, .rst-content .toctree-wrapper ul li, article ul li { - list-style: disc; - margin-left: 24px; } - -.wy-plain-list-disc li p:last-child, .rst-content .section ul li p:last-child, .rst-content .toctree-wrapper ul li p:last-child, article ul li p:last-child { - margin-bottom: 0; } - -.wy-plain-list-disc li ul, .rst-content .section ul li ul, .rst-content .toctree-wrapper ul li ul, article ul li ul { - margin-bottom: 0; } - -.wy-plain-list-disc li li, .rst-content .section ul li li, .rst-content .toctree-wrapper ul li li, article ul li li { - list-style: circle; } - -.wy-plain-list-disc li li li, .rst-content .section ul li li li, .rst-content .toctree-wrapper ul li li li, article ul li li li { - list-style: square; } - -.wy-plain-list-disc li ol li, .rst-content .section ul li ol li, .rst-content .toctree-wrapper ul li ol li, article ul li ol li { - list-style: decimal; } - -.wy-plain-list-decimal, .rst-content .section ol, .rst-content ol.arabic, article ol { - list-style: decimal; - line-height: 24px; - margin-bottom: 24px; } - -.wy-plain-list-decimal li, .rst-content .section ol li, .rst-content ol.arabic li, article ol li { - list-style: decimal; - margin-left: 24px; } - -.wy-plain-list-decimal li p:last-child, .rst-content .section ol li p:last-child, .rst-content ol.arabic li p:last-child, article ol li p:last-child { - margin-bottom: 0; } - -.wy-plain-list-decimal li ul, .rst-content .section ol li ul, .rst-content ol.arabic li ul, article ol li ul { - margin-bottom: 0; } - -.wy-plain-list-decimal li ul li, .rst-content .section ol li ul li, .rst-content ol.arabic li ul li, article ol li ul li { - list-style: disc; } - -.codeblock-example { - border: 1px solid #e1e4e5; - border-bottom: none; - padding: 24px; - padding-top: 48px; - font-weight: 500; - background: #fff; - position: relative; } - -.codeblock-example:after { - content: "Example"; - position: absolute; - top: 0px; - left: 0px; - background: #9B59B6; - color: white; - padding: 6px 12px; } - -.codeblock-example.prettyprint-example-only { - border: 1px solid #e1e4e5; - margin-bottom: 24px; } - -.codeblock, pre.literal-block, .rst-content .literal-block, .rst-content pre.literal-block, div[class^='highlight'] { - padding: 0px; - overflow-x: auto; - background: #fff; - margin: 1px 0 24px 0; } - -.codeblock div[class^='highlight'], pre.literal-block div[class^='highlight'], .rst-content .literal-block div[class^='highlight'], div[class^='highlight'] div[class^='highlight'] { - border: none; - background: #F5F7F9; - margin: 0; } - -div[class^='highlight'] td.code { - width: 100%; } - -.linenodiv pre { - border-right: solid 1px #e6e9ea; - margin: 0; - padding: 12px 12px; - font-family: "Operator mono", "Hack", "Menlo", Consolas, "Andale Mono WT", "Andale Mono", "Lucida Console", "Lucida Sans Typewriter", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Liberation Mono", "Nimbus Mono L", Monaco, "Courier New", Courier, monospace; - font-size: 14px; - line-height: 1.5; - color: #d9d9d9; } - -div[class^='highlight'] pre { - white-space: pre; - margin: 0; - padding: 12px 12px; - font-family: "Operator mono", "Hack", "Menlo", Consolas, "Andale Mono WT", "Andale Mono", "Lucida Console", "Lucida Sans Typewriter", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Liberation Mono", "Nimbus Mono L", Monaco, "Courier New", Courier, monospace; - font-size: 14px; - line-height: 1.5; - display: block; - overflow: auto; - color: #404040; } - -@media print { - .codeblock, pre.literal-block, .rst-content .literal-block, .rst-content pre.literal-block, div[class^='highlight'], div[class^='highlight'] pre { - white-space: pre-wrap; } } - -.hll { - background-color: #ffffcc; - margin: 0 -12px; - padding: 0 12px; - display: block; } - -.c { - color: #999988; - font-style: italic; } - -.err { - color: #a61717; - background-color: #e3d2d2; } - -.k { - font-weight: bold; } - -.o { - font-weight: bold; } - -.cm { - color: #999988; - font-style: italic; } - -.cp { - color: #999999; - font-weight: bold; } - -.c1 { - color: #999988; - font-style: italic; } - -.cs { - color: #999999; - font-weight: bold; - font-style: italic; } - -.gd { - color: #000000; - background-color: #ffdddd; } - -.gd .x { - color: #000000; - background-color: #ffaaaa; } - -.ge { - font-style: italic; } - -.gr { - color: #aa0000; } - -.gh { - color: #999999; } - -.gi { - color: #000000; - background-color: #ddffdd; } - -.gi .x { - color: #000000; - background-color: #aaffaa; } - -.go { - color: #888888; } - -.gp { - color: #555555; } - -.gs { - font-weight: bold; } - -.gu { - color: #800080; - font-weight: bold; } - -.gt { - color: #aa0000; } - -.kc { - font-weight: bold; } - -.kd { - font-weight: bold; } - -.kn { - font-weight: bold; } - -.kp { - font-weight: bold; } - -.kr { - font-weight: bold; } - -.kt { - color: #445588; - font-weight: bold; } - -.m { - color: #009999; } - -.s { - color: #dd1144; } - -.n { - color: #333333; } - -.na { - color: teal; } - -.nb { - color: #0086b3; } - -.nc { - color: #445588; - font-weight: bold; } - -.no { - color: teal; } - -.ni { - color: purple; } - -.ne { - color: #990000; - font-weight: bold; } - -.nf { - color: #990000; - font-weight: bold; } - -.nn { - color: #555555; } - -.nt { - color: navy; } - -.nv { - color: teal; } - -.ow { - font-weight: bold; } - -.w { - color: #bbbbbb; } - -.mf { - color: #009999; } - -.mh { - color: #009999; } - -.mi { - color: #009999; } - -.mo { - color: #009999; } - -.sb { - color: #dd1144; } - -.sc { - color: #dd1144; } - -.sd { - color: #dd1144; } - -.s2 { - color: #dd1144; } - -.se { - color: #dd1144; } - -.sh { - color: #dd1144; } - -.si { - color: #dd1144; } - -.sx { - color: #dd1144; } - -.sr { - color: #009926; } - -.s1 { - color: #dd1144; } - -.ss { - color: #990073; } - -.bp { - color: #999999; } - -.vc { - color: teal; } - -.vg { - color: teal; } - -.vi { - color: teal; } - -.il { - color: #009999; } - -.gc { - color: #999; - background-color: #EAF2F5; } - -.wy-breadcrumbs li { - display: inline-block; } - -.wy-breadcrumbs li.wy-breadcrumbs-aside { - float: right; } - -.wy-breadcrumbs li a { - display: inline-block; - padding: 5px; } - -.wy-breadcrumbs li a:first-child { - padding-left: 0; } - -.wy-breadcrumbs li code, .wy-breadcrumbs li .rst-content tt, .rst-content .wy-breadcrumbs li tt { - padding: 5px; - border: none; - background: none; } - -.wy-breadcrumbs li code.literal, .wy-breadcrumbs li .rst-content tt.literal, .rst-content .wy-breadcrumbs li tt.literal { - color: #404040; } - -.wy-breadcrumbs-extra { - margin-bottom: 0; - color: #b3b3b3; - font-size: 80%; - display: inline-block; } - -@media screen and (max-width: 480px) { - .wy-breadcrumbs-extra { - display: none; } - .wy-breadcrumbs li.wy-breadcrumbs-aside { - display: none; } } - -@media print { - .wy-breadcrumbs li.wy-breadcrumbs-aside { - display: none; } } - -.wy-affix { - position: fixed; - top: 0; } - -.wy-menu a:hover { - text-decoration: none; } - -.wy-menu-horiz { - *zoom: 1; } - -.wy-menu-horiz:before, .wy-menu-horiz:after { - display: table; - content: ""; } - -.wy-menu-horiz:after { - clear: both; } - -.wy-menu-horiz ul, .wy-menu-horiz li { - display: inline-block; } - -.wy-menu-horiz li:hover { - background: rgba(255, 255, 255, 0.1); } - -.wy-menu-horiz li.divide-left { - border-left: solid 1px #404040; } - -.wy-menu-horiz li.divide-right { - border-right: solid 1px #404040; } - -.wy-menu-horiz a { - height: 32px; - display: inline-block; - line-height: 32px; - padding: 0 16px; } - -.wy-menu-vertical { - width: 300px; } - -.wy-menu-vertical header, .wy-menu-vertical p.caption { - height: 32px; - display: inline-block; - line-height: 32px; - padding: 0 36px; - margin-bottom: 0; - display: block; - font-weight: 600; - text-transform: uppercase; - font-size: 80%; - color: #6f6f6f; - white-space: nowrap; } - -.wy-menu-vertical ul { - margin-bottom: 0; } - -.wy-menu-vertical li.current a { - color: gray; - padding: 0.4045em 20px 0.4045em 50px; } - -.wy-menu-vertical li code, .wy-menu-vertical li .rst-content tt, .rst-content .wy-menu-vertical li tt { - border: none; - background: inherit; - color: inherit; - padding-left: 0; - padding-right: 0; } - -.wy-menu-vertical li span.toctree-expand { - display: block; - float: left; - margin-left: -1.2em; - font-size: 0.8em; - line-height: 1.6em; - color: #4d4d4d; } - -.wy-menu-vertical li.on a, .wy-menu-vertical li.current > a { - color: #404040; - padding: 0.4045em 36px; - font-weight: 600; - position: relative; - border: none; } - -.wy-menu-vertical li.on a:hover span.toctree-expand, .wy-menu-vertical li.current > a:hover span.toctree-expand { - color: gray; } - -.wy-menu-vertical li.on a span.toctree-expand, .wy-menu-vertical li.current > a span.toctree-expand { - display: block; - font-size: 0.8em; - line-height: 1.6em; - color: #333333; } - -.wy-menu-vertical li.toctree-l1.current li.toctree-l2 > ul, .wy-menu-vertical li.toctree-l2.current li.toctree-l3 > ul { - display: none; } - -.wy-menu-vertical li.toctree-l1.current li.toctree-l2.current > ul, .wy-menu-vertical li.toctree-l2.current li.toctree-l3.current > ul { - display: block; } - -.toctree-l2 { - font-size: 14px; } - -.wy-menu-vertical li.toctree-l2.current > a { - padding: 0.4045em 20px 0.4045em 52px; - font-size: 14px; } - -.wy-menu-vertical li.toctree-l2.current li.toctree-l3 > a { - display: block; - padding: 0.4045em 20px 0.4045em 72px; } - -.wy-menu-vertical li.toctree-l2 a:hover span.toctree-expand { - color: gray; } - -.wy-menu-vertical li.toctree-l2 span.toctree-expand { - color: #a3a3a3; } - -.wy-menu-vertical .current > a > span.toctree-expand:before { - margin-left: -2px; } - -.toctree-expand:before { - margin-top: 1px; } - -.wy-menu-vertical li.toctree-l3 { - font-size: 14px; } - -.wy-menu-vertical li.toctree-l3.current > a { - padding: 0.4045em 20px 0.4045em 72px; } - -.wy-menu-vertical li.toctree-l3.current li.toctree-l4 > a { - display: block; - padding: 0.4045em 20px 0.4045em 92px; - border-top: none; - border-bottom: none; } - -.wy-menu-vertical li.toctree-l3 a:hover span.toctree-expand { - color: gray; } - -.wy-menu-vertical li.toctree-l3 span.toctree-expand { - color: #969696; } - -.wy-menu-vertical li.toctree-l4 { - font-size: 14px; } - -.wy-menu-vertical li.current ul { - display: block; } - -.wy-menu-vertical li ul { - margin-bottom: 0; - display: none; } - -.wy-menu-vertical .local-toc li ul { - display: block; } - -.wy-menu-vertical li ul li a { - margin-bottom: 0; - color: #b3b3b3; - font-weight: normal; } - -.wy-menu-vertical a { - display: inline-block; - padding: 0.4045em 36px; - display: block; - position: relative; - color: #b3b3b3; } - -.wy-menu-vertical a:hover { - cursor: pointer; } - -.wy-menu-vertical a:hover span.toctree-expand { - color: #b3b3b3; } - -.wy-menu-vertical a:active { - cursor: pointer; } - -.wy-side-nav-search { - display: block; - width: 100%; - z-index: 200; - text-align: center; - display: block; - color: #fcfcfc; } - -.wy-side-nav-search input[type=text] { - width: 100%; - border-radius: 5px; - padding: 6px 33px 6px 12px; - border: none; - height: auto; - font-size: 14px; - box-shadow: none; } - -.wy-side-nav-search img { - display: block; - margin: auto auto 0.809em auto; - height: 45px; - width: 45px; - background-color: #2980B9; - padding: 5px; - border-radius: 100%; } - -.wy-side-nav-search > a, .wy-side-nav-search .wy-dropdown > a { - color: black; - width: 75%; - font-size: 100%; - font-weight: 600; - display: inline-block; - padding: 4px 6px; - margin-bottom: 0.809em; } - -.wy-side-nav-search > a:hover, .wy-side-nav-search .wy-dropdown > a:hover { - background: rgba(255, 255, 255, 0.1); } - -.wy-side-nav-search > a img.logo, .wy-side-nav-search .wy-dropdown > a img.logo { - display: block; - margin: 0; - height: 100%; - width: 100%; - border-radius: 0; - background: transparent; } - -.wy-side-nav-search > a.icon img.logo, .wy-side-nav-search .wy-dropdown > a.icon img.logo { - margin: 0; } - -.wy-side-nav-search > div.version { - margin-top: -0.4045em; - margin-bottom: 0.809em; - font-weight: normal; - color: rgba(255, 255, 255, 0.3); } - -.wy-nav .wy-menu-vertical header { - color: #2980B9; } - -.wy-nav .wy-menu-vertical a { - color: #b3b3b3; } - -.wy-nav .wy-menu-vertical a:hover { - background-color: #2980B9; - color: #fff; } - -[data-menu-wrap] { - -webkit-transition: all 0.2s ease-in; - -moz-transition: all 0.2s ease-in; - transition: all 0.2s ease-in; - position: absolute; - opacity: 1; - width: 100%; - opacity: 0; } - -[data-menu-wrap].move-center { - left: 0; - right: auto; - opacity: 1; } - -[data-menu-wrap].move-left { - right: auto; - left: -100%; - opacity: 0; } - -[data-menu-wrap].move-right { - right: -100%; - left: auto; - opacity: 0; } - -.wy-grid-for-nav { - position: absolute; - width: 100%; - height: 100%; } - -.wy-nav-side { - position: fixed; - bottom: 0; - left: 0; - top: 0; - padding-bottom: 60px; - width: 300px; - overflow-x: hidden; - overflow-y: hidden; - min-height: 100%; - background: #343131; - z-index: 200; } - @media (min-width: 768px) { - .wy-nav-side { - top: 0px; - min-height: calc(100% - 60px); } } - -.wy-side-scroll { - width: 320px; - position: relative; - overflow-x: hidden; - overflow-y: scroll; - padding-bottom: 10px; - height: 100%; } - -.wy-nav-top { - display: none; - background: #2980B9; - color: #fff; - padding: 0.4045em 0.809em; - position: relative; - line-height: 50px; - text-align: center; - font-size: 100%; - *zoom: 1; } - -.wy-nav-top:before, .wy-nav-top:after { - display: table; - content: ""; } - -.wy-nav-top:after { - clear: both; } - -.wy-nav-top a { - color: #fff; - font-weight: 600; } - -.wy-nav-top img { - margin-right: 12px; - height: 45px; - width: 45px; - background-color: #2980B9; - padding: 5px; - border-radius: 100%; } - -.wy-nav-top i { - font-size: 30px; - float: left; - cursor: pointer; - padding-top: inherit; } - -.wy-nav-content-wrap { - margin-left: 300px; - min-height: 100%; } - -.wy-nav-content { - padding: 24px 46px 18px; - height: 100%; - max-width: 850px; } - -.wy-body-mask { - position: fixed; - width: 100%; - height: 100%; - background: rgba(0, 0, 0, 0.2); - display: none; - z-index: 499; } - -.wy-body-mask.on { - display: block; } - -footer { - color: gray; } - -footer p { - margin-bottom: 12px; } - -footer span.commit code, footer span.commit .rst-content tt, .rst-content footer span.commit tt { - padding: 0px; - font-family: "Operator mono", "Hack", "Menlo", Consolas, "Andale Mono WT", "Andale Mono", "Lucida Console", "Lucida Sans Typewriter", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Liberation Mono", "Nimbus Mono L", Monaco, "Courier New", Courier, monospace; - font-size: 1em; - background: none; - border: none; - color: gray; } - -.rst-footer-buttons { - *zoom: 1; } - -.rst-footer-buttons:before, .rst-footer-buttons:after { - width: 100%; } - -.rst-footer-buttons:before, .rst-footer-buttons:after { - display: table; - content: ""; } - -.rst-footer-buttons:after { - clear: both; } - -.rst-breadcrumbs-buttons { - margin-top: 12px; - *zoom: 1; } - -.rst-breadcrumbs-buttons:before, .rst-breadcrumbs-buttons:after { - display: table; - content: ""; } - -.rst-breadcrumbs-buttons:after { - clear: both; } - -#search-results .search li { - margin-bottom: 24px; - border-bottom: solid 1px #e1e4e5; - padding-bottom: 24px; } - -#search-results .search li:first-child { - border-top: solid 1px #e1e4e5; - padding-top: 24px; } - -#search-results .search li a { - font-size: 120%; - margin-bottom: 12px; - display: inline-block; } - -#search-results .context { - color: gray; - font-size: 90%; } - -@media screen and (max-width: 768px) { - .wy-body-for-nav { - background: #fcfcfc; } - .wy-nav-top { - display: block; } - .wy-nav-side { - left: -300px; } - .wy-nav-side.shift { - width: 85%; - left: 0; } - .wy-side-scroll { - width: auto; } - .wy-side-nav-search { - width: auto; } - .wy-menu.wy-menu-vertical { - width: auto; } - .wy-nav-content-wrap { - margin-left: 0; } - .wy-nav-content-wrap .wy-nav-content { - padding: 26px 20px; } - .wy-nav-content-wrap.shift { - position: fixed; - min-width: 100%; - left: 85%; - height: 100%; - overflow: hidden; - top: 0; } } - @media screen and (max-width: 768px) and (min-width: 768px) { - .wy-nav-content-wrap.shift { - top: 60px; } } - -@media screen and (min-width: 1400px) { - .wy-nav-content { - margin: 0; } } - -@media print { - .rst-versions, footer, .wy-nav-side { - display: none; } - .wy-nav-content-wrap { - margin-left: 0; } } - -.rst-versions { - position: fixed; - bottom: 0; - left: 0; - width: 300px; - color: black; - background: white; - z-index: 400; - border-top-left-radius: 5px; - border-top-right-radius: 5px; - box-shadow: rgba(0, 0, 0, 0.25) 0px 2px 4px; } - -.rst-versions dt { - color: black; - font-weight: 600; } - -.rst-versions a { - color: #2980B9; - text-decoration: none; } - -.rst-versions .rst-badge-small { - display: none; } - -.rst-versions .rst-current-version { - padding: 20px; - display: flex; - text-align: right; - font-size: 90%; - cursor: pointer; - color: black; - *zoom: 1; - justify-content: space-between; - z-index: 999; - position: relative; } - .rst-versions .rst-current-version .fa { - font-size: 12px; } - -.rst-versions .rst-current-version .fa, .rst-versions .rst-current-version .wy-menu-vertical li span.toctree-expand, .wy-menu-vertical li .rst-versions .rst-current-version span.toctree-expand, .rst-versions .rst-current-version .rst-content .admonition-title, .rst-content .rst-versions .rst-current-version .admonition-title, .rst-versions .rst-current-version .rst-content h1 .headerlink, .rst-content h1 .rst-versions .rst-current-version .headerlink, .rst-versions .rst-current-version .rst-content h2 .headerlink, .rst-content h2 .rst-versions .rst-current-version .headerlink, .rst-versions .rst-current-version .rst-content h3 .headerlink, .rst-content h3 .rst-versions .rst-current-version .headerlink, .rst-versions .rst-current-version .rst-content h4 .headerlink, .rst-content h4 .rst-versions .rst-current-version .headerlink, .rst-versions .rst-current-version .rst-content h5 .headerlink, .rst-content h5 .rst-versions .rst-current-version .headerlink, .rst-versions .rst-current-version .rst-content h6 .headerlink, .rst-content h6 .rst-versions .rst-current-version .headerlink, .rst-versions .rst-current-version .rst-content dl dt .headerlink, .rst-content dl dt .rst-versions .rst-current-version .headerlink, .rst-versions .rst-current-version .rst-content p.caption .headerlink, .rst-content p.caption .rst-versions .rst-current-version .headerlink, .rst-versions .rst-current-version .rst-content tt.download span:first-child, .rst-content tt.download .rst-versions .rst-current-version span:first-child, .rst-versions .rst-current-version .rst-content code.download span:first-child, .rst-content code.download .rst-versions .rst-current-version span:first-child, .rst-versions .rst-current-version .icon { - color: black; } - -.rst-versions .rst-current-version.rst-out-of-date { - background-color: #E74C3C; - color: #fff; } - -.rst-versions .rst-current-version.rst-active-old-version { - background-color: #F1C40F; - color: #000; } - -.rst-versions.shift-up .rst-other-versions { - display: block; } - -.rst-versions .rst-other-versions { - font-size: 14px; - color: gray; - display: none; - font: 0/0 a; - padding: 0 !important; } - .rst-versions .rst-other-versions .rst-other-versions { - padding: 20px !important; - margin-bottom: 40px; } - .rst-versions .rst-other-versions .rst-current-version { - display: none !important; } - .rst-versions .rst-other-versions dl { - font-family: "Nunito", sans-serif; - font-size: 14px; - line-height: 20px; } - .rst-versions .rst-other-versions hr { - display: none; } - -.rst-versions .rst-other-versions dd { - display: inline-block; - margin: 0; } - -.rst-versions .rst-other-versions dt + dd { - margin-left: -6px; } - -.rst-versions .rst-other-versions dt + strong { - margin-left: -6px; } - -.rst-versions .rst-other-versions dd a { - display: inline-block; - padding: 6px; - color: black; } - -@media screen and (max-width: 768px) { - .rst-versions { - width: 85%; - display: none; } - .rst-versions.shift { - display: block; } } - -.rst-content img { - max-width: 100%; - height: auto !important; } - -.rst-content div.figure { - margin-bottom: 24px; } - -.rst-content div.figure p.caption { - font-style: italic; } - -.rst-content div.figure.align-center { - text-align: center; } - -.rst-content .section > img, .rst-content .section > a > img { - margin-bottom: 24px; } - -.rst-content blockquote { - padding-left: 20px; - line-height: 24px; - margin-bottom: 24px; - border-left: 4px solid #E1E4E5; } - -.rst-content .note .last, .rst-content .attention .last, .rst-content .caution .last, .rst-content .danger .last, .rst-content .error .last, .rst-content .hint .last, .rst-content .important .last, .rst-content .tip .last, .rst-content .warning .last, .rst-content .seealso .last, .rst-content .admonition-todo .last, .rst-content .admonition .last { - margin-bottom: 0; } - -.rst-content .admonition-title:before { - margin-right: 4px; } - -.rst-content .admonition table { - border-color: rgba(0, 0, 0, 0.1); } - -.rst-content .admonition table td, .rst-content .admonition table th { - background: transparent !important; - border-color: rgba(0, 0, 0, 0.1) !important; } - -.rst-content .section ol.loweralpha, .rst-content .section ol.loweralpha li { - list-style: lower-alpha; } - -.rst-content .section ol.upperalpha, .rst-content .section ol.upperalpha li { - list-style: upper-alpha; } - -.rst-content .section ol p, .rst-content .section ul p { - margin-bottom: 12px; } - -.rst-content .line-block { - margin-left: 24px; } - -.rst-content .topic-title { - font-weight: 600; - margin-bottom: 12px; } - -.rst-content .toc-backref { - color: #404040; } - -.rst-content .align-right { - float: right; - margin: 0px 0px 24px 24px; } - -.rst-content .align-left { - float: left; - margin: 0px 24px 24px 0px; } - -.rst-content .align-center { - margin: auto; - display: block; } - -.rst-content h1 .headerlink, .rst-content h2 .headerlink, .rst-content .toctree-wrapper p.caption .headerlink, .rst-content h3 .headerlink, .rst-content h4 .headerlink, .rst-content h5 .headerlink, .rst-content h6 .headerlink, .rst-content dl dt .headerlink, .rst-content p.caption .headerlink { - display: none; - visibility: hidden; - font-size: 14px; } - -.rst-content h1 .headerlink:after, .rst-content h2 .headerlink:after, .rst-content .toctree-wrapper p.caption .headerlink:after, .rst-content h3 .headerlink:after, .rst-content h4 .headerlink:after, .rst-content h5 .headerlink:after, .rst-content h6 .headerlink:after, .rst-content dl dt .headerlink:after, .rst-content p.caption .headerlink:after { - visibility: visible; - content: ""; - font-family: FontAwesome; - display: inline-block; } - -.rst-content h1:hover .headerlink, .rst-content h2:hover .headerlink, .rst-content .toctree-wrapper p.caption:hover .headerlink, .rst-content h3:hover .headerlink, .rst-content h4:hover .headerlink, .rst-content h5:hover .headerlink, .rst-content h6:hover .headerlink, .rst-content dl dt:hover .headerlink, .rst-content p.caption:hover .headerlink { - display: inline-block; } - -.rst-content .centered { - text-align: center; } - -.rst-content .sidebar { - float: right; - width: 40%; - display: block; - margin: 0 0 24px 24px; - padding: 24px; - background: #f3f6f6; - border: solid 1px #e1e4e5; } - -.rst-content .sidebar p, .rst-content .sidebar ul, .rst-content .sidebar dl { - font-size: 90%; } - -.rst-content .sidebar .last { - margin-bottom: 0; } - -.rst-content .sidebar .sidebar-title { - display: block; - font-family: "Nunito", Arial, sans-serif; - font-weight: 600; - background: #e1e4e5; - padding: 6px 12px; - margin: -24px; - margin-bottom: 24px; - font-size: 100%; } - -.rst-content .highlighted { - background: #F1C40F; - display: inline-block; - font-weight: 600; - padding: 0 6px; } - -.rst-content .footnote-reference, .rst-content .citation-reference { - vertical-align: super; - font-size: 90%; } - -.rst-content table.docutils.citation, .rst-content table.docutils.footnote { - background: none; - border: none; - color: gray; } - -.rst-content table.docutils.citation td, .rst-content table.docutils.citation tr, .rst-content table.docutils.footnote td, .rst-content table.docutils.footnote tr { - border: none; - background-color: transparent !important; - white-space: normal; } - -.rst-content table.docutils.citation td.label, .rst-content table.docutils.footnote td.label { - padding-left: 0; - padding-right: 0; - vertical-align: top; } - -.rst-content table.docutils.citation tt, .rst-content table.docutils.citation code, .rst-content table.docutils.footnote tt, .rst-content table.docutils.footnote code { - color: #555; } - -.rst-content table.field-list { - border: none; } - -.rst-content table.field-list td { - border: none; } - -.rst-content table.field-list td > strong { - display: inline-block; } - -.rst-content table.field-list .field-name { - padding-right: 10px; - text-align: left; - white-space: nowrap; } - -.rst-content table.field-list .field-body { - text-align: left; } - -.rst-content tt, .rst-content tt, .rst-content code { - color: #000; - padding: 2px 5px; } - -.rst-content tt big, .rst-content tt em, .rst-content tt big, .rst-content code big, .rst-content tt em, .rst-content code em { - font-size: 100% !important; - line-height: normal; } - -.rst-content tt.literal, .rst-content tt.literal, .rst-content code.literal { - color: #E74C3C; } - -.rst-content tt.xref, a .rst-content tt, .rst-content tt.xref, .rst-content code.xref, a .rst-content tt, a .rst-content code { - font-weight: 600; - color: #404040; } - -.rst-content a tt, .rst-content a tt, .rst-content a code { - color: #2980B9; } - -.rst-content dl { - margin-bottom: 24px; } - -.rst-content dl dt { - font-weight: 600; } - -.rst-content dl p, .rst-content dl table, .rst-content dl ul, .rst-content dl ol { - margin-bottom: 12px !important; } - -.rst-content dl dd { - margin: 0 0 12px 24px; } - -.rst-content dl:not(.docutils) { - margin-bottom: 24px; } - -.rst-content dl:not(.docutils) dt { - display: table; - margin: 6px 0; - font-size: 90%; - line-height: normal; - background: #e7f2fa; - color: #2980B9; - border-top: solid 3px #6ab0de; - padding: 6px; - position: relative; } - -.rst-content dl:not(.docutils) dt:before { - color: #6ab0de; } - -.rst-content dl:not(.docutils) dt .headerlink { - color: #404040; - font-size: 100% !important; } - -.rst-content dl:not(.docutils) dl dt { - margin-bottom: 6px; - border: none; - border-left: solid 3px #cccccc; - background: #f0f0f0; - color: #555; } - -.rst-content dl:not(.docutils) dl dt .headerlink { - color: #404040; - font-size: 100% !important; } - -.rst-content dl:not(.docutils) dt:first-child { - margin-top: 0; } - -.rst-content dl:not(.docutils) tt, .rst-content dl:not(.docutils) tt, .rst-content dl:not(.docutils) code { - font-weight: 600; } - -.rst-content dl:not(.docutils) tt.descname, .rst-content dl:not(.docutils) tt.descclassname, .rst-content dl:not(.docutils) tt.descname, .rst-content dl:not(.docutils) code.descname, .rst-content dl:not(.docutils) tt.descclassname, .rst-content dl:not(.docutils) code.descclassname { - background-color: transparent; - border: none; - padding: 0; - font-size: 100% !important; } - -.rst-content dl:not(.docutils) tt.descname, .rst-content dl:not(.docutils) tt.descname, .rst-content dl:not(.docutils) code.descname { - font-weight: 600; } - -.rst-content dl:not(.docutils) .optional { - display: inline-block; - padding: 0 4px; - color: #000; - font-weight: 600; } - -.rst-content dl:not(.docutils) .property { - display: inline-block; - padding-right: 8px; } - -.rst-content .viewcode-link, .rst-content .viewcode-back { - display: inline-block; - color: #27AE60; - font-size: 80%; - padding-left: 24px; } - -.rst-content .viewcode-back { - display: block; - float: right; } - -.rst-content p.rubric { - margin-bottom: 12px; - font-weight: 600; } - -.rst-content tt.download, .rst-content code.download { - background: inherit; - padding: inherit; - font-weight: normal; - font-family: inherit; - font-size: inherit; - color: inherit; - border: inherit; - white-space: inherit; } - -.rst-content tt.download span:first-child:before, .rst-content code.download span:first-child:before { - margin-right: 4px; } - -.rst-content .guilabel { - border: 1px solid #7fbbe3; - background: #e7f2fa; - font-size: 80%; - font-weight: 700; - border-radius: 4px; - padding: 2.4px 6px; - margin: auto 2px; } - -.rst-content .versionmodified { - font-style: italic; } - -@media screen and (max-width: 480px) { - .rst-content .sidebar { - width: 100%; } } - -span[id*='MathJax-Span'] { - color: #404040; } - -.math { - text-align: center; } - -@media (min-width: 768px) { - body { - padding-top: 0px; } } - -.wy-side-nav-search { - color: black; } - -.wy-side-nav-search > div.version { - color: rgba(0, 0, 0, 0.3); } - -.wy-nav-side, -.wy-side-nav-search { - background-color: #f5f7f9; } - -.wy-nav-content-wrap { - background-color: white; } - -.wy-menu-vertical li a, -.wy-menu-vertical li ul li a, -.wy-menu-vertical li.current a { - color: black; } - -.header { - display: flex; - background-color: white; - width: 100%; - border-bottom: 1px solid #e1e4e5; - z-index: 999; - height: 60px; - padding: 0 20px; - flex-direction: row; - align-items: center; - transform: translateZ(0); - left: 0; - top: 0; - position: absolute; } - @media (min-width: 768px) { - .header { - position: fixed; } } - .header .logo-link { - display: block; - margin-left: auto; } - @media (max-width: 767px) { - .header .logo-link { - display: none; } } - .header .fa-bars { - cursor: pointer; - color: black; - display: none; - font-size: 30px; - margin-right: 20px; } - @media (max-width: 767px) { - .header .fa-bars { - display: block; } } - -.header-title-wrap { - width: 280px; } - -.header-title { - font-size: 20px; } - .header-title, .header-title:hover, .header-title:visited, .header-title:focus { - color: black; - text-decoration: none; } - -.logo { - height: 16px; } - -.wy-breadcrumbs { - font-size: 16px; - font-weight: 600; - min-height: 30px; - margin-bottom: 20px; } - .wy-breadcrumbs li a { - padding: 0; } - -.wy-side-nav-search { - height: auto; - border-bottom: 1px solid #e1e4e5; - padding-left: 20px; - padding-right: 20px; - display: block; - align-items: flex-start; - margin-bottom: 20px; } - @media (max-width: 767px) { - .wy-side-nav-search { - height: 60px; } } - .wy-side-nav-search .search-form, - .wy-side-nav-search .search-form form { - width: 100%; - position: relative; } - -.search-btn { - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - background: transparent; - border: none; - width: auto; - height: auto; - padding: 0; - margin: 0; - position: absolute; - right: 10px; - top: 4px; } - -.rst-footer-buttons { - margin-top: 50px; } - -footer > hr { - margin-bottom: 14px; } - -.footer-info { - color: #8392a4; - display: flex; - flex-direction: column; } - @media (min-width: 768px) { - .footer-info { - flex-direction: row; - justify-content: space-between; } } - .footer-info p { - font-size: 12px; } - @media (min-width: 768px) { - .footer-info p { - margin-bottom: 0px; } } - .footer-info a { - color: #8392a4 !important; - text-decoration: underline; } - -.divio-cloud { - margin: 20px 20px 10px; - border: 1px solid #e0e0e0; - background: white; - border-radius: 5px; - padding: 20px 16px; } - @media (max-width: 767px) { - .divio-cloud { - display: none; } } - -.divio-cloud-caption { - font-size: 12px; - text-transform: uppercase; - line-height: 16px; - margin-bottom: 16px; - color: rgba(0, 0, 0, 0.5); - display: block; } - -.divio-cloud-heading { - font-size: 22px; - font-weight: normal; - line-height: 26px; - padding-right: 10px; - margin-bottom: 18px; } - -.divio-cloud-features { - padding-left: 15px; } - -.divio-cloud-features li { - margin-bottom: 8px; - font-size: 14px; - line-height: 18px; - position: relative; } - -.divio-cloud-features li:before { - content: ""; - width: 7px; - height: 7px; - background: #0bf; - border-radius: 7px; - display: block; - position: absolute; - left: -14px; - top: 5px; } - -.divio-cloud-btn { - display: block; - text-align: center; - height: 36px; - line-height: 36px; - color: white; - background: #0bf; - padding: 0 !important; - border-radius: 5px; - margin-top: 20px; - font-size: 14px; } - .divio-cloud-btn:visited { - background-color: #0bf !important; } - -.wy-menu.wy-menu-vertical ~ div { - display: none !important; } - -.rst-content h1 code, -.rst-content h2 code, -.rst-content h3 code, -.rst-content h4 code, -.rst-content h5 code, -.rst-content h6 code { - border: none; - padding-left: 0px; - padding-right: 0px; } - -.tabs__nav { - display: block; } - -.tabs__link { - display: inline-block; - padding: 10px 15px; - border-bottom: 2px solid transparent; - color: black !important; } - .tabs__link:hover, .tabs__link:visited, .tabs__link:active { - color: black !important; } - -.tabs__link--active { - color: #0bf !important; - font-weight: bold; - border-bottom: 2px solid #0bf !important; } - .tabs__link--active:hover, .tabs__link--active:visited, .tabs__link--active:active { - color: #0bf !important; } - -.tabs__content { - padding-top: 20px; } - -.tabs-pane { - display: none; } - -.rst-content .sidebar { - background: #f5f7f9; -} - -.rst-content .sidebar .sidebar-title { - background: #057eb6; - color: #fff; -} - -.rst-content .sidebar .sidebar-subtitle { - font-weight: bold; -} \ No newline at end of file diff --git a/docs/_static/images/BAAL-horizontal-logo-black.png b/docs/_static/images/BAAL-horizontal-logo-black.png new file mode 100644 index 00000000..6e4a9520 Binary files /dev/null and b/docs/_static/images/BAAL-horizontal-logo-black.png differ diff --git a/docs/_static/images/logo-horizontal-transparent.png b/docs/_static/images/logo-horizontal-transparent.png new file mode 100644 index 00000000..4f5f7bd0 Binary files /dev/null and b/docs/_static/images/logo-horizontal-transparent.png differ diff --git a/docs/_static/images/logo-transparent.png b/docs/_static/images/logo-transparent.png index b3773368..9400f543 100644 Binary files a/docs/_static/images/logo-transparent.png and b/docs/_static/images/logo-transparent.png differ diff --git a/docs/_static/images/logo-vertical.png b/docs/_static/images/logo-vertical.png new file mode 100644 index 00000000..36800051 Binary files /dev/null and b/docs/_static/images/logo-vertical.png differ diff --git a/docs/_static/images/logo-with-bg-solid.png b/docs/_static/images/logo-with-bg-solid.png new file mode 100644 index 00000000..abe5389f Binary files /dev/null and b/docs/_static/images/logo-with-bg-solid.png differ diff --git a/docs/_static/images/logo-with-bg.jpg b/docs/_static/images/logo-with-bg.jpg new file mode 100644 index 00000000..1c2a9d81 Binary files /dev/null and b/docs/_static/images/logo-with-bg.jpg differ diff --git a/docs/_templates/layout.html b/docs/_templates/layout.html deleted file mode 100644 index 462ed4c0..00000000 --- a/docs/_templates/layout.html +++ /dev/null @@ -1,6 +0,0 @@ -{% extends "!layout.html" %} - -{%- block extrahead %} - - -{% endblock %} \ No newline at end of file diff --git a/docs/api/bayesian.md b/docs/api/bayesian.md index 73441544..e0e7902e 100644 --- a/docs/api/bayesian.md +++ b/docs/api/bayesian.md @@ -22,11 +22,10 @@ model = MCDropoutConnectModule(model, layers=["Linear"], weight_dropout=0.5) ## API -```eval_rst -.. autoclass:: baal.bayesian.dropout.MCDropoutModule - :members: __init__ +### baal.bayesian.dropout.MCDropoutModule -..autoclass:: baal.bayesian.weight_drop.MCDropoutConnectModule - :members: __init__ +::: baal.bayesian.dropout.MCDropoutModule -``` \ No newline at end of file +### baal.bayesian.weight_drop.MCDropoutConnectModule + +::: baal.bayesian.weight_drop.MCDropoutConnectModule \ No newline at end of file diff --git a/docs/api/calibration.md b/docs/api/calibration.md index 6501afa3..5ba08511 100644 --- a/docs/api/calibration.md +++ b/docs/api/calibration.md @@ -1,6 +1,5 @@ # Calibration Wrapper -```eval_rst -.. autoclass:: baal.calibration.DirichletCalibrator - :members: -``` +### baal.calibration.DirichletCalibrator + +::: baal.calibration.DirichletCalibrator diff --git a/docs/api/compatibility/huggingface.md b/docs/api/compatibility/huggingface.md index 3d1e6b6b..757667f6 100644 --- a/docs/api/compatibility/huggingface.md +++ b/docs/api/compatibility/huggingface.md @@ -1,10 +1,7 @@ ## HuggingFace Compatibility - ```eval_rst -.. autoclass:: baal.transformers_trainer_wrapper.BaalTransformersTrainer - :members: predict_on_dataset, predict_on_dataset_generator +**baal.transformers_trainer_wrapper.BaalTransformersTrainer** +::: baal.transformers_trainer_wrapper.BaalTransformersTrainer -.. autoclass:: baal.active.nlp_datasets.HuggingFaceDatasets - :members: - -``` \ No newline at end of file +**baal.active.dataset.nlp_datasets.HuggingFaceDatasets** +::: baal.active.dataset.nlp_datasets.HuggingFaceDatasets \ No newline at end of file diff --git a/docs/api/compatibility/pytorch-lightning.md b/docs/api/compatibility/pytorch-lightning.md index f1fffb4d..d9f5a27e 100644 --- a/docs/api/compatibility/pytorch-lightning.md +++ b/docs/api/compatibility/pytorch-lightning.md @@ -1,12 +1,10 @@ ## Pytorch Lightning Compatibility - ```eval_rst -.. autoclass:: baal.utils.pytorch_lightning.ResetCallback - :members: on_train_start +**baal.utils.pytorch_lightning.ResetCallback** +::: baal.utils.pytorch_lightning.ResetCallback -.. autoclass:: baal.utils.pytorch_lightning.BaalTrainer - :members: predict_on_dataset, predict_on_dataset_generator +**baal.utils.pytorch_lightning.BaalTrainer** +::: baal.utils.pytorch_lightning.BaalTrainer -.. autoclass:: baal.utils.pytorch_lightning.BaaLDataModule - :members: pool_dataloader -``` \ No newline at end of file +**baal.utils.pytorch_lightning.BaaLDataModule** +::: baal.utils.pytorch_lightning.BaaLDataModule \ No newline at end of file diff --git a/docs/api/dataset_management.md b/docs/api/dataset_management.md index 342be9bc..0f9c56e0 100644 --- a/docs/api/dataset_management.md +++ b/docs/api/dataset_management.md @@ -36,13 +36,11 @@ assert al_dataset.pool.transform is None ### API -```eval_rst -.. autoclass:: baal.active.ActiveLearningDataset - :members: +### baal.active.ActiveLearningDataset +::: baal.active.ActiveLearningDataset -.. autoclass:: baal.active.ActiveLearningLoop - :members: +### baal.active.ActiveLearningLoop +::: baal.active.ActiveLearningLoop -.. autoclass:: baal.active.FileDataset - :members: -``` \ No newline at end of file +### baal.active.FileDataset +::: baal.active.FileDataset \ No newline at end of file diff --git a/docs/api/heuristics.md b/docs/api/heuristics.md index 635847cb..8172e239 100644 --- a/docs/api/heuristics.md +++ b/docs/api/heuristics.md @@ -33,13 +33,14 @@ BALD(reduction="mean") ### API -```eval_rst -.. autoclass:: baal.active.heuristics.AbstractHeuristic - :members: +### baal.active.heuristics.AbstractHeuristic +::: baal.active.heuristics.AbstractHeuristic -.. autoclass:: baal.active.heuristics.BALD +### baal.active.heuristics.BALD +::: baal.active.heuristics.BALD -.. autoclass:: baal.active.heuristics.Random +### baal.active.heuristics.Random +::: baal.active.heuristics.Random -.. autoclass:: baal.active.heuristics.Entropy -``` \ No newline at end of file +### baal.active.heuristics.Entropy +::: baal.active.heuristics.Entropy \ No newline at end of file diff --git a/docs/api/index.md b/docs/api/index.md index 3d28b609..1c5464d5 100644 --- a/docs/api/index.md +++ b/docs/api/index.md @@ -1,25 +1,18 @@ # API Reference -```eval_rst -.. toctree:: - :caption: API Definition - :maxdepth: 1 - - baal.modelwrapper.ModelWrapper <./modelwrapper> - baal.bayesian <./bayesian> - baal.active <./dataset_management> - baal.active.heuristics <./heuristics> - baal.calibration <./calibration> - baal.utils <./utils> - -.. toctree:: - :caption: Compatibility - :maxdepth: 1 - - baal.utils.pytorch_lightning <./compatibility/pytorch-lightning> - baal.transformers_trainer_wrapper <./compatibility/huggingface> - -``` +### :material-file-tree: API Definition + +* [baal.modelwrapper.ModelWrapper](./modelwrapper.md) +* [baal.bayesian](./bayesian.md) +* [baal.active](./dataset_management.md) +* [baal.active.heuristics](./heuristics.md) +* [baal.calibration](./calibration.md) +* [baal.utils](./utils.md) + +### :material-file-tree: Compatibility + +* [baal.utils.pytorch_lightning] (./compatibility/pytorch-lightning) +* [baal.transformers_trainer_wrapper](./compatibility/huggingface) diff --git a/docs/api/modelwrapper.md b/docs/api/modelwrapper.md index e8ef4eeb..72811d32 100644 --- a/docs/api/modelwrapper.md +++ b/docs/api/modelwrapper.md @@ -32,7 +32,6 @@ predictions.shape ### API -```eval_rst -.. autoclass:: baal.ModelWrapper - :members: -``` \ No newline at end of file +### baal.ModelWrapper + +::: baal.ModelWrapper \ No newline at end of file diff --git a/docs/api/utils.md b/docs/api/utils.md index 0278e929..becc99a8 100644 --- a/docs/api/utils.md +++ b/docs/api/utils.md @@ -47,7 +47,6 @@ print(wrapper.active_learning_metrics) """ ``` -```eval_rst -.. automodule:: baal.utils.metrics - :members: -``` \ No newline at end of file +### baal.utils.metrics + +::: baal.utils.metrics \ No newline at end of file diff --git a/docs/conf.py b/docs/conf.py deleted file mode 100644 index 14c88552..00000000 --- a/docs/conf.py +++ /dev/null @@ -1,231 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Configuration file for the Sphinx documentation builder. -# -# This file does only contain a selection of the most common options. For a -# full list see the documentation: -# http://www.sphinx-doc.org/en/master/config - -# -- Path setup -------------------------------------------------------------- - -# If extensions (or modules to document with autodoc) are in another directory, -# add these directories to sys.path here. If the directory is relative to the -# documentation root, use os.path.abspath to make it absolute, like shown here. -# -import os -import pathlib -import shutil -import sys - -from recommonmark.transform import AutoStructify -import sphinx_rtd_theme -from recommonmark.parser import CommonMarkParser - -pjoin = os.path.join -parent_dir = pathlib.Path(__file__).resolve().parents[1] -sys.path.insert(0, os.path.abspath('./../')) - -shutil.rmtree('notebooks', ignore_errors=True) -shutil.copytree(pjoin(parent_dir, 'notebooks'), 'notebooks') - -# -- Project information ----------------------------------------------------- - -# Disable notebook execution -nbsphinx_execute = 'never' - -project = 'baal' -copyright = '2019, Parmida Atighehchian, Frédéric Branchaud-Charron, Jan Freyberg' -author = 'Parmida Atighehchian, Frédéric Branchaud-Charron, Jan Freyberg' - -# The short X.Y version -version = '' -# The full version, including alpha/beta/rc tags -release = '1.6.0' - -# -- General configuration --------------------------------------------------- - -# If your documentation needs a minimal Sphinx version, state it here. -# -# needs_sphinx = '1.0' - -# Add any Sphinx extension module names here, as strings. They can be -# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom -# ones. -extensions = [ - 'sphinx.ext.autodoc', - 'sphinx.ext.autosummary', - 'sphinx.ext.doctest', - 'sphinx.ext.todo', - 'sphinx.ext.mathjax', - 'sphinx.ext.viewcode', - 'sphinx_copybutton', - "sphinx_automodapi.automodapi", - "nbsphinx", - "recommonmark", - "numpydoc", - "sphinx.ext.napoleon" -] - -# We need to mock these packages to compile without deps. -autodoc_mock_imports = ["PIL", "tqdm", "structlog", "torch", "torchvision", "numpy", "sklearn", - "scipy", "baal.utils.cuda_utils", "transformers", "pytorch_lightning", - "datasets"] - -# Add any paths that contain templates here, relative to this directory. -templates_path = ['_templates'] - - - -source_parsers = { - '.md': CommonMarkParser, -} - -# The suffix(es) of source filenames. -# You can specify multiple suffix as a list of string: -# source_suffix = ['.rst', '.md', '.ipynb'] - -# The master toctree document. -master_doc = 'index' - -# The language for content autogenerated by Sphinx. Refer to documentation -# for a list of supported languages. -# -# This is also used if you do content translation via gettext catalogs. -# Usually you set "language" from the command line for these cases. -language = None - -# List of patterns, relative to source directory, that match files and -# directories to ignore when looking for source files. -# This pattern also affects html_static_path and html_extra_path. -exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store', '.ipynb_checkpoints'] - -# The name of the Pygments (syntax highlighting) style to use. -pygments_style = None - -# -- Options for HTML output ------------------------------------------------- - -# The theme to use for HTML and HTML Help pages. See the documentation for -# a list of builtin themes. -# -html_theme = "sphinx_rtd_theme" -html_theme_path = [sphinx_rtd_theme.get_html_theme_path()] -html_logo = "_static/images/logo-transparent.png" - -# Theme options are theme-specific and customize the look and feel of a theme -# further. For a list of options available for each theme, see the -# documentation. -# -# html_theme_options = {} - -# Add any paths that contain custom static files (such as style sheets) here, -# relative to this directory. They are copied after the builtin static files, -# so a file named "default.css" will overwrite the builtin "default.css". -html_static_path = ['_static', '_static/images'] -html_css_files = [ - 'css/default.css', -] - -# Custom sidebar templates, must be a dictionary that maps document names -# to template names. -# -# The default sidebars (for documents that don't match any pattern) are -# defined by theme itself. Builtin themes are using these templates by -# default: ``['localtoc.html', 'relations.html', 'sourcelink.html', -# 'searchbox.html']``. -# -# html_sidebars = {} - - -# -- Options for HTMLHelp output --------------------------------------------- - -# Output file base name for HTML help builder. -htmlhelp_basename = 'baaldoc' - -# -- Options for LaTeX output ------------------------------------------------ - -latex_elements = { - # The paper size ('letterpaper' or 'a4paper'). - # - # 'papersize': 'letterpaper', - # The font size ('10pt', '11pt' or '12pt'). - # - # 'pointsize': '10pt', - # Additional stuff for the LaTeX preamble. - # - # 'preamble': '', - # Latex figure (float) alignment - # - # 'figure_align': 'htbp', -} - -# Grouping the document tree into LaTeX files. List of tuples -# (source start file, target name, title, -# author, documentclass [howto, manual, or own class]). -latex_documents = [ - ( - master_doc, - 'baal.tex', - 'baal Documentation', - 'Parmida Atighehchian, Frédéric Branchaud-Charron, Jan Freyberg', - 'manual', - ) -] - -# -- Options for manual page output ------------------------------------------ - -# One entry per manual page. List of tuples -# (source start file, name, description, authors, manual section). -man_pages = [(master_doc, 'baal', 'baal Documentation', [author], 1)] - -# -- Options for Texinfo output ---------------------------------------------- - -# Grouping the document tree into Texinfo files. List of tuples -# (source start file, target name, title, author, -# dir menu entry, description, category) -texinfo_documents = [ - ( - master_doc, - 'baal', - 'baal Documentation', - author, - 'baal', - 'One line description of project.', - 'Miscellaneous', - ) -] - -# -- Options for Epub output ------------------------------------------------- - -# Bibliographic Dublin Core info. -epub_title = project - -# The unique identifier of the text. This can be a ISBN number -# or the project homepage. -# -# epub_identifier = '' - -# A unique identification for the text. -# -# epub_uid = '' - -# A list of files that should not be packed into the epub file. -epub_exclude_files = ['search.html'] - -# -- Extension configuration ------------------------------------------------- - -# -- Options for todo extension ---------------------------------------------- - -# If true, `todo` and `todoList` produce output, else they produce nothing. -todo_include_todos = True - - -# At the bottom of conf.py -def setup(app): - app.add_config_value('recommonmark_config', { - 'enable_auto_toc_tree': True, - 'enable_eval_rst': True, - 'enable_math': True, - 'enable_inline_math': True, - 'auto_toc_tree_section': 'Contents', - }, True) - app.add_transform(AutoStructify) diff --git a/docs/index.md b/docs/index.md index 460d9e43..2c4c3ce6 100644 --- a/docs/index.md +++ b/docs/index.md @@ -1,14 +1,8 @@ -```eval_rst -.. baal documentation master file, created by - sphinx-quickstart on Thu Apr 4 14:15:25 2019. - You can adapt this file completely to your liking, but it should at least - contain the root `toctree` directive. -``` +

+ Logo dark mode + Logo light mode +

-# Welcome to the documentation for baal (**ba**yesian **a**ctive **l**earning) - - -
Star Baal is a Bayesian active learning library. We provide methods to estimate sampling from the posterior distribution @@ -19,61 +13,23 @@ To know more on what is Bayesian active learning, see our [User guide](user_guid We are a member of Pytorch's ecosystem, and we welcome contributions from the community. If you have any question, we are reachable on [Slack](https://join.slack.com/t/baal-world/shared_invite/zt-z0izhn4y-Jt6Zu5dZaV2rsAS9sdISfg). -## Support - -For support, we have several ways to help you: - -* Our [FAQ](faq.md) -* Submit an issue on Github [here](https://github.com/ElementAI/baal/issues/new/choose) -* Join our [Slack](https://join.slack.com/t/baal-world/shared_invite/zt-z0izhn4y-Jt6Zu5dZaV2rsAS9sdISfg)! +## Installation -```eval_rst -.. toctree:: - :caption: Learn more about Baal - :maxdepth: 1 +Baal is available as a package on PyPI: - User guide - Active learning dataset and training loop classes - Methods for approximating bayesian posteriors - API Index - FAQ +`pip install baal` -.. toctree :: - :caption: Tutorials - :maxdepth: 1 +??? "Additional dependencies for vision and NLP" - How to use Baal with Label Studio - How to do research and plot progress - How to use in production - How to use deep ensembles + `baal[nlp]` installs needed dependencies for HuggingFace support. -.. toctree :: - :caption: Compatibility with other libraries - :maxdepth: 1 - - How to use with Pytorch Lightning - How to use with HuggingFace - How to use with Scikit-Learn - -.. toctree :: - :caption: Technical Reports - :maxdepth: 1 - - Combining calibration and variational inference for active learning - Double descend in active learning - Can active learning mitigate bias in datasets + `baal[vision]` installs dependencies for our Lightning-Flash integration. -.. toctree:: - :caption: Literature and support - :maxdepth: 2 - Background literature - Cheat Sheet -``` - -## Indices and tables +## Support + +For support, we have several ways to help you: -```eval_rst -* :ref:`genindex` -* :ref:`search` -``` +* Our [:material-help: FAQ](support/faq.md) +* Submit an issue on Github [here](https://github.com/baal-org/baal/issues/new/choose) +* Join our [:material-slack: Slack](https://join.slack.com/t/baal-world/shared_invite/zt-z0izhn4y-Jt6Zu5dZaV2rsAS9sdISfg)! diff --git a/docs/javascripts/mathjax.js b/docs/javascripts/mathjax.js new file mode 100644 index 00000000..06dbf38b --- /dev/null +++ b/docs/javascripts/mathjax.js @@ -0,0 +1,16 @@ +window.MathJax = { + tex: { + inlineMath: [["\\(", "\\)"]], + displayMath: [["\\[", "\\]"]], + processEscapes: true, + processEnvironments: true + }, + options: { + ignoreHtmlClass: ".*|", + processHtmlClass: "arithmatex" + } +}; + +document$.subscribe(() => { + MathJax.typesetPromise() +}) diff --git a/docs/literature/index.md b/docs/literature/index.md deleted file mode 100644 index 325468b8..00000000 --- a/docs/literature/index.md +++ /dev/null @@ -1,19 +0,0 @@ -# Active learning literature - -This page is here to collect summaries of papers that focus on active learning. -The idea is to share knowledge on recent developments in active learning. - -If you've read a paper recently, write a little summary in markdown, put it in -the folder `docs/literature` and make a pull request. You can even do all of -that right in the github web UI! - -```eval_rst -.. toctree:: - :caption: Literature review - :maxdepth: 1 - :glob: - - * -``` - ---- \ No newline at end of file diff --git a/docs/literature/more_papers.md b/docs/literature/more_papers.md deleted file mode 100644 index 0326ab1a..00000000 --- a/docs/literature/more_papers.md +++ /dev/null @@ -1,12 +0,0 @@ -## Additional papers that are interesting - -In this section, we put additional papers that can be interesting. - -```eval_rst -.. toctree:: - :maxdepth: 1 - :caption: Additional papers - :glob: - - Additional papers/* -``` \ No newline at end of file diff --git a/docs/notebooks b/docs/notebooks new file mode 120000 index 00000000..8f9a5b2e --- /dev/null +++ b/docs/notebooks @@ -0,0 +1 @@ +../notebooks \ No newline at end of file diff --git a/docs/requirements.txt b/docs/requirements.txt index 27ffc2fd..4152a7b0 100644 --- a/docs/requirements.txt +++ b/docs/requirements.txt @@ -1,13 +1,5 @@ -sphinx>2 -sphinx_rtd_theme -asteroid-sphinx-theme -jupyter_sphinx -Pygments>=2.6.1 -nbsphinx==0.8.6 -sphinx_automodapi -sphinx-copybutton -numpydoc -recommonmark -docutils==0.16 -Jinja2==2.11.3 -markupsafe==2.0.1 +mkdocs==1.4.0 +mkdocs-exclude-search==0.6.4 +mkdocs-jupyter==0.21.0 +mkdocstrings[python]==0.18.1 +Pygments==2.13.0 \ No newline at end of file diff --git a/docs/reports/dirichlet_calibration.md b/docs/research/dirichlet_calibration.md similarity index 60% rename from docs/reports/dirichlet_calibration.md rename to docs/research/dirichlet_calibration.md index 33a6df2d..ebafe12e 100644 --- a/docs/reports/dirichlet_calibration.md +++ b/docs/research/dirichlet_calibration.md @@ -4,15 +4,12 @@ A [paper recently published at NeurIPS 2019](https://dirichletcal.github.io/) pr To achieve that, they add a new linear layer at the end of the network and train it individually on a held-out set. -Here is a figure from the authors' NeurIPS 2019 presentation. You can find the full presention on the website above. - -```eval_rst -.. figure:: images/dirichlet_calib.png - :width: 400px - :height: 200px - :alt: alternate text - :align: center -``` +Here is a figure from the authors' NeurIPS 2019 presentation. You can find the full presentation on the website above. + +
+![](./images/dirichlet_calib.png){ width="500" } +
Dirichlet Calibration NeurIPS 2019
+
Our hypothesis is as follows: by modelling the uncertainty on an held-out set, we want to create a better estimation of the overall uncertainty. @@ -24,15 +21,15 @@ Current SotA methods for active learning rely on VI to estimate the model uncert ## Methodology -Our methodology follows a standard active learning pipeline, but we add a new training set :math:`D_{L}` which is used to train the calibration layer. After training the model on the training set :math:`D_{train}` to convergence, we train it on this held-out set and train the newly added layer. +Our methodology follows a standard active learning pipeline, but we add a new training set $D_{L}$ which is used to train the calibration layer. After training the model on the training set $D_{train}$ to convergence, we train it on this held-out set and train the newly added layer. -We call the augmented model :math:`M_{calib}`. We perform the sample selection using one of the following techniques: +We call the augmented model $M_{calib}$. We perform the sample selection using one of the following techniques: -* Entropy: :math:`\sum_c p_i \log(p_i)` -* BALD using MC-Dropout: :math:`H[y \mid x, D_{L}] - E_{p(w \mid D_L)}(H[y \mid x, w])` +* Entropy: $\sum_c p_i \log(p_i)$ +* BALD using MC-Dropout: $H[y \mid x, D_{L}] - E_{p(w \mid D_L)}(H[y \mid x, w])$ * Uniform random selection -Because we want to analyze the actual gain of using calibration, we compare the effect of using :math:`M` versus :math:`M_{calib}` across all techniques. +Because we want to analyze the actual gain of using calibration, we compare the effect of using $M$ versus $M_{calib}$ across all techniques. ## Experiments @@ -42,70 +39,51 @@ We test our hypothesis on CIFAR10 using a VGG-16. We initially label 1000 sample We first want to ensure that calibration works properly. In Fig. 2, we show that throughout the active learning procedure, the calibrated loss is better than the non-calibrated loss. -```eval_rst -.. figure:: images/CBALDvsBALD.png - :width: 400px - :height: 200px - :alt: alternate text - :align: center - - Comparison between the calibrated loss and the uncalibrated loss. -``` +
+![](./images/CBALDvsBALD.png){ width="500" align="center"} +
Comparison between the calibrated loss and the uncalibrated loss.
+
+ Furthermore, we compute the ECE between both cases. -```eval_rst -.. figure:: images/CBALDvsBALDECE.png - :width: 400px - :height: 200px - :alt: alternate text - :align: center - - Comparison between ECE for both Calibrated BALD and BALD. -``` +
+![](./images/CBALDvsBALDECE.png){ width="500" align="center"} +
Comparison between ECE for both Calibrated BALD and BALD.
+
### Impact of calibration on active learning For each method, we present the calibrated NLL at each active learning step. -We want to compare the selection process between :math:`M` and :math:`M_{calib}`. +We want to compare the selection process between $M$ and $M_{calib}$. Our reasoning is as follow. We want to see if the calibrated model would pick better items over the normal one. -To do so we make two experiments, one where we use :math:`M` to select the new samples and the other uses :math:`M_{calib}`. +To do so we make two experiments, one where we use $M$ to select the new samples and the other uses $M_{calib}$. In both cases, we will get a calibrated model to compare the calibrated loss. -```eval_rst -.. figure:: images/BALDvsCBALD_active.png - :width: 400px - :height: 200px - :alt: alternate text - :align: center - - Comparison between a calibrated selector and an uncalibrated one using BALD. - - -.. figure:: images/EntvsCEnt_active.png - :width: 400px - :height: 200px - :alt: alternate text - :align: center - - Comparison between a calibrated selector and an uncalibrated one using Entropy. +
+![](images/BALDvsCBALD_active.png){ width="500"} +
Comparison between a calibrated selector and an uncalibrated one using BALD.
+
+ +
+![](images/EntvsCEnt_active.png){ width="500"} +
Comparison between a calibrated selector and an uncalibrated one using Entropy.
+
+ +
+![](images/ALL_active.png){ width="500" } +
Comparison between calibrated selectors.
+
+ In addition, we show that BALD is still better in all cases. -.. figure:: images/ALL_active.png - :width: 400px - :height: 200px - :alt: alternate text - :align: center - - Comparison between calibrated selectors. -``` ## Discussion -While we have not seen improvments by using calibration on an active learning benchmark, we still find this report useful. Active learning is but a part of the Human-ai-interaction (HAII) process. By adding an easy to use calibration method, we can further the collaboration between the human and our model. +While we have not seen improvements by using calibration on an active learning benchmark, we still find this report useful. Active learning is but a part of the Human-ai-interaction (HAII) process. By adding an easy to use calibration method, we can further the collaboration between the human and our model. By giving more nuanced predictions, the model is deemed more trustable by the human annotator. diff --git a/docs/reports/double_descend.md b/docs/research/double_descent.md similarity index 81% rename from docs/reports/double_descend.md rename to docs/research/double_descent.md index 129f3a66..7313a9f7 100644 --- a/docs/reports/double_descend.md +++ b/docs/research/double_descent.md @@ -40,47 +40,26 @@ We ran 4 categories of experiments: Dataset: CIFAR10 Model: Vgg16 trained on imagenet -```eval_rst -.. figure:: images/doubledescend_03.png - :width: 400px - :height: 200px - :alt: alternate text - :align: center - - Using early stopping and reset the weights of the linear layers after each active learning step. -``` - - -```eval_rst -.. figure:: images/doubledescend_04.png - :width: 400px - :height: 200px - :alt: alternate text - :align: center - - Using early stopping and reset all the weights after each active learning step. -``` - - -```eval_rst -.. figure:: images/doubledescend_02.png - :width: 400px - :height: 200px - :alt: alternate text - :align: center - - Overfitting the training set and reset the weights of the linear layers after each active learning step. -``` - -```eval_rst -.. figure:: images/doubledescend_01.png - :width: 400px - :height: 200px - :alt: alternate text - :align: center - - Overfitting the training set and reset all the weights after each active learning step. -``` +
+![](images/doubledescend_03.png){ width="500" } +
Using early stopping and reset the weights of the linear layers after each active learning step.
+
+ +
+![](images/doubledescend_04.png){ width="500" } +
Using early stopping and reset all the weights after each active learning step.
+
+ +
+![](images/doubledescend_02.png){ width="500" } +
Overfitting the training set and reset the weights of the linear layers after each active learning step.
+
+ +
+![](images/doubledescend_01.png){ width="500" } +
Overfitting the training set and reset all the weights after each active learning step.
+
+ In the first two experiments, if we are using early stopping, the partial reset will provoke a double descent. A closer look in the second diagram shows that although in the case of fully resetting the model weights, we can prevent the @@ -95,12 +74,11 @@ with a negligible peak. Moreover, letting the model train well before performing key to encourage smooth training, we show the difference between letting the model to train for 10 epochs vs 5 epochs before adding samples to the labelled set. -```eval_rst -NOTE: In the case of not using early stopping, `p` is used to show the number of epochs we train the model before -estimating uncertainties and increase the labelled set. -All in all, not using early stopping and fully resetting the model weights i.e. the last graph, could certify a smooth -training procedure without being worried about other elements such as weight decay. -``` +!!! note + In the case of not using early stopping, `p` is used to show the number of epochs we train the model before + estimating uncertainties and increase the labelled set. + All in all, not using early stopping and fully resetting the model weights i.e. the last graph, could certify a smooth + training procedure without being worried about other elements such as weight decay. ### Our Hypothesis diff --git a/docs/reports/images/ALL_active.png b/docs/research/images/ALL_active.png similarity index 100% rename from docs/reports/images/ALL_active.png rename to docs/research/images/ALL_active.png diff --git a/docs/reports/images/BALDvsCBALD_active.png b/docs/research/images/BALDvsCBALD_active.png similarity index 100% rename from docs/reports/images/BALDvsCBALD_active.png rename to docs/research/images/BALDvsCBALD_active.png diff --git a/docs/reports/images/CBALDvsBALD.png b/docs/research/images/CBALDvsBALD.png similarity index 100% rename from docs/reports/images/CBALDvsBALD.png rename to docs/research/images/CBALDvsBALD.png diff --git a/docs/reports/images/CBALDvsBALDECE.png b/docs/research/images/CBALDvsBALDECE.png similarity index 100% rename from docs/reports/images/CBALDvsBALDECE.png rename to docs/research/images/CBALDvsBALDECE.png diff --git a/docs/reports/images/EntvsCEnt_active.png b/docs/research/images/EntvsCEnt_active.png similarity index 100% rename from docs/reports/images/EntvsCEnt_active.png rename to docs/research/images/EntvsCEnt_active.png diff --git a/docs/reports/images/dirichlet_calib.png b/docs/research/images/dirichlet_calib.png similarity index 100% rename from docs/reports/images/dirichlet_calib.png rename to docs/research/images/dirichlet_calib.png diff --git a/docs/reports/images/doubledescend_01.png b/docs/research/images/doubledescend_01.png similarity index 100% rename from docs/reports/images/doubledescend_01.png rename to docs/research/images/doubledescend_01.png diff --git a/docs/reports/images/doubledescend_02.png b/docs/research/images/doubledescend_02.png similarity index 100% rename from docs/reports/images/doubledescend_02.png rename to docs/research/images/doubledescend_02.png diff --git a/docs/reports/images/doubledescend_03.png b/docs/research/images/doubledescend_03.png similarity index 100% rename from docs/reports/images/doubledescend_03.png rename to docs/research/images/doubledescend_03.png diff --git a/docs/reports/images/doubledescend_04.png b/docs/research/images/doubledescend_04.png similarity index 100% rename from docs/reports/images/doubledescend_04.png rename to docs/research/images/doubledescend_04.png diff --git a/docs/research/index.md b/docs/research/index.md new file mode 100644 index 00000000..86598ed8 --- /dev/null +++ b/docs/research/index.md @@ -0,0 +1,12 @@ +# Bayesian deep active learning research + +Research in this field is quite dynamic with multiple labs around the world working on this problem. + +In a nutshell, we want to: + +> Optimize labelling by maximizing the information obtained after each label. + +Another critical goal of our research is to better understand the sampling bias active learning creates. +Recent research has shown that active learning creates more balanced, fairer datasets. + +We strongly suggest to go through our [literature review](./literature/index.md). diff --git a/docs/literature/Additional papers/dmi.md b/docs/research/literature/Additional papers/dmi.md similarity index 100% rename from docs/literature/Additional papers/dmi.md rename to docs/research/literature/Additional papers/dmi.md diff --git a/docs/literature/Additional papers/duq.md b/docs/research/literature/Additional papers/duq.md similarity index 80% rename from docs/literature/Additional papers/duq.md rename to docs/research/literature/Additional papers/duq.md index e7219528..206e118d 100644 --- a/docs/literature/Additional papers/duq.md +++ b/docs/research/literature/Additional papers/duq.md @@ -17,22 +17,22 @@ DUQ uses a RBF Network to compute centroids for each class. The model is trained For a model f, a centroid matrix W and a centroid e, we compute the similarity using a RBF kernel. Theta is a hyper parameter. -``$`K_c(f_\theta, e_c) = exp(-\frac{\frac{1}{n}\mid \mid W_cf_\theta(x) - e_c\mid\mid^2_2}{2\sigma^2})`$`` +$K_c(f_\theta, e_c) = exp(-\frac{\frac{1}{n}\mid \mid W_cf_\theta(x) - e_c\mid\mid^2_2}{2\sigma^2})$ with this similarity we can make a prediction by selecting the centroid with the highest similarity. The loss function is now simply -``$`L(x,y) = - \sum_c y_clog(K_c) + (1 - y_c)log(1-K_c)`$``, +$L(x,y) = - \sum_c y_clog(K_c) + (1 - y_c)log(1-K_c)$, -where ``$`K_c(f_\theta, e_c)=K_c`$`` +where $K_c(f_\theta, e_c)=K_c$ After each batch, we update the centroid matrix using an exponential moving average. ### Regularization -To avoid feature collapse, the authors introduce a gradient penalty directly applied to ``$`K_c`$``: -``$`\lambda* (\mid\mid \nabla_x \sum_c K_c\mid\mid^2_2 - 1)^2`$`` -where 1 is the Lipschitz constant. In their experiments, they use ``$`\lambda=0.05`$``. +To avoid feature collapse, the authors introduce a gradient penalty directly applied to $K_c$: +$\lambda* (\mid\mid \nabla_x \sum_c K_c\mid\mid^2_2 - 1)^2$ +where 1 is the Lipschitz constant. In their experiments, they use $\lambda=0.05$. In summary, this simple technique is faster and better than ensembles. It also shows that RBF networks work on large datasets. diff --git a/docs/literature/Additional papers/gyolov3.md b/docs/research/literature/Additional papers/gyolov3.md similarity index 100% rename from docs/literature/Additional papers/gyolov3.md rename to docs/research/literature/Additional papers/gyolov3.md diff --git a/docs/literature/Additional papers/lightcoresets.md b/docs/research/literature/Additional papers/lightcoresets.md similarity index 62% rename from docs/literature/Additional papers/lightcoresets.md rename to docs/research/literature/Additional papers/lightcoresets.md index a1108ef0..7d9b4d32 100644 --- a/docs/literature/Additional papers/lightcoresets.md +++ b/docs/research/literature/Additional papers/lightcoresets.md @@ -6,16 +6,16 @@ This paper presents a novel Coreset algorithm called *Light Coreset*. -Let ``$`X`$`` be the dataset, ``$`d`$`` a distance function and ``$`\mu(X)`$`` the mean of the dataset per feature. +Let $X$ be the dataset, $d$ a distance function and $\mu(X)$ the mean of the dataset per feature. -We compute the distribution ``$`q`$``with: +We compute the distribution $q$with: -``$`q(x) = 0.5 * \frac{1}{\vert X \vert} + 0.5 * \frac{d(x, \mu(X))^2}{\sum_{x' \in X} d(x', \mu(X))^2}`$``, -where ``$`x \in X`$``. +$q(x) = 0.5 * \frac{1}{\vert X \vert} + 0.5 * \frac{d(x, \mu(X))^2}{\sum_{x' \in X} d(x', \mu(X))^2}$, +where $x \in X$. -We can then select ``$`m`$`` samples by sampling from this distribution. For their experiments, they used the L2 distance for *d*. +We can then select $m$ samples by sampling from this distribution. For their experiments, they used the L2 distance for *d*. -Let A be the first part of the equation ``$`q`$`` and B the second. The authors offers the following explanation : +Let A be the first part of the equation $q$ and B the second. The authors offers the following explanation : >The first component (A) is the uniform distribution and ensures that all points are sampled with nonzero probability. The second diff --git a/docs/literature/Additional papers/sparse_selection.md b/docs/research/literature/Additional papers/sparse_selection.md similarity index 79% rename from docs/literature/Additional papers/sparse_selection.md rename to docs/research/literature/Additional papers/sparse_selection.md index 0e029c58..91244022 100644 --- a/docs/literature/Additional papers/sparse_selection.md +++ b/docs/research/literature/Additional papers/sparse_selection.md @@ -11,16 +11,16 @@ Published at NeurIPS 2019 A known issue of BALD, when used in Batch Active Learning is that it selects highly correlated samples. By combining BNNs with a novel coreset algorithm, the authors propose a way to estimate the true posterior data distribution. -In brief, they want to select a batch ``$`D'`$`` such that the posterior distribution best approximate the complete data posterior. +In brief, they want to select a batch $D'$ such that the posterior distribution best approximate the complete data posterior. Because we do not know the complete posterior, the authors approximate it using the predictive distribution. The idea is summarized in Eq. 4. ![](../images/sparse_selection/eq4.png) -This measure can be optimized using Frank-Wolfe which uses the dot-product ``$`\langle L_m, L_n\rangle`$`` to estimate the affectations. +This measure can be optimized using Frank-Wolfe which uses the dot-product $\langle L_m, L_n\rangle$ to estimate the affectations. -While a closed-form procedure exists to compute this dot-product, it is expensive to run (``$`O(||P||^2)`$``). -The authors suggest the use of random projections drawn from the parameters distribution ``$`\hat\pi`$``. -This approximation makes the algorithm ``$`O(||P||J)`$``, where J is the number of samples drawn from ``$`\hat\pi`$``. +While a closed-form procedure exists to compute this dot-product, it is expensive to run ($O(||P||^2)$). +The authors suggest the use of random projections drawn from the parameters distribution $\hat\pi$. +This approximation makes the algorithm $O(||P||J)$, where J is the number of samples drawn from $\hat\pi$. diff --git a/docs/literature/Additional papers/vaal.md b/docs/research/literature/Additional papers/vaal.md similarity index 100% rename from docs/literature/Additional papers/vaal.md rename to docs/research/literature/Additional papers/vaal.md diff --git a/docs/literature/images/Baalscheme.svg b/docs/research/literature/images/Baalscheme.svg similarity index 100% rename from docs/literature/images/Baalscheme.svg rename to docs/research/literature/images/Baalscheme.svg diff --git a/docs/literature/images/GYOLOV3/fig1.png b/docs/research/literature/images/GYOLOV3/fig1.png similarity index 100% rename from docs/literature/images/GYOLOV3/fig1.png rename to docs/research/literature/images/GYOLOV3/fig1.png diff --git a/docs/literature/images/GYOLOV3/fig2.png b/docs/research/literature/images/GYOLOV3/fig2.png similarity index 100% rename from docs/literature/images/GYOLOV3/fig2.png rename to docs/research/literature/images/GYOLOV3/fig2.png diff --git a/docs/literature/images/GYOLOV3/fig3.png b/docs/research/literature/images/GYOLOV3/fig3.png similarity index 100% rename from docs/literature/images/GYOLOV3/fig3.png rename to docs/research/literature/images/GYOLOV3/fig3.png diff --git a/docs/literature/images/dmi/fig3.png b/docs/research/literature/images/dmi/fig3.png similarity index 100% rename from docs/literature/images/dmi/fig3.png rename to docs/research/literature/images/dmi/fig3.png diff --git a/docs/literature/images/experiment_results/iterations_mcdc.png b/docs/research/literature/images/experiment_results/iterations_mcdc.png similarity index 100% rename from docs/literature/images/experiment_results/iterations_mcdc.png rename to docs/research/literature/images/experiment_results/iterations_mcdc.png diff --git a/docs/literature/images/lightcoreset/q_func.png b/docs/research/literature/images/lightcoreset/q_func.png similarity index 100% rename from docs/literature/images/lightcoreset/q_func.png rename to docs/research/literature/images/lightcoreset/q_func.png diff --git a/docs/literature/images/logo_original.png b/docs/research/literature/images/logo_original.png similarity index 100% rename from docs/literature/images/logo_original.png rename to docs/research/literature/images/logo_original.png diff --git a/docs/literature/images/repo_logo_25.jpg b/docs/research/literature/images/repo_logo_25.jpg similarity index 100% rename from docs/literature/images/repo_logo_25.jpg rename to docs/research/literature/images/repo_logo_25.jpg diff --git a/docs/literature/images/repo_logo_25_no_corner.svg b/docs/research/literature/images/repo_logo_25_no_corner.svg similarity index 100% rename from docs/literature/images/repo_logo_25_no_corner.svg rename to docs/research/literature/images/repo_logo_25_no_corner.svg diff --git a/docs/literature/images/sparse_selection/eq4.png b/docs/research/literature/images/sparse_selection/eq4.png similarity index 100% rename from docs/literature/images/sparse_selection/eq4.png rename to docs/research/literature/images/sparse_selection/eq4.png diff --git a/docs/literature/images/sparse_selection/fig4.png b/docs/research/literature/images/sparse_selection/fig4.png similarity index 100% rename from docs/literature/images/sparse_selection/fig4.png rename to docs/research/literature/images/sparse_selection/fig4.png diff --git a/docs/literature/images/vaal/fig1.png b/docs/research/literature/images/vaal/fig1.png similarity index 100% rename from docs/literature/images/vaal/fig1.png rename to docs/research/literature/images/vaal/fig1.png diff --git a/docs/literature/images/vaal/fig2.png b/docs/research/literature/images/vaal/fig2.png similarity index 100% rename from docs/literature/images/vaal/fig2.png rename to docs/research/literature/images/vaal/fig2.png diff --git a/docs/literature/core-papers.md b/docs/research/literature/index.md similarity index 85% rename from docs/literature/core-papers.md rename to docs/research/literature/index.md index 0606e5fd..02f7dc58 100644 --- a/docs/literature/core-papers.md +++ b/docs/research/literature/index.md @@ -1,39 +1,48 @@ -# The theory behind Bayesian active learning - -In this document, we keep a list of the papers to get you started in Bayesian deep learning and Bayesian active learning. - -We hope to include a summary for each of then in the future, but for now we have this list with some notes. - - -### How to estimate uncertainty in Deep Learning networks - -* [Excellent tutorial from AGW on Bayesian Deep Learning](https://icml.cc/virtual/2020/tutorial/5750) - * This is inspired by his publication [Bayesian Deep Learning and a Probabilistic Perspective of Generalization](https://arxiv.org/abs/2002.08791) -* [Dropout as a Bayesian Approximation: Representing Model Uncertainty in Deep Learning](https://arxiv.org/pdf/1506.02142.pdf) (Gal and Ghahramani, 2016) - * This describes Monte-Carlo Dropout, a way to estimate uncertainty through stochastic dropout at test time -* [Bayesian Uncertainty Estimation for Batch Normalized Deep Networks](https://arxiv.org/abs/1802.06455) (Teye et al. 2018) - * This describes Monte-Carlo BatchNorm, a way to estimate uncertainty through random batch norm parameters at test time -* [Bayesian Deep Learning and a Probabilistic Perspective of Generalization](https://arxiv.org/abs/2002.08791) (Gordon Wilson and Izmailov, 2020) - * Presentation of multi-SWAG a mix between VI and Ensembles. -* [Advances in Variational inference](https://arxiv.org/pdf/1711.05597.pdf) (Zhang et al, 2018) - * Gives a quick introduction to VI and the most recent advances. -* [A Simple Baseline for Bayesian Uncertainty in Deep Learning](https://arxiv.org/abs/1902.02476) (Maddox et al. 2019) - * Presents SWAG, an easy way to create ensembles. - - - - -### Bayesian active learning -* [Deep Bayesian Active Learning with Image Data](https://arxiv.org/pdf/1703.02910.pdf) (Gal and Islam and Ghahramani, 2017) - * Fundamental paper on how to do Bayesian active learning. A must read. -* [Sampling bias in active learning](http://cseweb.ucsd.edu/~dasgupta/papers/twoface.pdf) (Dasgupta 2009) - * Presents sampling bias and how to solve it by combining heuristics and random selection. - -* [Bayesian Active Learning for Classification and Preference Learning](https://arxiv.org/pdf/1112.5745.pdf) (Houlsby et al. 2011) - * Fundamental paper on one of the main heuristic BALD. - - -### Bayesian active learning on NLP - -* [Deep Bayesian Active Learning for Natural Language Processing: Results of a Large-Scale Empirical Study](https://arxiv.org/abs/1808.05697) (Siddhant and Lipton, 2018) - * Experimental paper on how to use Bayesian active learning on NLP tasks. +# Active learning literature + +This page is here to collect summaries of papers that focus on active learning. +The idea is to share knowledge on recent developments in active learning. + +If you've read a paper recently, write a little summary in markdown, put it in +the folder `docs/research/literature` and make a pull request. You can even do all of +that right in the Github web UI! + +## The theory behind Bayesian active learning + +In this document, we keep a list of the papers to get you started in Bayesian deep learning and Bayesian active learning. + +We hope to include a summary for each of then in the future, but for now we have this list with some notes. + + +### How to estimate uncertainty in Deep Learning networks + +* [Excellent tutorial from AGW on Bayesian Deep Learning](https://icml.cc/virtual/2020/tutorial/5750) + * This is inspired by his publication [Bayesian Deep Learning and a Probabilistic Perspective of Generalization](https://arxiv.org/abs/2002.08791) +* [Dropout as a Bayesian Approximation: Representing Model Uncertainty in Deep Learning](https://arxiv.org/pdf/1506.02142.pdf) (Gal and Ghahramani, 2016) + * This describes Monte-Carlo Dropout, a way to estimate uncertainty through stochastic dropout at test time +* [Bayesian Uncertainty Estimation for Batch Normalized Deep Networks](https://arxiv.org/abs/1802.06455) (Teye et al. 2018) + * This describes Monte-Carlo BatchNorm, a way to estimate uncertainty through random batch norm parameters at test time +* [Bayesian Deep Learning and a Probabilistic Perspective of Generalization](https://arxiv.org/abs/2002.08791) (Gordon Wilson and Izmailov, 2020) + * Presentation of multi-SWAG a mix between VI and Ensembles. +* [Advances in Variational inference](https://arxiv.org/pdf/1711.05597.pdf) (Zhang et al, 2018) + * Gives a quick introduction to VI and the most recent advances. +* [A Simple Baseline for Bayesian Uncertainty in Deep Learning](https://arxiv.org/abs/1902.02476) (Maddox et al. 2019) + * Presents SWAG, an easy way to create ensembles. + + + + +### Bayesian active learning +* [Deep Bayesian Active Learning with Image Data](https://arxiv.org/pdf/1703.02910.pdf) (Gal and Islam and Ghahramani, 2017) + * Fundamental paper on how to do Bayesian active learning. A must read. +* [Sampling bias in active learning](http://cseweb.ucsd.edu/~dasgupta/papers/twoface.pdf) (Dasgupta 2009) + * Presents sampling bias and how to solve it by combining heuristics and random selection. + +* [Bayesian Active Learning for Classification and Preference Learning](https://arxiv.org/pdf/1112.5745.pdf) (Houlsby et al. 2011) + * Fundamental paper on one of the main heuristic BALD. + + +### Bayesian active learning on NLP + +* [Deep Bayesian Active Learning for Natural Language Processing: Results of a Large-Scale Empirical Study](https://arxiv.org/abs/1808.05697) (Siddhant and Lipton, 2018) + * Experimental paper on how to use Bayesian active learning on NLP tasks. diff --git a/docs/stylesheets/extra.css b/docs/stylesheets/extra.css new file mode 100644 index 00000000..61f80500 --- /dev/null +++ b/docs/stylesheets/extra.css @@ -0,0 +1,3 @@ +img.rounded-corners { + border-radius: 50%; +} \ No newline at end of file diff --git a/docs/faq.md b/docs/support/faq.md similarity index 95% rename from docs/faq.md rename to docs/support/faq.md index d96d1400..8fd9b1f3 100644 --- a/docs/faq.md +++ b/docs/support/faq.md @@ -1,3 +1,8 @@ +--- +search: + boost: 2 +--- + # Baal FAQ If you have more questions, please submit an issue, and we will include it here! @@ -103,11 +108,11 @@ al_dataset.label_randomly(10) pool = al_dataset.pool ``` -From a rigorous point of view: ``$`D = ds `$`` , ``$`D_L=al\_dataset `$`` and ``$`D_U = D \setminus D_L = pool `$``. -Then, we train our model on ``$`D_L `$`` and compute the uncertainty on ``$`D_U `$``. The most uncertains samples are -labelled and added to ``$`D_L `$``, removed from ``$`D_U `$``. +From a rigorous point of view: $D = ds$ , $D_L=al\_dataset$ and $D_U = D \setminus D_L = pool$. +Then, we train our model on $D_L$ and compute the uncertainty on $D_U $. The most uncertains samples are +labelled and added to $D_L$, removed from $D_U$. -Let a method `query_human` performs the annotations, we can label our dataset using indices relative to``$`D_U `$``. +Let a method `query_human` performs the annotations, we can label our dataset using indices relative to$D_U $. This assumes that your dataset class `YourDataset` has a method named `label` which has the following definition: `def label(self, idx, value)` where we give the label for index `idx`. There the index is not relative to the pool, so you don't have to worry about it. @@ -135,7 +140,7 @@ active_dataset.label(ranks, labels) Bayesian active learning is a relatively small field with a lot of unknowns. This section aims at presenting some of our findings so that newcomers can quickly learn. -Don't forget to look at our [literature review](../literature/index.md) for a good introduction to the field. +Don't forget to look at our [literature review](../research/literature/index.md) for a good introduction to the field. ### Should you use early stopping? diff --git a/docs/support/index.md b/docs/support/index.md new file mode 100644 index 00000000..20d656be --- /dev/null +++ b/docs/support/index.md @@ -0,0 +1,9 @@ +# Support + +For support, we have several ways to help you: + +* Our [:material-help: FAQ](faq.md) +* Submit an issue on Github [here](https://github.com/baal-org/baal/issues/new/choose) +* Join our [:material-slack: Slack](https://join.slack.com/t/baal-world/shared_invite/zt-z0izhn4y-Jt6Zu5dZaV2rsAS9sdISfg)! + * General questions can be asked under the #questions channel + \ No newline at end of file diff --git a/docs/tutorials/index.md b/docs/tutorials/index.md new file mode 100644 index 00000000..c1e3095b --- /dev/null +++ b/docs/tutorials/index.md @@ -0,0 +1,17 @@ +# Tutorials + +Tutorials are split in two sections, "How-to" and "Compatibility". The first one focuses on Baal's capabilities and the +latter on how we integrate with other common frameworks such as Label Studio, HuggingFace or Lightning Flash. + +## :material-file-tree: How to + +* [Run an active learning experiments](notebooks/active_learning_process.ipynb) +* [Active learning in production](notebooks/baal_prod_cls.ipynb) +* [Deep Ensembles](../notebooks/deep_ensemble.ipynb) + +## :material-file-tree: Compatibility + +* [:material-link: Lightning Flash](https://devblog.pytorchlightning.ai/active-learning-made-simple-using-flash-and-baal-2216df6f872c) +* [HuggingFace](../notebooks/compatibility/nlp_classification.ipynb) +* [Scikit-Learn](../notebooks/compatibility/sklearn_tutorial.ipynb) +* [Label Studio](./label-studio.md) \ No newline at end of file diff --git a/docs/tutorials/label-studio.md b/docs/tutorials/label-studio.md index 003e6021..c585fbfe 100644 --- a/docs/tutorials/label-studio.md +++ b/docs/tutorials/label-studio.md @@ -4,24 +4,32 @@ In this tutorial, we will see how to use Baal inside of Label Studio, a widely known labelling tool. -By using Bayesian active learning in your labelling setup, you will be able to label only the most informative examples. This will avoid labelling duplicates and easy examples. +By using Bayesian active learning in your labelling setup, you will be able to label only the most informative examples. +This will avoid labelling duplicates and easy examples. -This is also a good way to start the conversation between your labelling team and your machine learning team as they need to communicate early in the process! +This is also a good way to start the conversation between your labelling team and your machine learning team as they +need to communicate early in the process! -We will built upon Label Studio's [Pytorch transfer learning](https://github.com/heartexlabs/label-studio-ml-backend/blob/master/label_studio_ml/examples/pytorch_transfer_learning.py) example, so be sure to download it and try to run it before adding Baal to it. The full example can be found [here](https://gist.github.com/Dref360/288845b2fbb0504e4cfc216a76b547e7). +We will built upon Label +Studio's [Pytorch transfer learning](https://github.com/heartexlabs/label-studio-ml-backend/blob/master/label_studio_ml/examples/pytorch_transfer_learning.py) +example, so be sure to download it and try to run it before adding Baal to it. The full example can be +found [here](https://gist.github.com/Dref360/288845b2fbb0504e4cfc216a76b547e7). More info: + * [Baal documentation](https://baal.readthedocs.io/en/latest/) * [Bayesian Deep Learning cheatsheet](https://baal.readthedocs.io/en/latest/user_guide/baal_cheatsheet.html) Support: + * [Github](https://github.com/ElementAI/baal) * [Gitter](https://gitter.im/eai-baal/community) - ## Installing Baal -To install Baal, you will need to add `baal` in the [generated `Dockerfile`](https://github.com/heartexlabs/label-studio-ml-backend/blob/master/label_studio_ml/default_configs/Dockerfile). +To install Baal, you will need to add `baal` in +the [generated `Dockerfile`](https://github.com/heartexlabs/label-studio-ml-backend/blob/master/label_studio_ml/default_configs/Dockerfile) +. ```dockerfile # Dockerfile @@ -30,7 +38,7 @@ RUN pip install --no-cache \ uwsgi==2.0.19.1 \ supervisor==4.2.2 \ label-studio==1.0.2 \ - baal==1.3.0 \ + baal \ click==7.1.2 \ git+https://github.com/heartexlabs/label-studio-ml-backend ``` @@ -39,17 +47,19 @@ and when developing, you should install Baal in your local environment. `pip install baal==1.3.0` - ## Modifying `pytorch_transfer_learning.py` -The overall changes are pretty minor, so we will go step by step, specifying the class and method we are modifying. Again, the full script is available [here](https://gist.github.com/Dref360/288845b2fbb0504e4cfc216a76b547e7). +The overall changes are pretty minor, so we will go step by step, specifying the class and method we are modifying. +Again, the full script is available [here](https://gist.github.com/Dref360/288845b2fbb0504e4cfc216a76b547e7). ### Model -The simplest way of doing Bayesian uncertainty estimation in active learning is MC-Dropout (Gal and Ghahramani, 2015) which requires Dropout layers. To use this, we use VGG-16 instead of the default ResNet-18. +The simplest way of doing Bayesian uncertainty estimation in active learning is MC-Dropout (Gal and Ghahramani, 2015) +which requires Dropout layers. To use this, we use VGG-16 instead of the default ResNet-18. ```python from baal.bayesian.dropout import patch_module + # ImageClassifier.__init__ self.model = models.vgg16(pretrained=True) last_layer_idx = 6 @@ -59,7 +69,11 @@ self.model.classifier[last_layer_idx] = nn.Linear(num_ftrs, num_classes) self.model = patch_module(self.model) ``` -Next, we will wrap our model using `baal.modelwrapper.ModelWrapper` from Baal which will simplify the different loops. If you use another framework, feel free to checkout our [Pytorch Lightning integration](https://baal.readthedocs.io/en/latest/notebooks/compatibility/pytorch_lightning.html) and our [HuggingFace integration](https://baal.readthedocs.io/en/latest/notebooks/compatibility/nlp_classification.html). +Next, we will wrap our model using `baal.modelwrapper.ModelWrapper` from Baal which will simplify the different loops. +If you use another framework, feel free to checkout +our [Pytorch Lightning integration](https://baal.readthedocs.io/en/latest/notebooks/compatibility/pytorch_lightning.html) +and our [HuggingFace integration](https://baal.readthedocs.io/en/latest/notebooks/compatibility/nlp_classification.html) +. ```python # ImageClassifier.__init__ @@ -85,10 +99,11 @@ def train(self, dataset, num_epochs=5): return self.model ``` - ### Prediction -We can draw multiple predictions from the model's parameter distribution using MC-Dropout. In this script we will make 20 predictions per example: +We can draw multiple predictions from the model's parameter distribution using MC-Dropout. In this script we will make +20 predictions per example: + ```python # ImageClassifier def predict(self, image_urls): @@ -98,7 +113,9 @@ def predict(self, image_urls): ``` -In `ImageClassifierAPI` we will leverage this set of predictions and BALD (Houlsby et al, 2013) to estimate the model's uncertainty and to get the "average prediction" which would be more trustworthy: +In `ImageClassifierAPI` we will leverage this set of predictions and BALD (Houlsby et al, 2013) to estimate the model's +uncertainty and to get the "average prediction" which would be more trustworthy: + ```python # ImageClassifierAPI.predict @@ -109,7 +126,6 @@ predicted_label_indices = np.argmax(average_prediction, axis=1) predicted_scores = BALD().get_uncertainties(logits) ``` - ## Launching LabelStudio Following Label Studio tutorial, you can start your ML Backend as usual. @@ -117,40 +133,33 @@ In the Settings, do not forget to checkbox all boxes: ![](https://i.imgur.com/4vcj2u8.png) - -and to use active learning, order by Predictions score: +and to use active learning, order by Predictions score: ![](https://i.imgur.com/cGVngqw.png) - ## Labeling in action! -To test this setup, we imported in Label Studio a subset of [MIO-TCD](http://podoce.dinf.usherbrooke.ca/), a dataset that is similar to real production data. This dataset suffers from heavy class imbalance, the class *car* represents 90% of all images in the dataset. +To test this setup, we imported in Label Studio a subset of [MIO-TCD](http://podoce.dinf.usherbrooke.ca/), a dataset +that is similar to real production data. This dataset suffers from heavy class imbalance, the class *car* represents 90% +of all images in the dataset. -After labelling randomly 100 images, I start training my model. On a subset of 10k unlabelled images, we get the following most uncertain predictions: +After labelling randomly 100 images, I start training my model. On a subset of 10k unlabelled images, we get the +following most uncertain predictions: -```eval_rst -.. |logo1| image:: https://i.imgur.com/7LuI4qf.jpg - :align: middle -.. |logo2| image:: https://i.imgur.com/YjViSz6.jpg - :align: middle -.. |logo3| image:: https://i.imgur.com/9SyYMfR.jpg - :align: middle +| ![](https://i.imgur.com/7LuI4qf.jpg) | ![](https://i.imgur.com/YjViSz6.jpg) | ![]( https://i.imgur.com/9SyYMfR.jpg) | +|--------------------------------------|--------------------------------------|---------------------------------------| +| Articulated Truck | Bicycle | Background | -+-------------------+---------+------------+ -| |logo1| | |logo2| | |logo3| | -+-------------------+---------+------------+ -| Articulated Truck | Bicycle | Background | -+-------------------+---------+------------+ -``` +The model has seen enough cars, and wants to label new classes as they would be the most informatives. If we continue +labelling, we will see a similar behavior, where the class *car* is undersampled and the others are oversampled. - -The model has seen enough cars, and wants to label new classes as they would be the most informatives. If we continue labelling, we will see a similar behavior, where the class *car* is undersampled and the others are oversampled. - -In [Atighehchian et al. 2019](https://arxiv.org/abs/2006.09916), we compare BALD to Uniform sampling on this dataset and we get better performance on underrepresented classes. +In [Atighehchian et al. 2019](https://arxiv.org/abs/2006.09916), we compare BALD to Uniform sampling on this dataset and +we get better performance on underrepresented classes. In the image below, we have the F1 for two underrepresented classes: ![](https://i.imgur.com/dWP7QIJ.png) - -**In conlusion**, we can now use Bayesian active learning in Label Studio which would help your labelling process be more efficient. Please do not hesitate to reach out on our Gitter or on Label Studio's [Slack](http://slack.labelstud.io.s3-website-us-east-1.amazonaws.com/?source=site-header) if you have feedback or questions. +**In conlusion**, we can now use Bayesian active learning in Label Studio which would help your labelling process be +more efficient. Please do not hesitate to reach out on our Gitter or on Label +Studio's [Slack](http://slack.labelstud.io.s3-website-us-east-1.amazonaws.com/?source=site-header) if you have feedback +or questions. diff --git a/docs/user_guide/baal_cheatsheet.md b/docs/user_guide/baal_cheatsheet.md index 298d7862..5d10f0b8 100644 --- a/docs/user_guide/baal_cheatsheet.md +++ b/docs/user_guide/baal_cheatsheet.md @@ -7,9 +7,9 @@ In the table below, we have a mapping between common equations and the Baal API. Here are the types for all variables needed. ```python -model : torch.nn.Module -wrapper : baal.ModelWrapper -dataset: torch.utils.data_utils.Dataset +model: torch.nn.Module +wrapper: baal.ModelWrapper +dataset: torch.utils.data_utils.Dataset bald = baal.active.heuristics.BALD() entropy = baal.active.heuristics.Entropy() ``` @@ -18,17 +18,12 @@ We assume that `baal.bayesian.dropout.patch_module` has been applied to the mode `model = baal.bayesian.dropout.patch_module(model)` -```eval_rst -.. csv-table:: Baal cheat sheet - :header: "Description", "Equation", "Baal" - :widths: 20, 20, 40 - - "Bayesian Model Averaging", ":math:`\hat{T} = p(y \mid x, {\cal D})= \int p(y \mid x, \theta)p(\theta \mid D) d\theta`", "`wrapper.predict_on_dataset(dataset, batch_size=B, iterations=I, use_cuda=True).mean(-1)`" - "MC-Dropout", ":math:`T = \{p(y\mid x_j, \theta_i)\} \mid x_j \in {\cal D}' ,i \in \{1, \ldots, I\}`", "`wrapper.predict_on_dataset(dataset, batch_size=B, iterations=I, use_cuda=True)`" - "BALD", ":math:`{\cal I}[y, \theta \mid x, {\cal D}] = {\cal H}[y \mid x, {\cal D}] - {\cal E}_{p(\theta \mid {\cal D})}[{\cal H}[y \mid x, \theta]]`", "`bald.get_uncertainties(T)`" - "Entropy", ":math:`\sum_c \hat{T}_c \log(\hat{T}_c)`", "`entropy.get_uncertainties(T)`" - -``` +| Description | Equation | Baal | +|--------------------------|----------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------| +| Bayesian Model Averaging | $\hat{T} = p(y \mid x, {\cal D})= \int p(y \mid x, \theta)p(\theta \mid D) d\theta$ | `wrapper.predict_on_dataset(dataset, batch_size=B, iterations=I, use_cuda=True).mean(-1)` | +| MC-Dropout | $T = \{p(y\mid x_j, \theta_i)\} \mid x_j \in {\cal D}' ,i \in \{1, \ldots, I\}$ | `wrapper.predict_on_dataset(dataset, batch_size=B, iterations=I, use_cuda=True)` | +| BALD | ${\cal I}[y, \theta \mid x, {\cal D}] = {\cal H}[y \mid x, {\cal D}] - {\cal E}_{p(\theta \mid {\cal D})}[{\cal H}[y \mid x, \theta]]$ | `bald.get_uncertainties(T)` | +| Entropy | $\sum_c \hat{T}_c \log(\hat{T}_c)$ | `entropy.get_uncertainties(T)` | **Contributing** diff --git a/docs/user_guide/heuristics.md b/docs/user_guide/heuristics.md new file mode 100644 index 00000000..5c87f89f --- /dev/null +++ b/docs/user_guide/heuristics.md @@ -0,0 +1,34 @@ +# Active learning heuristics + +**Heuristics** take a set of predictions and outputs the order in which they should be labelled. + +A simple heuristic would be to prioritize items where the model had low confidence. +We will cover the two main heuristics: **Entropy** and **BALD**. + + +### Entropy + +The goal of this heuristic is to maximize information. To do so, we will compute the entropy of each prediction before ordering them. + +Let $p_{c}(x)$ be the probability of input $x$ to be from class $c$. The entropy can be computed as: + +$$ +H(x) = \sum_c^C p_c(x) +$$ + +This score reflects the informativeness of knowing the true label of $x$. +Naturally the next item to label would be $argmax_{x \in {\cal D}} H(x)$, where ${\cal D} is our dataset$ + +A drawback of this method is that it doesn't differentiate between *aleatoric* uncertainty and *epistemic* uncertainty. +To do so, we will use BALD + +### BALD + +Bayesian active learning by disagreement or BALD (Houslby et al. 2013) is the basis of most modern active learning heuristics. + +From a Bayesian model $f$, we draw $I$ predictions per sample $x$. + +Then, we want to maximize the mutual information between a prediction and the model's parameters. This is done by looking at how the predictions are disagreeing with each others. +If the prediction "flips" often, it means that the item is close to a decision boundary and thus hard to fit. + + ${\cal I}[y, \theta \mid x, {\cal D}] = {\cal H}[y \mid x, {\cal D}] - {\cal E}_{p(\theta \mid {\cal D})}[{\cal H}[y \mid x, \theta]]$ diff --git a/docs/user_guide/index.md b/docs/user_guide/index.md index 91ab00f0..09b4df21 100644 --- a/docs/user_guide/index.md +++ b/docs/user_guide/index.md @@ -6,9 +6,9 @@ In addition, we propose a [cheat sheet](./baal_cheatsheet.md) that will help use ### Notations and glossary -* Training dataset ``$`D_L`$`` -* Pool, the unlabelled portion of the dataset ``$`D_U`$`` -* Heuristic, the function that computes the uncertainty (ex. BALD) ``$`U `$`` +* Training dataset $D_L$ +* Pool, the unlabelled portion of the dataset $D_U$ +* Heuristic, the function that computes the uncertainty (ex. BALD) $U$ * Active learning step, the sequence of training, selecting and labelling one or many examples. * BALD, an heuristic that works well with deep learning models that are overconfident. * Query size, the number of items to label between retraining. @@ -53,13 +53,14 @@ We hope that work in this area continues so that we can better understand the im **Resources** -* [Literature review](../literature/index.md) +* [Literature review](../research/literature/index.md) * [Active learning dataset and training loop classes](../notebooks/fundamentals/active-learning) * [Methods for approximating bayesian posteriors](../notebooks/fundamentals/posteriors) * [Full active learning example](../notebooks/active_learning_process) **References** + * Kirsch, Andreas, Joost Van Amersfoort, and Yarin Gal. "Batchbald: Efficient and diverse batch acquisition for deep bayesian active learning." NeurIPS (2019). * Jain, Siddhartha, Ge Liu, and David Gifford. "Information Condensing Active Learning." arXiv preprint arXiv:2002.07916 (2020). * Houlsby, Neil, et al. "Bayesian active learning for classification and preference learning." arXiv preprint arXiv:1112.5745 (2011). diff --git a/mkdocs.yml b/mkdocs.yml new file mode 100644 index 00000000..4ab14a4b --- /dev/null +++ b/mkdocs.yml @@ -0,0 +1,113 @@ +site_name: Baal Documentation +repo_url: https://github.com/baal-org/baal +edit_uri: edit/master/docs/ +theme: + name: material + logo: _static/images/logo-transparent.png + palette: + # Palette toggle for light mode + - media: "(prefers-color-scheme: light)" + scheme: default + primary: black + toggle: + icon: material/brightness-7 + name: Switch to dark mode + + # Palette toggle for dark mode + - media: "(prefers-color-scheme: dark)" + scheme: slate + primary: blue grey + toggle: + icon: material/brightness-4 + name: Switch to light mode + features: + - navigation.tabs + - navigation.tabs.sticky + - navigation.indexes + - navigation.instant + icon: + repo: fontawesome/brands/github +plugins: + - search + - exclude-search: + exclude_unreferenced: true + exclude: + - notebooks/active_learning_process.md + - /*/active_learning_process* + - /*/nbsphinx* + - mkdocs-jupyter + - mkdocstrings + + +markdown_extensions: + - md_in_html + - attr_list + - pymdownx.arithmatex: + generic: true + - pymdownx.emoji: + emoji_index: !!python/name:materialx.emoji.twemoji + emoji_generator: !!python/name:materialx.emoji.to_svg + - pymdownx.highlight: + anchor_linenums: true + - admonition + - pymdownx.details + - pymdownx.inlinehilite + - pymdownx.snippets + - pymdownx.superfences + +extra_javascript: + - javascripts/mathjax.js + - https://polyfill.io/v3/polyfill.min.js?features=es6 + - https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js +extra_css: + - stylesheets/extra.css + +nav: + - Home: index.md + - User Guide: + - user_guide/index.md + - Cheat Sheet: user_guide/baal_cheatsheet.md + - Active data structure: notebooks/fundamentals/active-learning.ipynb + - Computing uncertainty: + - Stochastic models: notebooks/fundamentals/posteriors.ipynb + - Heuristics: user_guide/heuristics.md + - API: + - api/index.md + - api/bayesian.md + - api/calibration.md + - api/dataset_management.md + - api/heuristics.md + - api/modelwrapper.md + - api/utils.md + - Compatibility: + - api/compatibility/huggingface.md + - api/compatibility/pytorch-lightning.md + + - Tutorials: + - tutorials/index.md + - Compatibility: + - tutorials/label-studio.md + - notebooks/compatibility/nlp_classification.ipynb + - notebooks/compatibility/sklearn_tutorial.ipynb + - Active learning for research: notebooks/active_learning_process.ipynb + - Active learning for production: notebooks/baal_prod_cls.ipynb + - Deep Ensembles for active learning: notebooks/deep_ensemble.ipynb + - Research: + - research/index.md + - Technical Reports: + - Active Fairness: notebooks/fairness/ActiveFairness.ipynb + - research/dirichlet_calibration.md + - research/double_descent.md + - Literature: + - research/literature/index.md + - Additional papers: + - research/literature/Additional papers/dmi.md + - research/literature/Additional papers/duq.md + - research/literature/Additional papers/gyolov3.md + - research/literature/Additional papers/lightcoresets.md + - research/literature/Additional papers/sparse_selection.md + - research/literature/Additional papers/vaal.md + + - Support: + - support/index.md + - support/faq.md diff --git a/notebooks/active_learning_process.ipynb b/notebooks/active_learning_process.ipynb index 9faf3f2e..00b57ee3 100644 --- a/notebooks/active_learning_process.ipynb +++ b/notebooks/active_learning_process.ipynb @@ -2,11 +2,12 @@ "cells": [ { "cell_type": "markdown", - "metadata": {}, "source": [ "# How to do research and visualize progress\n", "\n", - "In this tutorial, we will show how to use BaaL for research ie. when we know the labels.\n", + "[![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/baal-org/baal/blob/master/notebooks/active_learning_process.ipynb)\n", + "\n", + "In this tutorial, we will show how to use Baal for research ie. when we know the labels.\n", "We will introduce notions such as dataset management, MC-Dropout, BALD. If you need more documentation, be sure to check our **Additional resources** section below!\n", "\n", "BaaL can be used on a variety of research domains:\n", @@ -18,14 +19,6 @@ "\n", "Today we will focus on a simple example with CIFAR10 and we will animate the progress of active learning!\n", "\n", - "#### Requirements\n", - "\n", - "In addition to BaaL standard requirements, you will need to install:\n", - "\n", - "* MulticoreTSNE\n", - "* Matplotlib\n", - "\n", - "\n", "#### Additional resources\n", "\n", "* More info on the inner working of Active Learning Dataset [here](./fundamentals/active-learning.ipynb).\n", @@ -33,12 +26,17 @@ " [Literature review](https://baal.readthedocs.io/en/latest/literature/core-papers.html).\n", "\n", "### Let's do this!" - ] + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%% md\n" + } + } }, { "cell_type": "code", - "execution_count": 1, - "metadata": {}, + "execution_count": null, "outputs": [], "source": [ "# Let's start with a bunch of imports.\n", @@ -50,6 +48,7 @@ "import numpy as np\n", "import torch\n", "import torch.backends\n", + "import torch.utils.data as torchdata\n", "from torch import optim\n", "from torch.hub import load_state_dict_from_url\n", "from torch.nn import CrossEntropyLoss\n", @@ -63,17 +62,23 @@ "from baal.bayesian.dropout import patch_module\n", "from baal.modelwrapper import ModelWrapper\n", "\n", + "\n", "def vgg16(num_classes):\n", " model = models.vgg16(pretrained=False, num_classes=num_classes)\n", " weights = load_state_dict_from_url('https://download.pytorch.org/models/vgg16-397923af.pth')\n", " weights = {k: v for k, v in weights.items() if 'classifier.6' not in k}\n", " model.load_state_dict(weights, strict=False)\n", " return model" - ] + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } }, { "cell_type": "markdown", - "metadata": {}, "source": [ "### Dataset management and the pool\n", "\n", @@ -106,56 +111,37 @@ "`ActiveLearningDataset(your_dataset, pool_specifics:{'transform': test_transform}`\n", "\n", "where `test_transform` is the test version of `transform` without data augmentation.\n" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [], - "source": [ - "\"\"\"\n", - "We will make an adapter so that `pool_specifics` modifies the transform correctly.\n", - "Because the training set is now a torchdata.Subset, modifying the `transform` attribute is harder.\n", - "\"\"\"\n", - "\n", - "import torch.utils.data as torchdata\n", - "\n", - "\n", - "class TransformAdapter(torchdata.Subset):\n", - "\n", - " @property\n", - " def transform(self):\n", - " if hasattr(self.dataset, 'transform'):\n", - " return self.dataset.transform\n", - " else:\n", - " raise AttributeError()\n", - "\n", - " @transform.setter\n", - " def transform(self, transform):\n", - " if hasattr(self.dataset, 'transform'):\n", - " self.dataset.transform = transform" - ] + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%% md\n" + } + } }, { "cell_type": "markdown", - "metadata": {}, "source": [ "Here we define our Experiment configuration, this can come from your favorite experiment manager like MLFlow.\n", "BaaL does not expect a particular format as all arguments are supplied." - ] + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%% md\n" + } + } }, { "cell_type": "code", - "execution_count": 3, - "metadata": {}, + "execution_count": null, "outputs": [], "source": [ "\n", "\n", "@dataclass\n", "class ExperimentConfig:\n", - " epoch: int = 20000//100\n", + " epoch: int = 20000 // 100\n", " batch_size: int = 32\n", " initial_pool: int = 512\n", " query_size: int = 100\n", @@ -163,27 +149,33 @@ " heuristic: str = 'bald'\n", " iterations: int = 40\n", " training_duration: int = 10\n", - " \n" - ] - }, - { - "cell_type": "markdown", + "\n" + ], "metadata": { + "collapsed": false, "pycharm": { - "name": "#%% md\n" + "name": "#%%\n" } - }, + } + }, + { + "cell_type": "markdown", "source": [ "### Problem definition\n", "\n", "We will perform active learning on a toy dataset, CIFAR-3 where we only keep dogs, cats and airplanes. This will make\n", "visualization easier." - ] + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%% md\n" + } + } }, { "cell_type": "code", - "execution_count": 4, - "metadata": {}, + "execution_count": null, "outputs": [], "source": [ "def get_datasets(initial_pool):\n", @@ -198,6 +190,22 @@ " Returns:\n", " ActiveLearningDataset, Dataset, the training and test set.\n", " \"\"\"\n", + "\n", + " class TransformAdapter(torchdata.Subset):\n", + " # We need a custom Subset class as we need to override \"transforms\" as well.\n", + " # This shouldn't be needed for your experiments.\n", + " @property\n", + " def transform(self):\n", + " if hasattr(self.dataset, 'transform'):\n", + " return self.dataset.transform\n", + " else:\n", + " raise AttributeError()\n", + "\n", + " @transform.setter\n", + " def transform(self, transform):\n", + " if hasattr(self.dataset, 'transform'):\n", + " self.dataset.transform = transform\n", + "\n", " # airplane, cat, dog\n", " classes_to_keep = [0, 3, 5]\n", " transform = transforms.Compose(\n", @@ -215,31 +223,32 @@ " )\n", " train_ds = datasets.CIFAR10('.', train=True,\n", " transform=transform, target_transform=None, download=True)\n", - " \n", + "\n", " train_mask = np.where([y in classes_to_keep for y in train_ds.targets])[0]\n", " train_ds = TransformAdapter(train_ds, train_mask)\n", - " \n", + "\n", " # In a real application, you will want a validation set here.\n", " test_set = datasets.CIFAR10('.', train=False,\n", " transform=test_transform, target_transform=None, download=True)\n", " test_mask = np.where([y in classes_to_keep for y in test_set.targets])[0]\n", " test_set = TransformAdapter(test_set, test_mask)\n", - " \n", + "\n", " # Here we set `pool_specifics`, where we set the transform attribute for the pool.\n", " active_set = ActiveLearningDataset(train_ds, pool_specifics={'transform': test_transform})\n", "\n", " # We start labeling randomly.\n", " active_set.label_randomly(initial_pool)\n", " return active_set, test_set" - ] - }, - { - "cell_type": "markdown", + ], "metadata": { + "collapsed": false, "pycharm": { - "name": "#%% md\n" + "name": "#%%\n" } - }, + } + }, + { + "cell_type": "markdown", "source": [ "## Creating our experiment\n", "\n", @@ -256,22 +265,18 @@ " * Training/testing loops\n", "* ActiveLearningLoop\n", " * Will make prediction on the pool and label the most uncertain examples." - ] + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%% md\n" + } + } }, { "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Files already downloaded and verified\n", - "Files already downloaded and verified\n" - ] - } - ], + "execution_count": null, + "outputs": [], "source": [ "hyperparams = ExperimentConfig()\n", "use_cuda = torch.cuda.is_available()\n", @@ -312,11 +317,16 @@ "\n", "# We will reset the weights at each active learning step so we make a copy.\n", "init_weights = deepcopy(model.state_dict())" - ] + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } }, { "cell_type": "markdown", - "metadata": {}, "source": [ "### What is an active learning loop\n", "\n", @@ -325,788 +335,27 @@ "1. Training\n", "2. Estimate uncertainty on the pool\n", "3. Label the most uncertain examples.\n" - ] + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%% md\n" + } + } }, { "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "db80f856c34647a1a8e129a84339a57f", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - " 0%| | 0/200 [00:00" ] } ], diff --git a/poetry.lock b/poetry.lock index 4b388f81..0aace7ad 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,6 +1,6 @@ [[package]] name = "absl-py" -version = "1.1.0" +version = "1.2.0" description = "Abseil Python Common Libraries, see https://github.com/abseil/abseil-py." category = "main" optional = true @@ -8,7 +8,7 @@ python-versions = ">=3.6" [[package]] name = "aiohttp" -version = "3.8.1" +version = "3.8.3" description = "Async http client/server framework (asyncio)" category = "main" optional = true @@ -17,12 +17,10 @@ python-versions = ">=3.6" [package.dependencies] aiosignal = ">=1.1.2" async-timeout = ">=4.0.0a3,<5.0" -asynctest = {version = "0.13.0", markers = "python_version < \"3.8\""} attrs = ">=17.3.0" charset-normalizer = ">=2.0,<3.0" frozenlist = ">=1.1.1" multidict = ">=4.5,<7.0" -typing-extensions = {version = ">=3.7.4", markers = "python_version < \"3.8\""} yarl = ">=1.0,<2.0" [package.extras] @@ -40,63 +38,15 @@ python-versions = ">=3.6" frozenlist = ">=1.1.0" [[package]] -name = "alabaster" -version = "0.7.12" -description = "A configurable sidebar-enabled Sphinx theme" -category = "dev" -optional = false -python-versions = "*" - -[[package]] -name = "appnope" -version = "0.1.3" -description = "Disable App Nap on macOS >= 10.9" -category = "dev" -optional = false -python-versions = "*" - -[[package]] -name = "argon2-cffi" -version = "21.3.0" -description = "The secure Argon2 password hashing algorithm." -category = "dev" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -argon2-cffi-bindings = "*" -typing-extensions = {version = "*", markers = "python_version < \"3.8\""} - -[package.extras] -dev = ["pre-commit", "cogapp", "tomli", "coverage[toml] (>=5.0.2)", "hypothesis", "pytest", "sphinx", "sphinx-notfound-page", "furo"] -docs = ["sphinx", "sphinx-notfound-page", "furo"] -tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pytest"] - -[[package]] -name = "argon2-cffi-bindings" -version = "21.2.0" -description = "Low-level CFFI bindings for Argon2" -category = "dev" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -cffi = ">=1.0.1" - -[package.extras] -dev = ["pytest", "cogapp", "pre-commit", "wheel"] -tests = ["pytest"] - -[[package]] -name = "asteroid-sphinx-theme" -version = "0.0.3" -description = "Asteroid: Sphinx Theme" +name = "astunparse" +version = "1.6.3" +description = "An AST unparser for Python" category = "dev" optional = false python-versions = "*" [package.dependencies] -sphinx = "*" +six = ">=1.6.1,<2.0" [[package]] name = "async-timeout" @@ -106,20 +56,9 @@ category = "main" optional = true python-versions = ">=3.6" -[package.dependencies] -typing-extensions = {version = ">=3.6.5", markers = "python_version < \"3.8\""} - -[[package]] -name = "asynctest" -version = "0.13.0" -description = "Enhance the standard unittest package with features for testing asyncio libraries" -category = "main" -optional = true -python-versions = ">=3.5" - [[package]] name = "atomicwrites" -version = "1.4.0" +version = "1.4.1" description = "Atomic file writes." category = "dev" optional = false @@ -127,36 +66,17 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" [[package]] name = "attrs" -version = "21.4.0" +version = "22.1.0" description = "Classes Without Boilerplate" category = "main" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +python-versions = ">=3.5" [package.extras] -dev = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "furo", "sphinx", "sphinx-notfound-page", "pre-commit", "cloudpickle"] +dev = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "mypy (>=0.900,!=0.940)", "pytest-mypy-plugins", "zope.interface", "furo", "sphinx", "sphinx-notfound-page", "pre-commit", "cloudpickle"] docs = ["furo", "sphinx", "zope.interface", "sphinx-notfound-page"] -tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "cloudpickle"] -tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "cloudpickle"] - -[[package]] -name = "babel" -version = "2.10.3" -description = "Internationalization utilities" -category = "dev" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -pytz = ">=2015.7" - -[[package]] -name = "backcall" -version = "0.2.0" -description = "Specifications for callback functions passed in to an API" -category = "dev" -optional = false -python-versions = "*" +tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "mypy (>=0.900,!=0.940)", "pytest-mypy-plugins", "zope.interface", "cloudpickle"] +tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "mypy (>=0.900,!=0.940)", "pytest-mypy-plugins", "cloudpickle"] [[package]] name = "bandit" @@ -194,25 +114,28 @@ lxml = ["lxml"] [[package]] name = "black" -version = "22.6.0" +version = "21.12b0" description = "The uncompromising code formatter." category = "dev" optional = false python-versions = ">=3.6.2" [package.dependencies] -click = ">=8.0.0" +click = ">=7.1.2" mypy-extensions = ">=0.4.3" -pathspec = ">=0.9.0" +pathspec = ">=0.9.0,<1" platformdirs = ">=2" -tomli = {version = ">=1.1.0", markers = "python_full_version < \"3.11.0a7\""} -typed-ast = {version = ">=1.4.2", markers = "python_version < \"3.8\" and implementation_name == \"cpython\""} -typing-extensions = {version = ">=3.10.0.0", markers = "python_version < \"3.10\""} +tomli = ">=0.2.6,<2.0.0" +typing-extensions = [ + {version = ">=3.10.0.0", markers = "python_version < \"3.10\""}, + {version = "!=3.10.0.1", markers = "python_version >= \"3.10\""}, +] [package.extras] colorama = ["colorama (>=0.4.3)"] d = ["aiohttp (>=3.7.4)"] jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"] +python2 = ["typed-ast (>=1.4.3)"] uvloop = ["uvloop (>=0.15.2)"] [[package]] @@ -241,7 +164,7 @@ python-versions = "~=3.7" [[package]] name = "certifi" -version = "2022.6.15" +version = "2022.9.24" description = "Python package for providing Mozilla's CA Bundle." category = "main" optional = false @@ -260,7 +183,7 @@ pycparser = "*" [[package]] name = "charset-normalizer" -version = "2.1.0" +version = "2.1.1" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." category = "main" optional = false @@ -279,7 +202,6 @@ python-versions = ">=3.7" [package.dependencies] colorama = {version = "*", markers = "platform_system == \"Windows\""} -importlib-metadata = {version = "*", markers = "python_version < \"3.8\""} [[package]] name = "colorama" @@ -290,19 +212,26 @@ optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" [[package]] -name = "commonmark" -version = "0.9.1" -description = "Python parser for the CommonMark Markdown spec" -category = "dev" +name = "contourpy" +version = "1.0.5" +description = "Python library for calculating contours of 2D quadrilateral grids" +category = "main" optional = false -python-versions = "*" +python-versions = ">=3.7" + +[package.dependencies] +numpy = ">=1.16" [package.extras] -test = ["hypothesis (==3.55.3)", "flake8 (==3.7.8)"] +test-no-codebase = ["pillow", "matplotlib", "pytest"] +test-minimal = ["pytest"] +test = ["isort", "flake8", "pillow", "matplotlib", "pytest"] +docs = ["sphinx-rtd-theme", "sphinx", "docutils (<0.18)"] +bokeh = ["selenium", "bokeh"] [[package]] name = "coverage" -version = "6.4.1" +version = "6.5.0" description = "Code coverage measurement for Python" category = "dev" optional = false @@ -332,7 +261,6 @@ aiohttp = "*" dill = "*" fsspec = {version = ">=2021.05.0", extras = ["http"]} huggingface-hub = ">=0.1.0,<1.0.0" -importlib-metadata = {version = "*", markers = "python_version < \"3.8\""} multiprocess = "*" numpy = ">=1.17" packaging = "*" @@ -347,32 +275,16 @@ xxhash = "*" apache-beam = ["apache-beam (>=2.26.0)"] audio = ["librosa"] benchmarks = ["numpy (==1.18.5)", "tensorflow (==2.3.0)", "torch (==1.6.0)", "transformers (==3.0.2)"] -dev = ["absl-py", "pytest", "pytest-datadir", "pytest-xdist", "apache-beam (>=2.26.0)", "elasticsearch (<8.0.0)", "aiobotocore", "boto3", "botocore", "faiss-cpu (>=1.6.4)", "fsspec", "moto[s3,server] (==2.0.4)", "rarfile (>=4.0)", "s3fs (==2021.08.1)", "tensorflow (>=2.3,!=2.6.0,!=2.6.1)", "torch", "torchaudio", "soundfile", "transformers", "bs4", "conllu", "h5py", "langdetect", "lxml", "mwparserfromhell", "nltk", "openpyxl", "py7zr", "tldextract", "zstandard", "bert-score (>=0.3.6)", "rouge-score", "sacrebleu", "scipy", "seqeval", "scikit-learn", "jiwer", "sentencepiece", "torchmetrics (==0.6.0)", "mauve-text", "toml (>=0.10.1)", "requests-file (>=1.5.1)", "tldextract (>=3.1.0)", "texttable (>=1.6.3)", "Werkzeug (>=1.0.1)", "six (>=1.15.0,<1.16.0)", "Pillow (>=6.2.1)", "librosa", "wget (>=3.2)", "pytorch-nlp (==0.5.0)", "pytorch-lightning", "fastBPE (==0.1.0)", "fairseq", "black (>=22.0,<23.0)", "flake8 (>=3.8.3)", "isort (>=5.0.0)", "pyyaml (>=5.3.1)", "importlib-resources"] +dev = ["absl-py", "pytest", "pytest-datadir", "pytest-xdist", "apache-beam (>=2.26.0)", "elasticsearch (<8.0.0)", "aiobotocore", "boto3", "botocore", "faiss-cpu (>=1.6.4)", "fsspec", "moto[server,s3] (==2.0.4)", "rarfile (>=4.0)", "s3fs (==2021.08.1)", "tensorflow (>=2.3,!=2.6.0,!=2.6.1)", "torch", "torchaudio", "soundfile", "transformers", "bs4", "conllu", "h5py", "langdetect", "lxml", "mwparserfromhell", "nltk", "openpyxl", "py7zr", "tldextract", "zstandard", "bert-score (>=0.3.6)", "rouge-score", "sacrebleu", "scipy", "seqeval", "scikit-learn", "jiwer", "sentencepiece", "torchmetrics (==0.6.0)", "mauve-text", "toml (>=0.10.1)", "requests-file (>=1.5.1)", "tldextract (>=3.1.0)", "texttable (>=1.6.3)", "Werkzeug (>=1.0.1)", "six (>=1.15.0,<1.16.0)", "Pillow (>=6.2.1)", "librosa", "wget (>=3.2)", "pytorch-nlp (==0.5.0)", "pytorch-lightning", "fastBPE (==0.1.0)", "fairseq", "black (>=22.0,<23.0)", "flake8 (>=3.8.3)", "isort (>=5.0.0)", "pyyaml (>=5.3.1)", "importlib-resources"] docs = ["docutils (==0.16.0)", "recommonmark", "sphinx (==3.1.2)", "sphinx-markdown-tables", "sphinx-rtd-theme (==0.4.3)", "sphinxext-opengraph (==0.4.1)", "sphinx-copybutton", "fsspec (<2021.9.0)", "s3fs", "sphinx-panels", "sphinx-inline-tabs", "myst-parser", "Markdown (!=3.3.5)"] quality = ["black (>=22.0,<23.0)", "flake8 (>=3.8.3)", "isort (>=5.0.0)", "pyyaml (>=5.3.1)"] s3 = ["fsspec", "boto3", "botocore", "s3fs"] tensorflow = ["tensorflow (>=2.2.0,!=2.6.0,!=2.6.1)"] tensorflow_gpu = ["tensorflow-gpu (>=2.2.0,!=2.6.0,!=2.6.1)"] -tests = ["absl-py", "pytest", "pytest-datadir", "pytest-xdist", "apache-beam (>=2.26.0)", "elasticsearch (<8.0.0)", "aiobotocore", "boto3", "botocore", "faiss-cpu (>=1.6.4)", "fsspec", "moto[s3,server] (==2.0.4)", "rarfile (>=4.0)", "s3fs (==2021.08.1)", "tensorflow (>=2.3,!=2.6.0,!=2.6.1)", "torch", "torchaudio", "soundfile", "transformers", "bs4", "conllu", "h5py", "langdetect", "lxml", "mwparserfromhell", "nltk", "openpyxl", "py7zr", "tldextract", "zstandard", "bert-score (>=0.3.6)", "rouge-score", "sacrebleu", "scipy", "seqeval", "scikit-learn", "jiwer", "sentencepiece", "torchmetrics (==0.6.0)", "mauve-text", "toml (>=0.10.1)", "requests-file (>=1.5.1)", "tldextract (>=3.1.0)", "texttable (>=1.6.3)", "Werkzeug (>=1.0.1)", "six (>=1.15.0,<1.16.0)", "Pillow (>=6.2.1)", "librosa", "wget (>=3.2)", "pytorch-nlp (==0.5.0)", "pytorch-lightning", "fastBPE (==0.1.0)", "fairseq", "importlib-resources"] +tests = ["absl-py", "pytest", "pytest-datadir", "pytest-xdist", "apache-beam (>=2.26.0)", "elasticsearch (<8.0.0)", "aiobotocore", "boto3", "botocore", "faiss-cpu (>=1.6.4)", "fsspec", "moto[server,s3] (==2.0.4)", "rarfile (>=4.0)", "s3fs (==2021.08.1)", "tensorflow (>=2.3,!=2.6.0,!=2.6.1)", "torch", "torchaudio", "soundfile", "transformers", "bs4", "conllu", "h5py", "langdetect", "lxml", "mwparserfromhell", "nltk", "openpyxl", "py7zr", "tldextract", "zstandard", "bert-score (>=0.3.6)", "rouge-score", "sacrebleu", "scipy", "seqeval", "scikit-learn", "jiwer", "sentencepiece", "torchmetrics (==0.6.0)", "mauve-text", "toml (>=0.10.1)", "requests-file (>=1.5.1)", "tldextract (>=3.1.0)", "texttable (>=1.6.3)", "Werkzeug (>=1.0.1)", "six (>=1.15.0,<1.16.0)", "Pillow (>=6.2.1)", "librosa", "wget (>=3.2)", "pytorch-nlp (==0.5.0)", "pytorch-lightning", "fastBPE (==0.1.0)", "fairseq", "importlib-resources"] torch = ["torch"] vision = ["Pillow (>=6.2.1)"] -[[package]] -name = "debugpy" -version = "1.6.0" -description = "An implementation of the Debug Adapter Protocol for Python" -category = "dev" -optional = false -python-versions = ">=3.7" - -[[package]] -name = "decorator" -version = "5.1.1" -description = "Decorators for Humans" -category = "dev" -optional = false -python-versions = ">=3.5" - [[package]] name = "defusedxml" version = "0.7.1" @@ -418,7 +330,7 @@ python-versions = ">=3.6" [[package]] name = "fastjsonschema" -version = "2.15.3" +version = "2.16.2" description = "Fastest Python implementation of JSON schema" category = "dev" optional = false @@ -429,15 +341,15 @@ devel = ["colorama", "jsonschema", "json-spec", "pylint", "pytest", "pytest-benc [[package]] name = "filelock" -version = "3.7.1" +version = "3.8.0" description = "A platform independent file lock." category = "main" optional = true python-versions = ">=3.7" [package.extras] -docs = ["furo (>=2021.8.17b43)", "sphinx (>=4.1)", "sphinx-autodoc-typehints (>=1.12)"] -testing = ["covdefaults (>=1.2.0)", "coverage (>=4)", "pytest (>=4)", "pytest-cov", "pytest-timeout (>=1.4.2)"] +docs = ["furo (>=2022.6.21)", "sphinx (>=5.1.1)", "sphinx-autodoc-typehints (>=1.19.1)"] +testing = ["covdefaults (>=2.2)", "coverage (>=6.4.2)", "pytest (>=7.1.2)", "pytest-cov (>=3)", "pytest-timeout (>=2.1)"] [[package]] name = "flake8" @@ -448,14 +360,13 @@ optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" [package.dependencies] -importlib-metadata = {version = "*", markers = "python_version < \"3.8\""} mccabe = ">=0.6.0,<0.7.0" pycodestyle = ">=2.7.0,<2.8.0" pyflakes = ">=2.3.0,<2.4.0" [[package]] name = "fonttools" -version = "4.33.3" +version = "4.37.4" description = "Tools to manipulate font files" category = "main" optional = false @@ -477,7 +388,7 @@ woff = ["zopfli (>=0.1.4)", "brotlicffi (>=0.8.0)", "brotli (>=1.0.1)"] [[package]] name = "frozenlist" -version = "1.3.0" +version = "1.3.1" description = "A list-like structure which implements collections.abc.MutableSequence" category = "main" optional = true @@ -518,6 +429,20 @@ smb = ["smbprotocol"] ssh = ["paramiko"] tqdm = ["tqdm"] +[[package]] +name = "ghp-import" +version = "2.1.0" +description = "Copy your docs directly to the gh-pages branch." +category = "main" +optional = false +python-versions = "*" + +[package.dependencies] +python-dateutil = ">=2.8.1" + +[package.extras] +dev = ["wheel", "flake8", "markdown", "twine"] + [[package]] name = "gitdb" version = "4.0.9" @@ -531,7 +456,7 @@ smmap = ">=3.0.1,<6" [[package]] name = "gitpython" -version = "3.1.27" +version = "3.1.28" description = "GitPython is a python library used to interact with Git repositories" category = "dev" optional = false @@ -539,11 +464,10 @@ python-versions = ">=3.7" [package.dependencies] gitdb = ">=4.0.1,<5" -typing-extensions = {version = ">=3.7.4.3", markers = "python_version < \"3.8\""} [[package]] name = "google-auth" -version = "2.9.0" +version = "2.12.0" description = "Google Authentication Library" category = "main" optional = true @@ -576,19 +500,30 @@ requests-oauthlib = ">=0.7.0" [package.extras] tool = ["click (>=6.0.0)"] +[[package]] +name = "griffe" +version = "0.22.2" +description = "Signatures for entire Python programs. Extract the structure, the frame, the skeleton of your project, to generate API documentation or find breaking changes in your API." +category = "dev" +optional = false +python-versions = ">=3.7" + +[package.extras] +async = ["aiofiles (>=0.7,<1.0)"] + [[package]] name = "grpcio" -version = "1.47.0" +version = "1.49.1" description = "HTTP/2-based RPC framework" category = "main" optional = true -python-versions = ">=3.6" +python-versions = ">=3.7" [package.dependencies] six = ">=1.5.2" [package.extras] -protobuf = ["grpcio-tools (>=1.47.0)"] +protobuf = ["grpcio-tools (>=1.49.1)"] [[package]] name = "h5py" @@ -603,7 +538,7 @@ numpy = ">=1.14.5" [[package]] name = "huggingface-hub" -version = "0.8.1" +version = "0.10.0" description = "Client library to download and publish models, datasets and other repos on the huggingface.co hub" category = "main" optional = true @@ -611,7 +546,6 @@ python-versions = ">=3.7.0" [package.dependencies] filelock = "*" -importlib-metadata = {version = "*", markers = "python_version < \"3.8\""} packaging = ">=20.9" pyyaml = ">=5.1" requests = "*" @@ -619,13 +553,14 @@ tqdm = "*" typing-extensions = ">=3.7.4.3" [package.extras] -all = ["pytest", "pytest-cov", "datasets", "soundfile", "black (>=22.0,<23.0)", "isort (>=5.5.4)", "flake8 (>=3.8.3)"] -dev = ["pytest", "pytest-cov", "datasets", "soundfile", "black (>=22.0,<23.0)", "isort (>=5.5.4)", "flake8 (>=3.8.3)"] -fastai = ["toml", "fastai (>=2.4)", "fastcore (>=1.3.27)"] -quality = ["black (>=22.0,<23.0)", "isort (>=5.5.4)", "flake8 (>=3.8.3)"] -tensorflow = ["tensorflow", "pydot", "graphviz"] -testing = ["pytest", "pytest-cov", "datasets", "soundfile"] torch = ["torch"] +testing = ["soundfile", "pytest-cov", "pytest", "jinja2", "jedi", "isort (>=5.5.4)", "InquirerPy (==0.3.4)"] +tensorflow = ["graphviz", "pydot", "tensorflow"] +quality = ["mypy", "isort (>=5.5.4)", "flake8-bugbear", "flake8 (>=3.8.3)", "black (==22.3)"] +fastai = ["fastcore (>=1.3.27)", "fastai (>=2.4)", "toml"] +dev = ["mypy", "flake8-bugbear", "flake8 (>=3.8.3)", "black (==22.3)", "soundfile", "pytest-cov", "pytest", "jinja2", "jedi", "isort (>=5.5.4)", "InquirerPy (==0.3.4)"] +cli = ["InquirerPy (==0.3.4)"] +all = ["mypy", "flake8-bugbear", "flake8 (>=3.8.3)", "black (==22.3)", "soundfile", "pytest-cov", "pytest", "jinja2", "jedi", "isort (>=5.5.4)", "InquirerPy (==0.3.4)"] [[package]] name = "hypothesis" @@ -651,40 +586,31 @@ pytz = ["pytz (>=2014.1)"] [[package]] name = "idna" -version = "3.3" +version = "3.4" description = "Internationalized Domain Names in Applications (IDNA)" category = "main" optional = false python-versions = ">=3.5" -[[package]] -name = "imagesize" -version = "1.4.1" -description = "Getting image size from png/jpeg/jpeg2000/gif file" -category = "dev" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" - [[package]] name = "importlib-metadata" -version = "4.12.0" +version = "5.0.0" description = "Read metadata from Python packages" category = "main" optional = false python-versions = ">=3.7" [package.dependencies] -typing-extensions = {version = ">=3.6.4", markers = "python_version < \"3.8\""} zipp = ">=0.5" [package.extras] -docs = ["sphinx", "jaraco.packaging (>=9)", "rst.linker (>=1.9)"] +docs = ["sphinx (>=3.5)", "jaraco.packaging (>=9)", "rst.linker (>=1.9)", "furo", "jaraco.tidelift (>=1.4)"] perf = ["ipython"] -testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.3)", "packaging", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)", "importlib-resources (>=1.3)"] +testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "flake8 (<5)", "pytest-cov", "pytest-enabler (>=1.3)", "packaging", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)", "importlib-resources (>=1.3)"] [[package]] name = "importlib-resources" -version = "5.8.0" +version = "5.10.0" description = "Read resources from Python packages" category = "dev" optional = false @@ -694,8 +620,8 @@ python-versions = ">=3.7" zipp = {version = ">=3.1.0", markers = "python_version < \"3.10\""} [package.extras] -docs = ["sphinx", "jaraco.packaging (>=9)", "rst.linker (>=1.9)"] -testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)"] +docs = ["sphinx (>=3.5)", "jaraco.packaging (>=9)", "rst.linker (>=1.9)", "furo", "jaraco.tidelift (>=1.4)"] +testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "flake8 (<5)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)"] [[package]] name = "iniconfig" @@ -705,109 +631,11 @@ category = "dev" optional = false python-versions = "*" -[[package]] -name = "ipykernel" -version = "6.15.0" -description = "IPython Kernel for Jupyter" -category = "dev" -optional = false -python-versions = ">=3.7" - -[package.dependencies] -appnope = {version = "*", markers = "platform_system == \"Darwin\""} -debugpy = ">=1.0" -ipython = ">=7.23.1" -jupyter-client = ">=6.1.12" -matplotlib-inline = ">=0.1" -nest-asyncio = "*" -packaging = "*" -psutil = "*" -pyzmq = ">=17" -tornado = ">=6.1" -traitlets = ">=5.1.0" - -[package.extras] -test = ["flaky", "ipyparallel", "pre-commit", "pytest-cov", "pytest-timeout", "pytest (>=6.0)"] - -[[package]] -name = "ipython" -version = "7.34.0" -description = "IPython: Productive Interactive Computing" -category = "dev" -optional = false -python-versions = ">=3.7" - -[package.dependencies] -appnope = {version = "*", markers = "sys_platform == \"darwin\""} -backcall = "*" -colorama = {version = "*", markers = "sys_platform == \"win32\""} -decorator = "*" -jedi = ">=0.16" -matplotlib-inline = "*" -pexpect = {version = ">4.3", markers = "sys_platform != \"win32\""} -pickleshare = "*" -prompt-toolkit = ">=2.0.0,<3.0.0 || >3.0.0,<3.0.1 || >3.0.1,<3.1.0" -pygments = "*" -traitlets = ">=4.2" - -[package.extras] -all = ["Sphinx (>=1.3)", "ipykernel", "ipyparallel", "ipywidgets", "nbconvert", "nbformat", "nose (>=0.10.1)", "notebook", "numpy (>=1.17)", "pygments", "qtconsole", "requests", "testpath"] -doc = ["Sphinx (>=1.3)"] -kernel = ["ipykernel"] -nbconvert = ["nbconvert"] -nbformat = ["nbformat"] -notebook = ["notebook", "ipywidgets"] -parallel = ["ipyparallel"] -qtconsole = ["qtconsole"] -test = ["nose (>=0.10.1)", "requests", "testpath", "pygments", "nbformat", "ipykernel", "numpy (>=1.17)"] - -[[package]] -name = "ipython-genutils" -version = "0.2.0" -description = "Vestigial utilities from IPython" -category = "dev" -optional = false -python-versions = "*" - -[[package]] -name = "ipywidgets" -version = "7.7.1" -description = "IPython HTML widgets for Jupyter" -category = "dev" -optional = false -python-versions = "*" - -[package.dependencies] -ipykernel = ">=4.5.1" -ipython = {version = ">=4.0.0", markers = "python_version >= \"3.3\""} -ipython-genutils = ">=0.2.0,<0.3.0" -jupyterlab-widgets = {version = ">=1.0.0", markers = "python_version >= \"3.6\""} -traitlets = ">=4.3.1" -widgetsnbextension = ">=3.6.0,<3.7.0" - -[package.extras] -test = ["pytest (>=3.6.0)", "pytest-cov", "mock"] - -[[package]] -name = "jedi" -version = "0.18.1" -description = "An autocompletion tool for Python that can be used for text editors." -category = "dev" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -parso = ">=0.8.0,<0.9.0" - -[package.extras] -qa = ["flake8 (==3.8.3)", "mypy (==0.782)"] -testing = ["Django (<3.1)", "colorama", "docopt", "pytest (<7.0.0)"] - [[package]] name = "jinja2" version = "3.1.2" description = "A very fast and expressive template engine." -category = "dev" +category = "main" optional = false python-versions = ">=3.7" @@ -819,15 +647,15 @@ i18n = ["Babel (>=2.7)"] [[package]] name = "joblib" -version = "1.1.0" +version = "1.2.0" description = "Lightweight pipelining with Python functions" category = "main" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" [[package]] name = "jsonargparse" -version = "4.15.0" +version = "4.15.1" description = "Parsing of command line options, yaml/jsonnet config files and/or environment variables based on argparse." category = "main" optional = true @@ -859,7 +687,7 @@ urls = ["validators (>=0.14.2)", "requests (>=2.18.4)"] [[package]] name = "jsonschema" -version = "4.6.1" +version = "4.16.0" description = "An implementation of JSON Schema validation for Python" category = "dev" optional = false @@ -867,10 +695,9 @@ python-versions = ">=3.7" [package.dependencies] attrs = ">=17.4.0" -importlib-metadata = {version = "*", markers = "python_version < \"3.8\""} importlib-resources = {version = ">=1.4.0", markers = "python_version < \"3.9\""} +pkgutil-resolve-name = {version = ">=1.3.10", markers = "python_version < \"3.9\""} pyrsistent = ">=0.14.0,<0.17.0 || >0.17.0,<0.17.1 || >0.17.1,<0.17.2 || >0.17.2" -typing-extensions = {version = "*", markers = "python_version < \"3.8\""} [package.extras] format = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3987", "uri-template", "webcolors (>=1.11)"] @@ -878,7 +705,7 @@ format-nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339- [[package]] name = "jupyter-client" -version = "7.3.4" +version = "7.3.5" description = "Jupyter protocol implementation and client libraries" category = "dev" optional = false @@ -890,7 +717,7 @@ jupyter-core = ">=4.9.2" nest-asyncio = ">=1.5.4" python-dateutil = ">=2.8.2" pyzmq = ">=23.0" -tornado = ">=6.0" +tornado = ">=6.2" traitlets = "*" [package.extras] @@ -899,7 +726,7 @@ test = ["codecov", "coverage", "ipykernel (>=6.5)", "ipython", "mypy", "pre-comm [[package]] name = "jupyter-core" -version = "4.10.0" +version = "4.11.1" description = "Jupyter core package. A base package on which Jupyter projects rely." category = "dev" optional = false @@ -912,21 +739,6 @@ traitlets = "*" [package.extras] test = ["ipykernel", "pre-commit", "pytest", "pytest-cov", "pytest-timeout"] -[[package]] -name = "jupyter-sphinx" -version = "0.3.2" -description = "Jupyter Sphinx Extensions" -category = "dev" -optional = false -python-versions = ">= 3.6" - -[package.dependencies] -IPython = "*" -ipywidgets = ">=7.0.0" -nbconvert = ">=5.5" -nbformat = "*" -Sphinx = ">=2" - [[package]] name = "jupyterlab-pygments" version = "0.2.2" @@ -936,24 +748,32 @@ optional = false python-versions = ">=3.7" [[package]] -name = "jupyterlab-widgets" -version = "1.1.1" -description = "A JupyterLab extension." +name = "jupytext" +version = "1.14.1" +description = "Jupyter notebooks as Markdown documents, Julia, Python or R scripts" category = "dev" optional = false -python-versions = ">=3.6" +python-versions = "~=3.6" + +[package.dependencies] +markdown-it-py = ">=1.0.0,<3.0.0" +mdit-py-plugins = "*" +nbformat = "*" +pyyaml = "*" +toml = "*" + +[package.extras] +rst2md = ["sphinx-gallery (>=0.7.0,<0.8.0)"] +toml = ["toml"] [[package]] name = "kiwisolver" -version = "1.4.3" +version = "1.4.4" description = "A fast implementation of the Cassowary constraint solver" category = "main" optional = false python-versions = ">=3.7" -[package.dependencies] -typing-extensions = {version = "*", markers = "python_version < \"3.8\""} - [[package]] name = "lightning-flash" version = "0.7.5" @@ -993,12 +813,26 @@ video = ["kornia (>=0.5.1)", "pytorchvideo (==0.1.2)", "torchvision", "Pillow (> video_extras = ["pytorchvideo (==0.1.2)", "kornia (>=0.5.1)", "Pillow (>=7.2)", "torchvision", "fiftyone"] vision = ["segmentation-models-pytorch", "pytorchvideo (==0.1.2)", "kornia (>=0.5.1)", "timm (>=0.4.5)", "Pillow (>=7.2)", "lightning-bolts (>=0.3.3)", "torchvision", "pystiche (>=1.0.0,<2.0.0)"] +[[package]] +name = "lxml" +version = "4.9.1" +description = "Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API." +category = "dev" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, != 3.4.*" + +[package.extras] +cssselect = ["cssselect (>=0.7)"] +html5 = ["html5lib"] +htmlsoup = ["beautifulsoup4"] +source = ["Cython (>=0.29.7)"] + [[package]] name = "markdown" version = "3.3.7" description = "Python implementation of Markdown." category = "main" -optional = true +optional = false python-versions = ">=3.6" [package.dependencies] @@ -1007,51 +841,94 @@ importlib-metadata = {version = ">=4.4", markers = "python_version < \"3.10\""} [package.extras] testing = ["coverage", "pyyaml"] +[[package]] +name = "markdown-it-py" +version = "2.1.0" +description = "Python port of markdown-it. Markdown parsing, done right!" +category = "dev" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +mdurl = ">=0.1,<1.0" + +[package.extras] +testing = ["pytest-regressions", "pytest-cov", "pytest", "coverage"] +rtd = ["sphinx-book-theme", "sphinx-design", "sphinx-copybutton", "sphinx", "pyyaml", "myst-parser", "attrs"] +profiling = ["gprof2dot"] +plugins = ["mdit-py-plugins"] +linkify = ["linkify-it-py (>=1.0,<2.0)"] +compare = ["panflute (>=2.1.3,<2.2.0)", "mistune (>=2.0.2,<2.1.0)", "mistletoe (>=0.8.1,<0.9.0)", "markdown (>=3.3.6,<3.4.0)", "commonmark (>=0.9.1,<0.10.0)"] +code_style = ["pre-commit (==2.6)"] +benchmarking = ["pytest-benchmark (>=3.2,<4.0)", "pytest", "psutil"] + [[package]] name = "markupsafe" version = "2.1.1" description = "Safely add untrusted strings to HTML/XML markup." -category = "dev" +category = "main" optional = false python-versions = ">=3.7" [[package]] name = "matplotlib" -version = "3.5.2" +version = "3.6.1" description = "Python plotting package" category = "main" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" [package.dependencies] +contourpy = ">=1.0.1" cycler = ">=0.10" fonttools = ">=4.22.0" kiwisolver = ">=1.0.1" -numpy = ">=1.17" +numpy = ">=1.19" packaging = ">=20.0" pillow = ">=6.2.0" pyparsing = ">=2.2.1" python-dateutil = ">=2.7" -setuptools_scm = ">=4" +setuptools_scm = ">=7" [[package]] -name = "matplotlib-inline" -version = "0.1.3" -description = "Inline Matplotlib backend for Jupyter" +name = "mccabe" +version = "0.6.1" +description = "McCabe checker, plugin for flake8" category = "dev" optional = false -python-versions = ">=3.5" +python-versions = "*" + +[[package]] +name = "mdit-py-plugins" +version = "0.3.1" +description = "Collection of plugins for markdown-it-py" +category = "dev" +optional = false +python-versions = ">=3.7" [package.dependencies] -traitlets = "*" +markdown-it-py = ">=1.0.0,<3.0.0" + +[package.extras] +testing = ["pytest-regressions", "pytest-cov", "pytest", "coverage"] +rtd = ["sphinx-book-theme (>=0.1.0,<0.2.0)", "myst-parser (>=0.16.1,<0.17.0)", "attrs"] +code_style = ["pre-commit"] [[package]] -name = "mccabe" -version = "0.6.1" -description = "McCabe checker, plugin for flake8" +name = "mdurl" +version = "0.1.2" +description = "Markdown URL utilities" category = "dev" optional = false -python-versions = "*" +python-versions = ">=3.7" + +[[package]] +name = "mergedeep" +version = "1.3.4" +description = "A deep merge function for 🐍." +category = "main" +optional = false +python-versions = ">=3.6" [[package]] name = "mistune" @@ -1061,6 +938,139 @@ category = "dev" optional = false python-versions = "*" +[[package]] +name = "mkdocs" +version = "1.4.0" +description = "Project documentation with Markdown." +category = "main" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +click = ">=7.0" +ghp-import = ">=1.0" +importlib-metadata = {version = ">=4.3", markers = "python_version < \"3.10\""} +Jinja2 = ">=2.11.1" +Markdown = ">=3.2.1,<3.4" +mergedeep = ">=1.3.4" +packaging = ">=20.5" +PyYAML = ">=5.1" +pyyaml-env-tag = ">=0.1" +watchdog = ">=2.0" + +[package.extras] +i18n = ["babel (>=2.9.0)"] + +[[package]] +name = "mkdocs-autorefs" +version = "0.4.1" +description = "Automatically link across pages in MkDocs." +category = "dev" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +Markdown = ">=3.3" +mkdocs = ">=1.1" + +[[package]] +name = "mkdocs-exclude-search" +version = "0.6.4" +description = "A mkdocs plugin that lets you exclude selected files or sections from the search index." +category = "main" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +mkdocs = ">=1.0.4" + +[[package]] +name = "mkdocs-jupyter" +version = "0.21.0" +description = "Use Jupyter in mkdocs websites" +category = "dev" +optional = false +python-versions = ">=3.7.1,<4" + +[package.dependencies] +jupytext = ">=1.13.8,<2.0.0" +mkdocs = ">=1.2.3,<2.0.0" +mkdocs-material = ">=8.0.0,<9.0.0" +nbconvert = ">=6.2.0,<7.0.0" +Pygments = ">=2.12.0,<3.0.0" + +[[package]] +name = "mkdocs-material" +version = "8.5.6" +description = "Documentation that simply works" +category = "dev" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +jinja2 = ">=3.0.2" +markdown = ">=3.2" +mkdocs = ">=1.4.0" +mkdocs-material-extensions = ">=1.0.3" +pygments = ">=2.12" +pymdown-extensions = ">=9.4" +requests = ">=2.26" + +[[package]] +name = "mkdocs-material-extensions" +version = "1.0.3" +description = "Extension pack for Python Markdown." +category = "dev" +optional = false +python-versions = ">=3.6" + +[[package]] +name = "mkdocstrings" +version = "0.18.1" +description = "Automatic documentation from sources, for MkDocs." +category = "dev" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +Jinja2 = ">=2.11.1" +Markdown = ">=3.3" +MarkupSafe = ">=1.1" +mkdocs = ">=1.2" +mkdocs-autorefs = ">=0.3.1" +mkdocstrings-python = {version = ">=0.5.2", optional = true, markers = "extra == \"python\""} +mkdocstrings-python-legacy = ">=0.2" +pymdown-extensions = ">=6.3" + +[package.extras] +crystal = ["mkdocstrings-crystal (>=0.3.4)"] +python = ["mkdocstrings-python (>=0.5.2)"] +python-legacy = ["mkdocstrings-python-legacy (>=0.2.1)"] + +[[package]] +name = "mkdocstrings-python" +version = "0.6.6" +description = "A Python handler for mkdocstrings." +category = "dev" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +griffe = ">=0.11.1" +mkdocstrings = ">=0.18" + +[[package]] +name = "mkdocstrings-python-legacy" +version = "0.2.2" +description = "A legacy Python handler for mkdocstrings." +category = "dev" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +mkdocstrings = ">=0.18" +pytkdocs = ">=0.14" + [[package]] name = "multidict" version = "6.0.2" @@ -1091,7 +1101,6 @@ python-versions = ">=3.5" [package.dependencies] mypy-extensions = ">=0.4.3,<0.5.0" toml = "*" -typed-ast = {version = ">=1.4.0,<1.5.0", markers = "python_version < \"3.8\""} typing-extensions = ">=3.7.4" [package.extras] @@ -1108,7 +1117,7 @@ python-versions = "*" [[package]] name = "nbclient" -version = "0.6.6" +version = "0.7.0" description = "A client library for executing notebooks. Formerly nbconvert's ExecutePreprocessor." category = "dev" optional = false @@ -1121,12 +1130,12 @@ nest-asyncio = "*" traitlets = ">=5.2.2" [package.extras] -sphinx = ["autodoc-traits", "mock", "moto", "myst-parser", "Sphinx (>=1.7)", "sphinx-book-theme"] -test = ["black", "check-manifest", "flake8", "ipykernel", "ipython (<8.0.0)", "ipywidgets (<8.0.0)", "mypy", "pip (>=18.1)", "pre-commit", "pytest (>=4.1)", "pytest-asyncio", "pytest-cov (>=2.6.1)", "setuptools (>=60.0)", "testpath", "twine (>=1.11.0)", "xmltodict"] +test = ["xmltodict", "twine (>=1.11.0)", "testpath", "setuptools (>=60.0)", "pytest-cov (>=2.6.1)", "pytest-asyncio", "pytest (>=4.1)", "pre-commit", "pip (>=18.1)", "nbconvert", "mypy", "ipywidgets", "ipython", "ipykernel", "flake8", "check-manifest", "black"] +sphinx = ["sphinx-book-theme", "Sphinx (>=1.7)", "myst-parser", "moto", "mock", "autodoc-traits"] [[package]] name = "nbconvert" -version = "6.5.0" +version = "6.5.4" description = "Converting Jupyter Notebooks" category = "dev" optional = false @@ -1140,6 +1149,7 @@ entrypoints = ">=0.2.2" jinja2 = ">=3.0" jupyter-core = ">=4.7" jupyterlab-pygments = "*" +lxml = "*" MarkupSafe = ">=2.0" mistune = ">=0.8.1,<2" nbclient = ">=0.5.0" @@ -1159,7 +1169,7 @@ webpdf = ["pyppeteer (>=1,<1.1)"] [[package]] name = "nbformat" -version = "5.4.0" +version = "5.6.1" description = "The Jupyter Notebook format" category = "dev" optional = false @@ -1172,88 +1182,27 @@ jupyter-core = "*" traitlets = ">=5.1" [package.extras] -test = ["check-manifest", "testpath", "pytest", "pre-commit"] - -[[package]] -name = "nbsphinx" -version = "0.8.9" -description = "Jupyter Notebook Tools for Sphinx" -category = "dev" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -docutils = "*" -jinja2 = "*" -nbconvert = "!=5.4" -nbformat = "*" -sphinx = ">=1.8" -traitlets = ">=5" +test = ["check-manifest", "pep440", "pre-commit", "pytest", "testpath"] [[package]] name = "nest-asyncio" -version = "1.5.5" +version = "1.5.6" description = "Patch asyncio to allow nested event loops" category = "dev" optional = false python-versions = ">=3.5" -[[package]] -name = "notebook" -version = "6.4.12" -description = "A web-based notebook environment for interactive computing" -category = "dev" -optional = false -python-versions = ">=3.7" - -[package.dependencies] -argon2-cffi = "*" -ipykernel = "*" -ipython-genutils = "*" -jinja2 = "*" -jupyter-client = ">=5.3.4" -jupyter-core = ">=4.6.1" -nbconvert = ">=5" -nbformat = "*" -nest-asyncio = ">=1.5" -prometheus-client = "*" -pyzmq = ">=17" -Send2Trash = ">=1.8.0" -terminado = ">=0.8.3" -tornado = ">=6.1" -traitlets = ">=4.2.1" - -[package.extras] -docs = ["sphinx", "nbsphinx", "sphinxcontrib-github-alt", "sphinx-rtd-theme", "myst-parser"] -json-logging = ["json-logging"] -test = ["pytest", "coverage", "requests", "testpath", "nbval", "selenium", "pytest-cov", "requests-unixsocket"] - [[package]] name = "numpy" -version = "1.21.6" +version = "1.23.3" description = "NumPy is the fundamental package for array computing with Python." category = "main" optional = false -python-versions = ">=3.7,<3.11" - -[[package]] -name = "numpydoc" -version = "1.4.0" -description = "Sphinx extension to support docstrings in Numpy format" -category = "dev" -optional = false -python-versions = ">=3.7" - -[package.dependencies] -Jinja2 = ">=2.10" -sphinx = ">=3.0" - -[package.extras] -testing = ["matplotlib", "pytest-cov", "pytest"] +python-versions = ">=3.8" [[package]] name = "oauthlib" -version = "3.2.0" +version = "3.2.1" description = "A generic, spec-compliant, thorough implementation of the OAuth request-signing logic" category = "main" optional = true @@ -1277,19 +1226,22 @@ pyparsing = ">=2.0.2,<3.0.5 || >3.0.5" [[package]] name = "pandas" -version = "1.1.5" +version = "1.5.0" description = "Powerful data structures for data analysis, time series, and statistics" category = "main" optional = true -python-versions = ">=3.6.1" +python-versions = ">=3.8" [package.dependencies] -numpy = ">=1.15.4" -python-dateutil = ">=2.7.3" -pytz = ">=2017.2" +numpy = [ + {version = ">=1.21.0", markers = "python_version >= \"3.10\""}, + {version = ">=1.20.3", markers = "python_version < \"3.10\""}, +] +python-dateutil = ">=2.8.1" +pytz = ">=2020.1" [package.extras] -test = ["pytest (>=4.0.2)", "pytest-xdist", "hypothesis (>=3.58)"] +test = ["pytest-xdist (>=1.31)", "pytest (>=6.0)", "hypothesis (>=5.5.3)"] [[package]] name = "pandocfilters" @@ -1299,53 +1251,22 @@ category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -[[package]] -name = "parso" -version = "0.8.3" -description = "A Python Parser" -category = "dev" -optional = false -python-versions = ">=3.6" - -[package.extras] -qa = ["flake8 (==3.8.3)", "mypy (==0.782)"] -testing = ["docopt", "pytest (<6.0.0)"] - [[package]] name = "pathspec" -version = "0.9.0" +version = "0.10.1" description = "Utility library for gitignore style pattern matching of file paths." category = "dev" optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" +python-versions = ">=3.7" [[package]] name = "pbr" -version = "5.9.0" +version = "5.10.0" description = "Python Build Reasonableness" category = "dev" optional = false python-versions = ">=2.6" -[[package]] -name = "pexpect" -version = "4.8.0" -description = "Pexpect allows easy control of interactive console applications." -category = "dev" -optional = false -python-versions = "*" - -[package.dependencies] -ptyprocess = ">=0.5" - -[[package]] -name = "pickleshare" -version = "0.7.5" -description = "Tiny 'shelve'-like database with concurrency support" -category = "dev" -optional = false -python-versions = "*" - [[package]] name = "pillow" version = "9.2.0" @@ -1358,6 +1279,14 @@ python-versions = ">=3.7" docs = ["furo", "olefile", "sphinx (>=2.4)", "sphinx-copybutton", "sphinx-issues (>=3.0.1)", "sphinx-removed-in", "sphinxext-opengraph"] tests = ["check-manifest", "coverage", "defusedxml", "markdown2", "olefile", "packaging", "pyroma", "pytest", "pytest-cov", "pytest-timeout"] +[[package]] +name = "pkgutil-resolve-name" +version = "1.3.10" +description = "Resolve a name to an object." +category = "dev" +optional = false +python-versions = ">=3.6" + [[package]] name = "platformdirs" version = "2.5.2" @@ -1378,62 +1307,18 @@ category = "dev" optional = false python-versions = ">=3.6" -[package.dependencies] -importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""} - -[package.extras] -dev = ["pre-commit", "tox"] -testing = ["pytest", "pytest-benchmark"] - -[[package]] -name = "prometheus-client" -version = "0.14.1" -description = "Python client for the Prometheus monitoring system." -category = "dev" -optional = false -python-versions = ">=3.6" - [package.extras] -twisted = ["twisted"] - -[[package]] -name = "prompt-toolkit" -version = "3.0.30" -description = "Library for building powerful interactive command lines in Python" -category = "dev" -optional = false -python-versions = ">=3.6.2" - -[package.dependencies] -wcwidth = "*" +testing = ["pytest-benchmark", "pytest"] +dev = ["tox", "pre-commit"] [[package]] name = "protobuf" -version = "3.19.4" +version = "3.19.6" description = "Protocol Buffers" category = "main" optional = true python-versions = ">=3.5" -[[package]] -name = "psutil" -version = "5.9.1" -description = "Cross-platform lib for process and system monitoring in Python." -category = "dev" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" - -[package.extras] -test = ["ipaddress", "mock", "enum34", "pywin32", "wmi"] - -[[package]] -name = "ptyprocess" -version = "0.7.0" -description = "Run a subprocess in a pseudo terminal" -category = "dev" -optional = false -python-versions = "*" - [[package]] name = "py" version = "1.11.0" @@ -1444,7 +1329,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" [[package]] name = "pyarrow" -version = "8.0.0" +version = "9.0.0" description = "Python library for Apache Arrow" category = "main" optional = true @@ -1506,12 +1391,26 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" [[package]] name = "pygments" -version = "2.12.0" +version = "2.13.0" description = "Pygments is a syntax highlighting package written in Python." category = "dev" optional = false python-versions = ">=3.6" +[package.extras] +plugins = ["importlib-metadata"] + +[[package]] +name = "pymdown-extensions" +version = "9.6" +description = "Extension pack for Python Markdown." +category = "dev" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +markdown = ">=3.2" + [[package]] name = "pyparsing" version = "3.0.9" @@ -1543,7 +1442,6 @@ python-versions = ">=3.6" atomicwrites = {version = ">=1.0", markers = "sys_platform == \"win32\""} attrs = ">=19.2.0" colorama = {version = "*", markers = "sys_platform == \"win32\""} -importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""} iniconfig = "*" packaging = "*" pluggy = ">=0.12,<2.0" @@ -1571,7 +1469,7 @@ testing = ["fields", "hunter", "process-tests", "six", "pytest-xdist", "virtuale [[package]] name = "pytest-mock" -version = "3.8.1" +version = "3.10.0" description = "Thin-wrapper around the mock package for easier use with pytest" category = "dev" optional = false @@ -1594,9 +1492,23 @@ python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" [package.dependencies] six = ">=1.5" +[[package]] +name = "pytkdocs" +version = "0.16.1" +description = "Load Python objects documentation." +category = "dev" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +astunparse = {version = ">=1.6", markers = "python_version < \"3.9\""} + +[package.extras] +numpy-style = ["docstring_parser (>=0.7)"] + [[package]] name = "pytorch-lightning" -version = "1.6.4" +version = "1.7.7" description = "PyTorch Lightning is the lightweight PyTorch wrapper for ML researchers. Scale your models. Write less boilerplate." category = "main" optional = true @@ -1606,34 +1518,33 @@ python-versions = ">=3.7" fsspec = {version = ">=2021.05.0,<2021.06.0 || >2021.06.0", extras = ["http"]} numpy = ">=1.17.2" packaging = ">=17.0" -protobuf = "<=3.20.1" pyDeprecate = ">=0.3.1" PyYAML = ">=5.4" -tensorboard = ">=2.2.0" -torch = ">=1.8" -torchmetrics = ">=0.4.1" +tensorboard = ">=2.9.1" +torch = ">=1.9" +torchmetrics = ">=0.7.0" tqdm = ">=4.57.0" typing-extensions = ">=4.0.0" [package.extras] -all = ["matplotlib (>3.1)", "torchtext (>=0.9)", "omegaconf (>=2.0.5)", "hydra-core (>=1.0.5)", "jsonargparse[signatures] (>=4.7.1)", "gcsfs (>=2021.5.0)", "rich (>=10.2.2,<10.15.0 || >=10.16.0)", "neptune-client (>=0.10.0)", "comet-ml (>=3.1.12)", "mlflow (>=1.0.0)", "test-tube (>=0.7.5)", "wandb (>=0.8.21)", "coverage (>=6.4)", "codecov (>=2.1)", "pytest (>=6.0)", "pytest-rerunfailures (>=10.2)", "mypy (>=0.920)", "flake8 (>=3.9.2)", "pre-commit (>=1.0)", "pytest-forked", "cloudpickle (>=1.3)", "scikit-learn (>0.22.1)", "onnxruntime", "pandas", "torchvision (>=0.9)", "gym[classic_control] (>=0.17.0)", "ipython", "fairscale (>=0.4.5)", "deepspeed", "horovod (>=0.21.2,!=0.24.0)", "hivemind (>=1.0.1)"] -deepspeed = ["deepspeed"] -dev = ["matplotlib (>3.1)", "torchtext (>=0.9)", "omegaconf (>=2.0.5)", "hydra-core (>=1.0.5)", "jsonargparse[signatures] (>=4.7.1)", "gcsfs (>=2021.5.0)", "rich (>=10.2.2,<10.15.0 || >=10.16.0)", "neptune-client (>=0.10.0)", "comet-ml (>=3.1.12)", "mlflow (>=1.0.0)", "test-tube (>=0.7.5)", "wandb (>=0.8.21)", "coverage (>=6.4)", "codecov (>=2.1)", "pytest (>=6.0)", "pytest-rerunfailures (>=10.2)", "mypy (>=0.920)", "flake8 (>=3.9.2)", "pre-commit (>=1.0)", "pytest-forked", "cloudpickle (>=1.3)", "scikit-learn (>0.22.1)", "onnxruntime", "pandas"] -examples = ["torchvision (>=0.9)", "gym[classic_control] (>=0.17.0)", "ipython"] -extra = ["matplotlib (>3.1)", "torchtext (>=0.9)", "omegaconf (>=2.0.5)", "hydra-core (>=1.0.5)", "jsonargparse[signatures] (>=4.7.1)", "gcsfs (>=2021.5.0)", "rich (>=10.2.2,<10.15.0 || >=10.16.0)"] +all = ["matplotlib (>3.1)", "torchtext (>=0.10)", "omegaconf (>=2.0.5)", "hydra-core (>=1.0.5)", "jsonargparse[signatures] (>=4.12.0)", "gcsfs (>=2021.5.0)", "rich (>=10.14.0,!=10.15.0.a)", "protobuf (<=3.20.1)", "neptune-client (>=0.10.0)", "comet-ml (>=3.1.12)", "mlflow (>=1.0.0)", "wandb (>=0.10.22)", "coverage (>=6.4)", "codecov (>=2.1)", "pytest (>=7.0)", "pytest-cov", "pytest-forked", "pytest-rerunfailures (>=10.2)", "pre-commit (>=1.0)", "mypy (==0.971)", "cloudpickle (>=1.3)", "scikit-learn (>0.22.1)", "onnxruntime", "psutil", "pandas (>1.0)", "fastapi", "uvicorn", "torchvision (>=0.10)", "gym[classic_control] (>=0.17.0)", "ipython", "fairscale (>=0.4.5)", "deepspeed (>=0.6.0)", "horovod (>=0.21.2,!=0.24.0)", "hivemind (>=1.0.1)"] +deepspeed = ["deepspeed (>=0.6.0)"] +dev = ["matplotlib (>3.1)", "torchtext (>=0.10)", "omegaconf (>=2.0.5)", "hydra-core (>=1.0.5)", "jsonargparse[signatures] (>=4.12.0)", "gcsfs (>=2021.5.0)", "rich (>=10.14.0,!=10.15.0.a)", "protobuf (<=3.20.1)", "neptune-client (>=0.10.0)", "comet-ml (>=3.1.12)", "mlflow (>=1.0.0)", "wandb (>=0.10.22)", "coverage (>=6.4)", "codecov (>=2.1)", "pytest (>=7.0)", "pytest-cov", "pytest-forked", "pytest-rerunfailures (>=10.2)", "pre-commit (>=1.0)", "mypy (==0.971)", "cloudpickle (>=1.3)", "scikit-learn (>0.22.1)", "onnxruntime", "psutil", "pandas (>1.0)", "fastapi", "uvicorn"] +examples = ["torchvision (>=0.10)", "gym[classic_control] (>=0.17.0)", "ipython"] +extra = ["matplotlib (>3.1)", "torchtext (>=0.10)", "omegaconf (>=2.0.5)", "hydra-core (>=1.0.5)", "jsonargparse[signatures] (>=4.12.0)", "gcsfs (>=2021.5.0)", "rich (>=10.14.0,!=10.15.0.a)", "protobuf (<=3.20.1)"] fairscale = ["fairscale (>=0.4.5)"] hivemind = ["hivemind (>=1.0.1)"] horovod = ["horovod (>=0.21.2,!=0.24.0)"] -loggers = ["neptune-client (>=0.10.0)", "comet-ml (>=3.1.12)", "mlflow (>=1.0.0)", "test-tube (>=0.7.5)", "wandb (>=0.8.21)"] -strategies = ["fairscale (>=0.4.5)", "deepspeed", "horovod (>=0.21.2,!=0.24.0)", "hivemind (>=1.0.1)"] -test = ["coverage (>=6.4)", "codecov (>=2.1)", "pytest (>=6.0)", "pytest-rerunfailures (>=10.2)", "mypy (>=0.920)", "flake8 (>=3.9.2)", "pre-commit (>=1.0)", "pytest-forked", "cloudpickle (>=1.3)", "scikit-learn (>0.22.1)", "onnxruntime", "pandas"] +loggers = ["neptune-client (>=0.10.0)", "comet-ml (>=3.1.12)", "mlflow (>=1.0.0)", "wandb (>=0.10.22)"] +strategies = ["fairscale (>=0.4.5)", "deepspeed (>=0.6.0)", "horovod (>=0.21.2,!=0.24.0)", "hivemind (>=1.0.1)"] +test = ["coverage (>=6.4)", "codecov (>=2.1)", "pytest (>=7.0)", "pytest-cov", "pytest-forked", "pytest-rerunfailures (>=10.2)", "pre-commit (>=1.0)", "mypy (==0.971)", "cloudpickle (>=1.3)", "scikit-learn (>0.22.1)", "onnxruntime", "psutil", "pandas (>1.0)", "fastapi", "uvicorn"] [[package]] name = "pytz" -version = "2022.1" +version = "2022.4" description = "World timezone definitions, modern and historical" category = "main" -optional = false +optional = true python-versions = "*" [[package]] @@ -1644,14 +1555,6 @@ category = "dev" optional = false python-versions = "*" -[[package]] -name = "pywinpty" -version = "2.0.5" -description = "Pseudo terminal support for Windows from Python." -category = "dev" -optional = false -python-versions = ">=3.7" - [[package]] name = "pyyaml" version = "6.0" @@ -1661,33 +1564,31 @@ optional = false python-versions = ">=3.6" [[package]] -name = "pyzmq" -version = "23.2.0" -description = "Python bindings for 0MQ" -category = "dev" +name = "pyyaml-env-tag" +version = "0.1" +description = "A custom YAML tag for referencing environment variables in YAML files. " +category = "main" optional = false python-versions = ">=3.6" [package.dependencies] -cffi = {version = "*", markers = "implementation_name == \"pypy\""} -py = {version = "*", markers = "implementation_name == \"pypy\""} +pyyaml = "*" [[package]] -name = "recommonmark" -version = "0.7.1" -description = "A docutils-compatibility bridge to CommonMark, enabling you to write CommonMark inside of Docutils & Sphinx projects." +name = "pyzmq" +version = "24.0.1" +description = "Python bindings for 0MQ" category = "dev" optional = false -python-versions = "*" +python-versions = ">=3.6" [package.dependencies] -commonmark = ">=0.8.1" -docutils = ">=0.11" -sphinx = ">=1.3.1" +cffi = {version = "*", markers = "implementation_name == \"pypy\""} +py = {version = "*", markers = "implementation_name == \"pypy\""} [[package]] name = "regex" -version = "2022.6.2" +version = "2022.9.13" description = "Alternative regular expression module, to replace re." category = "main" optional = true @@ -1743,7 +1644,7 @@ tests = ["pytest (>=4.6)", "coverage (>=6.0.0)", "pytest-cov", "pytest-localserv [[package]] name = "rsa" -version = "4.8" +version = "4.9" description = "Pure-Python RSA implementation" category = "main" optional = true @@ -1754,58 +1655,49 @@ pyasn1 = ">=0.1.3" [[package]] name = "scikit-learn" -version = "1.0.2" +version = "1.1.2" description = "A set of python modules for machine learning and data mining" category = "main" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" [package.dependencies] -joblib = ">=0.11" -numpy = ">=1.14.6" -scipy = ">=1.1.0" +joblib = ">=1.0.0" +numpy = ">=1.17.3" +scipy = ">=1.3.2" threadpoolctl = ">=2.0.0" [package.extras] -benchmark = ["matplotlib (>=2.2.3)", "pandas (>=0.25.0)", "memory-profiler (>=0.57.0)"] -docs = ["matplotlib (>=2.2.3)", "scikit-image (>=0.14.5)", "pandas (>=0.25.0)", "seaborn (>=0.9.0)", "memory-profiler (>=0.57.0)", "sphinx (>=4.0.1)", "sphinx-gallery (>=0.7.0)", "numpydoc (>=1.0.0)", "Pillow (>=7.1.2)", "sphinx-prompt (>=1.3.0)", "sphinxext-opengraph (>=0.4.2)"] -examples = ["matplotlib (>=2.2.3)", "scikit-image (>=0.14.5)", "pandas (>=0.25.0)", "seaborn (>=0.9.0)"] -tests = ["matplotlib (>=2.2.3)", "scikit-image (>=0.14.5)", "pandas (>=0.25.0)", "pytest (>=5.0.1)", "pytest-cov (>=2.9.0)", "flake8 (>=3.8.2)", "black (>=21.6b0)", "mypy (>=0.770)", "pyamg (>=4.0.0)"] +tests = ["numpydoc (>=1.2.0)", "pyamg (>=4.0.0)", "mypy (>=0.961)", "black (>=22.3.0)", "flake8 (>=3.8.2)", "pytest-cov (>=2.9.0)", "pytest (>=5.0.1)", "pandas (>=1.0.5)", "scikit-image (>=0.16.2)", "matplotlib (>=3.1.2)"] +examples = ["seaborn (>=0.9.0)", "pandas (>=1.0.5)", "scikit-image (>=0.16.2)", "matplotlib (>=3.1.2)"] +docs = ["sphinxext-opengraph (>=0.4.2)", "sphinx-prompt (>=1.3.0)", "Pillow (>=7.1.2)", "numpydoc (>=1.2.0)", "sphinx-gallery (>=0.7.0)", "sphinx (>=4.0.1)", "memory-profiler (>=0.57.0)", "seaborn (>=0.9.0)", "pandas (>=1.0.5)", "scikit-image (>=0.16.2)", "matplotlib (>=3.1.2)"] +benchmark = ["memory-profiler (>=0.57.0)", "pandas (>=1.0.5)", "matplotlib (>=3.1.2)"] [[package]] name = "scipy" -version = "1.7.3" -description = "SciPy: Scientific Library for Python" +version = "1.9.2" +description = "Fundamental algorithms for scientific computing in Python" category = "main" optional = false -python-versions = ">=3.7,<3.11" +python-versions = ">=3.8" [package.dependencies] -numpy = ">=1.16.5,<1.23.0" - -[[package]] -name = "send2trash" -version = "1.8.0" -description = "Send file to trash natively under Mac OS X, Windows and Linux." -category = "dev" -optional = false -python-versions = "*" +numpy = ">=1.18.5,<1.26.0" [package.extras] -nativelib = ["pyobjc-framework-cocoa", "pywin32"] -objc = ["pyobjc-framework-cocoa"] -win32 = ["pywin32"] +test = ["pytest", "pytest-cov", "pytest-xdist", "asv", "mpmath", "gmpy2", "threadpoolctl", "scikit-umfpack"] +doc = ["sphinx (!=4.1.0)", "pydata-sphinx-theme (==0.9.0)", "sphinx-panels (>=0.5.2)", "matplotlib (>2)", "numpydoc", "sphinx-tabs"] +dev = ["mypy", "typing-extensions", "pycodestyle", "flake8"] [[package]] name = "setuptools-scm" -version = "7.0.4" +version = "7.0.5" description = "the blessed package to manage your versions by scm tags" category = "main" optional = false python-versions = ">=3.7" [package.dependencies] -importlib-metadata = {version = "*", markers = "python_version < \"3.8\""} packaging = ">=20.0" tomli = ">=1.0.0" typing-extensions = "*" @@ -1830,14 +1722,6 @@ category = "dev" optional = false python-versions = ">=3.6" -[[package]] -name = "snowballstemmer" -version = "2.2.0" -description = "This package provides 29 stemmers for 28 languages generated from Snowball algorithms." -category = "dev" -optional = false -python-versions = "*" - [[package]] name = "soupsieve" version = "2.3.2.post1" @@ -1846,163 +1730,15 @@ category = "dev" optional = false python-versions = ">=3.6" -[[package]] -name = "sphinx" -version = "5.0.2" -description = "Python documentation generator" -category = "dev" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -alabaster = ">=0.7,<0.8" -babel = ">=1.3" -colorama = {version = ">=0.3.5", markers = "sys_platform == \"win32\""} -docutils = ">=0.14,<0.19" -imagesize = "*" -importlib-metadata = {version = ">=4.4", markers = "python_version < \"3.10\""} -Jinja2 = ">=2.3" -packaging = "*" -Pygments = ">=2.0" -requests = ">=2.5.0" -snowballstemmer = ">=1.1" -sphinxcontrib-applehelp = "*" -sphinxcontrib-devhelp = "*" -sphinxcontrib-htmlhelp = ">=2.0.0" -sphinxcontrib-jsmath = "*" -sphinxcontrib-qthelp = "*" -sphinxcontrib-serializinghtml = ">=1.1.5" - -[package.extras] -docs = ["sphinxcontrib-websupport"] -lint = ["flake8 (>=3.5.0)", "isort", "mypy (>=0.950)", "docutils-stubs", "types-typed-ast", "types-requests"] -test = ["pytest (>=4.6)", "html5lib", "cython", "typed-ast"] - -[[package]] -name = "sphinx-automodapi" -version = "0.13" -description = "Sphinx extension for auto-generating API documentation for entire modules" -category = "dev" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -sphinx = ">=1.7" - -[package.extras] -test = ["pytest", "pytest-cov", "cython", "codecov", "coverage (<5.0)"] - -[[package]] -name = "sphinx-copybutton" -version = "0.4.0" -description = "Add a copy button to each of your code cells." -category = "dev" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -sphinx = ">=1.8" - -[package.extras] -rtd = ["sphinx-book-theme", "ipython", "sphinx"] -code_style = ["pre-commit (==2.12.1)"] - -[[package]] -name = "sphinx-rtd-theme" -version = "0.5.2" -description = "Read the Docs theme for Sphinx" -category = "dev" -optional = false -python-versions = "*" - -[package.dependencies] -docutils = "<0.17" -sphinx = "*" - -[package.extras] -dev = ["bump2version", "sphinxcontrib-httpdomain", "transifex-client"] - -[[package]] -name = "sphinxcontrib-applehelp" -version = "1.0.2" -description = "sphinxcontrib-applehelp is a sphinx extension which outputs Apple help books" -category = "dev" -optional = false -python-versions = ">=3.5" - -[package.extras] -test = ["pytest"] -lint = ["docutils-stubs", "mypy", "flake8"] - -[[package]] -name = "sphinxcontrib-devhelp" -version = "1.0.2" -description = "sphinxcontrib-devhelp is a sphinx extension which outputs Devhelp document." -category = "dev" -optional = false -python-versions = ">=3.5" - -[package.extras] -test = ["pytest"] -lint = ["docutils-stubs", "mypy", "flake8"] - -[[package]] -name = "sphinxcontrib-htmlhelp" -version = "2.0.0" -description = "sphinxcontrib-htmlhelp is a sphinx extension which renders HTML help files" -category = "dev" -optional = false -python-versions = ">=3.6" - -[package.extras] -test = ["html5lib", "pytest"] -lint = ["docutils-stubs", "mypy", "flake8"] - -[[package]] -name = "sphinxcontrib-jsmath" -version = "1.0.1" -description = "A sphinx extension which renders display math in HTML via JavaScript" -category = "dev" -optional = false -python-versions = ">=3.5" - -[package.extras] -test = ["mypy", "flake8", "pytest"] - -[[package]] -name = "sphinxcontrib-qthelp" -version = "1.0.3" -description = "sphinxcontrib-qthelp is a sphinx extension which outputs QtHelp document." -category = "dev" -optional = false -python-versions = ">=3.5" - -[package.extras] -test = ["pytest"] -lint = ["docutils-stubs", "mypy", "flake8"] - -[[package]] -name = "sphinxcontrib-serializinghtml" -version = "1.1.5" -description = "sphinxcontrib-serializinghtml is a sphinx extension which outputs \"serialized\" HTML files (json and pickle)." -category = "dev" -optional = false -python-versions = ">=3.5" - -[package.extras] -test = ["pytest"] -lint = ["docutils-stubs", "mypy", "flake8"] - [[package]] name = "stevedore" -version = "3.5.0" +version = "4.0.0" description = "Manage dynamic plugins for Python applications" category = "dev" optional = false -python-versions = ">=3.6" +python-versions = ">=3.8" [package.dependencies] -importlib-metadata = {version = ">=1.7.0", markers = "python_version < \"3.8\""} pbr = ">=2.0.0,<2.1.0 || >2.1.0" [[package]] @@ -2013,9 +1749,6 @@ category = "main" optional = false python-versions = ">=3.6" -[package.dependencies] -typing-extensions = {version = "*", markers = "python_version < \"3.8\""} - [package.extras] dev = ["pre-commit", "rich", "cogapp", "tomli", "coverage", "freezegun (>=0.2.8)", "pretend", "pytest-asyncio", "pytest (>=6.0)", "simplejson", "furo", "sphinx", "sphinx-notfound-page", "sphinxcontrib-mermaid", "twisted"] docs = ["furo", "sphinx", "sphinx-notfound-page", "sphinxcontrib-mermaid", "twisted"] @@ -2023,7 +1756,7 @@ tests = ["coverage", "freezegun (>=0.2.8)", "pretend", "pytest-asyncio", "pytest [[package]] name = "tensorboard" -version = "2.9.1" +version = "2.10.1" description = "TensorBoard lets you watch Tensors Flow" category = "main" optional = true @@ -2058,22 +1791,6 @@ category = "main" optional = true python-versions = "*" -[[package]] -name = "terminado" -version = "0.15.0" -description = "Tornado websocket backend for the Xterm.js Javascript terminal emulator library." -category = "dev" -optional = false -python-versions = ">=3.7" - -[package.dependencies] -ptyprocess = {version = "*", markers = "os_name != \"nt\""} -pywinpty = {version = ">=1.1.0", markers = "os_name == \"nt\""} -tornado = ">=6.1.0" - -[package.extras] -test = ["pre-commit", "pytest-timeout", "pytest (>=6.0)"] - [[package]] name = "threadpoolctl" version = "3.1.0" @@ -2094,8 +1811,8 @@ python-versions = ">=3.6" webencodings = ">=0.4" [package.extras] -doc = ["sphinx", "sphinx-rtd-theme"] -test = ["pytest", "pytest-cov", "pytest-flake8", "pytest-isort", "coverage"] +test = ["coverage", "pytest-isort", "pytest-flake8", "pytest-cov", "pytest"] +doc = ["sphinx-rtd-theme", "sphinx"] [[package]] name = "tokenizers" @@ -2127,7 +1844,7 @@ python-versions = ">=3.6" [[package]] name = "torch" -version = "1.12.0" +version = "1.12.1" description = "Tensors and Dynamic neural networks in Python with strong GPU acceleration" category = "main" optional = false @@ -2161,7 +1878,6 @@ python-versions = ">=3.7" numpy = ">=1.17.2" packaging = "*" torch = ">=1.3.1" -typing-extensions = {version = "*", markers = "python_version < \"3.8\""} [package.extras] test = ["pycocotools", "codecov (>=2.1)", "check-manifest", "torch-complex", "scikit-learn (>1.0,<1.1.1)", "cloudpickle (>=1.3)", "mir-eval (>=0.6)", "pytest-cov (>2.10)", "pytest-timeout", "scikit-image (>0.17.1)", "pytest (>=6.0.0,<7.0.0)", "pypesq", "transformers (>=4.0)", "pre-commit (>=1.0)", "fire", "bert-score (==0.3.10)", "pytorch-msssim", "psutil", "coverage (>5.2)", "huggingface-hub (<0.7)", "pytest-doctestplus (>=0.9.0)", "requests", "rouge-score (==0.0.4)", "jiwer (>=2.3.0)", "twine (>=3.2)", "sacrebleu (>=2.0.0)", "fast-bss-eval (>=0.1.0)", "phmdoctest (>=1.1.1)", "mypy (>=0.790)"] @@ -2175,7 +1891,7 @@ text = ["nltk (>=3.6)", "regex (>=2021.9.24)", "tqdm (>=4.41.0)"] [[package]] name = "torchvision" -version = "0.13.0" +version = "0.13.1" description = "image and video datasets and models for torch deep learning" category = "main" optional = false @@ -2185,7 +1901,7 @@ python-versions = ">=3.7" numpy = "*" pillow = ">=5.3.0,<8.3.0 || >=8.4.0" requests = "*" -torch = "1.12.0" +torch = "1.12.1" typing-extensions = "*" [package.extras] @@ -2193,15 +1909,15 @@ scipy = ["scipy"] [[package]] name = "tornado" -version = "6.1" +version = "6.2" description = "Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed." category = "dev" optional = false -python-versions = ">= 3.5" +python-versions = ">= 3.7" [[package]] name = "tqdm" -version = "4.64.0" +version = "4.64.1" description = "Fast, Extensible Progress Meter" category = "main" optional = false @@ -2218,7 +1934,7 @@ telegram = ["requests"] [[package]] name = "traitlets" -version = "5.3.0" +version = "5.4.0" description = "" category = "dev" optional = false @@ -2229,7 +1945,7 @@ test = ["pre-commit", "pytest"] [[package]] name = "transformers" -version = "4.20.1" +version = "4.22.2" description = "State-of-the-art Machine Learning for JAX, PyTorch and TensorFlow" category = "main" optional = true @@ -2237,8 +1953,7 @@ python-versions = ">=3.7.0" [package.dependencies] filelock = "*" -huggingface-hub = ">=0.1.0,<1.0" -importlib-metadata = {version = "*", markers = "python_version < \"3.8\""} +huggingface-hub = ">=0.9.0,<1.0" numpy = ">=1.17" packaging = ">=20.0" pyyaml = ">=5.1" @@ -2248,18 +1963,19 @@ tokenizers = ">=0.11.1,<0.11.3 || >0.11.3,<0.13" tqdm = ">=4.27" [package.extras] -all = ["tensorflow (>=2.3)", "onnxconverter-common", "tf2onnx", "torch (>=1.0)", "jax (>=0.2.8,!=0.3.2,<=0.3.6)", "jaxlib (>=0.1.65,<=0.3.6)", "flax (>=0.3.5)", "optax (>=0.0.8)", "sentencepiece (>=0.1.91,!=0.1.92)", "protobuf (<=3.20.1)", "tokenizers (>=0.11.1,!=0.11.3,<0.13)", "torchaudio", "librosa", "pyctcdecode (>=0.3.0)", "phonemizer", "pillow", "optuna", "ray", "sigopt", "timm", "codecarbon (==1.2.0)"] +accelerate = ["accelerate (>=0.10.0)"] +all = ["tensorflow (>=2.3)", "onnxconverter-common", "tf2onnx", "tensorflow-text", "torch (>=1.0)", "jax (>=0.2.8,!=0.3.2,<=0.3.6)", "jaxlib (>=0.1.65,<=0.3.6)", "flax (>=0.4.1)", "optax (>=0.0.8)", "sentencepiece (>=0.1.91,!=0.1.92)", "protobuf (<=3.20.1)", "tokenizers (>=0.11.1,!=0.11.3,<0.13)", "torchaudio", "librosa", "pyctcdecode (>=0.3.0)", "phonemizer", "pillow", "optuna", "ray", "sigopt", "timm", "codecarbon (==1.2.0)", "accelerate (>=0.10.0)"] audio = ["librosa", "pyctcdecode (>=0.3.0)", "phonemizer"] codecarbon = ["codecarbon (==1.2.0)"] -deepspeed = ["deepspeed (>=0.6.5)"] -deepspeed-testing = ["deepspeed (>=0.6.5)", "pytest", "pytest-xdist", "timeout-decorator", "parameterized", "psutil", "datasets", "dill (<0.3.5)", "pytest-timeout", "black (>=22.3,<23.0)", "sacrebleu (>=1.4.12,<2.0.0)", "rouge-score", "nltk", "GitPython (<3.1.19)", "hf-doc-builder (>=0.3.0)", "protobuf (<=3.20.1)", "sacremoses", "rjieba", "faiss-cpu", "cookiecutter (==1.7.3)", "optuna"] -dev = ["tensorflow (>=2.3)", "onnxconverter-common", "tf2onnx", "torch (>=1.0)", "jax (>=0.2.8,!=0.3.2,<=0.3.6)", "jaxlib (>=0.1.65,<=0.3.6)", "flax (>=0.3.5)", "optax (>=0.0.8)", "sentencepiece (>=0.1.91,!=0.1.92)", "protobuf (<=3.20.1)", "tokenizers (>=0.11.1,!=0.11.3,<0.13)", "torchaudio", "librosa", "pyctcdecode (>=0.3.0)", "phonemizer", "pillow", "optuna", "ray", "sigopt", "timm", "codecarbon (==1.2.0)", "pytest", "pytest-xdist", "timeout-decorator", "parameterized", "psutil", "datasets", "dill (<0.3.5)", "pytest-timeout", "black (>=22.3,<23.0)", "sacrebleu (>=1.4.12,<2.0.0)", "rouge-score", "nltk", "GitPython (<3.1.19)", "hf-doc-builder (>=0.3.0)", "sacremoses", "rjieba", "faiss-cpu", "cookiecutter (==1.7.3)", "isort (>=5.5.4)", "flake8 (>=3.8.3)", "fugashi (>=1.0)", "ipadic (>=1.0.0,<2.0)", "unidic-lite (>=1.0.7)", "unidic (>=1.0.2)", "hf-doc-builder", "scikit-learn"] -dev-tensorflow = ["pytest", "pytest-xdist", "timeout-decorator", "parameterized", "psutil", "datasets", "dill (<0.3.5)", "pytest-timeout", "black (>=22.3,<23.0)", "sacrebleu (>=1.4.12,<2.0.0)", "rouge-score", "nltk", "GitPython (<3.1.19)", "hf-doc-builder (>=0.3.0)", "protobuf (<=3.20.1)", "sacremoses", "rjieba", "faiss-cpu", "cookiecutter (==1.7.3)", "tensorflow (>=2.3)", "onnxconverter-common", "tf2onnx", "sentencepiece (>=0.1.91,!=0.1.92)", "tokenizers (>=0.11.1,!=0.11.3,<0.13)", "pillow", "isort (>=5.5.4)", "flake8 (>=3.8.3)", "hf-doc-builder", "scikit-learn", "onnxruntime (>=1.4.0)", "onnxruntime-tools (>=1.4.2)", "librosa", "pyctcdecode (>=0.3.0)", "phonemizer"] -dev-torch = ["pytest", "pytest-xdist", "timeout-decorator", "parameterized", "psutil", "datasets", "dill (<0.3.5)", "pytest-timeout", "black (>=22.3,<23.0)", "sacrebleu (>=1.4.12,<2.0.0)", "rouge-score", "nltk", "GitPython (<3.1.19)", "hf-doc-builder (>=0.3.0)", "protobuf (<=3.20.1)", "sacremoses", "rjieba", "faiss-cpu", "cookiecutter (==1.7.3)", "torch (>=1.0)", "sentencepiece (>=0.1.91,!=0.1.92)", "tokenizers (>=0.11.1,!=0.11.3,<0.13)", "torchaudio", "librosa", "pyctcdecode (>=0.3.0)", "phonemizer", "pillow", "optuna", "ray", "sigopt", "timm", "codecarbon (==1.2.0)", "isort (>=5.5.4)", "flake8 (>=3.8.3)", "fugashi (>=1.0)", "ipadic (>=1.0.0,<2.0)", "unidic-lite (>=1.0.7)", "unidic (>=1.0.2)", "hf-doc-builder", "scikit-learn", "onnxruntime (>=1.4.0)", "onnxruntime-tools (>=1.4.2)"] -docs = ["tensorflow (>=2.3)", "onnxconverter-common", "tf2onnx", "torch (>=1.0)", "jax (>=0.2.8,!=0.3.2,<=0.3.6)", "jaxlib (>=0.1.65,<=0.3.6)", "flax (>=0.3.5)", "optax (>=0.0.8)", "sentencepiece (>=0.1.91,!=0.1.92)", "protobuf (<=3.20.1)", "tokenizers (>=0.11.1,!=0.11.3,<0.13)", "torchaudio", "librosa", "pyctcdecode (>=0.3.0)", "phonemizer", "pillow", "optuna", "ray", "sigopt", "timm", "codecarbon (==1.2.0)", "hf-doc-builder"] +deepspeed = ["deepspeed (>=0.6.5)", "accelerate (>=0.10.0)"] +deepspeed-testing = ["deepspeed (>=0.6.5)", "accelerate (>=0.10.0)", "pytest", "pytest-xdist", "timeout-decorator", "parameterized", "psutil", "datasets", "dill (<0.3.5)", "evaluate (>=0.2.0)", "pytest-timeout", "black (==22.3)", "sacrebleu (>=1.4.12,<2.0.0)", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "nltk", "GitPython (<3.1.19)", "hf-doc-builder (>=0.3.0)", "protobuf (<=3.20.1)", "sacremoses", "rjieba", "faiss-cpu", "cookiecutter (==1.7.3)", "optuna"] +dev = ["tensorflow (>=2.3)", "onnxconverter-common", "tf2onnx", "tensorflow-text", "torch (>=1.0)", "jax (>=0.2.8,!=0.3.2,<=0.3.6)", "jaxlib (>=0.1.65,<=0.3.6)", "flax (>=0.4.1)", "optax (>=0.0.8)", "sentencepiece (>=0.1.91,!=0.1.92)", "protobuf (<=3.20.1)", "tokenizers (>=0.11.1,!=0.11.3,<0.13)", "torchaudio", "librosa", "pyctcdecode (>=0.3.0)", "phonemizer", "pillow", "optuna", "ray", "sigopt", "timm", "codecarbon (==1.2.0)", "accelerate (>=0.10.0)", "pytest", "pytest-xdist", "timeout-decorator", "parameterized", "psutil", "datasets", "dill (<0.3.5)", "evaluate (>=0.2.0)", "pytest-timeout", "black (==22.3)", "sacrebleu (>=1.4.12,<2.0.0)", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "nltk", "GitPython (<3.1.19)", "hf-doc-builder (>=0.3.0)", "sacremoses", "rjieba", "faiss-cpu", "cookiecutter (==1.7.3)", "isort (>=5.5.4)", "flake8 (>=3.8.3)", "fugashi (>=1.0)", "ipadic (>=1.0.0,<2.0)", "unidic-lite (>=1.0.7)", "unidic (>=1.0.2)", "hf-doc-builder", "scikit-learn"] +dev-tensorflow = ["pytest", "pytest-xdist", "timeout-decorator", "parameterized", "psutil", "datasets", "dill (<0.3.5)", "evaluate (>=0.2.0)", "pytest-timeout", "black (==22.3)", "sacrebleu (>=1.4.12,<2.0.0)", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "nltk", "GitPython (<3.1.19)", "hf-doc-builder (>=0.3.0)", "protobuf (<=3.20.1)", "sacremoses", "rjieba", "faiss-cpu", "cookiecutter (==1.7.3)", "tensorflow (>=2.3)", "onnxconverter-common", "tf2onnx", "tensorflow-text", "sentencepiece (>=0.1.91,!=0.1.92)", "tokenizers (>=0.11.1,!=0.11.3,<0.13)", "pillow", "isort (>=5.5.4)", "flake8 (>=3.8.3)", "hf-doc-builder", "scikit-learn", "onnxruntime (>=1.4.0)", "onnxruntime-tools (>=1.4.2)", "librosa", "pyctcdecode (>=0.3.0)", "phonemizer"] +dev-torch = ["pytest", "pytest-xdist", "timeout-decorator", "parameterized", "psutil", "datasets", "dill (<0.3.5)", "evaluate (>=0.2.0)", "pytest-timeout", "black (==22.3)", "sacrebleu (>=1.4.12,<2.0.0)", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "nltk", "GitPython (<3.1.19)", "hf-doc-builder (>=0.3.0)", "protobuf (<=3.20.1)", "sacremoses", "rjieba", "faiss-cpu", "cookiecutter (==1.7.3)", "torch (>=1.0)", "sentencepiece (>=0.1.91,!=0.1.92)", "tokenizers (>=0.11.1,!=0.11.3,<0.13)", "torchaudio", "librosa", "pyctcdecode (>=0.3.0)", "phonemizer", "pillow", "optuna", "ray", "sigopt", "timm", "codecarbon (==1.2.0)", "isort (>=5.5.4)", "flake8 (>=3.8.3)", "fugashi (>=1.0)", "ipadic (>=1.0.0,<2.0)", "unidic-lite (>=1.0.7)", "unidic (>=1.0.2)", "hf-doc-builder", "scikit-learn", "onnxruntime (>=1.4.0)", "onnxruntime-tools (>=1.4.2)"] +docs = ["tensorflow (>=2.3)", "onnxconverter-common", "tf2onnx", "tensorflow-text", "torch (>=1.0)", "jax (>=0.2.8,!=0.3.2,<=0.3.6)", "jaxlib (>=0.1.65,<=0.3.6)", "flax (>=0.4.1)", "optax (>=0.0.8)", "sentencepiece (>=0.1.91,!=0.1.92)", "protobuf (<=3.20.1)", "tokenizers (>=0.11.1,!=0.11.3,<0.13)", "torchaudio", "librosa", "pyctcdecode (>=0.3.0)", "phonemizer", "pillow", "optuna", "ray", "sigopt", "timm", "codecarbon (==1.2.0)", "accelerate (>=0.10.0)", "hf-doc-builder"] docs_specific = ["hf-doc-builder"] fairscale = ["fairscale (>0.3)"] -flax = ["jax (>=0.2.8,!=0.3.2,<=0.3.6)", "jaxlib (>=0.1.65,<=0.3.6)", "flax (>=0.3.5)", "optax (>=0.0.8)"] +flax = ["jax (>=0.2.8,!=0.3.2,<=0.3.6)", "jaxlib (>=0.1.65,<=0.3.6)", "flax (>=0.4.1)", "optax (>=0.0.8)"] flax-speech = ["librosa", "pyctcdecode (>=0.3.0)", "phonemizer"] ftfy = ["ftfy"] integrations = ["optuna", "ray", "sigopt"] @@ -2268,7 +1984,7 @@ modelcreation = ["cookiecutter (==1.7.3)"] onnx = ["onnxconverter-common", "tf2onnx", "onnxruntime (>=1.4.0)", "onnxruntime-tools (>=1.4.2)"] onnxruntime = ["onnxruntime (>=1.4.0)", "onnxruntime-tools (>=1.4.2)"] optuna = ["optuna"] -quality = ["black (>=22.3,<23.0)", "isort (>=5.5.4)", "flake8 (>=3.8.3)", "GitPython (<3.1.19)", "hf-doc-builder (>=0.3.0)"] +quality = ["black (==22.3)", "isort (>=5.5.4)", "flake8 (>=3.8.3)", "GitPython (<3.1.19)", "hf-doc-builder (>=0.3.0)"] ray = ["ray"] retrieval = ["faiss-cpu", "datasets"] sagemaker = ["sagemaker (>=2.31.0)"] @@ -2277,28 +1993,20 @@ serving = ["pydantic", "uvicorn", "fastapi", "starlette"] sigopt = ["sigopt"] sklearn = ["scikit-learn"] speech = ["torchaudio", "librosa", "pyctcdecode (>=0.3.0)", "phonemizer"] -testing = ["pytest", "pytest-xdist", "timeout-decorator", "parameterized", "psutil", "datasets", "dill (<0.3.5)", "pytest-timeout", "black (>=22.3,<23.0)", "sacrebleu (>=1.4.12,<2.0.0)", "rouge-score", "nltk", "GitPython (<3.1.19)", "hf-doc-builder (>=0.3.0)", "protobuf (<=3.20.1)", "sacremoses", "rjieba", "faiss-cpu", "cookiecutter (==1.7.3)"] -tf = ["tensorflow (>=2.3)", "onnxconverter-common", "tf2onnx"] -tf-cpu = ["tensorflow-cpu (>=2.3)", "onnxconverter-common", "tf2onnx"] +testing = ["pytest", "pytest-xdist", "timeout-decorator", "parameterized", "psutil", "datasets", "dill (<0.3.5)", "evaluate (>=0.2.0)", "pytest-timeout", "black (==22.3)", "sacrebleu (>=1.4.12,<2.0.0)", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "nltk", "GitPython (<3.1.19)", "hf-doc-builder (>=0.3.0)", "protobuf (<=3.20.1)", "sacremoses", "rjieba", "faiss-cpu", "cookiecutter (==1.7.3)"] +tf = ["tensorflow (>=2.3)", "onnxconverter-common", "tf2onnx", "tensorflow-text"] +tf-cpu = ["tensorflow-cpu (>=2.3)", "onnxconverter-common", "tf2onnx", "tensorflow-text"] tf-speech = ["librosa", "pyctcdecode (>=0.3.0)", "phonemizer"] timm = ["timm"] tokenizers = ["tokenizers (>=0.11.1,!=0.11.3,<0.13)"] torch = ["torch (>=1.0)"] torch-speech = ["torchaudio", "librosa", "pyctcdecode (>=0.3.0)", "phonemizer"] -torchhub = ["filelock", "huggingface-hub (>=0.1.0,<1.0)", "importlib-metadata", "numpy (>=1.17)", "packaging (>=20.0)", "protobuf (<=3.20.1)", "regex (!=2019.12.17)", "requests", "sentencepiece (>=0.1.91,!=0.1.92)", "torch (>=1.0)", "tokenizers (>=0.11.1,!=0.11.3,<0.13)", "tqdm (>=4.27)"] +torchhub = ["filelock", "huggingface-hub (>=0.9.0,<1.0)", "importlib-metadata", "numpy (>=1.17)", "packaging (>=20.0)", "protobuf (<=3.20.1)", "regex (!=2019.12.17)", "requests", "sentencepiece (>=0.1.91,!=0.1.92)", "torch (>=1.0)", "tokenizers (>=0.11.1,!=0.11.3,<0.13)", "tqdm (>=4.27)"] vision = ["pillow"] -[[package]] -name = "typed-ast" -version = "1.4.3" -description = "a fork of Python 2 and 3 ast modules with type comment support" -category = "dev" -optional = false -python-versions = "*" - [[package]] name = "typing-extensions" -version = "4.3.0" +version = "4.4.0" description = "Backported and Experimental Type Hints for Python 3.7+" category = "main" optional = false @@ -2306,24 +2014,27 @@ python-versions = ">=3.7" [[package]] name = "urllib3" -version = "1.26.9" +version = "1.26.12" description = "HTTP library with thread-safe connection pooling, file post, and more." category = "main" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, <4" +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*, <4" [package.extras] brotli = ["brotlicffi (>=0.8.0)", "brotli (>=1.0.9)", "brotlipy (>=0.6.0)"] -secure = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "certifi", "ipaddress"] +secure = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "certifi", "urllib3-secure-extra", "ipaddress"] socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] [[package]] -name = "wcwidth" -version = "0.2.5" -description = "Measures the displayed width of unicode strings in a terminal" -category = "dev" +name = "watchdog" +version = "2.1.9" +description = "Filesystem events monitoring" +category = "main" optional = false -python-versions = "*" +python-versions = ">=3.6" + +[package.extras] +watchmedo = ["PyYAML (>=3.10)"] [[package]] name = "webencodings" @@ -2335,26 +2046,18 @@ python-versions = "*" [[package]] name = "werkzeug" -version = "2.1.2" +version = "2.2.2" description = "The comprehensive WSGI web application library." category = "main" optional = true python-versions = ">=3.7" +[package.dependencies] +MarkupSafe = ">=2.1.1" + [package.extras] watchdog = ["watchdog"] -[[package]] -name = "widgetsnbextension" -version = "3.6.1" -description = "IPython HTML widgets for Jupyter" -category = "dev" -optional = false -python-versions = "*" - -[package.dependencies] -notebook = ">=4.4.1" - [[package]] name = "xxhash" version = "3.0.0" @@ -2365,28 +2068,27 @@ python-versions = ">=3.6" [[package]] name = "yarl" -version = "1.7.2" +version = "1.8.1" description = "Yet another URL library" category = "main" optional = true -python-versions = ">=3.6" +python-versions = ">=3.7" [package.dependencies] idna = ">=2.0" multidict = ">=4.0" -typing-extensions = {version = ">=3.7.4", markers = "python_version < \"3.8\""} [[package]] name = "zipp" -version = "3.8.0" +version = "3.9.0" description = "Backport of pathlib-compatible object wrapper for zip files" category = "main" optional = false python-versions = ">=3.7" [package.extras] -docs = ["sphinx", "jaraco.packaging (>=9)", "rst.linker (>=1.9)"] -testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)"] +docs = ["sphinx (>=3.5)", "jaraco.packaging (>=9)", "rst.linker (>=1.9)", "furo", "jaraco.tidelift (>=1.4)"] +testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "flake8 (<5)", "pytest-cov", "pytest-enabler (>=1.3)", "jaraco.itertools", "func-timeout", "jaraco.functools", "more-itertools", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)"] [extras] nlp = ["transformers", "datasets"] @@ -2394,24 +2096,17 @@ vision = ["torchvision", "lightning-flash"] [metadata] lock-version = "1.1" -python-versions = ">=3.7,<4" -content-hash = "bf26a664b86992814dcf444f011370cd03e656a43fd3c735f473256458e953e6" +python-versions = ">=3.8,<4" +content-hash = "146804eb73a03d155e981e6c07d6aadbfdd1453d84031e06986691c24be0fcad" [metadata.files] absl-py = [] aiohttp = [] aiosignal = [] -alabaster = [] -appnope = [] -argon2-cffi = [] -argon2-cffi-bindings = [] -asteroid-sphinx-theme = [] +astunparse = [] async-timeout = [] -asynctest = [] atomicwrites = [] attrs = [] -babel = [] -backcall = [] bandit = [] beautifulsoup4 = [] black = [] @@ -2422,12 +2117,10 @@ cffi = [] charset-normalizer = [] click = [] colorama = [] -commonmark = [] +contourpy = [] coverage = [] cycler = [] datasets = [] -debugpy = [] -decorator = [] defusedxml = [] dill = [] docstring-parser = [] @@ -2439,41 +2132,49 @@ flake8 = [] fonttools = [] frozenlist = [] fsspec = [] +ghp-import = [] gitdb = [] gitpython = [] google-auth = [] google-auth-oauthlib = [] +griffe = [] grpcio = [] h5py = [] huggingface-hub = [] hypothesis = [] idna = [] -imagesize = [] importlib-metadata = [] importlib-resources = [] iniconfig = [] -ipykernel = [] -ipython = [] -ipython-genutils = [] -ipywidgets = [] -jedi = [] jinja2 = [] joblib = [] jsonargparse = [] jsonschema = [] jupyter-client = [] jupyter-core = [] -jupyter-sphinx = [] jupyterlab-pygments = [] -jupyterlab-widgets = [] +jupytext = [] kiwisolver = [] lightning-flash = [] +lxml = [] markdown = [] +markdown-it-py = [] markupsafe = [] matplotlib = [] -matplotlib-inline = [] mccabe = [] +mdit-py-plugins = [] +mdurl = [] +mergedeep = [] mistune = [] +mkdocs = [] +mkdocs-autorefs = [] +mkdocs-exclude-search = [] +mkdocs-jupyter = [] +mkdocs-material = [] +mkdocs-material-extensions = [] +mkdocstrings = [] +mkdocstrings-python = [] +mkdocstrings-python-legacy = [] multidict = [] multiprocess = [] mypy = [] @@ -2481,28 +2182,19 @@ mypy-extensions = [] nbclient = [] nbconvert = [] nbformat = [] -nbsphinx = [] nest-asyncio = [] -notebook = [] numpy = [] -numpydoc = [] oauthlib = [] packaging = [] pandas = [] pandocfilters = [] -parso = [] pathspec = [] pbr = [] -pexpect = [] -pickleshare = [] pillow = [] +pkgutil-resolve-name = [] platformdirs = [] pluggy = [] -prometheus-client = [] -prompt-toolkit = [] protobuf = [] -psutil = [] -ptyprocess = [] py = [] pyarrow = [] pyasn1 = [] @@ -2512,19 +2204,20 @@ pycparser = [] pydeprecate = [] pyflakes = [] pygments = [] +pymdown-extensions = [] pyparsing = [] pyrsistent = [] pytest = [] pytest-cov = [] pytest-mock = [] python-dateutil = [] +pytkdocs = [] pytorch-lightning = [] pytz = [] pywin32 = [] -pywinpty = [] pyyaml = [] +pyyaml-env-tag = [] pyzmq = [] -recommonmark = [] regex = [] requests = [] requests-oauthlib = [] @@ -2532,28 +2225,15 @@ responses = [] rsa = [] scikit-learn = [] scipy = [] -send2trash = [] setuptools-scm = [] six = [] smmap = [] -snowballstemmer = [] soupsieve = [] -sphinx = [] -sphinx-automodapi = [] -sphinx-copybutton = [] -sphinx-rtd-theme = [] -sphinxcontrib-applehelp = [] -sphinxcontrib-devhelp = [] -sphinxcontrib-htmlhelp = [] -sphinxcontrib-jsmath = [] -sphinxcontrib-qthelp = [] -sphinxcontrib-serializinghtml = [] stevedore = [] structlog = [] tensorboard = [] tensorboard-data-server = [] tensorboard-plugin-wit = [] -terminado = [] threadpoolctl = [] tinycss2 = [] tokenizers = [] @@ -2567,13 +2247,11 @@ tornado = [] tqdm = [] traitlets = [] transformers = [] -typed-ast = [] typing-extensions = [] urllib3 = [] -wcwidth = [] +watchdog = [] webencodings = [] werkzeug = [] -widgetsnbextension = [] xxhash = [] yarl = [] zipp = [] diff --git a/pyproject.toml b/pyproject.toml index 5e113c5b..c9beaa3c 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -14,7 +14,7 @@ documentation = "https://baal.readthedocs.io" repository = "https://github.com/ElementAI/baal/" [tool.poetry.dependencies] -python = ">=3.7,<4" +python = ">=3.8,<4" torch = ">=1.6.0" torchmetrics = "^0.9.3" h5py = "^3.4.0" @@ -41,23 +41,19 @@ torch-hypothesis = "0.2.0" hypothesis = "4.24.0" flake8 = "^3.9.2" pytest-mock = "^3.6.1" -black = "^22.6.0" +black = "^21.8b0" +mypy = "^0.910" +bandit = "^1.7.1" # Documentation -Sphinx = ">2" -sphinx-rtd-theme = "^0.5.2" -asteroid-sphinx-theme = "^0.0.3" -jupyter-sphinx = "^0.3.2" -Pygments = ">=2.6.1" -nbsphinx = "^0.8.7" -sphinx-automodapi = "^0.13" -sphinx-copybutton = "^0.4.0" -numpydoc = "^1.1.0" docutils = "0.16" -recommonmark = "^0.7.1" -mypy = "^0.910" -bandit = "^1.7.1" +# Documentation +mkdocs-jupyter = "^0.21.0" +mkdocs-material = "^8.5.6" +Pygments = "^2.12.0" +mkdocstrings = {extras = ["python"], version = "^0.18.1"} +mkdocs-exclude-search = "^0.6.4" [tool.poetry.extras] vision = ["torchvision", "lightning-flash"] diff --git a/tests/utils/ssl_module_test.py b/tests/utils/ssl_module_test.py index ad20aa2c..2f66cbdf 100644 --- a/tests/utils/ssl_module_test.py +++ b/tests/utils/ssl_module_test.py @@ -55,8 +55,8 @@ def test_epoch(self): 'workers': 0} module = TestSSLModule(self.al_dataset, **hparams) - trainer = Trainer(max_epochs=1, num_sanity_val_steps=0, progress_bar_refresh_rate=0, logger=False, - checkpoint_callback=False) + trainer = Trainer(max_epochs=1, num_sanity_val_steps=0, logger=False, + enable_checkpointing=False) trainer.fit(module) assert len(module.labeled_data) == len(module.unlabeled_data)