Files
cds-monte-carlo-methods/Exercise sheet 4/feedback/2022-10-04 14:40:22.765945 UTC/exercise_sheet_04.html
2022-10-09 11:32:06 +02:00

1281 lines
330 KiB
HTML

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>exercise_sheet_04</title>
<style type="text/css">
/*!
* Bootstrap v3.3.4 (http://getbootstrap.com)
* Copyright 2011-2015 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
*//*! normalize.css v3.0.2 | MIT License | git.io/normalize */html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{margin:.67em 0;font-size:2em}mark{color:#000;background:#ff0}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{height:0;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{margin:0;font:inherit;color:inherit}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}input{line-height:normal}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{padding:.35em .625em .75em;margin:0 2px;border:1px solid silver}legend{padding:0;border:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-spacing:0;border-collapse:collapse}td,th{padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{*,:after,:before{color:#000!important;text-shadow:none!important;background:0 0!important;-webkit-box-shadow:none!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="javascript:"]:after,a[href^="#"]:after{content:""}blockquote,pre{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}select{background:#fff!important}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #ddd!important}}@font-face{font-family:'Glyphicons Halflings';src:url(../fonts/glyphicons-halflings-regular.eot);src:url(../fonts/glyphicons-halflings-regular.eot?#iefix) format('embedded-opentype'),url(../fonts/glyphicons-halflings-regular.woff2) format('woff2'),url(../fonts/glyphicons-halflings-regular.woff) format('woff'),url(../fonts/glyphicons-halflings-regular.ttf) format('truetype'),url(../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular) format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\2a"}.glyphicon-plus:before{content:"\2b"}.glyphicon-eur:before,.glyphicon-euro:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}.glyphicon-cd:before{content:"\e201"}.glyphicon-save-file:before{content:"\e202"}.glyphicon-open-file:before{content:"\e203"}.glyphicon-level-up:before{content:"\e204"}.glyphicon-copy:before{content:"\e205"}.glyphicon-paste:before{content:"\e206"}.glyphicon-alert:before{content:"\e209"}.glyphicon-equalizer:before{content:"\e210"}.glyphicon-king:before{content:"\e211"}.glyphicon-queen:before{content:"\e212"}.glyphicon-pawn:before{content:"\e213"}.glyphicon-bishop:before{content:"\e214"}.glyphicon-knight:before{content:"\e215"}.glyphicon-baby-formula:before{content:"\e216"}.glyphicon-tent:before{content:"\26fa"}.glyphicon-blackboard:before{content:"\e218"}.glyphicon-bed:before{content:"\e219"}.glyphicon-apple:before{content:"\f8ff"}.glyphicon-erase:before{content:"\e221"}.glyphicon-hourglass:before{content:"\231b"}.glyphicon-lamp:before{content:"\e223"}.glyphicon-duplicate:before{content:"\e224"}.glyphicon-piggy-bank:before{content:"\e225"}.glyphicon-scissors:before{content:"\e226"}.glyphicon-bitcoin:before{content:"\e227"}.glyphicon-btc:before{content:"\e227"}.glyphicon-xbt:before{content:"\e227"}.glyphicon-yen:before{content:"\00a5"}.glyphicon-jpy:before{content:"\00a5"}.glyphicon-ruble:before{content:"\20bd"}.glyphicon-rub:before{content:"\20bd"}.glyphicon-scale:before{content:"\e230"}.glyphicon-ice-lolly:before{content:"\e231"}.glyphicon-ice-lolly-tasted:before{content:"\e232"}.glyphicon-education:before{content:"\e233"}.glyphicon-option-horizontal:before{content:"\e234"}.glyphicon-option-vertical:before{content:"\e235"}.glyphicon-menu-hamburger:before{content:"\e236"}.glyphicon-modal-window:before{content:"\e237"}.glyphicon-oil:before{content:"\e238"}.glyphicon-grain:before{content:"\e239"}.glyphicon-sunglasses:before{content:"\e240"}.glyphicon-text-size:before{content:"\e241"}.glyphicon-text-color:before{content:"\e242"}.glyphicon-text-background:before{content:"\e243"}.glyphicon-object-align-top:before{content:"\e244"}.glyphicon-object-align-bottom:before{content:"\e245"}.glyphicon-object-align-horizontal:before{content:"\e246"}.glyphicon-object-align-left:before{content:"\e247"}.glyphicon-object-align-vertical:before{content:"\e248"}.glyphicon-object-align-right:before{content:"\e249"}.glyphicon-triangle-right:before{content:"\e250"}.glyphicon-triangle-left:before{content:"\e251"}.glyphicon-triangle-bottom:before{content:"\e252"}.glyphicon-triangle-top:before{content:"\e253"}.glyphicon-console:before{content:"\e254"}.glyphicon-superscript:before{content:"\e255"}.glyphicon-subscript:before{content:"\e256"}.glyphicon-menu-left:before{content:"\e257"}.glyphicon-menu-right:before{content:"\e258"}.glyphicon-menu-down:before{content:"\e259"}.glyphicon-menu-up:before{content:"\e260"}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}:after,:before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#337ab7;text-decoration:none}a:focus,a:hover{color:#23527c;text-decoration:underline}a:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.carousel-inner>.item>a>img,.carousel-inner>.item>img,.img-responsive,.thumbnail a>img,.thumbnail>img{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{display:inline-block;max-width:100%;height:auto;padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}[role=button]{cursor:pointer}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-weight:400;line-height:1;color:#777}.h1,.h2,.h3,h1,h2,h3{margin-top:20px;margin-bottom:10px}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small{font-size:65%}.h4,.h5,.h6,h4,h5,h6{margin-top:10px;margin-bottom:10px}.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-size:75%}.h1,h1{font-size:36px}.h2,h2{font-size:30px}.h3,h3{font-size:24px}.h4,h4{font-size:18px}.h5,h5{font-size:14px}.h6,h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}.small,small{font-size:85%}.mark,mark{padding:.2em;background-color:#fcf8e3}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#337ab7}a.text-primary:hover{color:#286090}.text-success{color:#3c763d}a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#337ab7}a.bg-primary:hover{background-color:#286090}.bg-success{background-color:#dff0d8}a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:hover{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ol,ul{margin-top:0;margin-bottom:10px}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;margin-left:-5px;list-style:none}.list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}dl{margin-top:0;margin-bottom:20px}dd,dt{line-height:1.42857143}dt{font-weight:700}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[data-original-title],abbr[title]{cursor:help;border-bottom:1px dotted #777}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote ol:last-child,blockquote p:last-child,blockquote ul:last-child{margin-bottom:0}blockquote .small,blockquote footer,blockquote small{display:block;font-size:80%;line-height:1.42857143;color:#777}blockquote .small:before,blockquote footer:before,blockquote small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;text-align:right;border-right:5px solid #eee;border-left:0}.blockquote-reverse .small:before,.blockquote-reverse footer:before,.blockquote-reverse small:before,blockquote.pull-right .small:before,blockquote.pull-right footer:before,blockquote.pull-right small:before{content:''}.blockquote-reverse .small:after,.blockquote-reverse footer:after,.blockquote-reverse small:after,blockquote.pull-right .small:after,blockquote.pull-right footer:after,blockquote.pull-right small:after{content:'\00A0 \2014'}address{margin-bottom:20px;font-style:normal;line-height:1.42857143}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.25);box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}kbd kbd{padding:0;font-size:100%;font-weight:700;-webkit-box-shadow:none;box-shadow:none}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857143;color:#333;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{margin-right:-15px;margin-left:-15px}.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.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-md-1,.col-md-10,.col-md-11,.col-md-12,.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-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.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-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}table{background-color:transparent}caption{padding-top:8px;padding-bottom:8px;color:#777;text-align:left}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:20px}.table>tbody>tr>td,.table>tbody>tr>th,.table>tfoot>tr>td,.table>tfoot>tr>th,.table>thead>tr>td,.table>thead>tr>th{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>td,.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>td,.table>thead:first-child>tr:first-child>th{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>tbody>tr>td,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>td,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>thead>tr>th{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>tbody>tr>td,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>td,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border:1px solid #ddd}.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border-bottom-width:2px}.table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}.table-hover>tbody>tr:hover{background-color:#f5f5f5}table col[class*=col-]{position:static;display:table-column;float:none}table td[class*=col-],table th[class*=col-]{position:static;display:table-cell;float:none}.table>tbody>tr.active>td,.table>tbody>tr.active>th,.table>tbody>tr>td.active,.table>tbody>tr>th.active,.table>tfoot>tr.active>td,.table>tfoot>tr.active>th,.table>tfoot>tr>td.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>thead>tr.active>th,.table>thead>tr>td.active,.table>thead>tr>th.active{background-color:#f5f5f5}.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr.active:hover>th,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover{background-color:#e8e8e8}.table>tbody>tr.success>td,.table>tbody>tr.success>th,.table>tbody>tr>td.success,.table>tbody>tr>th.success,.table>tfoot>tr.success>td,.table>tfoot>tr.success>th,.table>tfoot>tr>td.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>thead>tr.success>th,.table>thead>tr>td.success,.table>thead>tr>th.success{background-color:#dff0d8}.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover{background-color:#d0e9c6}.table>tbody>tr.info>td,.table>tbody>tr.info>th,.table>tbody>tr>td.info,.table>tbody>tr>th.info,.table>tfoot>tr.info>td,.table>tfoot>tr.info>th,.table>tfoot>tr>td.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>thead>tr.info>th,.table>thead>tr>td.info,.table>thead>tr>th.info{background-color:#d9edf7}.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr.info:hover>th,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover{background-color:#c4e3f3}.table>tbody>tr.warning>td,.table>tbody>tr.warning>th,.table>tbody>tr>td.warning,.table>tbody>tr>th.warning,.table>tfoot>tr.warning>td,.table>tfoot>tr.warning>th,.table>tfoot>tr>td.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>thead>tr.warning>th,.table>thead>tr>td.warning,.table>thead>tr>th.warning{background-color:#fcf8e3}.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover{background-color:#faf2cc}.table>tbody>tr.danger>td,.table>tbody>tr.danger>th,.table>tbody>tr>td.danger,.table>tbody>tr>th.danger,.table>tfoot>tr.danger>td,.table>tfoot>tr.danger>th,.table>tfoot>tr>td.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>thead>tr.danger>th,.table>thead>tr>td.danger,.table>thead>tr>th.danger{background-color:#f2dede}.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover{background-color:#ebcccc}.table-responsive{min-height:.01%;overflow-x:auto}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>td,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>thead>tr>th{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:700}input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=checkbox],input[type=radio]{margin:4px 0 0;margin-top:1px \9;line-height:normal}input[type=file]{display:block}input[type=range]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type=file]:focus,input[type=checkbox]:focus,input[type=radio]:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:7px;font-size:14px;line-height:1.42857143;color:#555}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.42857143;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:#eee;opacity:1}.form-control[disabled],fieldset[disabled] .form-control{cursor:not-allowed}textarea.form-control{height:auto}input[type=search]{-webkit-appearance:none}@media screen and (-webkit-min-device-pixel-ratio:0){input[type=date],input[type=time],input[type=datetime-local],input[type=month]{line-height:34px}.input-group-sm input[type=date],.input-group-sm input[type=time],.input-group-sm input[type=datetime-local],.input-group-sm input[type=month],input[type=date].input-sm,input[type=time].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm{line-height:30px}.input-group-lg input[type=date],.input-group-lg input[type=time],.input-group-lg input[type=datetime-local],.input-group-lg input[type=month],input[type=date].input-lg,input[type=time].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg{line-height:46px}}.form-group{margin-bottom:15px}.checkbox,.radio{position:relative;display:block;margin-top:10px;margin-bottom:10px}.checkbox label,.radio label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox],.radio input[type=radio],.radio-inline input[type=radio]{position:absolute;margin-top:4px \9;margin-left:-20px}.checkbox+.checkbox,.radio+.radio{margin-top:-5px}.checkbox-inline,.radio-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;vertical-align:middle;cursor:pointer}.checkbox-inline+.checkbox-inline,.radio-inline+.radio-inline{margin-top:0;margin-left:10px}fieldset[disabled] input[type=checkbox],fieldset[disabled] input[type=radio],input[type=checkbox].disabled,input[type=checkbox][disabled],input[type=radio].disabled,input[type=radio][disabled]{cursor:not-allowed}.checkbox-inline.disabled,.radio-inline.disabled,fieldset[disabled] .checkbox-inline,fieldset[disabled] .radio-inline{cursor:not-allowed}.checkbox.disabled label,.radio.disabled label,fieldset[disabled] .checkbox label,fieldset[disabled] .radio label{cursor:not-allowed}.form-control-static{min-height:34px;padding-top:7px;padding-bottom:7px;margin-bottom:0}.form-control-static.input-lg,.form-control-static.input-sm{padding-right:0;padding-left:0}.input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm{height:30px;line-height:30px}select[multiple].input-sm,textarea.input-sm{height:auto}.form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.form-group-sm .form-control{height:30px;line-height:30px}select[multiple].form-group-sm .form-control,textarea.form-group-sm .form-control{height:auto}.form-group-sm .form-control-static{height:30px;min-height:32px;padding:5px 10px;font-size:12px;line-height:1.5}.input-lg{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-lg{height:46px;line-height:46px}select[multiple].input-lg,textarea.input-lg{height:auto}.form-group-lg .form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.form-group-lg .form-control{height:46px;line-height:46px}select[multiple].form-group-lg .form-control,textarea.form-group-lg .form-control{height:auto}.form-group-lg .form-control-static{height:46px;min-height:38px;padding:10px 16px;font-size:18px;line-height:1.3333333}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center;pointer-events:none}.input-lg+.form-control-feedback{width:46px;height:46px;line-height:46px}.input-sm+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .checkbox,.has-success .checkbox-inline,.has-success .control-label,.has-success .help-block,.has-success .radio,.has-success .radio-inline,.has-success.checkbox label,.has-success.checkbox-inline label,.has-success.radio label,.has-success.radio-inline label{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;background-color:#dff0d8;border-color:#3c763d}.has-success .form-control-feedback{color:#3c763d}.has-warning .checkbox,.has-warning .checkbox-inline,.has-warning .control-label,.has-warning .help-block,.has-warning .radio,.has-warning .radio-inline,.has-warning.checkbox label,.has-warning.checkbox-inline label,.has-warning.radio label,.has-warning.radio-inline label{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;background-color:#fcf8e3;border-color:#8a6d3b}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .checkbox,.has-error .checkbox-inline,.has-error .control-label,.has-error .help-block,.has-error .radio,.has-error .radio-inline,.has-error.checkbox label,.has-error.checkbox-inline label,.has-error.radio label,.has-error.radio-inline label{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;background-color:#f2dede;border-color:#a94442}.has-error .form-control-feedback{color:#a94442}.has-feedback label~.form-control-feedback{top:25px}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-static{display:inline-block}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .form-control,.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .checkbox,.form-inline .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .checkbox label,.form-inline .radio label{padding-left:0}.form-inline .checkbox input[type=checkbox],.form-inline .radio input[type=radio]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .checkbox,.form-horizontal .checkbox-inline,.form-horizontal .radio,.form-horizontal .radio-inline{padding-top:7px;margin-top:0;margin-bottom:0}.form-horizontal .checkbox,.form-horizontal .radio{min-height:27px}.form-horizontal .form-group{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.form-horizontal .control-label{padding-top:7px;margin-bottom:0;text-align:right}}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:14.33px}}@media (min-width:768px){.form-horizontal .form-group-sm .control-label{padding-top:6px}}.btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:400;line-height:1.42857143;text-align:center;white-space:nowrap;vertical-align:middle;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-image:none;border:1px solid transparent;border-radius:4px}.btn.active.focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn:active:focus,.btn:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn.focus,.btn:focus,.btn:hover{color:#333;text-decoration:none}.btn.active,.btn:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{pointer-events:none;cursor:not-allowed;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none;opacity:.65}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default.active,.btn-default.focus,.btn-default:active,.btn-default:focus,.btn-default:hover,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{background-image:none}.btn-default.disabled,.btn-default.disabled.active,.btn-default.disabled.focus,.btn-default.disabled:active,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled],.btn-default[disabled].active,.btn-default[disabled].focus,.btn-default[disabled]:active,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default,fieldset[disabled] .btn-default.active,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:active,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#337ab7;border-color:#2e6da4}.btn-primary.active,.btn-primary.focus,.btn-primary:active,.btn-primary:focus,.btn-primary:hover,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled,.btn-primary.disabled.active,.btn-primary.disabled.focus,.btn-primary.disabled:active,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled],.btn-primary[disabled].active,.btn-primary[disabled].focus,.btn-primary[disabled]:active,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary,fieldset[disabled] .btn-primary.active,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:active,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#337ab7;border-color:#2e6da4}.btn-primary .badge{color:#337ab7;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success.active,.btn-success.focus,.btn-success:active,.btn-success:focus,.btn-success:hover,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled,.btn-success.disabled.active,.btn-success.disabled.focus,.btn-success.disabled:active,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled],.btn-success[disabled].active,.btn-success[disabled].focus,.btn-success[disabled]:active,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success,fieldset[disabled] .btn-success.active,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:active,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info.active,.btn-info.focus,.btn-info:active,.btn-info:focus,.btn-info:hover,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{background-image:none}.btn-info.disabled,.btn-info.disabled.active,.btn-info.disabled.focus,.btn-info.disabled:active,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled],.btn-info[disabled].active,.btn-info[disabled].focus,.btn-info[disabled]:active,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info,fieldset[disabled] .btn-info.active,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:active,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning.active,.btn-warning.focus,.btn-warning:active,.btn-warning:focus,.btn-warning:hover,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled,.btn-warning.disabled.active,.btn-warning.disabled.focus,.btn-warning.disabled:active,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled],.btn-warning[disabled].active,.btn-warning[disabled].focus,.btn-warning[disabled]:active,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning,fieldset[disabled] .btn-warning.active,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:active,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger.active,.btn-danger.focus,.btn-danger:active,.btn-danger:focus,.btn-danger:hover,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled,.btn-danger.disabled.active,.btn-danger.disabled.focus,.btn-danger.disabled:active,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled],.btn-danger[disabled].active,.btn-danger[disabled].focus,.btn-danger[disabled]:active,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger,fieldset[disabled] .btn-danger.active,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:active,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{font-weight:400;color:#337ab7;border-radius:0}.btn-link,.btn-link.active,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:active,.btn-link:focus,.btn-link:hover{border-color:transparent}.btn-link:focus,.btn-link:hover{color:#23527c;text-decoration:underline;background-color:transparent}.btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{color:#777;text-decoration:none}.btn-group-lg>.btn,.btn-lg{padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.btn-group-sm>.btn,.btn-sm{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-group-xs>.btn,.btn-xs{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-duration:.35s;-o-transition-duration:.35s;transition-duration:.35s;-webkit-transition-property:height,visibility;-o-transition-property:height,visibility;transition-property:height,visibility}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown,.dropup{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;font-size:14px;text-align:left;list-style:none;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.42857143;color:#333;white-space:nowrap}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{color:#262626;text-decoration:none;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{color:#fff;text-decoration:none;background-color:#337ab7;outline:0}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{color:#777}.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{right:0;left:auto}.dropdown-menu-left{right:auto;left:0}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#777;white-space:nowrap}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{content:"";border-top:0;border-bottom:4px solid}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{right:auto;left:0}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;float:left}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-bottom-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-right:12px;padding-left:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-left-radius:0;border-top-right-radius:0;border-bottom-left-radius:4px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-top-right-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{display:table-cell;float:none;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle=buttons]>.btn input[type=checkbox],[data-toggle=buttons]>.btn input[type=radio],[data-toggle=buttons]>.btn-group>.btn input[type=checkbox],[data-toggle=buttons]>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*=col-]{float:none;padding-right:0;padding-left:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn,textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn,textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn{height:auto}.input-group .form-control,.input-group-addon,.input-group-btn{display:table-cell}.input-group .form-control:not(:first-child):not(:last-child),.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:400;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type=checkbox],.input-group-addon input[type=radio]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn-group:not(:last-child)>.btn,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:active,.input-group-btn>.btn:focus,.input-group-btn>.btn:hover{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{margin-left:-1px}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:focus,.nav>li>a:hover{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:focus,.nav>li.disabled>a:hover{color:#777;text-decoration:none;cursor:not-allowed;background-color:transparent}.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{background-color:#eee;border-color:#337ab7}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:focus,.nav-tabs>li.active>a:hover{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:focus,.nav-pills>li.active>a:hover{color:#fff;background-color:#337ab7}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:4px}}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{padding-right:15px;padding-left:15px;overflow-x:visible;-webkit-overflow-scrolling:touch;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1)}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;-webkit-box-shadow:none;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse{padding-right:0;padding-left:0}}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:340px}@media (max-device-width:480px)and (orientation:landscape){.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:200px}}.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.navbar-fixed-bottom,.navbar-fixed-top{position:fixed;right:0;left:0;z-index:1030}@media (min-width:768px){.navbar-fixed-bottom,.navbar-fixed-top{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;height:50px;padding:15px 15px;font-size:18px;line-height:20px}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-brand>img{display:block}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;padding:9px 10px;margin-top:8px;margin-right:15px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-nav .open .dropdown-menu .dropdown-header,.navbar-nav .open .dropdown-menu>li>a{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:focus,.navbar-nav .open .dropdown-menu>li>a:hover{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}.navbar-form{padding:10px 15px;margin-top:8px;margin-right:-15px;margin-bottom:8px;margin-left:-15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1)}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .form-control-static{display:inline-block}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .form-control,.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .checkbox,.navbar-form .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .checkbox label,.navbar-form .radio label{padding-left:0}.navbar-form .checkbox input[type=checkbox],.navbar-form .radio input[type=radio]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}@media (min-width:768px){.navbar-form{width:auto;padding-top:0;padding-bottom:0;margin-right:0;margin-left:0;border:0;-webkit-box-shadow:none;box-shadow:none}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-left-radius:0;border-top-right-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{margin-bottom:0;border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-right:15px;margin-left:15px}}@media (min-width:768px){.navbar-left{float:left!important}.navbar-right{float:right!important;margin-right:-15px}.navbar-right~.navbar-right{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:focus,.navbar-default .navbar-brand:hover{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:focus,.navbar-default .navbar-nav>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:focus,.navbar-default .navbar-nav>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:focus,.navbar-default .navbar-nav>.disabled>a:hover{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:focus,.navbar-default .navbar-toggle:hover{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:focus,.navbar-default .navbar-nav>.open>a:hover{color:#555;background-color:#e7e7e7}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:focus,.navbar-default .btn-link:hover{color:#333}.navbar-default .btn-link[disabled]:focus,.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:focus,fieldset[disabled] .navbar-default .btn-link:hover{color:#ccc}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#9d9d9d}.navbar-inverse .navbar-brand:focus,.navbar-inverse .navbar-brand:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a:focus,.navbar-inverse .navbar-nav>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:focus,.navbar-inverse .navbar-nav>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:focus,.navbar-inverse .navbar-nav>.disabled>a:hover{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:focus,.navbar-inverse .navbar-toggle:hover{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:focus,.navbar-inverse .navbar-nav>.open>a:hover{color:#fff;background-color:#080808}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#9d9d9d}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#9d9d9d}.navbar-inverse .btn-link:focus,.navbar-inverse .btn-link:hover{color:#fff}.navbar-inverse .btn-link[disabled]:focus,.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:focus,fieldset[disabled] .navbar-inverse .btn-link:hover{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{padding:0 5px;color:#ccc;content:"/\00a0"}.breadcrumb>.active{color:#777}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;margin-left:-1px;line-height:1.42857143;color:#337ab7;text-decoration:none;background-color:#fff;border:1px solid #ddd}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-top-left-radius:4px;border-bottom-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pagination>li>a:focus,.pagination>li>a:hover,.pagination>li>span:focus,.pagination>li>span:hover{color:#23527c;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>a:focus,.pagination>.active>a:hover,.pagination>.active>span,.pagination>.active>span:focus,.pagination>.active>span:hover{z-index:2;color:#fff;cursor:default;background-color:#337ab7;border-color:#337ab7}.pagination>.disabled>a,.pagination>.disabled>a:focus,.pagination>.disabled>a:hover,.pagination>.disabled>span,.pagination>.disabled>span:focus,.pagination>.disabled>span:hover{color:#777;cursor:not-allowed;background-color:#fff;border-color:#ddd}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-top-left-radius:6px;border-bottom-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-top-left-radius:3px;border-bottom-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px}.pager{padding-left:0;margin:20px 0;text-align:center;list-style:none}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:focus,.pager li>a:hover{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:focus,.pager .disabled>a:hover,.pager .disabled>span{color:#777;cursor:not-allowed;background-color:#fff}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}a.label:focus,a.label:hover{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#777}.label-default[href]:focus,.label-default[href]:hover{background-color:#5e5e5e}.label-primary{background-color:#337ab7}.label-primary[href]:focus,.label-primary[href]:hover{background-color:#286090}.label-success{background-color:#5cb85c}.label-success[href]:focus,.label-success[href]:hover{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:focus,.label-info[href]:hover{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:focus,.label-warning[href]:hover{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:focus,.label-danger[href]:hover{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;background-color:#777;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-group-xs>.btn .badge,.btn-xs .badge{top:0;padding:1px 5px}a.badge:focus,a.badge:hover{color:#fff;text-decoration:none;cursor:pointer}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#337ab7;background-color:#fff}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding:30px 15px;margin-bottom:30px;color:inherit;background-color:#eee}.jumbotron .h1,.jumbotron h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.jumbotron>hr{border-top-color:#d5d5d5}.container .jumbotron,.container-fluid .jumbotron{border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding:48px 0}.container .jumbotron,.container-fluid .jumbotron{padding-right:60px;padding-left:60px}.jumbotron .h1,.jumbotron h1{font-size:63px}}.thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:border .2s ease-in-out;-o-transition:border .2s ease-in-out;transition:border .2s ease-in-out}.thumbnail a>img,.thumbnail>img{margin-right:auto;margin-left:auto}a.thumbnail.active,a.thumbnail:focus,a.thumbnail:hover{border-color:#337ab7}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:700}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#337ab7;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress-bar-striped,.progress-striped .progress-bar{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;background-size:40px 40px}.progress-bar.active,.progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.media{margin-top:15px}.media:first-child{margin-top:0}.media,.media-body{overflow:hidden;zoom:1}.media-body{width:10000px}.media-object{display:block}.media-right,.media>.pull-right{padding-left:10px}.media-left,.media>.pull-left{padding-right:10px}.media-body,.media-left,.media-right{display:table-cell;vertical-align:top}.media-middle{vertical-align:middle}.media-bottom{vertical-align:bottom}.media-heading{margin-top:0;margin-bottom:5px}.media-list{padding-left:0;list-style:none}.list-group{padding-left:0;margin-bottom:20px}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}a.list-group-item{color:#555}a.list-group-item .list-group-item-heading{color:#333}a.list-group-item:focus,a.list-group-item:hover{color:#555;text-decoration:none;background-color:#f5f5f5}.list-group-item.disabled,.list-group-item.disabled:focus,.list-group-item.disabled:hover{color:#777;cursor:not-allowed;background-color:#eee}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{z-index:2;color:#fff;background-color:#337ab7;border-color:#337ab7}.list-group-item.active .list-group-item-heading,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:focus .list-group-item-text,.list-group-item.active:hover .list-group-item-text{color:#c7ddef}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:focus,a.list-group-item-success:hover{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:focus,a.list-group-item-success.active:hover{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:focus,a.list-group-item-info:hover{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:focus,a.list-group-item-info.active:hover{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:focus,a.list-group-item-warning:hover{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:focus,a.list-group-item-warning.active:hover{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:focus,a.list-group-item-danger:hover{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:focus,a.list-group-item-danger.active:hover{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05);box-shadow:0 1px 1px rgba(0,0,0,.05)}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-left-radius:3px;border-top-right-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.panel-title>.small,.panel-title>.small>a,.panel-title>a,.panel-title>small,.panel-title>small>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group,.panel>.panel-collapse>.list-group{margin-bottom:0}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-left-radius:3px;border-top-right-radius:3px}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.list-group+.panel-footer{border-top-width:0}.panel>.panel-collapse>.table,.panel>.table,.panel>.table-responsive>.table{margin-bottom:0}.panel>.panel-collapse>.table caption,.panel>.table caption,.panel>.table-responsive>.table caption{padding-right:15px;padding-left:15px}.panel>.table-responsive:first-child>.table:first-child,.panel>.table:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table:first-child>thead:first-child>tr:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table-responsive:last-child>.table:last-child,.panel>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child td,.panel>.table>tbody:first-child>tr:first-child th{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{margin-bottom:0;border:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.list-group,.panel-group .panel-heading+.panel-collapse>.panel-body{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#337ab7}.panel-primary>.panel-heading{color:#fff;background-color:#337ab7;border-color:#337ab7}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#337ab7}.panel-primary>.panel-heading .badge{color:#337ab7;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#337ab7}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;filter:alpha(opacity=20);opacity:.2}.close:focus,.close:hover{color:#000;text-decoration:none;cursor:pointer;filter:alpha(opacity=50);opacity:.5}button.close{-webkit-appearance:none;padding:0;cursor:pointer;background:0 0;border:0}.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transition:-webkit-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out;-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);-o-transform:translate(0,-25%);transform:translate(0,-25%)}.modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;outline:0;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5)}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{filter:alpha(opacity=0);opacity:0}.modal-backdrop.in{filter:alpha(opacity=50);opacity:.5}.modal-header{min-height:16.43px;padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,.5);box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:12px;font-weight:400;line-height:1.4;filter:alpha(opacity=0);opacity:0}.tooltip.in{filter:alpha(opacity=90);opacity:.9}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;text-decoration:none;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{right:5px;bottom:0;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{bottom:0;left:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-left .tooltip-arrow{top:0;right:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;left:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;font-weight:400;line-height:1.42857143;text-align:left;white-space:normal;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2)}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow{border-width:11px}.popover>.arrow:after{content:"";border-width:10px}.popover.top>.arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,.25);border-bottom-width:0}.popover.top>.arrow:after{bottom:1px;margin-left:-10px;content:" ";border-top-color:#fff;border-bottom-width:0}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,.25);border-left-width:0}.popover.right>.arrow:after{bottom:-10px;left:1px;content:" ";border-right-color:#fff;border-left-width:0}.popover.bottom>.arrow{top:-11px;left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25)}.popover.bottom>.arrow:after{top:1px;margin-left:-10px;content:" ";border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}.popover.left>.arrow:after{right:1px;bottom:-10px;content:" ";border-right-width:0;border-left-color:#fff}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>a>img,.carousel-inner>.item>img{line-height:1}@media all and (transform-3d),(-webkit-transform-3d){.carousel-inner>.item{-webkit-transition:-webkit-transform .6s ease-in-out;-o-transition:-o-transform .6s ease-in-out;transition:transform .6s ease-in-out;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000;perspective:1000}.carousel-inner>.item.active.right,.carousel-inner>.item.next{left:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}.carousel-inner>.item.active.left,.carousel-inner>.item.prev{left:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}.carousel-inner>.item.active,.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right{left:0;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;bottom:0;left:0;width:15%;font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6);filter:alpha(opacity=50);opacity:.5}.carousel-control.left{background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,.0001)));background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);background-repeat:repeat-x}.carousel-control.right{right:0;left:auto;background-image:-webkit-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.0001)),to(rgba(0,0,0,.5)));background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);background-repeat:repeat-x}.carousel-control:focus,.carousel-control:hover{color:#fff;text-decoration:none;filter:alpha(opacity=90);outline:0;opacity:.9}.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{position:absolute;top:50%;z-index:5;display:inline-block}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{left:50%;margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{right:50%;margin-right:-10px}.carousel-control .icon-next,.carousel-control .icon-prev{width:20px;height:20px;margin-top:-10px;font-family:serif;line-height:1}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;padding-left:0;margin-left:-30%;text-align:center;list-style:none}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;cursor:pointer;background-color:#000 \9;background-color:rgba(0,0,0,0);border:1px solid #fff;border-radius:10px}.carousel-indicators .active{width:12px;height:12px;margin:0;background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{width:30px;height:30px;margin-top:-15px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-15px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-15px}.carousel-caption{right:20%;left:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.btn-group-vertical>.btn-group:after,.btn-group-vertical>.btn-group:before,.btn-toolbar:after,.btn-toolbar:before,.clearfix:after,.clearfix:before,.container-fluid:after,.container-fluid:before,.container:after,.container:before,.dl-horizontal dd:after,.dl-horizontal dd:before,.form-horizontal .form-group:after,.form-horizontal .form-group:before,.modal-footer:after,.modal-footer:before,.nav:after,.nav:before,.navbar-collapse:after,.navbar-collapse:before,.navbar-header:after,.navbar-header:before,.navbar:after,.navbar:before,.pager:after,.pager:before,.panel-body:after,.panel-body:before,.row:after,.row:before{display:table;content:" "}.btn-group-vertical>.btn-group:after,.btn-toolbar:after,.clearfix:after,.container-fluid:after,.container:after,.dl-horizontal dd:after,.form-horizontal .form-group:after,.modal-footer:after,.nav:after,.navbar-collapse:after,.navbar-header:after,.navbar:after,.pager:after,.panel-body:after,.row:after{clear:both}.center-block{display:block;margin-right:auto;margin-left:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none!important}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-lg,.visible-md,.visible-sm,.visible-xs{display:none!important}.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block{display:none!important}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table}tr.visible-xs{display:table-row!important}td.visible-xs,th.visible-xs{display:table-cell!important}}@media (max-width:767px){.visible-xs-block{display:block!important}}@media (max-width:767px){.visible-xs-inline{display:inline!important}}@media (max-width:767px){.visible-xs-inline-block{display:inline-block!important}}@media (min-width:768px)and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table}tr.visible-sm{display:table-row!important}td.visible-sm,th.visible-sm{display:table-cell!important}}@media (min-width:768px)and (max-width:991px){.visible-sm-block{display:block!important}}@media (min-width:768px)and (max-width:991px){.visible-sm-inline{display:inline!important}}@media (min-width:768px)and (max-width:991px){.visible-sm-inline-block{display:inline-block!important}}@media (min-width:992px)and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table}tr.visible-md{display:table-row!important}td.visible-md,th.visible-md{display:table-cell!important}}@media (min-width:992px)and (max-width:1199px){.visible-md-block{display:block!important}}@media (min-width:992px)and (max-width:1199px){.visible-md-inline{display:inline!important}}@media (min-width:992px)and (max-width:1199px){.visible-md-inline-block{display:inline-block!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table}tr.visible-lg{display:table-row!important}td.visible-lg,th.visible-lg{display:table-cell!important}}@media (min-width:1200px){.visible-lg-block{display:block!important}}@media (min-width:1200px){.visible-lg-inline{display:inline!important}}@media (min-width:1200px){.visible-lg-inline-block{display:inline-block!important}}@media (max-width:767px){.hidden-xs{display:none!important}}@media (min-width:768px)and (max-width:991px){.hidden-sm{display:none!important}}@media (min-width:992px)and (max-width:1199px){.hidden-md{display:none!important}}@media (min-width:1200px){.hidden-lg{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table}tr.visible-print{display:table-row!important}td.visible-print,th.visible-print{display:table-cell!important}}.visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}}.visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}}.visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}}@media print{.hidden-print{display:none!important}}</style>
<style type="text/css">
pre { line-height: 125%; }
td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
.highlight .hll { background-color: #ffffcc }
.highlight { background: #f8f8f8; }
.highlight .c { color: #3D7B7B; font-style: italic } /* Comment */
.highlight .err { border: 1px solid #FF0000 } /* Error */
.highlight .k { color: #008000; font-weight: bold } /* Keyword */
.highlight .o { color: #666666 } /* Operator */
.highlight .ch { color: #3D7B7B; font-style: italic } /* Comment.Hashbang */
.highlight .cm { color: #3D7B7B; font-style: italic } /* Comment.Multiline */
.highlight .cp { color: #9C6500 } /* Comment.Preproc */
.highlight .cpf { color: #3D7B7B; font-style: italic } /* Comment.PreprocFile */
.highlight .c1 { color: #3D7B7B; font-style: italic } /* Comment.Single */
.highlight .cs { color: #3D7B7B; font-style: italic } /* Comment.Special */
.highlight .gd { color: #A00000 } /* Generic.Deleted */
.highlight .ge { font-style: italic } /* Generic.Emph */
.highlight .gr { color: #E40000 } /* Generic.Error */
.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */
.highlight .gi { color: #008400 } /* Generic.Inserted */
.highlight .go { color: #717171 } /* Generic.Output */
.highlight .gp { color: #000080; font-weight: bold } /* Generic.Prompt */
.highlight .gs { font-weight: bold } /* Generic.Strong */
.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */
.highlight .gt { color: #0044DD } /* Generic.Traceback */
.highlight .kc { color: #008000; font-weight: bold } /* Keyword.Constant */
.highlight .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */
.highlight .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */
.highlight .kp { color: #008000 } /* Keyword.Pseudo */
.highlight .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */
.highlight .kt { color: #B00040 } /* Keyword.Type */
.highlight .m { color: #666666 } /* Literal.Number */
.highlight .s { color: #BA2121 } /* Literal.String */
.highlight .na { color: #687822 } /* Name.Attribute */
.highlight .nb { color: #008000 } /* Name.Builtin */
.highlight .nc { color: #0000FF; font-weight: bold } /* Name.Class */
.highlight .no { color: #880000 } /* Name.Constant */
.highlight .nd { color: #AA22FF } /* Name.Decorator */
.highlight .ni { color: #717171; font-weight: bold } /* Name.Entity */
.highlight .ne { color: #CB3F38; font-weight: bold } /* Name.Exception */
.highlight .nf { color: #0000FF } /* Name.Function */
.highlight .nl { color: #767600 } /* Name.Label */
.highlight .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */
.highlight .nt { color: #008000; font-weight: bold } /* Name.Tag */
.highlight .nv { color: #19177C } /* Name.Variable */
.highlight .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */
.highlight .w { color: #bbbbbb } /* Text.Whitespace */
.highlight .mb { color: #666666 } /* Literal.Number.Bin */
.highlight .mf { color: #666666 } /* Literal.Number.Float */
.highlight .mh { color: #666666 } /* Literal.Number.Hex */
.highlight .mi { color: #666666 } /* Literal.Number.Integer */
.highlight .mo { color: #666666 } /* Literal.Number.Oct */
.highlight .sa { color: #BA2121 } /* Literal.String.Affix */
.highlight .sb { color: #BA2121 } /* Literal.String.Backtick */
.highlight .sc { color: #BA2121 } /* Literal.String.Char */
.highlight .dl { color: #BA2121 } /* Literal.String.Delimiter */
.highlight .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */
.highlight .s2 { color: #BA2121 } /* Literal.String.Double */
.highlight .se { color: #AA5D1F; font-weight: bold } /* Literal.String.Escape */
.highlight .sh { color: #BA2121 } /* Literal.String.Heredoc */
.highlight .si { color: #A45A77; font-weight: bold } /* Literal.String.Interpol */
.highlight .sx { color: #008000 } /* Literal.String.Other */
.highlight .sr { color: #A45A77 } /* Literal.String.Regex */
.highlight .s1 { color: #BA2121 } /* Literal.String.Single */
.highlight .ss { color: #19177C } /* Literal.String.Symbol */
.highlight .bp { color: #008000 } /* Name.Builtin.Pseudo */
.highlight .fm { color: #0000FF } /* Name.Function.Magic */
.highlight .vc { color: #19177C } /* Name.Variable.Class */
.highlight .vg { color: #19177C } /* Name.Variable.Global */
.highlight .vi { color: #19177C } /* Name.Variable.Instance */
.highlight .vm { color: #19177C } /* Name.Variable.Magic */
.highlight .il { color: #666666 } /* Literal.Number.Integer.Long */
</style>
<!-- Loading mathjax macro -->
<!-- Load mathjax -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.7/latest.js?config=TeX-AMS_CHTML-full,Safe"> </script>
<!-- MathJax configuration -->
<script type="text/x-mathjax-config">
init_mathjax = function() {
if (window.MathJax) {
// MathJax loaded
MathJax.Hub.Config({
TeX: {
equationNumbers: {
autoNumber: "AMS",
useLabelIds: true
}
},
tex2jax: {
inlineMath: [ ['$','$'], ["\\(","\\)"] ],
displayMath: [ ['$$','$$'], ["\\[","\\]"] ],
processEscapes: true,
processEnvironments: true
},
displayAlign: 'center',
CommonHTML: {
linebreaks: {
automatic: true
}
}
});
MathJax.Hub.Queue(["Typeset", MathJax.Hub]);
}
}
init_mathjax();
</script>
<!-- End of mathjax configuration -->
<style>
td.center, th.center {
text-align: center;
}
body {
overflow: visible;
font-size: 14px;
padding-top: 1em;
}
div#notebook {
overflow: visible;
border-top: none;
}
div#notebook-container {
width: 100%;
}
@media print {
div.cell {
display: block;
page-break-inside: avoid;
}
div.output_wrapper {
display: block;
page-break-inside: avoid;
}
div.output {
display: block;
page-break-inside: avoid;
}
}
div.prompt {
min-width: 21ex;
}
div.nbgrader_cell {
width: 100%;
}
div.nbgrader_cell .panel-heading {
padding: 0.4em 0.6em;
height: 37px;
}
div.nbgrader_cell .panel-heading a {
color: #BBBBBB;
}
div.nbgrader_cell .panel-footer {
padding: 0.4em 0.6em;
}
div.nbgrader_cell .panel-body {
padding: 0.4em;
}
.comment {
width: 100%;
margin-top: 0.5em;
}
div.nbgrader_cell .input_area {
background: white;
border: none;
}
.score {
color: black;
}
li.late-penalty {
color: #d2413a;
}
span.nbgrader-label {
line-height: 25px;
}
.save-icon {
margin-left: 1em;
top: 4px;
}
</style>
</head>
<body>
<a name="top"></a>
<div class="container">
<div class="panel panel-default">
<div class="panel-heading">
<h4>exercise_sheet_04 (Score: 100.0 / 100.0)</h4>
<div id="toc">
<ol>
<li><a href="#cell-c70fec7da167b7be">Test cell</a> (Score: 10.0 / 10.0)</li>
<li><a href="#comment-cell-ca4f5c3685b72c8a">Comment</a></li>
<li><a href="#cell-bdea40714e10d0e8">Test cell</a> (Score: 15.0 / 15.0)</li>
<li><a href="#cell-fbfc2607999d0c99">Test cell</a> (Score: 10.0 / 10.0)</li>
<li><a href="#cell-8c4b6c60ee96f037">Test cell</a> (Score: 10.0 / 10.0)</li>
<li><a href="#cell-a63274314d1b2a2d">Test cell</a> (Score: 5.0 / 5.0)</li>
<li><a href="#cell-9f544deda0526691">Test cell</a> (Score: 10.0 / 10.0)</li>
<li><a href="#cell-699454de327d56d5">Test cell</a> (Score: 5.0 / 5.0)</li>
<li><a href="#comment-cell-53c1bd894d6fe27d">Comment</a></li>
<li><a href="#cell-e1c80d8b59301b93">Test cell</a> (Score: 10.0 / 10.0)</li>
<li><a href="#cell-e4902309b9869f3d">Test cell</a> (Score: 10.0 / 10.0)</li>
<li><a href="#cell-e180b99ca699c610">Coding free-response</a> (Score: 15.0 / 15.0)</li>
</ol>
</div>
</div>
<div class="panel-body">
<div id="notebook" class="border-box-sizing">
<div class="container" id="notebook-container">
<body>
<div tabindex="-1" id="notebook" class="border-box-sizing">
<div class="container" id="notebook-container">
<div class="cell border-box-sizing text_cell rendered">
<div class="prompt input_prompt">
</div><div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h1 id="Exercise-sheet">Exercise sheet<a class="anchor-link" href="#Exercise-sheet">&#182;</a></h1><p>Some general remarks about the exercises:</p>
<ul>
<li>For your convenience functions from the lecture are included below. Feel free to reuse them without copying to the exercise solution box.</li>
<li>For each part of the exercise a solution box has been added, but you may insert additional boxes. Do not hesitate to add Markdown boxes for textual or LaTeX answers (via <code>Cell &gt; Cell Type &gt; Markdown</code>). But make sure to replace any part that says <code>YOUR CODE HERE</code> or <code>YOUR ANSWER HERE</code> and remove the <code>raise NotImplementedError()</code>.</li>
<li>Please make your code readable by humans (and not just by the Python interpreter): choose informative function and variable names and use consistent formatting. Feel free to check the <a href="https://www.python.org/dev/peps/pep-0008/">PEP 8 Style Guide for Python</a> for the widely adopted coding conventions or <a href="https://realpython.com/python-pep8/">this guide for explanation</a>.</li>
<li>Make sure that the full notebook runs without errors before submitting your work. This you can do by selecting <code>Kernel &gt; Restart &amp; Run All</code> in the jupyter menu.</li>
<li>For some exercises test cases have been provided in a separate cell in the form of <code>assert</code> statements. When run, a successful test will give no output, whereas a failed test will display an error message.</li>
<li>Each sheet has 100 points worth of exercises. Note that only the grades of sheets number 2, 4, 6, 8 count towards the course examination. Submitting sheets 1, 3, 5, 7 &amp; 9 is voluntary and their grades are just for feedback.</li>
</ul>
<p>Please fill in your name here:</p>
</div>
</div></div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[1]:</div><div class="inner_cell">
<div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="n">NAME</span> <span class="o">=</span> <span class="s2">&quot;Kees van Kempen&quot;</span>
<span class="n">NAMES_OF_COLLABORATORS</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
</pre></div>
</div>
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered">
<div class="prompt input_prompt">
</div><div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<hr>
</div>
</div></div>
<div class="cell border-box-sizing text_cell rendered">
<div class="prompt input_prompt">
</div><div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<p><strong>Exercise sheet 4</strong></p>
<p>Code from the lectures:</p>
</div>
</div></div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[2]:</div><div class="inner_cell">
<div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="kn">import</span> <span class="nn">numpy</span> <span class="k">as</span> <span class="nn">np</span>
<span class="kn">import</span> <span class="nn">matplotlib.pylab</span> <span class="k">as</span> <span class="nn">plt</span>
<span class="kn">import</span> <span class="nn">networkx</span> <span class="k">as</span> <span class="nn">nx</span>
<span class="n">rng</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">random</span><span class="o">.</span><span class="n">default_rng</span><span class="p">()</span>
<span class="o">%</span><span class="k">matplotlib</span> inline
<span class="k">def</span> <span class="nf">draw_transition_graph</span><span class="p">(</span><span class="n">P</span><span class="p">):</span>
<span class="c1"># construct a directed graph directly from the matrix</span>
<span class="n">graph</span> <span class="o">=</span> <span class="n">nx</span><span class="o">.</span><span class="n">DiGraph</span><span class="p">(</span><span class="n">P</span><span class="p">)</span>
<span class="c1"># draw it in such a way that edges in both directions are visible and have appropriate width</span>
<span class="n">nx</span><span class="o">.</span><span class="n">draw_networkx</span><span class="p">(</span><span class="n">graph</span><span class="p">,</span><span class="n">connectionstyle</span><span class="o">=</span><span class="s1">&#39;arc3, rad = 0.15&#39;</span><span class="p">,</span><span class="n">width</span><span class="o">=</span><span class="p">[</span><span class="mi">6</span><span class="o">*</span><span class="n">P</span><span class="p">[</span><span class="n">u</span><span class="p">,</span><span class="n">v</span><span class="p">]</span> <span class="k">for</span> <span class="n">u</span><span class="p">,</span><span class="n">v</span> <span class="ow">in</span> <span class="n">graph</span><span class="o">.</span><span class="n">edges</span><span class="p">()])</span>
<span class="k">def</span> <span class="nf">sample_next</span><span class="p">(</span><span class="n">P</span><span class="p">,</span><span class="n">current</span><span class="p">):</span>
<span class="k">return</span> <span class="n">rng</span><span class="o">.</span><span class="n">choice</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">P</span><span class="p">),</span><span class="n">p</span><span class="o">=</span><span class="n">P</span><span class="p">[</span><span class="n">current</span><span class="p">])</span>
<span class="k">def</span> <span class="nf">sample_chain</span><span class="p">(</span><span class="n">P</span><span class="p">,</span><span class="n">start</span><span class="p">,</span><span class="n">n</span><span class="p">):</span>
<span class="n">chain</span> <span class="o">=</span> <span class="p">[</span><span class="n">start</span><span class="p">]</span>
<span class="k">for</span> <span class="n">_</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">n</span><span class="p">):</span>
<span class="n">chain</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">sample_next</span><span class="p">(</span><span class="n">P</span><span class="p">,</span><span class="n">chain</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]))</span>
<span class="k">return</span> <span class="n">chain</span>
<span class="k">def</span> <span class="nf">stationary_distributions</span><span class="p">(</span><span class="n">P</span><span class="p">):</span>
<span class="n">eigenvalues</span><span class="p">,</span> <span class="n">eigenvectors</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">linalg</span><span class="o">.</span><span class="n">eig</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">transpose</span><span class="p">(</span><span class="n">P</span><span class="p">))</span>
<span class="c1"># make list of normalized eigenvectors for which the eigenvalue is very close to 1</span>
<span class="k">return</span> <span class="p">[</span><span class="n">eigenvectors</span><span class="p">[:,</span><span class="n">i</span><span class="p">]</span><span class="o">/</span><span class="n">np</span><span class="o">.</span><span class="n">sum</span><span class="p">(</span><span class="n">eigenvectors</span><span class="p">[:,</span><span class="n">i</span><span class="p">])</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">eigenvalues</span><span class="p">))</span>
<span class="k">if</span> <span class="n">np</span><span class="o">.</span><span class="n">abs</span><span class="p">(</span><span class="n">eigenvalues</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">-</span><span class="mi">1</span><span class="p">)</span> <span class="o">&lt;</span> <span class="mf">1e-10</span><span class="p">]</span>
<span class="k">def</span> <span class="nf">markov_sample_mean</span><span class="p">(</span><span class="n">P</span><span class="p">,</span><span class="n">start</span><span class="p">,</span><span class="n">function</span><span class="p">,</span><span class="n">n</span><span class="p">):</span>
<span class="n">total</span> <span class="o">=</span> <span class="mi">0</span>
<span class="n">state</span> <span class="o">=</span> <span class="n">start</span>
<span class="k">for</span> <span class="n">_</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">n</span><span class="p">):</span>
<span class="n">state</span> <span class="o">=</span> <span class="n">sample_next</span><span class="p">(</span><span class="n">P</span><span class="p">,</span><span class="n">state</span><span class="p">)</span>
<span class="n">total</span> <span class="o">+=</span> <span class="n">function</span><span class="p">[</span><span class="n">state</span><span class="p">]</span>
<span class="k">return</span> <span class="n">total</span><span class="o">/</span><span class="n">n</span>
</pre></div>
</div>
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered">
<div class="prompt input_prompt">
</div><div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h2 id="Markov-Chain-on-a-graph">Markov Chain on a graph<a class="anchor-link" href="#Markov-Chain-on-a-graph">&#182;</a></h2><p><strong>(50 points)</strong></p>
<p>The goal of this exercise is to use Metropolis-Hastings to sample a uniform vertex in a (finite, undirected) connected graph $G$. More precisely, the state space $\Gamma = \{0,\ldots,n-1\}$ is the set of vertices of a graph and the desired probability mass function is $\pi(x) = 1/n$ for $x\in\Gamma$. The set of edges is denoted $E = \{ \{x_1,y_1\}, \ldots,\{x_k,y_k\}\}$, $x_i,y_i\in\Gamma$, and we assume that there are no edges connecting a vertex with itself ($x_i\neq y_i$) and there is at most one edge between any pair of vertices. The <strong>neighbors</strong> of a vertex $x$ are the vertices $y\neq x$ such that $\{x,y\}\in E$. The <strong>degree</strong> $d_x$ of a vertex $x$ is its number of neighbours. An example is the following graph:</p>
</div>
</div></div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[3]:</div><div class="inner_cell">
<div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="n">edges</span> <span class="o">=</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">1</span><span class="p">,</span><span class="mi">2</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="mi">1</span><span class="p">,</span><span class="mi">4</span><span class="p">),(</span><span class="mi">2</span><span class="p">,</span><span class="mi">5</span><span class="p">),(</span><span class="mi">3</span><span class="p">,</span><span class="mi">4</span><span class="p">),(</span><span class="mi">4</span><span class="p">,</span><span class="mi">5</span><span class="p">),(</span><span class="mi">3</span><span class="p">,</span><span class="mi">6</span><span class="p">),(</span><span class="mi">4</span><span class="p">,</span><span class="mi">7</span><span class="p">),(</span><span class="mi">5</span><span class="p">,</span><span class="mi">8</span><span class="p">),(</span><span class="mi">6</span><span class="p">,</span><span class="mi">7</span><span class="p">),(</span><span class="mi">7</span><span class="p">,</span><span class="mi">8</span><span class="p">),(</span><span class="mi">5</span><span class="p">,</span><span class="mi">7</span><span class="p">),(</span><span class="mi">0</span><span class="p">,</span><span class="mi">4</span><span class="p">)]</span>
<span class="n">example_graph</span> <span class="o">=</span> <span class="n">nx</span><span class="o">.</span><span class="n">Graph</span><span class="p">(</span><span class="n">edges</span><span class="p">)</span>
<span class="n">nx</span><span class="o">.</span><span class="n">draw</span><span class="p">(</span><span class="n">example_graph</span><span class="p">,</span><span class="n">with_labels</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</pre></div>
</div>
</div>
</div>
<div class="output_wrapper">
<div class="output">
<div class="output_area">
<div class="prompt"></div>
<div class="output_png output_subarea ">
<img src="data:image/png;base64,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
"
>
</div>
</div>
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered">
<div class="prompt input_prompt">
</div><div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<p>A natural proposal transition matrix is $Q(x \to y) = \frac{1}{d_x} \mathbf{1}_{\{\{x,y\}\in E\}}$. In other words, when at $x$ the proposed next state is chosen uniformly among its neighbors.</p>
<p><strong>(a)</strong> Write a function <code>sample_proposal</code> that, given a (networkX) graph and node $x$, samples $y$ according to transition matrix $Q(x \to y)$. <em>Hint</em>: a useful Graph member function is <a href="https://networkx.org/documentation/stable/reference/classes/generated/networkx.Graph.neighbors.html"><code>neighbors</code></a>. <strong>(10 pts)</strong></p>
</div>
</div></div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[4]:</div><div class="panel panel-primary nbgrader_cell">
<a name="comment-cell-df840ef2dee49b9f"></a><div class="panel-heading"><span class="nbgrader-label">Student's answer</span><span class="pull-right"><a href="#top">(Top)</a></span></div>
<div class="panel-body">
<div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="k">def</span> <span class="nf">sample_proposal</span><span class="p">(</span><span class="n">graph</span><span class="p">,</span><span class="n">x</span><span class="p">):</span>
<span class="sd">&#39;&#39;&#39;Pick a random node y from the neighbors of x in graph with uniform</span>
<span class="sd"> probability, according to Q.&#39;&#39;&#39;</span>
<span class="n">y_list</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">fromiter</span><span class="p">(</span><span class="n">graph</span><span class="o">.</span><span class="n">neighbors</span><span class="p">(</span><span class="n">x</span><span class="p">),</span> <span class="n">dtype</span><span class="o">=</span><span class="nb">int</span><span class="p">)</span>
<span class="k">return</span> <span class="n">rng</span><span class="o">.</span><span class="n">choice</span><span class="p">(</span><span class="n">y_list</span><span class="p">)</span>
</pre></div>
</div>
</div>
</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[5]:</div><div class="panel panel-primary nbgrader_cell">
<a name="cell-c70fec7da167b7be"></a><div class="panel-heading"><span class="nbgrader-label">Grade cell: <code>cell-c70fec7da167b7be</code></span>
<span class="pull-right">
Score: 10.0 / 10.0 <a href="#top">(Top)</a>
</span></div>
<div class="panel-body">
<div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="kn">from</span> <span class="nn">nose.tools</span> <span class="kn">import</span> <span class="n">assert_almost_equal</span>
<span class="k">assert</span> <span class="n">sample_proposal</span><span class="p">(</span><span class="n">nx</span><span class="o">.</span><span class="n">Graph</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">0</span><span class="p">)</span><span class="o">==</span><span class="mi">1</span>
<span class="n">assert_almost_equal</span><span class="p">([</span><span class="n">sample_proposal</span><span class="p">(</span><span class="n">example_graph</span><span class="p">,</span><span class="mi">3</span><span class="p">)</span> <span class="k">for</span> <span class="n">_</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">1000</span><span class="p">)]</span><span class="o">.</span><span class="n">count</span><span class="p">(</span><span class="mi">4</span><span class="p">),</span><span class="mi">333</span><span class="p">,</span><span class="n">delta</span><span class="o">=</span><span class="mi">50</span><span class="p">)</span>
<span class="n">assert_almost_equal</span><span class="p">([</span><span class="n">sample_proposal</span><span class="p">(</span><span class="n">example_graph</span><span class="p">,</span><span class="mi">8</span><span class="p">)</span> <span class="k">for</span> <span class="n">_</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">1000</span><span class="p">)]</span><span class="o">.</span><span class="n">count</span><span class="p">(</span><span class="mi">5</span><span class="p">),</span><span class="mi">500</span><span class="p">,</span><span class="n">delta</span><span class="o">=</span><span class="mi">60</span><span class="p">)</span>
</pre></div>
</div>
</div>
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered">
<div class="prompt input_prompt">
</div><div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<p><strong>(b)</strong> Let us consider the Markov chain corresponding to the transition matrix $Q(x \to y)$. Produce a histogram of the states visited in the first ~20000 steps. Compare this to the exact stationary distribution found by the function <code>stationary_distributions</code> from the lecture applied to the transition matrix $Q$. <em>Hint</em>: another useful Graph member function is <a href="https://networkx.org/documentation/stable/reference/classes/generated/networkx.Graph.degree.html"><code>degree</code></a>. <strong>(15 pts)</strong></p>
</div>
</div></div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[6]:</div><div class="panel panel-primary nbgrader_cell">
<a name="comment-cell-ca4f5c3685b72c8a"></a><div class="panel-heading"><span class="nbgrader-label">Student's answer</span><span class="pull-right"><a href="#top">(Top)</a></span></div>
<div class="panel-body">
<div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="k">def</span> <span class="nf">chain_Q_histogram</span><span class="p">(</span><span class="n">graph</span><span class="p">,</span><span class="n">start</span><span class="p">,</span><span class="n">k</span><span class="p">):</span>
<span class="sd">&#39;&#39;&#39;Produce a histogram (a Numpy array of length equal to the number of </span>
<span class="sd"> nodes of graph) of the states visited (excluding initial state) by the </span>
<span class="sd"> Q Markov chain in the first k steps when started at start.&#39;&#39;&#39;</span>
<span class="n">n</span> <span class="o">=</span> <span class="n">graph</span><span class="o">.</span><span class="n">number_of_nodes</span><span class="p">()</span>
<span class="n">number_of_visits</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">zeros</span><span class="p">(</span><span class="n">n</span><span class="p">)</span>
<span class="n">x</span> <span class="o">=</span> <span class="n">start</span>
<span class="k">for</span> <span class="n">_</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">k</span><span class="p">):</span>
<span class="n">x</span> <span class="o">=</span> <span class="n">sample_proposal</span><span class="p">(</span><span class="n">graph</span><span class="p">,</span> <span class="n">x</span><span class="p">)</span>
<span class="n">number_of_visits</span><span class="p">[</span><span class="n">x</span><span class="p">]</span> <span class="o">+=</span> <span class="mi">1</span>
<span class="k">return</span> <span class="n">number_of_visits</span>
<span class="k">def</span> <span class="nf">transition_matrix_Q</span><span class="p">(</span><span class="n">graph</span><span class="p">):</span>
<span class="sd">&#39;&#39;&#39;Construct transition matrix Q from graph as two-dimensional Numpy array.&#39;&#39;&#39;</span>
<span class="n">n</span> <span class="o">=</span> <span class="n">example_graph</span><span class="o">.</span><span class="n">number_of_nodes</span><span class="p">()</span>
<span class="n">Q</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">zeros</span><span class="p">((</span><span class="n">n</span><span class="p">,</span> <span class="n">n</span><span class="p">))</span>
<span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">n</span><span class="p">):</span>
<span class="k">for</span> <span class="n">k</span> <span class="ow">in</span> <span class="n">example_graph</span><span class="o">.</span><span class="n">neighbors</span><span class="p">(</span><span class="n">x</span><span class="p">):</span>
<span class="n">Q</span><span class="p">[</span><span class="n">x</span><span class="p">,</span> <span class="n">k</span><span class="p">]</span> <span class="o">=</span> <span class="mi">1</span><span class="o">/</span><span class="n">example_graph</span><span class="o">.</span><span class="n">degree</span><span class="p">(</span><span class="n">x</span><span class="p">)</span>
<span class="k">return</span> <span class="n">Q</span>
<span class="c1"># Compare histogram and stationary distribution in a plot</span>
<span class="n">x_start</span> <span class="o">=</span> <span class="mi">1</span>
<span class="n">k</span> <span class="o">=</span> <span class="mi">100000</span>
<span class="n">plt</span><span class="o">.</span><span class="n">figure</span><span class="p">()</span>
<span class="n">plt</span><span class="o">.</span><span class="n">title</span><span class="p">(</span><span class="s2">&quot;Markov chain visiting density for uniform transition matrix $Q(x </span><span class="se">\\</span><span class="s2">to y)$&quot;</span><span class="p">)</span>
<span class="n">x_list</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="nb">range</span><span class="p">(</span><span class="n">example_graph</span><span class="o">.</span><span class="n">number_of_nodes</span><span class="p">()))</span>
<span class="n">plt</span><span class="o">.</span><span class="n">bar</span><span class="p">(</span><span class="n">x_list</span><span class="p">,</span> <span class="n">chain_Q_histogram</span><span class="p">(</span><span class="n">example_graph</span><span class="p">,</span> <span class="n">x_start</span><span class="p">,</span> <span class="n">k</span><span class="p">)</span><span class="o">/</span><span class="n">k</span><span class="p">,</span> <span class="n">color</span><span class="o">=</span><span class="s2">&quot;lightblue&quot;</span><span class="p">,</span> <span class="n">label</span><span class="o">=</span><span class="s2">&quot;sampled&quot;</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">scatter</span><span class="p">(</span><span class="n">x_list</span><span class="p">,</span> <span class="n">stationary_distributions</span><span class="p">(</span><span class="n">transition_matrix_Q</span><span class="p">(</span><span class="n">example_graph</span><span class="p">)),</span> <span class="n">s</span><span class="o">=</span><span class="mi">200</span><span class="p">,</span> <span class="n">marker</span><span class="o">=</span><span class="s2">&quot;_&quot;</span><span class="p">,</span> <span class="n">color</span><span class="o">=</span><span class="s2">&quot;black&quot;</span><span class="p">,</span> <span class="n">label</span><span class="o">=</span><span class="s2">&quot;theoretical&quot;</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">ylabel</span><span class="p">(</span><span class="s2">&quot;visiting density&quot;</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">xlabel</span><span class="p">(</span><span class="s2">&quot;node $x$&quot;</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">legend</span><span class="p">()</span>
<span class="n">plt</span><span class="o">.</span><span class="n">show</span><span class="p">()</span>
</pre></div>
</div>
</div>
<div class="panel-footer">
<div>
<b>Comments:</b> <p>Nice plot</p>
</div>
</div>
</div>
</div>
<div class="output_wrapper">
<div class="output">
<div class="output_area">
<div class="prompt"></div>
<div class="output_png output_subarea ">
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAa4AAAEaCAYAAABJrrP5AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAAsTAAALEwEAmpwYAAAq+0lEQVR4nO3de7xUdb3/8ddbBFHCvIDGTUEPgiJGhLcwJc3ylqjpSfNCnRIpSanMUMvMPL/j6ZCZZpIagpa3vCR5OF6TvBwvXCQFiURB2YKCeEQUL4Cf3x9rbRqG2XvW3uzZM4v9fj4e+zGz1vp+v+vzXXvNfGatWfNdigjMzMzyYrNqB2BmZtYUTlxmZpYrTlxmZpYrTlxmZpYrTlxmZpYrTlxmZpYrTlxmZpYrTlxmZpYrm0TikrRQ0ufzuH5JcyQNa9mIsrVbrkylYmtgXRMlXVLhdbRYfyT1k/SMpJWSzmqJNjcilnX9qqW4Wlst7c+V1hp9kfQfksZUch1F63ta0oAsZVs1caVv8B9K6lI0f5akkNS7NeOpBRExICKmVqPd4jLFCbhSsVVLYX9a4MPOucDUiOgcEVe0SIDNVPR/qmpc1fwQuSnsz1m338b0RVInSZdIejH9gPO8pDOKynQFTgN+25x1NNM44OIsBatxxLUAOKl+QtJAYMvmNCRp85YKyqyJdgbmNLVSK+yzzYoLWuf15NfsxtnY7SdpW+AxoA9wCLA1cDrwM0nfKCj6NWBKRLy3MetrosnA5yR1K1syIlrtD1gI/AiYVjBvHHABEEDvdN5Y4EVgJfA8cGxRGz8EngU+ADZP530+Xd6fJDmemE7vDkwF3iJ5QR9dsI7bi+L7FXBFA7H3Au4ElgHLgV8XxXROGtMK4FagY8Hycv35fJZ2iuJpNP6idn8IvJqufx5wSIkyNwIfAe8B75B8cl+3vFx8wGDgmXQdf0yXXdLIvvApYGZa/lbglvryQHfgjnRbLwDOKrEfNRRHyb4W9reBvv4AuKNoPVcCl5eI/S/AWuD9tP5uNLCfNbTPlmgzgH8pmJ5YsD0a3S8K+rVBXI29Bsq8nn6QznsX+B2wI/A/6XZ9ENi2RB822K6NrKPca6Kx/rbU/lxuu2R9LTZpezXU9yZuv/r/+a7Am8DggtfOG8CwBmK9AbgXUIn3k5lF+/gpBdM/B+4qmP4v4CGgfZn3fBU8/xjJ/tmtYN6ewBKgczr9ADCisTYjoiqJ6/PpzrY70A5YRPIpsTBxnZD+AzYDvpLuDN0K2phFkki2LGp3MPAKcFQ6vz0wHzgf6AAcnO4s/dJ1rgK2Tsu2SzfgfiXibgf8Dfgl0AnoCBxQ1K+n05i3A+YCowqWl+vP57O0UxRTo/EXbJN+6Tbuns7vDexavO4mTG8QX7ptXwbOTrf5ccCHNJC4Csp/Ny1/PLAauCTdRjOAC9NyuwAvAV/MEEeDfW1gWxf2rVv6f9kmnd4cWAp8uoE+TAW+WW4/a2ifLdFeucTV2P5V2K91cTU3tnTekyRvvj3S7TCT5MPGFiRvaj9p7DVeYl7xOsq9Jkr2t7H/cYn/aYPTGbdL1tdik7ZXhr5n2X6FfTk9jW8r4D5gXCPvGWtJk1zRshOANwumlwF7F0xvT5LgB5G81p4DPl7m/f6zJMm78EPHHODIgul7gO8UTF8BXNZYuxFRtYszbiQ5f3oo8HeST0/rRMQfI2JxRHwUEbcCLwD7FBS5IiIWxfqHsZ8lOdQcERH3pPP2I8nyl0bEhxHxF5INdVJEvEyycx2Tlj0YWBURT5aIdx+SHe0HEfFuRLwfEY8VlbkijflN4M8k/+Cs/cnUTtE2yhr/WpIXzx6S2kfEwoh4sYF1Z1Eqvv1I3uiviIjVEXEnyYu+IfuRvHFcnpa/HZiWLtsb6BoRF6f/s5eAa4ETM8TR7L5GxBLgEZIXMMBhwBsRMSND9Qb3s6J4i/fZpsi0X7RgbFdGxOsR8SrwKPBURDwTER8Ad5G8KTc1/nXryPgaL9Xfltqfs26XrNs88/Zq4vtBYSwl95+IuDZt4ymSD2AXNNDG54FFETGzxLIeQF3B9DYkibx+HcuBy0mO2M4DjoiIFWVifpwkiU+W1DGdN43kAANJBwJ7sP73aCvTdTeqmonrqyTnUW8oXijptPSCjbckvUVyOFl4QceiEm2OAv43Ih4umNed5B/1UcG8l0n+SQA38c8d9avpdCm9gJcjYk0jfXqt4PkqkhdF1v5kaqeEsvFHxHxgDHARsFTSLZK6N9JmOaXi6w68GulHplSp/1G9UuVfTh93BrrXb6t0e51P8mm20ThaoK+TgFPS56eQ7KdZlNvPoPHtkUVT9ouWiO31gufvlZjOuv6S68jwmijZ3xbcn7Nsl6Zs88zbq4nvB/XK7T/Xpu1cmSbLUrqyfnIqdCzJkWG9/wM6F5V5BhgInBcR6+KRdFh6cd16fyQfMuoPUL6VFl+XuEhOP/44Ij4sWEdnkiO7RlUlcaVHCwuAI0i+N1pH0s4k/4TRwPYRsQ0wG1BhEyWaHQXsJOmXBfMWA70kFfZzJ/55hPdHYJikniT/uIYS16K07SZ/MZqxP82VKf6IuCkiDuCfp2T/s4H2Sm3XLJYAPSQV9qlXE8vvlD4uAhZExDYFf50j4ogsgWxkX/8E7CVpT+Ao4A9Z1kn5/ayh9RVaRXKqp94nMq67NWJriobaWjd/Y18TLbQ/Z9kuLS5D38tuvxJtfozkaOh3wEWStmug6AJg56I+I+lQYAjwi4LZz5J8d1tfZiBwNcmHu39bL7CIeyNCxX8kX1/cQPK91fi0+DRgsKQvk1yUd3NRjLuTfC3TqGr+jusbwMER8W7R/E4k/6RlAJK+TvJJopyVJKd3DpR0aTrvKZLzx+dKap/+7uFLJBcCEBHLSL4TuJ7kzXJuA20/TfJme2l6KWlHSUOzdHIj+lNWlvjT3/UcLGkLki/t3yP5JFTK6yTfKTXVE2mboyVtLmk4jZ/6eAJYA5yVlj+uoPzTwNuSfihpS0ntJO0pae9yQWxsXyPifeB2kg8AT0fEK+XWmWp0P8toFvDVtL+HAQc1oW6lY2uKLPtQs18TLbg/t/Z2qVeu7815Df4KmBER3wT+m38miWL/nT5eImkrSVtIOoUkeZxQeBQFTCHdByX1IDlVOgr4NjBQ2X5DNpTkTMnwglOcfyP5UPYLYGzhEW/6P/00SaJrVNUSV0S8GBHTS8x/nqRTT5D8EweSnCvN0uZbJIelh0v6WXoIejRwOMmVNr8BTouIvxdUu4nk3G9DR1tExFqSnfpfSC7+qCP5UjVLTM3uT0bl4t8CuJSk/68BO5CceivlP4AfpacwzskaQLqdjyP5MPIWyWm2e0iugGqs/NdITkl8hfTIu2BbDyL5hPgGcB3w8QyhtERfJ5H8j7KeJiTjflbO2ST9fgs4meTob6O1UGxNUXYf2sjXRIvsz1XYLvXrLdf3Jr0G0w+Jh5EkFYDvkRzRnFxi3e+QXAI/kOTijvfS8gdFxJSi4jcAR0j6OEkSuywiJkfEKpIrCv89Q18fBQ4v/F4uPY35HLAwIv6nqMrRJL9BXFyuba3/NYNZy5D0FDA+Iq6vdixNIWknkguGPhERb1c7HrNKkfSvJEdrA9ILUIqX/z9gaURc3oLr7EByNee/RtGFZOl7xjciYnbZdpy4rCVIOojkZw5vkBwxjAd2ieRqvVxIz/1fRvITg38rV94s7yR9C5gTEY+00vr+neR94aSyhRvhX7FbS+kH3EZy9dSLwPE5S1qdSE7dvExy6sVskxcRV7fGeiQNBh4muejj2I1uz0dcZmaWJ5vE6PBmZtZ2tIlThV26dInevXtXOwwzs1yZMWPGGxHRtdpxFGsTiat3795Mn77BlfdmZtYISS+XL9X6fKrQzMxyxYnLzMxyxYnLzMxypU18x2Vm+bV69Wrq6up4//33qx3KJqtjx4707NmT9u3bVzuUTJy4zKym1dXV0blzZ3r37s36NxSwlhARLF++nLq6Ovr06VPtcDLxqUIzq2nvv/8+22+/vZNWhUhi++23z9URrROXmdU8J63Kytv2deIyM7NcceIyM2vEW2+9xW9+8xsApk6dylFHHdWq6584cSKLF//zFlXf/OY3ef7555vcTjVirxRfnGHWQu6c13qD4R/Xr1urrautq09c3/72tyu2jjVr1rD55qXfjidOnMiee+5J9+7dAbjuuusqFkdeOHGZVdiFp365WfUuvvGOFo7EmmPs2LG8+OKLDBo0iPbt29OpUyeOP/54Zs+ezac//Wl+//vfI4kZM2bwve99j3feeYcuXbowceJEunXrxqxZsxg1ahSrVq1i1113ZcKECWy77bYMGzaMz3zmMzz++OMcffTRDBs2bIP6jz/+ONOnT+fkk09myy235IknnuDwww9n3LhxDBkyhHvvvZfzzz+ftWvX0qVLFx566CGefvppxowZw3vvvceWW27J9ddfT79+/aq9GVuUE5eZWSMuvfRSZs+ezaxZs5g6dSrDhw9nzpw5dO/enaFDh/L444+z77778p3vfIe7776brl27cuutt3LBBRcwYcIETjvtNK688koOOuggLrzwQn76059y+eWXA8nR3F//+ldWr17NQQcdVLL+r3/963WJqtCyZcs4/fTTeeSRR+jTpw9vvpncxLh///488sgjbL755jz44IOcf/753HHHpvUhqKKJS9JhJLeGbgdcFxGXFi3vD1wPDAYuiIhx6fx+wK0FRXcBLoyIyyVdBJwOLEuXnR8RUyrZD7ON4SOnyhk2bFiz6k2dOrXZ69xnn33o2bMnAIMGDWLhwoVss802zJ49m0MPPRSAtWvX0q1bN1asWMFbb73FQQcdBMCIESM44YQT1rX1la98BYB58+aVrN+YJ598kgMPPHDdb6+22247AFasWMGIESN44YUXkMTq1aub3ddaVbHEJakdcBVwKFAHTJM0OSIKv1V8EzgLOKawbkTMAwYVtPMqcFdBkV/WJzkzs9a0xRZbrHverl071qxZQ0QwYMAAnnjiifXKrlixotG2OnXqBNBg/cZERMnL2H/84x/zuc99jrvuuouFCxc2O7nXskoece0DzI+IlwAk3QIMB9YlrohYCiyVdGQj7RwCvBgRNTm8vplVz8YcOWXVuXNnVq5c2WiZfv36sWzZMp544gn2339/Vq9ezT/+8Q8GDBjAtttuy6OPPspnP/tZbrzxxnVHX1nrN7T+/fffnzPPPJMFCxasO1W43XbbsWLFCnr06AEkF3ZsiiqZuHoAiwqm64B9m9HOicDNRfNGSzoNmA58PyL+r7iSpJHASICddtqpGas1M4Ptt9+eoUOHsueee7Lllluy4447blCmQ4cO3H777Zx11lmsWLGCNWvWMGbMGAYMGMCkSZPWXZyxyy67cP311zep/te+9jVGjRq17uKMel27duWaa67huOOO46OPPmKHHXbggQce4Nxzz2XEiBFcdtllHHzwwRXdNtWiiKhMw9IJwBcj4pvp9KnAPhHxnRJlLwLeKT79J6kDsBgYEBGvp/N2BN4AAvgZ0C0i/q2xWIYMGRK+kaRVmi+Hr4y5c+ey++67VzuMTV6p7SxpRkQMaaBK1VTyB8h1QK+C6Z4kSagpDgdm1ictgIh4PSLWRsRHwLUkpyTNzKyNqGTimgb0ldQnPXI6EZjcxDZOoug0oaTCj5rHArM3KkozM8uVin3HFRFrJI0G7iO5HH5CRMyRNCpdPl7SJ0i+p9oa+EjSGGCPiHhb0lYkVySeUdT0zyUNIjlVuLDEcjMz24RV9Hdc6e+rphTNG1/w/DWSU4il6q4Cti8x/9QWDtPMzHLEg+yamVmuOHGZmVmueKxCM8uVlv7ZQa39tGDYsGElxyZsyNSpUxk3bhz33HNPhSOrHT7iMjOzXHHiMjMr49133+XII4/kk5/8JHvuuSe33norF198MXvvvTd77rknI0eOpH4wh2HDhvHd736XAw88kN13351p06Zx3HHH0bdvX370ox8BsHDhQvr378+IESPYa6+9OP7441m1atUG673//vvZf//9GTx4MCeccALvvPMOAPfeey/9+/fngAMO4M4772y9DVEjnLjMzMq499576d69O3/729+YPXs2hx12GKNHj2batGnMnj2b9957b71TdR06dOCRRx5h1KhRDB8+nKuuuorZs2czceJEli9fDiQjwo8cOZJnn32Wrbfeet1dluu98cYbXHLJJTz44IPMnDmTIUOGcNlll/H+++9z+umn8+c//5lHH32U1157rVW3RS1w4jIzK2PgwIE8+OCD/PCHP+TRRx/l4x//OA8//DD77rsvAwcO5C9/+Qtz5sxZV/7oo49eV2/AgAF069aNLbbYgl122YVFi5IhXHv16sXQoUMBOOWUU3jsscfWW+eTTz7J888/z9ChQxk0aBCTJk3i5Zdf5u9//zt9+vShb9++SOKUU05ppa1QO3xxhplZGbvtthszZsxgypQpnHfeeXzhC1/gqquuYvr06fTq1YuLLrqI999/f135+lufbLbZZuvdBmWzzTZjzZo1ABvckqR4OiI49NBDufnm9ccYnzVrVsnbmbQlPuIyMytj8eLFbLXVVpxyyimcc845zJw5E4AuXbrwzjvvcPvttze5zVdeeWXdaO8333wzBxxwwHrL99tvPx5//HHmz58PwKpVq/jHP/5B//79WbBgAS+++OK6um2Nj7jMLFeqcfn6c889xw9+8AM222wz2rdvz9VXX82f/vQnBg4cSO/evdl7772b3Obuu+/OpEmTOOOMM+jbty/f+ta31lvetWtXJk6cyEknncQHH3wAwCWXXMJuu+3GNddcw5FHHkmXLl044IADmD27bQ3ZWrHbmtQS39bEWoNva1IZm+JtTRYuXMhRRx1VUwnHtzUxMzOrECcuM7NW1rt375o62sobJy4zq3lt4SuNasrb9nXiMrOa1rFjR5YvX567N9e8iAiWL19Ox44dqx1KZr6q0MxqWs+ePamrq2PZsmXVDmWT1bFjR3r2LHlrxJrkxGVmNa19+/b06dOn2mFYDfGpQjMzyxUnLjMzyxUnLjMzy5WKJi5Jh0maJ2m+pLEllveX9ISkDySdU7RsoaTnJM2SNL1g/naSHpD0Qvq4bSX7YGZmtaViiUtSO+Aq4HBgD+AkSXsUFXsTOAsY10Azn4uIQUVDjowF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
"
>
</div>
</div>
</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[7]:</div><div class="panel panel-primary nbgrader_cell">
<a name="cell-bdea40714e10d0e8"></a><div class="panel-heading"><span class="nbgrader-label">Grade cell: <code>cell-bdea40714e10d0e8</code></span>
<span class="pull-right">
Score: 15.0 / 15.0 <a href="#top">(Top)</a>
</span></div>
<div class="panel-body">
<div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="n">assert_almost_equal</span><span class="p">(</span><span class="n">transition_matrix_Q</span><span class="p">(</span><span class="n">example_graph</span><span class="p">)[</span><span class="mi">3</span><span class="p">,</span><span class="mi">4</span><span class="p">],</span><span class="mi">1</span><span class="o">/</span><span class="mi">3</span><span class="p">,</span><span class="n">delta</span><span class="o">=</span><span class="mf">1e-9</span><span class="p">)</span>
<span class="n">assert_almost_equal</span><span class="p">(</span><span class="n">transition_matrix_Q</span><span class="p">(</span><span class="n">example_graph</span><span class="p">)[</span><span class="mi">3</span><span class="p">,</span><span class="mi">7</span><span class="p">],</span><span class="mf">0.0</span><span class="p">,</span><span class="n">delta</span><span class="o">=</span><span class="mf">1e-9</span><span class="p">)</span>
<span class="n">assert_almost_equal</span><span class="p">(</span><span class="n">transition_matrix_Q</span><span class="p">(</span><span class="n">example_graph</span><span class="p">)[</span><span class="mi">2</span><span class="p">,</span><span class="mi">2</span><span class="p">],</span><span class="mf">0.0</span><span class="p">,</span><span class="n">delta</span><span class="o">=</span><span class="mf">1e-9</span><span class="p">)</span>
<span class="n">assert_almost_equal</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">sum</span><span class="p">(</span><span class="n">transition_matrix_Q</span><span class="p">(</span><span class="n">example_graph</span><span class="p">)[</span><span class="mi">7</span><span class="p">]),</span><span class="mf">1.0</span><span class="p">,</span><span class="n">delta</span><span class="o">=</span><span class="mf">1e-9</span><span class="p">)</span>
<span class="k">assert</span> <span class="n">chain_Q_histogram</span><span class="p">(</span><span class="n">nx</span><span class="o">.</span><span class="n">Graph</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">0</span><span class="p">,</span><span class="mi">100</span><span class="p">)[</span><span class="mi">1</span><span class="p">]</span> <span class="o">==</span> <span class="mi">50</span>
<span class="k">assert</span> <span class="nb">len</span><span class="p">(</span><span class="n">chain_Q_histogram</span><span class="p">(</span><span class="n">example_graph</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mi">100</span><span class="p">))</span> <span class="o">==</span> <span class="n">example_graph</span><span class="o">.</span><span class="n">number_of_nodes</span><span class="p">()</span>
</pre></div>
</div>
</div>
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered">
<div class="prompt input_prompt">
</div><div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<p><strong>(c)</strong> Determine the appropriate Metropolis-Hastings acceptance probability $A(x \to y)$ for $x\neq y$
and write a function that, given a graph and $x$, samples the next state with $y$ according to the Metropolis-Hastings transition matrix $P(x \to y)$. <strong>(10 pts)</strong></p>
</div>
</div></div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[8]:</div><div class="panel panel-primary nbgrader_cell">
<a name="comment-cell-92e3b11a3af7eb99"></a><div class="panel-heading"><span class="nbgrader-label">Student's answer</span><span class="pull-right"><a href="#top">(Top)</a></span></div>
<div class="panel-body">
<div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="k">def</span> <span class="nf">acceptance_probability</span><span class="p">(</span><span class="n">graph</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="sd">&#39;&#39;&#39;Compute A(x -&gt; y) for the supplied graph (assuming x!=y).&#39;&#39;&#39;</span>
<span class="k">assert</span> <span class="n">x</span> <span class="o">!=</span> <span class="n">y</span>
<span class="n">Q</span> <span class="o">=</span> <span class="n">transition_matrix_Q</span><span class="p">(</span><span class="n">graph</span><span class="p">)</span>
<span class="n">n</span> <span class="o">=</span> <span class="n">graph</span><span class="o">.</span><span class="n">number_of_nodes</span><span class="p">()</span>
<span class="c1"># We want to sample a uniform mass distribution pi:</span>
<span class="n">pi</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">ones</span><span class="p">(</span><span class="n">n</span><span class="p">)</span><span class="o">/</span><span class="n">n</span>
<span class="k">if</span> <span class="n">Q</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="o">==</span> <span class="mi">0</span><span class="p">:</span>
<span class="k">return</span> <span class="mi">0</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">A</span> <span class="o">=</span> <span class="n">pi</span><span class="p">[</span><span class="n">y</span><span class="p">]</span><span class="o">*</span><span class="n">Q</span><span class="p">[</span><span class="n">y</span><span class="p">,</span> <span class="n">x</span><span class="p">]</span><span class="o">/</span><span class="p">(</span> <span class="n">pi</span><span class="p">[</span><span class="n">x</span><span class="p">]</span><span class="o">*</span><span class="n">Q</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="p">)</span>
<span class="k">return</span> <span class="n">np</span><span class="o">.</span><span class="n">min</span><span class="p">([</span><span class="mf">1.</span><span class="p">,</span> <span class="n">A</span><span class="p">])</span>
<span class="k">def</span> <span class="nf">sample_next_state</span><span class="p">(</span><span class="n">graph</span><span class="p">,</span><span class="n">x</span><span class="p">):</span>
<span class="sd">&#39;&#39;&#39;Return next random state y according to MH transition matrix P(x -&gt; y).&#39;&#39;&#39;</span>
<span class="n">y</span> <span class="o">=</span> <span class="n">sample_proposal</span><span class="p">(</span><span class="n">graph</span><span class="p">,</span> <span class="n">x</span><span class="p">)</span>
<span class="k">return</span> <span class="n">y</span> <span class="k">if</span> <span class="n">rng</span><span class="o">.</span><span class="n">random</span><span class="p">()</span> <span class="o">&lt;</span> <span class="n">acceptance_probability</span><span class="p">(</span><span class="n">graph</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">else</span> <span class="n">x</span>
</pre></div>
</div>
</div>
</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[9]:</div><div class="panel panel-primary nbgrader_cell">
<a name="cell-fbfc2607999d0c99"></a><div class="panel-heading"><span class="nbgrader-label">Grade cell: <code>cell-fbfc2607999d0c99</code></span>
<span class="pull-right">
Score: 10.0 / 10.0 <a href="#top">(Top)</a>
</span></div>
<div class="panel-body">
<div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="n">assert_almost_equal</span><span class="p">(</span><span class="n">acceptance_probability</span><span class="p">(</span><span class="n">example_graph</span><span class="p">,</span><span class="mi">3</span><span class="p">,</span><span class="mi">4</span><span class="p">),</span><span class="mf">0.6</span><span class="p">,</span><span class="n">delta</span><span class="o">=</span><span class="mf">1e-9</span><span class="p">)</span>
<span class="n">assert_almost_equal</span><span class="p">(</span><span class="n">acceptance_probability</span><span class="p">(</span><span class="n">example_graph</span><span class="p">,</span><span class="mi">8</span><span class="p">,</span><span class="mi">7</span><span class="p">),</span><span class="mf">0.5</span><span class="p">,</span><span class="n">delta</span><span class="o">=</span><span class="mf">1e-9</span><span class="p">)</span>
<span class="n">assert_almost_equal</span><span class="p">(</span><span class="n">acceptance_probability</span><span class="p">(</span><span class="n">example_graph</span><span class="p">,</span><span class="mi">7</span><span class="p">,</span><span class="mi">8</span><span class="p">),</span><span class="mf">1.0</span><span class="p">,</span><span class="n">delta</span><span class="o">=</span><span class="mf">1e-9</span><span class="p">)</span>
<span class="n">assert_almost_equal</span><span class="p">(</span><span class="n">acceptance_probability</span><span class="p">(</span><span class="n">nx</span><span class="o">.</span><span class="n">Graph</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">0</span><span class="p">,</span><span class="mi">1</span><span class="p">),</span><span class="mi">1</span><span class="p">,</span><span class="n">delta</span><span class="o">=</span><span class="mf">1e-9</span><span class="p">)</span>
</pre></div>
</div>
</div>
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered">
<div class="prompt input_prompt">
</div><div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<p><strong>(d)</strong> Do the same as in part (b) but now for the Markov chain corresponding to $P$. Verify that the histogram of the Markov chain approaches a flat distribution and corroborate this by calculating the explicit matrix $P$ and applying <code>stationary_distributions</code> to it. <em>Hint</em>: for determining the explicit matrix $P(x\to y)$, remember that the formula $P(x\to y) = Q(x\to y)A(x\to y)$ only holds for $x\neq y$. What is $P(x\to x)$? <strong>(15 pts)</strong></p>
</div>
</div></div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[10]:</div><div class="panel panel-primary nbgrader_cell">
<a name="comment-cell-3b7fde395331916d"></a><div class="panel-heading"><span class="nbgrader-label">Student's answer</span><span class="pull-right"><a href="#top">(Top)</a></span></div>
<div class="panel-body">
<div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="k">def</span> <span class="nf">chain_P_histogram</span><span class="p">(</span><span class="n">graph</span><span class="p">,</span><span class="n">start</span><span class="p">,</span><span class="n">k</span><span class="p">):</span>
<span class="sd">&#39;&#39;&#39;Produce a histogram of the states visited (excluding initial state) </span>
<span class="sd"> by the P Markov chain in the first n steps when started at start.&#39;&#39;&#39;</span>
<span class="n">n</span> <span class="o">=</span> <span class="n">graph</span><span class="o">.</span><span class="n">number_of_nodes</span><span class="p">()</span>
<span class="n">number_of_visits</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">zeros</span><span class="p">(</span><span class="n">n</span><span class="p">)</span>
<span class="n">x</span> <span class="o">=</span> <span class="n">start</span>
<span class="k">for</span> <span class="n">_</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">k</span><span class="p">):</span>
<span class="n">x</span> <span class="o">=</span> <span class="n">sample_next_state</span><span class="p">(</span><span class="n">graph</span><span class="p">,</span> <span class="n">x</span><span class="p">)</span>
<span class="n">number_of_visits</span><span class="p">[</span><span class="n">x</span><span class="p">]</span> <span class="o">+=</span> <span class="mi">1</span>
<span class="k">return</span> <span class="n">number_of_visits</span>
<span class="k">def</span> <span class="nf">transition_matrix_P</span><span class="p">(</span><span class="n">graph</span><span class="p">):</span>
<span class="sd">&#39;&#39;&#39;Construct transition matrix Q from graph as numpy array.&#39;&#39;&#39;</span>
<span class="n">n</span> <span class="o">=</span> <span class="n">graph</span><span class="o">.</span><span class="n">number_of_nodes</span><span class="p">()</span>
<span class="n">P</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">zeros</span><span class="p">((</span><span class="n">n</span><span class="p">,</span> <span class="n">n</span><span class="p">))</span>
<span class="n">Q</span> <span class="o">=</span> <span class="n">transition_matrix_Q</span><span class="p">(</span><span class="n">graph</span><span class="p">)</span>
<span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">n</span><span class="p">):</span>
<span class="k">for</span> <span class="n">y</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">n</span><span class="p">):</span>
<span class="k">if</span> <span class="n">x</span> <span class="o">!=</span> <span class="n">y</span><span class="p">:</span>
<span class="n">P</span><span class="p">[</span><span class="n">y</span><span class="p">,</span> <span class="n">x</span><span class="p">]</span> <span class="o">=</span> <span class="n">Q</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="o">*</span><span class="n">acceptance_probability</span><span class="p">(</span><span class="n">graph</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="c1"># Finally, we have to calculate P(x -&gt; x):</span>
<span class="n">P</span><span class="p">[</span><span class="n">x</span><span class="p">,</span> <span class="n">x</span><span class="p">]</span> <span class="o">=</span> <span class="mi">1</span> <span class="o">-</span> <span class="n">np</span><span class="o">.</span><span class="n">sum</span><span class="p">(</span><span class="n">P</span><span class="p">[:,</span> <span class="n">x</span><span class="p">])</span>
<span class="k">return</span> <span class="n">P</span>
<span class="c1"># plotting</span>
<span class="n">x_start</span> <span class="o">=</span> <span class="mi">1</span>
<span class="n">k</span> <span class="o">=</span> <span class="mi">40000</span>
<span class="n">plt</span><span class="o">.</span><span class="n">figure</span><span class="p">()</span>
<span class="n">plt</span><span class="o">.</span><span class="n">title</span><span class="p">(</span><span class="s2">&quot;Markov chain visiting density for uniform Metropolis-Hastings transition matrix $P(x </span><span class="se">\\</span><span class="s2">to y)$&quot;</span><span class="p">)</span>
<span class="n">x_list</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="nb">range</span><span class="p">(</span><span class="n">example_graph</span><span class="o">.</span><span class="n">number_of_nodes</span><span class="p">()))</span>
<span class="n">plt</span><span class="o">.</span><span class="n">bar</span><span class="p">(</span><span class="n">x_list</span><span class="p">,</span> <span class="n">chain_P_histogram</span><span class="p">(</span><span class="n">example_graph</span><span class="p">,</span> <span class="n">x_start</span><span class="p">,</span> <span class="n">k</span><span class="p">)</span><span class="o">/</span><span class="n">k</span><span class="p">,</span> <span class="n">color</span><span class="o">=</span><span class="s2">&quot;lightblue&quot;</span><span class="p">,</span> <span class="n">label</span><span class="o">=</span><span class="s2">&quot;sampled&quot;</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">axhline</span><span class="p">(</span><span class="n">y</span> <span class="o">=</span> <span class="mi">1</span><span class="o">/</span><span class="n">example_graph</span><span class="o">.</span><span class="n">number_of_nodes</span><span class="p">(),</span> <span class="n">marker</span><span class="o">=</span><span class="s2">&quot;_&quot;</span><span class="p">,</span> <span class="n">linestyle</span> <span class="o">=</span> <span class="s2">&quot;dashed&quot;</span><span class="p">,</span> <span class="n">color</span><span class="o">=</span><span class="s2">&quot;black&quot;</span><span class="p">,</span> <span class="n">label</span><span class="o">=</span><span class="s2">&quot;theoretical&quot;</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">ylabel</span><span class="p">(</span><span class="s2">&quot;visiting density&quot;</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">xlabel</span><span class="p">(</span><span class="s2">&quot;node $x$&quot;</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">legend</span><span class="p">()</span>
<span class="n">plt</span><span class="o">.</span><span class="n">show</span><span class="p">()</span>
</pre></div>
</div>
</div>
</div>
</div>
<div class="output_wrapper">
<div class="output">
<div class="output_area">
<div class="prompt"></div>
<div class="output_png output_subarea ">
<img src="data:image/png;base64,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
"
>
</div>
</div>
</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[11]:</div><div class="panel panel-primary nbgrader_cell">
<a name="cell-8c4b6c60ee96f037"></a><div class="panel-heading"><span class="nbgrader-label">Grade cell: <code>cell-8c4b6c60ee96f037</code></span>
<span class="pull-right">
Score: 10.0 / 10.0 <a href="#top">(Top)</a>
</span></div>
<div class="panel-body">
<div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="n">assert_almost_equal</span><span class="p">(</span><span class="n">transition_matrix_P</span><span class="p">(</span><span class="n">example_graph</span><span class="p">)[</span><span class="mi">3</span><span class="p">,</span><span class="mi">4</span><span class="p">],</span><span class="mi">1</span><span class="o">/</span><span class="mi">5</span><span class="p">,</span><span class="n">delta</span><span class="o">=</span><span class="mf">1e-9</span><span class="p">)</span>
<span class="n">assert_almost_equal</span><span class="p">(</span><span class="n">transition_matrix_P</span><span class="p">(</span><span class="n">example_graph</span><span class="p">)[</span><span class="mi">3</span><span class="p">,</span><span class="mi">7</span><span class="p">],</span><span class="mf">0.0</span><span class="p">,</span><span class="n">delta</span><span class="o">=</span><span class="mf">1e-9</span><span class="p">)</span>
<span class="n">assert_almost_equal</span><span class="p">(</span><span class="n">transition_matrix_P</span><span class="p">(</span><span class="n">example_graph</span><span class="p">)[</span><span class="mi">2</span><span class="p">,</span><span class="mi">2</span><span class="p">],</span><span class="mf">0.41666666</span><span class="p">,</span><span class="n">delta</span><span class="o">=</span><span class="mf">1e-5</span><span class="p">)</span>
<span class="n">assert_almost_equal</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">sum</span><span class="p">(</span><span class="n">transition_matrix_P</span><span class="p">(</span><span class="n">example_graph</span><span class="p">)[</span><span class="mi">7</span><span class="p">]),</span><span class="mf">1.0</span><span class="p">,</span><span class="n">delta</span><span class="o">=</span><span class="mf">1e-9</span><span class="p">)</span>
</pre></div>
</div>
</div>
</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[12]:</div><div class="panel panel-primary nbgrader_cell">
<a name="cell-a63274314d1b2a2d"></a><div class="panel-heading"><span class="nbgrader-label">Grade cell: <code>cell-a63274314d1b2a2d</code></span>
<span class="pull-right">
Score: 5.0 / 5.0 <a href="#top">(Top)</a>
</span></div>
<div class="panel-body">
<div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="k">assert</span> <span class="nb">len</span><span class="p">(</span><span class="n">chain_P_histogram</span><span class="p">(</span><span class="n">example_graph</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mi">100</span><span class="p">))</span> <span class="o">==</span> <span class="n">example_graph</span><span class="o">.</span><span class="n">number_of_nodes</span><span class="p">()</span>
<span class="n">assert_almost_equal</span><span class="p">(</span><span class="n">chain_P_histogram</span><span class="p">(</span><span class="n">example_graph</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mi">20000</span><span class="p">)[</span><span class="mi">8</span><span class="p">],</span><span class="mi">2222</span><span class="p">,</span><span class="n">delta</span><span class="o">=</span><span class="mi">180</span><span class="p">)</span>
</pre></div>
</div>
</div>
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered">
<div class="prompt input_prompt">
</div><div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h2 id="MCMC-simulation-of-disk-model">MCMC simulation of disk model<a class="anchor-link" href="#MCMC-simulation-of-disk-model">&#182;</a></h2><p><strong>(50 points)</strong></p>
<p>Recall that in the disk model with we would like to sample the positions $x = (x_1,y_1,\ldots,x_N,y_N)\in [0,L)^{2N}$ of $N$ disks of radius $1$ in the torus $[0,L)^2$ with uniform density $\pi(x) = \mathbf{1}_{\{\text{all pairwise distance }\geq 2\}}(x) / Z$, where $Z$ is the unknown partition function of the model. We will assume $L &gt; 2$ and $N\geq 1$. For the purposes of this simulation we will store the state $x$ in a <code>np.array</code> of dimension $(N,2)$ with values in $[0,L)$. Such a configuration can be conveniently plotted using the following function:</p>
</div>
</div></div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[13]:</div><div class="inner_cell">
<div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="k">def</span> <span class="nf">plot_disk_configuration</span><span class="p">(</span><span class="n">positions</span><span class="p">,</span><span class="n">L</span><span class="p">):</span>
<span class="n">fig</span><span class="p">,</span><span class="n">ax</span> <span class="o">=</span> <span class="n">plt</span><span class="o">.</span><span class="n">subplots</span><span class="p">()</span>
<span class="n">ax</span><span class="o">.</span><span class="n">set_aspect</span><span class="p">(</span><span class="s1">&#39;equal&#39;</span><span class="p">)</span>
<span class="n">ax</span><span class="o">.</span><span class="n">set_ylim</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="n">L</span><span class="p">)</span>
<span class="n">ax</span><span class="o">.</span><span class="n">set_xlim</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="n">L</span><span class="p">)</span>
<span class="n">ax</span><span class="o">.</span><span class="n">set_yticklabels</span><span class="p">([])</span>
<span class="n">ax</span><span class="o">.</span><span class="n">set_xticklabels</span><span class="p">([])</span>
<span class="n">ax</span><span class="o">.</span><span class="n">set_yticks</span><span class="p">([])</span>
<span class="n">ax</span><span class="o">.</span><span class="n">set_xticks</span><span class="p">([])</span>
<span class="k">for</span> <span class="n">x</span><span class="p">,</span><span class="n">y</span> <span class="ow">in</span> <span class="n">positions</span><span class="p">:</span>
<span class="c1"># consider all horizontal and vertical copies that may be visible</span>
<span class="k">for</span> <span class="n">x_shift</span> <span class="ow">in</span> <span class="p">[</span><span class="n">z</span> <span class="k">for</span> <span class="n">z</span> <span class="ow">in</span> <span class="n">x</span> <span class="o">+</span> <span class="p">[</span><span class="o">-</span><span class="n">L</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="n">L</span><span class="p">]</span> <span class="k">if</span> <span class="o">-</span><span class="mi">1</span><span class="o">&lt;</span><span class="n">z</span><span class="o">&lt;</span><span class="n">L</span><span class="o">+</span><span class="mi">1</span><span class="p">]:</span>
<span class="k">for</span> <span class="n">y_shift</span> <span class="ow">in</span> <span class="p">[</span><span class="n">z</span> <span class="k">for</span> <span class="n">z</span> <span class="ow">in</span> <span class="n">y</span> <span class="o">+</span> <span class="p">[</span><span class="o">-</span><span class="n">L</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="n">L</span><span class="p">]</span> <span class="k">if</span> <span class="o">-</span><span class="mi">1</span><span class="o">&lt;</span><span class="n">z</span><span class="o">&lt;</span><span class="n">L</span><span class="o">+</span><span class="mi">1</span><span class="p">]:</span>
<span class="n">ax</span><span class="o">.</span><span class="n">add_patch</span><span class="p">(</span><span class="n">plt</span><span class="o">.</span><span class="n">Circle</span><span class="p">((</span><span class="n">x_shift</span><span class="p">,</span><span class="n">y_shift</span><span class="p">),</span><span class="mi">1</span><span class="p">))</span>
<span class="n">plt</span><span class="o">.</span><span class="n">show</span><span class="p">()</span>
<span class="c1"># Example with N=3 and L=5</span>
<span class="n">positions</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">([[</span><span class="mf">0.1</span><span class="p">,</span><span class="mf">0.5</span><span class="p">],[</span><span class="mf">2.1</span><span class="p">,</span><span class="mf">1.5</span><span class="p">],[</span><span class="mf">3.2</span><span class="p">,</span><span class="mf">3.4</span><span class="p">]])</span>
<span class="n">plot_disk_configuration</span><span class="p">(</span><span class="n">positions</span><span class="p">,</span><span class="mi">5</span><span class="p">)</span>
</pre></div>
</div>
</div>
</div>
<div class="output_wrapper">
<div class="output">
<div class="output_area">
<div class="prompt"></div>
<div class="output_png output_subarea ">
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAOsAAADrCAYAAACICmHVAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAAsTAAALEwEAmpwYAAAatUlEQVR4nO3deXwU9d0H8M/sbnY3x2Zz7G5uEo6QkINwBEkAAblFURCVeqA+VkVbW7WlWns91uPxsT5iLdVWhaoFQYrWq1QqhyJyBMIZyE1CLshu7mzu7O48f3CUcrmb7OxvfzPf9+vlPwZ2PxnmszM78/v9RhBFEYQQ/6diHYAQ4h4qKyGcoLISwgkqKyGcoLISwgkqKyGc0Hjyh9VBRlFjtEiVxSuGRATBGBjAOgbhULmtA939TqYZ+urLG0VRNF/uZx6VVWO0IObe33sllBTmpkfhzaXZrGMQTpXU27Fg5bfoc7qYZah66caqK/1MNqfB4UEBeH5hJusYhGMp0Qb8eOYI1jGuSDZlfeamdJgNOtYxCOcenjYcmXFG1jEuSxZl/d6EBNw8Jo51DCIDGrUKK+8Y65fXPbgv64SkcDx7cwbrGERGkkzBeP3OcVCrBNZR/gPXZY0LC8Sf7h4PrYbrX4P4oSnJJvxy/ijWMf4Dt3u5MTAAq+7NhimEvqcSadw/ZSjuzU1kHeM8Lstq0Gnw1/uvwaiYUNZRiMw9c1M6lmQnsI4BgMOyGgMDsPaBichKCGMdhSiAIAj438WZuOMa9oXlqqyxRj3WP5hDRSU+JQgC/mdRJh6eNpxpDm7KOj4xHJ8+OgVpsXTqS3xPEAT8/PpUvLokCzpGFzS5KOvt2fFY/2AODXogzC0aG48Ny3IRFer7fdGvyxqq1+CV27Lwu1uz6PYM8RtjEsLwjx9di7npUT59X79twIxUC7b8ZBoWj49nHYWQS5gNOry5NBuvfW8MwoN8M9rJo1k3vhBj1OPJeSlYNJZKSvzfzWPiMGm4CS9+UYRPDtXBJeFioX5T1rCgAPxg+nDck5sEfYCadRxC3GY26LDi9jF4aOowvLy5BNuKbZK8D/OyWgw63DlxCO6fMhShev8bPE2Iu1KjQ7H6vgnYf7IZb+44ge3FNq8eaZmVNWdYBJbmJGFuehQ0ar/96kyIxyYkRWBCUgRqW7rwfl41/ra/Bk2dfYN+XZ+VVaMSkJ0UjlmjojA7LQqJkcG+emtCmIgPD8JT81LxxKyR2FPRhK2FVmwrsuJUW8+AXk+ysobqNciMNyIjzois+DBMHm6C0UdXzQjxJ1qNCtNGmjFtpBnPLczA8VNt2FfZjIK6Nhyra8OJhk443Thf9qissUY9Hpk+HJ29DvSfffEAlYBArQYWgw6WUB0sBj1ijHokRAQN7DcjRObSY41Ij/33ahTdfU5UNnbCau/BjJeu/Pc8KmtkiA5PzksdcEhCyKUCtWqkxYYiDVcfSktXdgjhBJWVEE4wv89K5EMURfQ5XXCdXXZXrRJoTLcXUVmJR/ocLpTU21FQ14ai0+043dYDm70H1vYeNHX0wXHRVU19gAoWgx4Wgw5RoXrEhwciPc6IzDgjkiKDIAj+tSiZP6OykqsSRRGHalqxtdCKnWWNKKm3e7RifU+/C9XNXahu7rrkZwa9BlnxYZieYsactGgMiaQ7CFcjiKL746Gys7PF/Px8CeMQf5F/shkfHqjF1iIbGjt6ffKeyZYQzMuIxu3ZCYq99ScIwgFRFC/7DBg6spLzOnsd+PhQHdburUJxvd3n719m60DZ9nK8/lU5pqdYsDQnEdNGmqHys/V7WaGyEnT1ObB6ZyXe2lkBe4+DdRy4RGB7sQ3bi20YZg7GT2aPxA2ZMYr/fktlVbB+pwvr91Vj5fZyNNh9c6rrqYqGTjy67hDeiq/Ak3NTMSXZxDoSM1RWhTpQ1YInPzyCEw2drKO45WhtG+5enYfZaVF4YVEGLAY960g+R2VVmJ5+J1ZsKcWqnRWSrmoglS2FVuw/2YxnFqRj4VhlPYyM7lgrSNHpdtzwh5146xs+i3pOa1c/Ht9wGMvW5KO9p591HJ+hsirE5mOnsfhPu7k57XXHv45bsfD1Xaho6GAdxSeorDIniiJe3VKKR94/iK4+J+s4XlfR0ImFr+/C1yXSrHvkT6isMuZwuvDEhsN4bVsZPBj7wp32Hge+/14+NuyvZh1FUnSBSaYcThd+tP4QvjhWzzqKTzhdIn7+9wL0OVxYmpvEOo4k6MgqQ06XiMc2HFZMUc8RReA3nx3Hujx5HmGprDL0q0+OYdPR06xjMCGKwC8/KcAXBfL7/amsMvPe7pNYv0+eRxZ3iSLw041HUHiqnXUUr6Kyysju8kY8949C1jH8QlefEw/+NR9NPpox5AtUVpmobenCD9YdvGTyt5LVtXbjkfcPurXMJw+orDLx1EdH0dqlnNE87tpX2YxVOytYx/AKKqsMvJ9XhV3lTaxj+K0VW0pRbuN/lBOVlXO1LV148Z/FrGP4tV6HCz/78Aj3p8NUVs49+3khOnrZTxj3d4eqW/EB5yOcqKwcO1jdgi8LraxjcOO1rWXo6ed3fDSVlWMvfUGnv56w2Xvxl12VrGMMGJWVU1+X2JBX2cw6Bnf+/PUJtHF61ZzKyqk3d8jjdoSvtfc4sJ7T765UVg6V2zqwp4Ju1QzUurxquDi8Mkxl5dDavVWsI3CturkLO0obWMfwGJWVM919Tnx0sJZ1DO7x+IFHZeXMjlKbXyzEzbtvyhq4W2yNysqZLYXyX2vIF/qdIr4u4etUmMrKEZdLVMTCYL6yrYivASVUVo4cqmlBU2cf6xiy8XVJAxwePL6SNSorR/ZVtrCOICtt3f0otfIzG4fKypFjdW2sI8gOT9uUysqRAo52LF4crWtlHcFtVFZOtHX1o7q5i3UM2Smo42dRNSorJyoa+fluxZNKjp6TQ2XlhLVdPqv0+ZP2Hgc3c1yprJxosPewjiBbNk4+CKmsnLDZ+diheGTj5IOQysqJZhoMIRleti2VlRMOJ3/zL3nBy8LoVFZOOOX8gFXGeFmilMrKCbUgsI4gW2oVH9uWysoJrYb+qaQSoOZj2/KRkiAiWMs6gmxFhvCxbamsnLCE6lhHkC2LgY9tS2XlhMWgZx1BtnjZtlRWTkTRkVUS4UEB3FwP4CMlwTBzCDi5aMmVEZYQ1hHcRmXlRIhOg6GmYNYxZCcjzsg6gtuorBzJ5GjH4sXoeH62KZWVIzwdBXjB0wcglZUjOcMiWUeQFVOIDsPN9J2VSCAjzogYIx+3GXgwM9UCgaNhnFRWzsxItbCOIBszR/G1LamsnJmVFsU6gizoA1S4NtnMOoZHqKycmTzcBBMnY1n92axRUQjUqlnH8AiVlTNajQq3ZyewjsG9pTmJrCN4jMrKobtyEmk00yCkRBkwkcMr61RWDsWFBdKFpkG4O2cI6wgDQmXl1CPTR7COwCWLQYdbx/P5NYLKyqnxieGYTVeGPfbjmcncXVg6h8rKsSfnptB3Vw8kRQbhexP4PKoCVFauJUcZsHhcPOsY3Fg+NwUaTtZbuhx+kxMAwNPzR9F9Vzdcl2LGjaNjWccYFCor5yKCtXju5gzWMfxaqF6DF28ZzTrGoFFZZeD6zBjcMDqGdQy/9asb0xAtgwkQVFaZeO7mDMSFBbKO4XfmpUfLZsQXlVUmIoK1eOue8QgM4PO2hBRSow1YsSSLdQyvobLKSHqsEa/cngWOpmhKJiJYi7fvyUaQVsM6itdQWWVmfmYMHpuZzDoGU1qNCm/cNQ4JEUGso3gVlVWGHp81EvdPHso6BhMBagFv3DlOlkvgUFll6jcL0nDfpCTWMXxKq1bhj3eOk+0EfSqrjD1zUzp+MH046xg+ERigxpv3jMfc9GjWUSRDZZW5J+el4uVbR3PziIiBiAsLxIeP5OK6FHlPG5TvvyA577bsBKx/MAdmTp6W5okJSeH49NHJSI/lZ/3fgaKyKsT4xHB89uhkTBwawTqKVwgC8F+Tk/D+AzkwhcjvQ+hyqKwKEmMMxAcP5eC3N6UjiNM5nQCQGBmEDx7MwX8vSJf16f3FlPObEgCAIAi4d1ISNj82FZOG83V7Q60ScN/Z7DyuoTRY8hneQTwyJDII6x7MwfZiK363uQTF9XbWka5qXno0ls9N4eoRjd5GZWWso9cBW3sPrO29aOjoRWevAw6nCwCgUasQpFXDbNAhKlQPi0EHgz7Aq+8/IzUK00da8OmROry2tQwnm7q8+vqDNWWECcvnpmBMQhjrKMxRWX2oprkLh2taUVDXhoLaNhw/1Yb2HodHr2HQa5AWE4rMOCMy440YHR826Oe2qlQCFo2Nx8IxcdhR2oC1e6uwvdgGlziolx0wg06DRePisDQnEclRBjYh/JAgiu7/i2RnZ4v5+fkSxpEXp0vEgaoWbC2yYmuhFRWNnZK8T2JkEGamRmFWmgXXJEV4ZemS2pYu/P1gHbYWWVFQ1wYPdpMB0WlUmDQ8EnPSo3FTViyCdco8jgiCcEAUxezL/ozK6n01zV1Yu7cKHx6oRVNnn0/fOywoALeMjcfS3ESvPSnd2t6DbUU2fFPagIK6NtS1dg/6NdUqASPMIRiTEIbrUi2YOtIkqxkyA0Vl9ZEdpQ14d1cldpQ2MDuFPEcQzjwX575JSV4fK9vc2YeCujYUnW5HfVsPrO1n/mvo6EV3nwtOlwuCIECtEmDQaxBl0MMSeuZ7d3x4INJjjUiLCeV2SVApUVkltv9kM176ohj5VS2so1xWVrwRT81LxaQRJtZRyHe4WlnpvGMQym12vPjPYmwrtrGOclVHattw56o8XJtswi/mj8KomFDWkcgA0KCIAXC6RLz+VTnmv/at3xf1QjvLGrFg5bdYsaUU/WdvDxF+0JHVQ6VWO5ZvPIKjtW2sowyIwyXiD9vK8OXxevzfbVnIiJP/AHi5oCOrB/6WX4MbV37LbVEvVFxvx6I3dmHNnpOsoxA3UVnd4HSJePbzQjz54VH0OeRz+tjvFPHrT4/jFx8X0GkxB6is36Gtux/3vbMPf9lVyTqKZNblVeOuVXlo9vE9YeIZKutVNHf24c6392JnWSPrKJLbV9mMJW/ugc3ewzoKuQIq6xW0nC3q8VPtrKP4TJmtA0ve3AtbOxXWH1FZL6Otux93r87z+2ljUqhs7MRdq/LQ1NHLOgq5CJX1Ik6XiEfXHVTUEfViZbYOLFtzQFYX0+SAynqR5zcVKuI76nfJr2rBrz85xjoGuQCV9QJ/21+Dd3adZB3Db2zIr8G7Mr4Kzhsq61nF9e34FR1JLvH8piIcrmllHYOAygoAcDhdWL7xCPpoYMAlHC4RyzceQa/DyTqK4lFZAbzx9Qkcq1PuBaXvUm7rwIotpaxjKJ7iy1pSb8fK7WWsY/i9VTsr6XSYMcWX9YV/FqHfyXhZBw44XSKe/0ch6xiKpuiy7j7RiG9KG1jH4EZ+VQu2FlpZx1AsRZf1d5tLWEfgzsv/KoGL9QJTCqXYsm4ttNJ3sAEosdrx+dFTrGMokmLL+s5uutk/UO/uPsk6giIpsqwnGjqw+0QT6xjcOlTdimN1/K+WwRtFlnXt3irJV5iXu7V7q1hHUBzFlbXf6cJHB2pZx+Dep4dPoavPs+f0kMFRXFn3VjR5/DAocqnufifNTvIxxZWV7hN6D21L31JeWYv4WZTb331VYqN7rj6kqLKWWe1eeQIaOaOxow9H6aqwzyiqrDQIwvuO0Db1GUWVle4Nel8BbVOfUVRZacfyvgIZPEqEF4opqyiKKDxNE8y9rbyhAz39tIqELyimrI0dfejpp2VbvM3pEmGlRcF9QjFlpcdCSMdmpwXBfUFBZaUdSiq2dtq2vqCYsjbQDiUZOg32DcWU1d5L44Gl0knb1icUU1YHrQksGQcNOfQJjSd/uKKhE9Nf/godvU44XGd2fo1KhSCtGhaDDpZQHSwGPWLD9EiLMSIzzghjUIAkwYn/oKoOjMsloqKxAwV1bThh6/zOi6AelbWzz4GTTV2X/Vl18+X/f0JEIEbHh2HaSDNmpFpgCtF58pZeo1YJTN5XCQJo27pFFEUcqmnFtiIr9lU2o/BUOzr73L9H7VFZB6KmuRs1zd3YdPQ0VAIwJiEMs9OisXhcHCyheqnf/rxgneS/qmIFatWsI/gtURSxq7wJnx85hW3FNjQO4rm3Pt2DXSJwsLoVB6tbsWJLCeakRePunETkDo+U/L3NjI7oSmA20La9WFtXPzYeqMH7edWobOz0ymsyO9z0O0VsKjiNTQWnkRJlwBOzR2JeRrRk72cJpR1KKhaD786Q/F1TRy/++FU51u+r9vqIOb84Nyyx2vHw2gMYkxCGp+alSnKkjfLhKbfSRNEHITp6HXj7mwqs/rYSHRLdyvKLsp5zuKYVd7y9F7NGReGFRRleLZgpRAetWkWPdfQyQQCijcr+IPzsyCk8+/lxNHb0Sfo+fnmfdWuRFXNe/carqxCqVQJGRod47fXIGUmRwQjS+tVnvs80dvTi4TUH8OP1hyQvKuCnZQWAtu5+/HTjEXz/3f1o6fTOhsiMM3rldci/KXWbbj52GrNX7MDm4/U+e0+/Les524ptuOn1b1FcP/i5qBkK3bGkpLSyiqKIV74swcNrD6Klq9+n7+33ZQXO3Ktd/MZufDnIT7Gs+DDvBCLnZcYrp6ydvQ4sW3MAK7eXM3l/LsoKAJ19TixbewCrdlYM+DXSYkKZjaCSI4NOg/GJ4axj+ESDvRe3/nkPvmS4VjI3ZQUAUQSe31SEldvKBvT3VSoBM1LNXk6lXFNTzAhQc7ULDYi1vQdL3tqDIsbLAnG5pV/ZUoo3vh7YqcjMUVFeTqNcsxWwLRvsvbjj7b2oaPDOKKTB4LKswJmnlq8ZwJPMpiaboQ/g9tf2GwFqAdelWFjHkFRHrwNLV+f5RVEBjssKAL/97Dh2n/Ds4UiBWjVuHB0rUSLlmJMWLevpjy6XiMc/OITiejvrKOdxXVaHS8QP3z+ImitMz7uSe3ITJUqkHHfnyHsbvrKlxO+ei8R1WQGgpasfD7yXj24P5gWOjg9DloJuOXhbsiXEJzOlWNl09DRe/+oE6xiX4L6swJmJAC9tLvbo79yTmyRNGAWQ85mJrb0Hv/i4gHWMy5JFWQHgvT0nkVfR5PafXzg2DsPMwRImkqe4sEDcPiGBdQzJPP33ArR1+3ZkkrtkU1ZRBJ786Kjbp8NqlYCfzUmROJX8PDF7JHQaea4M8dGBWmwr9q/vqReSTVkBoKqpC3/Y7v6AieszY5CVECZdIJlJiTLglrFxrGNIoq27H89tKmQd46pkVVYAeGdXpUeLTv9y/igItN6XW56enwqVTBdH+/OOE2j18cB8T8murD39Lvx+q/tH12uGRmCpzG9DeMPicfGYLtNBENb2Hryzq5J1jO8ku7ICwMb8GlQ0dLj9539+fSqGRARJmIhvUaE6/GZBGusYknltWxkXTxiUZVkdLhFvezA7J0irwUuLR9Pp8BW8eEsmjIHyHK3UYO/Fh/neW5FESrIsKwB8evgU2nvc/w6SOzwSj81MljARn5ZNHYYZqfIdsL9hfzU363LJtqxdfU6P13B6bGYy5mdKtxwqb65LMeOpeamsY0jG6RKxfl8N6xhuk21ZAWCth7NyBEHAK7eNQVpMqESJ+DHcHIzX7hgr26u/ALC92Ia61m7WMdwm67KeaOjEsbo2j/5OoFaNVfdmIy4sUKJU/s9s0GH1vRMQqpfn99RzPj1cxzqCR2RdVuDMsqaeig0LxLoHJypy8erIYC3WPTARSSZ5D8Xsd7qwo7SBdQyPUFmvIDEyGBseylXUEdZs0OGDh3KQHGVgHUVyeRXNsPfw9RBo2Zf1WF076tvcH9F0oSRTMDYsy0FqtPx33mGmYGxclquIogID/xBnSfZlBYC8Svdn41wsPjwIHz0yCbPT5Hv7YtpIMz7+4WTZn/peKK+ymXUEjymirAW1nl1kuliwToO3lo7Ho9eN8FIi//HAlKH4y30TZDvo4XJ6+p0os/rPci3uUsRDSgo8vCJ8OYIgYPncFEwYGoGnPzqKUwM8tfYXZoMOLyzMwJx05d1XLjrdDodLZB3DY4o4shaeaocoeucfZ9pIM/71xFQsyeZ3AvaisXHY+sQ0RRYVgMe38/yFIspq73XgtBePhAZ9AF66dTTWfP8apHB0QWaYORir783Gq0vGyHplwu9SbnN/koc/UcRpMADY7L2I9fJtmGuTzfjiMRM+PlSHFVtK/XY0THSoHo/PSsZt2QlQy3hEkrus7b2sIwyIcsrqwYR0T6hUAhaPj8eCrFhs2F+N9/ZU+c0nd1JkEJbmJuGuiUOgD5DnUiwDYbXzeb1BOWW1S/tpqtWosDQ3CUtzk7C7vBFr9lZhS6HV5xcy1KozK+UvzU3E1GQTBJr3dwkbHVn9W5MPnkx9zqQRJkwaYUJzZx+2F9uwtdCKnWUN6PRgbWNPBAaoMXmECbPTLJiRGgWzQXnDJD3R7KWHc/uaYsraz2DOYkSwFreOj8et4+PR63Bif2ULjtS2oqC2DQV1bQP+jhtr1CMjzojMOCNGJ4Rh4tAIOs31AC/zVy+mmLI6vXTrZqB0GjWmJJswJdl0/v+1dvXhVGsPbPYe2Np7YbP3oLPPCefZU2e1SkBQgBqWUB0sBj0soTrEGgMRHqxl9WvIgpPDe6yAgsqq9sPvbmFBWoQFaZEGmj/rS2qVwGVhFXGfFQA0av8rK2FDw+ntK8WUNYJOHclZvO4Liimrha6QkrN43RcUU1azQc86AvETllA+9wXFlFWJS7SQy+N1X1BEWQMD1IgxKmd5FnJ1w0whrCMMiCLKmhYbSgPYyXmZnD71XhFlzYzj8x+HSCM9NhQ8fnYroqwZVFZygSCtBsPM/J0KK6Ks1yRFsI5A/MwEDvcJ2Zc12RKCIZH0OEfyn2aN4u9Zs7Iv68xR8l1ClAzc5BEmBHI2U0n2ZZ2dxt8nKJGe/uwcYJ7IuqxxYYEYmxDOOgbxUwuyYlhH8Iisy3rnxCGyfmQhGZzrM2IQydGgftmWVatWYckEftf2JdLTalS4naN9RLZlnZcRDVMIn2NAie/cNXEINwMkZFlWQQAemjqMdQzCgfjwINwwOpZ1DLfIsqw3ZMbQqCXitp/OHokADlYSkV1ZNSoBy+eksI5BOJJkCubi+obgyQObBEFoAFAlXRxCFC9RFEXz5X7gUVkJIezI7jSYELmishLCCSorIZygshLCCSorIZygshLCCSorIZygshLCCSorIZz4f8LWKPoUcky6AAAAAElFTkSuQmCC
"
>
</div>
</div>
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered">
<div class="prompt input_prompt">
</div><div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<p><strong>(a)</strong> Write a function <code>two_disks_overlap</code> that tests whether disks at position $\mathbf{x}_1 \in [0,L)^{2}$ and position $\mathbf{x}_2 \in [0,L)^{2}$ overlap and a function <code>disk_config_valid</code> that checks whether a full configuration is valid (non-overlapping and non-touching). <em>Hint:</em> The minimal separation in the $x$-direction can be expressed as a function of <code>x1[0]-x2[0]</code> and the minimal separation in the y-direction as a function of <code>x1[1]-x2[1]</code>. Then use pythagoras. <strong>(15 pts)</strong></p>
</div>
</div></div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[14]:</div><div class="panel panel-primary nbgrader_cell">
<a name="comment-cell-1b2a61bf719003e0"></a><div class="panel-heading"><span class="nbgrader-label">Student's answer</span><span class="pull-right"><a href="#top">(Top)</a></span></div>
<div class="panel-body">
<div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="k">def</span> <span class="nf">two_disks_overlap</span><span class="p">(</span><span class="n">x1</span><span class="p">,</span><span class="n">x2</span><span class="p">,</span><span class="n">L</span><span class="p">):</span>
<span class="sd">&#39;&#39;&#39;Return True if the disks centered at x1 and x2 (represented as 2-element arrays) overlap in [0,L)^2.&#39;&#39;&#39;</span>
<span class="c1"># To take into account all overlap with the boundaries, we will also</span>
<span class="c1"># test shifted disks. As d(x1 + d, x2) = d(x1, x2 - d), we do not have</span>
<span class="c1"># to shift both disks explicitly.</span>
<span class="k">for</span> <span class="n">dx</span> <span class="ow">in</span> <span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="o">-</span><span class="n">L</span><span class="p">,</span> <span class="n">L</span><span class="p">]:</span>
<span class="k">for</span> <span class="n">dy</span> <span class="ow">in</span> <span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="o">-</span><span class="n">L</span><span class="p">,</span> <span class="n">L</span><span class="p">]:</span>
<span class="k">if</span> <span class="p">(</span><span class="n">x1</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">-</span> <span class="n">x2</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">+</span> <span class="n">dx</span><span class="p">)</span><span class="o">**</span><span class="mi">2</span> <span class="o">+</span> <span class="p">(</span><span class="n">x1</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">-</span> <span class="n">x2</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">+</span> <span class="n">dy</span><span class="p">)</span><span class="o">**</span><span class="mi">2</span> <span class="o">&lt;=</span> <span class="mi">4</span><span class="p">:</span>
<span class="k">return</span> <span class="kc">True</span>
<span class="k">return</span> <span class="kc">False</span>
<span class="k">def</span> <span class="nf">disk_config_valid</span><span class="p">(</span><span class="n">x</span><span class="p">,</span><span class="n">L</span><span class="p">):</span>
<span class="sd">&#39;&#39;&#39;Return True if the configuration x (as two-dimensional array) is non-overlapping in [0,L)^2.&#39;&#39;&#39;</span>
<span class="n">n</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">x</span><span class="p">)</span>
<span class="k">for</span> <span class="n">idx_x1</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">n</span><span class="p">):</span>
<span class="c1"># We should not compare x1 with itself, and the previous disks have</span>
<span class="c1"># already been compared.</span>
<span class="k">for</span> <span class="n">idx_x2</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">idx_x1</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span> <span class="n">n</span><span class="p">):</span>
<span class="k">if</span> <span class="n">two_disks_overlap</span><span class="p">(</span><span class="n">x</span><span class="p">[</span><span class="n">idx_x1</span><span class="p">],</span> <span class="n">x</span><span class="p">[</span><span class="n">idx_x2</span><span class="p">],</span> <span class="n">L</span><span class="p">):</span>
<span class="k">return</span> <span class="kc">False</span>
<span class="k">return</span> <span class="kc">True</span>
</pre></div>
</div>
</div>
</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[15]:</div><div class="panel panel-primary nbgrader_cell">
<a name="cell-9f544deda0526691"></a><div class="panel-heading"><span class="nbgrader-label">Grade cell: <code>cell-9f544deda0526691</code></span>
<span class="pull-right">
Score: 10.0 / 10.0 <a href="#top">(Top)</a>
</span></div>
<div class="panel-body">
<div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="k">assert</span> <span class="n">two_disks_overlap</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">([</span><span class="mi">1</span><span class="p">,</span><span class="mi">1</span><span class="p">]),</span><span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">([</span><span class="mi">1</span><span class="p">,</span><span class="mi">1</span><span class="p">]),</span><span class="mi">5</span><span class="p">)</span>
<span class="k">assert</span> <span class="n">two_disks_overlap</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">([</span><span class="mf">0.6</span><span class="p">,</span><span class="mf">0.6</span><span class="p">]),</span><span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">([</span><span class="mf">4.1</span><span class="p">,</span><span class="mf">0.5</span><span class="p">]),</span><span class="mi">5</span><span class="p">)</span>
<span class="k">assert</span> <span class="n">two_disks_overlap</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">([</span><span class="mf">0.3</span><span class="p">,</span><span class="mf">0.3</span><span class="p">]),</span><span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">([</span><span class="mf">4.6</span><span class="p">,</span><span class="mf">4.6</span><span class="p">]),</span><span class="mi">5</span><span class="p">)</span>
<span class="k">assert</span> <span class="ow">not</span> <span class="n">two_disks_overlap</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">([</span><span class="mi">1</span><span class="p">,</span><span class="mi">1</span><span class="p">]),</span><span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">([</span><span class="mf">3.1</span><span class="p">,</span><span class="mi">1</span><span class="p">]),</span><span class="mi">7</span><span class="p">)</span>
<span class="k">assert</span> <span class="ow">not</span> <span class="n">two_disks_overlap</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">([</span><span class="mi">1</span><span class="p">,</span><span class="mi">1</span><span class="p">]),</span><span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">([</span><span class="mi">1</span><span class="p">,</span><span class="mf">3.1</span><span class="p">]),</span><span class="mi">7</span><span class="p">)</span>
<span class="k">assert</span> <span class="ow">not</span> <span class="n">two_disks_overlap</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">([</span><span class="mi">1</span><span class="p">,</span><span class="mi">1</span><span class="p">]),</span><span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">([</span><span class="mf">1.01</span><span class="o">+</span><span class="n">np</span><span class="o">.</span><span class="n">sqrt</span><span class="p">(</span><span class="mi">2</span><span class="p">),</span><span class="mf">1.01</span><span class="o">+</span><span class="n">np</span><span class="o">.</span><span class="n">sqrt</span><span class="p">(</span><span class="mi">2</span><span class="p">)]),</span><span class="mi">6</span><span class="p">)</span>
<span class="k">assert</span> <span class="n">two_disks_overlap</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">([</span><span class="mi">1</span><span class="p">,</span><span class="mi">1</span><span class="p">]),</span><span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">([</span><span class="mf">0.99</span><span class="o">+</span><span class="n">np</span><span class="o">.</span><span class="n">sqrt</span><span class="p">(</span><span class="mi">2</span><span class="p">),</span><span class="mf">0.99</span><span class="o">+</span><span class="n">np</span><span class="o">.</span><span class="n">sqrt</span><span class="p">(</span><span class="mi">2</span><span class="p">)]),</span><span class="mi">6</span><span class="p">)</span>
</pre></div>
</div>
</div>
</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[16]:</div><div class="panel panel-primary nbgrader_cell">
<a name="cell-699454de327d56d5"></a><div class="panel-heading"><span class="nbgrader-label">Grade cell: <code>cell-699454de327d56d5</code></span>
<span class="pull-right">
Score: 5.0 / 5.0 <a href="#top">(Top)</a>
</span></div>
<div class="panel-body">
<div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="k">assert</span> <span class="n">disk_config_valid</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">([[</span><span class="mf">0.1</span><span class="p">,</span><span class="mf">0.5</span><span class="p">],[</span><span class="mf">2.1</span><span class="p">,</span><span class="mf">1.5</span><span class="p">],[</span><span class="mf">3.2</span><span class="p">,</span><span class="mf">3.4</span><span class="p">]]),</span><span class="mi">5</span><span class="p">)</span>
<span class="k">assert</span> <span class="ow">not</span> <span class="n">disk_config_valid</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">([[</span><span class="mf">0.1</span><span class="p">,</span><span class="mf">0.5</span><span class="p">],[</span><span class="mf">2.1</span><span class="p">,</span><span class="mf">1.5</span><span class="p">],[</span><span class="mf">3.2</span><span class="p">,</span><span class="mf">3.4</span><span class="p">],[</span><span class="mf">4.1</span><span class="p">,</span><span class="mf">2.3</span><span class="p">]]),</span><span class="mi">5</span><span class="p">)</span>
<span class="k">assert</span> <span class="n">disk_config_valid</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">([[</span><span class="mi">1</span><span class="p">,</span><span class="mi">1</span><span class="p">],[</span><span class="mf">3.1</span><span class="p">,</span><span class="mi">1</span><span class="p">],[</span><span class="mi">1</span><span class="p">,</span><span class="mf">3.1</span><span class="p">]]),</span><span class="mi">6</span><span class="p">)</span>
<span class="k">assert</span> <span class="ow">not</span> <span class="n">disk_config_valid</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">([[</span><span class="mi">1</span><span class="p">,</span><span class="mi">1</span><span class="p">],[</span><span class="mf">3.1</span><span class="p">,</span><span class="mi">1</span><span class="p">],[</span><span class="mi">1</span><span class="p">,</span><span class="mf">3.1</span><span class="p">],[</span><span class="mf">2.5</span><span class="p">,</span><span class="mf">2.5</span><span class="p">]]),</span><span class="mi">6</span><span class="p">)</span>
</pre></div>
</div>
</div>
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered">
<div class="prompt input_prompt">
</div><div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<p><strong>(b)</strong> Assuming $N \leq \lceil \frac12 L -1 \rceil^2$ where $\lceil r\rceil$ is the smallest integer larger or equal to $r$, write a function <code>generate_initial_positions</code> that produces an arbitrary non-overlapping (and non-touching) initial condition given $N$ and $L$. The layout need not be random, any deterministic layout is ok (e.g. grid). <strong>(10 pts)</strong></p>
</div>
</div></div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[17]:</div><div class="panel panel-primary nbgrader_cell">
<a name="comment-cell-53c1bd894d6fe27d"></a><div class="panel-heading"><span class="nbgrader-label">Student's answer</span><span class="pull-right"><a href="#top">(Top)</a></span></div>
<div class="panel-body">
<div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="k">def</span> <span class="nf">generate_initial_positions</span><span class="p">(</span><span class="n">N</span><span class="p">,</span><span class="n">L</span><span class="p">):</span>
<span class="sd">&#39;&#39;&#39;Return array of positions of N disks in non-overlapping positions.&#39;&#39;&#39;</span>
<span class="k">assert</span> <span class="n">N</span> <span class="o">&lt;=</span> <span class="n">np</span><span class="o">.</span><span class="n">ceil</span><span class="p">(</span> <span class="p">(</span><span class="mf">.5</span><span class="o">*</span><span class="n">L</span><span class="o">**</span><span class="mi">2</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span><span class="o">**</span><span class="mi">2</span> <span class="p">)</span>
<span class="n">disks</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">zeros</span><span class="p">((</span><span class="n">N</span><span class="p">,</span> <span class="mi">2</span><span class="p">))</span>
<span class="n">i</span> <span class="o">=</span> <span class="mi">0</span>
<span class="c1"># To have the disks non-touchting, we have them 2.0001 apart instead of 2.</span>
<span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">np</span><span class="o">.</span><span class="n">arange</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="n">L</span> <span class="o">-</span> <span class="mi">1</span><span class="p">,</span> <span class="mf">2.0001</span><span class="p">):</span>
<span class="k">for</span> <span class="n">y</span> <span class="ow">in</span> <span class="n">np</span><span class="o">.</span><span class="n">arange</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="n">L</span> <span class="o">-</span> <span class="mi">1</span><span class="p">,</span> <span class="mf">2.0001</span><span class="p">):</span>
<span class="k">if</span> <span class="n">i</span> <span class="o">+</span> <span class="mi">1</span> <span class="o">&gt;</span> <span class="n">N</span><span class="p">:</span> <span class="k">return</span> <span class="n">disks</span>
<span class="n">disks</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="n">x</span><span class="p">,</span> <span class="n">y</span>
<span class="n">i</span> <span class="o">+=</span> <span class="mi">1</span>
<span class="k">return</span> <span class="n">disks</span>
<span class="n">plot_disk_configuration</span><span class="p">(</span><span class="n">generate_initial_positions</span><span class="p">(</span><span class="mi">33</span><span class="p">,</span><span class="mf">14.5</span><span class="p">),</span><span class="mf">14.5</span><span class="p">)</span>
</pre></div>
</div>
</div>
<div class="panel-footer">
<div>
<b>Comments:</b> <p>Be careful with .0001</p>
</div>
</div>
</div>
</div>
<div class="output_wrapper">
<div class="output">
<div class="output_area">
<div class="prompt"></div>
<div class="output_png output_subarea ">
<img src="data:image/png;base64,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
"
>
</div>
</div>
</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[18]:</div><div class="panel panel-primary nbgrader_cell">
<a name="cell-e1c80d8b59301b93"></a><div class="panel-heading"><span class="nbgrader-label">Grade cell: <code>cell-e1c80d8b59301b93</code></span>
<span class="pull-right">
Score: 10.0 / 10.0 <a href="#top">(Top)</a>
</span></div>
<div class="panel-body">
<div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="k">for</span> <span class="n">l</span> <span class="ow">in</span> <span class="p">[</span><span class="mi">4</span><span class="p">,</span><span class="mf">9.2</span><span class="p">,</span><span class="mf">14.5</span><span class="p">]:</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">1</span><span class="p">,</span><span class="nb">int</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">ceil</span><span class="p">(</span><span class="n">l</span><span class="o">/</span><span class="mi">2</span><span class="o">-</span><span class="mi">1</span><span class="p">)</span><span class="o">**</span><span class="mi">2</span><span class="p">)</span><span class="o">+</span><span class="mi">1</span><span class="p">):</span>
<span class="k">assert</span> <span class="n">disk_config_valid</span><span class="p">(</span><span class="n">generate_initial_positions</span><span class="p">(</span><span class="n">n</span><span class="p">,</span><span class="n">l</span><span class="p">),</span><span class="n">l</span><span class="p">),</span> <span class="s2">&quot;Failed for n = </span><span class="si">{}</span><span class="s2">, l = </span><span class="si">{}</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">n</span><span class="p">,</span><span class="n">l</span><span class="p">)</span>
</pre></div>
</div>
</div>
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered">
<div class="prompt input_prompt">
</div><div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<p><strong>(c)</strong> Write a function <code>remains_valid_after_move</code> that determines whether in a non-overlapping configuration $x$ moving the $i$th disk to <code>next_position</code> results in a valid non-overlapping configuration. <strong>(10 pts)</strong></p>
</div>
</div></div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[19]:</div><div class="panel panel-primary nbgrader_cell">
<a name="comment-cell-d54b4fa9b2f8eb92"></a><div class="panel-heading"><span class="nbgrader-label">Student's answer</span><span class="pull-right"><a href="#top">(Top)</a></span></div>
<div class="panel-body">
<div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="k">def</span> <span class="nf">remains_valid_after_move</span><span class="p">(</span><span class="n">x</span><span class="p">,</span><span class="n">i</span><span class="p">,</span><span class="n">next_position</span><span class="p">,</span><span class="n">L</span><span class="p">):</span>
<span class="sd">&#39;&#39;&#39;Returns True if replacing x[i] by next_position would yield a valid configuration,</span>
<span class="sd"> otherwise False.&#39;&#39;&#39;</span>
<span class="c1"># We need to create a copy as not to alter the original x</span>
<span class="c1"># outside this function.</span>
<span class="c1">#</span>
<span class="c1"># NOTE: The copying in this function is the heaviest operation.</span>
<span class="c1"># Reducing this overhead would be great, but I am not familiar</span>
<span class="c1"># enough with references/pointers in Python.</span>
<span class="n">copy_x</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">copy</span><span class="p">(</span><span class="n">x</span><span class="p">)</span>
<span class="n">copy_x</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="n">next_position</span>
<span class="k">return</span> <span class="n">disk_config_valid</span><span class="p">(</span><span class="n">copy_x</span><span class="p">,</span> <span class="n">L</span><span class="p">)</span>
</pre></div>
</div>
</div>
</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[20]:</div><div class="panel panel-primary nbgrader_cell">
<a name="cell-e4902309b9869f3d"></a><div class="panel-heading"><span class="nbgrader-label">Grade cell: <code>cell-e4902309b9869f3d</code></span>
<span class="pull-right">
Score: 10.0 / 10.0 <a href="#top">(Top)</a>
</span></div>
<div class="panel-body">
<div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="k">assert</span> <span class="n">remains_valid_after_move</span><span class="p">([[</span><span class="mf">0.1</span><span class="p">,</span><span class="mf">0.5</span><span class="p">],[</span><span class="mf">2.1</span><span class="p">,</span><span class="mf">1.5</span><span class="p">],[</span><span class="mf">3.2</span><span class="p">,</span><span class="mf">3.4</span><span class="p">]],</span><span class="mi">0</span><span class="p">,[</span><span class="mf">4.5</span><span class="p">,</span><span class="mf">0.5</span><span class="p">],</span><span class="mi">5</span><span class="p">)</span>
<span class="k">assert</span> <span class="ow">not</span> <span class="n">remains_valid_after_move</span><span class="p">([[</span><span class="mf">0.1</span><span class="p">,</span><span class="mf">0.5</span><span class="p">],[</span><span class="mf">2.1</span><span class="p">,</span><span class="mf">1.5</span><span class="p">],[</span><span class="mf">3.2</span><span class="p">,</span><span class="mf">3.4</span><span class="p">]],</span><span class="mi">1</span><span class="p">,[</span><span class="mf">4.5</span><span class="p">,</span><span class="mf">0.5</span><span class="p">],</span><span class="mi">5</span><span class="p">)</span>
<span class="k">assert</span> <span class="ow">not</span> <span class="n">remains_valid_after_move</span><span class="p">([[</span><span class="mf">0.1</span><span class="p">,</span><span class="mf">0.5</span><span class="p">],[</span><span class="mf">2.1</span><span class="p">,</span><span class="mf">1.5</span><span class="p">],[</span><span class="mf">3.2</span><span class="p">,</span><span class="mf">3.4</span><span class="p">]],</span><span class="mi">2</span><span class="p">,[</span><span class="mf">3.2</span><span class="p">,</span><span class="mf">2.5</span><span class="p">],</span><span class="mi">5</span><span class="p">)</span>
<span class="k">assert</span> <span class="n">remains_valid_after_move</span><span class="p">([[</span><span class="mf">0.1</span><span class="p">,</span><span class="mf">0.5</span><span class="p">],[</span><span class="mf">2.1</span><span class="p">,</span><span class="mf">1.5</span><span class="p">],[</span><span class="mf">3.2</span><span class="p">,</span><span class="mf">3.4</span><span class="p">]],</span><span class="mi">2</span><span class="p">,[</span><span class="mf">3.2</span><span class="p">,</span><span class="mf">3.8</span><span class="p">],</span><span class="mi">5</span><span class="p">)</span>
</pre></div>
</div>
</div>
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered">
<div class="prompt input_prompt">
</div><div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<p><strong>(d)</strong> Implement the Metropolis-Hastings transition by selecting a uniformly chosen disk and displacing it by $ (\delta\,\mathcal{N}_1,\delta\,\mathcal{N}_2)$ where $\delta&gt;0$ is a parameter and $\mathcal{N}_i$ are independent normal random variables (make sure to keep positions within $[0,L)^2$ by taking the new position modulo $L$). Test run your simulation for $L=11.3$ and $N=20$ and $\delta = 0.3$ and about $10000$ Markov chain steps and plot the final state. <strong>(15 pts)</strong></p>
</div>
</div></div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[21]:</div><div class="panel panel-primary nbgrader_cell">
<a name="comment-cell-e180b99ca699c610"></a><a name="cell-e180b99ca699c610"></a><div class="panel-heading"><span class="nbgrader-label">Student's answer</span><span class="pull-right">
Score: 15.0 / 15.0 <a href="#top">(Top)</a>
</span></div>
<div class="panel-body">
<div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="k">def</span> <span class="nf">MH_disk_move</span><span class="p">(</span><span class="n">x</span><span class="p">,</span><span class="n">L</span><span class="p">,</span><span class="n">delta</span><span class="p">):</span>
<span class="sd">&#39;&#39;&#39;Perform random MH move on configuration x, thus changing the array x (if accepted). </span>
<span class="sd"> Return True if move was accepted, False otherwise.&#39;&#39;&#39;</span>
<span class="c1"># Although it is tempting to use the wacky method of pulling two independent</span>
<span class="c1"># normal RVs using the method developed two weeks ago, let&#39;s just use Numpy.</span>
<span class="n">N1</span><span class="p">,</span> <span class="n">N2</span> <span class="o">=</span> <span class="n">rng</span><span class="o">.</span><span class="n">normal</span><span class="p">(),</span> <span class="n">rng</span><span class="o">.</span><span class="n">normal</span><span class="p">()</span>
<span class="n">n</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">x</span><span class="p">)</span>
<span class="n">i</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">floor</span><span class="p">(</span><span class="n">rng</span><span class="o">.</span><span class="n">random</span><span class="p">()</span><span class="o">*</span><span class="n">n</span><span class="p">)</span><span class="o">.</span><span class="n">astype</span><span class="p">(</span><span class="nb">int</span><span class="p">)</span>
<span class="n">new_position</span> <span class="o">=</span> <span class="n">x</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">+</span> <span class="n">delta</span><span class="o">*</span><span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">([</span><span class="n">N1</span><span class="p">,</span> <span class="n">N2</span><span class="p">])</span>
<span class="n">new_position</span> <span class="o">%=</span> <span class="n">L</span>
<span class="k">if</span> <span class="n">remains_valid_after_move</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">i</span><span class="p">,</span> <span class="n">new_position</span><span class="p">,</span> <span class="n">L</span><span class="p">):</span>
<span class="n">x</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="n">new_position</span>
<span class="k">return</span> <span class="kc">True</span>
<span class="k">return</span> <span class="kc">False</span>
<span class="c1"># Test run and plot resulting configuration</span>
<span class="n">steps</span> <span class="o">=</span> <span class="mi">10000</span>
<span class="n">num_moves</span> <span class="o">=</span> <span class="mi">0</span>
<span class="n">L</span> <span class="o">=</span> <span class="mf">11.3</span>
<span class="n">N</span> <span class="o">=</span> <span class="mi">20</span>
<span class="n">delta</span> <span class="o">=</span> <span class="mf">.3</span>
<span class="n">x</span> <span class="o">=</span> <span class="n">generate_initial_positions</span><span class="p">(</span><span class="n">N</span><span class="p">,</span> <span class="n">L</span><span class="p">)</span>
<span class="n">plot_disk_configuration</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">L</span><span class="p">)</span>
<span class="k">for</span> <span class="n">_</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">steps</span><span class="p">):</span>
<span class="n">num_moves</span> <span class="o">+=</span> <span class="n">MH_disk_move</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">L</span><span class="p">,</span> <span class="n">delta</span><span class="p">)</span>
<span class="n">plot_disk_configuration</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">L</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="s2">&quot;Of </span><span class="si">{}</span><span class="s2"> proposed moves, </span><span class="si">{}</span><span class="s2"> were taken (</span><span class="si">{:.1f}</span><span class="s2">%).&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">steps</span><span class="p">,</span> <span class="n">num_moves</span><span class="p">,</span> <span class="n">num_moves</span><span class="o">/</span><span class="n">steps</span><span class="o">*</span><span class="mi">100</span><span class="p">))</span>
</pre></div>
</div>
</div>
</div>
</div>
<div class="output_wrapper">
<div class="output">
<div class="output_area">
<div class="prompt"></div>
<div class="output_png output_subarea ">
<img src="data:image/png;base64,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
"
>
</div>
</div>
<div class="output_area">
<div class="prompt"></div>
<div class="output_png output_subarea ">
<img src="data:image/png;base64,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
"
>
</div>
</div>
<div class="output_area">
<div class="prompt"></div>
<div class="output_subarea output_stream output_stdout output_text">
<pre>Of 10000 proposed moves, 5219 were taken (52.2%).
</pre>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</body>
</div>
</div>
</div>
</div>
</div>
</body>
</html>