3 <head><meta charset="utf-8" />
5 <title>with_sympy</title>
7 <script src="https://cdnjs.cloudflare.com/ajax/libs/require.js/2.1.10/require.min.js"></script>
8 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script>
12 <style type="text/css">
19 * Bootstrap v3.3.7 (http://getbootstrap.com)
20 * Copyright 2011-2016 Twitter, Inc.
21 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
23 /*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */
25 font-family: sans-serif;
26 -ms-text-size-adjust: 100%;
27 -webkit-text-size-adjust: 100%;
51 display: inline-block;
52 vertical-align: baseline;
54 audio:not([controls]) {
63 background-color: transparent;
70 border-bottom: 1px dotted;
95 vertical-align: baseline;
113 box-sizing: content-box;
123 font-family: monospace, monospace;
140 text-transform: none;
143 html input[type="button"],
145 input[type="submit"] {
146 -webkit-appearance: button;
150 html input[disabled] {
153 button::-moz-focus-inner,
154 input::-moz-focus-inner {
161 input[type="checkbox"],
162 input[type="radio"] {
163 box-sizing: border-box;
166 input[type="number"]::-webkit-inner-spin-button,
167 input[type="number"]::-webkit-outer-spin-button {
170 input[type="search"] {
171 -webkit-appearance: textfield;
172 box-sizing: content-box;
174 input[type="search"]::-webkit-search-cancel-button,
175 input[type="search"]::-webkit-search-decoration {
176 -webkit-appearance: none;
179 border: 1px solid #c0c0c0;
181 padding: 0.35em 0.625em 0.75em;
194 border-collapse: collapse;
201 /*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */
206 background: transparent !important;
207 box-shadow: none !important;
208 text-shadow: none !important;
212 text-decoration: underline;
215 content: " (" attr(href) ")";
218 content: " (" attr(title) ")";
221 a[href^="javascript:"]:after {
226 border: 1px solid #999;
227 page-break-inside: avoid;
230 display: table-header-group;
234 page-break-inside: avoid;
237 max-width: 100% !important;
247 page-break-after: avoid;
253 .dropup > .btn > .caret {
254 border-top-color: #000 !important;
257 border: 1px solid #000;
260 border-collapse: collapse !important;
264 background-color: #fff !important;
268 border: 1px solid #ddd !important;
272 font-family: 'Glyphicons Halflings';
273 src: url('../components/bootstrap/fonts/glyphicons-halflings-regular.eot');
274 src: url('../components/bootstrap/fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../components/bootstrap/fonts/glyphicons-halflings-regular.woff2') format('woff2'), url('../components/bootstrap/fonts/glyphicons-halflings-regular.woff') format('woff'), url('../components/bootstrap/fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../components/bootstrap/fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg');
279 display: inline-block;
280 font-family: 'Glyphicons Halflings';
284 -webkit-font-smoothing: antialiased;
285 -moz-osx-font-smoothing: grayscale;
287 .glyphicon-asterisk:before {
290 .glyphicon-plus:before {
293 .glyphicon-euro:before,
294 .glyphicon-eur:before {
297 .glyphicon-minus:before {
300 .glyphicon-cloud:before {
303 .glyphicon-envelope:before {
306 .glyphicon-pencil:before {
309 .glyphicon-glass:before {
312 .glyphicon-music:before {
315 .glyphicon-search:before {
318 .glyphicon-heart:before {
321 .glyphicon-star:before {
324 .glyphicon-star-empty:before {
327 .glyphicon-user:before {
330 .glyphicon-film:before {
333 .glyphicon-th-large:before {
336 .glyphicon-th:before {
339 .glyphicon-th-list:before {
342 .glyphicon-ok:before {
345 .glyphicon-remove:before {
348 .glyphicon-zoom-in:before {
351 .glyphicon-zoom-out:before {
354 .glyphicon-off:before {
357 .glyphicon-signal:before {
360 .glyphicon-cog:before {
363 .glyphicon-trash:before {
366 .glyphicon-home:before {
369 .glyphicon-file:before {
372 .glyphicon-time:before {
375 .glyphicon-road:before {
378 .glyphicon-download-alt:before {
381 .glyphicon-download:before {
384 .glyphicon-upload:before {
387 .glyphicon-inbox:before {
390 .glyphicon-play-circle:before {
393 .glyphicon-repeat:before {
396 .glyphicon-refresh:before {
399 .glyphicon-list-alt:before {
402 .glyphicon-lock:before {
405 .glyphicon-flag:before {
408 .glyphicon-headphones:before {
411 .glyphicon-volume-off:before {
414 .glyphicon-volume-down:before {
417 .glyphicon-volume-up:before {
420 .glyphicon-qrcode:before {
423 .glyphicon-barcode:before {
426 .glyphicon-tag:before {
429 .glyphicon-tags:before {
432 .glyphicon-book:before {
435 .glyphicon-bookmark:before {
438 .glyphicon-print:before {
441 .glyphicon-camera:before {
444 .glyphicon-font:before {
447 .glyphicon-bold:before {
450 .glyphicon-italic:before {
453 .glyphicon-text-height:before {
456 .glyphicon-text-width:before {
459 .glyphicon-align-left:before {
462 .glyphicon-align-center:before {
465 .glyphicon-align-right:before {
468 .glyphicon-align-justify:before {
471 .glyphicon-list:before {
474 .glyphicon-indent-left:before {
477 .glyphicon-indent-right:before {
480 .glyphicon-facetime-video:before {
483 .glyphicon-picture:before {
486 .glyphicon-map-marker:before {
489 .glyphicon-adjust:before {
492 .glyphicon-tint:before {
495 .glyphicon-edit:before {
498 .glyphicon-share:before {
501 .glyphicon-check:before {
504 .glyphicon-move:before {
507 .glyphicon-step-backward:before {
510 .glyphicon-fast-backward:before {
513 .glyphicon-backward:before {
516 .glyphicon-play:before {
519 .glyphicon-pause:before {
522 .glyphicon-stop:before {
525 .glyphicon-forward:before {
528 .glyphicon-fast-forward:before {
531 .glyphicon-step-forward:before {
534 .glyphicon-eject:before {
537 .glyphicon-chevron-left:before {
540 .glyphicon-chevron-right:before {
543 .glyphicon-plus-sign:before {
546 .glyphicon-minus-sign:before {
549 .glyphicon-remove-sign:before {
552 .glyphicon-ok-sign:before {
555 .glyphicon-question-sign:before {
558 .glyphicon-info-sign:before {
561 .glyphicon-screenshot:before {
564 .glyphicon-remove-circle:before {
567 .glyphicon-ok-circle:before {
570 .glyphicon-ban-circle:before {
573 .glyphicon-arrow-left:before {
576 .glyphicon-arrow-right:before {
579 .glyphicon-arrow-up:before {
582 .glyphicon-arrow-down:before {
585 .glyphicon-share-alt:before {
588 .glyphicon-resize-full:before {
591 .glyphicon-resize-small:before {
594 .glyphicon-exclamation-sign:before {
597 .glyphicon-gift:before {
600 .glyphicon-leaf:before {
603 .glyphicon-fire:before {
606 .glyphicon-eye-open:before {
609 .glyphicon-eye-close:before {
612 .glyphicon-warning-sign:before {
615 .glyphicon-plane:before {
618 .glyphicon-calendar:before {
621 .glyphicon-random:before {
624 .glyphicon-comment:before {
627 .glyphicon-magnet:before {
630 .glyphicon-chevron-up:before {
633 .glyphicon-chevron-down:before {
636 .glyphicon-retweet:before {
639 .glyphicon-shopping-cart:before {
642 .glyphicon-folder-close:before {
645 .glyphicon-folder-open:before {
648 .glyphicon-resize-vertical:before {
651 .glyphicon-resize-horizontal:before {
654 .glyphicon-hdd:before {
657 .glyphicon-bullhorn:before {
660 .glyphicon-bell:before {
663 .glyphicon-certificate:before {
666 .glyphicon-thumbs-up:before {
669 .glyphicon-thumbs-down:before {
672 .glyphicon-hand-right:before {
675 .glyphicon-hand-left:before {
678 .glyphicon-hand-up:before {
681 .glyphicon-hand-down:before {
684 .glyphicon-circle-arrow-right:before {
687 .glyphicon-circle-arrow-left:before {
690 .glyphicon-circle-arrow-up:before {
693 .glyphicon-circle-arrow-down:before {
696 .glyphicon-globe:before {
699 .glyphicon-wrench:before {
702 .glyphicon-tasks:before {
705 .glyphicon-filter:before {
708 .glyphicon-briefcase:before {
711 .glyphicon-fullscreen:before {
714 .glyphicon-dashboard:before {
717 .glyphicon-paperclip:before {
720 .glyphicon-heart-empty:before {
723 .glyphicon-link:before {
726 .glyphicon-phone:before {
729 .glyphicon-pushpin:before {
732 .glyphicon-usd:before {
735 .glyphicon-gbp:before {
738 .glyphicon-sort:before {
741 .glyphicon-sort-by-alphabet:before {
744 .glyphicon-sort-by-alphabet-alt:before {
747 .glyphicon-sort-by-order:before {
750 .glyphicon-sort-by-order-alt:before {
753 .glyphicon-sort-by-attributes:before {
756 .glyphicon-sort-by-attributes-alt:before {
759 .glyphicon-unchecked:before {
762 .glyphicon-expand:before {
765 .glyphicon-collapse-down:before {
768 .glyphicon-collapse-up:before {
771 .glyphicon-log-in:before {
774 .glyphicon-flash:before {
777 .glyphicon-log-out:before {
780 .glyphicon-new-window:before {
783 .glyphicon-record:before {
786 .glyphicon-save:before {
789 .glyphicon-open:before {
792 .glyphicon-saved:before {
795 .glyphicon-import:before {
798 .glyphicon-export:before {
801 .glyphicon-send:before {
804 .glyphicon-floppy-disk:before {
807 .glyphicon-floppy-saved:before {
810 .glyphicon-floppy-remove:before {
813 .glyphicon-floppy-save:before {
816 .glyphicon-floppy-open:before {
819 .glyphicon-credit-card:before {
822 .glyphicon-transfer:before {
825 .glyphicon-cutlery:before {
828 .glyphicon-header:before {
831 .glyphicon-compressed:before {
834 .glyphicon-earphone:before {
837 .glyphicon-phone-alt:before {
840 .glyphicon-tower:before {
843 .glyphicon-stats:before {
846 .glyphicon-sd-video:before {
849 .glyphicon-hd-video:before {
852 .glyphicon-subtitles:before {
855 .glyphicon-sound-stereo:before {
858 .glyphicon-sound-dolby:before {
861 .glyphicon-sound-5-1:before {
864 .glyphicon-sound-6-1:before {
867 .glyphicon-sound-7-1:before {
870 .glyphicon-copyright-mark:before {
873 .glyphicon-registration-mark:before {
876 .glyphicon-cloud-download:before {
879 .glyphicon-cloud-upload:before {
882 .glyphicon-tree-conifer:before {
885 .glyphicon-tree-deciduous:before {
888 .glyphicon-cd:before {
891 .glyphicon-save-file:before {
894 .glyphicon-open-file:before {
897 .glyphicon-level-up:before {
900 .glyphicon-copy:before {
903 .glyphicon-paste:before {
906 .glyphicon-alert:before {
909 .glyphicon-equalizer:before {
912 .glyphicon-king:before {
915 .glyphicon-queen:before {
918 .glyphicon-pawn:before {
921 .glyphicon-bishop:before {
924 .glyphicon-knight:before {
927 .glyphicon-baby-formula:before {
930 .glyphicon-tent:before {
933 .glyphicon-blackboard:before {
936 .glyphicon-bed:before {
939 .glyphicon-apple:before {
942 .glyphicon-erase:before {
945 .glyphicon-hourglass:before {
948 .glyphicon-lamp:before {
951 .glyphicon-duplicate:before {
954 .glyphicon-piggy-bank:before {
957 .glyphicon-scissors:before {
960 .glyphicon-bitcoin:before {
963 .glyphicon-btc:before {
966 .glyphicon-xbt:before {
969 .glyphicon-yen:before {
972 .glyphicon-jpy:before {
975 .glyphicon-ruble:before {
978 .glyphicon-rub:before {
981 .glyphicon-scale:before {
984 .glyphicon-ice-lolly:before {
987 .glyphicon-ice-lolly-tasted:before {
990 .glyphicon-education:before {
993 .glyphicon-option-horizontal:before {
996 .glyphicon-option-vertical:before {
999 .glyphicon-menu-hamburger:before {
1002 .glyphicon-modal-window:before {
1005 .glyphicon-oil:before {
1008 .glyphicon-grain:before {
1011 .glyphicon-sunglasses:before {
1014 .glyphicon-text-size:before {
1017 .glyphicon-text-color:before {
1020 .glyphicon-text-background:before {
1023 .glyphicon-object-align-top:before {
1026 .glyphicon-object-align-bottom:before {
1029 .glyphicon-object-align-horizontal:before {
1032 .glyphicon-object-align-left:before {
1035 .glyphicon-object-align-vertical:before {
1038 .glyphicon-object-align-right:before {
1041 .glyphicon-triangle-right:before {
1044 .glyphicon-triangle-left:before {
1047 .glyphicon-triangle-bottom:before {
1050 .glyphicon-triangle-top:before {
1053 .glyphicon-console:before {
1056 .glyphicon-superscript:before {
1059 .glyphicon-subscript:before {
1062 .glyphicon-menu-left:before {
1065 .glyphicon-menu-right:before {
1068 .glyphicon-menu-down:before {
1071 .glyphicon-menu-up:before {
1075 -webkit-box-sizing: border-box;
1076 -moz-box-sizing: border-box;
1077 box-sizing: border-box;
1081 -webkit-box-sizing: border-box;
1082 -moz-box-sizing: border-box;
1083 box-sizing: border-box;
1087 -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
1090 font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
1092 line-height: 1.42857143;
1094 background-color: #fff;
1100 font-family: inherit;
1102 line-height: inherit;
1106 text-decoration: none;
1111 text-decoration: underline;
1114 outline: 5px auto -webkit-focus-ring-color;
1115 outline-offset: -2px;
1121 vertical-align: middle;
1126 .carousel-inner > .item > img,
1127 .carousel-inner > .item > a > img {
1137 line-height: 1.42857143;
1138 background-color: #fff;
1139 border: 1px solid #ddd;
1141 -webkit-transition: all 0.2s ease-in-out;
1142 -o-transition: all 0.2s ease-in-out;
1143 transition: all 0.2s ease-in-out;
1144 display: inline-block;
1153 margin-bottom: 18px;
1155 border-top: 1px solid #eeeeee;
1164 clip: rect(0, 0, 0, 0);
1167 .sr-only-focusable:active,
1168 .sr-only-focusable:focus {
1191 font-family: inherit;
1220 font-weight: normal;
1298 margin-bottom: 18px;
1303 @media (min-width: 768px) {
1314 background-color: #fcf8e3;
1327 text-align: justify;
1330 white-space: nowrap;
1333 text-transform: lowercase;
1336 text-transform: uppercase;
1339 text-transform: capitalize;
1347 a.text-primary:hover,
1348 a.text-primary:focus {
1354 a.text-success:hover,
1355 a.text-success:focus {
1368 a.text-warning:hover,
1369 a.text-warning:focus {
1375 a.text-danger:hover,
1376 a.text-danger:focus {
1381 background-color: #337ab7;
1384 a.bg-primary:focus {
1385 background-color: #286090;
1388 background-color: #dff0d8;
1391 a.bg-success:focus {
1392 background-color: #c1e2b3;
1395 background-color: #d9edf7;
1399 background-color: #afd9ee;
1402 background-color: #fcf8e3;
1405 a.bg-warning:focus {
1406 background-color: #f7ecb5;
1409 background-color: #f2dede;
1413 background-color: #e4b9b9;
1416 padding-bottom: 8px;
1417 margin: 36px 0 18px;
1418 border-bottom: 1px solid #eeeeee;
1441 display: inline-block;
1447 margin-bottom: 18px;
1451 line-height: 1.42857143;
1459 @media (min-width: 541px) {
1466 text-overflow: ellipsis;
1467 white-space: nowrap;
1474 abbr[data-original-title] {
1476 border-bottom: 1px dotted #777777;
1480 text-transform: uppercase;
1486 border-left: 5px solid #eeeeee;
1488 blockquote p:last-child,
1489 blockquote ul:last-child,
1490 blockquote ol:last-child {
1498 line-height: 1.42857143;
1501 blockquote footer:before,
1502 blockquote small:before,
1503 blockquote .small:before {
1504 content: '\2014 \00A0';
1506 .blockquote-reverse,
1507 blockquote.pull-right {
1508 padding-right: 15px;
1510 border-right: 5px solid #eeeeee;
1514 .blockquote-reverse footer:before,
1515 blockquote.pull-right footer:before,
1516 .blockquote-reverse small:before,
1517 blockquote.pull-right small:before,
1518 .blockquote-reverse .small:before,
1519 blockquote.pull-right .small:before {
1522 .blockquote-reverse footer:after,
1523 blockquote.pull-right footer:after,
1524 .blockquote-reverse small:after,
1525 blockquote.pull-right small:after,
1526 .blockquote-reverse .small:after,
1527 blockquote.pull-right .small:after {
1528 content: '\00A0 \2014';
1531 margin-bottom: 18px;
1533 line-height: 1.42857143;
1539 font-family: monospace;
1545 background-color: #f9f2f4;
1552 background-color: transparent;
1554 box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25);
1567 line-height: 1.42857143;
1568 word-break: break-all;
1569 word-wrap: break-word;
1571 background-color: #f5f5f5;
1572 border: 1px solid #ccc;
1579 white-space: pre-wrap;
1580 background-color: transparent;
1593 @media (min-width: 768px) {
1598 @media (min-width: 992px) {
1603 @media (min-width: 1200px) {
1618 .col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 {
1624 .col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 {
1631 width: 91.66666667%;
1634 width: 83.33333333%;
1640 width: 66.66666667%;
1643 width: 58.33333333%;
1649 width: 41.66666667%;
1652 width: 33.33333333%;
1658 width: 16.66666667%;
1667 right: 91.66666667%;
1670 right: 83.33333333%;
1676 right: 66.66666667%;
1679 right: 58.33333333%;
1685 right: 41.66666667%;
1688 right: 33.33333333%;
1694 right: 16.66666667%;
1745 margin-left: 91.66666667%;
1748 margin-left: 83.33333333%;
1754 margin-left: 66.66666667%;
1757 margin-left: 58.33333333%;
1763 margin-left: 41.66666667%;
1766 margin-left: 33.33333333%;
1772 margin-left: 16.66666667%;
1775 margin-left: 8.33333333%;
1780 @media (min-width: 768px) {
1781 .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 {
1788 width: 91.66666667%;
1791 width: 83.33333333%;
1797 width: 66.66666667%;
1800 width: 58.33333333%;
1806 width: 41.66666667%;
1809 width: 33.33333333%;
1815 width: 16.66666667%;
1824 right: 91.66666667%;
1827 right: 83.33333333%;
1833 right: 66.66666667%;
1836 right: 58.33333333%;
1842 right: 41.66666667%;
1845 right: 33.33333333%;
1851 right: 16.66666667%;
1902 margin-left: 91.66666667%;
1905 margin-left: 83.33333333%;
1911 margin-left: 66.66666667%;
1914 margin-left: 58.33333333%;
1920 margin-left: 41.66666667%;
1923 margin-left: 33.33333333%;
1929 margin-left: 16.66666667%;
1932 margin-left: 8.33333333%;
1938 @media (min-width: 992px) {
1939 .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 {
1946 width: 91.66666667%;
1949 width: 83.33333333%;
1955 width: 66.66666667%;
1958 width: 58.33333333%;
1964 width: 41.66666667%;
1967 width: 33.33333333%;
1973 width: 16.66666667%;
1982 right: 91.66666667%;
1985 right: 83.33333333%;
1991 right: 66.66666667%;
1994 right: 58.33333333%;
2000 right: 41.66666667%;
2003 right: 33.33333333%;
2009 right: 16.66666667%;
2060 margin-left: 91.66666667%;
2063 margin-left: 83.33333333%;
2069 margin-left: 66.66666667%;
2072 margin-left: 58.33333333%;
2078 margin-left: 41.66666667%;
2081 margin-left: 33.33333333%;
2087 margin-left: 16.66666667%;
2090 margin-left: 8.33333333%;
2096 @media (min-width: 1200px) {
2097 .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 {
2104 width: 91.66666667%;
2107 width: 83.33333333%;
2113 width: 66.66666667%;
2116 width: 58.33333333%;
2122 width: 41.66666667%;
2125 width: 33.33333333%;
2131 width: 16.66666667%;
2140 right: 91.66666667%;
2143 right: 83.33333333%;
2149 right: 66.66666667%;
2152 right: 58.33333333%;
2158 right: 41.66666667%;
2161 right: 33.33333333%;
2167 right: 16.66666667%;
2218 margin-left: 91.66666667%;
2221 margin-left: 83.33333333%;
2227 margin-left: 66.66666667%;
2230 margin-left: 58.33333333%;
2236 margin-left: 41.66666667%;
2239 margin-left: 33.33333333%;
2245 margin-left: 16.66666667%;
2248 margin-left: 8.33333333%;
2255 background-color: transparent;
2259 padding-bottom: 8px;
2269 margin-bottom: 18px;
2271 .table > thead > tr > th,
2272 .table > tbody > tr > th,
2273 .table > tfoot > tr > th,
2274 .table > thead > tr > td,
2275 .table > tbody > tr > td,
2276 .table > tfoot > tr > td {
2278 line-height: 1.42857143;
2279 vertical-align: top;
2280 border-top: 1px solid #ddd;
2282 .table > thead > tr > th {
2283 vertical-align: bottom;
2284 border-bottom: 2px solid #ddd;
2286 .table > caption + thead > tr:first-child > th,
2287 .table > colgroup + thead > tr:first-child > th,
2288 .table > thead:first-child > tr:first-child > th,
2289 .table > caption + thead > tr:first-child > td,
2290 .table > colgroup + thead > tr:first-child > td,
2291 .table > thead:first-child > tr:first-child > td {
2294 .table > tbody + tbody {
2295 border-top: 2px solid #ddd;
2298 background-color: #fff;
2300 .table-condensed > thead > tr > th,
2301 .table-condensed > tbody > tr > th,
2302 .table-condensed > tfoot > tr > th,
2303 .table-condensed > thead > tr > td,
2304 .table-condensed > tbody > tr > td,
2305 .table-condensed > tfoot > tr > td {
2309 border: 1px solid #ddd;
2311 .table-bordered > thead > tr > th,
2312 .table-bordered > tbody > tr > th,
2313 .table-bordered > tfoot > tr > th,
2314 .table-bordered > thead > tr > td,
2315 .table-bordered > tbody > tr > td,
2316 .table-bordered > tfoot > tr > td {
2317 border: 1px solid #ddd;
2319 .table-bordered > thead > tr > th,
2320 .table-bordered > thead > tr > td {
2321 border-bottom-width: 2px;
2323 .table-striped > tbody > tr:nth-of-type(odd) {
2324 background-color: #f9f9f9;
2326 .table-hover > tbody > tr:hover {
2327 background-color: #f5f5f5;
2329 table col[class*="col-"] {
2332 display: table-column;
2334 table td[class*="col-"],
2335 table th[class*="col-"] {
2338 display: table-cell;
2340 .table > thead > tr > td.active,
2341 .table > tbody > tr > td.active,
2342 .table > tfoot > tr > td.active,
2343 .table > thead > tr > th.active,
2344 .table > tbody > tr > th.active,
2345 .table > tfoot > tr > th.active,
2346 .table > thead > tr.active > td,
2347 .table > tbody > tr.active > td,
2348 .table > tfoot > tr.active > td,
2349 .table > thead > tr.active > th,
2350 .table > tbody > tr.active > th,
2351 .table > tfoot > tr.active > th {
2352 background-color: #f5f5f5;
2354 .table-hover > tbody > tr > td.active:hover,
2355 .table-hover > tbody > tr > th.active:hover,
2356 .table-hover > tbody > tr.active:hover > td,
2357 .table-hover > tbody > tr:hover > .active,
2358 .table-hover > tbody > tr.active:hover > th {
2359 background-color: #e8e8e8;
2361 .table > thead > tr > td.success,
2362 .table > tbody > tr > td.success,
2363 .table > tfoot > tr > td.success,
2364 .table > thead > tr > th.success,
2365 .table > tbody > tr > th.success,
2366 .table > tfoot > tr > th.success,
2367 .table > thead > tr.success > td,
2368 .table > tbody > tr.success > td,
2369 .table > tfoot > tr.success > td,
2370 .table > thead > tr.success > th,
2371 .table > tbody > tr.success > th,
2372 .table > tfoot > tr.success > th {
2373 background-color: #dff0d8;
2375 .table-hover > tbody > tr > td.success:hover,
2376 .table-hover > tbody > tr > th.success:hover,
2377 .table-hover > tbody > tr.success:hover > td,
2378 .table-hover > tbody > tr:hover > .success,
2379 .table-hover > tbody > tr.success:hover > th {
2380 background-color: #d0e9c6;
2382 .table > thead > tr > td.info,
2383 .table > tbody > tr > td.info,
2384 .table > tfoot > tr > td.info,
2385 .table > thead > tr > th.info,
2386 .table > tbody > tr > th.info,
2387 .table > tfoot > tr > th.info,
2388 .table > thead > tr.info > td,
2389 .table > tbody > tr.info > td,
2390 .table > tfoot > tr.info > td,
2391 .table > thead > tr.info > th,
2392 .table > tbody > tr.info > th,
2393 .table > tfoot > tr.info > th {
2394 background-color: #d9edf7;
2396 .table-hover > tbody > tr > td.info:hover,
2397 .table-hover > tbody > tr > th.info:hover,
2398 .table-hover > tbody > tr.info:hover > td,
2399 .table-hover > tbody > tr:hover > .info,
2400 .table-hover > tbody > tr.info:hover > th {
2401 background-color: #c4e3f3;
2403 .table > thead > tr > td.warning,
2404 .table > tbody > tr > td.warning,
2405 .table > tfoot > tr > td.warning,
2406 .table > thead > tr > th.warning,
2407 .table > tbody > tr > th.warning,
2408 .table > tfoot > tr > th.warning,
2409 .table > thead > tr.warning > td,
2410 .table > tbody > tr.warning > td,
2411 .table > tfoot > tr.warning > td,
2412 .table > thead > tr.warning > th,
2413 .table > tbody > tr.warning > th,
2414 .table > tfoot > tr.warning > th {
2415 background-color: #fcf8e3;
2417 .table-hover > tbody > tr > td.warning:hover,
2418 .table-hover > tbody > tr > th.warning:hover,
2419 .table-hover > tbody > tr.warning:hover > td,
2420 .table-hover > tbody > tr:hover > .warning,
2421 .table-hover > tbody > tr.warning:hover > th {
2422 background-color: #faf2cc;
2424 .table > thead > tr > td.danger,
2425 .table > tbody > tr > td.danger,
2426 .table > tfoot > tr > td.danger,
2427 .table > thead > tr > th.danger,
2428 .table > tbody > tr > th.danger,
2429 .table > tfoot > tr > th.danger,
2430 .table > thead > tr.danger > td,
2431 .table > tbody > tr.danger > td,
2432 .table > tfoot > tr.danger > td,
2433 .table > thead > tr.danger > th,
2434 .table > tbody > tr.danger > th,
2435 .table > tfoot > tr.danger > th {
2436 background-color: #f2dede;
2438 .table-hover > tbody > tr > td.danger:hover,
2439 .table-hover > tbody > tr > th.danger:hover,
2440 .table-hover > tbody > tr.danger:hover > td,
2441 .table-hover > tbody > tr:hover > .danger,
2442 .table-hover > tbody > tr.danger:hover > th {
2443 background-color: #ebcccc;
2449 @media screen and (max-width: 767px) {
2452 margin-bottom: 13.5px;
2454 -ms-overflow-style: -ms-autohiding-scrollbar;
2455 border: 1px solid #ddd;
2457 .table-responsive > .table {
2460 .table-responsive > .table > thead > tr > th,
2461 .table-responsive > .table > tbody > tr > th,
2462 .table-responsive > .table > tfoot > tr > th,
2463 .table-responsive > .table > thead > tr > td,
2464 .table-responsive > .table > tbody > tr > td,
2465 .table-responsive > .table > tfoot > tr > td {
2466 white-space: nowrap;
2468 .table-responsive > .table-bordered {
2471 .table-responsive > .table-bordered > thead > tr > th:first-child,
2472 .table-responsive > .table-bordered > tbody > tr > th:first-child,
2473 .table-responsive > .table-bordered > tfoot > tr > th:first-child,
2474 .table-responsive > .table-bordered > thead > tr > td:first-child,
2475 .table-responsive > .table-bordered > tbody > tr > td:first-child,
2476 .table-responsive > .table-bordered > tfoot > tr > td:first-child {
2479 .table-responsive > .table-bordered > thead > tr > th:last-child,
2480 .table-responsive > .table-bordered > tbody > tr > th:last-child,
2481 .table-responsive > .table-bordered > tfoot > tr > th:last-child,
2482 .table-responsive > .table-bordered > thead > tr > td:last-child,
2483 .table-responsive > .table-bordered > tbody > tr > td:last-child,
2484 .table-responsive > .table-bordered > tfoot > tr > td:last-child {
2487 .table-responsive > .table-bordered > tbody > tr:last-child > th,
2488 .table-responsive > .table-bordered > tfoot > tr:last-child > th,
2489 .table-responsive > .table-bordered > tbody > tr:last-child > td,
2490 .table-responsive > .table-bordered > tfoot > tr:last-child > td {
2504 margin-bottom: 18px;
2506 line-height: inherit;
2509 border-bottom: 1px solid #e5e5e5;
2512 display: inline-block;
2517 input[type="search"] {
2518 -webkit-box-sizing: border-box;
2519 -moz-box-sizing: border-box;
2520 box-sizing: border-box;
2522 input[type="radio"],
2523 input[type="checkbox"] {
2526 line-height: normal;
2528 input[type="file"] {
2531 input[type="range"] {
2539 input[type="file"]:focus,
2540 input[type="radio"]:focus,
2541 input[type="checkbox"]:focus {
2542 outline: 5px auto -webkit-focus-ring-color;
2543 outline-offset: -2px;
2549 line-height: 1.42857143;
2558 line-height: 1.42857143;
2560 background-color: #fff;
2561 background-image: none;
2562 border: 1px solid #ccc;
2564 -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
2565 box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
2566 -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
2567 -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
2568 transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
2570 .form-control:focus {
2571 border-color: #66afe9;
2573 -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);
2574 box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);
2576 .form-control::-moz-placeholder {
2580 .form-control:-ms-input-placeholder {
2583 .form-control::-webkit-input-placeholder {
2586 .form-control::-ms-expand {
2588 background-color: transparent;
2590 .form-control[disabled],
2591 .form-control[readonly],
2592 fieldset[disabled] .form-control {
2593 background-color: #eeeeee;
2596 .form-control[disabled],
2597 fieldset[disabled] .form-control {
2598 cursor: not-allowed;
2600 textarea.form-control {
2603 input[type="search"] {
2604 -webkit-appearance: none;
2606 @media screen and (-webkit-min-device-pixel-ratio: 0) {
2607 input[type="date"].form-control,
2608 input[type="time"].form-control,
2609 input[type="datetime-local"].form-control,
2610 input[type="month"].form-control {
2613 input[type="date"].input-sm,
2614 input[type="time"].input-sm,
2615 input[type="datetime-local"].input-sm,
2616 input[type="month"].input-sm,
2617 .input-group-sm input[type="date"],
2618 .input-group-sm input[type="time"],
2619 .input-group-sm input[type="datetime-local"],
2620 .input-group-sm input[type="month"] {
2623 input[type="date"].input-lg,
2624 input[type="time"].input-lg,
2625 input[type="datetime-local"].input-lg,
2626 input[type="month"].input-lg,
2627 .input-group-lg input[type="date"],
2628 .input-group-lg input[type="time"],
2629 .input-group-lg input[type="datetime-local"],
2630 .input-group-lg input[type="month"] {
2635 margin-bottom: 15px;
2642 margin-bottom: 10px;
2649 font-weight: normal;
2652 .radio input[type="radio"],
2653 .radio-inline input[type="radio"],
2654 .checkbox input[type="checkbox"],
2655 .checkbox-inline input[type="checkbox"] {
2661 .checkbox + .checkbox {
2667 display: inline-block;
2670 vertical-align: middle;
2671 font-weight: normal;
2674 .radio-inline + .radio-inline,
2675 .checkbox-inline + .checkbox-inline {
2679 input[type="radio"][disabled],
2680 input[type="checkbox"][disabled],
2681 input[type="radio"].disabled,
2682 input[type="checkbox"].disabled,
2683 fieldset[disabled] input[type="radio"],
2684 fieldset[disabled] input[type="checkbox"] {
2685 cursor: not-allowed;
2687 .radio-inline.disabled,
2688 .checkbox-inline.disabled,
2689 fieldset[disabled] .radio-inline,
2690 fieldset[disabled] .checkbox-inline {
2691 cursor: not-allowed;
2693 .radio.disabled label,
2694 .checkbox.disabled label,
2695 fieldset[disabled] .radio label,
2696 fieldset[disabled] .checkbox label {
2697 cursor: not-allowed;
2699 .form-control-static {
2701 padding-bottom: 7px;
2705 .form-control-static.input-lg,
2706 .form-control-static.input-sm {
2722 select[multiple].input-sm {
2725 .form-group-sm .form-control {
2732 .form-group-sm select.form-control {
2736 .form-group-sm textarea.form-control,
2737 .form-group-sm select[multiple].form-control {
2740 .form-group-sm .form-control-static {
2751 line-height: 1.3333333;
2759 select[multiple].input-lg {
2762 .form-group-lg .form-control {
2766 line-height: 1.3333333;
2769 .form-group-lg select.form-control {
2773 .form-group-lg textarea.form-control,
2774 .form-group-lg select[multiple].form-control {
2777 .form-group-lg .form-control-static {
2782 line-height: 1.3333333;
2787 .has-feedback .form-control {
2788 padding-right: 40px;
2790 .form-control-feedback {
2800 pointer-events: none;
2802 .input-lg + .form-control-feedback,
2803 .input-group-lg + .form-control-feedback,
2804 .form-group-lg .form-control + .form-control-feedback {
2809 .input-sm + .form-control-feedback,
2810 .input-group-sm + .form-control-feedback,
2811 .form-group-sm .form-control + .form-control-feedback {
2816 .has-success .help-block,
2817 .has-success .control-label,
2818 .has-success .radio,
2819 .has-success .checkbox,
2820 .has-success .radio-inline,
2821 .has-success .checkbox-inline,
2822 .has-success.radio label,
2823 .has-success.checkbox label,
2824 .has-success.radio-inline label,
2825 .has-success.checkbox-inline label {
2828 .has-success .form-control {
2829 border-color: #3c763d;
2830 -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
2831 box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
2833 .has-success .form-control:focus {
2834 border-color: #2b542c;
2835 -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;
2836 box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;
2838 .has-success .input-group-addon {
2840 border-color: #3c763d;
2841 background-color: #dff0d8;
2843 .has-success .form-control-feedback {
2846 .has-warning .help-block,
2847 .has-warning .control-label,
2848 .has-warning .radio,
2849 .has-warning .checkbox,
2850 .has-warning .radio-inline,
2851 .has-warning .checkbox-inline,
2852 .has-warning.radio label,
2853 .has-warning.checkbox label,
2854 .has-warning.radio-inline label,
2855 .has-warning.checkbox-inline label {
2858 .has-warning .form-control {
2859 border-color: #8a6d3b;
2860 -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
2861 box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
2863 .has-warning .form-control:focus {
2864 border-color: #66512c;
2865 -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;
2866 box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;
2868 .has-warning .input-group-addon {
2870 border-color: #8a6d3b;
2871 background-color: #fcf8e3;
2873 .has-warning .form-control-feedback {
2876 .has-error .help-block,
2877 .has-error .control-label,
2879 .has-error .checkbox,
2880 .has-error .radio-inline,
2881 .has-error .checkbox-inline,
2882 .has-error.radio label,
2883 .has-error.checkbox label,
2884 .has-error.radio-inline label,
2885 .has-error.checkbox-inline label {
2888 .has-error .form-control {
2889 border-color: #a94442;
2890 -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
2891 box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
2893 .has-error .form-control:focus {
2894 border-color: #843534;
2895 -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;
2896 box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;
2898 .has-error .input-group-addon {
2900 border-color: #a94442;
2901 background-color: #f2dede;
2903 .has-error .form-control-feedback {
2906 .has-feedback label ~ .form-control-feedback {
2909 .has-feedback label.sr-only ~ .form-control-feedback {
2915 margin-bottom: 10px;
2918 @media (min-width: 768px) {
2919 .form-inline .form-group {
2920 display: inline-block;
2922 vertical-align: middle;
2924 .form-inline .form-control {
2925 display: inline-block;
2927 vertical-align: middle;
2929 .form-inline .form-control-static {
2930 display: inline-block;
2932 .form-inline .input-group {
2933 display: inline-table;
2934 vertical-align: middle;
2936 .form-inline .input-group .input-group-addon,
2937 .form-inline .input-group .input-group-btn,
2938 .form-inline .input-group .form-control {
2941 .form-inline .input-group > .form-control {
2944 .form-inline .control-label {
2946 vertical-align: middle;
2948 .form-inline .radio,
2949 .form-inline .checkbox {
2950 display: inline-block;
2953 vertical-align: middle;
2955 .form-inline .radio label,
2956 .form-inline .checkbox label {
2959 .form-inline .radio input[type="radio"],
2960 .form-inline .checkbox input[type="checkbox"] {
2964 .form-inline .has-feedback .form-control-feedback {
2968 .form-horizontal .radio,
2969 .form-horizontal .checkbox,
2970 .form-horizontal .radio-inline,
2971 .form-horizontal .checkbox-inline {
2976 .form-horizontal .radio,
2977 .form-horizontal .checkbox {
2980 .form-horizontal .form-group {
2984 @media (min-width: 768px) {
2985 .form-horizontal .control-label {
2991 .form-horizontal .has-feedback .form-control-feedback {
2994 @media (min-width: 768px) {
2995 .form-horizontal .form-group-lg .control-label {
3000 @media (min-width: 768px) {
3001 .form-horizontal .form-group-sm .control-label {
3007 display: inline-block;
3009 font-weight: normal;
3011 vertical-align: middle;
3012 touch-action: manipulation;
3014 background-image: none;
3015 border: 1px solid transparent;
3016 white-space: nowrap;
3019 line-height: 1.42857143;
3021 -webkit-user-select: none;
3022 -moz-user-select: none;
3023 -ms-user-select: none;
3032 outline: 5px auto -webkit-focus-ring-color;
3033 outline-offset: -2px;
3039 text-decoration: none;
3044 background-image: none;
3045 -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
3046 box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
3050 fieldset[disabled] .btn {
3051 cursor: not-allowed;
3053 filter: alpha(opacity=65);
3054 -webkit-box-shadow: none;
3058 fieldset[disabled] a.btn {
3059 pointer-events: none;
3063 background-color: #fff;
3067 .btn-default.focus {
3069 background-color: #e6e6e6;
3070 border-color: #8c8c8c;
3072 .btn-default:hover {
3074 background-color: #e6e6e6;
3075 border-color: #adadad;
3077 .btn-default:active,
3078 .btn-default.active,
3079 .open > .dropdown-toggle.btn-default {
3081 background-color: #e6e6e6;
3082 border-color: #adadad;
3084 .btn-default:active:hover,
3085 .btn-default.active:hover,
3086 .open > .dropdown-toggle.btn-default:hover,
3087 .btn-default:active:focus,
3088 .btn-default.active:focus,
3089 .open > .dropdown-toggle.btn-default:focus,
3090 .btn-default:active.focus,
3091 .btn-default.active.focus,
3092 .open > .dropdown-toggle.btn-default.focus {
3094 background-color: #d4d4d4;
3095 border-color: #8c8c8c;
3097 .btn-default:active,
3098 .btn-default.active,
3099 .open > .dropdown-toggle.btn-default {
3100 background-image: none;
3102 .btn-default.disabled:hover,
3103 .btn-default[disabled]:hover,
3104 fieldset[disabled] .btn-default:hover,
3105 .btn-default.disabled:focus,
3106 .btn-default[disabled]:focus,
3107 fieldset[disabled] .btn-default:focus,
3108 .btn-default.disabled.focus,
3109 .btn-default[disabled].focus,
3110 fieldset[disabled] .btn-default.focus {
3111 background-color: #fff;
3114 .btn-default .badge {
3116 background-color: #333;
3120 background-color: #337ab7;
3121 border-color: #2e6da4;
3124 .btn-primary.focus {
3126 background-color: #286090;
3127 border-color: #122b40;
3129 .btn-primary:hover {
3131 background-color: #286090;
3132 border-color: #204d74;
3134 .btn-primary:active,
3135 .btn-primary.active,
3136 .open > .dropdown-toggle.btn-primary {
3138 background-color: #286090;
3139 border-color: #204d74;
3141 .btn-primary:active:hover,
3142 .btn-primary.active:hover,
3143 .open > .dropdown-toggle.btn-primary:hover,
3144 .btn-primary:active:focus,
3145 .btn-primary.active:focus,
3146 .open > .dropdown-toggle.btn-primary:focus,
3147 .btn-primary:active.focus,
3148 .btn-primary.active.focus,
3149 .open > .dropdown-toggle.btn-primary.focus {
3151 background-color: #204d74;
3152 border-color: #122b40;
3154 .btn-primary:active,
3155 .btn-primary.active,
3156 .open > .dropdown-toggle.btn-primary {
3157 background-image: none;
3159 .btn-primary.disabled:hover,
3160 .btn-primary[disabled]:hover,
3161 fieldset[disabled] .btn-primary:hover,
3162 .btn-primary.disabled:focus,
3163 .btn-primary[disabled]:focus,
3164 fieldset[disabled] .btn-primary:focus,
3165 .btn-primary.disabled.focus,
3166 .btn-primary[disabled].focus,
3167 fieldset[disabled] .btn-primary.focus {
3168 background-color: #337ab7;
3169 border-color: #2e6da4;
3171 .btn-primary .badge {
3173 background-color: #fff;
3177 background-color: #5cb85c;
3178 border-color: #4cae4c;
3181 .btn-success.focus {
3183 background-color: #449d44;
3184 border-color: #255625;
3186 .btn-success:hover {
3188 background-color: #449d44;
3189 border-color: #398439;
3191 .btn-success:active,
3192 .btn-success.active,
3193 .open > .dropdown-toggle.btn-success {
3195 background-color: #449d44;
3196 border-color: #398439;
3198 .btn-success:active:hover,
3199 .btn-success.active:hover,
3200 .open > .dropdown-toggle.btn-success:hover,
3201 .btn-success:active:focus,
3202 .btn-success.active:focus,
3203 .open > .dropdown-toggle.btn-success:focus,
3204 .btn-success:active.focus,
3205 .btn-success.active.focus,
3206 .open > .dropdown-toggle.btn-success.focus {
3208 background-color: #398439;
3209 border-color: #255625;
3211 .btn-success:active,
3212 .btn-success.active,
3213 .open > .dropdown-toggle.btn-success {
3214 background-image: none;
3216 .btn-success.disabled:hover,
3217 .btn-success[disabled]:hover,
3218 fieldset[disabled] .btn-success:hover,
3219 .btn-success.disabled:focus,
3220 .btn-success[disabled]:focus,
3221 fieldset[disabled] .btn-success:focus,
3222 .btn-success.disabled.focus,
3223 .btn-success[disabled].focus,
3224 fieldset[disabled] .btn-success.focus {
3225 background-color: #5cb85c;
3226 border-color: #4cae4c;
3228 .btn-success .badge {
3230 background-color: #fff;
3234 background-color: #5bc0de;
3235 border-color: #46b8da;
3240 background-color: #31b0d5;
3241 border-color: #1b6d85;
3245 background-color: #31b0d5;
3246 border-color: #269abc;
3250 .open > .dropdown-toggle.btn-info {
3252 background-color: #31b0d5;
3253 border-color: #269abc;
3255 .btn-info:active:hover,
3256 .btn-info.active:hover,
3257 .open > .dropdown-toggle.btn-info:hover,
3258 .btn-info:active:focus,
3259 .btn-info.active:focus,
3260 .open > .dropdown-toggle.btn-info:focus,
3261 .btn-info:active.focus,
3262 .btn-info.active.focus,
3263 .open > .dropdown-toggle.btn-info.focus {
3265 background-color: #269abc;
3266 border-color: #1b6d85;
3270 .open > .dropdown-toggle.btn-info {
3271 background-image: none;
3273 .btn-info.disabled:hover,
3274 .btn-info[disabled]:hover,
3275 fieldset[disabled] .btn-info:hover,
3276 .btn-info.disabled:focus,
3277 .btn-info[disabled]:focus,
3278 fieldset[disabled] .btn-info:focus,
3279 .btn-info.disabled.focus,
3280 .btn-info[disabled].focus,
3281 fieldset[disabled] .btn-info.focus {
3282 background-color: #5bc0de;
3283 border-color: #46b8da;
3287 background-color: #fff;
3291 background-color: #f0ad4e;
3292 border-color: #eea236;
3295 .btn-warning.focus {
3297 background-color: #ec971f;
3298 border-color: #985f0d;
3300 .btn-warning:hover {
3302 background-color: #ec971f;
3303 border-color: #d58512;
3305 .btn-warning:active,
3306 .btn-warning.active,
3307 .open > .dropdown-toggle.btn-warning {
3309 background-color: #ec971f;
3310 border-color: #d58512;
3312 .btn-warning:active:hover,
3313 .btn-warning.active:hover,
3314 .open > .dropdown-toggle.btn-warning:hover,
3315 .btn-warning:active:focus,
3316 .btn-warning.active:focus,
3317 .open > .dropdown-toggle.btn-warning:focus,
3318 .btn-warning:active.focus,
3319 .btn-warning.active.focus,
3320 .open > .dropdown-toggle.btn-warning.focus {
3322 background-color: #d58512;
3323 border-color: #985f0d;
3325 .btn-warning:active,
3326 .btn-warning.active,
3327 .open > .dropdown-toggle.btn-warning {
3328 background-image: none;
3330 .btn-warning.disabled:hover,
3331 .btn-warning[disabled]:hover,
3332 fieldset[disabled] .btn-warning:hover,
3333 .btn-warning.disabled:focus,
3334 .btn-warning[disabled]:focus,
3335 fieldset[disabled] .btn-warning:focus,
3336 .btn-warning.disabled.focus,
3337 .btn-warning[disabled].focus,
3338 fieldset[disabled] .btn-warning.focus {
3339 background-color: #f0ad4e;
3340 border-color: #eea236;
3342 .btn-warning .badge {
3344 background-color: #fff;
3348 background-color: #d9534f;
3349 border-color: #d43f3a;
3354 background-color: #c9302c;
3355 border-color: #761c19;
3359 background-color: #c9302c;
3360 border-color: #ac2925;
3364 .open > .dropdown-toggle.btn-danger {
3366 background-color: #c9302c;
3367 border-color: #ac2925;
3369 .btn-danger:active:hover,
3370 .btn-danger.active:hover,
3371 .open > .dropdown-toggle.btn-danger:hover,
3372 .btn-danger:active:focus,
3373 .btn-danger.active:focus,
3374 .open > .dropdown-toggle.btn-danger:focus,
3375 .btn-danger:active.focus,
3376 .btn-danger.active.focus,
3377 .open > .dropdown-toggle.btn-danger.focus {
3379 background-color: #ac2925;
3380 border-color: #761c19;
3384 .open > .dropdown-toggle.btn-danger {
3385 background-image: none;
3387 .btn-danger.disabled:hover,
3388 .btn-danger[disabled]:hover,
3389 fieldset[disabled] .btn-danger:hover,
3390 .btn-danger.disabled:focus,
3391 .btn-danger[disabled]:focus,
3392 fieldset[disabled] .btn-danger:focus,
3393 .btn-danger.disabled.focus,
3394 .btn-danger[disabled].focus,
3395 fieldset[disabled] .btn-danger.focus {
3396 background-color: #d9534f;
3397 border-color: #d43f3a;
3399 .btn-danger .badge {
3401 background-color: #fff;
3405 font-weight: normal;
3411 .btn-link[disabled],
3412 fieldset[disabled] .btn-link {
3413 background-color: transparent;
3414 -webkit-box-shadow: none;
3421 border-color: transparent;
3426 text-decoration: underline;
3427 background-color: transparent;
3429 .btn-link[disabled]:hover,
3430 fieldset[disabled] .btn-link:hover,
3431 .btn-link[disabled]:focus,
3432 fieldset[disabled] .btn-link:focus {
3434 text-decoration: none;
3437 .btn-group-lg > .btn {
3440 line-height: 1.3333333;
3444 .btn-group-sm > .btn {
3451 .btn-group-xs > .btn {
3461 .btn-block + .btn-block {
3464 input[type="submit"].btn-block,
3465 input[type="reset"].btn-block,
3466 input[type="button"].btn-block {
3471 -webkit-transition: opacity 0.15s linear;
3472 -o-transition: opacity 0.15s linear;
3473 transition: opacity 0.15s linear;
3488 display: table-row-group;
3494 -webkit-transition-property: height, visibility;
3495 transition-property: height, visibility;
3496 -webkit-transition-duration: 0.35s;
3497 transition-duration: 0.35s;
3498 -webkit-transition-timing-function: ease;
3499 transition-timing-function: ease;
3502 display: inline-block;
3506 vertical-align: middle;
3507 border-top: 4px dashed;
3508 border-top: 4px solid \9;
3509 border-right: 4px solid transparent;
3510 border-left: 4px solid transparent;
3516 .dropdown-toggle:focus {
3532 background-color: #fff;
3533 border: 1px solid #ccc;
3534 border: 1px solid rgba(0, 0, 0, 0.15);
3536 -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);
3537 box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);
3538 background-clip: padding-box;
3540 .dropdown-menu.pull-right {
3544 .dropdown-menu .divider {
3548 background-color: #e5e5e5;
3550 .dropdown-menu > li > a {
3554 font-weight: normal;
3555 line-height: 1.42857143;
3557 white-space: nowrap;
3559 .dropdown-menu > li > a:hover,
3560 .dropdown-menu > li > a:focus {
3561 text-decoration: none;
3563 background-color: #f5f5f5;
3565 .dropdown-menu > .active > a,
3566 .dropdown-menu > .active > a:hover,
3567 .dropdown-menu > .active > a:focus {
3569 text-decoration: none;
3571 background-color: #337ab7;
3573 .dropdown-menu > .disabled > a,
3574 .dropdown-menu > .disabled > a:hover,
3575 .dropdown-menu > .disabled > a:focus {
3578 .dropdown-menu > .disabled > a:hover,
3579 .dropdown-menu > .disabled > a:focus {
3580 text-decoration: none;
3581 background-color: transparent;
3582 background-image: none;
3583 filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
3584 cursor: not-allowed;
3586 .open > .dropdown-menu {
3592 .dropdown-menu-right {
3596 .dropdown-menu-left {
3604 line-height: 1.42857143;
3606 white-space: nowrap;
3608 .dropdown-backdrop {
3616 .pull-right > .dropdown-menu {
3621 .navbar-fixed-bottom .dropdown .caret {
3623 border-bottom: 4px dashed;
3624 border-bottom: 4px solid \9;
3627 .dropup .dropdown-menu,
3628 .navbar-fixed-bottom .dropdown .dropdown-menu {
3633 @media (min-width: 541px) {
3634 .navbar-right .dropdown-menu {
3638 .navbar-right .dropdown-menu-left {
3644 .btn-group-vertical {
3646 display: inline-block;
3647 vertical-align: middle;
3650 .btn-group-vertical > .btn {
3654 .btn-group > .btn:hover,
3655 .btn-group-vertical > .btn:hover,
3656 .btn-group > .btn:focus,
3657 .btn-group-vertical > .btn:focus,
3658 .btn-group > .btn:active,
3659 .btn-group-vertical > .btn:active,
3660 .btn-group > .btn.active,
3661 .btn-group-vertical > .btn.active {
3664 .btn-group .btn + .btn,
3665 .btn-group .btn + .btn-group,
3666 .btn-group .btn-group + .btn,
3667 .btn-group .btn-group + .btn-group {
3674 .btn-toolbar .btn-group,
3675 .btn-toolbar .input-group {
3678 .btn-toolbar > .btn,
3679 .btn-toolbar > .btn-group,
3680 .btn-toolbar > .input-group {
3683 .btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {
3686 .btn-group > .btn:first-child {
3689 .btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {
3690 border-bottom-right-radius: 0;
3691 border-top-right-radius: 0;
3693 .btn-group > .btn:last-child:not(:first-child),
3694 .btn-group > .dropdown-toggle:not(:first-child) {
3695 border-bottom-left-radius: 0;
3696 border-top-left-radius: 0;
3698 .btn-group > .btn-group {
3701 .btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {
3704 .btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child,
3705 .btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle {
3706 border-bottom-right-radius: 0;
3707 border-top-right-radius: 0;
3709 .btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child {
3710 border-bottom-left-radius: 0;
3711 border-top-left-radius: 0;
3713 .btn-group .dropdown-toggle:active,
3714 .btn-group.open .dropdown-toggle {
3717 .btn-group > .btn + .dropdown-toggle {
3721 .btn-group > .btn-lg + .dropdown-toggle {
3723 padding-right: 12px;
3725 .btn-group.open .dropdown-toggle {
3726 -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
3727 box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
3729 .btn-group.open .dropdown-toggle.btn-link {
3730 -webkit-box-shadow: none;
3737 border-width: 5px 5px 0;
3738 border-bottom-width: 0;
3740 .dropup .btn-lg .caret {
3741 border-width: 0 5px 5px;
3743 .btn-group-vertical > .btn,
3744 .btn-group-vertical > .btn-group,
3745 .btn-group-vertical > .btn-group > .btn {
3751 .btn-group-vertical > .btn-group > .btn {
3754 .btn-group-vertical > .btn + .btn,
3755 .btn-group-vertical > .btn + .btn-group,
3756 .btn-group-vertical > .btn-group + .btn,
3757 .btn-group-vertical > .btn-group + .btn-group {
3761 .btn-group-vertical > .btn:not(:first-child):not(:last-child) {
3764 .btn-group-vertical > .btn:first-child:not(:last-child) {
3765 border-top-right-radius: 2px;
3766 border-top-left-radius: 2px;
3767 border-bottom-right-radius: 0;
3768 border-bottom-left-radius: 0;
3770 .btn-group-vertical > .btn:last-child:not(:first-child) {
3771 border-top-right-radius: 0;
3772 border-top-left-radius: 0;
3773 border-bottom-right-radius: 2px;
3774 border-bottom-left-radius: 2px;
3776 .btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {
3779 .btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child,
3780 .btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle {
3781 border-bottom-right-radius: 0;
3782 border-bottom-left-radius: 0;
3784 .btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {
3785 border-top-right-radius: 0;
3786 border-top-left-radius: 0;
3788 .btn-group-justified {
3791 table-layout: fixed;
3792 border-collapse: separate;
3794 .btn-group-justified > .btn,
3795 .btn-group-justified > .btn-group {
3797 display: table-cell;
3800 .btn-group-justified > .btn-group .btn {
3803 .btn-group-justified > .btn-group .dropdown-menu {
3806 [data-toggle="buttons"] > .btn input[type="radio"],
3807 [data-toggle="buttons"] > .btn-group > .btn input[type="radio"],
3808 [data-toggle="buttons"] > .btn input[type="checkbox"],
3809 [data-toggle="buttons"] > .btn-group > .btn input[type="checkbox"] {
3811 clip: rect(0, 0, 0, 0);
3812 pointer-events: none;
3817 border-collapse: separate;
3819 .input-group[class*="col-"] {
3824 .input-group .form-control {
3831 .input-group .form-control:focus {
3834 .input-group-lg > .form-control,
3835 .input-group-lg > .input-group-addon,
3836 .input-group-lg > .input-group-btn > .btn {
3840 line-height: 1.3333333;
3843 select.input-group-lg > .form-control,
3844 select.input-group-lg > .input-group-addon,
3845 select.input-group-lg > .input-group-btn > .btn {
3849 textarea.input-group-lg > .form-control,
3850 textarea.input-group-lg > .input-group-addon,
3851 textarea.input-group-lg > .input-group-btn > .btn,
3852 select[multiple].input-group-lg > .form-control,
3853 select[multiple].input-group-lg > .input-group-addon,
3854 select[multiple].input-group-lg > .input-group-btn > .btn {
3857 .input-group-sm > .form-control,
3858 .input-group-sm > .input-group-addon,
3859 .input-group-sm > .input-group-btn > .btn {
3866 select.input-group-sm > .form-control,
3867 select.input-group-sm > .input-group-addon,
3868 select.input-group-sm > .input-group-btn > .btn {
3872 textarea.input-group-sm > .form-control,
3873 textarea.input-group-sm > .input-group-addon,
3874 textarea.input-group-sm > .input-group-btn > .btn,
3875 select[multiple].input-group-sm > .form-control,
3876 select[multiple].input-group-sm > .input-group-addon,
3877 select[multiple].input-group-sm > .input-group-btn > .btn {
3882 .input-group .form-control {
3883 display: table-cell;
3885 .input-group-addon:not(:first-child):not(:last-child),
3886 .input-group-btn:not(:first-child):not(:last-child),
3887 .input-group .form-control:not(:first-child):not(:last-child) {
3893 white-space: nowrap;
3894 vertical-align: middle;
3896 .input-group-addon {
3899 font-weight: normal;
3903 background-color: #eeeeee;
3904 border: 1px solid #ccc;
3907 .input-group-addon.input-sm {
3912 .input-group-addon.input-lg {
3917 .input-group-addon input[type="radio"],
3918 .input-group-addon input[type="checkbox"] {
3921 .input-group .form-control:first-child,
3922 .input-group-addon:first-child,
3923 .input-group-btn:first-child > .btn,
3924 .input-group-btn:first-child > .btn-group > .btn,
3925 .input-group-btn:first-child > .dropdown-toggle,
3926 .input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),
3927 .input-group-btn:last-child > .btn-group:not(:last-child) > .btn {
3928 border-bottom-right-radius: 0;
3929 border-top-right-radius: 0;
3931 .input-group-addon:first-child {
3934 .input-group .form-control:last-child,
3935 .input-group-addon:last-child,
3936 .input-group-btn:last-child > .btn,
3937 .input-group-btn:last-child > .btn-group > .btn,
3938 .input-group-btn:last-child > .dropdown-toggle,
3939 .input-group-btn:first-child > .btn:not(:first-child),
3940 .input-group-btn:first-child > .btn-group:not(:first-child) > .btn {
3941 border-bottom-left-radius: 0;
3942 border-top-left-radius: 0;
3944 .input-group-addon:last-child {
3950 white-space: nowrap;
3952 .input-group-btn > .btn {
3955 .input-group-btn > .btn + .btn {
3958 .input-group-btn > .btn:hover,
3959 .input-group-btn > .btn:focus,
3960 .input-group-btn > .btn:active {
3963 .input-group-btn:first-child > .btn,
3964 .input-group-btn:first-child > .btn-group {
3967 .input-group-btn:last-child > .btn,
3968 .input-group-btn:last-child > .btn-group {
3986 .nav > li > a:hover,
3987 .nav > li > a:focus {
3988 text-decoration: none;
3989 background-color: #eeeeee;
3991 .nav > li.disabled > a {
3994 .nav > li.disabled > a:hover,
3995 .nav > li.disabled > a:focus {
3997 text-decoration: none;
3998 background-color: transparent;
3999 cursor: not-allowed;
4002 .nav .open > a:hover,
4003 .nav .open > a:focus {
4004 background-color: #eeeeee;
4005 border-color: #337ab7;
4011 background-color: #e5e5e5;
4013 .nav > li > a > img {
4017 border-bottom: 1px solid #ddd;
4021 margin-bottom: -1px;
4023 .nav-tabs > li > a {
4025 line-height: 1.42857143;
4026 border: 1px solid transparent;
4027 border-radius: 2px 2px 0 0;
4029 .nav-tabs > li > a:hover {
4030 border-color: #eeeeee #eeeeee #ddd;
4032 .nav-tabs > li.active > a,
4033 .nav-tabs > li.active > a:hover,
4034 .nav-tabs > li.active > a:focus {
4036 background-color: #fff;
4037 border: 1px solid #ddd;
4038 border-bottom-color: transparent;
4041 .nav-tabs.nav-justified {
4045 .nav-tabs.nav-justified > li {
4048 .nav-tabs.nav-justified > li > a {
4052 .nav-tabs.nav-justified > .dropdown .dropdown-menu {
4056 @media (min-width: 768px) {
4057 .nav-tabs.nav-justified > li {
4058 display: table-cell;
4061 .nav-tabs.nav-justified > li > a {
4065 .nav-tabs.nav-justified > li > a {
4069 .nav-tabs.nav-justified > .active > a,
4070 .nav-tabs.nav-justified > .active > a:hover,
4071 .nav-tabs.nav-justified > .active > a:focus {
4072 border: 1px solid #ddd;
4074 @media (min-width: 768px) {
4075 .nav-tabs.nav-justified > li > a {
4076 border-bottom: 1px solid #ddd;
4077 border-radius: 2px 2px 0 0;
4079 .nav-tabs.nav-justified > .active > a,
4080 .nav-tabs.nav-justified > .active > a:hover,
4081 .nav-tabs.nav-justified > .active > a:focus {
4082 border-bottom-color: #fff;
4088 .nav-pills > li > a {
4091 .nav-pills > li + li {
4094 .nav-pills > li.active > a,
4095 .nav-pills > li.active > a:hover,
4096 .nav-pills > li.active > a:focus {
4098 background-color: #337ab7;
4103 .nav-stacked > li + li {
4110 .nav-justified > li {
4113 .nav-justified > li > a {
4117 .nav-justified > .dropdown .dropdown-menu {
4121 @media (min-width: 768px) {
4122 .nav-justified > li {
4123 display: table-cell;
4126 .nav-justified > li > a {
4130 .nav-tabs-justified {
4133 .nav-tabs-justified > li > a {
4137 .nav-tabs-justified > .active > a,
4138 .nav-tabs-justified > .active > a:hover,
4139 .nav-tabs-justified > .active > a:focus {
4140 border: 1px solid #ddd;
4142 @media (min-width: 768px) {
4143 .nav-tabs-justified > li > a {
4144 border-bottom: 1px solid #ddd;
4145 border-radius: 2px 2px 0 0;
4147 .nav-tabs-justified > .active > a,
4148 .nav-tabs-justified > .active > a:hover,
4149 .nav-tabs-justified > .active > a:focus {
4150 border-bottom-color: #fff;
4153 .tab-content > .tab-pane {
4156 .tab-content > .active {
4159 .nav-tabs .dropdown-menu {
4161 border-top-right-radius: 0;
4162 border-top-left-radius: 0;
4167 margin-bottom: 18px;
4168 border: 1px solid transparent;
4170 @media (min-width: 541px) {
4175 @media (min-width: 541px) {
4181 overflow-x: visible;
4184 border-top: 1px solid transparent;
4185 box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1);
4186 -webkit-overflow-scrolling: touch;
4188 .navbar-collapse.in {
4191 @media (min-width: 541px) {
4197 .navbar-collapse.collapse {
4198 display: block !important;
4199 height: auto !important;
4201 overflow: visible !important;
4203 .navbar-collapse.in {
4204 overflow-y: visible;
4206 .navbar-fixed-top .navbar-collapse,
4207 .navbar-static-top .navbar-collapse,
4208 .navbar-fixed-bottom .navbar-collapse {
4213 .navbar-fixed-top .navbar-collapse,
4214 .navbar-fixed-bottom .navbar-collapse {
4217 @media (max-device-width: 540px) and (orientation: landscape) {
4218 .navbar-fixed-top .navbar-collapse,
4219 .navbar-fixed-bottom .navbar-collapse {
4223 .container > .navbar-header,
4224 .container-fluid > .navbar-header,
4225 .container > .navbar-collapse,
4226 .container-fluid > .navbar-collapse {
4230 @media (min-width: 541px) {
4231 .container > .navbar-header,
4232 .container-fluid > .navbar-header,
4233 .container > .navbar-collapse,
4234 .container-fluid > .navbar-collapse {
4239 .navbar-static-top {
4241 border-width: 0 0 1px;
4243 @media (min-width: 541px) {
4244 .navbar-static-top {
4249 .navbar-fixed-bottom {
4255 @media (min-width: 541px) {
4257 .navbar-fixed-bottom {
4263 border-width: 0 0 1px;
4265 .navbar-fixed-bottom {
4268 border-width: 1px 0 0;
4277 .navbar-brand:hover,
4278 .navbar-brand:focus {
4279 text-decoration: none;
4281 .navbar-brand > img {
4284 @media (min-width: 541px) {
4285 .navbar > .container .navbar-brand,
4286 .navbar > .container-fluid .navbar-brand {
4296 margin-bottom: -2px;
4297 background-color: transparent;
4298 background-image: none;
4299 border: 1px solid transparent;
4302 .navbar-toggle:focus {
4305 .navbar-toggle .icon-bar {
4311 .navbar-toggle .icon-bar + .icon-bar {
4314 @media (min-width: 541px) {
4322 .navbar-nav > li > a {
4324 padding-bottom: 10px;
4327 @media (max-width: 540px) {
4328 .navbar-nav .open .dropdown-menu {
4333 background-color: transparent;
4337 .navbar-nav .open .dropdown-menu > li > a,
4338 .navbar-nav .open .dropdown-menu .dropdown-header {
4339 padding: 5px 15px 5px 25px;
4341 .navbar-nav .open .dropdown-menu > li > a {
4344 .navbar-nav .open .dropdown-menu > li > a:hover,
4345 .navbar-nav .open .dropdown-menu > li > a:focus {
4346 background-image: none;
4349 @media (min-width: 541px) {
4357 .navbar-nav > li > a {
4359 padding-bottom: 6px;
4366 border-top: 1px solid transparent;
4367 border-bottom: 1px solid transparent;
4368 -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);
4369 box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);
4371 margin-bottom: -1px;
4373 @media (min-width: 768px) {
4374 .navbar-form .form-group {
4375 display: inline-block;
4377 vertical-align: middle;
4379 .navbar-form .form-control {
4380 display: inline-block;
4382 vertical-align: middle;
4384 .navbar-form .form-control-static {
4385 display: inline-block;
4387 .navbar-form .input-group {
4388 display: inline-table;
4389 vertical-align: middle;
4391 .navbar-form .input-group .input-group-addon,
4392 .navbar-form .input-group .input-group-btn,
4393 .navbar-form .input-group .form-control {
4396 .navbar-form .input-group > .form-control {
4399 .navbar-form .control-label {
4401 vertical-align: middle;
4403 .navbar-form .radio,
4404 .navbar-form .checkbox {
4405 display: inline-block;
4408 vertical-align: middle;
4410 .navbar-form .radio label,
4411 .navbar-form .checkbox label {
4414 .navbar-form .radio input[type="radio"],
4415 .navbar-form .checkbox input[type="checkbox"] {
4419 .navbar-form .has-feedback .form-control-feedback {
4423 @media (max-width: 540px) {
4424 .navbar-form .form-group {
4427 .navbar-form .form-group:last-child {
4431 @media (min-width: 541px) {
4439 -webkit-box-shadow: none;
4443 .navbar-nav > li > .dropdown-menu {
4445 border-top-right-radius: 0;
4446 border-top-left-radius: 0;
4448 .navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {
4450 border-top-right-radius: 2px;
4451 border-top-left-radius: 2px;
4452 border-bottom-right-radius: 0;
4453 border-bottom-left-radius: 0;
4457 margin-bottom: -1px;
4459 .navbar-btn.btn-sm {
4463 .navbar-btn.btn-xs {
4471 @media (min-width: 541px) {
4478 @media (min-width: 541px) {
4480 float: left !important;
4484 float: right !important;
4488 .navbar-right ~ .navbar-right {
4493 background-color: #f8f8f8;
4494 border-color: #e7e7e7;
4496 .navbar-default .navbar-brand {
4499 .navbar-default .navbar-brand:hover,
4500 .navbar-default .navbar-brand:focus {
4502 background-color: transparent;
4504 .navbar-default .navbar-text {
4507 .navbar-default .navbar-nav > li > a {
4510 .navbar-default .navbar-nav > li > a:hover,
4511 .navbar-default .navbar-nav > li > a:focus {
4513 background-color: transparent;
4515 .navbar-default .navbar-nav > .active > a,
4516 .navbar-default .navbar-nav > .active > a:hover,
4517 .navbar-default .navbar-nav > .active > a:focus {
4519 background-color: #e7e7e7;
4521 .navbar-default .navbar-nav > .disabled > a,
4522 .navbar-default .navbar-nav > .disabled > a:hover,
4523 .navbar-default .navbar-nav > .disabled > a:focus {
4525 background-color: transparent;
4527 .navbar-default .navbar-toggle {
4530 .navbar-default .navbar-toggle:hover,
4531 .navbar-default .navbar-toggle:focus {
4532 background-color: #ddd;
4534 .navbar-default .navbar-toggle .icon-bar {
4535 background-color: #888;
4537 .navbar-default .navbar-collapse,
4538 .navbar-default .navbar-form {
4539 border-color: #e7e7e7;
4541 .navbar-default .navbar-nav > .open > a,
4542 .navbar-default .navbar-nav > .open > a:hover,
4543 .navbar-default .navbar-nav > .open > a:focus {
4544 background-color: #e7e7e7;
4547 @media (max-width: 540px) {
4548 .navbar-default .navbar-nav .open .dropdown-menu > li > a {
4551 .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover,
4552 .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus {
4554 background-color: transparent;
4556 .navbar-default .navbar-nav .open .dropdown-menu > .active > a,
4557 .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover,
4558 .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus {
4560 background-color: #e7e7e7;
4562 .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a,
4563 .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover,
4564 .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus {
4566 background-color: transparent;
4569 .navbar-default .navbar-link {
4572 .navbar-default .navbar-link:hover {
4575 .navbar-default .btn-link {
4578 .navbar-default .btn-link:hover,
4579 .navbar-default .btn-link:focus {
4582 .navbar-default .btn-link[disabled]:hover,
4583 fieldset[disabled] .navbar-default .btn-link:hover,
4584 .navbar-default .btn-link[disabled]:focus,
4585 fieldset[disabled] .navbar-default .btn-link:focus {
4589 background-color: #222;
4590 border-color: #080808;
4592 .navbar-inverse .navbar-brand {
4595 .navbar-inverse .navbar-brand:hover,
4596 .navbar-inverse .navbar-brand:focus {
4598 background-color: transparent;
4600 .navbar-inverse .navbar-text {
4603 .navbar-inverse .navbar-nav > li > a {
4606 .navbar-inverse .navbar-nav > li > a:hover,
4607 .navbar-inverse .navbar-nav > li > a:focus {
4609 background-color: transparent;
4611 .navbar-inverse .navbar-nav > .active > a,
4612 .navbar-inverse .navbar-nav > .active > a:hover,
4613 .navbar-inverse .navbar-nav > .active > a:focus {
4615 background-color: #080808;
4617 .navbar-inverse .navbar-nav > .disabled > a,
4618 .navbar-inverse .navbar-nav > .disabled > a:hover,
4619 .navbar-inverse .navbar-nav > .disabled > a:focus {
4621 background-color: transparent;
4623 .navbar-inverse .navbar-toggle {
4626 .navbar-inverse .navbar-toggle:hover,
4627 .navbar-inverse .navbar-toggle:focus {
4628 background-color: #333;
4630 .navbar-inverse .navbar-toggle .icon-bar {
4631 background-color: #fff;
4633 .navbar-inverse .navbar-collapse,
4634 .navbar-inverse .navbar-form {
4635 border-color: #101010;
4637 .navbar-inverse .navbar-nav > .open > a,
4638 .navbar-inverse .navbar-nav > .open > a:hover,
4639 .navbar-inverse .navbar-nav > .open > a:focus {
4640 background-color: #080808;
4643 @media (max-width: 540px) {
4644 .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header {
4645 border-color: #080808;
4647 .navbar-inverse .navbar-nav .open .dropdown-menu .divider {
4648 background-color: #080808;
4650 .navbar-inverse .navbar-nav .open .dropdown-menu > li > a {
4653 .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover,
4654 .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus {
4656 background-color: transparent;
4658 .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a,
4659 .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover,
4660 .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus {
4662 background-color: #080808;
4664 .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a,
4665 .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover,
4666 .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus {
4668 background-color: transparent;
4671 .navbar-inverse .navbar-link {
4674 .navbar-inverse .navbar-link:hover {
4677 .navbar-inverse .btn-link {
4680 .navbar-inverse .btn-link:hover,
4681 .navbar-inverse .btn-link:focus {
4684 .navbar-inverse .btn-link[disabled]:hover,
4685 fieldset[disabled] .navbar-inverse .btn-link:hover,
4686 .navbar-inverse .btn-link[disabled]:focus,
4687 fieldset[disabled] .navbar-inverse .btn-link:focus {
4692 margin-bottom: 18px;
4694 background-color: #f5f5f5;
4698 display: inline-block;
4700 .breadcrumb > li + li:before {
4705 .breadcrumb > .active {
4709 display: inline-block;
4717 .pagination > li > a,
4718 .pagination > li > span {
4722 line-height: 1.42857143;
4723 text-decoration: none;
4725 background-color: #fff;
4726 border: 1px solid #ddd;
4729 .pagination > li:first-child > a,
4730 .pagination > li:first-child > span {
4732 border-bottom-left-radius: 2px;
4733 border-top-left-radius: 2px;
4735 .pagination > li:last-child > a,
4736 .pagination > li:last-child > span {
4737 border-bottom-right-radius: 2px;
4738 border-top-right-radius: 2px;
4740 .pagination > li > a:hover,
4741 .pagination > li > span:hover,
4742 .pagination > li > a:focus,
4743 .pagination > li > span:focus {
4746 background-color: #eeeeee;
4749 .pagination > .active > a,
4750 .pagination > .active > span,
4751 .pagination > .active > a:hover,
4752 .pagination > .active > span:hover,
4753 .pagination > .active > a:focus,
4754 .pagination > .active > span:focus {
4757 background-color: #337ab7;
4758 border-color: #337ab7;
4761 .pagination > .disabled > span,
4762 .pagination > .disabled > span:hover,
4763 .pagination > .disabled > span:focus,
4764 .pagination > .disabled > a,
4765 .pagination > .disabled > a:hover,
4766 .pagination > .disabled > a:focus {
4768 background-color: #fff;
4770 cursor: not-allowed;
4772 .pagination-lg > li > a,
4773 .pagination-lg > li > span {
4776 line-height: 1.3333333;
4778 .pagination-lg > li:first-child > a,
4779 .pagination-lg > li:first-child > span {
4780 border-bottom-left-radius: 3px;
4781 border-top-left-radius: 3px;
4783 .pagination-lg > li:last-child > a,
4784 .pagination-lg > li:last-child > span {
4785 border-bottom-right-radius: 3px;
4786 border-top-right-radius: 3px;
4788 .pagination-sm > li > a,
4789 .pagination-sm > li > span {
4794 .pagination-sm > li:first-child > a,
4795 .pagination-sm > li:first-child > span {
4796 border-bottom-left-radius: 1px;
4797 border-top-left-radius: 1px;
4799 .pagination-sm > li:last-child > a,
4800 .pagination-sm > li:last-child > span {
4801 border-bottom-right-radius: 1px;
4802 border-top-right-radius: 1px;
4815 display: inline-block;
4817 background-color: #fff;
4818 border: 1px solid #ddd;
4819 border-radius: 15px;
4821 .pager li > a:hover,
4822 .pager li > a:focus {
4823 text-decoration: none;
4824 background-color: #eeeeee;
4827 .pager .next > span {
4830 .pager .previous > a,
4831 .pager .previous > span {
4834 .pager .disabled > a,
4835 .pager .disabled > a:hover,
4836 .pager .disabled > a:focus,
4837 .pager .disabled > span {
4839 background-color: #fff;
4840 cursor: not-allowed;
4844 padding: .2em .6em .3em;
4850 white-space: nowrap;
4851 vertical-align: baseline;
4852 border-radius: .25em;
4857 text-decoration: none;
4868 background-color: #777777;
4870 .label-default[href]:hover,
4871 .label-default[href]:focus {
4872 background-color: #5e5e5e;
4875 background-color: #337ab7;
4877 .label-primary[href]:hover,
4878 .label-primary[href]:focus {
4879 background-color: #286090;
4882 background-color: #5cb85c;
4884 .label-success[href]:hover,
4885 .label-success[href]:focus {
4886 background-color: #449d44;
4889 background-color: #5bc0de;
4891 .label-info[href]:hover,
4892 .label-info[href]:focus {
4893 background-color: #31b0d5;
4896 background-color: #f0ad4e;
4898 .label-warning[href]:hover,
4899 .label-warning[href]:focus {
4900 background-color: #ec971f;
4903 background-color: #d9534f;
4905 .label-danger[href]:hover,
4906 .label-danger[href]:focus {
4907 background-color: #c9302c;
4910 display: inline-block;
4917 vertical-align: middle;
4918 white-space: nowrap;
4920 background-color: #777777;
4921 border-radius: 10px;
4931 .btn-group-xs > .btn .badge {
4938 text-decoration: none;
4941 .list-group-item.active > .badge,
4942 .nav-pills > .active > a > .badge {
4944 background-color: #fff;
4946 .list-group-item > .badge {
4949 .list-group-item > .badge + .badge {
4952 .nav-pills > li > a > .badge {
4957 padding-bottom: 30px;
4958 margin-bottom: 30px;
4960 background-color: #eeeeee;
4967 margin-bottom: 15px;
4972 border-top-color: #d5d5d5;
4974 .container .jumbotron,
4975 .container-fluid .jumbotron {
4980 .jumbotron .container {
4983 @media screen and (min-width: 768px) {
4986 padding-bottom: 48px;
4988 .container .jumbotron,
4989 .container-fluid .jumbotron {
4991 padding-right: 60px;
5001 margin-bottom: 18px;
5002 line-height: 1.42857143;
5003 background-color: #fff;
5004 border: 1px solid #ddd;
5006 -webkit-transition: border 0.2s ease-in-out;
5007 -o-transition: border 0.2s ease-in-out;
5008 transition: border 0.2s ease-in-out;
5011 .thumbnail a > img {
5017 a.thumbnail.active {
5018 border-color: #337ab7;
5020 .thumbnail .caption {
5026 margin-bottom: 18px;
5027 border: 1px solid transparent;
5034 .alert .alert-link {
5045 .alert-dismissible {
5046 padding-right: 35px;
5048 .alert-dismissable .close,
5049 .alert-dismissible .close {
5056 background-color: #dff0d8;
5057 border-color: #d6e9c6;
5061 border-top-color: #c9e2b3;
5063 .alert-success .alert-link {
5067 background-color: #d9edf7;
5068 border-color: #bce8f1;
5072 border-top-color: #a6e1ec;
5074 .alert-info .alert-link {
5078 background-color: #fcf8e3;
5079 border-color: #faebcc;
5083 border-top-color: #f7e1b5;
5085 .alert-warning .alert-link {
5089 background-color: #f2dede;
5090 border-color: #ebccd1;
5094 border-top-color: #e4b9c0;
5096 .alert-danger .alert-link {
5099 @-webkit-keyframes progress-bar-stripes {
5101 background-position: 40px 0;
5104 background-position: 0 0;
5107 @keyframes progress-bar-stripes {
5109 background-position: 40px 0;
5112 background-position: 0 0;
5118 margin-bottom: 18px;
5119 background-color: #f5f5f5;
5121 -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
5122 box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
5132 background-color: #337ab7;
5133 -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
5134 box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
5135 -webkit-transition: width 0.6s ease;
5136 -o-transition: width 0.6s ease;
5137 transition: width 0.6s ease;
5139 .progress-striped .progress-bar,
5140 .progress-bar-striped {
5141 background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
5142 background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
5143 background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
5144 background-size: 40px 40px;
5146 .progress.active .progress-bar,
5147 .progress-bar.active {
5148 -webkit-animation: progress-bar-stripes 2s linear infinite;
5149 -o-animation: progress-bar-stripes 2s linear infinite;
5150 animation: progress-bar-stripes 2s linear infinite;
5152 .progress-bar-success {
5153 background-color: #5cb85c;
5155 .progress-striped .progress-bar-success {
5156 background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
5157 background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
5158 background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
5160 .progress-bar-info {
5161 background-color: #5bc0de;
5163 .progress-striped .progress-bar-info {
5164 background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
5165 background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
5166 background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
5168 .progress-bar-warning {
5169 background-color: #f0ad4e;
5171 .progress-striped .progress-bar-warning {
5172 background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
5173 background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
5174 background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
5176 .progress-bar-danger {
5177 background-color: #d9534f;
5179 .progress-striped .progress-bar-danger {
5180 background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
5181 background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
5182 background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
5187 .media:first-child {
5201 .media-object.img-thumbnail {
5205 .media > .pull-right {
5209 .media > .pull-left {
5210 padding-right: 10px;
5215 display: table-cell;
5216 vertical-align: top;
5219 vertical-align: middle;
5222 vertical-align: bottom;
5233 margin-bottom: 20px;
5240 margin-bottom: -1px;
5241 background-color: #fff;
5242 border: 1px solid #ddd;
5244 .list-group-item:first-child {
5245 border-top-right-radius: 2px;
5246 border-top-left-radius: 2px;
5248 .list-group-item:last-child {
5250 border-bottom-right-radius: 2px;
5251 border-bottom-left-radius: 2px;
5254 button.list-group-item {
5257 a.list-group-item .list-group-item-heading,
5258 button.list-group-item .list-group-item-heading {
5261 a.list-group-item:hover,
5262 button.list-group-item:hover,
5263 a.list-group-item:focus,
5264 button.list-group-item:focus {
5265 text-decoration: none;
5267 background-color: #f5f5f5;
5269 button.list-group-item {
5273 .list-group-item.disabled,
5274 .list-group-item.disabled:hover,
5275 .list-group-item.disabled:focus {
5276 background-color: #eeeeee;
5278 cursor: not-allowed;
5280 .list-group-item.disabled .list-group-item-heading,
5281 .list-group-item.disabled:hover .list-group-item-heading,
5282 .list-group-item.disabled:focus .list-group-item-heading {
5285 .list-group-item.disabled .list-group-item-text,
5286 .list-group-item.disabled:hover .list-group-item-text,
5287 .list-group-item.disabled:focus .list-group-item-text {
5290 .list-group-item.active,
5291 .list-group-item.active:hover,
5292 .list-group-item.active:focus {
5295 background-color: #337ab7;
5296 border-color: #337ab7;
5298 .list-group-item.active .list-group-item-heading,
5299 .list-group-item.active:hover .list-group-item-heading,
5300 .list-group-item.active:focus .list-group-item-heading,
5301 .list-group-item.active .list-group-item-heading > small,
5302 .list-group-item.active:hover .list-group-item-heading > small,
5303 .list-group-item.active:focus .list-group-item-heading > small,
5304 .list-group-item.active .list-group-item-heading > .small,
5305 .list-group-item.active:hover .list-group-item-heading > .small,
5306 .list-group-item.active:focus .list-group-item-heading > .small {
5309 .list-group-item.active .list-group-item-text,
5310 .list-group-item.active:hover .list-group-item-text,
5311 .list-group-item.active:focus .list-group-item-text {
5314 .list-group-item-success {
5316 background-color: #dff0d8;
5318 a.list-group-item-success,
5319 button.list-group-item-success {
5322 a.list-group-item-success .list-group-item-heading,
5323 button.list-group-item-success .list-group-item-heading {
5326 a.list-group-item-success:hover,
5327 button.list-group-item-success:hover,
5328 a.list-group-item-success:focus,
5329 button.list-group-item-success:focus {
5331 background-color: #d0e9c6;
5333 a.list-group-item-success.active,
5334 button.list-group-item-success.active,
5335 a.list-group-item-success.active:hover,
5336 button.list-group-item-success.active:hover,
5337 a.list-group-item-success.active:focus,
5338 button.list-group-item-success.active:focus {
5340 background-color: #3c763d;
5341 border-color: #3c763d;
5343 .list-group-item-info {
5345 background-color: #d9edf7;
5347 a.list-group-item-info,
5348 button.list-group-item-info {
5351 a.list-group-item-info .list-group-item-heading,
5352 button.list-group-item-info .list-group-item-heading {
5355 a.list-group-item-info:hover,
5356 button.list-group-item-info:hover,
5357 a.list-group-item-info:focus,
5358 button.list-group-item-info:focus {
5360 background-color: #c4e3f3;
5362 a.list-group-item-info.active,
5363 button.list-group-item-info.active,
5364 a.list-group-item-info.active:hover,
5365 button.list-group-item-info.active:hover,
5366 a.list-group-item-info.active:focus,
5367 button.list-group-item-info.active:focus {
5369 background-color: #31708f;
5370 border-color: #31708f;
5372 .list-group-item-warning {
5374 background-color: #fcf8e3;
5376 a.list-group-item-warning,
5377 button.list-group-item-warning {
5380 a.list-group-item-warning .list-group-item-heading,
5381 button.list-group-item-warning .list-group-item-heading {
5384 a.list-group-item-warning:hover,
5385 button.list-group-item-warning:hover,
5386 a.list-group-item-warning:focus,
5387 button.list-group-item-warning:focus {
5389 background-color: #faf2cc;
5391 a.list-group-item-warning.active,
5392 button.list-group-item-warning.active,
5393 a.list-group-item-warning.active:hover,
5394 button.list-group-item-warning.active:hover,
5395 a.list-group-item-warning.active:focus,
5396 button.list-group-item-warning.active:focus {
5398 background-color: #8a6d3b;
5399 border-color: #8a6d3b;
5401 .list-group-item-danger {
5403 background-color: #f2dede;
5405 a.list-group-item-danger,
5406 button.list-group-item-danger {
5409 a.list-group-item-danger .list-group-item-heading,
5410 button.list-group-item-danger .list-group-item-heading {
5413 a.list-group-item-danger:hover,
5414 button.list-group-item-danger:hover,
5415 a.list-group-item-danger:focus,
5416 button.list-group-item-danger:focus {
5418 background-color: #ebcccc;
5420 a.list-group-item-danger.active,
5421 button.list-group-item-danger.active,
5422 a.list-group-item-danger.active:hover,
5423 button.list-group-item-danger.active:hover,
5424 a.list-group-item-danger.active:focus,
5425 button.list-group-item-danger.active:focus {
5427 background-color: #a94442;
5428 border-color: #a94442;
5430 .list-group-item-heading {
5434 .list-group-item-text {
5439 margin-bottom: 18px;
5440 background-color: #fff;
5441 border: 1px solid transparent;
5443 -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);
5444 box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);
5451 border-bottom: 1px solid transparent;
5452 border-top-right-radius: 1px;
5453 border-top-left-radius: 1px;
5455 .panel-heading > .dropdown .dropdown-toggle {
5465 .panel-title > small,
5466 .panel-title > .small,
5467 .panel-title > small > a,
5468 .panel-title > .small > a {
5473 background-color: #f5f5f5;
5474 border-top: 1px solid #ddd;
5475 border-bottom-right-radius: 1px;
5476 border-bottom-left-radius: 1px;
5478 .panel > .list-group,
5479 .panel > .panel-collapse > .list-group {
5482 .panel > .list-group .list-group-item,
5483 .panel > .panel-collapse > .list-group .list-group-item {
5484 border-width: 1px 0;
5487 .panel > .list-group:first-child .list-group-item:first-child,
5488 .panel > .panel-collapse > .list-group:first-child .list-group-item:first-child {
5490 border-top-right-radius: 1px;
5491 border-top-left-radius: 1px;
5493 .panel > .list-group:last-child .list-group-item:last-child,
5494 .panel > .panel-collapse > .list-group:last-child .list-group-item:last-child {
5496 border-bottom-right-radius: 1px;
5497 border-bottom-left-radius: 1px;
5499 .panel > .panel-heading + .panel-collapse > .list-group .list-group-item:first-child {
5500 border-top-right-radius: 0;
5501 border-top-left-radius: 0;
5503 .panel-heading + .list-group .list-group-item:first-child {
5504 border-top-width: 0;
5506 .list-group + .panel-footer {
5507 border-top-width: 0;
5510 .panel > .table-responsive > .table,
5511 .panel > .panel-collapse > .table {
5514 .panel > .table caption,
5515 .panel > .table-responsive > .table caption,
5516 .panel > .panel-collapse > .table caption {
5518 padding-right: 15px;
5520 .panel > .table:first-child,
5521 .panel > .table-responsive:first-child > .table:first-child {
5522 border-top-right-radius: 1px;
5523 border-top-left-radius: 1px;
5525 .panel > .table:first-child > thead:first-child > tr:first-child,
5526 .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child,
5527 .panel > .table:first-child > tbody:first-child > tr:first-child,
5528 .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child {
5529 border-top-left-radius: 1px;
5530 border-top-right-radius: 1px;
5532 .panel > .table:first-child > thead:first-child > tr:first-child td:first-child,
5533 .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child,
5534 .panel > .table:first-child > tbody:first-child > tr:first-child td:first-child,
5535 .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child,
5536 .panel > .table:first-child > thead:first-child > tr:first-child th:first-child,
5537 .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child,
5538 .panel > .table:first-child > tbody:first-child > tr:first-child th:first-child,
5539 .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child {
5540 border-top-left-radius: 1px;
5542 .panel > .table:first-child > thead:first-child > tr:first-child td:last-child,
5543 .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child,
5544 .panel > .table:first-child > tbody:first-child > tr:first-child td:last-child,
5545 .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child,
5546 .panel > .table:first-child > thead:first-child > tr:first-child th:last-child,
5547 .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child,
5548 .panel > .table:first-child > tbody:first-child > tr:first-child th:last-child,
5549 .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child {
5550 border-top-right-radius: 1px;
5552 .panel > .table:last-child,
5553 .panel > .table-responsive:last-child > .table:last-child {
5554 border-bottom-right-radius: 1px;
5555 border-bottom-left-radius: 1px;
5557 .panel > .table:last-child > tbody:last-child > tr:last-child,
5558 .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child,
5559 .panel > .table:last-child > tfoot:last-child > tr:last-child,
5560 .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child {
5561 border-bottom-left-radius: 1px;
5562 border-bottom-right-radius: 1px;
5564 .panel > .table:last-child > tbody:last-child > tr:last-child td:first-child,
5565 .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child,
5566 .panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child,
5567 .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child,
5568 .panel > .table:last-child > tbody:last-child > tr:last-child th:first-child,
5569 .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child,
5570 .panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child,
5571 .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child {
5572 border-bottom-left-radius: 1px;
5574 .panel > .table:last-child > tbody:last-child > tr:last-child td:last-child,
5575 .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child,
5576 .panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child,
5577 .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child,
5578 .panel > .table:last-child > tbody:last-child > tr:last-child th:last-child,
5579 .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child,
5580 .panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child,
5581 .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child {
5582 border-bottom-right-radius: 1px;
5584 .panel > .panel-body + .table,
5585 .panel > .panel-body + .table-responsive,
5586 .panel > .table + .panel-body,
5587 .panel > .table-responsive + .panel-body {
5588 border-top: 1px solid #ddd;
5590 .panel > .table > tbody:first-child > tr:first-child th,
5591 .panel > .table > tbody:first-child > tr:first-child td {
5594 .panel > .table-bordered,
5595 .panel > .table-responsive > .table-bordered {
5598 .panel > .table-bordered > thead > tr > th:first-child,
5599 .panel > .table-responsive > .table-bordered > thead > tr > th:first-child,
5600 .panel > .table-bordered > tbody > tr > th:first-child,
5601 .panel > .table-responsive > .table-bordered > tbody > tr > th:first-child,
5602 .panel > .table-bordered > tfoot > tr > th:first-child,
5603 .panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child,
5604 .panel > .table-bordered > thead > tr > td:first-child,
5605 .panel > .table-responsive > .table-bordered > thead > tr > td:first-child,
5606 .panel > .table-bordered > tbody > tr > td:first-child,
5607 .panel > .table-responsive > .table-bordered > tbody > tr > td:first-child,
5608 .panel > .table-bordered > tfoot > tr > td:first-child,
5609 .panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child {
5612 .panel > .table-bordered > thead > tr > th:last-child,
5613 .panel > .table-responsive > .table-bordered > thead > tr > th:last-child,
5614 .panel > .table-bordered > tbody > tr > th:last-child,
5615 .panel > .table-responsive > .table-bordered > tbody > tr > th:last-child,
5616 .panel > .table-bordered > tfoot > tr > th:last-child,
5617 .panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child,
5618 .panel > .table-bordered > thead > tr > td:last-child,
5619 .panel > .table-responsive > .table-bordered > thead > tr > td:last-child,
5620 .panel > .table-bordered > tbody > tr > td:last-child,
5621 .panel > .table-responsive > .table-bordered > tbody > tr > td:last-child,
5622 .panel > .table-bordered > tfoot > tr > td:last-child,
5623 .panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child {
5626 .panel > .table-bordered > thead > tr:first-child > td,
5627 .panel > .table-responsive > .table-bordered > thead > tr:first-child > td,
5628 .panel > .table-bordered > tbody > tr:first-child > td,
5629 .panel > .table-responsive > .table-bordered > tbody > tr:first-child > td,
5630 .panel > .table-bordered > thead > tr:first-child > th,
5631 .panel > .table-responsive > .table-bordered > thead > tr:first-child > th,
5632 .panel > .table-bordered > tbody > tr:first-child > th,
5633 .panel > .table-responsive > .table-bordered > tbody > tr:first-child > th {
5636 .panel > .table-bordered > tbody > tr:last-child > td,
5637 .panel > .table-responsive > .table-bordered > tbody > tr:last-child > td,
5638 .panel > .table-bordered > tfoot > tr:last-child > td,
5639 .panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td,
5640 .panel > .table-bordered > tbody > tr:last-child > th,
5641 .panel > .table-responsive > .table-bordered > tbody > tr:last-child > th,
5642 .panel > .table-bordered > tfoot > tr:last-child > th,
5643 .panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th {
5646 .panel > .table-responsive {
5651 margin-bottom: 18px;
5653 .panel-group .panel {
5657 .panel-group .panel + .panel {
5660 .panel-group .panel-heading {
5663 .panel-group .panel-heading + .panel-collapse > .panel-body,
5664 .panel-group .panel-heading + .panel-collapse > .list-group {
5665 border-top: 1px solid #ddd;
5667 .panel-group .panel-footer {
5670 .panel-group .panel-footer + .panel-collapse .panel-body {
5671 border-bottom: 1px solid #ddd;
5676 .panel-default > .panel-heading {
5678 background-color: #f5f5f5;
5681 .panel-default > .panel-heading + .panel-collapse > .panel-body {
5682 border-top-color: #ddd;
5684 .panel-default > .panel-heading .badge {
5686 background-color: #333333;
5688 .panel-default > .panel-footer + .panel-collapse > .panel-body {
5689 border-bottom-color: #ddd;
5692 border-color: #337ab7;
5694 .panel-primary > .panel-heading {
5696 background-color: #337ab7;
5697 border-color: #337ab7;
5699 .panel-primary > .panel-heading + .panel-collapse > .panel-body {
5700 border-top-color: #337ab7;
5702 .panel-primary > .panel-heading .badge {
5704 background-color: #fff;
5706 .panel-primary > .panel-footer + .panel-collapse > .panel-body {
5707 border-bottom-color: #337ab7;
5710 border-color: #d6e9c6;
5712 .panel-success > .panel-heading {
5714 background-color: #dff0d8;
5715 border-color: #d6e9c6;
5717 .panel-success > .panel-heading + .panel-collapse > .panel-body {
5718 border-top-color: #d6e9c6;
5720 .panel-success > .panel-heading .badge {
5722 background-color: #3c763d;
5724 .panel-success > .panel-footer + .panel-collapse > .panel-body {
5725 border-bottom-color: #d6e9c6;
5728 border-color: #bce8f1;
5730 .panel-info > .panel-heading {
5732 background-color: #d9edf7;
5733 border-color: #bce8f1;
5735 .panel-info > .panel-heading + .panel-collapse > .panel-body {
5736 border-top-color: #bce8f1;
5738 .panel-info > .panel-heading .badge {
5740 background-color: #31708f;
5742 .panel-info > .panel-footer + .panel-collapse > .panel-body {
5743 border-bottom-color: #bce8f1;
5746 border-color: #faebcc;
5748 .panel-warning > .panel-heading {
5750 background-color: #fcf8e3;
5751 border-color: #faebcc;
5753 .panel-warning > .panel-heading + .panel-collapse > .panel-body {
5754 border-top-color: #faebcc;
5756 .panel-warning > .panel-heading .badge {
5758 background-color: #8a6d3b;
5760 .panel-warning > .panel-footer + .panel-collapse > .panel-body {
5761 border-bottom-color: #faebcc;
5764 border-color: #ebccd1;
5766 .panel-danger > .panel-heading {
5768 background-color: #f2dede;
5769 border-color: #ebccd1;
5771 .panel-danger > .panel-heading + .panel-collapse > .panel-body {
5772 border-top-color: #ebccd1;
5774 .panel-danger > .panel-heading .badge {
5776 background-color: #a94442;
5778 .panel-danger > .panel-footer + .panel-collapse > .panel-body {
5779 border-bottom-color: #ebccd1;
5788 .embed-responsive .embed-responsive-item,
5789 .embed-responsive iframe,
5790 .embed-responsive embed,
5791 .embed-responsive object,
5792 .embed-responsive video {
5801 .embed-responsive-16by9 {
5802 padding-bottom: 56.25%;
5804 .embed-responsive-4by3 {
5805 padding-bottom: 75%;
5810 margin-bottom: 20px;
5811 background-color: #f5f5f5;
5812 border: 1px solid #e3e3e3;
5814 -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
5815 box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
5819 border-color: rgba(0, 0, 0, 0.15);
5835 text-shadow: 0 1px 0 #fff;
5837 filter: alpha(opacity=20);
5842 text-decoration: none;
5845 filter: alpha(opacity=50);
5850 background: transparent;
5852 -webkit-appearance: none;
5866 -webkit-overflow-scrolling: touch;
5869 .modal.fade .modal-dialog {
5870 -webkit-transform: translate(0, -25%);
5871 -ms-transform: translate(0, -25%);
5872 -o-transform: translate(0, -25%);
5873 transform: translate(0, -25%);
5874 -webkit-transition: -webkit-transform 0.3s ease-out;
5875 -moz-transition: -moz-transform 0.3s ease-out;
5876 -o-transition: -o-transform 0.3s ease-out;
5877 transition: transform 0.3s ease-out;
5879 .modal.in .modal-dialog {
5880 -webkit-transform: translate(0, 0);
5881 -ms-transform: translate(0, 0);
5882 -o-transform: translate(0, 0);
5883 transform: translate(0, 0);
5885 .modal-open .modal {
5896 background-color: #fff;
5897 border: 1px solid #999;
5898 border: 1px solid rgba(0, 0, 0, 0.2);
5900 -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);
5901 box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);
5902 background-clip: padding-box;
5912 background-color: #000;
5914 .modal-backdrop.fade {
5916 filter: alpha(opacity=0);
5918 .modal-backdrop.in {
5920 filter: alpha(opacity=50);
5924 border-bottom: 1px solid #e5e5e5;
5926 .modal-header .close {
5931 line-height: 1.42857143;
5940 border-top: 1px solid #e5e5e5;
5942 .modal-footer .btn + .btn {
5946 .modal-footer .btn-group .btn + .btn {
5949 .modal-footer .btn-block + .btn-block {
5952 .modal-scrollbar-measure {
5959 @media (min-width: 768px) {
5965 -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);
5966 box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);
5972 @media (min-width: 992px) {
5981 font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
5983 font-weight: normal;
5984 letter-spacing: normal;
5986 line-height: 1.42857143;
5989 text-decoration: none;
5991 text-transform: none;
5992 white-space: normal;
5994 word-spacing: normal;
5998 filter: alpha(opacity=0);
6002 filter: alpha(opacity=90);
6025 background-color: #000;
6032 border-color: transparent;
6033 border-style: solid;
6035 .tooltip.top .tooltip-arrow {
6039 border-width: 5px 5px 0;
6040 border-top-color: #000;
6042 .tooltip.top-left .tooltip-arrow {
6045 margin-bottom: -5px;
6046 border-width: 5px 5px 0;
6047 border-top-color: #000;
6049 .tooltip.top-right .tooltip-arrow {
6052 margin-bottom: -5px;
6053 border-width: 5px 5px 0;
6054 border-top-color: #000;
6056 .tooltip.right .tooltip-arrow {
6060 border-width: 5px 5px 5px 0;
6061 border-right-color: #000;
6063 .tooltip.left .tooltip-arrow {
6067 border-width: 5px 0 5px 5px;
6068 border-left-color: #000;
6070 .tooltip.bottom .tooltip-arrow {
6074 border-width: 0 5px 5px;
6075 border-bottom-color: #000;
6077 .tooltip.bottom-left .tooltip-arrow {
6081 border-width: 0 5px 5px;
6082 border-bottom-color: #000;
6084 .tooltip.bottom-right .tooltip-arrow {
6088 border-width: 0 5px 5px;
6089 border-bottom-color: #000;
6099 font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
6101 font-weight: normal;
6102 letter-spacing: normal;
6104 line-height: 1.42857143;
6107 text-decoration: none;
6109 text-transform: none;
6110 white-space: normal;
6112 word-spacing: normal;
6115 background-color: #fff;
6116 background-clip: padding-box;
6117 border: 1px solid #ccc;
6118 border: 1px solid rgba(0, 0, 0, 0.2);
6120 -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
6121 box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
6139 background-color: #f7f7f7;
6140 border-bottom: 1px solid #ebebeb;
6141 border-radius: 2px 2px 0 0;
6147 .popover > .arrow:after {
6152 border-color: transparent;
6153 border-style: solid;
6158 .popover > .arrow:after {
6162 .popover.top > .arrow {
6165 border-bottom-width: 0;
6166 border-top-color: #999999;
6167 border-top-color: rgba(0, 0, 0, 0.25);
6170 .popover.top > .arrow:after {
6174 border-bottom-width: 0;
6175 border-top-color: #fff;
6177 .popover.right > .arrow {
6181 border-left-width: 0;
6182 border-right-color: #999999;
6183 border-right-color: rgba(0, 0, 0, 0.25);
6185 .popover.right > .arrow:after {
6189 border-left-width: 0;
6190 border-right-color: #fff;
6192 .popover.bottom > .arrow {
6195 border-top-width: 0;
6196 border-bottom-color: #999999;
6197 border-bottom-color: rgba(0, 0, 0, 0.25);
6200 .popover.bottom > .arrow:after {
6204 border-top-width: 0;
6205 border-bottom-color: #fff;
6207 .popover.left > .arrow {
6211 border-right-width: 0;
6212 border-left-color: #999999;
6213 border-left-color: rgba(0, 0, 0, 0.25);
6215 .popover.left > .arrow:after {
6218 border-right-width: 0;
6219 border-left-color: #fff;
6230 .carousel-inner > .item {
6233 -webkit-transition: 0.6s ease-in-out left;
6234 -o-transition: 0.6s ease-in-out left;
6235 transition: 0.6s ease-in-out left;
6237 .carousel-inner > .item > img,
6238 .carousel-inner > .item > a > img {
6241 @media all and (transform-3d), (-webkit-transform-3d) {
6242 .carousel-inner > .item {
6243 -webkit-transition: -webkit-transform 0.6s ease-in-out;
6244 -moz-transition: -moz-transform 0.6s ease-in-out;
6245 -o-transition: -o-transform 0.6s ease-in-out;
6246 transition: transform 0.6s ease-in-out;
6247 -webkit-backface-visibility: hidden;
6248 -moz-backface-visibility: hidden;
6249 backface-visibility: hidden;
6250 -webkit-perspective: 1000px;
6251 -moz-perspective: 1000px;
6252 perspective: 1000px;
6254 .carousel-inner > .item.next,
6255 .carousel-inner > .item.active.right {
6256 -webkit-transform: translate3d(100%, 0, 0);
6257 transform: translate3d(100%, 0, 0);
6260 .carousel-inner > .item.prev,
6261 .carousel-inner > .item.active.left {
6262 -webkit-transform: translate3d(-100%, 0, 0);
6263 transform: translate3d(-100%, 0, 0);
6266 .carousel-inner > .item.next.left,
6267 .carousel-inner > .item.prev.right,
6268 .carousel-inner > .item.active {
6269 -webkit-transform: translate3d(0, 0, 0);
6270 transform: translate3d(0, 0, 0);
6274 .carousel-inner > .active,
6275 .carousel-inner > .next,
6276 .carousel-inner > .prev {
6279 .carousel-inner > .active {
6282 .carousel-inner > .next,
6283 .carousel-inner > .prev {
6288 .carousel-inner > .next {
6291 .carousel-inner > .prev {
6294 .carousel-inner > .next.left,
6295 .carousel-inner > .prev.right {
6298 .carousel-inner > .active.left {
6301 .carousel-inner > .active.right {
6311 filter: alpha(opacity=50);
6315 text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);
6316 background-color: rgba(0, 0, 0, 0);
6318 .carousel-control.left {
6319 background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);
6320 background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);
6321 background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);
6322 background-repeat: repeat-x;
6323 filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);
6325 .carousel-control.right {
6328 background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);
6329 background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);
6330 background-image: linear-gradient(to right, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);
6331 background-repeat: repeat-x;
6332 filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);
6334 .carousel-control:hover,
6335 .carousel-control:focus {
6338 text-decoration: none;
6340 filter: alpha(opacity=90);
6342 .carousel-control .icon-prev,
6343 .carousel-control .icon-next,
6344 .carousel-control .glyphicon-chevron-left,
6345 .carousel-control .glyphicon-chevron-right {
6350 display: inline-block;
6352 .carousel-control .icon-prev,
6353 .carousel-control .glyphicon-chevron-left {
6357 .carousel-control .icon-next,
6358 .carousel-control .glyphicon-chevron-right {
6360 margin-right: -10px;
6362 .carousel-control .icon-prev,
6363 .carousel-control .icon-next {
6369 .carousel-control .icon-prev:before {
6372 .carousel-control .icon-next:before {
6375 .carousel-indicators {
6386 .carousel-indicators li {
6387 display: inline-block;
6391 text-indent: -999px;
6392 border: 1px solid #fff;
6393 border-radius: 10px;
6395 background-color: #000 \9;
6396 background-color: rgba(0, 0, 0, 0);
6398 .carousel-indicators .active {
6402 background-color: #fff;
6411 padding-bottom: 20px;
6414 text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);
6416 .carousel-caption .btn {
6419 @media screen and (min-width: 768px) {
6420 .carousel-control .glyphicon-chevron-left,
6421 .carousel-control .glyphicon-chevron-right,
6422 .carousel-control .icon-prev,
6423 .carousel-control .icon-next {
6429 .carousel-control .glyphicon-chevron-left,
6430 .carousel-control .icon-prev {
6433 .carousel-control .glyphicon-chevron-right,
6434 .carousel-control .icon-next {
6435 margin-right: -10px;
6440 padding-bottom: 30px;
6442 .carousel-indicators {
6448 .dl-horizontal dd:before,
6449 .dl-horizontal dd:after,
6452 .container-fluid:before,
6453 .container-fluid:after,
6456 .form-horizontal .form-group:before,
6457 .form-horizontal .form-group:after,
6458 .btn-toolbar:before,
6460 .btn-group-vertical > .btn-group:before,
6461 .btn-group-vertical > .btn-group:after,
6466 .navbar-header:before,
6467 .navbar-header:after,
6468 .navbar-collapse:before,
6469 .navbar-collapse:after,
6474 .modal-header:before,
6475 .modal-header:after,
6476 .modal-footer:before,
6477 .modal-footer:after,
6478 .item_buttons:before,
6479 .item_buttons:after {
6484 .dl-horizontal dd:after,
6486 .container-fluid:after,
6488 .form-horizontal .form-group:after,
6490 .btn-group-vertical > .btn-group:after,
6493 .navbar-header:after,
6494 .navbar-collapse:after,
6497 .modal-header:after,
6498 .modal-footer:after,
6499 .item_buttons:after {
6508 float: right !important;
6511 float: left !important;
6514 display: none !important;
6517 display: block !important;
6526 background-color: transparent;
6530 display: none !important;
6536 width: device-width;
6542 display: none !important;
6546 .visible-xs-inline-block,
6549 .visible-sm-inline-block,
6552 .visible-md-inline-block,
6555 .visible-lg-inline-block {
6556 display: none !important;
6558 @media (max-width: 767px) {
6560 display: block !important;
6563 display: table !important;
6566 display: table-row !important;
6570 display: table-cell !important;
6573 @media (max-width: 767px) {
6575 display: block !important;
6578 @media (max-width: 767px) {
6579 .visible-xs-inline {
6580 display: inline !important;
6583 @media (max-width: 767px) {
6584 .visible-xs-inline-block {
6585 display: inline-block !important;
6588 @media (min-width: 768px) and (max-width: 991px) {
6590 display: block !important;
6593 display: table !important;
6596 display: table-row !important;
6600 display: table-cell !important;
6603 @media (min-width: 768px) and (max-width: 991px) {
6605 display: block !important;
6608 @media (min-width: 768px) and (max-width: 991px) {
6609 .visible-sm-inline {
6610 display: inline !important;
6613 @media (min-width: 768px) and (max-width: 991px) {
6614 .visible-sm-inline-block {
6615 display: inline-block !important;
6618 @media (min-width: 992px) and (max-width: 1199px) {
6620 display: block !important;
6623 display: table !important;
6626 display: table-row !important;
6630 display: table-cell !important;
6633 @media (min-width: 992px) and (max-width: 1199px) {
6635 display: block !important;
6638 @media (min-width: 992px) and (max-width: 1199px) {
6639 .visible-md-inline {
6640 display: inline !important;
6643 @media (min-width: 992px) and (max-width: 1199px) {
6644 .visible-md-inline-block {
6645 display: inline-block !important;
6648 @media (min-width: 1200px) {
6650 display: block !important;
6653 display: table !important;
6656 display: table-row !important;
6660 display: table-cell !important;
6663 @media (min-width: 1200px) {
6665 display: block !important;
6668 @media (min-width: 1200px) {
6669 .visible-lg-inline {
6670 display: inline !important;
6673 @media (min-width: 1200px) {
6674 .visible-lg-inline-block {
6675 display: inline-block !important;
6678 @media (max-width: 767px) {
6680 display: none !important;
6683 @media (min-width: 768px) and (max-width: 991px) {
6685 display: none !important;
6688 @media (min-width: 992px) and (max-width: 1199px) {
6690 display: none !important;
6693 @media (min-width: 1200px) {
6695 display: none !important;
6699 display: none !important;
6703 display: block !important;
6705 table.visible-print {
6706 display: table !important;
6709 display: table-row !important;
6713 display: table-cell !important;
6716 .visible-print-block {
6717 display: none !important;
6720 .visible-print-block {
6721 display: block !important;
6724 .visible-print-inline {
6725 display: none !important;
6728 .visible-print-inline {
6729 display: inline !important;
6732 .visible-print-inline-block {
6733 display: none !important;
6736 .visible-print-inline-block {
6737 display: inline-block !important;
6742 display: none !important;
6751 * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome
6752 * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
6755 * -------------------------- */
6757 font-family: 'FontAwesome';
6758 src: url('../components/font-awesome/fonts/fontawesome-webfont.eot?v=4.7.0');
6759 src: url('../components/font-awesome/fonts/fontawesome-webfont.eot?#iefix&v=4.7.0') format('embedded-opentype'), url('../components/font-awesome/fonts/fontawesome-webfont.woff2?v=4.7.0') format('woff2'), url('../components/font-awesome/fonts/fontawesome-webfont.woff?v=4.7.0') format('woff'), url('../components/font-awesome/fonts/fontawesome-webfont.ttf?v=4.7.0') format('truetype'), url('../components/font-awesome/fonts/fontawesome-webfont.svg?v=4.7.0#fontawesomeregular') format('svg');
6760 font-weight: normal;
6764 display: inline-block;
6765 font: normal normal normal 14px/1 FontAwesome;
6767 text-rendering: auto;
6768 -webkit-font-smoothing: antialiased;
6769 -moz-osx-font-smoothing: grayscale;
6771 /* makes the font 33% larger relative to the icon container */
6773 font-size: 1.33333333em;
6774 line-height: 0.75em;
6775 vertical-align: -15%;
6790 width: 1.28571429em;
6795 margin-left: 2.14285714em;
6796 list-style-type: none;
6803 left: -2.14285714em;
6804 width: 2.14285714em;
6809 left: -1.85714286em;
6812 padding: .2em .25em .15em;
6813 border: solid 0.08em #eee;
6814 border-radius: .1em;
6828 /* Deprecated as of 4.4.0 */
6842 -webkit-animation: fa-spin 2s infinite linear;
6843 animation: fa-spin 2s infinite linear;
6846 -webkit-animation: fa-spin 1s infinite steps(8);
6847 animation: fa-spin 1s infinite steps(8);
6849 @-webkit-keyframes fa-spin {
6851 -webkit-transform: rotate(0deg);
6852 transform: rotate(0deg);
6855 -webkit-transform: rotate(359deg);
6856 transform: rotate(359deg);
6859 @keyframes fa-spin {
6861 -webkit-transform: rotate(0deg);
6862 transform: rotate(0deg);
6865 -webkit-transform: rotate(359deg);
6866 transform: rotate(359deg);
6870 -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";
6871 -webkit-transform: rotate(90deg);
6872 -ms-transform: rotate(90deg);
6873 transform: rotate(90deg);
6876 -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";
6877 -webkit-transform: rotate(180deg);
6878 -ms-transform: rotate(180deg);
6879 transform: rotate(180deg);
6882 -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";
6883 -webkit-transform: rotate(270deg);
6884 -ms-transform: rotate(270deg);
6885 transform: rotate(270deg);
6887 .fa-flip-horizontal {
6888 -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";
6889 -webkit-transform: scale(-1, 1);
6890 -ms-transform: scale(-1, 1);
6891 transform: scale(-1, 1);
6894 -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";
6895 -webkit-transform: scale(1, -1);
6896 -ms-transform: scale(1, -1);
6897 transform: scale(1, -1);
6899 :root .fa-rotate-90,
6900 :root .fa-rotate-180,
6901 :root .fa-rotate-270,
6902 :root .fa-flip-horizontal,
6903 :root .fa-flip-vertical {
6908 display: inline-block;
6912 vertical-align: middle;
6922 line-height: inherit;
6930 /* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen
6931 readers do not read off random characters that represent icons */
6941 .fa-envelope-o:before {
6959 .fa-th-large:before {
6965 .fa-th-list:before {
6976 .fa-search-plus:before {
6979 .fa-search-minus:before {
6982 .fa-power-off:before {
6992 .fa-trash-o:before {
7001 .fa-clock-o:before {
7007 .fa-download:before {
7010 .fa-arrow-circle-o-down:before {
7013 .fa-arrow-circle-o-up:before {
7019 .fa-play-circle-o:before {
7022 .fa-rotate-right:before,
7026 .fa-refresh:before {
7029 .fa-list-alt:before {
7038 .fa-headphones:before {
7041 .fa-volume-off:before {
7044 .fa-volume-down:before {
7047 .fa-volume-up:before {
7053 .fa-barcode:before {
7065 .fa-bookmark:before {
7083 .fa-text-height:before {
7086 .fa-text-width:before {
7089 .fa-align-left:before {
7092 .fa-align-center:before {
7095 .fa-align-right:before {
7098 .fa-align-justify:before {
7105 .fa-outdent:before {
7111 .fa-video-camera:before {
7116 .fa-picture-o:before {
7122 .fa-map-marker:before {
7132 .fa-pencil-square-o:before {
7135 .fa-share-square-o:before {
7138 .fa-check-square-o:before {
7144 .fa-step-backward:before {
7147 .fa-fast-backward:before {
7150 .fa-backward:before {
7162 .fa-forward:before {
7165 .fa-fast-forward:before {
7168 .fa-step-forward:before {
7174 .fa-chevron-left:before {
7177 .fa-chevron-right:before {
7180 .fa-plus-circle:before {
7183 .fa-minus-circle:before {
7186 .fa-times-circle:before {
7189 .fa-check-circle:before {
7192 .fa-question-circle:before {
7195 .fa-info-circle:before {
7198 .fa-crosshairs:before {
7201 .fa-times-circle-o:before {
7204 .fa-check-circle-o:before {
7210 .fa-arrow-left:before {
7213 .fa-arrow-right:before {
7216 .fa-arrow-up:before {
7219 .fa-arrow-down:before {
7222 .fa-mail-forward:before,
7229 .fa-compress:before {
7238 .fa-asterisk:before {
7241 .fa-exclamation-circle:before {
7256 .fa-eye-slash:before {
7260 .fa-exclamation-triangle:before {
7266 .fa-calendar:before {
7272 .fa-comment:before {
7278 .fa-chevron-up:before {
7281 .fa-chevron-down:before {
7284 .fa-retweet:before {
7287 .fa-shopping-cart:before {
7293 .fa-folder-open:before {
7296 .fa-arrows-v:before {
7299 .fa-arrows-h:before {
7302 .fa-bar-chart-o:before,
7303 .fa-bar-chart:before {
7306 .fa-twitter-square:before {
7309 .fa-facebook-square:before {
7312 .fa-camera-retro:before {
7322 .fa-comments:before {
7325 .fa-thumbs-o-up:before {
7328 .fa-thumbs-o-down:before {
7331 .fa-star-half:before {
7334 .fa-heart-o:before {
7337 .fa-sign-out:before {
7340 .fa-linkedin-square:before {
7343 .fa-thumb-tack:before {
7346 .fa-external-link:before {
7349 .fa-sign-in:before {
7355 .fa-github-square:before {
7361 .fa-lemon-o:before {
7367 .fa-square-o:before {
7370 .fa-bookmark-o:before {
7373 .fa-phone-square:before {
7376 .fa-twitter:before {
7379 .fa-facebook-f:before,
7380 .fa-facebook:before {
7389 .fa-credit-card:before {
7399 .fa-bullhorn:before {
7405 .fa-certificate:before {
7408 .fa-hand-o-right:before {
7411 .fa-hand-o-left:before {
7414 .fa-hand-o-up:before {
7417 .fa-hand-o-down:before {
7420 .fa-arrow-circle-left:before {
7423 .fa-arrow-circle-right:before {
7426 .fa-arrow-circle-up:before {
7429 .fa-arrow-circle-down:before {
7444 .fa-briefcase:before {
7447 .fa-arrows-alt:before {
7465 .fa-scissors:before {
7469 .fa-files-o:before {
7472 .fa-paperclip:before {
7476 .fa-floppy-o:before {
7487 .fa-list-ul:before {
7490 .fa-list-ol:before {
7493 .fa-strikethrough:before {
7496 .fa-underline:before {
7508 .fa-pinterest:before {
7511 .fa-pinterest-square:before {
7514 .fa-google-plus-square:before {
7517 .fa-google-plus:before {
7523 .fa-caret-down:before {
7526 .fa-caret-up:before {
7529 .fa-caret-left:before {
7532 .fa-caret-right:before {
7535 .fa-columns:before {
7538 .fa-unsorted:before,
7542 .fa-sort-down:before,
7543 .fa-sort-desc:before {
7547 .fa-sort-asc:before {
7550 .fa-envelope:before {
7553 .fa-linkedin:before {
7556 .fa-rotate-left:before,
7564 .fa-dashboard:before,
7565 .fa-tachometer:before {
7568 .fa-comment-o:before {
7571 .fa-comments-o:before {
7578 .fa-sitemap:before {
7581 .fa-umbrella:before {
7585 .fa-clipboard:before {
7588 .fa-lightbulb-o:before {
7591 .fa-exchange:before {
7594 .fa-cloud-download:before {
7597 .fa-cloud-upload:before {
7600 .fa-user-md:before {
7603 .fa-stethoscope:before {
7606 .fa-suitcase:before {
7615 .fa-cutlery:before {
7618 .fa-file-text-o:before {
7621 .fa-building-o:before {
7624 .fa-hospital-o:before {
7627 .fa-ambulance:before {
7633 .fa-fighter-jet:before {
7639 .fa-h-square:before {
7642 .fa-plus-square:before {
7645 .fa-angle-double-left:before {
7648 .fa-angle-double-right:before {
7651 .fa-angle-double-up:before {
7654 .fa-angle-double-down:before {
7657 .fa-angle-left:before {
7660 .fa-angle-right:before {
7663 .fa-angle-up:before {
7666 .fa-angle-down:before {
7669 .fa-desktop:before {
7678 .fa-mobile-phone:before,
7682 .fa-circle-o:before {
7685 .fa-quote-left:before {
7688 .fa-quote-right:before {
7691 .fa-spinner:before {
7697 .fa-mail-reply:before,
7701 .fa-github-alt:before {
7704 .fa-folder-o:before {
7707 .fa-folder-open-o:before {
7710 .fa-smile-o:before {
7713 .fa-frown-o:before {
7719 .fa-gamepad:before {
7722 .fa-keyboard-o:before {
7728 .fa-flag-checkered:before {
7731 .fa-terminal:before {
7737 .fa-mail-reply-all:before,
7738 .fa-reply-all:before {
7741 .fa-star-half-empty:before,
7742 .fa-star-half-full:before,
7743 .fa-star-half-o:before {
7746 .fa-location-arrow:before {
7752 .fa-code-fork:before {
7756 .fa-chain-broken:before {
7759 .fa-question:before {
7765 .fa-exclamation:before {
7768 .fa-superscript:before {
7771 .fa-subscript:before {
7777 .fa-puzzle-piece:before {
7780 .fa-microphone:before {
7783 .fa-microphone-slash:before {
7789 .fa-calendar-o:before {
7792 .fa-fire-extinguisher:before {
7801 .fa-chevron-circle-left:before {
7804 .fa-chevron-circle-right:before {
7807 .fa-chevron-circle-up:before {
7810 .fa-chevron-circle-down:before {
7822 .fa-unlock-alt:before {
7825 .fa-bullseye:before {
7828 .fa-ellipsis-h:before {
7831 .fa-ellipsis-v:before {
7834 .fa-rss-square:before {
7837 .fa-play-circle:before {
7843 .fa-minus-square:before {
7846 .fa-minus-square-o:before {
7849 .fa-level-up:before {
7852 .fa-level-down:before {
7855 .fa-check-square:before {
7858 .fa-pencil-square:before {
7861 .fa-external-link-square:before {
7864 .fa-share-square:before {
7867 .fa-compass:before {
7870 .fa-toggle-down:before,
7871 .fa-caret-square-o-down:before {
7874 .fa-toggle-up:before,
7875 .fa-caret-square-o-up:before {
7878 .fa-toggle-right:before,
7879 .fa-caret-square-o-right:before {
7919 .fa-file-text:before {
7922 .fa-sort-alpha-asc:before {
7925 .fa-sort-alpha-desc:before {
7928 .fa-sort-amount-asc:before {
7931 .fa-sort-amount-desc:before {
7934 .fa-sort-numeric-asc:before {
7937 .fa-sort-numeric-desc:before {
7940 .fa-thumbs-up:before {
7943 .fa-thumbs-down:before {
7946 .fa-youtube-square:before {
7949 .fa-youtube:before {
7955 .fa-xing-square:before {
7958 .fa-youtube-play:before {
7961 .fa-dropbox:before {
7964 .fa-stack-overflow:before {
7967 .fa-instagram:before {
7976 .fa-bitbucket:before {
7979 .fa-bitbucket-square:before {
7985 .fa-tumblr-square:before {
7988 .fa-long-arrow-down:before {
7991 .fa-long-arrow-up:before {
7994 .fa-long-arrow-left:before {
7997 .fa-long-arrow-right:before {
8003 .fa-windows:before {
8006 .fa-android:before {
8012 .fa-dribbble:before {
8018 .fa-foursquare:before {
8031 .fa-gratipay:before {
8040 .fa-archive:before {
8055 .fa-pagelines:before {
8058 .fa-stack-exchange:before {
8061 .fa-arrow-circle-o-right:before {
8064 .fa-arrow-circle-o-left:before {
8067 .fa-toggle-left:before,
8068 .fa-caret-square-o-left:before {
8071 .fa-dot-circle-o:before {
8074 .fa-wheelchair:before {
8077 .fa-vimeo-square:before {
8080 .fa-turkish-lira:before,
8084 .fa-plus-square-o:before {
8087 .fa-space-shuttle:before {
8093 .fa-envelope-square:before {
8096 .fa-wordpress:before {
8102 .fa-institution:before,
8104 .fa-university:before {
8107 .fa-mortar-board:before,
8108 .fa-graduation-cap:before {
8120 .fa-reddit-square:before {
8123 .fa-stumbleupon-circle:before {
8126 .fa-stumbleupon:before {
8129 .fa-delicious:before {
8135 .fa-pied-piper-pp:before {
8138 .fa-pied-piper-alt:before {
8147 .fa-language:before {
8153 .fa-building:before {
8171 .fa-behance:before {
8174 .fa-behance-square:before {
8180 .fa-steam-square:before {
8183 .fa-recycle:before {
8186 .fa-automobile:before,
8197 .fa-spotify:before {
8200 .fa-deviantart:before {
8203 .fa-soundcloud:before {
8206 .fa-database:before {
8209 .fa-file-pdf-o:before {
8212 .fa-file-word-o:before {
8215 .fa-file-excel-o:before {
8218 .fa-file-powerpoint-o:before {
8221 .fa-file-photo-o:before,
8222 .fa-file-picture-o:before,
8223 .fa-file-image-o:before {
8226 .fa-file-zip-o:before,
8227 .fa-file-archive-o:before {
8230 .fa-file-sound-o:before,
8231 .fa-file-audio-o:before {
8234 .fa-file-movie-o:before,
8235 .fa-file-video-o:before {
8238 .fa-file-code-o:before {
8244 .fa-codepen:before {
8247 .fa-jsfiddle:before {
8250 .fa-life-bouy:before,
8251 .fa-life-buoy:before,
8252 .fa-life-saver:before,
8254 .fa-life-ring:before {
8257 .fa-circle-o-notch:before {
8261 .fa-resistance:before,
8269 .fa-git-square:before {
8275 .fa-y-combinator-square:before,
8276 .fa-yc-square:before,
8277 .fa-hacker-news:before {
8280 .fa-tencent-weibo:before {
8291 .fa-paper-plane:before {
8295 .fa-paper-plane-o:before {
8298 .fa-history:before {
8301 .fa-circle-thin:before {
8307 .fa-paragraph:before {
8310 .fa-sliders:before {
8313 .fa-share-alt:before {
8316 .fa-share-alt-square:before {
8322 .fa-soccer-ball-o:before,
8323 .fa-futbol-o:before {
8329 .fa-binoculars:before {
8335 .fa-slideshare:before {
8344 .fa-newspaper-o:before {
8350 .fa-calculator:before {
8356 .fa-google-wallet:before {
8359 .fa-cc-visa:before {
8362 .fa-cc-mastercard:before {
8365 .fa-cc-discover:before {
8368 .fa-cc-amex:before {
8371 .fa-cc-paypal:before {
8374 .fa-cc-stripe:before {
8377 .fa-bell-slash:before {
8380 .fa-bell-slash-o:before {
8386 .fa-copyright:before {
8392 .fa-eyedropper:before {
8395 .fa-paint-brush:before {
8398 .fa-birthday-cake:before {
8401 .fa-area-chart:before {
8404 .fa-pie-chart:before {
8407 .fa-line-chart:before {
8413 .fa-lastfm-square:before {
8416 .fa-toggle-off:before {
8419 .fa-toggle-on:before {
8422 .fa-bicycle:before {
8428 .fa-ioxhost:before {
8431 .fa-angellist:before {
8442 .fa-meanpath:before {
8445 .fa-buysellads:before {
8448 .fa-connectdevelop:before {
8451 .fa-dashcube:before {
8454 .fa-forumbee:before {
8457 .fa-leanpub:before {
8463 .fa-shirtsinbulk:before {
8466 .fa-simplybuilt:before {
8469 .fa-skyatlas:before {
8472 .fa-cart-plus:before {
8475 .fa-cart-arrow-down:before {
8478 .fa-diamond:before {
8484 .fa-user-secret:before {
8487 .fa-motorcycle:before {
8490 .fa-street-view:before {
8493 .fa-heartbeat:before {
8502 .fa-mercury:before {
8505 .fa-intersex:before,
8506 .fa-transgender:before {
8509 .fa-transgender-alt:before {
8512 .fa-venus-double:before {
8515 .fa-mars-double:before {
8518 .fa-venus-mars:before {
8521 .fa-mars-stroke:before {
8524 .fa-mars-stroke-v:before {
8527 .fa-mars-stroke-h:before {
8533 .fa-genderless:before {
8536 .fa-facebook-official:before {
8539 .fa-pinterest-p:before {
8542 .fa-whatsapp:before {
8548 .fa-user-plus:before {
8551 .fa-user-times:before {
8558 .fa-viacoin:before {
8571 .fa-y-combinator:before {
8574 .fa-optin-monster:before {
8577 .fa-opencart:before {
8580 .fa-expeditedssl:before {
8583 .fa-battery-4:before,
8585 .fa-battery-full:before {
8588 .fa-battery-3:before,
8589 .fa-battery-three-quarters:before {
8592 .fa-battery-2:before,
8593 .fa-battery-half:before {
8596 .fa-battery-1:before,
8597 .fa-battery-quarter:before {
8600 .fa-battery-0:before,
8601 .fa-battery-empty:before {
8604 .fa-mouse-pointer:before {
8607 .fa-i-cursor:before {
8610 .fa-object-group:before {
8613 .fa-object-ungroup:before {
8616 .fa-sticky-note:before {
8619 .fa-sticky-note-o:before {
8625 .fa-cc-diners-club:before {
8631 .fa-balance-scale:before {
8634 .fa-hourglass-o:before {
8637 .fa-hourglass-1:before,
8638 .fa-hourglass-start:before {
8641 .fa-hourglass-2:before,
8642 .fa-hourglass-half:before {
8645 .fa-hourglass-3:before,
8646 .fa-hourglass-end:before {
8649 .fa-hourglass:before {
8652 .fa-hand-grab-o:before,
8653 .fa-hand-rock-o:before {
8656 .fa-hand-stop-o:before,
8657 .fa-hand-paper-o:before {
8660 .fa-hand-scissors-o:before {
8663 .fa-hand-lizard-o:before {
8666 .fa-hand-spock-o:before {
8669 .fa-hand-pointer-o:before {
8672 .fa-hand-peace-o:before {
8675 .fa-trademark:before {
8678 .fa-registered:before {
8681 .fa-creative-commons:before {
8687 .fa-gg-circle:before {
8690 .fa-tripadvisor:before {
8693 .fa-odnoklassniki:before {
8696 .fa-odnoklassniki-square:before {
8699 .fa-get-pocket:before {
8702 .fa-wikipedia-w:before {
8711 .fa-firefox:before {
8717 .fa-internet-explorer:before {
8721 .fa-television:before {
8733 .fa-calendar-plus-o:before {
8736 .fa-calendar-minus-o:before {
8739 .fa-calendar-times-o:before {
8742 .fa-calendar-check-o:before {
8745 .fa-industry:before {
8748 .fa-map-pin:before {
8751 .fa-map-signs:before {
8760 .fa-commenting:before {
8763 .fa-commenting-o:before {
8772 .fa-black-tie:before {
8775 .fa-fonticons:before {
8778 .fa-reddit-alien:before {
8784 .fa-credit-card-alt:before {
8787 .fa-codiepie:before {
8793 .fa-fort-awesome:before {
8799 .fa-product-hunt:before {
8802 .fa-mixcloud:before {
8808 .fa-pause-circle:before {
8811 .fa-pause-circle-o:before {
8814 .fa-stop-circle:before {
8817 .fa-stop-circle-o:before {
8820 .fa-shopping-bag:before {
8823 .fa-shopping-basket:before {
8826 .fa-hashtag:before {
8829 .fa-bluetooth:before {
8832 .fa-bluetooth-b:before {
8835 .fa-percent:before {
8841 .fa-wpbeginner:before {
8844 .fa-wpforms:before {
8850 .fa-universal-access:before {
8853 .fa-wheelchair-alt:before {
8856 .fa-question-circle-o:before {
8862 .fa-audio-description:before {
8865 .fa-volume-control-phone:before {
8868 .fa-braille:before {
8871 .fa-assistive-listening-systems:before {
8874 .fa-asl-interpreting:before,
8875 .fa-american-sign-language-interpreting:before {
8878 .fa-deafness:before,
8879 .fa-hard-of-hearing:before,
8886 .fa-glide-g:before {
8890 .fa-sign-language:before {
8893 .fa-low-vision:before {
8899 .fa-viadeo-square:before {
8902 .fa-snapchat:before {
8905 .fa-snapchat-ghost:before {
8908 .fa-snapchat-square:before {
8911 .fa-pied-piper:before {
8914 .fa-first-order:before {
8920 .fa-themeisle:before {
8923 .fa-google-plus-circle:before,
8924 .fa-google-plus-official:before {
8928 .fa-font-awesome:before {
8931 .fa-handshake-o:before {
8934 .fa-envelope-open:before {
8937 .fa-envelope-open-o:before {
8943 .fa-address-book:before {
8946 .fa-address-book-o:before {
8950 .fa-address-card:before {
8954 .fa-address-card-o:before {
8957 .fa-user-circle:before {
8960 .fa-user-circle-o:before {
8966 .fa-id-badge:before {
8969 .fa-drivers-license:before,
8970 .fa-id-card:before {
8973 .fa-drivers-license-o:before,
8974 .fa-id-card-o:before {
8980 .fa-free-code-camp:before {
8983 .fa-telegram:before {
8986 .fa-thermometer-4:before,
8987 .fa-thermometer:before,
8988 .fa-thermometer-full:before {
8991 .fa-thermometer-3:before,
8992 .fa-thermometer-three-quarters:before {
8995 .fa-thermometer-2:before,
8996 .fa-thermometer-half:before {
8999 .fa-thermometer-1:before,
9000 .fa-thermometer-quarter:before {
9003 .fa-thermometer-0:before,
9004 .fa-thermometer-empty:before {
9015 .fa-podcast:before {
9018 .fa-window-maximize:before {
9021 .fa-window-minimize:before {
9024 .fa-window-restore:before {
9027 .fa-times-rectangle:before,
9028 .fa-window-close:before {
9031 .fa-times-rectangle-o:before,
9032 .fa-window-close-o:before {
9035 .fa-bandcamp:before {
9047 .fa-ravelry:before {
9050 .fa-eercast:before {
9053 .fa-microchip:before {
9056 .fa-snowflake-o:before {
9059 .fa-superpowers:before {
9062 .fa-wpexplorer:before {
9075 clip: rect(0, 0, 0, 0);
9078 .sr-only-focusable:active,
9079 .sr-only-focusable:focus {
9087 .sr-only-focusable:active,
9088 .sr-only-focusable:focus {
9101 .modal.fade .modal-dialog {
9102 -webkit-transform: translate(0, 0);
9103 -ms-transform: translate(0, 0);
9104 -o-transform: translate(0, 0);
9105 transform: translate(0, 0);
9112 line-height: inherit;
9115 font-weight: normal;
9117 /* Make the page background atleast 100% the height of the view port */
9118 /* Make the page itself atleast 70% the height of the view port */
9119 .border-box-sizing {
9120 box-sizing: border-box;
9121 -moz-box-sizing: border-box;
9122 -webkit-box-sizing: border-box;
9130 /* Flexible box model classes */
9131 /* Taken from Alex Russell http://infrequently.org/2009/08/css-3-progress/ */
9132 /* This file is a compatability layer. It allows the usage of flexible box
9133 model layouts accross multiple browsers, including older browsers. The newest,
9134 universal implementation of the flexible box model is used when available (see
9135 `Modern browsers` comments below). Browsers that are known to implement this
9136 new spec completely include:
9140 Internet Explorer 11+
9143 Browsers not listed, including Safari, are supported via the styling under the
9144 `Old browsers` comments below.
9148 display: -webkit-box;
9149 -webkit-box-orient: horizontal;
9150 -webkit-box-align: stretch;
9152 -moz-box-orient: horizontal;
9153 -moz-box-align: stretch;
9155 box-orient: horizontal;
9157 /* Modern browsers */
9159 flex-direction: row;
9160 align-items: stretch;
9164 -webkit-box-flex: 0;
9167 /* Modern browsers */
9172 display: -webkit-box;
9173 -webkit-box-orient: vertical;
9174 -webkit-box-align: stretch;
9176 -moz-box-orient: vertical;
9177 -moz-box-align: stretch;
9179 box-orient: vertical;
9181 /* Modern browsers */
9183 flex-direction: column;
9184 align-items: stretch;
9188 -webkit-box-flex: 0;
9191 /* Modern browsers */
9198 -webkit-box-direction: reverse;
9199 -moz-box-direction: reverse;
9200 box-direction: reverse;
9201 /* Modern browsers */
9202 flex-direction: row-reverse;
9208 -webkit-box-flex: 0;
9211 /* Modern browsers */
9219 -webkit-box-flex: 1;
9222 /* Modern browsers */
9230 -webkit-box-flex: 1;
9233 /* Modern browsers */
9240 -webkit-box-flex: 2;
9243 /* Modern browsers */
9248 -webkit-box-flex-group: 1;
9249 -moz-box-flex-group: 1;
9254 -webkit-box-flex-group: 2;
9255 -moz-box-flex-group: 2;
9262 -webkit-box-pack: start;
9263 -moz-box-pack: start;
9265 /* Modern browsers */
9266 justify-content: flex-start;
9272 -webkit-box-pack: end;
9275 /* Modern browsers */
9276 justify-content: flex-end;
9282 -webkit-box-pack: center;
9283 -moz-box-pack: center;
9285 /* Modern browsers */
9286 justify-content: center;
9292 -webkit-box-pack: baseline;
9293 -moz-box-pack: baseline;
9295 /* Modern browsers */
9296 justify-content: baseline;
9302 -webkit-box-pack: stretch;
9303 -moz-box-pack: stretch;
9305 /* Modern browsers */
9306 justify-content: stretch;
9312 -webkit-box-align: start;
9313 -moz-box-align: start;
9315 /* Modern browsers */
9316 align-items: flex-start;
9322 -webkit-box-align: end;
9323 -moz-box-align: end;
9325 /* Modern browsers */
9326 align-items: flex-end;
9332 -webkit-box-align: center;
9333 -moz-box-align: center;
9335 /* Modern browsers */
9336 align-items: center;
9338 .hbox.align-baseline,
9339 .vbox.align-baseline,
9342 -webkit-box-align: baseline;
9343 -moz-box-align: baseline;
9344 box-align: baseline;
9345 /* Modern browsers */
9346 align-items: baseline;
9348 .hbox.align-stretch,
9349 .vbox.align-stretch,
9352 -webkit-box-align: stretch;
9353 -moz-box-align: stretch;
9355 /* Modern browsers */
9356 align-items: stretch;
9364 line-height: normal;
9368 line-height: normal;
9370 div.traceback-wrapper {
9375 div.traceback-wrapper pre.traceback {
9382 * Author: Jupyter Development Team
9385 background-color: #fff;
9386 /* This makes sure that the body covers the entire window and needs to
9387 be in a different element than the display: box in wrapper below */
9396 /* Initially hidden to prevent FLOUC */
9398 background-color: #fff;
9399 /* Display over codemirror */
9403 body > #header #header-container {
9405 flex-direction: row;
9406 justify-content: space-between;
9408 padding-bottom: 5px;
9410 box-sizing: border-box;
9411 -moz-box-sizing: border-box;
9412 -webkit-box-sizing: border-box;
9414 body > #header .header-bar {
9417 background: #e7e7e7;
9418 margin-bottom: -1px;
9422 display: none !important;
9437 padding-bottom: 1px;
9439 [dir="rtl"] #ipython_notebook {
9443 [dir="rtl"] #ipython_notebook.pull-left {
9444 float: right !important;
9453 padding-bottom: 16px;
9459 #ipython_notebook img {
9465 box-sizing: border-box;
9466 -moz-box-sizing: border-box;
9467 -webkit-box-sizing: border-box;
9472 height: auto !important;
9475 /* Smaller buttons */
9476 .ui-button .ui-button-text {
9477 padding: 0.2em 0.8em;
9481 padding: 0.3em 0.9em;
9483 span#kernel_logo_widget {
9489 [dir="rtl"] span#login_widget {
9492 span#login_widget > .button,
9495 background-color: #fff;
9498 span#login_widget > .button:focus,
9500 span#login_widget > .button.focus,
9503 background-color: #e6e6e6;
9504 border-color: #8c8c8c;
9506 span#login_widget > .button:hover,
9509 background-color: #e6e6e6;
9510 border-color: #adadad;
9512 span#login_widget > .button:active,
9514 span#login_widget > .button.active,
9516 .open > .dropdown-togglespan#login_widget > .button,
9517 .open > .dropdown-toggle#logout {
9519 background-color: #e6e6e6;
9520 border-color: #adadad;
9522 span#login_widget > .button:active:hover,
9523 #logout:active:hover,
9524 span#login_widget > .button.active:hover,
9525 #logout.active:hover,
9526 .open > .dropdown-togglespan#login_widget > .button:hover,
9527 .open > .dropdown-toggle#logout:hover,
9528 span#login_widget > .button:active:focus,
9529 #logout:active:focus,
9530 span#login_widget > .button.active:focus,
9531 #logout.active:focus,
9532 .open > .dropdown-togglespan#login_widget > .button:focus,
9533 .open > .dropdown-toggle#logout:focus,
9534 span#login_widget > .button:active.focus,
9535 #logout:active.focus,
9536 span#login_widget > .button.active.focus,
9537 #logout.active.focus,
9538 .open > .dropdown-togglespan#login_widget > .button.focus,
9539 .open > .dropdown-toggle#logout.focus {
9541 background-color: #d4d4d4;
9542 border-color: #8c8c8c;
9544 span#login_widget > .button:active,
9546 span#login_widget > .button.active,
9548 .open > .dropdown-togglespan#login_widget > .button,
9549 .open > .dropdown-toggle#logout {
9550 background-image: none;
9552 span#login_widget > .button.disabled:hover,
9553 #logout.disabled:hover,
9554 span#login_widget > .button[disabled]:hover,
9555 #logout[disabled]:hover,
9556 fieldset[disabled] span#login_widget > .button:hover,
9557 fieldset[disabled] #logout:hover,
9558 span#login_widget > .button.disabled:focus,
9559 #logout.disabled:focus,
9560 span#login_widget > .button[disabled]:focus,
9561 #logout[disabled]:focus,
9562 fieldset[disabled] span#login_widget > .button:focus,
9563 fieldset[disabled] #logout:focus,
9564 span#login_widget > .button.disabled.focus,
9565 #logout.disabled.focus,
9566 span#login_widget > .button[disabled].focus,
9567 #logout[disabled].focus,
9568 fieldset[disabled] span#login_widget > .button.focus,
9569 fieldset[disabled] #logout.focus {
9570 background-color: #fff;
9573 span#login_widget > .button .badge,
9576 background-color: #333;
9579 text-transform: none;
9584 .modal_stretch .modal-dialog {
9586 display: -webkit-box;
9587 -webkit-box-orient: vertical;
9588 -webkit-box-align: stretch;
9590 -moz-box-orient: vertical;
9591 -moz-box-align: stretch;
9593 box-orient: vertical;
9595 /* Modern browsers */
9597 flex-direction: column;
9598 align-items: stretch;
9601 .modal_stretch .modal-dialog .modal-body {
9602 max-height: calc(100vh - 200px);
9609 @media (min-width: 768px) {
9610 .modal .modal-dialog {
9614 @media (min-width: 768px) {
9615 select.form-control {
9626 display: inline-block;
9627 margin-bottom: -4px;
9629 [dir="rtl"] .center-nav form.pull-left {
9630 float: right !important;
9633 [dir="rtl"] .center-nav .navbar-text {
9636 [dir="rtl"] .navbar-inner {
9639 [dir="rtl"] div.text-left {
9647 /* We need an invisible input field on top of the sentense*/
9648 /* "Drag file onto the list ..." */
9650 background-color: none;
9653 .alternate_upload.form {
9657 .alternate_upload input.fileinput {
9667 .alternate_upload .btn-xs > input.fileinput {
9670 .alternate_upload .btn-upload {
9674 ::-webkit-file-upload-button {
9680 * Author: Jupyter Development Team
9687 padding-bottom: 4px;
9689 [dir="rtl"] ul#tabs.nav-tabs > li {
9692 [dir="rtl"] ul#tabs.nav.nav-tabs {
9695 ul.breadcrumb a:focus,
9696 ul.breadcrumb a:hover {
9697 text-decoration: none;
9699 ul.breadcrumb i.icon-home {
9703 ul.breadcrumb span {
9707 padding: 4px 0 4px 0;
9708 vertical-align: middle;
9710 .list_toolbar .tree-buttons {
9713 [dir="rtl"] .list_toolbar .tree-buttons .pull-right {
9714 float: left !important;
9717 [dir="rtl"] .list_toolbar .col-sm-4,
9718 [dir="rtl"] .list_toolbar .col-sm-8 {
9723 display: inline-block;
9725 .list_toolbar [class*="span"] {
9730 background-color: #EEE;
9735 padding-bottom: 4px;
9741 margin-bottom: 20px;
9742 border: 1px solid #ddd;
9745 .list_container > div {
9746 border-bottom: 1px solid #ddd;
9748 .list_container > div:hover .list-item {
9749 background-color: red;
9751 .list_container > div:last-child {
9754 .list_item:hover .list_item {
9755 background-color: #ddd;
9758 text-decoration: none;
9761 background-color: #fafafa;
9766 padding-bottom: 4px;
9771 .list_header > div input,
9772 .list_item > div input {
9775 vertical-align: text-bottom;
9780 .list_header > div .item_link,
9781 .list_item > div .item_link {
9783 vertical-align: baseline;
9786 [dir="rtl"] .list_item > div input {
9789 .new-file input[type=checkbox] {
9802 vertical-align: baseline;
9808 [dir="rtl"] .item_modified.pull-right {
9809 float: left !important;
9817 .item_buttons .btn-group,
9818 .item_buttons .input-group {
9821 .item_buttons > .btn,
9822 .item_buttons > .btn-group,
9823 .item_buttons > .input-group {
9826 .item_buttons .btn {
9829 .item_buttons .running-indicator {
9833 .item_buttons .kernel-name {
9839 [dir="rtl"] .item_buttons.pull-right {
9840 float: left !important;
9843 [dir="rtl"] .item_buttons .kernel-name {
9851 .list_item input:not([type=checkbox]) {
9853 padding-bottom: 3px;
9862 display: inline-block;
9866 #project_name > .breadcrumb {
9869 background-color: transparent;
9873 display: inline-block;
9876 [dir="rtl"] .sort_button.pull-right {
9877 float: left !important;
9883 #button-select-all {
9886 [dir="rtl"] #button-select-all.btn {
9895 [dir="rtl"] #select-all.pull-left {
9896 float: right !important;
9906 .folder_icon:before {
9907 display: inline-block;
9908 font: normal normal normal 14px/1 FontAwesome;
9910 text-rendering: auto;
9911 -webkit-font-smoothing: antialiased;
9912 -moz-osx-font-smoothing: grayscale;
9915 .folder_icon:before.fa-pull-left {
9918 .folder_icon:before.fa-pull-right {
9921 .folder_icon:before.pull-left {
9924 .folder_icon:before.pull-right {
9927 .notebook_icon:before {
9928 display: inline-block;
9929 font: normal normal normal 14px/1 FontAwesome;
9931 text-rendering: auto;
9932 -webkit-font-smoothing: antialiased;
9933 -moz-osx-font-smoothing: grayscale;
9938 .notebook_icon:before.fa-pull-left {
9941 .notebook_icon:before.fa-pull-right {
9944 .notebook_icon:before.pull-left {
9947 .notebook_icon:before.pull-right {
9950 .running_notebook_icon:before {
9951 display: inline-block;
9952 font: normal normal normal 14px/1 FontAwesome;
9954 text-rendering: auto;
9955 -webkit-font-smoothing: antialiased;
9956 -moz-osx-font-smoothing: grayscale;
9962 .running_notebook_icon:before.fa-pull-left {
9965 .running_notebook_icon:before.fa-pull-right {
9968 .running_notebook_icon:before.pull-left {
9971 .running_notebook_icon:before.pull-right {
9975 display: inline-block;
9976 font: normal normal normal 14px/1 FontAwesome;
9978 text-rendering: auto;
9979 -webkit-font-smoothing: antialiased;
9980 -moz-osx-font-smoothing: grayscale;
9985 .file_icon:before.fa-pull-left {
9988 .file_icon:before.fa-pull-right {
9991 .file_icon:before.pull-left {
9994 .file_icon:before.pull-right {
9997 #notebook_toolbar .pull-right {
10005 #new-menu .dropdown-header {
10007 border-bottom: 1px solid #e5e5e5;
10009 margin: -3px 20px 0;
10011 .kernel-menu-icon {
10012 padding-right: 12px;
10016 .kernel-menu-icon:before {
10019 .kernel-menu-icon-current:before {
10025 #running .panel-group .panel {
10027 margin-bottom: 1em;
10029 #running .panel-group .panel .panel-heading {
10030 background-color: #EEE;
10032 padding-bottom: 4px;
10034 padding-right: 7px;
10037 #running .panel-group .panel .panel-heading a:focus,
10038 #running .panel-group .panel .panel-heading a:hover {
10039 text-decoration: none;
10041 #running .panel-group .panel .panel-body {
10044 #running .panel-group .panel .panel-body .list_container {
10046 margin-bottom: 0px;
10048 border-radius: 0px;
10050 #running .panel-group .panel .panel-body .list_container .list_item {
10051 border-bottom: 1px solid #ddd;
10053 #running .panel-group .panel .panel-body .list_container .list_item:last-child {
10054 border-bottom: 0px;
10059 .duplicate-button {
10074 .dynamic-instructions {
10075 display: inline-block;
10080 * IPython text editor webapp
10083 .selected-keymap i.fa {
10086 .selected-keymap i.fa:before {
10093 .edit_app #header {
10094 -webkit-box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);
10095 box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);
10097 .edit_app #menubar .navbar {
10098 /* Use a negative 1 bottom margin, so the border overlaps the border of the
10100 margin-bottom: -1px;
10103 display: inline-block;
10104 font: normal normal normal 14px/1 FontAwesome;
10105 font-size: inherit;
10106 text-rendering: auto;
10107 -webkit-font-smoothing: antialiased;
10108 -moz-osx-font-smoothing: grayscale;
10111 .dirty-indicator.fa-pull-left {
10112 margin-right: .3em;
10114 .dirty-indicator.fa-pull-right {
10117 .dirty-indicator.pull-left {
10118 margin-right: .3em;
10120 .dirty-indicator.pull-right {
10123 .dirty-indicator-dirty {
10124 display: inline-block;
10125 font: normal normal normal 14px/1 FontAwesome;
10126 font-size: inherit;
10127 text-rendering: auto;
10128 -webkit-font-smoothing: antialiased;
10129 -moz-osx-font-smoothing: grayscale;
10132 .dirty-indicator-dirty.fa-pull-left {
10133 margin-right: .3em;
10135 .dirty-indicator-dirty.fa-pull-right {
10138 .dirty-indicator-dirty.pull-left {
10139 margin-right: .3em;
10141 .dirty-indicator-dirty.pull-right {
10144 .dirty-indicator-clean {
10145 display: inline-block;
10146 font: normal normal normal 14px/1 FontAwesome;
10147 font-size: inherit;
10148 text-rendering: auto;
10149 -webkit-font-smoothing: antialiased;
10150 -moz-osx-font-smoothing: grayscale;
10153 .dirty-indicator-clean.fa-pull-left {
10154 margin-right: .3em;
10156 .dirty-indicator-clean.fa-pull-right {
10159 .dirty-indicator-clean.pull-left {
10160 margin-right: .3em;
10162 .dirty-indicator-clean.pull-right {
10165 .dirty-indicator-clean:before {
10166 display: inline-block;
10167 font: normal normal normal 14px/1 FontAwesome;
10168 font-size: inherit;
10169 text-rendering: auto;
10170 -webkit-font-smoothing: antialiased;
10171 -moz-osx-font-smoothing: grayscale;
10174 .dirty-indicator-clean:before.fa-pull-left {
10175 margin-right: .3em;
10177 .dirty-indicator-clean:before.fa-pull-right {
10180 .dirty-indicator-clean:before.pull-left {
10181 margin-right: .3em;
10183 .dirty-indicator-clean:before.pull-right {
10193 padding-right: 5px;
10195 #texteditor-backdrop {
10197 padding-bottom: 20px;
10200 #texteditor-backdrop {
10201 background-color: #EEE;
10205 #texteditor-backdrop #texteditor-container .CodeMirror-gutter,
10206 #texteditor-backdrop #texteditor-container .CodeMirror-gutters {
10207 background-color: #fff;
10211 #texteditor-backdrop #texteditor-container .CodeMirror-gutter,
10212 #texteditor-backdrop #texteditor-container .CodeMirror-gutters {
10213 background-color: #fff;
10217 #texteditor-backdrop #texteditor-container {
10219 background-color: #fff;
10220 -webkit-box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);
10221 box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);
10224 .CodeMirror-dialog {
10225 background-color: #fff;
10232 /* CSS font colors for translated ANSI escape sequences */
10233 /* The color values are a mix of
10234 http://www.xcolors.net/dl/baskerville-ivorylight and
10235 http://www.xcolors.net/dl/euphrasia */
10240 background-color: #3E424D;
10242 .ansi-black-intense-fg {
10245 .ansi-black-intense-bg {
10246 background-color: #282C36;
10252 background-color: #E75C58;
10254 .ansi-red-intense-fg {
10257 .ansi-red-intense-bg {
10258 background-color: #B22B31;
10264 background-color: #00A250;
10266 .ansi-green-intense-fg {
10269 .ansi-green-intense-bg {
10270 background-color: #007427;
10276 background-color: #DDB62B;
10278 .ansi-yellow-intense-fg {
10281 .ansi-yellow-intense-bg {
10282 background-color: #B27D12;
10288 background-color: #208FFB;
10290 .ansi-blue-intense-fg {
10293 .ansi-blue-intense-bg {
10294 background-color: #0065CA;
10300 background-color: #D160C4;
10302 .ansi-magenta-intense-fg {
10305 .ansi-magenta-intense-bg {
10306 background-color: #A03196;
10312 background-color: #60C6C8;
10314 .ansi-cyan-intense-fg {
10317 .ansi-cyan-intense-bg {
10318 background-color: #258F8F;
10324 background-color: #C5C1B4;
10326 .ansi-white-intense-fg {
10329 .ansi-white-intense-bg {
10330 background-color: #A1A6B2;
10332 .ansi-default-inverse-fg {
10335 .ansi-default-inverse-bg {
10336 background-color: #000000;
10342 text-decoration: underline;
10344 /* The following styles are deprecated an will be removed in a future version */
10349 outline: 0.5px dotted;
10351 /* use dark versions for foreground, to improve visibility */
10376 /* and light for background, for the same reason */
10378 background-color: black;
10381 background-color: red;
10384 background-color: green;
10387 background-color: yellow;
10390 background-color: blue;
10393 background-color: magenta;
10396 background-color: cyan;
10399 background-color: gray;
10403 display: -webkit-box;
10404 -webkit-box-orient: vertical;
10405 -webkit-box-align: stretch;
10407 -moz-box-orient: vertical;
10408 -moz-box-align: stretch;
10410 box-orient: vertical;
10411 box-align: stretch;
10412 /* Modern browsers */
10414 flex-direction: column;
10415 align-items: stretch;
10416 border-radius: 2px;
10417 box-sizing: border-box;
10418 -moz-box-sizing: border-box;
10419 -webkit-box-sizing: border-box;
10421 border-style: solid;
10422 border-color: transparent;
10425 /* This acts as a spacer between cells, that is outside the border */
10428 position: relative;
10432 position: absolute;
10437 height: calc(100% + 2px);
10439 background: transparent;
10441 div.cell.jupyter-soft-selected {
10442 border-left-color: #E3F2FD;
10443 border-left-width: 1px;
10445 border-right-color: #E3F2FD;
10446 border-right-width: 1px;
10447 background: #E3F2FD;
10450 div.cell.jupyter-soft-selected {
10451 border-color: transparent;
10455 div.cell.selected.jupyter-soft-selected {
10456 border-color: #ababab;
10458 div.cell.selected:before,
10459 div.cell.selected.jupyter-soft-selected:before {
10460 position: absolute;
10465 height: calc(100% + 2px);
10467 background: #42A5F5;
10471 div.cell.selected.jupyter-soft-selected {
10472 border-color: transparent;
10475 .edit_mode div.cell.selected {
10476 border-color: #66BB6A;
10478 .edit_mode div.cell.selected:before {
10479 position: absolute;
10484 height: calc(100% + 2px);
10486 background: #66BB6A;
10489 .edit_mode div.cell.selected {
10490 border-color: transparent;
10494 /* This needs to be wide enough for 3 digit prompt numbers: In[100]: */
10496 /* This padding is tuned to match the padding on the CodeMirror editor. */
10499 font-family: monospace;
10501 /* This has to match that of the the CodeMirror class line-height below */
10502 line-height: 1.21429em;
10503 /* Don't highlight prompt number selection */
10504 -webkit-touch-callout: none;
10505 -webkit-user-select: none;
10506 -khtml-user-select: none;
10507 -moz-user-select: none;
10508 -ms-user-select: none;
10510 /* Use default cursor */
10513 @media (max-width: 540px) {
10521 display: -webkit-box;
10522 -webkit-box-orient: vertical;
10523 -webkit-box-align: stretch;
10525 -moz-box-orient: vertical;
10526 -moz-box-align: stretch;
10528 box-orient: vertical;
10529 box-align: stretch;
10530 /* Modern browsers */
10532 flex-direction: column;
10533 align-items: stretch;
10535 -webkit-box-flex: 1;
10538 /* Modern browsers */
10541 /* input_area and input_prompt must match in top border and margin for alignment */
10543 border: 1px solid #cfcfcf;
10544 border-radius: 2px;
10545 background: #f7f7f7;
10546 line-height: 1.21429em;
10548 /* This is needed so that empty prompt areas can collapse to zero height when there
10549 is no content in the output_subarea and the prompt. The main purpose of this is
10550 to make sure that empty JavaScript output_subareas have no height. */
10555 div.unrecognized_cell {
10556 padding: 5px 5px 5px 0px;
10558 display: -webkit-box;
10559 -webkit-box-orient: horizontal;
10560 -webkit-box-align: stretch;
10562 -moz-box-orient: horizontal;
10563 -moz-box-align: stretch;
10565 box-orient: horizontal;
10566 box-align: stretch;
10567 /* Modern browsers */
10569 flex-direction: row;
10570 align-items: stretch;
10572 div.unrecognized_cell .inner_cell {
10573 border-radius: 2px;
10577 border: 1px solid #cfcfcf;
10578 background: #eaeaea;
10580 div.unrecognized_cell .inner_cell a {
10582 text-decoration: none;
10584 div.unrecognized_cell .inner_cell a:hover {
10586 text-decoration: none;
10588 @media (max-width: 540px) {
10589 div.unrecognized_cell > div.prompt {
10594 /* avoid page breaking on code cells when printing */
10598 page-break-inside: avoid;
10601 /* any special styling for code cells that are currently running goes here */
10603 page-break-inside: avoid;
10605 display: -webkit-box;
10606 -webkit-box-orient: horizontal;
10607 -webkit-box-align: stretch;
10609 -moz-box-orient: horizontal;
10610 -moz-box-align: stretch;
10612 box-orient: horizontal;
10613 box-align: stretch;
10614 /* Modern browsers */
10616 flex-direction: row;
10617 align-items: stretch;
10619 @media (max-width: 540px) {
10622 display: -webkit-box;
10623 -webkit-box-orient: vertical;
10624 -webkit-box-align: stretch;
10626 -moz-box-orient: vertical;
10627 -moz-box-align: stretch;
10629 box-orient: vertical;
10630 box-align: stretch;
10631 /* Modern browsers */
10633 flex-direction: column;
10634 align-items: stretch;
10637 /* input_area and input_prompt must match in top border and margin for alignment */
10640 border-top: 1px solid transparent;
10642 div.input_area > div.highlight {
10646 background-color: transparent;
10648 div.input_area > div.highlight > pre {
10652 background-color: transparent;
10654 /* The following gets added to the <head> if it is detected that the user has a
10655 * monospace font with inconsistent normal/bold/italic height. See
10656 * notebookmain.js. Such fonts will have keywords vertically offset with
10657 * respect to the rest of the text. The user should select a better font.
10658 * See: https://github.com/ipython/ipython/issues/1503
10660 * .CodeMirror span {
10661 * vertical-align: bottom;
10665 line-height: 1.21429em;
10666 /* Changed from 1em to our global default */
10669 /* Changed to auto to autogrow */
10671 /* Changed from white to allow our bg to show through */
10673 .CodeMirror-scroll {
10674 /* The CodeMirror docs are a bit fuzzy on if overflow-y should be hidden or visible.*/
10675 /* We have found that if it is visible, vertical scrollbars appear with font size changes.*/
10676 overflow-y: hidden;
10679 .CodeMirror-lines {
10680 /* In CM2, this used to be 0.4em, but in CM3 it went to 4px. We need the em value because */
10681 /* we have set a different line-height and want this to scale with that. */
10682 /* Note that this should set vertical padding only, since CodeMirror assumes
10683 that horizontal padding will be set on CodeMirror pre */
10686 .CodeMirror-linenumber {
10687 padding: 0 8px 0 4px;
10689 .CodeMirror-gutters {
10690 border-bottom-left-radius: 2px;
10691 border-top-left-radius: 2px;
10694 /* In CM3 this went to 4px from 0 in CM2. This sets horizontal padding only,
10695 use .CodeMirror-lines for vertical */
10700 .CodeMirror-cursor {
10701 border-left: 1.4px solid black;
10703 @media screen and (min-width: 2138px) and (max-width: 4319px) {
10704 .CodeMirror-cursor {
10705 border-left: 2px solid black;
10708 @media screen and (min-width: 4320px) {
10709 .CodeMirror-cursor {
10710 border-left: 4px solid black;
10715 Original style from softwaremaniacs.org (c) Ivan Sagalaev <Maniac@SoftwareManiacs.Org>
10716 Adapted from GitHub theme
10722 .highlight-variable {
10725 .highlight-variable-2 {
10728 .highlight-variable-3 {
10731 .highlight-string {
10734 .highlight-comment {
10736 font-style: italic;
10738 .highlight-number {
10744 .highlight-keyword {
10748 .highlight-builtin {
10754 .highlight-operator {
10761 /* previously not defined, copying from default codemirror */
10765 .highlight-string-2 {
10768 .highlight-qualifier {
10771 .highlight-bracket {
10777 .highlight-attribute {
10780 .highlight-header {
10789 /* apply the same style to codemirror */
10790 .cm-s-ipython span.cm-keyword {
10794 .cm-s-ipython span.cm-atom {
10797 .cm-s-ipython span.cm-number {
10800 .cm-s-ipython span.cm-def {
10803 .cm-s-ipython span.cm-variable {
10806 .cm-s-ipython span.cm-operator {
10810 .cm-s-ipython span.cm-variable-2 {
10813 .cm-s-ipython span.cm-variable-3 {
10816 .cm-s-ipython span.cm-comment {
10818 font-style: italic;
10820 .cm-s-ipython span.cm-string {
10823 .cm-s-ipython span.cm-string-2 {
10826 .cm-s-ipython span.cm-meta {
10829 .cm-s-ipython span.cm-qualifier {
10832 .cm-s-ipython span.cm-builtin {
10835 .cm-s-ipython span.cm-bracket {
10838 .cm-s-ipython span.cm-tag {
10841 .cm-s-ipython span.cm-attribute {
10844 .cm-s-ipython span.cm-header {
10847 .cm-s-ipython span.cm-quote {
10850 .cm-s-ipython span.cm-link {
10853 .cm-s-ipython span.cm-error {
10856 .cm-s-ipython span.cm-tab {
10857 background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAMCAYAAAAkuj5RAAAAAXNSR0IArs4c6QAAAGFJREFUSMft1LsRQFAQheHPowAKoACx3IgEKtaEHujDjORSgWTH/ZOdnZOcM/sgk/kFFWY0qV8foQwS4MKBCS3qR6ixBJvElOobYAtivseIE120FaowJPN75GMu8j/LfMwNjh4HUpwg4LUAAAAASUVORK5CYII=);
10858 background-position: right;
10859 background-repeat: no-repeat;
10861 div.output_wrapper {
10862 /* this position must be relative to enable descendents to be absolute within it */
10863 position: relative;
10865 display: -webkit-box;
10866 -webkit-box-orient: vertical;
10867 -webkit-box-align: stretch;
10869 -moz-box-orient: vertical;
10870 -moz-box-align: stretch;
10872 box-orient: vertical;
10873 box-align: stretch;
10874 /* Modern browsers */
10876 flex-direction: column;
10877 align-items: stretch;
10880 /* class for the output area when it should be height-limited */
10881 div.output_scroll {
10882 /* ideally, this would be max-height, but FF barfs all over that */
10884 /* FF needs this *and the wrapper* to specify full width, or it will shrinkwrap */
10887 border-radius: 2px;
10888 -webkit-box-shadow: inset 0 2px 8px rgba(0, 0, 0, 0.8);
10889 box-shadow: inset 0 2px 8px rgba(0, 0, 0, 0.8);
10892 /* output div while it is collapsed */
10893 div.output_collapsed {
10897 display: -webkit-box;
10898 -webkit-box-orient: vertical;
10899 -webkit-box-align: stretch;
10901 -moz-box-orient: vertical;
10902 -moz-box-align: stretch;
10904 box-orient: vertical;
10905 box-align: stretch;
10906 /* Modern browsers */
10908 flex-direction: column;
10909 align-items: stretch;
10911 div.out_prompt_overlay {
10913 padding: 0px 0.4em;
10914 position: absolute;
10915 border-radius: 2px;
10917 div.out_prompt_overlay:hover {
10918 /* use inner shadow to get border that is computed the same on WebKit/FF */
10919 -webkit-box-shadow: inset 0 0 1px #000;
10920 box-shadow: inset 0 0 1px #000;
10921 background: rgba(240, 240, 240, 0.5);
10923 div.output_prompt {
10926 /* This class is the outer container of all output sections. */
10929 page-break-inside: avoid;
10931 display: -webkit-box;
10932 -webkit-box-orient: horizontal;
10933 -webkit-box-align: stretch;
10935 -moz-box-orient: horizontal;
10936 -moz-box-align: stretch;
10938 box-orient: horizontal;
10939 box-align: stretch;
10940 /* Modern browsers */
10942 flex-direction: row;
10943 align-items: stretch;
10945 div.output_area .MathJax_Display {
10946 text-align: left !important;
10948 div.output_area .rendered_html table {
10952 div.output_area .rendered_html img {
10956 div.output_area img,
10957 div.output_area svg {
10961 div.output_area img.unconfined,
10962 div.output_area svg.unconfined {
10965 div.output_area .mglyph > img {
10968 /* This is needed to protect the pre formating from global settings such
10969 as that of bootstrap */
10972 display: -webkit-box;
10973 -webkit-box-orient: vertical;
10974 -webkit-box-align: stretch;
10976 -moz-box-orient: vertical;
10977 -moz-box-align: stretch;
10979 box-orient: vertical;
10980 box-align: stretch;
10981 /* Modern browsers */
10983 flex-direction: column;
10984 align-items: stretch;
10986 @media (max-width: 540px) {
10989 display: -webkit-box;
10990 -webkit-box-orient: vertical;
10991 -webkit-box-align: stretch;
10993 -moz-box-orient: vertical;
10994 -moz-box-align: stretch;
10996 box-orient: vertical;
10997 box-align: stretch;
10998 /* Modern browsers */
11000 flex-direction: column;
11001 align-items: stretch;
11004 div.output_area pre {
11006 padding: 1px 0 1px 0;
11008 vertical-align: baseline;
11010 background-color: transparent;
11013 /* This class is for the output subarea inside the output_area and after
11015 div.output_subarea {
11019 -webkit-box-flex: 1;
11022 /* Modern browsers */
11024 max-width: calc(100% - 14ex);
11026 div.output_scroll div.output_subarea {
11027 overflow-x: visible;
11029 /* The rest of the output_* classes are for special styling of the different
11031 /* all text output has this class: */
11035 /* This has to match that of the the CodeMirror class line-height below */
11036 line-height: 1.21429em;
11038 /* stdout/stderr are 'text' as well as 'stream', but execute_result/error are *not* streams */
11039 div.output_stderr {
11041 /* very light red background for stderr */
11046 /* Empty output_javascript divs should have no height */
11047 div.output_javascript:empty {
11053 /* raw_input styles */
11054 div.raw_input_container {
11055 line-height: 1.21429em;
11058 pre.raw_input_prompt {
11059 /* nothing needed here. */
11062 font-family: monospace;
11063 font-size: inherit;
11066 /* make sure input baseline aligns with prompt */
11067 vertical-align: baseline;
11068 /* padding + margin = 0.5em between prompt and cursor */
11069 padding: 0em 0.25em;
11070 margin: 0em 0.25em;
11072 input.raw_input:focus {
11076 margin-bottom: 10px;
11078 div.output_unrecognized {
11083 div.output_unrecognized a {
11085 text-decoration: none;
11087 div.output_unrecognized a:hover {
11089 text-decoration: none;
11093 /* any extras will just be numbers: */
11095 .rendered_html em {
11096 font-style: italic;
11098 .rendered_html strong {
11102 text-decoration: underline;
11104 .rendered_html :link {
11105 text-decoration: underline;
11107 .rendered_html :visited {
11108 text-decoration: underline;
11110 .rendered_html h1 {
11112 margin: 1.08em 0 0 0;
11116 .rendered_html h2 {
11118 margin: 1.27em 0 0 0;
11122 .rendered_html h3 {
11124 margin: 1.55em 0 0 0;
11128 .rendered_html h4 {
11134 .rendered_html h5 {
11139 font-style: italic;
11141 .rendered_html h6 {
11146 font-style: italic;
11148 .rendered_html h1:first-child {
11149 margin-top: 0.538em;
11151 .rendered_html h2:first-child {
11152 margin-top: 0.636em;
11154 .rendered_html h3:first-child {
11155 margin-top: 0.777em;
11157 .rendered_html h4:first-child {
11160 .rendered_html h5:first-child {
11163 .rendered_html h6:first-child {
11166 .rendered_html ul:not(.list-inline),
11167 .rendered_html ol:not(.list-inline) {
11170 .rendered_html ul {
11173 .rendered_html ul ul {
11174 list-style: square;
11177 .rendered_html ul ul ul {
11178 list-style: circle;
11180 .rendered_html ol {
11181 list-style: decimal;
11183 .rendered_html ol ol {
11184 list-style: upper-alpha;
11187 .rendered_html ol ol ol {
11188 list-style: lower-alpha;
11190 .rendered_html ol ol ol ol {
11191 list-style: lower-roman;
11193 .rendered_html ol ol ol ol ol {
11194 list-style: decimal;
11196 .rendered_html * + ul {
11199 .rendered_html * + ol {
11202 .rendered_html hr {
11204 background-color: black;
11206 .rendered_html pre {
11209 background-color: #fff;
11211 .rendered_html code {
11212 background-color: #eff0f1;
11214 .rendered_html p code {
11217 .rendered_html pre code {
11218 background-color: #fff;
11220 .rendered_html pre,
11221 .rendered_html code {
11226 .rendered_html blockquote {
11229 .rendered_html table {
11231 margin-right: auto;
11233 border-collapse: collapse;
11237 table-layout: fixed;
11239 .rendered_html thead {
11240 border-bottom: 1px solid black;
11241 vertical-align: bottom;
11245 .rendered_html td {
11247 vertical-align: middle;
11248 padding: 0.5em 0.5em;
11249 line-height: normal;
11250 white-space: normal;
11254 .rendered_html th {
11257 .rendered_html tbody tr:nth-child(odd) {
11258 background: #f5f5f5;
11260 .rendered_html tbody tr:hover {
11261 background: rgba(66, 165, 245, 0.2);
11263 .rendered_html * + table {
11269 .rendered_html * + p {
11272 .rendered_html img {
11275 margin-right: auto;
11277 .rendered_html * + img {
11280 .rendered_html img,
11281 .rendered_html svg {
11285 .rendered_html img.unconfined,
11286 .rendered_html svg.unconfined {
11289 .rendered_html .alert {
11290 margin-bottom: initial;
11292 .rendered_html * + .alert {
11295 [dir="rtl"] .rendered_html p {
11300 display: -webkit-box;
11301 -webkit-box-orient: horizontal;
11302 -webkit-box-align: stretch;
11304 -moz-box-orient: horizontal;
11305 -moz-box-align: stretch;
11307 box-orient: horizontal;
11308 box-align: stretch;
11309 /* Modern browsers */
11311 flex-direction: row;
11312 align-items: stretch;
11314 @media (max-width: 540px) {
11315 div.text_cell > div.prompt {
11319 div.text_cell_render {
11320 /*font-family: "Helvetica Neue", Arial, Helvetica, Geneva, sans-serif;*/
11324 border-style: none;
11325 padding: 0.5em 0.5em 0.5em 0.4em;
11327 box-sizing: border-box;
11328 -moz-box-sizing: border-box;
11329 -webkit-box-sizing: border-box;
11331 a.anchor-link:link {
11332 text-decoration: none;
11334 visibility: hidden;
11336 h1:hover .anchor-link,
11337 h2:hover .anchor-link,
11338 h3:hover .anchor-link,
11339 h4:hover .anchor-link,
11340 h5:hover .anchor-link,
11341 h6:hover .anchor-link {
11342 visibility: visible;
11344 .text_cell.rendered .input_area {
11347 .text_cell.rendered .rendered_html {
11349 overflow-y: hidden;
11351 .text_cell.rendered .rendered_html tr,
11352 .text_cell.rendered .rendered_html th,
11353 .text_cell.rendered .rendered_html td {
11356 .text_cell.unrendered .text_cell_render {
11359 .text_cell .dropzone .input_area {
11360 border: 2px dashed #bababa;
11370 font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
11386 font-style: italic;
11390 font-style: italic;
11394 * IPython notebook webapp
11397 @media (max-width: 767px) {
11400 padding-right: 0px;
11403 #ipython-main-app {
11404 box-sizing: border-box;
11405 -moz-box-sizing: border-box;
11406 -webkit-box-sizing: border-box;
11409 div#notebook_panel {
11412 box-sizing: border-box;
11413 -moz-box-sizing: border-box;
11414 -webkit-box-sizing: border-box;
11420 overflow-y: hidden;
11423 /* This spaces the page away from the edge of the notebook area */
11427 box-sizing: border-box;
11428 -moz-box-sizing: border-box;
11429 -webkit-box-sizing: border-box;
11433 #notebook-container {
11435 background-color: #fff;
11437 -webkit-box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);
11438 box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);
11442 #notebook-container {
11446 div.ui-widget-content {
11447 border: 1px solid #ababab;
11451 background-color: #f7f7f7;
11452 border: 1px solid #ddd;
11453 border-radius: 2px;
11460 /* Word-wrap output correctly. This is the CSS3 spelling, though Firefox seems
11461 to not honor it correctly. Webkit browsers (Chrome, rekonq, Safari) do.
11467 white-space: pre-wrap;
11470 font-family: monospace;
11477 transition: height .2s ease;
11479 .notebook_app > #header {
11480 -webkit-box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);
11481 box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);
11485 background-color: #EEE;
11489 border-style: solid;
11494 padding-right: 2px;
11496 padding-bottom: 1px;
11498 .jupyter-keybindings {
11501 border-bottom: 1px solid gray;
11503 .jupyter-keybindings input {
11508 .jupyter-keybindings i {
11512 background-color: #ffffff;
11513 border-color: #ababab;
11515 border-style: solid;
11518 padding-bottom: 1px;
11520 /* CSS for the cell toolbar */
11522 border: thin solid #CFCFCF;
11523 border-bottom: none;
11525 border-radius: 2px 2px 0px 0px;
11528 padding-right: 4px;
11530 display: -webkit-box;
11531 -webkit-box-orient: horizontal;
11532 -webkit-box-align: stretch;
11534 -moz-box-orient: horizontal;
11535 -moz-box-align: stretch;
11537 box-orient: horizontal;
11538 box-align: stretch;
11539 /* Modern browsers */
11541 flex-direction: row;
11542 align-items: stretch;
11544 -webkit-box-pack: end;
11545 -moz-box-pack: end;
11547 /* Modern browsers */
11548 justify-content: flex-end;
11549 display: -webkit-flex;
11558 vertical-align: bottom;
11560 /* ctb_show is added to the ctb_hideshow div to show the cell toolbar.
11561 Cell toolbars are only shown when the ctb_global_show class is also set.
11563 .ctb_global_show .ctb_show.ctb_hideshow {
11566 .ctb_global_show .ctb_show + .input_area,
11567 .ctb_global_show .ctb_show + div.text_cell_input,
11568 .ctb_global_show .ctb_show ~ div.text_cell_render {
11569 border-top-right-radius: 0px;
11570 border-top-left-radius: 0px;
11572 .ctb_global_show .ctb_show ~ div.text_cell_render {
11573 border: 1px solid #cfcfcf;
11579 .celltoolbar select {
11585 line-height: 1.42857143;
11587 background-color: #fff;
11588 background-image: none;
11589 border: 1px solid #ccc;
11590 border-radius: 2px;
11591 -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
11592 box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
11593 -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
11594 -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
11595 transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
11600 border-radius: 1px;
11602 font-size: inherit;
11605 display: inline-block;
11607 .celltoolbar select:focus {
11608 border-color: #66afe9;
11610 -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);
11611 box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);
11613 .celltoolbar select::-moz-placeholder {
11617 .celltoolbar select:-ms-input-placeholder {
11620 .celltoolbar select::-webkit-input-placeholder {
11623 .celltoolbar select::-ms-expand {
11625 background-color: transparent;
11627 .celltoolbar select[disabled],
11628 .celltoolbar select[readonly],
11629 fieldset[disabled] .celltoolbar select {
11630 background-color: #eeeeee;
11633 .celltoolbar select[disabled],
11634 fieldset[disabled] .celltoolbar select {
11635 cursor: not-allowed;
11637 textarea.celltoolbar select {
11640 select.celltoolbar select {
11644 textarea.celltoolbar select,
11645 select[multiple].celltoolbar select {
11648 .celltoolbar label {
11652 .tags_button_container {
11658 flex-direction: row;
11661 position: relative;
11663 .tag-container > * {
11672 .cell-tag:last-child:after {
11674 position: absolute;
11678 /* Fade to background color of cell toolbar */
11679 background: linear-gradient(to right, rgba(0, 0, 0, 0), #EEE);
11686 .tags-input button {
11692 line-height: 1.42857143;
11694 background-color: #fff;
11695 background-image: none;
11696 border: 1px solid #ccc;
11697 border-radius: 2px;
11698 -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
11699 box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
11700 -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
11701 -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
11702 transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
11707 border-radius: 1px;
11710 font-size: inherit;
11714 display: inline-block;
11717 .tags-input input:focus,
11718 .tags-input button:focus {
11719 border-color: #66afe9;
11721 -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);
11722 box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);
11724 .cell-tag::-moz-placeholder,
11725 .tags-input input::-moz-placeholder,
11726 .tags-input button::-moz-placeholder {
11730 .cell-tag:-ms-input-placeholder,
11731 .tags-input input:-ms-input-placeholder,
11732 .tags-input button:-ms-input-placeholder {
11735 .cell-tag::-webkit-input-placeholder,
11736 .tags-input input::-webkit-input-placeholder,
11737 .tags-input button::-webkit-input-placeholder {
11740 .cell-tag::-ms-expand,
11741 .tags-input input::-ms-expand,
11742 .tags-input button::-ms-expand {
11744 background-color: transparent;
11746 .cell-tag[disabled],
11747 .tags-input input[disabled],
11748 .tags-input button[disabled],
11749 .cell-tag[readonly],
11750 .tags-input input[readonly],
11751 .tags-input button[readonly],
11752 fieldset[disabled] .cell-tag,
11753 fieldset[disabled] .tags-input input,
11754 fieldset[disabled] .tags-input button {
11755 background-color: #eeeeee;
11758 .cell-tag[disabled],
11759 .tags-input input[disabled],
11760 .tags-input button[disabled],
11761 fieldset[disabled] .cell-tag,
11762 fieldset[disabled] .tags-input input,
11763 fieldset[disabled] .tags-input button {
11764 cursor: not-allowed;
11767 textarea.tags-input input,
11768 textarea.tags-input button {
11772 select.tags-input input,
11773 select.tags-input button {
11778 textarea.tags-input input,
11779 textarea.tags-input button,
11780 select[multiple].cell-tag,
11781 select[multiple].tags-input input,
11782 select[multiple].tags-input button {
11786 .tags-input button {
11790 background-color: #fff;
11791 white-space: nowrap;
11793 .tags-input input[type=text]:focus {
11796 border-color: #ccc;
11799 position: absolute;
11802 border: 1px solid #ababab;
11803 border-radius: 2px;
11804 -webkit-box-shadow: 0px 6px 10px -1px #adadad;
11805 box-shadow: 0px 6px 10px -1px #adadad;
11808 .completions select {
11815 font-family: monospace;
11820 .completions select option.context {
11823 #kernel_logo_widget .current_kernel_logo {
11826 margin-bottom: -1px;
11830 [dir="rtl"] #kernel_logo_widget {
11831 float: left !important;
11834 .modal .modal-body .move-path {
11836 flex-direction: row;
11837 justify-content: space;
11838 align-items: center;
11840 .modal .modal-body .move-path .server-root {
11841 padding-right: 20px;
11843 .modal .modal-body .move-path .path-input {
11847 box-sizing: border-box;
11848 -moz-box-sizing: border-box;
11849 -webkit-box-sizing: border-box;
11854 border-radius: 0px 0px 2px 2px;
11855 margin-bottom: 0px;
11857 #menubar .navbar-toggle {
11860 padding-bottom: 7px;
11863 #menubar .navbar-collapse {
11866 [dir="rtl"] #menubar .navbar-toggle {
11869 [dir="rtl"] #menubar .navbar-collapse {
11872 [dir="rtl"] #menubar .navbar-nav {
11875 [dir="rtl"] #menubar .nav {
11876 padding-right: 0px;
11878 [dir="rtl"] #menubar .navbar-nav > li {
11881 [dir="rtl"] #menubar .navbar-right {
11882 float: left !important;
11884 [dir="rtl"] ul.dropdown-menu {
11888 [dir="rtl"] ul#new-menu.dropdown-menu {
11893 border-bottom: 1px solid #e7e7e7;
11898 [dir="rtl"] i.menu-icon.pull-right {
11899 float: left !important;
11902 ul#help_menu li a {
11904 padding-right: 2.2em;
11906 ul#help_menu li a i {
11907 margin-right: -1.2em;
11909 [dir="rtl"] ul#help_menu li a {
11910 padding-left: 2.2em;
11912 [dir="rtl"] ul#help_menu li a i {
11914 margin-left: -1.2em;
11916 [dir="rtl"] ul#help_menu li a i.pull-right {
11917 float: left !important;
11920 .dropdown-submenu {
11921 position: relative;
11923 .dropdown-submenu > .dropdown-menu {
11929 [dir="rtl"] .dropdown-submenu > .dropdown-menu {
11931 margin-right: -1px;
11933 .dropdown-submenu:hover > .dropdown-menu {
11936 .dropdown-submenu > a:after {
11937 display: inline-block;
11938 font: normal normal normal 14px/1 FontAwesome;
11939 font-size: inherit;
11940 text-rendering: auto;
11941 -webkit-font-smoothing: antialiased;
11942 -moz-osx-font-smoothing: grayscale;
11948 margin-right: -10px;
11950 .dropdown-submenu > a:after.fa-pull-left {
11951 margin-right: .3em;
11953 .dropdown-submenu > a:after.fa-pull-right {
11956 .dropdown-submenu > a:after.pull-left {
11957 margin-right: .3em;
11959 .dropdown-submenu > a:after.pull-right {
11962 [dir="rtl"] .dropdown-submenu > a:after {
11966 margin-left: -10px;
11968 .dropdown-submenu:hover > a:after {
11971 .dropdown-submenu.pull-left {
11974 .dropdown-submenu.pull-left > .dropdown-menu {
11978 #notification_area {
11979 float: right !important;
11983 [dir="rtl"] #notification_area {
11984 float: left !important;
11988 float: right !important;
11995 text-align: center;
11998 [dir="rtl"] .indicator_area {
11999 float: left !important;
12002 #kernel_indicator {
12003 float: right !important;
12010 text-align: center;
12012 border-left: 1px solid;
12014 #kernel_indicator .kernel_indicator_name {
12016 padding-right: 5px;
12018 [dir="rtl"] #kernel_indicator {
12019 float: left !important;
12022 border-right: 1px solid;
12025 float: right !important;
12032 text-align: center;
12035 [dir="rtl"] #modal_indicator {
12036 float: left !important;
12039 #readonly-indicator {
12040 float: right !important;
12047 text-align: center;
12050 margin-bottom: 0px;
12055 .modal_indicator:before {
12056 width: 1.28571429em;
12057 text-align: center;
12059 .edit_mode .modal_indicator:before {
12060 display: inline-block;
12061 font: normal normal normal 14px/1 FontAwesome;
12062 font-size: inherit;
12063 text-rendering: auto;
12064 -webkit-font-smoothing: antialiased;
12065 -moz-osx-font-smoothing: grayscale;
12068 .edit_mode .modal_indicator:before.fa-pull-left {
12069 margin-right: .3em;
12071 .edit_mode .modal_indicator:before.fa-pull-right {
12074 .edit_mode .modal_indicator:before.pull-left {
12075 margin-right: .3em;
12077 .edit_mode .modal_indicator:before.pull-right {
12080 .command_mode .modal_indicator:before {
12081 display: inline-block;
12082 font: normal normal normal 14px/1 FontAwesome;
12083 font-size: inherit;
12084 text-rendering: auto;
12085 -webkit-font-smoothing: antialiased;
12086 -moz-osx-font-smoothing: grayscale;
12089 .command_mode .modal_indicator:before.fa-pull-left {
12090 margin-right: .3em;
12092 .command_mode .modal_indicator:before.fa-pull-right {
12095 .command_mode .modal_indicator:before.pull-left {
12096 margin-right: .3em;
12098 .command_mode .modal_indicator:before.pull-right {
12101 .kernel_idle_icon:before {
12102 display: inline-block;
12103 font: normal normal normal 14px/1 FontAwesome;
12104 font-size: inherit;
12105 text-rendering: auto;
12106 -webkit-font-smoothing: antialiased;
12107 -moz-osx-font-smoothing: grayscale;
12110 .kernel_idle_icon:before.fa-pull-left {
12111 margin-right: .3em;
12113 .kernel_idle_icon:before.fa-pull-right {
12116 .kernel_idle_icon:before.pull-left {
12117 margin-right: .3em;
12119 .kernel_idle_icon:before.pull-right {
12122 .kernel_busy_icon:before {
12123 display: inline-block;
12124 font: normal normal normal 14px/1 FontAwesome;
12125 font-size: inherit;
12126 text-rendering: auto;
12127 -webkit-font-smoothing: antialiased;
12128 -moz-osx-font-smoothing: grayscale;
12131 .kernel_busy_icon:before.fa-pull-left {
12132 margin-right: .3em;
12134 .kernel_busy_icon:before.fa-pull-right {
12137 .kernel_busy_icon:before.pull-left {
12138 margin-right: .3em;
12140 .kernel_busy_icon:before.pull-right {
12143 .kernel_dead_icon:before {
12144 display: inline-block;
12145 font: normal normal normal 14px/1 FontAwesome;
12146 font-size: inherit;
12147 text-rendering: auto;
12148 -webkit-font-smoothing: antialiased;
12149 -moz-osx-font-smoothing: grayscale;
12152 .kernel_dead_icon:before.fa-pull-left {
12153 margin-right: .3em;
12155 .kernel_dead_icon:before.fa-pull-right {
12158 .kernel_dead_icon:before.pull-left {
12159 margin-right: .3em;
12161 .kernel_dead_icon:before.pull-right {
12164 .kernel_disconnected_icon:before {
12165 display: inline-block;
12166 font: normal normal normal 14px/1 FontAwesome;
12167 font-size: inherit;
12168 text-rendering: auto;
12169 -webkit-font-smoothing: antialiased;
12170 -moz-osx-font-smoothing: grayscale;
12173 .kernel_disconnected_icon:before.fa-pull-left {
12174 margin-right: .3em;
12176 .kernel_disconnected_icon:before.fa-pull-right {
12179 .kernel_disconnected_icon:before.pull-left {
12180 margin-right: .3em;
12182 .kernel_disconnected_icon:before.pull-right {
12185 .notification_widget {
12188 background: rgba(240, 240, 240, 0.5);
12191 background-color: #fff;
12192 border-color: #ccc;
12194 .notification_widget:focus,
12195 .notification_widget.focus {
12197 background-color: #e6e6e6;
12198 border-color: #8c8c8c;
12200 .notification_widget:hover {
12202 background-color: #e6e6e6;
12203 border-color: #adadad;
12205 .notification_widget:active,
12206 .notification_widget.active,
12207 .open > .dropdown-toggle.notification_widget {
12209 background-color: #e6e6e6;
12210 border-color: #adadad;
12212 .notification_widget:active:hover,
12213 .notification_widget.active:hover,
12214 .open > .dropdown-toggle.notification_widget:hover,
12215 .notification_widget:active:focus,
12216 .notification_widget.active:focus,
12217 .open > .dropdown-toggle.notification_widget:focus,
12218 .notification_widget:active.focus,
12219 .notification_widget.active.focus,
12220 .open > .dropdown-toggle.notification_widget.focus {
12222 background-color: #d4d4d4;
12223 border-color: #8c8c8c;
12225 .notification_widget:active,
12226 .notification_widget.active,
12227 .open > .dropdown-toggle.notification_widget {
12228 background-image: none;
12230 .notification_widget.disabled:hover,
12231 .notification_widget[disabled]:hover,
12232 fieldset[disabled] .notification_widget:hover,
12233 .notification_widget.disabled:focus,
12234 .notification_widget[disabled]:focus,
12235 fieldset[disabled] .notification_widget:focus,
12236 .notification_widget.disabled.focus,
12237 .notification_widget[disabled].focus,
12238 fieldset[disabled] .notification_widget.focus {
12239 background-color: #fff;
12240 border-color: #ccc;
12242 .notification_widget .badge {
12244 background-color: #333;
12246 .notification_widget.warning {
12248 background-color: #f0ad4e;
12249 border-color: #eea236;
12251 .notification_widget.warning:focus,
12252 .notification_widget.warning.focus {
12254 background-color: #ec971f;
12255 border-color: #985f0d;
12257 .notification_widget.warning:hover {
12259 background-color: #ec971f;
12260 border-color: #d58512;
12262 .notification_widget.warning:active,
12263 .notification_widget.warning.active,
12264 .open > .dropdown-toggle.notification_widget.warning {
12266 background-color: #ec971f;
12267 border-color: #d58512;
12269 .notification_widget.warning:active:hover,
12270 .notification_widget.warning.active:hover,
12271 .open > .dropdown-toggle.notification_widget.warning:hover,
12272 .notification_widget.warning:active:focus,
12273 .notification_widget.warning.active:focus,
12274 .open > .dropdown-toggle.notification_widget.warning:focus,
12275 .notification_widget.warning:active.focus,
12276 .notification_widget.warning.active.focus,
12277 .open > .dropdown-toggle.notification_widget.warning.focus {
12279 background-color: #d58512;
12280 border-color: #985f0d;
12282 .notification_widget.warning:active,
12283 .notification_widget.warning.active,
12284 .open > .dropdown-toggle.notification_widget.warning {
12285 background-image: none;
12287 .notification_widget.warning.disabled:hover,
12288 .notification_widget.warning[disabled]:hover,
12289 fieldset[disabled] .notification_widget.warning:hover,
12290 .notification_widget.warning.disabled:focus,
12291 .notification_widget.warning[disabled]:focus,
12292 fieldset[disabled] .notification_widget.warning:focus,
12293 .notification_widget.warning.disabled.focus,
12294 .notification_widget.warning[disabled].focus,
12295 fieldset[disabled] .notification_widget.warning.focus {
12296 background-color: #f0ad4e;
12297 border-color: #eea236;
12299 .notification_widget.warning .badge {
12301 background-color: #fff;
12303 .notification_widget.success {
12305 background-color: #5cb85c;
12306 border-color: #4cae4c;
12308 .notification_widget.success:focus,
12309 .notification_widget.success.focus {
12311 background-color: #449d44;
12312 border-color: #255625;
12314 .notification_widget.success:hover {
12316 background-color: #449d44;
12317 border-color: #398439;
12319 .notification_widget.success:active,
12320 .notification_widget.success.active,
12321 .open > .dropdown-toggle.notification_widget.success {
12323 background-color: #449d44;
12324 border-color: #398439;
12326 .notification_widget.success:active:hover,
12327 .notification_widget.success.active:hover,
12328 .open > .dropdown-toggle.notification_widget.success:hover,
12329 .notification_widget.success:active:focus,
12330 .notification_widget.success.active:focus,
12331 .open > .dropdown-toggle.notification_widget.success:focus,
12332 .notification_widget.success:active.focus,
12333 .notification_widget.success.active.focus,
12334 .open > .dropdown-toggle.notification_widget.success.focus {
12336 background-color: #398439;
12337 border-color: #255625;
12339 .notification_widget.success:active,
12340 .notification_widget.success.active,
12341 .open > .dropdown-toggle.notification_widget.success {
12342 background-image: none;
12344 .notification_widget.success.disabled:hover,
12345 .notification_widget.success[disabled]:hover,
12346 fieldset[disabled] .notification_widget.success:hover,
12347 .notification_widget.success.disabled:focus,
12348 .notification_widget.success[disabled]:focus,
12349 fieldset[disabled] .notification_widget.success:focus,
12350 .notification_widget.success.disabled.focus,
12351 .notification_widget.success[disabled].focus,
12352 fieldset[disabled] .notification_widget.success.focus {
12353 background-color: #5cb85c;
12354 border-color: #4cae4c;
12356 .notification_widget.success .badge {
12358 background-color: #fff;
12360 .notification_widget.info {
12362 background-color: #5bc0de;
12363 border-color: #46b8da;
12365 .notification_widget.info:focus,
12366 .notification_widget.info.focus {
12368 background-color: #31b0d5;
12369 border-color: #1b6d85;
12371 .notification_widget.info:hover {
12373 background-color: #31b0d5;
12374 border-color: #269abc;
12376 .notification_widget.info:active,
12377 .notification_widget.info.active,
12378 .open > .dropdown-toggle.notification_widget.info {
12380 background-color: #31b0d5;
12381 border-color: #269abc;
12383 .notification_widget.info:active:hover,
12384 .notification_widget.info.active:hover,
12385 .open > .dropdown-toggle.notification_widget.info:hover,
12386 .notification_widget.info:active:focus,
12387 .notification_widget.info.active:focus,
12388 .open > .dropdown-toggle.notification_widget.info:focus,
12389 .notification_widget.info:active.focus,
12390 .notification_widget.info.active.focus,
12391 .open > .dropdown-toggle.notification_widget.info.focus {
12393 background-color: #269abc;
12394 border-color: #1b6d85;
12396 .notification_widget.info:active,
12397 .notification_widget.info.active,
12398 .open > .dropdown-toggle.notification_widget.info {
12399 background-image: none;
12401 .notification_widget.info.disabled:hover,
12402 .notification_widget.info[disabled]:hover,
12403 fieldset[disabled] .notification_widget.info:hover,
12404 .notification_widget.info.disabled:focus,
12405 .notification_widget.info[disabled]:focus,
12406 fieldset[disabled] .notification_widget.info:focus,
12407 .notification_widget.info.disabled.focus,
12408 .notification_widget.info[disabled].focus,
12409 fieldset[disabled] .notification_widget.info.focus {
12410 background-color: #5bc0de;
12411 border-color: #46b8da;
12413 .notification_widget.info .badge {
12415 background-color: #fff;
12417 .notification_widget.danger {
12419 background-color: #d9534f;
12420 border-color: #d43f3a;
12422 .notification_widget.danger:focus,
12423 .notification_widget.danger.focus {
12425 background-color: #c9302c;
12426 border-color: #761c19;
12428 .notification_widget.danger:hover {
12430 background-color: #c9302c;
12431 border-color: #ac2925;
12433 .notification_widget.danger:active,
12434 .notification_widget.danger.active,
12435 .open > .dropdown-toggle.notification_widget.danger {
12437 background-color: #c9302c;
12438 border-color: #ac2925;
12440 .notification_widget.danger:active:hover,
12441 .notification_widget.danger.active:hover,
12442 .open > .dropdown-toggle.notification_widget.danger:hover,
12443 .notification_widget.danger:active:focus,
12444 .notification_widget.danger.active:focus,
12445 .open > .dropdown-toggle.notification_widget.danger:focus,
12446 .notification_widget.danger:active.focus,
12447 .notification_widget.danger.active.focus,
12448 .open > .dropdown-toggle.notification_widget.danger.focus {
12450 background-color: #ac2925;
12451 border-color: #761c19;
12453 .notification_widget.danger:active,
12454 .notification_widget.danger.active,
12455 .open > .dropdown-toggle.notification_widget.danger {
12456 background-image: none;
12458 .notification_widget.danger.disabled:hover,
12459 .notification_widget.danger[disabled]:hover,
12460 fieldset[disabled] .notification_widget.danger:hover,
12461 .notification_widget.danger.disabled:focus,
12462 .notification_widget.danger[disabled]:focus,
12463 fieldset[disabled] .notification_widget.danger:focus,
12464 .notification_widget.danger.disabled.focus,
12465 .notification_widget.danger[disabled].focus,
12466 fieldset[disabled] .notification_widget.danger.focus {
12467 background-color: #d9534f;
12468 border-color: #d43f3a;
12470 .notification_widget.danger .badge {
12472 background-color: #fff;
12475 background-color: #fff;
12485 -webkit-box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);
12486 box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);
12487 /* Display over codemirror */
12489 /* Hack which prevents jquery ui resizable from changing top. */
12490 top: auto !important;
12493 line-height: 1.21429em;
12495 background-color: #f7f7f7;
12498 div#pager #pager-button-area {
12499 position: absolute;
12503 div#pager #pager-contents {
12504 position: relative;
12509 div#pager #pager-contents #pager-container {
12510 position: relative;
12512 box-sizing: border-box;
12513 -moz-box-sizing: border-box;
12514 -webkit-box-sizing: border-box;
12516 div#pager .ui-resizable-handle {
12519 background: #f7f7f7;
12520 border-top: 1px solid #cfcfcf;
12521 border-bottom: 1px solid #cfcfcf;
12522 /* This injects handle bars (a short, wide = symbol) for
12523 the resize handle. */
12525 div#pager .ui-resizable-handle::after {
12531 margin-left: -15px;
12532 position: absolute;
12533 border-top: 1px solid #cfcfcf;
12537 display: -webkit-box;
12538 -webkit-box-orient: horizontal;
12539 -webkit-box-align: stretch;
12541 -moz-box-orient: horizontal;
12542 -moz-box-align: stretch;
12544 box-orient: horizontal;
12545 box-align: stretch;
12546 /* Modern browsers */
12548 flex-direction: row;
12549 align-items: stretch;
12550 line-height: 1.8em;
12553 display: inline-block;
12556 font-family: monospace;
12559 display: inline-block;
12561 -webkit-box-flex: 1;
12564 /* Modern browsers */
12571 justify-content: flex-start;
12572 align-items: baseline;
12576 span.save_widget span.filename {
12582 text-overflow: ellipsis;
12584 white-space: nowrap;
12585 border-radius: 2px;
12587 span.save_widget span.filename:hover {
12588 background-color: #e6e6e6;
12590 [dir="rtl"] span.save_widget.pull-left {
12591 float: right !important;
12594 [dir="rtl"] span.save_widget span.filename {
12596 margin-right: 16px;
12598 span.checkpoint_status,
12599 span.autosave_status {
12601 white-space: nowrap;
12604 @media (max-width: 767px) {
12607 padding: 0 0 0 5px;
12609 span.checkpoint_status,
12610 span.autosave_status {
12614 @media (min-width: 768px) and (max-width: 991px) {
12615 span.checkpoint_status {
12618 span.autosave_status {
12619 font-size: x-small;
12626 margin-bottom: 5px;
12627 box-sizing: border-box;
12628 -moz-box-sizing: border-box;
12629 -webkit-box-sizing: border-box;
12634 vertical-align: middle;
12636 margin-bottom: 0px;
12639 margin-left: 0.3em;
12640 margin-right: 0.3em;
12647 .toolbar .btn-group {
12651 .toolbar-btn-label {
12655 margin-bottom: -3px;
12661 padding-bottom: 3px;
12663 #maintoolbar .navbar-text {
12665 vertical-align: middle;
12674 [dir="rtl"] .btn-group > .btn,
12675 .btn-group-vertical > .btn {
12679 .dropdown-menu > li > a.pulse,
12680 li.pulse > a.dropdown-toggle,
12681 li.pulse.open > a.dropdown-toggle {
12682 background-color: #F37626;
12688 * Author: Jupyter Development Team
12690 /** WARNING IF YOU ARE EDITTING THIS FILE, if this is a .css file, It has a lot
12691 * of chance of beeing generated from the ../less/[samename].less file, you can
12692 * try to get back the less file by reverting somme commit in history
12695 * We'll try to get something pretty, so we
12696 * have some strange css to have the scroll bar on
12697 * the left with fix button on the top right of the tooltip
12699 @-moz-keyframes fadeOut {
12707 @-webkit-keyframes fadeOut {
12715 @-moz-keyframes fadeIn {
12723 @-webkit-keyframes fadeIn {
12731 /*properties of tooltip after "expand"*/
12735 -webkit-transition-property: height;
12736 -webkit-transition-duration: 500ms;
12737 -moz-transition-property: height;
12738 -moz-transition-duration: 500ms;
12739 transition-property: height;
12740 transition-duration: 500ms;
12742 /*properties of tooltip before "expand"*/
12744 -webkit-transition-property: height;
12745 -webkit-transition-duration: 500ms;
12746 -moz-transition-property: height;
12747 -moz-transition-duration: 500ms;
12748 transition-property: height;
12749 transition-duration: 500ms;
12750 text-overflow: ellipsis;
12755 position: absolute;
12756 padding-right: 15px;
12761 /*avoid the button to overlap on some docstring*/
12762 padding-right: 30px;
12766 /*fade-in animation when inserted*/
12767 -webkit-animation: fadeOut 400ms;
12768 -moz-animation: fadeOut 400ms;
12769 animation: fadeOut 400ms;
12770 -webkit-animation: fadeIn 400ms;
12771 -moz-animation: fadeIn 400ms;
12772 animation: fadeIn 400ms;
12773 vertical-align: middle;
12774 background-color: #f7f7f7;
12776 border: #ababab 1px solid;
12781 font-family: monospace;
12783 -moz-box-shadow: 0px 6px 10px -1px #adadad;
12784 -webkit-box-shadow: 0px 6px 10px -1px #adadad;
12785 box-shadow: 0px 6px 10px -1px #adadad;
12786 border-radius: 2px;
12787 position: absolute;
12790 .ipython_tooltip a {
12793 .ipython_tooltip .tooltiptext pre {
12797 background-color: #f7f7f7;
12806 position: absolute;
12808 .pretooltiparrow:before {
12809 background-color: #f7f7f7;
12810 border: 1px #ababab solid;
12813 position: absolute;
12818 -webkit-transform: rotate(45deg);
12819 -moz-transform: rotate(45deg);
12820 -ms-transform: rotate(45deg);
12821 -o-transform: rotate(45deg);
12823 ul.typeahead-list i {
12824 margin-left: -10px;
12827 [dir="rtl"] ul.typeahead-list i {
12829 margin-right: -10px;
12831 ul.typeahead-list {
12835 ul.typeahead-list > li > a {
12836 /** Firefox bug **/
12837 /* see https://github.com/jupyter/notebook/issues/559 */
12838 white-space: normal;
12840 ul.typeahead-list > li > a.pull-right {
12841 float: left !important;
12844 [dir="rtl"] .typeahead-list {
12847 .cmd-palette .modal-body {
12850 .cmd-palette form {
12853 .cmd-palette input {
12858 color: transparent;
12860 [dir="rtl"] .no-shortcut.pull-right {
12861 float: left !important;
12864 [dir="rtl"] .command-shortcut.pull-right {
12865 float: left !important;
12868 .command-shortcut:before {
12869 content: "(command mode)";
12870 padding-right: 3px;
12873 .edit-shortcut:before {
12875 padding-right: 3px;
12878 [dir="rtl"] .edit-shortcut.pull-right {
12879 float: left !important;
12882 #find-and-replace #replace-preview .match,
12883 #find-and-replace #replace-preview .insert {
12884 background-color: #BBDEFB;
12885 border-color: #90CAF9;
12886 border-style: solid;
12888 border-radius: 0px;
12890 [dir="ltr"] #find-and-replace .input-group-btn + .form-control {
12893 [dir="rtl"] #find-and-replace .input-group-btn + .form-control {
12894 border-right: none;
12896 #find-and-replace #replace-preview .replace .match {
12897 background-color: #FFCDD2;
12898 border-color: #EF9A9A;
12899 border-radius: 0px;
12901 #find-and-replace #replace-preview .replace .insert {
12902 background-color: #C8E6C9;
12903 border-color: #A5D6A7;
12904 border-radius: 0px;
12906 #find-and-replace #replace-preview {
12910 #find-and-replace #replace-preview pre {
12916 .terminal-app #header {
12918 -webkit-box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);
12919 box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);
12921 .terminal-app .terminal {
12924 font-family: monospace;
12928 border-radius: 2px;
12929 -webkit-box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.4);
12930 box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.4);
12932 .terminal-app .terminal,
12933 .terminal-app .terminal dummy-screen {
12937 .terminal-app .terminal .xterm-rows {
12940 .terminal-app .terminal-cursor {
12944 .terminal-app #terminado-container {
12947 /*# sourceMappingURL=style.min.css.map */
12949 <style type="text/css">
12950 .highlight .hll { background-color: #ffffcc }
12951 .highlight { background: #f8f8f8; }
12952 .highlight .c { color: #408080; font-style: italic } /* Comment */
12953 .highlight .err { border: 1px solid #FF0000 } /* Error */
12954 .highlight .k { color: #008000; font-weight: bold } /* Keyword */
12955 .highlight .o { color: #666666 } /* Operator */
12956 .highlight .ch { color: #408080; font-style: italic } /* Comment.Hashbang */
12957 .highlight .cm { color: #408080; font-style: italic } /* Comment.Multiline */
12958 .highlight .cp { color: #BC7A00 } /* Comment.Preproc */
12959 .highlight .cpf { color: #408080; font-style: italic } /* Comment.PreprocFile */
12960 .highlight .c1 { color: #408080; font-style: italic } /* Comment.Single */
12961 .highlight .cs { color: #408080; font-style: italic } /* Comment.Special */
12962 .highlight .gd { color: #A00000 } /* Generic.Deleted */
12963 .highlight .ge { font-style: italic } /* Generic.Emph */
12964 .highlight .gr { color: #FF0000 } /* Generic.Error */
12965 .highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */
12966 .highlight .gi { color: #00A000 } /* Generic.Inserted */
12967 .highlight .go { color: #888888 } /* Generic.Output */
12968 .highlight .gp { color: #000080; font-weight: bold } /* Generic.Prompt */
12969 .highlight .gs { font-weight: bold } /* Generic.Strong */
12970 .highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */
12971 .highlight .gt { color: #0044DD } /* Generic.Traceback */
12972 .highlight .kc { color: #008000; font-weight: bold } /* Keyword.Constant */
12973 .highlight .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */
12974 .highlight .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */
12975 .highlight .kp { color: #008000 } /* Keyword.Pseudo */
12976 .highlight .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */
12977 .highlight .kt { color: #B00040 } /* Keyword.Type */
12978 .highlight .m { color: #666666 } /* Literal.Number */
12979 .highlight .s { color: #BA2121 } /* Literal.String */
12980 .highlight .na { color: #7D9029 } /* Name.Attribute */
12981 .highlight .nb { color: #008000 } /* Name.Builtin */
12982 .highlight .nc { color: #0000FF; font-weight: bold } /* Name.Class */
12983 .highlight .no { color: #880000 } /* Name.Constant */
12984 .highlight .nd { color: #AA22FF } /* Name.Decorator */
12985 .highlight .ni { color: #999999; font-weight: bold } /* Name.Entity */
12986 .highlight .ne { color: #D2413A; font-weight: bold } /* Name.Exception */
12987 .highlight .nf { color: #0000FF } /* Name.Function */
12988 .highlight .nl { color: #A0A000 } /* Name.Label */
12989 .highlight .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */
12990 .highlight .nt { color: #008000; font-weight: bold } /* Name.Tag */
12991 .highlight .nv { color: #19177C } /* Name.Variable */
12992 .highlight .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */
12993 .highlight .w { color: #bbbbbb } /* Text.Whitespace */
12994 .highlight .mb { color: #666666 } /* Literal.Number.Bin */
12995 .highlight .mf { color: #666666 } /* Literal.Number.Float */
12996 .highlight .mh { color: #666666 } /* Literal.Number.Hex */
12997 .highlight .mi { color: #666666 } /* Literal.Number.Integer */
12998 .highlight .mo { color: #666666 } /* Literal.Number.Oct */
12999 .highlight .sa { color: #BA2121 } /* Literal.String.Affix */
13000 .highlight .sb { color: #BA2121 } /* Literal.String.Backtick */
13001 .highlight .sc { color: #BA2121 } /* Literal.String.Char */
13002 .highlight .dl { color: #BA2121 } /* Literal.String.Delimiter */
13003 .highlight .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */
13004 .highlight .s2 { color: #BA2121 } /* Literal.String.Double */
13005 .highlight .se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */
13006 .highlight .sh { color: #BA2121 } /* Literal.String.Heredoc */
13007 .highlight .si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */
13008 .highlight .sx { color: #008000 } /* Literal.String.Other */
13009 .highlight .sr { color: #BB6688 } /* Literal.String.Regex */
13010 .highlight .s1 { color: #BA2121 } /* Literal.String.Single */
13011 .highlight .ss { color: #19177C } /* Literal.String.Symbol */
13012 .highlight .bp { color: #008000 } /* Name.Builtin.Pseudo */
13013 .highlight .fm { color: #0000FF } /* Name.Function.Magic */
13014 .highlight .vc { color: #19177C } /* Name.Variable.Class */
13015 .highlight .vg { color: #19177C } /* Name.Variable.Global */
13016 .highlight .vi { color: #19177C } /* Name.Variable.Instance */
13017 .highlight .vm { color: #19177C } /* Name.Variable.Magic */
13018 .highlight .il { color: #666666 } /* Literal.Number.Integer.Long */
13022 <style type="text/css">
13023 /* Overrides of notebook CSS for static HTML export */
13035 page-break-inside: avoid;
13037 div.output_wrapper {
13039 page-break-inside: avoid;
13043 page-break-inside: avoid;
13048 <!-- Custom stylesheet, it must be in the same directory as the html file -->
13049 <link rel="stylesheet" href="custom.css">
13051 <!-- Loading mathjax macro -->
13052 <!-- Load mathjax -->
13053 <script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS_HTML"></script>
13054 <!-- MathJax configuration -->
13055 <script type="text/x-mathjax-config">
13056 MathJax.Hub.Config({
13058 inlineMath: [ ['$','$'], ["\\(","\\)"] ],
13059 displayMath: [ ['$$','$$'], ["\\[","\\]"] ],
13060 processEscapes: true,
13061 processEnvironments: true
13063 // Center justify equations in code and markdown cells. Elsewhere
13064 // we use CSS to left justify single line equations in code cells.
13065 displayAlign: 'center',
13067 styles: {'.MathJax_Display': {"margin": 0}},
13068 linebreaks: { automatic: true }
13072 <!-- End of mathjax configuration --></head>
13074 <div tabindex="-1" id="notebook" class="border-box-sizing">
13075 <div class="container" id="notebook-container">
13077 <div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
13078 </div><div class="inner_cell">
13079 <div class="text_cell_render border-box-sizing rendered_html">
13080 <h1 id="Symbolic-Evaluation-with-SymPy">Symbolic Evaluation with SymPy<a class="anchor-link" href="#Symbolic-Evaluation-with-SymPy">¶</a></h1>
13084 <div class="cell border-box-sizing code_cell rendered">
13085 <div class="input">
13086 <div class="prompt input_prompt">In [1]:</div>
13087 <div class="inner_cell">
13088 <div class="input_area">
13089 <div class=" highlight hl-ipython2"><pre><span></span><span class="kn">import</span> <span class="nn">sympy</span>
13091 <span class="kn">from</span> <span class="nn">joy.joy</span> <span class="kn">import</span> <span class="n">run</span>
13092 <span class="kn">from</span> <span class="nn">joy.library</span> <span class="kn">import</span> <span class="n">UnaryBuiltinWrapper</span>
13093 <span class="kn">from</span> <span class="nn">joy.utils.pretty_print</span> <span class="kn">import</span> <span class="n">TracePrinter</span>
13094 <span class="kn">from</span> <span class="nn">joy.utils.stack</span> <span class="kn">import</span> <span class="n">list_to_stack</span>
13096 <span class="kn">from</span> <span class="nn">notebook_preamble</span> <span class="kn">import</span> <span class="n">D</span><span class="p">,</span> <span class="n">J</span><span class="p">,</span> <span class="n">V</span><span class="p">,</span> <span class="n">define</span>
13104 <div class="cell border-box-sizing code_cell rendered">
13105 <div class="input">
13106 <div class="prompt input_prompt">In [2]:</div>
13107 <div class="inner_cell">
13108 <div class="input_area">
13109 <div class=" highlight hl-ipython2"><pre><span></span><span class="n">sympy</span><span class="o">.</span><span class="n">init_printing</span><span class="p">()</span>
13117 <div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
13118 </div><div class="inner_cell">
13119 <div class="text_cell_render border-box-sizing rendered_html">
13120 <h2 id="SypPy-Symbols"><a href="http://docs.sympy.org/latest/modules/core.html#module-sympy.core.symbol">SypPy Symbols</a><a class="anchor-link" href="#SypPy-Symbols">¶</a></h2><p>The SymPy package provides a powerful and elegant <a href="https://en.wikipedia.org/wiki/Thunk">"thunk"</a> object that can take the place of a numeric value in calculations and "record" the operations performed on it.</p>
13121 <p>We can create some of these objects and put them on the Joy stack:</p>
13126 <div class="cell border-box-sizing code_cell rendered">
13127 <div class="input">
13128 <div class="prompt input_prompt">In [3]:</div>
13129 <div class="inner_cell">
13130 <div class="input_area">
13131 <div class=" highlight hl-ipython2"><pre><span></span><span class="n">stack</span> <span class="o">=</span> <span class="n">list_to_stack</span><span class="p">(</span><span class="n">sympy</span><span class="o">.</span><span class="n">symbols</span><span class="p">(</span><span class="s1">'c a b'</span><span class="p">))</span>
13139 <div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
13140 </div><div class="inner_cell">
13141 <div class="text_cell_render border-box-sizing rendered_html">
13142 <p>If we evaluate the <code>quadratic</code> program</p>
13144 <pre><code>over [[[neg] dupdip sqr 4] dipd * * - sqrt pm] dip 2 * [/] cons app2
13147 <p>The <a href="http://docs.sympy.org/latest/modules/core.html#module-sympy.core.symbol">SypPy Symbols</a> will become the symbolic expression of the math operations. Unfortunately, the library <code>sqrt</code> function doesn't work with the SymPy objects:</p>
13152 <div class="cell border-box-sizing code_cell rendered">
13153 <div class="input">
13154 <div class="prompt input_prompt">In [4]:</div>
13155 <div class="inner_cell">
13156 <div class="input_area">
13157 <div class=" highlight hl-ipython2"><pre><span></span><span class="n">viewer</span> <span class="o">=</span> <span class="n">TracePrinter</span><span class="p">()</span>
13158 <span class="k">try</span><span class="p">:</span>
13159 <span class="n">run</span><span class="p">(</span><span class="s1">'over [[[neg] dupdip sqr 4] dipd * * - sqrt pm] dip 2 * [/] cons app2'</span><span class="p">,</span> <span class="n">stack</span><span class="p">,</span> <span class="n">D</span><span class="p">,</span> <span class="n">viewer</span><span class="o">.</span><span class="n">viewer</span><span class="p">)</span>
13160 <span class="k">except</span> <span class="ne">Exception</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span>
13161 <span class="nb">print</span> <span class="n">e</span>
13162 <span class="n">viewer</span><span class="o">.</span><span class="n">print_</span><span class="p">()</span>
13169 <div class="output_wrapper">
13170 <div class="output">
13173 <div class="output_area">
13175 <div class="prompt"></div>
13178 <div class="output_subarea output_stream output_stdout output_text">
13179 <pre>can't convert expression to float
13180 b a c . over [[[neg] dupdip sqr 4] dipd * * - sqrt pm] dip 2 * [/] cons app2
13181 b a c a . [[[neg] dupdip sqr 4] dipd * * - sqrt pm] dip 2 * [/] cons app2
13182 b a c a [[[neg] dupdip sqr 4] dipd * * - sqrt pm] . dip 2 * [/] cons app2
13183 b a c . [[neg] dupdip sqr 4] dipd * * - sqrt pm a 2 * [/] cons app2
13184 b a c [[neg] dupdip sqr 4] . dipd * * - sqrt pm a 2 * [/] cons app2
13185 b . [neg] dupdip sqr 4 a c * * - sqrt pm a 2 * [/] cons app2
13186 b [neg] . dupdip sqr 4 a c * * - sqrt pm a 2 * [/] cons app2
13187 b . neg b sqr 4 a c * * - sqrt pm a 2 * [/] cons app2
13188 -b . b sqr 4 a c * * - sqrt pm a 2 * [/] cons app2
13189 -b b . sqr 4 a c * * - sqrt pm a 2 * [/] cons app2
13190 -b b . dup mul 4 a c * * - sqrt pm a 2 * [/] cons app2
13191 -b b b . mul 4 a c * * - sqrt pm a 2 * [/] cons app2
13192 -b b**2 . 4 a c * * - sqrt pm a 2 * [/] cons app2
13193 -b b**2 4 . a c * * - sqrt pm a 2 * [/] cons app2
13194 -b b**2 4 a . c * * - sqrt pm a 2 * [/] cons app2
13195 -b b**2 4 a c . * * - sqrt pm a 2 * [/] cons app2
13196 -b b**2 4 a*c . * - sqrt pm a 2 * [/] cons app2
13197 -b b**2 4*a*c . - sqrt pm a 2 * [/] cons app2
13198 -b -4*a*c + b**2 . sqrt pm a 2 * [/] cons app2
13207 <div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
13208 </div><div class="inner_cell">
13209 <div class="text_cell_render border-box-sizing rendered_html">
13210 <p>We can pick out that first symbolic expression obect from the Joy stack:</p>
13215 <div class="cell border-box-sizing code_cell rendered">
13216 <div class="input">
13217 <div class="prompt input_prompt">In [5]:</div>
13218 <div class="inner_cell">
13219 <div class="input_area">
13220 <div class=" highlight hl-ipython2"><pre><span></span><span class="n">S</span><span class="p">,</span> <span class="n">E</span> <span class="o">=</span> <span class="n">viewer</span><span class="o">.</span><span class="n">history</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>
13228 <div class="cell border-box-sizing code_cell rendered">
13229 <div class="input">
13230 <div class="prompt input_prompt">In [6]:</div>
13231 <div class="inner_cell">
13232 <div class="input_area">
13233 <div class=" highlight hl-ipython2"><pre><span></span><span class="n">q</span> <span class="o">=</span> <span class="n">S</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
13234 <span class="n">q</span>
13241 <div class="output_wrapper">
13242 <div class="output">
13245 <div class="output_area">
13247 <div class="prompt output_prompt">Out[6]:</div>
13252 <div class="output_latex output_subarea output_execute_result">
13253 $$- 4 a c + b^{2}$$
13262 <div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
13263 </div><div class="inner_cell">
13264 <div class="text_cell_render border-box-sizing rendered_html">
13265 <p>The Python <code>math.sqrt()</code> function causes the "can't convert expression to float" exception but <code>sympy.sqrt()</code> does not:</p>
13270 <div class="cell border-box-sizing code_cell rendered">
13271 <div class="input">
13272 <div class="prompt input_prompt">In [7]:</div>
13273 <div class="inner_cell">
13274 <div class="input_area">
13275 <div class=" highlight hl-ipython2"><pre><span></span><span class="n">sympy</span><span class="o">.</span><span class="n">sqrt</span><span class="p">(</span><span class="n">q</span><span class="p">)</span>
13282 <div class="output_wrapper">
13283 <div class="output">
13286 <div class="output_area">
13288 <div class="prompt output_prompt">Out[7]:</div>
13293 <div class="output_latex output_subarea output_execute_result">
13294 $$\sqrt{- 4 a c + b^{2}}$$
13303 <div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
13304 </div><div class="inner_cell">
13305 <div class="text_cell_render border-box-sizing rendered_html">
13306 <h2 id="Use-sympy.sqrt">Use <code>sympy.sqrt</code><a class="anchor-link" href="#Use-sympy.sqrt">¶</a></h2><p>This is easy to fix.</p>
13311 <div class="cell border-box-sizing code_cell rendered">
13312 <div class="input">
13313 <div class="prompt input_prompt">In [8]:</div>
13314 <div class="inner_cell">
13315 <div class="input_area">
13316 <div class=" highlight hl-ipython2"><pre><span></span><span class="n">D</span><span class="p">[</span><span class="s1">'sqrt'</span><span class="p">]</span> <span class="o">=</span> <span class="n">UnaryBuiltinWrapper</span><span class="p">(</span><span class="n">sympy</span><span class="o">.</span><span class="n">sqrt</span><span class="p">)</span>
13324 <div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
13325 </div><div class="inner_cell">
13326 <div class="text_cell_render border-box-sizing rendered_html">
13327 <p>Now it works just fine.</p>
13332 <div class="cell border-box-sizing code_cell rendered">
13333 <div class="input">
13334 <div class="prompt input_prompt">In [9]:</div>
13335 <div class="inner_cell">
13336 <div class="input_area">
13337 <div class=" highlight hl-ipython2"><pre><span></span><span class="p">(</span><span class="n">root1</span><span class="p">,</span> <span class="p">(</span><span class="n">root2</span><span class="p">,</span> <span class="n">_</span><span class="p">))</span> <span class="o">=</span> <span class="n">run</span><span class="p">(</span><span class="s1">'over [[[neg] dupdip sqr 4] dipd * * - sqrt pm] dip 2 * [/] cons app2'</span><span class="p">,</span> <span class="n">stack</span><span class="p">,</span> <span class="n">D</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
13345 <div class="cell border-box-sizing code_cell rendered">
13346 <div class="input">
13347 <div class="prompt input_prompt">In [10]:</div>
13348 <div class="inner_cell">
13349 <div class="input_area">
13350 <div class=" highlight hl-ipython2"><pre><span></span><span class="n">root1</span>
13357 <div class="output_wrapper">
13358 <div class="output">
13361 <div class="output_area">
13363 <div class="prompt output_prompt">Out[10]:</div>
13368 <div class="output_latex output_subarea output_execute_result">
13369 $$\frac{1}{2 a} \left(- b - \sqrt{- 4 a c + b^{2}}\right)$$
13378 <div class="cell border-box-sizing code_cell rendered">
13379 <div class="input">
13380 <div class="prompt input_prompt">In [11]:</div>
13381 <div class="inner_cell">
13382 <div class="input_area">
13383 <div class=" highlight hl-ipython2"><pre><span></span><span class="n">root2</span>
13390 <div class="output_wrapper">
13391 <div class="output">
13394 <div class="output_area">
13396 <div class="prompt output_prompt">Out[11]:</div>
13401 <div class="output_latex output_subarea output_execute_result">
13402 $$\frac{1}{2 a} \left(- b + \sqrt{- 4 a c + b^{2}}\right)$$
13411 <div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
13412 </div><div class="inner_cell">
13413 <div class="text_cell_render border-box-sizing rendered_html">
13414 <p>At some point I will probably make an optional library of Joy wrappers for SymPy functions, and either load it automatically if SymPy installation is available or have a CLI switch or something. There's a huge amount of incredibly useful stuff and I don't see why Joy shouldn't expose another interface for using it. (As an example, the symbolic expressions can be "lambdafied" into very fast versions, i.e. a function that takes <code>a</code>, <code>b</code>, and <code>c</code> and computes the value of the root using just low-level fast code, bypassing Joy and Python. Also, Numpy, &c.)</p>
13419 <div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
13420 </div><div class="inner_cell">
13421 <div class="text_cell_render border-box-sizing rendered_html">
13422 <h2 id="Partial-Evaluation">Partial Evaluation<a class="anchor-link" href="#Partial-Evaluation">¶</a></h2><p><a href="https://en.wikipedia.org/wiki/Futamura_projection">Futamura projections</a></p>
13423 <p>Starting with the example from <a href="http://hdl.handle.net/2433/103401">Partial Computation of Programs</a>
13424 by <a href="http://fi.ftmr.info/">Yoshihiko Futamura</a> of a function to compute <code>u</code> to the <code>k</code>th power:</p>
13429 <div class="cell border-box-sizing code_cell rendered">
13430 <div class="input">
13431 <div class="prompt input_prompt">In [12]:</div>
13432 <div class="inner_cell">
13433 <div class="input_area">
13434 <div class=" highlight hl-ipython2"><pre><span></span><span class="k">def</span> <span class="nf">F</span><span class="p">(</span><span class="n">u</span><span class="p">,</span> <span class="n">k</span><span class="p">):</span>
13435 <span class="n">z</span> <span class="o">=</span> <span class="mi">1</span>
13436 <span class="k">while</span> <span class="n">k</span> <span class="o">!=</span> <span class="mi">0</span><span class="p">:</span>
13437 <span class="k">if</span> <span class="n">odd</span><span class="p">(</span><span class="n">k</span><span class="p">):</span>
13438 <span class="n">z</span> <span class="o">=</span> <span class="n">z</span> <span class="o">*</span> <span class="n">u</span>
13439 <span class="n">k</span> <span class="o">=</span> <span class="n">k</span> <span class="o">/</span> <span class="mi">2</span>
13440 <span class="n">u</span> <span class="o">=</span> <span class="n">u</span> <span class="o">*</span> <span class="n">u</span>
13441 <span class="k">return</span> <span class="n">z</span>
13449 <div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
13450 </div><div class="inner_cell">
13451 <div class="text_cell_render border-box-sizing rendered_html">
13452 <p>Partial evaluation with <code>k = 5</code>:</p>
13457 <div class="cell border-box-sizing code_cell rendered">
13458 <div class="input">
13459 <div class="prompt input_prompt">In [13]:</div>
13460 <div class="inner_cell">
13461 <div class="input_area">
13462 <div class=" highlight hl-ipython2"><pre><span></span><span class="k">def</span> <span class="nf">F5</span><span class="p">(</span><span class="n">u</span><span class="p">):</span>
13463 <span class="n">z</span> <span class="o">=</span> <span class="mi">1</span> <span class="o">*</span> <span class="n">u</span>
13464 <span class="n">u</span> <span class="o">=</span> <span class="n">u</span> <span class="o">*</span> <span class="n">u</span>
13465 <span class="n">u</span> <span class="o">=</span> <span class="n">u</span> <span class="o">*</span> <span class="n">u</span>
13466 <span class="n">z</span> <span class="o">=</span> <span class="n">z</span> <span class="o">*</span> <span class="n">u</span>
13467 <span class="k">return</span> <span class="n">z</span>
13475 <div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
13476 </div><div class="inner_cell">
13477 <div class="text_cell_render border-box-sizing rendered_html">
13478 <p>Translate <code>F(u, k)</code> to Joy</p>
13480 <pre><code>u k 1 # z = 1
13481 [pop] [Fw] while # the while statement
13482 popopd # discard u k, "return" z</code></pre>
13487 <div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
13488 </div><div class="inner_cell">
13489 <div class="text_cell_render border-box-sizing rendered_html">
13492 <pre><code>u k z [pop odd] [Ft] [] ifte # the if statement
13493 [2 //] dip # k = k / 2 floordiv
13494 [sqr] dipd # u = u * u
13496 [[sqr] dip 2 //] dip # We can merge last two lines.</code></pre>
13501 <div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
13502 </div><div class="inner_cell">
13503 <div class="text_cell_render border-box-sizing rendered_html">
13504 <p>Helper function Ft (to compute z = z * u).</p>
13506 <pre><code> u k z Ft
13511 Ft == [over] dip *</code></pre>
13516 <div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
13517 </div><div class="inner_cell">
13518 <div class="text_cell_render border-box-sizing rendered_html">
13519 <p>Putting it together:</p>
13521 <pre><code>Ft == [over] dip *
13522 Fb == [[sqr] dip 2 //] dip
13523 Fw == [pop odd] [Ft] [] ifte Fb
13524 F == 1 [pop] [Fw] while popopd</code></pre>
13529 <div class="cell border-box-sizing code_cell rendered">
13530 <div class="input">
13531 <div class="prompt input_prompt">In [14]:</div>
13532 <div class="inner_cell">
13533 <div class="input_area">
13534 <div class=" highlight hl-ipython2"><pre><span></span><span class="n">define</span><span class="p">(</span><span class="s1">'odd == 2 %'</span><span class="p">)</span>
13542 <div class="cell border-box-sizing code_cell rendered">
13543 <div class="input">
13544 <div class="prompt input_prompt">In [15]:</div>
13545 <div class="inner_cell">
13546 <div class="input_area">
13547 <div class=" highlight hl-ipython2"><pre><span></span><span class="n">define</span><span class="p">(</span><span class="s1">'Ft == [over] dip *'</span><span class="p">)</span>
13555 <div class="cell border-box-sizing code_cell rendered">
13556 <div class="input">
13557 <div class="prompt input_prompt">In [16]:</div>
13558 <div class="inner_cell">
13559 <div class="input_area">
13560 <div class=" highlight hl-ipython2"><pre><span></span><span class="n">define</span><span class="p">(</span><span class="s1">'Fb == [[sqr] dip 2 //] dip'</span><span class="p">)</span>
13568 <div class="cell border-box-sizing code_cell rendered">
13569 <div class="input">
13570 <div class="prompt input_prompt">In [17]:</div>
13571 <div class="inner_cell">
13572 <div class="input_area">
13573 <div class=" highlight hl-ipython2"><pre><span></span><span class="n">define</span><span class="p">(</span><span class="s1">'Fw == [pop odd] [Ft] [] ifte Fb'</span><span class="p">)</span>
13581 <div class="cell border-box-sizing code_cell rendered">
13582 <div class="input">
13583 <div class="prompt input_prompt">In [18]:</div>
13584 <div class="inner_cell">
13585 <div class="input_area">
13586 <div class=" highlight hl-ipython2"><pre><span></span><span class="n">define</span><span class="p">(</span><span class="s1">'F == 1 [pop] [Fw] while popopd'</span><span class="p">)</span>
13594 <div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
13595 </div><div class="inner_cell">
13596 <div class="text_cell_render border-box-sizing rendered_html">
13602 <div class="cell border-box-sizing code_cell rendered">
13603 <div class="input">
13604 <div class="prompt input_prompt">In [19]:</div>
13605 <div class="inner_cell">
13606 <div class="input_area">
13607 <div class=" highlight hl-ipython2"><pre><span></span><span class="n">J</span><span class="p">(</span><span class="s1">'2 5 F'</span><span class="p">)</span>
13614 <div class="output_wrapper">
13615 <div class="output">
13618 <div class="output_area">
13620 <div class="prompt"></div>
13623 <div class="output_subarea output_stream output_stdout output_text">
13633 <div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
13634 </div><div class="inner_cell">
13635 <div class="text_cell_render border-box-sizing rendered_html">
13636 <p>In order to elide the tests let's define special versions of <code>while</code> and <code>ifte</code>:</p>
13641 <div class="cell border-box-sizing code_cell rendered">
13642 <div class="input">
13643 <div class="prompt input_prompt">In [20]:</div>
13644 <div class="inner_cell">
13645 <div class="input_area">
13646 <div class=" highlight hl-ipython2"><pre><span></span><span class="kn">from</span> <span class="nn">joy.joy</span> <span class="kn">import</span> <span class="n">joy</span>
13647 <span class="kn">from</span> <span class="nn">joy.library</span> <span class="kn">import</span> <span class="n">FunctionWrapper</span>
13648 <span class="kn">from</span> <span class="nn">joy.parser</span> <span class="kn">import</span> <span class="n">Symbol</span>
13649 <span class="kn">from</span> <span class="nn">joy.utils.stack</span> <span class="kn">import</span> <span class="n">concat</span>
13652 <span class="n">S_while</span> <span class="o">=</span> <span class="n">Symbol</span><span class="p">(</span><span class="s1">'while'</span><span class="p">)</span>
13655 <span class="nd">@FunctionWrapper</span>
13656 <span class="k">def</span> <span class="nf">while_</span><span class="p">(</span><span class="n">S</span><span class="p">,</span> <span class="n">expression</span><span class="p">,</span> <span class="n">dictionary</span><span class="p">):</span>
13657 <span class="sd">'''[if] [body] while'''</span>
13658 <span class="p">(</span><span class="n">body</span><span class="p">,</span> <span class="p">(</span><span class="n">if_</span><span class="p">,</span> <span class="n">stack</span><span class="p">))</span> <span class="o">=</span> <span class="n">S</span>
13659 <span class="k">if</span> <span class="n">joy</span><span class="p">(</span><span class="n">stack</span><span class="p">,</span> <span class="n">if_</span><span class="p">,</span> <span class="n">dictionary</span><span class="p">)[</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">]:</span>
13660 <span class="n">expression</span> <span class="o">=</span> <span class="n">concat</span><span class="p">(</span><span class="n">body</span><span class="p">,</span> <span class="p">(</span><span class="n">if_</span><span class="p">,</span> <span class="p">(</span><span class="n">body</span><span class="p">,</span> <span class="p">(</span><span class="n">S_while</span><span class="p">,</span> <span class="n">expression</span><span class="p">))))</span>
13661 <span class="k">return</span> <span class="n">stack</span><span class="p">,</span> <span class="n">expression</span><span class="p">,</span> <span class="n">dictionary</span>
13664 <span class="nd">@FunctionWrapper</span>
13665 <span class="k">def</span> <span class="nf">ifte</span><span class="p">(</span><span class="n">stack</span><span class="p">,</span> <span class="n">expression</span><span class="p">,</span> <span class="n">dictionary</span><span class="p">):</span>
13666 <span class="sd">'''[if] [then] [else] ifte'''</span>
13667 <span class="p">(</span><span class="n">else_</span><span class="p">,</span> <span class="p">(</span><span class="n">then</span><span class="p">,</span> <span class="p">(</span><span class="n">if_</span><span class="p">,</span> <span class="n">stack</span><span class="p">)))</span> <span class="o">=</span> <span class="n">stack</span>
13668 <span class="n">if_res</span> <span class="o">=</span> <span class="n">joy</span><span class="p">(</span><span class="n">stack</span><span class="p">,</span> <span class="n">if_</span><span class="p">,</span> <span class="n">dictionary</span><span class="p">)[</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span>
13669 <span class="n">quote</span> <span class="o">=</span> <span class="n">then</span> <span class="k">if</span> <span class="n">if_res</span> <span class="k">else</span> <span class="n">else_</span>
13670 <span class="n">expression</span> <span class="o">=</span> <span class="n">concat</span><span class="p">(</span><span class="n">quote</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span>
13671 <span class="k">return</span> <span class="p">(</span><span class="n">stack</span><span class="p">,</span> <span class="n">expression</span><span class="p">,</span> <span class="n">dictionary</span><span class="p">)</span>
13674 <span class="n">D</span><span class="p">[</span><span class="s1">'ifte'</span><span class="p">]</span> <span class="o">=</span> <span class="n">ifte</span>
13675 <span class="n">D</span><span class="p">[</span><span class="s1">'while'</span><span class="p">]</span> <span class="o">=</span> <span class="n">while_</span>
13683 <div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
13684 </div><div class="inner_cell">
13685 <div class="text_cell_render border-box-sizing rendered_html">
13686 <p>And with a SymPy symbol for the <code>u</code> argument:</p>
13691 <div class="cell border-box-sizing code_cell rendered">
13692 <div class="input">
13693 <div class="prompt input_prompt">In [21]:</div>
13694 <div class="inner_cell">
13695 <div class="input_area">
13696 <div class=" highlight hl-ipython2"><pre><span></span><span class="n">stack</span> <span class="o">=</span> <span class="n">list_to_stack</span><span class="p">([</span><span class="mi">5</span><span class="p">,</span> <span class="n">sympy</span><span class="o">.</span><span class="n">symbols</span><span class="p">(</span><span class="s1">'u'</span><span class="p">)])</span>
13697 <span class="n">viewer</span> <span class="o">=</span> <span class="n">TracePrinter</span><span class="p">()</span>
13698 <span class="k">try</span><span class="p">:</span>
13699 <span class="p">(</span><span class="n">result</span><span class="p">,</span> <span class="n">_</span><span class="p">)</span> <span class="o">=</span> <span class="n">run</span><span class="p">(</span><span class="s1">'F'</span><span class="p">,</span> <span class="n">stack</span><span class="p">,</span> <span class="n">D</span><span class="p">,</span> <span class="n">viewer</span><span class="o">.</span><span class="n">viewer</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
13700 <span class="k">except</span> <span class="ne">Exception</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span>
13701 <span class="nb">print</span> <span class="n">e</span>
13702 <span class="n">viewer</span><span class="o">.</span><span class="n">print_</span><span class="p">()</span>
13709 <div class="output_wrapper">
13710 <div class="output">
13713 <div class="output_area">
13715 <div class="prompt"></div>
13718 <div class="output_subarea output_stream output_stdout output_text">
13720 u 5 . 1 [pop] [Fw] while popopd
13721 u 5 1 . [pop] [Fw] while popopd
13722 u 5 1 [pop] . [Fw] while popopd
13723 u 5 1 [pop] [Fw] . while popopd
13724 u 5 1 . Fw [pop] [Fw] while popopd
13725 u 5 1 . [pop odd] [Ft] [] ifte Fb [pop] [Fw] while popopd
13726 u 5 1 [pop odd] . [Ft] [] ifte Fb [pop] [Fw] while popopd
13727 u 5 1 [pop odd] [Ft] . [] ifte Fb [pop] [Fw] while popopd
13728 u 5 1 [pop odd] [Ft] [] . ifte Fb [pop] [Fw] while popopd
13729 u 5 1 . Ft Fb [pop] [Fw] while popopd
13730 u 5 1 . [over] dip * Fb [pop] [Fw] while popopd
13731 u 5 1 [over] . dip * Fb [pop] [Fw] while popopd
13732 u 5 . over 1 * Fb [pop] [Fw] while popopd
13733 u 5 u . 1 * Fb [pop] [Fw] while popopd
13734 u 5 u 1 . * Fb [pop] [Fw] while popopd
13735 u 5 u . Fb [pop] [Fw] while popopd
13736 u 5 u . [[sqr] dip 2 //] dip [pop] [Fw] while popopd
13737 u 5 u [[sqr] dip 2 //] . dip [pop] [Fw] while popopd
13738 u 5 . [sqr] dip 2 // u [pop] [Fw] while popopd
13739 u 5 [sqr] . dip 2 // u [pop] [Fw] while popopd
13740 u . sqr 5 2 // u [pop] [Fw] while popopd
13741 u . dup mul 5 2 // u [pop] [Fw] while popopd
13742 u u . mul 5 2 // u [pop] [Fw] while popopd
13743 u**2 . 5 2 // u [pop] [Fw] while popopd
13744 u**2 5 . 2 // u [pop] [Fw] while popopd
13745 u**2 5 2 . // u [pop] [Fw] while popopd
13746 u**2 2 . u [pop] [Fw] while popopd
13747 u**2 2 u . [pop] [Fw] while popopd
13748 u**2 2 u [pop] . [Fw] while popopd
13749 u**2 2 u [pop] [Fw] . while popopd
13750 u**2 2 u . Fw [pop] [Fw] while popopd
13751 u**2 2 u . [pop odd] [Ft] [] ifte Fb [pop] [Fw] while popopd
13752 u**2 2 u [pop odd] . [Ft] [] ifte Fb [pop] [Fw] while popopd
13753 u**2 2 u [pop odd] [Ft] . [] ifte Fb [pop] [Fw] while popopd
13754 u**2 2 u [pop odd] [Ft] [] . ifte Fb [pop] [Fw] while popopd
13755 u**2 2 u . Fb [pop] [Fw] while popopd
13756 u**2 2 u . [[sqr] dip 2 //] dip [pop] [Fw] while popopd
13757 u**2 2 u [[sqr] dip 2 //] . dip [pop] [Fw] while popopd
13758 u**2 2 . [sqr] dip 2 // u [pop] [Fw] while popopd
13759 u**2 2 [sqr] . dip 2 // u [pop] [Fw] while popopd
13760 u**2 . sqr 2 2 // u [pop] [Fw] while popopd
13761 u**2 . dup mul 2 2 // u [pop] [Fw] while popopd
13762 u**2 u**2 . mul 2 2 // u [pop] [Fw] while popopd
13763 u**4 . 2 2 // u [pop] [Fw] while popopd
13764 u**4 2 . 2 // u [pop] [Fw] while popopd
13765 u**4 2 2 . // u [pop] [Fw] while popopd
13766 u**4 1 . u [pop] [Fw] while popopd
13767 u**4 1 u . [pop] [Fw] while popopd
13768 u**4 1 u [pop] . [Fw] while popopd
13769 u**4 1 u [pop] [Fw] . while popopd
13770 u**4 1 u . Fw [pop] [Fw] while popopd
13771 u**4 1 u . [pop odd] [Ft] [] ifte Fb [pop] [Fw] while popopd
13772 u**4 1 u [pop odd] . [Ft] [] ifte Fb [pop] [Fw] while popopd
13773 u**4 1 u [pop odd] [Ft] . [] ifte Fb [pop] [Fw] while popopd
13774 u**4 1 u [pop odd] [Ft] [] . ifte Fb [pop] [Fw] while popopd
13775 u**4 1 u . Ft Fb [pop] [Fw] while popopd
13776 u**4 1 u . [over] dip * Fb [pop] [Fw] while popopd
13777 u**4 1 u [over] . dip * Fb [pop] [Fw] while popopd
13778 u**4 1 . over u * Fb [pop] [Fw] while popopd
13779 u**4 1 u**4 . u * Fb [pop] [Fw] while popopd
13780 u**4 1 u**4 u . * Fb [pop] [Fw] while popopd
13781 u**4 1 u**5 . Fb [pop] [Fw] while popopd
13782 u**4 1 u**5 . [[sqr] dip 2 //] dip [pop] [Fw] while popopd
13783 u**4 1 u**5 [[sqr] dip 2 //] . dip [pop] [Fw] while popopd
13784 u**4 1 . [sqr] dip 2 // u**5 [pop] [Fw] while popopd
13785 u**4 1 [sqr] . dip 2 // u**5 [pop] [Fw] while popopd
13786 u**4 . sqr 1 2 // u**5 [pop] [Fw] while popopd
13787 u**4 . dup mul 1 2 // u**5 [pop] [Fw] while popopd
13788 u**4 u**4 . mul 1 2 // u**5 [pop] [Fw] while popopd
13789 u**8 . 1 2 // u**5 [pop] [Fw] while popopd
13790 u**8 1 . 2 // u**5 [pop] [Fw] while popopd
13791 u**8 1 2 . // u**5 [pop] [Fw] while popopd
13792 u**8 0 . u**5 [pop] [Fw] while popopd
13793 u**8 0 u**5 . [pop] [Fw] while popopd
13794 u**8 0 u**5 [pop] . [Fw] while popopd
13795 u**8 0 u**5 [pop] [Fw] . while popopd
13796 u**8 0 u**5 . popopd
13806 <div class="cell border-box-sizing code_cell rendered">
13807 <div class="input">
13808 <div class="prompt input_prompt">In [22]:</div>
13809 <div class="inner_cell">
13810 <div class="input_area">
13811 <div class=" highlight hl-ipython2"><pre><span></span><span class="n">result</span>
13818 <div class="output_wrapper">
13819 <div class="output">
13822 <div class="output_area">
13824 <div class="prompt output_prompt">Out[22]:</div>
13829 <div class="output_latex output_subarea output_execute_result">
13839 <div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
13840 </div><div class="inner_cell">
13841 <div class="text_cell_render border-box-sizing rendered_html">
13842 <p>Let's try partial evaluation by hand and use a "stronger" thunk.</p>
13843 <p>Caret underscoring indicates terms that form thunks. When an arg is unavailable for a computation we just postpone it until the arg becomes available and in the meantime treat the pending computation as one unit.</p>
13845 <pre><code> u 5 . F
13846 u 5 . 1 [pop] [Fw] while popopd
13847 u 5 1 . [pop] [Fw] while popopd
13848 u 5 1 [pop] . [Fw] while popopd
13849 u 5 1 [pop] [Fw] . while popopd
13850 u 5 1 . Fw [pop] [Fw] while popopd
13851 u 5 1 . [pop odd] [Ft] [] ifte Fb [pop] [Fw] while popopd
13852 u 5 1 [pop odd] . [Ft] [] ifte Fb [pop] [Fw] while popopd
13853 u 5 1 [pop odd] [Ft] . [] ifte Fb [pop] [Fw] while popopd
13854 u 5 1 [pop odd] [Ft] [] . ifte Fb [pop] [Fw] while popopd
13855 u 5 1 . Ft Fb [pop] [Fw] while popopd
13856 u 5 1 . [over] dip * Fb [pop] [Fw] while popopd
13857 u 5 1 [over] . dip * Fb [pop] [Fw] while popopd
13858 u 5 . over 1 * Fb [pop] [Fw] while popopd
13859 u 5 u . 1 * Fb [pop] [Fw] while popopd
13860 u 5 u 1 . * Fb [pop] [Fw] while popopd
13861 u 5 u . Fb [pop] [Fw] while popopd
13862 u 5 u . [[sqr] dip 2 //] dip [pop] [Fw] while popopd
13863 u 5 u [[sqr] dip 2 //] . dip [pop] [Fw] while popopd
13864 u 5 . [sqr] dip 2 // u [pop] [Fw] while popopd
13865 u 5 [sqr] . dip 2 // u [pop] [Fw] while popopd
13866 u . sqr 5 2 // u [pop] [Fw] while popopd
13867 u . dup mul 5 2 // u [pop] [Fw] while popopd
13868 u dup * . 5 2 // u [pop] [Fw] while popopd
13869 ^^^^^^^</code></pre>
13874 <div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
13875 </div><div class="inner_cell">
13876 <div class="text_cell_render border-box-sizing rendered_html">
13878 <pre><code> u dup * 2 u [pop] [Fw] . while popopd
13879 u dup * 2 u . Fw [pop] [Fw] while popopd
13880 u dup * 2 u . [pop odd] [Ft] [] ifte Fb [pop] [Fw] while popopd
13881 u dup * 2 u [pop odd] . [Ft] [] ifte Fb [pop] [Fw] while popopd
13882 u dup * 2 u [pop odd] [Ft] . [] ifte Fb [pop] [Fw] while popopd
13883 u dup * 2 u [pop odd] [Ft] [] . ifte Fb [pop] [Fw] while popopd
13884 u dup * 2 u . Fb [pop] [Fw] while popopd
13885 u dup * 2 u . [[sqr] dip 2 //] dip [pop] [Fw] while popopd
13886 u dup * 2 u [[sqr] dip 2 //] . dip [pop] [Fw] while popopd
13887 u dup * 2 . [sqr] dip 2 // u [pop] [Fw] while popopd
13888 u dup * 2 [sqr] . dip 2 // u [pop] [Fw] while popopd
13889 u dup * . sqr 2 2 // u [pop] [Fw] while popopd
13890 u dup * . dup mul 2 2 // u [pop] [Fw] while popopd
13891 u dup * dup * . 2 2 // u [pop] [Fw] while popopd
13892 ^^^^^^^^^^^^^</code></pre>
13897 <div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
13898 </div><div class="inner_cell">
13899 <div class="text_cell_render border-box-sizing rendered_html">
13900 <p>w/ <code>K == u dup * dup *</code></p>
13902 <pre><code> K 1 u [pop] [Fw] . while popopd
13903 K 1 u . Fw [pop] [Fw] while popopd
13904 K 1 u . [pop odd] [Ft] [] ifte Fb [pop] [Fw] while popopd
13905 K 1 u [pop odd] . [Ft] [] ifte Fb [pop] [Fw] while popopd
13906 K 1 u [pop odd] [Ft] . [] ifte Fb [pop] [Fw] while popopd
13907 K 1 u [pop odd] [Ft] [] . ifte Fb [pop] [Fw] while popopd
13908 K 1 u . Ft Fb [pop] [Fw] while popopd
13909 K 1 u . [over] dip * Fb [pop] [Fw] while popopd
13910 K 1 u [over] . dip * Fb [pop] [Fw] while popopd
13911 K 1 . over u * Fb [pop] [Fw] while popopd
13912 K 1 K . u * Fb [pop] [Fw] while popopd
13913 K 1 K u . * Fb [pop] [Fw] while popopd
13914 K 1 K u * . Fb [pop] [Fw] while popopd
13920 <div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
13921 </div><div class="inner_cell">
13922 <div class="text_cell_render border-box-sizing rendered_html">
13923 <p>w/ <code>L == K u *</code></p>
13925 <pre><code> K 1 L . Fb [pop] [Fw] while popopd
13926 K 1 L . [[sqr] dip 2 //] dip [pop] [Fw] while popopd
13927 K 1 L [[sqr] dip 2 //] . dip [pop] [Fw] while popopd
13928 K 1 . [sqr] dip 2 // L [pop] [Fw] while popopd
13929 K 1 [sqr] . dip 2 // L [pop] [Fw] while popopd
13930 K . sqr 1 2 // L [pop] [Fw] while popopd
13931 K . dup mul 1 2 // L [pop] [Fw] while popopd
13932 K K . mul 1 2 // L [pop] [Fw] while popopd
13933 K K * . 1 2 // L [pop] [Fw] while popopd
13935 K K * . 1 2 // L [pop] [Fw] while popopd
13936 K K * 1 . 2 // L [pop] [Fw] while popopd
13937 K K * 1 2 . // L [pop] [Fw] while popopd
13938 K K * 0 . L [pop] [Fw] while popopd
13939 K K * 0 L . [pop] [Fw] while popopd
13940 K K * 0 L [pop] . [Fw] while popopd
13941 K K * 0 L [pop] [Fw] . while popopd
13949 <div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
13950 </div><div class="inner_cell">
13951 <div class="text_cell_render border-box-sizing rendered_html">
13954 <pre><code>K == u dup * dup *
13958 <p>Our result "thunk" would be:</p>
13960 <pre><code>u dup * dup * u *
13963 <p>Mechanically, you could do:</p>
13965 <pre><code>u dup * dup * u *
13966 u u [dup * dup *] dip *
13967 u dup [dup * dup *] dip *
13970 F5 == dup [dup * dup *] dip *
13973 <p>But we can swap the two arguments to the final <code>*</code> to get all mentions of <code>u</code> to the left:</p>
13975 <pre><code>u u dup * dup * *
13979 <p>Then de-duplicate "u":</p>
13981 <pre><code>u dup dup * dup * *
13985 <p>To arrive at a startlingly elegant form for F5:</p>
13987 <pre><code>F5 == dup dup * dup * *</code></pre>
13992 <div class="cell border-box-sizing code_cell rendered">
13993 <div class="input">
13994 <div class="prompt input_prompt">In [23]:</div>
13995 <div class="inner_cell">
13996 <div class="input_area">
13997 <div class=" highlight hl-ipython2"><pre><span></span><span class="n">stack</span> <span class="o">=</span> <span class="n">list_to_stack</span><span class="p">([</span><span class="n">sympy</span><span class="o">.</span><span class="n">symbols</span><span class="p">(</span><span class="s1">'u'</span><span class="p">)])</span>
13998 <span class="n">viewer</span> <span class="o">=</span> <span class="n">TracePrinter</span><span class="p">()</span>
13999 <span class="k">try</span><span class="p">:</span>
14000 <span class="p">(</span><span class="n">result</span><span class="p">,</span> <span class="n">_</span><span class="p">)</span> <span class="o">=</span> <span class="n">run</span><span class="p">(</span><span class="s1">'dup dup * dup * *'</span><span class="p">,</span> <span class="n">stack</span><span class="p">,</span> <span class="n">D</span><span class="p">,</span> <span class="n">viewer</span><span class="o">.</span><span class="n">viewer</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
14001 <span class="k">except</span> <span class="ne">Exception</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span>
14002 <span class="nb">print</span> <span class="n">e</span>
14003 <span class="n">viewer</span><span class="o">.</span><span class="n">print_</span><span class="p">()</span>
14004 <span class="n">result</span>
14011 <div class="output_wrapper">
14012 <div class="output">
14015 <div class="output_area">
14017 <div class="prompt"></div>
14020 <div class="output_subarea output_stream output_stdout output_text">
14021 <pre> u . dup dup * dup * *
14022 u u . dup * dup * *
14032 <div class="output_area">
14034 <div class="prompt output_prompt">Out[23]:</div>
14039 <div class="output_latex output_subarea output_execute_result">
14049 <div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
14050 </div><div class="inner_cell">
14051 <div class="text_cell_render border-box-sizing rendered_html">
14052 <p>I'm not sure how to implement these kinds of thunks. I think you have to have support in the interpreter, or you have to modify all of the functions like <code>dup</code> to check for thunks in their inputs.</p>
14057 <div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
14058 </div><div class="inner_cell">
14059 <div class="text_cell_render border-box-sizing rendered_html">
14060 <p>Working on the compiler, from this:</p>
14062 <pre><code>dup dup * dup * *
14065 <p>We can already generate:</p>
14067 <pre><code>---------------------------------
14068 (a0, stack) = stack
14072 stack = (a3, stack)
14073 ---------------------------------
14076 <p>This is pretty old stuff... (E.g. from 1999, M. Anton Ertl <a href="http://www.complang.tuwien.ac.at/projects/rafts.html">Compilation of Stack-Based Languages</a> he goes a lot further for Forth.)</p>
14081 <div class="cell border-box-sizing code_cell rendered">
14082 <div class="input">
14083 <div class="prompt input_prompt">In [ ]:</div>
14084 <div class="inner_cell">
14085 <div class="input_area">
14086 <div class=" highlight hl-ipython2"><pre><span></span>
14094 <div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
14095 </div><div class="inner_cell">
14096 <div class="text_cell_render border-box-sizing rendered_html">
14097 <h2 id=""A-Transformation-Based-Approach-to-Semantics-Directed-Code-Generation"">"A Transformation Based Approach to Semantics-Directed Code Generation"<a class="anchor-link" href="#"A-Transformation-Based-Approach-to-Semantics-Directed-Code-Generation"">¶</a></h2><p>by Arthur Nunes-Harwitt</p>
14098 <p><a href="https://dl.acm.org/citation.cfm?doid=2635648.2635652">https://dl.acm.org/citation.cfm?doid=2635648.2635652</a></p>
14103 <div class="cell border-box-sizing code_cell rendered">
14104 <div class="input">
14105 <div class="prompt input_prompt">In [24]:</div>
14106 <div class="inner_cell">
14107 <div class="input_area">
14108 <div class=" highlight hl-ipython2"><pre><span></span><span class="k">def</span> <span class="nf">m</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">):</span> <span class="k">return</span> <span class="n">x</span> <span class="o">*</span> <span class="n">y</span>
14110 <span class="nb">print</span> <span class="n">m</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">)</span>
14117 <div class="output_wrapper">
14118 <div class="output">
14121 <div class="output_area">
14123 <div class="prompt"></div>
14126 <div class="output_subarea output_stream output_stdout output_text">
14136 <div class="cell border-box-sizing code_cell rendered">
14137 <div class="input">
14138 <div class="prompt input_prompt">In [25]:</div>
14139 <div class="inner_cell">
14140 <div class="input_area">
14141 <div class=" highlight hl-ipython2"><pre><span></span><span class="k">def</span> <span class="nf">m</span><span class="p">(</span><span class="n">x</span><span class="p">):</span> <span class="k">return</span> <span class="k">lambda</span> <span class="n">y</span><span class="p">:</span> <span class="n">x</span> <span class="o">*</span> <span class="n">y</span>
14143 <span class="nb">print</span> <span class="n">m</span><span class="p">(</span><span class="mi">2</span><span class="p">)(</span><span class="mi">3</span><span class="p">)</span>
14150 <div class="output_wrapper">
14151 <div class="output">
14154 <div class="output_area">
14156 <div class="prompt"></div>
14159 <div class="output_subarea output_stream output_stdout output_text">
14169 <div class="cell border-box-sizing code_cell rendered">
14170 <div class="input">
14171 <div class="prompt input_prompt">In [26]:</div>
14172 <div class="inner_cell">
14173 <div class="input_area">
14174 <div class=" highlight hl-ipython2"><pre><span></span><span class="k">def</span> <span class="nf">m</span><span class="p">(</span><span class="n">x</span><span class="p">):</span> <span class="k">return</span> <span class="s2">"lambda y: </span><span class="si">%(x)s</span><span class="s2"> * y"</span> <span class="o">%</span> <span class="nb">locals</span><span class="p">()</span>
14176 <span class="nb">print</span> <span class="n">m</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span>
14177 <span class="nb">print</span> <span class="nb">eval</span><span class="p">(</span><span class="n">m</span><span class="p">(</span><span class="mi">2</span><span class="p">))(</span><span class="mi">3</span><span class="p">)</span>
14184 <div class="output_wrapper">
14185 <div class="output">
14188 <div class="output_area">
14190 <div class="prompt"></div>
14193 <div class="output_subarea output_stream output_stdout output_text">
14194 <pre>lambda y: 2 * y
14204 <div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
14205 </div><div class="inner_cell">
14206 <div class="text_cell_render border-box-sizing rendered_html">
14209 <pre><code>m == [*] cons
14220 <div class="cell border-box-sizing code_cell rendered">
14221 <div class="input">
14222 <div class="prompt input_prompt">In [27]:</div>
14223 <div class="inner_cell">
14224 <div class="input_area">
14225 <div class=" highlight hl-ipython2"><pre><span></span><span class="k">def</span> <span class="nf">p</span><span class="p">(</span><span class="n">n</span><span class="p">,</span> <span class="n">b</span><span class="p">):</span> <span class="c1"># original</span>
14226 <span class="k">return</span> <span class="mi">1</span> <span class="k">if</span> <span class="n">n</span> <span class="o">==</span> <span class="mi">0</span> <span class="k">else</span> <span class="n">b</span> <span class="o">*</span> <span class="n">p</span><span class="p">(</span><span class="n">n</span> <span class="o">-</span> <span class="mi">1</span><span class="p">,</span> <span class="n">b</span><span class="p">)</span>
14229 <span class="k">def</span> <span class="nf">p</span><span class="p">(</span><span class="n">n</span><span class="p">):</span> <span class="c1"># curried</span>
14230 <span class="k">return</span> <span class="k">lambda</span> <span class="n">b</span><span class="p">:</span> <span class="mi">1</span> <span class="k">if</span> <span class="n">n</span> <span class="o">==</span> <span class="mi">0</span> <span class="k">else</span> <span class="n">b</span> <span class="o">*</span> <span class="n">p</span><span class="p">(</span><span class="n">n</span> <span class="o">-</span> <span class="mi">1</span><span class="p">,</span> <span class="n">b</span><span class="p">)</span>
14233 <span class="k">def</span> <span class="nf">p</span><span class="p">(</span><span class="n">n</span><span class="p">):</span> <span class="c1"># quoted</span>
14234 <span class="k">return</span> <span class="s2">"lambda b: 1 if </span><span class="si">%(n)s</span><span class="s2"> == 0 else b * p(</span><span class="si">%(n)s</span><span class="s2"> - 1, b)"</span> <span class="o">%</span> <span class="nb">locals</span><span class="p">()</span>
14237 <span class="nb">print</span> <span class="n">p</span><span class="p">(</span><span class="mi">3</span><span class="p">)</span>
14244 <div class="output_wrapper">
14245 <div class="output">
14248 <div class="output_area">
14250 <div class="prompt"></div>
14253 <div class="output_subarea output_stream output_stdout output_text">
14254 <pre>lambda b: 1 if 3 == 0 else b * p(3 - 1, b)
14263 <div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
14264 </div><div class="inner_cell">
14265 <div class="text_cell_render border-box-sizing rendered_html">
14268 <pre><code>p == [0 =] [popop 1] [-- over] [dip *] genrec
14271 b n [0 =] [popop 1] [-- over [p] dip *]
14273 b n -- over [p] dip *
14274 b n-1 over [p] dip *
14276 b n-1 p b *</code></pre>
14281 <div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
14282 </div><div class="inner_cell">
14283 <div class="text_cell_render border-box-sizing rendered_html">
14284 <p>curried, quoted</p>
14287 ---------------------------------------------
14288 [[n 0 =] [pop 1] [dup n --] [*] genrec]</code></pre>
14293 <div class="cell border-box-sizing code_cell rendered">
14294 <div class="input">
14295 <div class="prompt input_prompt">In [28]:</div>
14296 <div class="inner_cell">
14297 <div class="input_area">
14298 <div class=" highlight hl-ipython2"><pre><span></span><span class="k">def</span> <span class="nf">p</span><span class="p">(</span><span class="n">n</span><span class="p">):</span> <span class="c1"># lambda lowered</span>
14299 <span class="k">return</span> <span class="p">(</span>
14300 <span class="k">lambda</span> <span class="n">b</span><span class="p">:</span> <span class="mi">1</span>
14301 <span class="k">if</span> <span class="n">n</span> <span class="o">==</span> <span class="mi">0</span> <span class="k">else</span>
14302 <span class="k">lambda</span> <span class="n">b</span><span class="p">:</span> <span class="n">b</span> <span class="o">*</span> <span class="n">p</span><span class="p">(</span><span class="n">n</span> <span class="o">-</span> <span class="mi">1</span><span class="p">,</span> <span class="n">b</span><span class="p">)</span>
14303 <span class="p">)</span>
14306 <span class="k">def</span> <span class="nf">p</span><span class="p">(</span><span class="n">n</span><span class="p">):</span> <span class="c1"># lambda lowered quoted</span>
14307 <span class="k">return</span> <span class="p">(</span>
14308 <span class="s2">"lambda b: 1"</span>
14309 <span class="k">if</span> <span class="n">n</span> <span class="o">==</span> <span class="mi">0</span> <span class="k">else</span>
14310 <span class="s2">"lambda b: b * p(</span><span class="si">%(n)s</span><span class="s2"> - 1, b)"</span> <span class="o">%</span> <span class="nb">locals</span><span class="p">()</span>
14311 <span class="p">)</span>
14313 <span class="nb">print</span> <span class="n">p</span><span class="p">(</span><span class="mi">3</span><span class="p">)</span>
14320 <div class="output_wrapper">
14321 <div class="output">
14324 <div class="output_area">
14326 <div class="prompt"></div>
14329 <div class="output_subarea output_stream output_stdout output_text">
14330 <pre>lambda b: b * p(3 - 1, b)
14339 <div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
14340 </div><div class="inner_cell">
14341 <div class="text_cell_render border-box-sizing rendered_html">
14343 <pre><code>p == [0 =] [[pop 1]] [ [-- [dup] dip p *] cons ]ifte
14347 3 [-- [dup] dip p *] cons
14348 [3 -- [dup] dip p *]</code></pre>
14353 <div class="cell border-box-sizing code_cell rendered">
14354 <div class="input">
14355 <div class="prompt input_prompt">In [29]:</div>
14356 <div class="inner_cell">
14357 <div class="input_area">
14358 <div class=" highlight hl-ipython2"><pre><span></span><span class="k">def</span> <span class="nf">p</span><span class="p">(</span><span class="n">n</span><span class="p">):</span> <span class="c1"># expression lifted</span>
14359 <span class="k">if</span> <span class="n">n</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
14360 <span class="k">return</span> <span class="k">lambda</span> <span class="n">b</span><span class="p">:</span> <span class="mi">1</span>
14361 <span class="n">f</span> <span class="o">=</span> <span class="n">p</span><span class="p">(</span><span class="n">n</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
14362 <span class="k">return</span> <span class="k">lambda</span> <span class="n">b</span><span class="p">:</span> <span class="n">b</span> <span class="o">*</span> <span class="n">f</span><span class="p">(</span><span class="n">b</span><span class="p">)</span>
14365 <span class="nb">print</span> <span class="n">p</span><span class="p">(</span><span class="mi">3</span><span class="p">)(</span><span class="mi">2</span><span class="p">)</span>
14372 <div class="output_wrapper">
14373 <div class="output">
14376 <div class="output_area">
14378 <div class="prompt"></div>
14381 <div class="output_subarea output_stream output_stdout output_text">
14391 <div class="cell border-box-sizing code_cell rendered">
14392 <div class="input">
14393 <div class="prompt input_prompt">In [30]:</div>
14394 <div class="inner_cell">
14395 <div class="input_area">
14396 <div class=" highlight hl-ipython2"><pre><span></span><span class="k">def</span> <span class="nf">p</span><span class="p">(</span><span class="n">n</span><span class="p">):</span> <span class="c1"># quoted</span>
14397 <span class="k">if</span> <span class="n">n</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
14398 <span class="k">return</span> <span class="s2">"lambda b: 1"</span>
14399 <span class="n">f</span> <span class="o">=</span> <span class="n">p</span><span class="p">(</span><span class="n">n</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
14400 <span class="k">return</span> <span class="s2">"lambda b: b * (</span><span class="si">%(f)s</span><span class="s2">)(b)"</span> <span class="o">%</span> <span class="nb">locals</span><span class="p">()</span>
14402 <span class="nb">print</span> <span class="n">p</span><span class="p">(</span><span class="mi">3</span><span class="p">)</span>
14403 <span class="nb">print</span> <span class="nb">eval</span><span class="p">(</span><span class="n">p</span><span class="p">(</span><span class="mi">3</span><span class="p">))(</span><span class="mi">2</span><span class="p">)</span>
14410 <div class="output_wrapper">
14411 <div class="output">
14414 <div class="output_area">
14416 <div class="prompt"></div>
14419 <div class="output_subarea output_stream output_stdout output_text">
14420 <pre>lambda b: b * (lambda b: b * (lambda b: b * (lambda b: 1)(b))(b))(b)
14430 <div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
14431 </div><div class="inner_cell">
14432 <div class="text_cell_render border-box-sizing rendered_html">
14434 <pre><code>p == [0 =] [pop [pop 1]] [-- p [dupdip *] cons] ifte
14438 3 -- p [dupdip *] cons
14439 2 p [dupdip *] cons
14440 2 -- p [dupdip *] cons [dupdip *] cons
14441 1 p [dupdip *] cons [dupdip *] cons
14442 1 -- p [dupdip *] cons [dupdip *] cons [dupdip *] cons
14443 0 p [dupdip *] cons [dupdip *] cons [dupdip *] cons
14444 0 pop [pop 1] [dupdip *] cons [dupdip *] cons [dupdip *] cons
14445 [pop 1] [dupdip *] cons [dupdip *] cons [dupdip *] cons
14447 [[[[pop 1] dupdip *] dupdip *] dupdip *]
14450 2 [[[[pop 1] dupdip *] dupdip *] dupdip *] i
14451 2 [[[pop 1] dupdip *] dupdip *] dupdip *
14452 2 [[pop 1] dupdip *] dupdip * 2 *
14453 2 [pop 1] dupdip * 2 * 2 *
14454 2 pop 1 2 * 2 * 2 *
14459 p == [0 =] [pop [pop 1]] [-- p [dupdip *] cons] ifte
14460 p == [0 =] [pop [pop 1]] [-- [p] i [dupdip *] cons] ifte
14461 p == [0 =] [pop [pop 1]] [--] [i [dupdip *] cons] genrec</code></pre>
14466 <div class="cell border-box-sizing code_cell rendered">
14467 <div class="input">
14468 <div class="prompt input_prompt">In [31]:</div>
14469 <div class="inner_cell">
14470 <div class="input_area">
14471 <div class=" highlight hl-ipython2"><pre><span></span><span class="n">define</span><span class="p">(</span><span class="s1">'p == [0 =] [pop [pop 1]] [--] [i [dupdip *] cons] genrec'</span><span class="p">)</span>
14479 <div class="cell border-box-sizing code_cell rendered">
14480 <div class="input">
14481 <div class="prompt input_prompt">In [32]:</div>
14482 <div class="inner_cell">
14483 <div class="input_area">
14484 <div class=" highlight hl-ipython2"><pre><span></span><span class="n">J</span><span class="p">(</span><span class="s1">'3 p'</span><span class="p">)</span>
14491 <div class="output_wrapper">
14492 <div class="output">
14495 <div class="output_area">
14497 <div class="prompt"></div>
14500 <div class="output_subarea output_stream output_stdout output_text">
14501 <pre>[[[[pop 1] dupdip *] dupdip *] dupdip *]
14510 <div class="cell border-box-sizing code_cell rendered">
14511 <div class="input">
14512 <div class="prompt input_prompt">In [33]:</div>
14513 <div class="inner_cell">
14514 <div class="input_area">
14515 <div class=" highlight hl-ipython2"><pre><span></span><span class="n">V</span><span class="p">(</span><span class="s1">'2 [[[[pop 1] dupdip *] dupdip *] dupdip *] i'</span><span class="p">)</span>
14522 <div class="output_wrapper">
14523 <div class="output">
14526 <div class="output_area">
14528 <div class="prompt"></div>
14531 <div class="output_subarea output_stream output_stdout output_text">
14532 <pre> . 2 [[[[pop 1] dupdip *] dupdip *] dupdip *] i
14533 2 . [[[[pop 1] dupdip *] dupdip *] dupdip *] i
14534 2 [[[[pop 1] dupdip *] dupdip *] dupdip *] . i
14535 2 . [[[pop 1] dupdip *] dupdip *] dupdip *
14536 2 [[[pop 1] dupdip *] dupdip *] . dupdip *
14537 2 . [[pop 1] dupdip *] dupdip * 2 *
14538 2 [[pop 1] dupdip *] . dupdip * 2 *
14539 2 . [pop 1] dupdip * 2 * 2 *
14540 2 [pop 1] . dupdip * 2 * 2 *
14541 2 . pop 1 2 * 2 * 2 *
14558 <div class="cell border-box-sizing code_cell rendered">
14559 <div class="input">
14560 <div class="prompt input_prompt">In [ ]:</div>
14561 <div class="inner_cell">
14562 <div class="input_area">
14563 <div class=" highlight hl-ipython2"><pre><span></span><span class="n">stack</span> <span class="o">=</span> <span class="n">list_to_stack</span><span class="p">([</span><span class="n">sympy</span><span class="o">.</span><span class="n">symbols</span><span class="p">(</span><span class="s1">'u'</span><span class="p">)])</span>
14564 <span class="p">(</span><span class="n">result</span><span class="p">,</span> <span class="n">s</span><span class="p">)</span> <span class="o">=</span> <span class="n">run</span><span class="p">(</span><span class="s1">'p i'</span><span class="p">,</span> <span class="n">stack</span><span class="p">,</span> <span class="n">D</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
14565 <span class="n">result</span>
14573 <div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
14574 </div><div class="inner_cell">
14575 <div class="text_cell_render border-box-sizing rendered_html">
14578 <pre><code>p == [0 =] [pop pop 1] [-- over] [dip *] genrec
14583 <pre><code>p == [0 =] [pop [pop 1]] [--] [i [dupdip *] cons] genrec</code></pre>
14588 <div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
14589 </div><div class="inner_cell">
14590 <div class="text_cell_render border-box-sizing rendered_html">
14591 <h2 id="Try-it-with-F():">Try it with <code>F()</code>:<a class="anchor-link" href="#Try-it-with-F():">¶</a></h2>
14595 <div class="cell border-box-sizing code_cell rendered">
14596 <div class="input">
14597 <div class="prompt input_prompt">In [ ]:</div>
14598 <div class="inner_cell">
14599 <div class="input_area">
14600 <div class=" highlight hl-ipython2"><pre><span></span><span class="k">def</span> <span class="nf">odd</span><span class="p">(</span><span class="n">n</span><span class="p">):</span> <span class="k">return</span> <span class="n">n</span> <span class="o">%</span> <span class="mi">2</span>
14603 <span class="k">def</span> <span class="nf">F</span><span class="p">(</span><span class="n">u</span><span class="p">,</span> <span class="n">k</span><span class="p">):</span>
14604 <span class="n">z</span> <span class="o">=</span> <span class="mi">1</span>
14605 <span class="k">while</span> <span class="n">k</span> <span class="o">!=</span> <span class="mi">0</span><span class="p">:</span>
14606 <span class="k">if</span> <span class="n">odd</span><span class="p">(</span><span class="n">k</span><span class="p">):</span>
14607 <span class="n">z</span> <span class="o">=</span> <span class="n">z</span> <span class="o">*</span> <span class="n">u</span>
14608 <span class="n">k</span> <span class="o">=</span> <span class="n">k</span> <span class="o">/</span> <span class="mi">2</span>
14609 <span class="n">u</span> <span class="o">=</span> <span class="n">u</span> <span class="o">*</span> <span class="n">u</span>
14610 <span class="k">return</span> <span class="n">z</span>
14612 <span class="n">F</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="mi">5</span><span class="p">)</span>
14620 <div class="cell border-box-sizing code_cell rendered">
14621 <div class="input">
14622 <div class="prompt input_prompt">In [ ]:</div>
14623 <div class="inner_cell">
14624 <div class="input_area">
14625 <div class=" highlight hl-ipython2"><pre><span></span><span class="k">def</span> <span class="nf">F</span><span class="p">(</span><span class="n">k</span><span class="p">):</span>
14626 <span class="k">def</span> <span class="nf">_F</span><span class="p">(</span><span class="n">u</span><span class="p">,</span> <span class="n">k</span><span class="o">=</span><span class="n">k</span><span class="p">):</span>
14627 <span class="n">z</span> <span class="o">=</span> <span class="mi">1</span>
14628 <span class="k">while</span> <span class="n">k</span> <span class="o">!=</span> <span class="mi">0</span><span class="p">:</span>
14629 <span class="k">if</span> <span class="n">odd</span><span class="p">(</span><span class="n">k</span><span class="p">):</span>
14630 <span class="n">z</span> <span class="o">=</span> <span class="n">z</span> <span class="o">*</span> <span class="n">u</span>
14631 <span class="n">k</span> <span class="o">=</span> <span class="n">k</span> <span class="o">/</span> <span class="mi">2</span>
14632 <span class="n">u</span> <span class="o">=</span> <span class="n">u</span> <span class="o">*</span> <span class="n">u</span>
14633 <span class="k">return</span> <span class="n">z</span>
14634 <span class="k">return</span> <span class="n">_F</span>
14636 <span class="n">F</span><span class="p">(</span><span class="mi">5</span><span class="p">)(</span><span class="mi">2</span><span class="p">)</span>
14644 <div class="cell border-box-sizing code_cell rendered">
14645 <div class="input">
14646 <div class="prompt input_prompt">In [ ]:</div>
14647 <div class="inner_cell">
14648 <div class="input_area">
14649 <div class=" highlight hl-ipython2"><pre><span></span><span class="k">def</span> <span class="nf">F</span><span class="p">(</span><span class="n">k</span><span class="p">):</span>
14650 <span class="k">def</span> <span class="nf">_F</span><span class="p">(</span><span class="n">u</span><span class="p">,</span> <span class="n">k</span><span class="o">=</span><span class="n">k</span><span class="p">):</span>
14651 <span class="k">if</span> <span class="n">k</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
14652 <span class="n">z</span> <span class="o">=</span> <span class="mi">1</span>
14653 <span class="k">else</span><span class="p">:</span>
14654 <span class="n">z</span> <span class="o">=</span> <span class="n">F</span><span class="p">(</span><span class="n">k</span> <span class="o">/</span> <span class="mi">2</span><span class="p">)(</span><span class="n">u</span><span class="p">)</span>
14655 <span class="n">z</span> <span class="o">*=</span> <span class="n">z</span>
14656 <span class="k">if</span> <span class="n">odd</span><span class="p">(</span><span class="n">k</span><span class="p">):</span>
14657 <span class="n">z</span> <span class="o">=</span> <span class="n">z</span> <span class="o">*</span> <span class="n">u</span>
14658 <span class="k">return</span> <span class="n">z</span>
14659 <span class="k">return</span> <span class="n">_F</span>
14661 <span class="n">F</span><span class="p">(</span><span class="mi">5</span><span class="p">)(</span><span class="mi">2</span><span class="p">)</span>
14669 <div class="cell border-box-sizing code_cell rendered">
14670 <div class="input">
14671 <div class="prompt input_prompt">In [ ]:</div>
14672 <div class="inner_cell">
14673 <div class="input_area">
14674 <div class=" highlight hl-ipython2"><pre><span></span><span class="k">def</span> <span class="nf">F</span><span class="p">(</span><span class="n">k</span><span class="p">):</span>
14675 <span class="k">if</span> <span class="n">k</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
14676 <span class="n">z</span> <span class="o">=</span> <span class="k">lambda</span> <span class="n">u</span><span class="p">:</span> <span class="mi">1</span>
14677 <span class="k">else</span><span class="p">:</span>
14678 <span class="n">f</span> <span class="o">=</span> <span class="n">F</span><span class="p">(</span><span class="n">k</span> <span class="o">/</span> <span class="mi">2</span><span class="p">)</span>
14679 <span class="k">def</span> <span class="nf">z</span><span class="p">(</span><span class="n">u</span><span class="p">):</span>
14680 <span class="n">uu</span> <span class="o">=</span> <span class="n">f</span><span class="p">(</span><span class="n">u</span><span class="p">)</span>
14681 <span class="n">uu</span> <span class="o">*=</span> <span class="n">uu</span>
14682 <span class="k">return</span> <span class="n">uu</span> <span class="o">*</span> <span class="n">u</span> <span class="k">if</span> <span class="n">odd</span><span class="p">(</span><span class="n">k</span><span class="p">)</span> <span class="k">else</span> <span class="n">uu</span>
14683 <span class="k">return</span> <span class="n">z</span>
14685 <span class="n">F</span><span class="p">(</span><span class="mi">5</span><span class="p">)(</span><span class="mi">2</span><span class="p">)</span>
14693 <div class="cell border-box-sizing code_cell rendered">
14694 <div class="input">
14695 <div class="prompt input_prompt">In [ ]:</div>
14696 <div class="inner_cell">
14697 <div class="input_area">
14698 <div class=" highlight hl-ipython2"><pre><span></span><span class="k">def</span> <span class="nf">F</span><span class="p">(</span><span class="n">k</span><span class="p">):</span>
14699 <span class="k">if</span> <span class="n">k</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
14700 <span class="n">z</span> <span class="o">=</span> <span class="k">lambda</span> <span class="n">u</span><span class="p">:</span> <span class="mi">1</span>
14701 <span class="k">else</span><span class="p">:</span>
14702 <span class="n">f</span> <span class="o">=</span> <span class="n">F</span><span class="p">(</span><span class="n">k</span> <span class="o">/</span> <span class="mi">2</span><span class="p">)</span>
14703 <span class="k">if</span> <span class="n">odd</span><span class="p">(</span><span class="n">k</span><span class="p">):</span>
14704 <span class="n">z</span> <span class="o">=</span> <span class="k">lambda</span> <span class="n">u</span><span class="p">:</span> <span class="p">(</span><span class="k">lambda</span> <span class="n">fu</span><span class="p">,</span> <span class="n">u</span><span class="p">:</span> <span class="n">fu</span> <span class="o">*</span> <span class="n">fu</span> <span class="o">*</span> <span class="n">u</span><span class="p">)(</span><span class="n">f</span><span class="p">(</span><span class="n">u</span><span class="p">),</span> <span class="n">u</span><span class="p">)</span>
14705 <span class="k">else</span><span class="p">:</span>
14706 <span class="n">z</span> <span class="o">=</span> <span class="k">lambda</span> <span class="n">u</span><span class="p">:</span> <span class="p">(</span><span class="k">lambda</span> <span class="n">fu</span><span class="p">,</span> <span class="n">u</span><span class="p">:</span> <span class="n">fu</span> <span class="o">*</span> <span class="n">fu</span><span class="p">)(</span><span class="n">f</span><span class="p">(</span><span class="n">u</span><span class="p">),</span> <span class="n">u</span><span class="p">)</span>
14707 <span class="k">return</span> <span class="n">z</span>
14709 <span class="n">F</span><span class="p">(</span><span class="mi">5</span><span class="p">)(</span><span class="mi">2</span><span class="p">)</span>
14717 <div class="cell border-box-sizing code_cell rendered">
14718 <div class="input">
14719 <div class="prompt input_prompt">In [ ]:</div>
14720 <div class="inner_cell">
14721 <div class="input_area">
14722 <div class=" highlight hl-ipython2"><pre><span></span><span class="k">def</span> <span class="nf">F</span><span class="p">(</span><span class="n">k</span><span class="p">):</span>
14723 <span class="k">if</span> <span class="n">k</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
14724 <span class="n">z</span> <span class="o">=</span> <span class="s2">"lambda u: 1"</span>
14725 <span class="k">else</span><span class="p">:</span>
14726 <span class="n">f</span> <span class="o">=</span> <span class="n">F</span><span class="p">(</span><span class="n">k</span> <span class="o">/</span> <span class="mi">2</span><span class="p">)</span>
14727 <span class="k">if</span> <span class="n">odd</span><span class="p">(</span><span class="n">k</span><span class="p">):</span>
14728 <span class="n">z</span> <span class="o">=</span> <span class="s2">"lambda u: (lambda fu, u: fu * fu * u)((</span><span class="si">%(f)s</span><span class="s2">)(u), u)"</span> <span class="o">%</span> <span class="nb">locals</span><span class="p">()</span>
14729 <span class="k">else</span><span class="p">:</span>
14730 <span class="n">z</span> <span class="o">=</span> <span class="s2">"lambda u: (lambda fu, u: fu * fu)((</span><span class="si">%(f)s</span><span class="s2">)(u), u)"</span> <span class="o">%</span> <span class="nb">locals</span><span class="p">()</span>
14731 <span class="k">return</span> <span class="n">z</span>
14733 <span class="n">source</span> <span class="o">=</span> <span class="n">F</span><span class="p">(</span><span class="mi">5</span><span class="p">)</span>
14734 <span class="nb">print</span> <span class="n">source</span>
14735 <span class="nb">eval</span><span class="p">(</span><span class="n">source</span><span class="p">)(</span><span class="mi">2</span><span class="p">)</span>
14743 <div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
14744 </div><div class="inner_cell">
14745 <div class="text_cell_render border-box-sizing rendered_html">
14751 <div class="cell border-box-sizing code_cell rendered">
14752 <div class="input">
14753 <div class="prompt input_prompt">In [ ]:</div>
14754 <div class="inner_cell">
14755 <div class="input_area">
14756 <div class=" highlight hl-ipython2"><pre><span></span><span class="k">for</span> <span class="n">n</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">4</span><span class="p">):</span>
14757 <span class="nb">print</span> <span class="n">F</span><span class="p">(</span><span class="n">n</span><span class="p">)</span>
14765 <div class="cell border-box-sizing code_cell rendered">
14766 <div class="input">
14767 <div class="prompt input_prompt">In [ ]:</div>
14768 <div class="inner_cell">
14769 <div class="input_area">
14770 <div class=" highlight hl-ipython2"><pre><span></span><span class="k">def</span> <span class="nf">F</span><span class="p">(</span><span class="n">k</span><span class="p">):</span>
14771 <span class="k">if</span> <span class="n">k</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
14772 <span class="n">z</span> <span class="o">=</span> <span class="s2">"lambda u: 1"</span>
14773 <span class="k">elif</span> <span class="n">k</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
14774 <span class="n">z</span> <span class="o">=</span> <span class="s2">"lambda u: u"</span>
14775 <span class="k">else</span><span class="p">:</span>
14776 <span class="n">f</span> <span class="o">=</span> <span class="n">F</span><span class="p">(</span><span class="n">k</span> <span class="o">/</span> <span class="mi">2</span><span class="p">)</span>
14777 <span class="k">if</span> <span class="n">odd</span><span class="p">(</span><span class="n">k</span><span class="p">):</span>
14778 <span class="n">z</span> <span class="o">=</span> <span class="s2">"lambda u: (lambda fu, u: fu * fu * u)((</span><span class="si">%(f)s</span><span class="s2">)(u), u)"</span> <span class="o">%</span> <span class="nb">locals</span><span class="p">()</span>
14779 <span class="k">else</span><span class="p">:</span>
14780 <span class="n">z</span> <span class="o">=</span> <span class="s2">"lambda u: (lambda fu, u: fu * fu)((</span><span class="si">%(f)s</span><span class="s2">)(u), u)"</span> <span class="o">%</span> <span class="nb">locals</span><span class="p">()</span>
14781 <span class="k">return</span> <span class="n">z</span>
14783 <span class="n">source</span> <span class="o">=</span> <span class="n">F</span><span class="p">(</span><span class="mi">5</span><span class="p">)</span>
14784 <span class="nb">print</span> <span class="n">source</span>
14785 <span class="nb">eval</span><span class="p">(</span><span class="n">source</span><span class="p">)(</span><span class="mi">2</span><span class="p">)</span>
14793 <div class="cell border-box-sizing code_cell rendered">
14794 <div class="input">
14795 <div class="prompt input_prompt">In [ ]:</div>
14796 <div class="inner_cell">
14797 <div class="input_area">
14798 <div class=" highlight hl-ipython2"><pre><span></span><span class="k">for</span> <span class="n">n</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">4</span><span class="p">):</span>
14799 <span class="nb">print</span> <span class="n">F</span><span class="p">(</span><span class="n">n</span><span class="p">)</span>
14807 <div class="cell border-box-sizing code_cell rendered">
14808 <div class="input">
14809 <div class="prompt input_prompt">In [ ]:</div>
14810 <div class="inner_cell">
14811 <div class="input_area">
14812 <div class=" highlight hl-ipython2"><pre><span></span><span class="k">def</span> <span class="nf">F</span><span class="p">(</span><span class="n">k</span><span class="p">):</span>
14813 <span class="k">if</span> <span class="n">k</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
14814 <span class="n">z</span> <span class="o">=</span> <span class="s2">"lambda u: 1"</span>
14815 <span class="k">elif</span> <span class="n">k</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
14816 <span class="n">z</span> <span class="o">=</span> <span class="s2">"lambda u: u"</span>
14817 <span class="k">else</span><span class="p">:</span>
14818 <span class="n">m</span> <span class="o">=</span> <span class="n">k</span> <span class="o">/</span> <span class="mi">2</span>
14819 <span class="k">if</span> <span class="n">odd</span><span class="p">(</span><span class="n">k</span><span class="p">):</span>
14820 <span class="k">if</span> <span class="n">m</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
14821 <span class="n">z</span> <span class="o">=</span> <span class="s2">"lambda u: 1"</span>
14822 <span class="k">elif</span> <span class="n">m</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
14823 <span class="n">z</span> <span class="o">=</span> <span class="s2">"lambda u: u * u * u"</span>
14824 <span class="k">else</span><span class="p">:</span>
14825 <span class="n">z</span> <span class="o">=</span> <span class="s2">"lambda u: (lambda fu, u: fu * fu * u)((</span><span class="si">%s</span><span class="s2">)(u), u)"</span> <span class="o">%</span> <span class="n">F</span><span class="p">(</span><span class="n">m</span><span class="p">)</span>
14826 <span class="k">else</span><span class="p">:</span>
14827 <span class="k">if</span> <span class="n">m</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
14828 <span class="n">z</span> <span class="o">=</span> <span class="s2">"lambda u: 1"</span>
14829 <span class="k">elif</span> <span class="n">m</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
14830 <span class="n">z</span> <span class="o">=</span> <span class="s2">"lambda u: u * u"</span>
14831 <span class="k">else</span><span class="p">:</span>
14832 <span class="n">z</span> <span class="o">=</span> <span class="s2">"lambda u: (lambda u: u * u)((</span><span class="si">%s</span><span class="s2">)(u))"</span> <span class="o">%</span> <span class="n">F</span><span class="p">(</span><span class="n">m</span><span class="p">)</span>
14833 <span class="k">return</span> <span class="n">z</span>
14835 <span class="n">source</span> <span class="o">=</span> <span class="n">F</span><span class="p">(</span><span class="mi">5</span><span class="p">)</span>
14836 <span class="nb">print</span> <span class="n">source</span>
14837 <span class="nb">eval</span><span class="p">(</span><span class="n">source</span><span class="p">)(</span><span class="mi">2</span><span class="p">)</span>
14845 <div class="cell border-box-sizing code_cell rendered">
14846 <div class="input">
14847 <div class="prompt input_prompt">In [ ]:</div>
14848 <div class="inner_cell">
14849 <div class="input_area">
14850 <div class=" highlight hl-ipython2"><pre><span></span><span class="k">def</span> <span class="nf">F</span><span class="p">(</span><span class="n">k</span><span class="p">):</span>
14851 <span class="k">if</span> <span class="n">k</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
14852 <span class="n">z</span> <span class="o">=</span> <span class="s2">"lambda u: 1"</span>
14853 <span class="k">elif</span> <span class="n">k</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
14854 <span class="n">z</span> <span class="o">=</span> <span class="s2">"lambda u: u"</span>
14855 <span class="k">else</span><span class="p">:</span>
14856 <span class="n">m</span> <span class="o">=</span> <span class="n">k</span> <span class="o">/</span> <span class="mi">2</span>
14857 <span class="k">if</span> <span class="n">m</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
14858 <span class="n">z</span> <span class="o">=</span> <span class="s2">"lambda u: 1"</span>
14860 <span class="k">elif</span> <span class="n">odd</span><span class="p">(</span><span class="n">k</span><span class="p">):</span>
14861 <span class="k">if</span> <span class="n">m</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
14862 <span class="n">z</span> <span class="o">=</span> <span class="s2">"lambda u: u * u * u"</span>
14863 <span class="k">else</span><span class="p">:</span>
14864 <span class="n">z</span> <span class="o">=</span> <span class="s2">"lambda u: (lambda fu, u: fu * fu * u)((</span><span class="si">%s</span><span class="s2">)(u), u)"</span> <span class="o">%</span> <span class="n">F</span><span class="p">(</span><span class="n">m</span><span class="p">)</span>
14865 <span class="k">else</span><span class="p">:</span>
14866 <span class="k">if</span> <span class="n">m</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
14867 <span class="n">z</span> <span class="o">=</span> <span class="s2">"lambda u: u * u"</span>
14868 <span class="k">else</span><span class="p">:</span>
14869 <span class="n">z</span> <span class="o">=</span> <span class="s2">"lambda u: (lambda u: u * u)((</span><span class="si">%s</span><span class="s2">)(u))"</span> <span class="o">%</span> <span class="n">F</span><span class="p">(</span><span class="n">m</span><span class="p">)</span>
14870 <span class="k">return</span> <span class="n">z</span>
14872 <span class="n">source</span> <span class="o">=</span> <span class="n">F</span><span class="p">(</span><span class="mi">5</span><span class="p">)</span>
14873 <span class="nb">print</span> <span class="n">source</span>
14874 <span class="nb">eval</span><span class="p">(</span><span class="n">source</span><span class="p">)(</span><span class="mi">2</span><span class="p">)</span>
14882 <div class="cell border-box-sizing code_cell rendered">
14883 <div class="input">
14884 <div class="prompt input_prompt">In [ ]:</div>
14885 <div class="inner_cell">
14886 <div class="input_area">
14887 <div class=" highlight hl-ipython2"><pre><span></span><span class="k">for</span> <span class="n">n</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">7</span><span class="p">):</span>
14888 <span class="n">source</span> <span class="o">=</span> <span class="n">F</span><span class="p">(</span><span class="n">n</span><span class="p">)</span>
14889 <span class="nb">print</span> <span class="n">n</span><span class="p">,</span> <span class="s1">'</span><span class="si">%2i</span><span class="s1">'</span> <span class="o">%</span> <span class="nb">eval</span><span class="p">(</span><span class="n">source</span><span class="p">)(</span><span class="mi">2</span><span class="p">),</span> <span class="n">source</span>
14897 <div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
14898 </div><div class="inner_cell">
14899 <div class="text_cell_render border-box-sizing rendered_html">
14900 <p>So that gets pretty good, eh?</p>
14901 <p>But looking back at the definition in Joy, it doesn't seem easy to directly apply this technique to Joy code:</p>
14903 <pre><code>Ft == [over] dip *
14904 Fb == [[sqr] dip 2 //] dip
14905 Fw == [pop odd] [Ft] [] ifte Fb
14906 F == 1 [pop] [Fw] while popopd
14910 <p>But a direct translation of the Python code..?</p>
14924 _F.1 == [1 =] [pop [dup dup * *]] [popd F [dupdip over * *] cons] ifte
14925 _F.2 == [1 =] [pop [dup *]] [popd F [i dup *] cons] ifte
14932 5 [ [[0 =] [pop 1]] [[1 =] []] [_F.0] ] cond
14934 5 dup 2 // [ [[0 =] [pop 1]] [[pop odd] _F.1] [_F.2] ] cond
14935 5 5 2 // [ [[0 =] [pop 1]] [[pop odd] _F.1] [_F.2] ] cond
14937 5 2 [ [[0 =] [pop 1]] [[pop odd] _F.1] [_F.2] ] cond
14939 5 2 [1 =] [popop [dup dup * *]] [popd F [dupdip over * *] cons] ifte
14940 5 2 popd F [dupdip over * *] cons
14941 2 F [dupdip over * *] cons
14943 2 F [dupdip over * *] cons
14946 2 [ [[0 =] [pop 1]] [[1 =] []] [_F.0] ] cond
14948 2 dup 2 // [ [[0 =] [pop 1]] [[pop odd] _F.1] [_F.2] ] cond
14949 2 2 2 // [ [[0 =] [pop 1]] [[pop odd] _F.1] [_F.2] ] cond
14950 2 1 [ [[0 =] [pop 1]] [[pop odd] _F.1] [_F.2] ] cond
14952 2 1 [1 =] [popop [dup *]] [popd F [i dup *] cons] ifte
14957 2 F [dupdip over * *] cons
14958 [dup *] [dupdip over * *] cons
14959 [[dup *] dupdip over * *]
14962 <p>And here it is in action:</p>
14964 <pre><code>2 [[dup *] dupdip over * *] i
14965 2 [dup *] dupdip over * *
14976 <p>So, it works, but in this case the results of the partial evaluation are more elegant.</p>
14981 <div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
14982 </div><div class="inner_cell">
14983 <div class="text_cell_render border-box-sizing rendered_html">
14984 <h2 id="Try-it-with-hylomorphism():">Try it with <code>hylomorphism()</code>:<a class="anchor-link" href="#Try-it-with-hylomorphism():">¶</a></h2>
14988 <div class="cell border-box-sizing code_cell rendered">
14989 <div class="input">
14990 <div class="prompt input_prompt">In [ ]:</div>
14991 <div class="inner_cell">
14992 <div class="input_area">
14993 <div class=" highlight hl-ipython2"><pre><span></span><span class="k">def</span> <span class="nf">hylomorphism</span><span class="p">(</span><span class="n">c</span><span class="p">,</span> <span class="n">F</span><span class="p">,</span> <span class="n">P</span><span class="p">,</span> <span class="n">G</span><span class="p">):</span>
14994 <span class="sd">'''Return a hylomorphism function H.'''</span>
14996 <span class="k">def</span> <span class="nf">H</span><span class="p">(</span><span class="n">a</span><span class="p">):</span>
14997 <span class="k">if</span> <span class="n">P</span><span class="p">(</span><span class="n">a</span><span class="p">):</span>
14998 <span class="n">result</span> <span class="o">=</span> <span class="n">c</span>
14999 <span class="k">else</span><span class="p">:</span>
15000 <span class="n">b</span><span class="p">,</span> <span class="n">aa</span> <span class="o">=</span> <span class="n">G</span><span class="p">(</span><span class="n">a</span><span class="p">)</span>
15001 <span class="n">result</span> <span class="o">=</span> <span class="n">F</span><span class="p">(</span><span class="n">b</span><span class="p">,</span> <span class="n">H</span><span class="p">(</span><span class="n">aa</span><span class="p">))</span>
15002 <span class="k">return</span> <span class="n">result</span>
15004 <span class="k">return</span> <span class="n">H</span>
15012 <div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
15013 </div><div class="inner_cell">
15014 <div class="text_cell_render border-box-sizing rendered_html">
15015 <h3 id="First,-curry">First, curry<a class="anchor-link" href="#First,-curry">¶</a></h3><p>With abuse of syntax:</p>
15020 <div class="cell border-box-sizing code_cell rendered">
15021 <div class="input">
15022 <div class="prompt input_prompt">In [ ]:</div>
15023 <div class="inner_cell">
15024 <div class="input_area">
15025 <div class=" highlight hl-ipython2"><pre><span></span><span class="k">def</span> <span class="nf">hylomorphism</span><span class="p">(</span><span class="n">c</span><span class="p">):</span>
15026 <span class="k">return</span> <span class="k">lambda</span> <span class="n">F</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">P</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">G</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">a</span><span class="p">:</span> <span class="p">(</span>
15027 <span class="k">if</span> <span class="n">P</span><span class="p">(</span><span class="n">a</span><span class="p">):</span>
15028 <span class="n">result</span> <span class="o">=</span> <span class="n">c</span>
15029 <span class="k">else</span><span class="p">:</span>
15030 <span class="n">b</span><span class="p">,</span> <span class="n">aa</span> <span class="o">=</span> <span class="n">G</span><span class="p">(</span><span class="n">a</span><span class="p">)</span>
15031 <span class="n">result</span> <span class="o">=</span> <span class="n">F</span><span class="p">(</span><span class="n">b</span><span class="p">)(</span><span class="n">H</span><span class="p">(</span><span class="n">aa</span><span class="p">))</span>
15032 <span class="k">return</span> <span class="n">result</span>
15033 <span class="p">)</span>
15041 <div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
15042 </div><div class="inner_cell">
15043 <div class="text_cell_render border-box-sizing rendered_html">
15044 <h3 id="lambda-lowering">lambda lowering<a class="anchor-link" href="#lambda-lowering">¶</a></h3>
15048 <div class="cell border-box-sizing code_cell rendered">
15049 <div class="input">
15050 <div class="prompt input_prompt">In [ ]:</div>
15051 <div class="inner_cell">
15052 <div class="input_area">
15053 <div class=" highlight hl-ipython2"><pre><span></span><span class="k">def</span> <span class="nf">hylomorphism</span><span class="p">(</span><span class="n">c</span><span class="p">):</span>
15054 <span class="k">def</span> <span class="nf">r</span><span class="p">(</span><span class="n">a</span><span class="p">):</span>
15055 <span class="k">def</span> <span class="nf">rr</span><span class="p">(</span><span class="n">P</span><span class="p">):</span>
15056 <span class="k">if</span> <span class="n">P</span><span class="p">(</span><span class="n">a</span><span class="p">):</span>
15057 <span class="k">return</span> <span class="k">lambda</span> <span class="n">F</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">G</span><span class="p">:</span> <span class="n">c</span>
15058 <span class="k">return</span> <span class="k">lambda</span> <span class="n">F</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">G</span><span class="p">:</span> <span class="p">(</span>
15059 <span class="n">b</span><span class="p">,</span> <span class="n">aa</span> <span class="o">=</span> <span class="n">G</span><span class="p">(</span><span class="n">a</span><span class="p">)</span>
15060 <span class="k">return</span> <span class="n">F</span><span class="p">(</span><span class="n">b</span><span class="p">)(</span><span class="n">H</span><span class="p">(</span><span class="n">aa</span><span class="p">))</span>
15061 <span class="p">)</span>
15062 <span class="k">return</span> <span class="n">rr</span>
15063 <span class="k">return</span> <span class="n">r</span>
15071 <div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
15072 </div><div class="inner_cell">
15073 <div class="text_cell_render border-box-sizing rendered_html">
15074 <h3 id="expression-lifting">expression lifting<a class="anchor-link" href="#expression-lifting">¶</a></h3>
15078 <div class="cell border-box-sizing code_cell rendered">
15079 <div class="input">
15080 <div class="prompt input_prompt">In [ ]:</div>
15081 <div class="inner_cell">
15082 <div class="input_area">
15083 <div class=" highlight hl-ipython2"><pre><span></span><span class="k">def</span> <span class="nf">hylomorphism</span><span class="p">(</span><span class="n">c</span><span class="p">):</span>
15084 <span class="k">def</span> <span class="nf">r</span><span class="p">(</span><span class="n">a</span><span class="p">):</span>
15085 <span class="k">def</span> <span class="nf">rr</span><span class="p">(</span><span class="n">P</span><span class="p">):</span>
15086 <span class="k">def</span> <span class="nf">rrr</span><span class="p">(</span><span class="n">G</span><span class="p">):</span>
15087 <span class="k">if</span> <span class="n">P</span><span class="p">(</span><span class="n">a</span><span class="p">):</span>
15088 <span class="k">return</span> <span class="k">lambda</span> <span class="n">F</span><span class="p">:</span> <span class="n">c</span>
15089 <span class="n">b</span><span class="p">,</span> <span class="n">aa</span> <span class="o">=</span> <span class="n">G</span><span class="p">(</span><span class="n">a</span><span class="p">)</span>
15090 <span class="n">H</span> <span class="o">=</span> <span class="n">hylomorphism</span><span class="p">(</span><span class="n">c</span><span class="p">)(</span><span class="n">aa</span><span class="p">)(</span><span class="n">P</span><span class="p">)(</span><span class="n">G</span><span class="p">)</span>
15091 <span class="k">return</span> <span class="k">lambda</span> <span class="n">F</span><span class="p">:</span> <span class="n">F</span><span class="p">(</span><span class="n">b</span><span class="p">)(</span><span class="n">H</span><span class="p">(</span><span class="n">F</span><span class="p">))</span>
15092 <span class="k">return</span> <span class="n">rrr</span>
15093 <span class="k">return</span> <span class="n">rr</span>
15094 <span class="k">return</span> <span class="n">r</span>
15102 <div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
15103 </div><div class="inner_cell">
15104 <div class="text_cell_render border-box-sizing rendered_html">
15105 <h3 id="quoted">quoted<a class="anchor-link" href="#quoted">¶</a></h3>
15109 <div class="cell border-box-sizing code_cell rendered">
15110 <div class="input">
15111 <div class="prompt input_prompt">In [ ]:</div>
15112 <div class="inner_cell">
15113 <div class="input_area">
15114 <div class=" highlight hl-ipython2"><pre><span></span><span class="k">def</span> <span class="nf">hylomorphism</span><span class="p">(</span><span class="n">c</span><span class="p">):</span>
15115 <span class="k">def</span> <span class="nf">r</span><span class="p">(</span><span class="n">a</span><span class="p">):</span>
15116 <span class="k">def</span> <span class="nf">rr</span><span class="p">(</span><span class="n">P</span><span class="p">):</span>
15117 <span class="k">def</span> <span class="nf">rrr</span><span class="p">(</span><span class="n">G</span><span class="p">):</span>
15118 <span class="k">if</span> <span class="n">P</span><span class="p">(</span><span class="n">a</span><span class="p">):</span>
15119 <span class="k">return</span> <span class="s2">"lambda F: </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">c</span><span class="p">,)</span>
15120 <span class="n">b</span><span class="p">,</span> <span class="n">aa</span> <span class="o">=</span> <span class="n">G</span><span class="p">(</span><span class="n">a</span><span class="p">)</span>
15121 <span class="n">H</span> <span class="o">=</span> <span class="n">hylomorphism</span><span class="p">(</span><span class="n">c</span><span class="p">)(</span><span class="n">aa</span><span class="p">)(</span><span class="n">P</span><span class="p">)(</span><span class="n">G</span><span class="p">)</span>
15122 <span class="k">return</span> <span class="s2">"lambda F: F(</span><span class="si">%(b)s</span><span class="s2">)((</span><span class="si">%(H)s</span><span class="s2">)(F))"</span> <span class="o">%</span> <span class="nb">locals</span><span class="p">()</span>
15123 <span class="k">return</span> <span class="n">rrr</span>
15124 <span class="k">return</span> <span class="n">rr</span>
15125 <span class="k">return</span> <span class="n">r</span>
15133 <div class="cell border-box-sizing code_cell rendered">
15134 <div class="input">
15135 <div class="prompt input_prompt">In [ ]:</div>
15136 <div class="inner_cell">
15137 <div class="input_area">
15138 <div class=" highlight hl-ipython2"><pre><span></span><span class="n">hylomorphism</span><span class="p">(</span><span class="mi">0</span><span class="p">)(</span><span class="mi">3</span><span class="p">)(</span><span class="k">lambda</span> <span class="n">n</span><span class="p">:</span> <span class="n">n</span> <span class="o">==</span> <span class="mi">0</span><span class="p">)(</span><span class="k">lambda</span> <span class="n">n</span><span class="p">:</span> <span class="p">(</span><span class="n">n</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="n">n</span><span class="o">-</span><span class="mi">1</span><span class="p">))</span>
15146 <div class="cell border-box-sizing code_cell rendered">
15147 <div class="input">
15148 <div class="prompt input_prompt">In [ ]:</div>
15149 <div class="inner_cell">
15150 <div class="input_area">
15151 <div class=" highlight hl-ipython2"><pre><span></span><span class="k">def</span> <span class="nf">F</span><span class="p">(</span><span class="n">a</span><span class="p">):</span>
15152 <span class="k">def</span> <span class="nf">_F</span><span class="p">(</span><span class="n">b</span><span class="p">):</span>
15153 <span class="nb">print</span> <span class="n">a</span><span class="p">,</span> <span class="n">b</span>
15154 <span class="k">return</span> <span class="n">a</span> <span class="o">+</span> <span class="n">b</span>
15155 <span class="k">return</span> <span class="n">_F</span>
15163 <div class="cell border-box-sizing code_cell rendered">
15164 <div class="input">
15165 <div class="prompt input_prompt">In [ ]:</div>
15166 <div class="inner_cell">
15167 <div class="input_area">
15168 <div class=" highlight hl-ipython2"><pre><span></span><span class="n">F</span><span class="p">(</span><span class="mi">2</span><span class="p">)(</span><span class="mi">3</span><span class="p">)</span>
15176 <div class="cell border-box-sizing code_cell rendered">
15177 <div class="input">
15178 <div class="prompt input_prompt">In [ ]:</div>
15179 <div class="inner_cell">
15180 <div class="input_area">
15181 <div class=" highlight hl-ipython2"><pre><span></span><span class="nb">eval</span><span class="p">(</span><span class="n">hylomorphism</span><span class="p">(</span><span class="mi">0</span><span class="p">)(</span><span class="mi">5</span><span class="p">)(</span><span class="k">lambda</span> <span class="n">n</span><span class="p">:</span> <span class="n">n</span> <span class="o">==</span> <span class="mi">0</span><span class="p">)(</span><span class="k">lambda</span> <span class="n">n</span><span class="p">:</span> <span class="p">(</span><span class="n">n</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="n">n</span><span class="o">-</span><span class="mi">1</span><span class="p">)))(</span><span class="n">F</span><span class="p">)</span>
15189 <div class="cell border-box-sizing code_cell rendered">
15190 <div class="input">
15191 <div class="prompt input_prompt">In [ ]:</div>
15192 <div class="inner_cell">
15193 <div class="input_area">
15194 <div class=" highlight hl-ipython2"><pre><span></span><span class="nb">eval</span><span class="p">(</span><span class="n">hylomorphism</span><span class="p">([])(</span><span class="mi">5</span><span class="p">)(</span><span class="k">lambda</span> <span class="n">n</span><span class="p">:</span> <span class="n">n</span> <span class="o">==</span> <span class="mi">0</span><span class="p">)(</span><span class="k">lambda</span> <span class="n">n</span><span class="p">:</span> <span class="p">(</span><span class="n">n</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="n">n</span><span class="o">-</span><span class="mi">1</span><span class="p">)))(</span><span class="k">lambda</span> <span class="n">a</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">b</span><span class="p">:</span> <span class="p">[</span><span class="n">a</span><span class="p">]</span> <span class="o">+</span> <span class="n">b</span><span class="p">)</span>
15202 <div class="cell border-box-sizing code_cell rendered">
15203 <div class="input">
15204 <div class="prompt input_prompt">In [ ]:</div>
15205 <div class="inner_cell">
15206 <div class="input_area">
15207 <div class=" highlight hl-ipython2"><pre><span></span>
15215 <div class="cell border-box-sizing code_cell rendered">
15216 <div class="input">
15217 <div class="prompt input_prompt">In [ ]:</div>
15218 <div class="inner_cell">
15219 <div class="input_area">
15220 <div class=" highlight hl-ipython2"><pre><span></span><span class="n">hylomorphism</span><span class="p">(</span><span class="mi">0</span><span class="p">)([</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">])(</span><span class="k">lambda</span> <span class="n">n</span><span class="p">:</span> <span class="ow">not</span> <span class="n">n</span><span class="p">)(</span><span class="k">lambda</span> <span class="n">n</span><span class="p">:</span> <span class="p">(</span><span class="n">n</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">n</span><span class="p">[</span><span class="mi">1</span><span class="p">:]))</span>
15228 <div class="cell border-box-sizing code_cell rendered">
15229 <div class="input">
15230 <div class="prompt input_prompt">In [ ]:</div>
15231 <div class="inner_cell">
15232 <div class="input_area">
15233 <div class=" highlight hl-ipython2"><pre><span></span><span class="n">hylomorphism</span><span class="p">([])([</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">])(</span><span class="k">lambda</span> <span class="n">n</span><span class="p">:</span> <span class="ow">not</span> <span class="n">n</span><span class="p">)(</span><span class="k">lambda</span> <span class="n">n</span><span class="p">:</span> <span class="p">(</span><span class="n">n</span><span class="p">[</span><span class="mi">1</span><span class="p">:],</span> <span class="n">n</span><span class="p">[</span><span class="mi">1</span><span class="p">:]))</span>
15241 <div class="cell border-box-sizing code_cell rendered">
15242 <div class="input">
15243 <div class="prompt input_prompt">In [ ]:</div>
15244 <div class="inner_cell">
15245 <div class="input_area">
15246 <div class=" highlight hl-ipython2"><pre><span></span><span class="nb">eval</span><span class="p">(</span><span class="n">hylomorphism</span><span class="p">([])([</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">])(</span><span class="k">lambda</span> <span class="n">n</span><span class="p">:</span> <span class="ow">not</span> <span class="n">n</span><span class="p">)(</span><span class="k">lambda</span> <span class="n">n</span><span class="p">:</span> <span class="p">(</span><span class="n">n</span><span class="p">[</span><span class="mi">1</span><span class="p">:],</span> <span class="n">n</span><span class="p">[</span><span class="mi">1</span><span class="p">:])))(</span><span class="k">lambda</span> <span class="n">a</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">b</span><span class="p">:</span> <span class="p">[</span><span class="n">a</span><span class="p">]</span> <span class="o">+</span> <span class="n">b</span><span class="p">)</span>
15254 <div class="cell border-box-sizing code_cell rendered">
15255 <div class="input">
15256 <div class="prompt input_prompt">In [ ]:</div>
15257 <div class="inner_cell">
15258 <div class="input_area">
15259 <div class=" highlight hl-ipython2"><pre><span></span>
15267 <div class="cell border-box-sizing code_cell rendered">
15268 <div class="input">
15269 <div class="prompt input_prompt">In [ ]:</div>
15270 <div class="inner_cell">
15271 <div class="input_area">
15272 <div class=" highlight hl-ipython2"><pre><span></span>
15280 <div class="cell border-box-sizing code_cell rendered">
15281 <div class="input">
15282 <div class="prompt input_prompt">In [ ]:</div>
15283 <div class="inner_cell">
15284 <div class="input_area">
15285 <div class=" highlight hl-ipython2"><pre><span></span>
15293 <div class="cell border-box-sizing code_cell rendered">
15294 <div class="input">
15295 <div class="prompt input_prompt">In [ ]:</div>
15296 <div class="inner_cell">
15297 <div class="input_area">
15298 <div class=" highlight hl-ipython2"><pre><span></span><span class="k">def</span> <span class="nf">hylomorphism</span><span class="p">(</span><span class="n">c</span><span class="p">):</span>
15299 <span class="k">return</span> <span class="k">lambda</span> <span class="n">a</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">P</span><span class="p">:</span> <span class="p">(</span>
15300 <span class="k">if</span> <span class="n">P</span><span class="p">(</span><span class="n">a</span><span class="p">):</span>
15301 <span class="n">result</span> <span class="o">=</span> <span class="k">lambda</span> <span class="n">F</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">G</span><span class="p">:</span> <span class="n">c</span>
15302 <span class="k">else</span><span class="p">:</span>
15303 <span class="n">result</span> <span class="o">=</span> <span class="k">lambda</span> <span class="n">F</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">G</span><span class="p">:</span> <span class="p">(</span>
15304 <span class="n">b</span><span class="p">,</span> <span class="n">aa</span> <span class="o">=</span> <span class="n">G</span><span class="p">(</span><span class="n">a</span><span class="p">)</span>
15305 <span class="k">return</span> <span class="n">F</span><span class="p">(</span><span class="n">b</span><span class="p">)(</span><span class="n">H</span><span class="p">(</span><span class="n">aa</span><span class="p">))</span>
15306 <span class="p">)</span>
15307 <span class="k">return</span> <span class="n">result</span>
15308 <span class="p">)</span>
15316 <div class="cell border-box-sizing code_cell rendered">
15317 <div class="input">
15318 <div class="prompt input_prompt">In [ ]:</div>
15319 <div class="inner_cell">
15320 <div class="input_area">
15321 <div class=" highlight hl-ipython2"><pre><span></span><span class="k">def</span> <span class="nf">hylomorphism</span><span class="p">(</span><span class="n">c</span><span class="p">):</span>
15322 <span class="k">return</span> <span class="k">lambda</span> <span class="n">a</span><span class="p">:</span> <span class="p">(</span>
15323 <span class="k">lambda</span> <span class="n">F</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">P</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">G</span><span class="p">:</span> <span class="n">c</span>
15324 <span class="k">if</span> <span class="n">P</span><span class="p">(</span><span class="n">a</span><span class="p">)</span> <span class="k">else</span>
15325 <span class="k">lambda</span> <span class="n">F</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">P</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">G</span><span class="p">:</span> <span class="p">(</span>
15326 <span class="n">b</span><span class="p">,</span> <span class="n">aa</span> <span class="o">=</span> <span class="n">G</span><span class="p">(</span><span class="n">a</span><span class="p">)</span>
15327 <span class="k">return</span> <span class="n">F</span><span class="p">(</span><span class="n">b</span><span class="p">)(</span><span class="n">H</span><span class="p">(</span><span class="n">aa</span><span class="p">))</span>
15328 <span class="p">)</span>
15329 <span class="p">)</span>
15337 <div class="cell border-box-sizing code_cell rendered">
15338 <div class="input">
15339 <div class="prompt input_prompt">In [ ]:</div>
15340 <div class="inner_cell">
15341 <div class="input_area">
15342 <div class=" highlight hl-ipython2"><pre><span></span><span class="k">def</span> <span class="nf">hylomorphism</span><span class="p">(</span><span class="n">c</span><span class="p">):</span>
15343 <span class="k">return</span> <span class="k">lambda</span> <span class="n">a</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">G</span><span class="p">:</span> <span class="p">(</span>
15344 <span class="k">lambda</span> <span class="n">F</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">P</span><span class="p">:</span> <span class="n">c</span>
15345 <span class="k">if</span> <span class="n">P</span><span class="p">(</span><span class="n">a</span><span class="p">)</span> <span class="k">else</span>
15346 <span class="n">b</span><span class="p">,</span> <span class="n">aa</span> <span class="o">=</span> <span class="n">G</span><span class="p">(</span><span class="n">a</span><span class="p">)</span>
15347 <span class="k">lambda</span> <span class="n">F</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">P</span><span class="p">:</span> <span class="n">F</span><span class="p">(</span><span class="n">b</span><span class="p">)(</span><span class="n">H</span><span class="p">(</span><span class="n">aa</span><span class="p">))</span>
15348 <span class="p">)</span>