diff --git a/.gitattributes b/.gitattributes index a6344aac8c09253b3b630fb776ae94478aa0275b..d53dc41b437db55daee61e0e27008c731a309a06 100644 --- a/.gitattributes +++ b/.gitattributes @@ -33,3 +33,8 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text *.zip filter=lfs diff=lfs merge=lfs -text *.zst filter=lfs diff=lfs merge=lfs -text *tfevents* filter=lfs diff=lfs merge=lfs -text +models/face_recognition_model-shard1 filter=lfs diff=lfs merge=lfs -text +models/face_recognition_model-shard2 filter=lfs diff=lfs merge=lfs -text +models/mtcnn_model-shard1 filter=lfs diff=lfs merge=lfs -text +models/ssd_mobilenetv1_model-shard1 filter=lfs diff=lfs merge=lfs -text +models/ssd_mobilenetv1_model-shard2 filter=lfs diff=lfs merge=lfs -text diff --git a/css/1.png b/css/1.png new file mode 100644 index 0000000000000000000000000000000000000000..97e1d22ac4c13c42ffd736f42f0ae310caae5cee Binary files /dev/null and b/css/1.png differ diff --git a/css/2.png b/css/2.png new file mode 100644 index 0000000000000000000000000000000000000000..9aa42cd89bd21f99be7e7badb5dd1f622f874ba9 Binary files /dev/null and b/css/2.png differ diff --git a/css/3.png b/css/3.png new file mode 100644 index 0000000000000000000000000000000000000000..89fe8053ecf2ee1e0f623f781571ade2c1bf1e8d Binary files /dev/null and b/css/3.png differ diff --git a/css/4.png b/css/4.png new file mode 100644 index 0000000000000000000000000000000000000000..029fc536ba43feae02af6db5e2e29c52d7a1f1c6 Binary files /dev/null and b/css/4.png differ diff --git a/css/emot.png b/css/emot.png new file mode 100644 index 0000000000000000000000000000000000000000..32951a1c482a37051fc168a5e62386d7e9034708 Binary files /dev/null and b/css/emot.png differ diff --git a/css/emot2.png b/css/emot2.png new file mode 100644 index 0000000000000000000000000000000000000000..31ba97a390d5caf88e10ca92c112abe08e07ebd4 Binary files /dev/null and b/css/emot2.png differ diff --git a/css/idade.png b/css/idade.png new file mode 100644 index 0000000000000000000000000000000000000000..88b700c3385878f8a94a1115941cb0b78a69956b Binary files /dev/null and b/css/idade.png differ diff --git a/css/idade2.png b/css/idade2.png new file mode 100644 index 0000000000000000000000000000000000000000..e606d3a0d65a6d3a7a2076911a5b13e057faf07f Binary files /dev/null and b/css/idade2.png differ diff --git a/css/jso.png b/css/jso.png new file mode 100644 index 0000000000000000000000000000000000000000..43d0b2688b48e49f83700e9b42130b78387f9043 Binary files /dev/null and b/css/jso.png differ diff --git a/css/jso1.png b/css/jso1.png new file mode 100644 index 0000000000000000000000000000000000000000..c948ebed3296cd781c8b2ca32def4f5f52e38347 Binary files /dev/null and b/css/jso1.png differ diff --git a/css/lan.png b/css/lan.png new file mode 100644 index 0000000000000000000000000000000000000000..87ae169f2bc5818ad2f2481337c3e477f44b084a Binary files /dev/null and b/css/lan.png differ diff --git a/css/lan1.png b/css/lan1.png new file mode 100644 index 0000000000000000000000000000000000000000..30a73cb598b757d5b746b6be60459cf7812ebcf0 Binary files /dev/null and b/css/lan1.png differ diff --git a/css/mon.png b/css/mon.png new file mode 100644 index 0000000000000000000000000000000000000000..6c51957d852e7771d3171411b27c9d42579a5b52 Binary files /dev/null and b/css/mon.png differ diff --git a/css/olhar.css b/css/olhar.css new file mode 100644 index 0000000000000000000000000000000000000000..754d45a4e08922116bf4187aa5729d25334bdf27 --- /dev/null +++ b/css/olhar.css @@ -0,0 +1,231 @@ +body { + margin: 0; + font-family: Arial, sans-serif; + } + + + + nav ul { + list-style: none; + margin: 0; + padding: 0; + display: flex; + } + + nav li { + margin-right: 10px; + } + + nav a { + color: #fff; + text-decoration: none; + } + + + .active { + font-weight: bold; + color: #e30000; + } + + form { + display: flex; + flex-direction: row; + justify-content: space-between; + align-items: center; + } + + label, input[type="file"], input[type="checkbox"], input[type="submit"] { + width: 49%; + text-align: center; + margin: 10px 0; + } + #detectar-emocoes-results { + top: 190px; + left: 370px; + } + input[type="button"] { + display: none; + } + + .switch { + position: relative; + display: inline-block; + width: 60px; + height: 34px; + } + + .switch input { + opacity: 0; + width: 0; + height: 0; + } + + .slider { + position: absolute; + cursor: pointer; + top: 0; + left: 0; + right: 0; + bottom: 0; + background-color: #ccc; + -webkit-transition: .4s; + transition: .4s; + } + + .slider:before { + position: absolute; + content: ""; + height: 26px; + width: 26px; + left: 4px; + bottom: 4px; + background-color: white; + -webkit-transition: .4s; + transition: .4s; + } + + input:checked + .slider { + background-color: #2196F3; + } + + input:focus + .slider { + box-shadow: 0 0 1px #2196F3; + } + + input:checked + .slider:before { + -webkit-transform: translateX(26px); + -ms-transform: translateX(26px); + transform: translateX(26px); + } + + .slider.round { + border-radius: 34px; + } + + .slider.round:before { + border-radius: 50%; + } + + input[type="submit"] { + background-color: #4CAF50; /* Fundo verde */ + color: white; /* Cor da fonte branca */ + padding: 14px 20px; /* Espaçamento interno */ + border: none; /* Sem borda */ + border-radius: 4px; /* Arredondamento de borda */ + cursor: pointer; /* Cursor em forma de mão */ + font-size: 16px; /* Tamanho da fonte */ + width: 120px; + } + + input[type="submit"]:hover { + background-color: #3e8e41; /* Mudança de cor ao passar o mouse */ + } + + #start-camera-button.slider:before { + content: ""; + background-image: url('./sun.png'); + font-family: "Font Awesome 5 Free"; + font-weight: 900; + color: rgb(5, 2, 2); + text-align: center; + line-height: 26px; + font-size: 16px; + } + + #start-camera-button:checked + .slider:before { + background-image: url('./mon.png'); + background-size: 26px 26px; /* altura e largura que você deseja */ + background-repeat: no-repeat; + } + + #start-camera-button + .slider:before { + background-image: url('./sun.png'); + background-size: 26px 26px; /* altura e largura que você deseja */ + background-repeat: no-repeat; + } + + #extract-points-button:checked + .slider:before { + content: "\f1c0"; + font-family: "Font Awesome 5 Free"; + font-weight: 900; + color: white; + text-align: center; + line-height: 26px; + font-size: 16px; + } + #extract-points-button:checked + .slider:before { + background-image: url('./jso.png'); + background-size: 26px 26px; /* altura e largura que você deseja */ + background-repeat: no-repeat; + } + + #extract-points-button + .slider:before { + background-image: url('./jso1.png'); + background-size: 26px 26px; /* altura e largura que você deseja */ + background-repeat: no-repeat; + } + .eye-button { + width: 50px; + height: 50px; + margin: 10px; + background: #5753535f; + color:white; + font-size: 22px; +} + +#camera-card, video, canvas { + + + width: 600px; + height: 350px; + position: absolute; + top: 10px; + box-shadow: 0px 4px 8px rgba(0, 0, 0, 0.1); + background: #fff; + border-radius: 8px; + overflow: hidden; + z-index: 1000; +} +video { + width: 100%; + height: 100%; +} + +canvas { + width: 100%; + height: 100%; +} +#camera-card { + left: 200px; +} + +#canvas-botoes { + left: 200px; +} +#canvas-botoes { + width: 600px; + height: 350px; + position: fixed; + top: 60px; + box-shadow: 0px 4px 8px rgba(0, 0, 0, 0.1); + background: #ffffff4a; + border-radius: 8px; + overflow: hidden; + z-index: 1200; +} +#detectar-emocoes-form { + margin-top: 170px; +} +#landmarkCanvas { + background: none; + z-index: 1500; +} + +.btnGroup { + margin-top: 20px; +} + + +.selected { + background-color: lightblue; +} \ No newline at end of file diff --git a/css/pont1.png b/css/pont1.png new file mode 100644 index 0000000000000000000000000000000000000000..32d216f4a63bc0dd9c12c4592d4b1c2232ce74f7 Binary files /dev/null and b/css/pont1.png differ diff --git a/css/pont2.png b/css/pont2.png new file mode 100644 index 0000000000000000000000000000000000000000..80263067e7eec2e6d20b9823d19dc961ab3b1529 Binary files /dev/null and b/css/pont2.png differ diff --git a/css/style.css b/css/style.css new file mode 100644 index 0000000000000000000000000000000000000000..3d7bc71358ab404aa2c112f9522c0713894f9a7f --- /dev/null +++ b/css/style.css @@ -0,0 +1,276 @@ +body { + margin: 0; + font-family: Arial, sans-serif; + } + + header { + position: fixed; + top: 0; + left: 0; + right: 0; + background-color: #333; + color: #fff; + padding: 10px; + } + + nav ul { + list-style: none; + margin: 0; + padding: 0; + display: flex; + } + + nav li { + margin-right: 10px; + } + + nav a { + color: #fff; + text-decoration: none; + } + + main { + padding: 50px; + } + + section { + display: none; + margin-top: 50px; + } + + section.active { + display: block; + } + + .active { + font-weight: bold; + color: #e30000; + } + video { + position: fixed; + top: 210px; + left: 250px; + width: 240px; + height: 200px; + margin-right: 20px; + } + + canvas { + position: fixed; + top: 210px; + left: 250px; + width: 240px; + height: 200px; + margin-right: 20px; + } + form { + display: flex; + flex-direction: row; + justify-content: space-between; + align-items: center; + } + + label, input[type="file"], input[type="checkbox"], input[type="submit"] { + width: 49%; + text-align: center; + margin: 10px 0; + } + #detectar-emocoes-results { + top: 190px; + left: 370px; + } + input[type="button"] { + display: none; + } + + .switch { + position: relative; + display: inline-block; + width: 60px; + height: 34px; + } + + .switch input { + opacity: 0; + width: 0; + height: 0; + } + + .slider { + position: absolute; + cursor: pointer; + top: 0; + left: 0; + right: 0; + bottom: 0; + background-color: #ccc; + -webkit-transition: .4s; + transition: .4s; + } + + .slider:before { + position: absolute; + content: ""; + height: 26px; + width: 26px; + left: 4px; + bottom: 4px; + background-color: white; + -webkit-transition: .4s; + transition: .4s; + } + + input:checked + .slider { + background-color: #2196F3; + } + + input:focus + .slider { + box-shadow: 0 0 1px #2196F3; + } + + input:checked + .slider:before { + -webkit-transform: translateX(26px); + -ms-transform: translateX(26px); + transform: translateX(26px); + } + + .slider.round { + border-radius: 34px; + } + + .slider.round:before { + border-radius: 50%; + } + + input[type="submit"] { + background-color: #4CAF50; /* Fundo verde */ + color: white; /* Cor da fonte branca */ + padding: 14px 20px; /* Espaçamento interno */ + border: none; /* Sem borda */ + border-radius: 4px; /* Arredondamento de borda */ + cursor: pointer; /* Cursor em forma de mão */ + font-size: 16px; /* Tamanho da fonte */ + width: 120px; + } + + input[type="submit"]:hover { + background-color: #3e8e41; /* Mudança de cor ao passar o mouse */ + } + + #start-camera-button.slider:before { + content: ""; + background-image: url('./sun.png'); + font-family: "Font Awesome 5 Free"; + font-weight: 900; + color: rgb(5, 2, 2); + text-align: center; + line-height: 26px; + font-size: 16px; + } + + #start-camera-button:checked + .slider:before { + background-image: url('./mon.png'); + background-size: 26px 26px; /* altura e largura que você deseja */ + background-repeat: no-repeat; + } + + #start-camera-button + .slider:before { + background-image: url('./sun.png'); + background-size: 26px 26px; /* altura e largura que você deseja */ + background-repeat: no-repeat; + } + /* Emotions Icon */ + #detect-emotions-button:before { + content: ""; + background-image: url('./sun.png'); + font-family: "Font Awesome 5 Free"; + font-weight: 900; + color: white; + text-align: center; + line-height: 26px; + font-size: 16px; + height: 36px; + width: 36px; + } + #detect-emotions-button:checked + .slider:before { + background-image: url('./emot.png'); + background-size: 26px 26px; /* altura e largura que você deseja */ + background-repeat: no-repeat; + } + + #detect-emotions-button + .slider:before { + background-image: url('./emot2.png'); + background-size: 26px 26px; /* altura e largura que você deseja */ + background-repeat: no-repeat; + } + + /* Landmarks Icon */ + #detect-landmarks-button:checked + .slider:before { + content: "\f0c2"; + font-family: "Font Awesome 5 Free"; + font-weight: 900; + color: white; + text-align: center; + line-height: 26px; + font-size: 16px; + } + #detect-landmarks-button:checked + .slider:before { + background-image: url('./lan.png'); + background-size: 26px 26px; /* altura e largura que você deseja */ + background-repeat: no-repeat; + } + + #detect-landmarks-button + .slider:before { + background-image: url('./lan1.png'); + background-size: 26px 26px; /* altura e largura que você deseja */ + background-repeat: no-repeat; + } + /* Age Icon */ + #detect-age-button:checked + .slider:before { + content: "\f235"; + font-family: "Font Awesome 5 Free"; + font-weight: 900; + color: white; + text-align: center; + line-height: 26px; + font-size: 16px; + } + #detect-age-button:checked + .slider:before { + background-image: url('./idade.png'); + background-size: 26px 26px; /* altura e largura que você deseja */ + background-repeat: no-repeat; + } + + #detect-age-button + .slider:before { + background-image: url('./idade2.png'); + background-size: 26px 26px; /* altura e largura que você deseja */ + background-repeat: no-repeat; + } + /* Extract Points Icon */ + #extract-points-button:checked + .slider:before { + content: "\f1c0"; + font-family: "Font Awesome 5 Free"; + font-weight: 900; + color: white; + text-align: center; + line-height: 26px; + font-size: 16px; + } + #extract-points-button:checked + .slider:before { + background-image: url('./jso.png'); + background-size: 26px 26px; /* altura e largura que você deseja */ + background-repeat: no-repeat; + } + + #extract-points-button + .slider:before { + background-image: url('./jso1.png'); + background-size: 26px 26px; /* altura e largura que você deseja */ + background-repeat: no-repeat; + } + .eye-button { + /* Estilize seus botões aqui */ + width: 50px; + height: 50px; + margin: 10px; + font-size: 24px; +} diff --git a/css/sun.png b/css/sun.png new file mode 100644 index 0000000000000000000000000000000000000000..288d45bf6ea2eb6fdd5ebe16b61240ff748fd7c2 Binary files /dev/null and b/css/sun.png differ diff --git a/css/treinamento.png b/css/treinamento.png new file mode 100644 index 0000000000000000000000000000000000000000..9204b25fc067f38298101eff6301340d2a66942c Binary files /dev/null and b/css/treinamento.png differ diff --git a/css/w3.css b/css/w3.css new file mode 100644 index 0000000000000000000000000000000000000000..a68ea9908c561f8211be89c172ac08f543c2c068 --- /dev/null +++ b/css/w3.css @@ -0,0 +1,235 @@ +/* W3.CSS 4.15 December 2020 by Jan Egil and Borge Refsnes */ +html{box-sizing:border-box}*,*:before,*:after{box-sizing:inherit} +/* Extract from normalize.css by Nicolas Gallagher and Jonathan Neal git.io/normalize */ +html{-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0} +article,aside,details,figcaption,figure,footer,header,main,menu,nav,section{display:block}summary{display:list-item} +audio,canvas,progress,video{display:inline-block}progress{vertical-align:baseline} +audio:not([controls]){display:none;height:0}[hidden],template{display:none} +a{background-color:transparent}a:active,a:hover{outline-width:0} +abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted} +b,strong{font-weight:bolder}dfn{font-style:italic}mark{background:#ff0;color:#000} +small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline} +sub{bottom:-0.25em}sup{top:-0.5em}figure{margin:1em 40px}img{border-style:none} +code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}hr{box-sizing:content-box;height:0;overflow:visible} +button,input,select,textarea,optgroup{font:inherit;margin:0}optgroup{font-weight:bold} +button,input{overflow:visible}button,select{text-transform:none} +button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button} +button::-moz-focus-inner,[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner{border-style:none;padding:0} +button:-moz-focusring,[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring{outline:1px dotted ButtonText} +fieldset{border:1px solid #c0c0c0;margin:0 2px;padding:.35em .625em .75em} +legend{color:inherit;display:table;max-width:100%;padding:0;white-space:normal}textarea{overflow:auto} +[type=checkbox],[type=radio]{padding:0} +[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto} +[type=search]{-webkit-appearance:textfield;outline-offset:-2px} +[type=search]::-webkit-search-decoration{-webkit-appearance:none} +::-webkit-file-upload-button{-webkit-appearance:button;font:inherit} +/* End extract */ +html,body{font-family:Verdana,sans-serif;font-size:15px;line-height:1.5}html{overflow-x:hidden} +h1{font-size:36px}h2{font-size:30px}h3{font-size:24px}h4{font-size:20px}h5{font-size:18px}h6{font-size:16px} +.w3-serif{font-family:serif}.w3-sans-serif{font-family:sans-serif}.w3-cursive{font-family:cursive}.w3-monospace{font-family:monospace} +h1,h2,h3,h4,h5,h6{font-family:"Segoe UI",Arial,sans-serif;font-weight:400;margin:10px 0}.w3-wide{letter-spacing:4px} +hr{border:0;border-top:1px solid #eee;margin:20px 0} +.w3-image{max-width:100%;height:auto}img{vertical-align:middle}a{color:inherit} +.w3-table,.w3-table-all{border-collapse:collapse;border-spacing:0;width:100%;display:table}.w3-table-all{border:1px solid #ccc} +.w3-bordered tr,.w3-table-all tr{border-bottom:1px solid #ddd}.w3-striped tbody tr:nth-child(even){background-color:#f1f1f1} +.w3-table-all tr:nth-child(odd){background-color:#fff}.w3-table-all tr:nth-child(even){background-color:#f1f1f1} +.w3-hoverable tbody tr:hover,.w3-ul.w3-hoverable li:hover{background-color:#ccc}.w3-centered tr th,.w3-centered tr td{text-align:center} +.w3-table td,.w3-table th,.w3-table-all td,.w3-table-all th{padding:8px 8px;display:table-cell;text-align:left;vertical-align:top} +.w3-table th:first-child,.w3-table td:first-child,.w3-table-all th:first-child,.w3-table-all td:first-child{padding-left:16px} +.w3-btn,.w3-button{border:none;display:inline-block;padding:8px 16px;vertical-align:middle;overflow:hidden;text-decoration:none;color:inherit;background-color:inherit;text-align:center;cursor:pointer;white-space:nowrap} +.w3-btn:hover{box-shadow:0 8px 16px 0 rgba(0,0,0,0.2),0 6px 20px 0 rgba(0,0,0,0.19)} +.w3-btn,.w3-button{-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none} +.w3-disabled,.w3-btn:disabled,.w3-button:disabled{cursor:not-allowed;opacity:0.3}.w3-disabled *,:disabled *{pointer-events:none} +.w3-btn.w3-disabled:hover,.w3-btn:disabled:hover{box-shadow:none} +.w3-badge,.w3-tag{background-color:#000;color:#fff;display:inline-block;padding-left:8px;padding-right:8px;text-align:center}.w3-badge{border-radius:50%} +.w3-ul{list-style-type:none;padding:0;margin:0}.w3-ul li{padding:8px 16px;border-bottom:1px solid #ddd}.w3-ul li:last-child{border-bottom:none} +.w3-tooltip,.w3-display-container{position:relative}.w3-tooltip .w3-text{display:none}.w3-tooltip:hover .w3-text{display:inline-block} +.w3-ripple:active{opacity:0.5}.w3-ripple{transition:opacity 0s} +.w3-input{padding:8px;display:block;border:none;border-bottom:1px solid #ccc;width:100%} +.w3-select{padding:9px 0;width:100%;border:none;border-bottom:1px solid #ccc} +.w3-dropdown-click,.w3-dropdown-hover{position:relative;display:inline-block;cursor:pointer} +.w3-dropdown-hover:hover .w3-dropdown-content{display:block} +.w3-dropdown-hover:first-child,.w3-dropdown-click:hover{background-color:#ccc;color:#000} +.w3-dropdown-hover:hover > .w3-button:first-child,.w3-dropdown-click:hover > .w3-button:first-child{background-color:#ccc;color:#000} +.w3-dropdown-content{cursor:auto;color:#000;background-color:#fff;display:none;position:absolute;min-width:160px;margin:0;padding:0;z-index:1} +.w3-check,.w3-radio{width:24px;height:24px;position:relative;top:6px} +.w3-sidebar{height:100%;width:200px;background-color:#fff;position:fixed!important;z-index:1;overflow:auto} +.w3-bar-block .w3-dropdown-hover,.w3-bar-block .w3-dropdown-click{width:100%} +.w3-bar-block .w3-dropdown-hover .w3-dropdown-content,.w3-bar-block .w3-dropdown-click .w3-dropdown-content{min-width:100%} +.w3-bar-block .w3-dropdown-hover .w3-button,.w3-bar-block .w3-dropdown-click .w3-button{width:100%;text-align:left;padding:8px 16px} +.w3-main,#main{transition:margin-left .4s} +.w3-modal{z-index:3;display:none;padding-top:100px;position:fixed;left:0;top:0;width:100%;height:100%;overflow:auto;background-color:rgb(0,0,0);background-color:rgba(0,0,0,0.4)} +.w3-modal-content{margin:auto;background-color:#fff;position:relative;padding:0;outline:0;width:600px} +.w3-bar{width:100%;overflow:hidden}.w3-center .w3-bar{display:inline-block;width:auto} +.w3-bar .w3-bar-item{padding:8px 16px;float:left;width:auto;border:none;display:block;outline:0} +.w3-bar .w3-dropdown-hover,.w3-bar .w3-dropdown-click{position:static;float:left} +.w3-bar .w3-button{white-space:normal} +.w3-bar-block .w3-bar-item{width:100%;display:block;padding:8px 16px;text-align:left;border:none;white-space:normal;float:none;outline:0} +.w3-bar-block.w3-center .w3-bar-item{text-align:center}.w3-block{display:block;width:100%} +.w3-responsive{display:block;overflow-x:auto} +.w3-container:after,.w3-container:before,.w3-panel:after,.w3-panel:before,.w3-row:after,.w3-row:before,.w3-row-padding:after,.w3-row-padding:before, +.w3-cell-row:before,.w3-cell-row:after,.w3-clear:after,.w3-clear:before,.w3-bar:before,.w3-bar:after{content:"";display:table;clear:both} +.w3-col,.w3-half,.w3-third,.w3-twothird,.w3-threequarter,.w3-quarter{float:left;width:100%} +.w3-col.s1{width:8.33333%}.w3-col.s2{width:16.66666%}.w3-col.s3{width:24.99999%}.w3-col.s4{width:33.33333%} +.w3-col.s5{width:41.66666%}.w3-col.s6{width:49.99999%}.w3-col.s7{width:58.33333%}.w3-col.s8{width:66.66666%} +.w3-col.s9{width:74.99999%}.w3-col.s10{width:83.33333%}.w3-col.s11{width:91.66666%}.w3-col.s12{width:99.99999%} +@media (min-width:601px){.w3-col.m1{width:8.33333%}.w3-col.m2{width:16.66666%}.w3-col.m3,.w3-quarter{width:19.99999%}.w3-col.m4,.w3-third{width:33.33333%} +.w3-col.m5{width:41.66666%}.w3-col.m6,.w3-half{width:49.99999%}.w3-col.m7{width:58.33333%}.w3-col.m8,.w3-twothird{width:66.66666%} +.w3-col.m9,.w3-threequarter{width:74.99999%}.w3-col.m10{width:83.33333%}.w3-col.m11{width:91.66666%}.w3-col.m12{width:99.99999%}} +@media (min-width:993px){.w3-col.l1{width:8.33333%}.w3-col.l2{width:16.66666%}.w3-col.l3{width:24.99999%}.w3-col.l4{width:33.33333%} +.w3-col.l5{width:41.66666%}.w3-col.l6{width:49.99999%}.w3-col.l7{width:58.33333%}.w3-col.l8{width:66.66666%} +.w3-col.l9{width:74.99999%}.w3-col.l10{width:83.33333%}.w3-col.l11{width:91.66666%}.w3-col.l12{width:99.99999%}} +.w3-rest{overflow:hidden}.w3-stretch{margin-left:-16px;margin-right:-16px} +.w3-content,.w3-auto{margin-left:auto;margin-right:auto}.w3-content{max-width:980px}.w3-auto{max-width:1140px} +.w3-cell-row{display:table;width:100%}.w3-cell{display:table-cell} +.w3-cell-top{vertical-align:top}.w3-cell-middle{vertical-align:middle}.w3-cell-bottom{vertical-align:bottom} +.w3-hide{display:none!important}.w3-show-block,.w3-show{display:block!important}.w3-show-inline-block{display:inline-block!important} +@media (max-width:1205px){.w3-auto{max-width:95%}} +@media (max-width:600px){.w3-modal-content{margin:0 10px;width:auto!important}.w3-modal{padding-top:30px} +.w3-dropdown-hover.w3-mobile .w3-dropdown-content,.w3-dropdown-click.w3-mobile .w3-dropdown-content{position:relative} +.w3-hide-small{display:none!important}.w3-mobile{display:block;width:100%!important}.w3-bar-item.w3-mobile,.w3-dropdown-hover.w3-mobile,.w3-dropdown-click.w3-mobile{text-align:center} +.w3-dropdown-hover.w3-mobile,.w3-dropdown-hover.w3-mobile .w3-btn,.w3-dropdown-hover.w3-mobile .w3-button,.w3-dropdown-click.w3-mobile,.w3-dropdown-click.w3-mobile .w3-btn,.w3-dropdown-click.w3-mobile .w3-button{width:100%}} +@media (max-width:768px){.w3-modal-content{width:500px}.w3-modal{padding-top:50px}} +@media (min-width:993px){.w3-modal-content{width:900px}.w3-hide-large{display:none!important}.w3-sidebar.w3-collapse{display:block!important}} +@media (max-width:992px) and (min-width:601px){.w3-hide-medium{display:none!important}} +@media (max-width:992px){.w3-sidebar.w3-collapse{display:none}.w3-main{margin-left:0!important;margin-right:0!important}.w3-auto{max-width:100%}} +.w3-top,.w3-bottom{position:fixed;width:100%;z-index:1}.w3-top{top:0}.w3-bottom{bottom:0} +.w3-overlay{position:fixed;display:none;width:100%;height:100%;top:0;left:0;right:0;bottom:0;background-color:rgba(0,0,0,0.5);z-index:2} +.w3-display-topleft{position:absolute;left:0;top:0}.w3-display-topright{position:absolute;right:0;top:0} +.w3-display-bottomleft{position:absolute;left:0;bottom:0}.w3-display-bottomright{position:absolute;right:0;bottom:0} +.w3-display-middle{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%)} +.w3-display-left{position:absolute;top:50%;left:-33%;transform:translate(0%,-50%);-ms-transform:translate(-0%,-50%)} +.w3-display-right{position:absolute;top:50%;right:-33%;transform:translate(0%,-50%);-ms-transform:translate(0%,-50%)} +.w3-display-topmiddle{position:absolute;left:50%;top:0;transform:translate(-50%,0%);-ms-transform:translate(-50%,0%)} +.w3-display-bottommiddle{position:absolute;left:50%;bottom:0;transform:translate(-50%,0%);-ms-transform:translate(-50%,0%)} +.w3-display-container:hover .w3-display-hover{display:block}.w3-display-container:hover span.w3-display-hover{display:inline-block}.w3-display-hover{display:none} +.w3-display-position{position:absolute} +.w3-circle{border-radius:50%} +.w3-round-small{border-radius:2px}.w3-round,.w3-round-medium{border-radius:4px}.w3-round-large{border-radius:8px}.w3-round-xlarge{border-radius:16px}.w3-round-xxlarge{border-radius:32px} +.w3-row-padding,.w3-row-padding>.w3-half,.w3-row-padding>.w3-third,.w3-row-padding>.w3-twothird,.w3-row-padding>.w3-threequarter,.w3-row-padding>.w3-quarter,.w3-row-padding>.w3-col{padding:0 8px} +.w3-container,.w3-panel{padding:0.01em 16px}.w3-panel{margin-top:16px;margin-bottom:16px} +.w3-code,.w3-codespan{font-family:Consolas,"courier new";font-size:16px} +.w3-code{width:auto;background-color:#fff;padding:8px 12px;border-left:4px solid #4CAF50;word-wrap:break-word} +.w3-codespan{color:crimson;background-color:#f1f1f1;padding-left:4px;padding-right:4px;font-size:110%} +.w3-card,.w3-card-2{box-shadow:0 2px 5px 0 rgba(0,0,0,0.16),0 2px 10px 0 rgba(0,0,0,0.12)} +.w3-card-4,.w3-hover-shadow:hover{box-shadow:0 4px 10px 0 rgba(0,0,0,0.2),0 4px 20px 0 rgba(0,0,0,0.19)} +.w3-spin{animation:w3-spin 2s infinite linear}@keyframes w3-spin{0%{transform:rotate(0deg)}100%{transform:rotate(359deg)}} +.w3-animate-fading{animation:fading 10s infinite}@keyframes fading{0%{opacity:0}50%{opacity:1}100%{opacity:0}} +.w3-animate-opacity{animation:opac 0.8s}@keyframes opac{from{opacity:0} to{opacity:1}} +.w3-animate-top{position:relative;animation:animatetop 0.4s}@keyframes animatetop{from{top:-300px;opacity:0} to{top:0;opacity:1}} +.w3-animate-left{position:relative;animation:animateleft 0.4s}@keyframes animateleft{from{left:-300px;opacity:0} to{left:0;opacity:1}} +.w3-animate-right{position:relative;animation:animateright 0.4s}@keyframes animateright{from{right:-300px;opacity:0} to{right:0;opacity:1}} +.w3-animate-bottom{position:relative;animation:animatebottom 0.4s}@keyframes animatebottom{from{bottom:-300px;opacity:0} to{bottom:0;opacity:1}} +.w3-animate-zoom {animation:animatezoom 0.6s}@keyframes animatezoom{from{transform:scale(0)} to{transform:scale(1)}} +.w3-animate-input{transition:width 0.4s ease-in-out}.w3-animate-input:focus{width:100%!important} +.w3-opacity,.w3-hover-opacity:hover{opacity:0.60}.w3-opacity-off,.w3-hover-opacity-off:hover{opacity:1} +.w3-opacity-max{opacity:0.25}.w3-opacity-min{opacity:0.75} +.w3-greyscale-max,.w3-grayscale-max,.w3-hover-greyscale:hover,.w3-hover-grayscale:hover{filter:grayscale(100%)} +.w3-greyscale,.w3-grayscale{filter:grayscale(75%)}.w3-greyscale-min,.w3-grayscale-min{filter:grayscale(50%)} +.w3-sepia{filter:sepia(75%)}.w3-sepia-max,.w3-hover-sepia:hover{filter:sepia(100%)}.w3-sepia-min{filter:sepia(50%)} +.w3-tiny{font-size:10px!important}.w3-small{font-size:12px!important}.w3-medium{font-size:15px!important}.w3-large{font-size:18px!important} +.w3-xlarge{font-size:24px!important}.w3-xxlarge{font-size:36px!important}.w3-xxxlarge{font-size:48px!important}.w3-jumbo{font-size:64px!important} +.w3-left-align{text-align:left!important}.w3-right-align{text-align:right!important}.w3-justify{text-align:justify!important}.w3-center{text-align:center!important} +.w3-border-0{border:0!important}.w3-border{border:1px solid #ccc!important} +.w3-border-top{border-top:1px solid #ccc!important}.w3-border-bottom{border-bottom:1px solid #ccc!important} +.w3-border-left{border-left:1px solid #ccc!important}.w3-border-right{border-right:1px solid #ccc!important} +.w3-topbar{border-top:6px solid #ccc!important}.w3-bottombar{border-bottom:6px solid #ccc!important} +.w3-leftbar{border-left:6px solid #ccc!important}.w3-rightbar{border-right:6px solid #ccc!important} +.w3-section,.w3-code{margin-top:16px!important;margin-bottom:16px!important} +.w3-margin{margin:16px!important}.w3-margin-top{margin-top:16px!important}.w3-margin-bottom{margin-bottom:16px!important} +.w3-margin-left{margin-left:16px!important}.w3-margin-right{margin-right:16px!important} +.w3-padding-small{padding:4px 8px!important}.w3-padding{padding:8px 16px!important}.w3-padding-large{padding:12px 24px!important} +.w3-padding-16{padding-top:16px!important;padding-bottom:16px!important}.w3-padding-24{padding-top:24px!important;padding-bottom:24px!important} +.w3-padding-32{padding-top:32px!important;padding-bottom:32px!important}.w3-padding-48{padding-top:48px!important;padding-bottom:48px!important} +.w3-padding-64{padding-top:64px!important;padding-bottom:64px!important} +.w3-padding-top-64{padding-top:64px!important}.w3-padding-top-48{padding-top:48px!important} +.w3-padding-top-32{padding-top:32px!important}.w3-padding-top-24{padding-top:24px!important} +.w3-left{float:left!important}.w3-right{float:right!important} +.w3-button:hover{color:#000!important;background-color:#ccc!important} +.w3-transparent,.w3-hover-none:hover{background-color:transparent!important} +.w3-hover-none:hover{box-shadow:none!important} +/* Colors */ +.w3-amber,.w3-hover-amber:hover{color:#000!important;background-color:#ffc107!important} +.w3-aqua,.w3-hover-aqua:hover{color:#000!important;background-color:#00ffff!important} +.w3-blue,.w3-hover-blue:hover{color:#fff!important;background-color:#2196F3!important} +.w3-light-blue,.w3-hover-light-blue:hover{color:#000!important;background-color:#87CEEB!important} +.w3-brown,.w3-hover-brown:hover{color:#fff!important;background-color:#795548!important} +.w3-cyan,.w3-hover-cyan:hover{color:#000!important;background-color:#00bcd4!important} +.w3-blue-grey,.w3-hover-blue-grey:hover,.w3-blue-gray,.w3-hover-blue-gray:hover{color:#fff!important;background-color:#607d8b!important} +.w3-green,.w3-hover-green:hover{color:#fff!important;background-color:#4CAF50!important} +.w3-light-green,.w3-hover-light-green:hover{color:#000!important;background-color:#8bc34a!important} +.w3-indigo,.w3-hover-indigo:hover{color:#fff!important;background-color:#3f51b5!important} +.w3-khaki,.w3-hover-khaki:hover{color:#000!important;background-color:#f0e68c!important} +.w3-lime,.w3-hover-lime:hover{color:#000!important;background-color:#cddc39!important} +.w3-orange,.w3-hover-orange:hover{color:#000!important;background-color:#ff9800!important} +.w3-deep-orange,.w3-hover-deep-orange:hover{color:#fff!important;background-color:#ff5722!important} +.w3-pink,.w3-hover-pink:hover{color:#fff!important;background-color:#e91e63!important} +.w3-purple,.w3-hover-purple:hover{color:#fff!important;background-color:#9c27b0!important} +.w3-deep-purple,.w3-hover-deep-purple:hover{color:#fff!important;background-color:#673ab7!important} +.w3-red,.w3-hover-red:hover{color:#fff!important;background-color:#f44336!important} +.w3-sand,.w3-hover-sand:hover{color:#000!important;background-color:#fdf5e6!important} +.w3-teal,.w3-hover-teal:hover{color:#fff!important;background-color:#009688!important} +.w3-yellow,.w3-hover-yellow:hover{color:#000!important;background-color:#ffeb3b!important} +.w3-white,.w3-hover-white:hover{color:#000!important;background-color:#fff!important} +.w3-black,.w3-hover-black:hover{color:#fff!important;background-color:#000!important} +.w3-grey,.w3-hover-grey:hover,.w3-gray,.w3-hover-gray:hover{color:#000!important;background-color:#9e9e9e!important} +.w3-light-grey,.w3-hover-light-grey:hover,.w3-light-gray,.w3-hover-light-gray:hover{color:#000!important;background-color:#f1f1f1!important} +.w3-dark-grey,.w3-hover-dark-grey:hover,.w3-dark-gray,.w3-hover-dark-gray:hover{color:#fff!important;background-color:#616161!important} +.w3-pale-red,.w3-hover-pale-red:hover{color:#000!important;background-color:#ffdddd!important} +.w3-pale-green,.w3-hover-pale-green:hover{color:#000!important;background-color:#ddffdd!important} +.w3-pale-yellow,.w3-hover-pale-yellow:hover{color:#000!important;background-color:#ffffcc!important} +.w3-pale-blue,.w3-hover-pale-blue:hover{color:#000!important;background-color:#ddffff!important} +.w3-text-amber,.w3-hover-text-amber:hover{color:#ffc107!important} +.w3-text-aqua,.w3-hover-text-aqua:hover{color:#00ffff!important} +.w3-text-blue,.w3-hover-text-blue:hover{color:#2196F3!important} +.w3-text-light-blue,.w3-hover-text-light-blue:hover{color:#87CEEB!important} +.w3-text-brown,.w3-hover-text-brown:hover{color:#795548!important} +.w3-text-cyan,.w3-hover-text-cyan:hover{color:#00bcd4!important} +.w3-text-blue-grey,.w3-hover-text-blue-grey:hover,.w3-text-blue-gray,.w3-hover-text-blue-gray:hover{color:#607d8b!important} +.w3-text-green,.w3-hover-text-green:hover{color:#4CAF50!important} +.w3-text-light-green,.w3-hover-text-light-green:hover{color:#8bc34a!important} +.w3-text-indigo,.w3-hover-text-indigo:hover{color:#3f51b5!important} +.w3-text-khaki,.w3-hover-text-khaki:hover{color:#b4aa50!important} +.w3-text-lime,.w3-hover-text-lime:hover{color:#cddc39!important} +.w3-text-orange,.w3-hover-text-orange:hover{color:#ff9800!important} +.w3-text-deep-orange,.w3-hover-text-deep-orange:hover{color:#ff5722!important} +.w3-text-pink,.w3-hover-text-pink:hover{color:#e91e63!important} +.w3-text-purple,.w3-hover-text-purple:hover{color:#9c27b0!important} +.w3-text-deep-purple,.w3-hover-text-deep-purple:hover{color:#673ab7!important} +.w3-text-red,.w3-hover-text-red:hover{color:#f44336!important} +.w3-text-sand,.w3-hover-text-sand:hover{color:#fdf5e6!important} +.w3-text-teal,.w3-hover-text-teal:hover{color:#009688!important} +.w3-text-yellow,.w3-hover-text-yellow:hover{color:#d2be0e!important} +.w3-text-white,.w3-hover-text-white:hover{color:#fff!important} +.w3-text-black,.w3-hover-text-black:hover{color:#000!important} +.w3-text-grey,.w3-hover-text-grey:hover,.w3-text-gray,.w3-hover-text-gray:hover{color:#757575!important} +.w3-text-light-grey,.w3-hover-text-light-grey:hover,.w3-text-light-gray,.w3-hover-text-light-gray:hover{color:#f1f1f1!important} +.w3-text-dark-grey,.w3-hover-text-dark-grey:hover,.w3-text-dark-gray,.w3-hover-text-dark-gray:hover{color:#3a3a3a!important} +.w3-border-amber,.w3-hover-border-amber:hover{border-color:#ffc107!important} +.w3-border-aqua,.w3-hover-border-aqua:hover{border-color:#00ffff!important} +.w3-border-blue,.w3-hover-border-blue:hover{border-color:#2196F3!important} +.w3-border-light-blue,.w3-hover-border-light-blue:hover{border-color:#87CEEB!important} +.w3-border-brown,.w3-hover-border-brown:hover{border-color:#795548!important} +.w3-border-cyan,.w3-hover-border-cyan:hover{border-color:#00bcd4!important} +.w3-border-blue-grey,.w3-hover-border-blue-grey:hover,.w3-border-blue-gray,.w3-hover-border-blue-gray:hover{border-color:#607d8b!important} +.w3-border-green,.w3-hover-border-green:hover{border-color:#4CAF50!important} +.w3-border-light-green,.w3-hover-border-light-green:hover{border-color:#8bc34a!important} +.w3-border-indigo,.w3-hover-border-indigo:hover{border-color:#3f51b5!important} +.w3-border-khaki,.w3-hover-border-khaki:hover{border-color:#f0e68c!important} +.w3-border-lime,.w3-hover-border-lime:hover{border-color:#cddc39!important} +.w3-border-orange,.w3-hover-border-orange:hover{border-color:#ff9800!important} +.w3-border-deep-orange,.w3-hover-border-deep-orange:hover{border-color:#ff5722!important} +.w3-border-pink,.w3-hover-border-pink:hover{border-color:#e91e63!important} +.w3-border-purple,.w3-hover-border-purple:hover{border-color:#9c27b0!important} +.w3-border-deep-purple,.w3-hover-border-deep-purple:hover{border-color:#673ab7!important} +.w3-border-red,.w3-hover-border-red:hover{border-color:#f44336!important} +.w3-border-sand,.w3-hover-border-sand:hover{border-color:#fdf5e6!important} +.w3-border-teal,.w3-hover-border-teal:hover{border-color:#009688!important} +.w3-border-yellow,.w3-hover-border-yellow:hover{border-color:#ffeb3b!important} +.w3-border-white,.w3-hover-border-white:hover{border-color:#fff!important} +.w3-border-black,.w3-hover-border-black:hover{border-color:#000!important} +.w3-border-grey,.w3-hover-border-grey:hover,.w3-border-gray,.w3-hover-border-gray:hover{border-color:#9e9e9e!important} +.w3-border-light-grey,.w3-hover-border-light-grey:hover,.w3-border-light-gray,.w3-hover-border-light-gray:hover{border-color:#f1f1f1!important} +.w3-border-dark-grey,.w3-hover-border-dark-grey:hover,.w3-border-dark-gray,.w3-hover-border-dark-gray:hover{border-color:#616161!important} +.w3-border-pale-red,.w3-hover-border-pale-red:hover{border-color:#ffe7e7!important}.w3-border-pale-green,.w3-hover-border-pale-green:hover{border-color:#e7ffe7!important} +.w3-border-pale-yellow,.w3-hover-border-pale-yellow:hover{border-color:#ffffcc!important}.w3-border-pale-blue,.w3-hover-border-pale-blue:hover{border-color:#e7ffff!important} \ No newline at end of file diff --git a/img/avatar1.png b/img/avatar1.png new file mode 100644 index 0000000000000000000000000000000000000000..427f224df90bac4b06ac2640d2f9a266461f98e0 Binary files /dev/null and b/img/avatar1.png differ diff --git a/img/avatar2.png b/img/avatar2.png new file mode 100644 index 0000000000000000000000000000000000000000..212b67196c3a431baae85712cd7a20be2a25cfcd Binary files /dev/null and b/img/avatar2.png differ diff --git a/img/glass.png b/img/glass.png new file mode 100644 index 0000000000000000000000000000000000000000..bf9b2ee72f0bce49a0db4cfd23925a20889f7842 Binary files /dev/null and b/img/glass.png differ diff --git a/img/mask.png b/img/mask.png new file mode 100644 index 0000000000000000000000000000000000000000..617fa4c44f1dfcb4863b756b2feb1aafdcc89939 Binary files /dev/null and b/img/mask.png differ diff --git a/img/steveoni.JPG b/img/steveoni.JPG new file mode 100644 index 0000000000000000000000000000000000000000..bf9b2ee72f0bce49a0db4cfd23925a20889f7842 Binary files /dev/null and b/img/steveoni.JPG differ diff --git a/index.html b/index.html index b0c4b3666032a737f3903db53e6a8a9272483e28..427dc37e82bff6661008f656d29203ec2c532ed9 100644 --- a/index.html +++ b/index.html @@ -1,19 +1,133 @@ - - - - - - My static Space - - - -
-

Welcome to your static Space!

-

You can modify this app directly by editing index.html in the Files and versions tab.

-

- Also don't forget to check the - Spaces documentation. -

-
- - + + + + + + Face-API.js Landing Page + + + + +
+ +
+
+
+

Detectar emoções

+
+
+ +

+ + + + + + + + + + +
+ + +
+
+ +
+
+
+ + + +
+ + + + + + + + diff --git a/js/comparar.js b/js/comparar.js new file mode 100644 index 0000000000000000000000000000000000000000..a2f20343a8d6c107e99b84feb8538bc136240a02 --- /dev/null +++ b/js/comparar.js @@ -0,0 +1,138 @@ +var foto1 = []; +var foto2 = []; +async function imagem1() { + const verificado = document.getElementById("verificado") + const img1 = document.getElementById('img1'); + verificado.innerText = "espere..." + let preview = document.getElementById('imagem1'); + var inputs = document.querySelectorAll('input[type=file]'); + let file = inputs[0].files[0]; + const reader = new FileReader(); + if(file) reader.readAsDataURL(file); + else preview.src = ''; + reader.onloadend = function() { + preview.src = reader.result; + } + try { + const img = await faceapi.bufferToImage(file) + result = await faceapi.detectSingleFace(img).withFaceLandmarks().withFaceDescriptor().withFaceExpressions().withAgeAndGender() + const regionsToExtract = + [ + new faceapi.Rect(result.detection._box._x,result.detection._box._y, + result.detection._box._width,result.detection._box._height) + ] + const canvases = await faceapi.extractFaces(img, regionsToExtract) + displayExtractedFaces(canvases) + verificado.innerText = "Escolha a 2ª " + img1.innerText = 'Idade '+result.age.toFixed(2)+'\n'+' Genero '+result.gender+' - '+result.genderProbability.toFixed(2) * 100 +'%\n'+ + 'Neutro: '+result.expressions.Neutro.toFixed(2)* 100 +'%\n'+ + 'Feliz: '+result.expressions.Feliz.toFixed(2)* 100 +'%\n'+ + 'Triste: '+result.expressions.Triste.toFixed(2)* 100 +'%\n'+ + 'Medo: '+ result.expressions.Medo.toFixed(2)* 100 +'%\n'+ + 'Nojo: '+result.expressions.Nojo.toFixed(2)* 100 +'%\n'+ + 'Surpreso: '+ result.expressions.Surpreso.toFixed(2)* 100 +'%\n'+ + 'Raiva: '+result.expressions.Raiva.toFixed(2)* 100 +'%'; + foto1.push(result.descriptor) + } catch (err) { + alert("Não foi possivel detectar o rosto") + return; + } +} + function displayExtractedFaces(faceImages) { + var canvas = document.createElement("canvas"); + canvas = $('#overlay').get(0) + faceapi.matchDimensions(canvas, $('#imagem1').get(0)) + $('#facesContainer').empty() + faceImages.forEach(canvas => $('#facesContainer').append(canvas)) + document.getElementsByTagName("canvas")[2].setAttribute("id", 'cv3'); + var c3 = document.getElementById("cv3"); + var data3 = c3.toDataURL(); + let preview2 = document.getElementById('imagem1'); + preview2.src =data3; + c3.setAttribute("hidden", "hidden"); + + } + function displayExtractedFaces2(faceImages) { + var canvas = document.createElement("canvas"); + canvas = $('#overlay').get(0) + faceapi.matchDimensions(canvas, $('#imagem2').get(0)) + $('#facesContainer').empty() + faceImages.forEach(canvas => $('#facesContainer').append(canvas)) + document.getElementsByTagName("canvas")[2].setAttribute("id", 'cv3'); + var c3 = document.getElementById("cv3"); + var data3 = c3.toDataURL(); + let preview2 = document.getElementById('imagem2'); + preview2.src =data3; + c3.setAttribute("hidden", "hidden"); + } +async function imagem2() { + const verificado = document.getElementById("verificado") + const img2 = document.getElementById('img22'); + verificado.innerText = "espere..." + let preview = document.getElementById('imagem2'); + var inputs = document.querySelectorAll('input[type=file]'); + let file = inputs[1].files[0]; + const reader = new FileReader(); + if(file) reader.readAsDataURL(file); + else preview.src = ''; + reader.onloadend = function() { + preview.src = reader.result; + } + try { + const img = await faceapi.bufferToImage(file) + result = await faceapi.detectSingleFace(img).withFaceLandmarks().withFaceDescriptor().withFaceExpressions().withAgeAndGender() + const regionsToExtract = + [ + new faceapi.Rect(result.detection._box._x,result.detection._box._y, + result.detection._box._width,result.detection._box._height) + ] + const canvases = await faceapi.extractFaces(img, regionsToExtract) + displayExtractedFaces2(canvases) + img2.innerText = 'Idade '+result.age.toFixed(2)+'\n'+' Genero '+result.gender+' - '+result.genderProbability.toFixed(2) * 100 +'%\n'+ + 'Neutro: '+result.expressions.Neutro.toFixed(2)* 100 +'%\n'+ + 'Feliz: '+result.expressions.Feliz.toFixed(2)* 100 +'%\n'+ + 'Triste: '+result.expressions.Triste.toFixed(2)* 100 +'%\n'+ + 'Medo: '+ result.expressions.Medo.toFixed(2)* 100 +'%\n'+ + 'Nojo: '+result.expressions.Nojo.toFixed(2)* 100 +'%\n'+ + 'Surpreso: '+ result.expressions.Surpreso.toFixed(2)* 100 +'%\n'+ + 'Raiva: '+result.expressions.Raiva.toFixed(2)* 100 +'%'; + foto2.push(result.descriptor) + verificado.innerText = "verificando..."; + verificar(); + } catch (err) { + alert("Não foi possivel detectar o rosto") + return; + } +} +async function verificar() { + const verificado = document.getElementById("verificado") + verificado.setAttribute("disabled", "true"); + verificado.innerText = "verificando..." + var labeledFaceDescriptors = [] + labeledFaceDescriptors.push(new faceapi.LabeledFaceDescriptors( + 'person 1', foto1 )); + try { + var inputs = document.querySelectorAll('input[type=file]'); + let file = inputs[1].files[0]; + const img = await faceapi.bufferToImage(file) + const singleResult = await faceapi.detectSingleFace(img) + .withFaceLandmarks().withFaceDescriptor() + const faceMatcher = new faceapi.FaceMatcher(labeledFaceDescriptors) + const bestMatch = faceMatcher.findBestMatch(singleResult.descriptor) + if(bestMatch._distance<=0.50){ + verificado.setAttribute("class", "greenclass") + verificado.innerText = "A mesma pessoa \n distância euclidiana entre os pontos: \n"+ + (1 - bestMatch._distance.toFixed(2)) * 100 +'%' + verificado.removeAttribute("disabled") + }else{ + verificado.setAttribute("class", "democlass") + verificado.innerText = "Não é a mesma pessoa \n distância euclidiana entre os pontos: \n"+ + (1 - bestMatch._distance.toFixed(2)) * 100 +'%' + verificado.removeAttribute("disabled") + } + } catch (err) { + verificado.innerText = "Erro ao tentar detectar" + verificado.removeAttribute("disabled") + return; + } +} \ No newline at end of file diff --git a/js/emocoes.js b/js/emocoes.js new file mode 100644 index 0000000000000000000000000000000000000000..db1520944f781796083273db7c836344133868b9 --- /dev/null +++ b/js/emocoes.js @@ -0,0 +1,340 @@ +const form = document.querySelector("#detectar-emocoes-form"); +let resultsContainer = document.querySelector("#detectar-emocoes-results"); +let resultsidade = document.querySelector("#detectar-emocoes-idade"); +let pontos = document.querySelector("#pontos"); +const sourceSwitch = document.getElementById("detectar-emocoes-source-switch"); +let stream; +let startCameraButton = document.getElementById("start-camera-button"); +let detectEmotionsButton = document.getElementById("detect-emotions-button"); +let detectLandmarksButton = document.getElementById("detect-landmarks-button"); +let detectAgeButton = document.getElementById("detect-age-button"); +let extractPointsButton = document.getElementById("extract-points-button"); +let displaySize; +let detections; +let resizedDetections; +let canvas = document.createElement("canvas"); +resultsContainer.appendChild(canvas); + +let startCameraInterval; + detectEmotionsButton.disabled = true; + detectLandmarksButton.disabled = true; + detectAgeButton.disabled = true; + extractPointsButton.disabled = true; + startCameraButton.addEventListener("change", async (event) => { + if (event.target.checked) { + detectEmotionsButton.disabled = false; + detectLandmarksButton.disabled = false; + detectAgeButton.disabled = false; + extractPointsButton.disabled = false; + + detectEmotionsButton.addEventListener("change", detectEmotionsButton); + detectLandmarksButton.addEventListener("change", detectLandmarksButton); + detectAgeButton.addEventListener("change", detectAgeButton); + extractPointsButton.addEventListener("change", extractPointsButton); + resultsContainer.innerHTML = ""; + video = document.createElement("video"); + video.width = 200; + video.height = 150; + video.autoplay = true; + stream = await navigator.mediaDevices.getUserMedia({ + audio: false, + video: true, + }); + canvas.width = video.width; + canvas.height = video.height; + canvas.id = "landmarkCanvas"; + video.srcObject = stream; + resultsContainer.appendChild(video); + resultsContainer.appendChild(canvas); + } else { + detectEmotionsButton.checked = false; + detectEmotionsButton.disabled = true; + detectLandmarksButton.checked = false; + detectLandmarksButton.disabled = true; + detectAgeButton.checked = false; + detectAgeButton.disabled = true; + extractPointsButton.checked = false; + extractPointsButton.disabled = true; + detectEmotionsButton.removeEventListener("change", detectEmotionsButton); + detectLandmarksButton.removeEventListener("change", detectLandmarksButton); + detectAgeButton.removeEventListener("change", detectAgeButton); + extractPointsButton.removeEventListener("change", extractPointsButton); + clearInterval(detectLandmarksInterval); + clearInterval(detectEmotionsInterval); + clearInterval(detectAgeInterval); + clearInterval(extractPointsInterval); + resultsContainer.innerHTML = ""; + video.srcObject = null; + if (stream != null) { + stream.getTracks().forEach((track) => track.stop()); + } + } + }); + + let detectEmotionsInterval; + detectEmotionsButton.addEventListener("change", async (event) => { + if (event.target.checked) { + detectEmotionsInterval = setInterval(async () => { + canvas = document.getElementById("landmarkCanvas"); + displaySize = { width: video.width, height: video.height}; + faceapi.matchDimensions(canvas,displaySize); + detections = await faceapi.detectAllFaces(video, new faceapi.TinyFaceDetectorOptions()).withFaceLandmarks().withFaceExpressions(); + resizedDetections = faceapi.resizeResults(detections, displaySize); + resultsContainer.innerHTML = ""; + resultsContainer.appendChild(video); + resultsContainer.appendChild(canvas); + detections.forEach((result) => { + if (result.expressions) { + const happy = result.expressions.Feliz || 0; + const sad = result.expressions.Triste || 0; + const angry = result.expressions.Raiva || 0; + const disgusted = result.expressions.Nojo || 0; + const fear = result.expressions.Medo || 0; + const surprise = result.expressions.Surpreso || 0; + const neutr = result.expressions.Neutro || 0; + const card = document.createElement("div"); + card.innerHTML = `

Emoções detectadas:

`; + resultsContainer.appendChild(card); + } else { + console.error("Nenhuma emoção detectada."); + } + }); + }, 500) + } else { + clearInterval(detectEmotionsInterval); + } + }); + + let detectLandmarksInterval; + function unite(leftEyebrow, rightEyebrow) { + const united = []; + for (const point of leftEyebrow) { united.push(point); } + for (const point of rightEyebrow) {united.push(point); } + return united; + } + detectLandmarksButton.addEventListener("change", async (event) => { + if (event.target.checked) { + detectLandmarksInterval = setInterval(async () => { + canvas = document.getElementById("landmarkCanvas"); + displaySize = { width: video.width, height: video.height}; + faceapi.matchDimensions(canvas,displaySize); + detections = await faceapi.detectAllFaces(video, new faceapi.TinyFaceDetectorOptions()).withFaceLandmarks(); + resizedDetections = faceapi.resizeResults(detections, displaySize); + canvas.getContext('2d').clearRect(0,0,canvas.width, canvas.height); + for (const detection of resizedDetections) { + const landmarks = detection.landmarks; + const leftEyebrow = landmarks.getLeftEyeBrow(); + const rightEyebrow = landmarks.getRightEyeBrow(); + faceapi.draw.drawFaceLandmarks(canvas, detection, { + drawLines: true, + color: 'red', + landmarkIndices: leftEyebrow.concat(rightEyebrow) + }); + faceapi.draw.drawFaceLandmarks(canvas, detection, { + drawLines: true, + color: 'yellow', + landmarkIndices: leftEyebrow.concat(rightEyebrow) + }); + } + resultsContainer.innerHTML = ""; + resultsContainer.appendChild(video); + resultsContainer.appendChild(canvas); + }, 500) + } else { + clearInterval(detectLandmarksInterval); + } + }); + + let detectAgeInterval; + detectAgeButton.addEventListener("change", async (event) => { + if (event.target.checked) { + detectAgeInterval = setInterval(async () => { + canvas = document.getElementById("landmarkCanvas"); + displaySize = { width: video.width, height: video.height}; + faceapi.matchDimensions(canvas,displaySize); + detections = await faceapi.detectAllFaces(video, new faceapi.TinyFaceDetectorOptions()).withAgeAndGender(); + resizedDetections = faceapi.resizeResults(detections, displaySize); + resultsidade.innerHTML = ""; + resultsidade.appendChild(video); + resultsidade.appendChild(canvas); + detections.forEach((result) => { + if (result.age) { + const card = document.createElement("div"); + card.innerHTML = `

Idade detectada:

${result.age.toFixed(0)} anos

`; + resultsidade.appendChild(card); + } else { + console.error("Nenhuma idade detectada."); + } + }); + }, 500) + } else { + clearInterval(detectAgeInterval); + } + }); + + let extractPointsInterval; + extractPointsButton.addEventListener("change", async (event) => { + if (event.target.checked) { + extractPointsInterval = setInterval(async () => { + canvas = document.getElementById("landmarkCanvas"); + displaySize = { width: video.width, height: video.height}; + faceapi.matchDimensions(canvas,displaySize); + detections = await faceapi.detectAllFaces(video, new faceapi.TinyFaceDetectorOptions()).withFaceLandmarks(); + resizedDetections = faceapi.resizeResults(detections, displaySize); + resultsContainer.appendChild(video); + resultsContainer.appendChild(canvas); + function getBoxFromPoints(points) { + const box = { bottom: -Infinity, left: Infinity, right: -Infinity, top: Infinity, + get center() {return { x: this.left + this.width / 2, y: this.top + this.height / 2, }; + }, + get height() { return this.bottom - this.top; }, + get width() { return this.right - this.left; }, + }; + for (const point of points) { + box.left = Math.min(box.left, point.x); + box.right = Math.max(box.right, point.x); + box.bottom = Math.max(box.bottom, point.y); + box.top = Math.min(box.top, point.y); + } + return box; + } + + + +let tempoDeSelecao = 2000; +let tempoInicial; +let botaoSelecionado = null; +function calcularPontoDeOlhar(face) { + const olhoEsquerdo = face.landmarks.positions.slice(36, 42); + const olhoDireito = face.landmarks.positions.slice(42, 48); + + // Calculando os pontos centrais para cada olho + const centroEsquerdo = calcularCentro(olhoEsquerdo); + const centroDireito = calcularCentro(olhoDireito); + + // Calculando um ponto médio entre os centros dos dois olhos + const pontoFocal = { + x: (centroEsquerdo.x + centroDireito.x) / 2, + y: (centroEsquerdo.y + centroDireito.y) / 2 + }; + + return pontoFocal; +} + +function calcularCentro(pontos) { + const totalPontos = pontos.length; + const centro = pontos.reduce((soma, ponto) => { + soma.x += ponto._x; + soma.y += ponto._y; + return soma; + }, {x: 0, y: 0}); + + centro.x /= totalPontos; + centro.y /= totalPontos; + return centro; +} +function verificarBotaoSobOlhar(pontoFocal) { + const botoes = document.querySelectorAll('.eye-button'); + for(const botao of botoes) { + const rect = botao.getBoundingClientRect(); + console.log(rect.left) + console.log(pontoFocal.x) + if ( + pontoFocal.x >= rect.left && pontoFocal.x <= rect.right && + pontoFocal.y >= rect.top && pontoFocal.y <= rect.bottom + + ) { + console.log(pontoFocal) + return botao; // Retornará o botão que está sob o olhar + } + } + return null; // Retornará null se nenhum botão estiver sob o olhar +} + + function olhoEstaSobreBotao(pontoFocal, botao) { + return pontoFocal._x > botao.x && pontoFocal._x < botao.x + botao.width && pontoFocal._y > botao.y && pontoFocal._y < botao.y + botao.height; + } + + + document.querySelectorAll('.eye-button').forEach(botao => { + botao.addEventListener('mouseenter', () => { + tempoInicial = new Date().getTime(); + }); + botao.addEventListener('mouseleave', () => { + tempoInicial = null; + }); + }); + + setInterval(() => { + if(tempoInicial && new Date().getTime() - tempoInicial > tempoDeSelecao) { + console.log('Botão selecionado!'); + tempoInicial = null; + // Adicione a lógica para lidar com a seleção do botão aqui + } + }, 100); + + for (const face of resizedDetections) { + //const pontoFocal = calcularPontoDeOlhar(face); + + const features = { + mandibula: face.landmarks.positions.slice(0, 17), + sobrancelhaesquerda: face.landmarks.positions.slice(17, 22), + sobrancelhaDireita: face.landmarks.positions.slice(22, 27), + Pontenasal: face.landmarks.positions.slice(27, 31), + nariz: face.landmarks.positions.slice(31, 36), + olhoEsquerdo: face.landmarks.positions.slice(36, 42), + olhoDireito: face.landmarks.positions.slice(42, 48), + labioExterno: face.landmarks.positions.slice(48, 60), + labiointerno: face.landmarks.positions.slice(60), + }; + const pre = document.createElement("pre"); + pre.innerText = JSON.stringify(features, null, 2); + pontos.innerHTML = ""; + pontos.appendChild(pre); + + for (const eye of [features.olhoEsquerdo, features.olhoDireito]) { + const eyeBox = getBoxFromPoints(eye); + const fontSize = 20; + const context = canvas.getContext("2d"); + context.lineWidth = 2; + context.fillStyle = "#FF0000"; + context.beginPath(); + context.fillStyle = "rgba(20,30,22,0.5)"; + context.strokeRect(eyeBox.center.x-10, eyeBox.center.y-10, 30, 20, 30 ); + context.arc(eyeBox.center.x, eyeBox.center.y, 4, 0, 2 * Math.PI); + context.fillStyle = "rgba(255, 255, 255, 0)"; + context.fill(); + context.closePath(); + let pontoFocal = { + x: (eyeBox.center.x ) / 2, + y: (eyeBox.center.y ) / 2 + }; + const botaoSobOlhar = verificarBotaoSobOlhar(pontoFocal); + console.log(botaoSobOlhar) + if (botaoSobOlhar) { + if (botaoSelecionado !== botaoSobOlhar) { + botaoSelecionado = botaoSobOlhar; + tempoInicial = new Date().getTime(); + } else if (new Date().getTime() - tempoInicial > tempoDeSelecao) { + console.log('Botão selecionado:', botaoSelecionado.id); + // Adicione a lógica para lidar com a seleção do botão aqui... + } + } else { + botaoSelecionado = null; + tempoInicial = null; + } + } + } +}, 500) +} else { + clearInterval(extractPointsInterval); +} +}); diff --git a/js/face-api.js b/js/face-api.js new file mode 100644 index 0000000000000000000000000000000000000000..d91ea9504b708f45b679d8f226a432dc62d375a5 --- /dev/null +++ b/js/face-api.js @@ -0,0 +1,6528 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : + typeof define === 'function' && define.amd ? define(['exports'], factory) : + (global = global || self, factory(global.faceapi = global.faceapi || {})); +}(this, function (exports) { 'use strict'; + + /*! ***************************************************************************** + Copyright (c) Microsoft Corporation. All rights reserved. + Licensed under the Apache License, Version 2.0 (the "License"); you may not use + this file except in compliance with the License. You may obtain a copy of the + License at http://www.apache.org/licenses/LICENSE-2.0 + + THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED + WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, + MERCHANTABLITY OR NON-INFRINGEMENT. + + See the Apache Version 2.0 License for specific language governing permissions + and limitations under the License. + ***************************************************************************** */ + /* global Reflect, Promise */ + + var extendStatics = function(d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + + function __extends(d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + } + + var __assign = function() { + __assign = Object.assign || function __assign(t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; + } + return t; + }; + return __assign.apply(this, arguments); + }; + + function __awaiter(thisArg, _arguments, P, generator) { + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); + } + + function __generator(thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; + return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (_) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } + } + + /** + * @license + * Copyright 2019 Google LLC. All Rights Reserved. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============================================================================= + */ + var t=function(e,n){return (t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e;}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);})(e,n)};function e(e,n){function r(){this.constructor=e;}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r);}var n=function(){return (n=Object.assign||function(t){for(var e,n=1,r=arguments.length;n0&&o[o.length-1])&&(6===a[0]||2===a[0])){i=0;continue}if(3===a[0]&&(!o||a[1]>o[0]&&a[1]0;)r=Math.random()*e|0,n=t[--e],t[e]=t[r],t[r]=n;}function h(t,e,n){return Math.max(t,Math.min(e,n))}function p(t){return t%2==0?t:t+1}function f(t){for(var e=0,n=0;n=n?o():setTimeout(i,s);}};i();})}function I(t,e){for(var n=1,r=-1,o=0;o=0)n*=t[o];else if(-1===t[o]){if(-1!==r)throw Error("Shapes can only have 1 implicit size. Found -1 at dim "+r+" and dim "+o);r=o;}else if(t[o]<0)throw Error("Shapes can not be < 0. Found "+t[o]+" at dim "+o);if(-1===r){if(e>0&&e!==n)throw Error("Size("+e+") must match the product of shape "+t);return t}if(0===n)throw Error("Cannot infer the missing size in ["+t+"] when there are 0 elements");if(e%n!=0)throw Error("The implicit shape can't be a fractional number. Got "+e+" / "+n);var a=t.slice();return a[r]=e/n,a}function S(t,e){var n=e.length;return d((t=null==t?e.map(function(t,e){return e}):[].concat(t)).every(function(t){return t>=-n&&ti)&&1===t[i]&&(n.push(t[i]),r.push(i)),o[a]<=i&&a++;}1!==t[i]&&(n.push(t[i]),r.push(i));}return {newShape:n,keptDims:r}}function k(t,e){var n=null;if(null==t||"float32"===t)n=new Float32Array(e);else if("int32"===t)n=new Int32Array(e);else{if("bool"!==t)throw new Error("Unknown data type "+t);n=new Uint8Array(e);}return n}function A(t,e){var n=null;if(null==t||"float32"===t)n=new Float32Array(e);else if("int32"===t)n=new Int32Array(e);else if("bool"===t)n=new Uint8Array(e);else{if("string"!==t)throw new Error("Unknown data type "+t);n=new Array(e);}return n}function T(t,e,n){if("float32"===e)for(var r=0;r=0;--r)n[r]=n[r+1]*t[r+1];return n}function q(t,e,n){if("string"===e)throw new Error("Cannot convert a string[] to a TypedArray");if(Array.isArray(t)&&(t=g(t)),n&&D(t,e),function(t,e){return t instanceof Float32Array&&"float32"===e||t instanceof Int32Array&&"int32"===e||t instanceof Uint8Array&&"bool"===e}(t,e))return t;if(null==e||"float32"===e||"complex64"===e)return new Float32Array(t);if("int32"===e)return new Int32Array(t);if("bool"===e){for(var r=new Uint8Array(t.length),o=0;o=0,function(){return "Tensor must have a shape comprised of positive integers but got shape ["+t+"]."});});}function Y(t,e){return s.platform.fetch(t,e)}var Q=Object.freeze({shuffle:c,clamp:h,nearestLargerEven:p,sum:f,randUniform:function(t,e){var n=Math.random();return e*n+(1-n)*t},distSquared:function(t,e){for(var n=0,r=0;r1)for(var l=0;ltt){var h=et*s,p=Array.from(e.slice(0,h)),f=Array.from(e.slice(u-et*s,u));return "complex64"===r&&(p=it(p),f=it(f)),["["+p.map(function(t,e){return ot(t,a[e],r)}).join(", ")+", ..., "+f.map(function(t,e){return ot(t,a[u-et+e],r)}).join(", ")+"]"]}var d="complex64"===r?it(e):Array.from(e);return ["["+d.map(function(t,e){return ot(t,a[e],r)}).join(", ")+"]"]}var v=n.slice(1);var m=o.slice(1);var g=o[0]*s;var y=[];if(u>tt){for(var x=0;x=this.shape[n]){var i="Requested out of range element at "+t+". Buffer shape="+this.shape;throw new Error(i)}n++;}for(var s=t[t.length-1],u=0;u0&&(t.unreliable=!0,null==t.reasons&&(t.reasons=[]),t.reasons.push("Memory usage by string tensors is approximate (2 bytes per character)")),t},t.prototype.profile=function(t){return r(this,void 0,void 0,function(){var e,n;return o(this,function(r){return this.state.profiling=!0,e=this.state.numBytes,n=this.state.numTensors,this.state.activeProfile.kernels=[],this.state.activeProfile.result=t(),this.state.profiling=!1,this.state.activeProfile.peakBytes=Math.max.apply(Math,this.state.activeProfile.kernels.map(function(t){return t.totalBytesSnapshot})),this.state.activeProfile.newBytes=this.state.numBytes-e,this.state.activeProfile.newTensors=this.state.numTensors-n,[2,this.state.activeProfile]})})},t.prototype.isTapeOn=function(){return this.state.gradientDepth>0&&0===this.state.kernelDepth},t.prototype.addTapeNode=function(t,e,n){var r={};t.forEach(function(t,e){r[e]=t;});var o={id:this.state.nextTapeNodeId++,name:this.state.activeScope.name,inputs:r,outputs:[e],gradient:function(t){var e=n(t),r={};return e.forEach(function(t,e){r[e]=function(){return t};}),r}};this.state.activeTape.push(o);},t.prototype.keep=function(t){return t.kept=!0,t},t.prototype.startTape=function(){0===this.state.gradientDepth&&(this.state.activeTape=[]),this.state.gradientDepth++;},t.prototype.endTape=function(){this.state.gradientDepth--;},t.prototype.startScope=function(t){var e={track:[],name:"unnamed scope",id:this.state.nextScopeId++};t&&(e.name=t),this.state.scopeStack.push(e),this.state.activeScope=e;},t.prototype.endScope=function(t){for(var e=this,n=Rt(t),r=new Set(n.map(function(t){return t.id})),o=0;o0,function(){return "gradients() received an empty list of xs."}),null!=n&&"float32"!==n.dtype)throw new Error("dy must have 'float32' dtype, but has '"+n.dtype+"'");var a=this.scopedRun(function(){return o.startTape()},function(){return o.endTape()},function(){return o.tidy("forward",t)});d(a instanceof ht,function(){return "The result y returned by f() must be a tensor."});var i=function(t,e,n){for(var r={},o={},a=0;a=0;a--)for(i=(d=t[a]).inputs,c=0;c0)throw new Error("Cannot compute gradient of y=f(x) with respect to x. Make sure that the f you passed encloses all operations that lead from x to y.");return this.tidy("backward",function(){var t,r,s={};s[a.id]=null==n?(t=a.shape,r=$(y(t),"float32"),ht.make(t,{values:r})):n,function(t,e,n){for(var r=function(r){var o=e[r],a=[];if(o.outputs.forEach(function(e){var n=t[e.id];if(null!=n)a.push(n);else{var r=ht.make(e.shape,{values:j(e.size,e.dtype)},e.dtype);a.push(r);}}),null==o.gradient)throw new Error("Cannot compute gradient: gradient function not found for "+o.name+".");var i=o.gradient(1===o.outputs.length?a[0]:a),s=function(e){if(!(e in i))throw new Error("Cannot backprop through input "+e+". Available gradients found: "+Object.keys(i)+".");var r=n(function(){return i[e]()});if("float32"!==r.dtype)throw new Error("Error in gradient for op "+o.name+". The gradient of input "+e+" must have 'float32' dtype, but has '"+r.dtype+"'");var a=o.inputs[e];if(!x(r.shape,a.shape))throw new Error("Error in gradient for op "+o.name+". The gradient of input '"+e+"' has shape '"+r.shape+"', which does not match the shape of the input '"+a.shape+"'");if(null==t[a.id])t[a.id]=r;else{var s=t[a.id];t[a.id]=s.add(r),s.dispose();}};for(var u in o.inputs)s(u);},o=e.length-1;o>=0;o--)r(o);}(s,i,function(t){return o.tidy(t)});var u=e.map(function(t){return s[t.id]});return 0===o.state.gradientDepth&&(o.state.activeTape.forEach(function(t){for(var e in t.saved)t.saved[e].dispose();}),o.state.activeTape=null),{value:a,grads:u}})},t.prototype.customGrad=function(t){var e=this;return d(z(t),function(){return "The f passed in customGrad(f) must be a function."}),function(){for(var n,r=[],o=0;on||e>n){r="["+t+"x"+e+"]";throw new Error("Requested texture size "+r+" greater than WebGL maximum on this browser / GPU "+("["+n+"x"+n+"]")+".")}}function Zt(t,e){return le(t,e,function(){return t.createFramebuffer()},"Unable to create WebGLFramebuffer.")}function te(t,e,n,r,o,a,i,s){var u=t.getAttribLocation(n,r);return -1!==u&&(Mt(t,e,function(){return t.bindBuffer(t.ARRAY_BUFFER,o)}),Mt(t,e,function(){return t.vertexAttribPointer(u,a,t.FLOAT,!1,i,s)}),Mt(t,e,function(){return t.enableVertexAttribArray(u)}),!0)}function ee(t,e,n,r){ce(t,r),Mt(t,e,function(){return t.activeTexture(t.TEXTURE0+r)}),Mt(t,e,function(){return t.bindTexture(t.TEXTURE_2D,n)});}function ne(t,e,n,r){return le(t,e,function(){return t.getUniformLocation(n,r)},'uniform "'+r+'" not present in program.')}function re(t,e,n){return t.getUniformLocation(e,n)}function oe(t,e,n,r,o,a){Mt(t,e,function(){return ee(t,e,r,a)}),Mt(t,e,function(){return t.uniform1i(o,a)});}function ae(t,e,n,r){Mt(t,e,function(){return t.bindFramebuffer(t.FRAMEBUFFER,r)}),Mt(t,e,function(){return t.framebufferTexture2D(t.FRAMEBUFFER,t.COLOR_ATTACHMENT0,t.TEXTURE_2D,n,0)});}function ie(t,e,n){Mt(t,e,function(){return t.bindFramebuffer(t.FRAMEBUFFER,n)}),Mt(t,e,function(){return t.framebufferTexture2D(t.FRAMEBUFFER,t.COLOR_ATTACHMENT0,t.TEXTURE_2D,null,0)});}function se(t){var e=t.checkFramebufferStatus(t.FRAMEBUFFER);if(e!==t.FRAMEBUFFER_COMPLETE)throw new Error("Error binding framebuffer: "+ue(t,e))}function ue(t,e){switch(e){case t.FRAMEBUFFER_INCOMPLETE_ATTACHMENT:return "FRAMEBUFFER_INCOMPLETE_ATTACHMENT";case t.FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT:return "FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT";case t.FRAMEBUFFER_INCOMPLETE_DIMENSIONS:return "FRAMEBUFFER_INCOMPLETE_DIMENSIONS";case t.FRAMEBUFFER_UNSUPPORTED:return "FRAMEBUFFER_UNSUPPORTED";default:return "unknown error "+e}}function le(t,e,n,r){var o=Mt(t,e,function(){return n()});if(null==o)throw new Error(r);return o}function ce(t,e){var n=t.MAX_COMBINED_TEXTURE_IMAGE_UNITS-1,r=e+t.TEXTURE0;if(rn)throw new Error("textureUnit must be in "+("[gl.TEXTURE0, gl.TEXTURE"+n+"]")+".")}function he(t,e){return void 0===e&&(e=2),y(t.slice(0,t.length-e))}function pe(t){if(0===t.length)throw Error("Cannot get rows and columns of an empty shape array.");return [t.length>1?t[t.length-2]:1,t[t.length-1]]}function fe(t){var e=[1,1,1];return 0===t.length||1===t.length&&1===t[0]||(e=[he(t)].concat(pe(t))),e}function de(t,e){var n;void 0===e&&(e=!1);var r=s.getNumber("WEBGL_MAX_TEXTURE_SIZE");if(e&&(r*=2,1===(t=t.map(function(e,n){return n>=t.length-2?p(t[n]):t[n]})).length&&(t=[2,t[0]])),2!==t.length){var o=N(t);t=o.newShape;}var a=y(t);if(t.length<=1&&a<=r)return [1,a];if(2===t.length&&t[0]<=r&&t[1]<=r)return t;if(3===t.length&&t[0]*t[1]<=r&&t[2]<=r)return [t[0]*t[1],t[2]];if(3===t.length&&t[0]<=r&&t[1]*t[2]<=r)return [t[0],t[1]*t[2]];if(4===t.length&&t[0]*t[1]*t[2]<=r&&t[3]<=r)return [t[0]*t[1]*t[2],t[3]];if(4===t.length&&t[0]<=r&&t[1]*t[2]*t[3]<=r)return [t[0],t[1]*t[2]*t[3]];if(e){var i=he(t),u=2,l=2;return t.length&&(u=(n=pe(t))[0],l=n[1]),C(a=i*(u/2)*(l/2)).map(function(t){return 2*t})}return C(a)}function ve(t){return t%2==0}function me(t,e){if(x(t=t.slice(-2),e=e.slice(-2)))return !0;if(!t.length||!e.length)return !0;if(0===t[0]||0===t[1]||0===e[0]||0===e[1])return !0;if(t.length!==e.length){var n=t.slice(-1)[0],r=e.slice(-1)[0];if(n===r)return !0;if(ve(n)&&ve(r)&&(1===t[0]||1===e[0]))return !0}return t[1]===e[1]&&ve(t[0])&&ve(e[0])}function ge(t){if(null==Gt){var e=Ft(t);Gt=e.getParameter(e.MAX_TEXTURE_SIZE);}return Gt}function ye(t){if(null==qt){var e=Ft(t);qt=e.getParameter(e.MAX_TEXTURE_IMAGE_UNITS);}return Math.min(16,qt)}function xe(t){if(0===t)return 0;var e=Ft(t);return be(e,"EXT_disjoint_timer_query_webgl2")&&2===t?2:be(e,"EXT_disjoint_timer_query")?1:0}function be(t,e){return null!=t.getExtension(e)}function we(t){try{if(null!=Ft(t))return !0}catch(t){return !1}return !1}function Ce(t){if(0===t)return !1;var e=Ft(t);if(1===t){if(!be(e,"OES_texture_float"))return !1}else if(!be(e,"EXT_color_buffer_float"))return !1;return Re(e,t)}function Ee(t){if(0===t)return !1;var e=Ft(t);if(1===t){if(!be(e,"OES_texture_float"))return !1;if(!be(e,"WEBGL_color_buffer_float"))return !1}else if(!be(e,"EXT_color_buffer_float"))return !1;return Re(e,t)}function Re(t,e){var n=t.createFramebuffer(),r=t.createTexture();t.bindTexture(t.TEXTURE_2D,r);var o=2===e?t.RGBA32F:t.RGBA;t.texImage2D(t.TEXTURE_2D,0,o,1,1,0,t.RGBA,t.FLOAT,null),t.bindFramebuffer(t.FRAMEBUFFER,n),t.framebufferTexture2D(t.FRAMEBUFFER,t.COLOR_ATTACHMENT0,t.TEXTURE_2D,r,0);var a=t.checkFramebufferStatus(t.FRAMEBUFFER)===t.FRAMEBUFFER_COMPLETE;return t.bindTexture(t.TEXTURE_2D,null),t.bindFramebuffer(t.FRAMEBUFFER,null),t.deleteTexture(r),t.deleteFramebuffer(n),a}function Ie(t){return 2===t&&null!=Ft(t).fenceSync}var Se=Object.freeze({callAndCheck:Mt,canBeRepresented:Lt,getWebGLErrorMessage:Wt,getExtensionOrThrow:Ut,createVertexShader:zt,createFragmentShader:Vt,createProgram:$t,linkProgram:jt,validateProgram:Kt,createStaticVertexBuffer:Xt,createStaticIndexBuffer:Yt,getNumChannels:function(){return 2===s.getNumber("WEBGL_VERSION")?1:4},createTexture:Qt,validateTextureSize:Jt,createFramebuffer:Zt,bindVertexBufferToProgramAttribute:te,bindTextureUnit:ee,unbindTextureUnit:function(t,e,n){ce(t,n),Mt(t,e,function(){return t.activeTexture(t.TEXTURE0+n)}),Mt(t,e,function(){return t.bindTexture(t.TEXTURE_2D,null)});},getProgramUniformLocationOrThrow:ne,getProgramUniformLocation:re,bindTextureToProgramUniformSampler:oe,bindCanvasToFramebuffer:function(t,e){Mt(t,e,function(){return t.bindFramebuffer(t.FRAMEBUFFER,null)}),Mt(t,e,function(){return t.viewport(0,0,t.canvas.width,t.canvas.height)}),Mt(t,e,function(){return t.scissor(0,0,t.canvas.width,t.canvas.height)});},bindColorTextureToFramebuffer:ae,unbindColorTextureFromFramebuffer:ie,validateFramebuffer:se,getFramebufferErrorMessage:ue,getBatchDim:he,getRowsCols:pe,getShapeAs3D:fe,getTextureShapeFromLogicalShape:de,isReshapeFree:me,get MAX_TEXTURE_SIZE(){return Gt},get MAX_TEXTURES_IN_SHADER(){return qt},getWebGLMaxTextureSize:ge,getMaxTexturesInShader:ye,getWebGLDisjointQueryTimerVersion:xe,isWebGLVersionEnabled:we,isRenderToFloatTextureEnabled:Ce,isDownloadFloatTextureEnabled:Ee,isWebGLFenceEnabled:Ie});function Ne(){s.set("PROD",!0);}function ke(){s.set("DEBUG",!0);}function Ae(){s.set("DEPRECATION_WARNINGS_ENABLED",!1),console.warn("TensorFlow.js deprecation warnings have been disabled.");}function Te(t){s.getBool("DEPRECATION_WARNINGS_ENABLED")&&console.warn(t+" You can disable deprecation warnings with tf.disableDeprecationWarnings().");}function De(){At.disposeVariables();}function _e(){return At.memory()}function Oe(t){return At.profile(t)}function Fe(t,e){return At.tidy(t,e)}function Me(t){Rt(t).forEach(function(t){return t.dispose()});}function Be(t){return At.keep(t)}function Pe(t){return At.time(t)}function Le(t){return At.setBackend(t)}function We(){return At.ready()}function Ue(){return At.backendName}function ze(t){At.removeBackend(t);}function Ve(t){return At.findBackend(t)}function Ge(t){return At.findBackendFactory(t)}function qe(t,e,n){return void 0===n&&(n=1),At.registerBackend(t,e,n)}function He(){return At.backend}function $e(t,e){s.setPlatform(t,e);}function je(){for(var t=[],e=0;e0,function(){return "Element arr["+r.join("][")+"] should be a primitive, but is an array of "+e.length+" elements"});d(e.length===n[0],function(){return "Element arr["+r.join("][")+"] should have "+n[0]+" elements, but has "+e.length+" elements"});var o=n.slice(1);for(var a=0;a=0&&(o=r),Xe(r,o,e,n),null==t||!F(t)&&!Array.isArray(t)&&"number"!=typeof t&&"boolean"!=typeof t&&"string"!=typeof t){var a=null==t?"null":t.constructor.name;throw new Error("Argument '"+e+"' passed to '"+n+"' must be a Tensor or TensorLike, but got '"+a+"'")}var i=Ke(t);F(t)||Array.isArray(t)||(t=[t]);var u="string"!==o?q(t,o,s.getBool("DEBUG")):g(t);return ht.make(i,{values:u},o)}function Qe(t,e,n,r){if(void 0===r&&(r="numeric"),!Array.isArray(t))throw new Error("Argument "+e+" passed to "+n+" must be a `Tensor[]` or `TensorLike[]`");return t.map(function(t,r){return Ye(t,e+"["+r+"]",n)},r)}function Je(t,e){for(var n=0;n=0&&e0}),s.registerFlag("WEBGL_VERSION",function(){return we(2)?2:we(1)?1:0}),s.registerFlag("WEBGL_BUFFER_SUPPORTED",function(){return 2===s.get("WEBGL_VERSION")}),s.registerFlag("WEBGL_CPU_FORWARD",function(){return !0}),s.registerFlag("WEBGL_PACK",function(){return s.getBool("HAS_WEBGL")}),s.registerFlag("WEBGL_PACK_NORMALIZATION",function(){return s.getBool("WEBGL_PACK")}),s.registerFlag("WEBGL_PACK_CLIP",function(){return s.getBool("WEBGL_PACK")}),s.registerFlag("WEBGL_PACK_DEPTHWISECONV",function(){return !1}),s.registerFlag("WEBGL_PACK_BINARY_OPERATIONS",function(){return s.getBool("WEBGL_PACK")}),s.registerFlag("WEBGL_PACK_ARRAY_OPERATIONS",function(){return s.getBool("WEBGL_PACK")}),s.registerFlag("WEBGL_PACK_IMAGE_OPERATIONS",function(){return s.getBool("WEBGL_PACK")}),s.registerFlag("WEBGL_PACK_REDUCE",function(){return s.getBool("WEBGL_PACK")}),s.registerFlag("WEBGL_LAZILY_UNPACK",function(){return s.getBool("WEBGL_PACK")}),s.registerFlag("WEBGL_CONV_IM2COL",function(){return s.getBool("WEBGL_PACK")}),s.registerFlag("WEBGL_MAX_TEXTURE_SIZE",function(){return ge(s.getNumber("WEBGL_VERSION"))}),s.registerFlag("WEBGL_MAX_TEXTURES_IN_SHADER",function(){return ye(s.getNumber("WEBGL_VERSION"))}),s.registerFlag("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION",function(){var t=s.getNumber("WEBGL_VERSION");return 0===t?0:xe(t)}),s.registerFlag("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE",function(){return s.getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")>0&&(t=navigator.userAgent||navigator.vendor||window.opera,!(/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(t)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(t.substr(0,4))));var t;}),s.registerFlag("WEBGL_RENDER_FLOAT32_ENABLED",function(){return Ce(s.getNumber("WEBGL_VERSION"))}),s.registerFlag("WEBGL_DOWNLOAD_FLOAT_ENABLED",function(){return Ee(s.getNumber("WEBGL_VERSION"))}),s.registerFlag("WEBGL_FENCE_API_ENABLED",function(){return Ie(s.getNumber("WEBGL_VERSION"))}),s.registerFlag("WEBGL_SIZE_UPLOAD_UNIFORM",function(){return s.getBool("WEBGL_RENDER_FLOAT32_ENABLED")?4:0}),ct=Te;var cn=ln({complex_:function(t,e){var n=Ye(t,"real","complex"),r=Ye(e,"imag","complex");return v(n.shape,r.shape,"real and imag shapes, "+n.shape+" and "+r.shape+", must match in call to tf.complex()."),At.runKernel(function(t){return t.complex(n,r)},{$real:n,$imag:r})}}),hn=ln({real_:function(t){var e=Ye(t,"input","real");return At.runKernel(function(t){return t.real(e)},{$input:e})}}),pn=ln({imag_:function(t){var e=Ye(t,"input","imag");return At.runKernel(function(t){return t.imag(e)},{$input:e})}});function fn(t,e,n){return dn(t,e,Ke(t),n)}function dn(t,e,n,r){if(null==r&&(r=U(t)),"complex64"===r)throw new Error("Cannot construct a complex64 tensor directly. Please use tf.complex(real, imag).");if(!F(t)&&!Array.isArray(t)&&"number"!=typeof t&&"boolean"!=typeof t&&"string"!=typeof t)throw new Error("values passed to tensor(values) must be a number/boolean/string or an array of numbers/booleans/strings, or a TypedArray");if(null!=e){X(e);var o=y(e),a=y(n);d(o===a,function(){return "Based on the provided shape, ["+e+"], the tensor should have "+o+" values but has "+a});for(var i=0;i1)return En([0],r);var o=j(Math.abs(Math.ceil((e-t)/n)),r);e=1,function(){return "Pass at least one tensor to concat"});var n=Qe(t,"tensors","concat");e=S(e,n[0].shape)[0];var r=un(n.map(function(t){return t.shape}),e);if(0===y(r))return fn([],r);if(1===(n=n.filter(function(t){return t.size>0})).length)return n[0];var o=n.map(function(t){return t.shape});sn(o,e);var a=n;return At.runKernel(function(t){return t.concat(n,e)},a,function(t){var n=o.map(function(t){return t[e]});return Fn(t,n,e).map(function(t){return function(){return t}})})}}),Tn=ln({concat1d_:function(t){return An(t,0)}}),Dn=ln({concat2d_:function(t,e){return An(t,e)}}),_n=ln({concat3d_:function(t,e){return An(t,e)}}),On=ln({concat4d_:function(t,e){return An(t,e)}}),Fn=ln({split_:function(t,e,n){void 0===n&&(n=0);var r,o=Ye(t,"x","split");return n=S(n,o.shape)[0],"number"==typeof e?(d(o.shape[n]%e==0,function(){return "Number of splits must evenly divide the axis."}),r=new Array(e).fill(o.shape[n]/e)):(d(o.shape[n]===e.reduce(function(t,e){return t+e}),function(){return "The sum of sizes must match the size of the axis dimension."}),r=e),At.runKernel(function(t){return t.split(o,r,n)},{$x:o},function(t){return {$x:function(){return An(t,n)}}})}});function Mn(t,e){return t(e={exports:{}},e.exports),e.exports}var Bn=Mn(function(t){!function(t,e,n){function r(t){var e,n=this,r=(e=4022871197,function(t){t=t.toString();for(var n=0;n>>0,e=(r*=e)>>>0,e+=4294967296*(r-=e);}return 2.3283064365386963e-10*(e>>>0)});n.next=function(){var t=2091639*n.s0+2.3283064365386963e-10*n.c;return n.s0=n.s1,n.s1=n.s2,n.s2=t-(n.c=0|t)},n.c=1,n.s0=r(" "),n.s1=r(" "),n.s2=r(" "),n.s0-=r(t),n.s0<0&&(n.s0+=1),n.s1-=r(t),n.s1<0&&(n.s1+=1),n.s2-=r(t),n.s2<0&&(n.s2+=1),r=null;}function o(t,e){return e.c=t.c,e.s0=t.s0,e.s1=t.s1,e.s2=t.s2,e}function a(t,e){var n=new r(t),a=e&&e.state,i=n.next;return i.int32=function(){return 4294967296*n.next()|0},i.double=function(){return i()+1.1102230246251565e-16*(2097152*i()|0)},i.quick=i,a&&("object"==typeof a&&o(a,n),i.state=function(){return o(n,{})}),i}e&&e.exports?e.exports=a:n&&n.amd?n(function(){return a}):this.alea=a;}(0,t,!1);}),Pn=Mn(function(t){!function(t,e,n){function r(t){var e=this,n="";e.x=0,e.y=0,e.z=0,e.w=0,e.next=function(){var t=e.x^e.x<<11;return e.x=e.y,e.y=e.z,e.z=e.w,e.w^=e.w>>>19^t^t>>>8},t===(0|t)?e.x=t:n+=t;for(var r=0;r>>0)/4294967296};return i.double=function(){do{var t=((n.next()>>>11)+(n.next()>>>0)/4294967296)/(1<<21);}while(0===t);return t},i.int32=n.next,i.quick=i,a&&("object"==typeof a&&o(a,n),i.state=function(){return o(n,{})}),i}e&&e.exports?e.exports=a:n&&n.amd?n(function(){return a}):this.xor128=a;}(0,t,!1);}),Ln=Mn(function(t){!function(t,e,n){function r(t){var e=this,n="";e.next=function(){var t=e.x^e.x>>>2;return e.x=e.y,e.y=e.z,e.z=e.w,e.w=e.v,(e.d=e.d+362437|0)+(e.v=e.v^e.v<<4^t^t<<1)|0},e.x=0,e.y=0,e.z=0,e.w=0,e.v=0,t===(0|t)?e.x=t:n+=t;for(var r=0;r>>4),e.next();}function o(t,e){return e.x=t.x,e.y=t.y,e.z=t.z,e.w=t.w,e.v=t.v,e.d=t.d,e}function a(t,e){var n=new r(t),a=e&&e.state,i=function(){return (n.next()>>>0)/4294967296};return i.double=function(){do{var t=((n.next()>>>11)+(n.next()>>>0)/4294967296)/(1<<21);}while(0===t);return t},i.int32=n.next,i.quick=i,a&&("object"==typeof a&&o(a,n),i.state=function(){return o(n,{})}),i}e&&e.exports?e.exports=a:n&&n.amd?n(function(){return a}):this.xorwow=a;}(0,t,!1);}),Wn=Mn(function(t){!function(t,e,n){function r(t){var e=this;e.next=function(){var t,n,r=e.x,o=e.i;return t=r[o],n=(t^=t>>>7)^t<<24,n^=(t=r[o+1&7])^t>>>10,n^=(t=r[o+3&7])^t>>>3,n^=(t=r[o+4&7])^t<<7,t=r[o+7&7],n^=(t^=t<<13)^t<<9,r[o]=n,e.i=o+1&7,n},function(t,e){var n,r=[];if(e===(0|e))r[0]=e;else for(e=""+e,n=0;n0;--n)t.next();}(e,t);}function o(t,e){return e.x=t.x.slice(),e.i=t.i,e}function a(t,e){null==t&&(t=+new Date);var n=new r(t),a=e&&e.state,i=function(){return (n.next()>>>0)/4294967296};return i.double=function(){do{var t=((n.next()>>>11)+(n.next()>>>0)/4294967296)/(1<<21);}while(0===t);return t},i.int32=n.next,i.quick=i,a&&(a.x&&o(a,n),i.state=function(){return o(n,{})}),i}e&&e.exports?e.exports=a:n&&n.amd?n(function(){return a}):this.xorshift7=a;}(0,t,!1);}),Un=Mn(function(t){!function(t,e,n){function r(t){var e=this;e.next=function(){var t,n,r=e.w,o=e.X,a=e.i;return e.w=r=r+1640531527|0,n=o[a+34&127],t=o[a=a+1&127],n^=n<<13,t^=t<<17,n^=n>>>15,t^=t>>>12,n=o[a]=n^t,e.i=a,n+(r^r>>>16)|0},function(t,e){var n,r,o,a,i,s=[],u=128;for(e===(0|e)?(r=e,e=null):(e+="\0",r=0,u=Math.max(u,e.length)),o=0,a=-32;a>>15,r^=r<<4,r^=r>>>13,a>=0&&(i=i+1640531527|0,o=0==(n=s[127&a]^=r+i)?o+1:0);for(o>=128&&(s[127&(e&&e.length||0)]=-1),o=127,a=512;a>0;--a)r=s[o+34&127],n=s[o=o+1&127],r^=r<<13,n^=n<<17,r^=r>>>15,n^=n>>>12,s[o]=r^n;t.w=i,t.X=s,t.i=o;}(e,t);}function o(t,e){return e.i=t.i,e.w=t.w,e.X=t.X.slice(),e}function a(t,e){null==t&&(t=+new Date);var n=new r(t),a=e&&e.state,i=function(){return (n.next()>>>0)/4294967296};return i.double=function(){do{var t=((n.next()>>>11)+(n.next()>>>0)/4294967296)/(1<<21);}while(0===t);return t},i.int32=n.next,i.quick=i,a&&(a.X&&o(a,n),i.state=function(){return o(n,{})}),i}e&&e.exports?e.exports=a:n&&n.amd?n(function(){return a}):this.xor4096=a;}(0,t,!1);}),zn=Mn(function(t){!function(t,e,n){function r(t){var e=this,n="";e.next=function(){var t=e.b,n=e.c,r=e.d,o=e.a;return t=t<<25^t>>>7^n,n=n-r|0,r=r<<24^r>>>8^o,o=o-t|0,e.b=t=t<<20^t>>>12^n,e.c=n=n-r|0,e.d=r<<16^n>>>16^o,e.a=o-t|0},e.a=0,e.b=0,e.c=-1640531527,e.d=1367130551,t===Math.floor(t)?(e.a=t/4294967296|0,e.b=0|t):n+=t;for(var r=0;r>>0)/4294967296};return i.double=function(){do{var t=((n.next()>>>11)+(n.next()>>>0)/4294967296)/(1<<21);}while(0===t);return t},i.int32=n.next,i.quick=i,a&&("object"==typeof a&&o(a,n),i.state=function(){return o(n,{})}),i}e&&e.exports?e.exports=a:n&&n.amd?n(function(){return a}):this.tychei=a;}(0,t,!1);}),Vn=Mn(function(t){!function(e,n){var r,o=this,a=256,i=6,s="random",u=n.pow(a,i),l=n.pow(2,52),c=2*l,h=a-1;function p(t,h,p){var g=[],y=v(function t(e,n){var r,o=[],a=typeof e;if(n&&"object"==a)for(r in e)try{o.push(t(e[r],n-1));}catch(t){}return o.length?o:"string"==a?e:e+"\0"}((h=1==h?{entropy:!0}:h||{}).entropy?[t,m(e)]:null==t?function(){try{var t;return r&&(t=r.randomBytes)?t=t(a):(t=new Uint8Array(a),(o.crypto||o.msCrypto).getRandomValues(t)),m(t)}catch(t){var n=o.navigator,i=n&&n.plugins;return [+new Date,o,i,o.screen,m(e)]}}():t,3),g),x=new f(g),b=function(){for(var t=x.g(i),e=u,n=0;t=c;)t/=2,e/=2,n>>>=1;return (t+n)/e};return b.int32=function(){return 0|x.g(4)},b.quick=function(){return x.g(4)/4294967296},b.double=b,v(m(x.S),e),(h.pass||p||function(t,e,r,o){return o&&(o.S&&d(o,x),t.state=function(){return d(x,{})}),r?(n[s]=t,e):t})(b,y,"global"in h?h.global:this==n,h.state)}function f(t){var e,n=t.length,r=this,o=0,i=r.i=r.j=0,s=r.S=[];for(n||(t=[n++]);o=1||0===i);var s=Math.sqrt(-2*Math.log(i)/i);e=this.mean+this.stdDev*o*s,n=this.mean+this.stdDev*a*s,this.truncated&&!this.isValidTruncated(e)||(r=!0);}return this.truncated&&!this.isValidTruncated(n)||(this.nextVal=this.convertValue(n)),this.convertValue(e)},t.prototype.convertValue=function(t){return null==this.dtype||"float32"===this.dtype?t:Math.round(t)},t.prototype.isValidTruncated=function(t){return t<=this.upper&&t>=this.lower},t}(),Hn=function(){function t(t,e,n,r){void 0===t&&(t=0),void 0===e&&(e=1);var o=this;if(this.canReturnFloat=function(){return null==o.dtype||"float32"===o.dtype},this.min=t,this.range=e-t,this.dtype=n,null==r&&(r=Math.random()),"number"==typeof r&&(r=r.toString()),!this.canReturnFloat()&&this.range<=1)throw new Error("The difference between "+t+" - "+e+" <= 1 and dtype is not float");this.random=Gn(r);}return t.prototype.convertValue=function(t){return this.canReturnFloat()?t:Math.round(t)},t.prototype.nextValue=function(){return this.convertValue(this.min+this.range*this.random())},t}();function $n(t,e,n){return void 0===e&&(e="float32"),e=e||"float32",X(t),new st(t,e,n)}function jn(t,e){void 0===e&&(e=!1),console.log(t.toString(e));}var Kn=ln({batchToSpaceND_:function(t,e,n){var r=Ye(t,"x","batchToSpaceND"),o=e.reduce(function(t,e){return t*e});return d(r.rank>=1+e.length,function(){return "input rank is "+r.rank+" but should be > than blockShape.length "+e.length}),d(n.length===e.length,function(){return "crops.length is "+n.length+" but should be equal to blockShape.length "+e.length}),d(r.shape[0]%o==0,function(){return "input tensor batch is "+r.shape[0]+" but is not divisible by the product of the elements of blockShape "+e.join(" * ")+" === "+o}),At.runKernel(function(t){return t.batchToSpaceND(r,e,n)},{$x:r},function(t){return {$x:function(){return t.spaceToBatchND(e,n)}}})}}),Xn=ln({cast_:function(t,e){var n=Ye(t,"x","cast");if(!_(e))throw new Error("Failed to cast to unknown dtype "+e);if("string"===e&&"string"!==n.dtype||"string"!==e&&"string"===n.dtype)throw new Error("Only strings can be casted to strings");return At.runKernel(function(t){return t.cast(n,e)},{$x:n},function(t){return {$x:function(){return t.clone()}}})}}),Yn=ln({clone_:function(t){var e=Ye(t,"x","clone",null);return At.runKernel(function(t){return ht.make(e.shape,{dataId:e.dataId},e.dtype)},{$x:e},function(t){return {$x:function(){return t.toFloat()}}})}}),Qn=ln({cumsum_:function(t,e,n,r){void 0===e&&(e=0),void 0===n&&(n=!1),void 0===r&&(r=!1);var o=Ye(t,"x","cumsum"),a=rn([e|=0],o.rank),i=o;null!=a&&(i=o.transpose(a));var s=an(1,o.rank)[0],u=At.runKernel(function(t){return t.cumsum(i,s,n,r)},{permutedX:i},function(t){return {permutedX:function(){return t.cumsum(e,n,!r)}}});return null!=a&&(u=u.transpose(a)),u}}),Jn=ln({depthToSpace_:function(t,e,n){void 0===n&&(n="NHWC");var r=Ye(t,"x","depthToSpace"),o="NHWC"===n?r.shape[1]:r.shape[2],a="NHWC"===n?r.shape[2]:r.shape[3],i="NHWC"===n?r.shape[3]:r.shape[1];return d(o*e>=0,function(){return "Negative dimension size caused by overflow when multiplying\n "+o+" and "+e+" for depthToSpace with input shape\n "+r.shape}),d(a*e>=0,function(){return "Negative dimension size caused by overflow when multiplying\n "+a+" and "+e+" for depthToSpace with input shape\n "+r.shape}),d(i%(e*e)==0,function(){return "Dimension size must be evenly divisible by "+e*e+" but is "+i+" for depthToSpace with input shape "+r.shape}),At.runKernel(function(t){return t.depthToSpace(r,e,n)},{$x:r})}}),Zn=ln({expandDims_:function(t,e){void 0===e&&(e=0);var n=Ye(t,"x","expandDims",null);d(e<=n.rank,function(){return "Axis must be <= rank of the tensor"});var r=n.shape.slice();return e<0&&(d(-(n.rank+1)<=e,function(){return "Axis must be in the interval ["+-(n.rank+1)+", "+n.rank+"]"}),e=n.rank+e+1),r.splice(e,0,1),hr(n,r)}}),tr=ln({eye_:function(t,e,n,r){void 0===r&&(r="float32"),null==e&&(e=t);for(var o=$n([t,e],r),a=t<=e?t:e,i=0;i2)throw new Error("Rank of probabilities must be 1 or 2, but is "+i);n=n||Math.random();var s=1===i?o.as2D(1,-1):o,u=At.runKernel(function(t){return t.multinomial(s,r,e,n)},{logits2D:s});return 1===i?u.as1D():u}}),nr=ln({oneHot_:function(t,e,n,r){if(void 0===n&&(n=1),void 0===r&&(r=0),e<2)throw new Error("Error in oneHot: depth must be >=2, but it is "+e);var o=Ye(t,"indices","oneHot","int32"),a=o.shape.concat([e]);return o=o.flatten(),At.runKernel(function(t){return t.oneHot(o,e,n,r)},{$indices:o},function(t){return {$indices:function(){return En(o.shape,"float32")}}}).reshape(a)}}),rr=ln({pad_:function(t,e,n){void 0===n&&(n=0);var r=Ye(t,"x","pad");if(0===r.rank)throw new Error("pad(scalar) is not defined. Pass non-scalar to pad");var o=e.map(function(t){return t[0]});return At.runKernel(function(t){return t.pad(r,e,n)},{$x:r},function(t){return {$x:function(){return t.slice(o,r.shape)}}})}}),or=ln({pad1d_:function(t,e,n){return void 0===n&&(n=0),d(2===e.length,function(){return "Invalid number of paddings. Must be length of 2."}),rr(t,[e],n)}}),ar=ln({pad2d_:function(t,e,n){return void 0===n&&(n=0),d(2===e.length&&2===e[0].length&&2===e[1].length,function(){return "Invalid number of paddings. Must be length of 2 each."}),rr(t,e,n)}}),ir=ln({pad3d_:function(t,e,n){return void 0===n&&(n=0),d(3===e.length&&2===e[0].length&&2===e[1].length&&2===e[2].length,function(){return "Invalid number of paddings. Must be length of 2 each."}),rr(t,e,n)}}),sr=ln({pad4d_:function(t,e,n){return void 0===n&&(n=0),d(4===e.length&&2===e[0].length&&2===e[1].length&&2===e[2].length&&2===e[3].length,function(){return "Invalid number of paddings. Must be length of 2 each."}),rr(t,e,n)}}),ur=ln({rand_:function(t,e,n){var r=y(t),o=null;if(null==n||"float32"===n)o=new Float32Array(r);else if("int32"===n)o=new Int32Array(r);else{if("bool"!==n)throw new Error("Unknown data type "+n);o=new Uint8Array(r);}for(var a=0;a=1+e.length,function(){return "input rank "+r.rank+" should be > than [blockShape] "+e.length}),d(n.length===e.length,function(){return "paddings.shape[0] "+n.length+" must be equal to [blockShape] "+e.length}),d(r.shape.reduce(function(t,r,o){return o>0&&o<=e.length?t&&(r+n[o-1][0]+n[o-1][1])%e[o-1]==0:t},!0),function(){return "input spatial dimensions "+r.shape.slice(1)+" with paddings "+n.toString()+" must be divisible by blockShapes "+e.toString()}),At.runKernel(function(t){return t.spaceToBatchND(r,e,n)},{$x:r},function(t){return {$x:function(){return t.batchToSpaceND(e,n)}}})}}),fr=ln({squeeze_:function(t,e){var n=Ye(t,"x","squeeze");return hr(n,N(n.shape,e).newShape)}}),dr=ln({stack_:function(t,e){void 0===e&&(e=0);var n=Qe(t,"tensors","stack");if(d(n.length>=1,function(){return "Pass at least one tensor to tf.stack"}),1===n.length)return n[0].expandDims(e);var r=n[0].rank,o=n[0].shape,a=n[0].dtype;d(e<=r,function(){return "Axis must be <= rank of the tensor"}),n.forEach(function(t){v(o,t.shape,"All tensors passed to stack must have matching shapes");}),n.forEach(function(t){d(a===t.dtype,function(){return "All tensors passed to stack must have matching dtypes"});});var i=n.map(function(t){return t.expandDims(e)});return An(i,e)}}),vr=ln({tile_:function(t,e){var n=Ye(t,"x","tile",null);return d(n.rank===e.length,function(){return "Error in transpose: rank of input "+n.rank+" must match length of reps "+e+"."}),At.runKernel(function(t,r){var o=t.tile(n,e);return r([n]),o},{$x:n},function(t,n){var r=n[0];return {$x:function(){var n=kn(r);if(1===r.rank)for(var o=0;o=-n.shape.length&&e=2*e+1||o%2==1?i.push(o):a.push(o);r.push.apply(r,a),r.push(0),r.push.apply(r,i);}return r}function wr(t,e,n,r){void 0===r&&(r=!0);var o=[];r?o.push(t[0]/n):o.push(t[0]*n);for(var a=1;at.rank)throw new Error("index innermost dimension length must be <= tensor rank; saw: "+e.shape[e.rank-1]+" vs. "+t.rank);if(0===t.size)throw new Error("Requested more than 0 entries, but input is empty. Input shape: "+t.shape+".");for(var n=e.shape,r=n[n.length-1],o=1,a=0;a1?e.shape[e.rank-1]:1,o=e.rank>1?e.rank-1:1,a="Must have updates.shape = indices.shape[:batchDim] + shape[sliceDim:], got updates.shape: "+n.shape+", indices.shape: "+e.shape+", shape: "+t+", sliceDim: "+r+", and batchDim: "+o+".";if(n.rank1?e.shape[e.rank-1]:1,o=n.length,a=1,i=r;i0?a>=c[e]:a<=c[e]);a+=o)n+=1;return n}),[l,f,h]}function Tr(t,e,n,r,o){var a=e[o],i=n[o]||1;(t&1<0?Number.MIN_SAFE_INTEGER:Number.MAX_SAFE_INTEGER);var s=r[o];return a<0&&(a+=s),a=h(0,a,s-1)}function Dr(t,e,n,r,o){var a=e[o],i=n[o]||1;(t&1<0?Number.MAX_SAFE_INTEGER:Number.MIN_SAFE_INTEGER);var s=r[o];return a<0&&(a+=s),a=i>0?h(0,a,s):h(-1,a,s-1)}function _r(t,e,n){for(var r=n.length,o=0;o1){r=o;break}for(o=r+1;o0||n[o]!==t[o])return !1;return !0}function Or(t,e){for(var n=t.length>0?t[t.length-1]:1,r=0;r0,function(){return "variableGrads() expects at least one of the input variables to be trainable, but none of the "+a+" variables is trainable."});var i=At.gradients(t,e,null,!0),s=i.value,u=i.grads;d(u.some(function(t){return null!=t}),function(){return "Cannot find a connection between any variable and the result of the loss function y=f(x). Please make sure the operations that use variables are inside the function f passed to minimize()."}),d(0===s.rank,function(){return "The f passed in variableGrads(f) must return a scalar, but it returned a rank-"+s.rank+" tensor"});var l={};return e.forEach(function(t,e){null!=u[e]&&(l[t.name]=u[e]);}),null!=o&&o.forEach(function(t){return l[t.name]=null}),{value:s,grads:l}}function Wr(t){return At.customGrad(t)}function Ur(t){if(t.filter(function(t){return null==t}).length>0)throw new Error("Cannot compute gradient of y=f(x) with respect to x. Make sure that\n the f you passed encloses all operations that lead from x to y.")}var zr=ln({softmax_:function(t,e){void 0===e&&(e=-1);var n=Ye(t,"logits","softmax");if(-1===e&&(e=n.rank-1),e!==n.rank-1)throw Error("Softmax along a non-last dimension is not yet supported. Logits was rank "+n.rank+" and dim was "+e);return Wr(function(t,n){var r=t.logSumExp([e],!0),o=t.toFloat().sub(r).exp();return n([o]),{value:o,gradFunc:function(t,n){var r=n[0],o=t.mul(r);return o.sub(o.sum([e],!0).mul(r))}}})(n)}}),Vr=ln({logSoftmax_:function(t,e){void 0===e&&(e=-1);var n=Ye(t,"logits","logSoftmax");if(-1===e&&(e=n.rank-1),e!==n.rank-1)throw Error("Log Softmax along a non-last dimension is not yet supported. Logits was rank "+n.rank+" and axis was "+e);return Wr(function(t,n){var r=t.max(e,!0),o=t.sub(r),a=o.toFloat().sub(o.exp().sum(e,!0).log());return n([a]),{value:a,gradFunc:function(t,n){var r=n[0].exp();return t.sub(t.sum(e,!0).mul(r))}}})(n)}}),Gr=function(){function t(t,e){this.backend=t,this.dataMover=e,this.data=new WeakMap;}return t.prototype.get=function(t){return this.data.has(t)||this.dataMover.moveData(this.backend,t),this.data.get(t)},t.prototype.set=function(t,e){this.data.set(t,e);},t.prototype.has=function(t){return this.data.has(t)},t.prototype.delete=function(t){return this.data.delete(t)},t}(),qr=function(){function t(){}return t.prototype.time=function(t){throw new Error("Not yet implemented.")},t.prototype.read=function(t){throw new Error("Not yet implemented.")},t.prototype.readSync=function(t){throw new Error("Not yet implemented.")},t.prototype.disposeData=function(t){throw new Error("Not yet implemented.")},t.prototype.write=function(t,e){throw new Error("Not yet implemented.")},t.prototype.fromPixels=function(t,e){throw new Error("Not yet implemented.")},t.prototype.register=function(t,e,n){throw new Error("Not yet implemented.")},t.prototype.memory=function(){throw new Error("Not yet implemented.")},t.prototype.floatPrecision=function(){throw new Error("Not yet implemented")},t.prototype.epsilon=function(){return 32===this.floatPrecision()?1e-7:1e-4},t.prototype.batchMatMul=function(t,e,n,r){throw new Error("Not yet implemented")},t.prototype.fusedBatchMatMul=function(t,e,n,r,o,a){throw new Error("Not yet implemented")},t.prototype.slice=function(t,e,n){throw new Error("Not yet implemented")},t.prototype.stridedSlice=function(t,e,n,r,o,a,i,s,u){throw new Error("Not yet implemented")},t.prototype.unstack=function(t,e){throw new Error("Not yet implemented")},t.prototype.reverse=function(t,e){throw new Error("Not yet implemented")},t.prototype.concat=function(t,e){throw new Error("Not yet implemented")},t.prototype.neg=function(t){throw new Error("Not yet implemented")},t.prototype.add=function(t,e){throw new Error("Not yet implemented")},t.prototype.addN=function(t){throw new Error("Not yet implemented")},t.prototype.subtract=function(t,e){throw new Error("Not yet implemented")},t.prototype.multiply=function(t,e){throw new Error("Not yet implemented")},t.prototype.realDivide=function(t,e){throw new Error("Not yet implemented")},t.prototype.floorDiv=function(t,e){throw new Error("Not yet implemented")},t.prototype.sum=function(t,e){throw new Error("Not yet implemented")},t.prototype.prod=function(t,e){throw new Error("Not yet implemented")},t.prototype.unsortedSegmentSum=function(t,e,n){throw new Error("Not yet implemented")},t.prototype.argMin=function(t,e){throw new Error("Not yet implemented")},t.prototype.argMax=function(t,e){throw new Error("Not yet implemented")},t.prototype.equal=function(t,e){throw new Error("Not yet implemented")},t.prototype.notEqual=function(t,e){throw new Error("Not yet implemented")},t.prototype.less=function(t,e){throw new Error("Not yet implemented")},t.prototype.lessEqual=function(t,e){throw new Error("Not yet implemented")},t.prototype.greater=function(t,e){throw new Error("Not yet implemented")},t.prototype.greaterEqual=function(t,e){throw new Error("Not yet implemented")},t.prototype.logicalNot=function(t){throw new Error("Not yet implemented")},t.prototype.logicalAnd=function(t,e){throw new Error("Not yet implemented")},t.prototype.logicalOr=function(t,e){throw new Error("Not yet implemented")},t.prototype.where=function(t){throw new Error("Not yet implemented")},t.prototype.select=function(t,e,n){throw new Error("Not yet implemented")},t.prototype.topk=function(t,e,n){throw new Error("Not yet implemented")},t.prototype.min=function(t,e){throw new Error("Not yet implemented")},t.prototype.minimum=function(t,e){throw new Error("Not yet implemented")},t.prototype.mod=function(t,e){throw new Error("Not yet implemented")},t.prototype.max=function(t,e){throw new Error("Not yet implemented")},t.prototype.maximum=function(t,e){throw new Error("Not yet implemented")},t.prototype.all=function(t,e){throw new Error("Not yet implemented")},t.prototype.any=function(t,e){throw new Error("Not yet implemented")},t.prototype.squaredDifference=function(t,e){throw new Error("Not yet implemented")},t.prototype.ceil=function(t){throw new Error("Not yet implemented")},t.prototype.floor=function(t){throw new Error("Not yet implemented")},t.prototype.round=function(t){throw new Error("Not yet implemented")},t.prototype.sign=function(t){throw new Error("Not yet implemented")},t.prototype.isNaN=function(t){throw new Error("Not yet implemented")},t.prototype.isInf=function(t){throw new Error("Not yet implemented")},t.prototype.isFinite=function(t){throw new Error("Not yet implemented")},t.prototype.pow=function(t,e){throw new Error("Not yet implemented")},t.prototype.exp=function(t){throw new Error("Not yet implemented")},t.prototype.expm1=function(t){throw new Error("Not yet implemented")},t.prototype.log=function(t){throw new Error("Not yet implemented")},t.prototype.log1p=function(t){throw new Error("Not yet implemented")},t.prototype.sqrt=function(t){throw new Error("Not yet implemented")},t.prototype.rsqrt=function(t){throw new Error("Not yet implemented")},t.prototype.square=function(t){throw new Error("Not yet implemented")},t.prototype.reciprocal=function(t){throw new Error("Not yet implemented")},t.prototype.relu=function(t){throw new Error("Not yet implemented")},t.prototype.prelu=function(t,e){throw new Error("Not yet implemented")},t.prototype.elu=function(t){throw new Error("Not yet implemented")},t.prototype.eluDer=function(t,e){throw new Error("Not yet implemented")},t.prototype.selu=function(t){throw new Error("Not yet implemented")},t.prototype.int=function(t){throw new Error("Not yet implemented")},t.prototype.clip=function(t,e,n){throw new Error("Not yet implemented")},t.prototype.abs=function(t){throw new Error("Not yet implemented")},t.prototype.complexAbs=function(t){throw new Error("Not yet implemented")},t.prototype.sigmoid=function(t){throw new Error("Not yet implemented")},t.prototype.softplus=function(t){throw new Error("Not yet implemented")},t.prototype.sin=function(t){throw new Error("Not yet implemented")},t.prototype.cos=function(t){throw new Error("Not yet implemented")},t.prototype.tan=function(t){throw new Error("Not yet implemented")},t.prototype.asin=function(t){throw new Error("Not yet implemented")},t.prototype.acos=function(t){throw new Error("Not yet implemented")},t.prototype.atan=function(t){throw new Error("Not yet implemented")},t.prototype.atan2=function(t,e){throw new Error("Not yet implemented")},t.prototype.sinh=function(t){throw new Error("Not yet implemented")},t.prototype.cosh=function(t){throw new Error("Not yet implemented")},t.prototype.tanh=function(t){throw new Error("Not yet implemented")},t.prototype.asinh=function(t){throw new Error("Not yet implemented")},t.prototype.acosh=function(t){throw new Error("Not yet implemented")},t.prototype.atanh=function(t){throw new Error("Not yet implemented")},t.prototype.erf=function(t){throw new Error("Not yet implemented")},t.prototype.step=function(t,e){throw new Error("Not yet implemented")},t.prototype.conv2d=function(t,e,n){throw new Error("Not yet implemented")},t.prototype.conv2dDerInput=function(t,e,n){throw new Error("Not yet implemented")},t.prototype.conv2dDerFilter=function(t,e,n){throw new Error("Not yet implemented")},t.prototype.depthwiseConv2D=function(t,e,n){throw new Error("Not yet implemented")},t.prototype.depthwiseConv2DDerInput=function(t,e,n){throw new Error("Not yet implemented")},t.prototype.depthwiseConv2DDerFilter=function(t,e,n){throw new Error("Not yet implemented")},t.prototype.conv3d=function(t,e,n){throw new Error("Not yet implemented")},t.prototype.conv3dDerInput=function(t,e,n){throw new Error("Not yet implemented")},t.prototype.conv3dDerFilter=function(t,e,n){throw new Error("Not yet implemented")},t.prototype.maxPool=function(t,e){throw new Error("Not yet implemented")},t.prototype.maxPoolBackprop=function(t,e,n,r){throw new Error("Not yet implemented")},t.prototype.avgPool=function(t,e){throw new Error("Not yet implemented")},t.prototype.avgPoolBackprop=function(t,e,n){throw new Error("Not yet implemented")},t.prototype.reshape=function(t,e){throw new Error("Not yet implemented")},t.prototype.cast=function(t,e){throw new Error("Not yet implemented")},t.prototype.tile=function(t,e){throw new Error("Not yet implemented")},t.prototype.pad=function(t,e,n){throw new Error("Not yet implemented")},t.prototype.transpose=function(t,e){throw new Error("Not yet implemented")},t.prototype.gather=function(t,e,n){throw new Error("Not yet implemented")},t.prototype.gatherND=function(t,e){throw new Error("Not yet implemented")},t.prototype.scatterND=function(t,e,n){throw new Error("Not yet implemented")},t.prototype.batchToSpaceND=function(t,e,n){throw new Error("Not yet implemented")},t.prototype.spaceToBatchND=function(t,e,n){throw new Error("Not yet implemented")},t.prototype.resizeBilinear=function(t,e,n,r){throw new Error("Not yet implemented")},t.prototype.resizeBilinearBackprop=function(t,e,n){throw new Error("Not yet implemented")},t.prototype.resizeNearestNeighbor=function(t,e,n,r){throw new Error("Not yet implemented")},t.prototype.resizeNearestNeighborBackprop=function(t,e,n){throw new Error("Not yet implemented")},t.prototype.batchNormalization=function(t,e,n,r,o,a){throw new Error("Not yet implemented")},t.prototype.localResponseNormalization4D=function(t,e,n,r,o){throw new Error("Not yet implemented")},t.prototype.LRNGrad=function(t,e,n,r,o,a,i){throw new Error("Not yet implemented")},t.prototype.multinomial=function(t,e,n,r){throw new Error("Not yet implemented")},t.prototype.oneHot=function(t,e,n,r){throw new Error("Not yet implemented")},t.prototype.cumsum=function(t,e,n,r){throw new Error("Not yet implemented")},t.prototype.nonMaxSuppression=function(t,e,n,r,o){throw new Error("Not yet implemented")},t.prototype.fft=function(t){throw new Error("Not yet implemented")},t.prototype.ifft=function(t){throw new Error("Not yet implemented")},t.prototype.complex=function(t,e){throw new Error("Not yet implemented")},t.prototype.real=function(t){throw new Error("Not yet implemented")},t.prototype.imag=function(t){throw new Error("Not yet implemented")},t.prototype.cropAndResize=function(t,e,n,r,o,a){throw new Error("Not yet implemented")},t.prototype.depthToSpace=function(t,e,n){throw new Error("Not yet implemented")},t.prototype.split=function(t,e,n){throw new Error("Not yet implemented")},t.prototype.sparseToDense=function(t,e,n,r){throw new Error("Not yet implemented")},t.prototype.fill=function(t,e,n){throw new Error("Not yet implemented.")},t.prototype.onesLike=function(t){throw new Error("Not yet implemented")},t.prototype.zerosLike=function(t){throw new Error("Not yet implemented")},t.prototype.linspace=function(t,e,n){throw new Error("Not yet implemented")},t.prototype.dispose=function(){throw new Error("Not yet implemented")},t}();function Hr(t,e){for(var n=t.length,r=[],o=0;o1&&1===i&&r.unshift(a);}return r}function $r(t,e){for(var n=[],r=0;r1)&&n.unshift(a);}return n}function jr(t,e){for(var n=[],r=Math.max(t.length,e.length),o=0;oo}).sort(function(t,e){return e.score-t.score}),i=[],s=0;s=0;--p){if(fo(t,c,i[p])>=r){h=!0;break}}if(!h&&(i.push(c),i.length>=n))break}return mn(i,"int32")}function fo(t,e,n){var r=t.subarray(4*e,4*e+4),o=t.subarray(4*n,4*n+4),a=Math.min(r[0],r[2]),i=Math.min(r[1],r[3]),s=Math.max(r[0],r[2]),u=Math.max(r[1],r[3]),l=Math.min(o[0],o[2]),c=Math.min(o[1],o[3]),h=Math.max(o[0],o[2]),p=Math.max(o[1],o[3]),f=(s-a)*(u-i),d=(h-l)*(p-c);if(f<=0||d<=0)return 0;var v=Math.max(a,l),m=Math.max(i,c),g=Math.min(s,h),y=Math.min(u,p),x=Math.max(g-v,0)*Math.max(y-m,0);return x/(f+d-x)}function vo(t,e,n){var r=new Array(t.rank).fill(0),o=t.shape.slice();return e.map(function(e){o[n]=e;var a=t.slice(r,o);return r[n]+=e,a})}function mo(t,e){for(var n=new Array(t.rank),r=0;r":"<",u=n?"inOffset + i;":"round(getBestIndicesA(batch, inOffset + i));";this.userCode="\n void main() {\n ivec2 coords = getOutputCoords();\n int batch = coords[0];\n int outIdx = coords[1];\n int inOffset = outIdx * "+r+";\n\n int bestIndex = inOffset;\n float bestValue = getA(batch, bestIndex);\n\n for (int i = 0; i < "+r+"; i++) {\n int inIdx = "+u+";\n float candidate = getA(batch, inIdx);\n if (candidate "+s+" bestValue) {\n bestValue = candidate;\n bestIndex = inIdx;\n }\n }\n setOutput(float(bestIndex));\n }\n ";}}();function Co(t,e){return ["x","y","z","w","u","v"].slice(0,e).map(function(e){return t+"."+e})}function Eo(t,e){return 1===e?[t]:Co(t,e)}function Ro(){var t,e,n,r,o,a,i,u,l,c;return 2===s.getNumber("WEBGL_VERSION")?(t="#version 300 es",e="in",n="out",r="in",o="texture",a="outputColor",i="out vec4 outputColor;",u="\n bool isnan_custom(float val) {\n return (val > 0. || val < 0. || val == 0.) ? false : true;\n }\n ",l="\n const float INFINITY = uintBitsToFloat(uint(0x7f800000));\n ",c="\n #define round(value) newRound(value)\n int newRound(float value) {\n return int(floor(value + 0.5));\n }\n\n ivec4 newRound(vec4 value) {\n return ivec4(floor(value + vec4(0.5)));\n }\n "):(t="",e="attribute",n="varying",r="varying",o="texture2D",a="gl_FragColor",i="",u="\n bool isnan_custom(float val) {\n return (val > 0. || val < 1. || val == 0.) ? false : true;\n }\n ",l="\n uniform float INFINITY;\n\n bool isinf(float val) {\n return abs(val) == INFINITY;\n }\n bvec4 isinf(vec4 val) {\n return equal(abs(val), vec4(INFINITY));\n }\n ",c="\n int round(float value) {\n return int(floor(value + 0.5));\n }\n\n ivec4 round(vec4 value) {\n return ivec4(floor(value + vec4(0.5)));\n }\n "),{version:t,attribute:e,varyingVs:n,varyingFs:r,texture2D:o,output:a,defineOutput:i,defineSpecialNaN:u,defineSpecialInf:l,defineRound:c}}function Io(t,e,n){void 0===n&&(n="index");var r=G(e);return r.map(function(e,o){return "int "+t[o]+" = "+n+" / "+e+"; "+(o===r.length-1?"int "+t[o+1]+" = "+n+" - "+t[o]+" * "+e:"index -= "+t[o]+" * "+e)+";"}).join("")}function So(t){var e=G(t).map(function(t){return t.toString()});return "\n int getFlatIndex(ivec3 coords) {\n return coords.x * "+e[0]+" + coords.y * "+e[1]+" + coords.z;\n }\n"}var No="\n const float FLOAT_MAX = 1.70141184e38;\n const float FLOAT_MIN = 1.17549435e-38;\n\n lowp vec4 encode_float(highp float v) {\n if (isnan(v)) {\n return vec4(255, 255, 255, 255);\n }\n\n highp float av = abs(v);\n\n if(av < FLOAT_MIN) {\n return vec4(0.0, 0.0, 0.0, 0.0);\n } else if(v > FLOAT_MAX) {\n return vec4(0.0, 0.0, 128.0, 127.0) / 255.0;\n } else if(v < -FLOAT_MAX) {\n return vec4(0.0, 0.0, 128.0, 255.0) / 255.0;\n }\n\n highp vec4 c = vec4(0,0,0,0);\n\n highp float e = floor(log2(av));\n highp float m = exp2(fract(log2(av))) - 1.0;\n\n c[2] = floor(128.0 * m);\n m -= c[2] / 128.0;\n c[1] = floor(32768.0 * m);\n m -= c[1] / 32768.0;\n c[0] = floor(8388608.0 * m);\n\n highp float ebias = e + 127.0;\n c[3] = floor(ebias / 2.0);\n ebias -= c[3] * 2.0;\n c[2] += floor(ebias) * 128.0;\n\n c[3] += 128.0 * step(0.0, -v);\n\n return c / 255.0;\n }\n";function ko(t,e,n,r){var o=[];t.forEach(function(t){var e=y(t.shapeInfo.logicalShape);t.shapeInfo.isUniform?o.push("uniform float "+t.name+(e>1?"["+e+"]":"")+";"):(o.push("uniform sampler2D "+t.name+";"),o.push("uniform int offset"+t.name+";"));});var a,i,s=o.join("\n"),u=t.map(function(t){return function(t,e,n){void 0===n&&(n=!1);var r="";r+=n?To(t):Ao(t);var o=t.shapeInfo.logicalShape,a=e.logicalShape;o.length<=a.length&&(r+=n?function(t,e){var n,r=t.name,o=r.charAt(0).toUpperCase()+r.slice(1),a="get"+o+"AtOutCoords",i=t.shapeInfo.logicalShape.length,s=e.logicalShape.length,u=Hr(t.shapeInfo.logicalShape,e.logicalShape),l=Po(s),c=s-i,h=["x","y","z","w","u","v"];n=0===i?"":s<2&&u.length>=1?"coords = 0;":u.map(function(t){return "coords."+h[t+c]+" = 0;"}).join("\n");var p="";p=s<2&&i>0?"coords":t.shapeInfo.logicalShape.map(function(t,e){return "coords."+h[e+c]}).join(", ");var f="return outputValue;",d=1===y(t.shapeInfo.logicalShape),v=1===y(e.logicalShape);if(1!==i||d||v){if(d&&!v)f=1===s?"\n return vec4(outputValue.x, outputValue.x, 0., 0.);\n ":"\n return vec4(outputValue.x);\n ";else if(u.length){var m=i-2,g=i-1;u.indexOf(m)>-1&&u.indexOf(g)>-1?f="return vec4(outputValue.x);":u.indexOf(m)>-1?f="return vec4(outputValue.x, outputValue.y, outputValue.x, outputValue.y);":u.indexOf(g)>-1&&(f="return vec4(outputValue.xx, outputValue.zz);");}}else f="\n return vec4(outputValue.xy, outputValue.xy);\n ";return "\n vec4 "+a+"() {\n "+l+" coords = getOutputCoords();\n "+n+"\n vec4 outputValue = get"+o+"("+p+");\n "+f+"\n }\n "}(t,e):function(t,e){var n=t.name,r=n.charAt(0).toUpperCase()+n.slice(1),o="get"+r+"AtOutCoords",a=e.texShape,i=t.shapeInfo.texShape,s=t.shapeInfo.logicalShape.length,u=e.logicalShape.length;if(!t.shapeInfo.isUniform&&s===u&&null==t.shapeInfo.flatOffset&&x(i,a))return "\n float "+o+"() {\n return sampleTexture("+n+", resultUV);\n }\n ";var l,c=Po(u),h=Hr(t.shapeInfo.logicalShape,e.logicalShape),p=u-s,f=["x","y","z","w","u","v"];l=0===s?"":u<2&&h.length>=1?"coords = 0;":h.map(function(t){return "coords."+f[t+p]+" = 0;"}).join("\n");var d="";d=u<2&&s>0?"coords":t.shapeInfo.logicalShape.map(function(t,e){return "coords."+f[e+p]}).join(", ");return "\n float "+o+"() {\n "+c+" coords = getOutputCoords();\n "+l+"\n return get"+r+"("+d+");\n }\n "}(t,e));return r}(t,e,r)}).join("\n"),l=e.texShape,c=Ro(),h=function(t){return "\n float sampleTexture(sampler2D textureSampler, vec2 uv) {\n return "+t.texture2D+"(textureSampler, uv).r;\n }\n "}(c),p=function(t){return t.version+"\n precision highp float;\n precision highp int;\n precision highp sampler2D;\n "+t.varyingFs+" vec2 resultUV;\n "+t.defineOutput+"\n const vec2 halfCR = vec2(0.5, 0.5);\n\n struct ivec5\n {\n int x;\n int y;\n int z;\n int w;\n int u;\n };\n\n struct ivec6\n {\n int x;\n int y;\n int z;\n int w;\n int u;\n int v;\n };\n\n uniform float NAN;\n #define isnan(value) isnan_custom(value)\n "+t.defineSpecialNaN+"\n bvec4 isnan_custom(vec4 val) {\n return bvec4(isnan(val.x), isnan(val.y), isnan(val.z), isnan(val.w));\n }\n\n "+t.defineSpecialInf+"\n "+t.defineRound+"\n\n int imod(int x, int y) {\n return x - y * (x / y);\n }\n\n int idiv(int a, int b, float sign) {\n int res = a / b;\n int mod = imod(a, b);\n if (sign < 0. && mod != 0) {\n res -= 1;\n }\n return res;\n }\n\n //Based on the work of Dave Hoskins\n //https://www.shadertoy.com/view/4djSRW\n #define HASHSCALE1 443.8975\n float random(float seed){\n vec2 p = resultUV * seed;\n vec3 p3 = fract(vec3(p.xyx) * HASHSCALE1);\n p3 += dot(p3, p3.yzx + 19.19);\n return fract((p3.x + p3.y) * p3.z);\n }\n\n "+Do+"\n "+_o+"\n "+Oo+"\n "}(c);return e.isPacked?(a=function(t,e){switch(t.length){case 0:return "\n int getOutputCoords() {\n return 0;\n }\n ";case 1:return function(t,e){var n=[Math.ceil(e[0]/2),Math.ceil(e[1]/2)];if(1===n[0])return "\n int getOutputCoords() {\n return 2 * int(resultUV.x * "+n[1]+".0);\n }\n ";if(1===n[1])return "\n int getOutputCoords() {\n return 2 * int(resultUV.y * "+n[0]+".0);\n }\n ";return "\n int getOutputCoords() {\n ivec2 resTexRC = ivec2(resultUV.yx *\n vec2("+n[0]+", "+n[1]+"));\n return 2 * (resTexRC.x * "+n[1]+" + resTexRC.y);\n }\n "}(0,e);case 2:return function(t,e){var n=[Math.ceil(e[0]/2),Math.ceil(e[1]/2)];if(x(t,e))return "\n ivec2 getOutputCoords() {\n return 2 * ivec2(resultUV.yx * vec2("+n[0]+", "+n[1]+"));\n }\n ";var r=Math.ceil(t[1]/2);return "\n ivec2 getOutputCoords() {\n ivec2 resTexRC = ivec2(resultUV.yx *\n vec2("+n[0]+", "+n[1]+"));\n\n int index = resTexRC.x * "+n[1]+" + resTexRC.y;\n int r = 2 * (index / "+r+");\n int c = imod(index, "+r+") * 2;\n\n return ivec2(r, c);\n }\n "}(t,e);case 3:return n=t,r=e,o=[Math.ceil(r[0]/2),Math.ceil(r[1]/2)],a=Math.ceil(n[2]/2),i=a*Math.ceil(n[1]/2),"\n ivec3 getOutputCoords() {\n ivec2 resTexRC = ivec2(resultUV.yx *\n vec2("+o[0]+", "+o[1]+"));\n int index = resTexRC.x * "+o[1]+" + resTexRC.y;\n\n int b = index / "+i+";\n index -= b * "+i+";\n\n int r = 2 * (index / "+a+");\n int c = imod(index, "+a+") * 2;\n\n return ivec3(b, r, c);\n }\n ";default:return function(t,e){for(var n=[Math.ceil(e[0]/2),Math.ceil(e[1]/2)],r=Math.ceil(t[t.length-1]/2),o=r*Math.ceil(t[t.length-2]/2),a=o,i="",s="b, r, c",u=2;u2,function(){return "Packed arg"+(n.charAt(0).toUpperCase()+n.slice(1))+" supports only inputs with rank above 2."});var o=t[t.length-1],a=Math.ceil(o/e);this.outputShape=t.slice(0,-1),a>1&&this.outputShape.push(a),r||this.variableNames.push("bestIndicesA");var i,s,u=this.outputShape,l=u.length,c=Po(l),h=Eo("coords",l);if(1===a){var p=Po(s=l+1);i="\n "+p+" sourceLocR = "+p+"("+h.join()+", 0);\n ++"+h[l-1]+";\n "+p+" sourceLocG = "+p+"("+h.join()+", 0);\n ++"+h[l-2]+";\n "+p+" sourceLocA = "+p+"("+h.join()+", 0);\n --"+h[l-1]+";\n "+p+" sourceLocB = "+p+"("+h.join()+", 0);\n --"+h[l-2]+";";}else s=l,i="\n "+c+" sourceLocR = coords;\n ++"+h[l-1]+";\n "+c+" sourceLocG = coords;\n ++"+h[l-2]+";\n "+c+" sourceLocA = coords;\n --"+h[l-1]+";\n "+c+" sourceLocB = coords;\n --"+h[l-2]+";";var f=["x","y","z","w","u","v"].slice(0,s),v="."+f[s-1],m=f.map(function(t){return "int "+t}),g=Eo("sourceLocR",s-1).concat("inIdx.r"),y=Eo("sourceLocG",s-1).concat("inIdx.g"),x=Eo("sourceLocB",s-1).concat("inIdx.b"),b=Eo("sourceLocA",s-1).concat("inIdx.a"),w="max"===n?"greaterThan":"lessThan",C=r?"":"\n inIdx = round(vec4(getBestIndicesAChannel("+g.join()+"),\n getBestIndicesAChannel("+y.join()+"),\n getBestIndicesAChannel("+x.join()+"),\n getBestIndicesAChannel("+b.join()+")));",E="vec4(\n getAChannel("+g.join()+"),\n hasNextCol ? getAChannel("+y.join()+") : 0.,\n hasNextRow ? getAChannel("+x.join()+") : 0.,\n hasNextRow && hasNextCol ? getAChannel("+b.join()+") : 0.)",R=r?"":"\n float getBestIndicesAChannel("+m.join()+") {\n return getChannel(getBestIndicesA("+f.join()+"),\n vec2("+f.slice(-2).join()+"));\n }";this.userCode="\n float getAChannel("+m.join()+") {\n return getChannel(getA("+f.join()+"),\n vec2("+f.slice(-2).join()+"));\n }\n "+R+"\n void main() {\n "+c+" coords = getOutputCoords();\n bool hasNextCol = "+h[l-1]+" < "+(u[l-1]-1)+";\n bool hasNextRow = "+h[l-2]+" < "+(u[l-2]-1)+";\n "+i+"\n ivec4 srcIdx = ivec4(sourceLocR"+v+", sourceLocG"+v+",\n sourceLocB"+v+", sourceLocA"+v+") * "+e+";\n ivec4 inIdx = srcIdx;\n vec4 bestIndex = vec4(inIdx);\n vec4 bestValue = "+E+";\n\n for (int i = 0; i < "+e+"; i++) {\n inIdx = srcIdx;\n "+C+"\n vec4 candidate = "+E+";\n bvec4 nan = isnan(candidate);\n bvec4 replace = bvec4(\n vec4("+w+"(candidate, bestValue)) * (vec4(1.0) - vec4(nan)));\n\n bestValue = vec4(replace.x ? candidate.x : bestValue.x,\n replace.y ? candidate.y : bestValue.y,\n replace.z ? candidate.z : bestValue.z,\n replace.w ? candidate.w : bestValue.w);\n bestIndex = mix(bestIndex, vec4(inIdx), vec4(replace));\n srcIdx++;\n }\n setOutput(bestIndex);\n }\n ";}}(),zo=function(){return function(t){this.variableNames=["dy"],this.outputShape=t.inShape;var e=t.filterHeight,n=t.filterWidth,r=t.strideHeight,o=t.strideWidth,a=t.dilationHeight,i=t.dilationWidth,s=t.effectiveFilterHeight,u=t.effectiveFilterWidth,l=s-1-t.padInfo.top,c=u-1-t.padInfo.left,h=1/(e*n);this.userCode="\n const ivec2 pads = ivec2("+l+", "+c+");\n const float avgMultiplier = float("+h+");\n\n void main() {\n ivec4 coords = getOutputCoords();\n int b = coords[0];\n int d = coords[3];\n\n ivec2 dyRCCorner = coords.yz - pads;\n int dyRCorner = dyRCCorner.x;\n int dyCCorner = dyRCCorner.y;\n\n // Convolve dy(?, ?, d) with pos mask(:, :, d) to get dx(xR, xC, d).\n // ? = to be determined. : = across all values in that axis.\n float dotProd = 0.0;\n for (int wR = 0; wR < "+s+";\n wR += "+a+") {\n float dyR = float(dyRCorner + wR) / "+r+".0;\n\n if (dyR < 0.0 || dyR >= "+t.outHeight+".0 || fract(dyR) > 0.0) {\n continue;\n }\n int idyR = int(dyR);\n\n for (int wC = 0; wC < "+u+";\n wC+= "+i+") {\n float dyC = float(dyCCorner + wC) / "+o+".0;\n\n if (dyC < 0.0 || dyC >= "+t.outWidth+".0 ||\n fract(dyC) > 0.0) {\n continue;\n }\n int idyC = int(dyC);\n\n float dyValue = getDy(b, idyR, idyC, d);\n\n dotProd += dyValue * avgMultiplier;\n }\n }\n setOutput(dotProd);\n }\n ";}}(),Vo=function(){return function(t,e,n,r,o,a){this.outputShape=[],this.variableNames=["x","mean","variance"],jr(t,e),jr(t,n);var i="0.0";null!=r&&(jr(t,r),this.variableNames.push("offset"),i="getOffsetAtOutCoords()");var s="1.0";null!=o&&(jr(t,o),this.variableNames.push("scale"),s="getScaleAtOutCoords()"),this.outputShape=t,this.userCode="\n void main() {\n float x = getXAtOutCoords();\n float mean = getMeanAtOutCoords();\n float variance = getVarianceAtOutCoords();\n float offset = "+i+";\n float scale = "+s+";\n float inv = scale * inversesqrt(variance + float("+a+"));\n setOutput(dot(vec3(x, -mean, offset), vec3(inv, inv, 1)));\n }\n ";}}(),Go=function(){return function(t,e,n,r,o,a){this.usesPackedTextures=!0,this.variableNames=["x","mean","variance"],jr(t,e),jr(t,n);var i="vec4(0.0)";null!=r&&(jr(t,r),this.variableNames.push("offset"),i="getOffsetAtOutCoords()");var s="vec4(1.0)";null!=o&&(jr(t,o),this.variableNames.push("scale"),s="getScaleAtOutCoords()"),this.outputShape=t,this.userCode="\n void main() {\n vec4 offset = "+i+";\n vec4 scale = "+s+";\n\n vec4 x = getXAtOutCoords();\n vec4 mean = getMeanAtOutCoords();\n vec4 variance = getVarianceAtOutCoords();\n\n vec4 inv = scale * inversesqrt(variance + vec4("+a+"));\n\n setOutput((x - mean) * inv + offset);\n }\n ";}}(),qo="return areal * breal - aimag * bimag;",Ho="return areal * bimag + aimag * breal;",$o=function(){return function(t,e,n){this.variableNames=["AReal","AImag","BReal","BImag"],this.outputShape=jr(e,n),this.userCode="\n float binaryOpComplex(\n float areal, float aimag, float breal, float bimag) {\n "+t+"\n }\n\n void main() {\n float areal = getARealAtOutCoords();\n float aimag = getAImagAtOutCoords();\n float breal = getBRealAtOutCoords();\n float bimag = getBImagAtOutCoords();\n setOutput(binaryOpComplex(areal, aimag, breal, bimag));\n }\n ";}}(),jo="return a + b;",Ko="return a - b;",Xo="return a * b;",Yo=function(){return function(t,e,n){this.variableNames=["A","B"],this.outputShape=jr(e,n),this.userCode="\n float binaryOperation(float a, float b) {\n "+t+"\n }\n\n void main() {\n float a = getAAtOutCoords();\n float b = getBAtOutCoords();\n setOutput(binaryOperation(a, b));\n }\n ";}}(),Qo=function(){return function(t,e,n,r){void 0===r&&(r=!1),this.variableNames=["A","B"],this.supportsBroadcasting=!0,this.usesPackedTextures=!0,this.outputShape=jr(e,n);var o=this.outputShape.length,a="";if(r)if(0===o||1===y(this.outputShape))a="\n result.y = 0.;\n result.z = 0.;\n result.w = 0.;\n ";else if(a="\n "+Po(o)+" coords = getOutputCoords();\n ",1===o)a+="\n result.y = (coords + 1) >= "+this.outputShape[0]+" ? 0. : result.y;\n result.z = 0.;\n result.w = 0.;\n ";else{var i=Eo("coords",o);a+="\n bool nextRowOutOfBounds =\n ("+i[o-2]+" + 1) >= "+this.outputShape[o-2]+";\n bool nextColOutOfBounds =\n ("+i[o-1]+" + 1) >= "+this.outputShape[o-1]+";\n result.y = nextColOutOfBounds ? 0. : result.y;\n result.z = nextRowOutOfBounds ? 0. : result.z;\n result.w = nextColOutOfBounds || nextRowOutOfBounds ? 0. : result.w;\n ";}this.userCode="\n vec4 binaryOperation(vec4 a, vec4 b) {\n "+t+"\n }\n\n void main() {\n vec4 a = getAAtOutCoords();\n vec4 b = getBAtOutCoords();\n\n vec4 result = binaryOperation(a, b);\n "+a+"\n\n setOutput(result);\n }\n ";}}(),Jo=function(){function t(t){this.variableNames=["A"],this.outputShape=t,this.userCode="\n uniform float min;\n uniform float max;\n\n void main() {\n float value = getAAtOutCoords();\n if (isnan(value)) {\n setOutput(value);\n return;\n }\n\n setOutput(clamp(value, min, max));\n }\n ";}return t.prototype.getCustomSetupFunc=function(t,e){var n=this;return function(r,o){null==n.minLoc&&(n.minLoc=r.getUniformLocationNoThrow(o,"min"),n.maxLoc=r.getUniformLocationNoThrow(o,"max")),r.gl.uniform1f(n.minLoc,t),r.gl.uniform1f(n.maxLoc,e);}},t}(),Zo=function(){function t(t){this.variableNames=["A"],this.usesPackedTextures=!0,this.outputShape=t,this.userCode="\n uniform float min;\n uniform float max;\n\n void main() {\n vec4 value = getAAtOutCoords();\n\n if (any(isnan(value))) {\n setOutput(value);\n return;\n }\n\n setOutput(clamp(value, vec4(min), vec4(max)));\n }\n ";}return t.prototype.getCustomSetupFunc=function(t,e){var n=this;return function(r,o){null==n.minLoc&&(n.minLoc=r.getUniformLocationNoThrow(o,"min"),n.maxLoc=r.getUniformLocationNoThrow(o,"max")),r.gl.uniform1f(n.minLoc,t),r.gl.uniform1f(n.maxLoc,e);}},t}(),ta=function(){return function(t){this.variableNames=["real","imag"],this.outputShape=t,this.userCode="\n void main() {\n float re = abs(getRealAtOutCoords());\n float im = abs(getImagAtOutCoords());\n float mx = max(re, im);\n\n // sadly the length function in glsl is not underflow-safe\n // (at least not on Intel GPUs). So the safe solution is\n // to ensure underflow-safety in all cases.\n setOutput(\n mx == 0.0 ? 0.0 : mx * length(vec2(1, min(re, im)/mx))\n );\n }\n ";}}(),ea=function(){return function(t){this.outputShape=[],this.outputShape=un(t,1),this.variableNames=t.map(function(t,e){return "T"+e});var e=new Array(t.length-1);e[0]=t[0][1];for(var n=1;n= "+t.inHeight+") {\n continue;\n }\n\n for (int yC = 0; yC < "+t.outWidth+"; yC++) {\n int xC = wC + yC * "+n+" - "+o+";\n\n if (xC < 0 || xC >= "+t.inWidth+") {\n continue;\n }\n\n float dyValue = getDy(b, yR, yC, d2);\n float xValue = getX(b, xR, xC, d1);\n dotProd += (xValue * dyValue);\n }\n }\n }\n setOutput(dotProd);\n }\n ";}}(),oa=function(){return function(t){this.variableNames=["dy","W"],this.outputShape=t.inShape;var e=t.filterHeight,n=t.filterWidth,r=t.strideHeight,o=t.strideWidth,a=e-1-t.padInfo.top,i=n-1-t.padInfo.left;this.userCode="\n const ivec2 pads = ivec2("+a+", "+i+");\n\n void main() {\n ivec4 coords = getOutputCoords();\n int batch = coords[0];\n int d1 = coords[3];\n\n ivec2 dyCorner = coords.yz - pads;\n int dyRCorner = dyCorner.x;\n int dyCCorner = dyCorner.y;\n\n // Convolve dy(?, ?, d2) with w(:, :, d1, d2) to compute dx(xR, xC, d1).\n // ? = to be determined. : = across all values in that axis.\n float dotProd = 0.0;\n for (int wR = 0; wR < "+e+"; wR++) {\n float dyR = float(dyRCorner + wR) / "+r+".0;\n\n if (dyR < 0.0 || dyR >= "+t.outHeight+".0 || fract(dyR) > 0.0) {\n continue;\n }\n int idyR = int(dyR);\n\n int wRPerm = "+e+" - 1 - wR;\n\n for (int wC = 0; wC < "+n+"; wC++) {\n float dyC = float(dyCCorner + wC) / "+o+".0;\n\n if (dyC < 0.0 || dyC >= "+t.outWidth+".0 ||\n fract(dyC) > 0.0) {\n continue;\n }\n int idyC = int(dyC);\n\n int wCPerm = "+n+" - 1 - wC;\n\n for (int d2 = 0; d2 < "+t.outChannels+"; d2++) {\n float xValue = getDy(batch, idyR, idyC, d2);\n float wValue = getW(wRPerm, wCPerm, d1, d2);\n dotProd += xValue * wValue;\n }\n }\n }\n setOutput(dotProd);\n }\n ";}}(),aa=function(){return function(t){this.variableNames=["x","dy"],this.outputShape=t.filterShape;var e=t.strideDepth,n=t.strideHeight,r=t.strideWidth,o=t.padInfo.front,a=t.padInfo.top,i=t.padInfo.left;this.userCode="\n void main() {\n ivec5 coords = getOutputCoords();\n int wF = coords.x;\n int wR = coords.y;\n int wC = coords.z;\n int d1 = coords.w;\n int d2 = coords.u;\n\n float dotProd = 0.0;\n\n for (int b = 0; b < "+t.batchSize+"; b++) {\n for (int yF = 0; yF < "+t.outDepth+"; yF++) {\n int xF = wF + yF * "+e+" - "+o+";\n\n if (xF < 0 || xF >= "+t.inDepth+") {\n continue;\n }\n\n for (int yR = 0; yR < "+t.outHeight+"; yR++) {\n int xR = wR + yR * "+n+" - "+a+";\n\n if (xR < 0 || xR >= "+t.inHeight+") {\n continue;\n }\n\n for (int yC = 0; yC < "+t.outWidth+"; yC++) {\n int xC = wC + yC * "+r+" - "+i+";\n\n if (xC < 0 || xC >= "+t.inWidth+") {\n continue;\n }\n\n float dyValue = getDy(b, yF, yR, yC, d2);\n float xValue = getX(b, xF, xR, xC, d1);\n dotProd += (xValue * dyValue);\n }\n }\n }\n }\n setOutput(dotProd);\n }\n ";}}(),ia=function(){return function(t){this.variableNames=["dy","W"],this.outputShape=t.inShape;var e=t.filterDepth,n=t.filterHeight,r=t.filterWidth,o=t.strideDepth,a=t.strideHeight,i=t.strideWidth,s=e-1-t.padInfo.front,u=n-1-t.padInfo.top,l=r-1-t.padInfo.left;this.userCode="\n const ivec3 pads = ivec3("+s+", "+u+", "+l+");\n\n void main() {\n ivec5 coords = getOutputCoords();\n int batch = coords.x;\n int d1 = coords.u;\n\n\n ivec3 dyCorner = ivec3(coords.y, coords.z, coords.w) - pads;\n int dyFCorner = dyCorner.x;\n int dyRCorner = dyCorner.y;\n int dyCCorner = dyCorner.z;\n\n float dotProd = 0.0;\n for (int wF = 0; wF < "+e+"; wF++) {\n float dyF = float(dyFCorner + wF) / "+o+".0;\n\n if (dyF < 0.0 || dyF >= "+t.outDepth+".0 || fract(dyF) > 0.0) {\n continue;\n }\n int idyF = int(dyF);\n\n int wFPerm = "+e+" - 1 - wF;\n\n for (int wR = 0; wR < "+n+"; wR++) {\n float dyR = float(dyRCorner + wR) / "+a+".0;\n\n if (dyR < 0.0 || dyR >= "+t.outHeight+".0 ||\n fract(dyR) > 0.0) {\n continue;\n }\n int idyR = int(dyR);\n\n int wRPerm = "+n+" - 1 - wR;\n\n for (int wC = 0; wC < "+r+"; wC++) {\n float dyC = float(dyCCorner + wC) / "+i+".0;\n\n if (dyC < 0.0 || dyC >= "+t.outWidth+".0 ||\n fract(dyC) > 0.0) {\n continue;\n }\n int idyC = int(dyC);\n\n int wCPerm = "+r+" - 1 - wC;\n\n for (int d2 = 0; d2 < "+t.outChannels+"; d2++) {\n float xValue = getDy(batch, idyF, idyR, idyC, d2);\n float wValue = getW(wFPerm, wRPerm, wCPerm, d1, d2);\n dotProd += xValue * wValue;\n }\n }\n }\n }\n setOutput(dotProd);\n }\n ";}}(),sa=function(){return function(t){this.variableNames=["x","dy"],this.outputShape=t.filterShape;var e=t.strideHeight,n=t.strideWidth,r=t.padInfo.top,o=t.padInfo.left,a=t.outChannels/t.inChannels;this.userCode="\n void main() {\n ivec4 coords = getOutputCoords();\n int wR = coords.x;\n int wC = coords.y;\n int d1 = coords.z;\n int dm = coords.w;\n int d2 = d1 * "+a+" + dm;\n\n float dotProd = 0.0;\n\n // TODO: Vec4 over the batch size\n for (int b = 0; b < "+t.batchSize+"; b++) {\n for (int yR = 0; yR < "+t.outHeight+"; yR++) {\n int xR = wR + yR * "+e+" - "+r+";\n\n if (xR < 0 || xR >= "+t.inHeight+") {\n continue;\n }\n\n for (int yC = 0; yC < "+t.outWidth+"; yC++) {\n int xC = wC + yC * "+n+" - "+o+";\n\n if (xC < 0 || xC >= "+t.inWidth+") {\n continue;\n }\n\n float dyValue = getDy(b, yR, yC, d2);\n float xValue = getX(b, xR, xC, d1);\n dotProd += (xValue * dyValue);\n }\n }\n }\n setOutput(dotProd);\n }\n ";}}(),ua=function(){return function(t){this.variableNames=["dy","W"],this.outputShape=t.inShape;var e=t.filterHeight,n=t.filterWidth,r=t.strideHeight,o=t.strideWidth,a=e-1-t.padInfo.top,i=n-1-t.padInfo.left,s=t.outChannels/t.inChannels;this.userCode="\n const ivec2 pads = ivec2("+a+", "+i+");\n\n void main() {\n ivec4 coords = getOutputCoords();\n int batch = coords[0];\n int d1 = coords[3];\n ivec2 dyCorner = coords.yz - pads;\n int dyRCorner = dyCorner.x;\n int dyCCorner = dyCorner.y;\n\n float dotProd = 0.0;\n\n for (int wR = 0; wR < "+e+"; wR++) {\n float dyR = float(dyRCorner + wR) / "+r+".0;\n\n if (dyR < 0.0 || dyR >= "+t.outHeight+".0 || fract(dyR) > 0.0) {\n continue;\n }\n int idyR = int(dyR);\n\n int wRPerm = "+e+" - 1 - wR;\n\n for (int wC = 0; wC < "+n+"; wC++) {\n float dyC = float(dyCCorner + wC) / "+o+".0;\n\n if (dyC < 0.0 || dyC >= "+t.outWidth+".0 ||\n fract(dyC) > 0.0) {\n continue;\n }\n int idyC = int(dyC);\n\n int wCPerm = "+n+" - 1 - wC;\n\n // TODO: Vec4 over the channelMul\n for (int dm = 0; dm < "+s+"; dm++) {\n int d2 = d1 * "+s+" + dm;\n float xValue = getDy(batch, idyR, idyC, d2);\n float wValue = getW(wRPerm, wCPerm, d1, dm);\n dotProd += xValue * wValue;\n }\n }\n }\n setOutput(dotProd);\n }\n ";}}(),la=function(){return function(t){this.variableNames=["x","W"],this.outputShape=t.outShape;var e=t.padInfo.top,n=t.padInfo.left,r=t.strideHeight,o=t.strideWidth,a=t.dilationHeight,i=t.dilationWidth,s=t.filterHeight,u=t.filterWidth,l=4*Math.floor(t.inChannels/4),c=t.inChannels%4;this.userCode="\n const ivec2 strides = ivec2("+r+", "+o+");\n const ivec2 pads = ivec2("+e+", "+n+");\n\n void main() {\n ivec4 coords = getOutputCoords();\n int batch = coords[0];\n int d2 = coords[3];\n\n ivec2 xRCCorner = coords.yz * strides - pads;\n int xRCorner = xRCCorner.x;\n int xCCorner = xRCCorner.y;\n\n // Convolve x(?, ?, d1) with w(:, :, d1, d2) to get y(yR, yC, d2).\n // ? = to be determined. : = across all values in that axis.\n float dotProd = 0.0;\n for (int wR = 0; wR < "+s+"; wR++) {\n int xR = xRCorner + wR * "+a+";\n\n if (xR < 0 || xR >= "+t.inHeight+") {\n continue;\n }\n\n for (int wC = 0; wC < "+u+"; wC++) {\n int xC = xCCorner + wC * "+i+";\n\n if (xC < 0 || xC >= "+t.inWidth+") {\n continue;\n }\n\n for (int d1 = 0; d1 < "+l+"; d1 += 4) {\n vec4 xValues = vec4(\n getX(batch, xR, xC, d1),\n getX(batch, xR, xC, d1 + 1),\n getX(batch, xR, xC, d1 + 2),\n getX(batch, xR, xC, d1 + 3)\n );\n vec4 wValues = vec4(\n getW(wR, wC, d1, d2),\n getW(wR, wC, d1 + 1, d2),\n getW(wR, wC, d1 + 2, d2),\n getW(wR, wC, d1 + 3, d2)\n );\n\n dotProd += dot(xValues, wValues);\n }\n\n if ("+(1===c)+") {\n dotProd +=\n getX(batch, xR, xC, "+l+") *\n getW(wR, wC, "+l+", d2);\n } else if ("+(2===c)+") {\n vec2 xValues = vec2(\n getX(batch, xR, xC, "+l+"),\n getX(batch, xR, xC, "+l+" + 1)\n );\n vec2 wValues = vec2(\n getW(wR, wC, "+l+", d2),\n getW(wR, wC, "+l+" + 1, d2)\n );\n dotProd += dot(xValues, wValues);\n } else if ("+(3===c)+") {\n vec3 xValues = vec3(\n getX(batch, xR, xC, "+l+"),\n getX(batch, xR, xC, "+l+" + 1),\n getX(batch, xR, xC, "+l+" + 2)\n );\n vec3 wValues = vec3(\n getW(wR, wC, "+l+", d2),\n getW(wR, wC, "+l+" + 1, d2),\n getW(wR, wC, "+l+" + 2, d2)\n );\n dotProd += dot(xValues, wValues);\n }\n }\n }\n setOutput(dotProd);\n }\n ";}}(),ca=function(){return function(t){this.variableNames=["x","W"],this.outputShape=t.outShape;var e=t.padInfo.front,n=t.padInfo.top,r=t.padInfo.left,o=t.strideDepth,a=t.strideHeight,i=t.strideWidth,s=t.dilationDepth,u=t.dilationHeight,l=t.dilationWidth,c=t.filterDepth,h=t.filterHeight,p=t.filterWidth,f=4*Math.floor(t.inChannels/4),d=t.inChannels%4;this.userCode="\n const ivec3 strides = ivec3("+o+", "+a+", "+i+");\n const ivec3 pads = ivec3("+e+", "+n+", "+r+");\n\n void main() {\n ivec5 coords = getOutputCoords();\n int batch = coords.x;\n int d2 = coords.u;\n\n ivec3 xFRCCorner = ivec3(coords.y, coords.z, coords.w) * strides - pads;\n int xFCorner = xFRCCorner.x;\n int xRCorner = xFRCCorner.y;\n int xCCorner = xFRCCorner.z;\n\n // Convolve x(?, ?, ?, d1) with w(:, :, :, d1, d2) to get\n // y(yF, yR, yC, d2). ? = to be determined. : = across all\n // values in that axis.\n float dotProd = 0.0;\n for (int wF = 0; wF < "+c+"; wF++) {\n int xF = xFCorner + wF * "+s+";\n\n if (xF < 0 || xF >= "+t.inDepth+") {\n continue;\n }\n\n for (int wR = 0; wR < "+h+"; wR++) {\n int xR = xRCorner + wR * "+u+";\n\n if (xR < 0 || xR >= "+t.inHeight+") {\n continue;\n }\n\n for (int wC = 0; wC < "+p+"; wC++) {\n int xC = xCCorner + wC * "+l+";\n\n if (xC < 0 || xC >= "+t.inWidth+") {\n continue;\n }\n\n for (int d1 = 0; d1 < "+f+"; d1 += 4) {\n vec4 xValues = vec4(\n getX(batch, xF, xR, xC, d1),\n getX(batch, xF, xR, xC, d1 + 1),\n getX(batch, xF, xR, xC, d1 + 2),\n getX(batch, xF, xR, xC, d1 + 3)\n );\n vec4 wValues = vec4(\n getW(wF, wR, wC, d1, d2),\n getW(wF, wR, wC, d1 + 1, d2),\n getW(wF, wR, wC, d1 + 2, d2),\n getW(wF, wR, wC, d1 + 3, d2)\n );\n\n dotProd += dot(xValues, wValues);\n }\n\n if ("+(1===d)+") {\n dotProd +=\n getX(batch, xF, xR, xC, "+f+") *\n getW(wF, wR, wC, "+f+", d2);\n } else if ("+(2===d)+") {\n vec2 xValues = vec2(\n getX(batch, xF, xR, xC, "+f+"),\n getX(batch, xF, xR, xC, "+f+" + 1)\n );\n vec2 wValues = vec2(\n getW(wF, wR, wC, "+f+", d2),\n getW(wF, wR, wC, "+f+" + 1, d2)\n );\n dotProd += dot(xValues, wValues);\n } else if ("+(3===d)+") {\n vec3 xValues = vec3(\n getX(batch, xF, xR, xC, "+f+"),\n getX(batch, xF, xR, xC, "+f+" + 1),\n getX(batch, xF, xR, xC, "+f+" + 2)\n );\n vec3 wValues = vec3(\n getW(wF, wR, wC, "+f+", d2),\n getW(wF, wR, wC, "+f+" + 1, d2),\n getW(wF, wR, wC, "+f+" + 2, d2)\n );\n dotProd += dot(xValues, wValues);\n }\n }\n }\n }\n setOutput(dotProd);\n }\n ";}}(),ha=function(){return function(t){this.variableNames=["x","W"],this.outputShape=t.outShape;var e=t.inHeight,n=t.inWidth,r=t.padInfo.top,o=t.padInfo.left,a=t.strideHeight,i=t.strideWidth,s=t.dilationHeight,u=t.dilationWidth,l=t.filterHeight,c=t.filterWidth,h=t.outChannels/t.inChannels;this.userCode="\n const ivec2 strides = ivec2("+a+", "+i+");\n const ivec2 pads = ivec2("+r+", "+o+");\n\n void main() {\n ivec4 coords = getOutputCoords();\n int batch = coords.x;\n ivec2 xRCCorner = coords.yz * strides - pads;\n int d2 = coords.w;\n int d1 = d2 / "+h+";\n int q = d2 - d1 * "+h+";\n\n int xRCorner = xRCCorner.x;\n int xCCorner = xRCCorner.y;\n\n // Convolve x(?, ?, d1) with w(:, :, d1, q) to get y(yR, yC, d2).\n // ? = to be determined. : = across all values in that axis.\n float dotProd = 0.0;\n // TODO(dsmilkov): Flatten the two for loops and vec4 the operations.\n for (int wR = 0; wR < "+l+"; wR++) {\n int xR = xRCorner + wR * "+s+";\n\n if (xR < 0 || xR >= "+e+") {\n continue;\n }\n\n for (int wC = 0; wC < "+c+"; wC++) {\n int xC = xCCorner + wC * "+u+";\n\n if (xC < 0 || xC >= "+n+") {\n continue;\n }\n\n float xVal = getX(batch, xR, xC, d1);\n float wVal = getW(wR, wC, d1, q);\n dotProd += xVal * wVal;\n }\n }\n setOutput(dotProd);\n }\n ";}}(),pa=function(){return function(t){this.variableNames=["x","W"],this.usesPackedTextures=!0,this.outputShape=t.outShape;for(var e=t.inHeight,n=t.inWidth,r=t.padInfo.top,o=t.padInfo.left,a=t.strideHeight,i=t.strideWidth,s=t.dilationHeight,u=t.dilationWidth,l=t.filterHeight,c=t.filterWidth,h=c,f="int xR; int xC; int xCOffset;",d=0;d= 0 && xR < "+e+" && xCOffset >= 0 && xCOffset < "+n+") {\n xTexelR"+d+"C"+v+" = getX(batch, xR, xCOffset, d1);\n } else {\n xTexelR"+d+"C"+v+" = vec4(0.);\n }\n\n xCOffset = xC + 1 - 2;\n if(xR >= 0 && xR < "+e+" && xCOffset >= 0 && xCOffset < "+n+") {\n vec4 previous = getX(batch, xR, xCOffset, d1);\n xR"+d+"C"+v+" = vec4(previous.zw, xTexelR"+d+"C"+v+".xy);\n } else {\n xR"+d+"C"+v+" = vec4(0, 0, xTexelR"+d+"C"+v+".xy);\n }\n ":"\n if(xR >= 0 && xR < "+e+" && xC >= 0 && xC < "+n+") {\n xTexelR"+d+"C"+v+" = getX(batch, xR, xC, d1);\n } else {\n xTexelR"+d+"C"+v+" = vec4(0.);\n }\n\n xR"+d+"C"+v+" = xTexelR"+d+"C"+v+";\n ",v+1= 0 && xR < "+e+" &&\n xCOffset >= 0 && xCOffset < "+n+") {\n xTexelR"+d+"C"+(v+2)+" = getX(batch, xR, xCOffset, d1);\n }\n ",u>1&&(f+="\n xCOffset -= 2;\n if(xR >= 0 && xR < "+e+" &&\n xCOffset >= 0 && xCOffset < "+n+") {\n xTexelR"+d+"C"+v+" = getX(batch, xR, xCOffset, d1);\n } else {\n xTexelR"+d+"C"+v+" = vec4(0.);\n }\n "),f+="\n xR"+d+"C"+(v+1)+" = vec4(\n xTexelR"+d+"C"+v+".zw, xTexelR"+d+"C"+(v+2)+".xy);\n "):f+="\n xCOffset = xC + "+g+";\n\n if(xR >= 0 && xR < "+e+" &&\n xCOffset >= 0 && xCOffset < "+n+") {\n xTexelR"+d+"C"+(v+2)+" = getX(batch, xR, xCOffset, d1);\n }\n\n xR"+d+"C"+(v+1)+" = xTexelR"+d+"C"+(v+2)+";\n ";}}else v= 0 && xR < "+e+") {\n ",o%2==1?(f+="\n xCOffset = xC + 1 - "+i+";\n if(xCOffset >= 0 && xCOffset < "+n+") {\n xTexelR"+d+"C"+v+" = getX(batch, xR, xCOffset, d1);\n } else {\n xTexelR"+d+"C"+v+" = vec4(0.);\n }\n\n if(xC + 1 >= 0 && xC + 1 < "+n+") {\n xTexelR"+d+"C"+(v+2)+" = getX(batch, xR, xC + 1, d1);\n } else {\n xTexelR"+d+"C"+(v+2)+" = vec4(0.);\n }\n\n xR"+d+"C"+v+" = vec4(\n xTexelR"+d+"C"+v+".zw, xTexelR"+d+"C"+(v+2)+".zw);\n ",v+1= 0 && xCOffset < "+n+") {\n final = getX(batch, xR, xCOffset, d1);\n }\n xR"+d+"C"+(v+1)+" = vec4(xTexelR"+d+"C"+(v+2)+".xy, final.xy);\n ")):(f+="\n if(xC >= 0 && xC < "+n+") {\n xTexelR"+d+"C"+v+" = getX(batch, xR, xC, d1);\n } else {\n xTexelR"+d+"C"+v+" = vec4(0.);\n }\n\n xCOffset = xC + "+i+";\n if(xCOffset >= 0 && xCOffset < "+n+") {\n xTexelR"+d+"C"+(v+2)+" = getX(batch, xR, xCOffset, d1);\n } else {\n xTexelR"+d+"C"+(v+2)+" = vec4(0.);\n }\n\n xR"+d+"C"+v+" = vec4(\n xTexelR"+d+"C"+v+".xy, xTexelR"+d+"C"+(v+2)+".xy);\n ",v+11?[""+(i-1)/(c-1),"(y2-y1) * height_ratio","y1*"+d+" + float(y)*(height_scale)"]:["0.0","0.0","0.5 * (y1+y2) * "+d],g=m[0],y=m[1],x=m[2],b=h>1?[""+(s-1)/(h-1),"(x2-x1) * width_ratio","x1*"+v+" + float(x)*(width_scale)"]:["0.0","0.0","0.5 * (x1+x2) * "+v],w=b[0],C=b[1],E=b[2];this.userCode="\n const float height_ratio = float("+g+");\n const float width_ratio = float("+w+");\n void main() {\n ivec4 coords = getOutputCoords();\n int b = coords[0];\n int y = coords[1];\n int x = coords[2];\n int d = coords[3];\n\n // get box vals\n float y1 = getBoxes(b,0);\n float x1 = getBoxes(b,1);\n float y2 = getBoxes(b,2);\n float x2 = getBoxes(b,3);\n\n // get image in batch index\n int bInd = round(getBoxInd(b));\n if(bInd < 0 || bInd >= "+a+") {\n return;\n }\n\n float height_scale = "+y+";\n float width_scale = "+C+";\n\n float in_y = "+x+";\n if( in_y < 0.0 || in_y > "+d+" ) {\n setOutput(float("+o+"));\n return;\n }\n float in_x = "+E+";\n if( in_x < 0.0 || in_x > "+v+" ) {\n setOutput(float("+o+"));\n return;\n }\n\n vec2 sourceFracIndexCR = vec2(in_x,in_y);\n if("+p+" == 1) {\n // Compute the four integer indices.\n ivec2 sourceFloorCR = ivec2(sourceFracIndexCR);\n ivec2 sourceCeilCR = ivec2(ceil(sourceFracIndexCR));\n\n float topLeft = getImage(b, sourceFloorCR.y, sourceFloorCR.x, d);\n float bottomLeft = getImage(b, sourceCeilCR.y, sourceFloorCR.x, d);\n float topRight = getImage(b, sourceFloorCR.y, sourceCeilCR.x, d);\n float bottomRight = getImage(b, sourceCeilCR.y, sourceCeilCR.x, d);\n\n vec2 fracCR = sourceFracIndexCR - vec2(sourceFloorCR);\n\n float top = topLeft + (topRight - topLeft) * fracCR.x;\n float bottom = bottomLeft + (bottomRight - bottomLeft) * fracCR.x;\n float newValue = top + (bottom - top) * fracCR.y;\n setOutput(newValue);\n } else {\n // Compute the coordinators of nearest neighbor point.\n ivec2 sourceNearestCR = ivec2(floor(\n sourceFracIndexCR + vec2(0.5,0.5)));\n float newValue = getImage(b, sourceNearestCR.y, sourceNearestCR.x, d);\n setOutput(newValue);\n }\n }\n ";}}(),da=function(){return function(t,e,n){this.variableNames=["x"],this.outputShape=t;var r=t.length,o=t[t.length-1],a=n?"<":">";this.userCode="\n int getIndex(int i) {\n "+(n?"return "+o+" -i - 1;":"return i;")+"\n }\n\n void main() {\n "+Po(r)+" coords = getOutputCoords();\n int end = "+va(r,"coords")+";\n float val = 0.0;\n for (int i = "+o+" - 1; i >= 0; i -= 1) {\n int idx = getIndex(i);\n if (idx "+a+" end) {\n continue;\n }\n if (idx == end && "+e+") {\n continue;\n }\n "+va(r,"coords")+" = idx;\n val += getX("+function(t,e){if(1===t)return ""+e;if(2===t)return e+".x, "+e+".y";if(3===t)return e+".x, "+e+".y, "+e+".z";if(4===t)return e+".x, "+e+".y, "+e+".z, "+e+".w";throw Error("Cumulative sum for rank "+t+" is not yet supported")}(r,"coords")+");\n }\n setOutput(val);\n }\n ";}}();function va(t,e){if(1===t)return ""+e;if(2===t)return e+".y";if(3===t)return e+".z";if(4===t)return e+".w";throw Error("Cumulative sum for rank "+t+" is not yet supported")}var ma=function(){return function(t,e){this.variableNames=["A"];var n=Ro();this.outputShape=t,this.userCode="\n ivec3 outCoordsFromFlatIndex(int index) {\n "+Io(["r","c","d"],t)+"\n return ivec3(r, c, d);\n }\n\n void main() {\n ivec2 resTexRC = ivec2(resultUV.yx *\n vec2("+e[0]+", "+e[1]+"));\n int index = 4 * (resTexRC.x * "+e[1]+" + resTexRC.y);\n\n vec4 result = vec4(0.);\n\n for (int i=0; i<4; i++) {\n int flatIndex = index + i;\n ivec3 rc = outCoordsFromFlatIndex(flatIndex);\n result[i] = getA(rc.x, rc.y, rc.z);\n }\n\n "+n.output+" = result;\n }\n ";}}(),ga=function(){return function(t,e){this.variableNames=["A"],this.usesPackedTextures=!0;var n=Ro();this.outputShape=t,this.userCode="\n ivec3 outCoordsFromFlatIndex(int index) {\n "+Io(["r","c","d"],t)+"\n return ivec3(r, c, d);\n }\n\n void main() {\n ivec2 resTexRC = ivec2(resultUV.yx *\n vec2("+e[0]+", "+e[1]+"));\n int index = 4 * (resTexRC.x * "+e[1]+" + resTexRC.y);\n\n vec4 result = vec4(0.);\n\n for (int i=0; i<4; i++) {\n int flatIndex = index + i;\n ivec3 rc = outCoordsFromFlatIndex(flatIndex);\n result[i] = getChannel(getA(rc.x, rc.y, rc.z), vec2(rc.y, rc.z));\n }\n\n "+n.output+" = result;\n }\n ";}}(),ya=function(){function t(t,e,n){this.variableNames=["x"],this.outputShape=[],this.outputShape=t,this.blockSize=e,this.dataFormat=n,this.userCode="\n void main() {\n ivec4 coords = getOutputCoords();\n int b = coords[0];\n int h = "+this.getHeightCoordString()+";\n int w = "+this.getWidthCoordString()+";\n int d = "+this.getDepthCoordString()+";\n\n int in_h = h / "+e+";\n int offset_h = imod(h, "+e+");\n int in_w = w / "+e+";\n int offset_w = imod(w, "+e+");\n int offset_d = (offset_h * "+e+" + offset_w) *\n "+this.getOutputDepthSize()+";\n int in_d = d + offset_d;\n\n float result = "+this.getInputSamplingString()+";\n setOutput(result);\n }\n ";}return t.prototype.getHeightCoordString=function(){return "NHWC"===this.dataFormat?"coords[1]":"coords[2]"},t.prototype.getWidthCoordString=function(){return "NHWC"===this.dataFormat?"coords[2]":"coords[3]"},t.prototype.getDepthCoordString=function(){return "NHWC"===this.dataFormat?"coords[3]":"coords[1]"},t.prototype.getOutputDepthSize=function(){return "NHWC"===this.dataFormat?this.outputShape[3]:this.outputShape[1]},t.prototype.getInputSamplingString=function(){return "NHWC"===this.dataFormat?"getX(b, in_h, in_w, in_d)":"getX(b, in_d, in_h, in_w)"},t}(),xa=function(){return function(t){this.variableNames=["A"];var e=Ro();this.outputShape=t,this.userCode="\n "+No+"\n\n void main() {\n float x = getAAtOutCoords();\n "+e.output+" = encode_float(x);\n }\n ";}}(),ba=function(){return function(t){this.variableNames=["A"],this.usesPackedTextures=!0;var e=Ro();this.outputShape=t,this.userCode="\n "+No+"\n\n void main() {\n ivec3 coords = getOutputCoords();\n float x = getChannel(getAAtOutCoords(), vec2(coords.y, coords.z));\n "+e.output+" = encode_float(x);\n }\n ";}}(),wa=function(){return function(t,e,n){void 0===n&&(n=!1),this.variableNames=["A"];var r=Ro(),o=e[0],a=e[1];this.outputShape=t;var i="result";n&&(i="floor(result * 255. + 0.5)"),this.userCode="\n "+So(t)+"\n\n void main() {\n ivec3 coords = getOutputCoords();\n\n int flatIndex = getFlatIndex(coords);\n int offset = imod(flatIndex, 4);\n\n flatIndex /= 4;\n int r = flatIndex / "+a+";\n int c = imod(flatIndex, "+a+");\n vec2 uv = (vec2(c, r) + halfCR) / vec2("+a+".0, "+o+".0);\n vec4 values = "+r.texture2D+"(A, uv);\n\n float result;\n\n if(offset == 0) {\n result = values[0];\n } else if(offset == 1) {\n result = values[1];\n } else if(offset == 2) {\n result = values[2];\n } else {\n result = values[3];\n }\n\n "+r.output+" = vec4("+i+", 0., 0., 0.);\n }\n ";}}(),Ca=function(){return function(t,e,n){void 0===n&&(n=!1),this.variableNames=["A"];var r=Ro(),o=e[0],a=e[1];this.outputShape=t;var i="",s="result";n&&(s="floor(result * 255. + 0.5)");for(var u=0;u<=1;u++)for(var l=0;l<=1;l++){var c=2*u+l;i+="\n localCoords = coords;\n if(localCoords[2] + "+l+" < "+t[2]+") {\n localCoords[2] += "+l+";\n if(localCoords[1] + "+u+" < "+t[1]+") {\n localCoords[1] += "+u+";\n\n flatIndex = getFlatIndex(localCoords);\n offset = imod(flatIndex, 4);\n \n flatIndex /= 4;\n r = flatIndex / "+a+";\n c = imod(flatIndex, "+a+");\n uv = (vec2(c, r) + halfCR) / vec2("+a+".0, "+o+".0);\n values = "+r.texture2D+"(A, uv);\n\n if(offset == 0) {\n result["+c+"] = values[0];\n } else if(offset == 1) {\n result["+c+"] = values[1];\n } else if(offset == 2) {\n result["+c+"] = values[2];\n } else {\n result["+c+"] = values[3];\n }\n }\n }\n ";}this.userCode="\n "+So(t)+"\n\n void main() {\n ivec3 coords = getOutputCoords();\n\n vec4 result = vec4(0.);\n int flatIndex, r, c, offset;\n ivec3 localCoords;\n vec2 uv;\n vec4 values;\n \n "+i+"\n\n "+r.output+" = "+s+";\n }\n ";}}(),Ea="return real * expR - imag * expI;",Ra="return real * expI + imag * expR;",Ia=function(){return function(t,e,n){this.variableNames=["real","imag"];var r=e[1];this.outputShape=e;var o=n?"2.0 * "+Math.PI:"-2.0 * "+Math.PI,a=n?r+".0":"1.0";this.userCode="\n const float exponentMultiplier = "+o+";\n\n float unaryOpComplex(float real, float expR, float imag, float expI) {\n "+t+"\n }\n\n float mulMatDFT(int batch, int index) {\n float indexRatio = float(index) / float("+r+");\n float exponentMultiplierTimesIndexRatio =\n exponentMultiplier * indexRatio;\n\n float result = 0.0;\n\n for (int i = 0; i < "+r+"; i++) {\n // x = (-2|2 * PI / N) * index * i;\n float x = exponentMultiplierTimesIndexRatio * float(i);\n float expR = cos(x);\n float expI = sin(x);\n float real = getReal(batch, i);\n float imag = getImag(batch, i);\n\n result +=\n unaryOpComplex(real, expR, imag, expI) / "+a+";\n }\n\n return result;\n }\n\n void main() {\n ivec2 coords = getOutputCoords();\n setOutput(mulMatDFT(coords[0], coords[1]));\n }\n ";}}(),Sa=function(){function t(t,e){this.outputShape=[],this.variableNames=["x"],this.outputShape=t,this.userCode="\n uniform float value;\n void main() {\n // Input can be obtained from uniform value.\n setOutput(value);\n }\n ";}return t.prototype.getCustomSetupFunc=function(t){var e=this;return function(n,r){null==e.valueLoc&&(e.valueLoc=n.getUniformLocationNoThrow(r,"value")),n.gl.uniform1f(e.valueLoc,t);}},t}(),Na=function(){return function(t){this.variableNames=["A"];var e=Ro(),n=t[0],r=t[1];this.outputShape=t,this.userCode="\n void main() {\n ivec3 coords = getOutputCoords();\n int texR = coords[0];\n int texC = coords[1];\n int depth = coords[2];\n vec2 uv = (vec2(texC, texR) + halfCR) / vec2("+r+".0, "+n+".0);\n\n vec4 values = "+e.texture2D+"(A, uv);\n float value;\n if (depth == 0) {\n value = values.r;\n } else if (depth == 1) {\n value = values.g;\n } else if (depth == 2) {\n value = values.b;\n } else if (depth == 3) {\n value = values.a;\n }\n\n setOutput(floor(value * 255.0 + 0.5));\n }\n ";}}(),ka=function(){return function(t){this.variableNames=["A"];var e=Ro(),n=t[0],r=t[1];this.outputShape=t,this.userCode="\n void main() {\n ivec3 coords = getOutputCoords();\n int texR = coords[0];\n int texC = coords[1];\n int depth = coords[2];\n\n vec4 result = vec4(0.);\n\n for(int row=0; row<=1; row++) {\n for(int col=0; col<=1; col++) {\n texC = coords[1] + row;\n depth = coords[2] + col;\n\n vec2 uv = (vec2(texC, texR) + halfCR) / vec2("+r+".0, "+n+".0);\n vec4 values = "+e.texture2D+"(A, uv);\n float value;\n if (depth == 0) {\n value = values.r;\n } else if (depth == 1) {\n value = values.g;\n } else if (depth == 2) {\n value = values.b;\n } else if (depth == 3) {\n value = values.a;\n }\n\n result[row * 2 + col] = floor(value * 255.0 + 0.5);\n }\n }\n\n "+e.output+" = result;\n }\n ";}}(),Aa=function(){return function(t,e,n){this.variableNames=["A","indices"];var r=t.slice();r[n]=e,this.outputShape=r,this.rank=r.length;var o=Po(this.rank),a=function(t,e){var n=t.length;if(n>4)throw Error("Gather for rank "+n+" is not yet supported");if(1===n)return "int(getIndices(resRC))";for(var r=["resRC.x","resRC.y","resRC.z","resRC.w"],o=[],a=0;a1?"strides[j]":"strides";this.userCode="\n "+r+" strides = "+r+"("+this.strides+");\n void main() {\n "+o+" coords = getOutputCoords();\n int flattenIndex = 0;\n for (int j = 0; j < "+this.sliceDim+"; j++) {\n int index = round(getIndices(coords[0], j));\n flattenIndex += index * "+a+";\n }\n setOutput(getX(flattenIndex, coords[1]));\n }\n ";}}();function Oa(t,e){return [e,t]}function Fa(t){var e=y(t);return C(Math.ceil(e/4))}function Ma(t,e){return [Math.max(1,Math.ceil(e/2)),Math.max(1,Math.ceil(t/2))]}function Ba(t,e){var n=Ro();return zt(t,e,n.version+"\n precision highp float;\n "+n.attribute+" vec3 clipSpacePos;\n "+n.attribute+" vec2 uv;\n "+n.varyingVs+" vec2 resultUV;\n\n void main() {\n gl_Position = vec4(clipSpacePos, 1);\n resultUV = uv;\n }")}function Pa(t,e){return Xt(t,e,new Float32Array([-1,1,0,0,1,-1,-1,0,0,0,1,1,0,1,1,1,-1,0,1,0]))}function La(t,e){return Yt(t,e,new Uint16Array([0,1,2,2,1,3]))}function Wa(t,e){var n,r,o,a,i,u,l,c,h=t;return 2===s.getNumber("WEBGL_VERSION")?(n=h.R32F,r=h.R16F,o=h.RGBA16F,a=h.RGBA32F,i=h.RED,u=4,l=1,c=h.HALF_FLOAT):(n=t.RGBA,r=t.RGBA,o=t.RGBA,a=h.RGBA,i=t.RGBA,u=4,l=4,c=null!=e?e.HALF_FLOAT_OES:null),{internalFormatFloat:n,internalFormatHalfFloat:r,internalFormatPackedHalfFloat:o,internalFormatPackedFloat:a,textureFormatFloat:i,downloadTextureFormat:t.RGBA,downloadUnpackNumChannels:u,defaultNumChannels:l,textureTypeHalfFloat:c}}function Ua(t,e,n,r,o,a,i){Jt(n,r);var s=Qt(t,e),u=t.TEXTURE_2D;return Mt(t,e,function(){return t.bindTexture(u,s)}),Mt(t,e,function(){return t.texParameteri(u,t.TEXTURE_WRAP_S,t.CLAMP_TO_EDGE)}),Mt(t,e,function(){return t.texParameteri(u,t.TEXTURE_WRAP_T,t.CLAMP_TO_EDGE)}),Mt(t,e,function(){return t.texParameteri(u,t.TEXTURE_MIN_FILTER,t.NEAREST)}),Mt(t,e,function(){return t.texParameteri(u,t.TEXTURE_MAG_FILTER,t.NEAREST)}),Mt(t,e,function(){return t.texImage2D(u,0,o,n,r,0,a,i,null)}),Mt(t,e,function(){return t.bindTexture(t.TEXTURE_2D,null)}),s}function za(t,e,n,r,o){var a=Oa(n,r);return Ua(t,e,a[0],a[1],o.internalFormatFloat,o.textureFormatFloat,t.FLOAT)}function Va(t,e,n,r,o){var a=Oa(n,r);return Ua(t,e,a[0],a[1],o.internalFormatHalfFloat,o.textureFormatFloat,o.textureTypeHalfFloat)}function Ga(t,e,n,r,o){var a=Oa(n,r);return Ua(t,e,a[0],a[1],t.RGBA,t.RGBA,t.UNSIGNED_BYTE)}function qa(t,e,n,r,o){var a=Ma(n,r);return Ua(t,e,a[0],a[1],o.internalFormatPackedFloat,t.RGBA,t.FLOAT)}function Ha(t,e,n,r,o){var a=Ma(n,r);return Ua(t,e,a[0],a[1],o.internalFormatPackedHalfFloat,t.RGBA,o.textureTypeHalfFloat)}function $a(t,e,n,r){return Mt(t,e,function(){return t.bindBuffer(t.ARRAY_BUFFER,r)}),te(t,e,n,"clipSpacePos",r,3,20,0)&&te(t,e,n,"uv",r,2,20,12)}function ja(t,e,n,r,o,a,i){var s,u,l;Mt(t,e,function(){return t.bindTexture(t.TEXTURE_2D,n)}),a instanceof Uint8Array?(s=new Uint8Array(r*o*4),u=t.UNSIGNED_BYTE,l=t.RGBA):(s=new Float32Array(r*o*4),u=t.FLOAT,l=i.internalFormatPackedFloat),s.set(a),Mt(t,e,function(){return t.texImage2D(t.TEXTURE_2D,0,l,r,o,0,t.RGBA,u,s)}),Mt(t,e,function(){return t.bindTexture(t.TEXTURE_2D,null)});}function Ka(t,e,n,r){Mt(t,e,function(){return t.bindTexture(t.TEXTURE_2D,n)}),r.data instanceof Uint8Array?Mt(t,e,function(){return t.texImage2D(t.TEXTURE_2D,0,t.RGBA,r.width,r.height,0,t.RGBA,t.UNSIGNED_BYTE,r.data)}):Mt(t,e,function(){return t.texImage2D(t.TEXTURE_2D,0,t.RGBA,t.RGBA,t.UNSIGNED_BYTE,r)}),Mt(t,e,function(){return t.bindTexture(t.TEXTURE_2D,null)});}function Xa(t,e,n,r,o){var a=t.createBuffer();Mt(t,e,function(){return t.bindBuffer(t.PIXEL_PACK_BUFFER,a)});var i=16*n*r;return Mt(t,e,function(){return t.bufferData(t.PIXEL_PACK_BUFFER,i,t.STREAM_READ)}),Mt(t,e,function(){return t.readPixels(0,0,r,n,t.RGBA,t.FLOAT,0)}),Mt(t,e,function(){return t.bindBuffer(t.PIXEL_PACK_BUFFER,null)}),a}function Ya(t,e,n){var r=t,o=new Float32Array(n);return r.bindBuffer(r.PIXEL_PACK_BUFFER,e),r.getBufferSubData(r.PIXEL_PACK_BUFFER,0,o),r.bindBuffer(r.PIXEL_PACK_BUFFER,null),o}function Qa(t,e,n,r,o){var a=Oa(n,r),i=a[0],s=a[1],u=new Uint8Array(n*r*4);return Mt(t,e,function(){return t.readPixels(0,0,i,s,o.downloadTextureFormat,t.UNSIGNED_BYTE,u)}),new Float32Array(u.buffer)}function Ja(t,e,n,r,o,a,i,s){var u=t,l=new Float32Array(function(t,e){var n=Ma(t,e);return n[0]*n[1]*4}(a,i));return u.bindBuffer(u.PIXEL_PACK_BUFFER,e),u.getBufferSubData(u.PIXEL_PACK_BUFFER,0,l),u.bindBuffer(u.PIXEL_PACK_BUFFER,null),l}function Za(t,e,n,r){var o=new Float32Array(n*r*4);return Mt(t,e,function(){return t.readPixels(0,0,r,n,t.RGBA,t.FLOAT,o)}),o}!function(t){t[t.RENDER=0]="RENDER",t[t.UPLOAD=1]="UPLOAD",t[t.PIXELS=2]="PIXELS",t[t.DOWNLOAD=3]="DOWNLOAD";}(Ta||(Ta={})),function(t){t[t.UNPACKED_FLOAT16=0]="UNPACKED_FLOAT16",t[t.UNPACKED_FLOAT32=1]="UNPACKED_FLOAT32",t[t.PACKED_4X1_UNSIGNED_BYTE=2]="PACKED_4X1_UNSIGNED_BYTE",t[t.PACKED_2X2_FLOAT32=3]="PACKED_2X2_FLOAT32",t[t.PACKED_2X2_FLOAT16=4]="PACKED_2X2_FLOAT16";}(Da||(Da={}));var ti=Object.freeze({createVertexShader:Ba,createVertexBuffer:Pa,createIndexBuffer:La,getTextureConfig:Wa,createFloat32MatrixTexture:za,createFloat16MatrixTexture:Va,createUnsignedBytesMatrixTexture:Ga,createPackedMatrixTexture:qa,createFloat16PackedMatrixTexture:Ha,bindVertexProgramAttributeStreams:$a,uploadDenseMatrixToTexture:ja,uploadPixelDataToTexture:Ka,createBufferFromOutputTexture:Xa,downloadFloat32MatrixFromBuffer:Ya,downloadByteEncodedFloatMatrixFromOutputTexture:Qa,downloadPackedMatrixFromBuffer:Ja,downloadMatrixFromPackedOutputTexture:Za}),ei=function(){function t(t){this.outputTexture=null,this.program=null,this.disposed=!1,this.vertexAttrsAreBound=!1,this.itemsToPoll=[];var e=s.getNumber("WEBGL_VERSION");null!=t?(this.gl=t,Ot(e,t)):this.gl=Ft(e),1===s.getNumber("WEBGL_VERSION")?(this.textureFloatExtension=Ut(this.gl,this.debug,"OES_texture_float"),this.colorBufferFloatExtension=this.gl.getExtension("WEBGL_color_buffer_float"),s.getBool("WEBGL_RENDER_FLOAT32_ENABLED")||(this.textureHalfFloatExtension=Ut(this.gl,this.debug,"OES_texture_half_float"),this.colorBufferHalfFloatExtension=this.gl.getExtension("EXT_color_buffer_half_float"))):this.colorBufferFloatExtension=Ut(this.gl,this.debug,"EXT_color_buffer_float"),this.vertexBuffer=Pa(this.gl,this.debug),this.indexBuffer=La(this.gl,this.debug),this.framebuffer=Zt(this.gl,this.debug),this.textureConfig=Wa(this.gl,this.textureHalfFloatExtension);}return Object.defineProperty(t.prototype,"debug",{get:function(){return s.getBool("DEBUG")},enumerable:!0,configurable:!0}),t.prototype.dispose=function(){var t=this;if(!this.disposed){null!=this.program&&console.warn("Disposing a GPGPUContext that still has a bound WebGLProgram. This is probably a resource leak, delete the program with GPGPUContext.deleteProgram before disposing."),null!=this.outputTexture&&console.warn("Disposing a GPGPUContext that still has a bound output matrix texture. This is probably a resource leak, delete the output matrix texture with GPGPUContext.deleteMatrixTexture before disposing.");var e=this.gl;Mt(e,this.debug,function(){return e.finish()}),Mt(e,this.debug,function(){return e.bindFramebuffer(e.FRAMEBUFFER,null)}),Mt(e,this.debug,function(){return e.deleteFramebuffer(t.framebuffer)}),Mt(e,this.debug,function(){return e.bindBuffer(e.ARRAY_BUFFER,null)}),Mt(e,this.debug,function(){return e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,null)}),Mt(e,this.debug,function(){return e.deleteBuffer(t.indexBuffer)}),this.disposed=!0;}},t.prototype.createFloat32MatrixTexture=function(t,e){return this.throwIfDisposed(),za(this.gl,this.debug,t,e,this.textureConfig)},t.prototype.createFloat16MatrixTexture=function(t,e){return this.throwIfDisposed(),Va(this.gl,this.debug,t,e,this.textureConfig)},t.prototype.createUnsignedBytesMatrixTexture=function(t,e){return this.throwIfDisposed(),Ga(this.gl,this.debug,t,e,this.textureConfig)},t.prototype.uploadPixelDataToTexture=function(t,e){this.throwIfDisposed(),Ka(this.gl,this.debug,t,e);},t.prototype.uploadDenseMatrixToTexture=function(t,e,n,r){this.throwIfDisposed(),ja(this.gl,this.debug,t,e,n,r,this.textureConfig);},t.prototype.createFloat16PackedMatrixTexture=function(t,e){return this.throwIfDisposed(),Ha(this.gl,this.debug,t,e,this.textureConfig)},t.prototype.createPackedMatrixTexture=function(t,e){return this.throwIfDisposed(),qa(this.gl,this.debug,t,e,this.textureConfig)},t.prototype.deleteMatrixTexture=function(t){var e=this;this.throwIfDisposed(),this.outputTexture===t&&(ie(this.gl,this.debug,this.framebuffer),this.outputTexture=null),Mt(this.gl,this.debug,function(){return e.gl.deleteTexture(t)});},t.prototype.downloadByteEncodedFloatMatrixFromOutputTexture=function(t,e,n){var r=this;return this.downloadMatrixDriver(t,function(){return Qa(r.gl,r.debug,e,n,r.textureConfig)})},t.prototype.downloadPackedMatrixFromBuffer=function(t,e,n,r,o,a){return Ja(this.gl,t,0,0,0,o,a,this.textureConfig)},t.prototype.downloadFloat32MatrixFromBuffer=function(t,e){return Ya(this.gl,t,e)},t.prototype.createBufferFromTexture=function(t,e,n){this.bindTextureToFrameBuffer(t);var r=Xa(this.gl,this.debug,e,n,this.textureConfig);return this.unbindTextureToFrameBuffer(),r},t.prototype.createAndWaitForFence=function(){var t=this.createFence(this.gl);return this.pollFence(t)},t.prototype.createFence=function(t){var e,n,r=this;if(s.getBool("WEBGL_FENCE_API_ENABLED")){var o=t,a=o.fenceSync(o.SYNC_GPU_COMMANDS_COMPLETE,0);t.flush(),n=function(){var t=o.clientWaitSync(a,0,0);return t===o.ALREADY_SIGNALED||t===o.CONDITION_SATISFIED},e=a;}else s.getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")>0?(e=this.beginQuery(),this.endQuery(),n=function(){return r.isQueryAvailable(e,s.getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION"))}):n=function(){return !0};return {query:e,isFencePassed:n}},t.prototype.downloadMatrixFromPackedTexture=function(t,e,n){var r=this;return this.downloadMatrixDriver(t,function(){return Za(r.gl,r.debug,e,n)})},t.prototype.createProgram=function(t){this.throwIfDisposed();var e=this.gl,n=Vt(e,this.debug,t),r=Ba(e,this.debug),o=$t(e,this.debug);return Mt(e,this.debug,function(){return e.attachShader(o,r)}),Mt(e,this.debug,function(){return e.attachShader(o,n)}),jt(e,this.debug,o),this.debug&&Kt(e,this.debug,o),this.vertexAttrsAreBound||(this.setProgram(o),this.vertexAttrsAreBound=$a(e,this.debug,this.program,this.vertexBuffer)),o},t.prototype.deleteProgram=function(t){var e=this;this.throwIfDisposed(),t===this.program&&(this.program=null),null!=t&&Mt(this.gl,this.debug,function(){return e.gl.deleteProgram(t)});},t.prototype.setProgram=function(t){var e=this;this.throwIfDisposed(),this.program=t,null!=this.program&&this.debug&&Kt(this.gl,this.debug,this.program),Mt(this.gl,this.debug,function(){return e.gl.useProgram(t)});},t.prototype.getUniformLocation=function(t,e,n){return void 0===n&&(n=!0),this.throwIfDisposed(),n?ne(this.gl,this.debug,t,e):re(this.gl,t,e)},t.prototype.getAttributeLocation=function(t,e){var n=this;return this.throwIfDisposed(),Mt(this.gl,this.debug,function(){return n.gl.getAttribLocation(t,e)})},t.prototype.getUniformLocationNoThrow=function(t,e){return this.throwIfDisposed(),this.gl.getUniformLocation(t,e)},t.prototype.setInputMatrixTexture=function(t,e,n){this.throwIfDisposed(),this.throwIfNoProgram(),oe(this.gl,this.debug,this.program,t,e,n);},t.prototype.setOutputMatrixTexture=function(t,e,n){this.setOutputMatrixTextureDriver(t,n,e);},t.prototype.setOutputPackedMatrixTexture=function(t,e,n){this.throwIfDisposed();var r=Ma(e,n),o=r[0],a=r[1];this.setOutputMatrixTextureDriver(t,o,a);},t.prototype.setOutputMatrixWriteRegion=function(t,e,n,r){this.setOutputMatrixWriteRegionDriver(n,t,r,e);},t.prototype.setOutputPackedMatrixWriteRegion=function(t,e,n,r){throw new Error("setOutputPackedMatrixWriteRegion not implemented.")},t.prototype.debugValidate=function(){null!=this.program&&Kt(this.gl,this.debug,this.program),se(this.gl);},t.prototype.executeProgram=function(){this.throwIfDisposed(),this.throwIfNoProgram();var t=this.gl;this.debug&&this.debugValidate(),Mt(t,this.debug,function(){return t.drawElements(t.TRIANGLES,6,t.UNSIGNED_SHORT,0)});},t.prototype.blockUntilAllProgramsCompleted=function(){var t=this;this.throwIfDisposed(),Mt(this.gl,this.debug,function(){return t.gl.finish()});},t.prototype.getQueryTimerExtension=function(){return null==this.disjointQueryTimerExtension&&(this.disjointQueryTimerExtension=Ut(this.gl,this.debug,2===s.getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")?"EXT_disjoint_timer_query_webgl2":"EXT_disjoint_timer_query")),this.disjointQueryTimerExtension},t.prototype.getQueryTimerExtensionWebGL2=function(){return this.getQueryTimerExtension()},t.prototype.getQueryTimerExtensionWebGL1=function(){return this.getQueryTimerExtension()},t.prototype.beginQuery=function(){if(2===s.getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")){var t=this.gl,e=this.getQueryTimerExtensionWebGL2(),n=t.createQuery();return t.beginQuery(e.TIME_ELAPSED_EXT,n),n}var r=this.getQueryTimerExtensionWebGL1(),o=r.createQueryEXT();return r.beginQueryEXT(r.TIME_ELAPSED_EXT,o),o},t.prototype.endQuery=function(){if(2!==s.getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")){var t=this.getQueryTimerExtensionWebGL1();t.endQueryEXT(t.TIME_ELAPSED_EXT);}else{var e=this.gl,n=this.getQueryTimerExtensionWebGL2();e.endQuery(n.TIME_ELAPSED_EXT);}},t.prototype.waitForQueryAndGetTime=function(t){return r(this,void 0,void 0,function(){var e=this;return o(this,function(n){switch(n.label){case 0:return [4,R(function(){return e.disposed||e.isQueryAvailable(t,s.getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION"))})];case 1:return n.sent(),[2,this.getQueryTime(t,s.getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION"))]}})})},t.prototype.getQueryTime=function(t,e){if(0===e)return null;if(2===e){var n=this.gl;return n.getQueryParameter(t,n.QUERY_RESULT)/1e6}var r=this.getQueryTimerExtensionWebGL1();return r.getQueryObjectEXT(t,r.QUERY_RESULT_EXT)/1e6},t.prototype.isQueryAvailable=function(t,e){if(0===e)return !0;if(2===e){var n=this.gl,r=this.getQueryTimerExtensionWebGL2(),o=n.getQueryParameter(t,n.QUERY_RESULT_AVAILABLE);return null==this.disjoint&&(this.disjoint=this.gl.getParameter(r.GPU_DISJOINT_EXT)),o&&!this.disjoint}o=(r=this.getQueryTimerExtensionWebGL1()).getQueryObjectEXT(t,r.QUERY_RESULT_AVAILABLE_EXT);return null==this.disjoint&&(this.disjoint=this.gl.getParameter(r.GPU_DISJOINT_EXT)),o&&!this.disjoint},t.prototype.pollFence=function(t){var e=this;return new Promise(function(n){e.addItemToPoll(function(){return t.isFencePassed()},function(){return n()});})},t.prototype.pollItems=function(){for(var t=function(t){for(var e=0;e1||R(function(){return n.pollItems(),0===n.itemsToPoll.length});},t.prototype.bindTextureToFrameBuffer=function(t){this.throwIfDisposed(),ae(this.gl,this.debug,t,this.framebuffer),this.debug&&se(this.gl);},t.prototype.unbindTextureToFrameBuffer=function(){null!=this.outputTexture?(ae(this.gl,this.debug,this.outputTexture,this.framebuffer),this.debug&&se(this.gl)):ie(this.gl,this.debug,this.framebuffer);},t.prototype.downloadMatrixDriver=function(t,e){this.bindTextureToFrameBuffer(t);var n=e();return this.unbindTextureToFrameBuffer(),n},t.prototype.setOutputMatrixTextureDriver=function(t,e,n){this.throwIfDisposed();var r=this.gl;ae(r,this.debug,t,this.framebuffer),this.debug&&se(r),this.outputTexture=t,Mt(r,this.debug,function(){return r.viewport(0,0,e,n)}),Mt(r,this.debug,function(){return r.scissor(0,0,e,n)});},t.prototype.setOutputMatrixWriteRegionDriver=function(t,e,n,r){var o=this;this.throwIfDisposed(),Mt(this.gl,this.debug,function(){return o.gl.scissor(t,e,n,r)});},t.prototype.throwIfDisposed=function(){if(this.disposed)throw new Error("Attempted to use disposed GPGPUContext.")},t.prototype.throwIfNoProgram=function(){if(null==this.program)throw new Error("No GPU program is currently set.")},t}();function ni(t,e){if(t.length!==e.length)throw Error("Binary was compiled with "+t.length+" inputs, but was executed with "+e.length+" inputs");t.forEach(function(t,n){var r=t.logicalShape,o=e[n],a=o.shape;if(!x(r,a))throw Error("Binary was compiled with different shapes than the current args. Shapes "+r+" and "+a+" must match");if(!t.isUniform||!o.isUniform){var i=t.texShape,s=o.isUniform?null:o.texData.texShape;if(!x(i,s))throw Error("Binary was compiled with different texture shapes than the current args. Shape "+i+" and "+s+" must match")}});}var ri=function(){return function(t,e,n){this.variableNames=["A"],this.usesPackedTextures=!0,this.outputShape=t;var r=n.filterWidth,o=n.inChannels,a=n.strideWidth,i=n.strideHeight,s=n.padInfo,u=n.outWidth,l=n.dilationWidth,c=n.dilationHeight,h=s.left,p=s.top,f=o*r,d=Ro();this.userCode="\n void main() {\n ivec2 rc = getOutputCoords();\n\n vec4 result = vec4(0);\n\n for(int row=0; row<=1; row++) {\n for(int col=0; col<=1; col++) {\n int blockIndex = rc.y + col;\n int pos = rc.x + row;\n\n if(blockIndex >= "+t[1]+" || pos >= "+t[0]+") continue;\n\n int offsetY = int(blockIndex / ("+u+")) * "+i+" - "+p+";\n int d0 = offsetY + "+c+" * (pos / "+f+");\n\n if(d0 >= "+e[0]+" || d0 < 0) continue;\n\n int offsetX = int(mod(float(blockIndex), "+u+".) * "+a+". - "+h+".);\n int d1 = offsetX + "+l+" * (int(mod(float(pos), "+f+".) / "+o+".));\n\n if(d1 >= "+e[1]+" || d1 < 0) continue;\n\n vec2 innerDims = vec2(d1, int(mod(float(pos), "+o+".)));\n result[row * 2 + col] = getChannel(getA(d0, int(innerDims.x),\n int(innerDims.y)), innerDims);\n }\n }\n\n "+d.output+" = result;\n }\n ";}}(),oi=function(){return function(t,e,n,r,o){this.variableNames=["x"],this.outputShape=[];var a,i=e,s=t[3]-1;this.outputShape=t;var u="float("+n+") + float("+r+") * sum";a=.5===o?"inversesqrt("+u+")":1===o?"1.0/("+u+")":"exp(log("+u+") * float(-"+o+"));",this.userCode="\n void main() {\n ivec4 coords = getOutputCoords();\n int b = coords[0];\n int r = coords[1];\n int c = coords[2];\n int d = coords[3];\n float x = getX(b, r, c, d);\n float sum = 0.0;\n for (int j = -"+i+"; j <= "+i+"; j++) {\n int idx = d + j;\n if (idx >= 0 && idx <= "+s+") {\n float z = getX(b, r, c, idx);\n sum += z * z;\n }\n }\n float val = x * "+a+";\n setOutput(val);\n }\n ";}}(),ai=function(){return function(t,e,n,r,o){this.variableNames=["inputImage","outputImage","dy"],this.outputShape=[],this.outputShape=t,this.depth=t[3],this.depthRadius=e,this.bias=n,this.alpha=r,this.beta=o,this.userCode="\n void main() {\n ivec4 coords = getOutputCoords();\n int b = coords[0];\n int r = coords[1];\n int c = coords[2];\n\n float result = 0.0;\n for (int d = 0; d < "+this.depth+"; ++d) {\n int depthBegin = int(max(0.0, float(d - "+e+")));\n int depthEnd = int(min(float("+this.depth+"),\n float(d + "+e+" + 1)));\n\n const int MIN_DEPTH_BEGIN = 0;\n const int MAX_DEPTH_END = "+this.depth+";\n\n float norm = 0.0;\n for (int k = MIN_DEPTH_BEGIN; k < MAX_DEPTH_END; ++k) {\n if (k < depthBegin){\n continue;\n }\n else if (k >= depthBegin && k < depthEnd) {\n norm += getInputImage(b, r, c, k) * getInputImage(b, r, c, k);\n }\n else {\n break;\n }\n }\n\n norm = float("+r+") * norm + float("+n+");\n\n for(int k = MIN_DEPTH_BEGIN; k < MAX_DEPTH_END; ++k){\n if (k < depthBegin){\n continue;\n }\n else if (k >= depthBegin && k < depthEnd){\n float dyi = -2.0 * float("+r+")\n * float("+o+")\n * getInputImage(b ,r ,c, k) * getOutputImage(b, r, c, d)\n / norm;\n if (k == d) {\n dyi += pow(norm, -1.0 * "+o+");\n }\n if (k == coords[3]) {\n dyi *= getDy(b, r, c, d);\n result += dyi;\n }\n }\n else {\n break;\n }\n }\n }\n setOutput(result);\n }\n ";}}(),ii=function(){return function(t,e,n,r,o){this.variableNames=["x"],this.outputShape=[],this.usesPackedTextures=!0;var a,i=e,s=t[3]-1;this.outputShape=t;var u="float("+n+") + float("+r+") * sum";a=.5===o?"inversesqrt("+u+")":1===o?"1.0/("+u+")":"exp(log("+u+") * float(-"+o+"));",this.userCode="\n void main() {\n ivec4 coords = getOutputCoords();\n int b = coords.x;\n int r = coords.y;\n int c = coords.z;\n int d = coords.w;\n\n bool hasNextCol = d < "+this.outputShape[3]+";\n bool hasNextRow = c < "+this.outputShape[2]+";\n\n vec4 sum = vec4(0.);\n vec4 xFragAtOutputCoords = getX(b, r, c, d);\n\n vec4 xAtOutputCoords = vec4(\n getChannel(xFragAtOutputCoords, vec2(c, d)),\n hasNextCol ?\n getChannel(xFragAtOutputCoords, vec2(c, d + 1)) : 0.0,\n hasNextRow ?\n getChannel(xFragAtOutputCoords , vec2(c + 1, d)) : 0.0,\n (hasNextRow && hasNextCol) ?\n getChannel(xFragAtOutputCoords, vec2(c + 1, d + 1)) : 0.0\n );\n\n int firstChannel = d - "+i+";\n vec2 cache = vec2(0.);\n if(firstChannel >= 0){\n vec4 firstChannelFrag = getX(b, r, c, firstChannel);\n cache.x = getChannel(firstChannelFrag, vec2(c, firstChannel));\n if(hasNextRow){\n cache.y = getChannel(firstChannelFrag, vec2(c + 1, firstChannel));\n }\n }\n\n ivec2 depth = ivec2(d, d + 1);\n for (int j = - "+i+"; j <= "+i+"; j++) {\n ivec2 idx = depth + j;\n bvec2 aboveLowerBound = greaterThanEqual(idx, ivec2(0));\n bvec2 belowUpperBound = lessThanEqual(idx, ivec2("+s+"));\n\n bool depthInRange = aboveLowerBound.x && belowUpperBound.x;\n bool depthPlusOneInRange = aboveLowerBound.y && belowUpperBound.y;\n\n if(depthInRange || depthPlusOneInRange){\n vec4 z = vec4(0.);\n vec4 xFragAtCurrentDepth;\n z.xz = cache.xy;\n if(depthPlusOneInRange && hasNextCol){\n xFragAtCurrentDepth = idx.y != d ?\n getX(b, r, c, idx.y) : xFragAtOutputCoords;\n z.y = getChannel(xFragAtCurrentDepth, vec2(c, idx.y));\n if(hasNextRow){\n z.w = getChannel(xFragAtCurrentDepth, vec2(c + 1, idx.y));\n }\n }\n cache.xy = z.yw;\n sum += z * z;\n }\n }\n vec4 result = xAtOutputCoords * "+a+";\n setOutput(result);\n }\n ";}}(),si=function(){return function(t){this.variableNames=["dy","maxPos"],this.outputShape=t.inShape;var e=t.strideHeight,n=t.strideWidth,r=t.dilationHeight,o=t.effectiveFilterHeight,a=t.effectiveFilterWidth,i=o-1-t.padInfo.top,s=a-1-t.padInfo.left,u=o*a-1;this.userCode="\n const ivec2 pads = ivec2("+i+", "+s+");\n\n void main() {\n ivec4 coords = getOutputCoords();\n int b = coords[0];\n int d = coords[3];\n\n ivec2 dyRCCorner = coords.yz - pads;\n int dyRCorner = dyRCCorner.x;\n int dyCCorner = dyRCCorner.y;\n\n // Convolve dy(?, ?, d) with pos mask(:, :, d) to get dx(xR, xC, d).\n // ? = to be determined. : = across all values in that axis.\n float dotProd = 0.0;\n for (int wR = 0; wR < "+o+";\n wR += "+r+") {\n float dyR = float(dyRCorner + wR) / "+e+".0;\n\n if (dyR < 0.0 || dyR >= "+t.outHeight+".0 || fract(dyR) > 0.0) {\n continue;\n }\n int idyR = int(dyR);\n\n for (int wC = 0; wC < "+a+"; wC++) {\n float dyC = float(dyCCorner + wC) / "+n+".0;\n\n if (dyC < 0.0 || dyC >= "+t.outWidth+".0 ||\n fract(dyC) > 0.0) {\n continue;\n }\n int idyC = int(dyC);\n\n float dyValue = getDy(b, idyR, idyC, d);\n int maxPosValue = "+u+" - int(getMaxPos(b, idyR, idyC, d));\n\n // Get the current value, check it against the value from the\n // position matrix.\n int curPosValue = wR * "+a+" + wC;\n float mask = float(maxPosValue == curPosValue ? 1.0 : 0.0);\n\n dotProd += dyValue * mask;\n }\n }\n setOutput(dotProd);\n }\n ";}}(),ui=function(){return function(t,e,n,r,o,a){void 0===n&&(n=!1),void 0===r&&(r=!1),void 0===o&&(o=!1),void 0===a&&(a=null),this.variableNames=["matrixA","matrixB"],this.usesPackedTextures=!0,this.outputShape=e;var i=n?t[1]:t[2],s=Math.ceil(i/2),u=n?"i * 2, rc.y":"rc.y, i * 2",l=r?"rc.z, i * 2":"i * 2, rc.z",c=n?["a.xxyy","a.zzww"]:["a.xxzz","a.yyww"],h=r?["b.xzxz","b.ywyw"]:["b.xyxy","b.zwzw"],p="",f="";a&&(p="vec4 activation(vec4 x) {\n "+a+"\n }",f="result = activation(result);");var d=o?"result += getBiasAtOutCoords();":"";o&&this.variableNames.push("bias"),this.userCode="\n "+p+"\n\n const float sharedDimension = "+s+".0;\n\n vec4 dot2x2ARowBCol(ivec3 rc) {\n vec4 result = vec4(0);\n for (int i = 0; i < "+s+"; i++) {\n vec4 a = getMatrixA(rc.x, "+u+");\n vec4 b = getMatrixB(rc.x, "+l+");\n\n result += ("+c[0]+" * "+h[0]+") + ("+c[1]+" * "+h[1]+");\n }\n return result;\n }\n\n void main() {\n ivec3 rc = getOutputCoords();\n vec4 result = dot2x2ARowBCol(rc);\n\n "+d+"\n\n "+f+"\n\n setOutput(result);\n }\n ";}}(),li=function(){function t(t,e,n){this.variableNames=["probs"],this.outputShape=[t,n],this.userCode="\n uniform float seed;\n\n void main() {\n ivec2 coords = getOutputCoords();\n int batch = coords[0];\n\n float r = random(seed);\n float cdf = 0.0;\n\n for (int i = 0; i < "+(e-1)+"; i++) {\n cdf += getProbs(batch, i);\n\n if (r < cdf) {\n setOutput(float(i));\n return;\n }\n }\n\n // If no other event happened, last event happened.\n setOutput(float("+(e-1)+"));\n }\n ";}return t.prototype.getCustomSetupFunc=function(t){var e=this;return function(n,r){null==e.seedLoc&&(e.seedLoc=n.getUniformLocation(r,"seed")),n.gl.uniform1f(e.seedLoc,t);}},t}(),ci=function(){return function(t,e,n,r){this.variableNames=["indices"],this.outputShape=[t,e],this.userCode="\n void main() {\n ivec2 coords = getOutputCoords();\n int index = round(getIndices(coords.x));\n setOutput(mix(float("+r+"), float("+n+"),\n float(index == coords.y)));\n }\n ";}}(),hi=function(){return function(t){this.variableNames=["A"],this.outputShape=t;var e=t.length;if(0===e)this.userCode="\n void main() {\n setOutput(vec4(getA(), 0., 0., 0.));\n }\n ";else{var n=Eo("rc",e),r=Po(e),o=function(t,e,n){if(1===t)return "rc > "+e[0];for(var r="",o=t-2;o= "+e[o],o= "+e+";\n bool rEdge = rp1 >= "+n+";\n "}(e,t[t.length-1],t[t.length-2],n),i=function(t,e){var n=t.length,r=function(t,e){for(var n=[],r=0;r<=1;r++)for(var o=0;o<=1;o++){for(var a=(0===r?"r":"rp1")+", "+(0===o?"c":"cp1"),i=2;i= "+t[0]+" ? 0. : getA(rc + 1),\n 0, 0":"getA("+r[0]+"),\n cEdge ? 0. : getA("+r[1]+"),\n rEdge ? 0. : getA("+r[2]+"),\n rEdge || cEdge ? 0. : getA("+r[3]+")"}(t,n);this.userCode="\n void main() {\n "+r+" rc = getOutputCoords();\n\n if("+o+") {\n setOutput(vec4(0));\n } else {\n "+a+"\n\n setOutput(vec4("+i+"));\n }\n }\n ";}}}();var pi=function(){return function(t,e,n){this.variableNames=["x"],this.outputShape=e.map(function(e,n){return e[0]+t[n]+e[1]});var r=t.length,o=Po(r),a=e.map(function(t){return t[0]}).join(","),i=e.map(function(e,n){return e[0]+t[n]}).join(","),s=["coords[0]","coords[1]","coords[2]","coords[3]"].slice(0,r);this.userCode=1!==r?"\n "+o+" start = "+o+"("+a+");\n "+o+" end = "+o+"("+i+");\n\n void main() {\n "+o+" outC = getOutputCoords();\n if (any(lessThan(outC, start)) || any(greaterThanEqual(outC, end))) {\n setOutput(float("+n+"));\n } else {\n "+o+" coords = outC - start;\n setOutput(getX("+s+"));\n }\n }\n ":"\n int start = "+a+";\n int end = "+i+";\n\n void main() {\n int outC = getOutputCoords();\n if (outC < start || outC >= end) {\n setOutput(float("+n+"));\n } else {\n setOutput(getX(outC - start));\n }\n }\n ";}}(),fi=function(){return function(t,e,n){this.variableNames=["x"],this.usesPackedTextures=!0,this.outputShape=e.map(function(e,n){return e[0]+t[n]+e[1]});for(var r=t.length,o=Po(r),a=e.map(function(t){return t[0]}).join(","),i=e.map(function(e,n){return e[0]+t[n]}).join(","),s=Eo("rc",r),u=Eo("source",r),l=s[r-1]+" < "+this.outputShape[r-1],c=1===r?"source":"vec2("+u.slice(-2).join()+")",h=[o+" rc = outputLoc;",s[r-1]+" += 1;\n if("+l+") {\n ",1===r?"":"}\n rc = outputLoc;\n "+s[r-2]+" += 1;\n if("+s[r-2]+" < "+this.outputShape[r-2]+") {",1===r?"":" "+s[r-1]+" += 1;\n if("+l+") {"],p=1===r?"rc < start || rc >= end":"any(lessThan(rc, start)) || any(greaterThanEqual(rc, end))",f="",d=0,v=1===r?2:4;d= "+t.inHeight+") {\n continue;\n }\n\n for (int wC = 0; wC < "+l+";\n wC += "+s+") {\n int xC = xCCorner + wC;\n\n if (xC < 0 || xC >= "+t.inWidth+") {\n continue;\n }\n\n float value = getX(batch, xR, xC, d);\n\n // If a min / max value has already been found, use it. If not,\n // use the current value.\n float currMinMaxValue = mix(\n value, minMaxValue, minMaxValueFound);\n if (value >= currMinMaxValue) {\n minMaxValue = value;\n minMaxValueFound = 1.0;\n minMaxPosition = wR * "+l+" + wC;\n }\n }\n }\n setOutput(float(minMaxPosition));\n }\n ";else{var d=e+"("+e+"("+e+"(minMaxValue[0], minMaxValue[1]), minMaxValue[2]), minMaxValue[3])";"avg"===e&&(d="avgValue / count");var v=4*Math.floor(r/4),m=r%4,g="\n if ("+p+") {\n avgValue += dot(values, ones);\n } else {\n minMaxValue = max(values, minMaxValue);\n }\n ";this.userCode="\n const ivec2 strides = ivec2("+o+", "+a+");\n const ivec2 pads = ivec2("+c+", "+h+");\n const float initializationValue = "+f+";\n const vec4 ones = vec4(1.0, 1.0, 1.0, 1.0);\n\n float count = 0.0;\n\n float getValue(int batch, int xR, int xC, int d) {\n if (xC < 0 || xC >= "+t.inWidth+") {\n return initializationValue;\n }\n count += 1.0;\n return getX(batch, xR, xC, d);\n }\n\n void main() {\n ivec4 coords = getOutputCoords();\n int batch = coords[0];\n int d = coords[3];\n\n ivec2 xRCCorner = coords.yz * strides - pads;\n int xRCorner = xRCCorner.x;\n int xCCorner = xRCCorner.y;\n\n // max/min x(?, ?, d) to get y(yR, yC, d).\n // ? = to be determined\n vec4 minMaxValue = vec4("+f+");\n float avgValue = 0.0;\n count = 0.0;\n\n for (int wR = 0; wR < "+u+";\n wR += "+i+") {\n int xR = xRCorner + wR;\n\n if (xR < 0 || xR >= "+t.inHeight+") {\n continue;\n }\n\n for (int wC = 0; wC < "+v+"; wC += 4) {\n int xC = xCCorner + wC * "+s+";\n\n vec4 values = vec4(\n getValue(batch, xR, xC, d),\n getValue(batch, xR, xC + "+s+", d),\n getValue(batch, xR, xC + 2 * "+s+", d),\n getValue(batch, xR, xC + 3 * "+s+", d)\n );\n\n "+g+"\n }\n\n int xC = xCCorner + "+v+";\n if ("+(1===m)+") {\n vec4 values = vec4(\n getValue(batch, xR, xC, d),\n initializationValue,\n initializationValue,\n initializationValue\n );\n\n "+g+"\n } else if ("+(2===m)+") {\n vec4 values = vec4(\n getValue(batch, xR, xC, d),\n getValue(batch, xR, xC + "+s+", d),\n initializationValue,\n initializationValue\n );\n\n "+g+"\n } else if ("+(3===m)+") {\n vec4 values = vec4(\n getValue(batch, xR, xC, d),\n getValue(batch, xR, xC + "+s+", d),\n getValue(batch, xR, xC + 2 * "+s+", d),\n initializationValue\n );\n\n "+g+"\n }\n }\n setOutput("+d+");\n }\n ";}}}(),vi=function(){return function(t,e){this.variableNames=["x"];var n=t.windowSize,r=t.batchSize,o=t.inSize,a=Math.ceil(o/n);this.outputShape=[r,a];var i="0.0",s="";"prod"===e?i="1.0":"min"===e?(i="1.0 / 1e-20",s="min"):"max"===e&&(i="-1.0 / 1e-20",s="max");var u=e+"("+e+"("+e+"(minMaxValue[0], minMaxValue[1]), minMaxValue[2]), minMaxValue[3])";"sum"===e?u="sumValue":"prod"===e?u="prodValue":"all"===e?u="allValue":"any"===e&&(u="anyValue");var l=4*Math.floor(n/4),c=n%4,h="\n if ("+("sum"===e)+") {\n sumValue += dot(values, ones);\n } else if ("+("prod"===e)+") {\n vec2 tmp = vec2(values[0], values[1]) * vec2(values[2], values[3]);\n prodValue *= tmp[0] * tmp[1];\n } else {\n minMaxValue = "+s+"(values, minMaxValue);\n }\n ",p="vec4";"all"===e?(i="1.0",h="\n bool reducedAllValue = all(values);\n float floatedReducedAllValue = float(reducedAllValue);\n allValue = float(allValue >= 1.0 && floatedReducedAllValue >= 1.0);\n ",p="bvec4"):"any"===e&&(i="0.0",h="\n bool reducedAnyValue = any(values);\n float floatedReducedAnyValue = float(reducedAnyValue);\n anyValue = float(anyValue >= 1.0 || floatedReducedAnyValue >= 1.0);\n ",p="bvec4");var f="";o%n>0&&(f="\n if (inIdx < 0 || inIdx >= "+o+") {\n return initializationValue;\n }\n "),this.userCode="\n const float initializationValue = "+i+";\n const vec4 ones = vec4(1.0, 1.0, 1.0, 1.0);\n\n float getValue(int batch, int inIdx) {\n "+f+"\n return getX(batch, inIdx);\n }\n\n void main() {\n ivec2 coords = getOutputCoords();\n int batch = coords[0];\n int outIdx = coords[1];\n int inOffset = outIdx * "+n+";\n\n vec4 minMaxValue = vec4("+i+");\n float prodValue = 1.0;\n float sumValue = 0.0;\n float allValue = 1.0;\n float anyValue = 0.0;\n\n for (int i = 0; i < "+l+"; i += 4) {\n int inIdx = inOffset + i;\n "+p+" values = "+p+"(\n getValue(batch, inIdx),\n getValue(batch, inIdx + 1),\n getValue(batch, inIdx + 2),\n getValue(batch, inIdx + 3)\n );\n\n "+h+"\n }\n\n int inIdx = inOffset + "+l+";\n if ("+(1===c)+") {\n "+p+" values = "+p+"(\n getValue(batch, inIdx),\n initializationValue,\n initializationValue,\n initializationValue\n );\n\n "+h+"\n } else if ("+(2===c)+") {\n "+p+" values = "+p+"(\n getValue(batch, inIdx),\n getValue(batch, inIdx + 1),\n initializationValue,\n initializationValue\n );\n\n "+h+"\n } else if ("+(3===c)+") {\n "+p+" values = "+p+"(\n getValue(batch, inIdx),\n getValue(batch, inIdx + 1),\n getValue(batch, inIdx + 2),\n initializationValue\n );\n\n "+h+"\n }\n setOutput("+u+");\n }\n ";}}(),mi=function(){return function(t,e){this.variableNames=["A"],this.usesPackedTextures=!0,this.outputShape=t;for(var n="",r=0;r<4;r++){var o="thisRC = rc;";r%2==1&&(o+="thisRC.z += 1;"),r>1&&(o+="thisRC.y += 1;"),n+="\n "+o+"\n "+(r>0?"if(thisRC.y < rows && thisRC.z < cols){":"")+"\n int flatIndex = getFlatIndex(thisRC);\n\n ivec3 inputRC = inputCoordsFromReshapedOutCoords(flatIndex);\n vec2 inputRCInnerDims = vec2(float(inputRC.y),float(inputRC.z));\n\n result["+r+"] =\n getChannel(getA(inputRC.x, inputRC.y, inputRC.z), inputRCInnerDims);\n "+(r>0?"}":"")+"\n ";}this.userCode="\n \n ivec3 inputCoordsFromReshapedOutCoords(int index) {\n "+Io(["r","c","d"],e)+"\n return ivec3(r, c, d);\n }\n \n "+So(t)+"\n\n void main() {\n ivec3 rc = getOutputCoords();\n\n vec4 result = vec4(0.);\n\n ivec3 thisRC;\n int rows = "+t[1]+";\n int cols = "+t[2]+";\n\n "+n+"\n\n setOutput(result);\n }\n ";}}();var gi=function(){return function(t,e,n){this.variableNames=["dy"],this.outputShape=[],this.outputShape=e.shape;var r=e.shape,o=r[1],a=r[2],i=t.shape,s=i[1],u=i[2],l=[n&&s>1?o-1:o,n&&u>1?a-1:a],c=[n&&s>1?s-1:s,n&&u>1?u-1:u],h=l[0]/c[0],p=l[1]/c[1],f=1/h,d=1/p,v=2*Math.ceil(f)+2,m=2*Math.ceil(d)+2;this.userCode="\n void main() {\n ivec4 coords = getOutputCoords();\n int b = coords[0];\n int d = coords[3];\n int r = coords[1];\n int c = coords[2];\n\n float accumulator = 0.0;\n\n const float heightScale = float("+h+");\n const float widthScale = float("+p+");\n\n const float invHeightScale = float("+f+");\n const float invWidthScale = float("+d+");\n\n const int winHeight = int("+v+");\n const int winWidth = int("+m+");\n\n // Compute bounds for where in dy we will look\n float startRLerp = floor(float(r) * invHeightScale);\n int startDyR = int(startRLerp - float(winHeight / 2));\n\n float startCLerp = floor(float(c) * invWidthScale);\n int startDyC = int(startCLerp - float(winWidth / 2));\n\n // Loop over dy\n for (int dyROffset = 0; dyROffset < winHeight; dyROffset++) {\n int dyR = dyROffset + startDyR;\n\n // Guard against the window exceeding the bounds of dy\n if (dyR < 0 || dyR >= "+s+") {\n continue;\n }\n\n for (int dyCOffset = 0; dyCOffset < winWidth; dyCOffset++) {\n int dyC = dyCOffset + startDyC;\n\n // Guard against the window exceeding the bounds of dy\n if (dyC < 0 || dyC >= "+u+") {\n continue;\n }\n\n float dxR = float(dyR) * heightScale;\n int topDxRIndex = int(floor(dxR));\n int bottomDxRIndex = int(min(ceil(dxR), "+(o-1)+".0));\n float dxRLerp = dxR - float(topDxRIndex);\n float inverseDxRLerp = 1.0 - dxRLerp;\n\n float dxC = float(dyC) * widthScale;\n int leftDxCIndex = int(floor(dxC));\n int rightDxCIndex = int(min(ceil(dxC), "+(a-1)+".0));\n float dxCLerp = dxC - float(leftDxCIndex);\n float inverseDxCLerp = 1.0 - dxCLerp;\n\n if (r == topDxRIndex && c == leftDxCIndex) {\n // topLeft\n accumulator +=\n getDy(b, dyR, dyC, d) * inverseDxRLerp * inverseDxCLerp;\n }\n\n if (r == topDxRIndex && c == rightDxCIndex) {\n // topRight\n accumulator += getDy(b, dyR, dyC, d) * inverseDxRLerp * dxCLerp;\n }\n\n if (r == bottomDxRIndex && c == leftDxCIndex) {\n // bottomLeft\n accumulator += getDy(b, dyR, dyC, d) * dxRLerp * inverseDxCLerp;\n }\n\n if (r == bottomDxRIndex && c == rightDxCIndex) {\n // bottomRight\n accumulator += getDy(b, dyR, dyC, d) * dxRLerp * dxCLerp;\n }\n }\n }\n // End loop over dy\n\n setOutput(accumulator);\n }\n ";}}(),yi=function(){return function(t,e,n,r){this.variableNames=["A"],this.outputShape=[];var o=t[0],a=t[1],i=t[2],s=t[3];this.outputShape=[o,e,n,s];var u=[r&&e>1?a-1:a,r&&n>1?i-1:i],l=[r&&e>1?e-1:e,r&&n>1?n-1:n];this.userCode="\n const vec2 effectiveInputOverOutputRatioRC = vec2(\n "+u[0]/l[0]+",\n "+u[1]/l[1]+");\n const vec2 inputShapeRC = vec2("+a+".0, "+i+".0);\n\n void main() {\n ivec4 coords = getOutputCoords();\n int b = coords[0];\n int d = coords[3];\n ivec2 yRC = coords.yz;\n\n // Fractional source index.\n vec2 sourceFracIndexRC = vec2(yRC) * effectiveInputOverOutputRatioRC;\n\n // Compute the four integer indices.\n ivec2 sourceFloorRC = ivec2(sourceFracIndexRC);\n ivec2 sourceCeilRC = ivec2(\n min(inputShapeRC - 1.0, ceil(sourceFracIndexRC)));\n\n float topLeft = getA(b, sourceFloorRC.x, sourceFloorRC.y, d);\n float bottomLeft = getA(b, sourceCeilRC.x, sourceFloorRC.y, d);\n float topRight = getA(b, sourceFloorRC.x, sourceCeilRC.y, d);\n float bottomRight = getA(b, sourceCeilRC.x, sourceCeilRC.y, d);\n\n vec2 fracRC = sourceFracIndexRC - vec2(sourceFloorRC);\n\n float top = topLeft + (topRight - topLeft) * fracRC.y;\n float bottom = bottomLeft + (bottomRight - bottomLeft) * fracRC.y;\n float newValue = top + (bottom - top) * fracRC.x;\n\n setOutput(newValue);\n }\n ";}}(),xi=function(){return function(t,e,n,r){this.variableNames=["A"],this.usesPackedTextures=!0,this.outputShape=[];var o=t[0],a=t[1],i=t[2],s=t[3];this.outputShape=[o,e,n,s];var u=[r&&e>1?a-1:a,r&&n>1?i-1:i],l=[r&&e>1?e-1:e,r&&n>1?n-1:n];this.userCode="\n const vec3 effectiveInputOverOutputRatioRC = vec3(\n "+u[0]/l[0]+",\n "+u[1]/l[1]+",\n "+u[1]/l[1]+");\n const vec3 inputShapeRC = vec3("+a+".0, "+i+".0,\n "+i+".0);\n\n float getAValue(int b, int r, int c, int d) {\n return getChannel(getA(b, r, c, d), vec2(c, d));\n }\n\n void main() {\n ivec4 coords = getOutputCoords();\n int b = coords[0];\n int d = coords[3];\n // Calculate values for next column in yRC.z.\n ivec3 yRC = coords.yzz + ivec3(0, 0, 1);\n\n // Fractional source index.\n vec3 sourceFracIndexRC = vec3(yRC) * effectiveInputOverOutputRatioRC;\n\n // Compute the four integer indices.\n ivec3 sourceFloorRC = ivec3(sourceFracIndexRC);\n ivec3 sourceCeilRC = ivec3(\n min(inputShapeRC - 1.0, ceil(sourceFracIndexRC)));\n \n // Should we calculate next column and row elements in 2x2 packed cell.\n bool hasNextCol = d < "+(s-1)+"; \n bool hasNextRow = coords.z < "+(n-1)+";\n\n // In parallel, construct four corners for all four components in\n // packed 2x2 cell.\n vec4 topLeft = vec4(\n getAValue(b, sourceFloorRC.x, sourceFloorRC.y, d),\n hasNextCol ? getAValue(b, sourceFloorRC.x, sourceFloorRC.y, d + 1)\n : 0.0,\n hasNextRow ? getAValue(b, sourceFloorRC.x, sourceFloorRC.z, d)\n : 0.0,\n (hasNextRow && hasNextCol) ?\n getAValue(b, sourceFloorRC.x, sourceFloorRC.z, d + 1) : 0.0);\n\n vec4 bottomLeft = vec4(\n getAValue(b, sourceCeilRC.x, sourceFloorRC.y, d),\n hasNextCol ? getAValue(b, sourceCeilRC.x, sourceFloorRC.y, d + 1)\n : 0.0,\n hasNextRow ? getAValue(b, sourceCeilRC.x, sourceFloorRC.z, d)\n : 0.0,\n (hasNextRow && hasNextCol) ?\n getAValue(b, sourceCeilRC.x, sourceFloorRC.z, d + 1) : 0.0);\n\n vec4 topRight = vec4(\n getAValue(b, sourceFloorRC.x, sourceCeilRC.y, d),\n hasNextCol ? getAValue(b, sourceFloorRC.x, sourceCeilRC.y, d + 1)\n : 0.0,\n hasNextRow ? getAValue(b, sourceFloorRC.x, sourceCeilRC.z, d)\n : 0.0,\n (hasNextRow && hasNextCol) ?\n getAValue(b, sourceFloorRC.x, sourceCeilRC.z, d + 1) : 0.0);\n\n vec4 bottomRight = vec4(\n getAValue(b, sourceCeilRC.x, sourceCeilRC.y, d),\n hasNextCol ? getAValue(b, sourceCeilRC.x, sourceCeilRC.y, d + 1)\n : 0.0,\n hasNextRow ? getAValue(b, sourceCeilRC.x, sourceCeilRC.z, d)\n : 0.0,\n (hasNextRow && hasNextCol) ?\n getAValue(b, sourceCeilRC.x, sourceCeilRC.z, d + 1) : 0.0);\n\n vec3 fracRC = sourceFracIndexRC - vec3(sourceFloorRC);\n\n vec4 top = mix(topLeft, topRight, fracRC.yyzz);\n vec4 bottom = mix(bottomLeft, bottomRight, fracRC.yyzz);\n vec4 newValue = mix(top, bottom, fracRC.x);\n\n setOutput(newValue);\n }\n ";}}(),bi=function(){return function(t,e,n){this.variableNames=["dy"],this.outputShape=[],this.outputShape=e.shape;var r=e.shape,o=r[1],a=r[2],i=t.shape,s=i[1],u=i[2],l=[n&&s>1?o-1:o,n&&u>1?a-1:a],c=[n&&s>1?s-1:s,n&&u>1?u-1:u],h=l[0]/c[0],p=l[1]/c[1],f=1/h,d=1/p,v=2*Math.ceil(f)+2,m=2*Math.ceil(d)+2;this.userCode="\n void main() {\n ivec4 coords = getOutputCoords();\n int b = coords[0];\n int d = coords[3];\n int r = coords[1];\n int c = coords[2];\n\n float accumulator = 0.0;\n\n const float heightScale = float("+h+");\n const float widthScale = float("+p+");\n\n const float invHeightScale = float("+f+");\n const float invWidthScale = float("+d+");\n\n const int winHeight = int("+v+");\n const int winWidth = int("+m+");\n\n // Compute bounds for where in dy we will look\n float startRLerp = floor(float(r) * invHeightScale);\n int startDyR = int(floor(startRLerp - float(winHeight / 2)));\n\n float startCLerp = floor(float(c) * invWidthScale);\n int startDyC = int(floor(startCLerp - float(winWidth / 2)));\n\n // Loop over dy\n for (int dyROffset = 0; dyROffset < winHeight; dyROffset++) {\n int dyR = dyROffset + startDyR;\n\n // Guard against the window exceeding the bounds of dy\n if (dyR < 0 || dyR >= "+s+") {\n continue;\n }\n\n for (int dyCOffset = 0; dyCOffset < winWidth; dyCOffset++) {\n int dyC = dyCOffset + startDyC;\n\n // Guard against the window exceeding the bounds of dy\n if (dyC < 0 || dyC >= "+u+") {\n continue;\n }\n\n float sourceFracRow =\n float("+l[0]+") *\n (float(dyR) / float("+c[0]+"));\n\n float sourceFracCol =\n float("+l[1]+") *\n (float(dyC) / float("+c[1]+"));\n\n int sourceNearestRow = int(min(\n float(int("+o+") - 1),\n "+n+" ? float(round(sourceFracRow)) :\n float(floor(sourceFracRow))));\n\n int sourceNearestCol = int(min(\n float(int("+a+") - 1),\n "+n+" ? float(round(sourceFracCol)) :\n float(floor(sourceFracCol))));\n\n if (r == sourceNearestRow && c == sourceNearestCol) {\n accumulator += getDy(b, dyR, dyC, d);\n }\n }\n }\n // End loop over dy\n\n setOutput(accumulator);\n }\n ";}}(),wi=function(){return function(t,e,n,r){this.variableNames=["A"],this.outputShape=[];var o=t[0],a=t[1],i=t[2],s=t[3];this.outputShape=[o,e,n,s];var u=[r&&e>1?a-1:a,r&&n>1?i-1:i],l=[r&&e>1?e-1:e,r&&n>1?n-1:n],c=r?"0.5":"0.0";this.userCode="\n const vec2 effectiveInputOverOutputRatioRC = vec2(\n "+u[0]/l[0]+",\n "+u[1]/l[1]+");\n const vec2 inputShapeRC = vec2("+a+".0, "+i+".0);\n\n void main() {\n ivec4 coords = getOutputCoords();\n int b = coords[0];\n int d = coords[3];\n ivec2 yRC = coords.yz;\n\n // Fractional source index.\n vec2 sourceFracIndexRC = vec2(yRC) * effectiveInputOverOutputRatioRC;\n\n // Compute the coordinators of nearest neighbor point.\n ivec2 sourceNearestRC = ivec2(\n min(inputShapeRC - 1.0, floor(sourceFracIndexRC + "+c+")));\n\n float newValue = getA(b, sourceNearestRC.x, sourceNearestRC.y, d);\n\n setOutput(newValue);\n }\n ";}}(),Ci=function(){return function(t,e){this.variableNames=["x"];var n=t.length;if(n>4)throw new Error("WebGL backend: Reverse of rank-"+n+" tensor is not yet supported");if(this.outputShape=t,1!==n){var r=t.map(function(n,r){return function(n){return -1!==e.indexOf(n)&&1!==t[n]?t[n]+" - coords["+n+"] - 1":"coords["+n+"]"}(r)}).join(","),o=Po(n);this.userCode="\n void main() {\n "+o+" coords = getOutputCoords();\n setOutput(getX("+r+"));\n }\n ";}else this.userCode="\n void main() {\n int coord = getOutputCoords();\n setOutput(getX("+t[0]+" - coord - 1));\n }\n ";}}(),Ei=function(){return function(t,e){this.variableNames=["x"],this.usesPackedTextures=!0;var n=t.length;if(n>4)throw new Error("WebGL backend: Reverse of rank-"+n+" tensor is not yet supported");this.outputShape=t;var r=Eo("rc",n),o=r[n-1]+" + 1 < "+this.outputShape[n-1],a=r[n-2]+" + 1 < "+this.outputShape[n-2],i=Po(n);function s(n){var r=t.map(function(r,o){return function(n,r){return -1!==e.indexOf(n)&&1!==t[n]?t[n]+" - "+r[n]+" - 1":""+r[n]}(o,n)});return "getChannel(getX("+r.join(",")+"), vec2("+r.slice(-2).join(",")+"))"}this.userCode=1===n?"\n void main(){\n int rc = getOutputCoords();\n vec4 result = vec4(0.);\n result.r = getChannel(getX("+t[0]+" - rc - 1),\n "+t[0]+" - rc - 1);\n if("+o+"){\n result.g = getChannel(getX("+t[0]+" - (rc + 1) - 1),\n "+t[0]+" - (rc + 1) - 1);\n }\n setOutput(result);\n }\n ":"\n void main() {\n "+i+" rc = getOutputCoords();\n vec4 result = vec4(0.);\n result.r = "+function(t){return s(t)}(r.slice())+";\n if("+o+"){\n result.g = "+function(t){return t[n-1]="("+t[n-1]+" + 1)",s(t)}(r.slice())+";\n }\n if("+a+") {\n result.b = "+function(t){return t[n-2]="("+t[n-2]+" + 1)",s(t)}(r.slice())+";\n if("+o+") {\n result.a = "+function(t){return t[n-1]="("+t[n-1]+" + 1)",t[n-2]="("+t[n-2]+" + 1)",s(t)}(r.slice())+";\n }\n }\n setOutput(result);\n }\n ";}}(),Ri=function(){return function(t,e,n,r,o,a,i){this.variableNames=["updates","indices","defaultValue"],this.outputShape=a;var s=Po(o.length),u=Po(a.length),l="";1===n?l="i":2===n&&(l="i, j");var c="getIndices("+l+")",h="";1===r?h="i":2===r&&(h="i, coords[1]");var p="getUpdates("+h+")",f=e>1?"strides[j]":"strides";this.userCode="\n "+s+" strides = "+s+"("+o+");\n\n void main() {\n "+u+" coords = getOutputCoords();\n float sum = 0.0;\n bool found = false;\n for (int i = 0; i < "+t+"; i++) {\n int flattenedIndex = 0;\n for (int j = 0; j < "+e+"; j++) {\n int index = round("+c+");\n flattenedIndex += index * "+f+";\n }\n if (flattenedIndex == coords[0]) {\n sum += "+p+";\n found = true;\n }\n }\n setOutput(mix(getDefaultValue(), sum, float(found)));\n }\n ";}}(),Ii=function(){return function(t,e){this.variableNames=["x","segmentIds"];var n=t.windowSize,r=t.batchSize,o=t.inSize,a=t.numSegments,i=a*Math.ceil(o/n);this.outputShape=[r,i];var s=4*Math.floor(n/4),u=n%4,l="\n sumValue += dot(values, segFilter);\n ",c="";o%n>0&&(c="\n if (inIdx < 0 || inIdx >= "+o+") {\n return initializationValue;\n }\n ");var h="";o%n>0&&(h="\n if (inIdx < 0 || inIdx >= "+o+") {\n return -1.0;\n }\n "),this.userCode="\n const float initializationValue = 0.0;\n\n float getValue(int batch, int inIdx) {\n "+c+"\n return getX(batch, inIdx);\n }\n\n float getSegmentIdAtIndex(int inIdx) {\n "+h+"\n return getSegmentIds(inIdx);\n }\n\n void main() {\n ivec2 coords = getOutputCoords();\n int batch = coords[0];\n int outIdx = coords[1];\n int inOffset = int(floor(float(outIdx) / float(\n "+a+")) * float("+n+"));\n int currentSeg = int(mod(float(outIdx), float("+a+")));\n\n float sumValue = 0.0;\n\n for (int i = 0; i < "+s+"; i += 4) {\n int inIdx = inOffset + i;\n vec4 values = vec4(\n getValue(batch, inIdx),\n getValue(batch, inIdx + 1),\n getValue(batch, inIdx + 2),\n getValue(batch, inIdx + 3)\n );\n\n vec4 segFilter = vec4(\n int(getSegmentIdAtIndex(inIdx)) == currentSeg ? 1 : 0,\n int(getSegmentIdAtIndex(inIdx + 1)) == currentSeg ? 1 : 0,\n int(getSegmentIdAtIndex(inIdx + 2)) == currentSeg ? 1 : 0,\n int(getSegmentIdAtIndex(inIdx + 3)) == currentSeg ? 1 : 0\n );\n\n "+l+"\n }\n\n int inIdx = inOffset + "+s+";\n if ("+(1===u)+") {\n vec4 values = vec4(\n getValue(batch, inIdx),\n initializationValue,\n initializationValue,\n initializationValue\n );\n\n int inIdxSeg = int(getSegmentIdAtIndex(inIdx));\n\n vec4 segFilter = vec4(\n int(getSegmentIdAtIndex(inIdx)) == currentSeg ? 1 : 0,\n 0,\n 0,\n 0\n );\n\n "+l+"\n } else if ("+(2===u)+") {\n vec4 values = vec4(\n getValue(batch, inIdx),\n getValue(batch, inIdx + 1),\n initializationValue,\n initializationValue\n );\n\n vec4 segFilter = vec4(\n int(getSegmentIdAtIndex(inIdx)) == currentSeg ? 1 : 0,\n int(getSegmentIdAtIndex(inIdx + 1)) == currentSeg ? 1 : 0,\n 0,\n 0\n );\n\n "+l+"\n } else if ("+(3===u)+") {\n vec4 values = vec4(\n getValue(batch, inIdx),\n getValue(batch, inIdx + 1),\n getValue(batch, inIdx + 2),\n initializationValue\n );\n\n vec4 segFilter = vec4(\n int(getSegmentIdAtIndex(inIdx)) == currentSeg ? 1 : 0,\n int(getSegmentIdAtIndex(inIdx + 1)) == currentSeg ? 1 : 0,\n int(getSegmentIdAtIndex(inIdx + 2)) == currentSeg ? 1 : 0,\n 0\n );\n\n "+l+"\n }\n setOutput(sumValue);\n }\n ";}}(),Si=function(){return function(t,e,n){var r,o;if(this.variableNames=["c","a","b"],this.outputShape=e,n>4)throw Error("Where for rank "+n+" is not yet supported");if(1===n)o="resRC",r="resRC";else{for(var a=["resRC.x","resRC.y","resRC.z","resRC.w"],i=[],s=[],u=0;u= 1.0) {\n setOutput(getA("+o+"));\n } else {\n setOutput(getB("+o+"));\n }\n }\n ";}}(),Ni=function(){function t(t){this.variableNames=["source"],this.outputShape=t,this.rank=t.length;var e,n=Po(this.rank),r="uniform int start["+this.rank+"];",o=function(t){if(1===t)return "sourceLoc";if(t<=6)return ki.slice(0,t).map(function(t){return "sourceLoc."+t}).join(",");throw Error("Slicing for rank "+t+" is not yet supported")}(this.rank);e="\n "+n+" sourceLoc;\n "+n+" coords = getOutputCoords();\n "+t.map(function(t,e){return "sourceLoc."+ki[e]+" = start["+e+"] + coords."+ki[e]+";"}).join("\n")+"\n ",this.userCode="\n "+r+"\n void main() {\n "+e+"\n setOutput(getSource("+o+"));\n }\n ";}return t.prototype.getCustomSetupFunc=function(t){var e=this;if(t.length!==this.rank)throw Error("The rank ("+this.rank+") of the program must match the length of start ("+t.length+")");return function(n,r){null==e.startLoc&&(e.startLoc=n.getUniformLocationNoThrow(r,"start"),null==e.startLoc)||n.gl.uniform1iv(e.startLoc,t);}},t}(),ki=["x","y","z","w","u","v"];var Ai=function(){function t(t){this.variableNames=["source"],this.usesPackedTextures=!0,this.outputShape=t,this.rank=t.length;var e=Po(this.rank),n=Eo("coords",this.rank),r=Eo("sourceLoc",this.rank),o=1===this.rank?"sourceLoc":"vec2("+r.slice(-2).join()+")",a="getChannel(getSource("+r.join()+"), "+o+")",i="\n result.x = "+a+";\n if (++"+n[this.rank-1]+" < "+t[this.rank-1]+") {\n ++"+r[this.rank-1]+";\n result.y = "+a+";\n --"+r[this.rank-1]+";\n }\n ",s=1===this.rank?"":"\n --"+n[this.rank-1]+";\n if (++"+n[this.rank-2]+" < "+t[this.rank-2]+") {\n ++"+r[this.rank-2]+";\n result.z = "+a+";\n if (++"+n[this.rank-1]+" < "+t[this.rank-1]+") {\n ++"+r[this.rank-1]+";\n result.w = "+a+";\n }\n }\n ",u=this.rank<=4?"sourceLoc = coords +\n "+e+"("+t.map(function(t,e){return "start["+e+"]"}).join()+");":t.map(function(t,e){return r[e]+" = "+n[e]+" + start["+e+"];"}).join("\n");this.userCode="\n uniform int start["+this.rank+"];\n void main() {\n "+e+" coords = getOutputCoords();\n "+e+" sourceLoc;\n "+u+" \n vec4 result = vec4(0.);\n "+i+"\n "+s+"\n setOutput(result);\n }\n ";}return t.prototype.getCustomSetupFunc=function(t){var e=this;if(t.length!==this.rank)throw Error("The rank ("+this.rank+") of the program must match the length of start ("+t.length+")");return function(n,r){null==e.startLoc&&(e.startLoc=n.getUniformLocationNoThrow(r,"start"),null==e.startLoc)||n.gl.uniform1iv(e.startLoc,t);}},t}(),Ti=function(){return function(t,e,n,r){this.variableNames=["x"];var o=n.filter(function(t,e){return -1===r.indexOf(e)});this.outputShape=o;var a=n.length,i=Po(n.length),s=Po(o.length),u="";if(1===a)u="coords * strides + begin";else{var l=0;u=n.map(function(t,e){return -1===r.indexOf(e)?(l++,1===o.length?"coords * strides["+e+"] + begin["+e+"]":"coords["+(l-1)+"] * strides["+e+"] + begin["+e+"]"):"begin["+e+"]"}).join(",");}this.userCode="\n "+i+" begin = "+i+"("+t+");\n "+i+" strides = "+i+"("+e+");\n\n void main() {\n "+s+" coords = getOutputCoords();\n setOutput(getX("+u+"));\n }\n ";}}(),Di=function(){function t(t){this.gpgpu=t,this.numUsedTextures=0,this.numFreeTextures=0,this.freeTextures={},this.logEnabled=!1,this.usedTextures={};}return t.prototype.acquireTexture=function(t,e,n){var r,o=_i(e,n),a=Oi(t,o,n);if(a in this.freeTextures||(this.freeTextures[a]=[]),a in this.usedTextures||(this.usedTextures[a]=[]),this.freeTextures[a].length>0){this.numFreeTextures--,this.numUsedTextures++,this.log();var i=this.freeTextures[a].shift();return this.usedTextures[a].push(i),i}return this.numUsedTextures++,this.log(),o===Da.PACKED_2X2_FLOAT32?r=this.gpgpu.createPackedMatrixTexture(t[0],t[1]):o===Da.PACKED_2X2_FLOAT16?r=this.gpgpu.createFloat16PackedMatrixTexture(t[0],t[1]):o===Da.UNPACKED_FLOAT32?r=this.gpgpu.createFloat32MatrixTexture(t[0],t[1]):o===Da.UNPACKED_FLOAT16?r=this.gpgpu.createFloat16MatrixTexture(t[0],t[1]):o===Da.PACKED_4X1_UNSIGNED_BYTE&&(r=this.gpgpu.createUnsignedBytesMatrixTexture(t[0],t[1])),this.usedTextures[a].push(r),r},t.prototype.releaseTexture=function(t,e,n,r){if(null!=this.freeTextures){var o=Oi(e,_i(n,r),r);o in this.freeTextures||(this.freeTextures[o]=[]),this.freeTextures[o].push(t),this.numFreeTextures++,this.numUsedTextures--;var a=this.usedTextures[o],i=a.indexOf(t);if(i<0)throw new Error("Cannot release a texture that was never provided by this texture manager");a.splice(i,1),this.log();}},t.prototype.log=function(){if(this.logEnabled){var t=this.numFreeTextures+this.numUsedTextures;console.log("Free/Used",this.numFreeTextures+" / "+this.numUsedTextures,"("+t+")");}},t.prototype.getNumUsedTextures=function(){return this.numUsedTextures},t.prototype.getNumFreeTextures=function(){return this.numFreeTextures},t.prototype.dispose=function(){var t=this;if(null!=this.freeTextures){for(var e in this.freeTextures)this.freeTextures[e].forEach(function(e){t.gpgpu.deleteMatrixTexture(e);});for(var e in this.usedTextures)this.usedTextures[e].forEach(function(e){t.gpgpu.deleteMatrixTexture(e);});this.freeTextures=null,this.usedTextures=null,this.numUsedTextures=0,this.numFreeTextures=0;}},t}();function _i(t,e){if(t===Ta.UPLOAD)return Da.PACKED_2X2_FLOAT32;if(t===Ta.RENDER||null==t)return e?s.getBool("WEBGL_RENDER_FLOAT32_ENABLED")?Da.PACKED_2X2_FLOAT32:Da.PACKED_2X2_FLOAT16:s.getBool("WEBGL_RENDER_FLOAT32_ENABLED")?Da.UNPACKED_FLOAT32:Da.UNPACKED_FLOAT16;if(t===Ta.DOWNLOAD||t===Ta.PIXELS)return Da.PACKED_4X1_UNSIGNED_BYTE;throw new Error("Unknown logical texture type "+t)}function Oi(t,e,n){return t[0]+"_"+t[1]+"_"+e+"_"+n}var Fi=function(){return function(t,e){this.variableNames=["A"];for(var n=new Array(t.length),r=0;r5)throw Error("Tile for rank "+e+" is not yet supported");if(1===e)return "imod(resRC, "+t[0]+")";for(var n=["resRC.x","resRC.y","resRC.z","resRC.w","resRC.u"],r=[],o=0;o6)throw Error("Transpose for rank "+e+" is not yet supported");for(var n=["resRC.x","resRC.y","resRC.z","resRC.w","resRC.u","resRC.v"],r=new Array(e),o=0;o6)throw Error("Packed transpose for rank "+this.rank+" is not yet supported.");var o=Po(this.rank),a=Co("rc",this.rank),i=new Array(this.rank);for(r=0;r= 0.0) ? scale * x : scaleAlpha * (exp(x) - 1.0);\n";var qi="return exp(x);",Hi=Ui+"\n return sin(x);\n",$i=Ui+"\n return cos(x);\n",ji=Ui+"\n return atan(x);\n",Ki=Ui+"\n if (x < 1.0) return NAN;\n return log(x + sqrt(x * x - 1.0));",Xi=Ui+"\n if ((x < -1.0) || (x > 1.0)) return NAN;\n return (log(1.0 + x) - log(1.0 - x)) / 2.0;",Yi="return x;",Qi="\n vec4 result = x * vec4(greaterThanEqual(x, vec4(0.0)));\n bvec4 isNaN = isnan(x);\n\n result.r = isNaN.r ? x.r : result.r;\n result.g = isNaN.g ? x.g : result.g;\n result.b = isNaN.b ? x.b : result.b;\n result.a = isNaN.a ? x.a : result.a;\n\n return result;\n",Ji=function(){return function(t,e){this.variableNames=["A"],this.usesPackedTextures=!0,this.outputShape=t,this.userCode="\n vec4 unaryOperation(vec4 x) {\n "+e+"\n }\n\n void main() {\n vec4 x = getAAtOutCoords();\n vec4 y = unaryOperation(x);\n\n setOutput(y);\n }\n ";}}(),Zi=function(){return function(t){this.variableNames=["A"],this.usesPackedTextures=!0,this.outputShape=t;var e=t.length,n=Eo("rc",e),r=Po(e),o=function(t,e){if(1===t)return "rc";for(var n="",r=0;r0?this.gpgpu.beginQuery():{startMs:performance.now(),endMs:null}},t.prototype.endTimer=function(t){return s.getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")>0?(this.gpgpu.endQuery(),t):(t.endMs=performance.now(),t)},t.prototype.getQueryTime=function(t){return r(this,void 0,void 0,function(){var e;return o(this,function(n){return s.getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")>0?[2,this.gpgpu.waitForQueryAndGetTime(t)]:[2,(e=t).endMs-e.startMs]})})},t.prototype.disposeData=function(t){if(!this.pendingDisposal.has(t))if(this.pendingRead.has(t))this.pendingDisposal.add(t);else if(this.texData.has(t)){this.releaseGPUData(t);var e=this.texData.get(t).complexTensors;null!=e&&(e.real.dispose(),e.imag.dispose()),this.texData.delete(t);}},t.prototype.releaseGPUData=function(t){var e=this.texData.get(t),n=e.texture,r=e.dtype,o=e.texShape,a=e.usage,i=e.isPacked,s=e.slice,u=s&&s.origDataId||t,l=this.dataRefCount.get(u);l>1?this.dataRefCount.set(u,l-1):(this.dataRefCount.delete(u),null!=n&&(this.numBytesInGPU-=this.computeBytes(o,r),this.textureManager.releaseTexture(n,o,a,i)));var c=this.texData.get(t);c.texture=null,c.texShape=null,c.isPacked=!1,c.slice=null;},t.prototype.getTexture=function(t){return this.uploadToGPU(t),this.texData.get(t).texture},t.prototype.getCPUBackend=function(){return s.getBool("WEBGL_CPU_FORWARD")?(null==this.cpuBackend&&(this.cpuBackend=At.findBackend("cpu")),this.cpuBackend):null},t.prototype.shouldExecuteOnCPU=function(t,e){var n=this;return void 0===e&&(e=128),null!=this.getCPUBackend()&&t.every(function(t){return null==n.texData.get(t.dataId).texture&&t.sizes.getNumber("WEBGL_MAX_TEXTURES_IN_SHADER")){var n=Math.floor(t.length/2),r=this.concat(t.slice(0,n),e),o=this.concat(t.slice(n),e);return this.concat([r,o],e)}if(s.getBool("WEBGL_PACK_ARRAY_OPERATIONS")&&t[0].rank>1){var a=new na(t.map(function(t){return t.shape}),e);return this.compileAndRun(a,t)}var i=un(t.map(function(t){return t.shape}),e),u=t.map(function(t){return t.as2D(-1,y(t.shape.slice(e)))}),l=new ea(u.map(function(t){return t.shape}));return this.compileAndRun(l,u).reshape(i)},t.prototype.neg=function(t){var e=new Wi(t.shape,"return -x;");return this.compileAndRun(e,[t])},t.prototype.batchMatMul=function(t,e,n,r){var o=n?t.shape[2]:t.shape[1],a=r?e.shape[1]:e.shape[2],i=n?t.shape[1]:t.shape[2],s=t.shape[0];if((1===o||1===a)&&i>1e3){n&&(t=t.transpose([0,2,1])),r&&(e=e.transpose([0,2,1]));var u=1===a?t:t.as3D(s,i,1),l=1===a?2:1,c=1===a?e.as3D(s,1,i):e;return this.multiply(u,c).sum(l,!0)}var h=bt(t.dtype,e.dtype),p=new ui(t.shape,[s,o,a],n,r),f=this.makePackedTensor(p.outputShape,h);return this.compileAndRun(p,[t,e],f)},t.prototype.fusedBatchMatMul=function(t,e,n,r,o,a){var i=n?t.shape[2]:t.shape[1],s=r?e.shape[1]:e.shape[2],u=t.shape[0],l=bt(t.dtype,e.dtype),c=new ui(t.shape,[u,i,s],n,r,!!o,a?function(t,e){if(void 0===e&&(e=!1),"linear"===t)return e?Yi:zi;if("relu"===t)return e?Qi:Vi;throw new Error("Activation "+t+" has not been implemented for the WebGL backend.")}(a,!0):null),h=this.makePackedTensor(c.outputShape,l),p=[t,e];return o&&p.push(o),this.compileAndRun(c,p,h)},t.prototype.multiply=function(t,e){if("complex64"===t.dtype){var n=this.texData.get(t.dataId),r=this.texData.get(e.dataId),o=new $o(qo,t.shape,e.shape),a=new $o(Ho,t.shape,e.shape),i=[this.makeComplexComponentTensorHandle(t,n.complexTensors.real),this.makeComplexComponentTensorHandle(t,n.complexTensors.imag),this.makeComplexComponentTensorHandle(e,r.complexTensors.real),this.makeComplexComponentTensorHandle(e,r.complexTensors.imag)],u=this.compileAndRun(o,i),l=this.compileAndRun(a,i),c=this.complex(u,l);return u.dispose(),l.dispose(),c}if(this.shouldExecuteOnCPU([t,e]))return this.cpuBackend.multiply(t,e);if(s.getBool("WEBGL_PACK_BINARY_OPERATIONS"))return this.packedBinaryOp(t,e,Xo,t.dtype);var h=new Yo(Xo,t.shape,e.shape),p=this.makeOutputArray(h.outputShape,t.dtype);return this.compileAndRun(h,[t,e],p)},t.prototype.batchNormalization=function(t,e,n,r,o,a){var i=[t,e,n],u=null;null!=a&&(u=a.shape,i.push(a));var l=null;if(null!=o&&(l=o.shape,i.push(o)),s.getBool("WEBGL_PACK_NORMALIZATION")){var c=new Go(t.shape,e.shape,n.shape,u,l,r);return this.compileAndRun(c,i)}var h=new Vo(t.shape,e.shape,n.shape,u,l,r);return this.compileAndRun(h,i)},t.prototype.localResponseNormalization4D=function(t,e,n,r,o){var a=s.getBool("WEBGL_PACK_NORMALIZATION")?new ii(t.shape,e,n,r,o):new oi(t.shape,e,n,r,o);return this.compileAndRun(a,[t])},t.prototype.LRNGrad=function(t,e,n,r,o,a,i){var s=new ai(e.shape,r,o,a,i);return this.compileAndRun(s,[e,n,t])},t.prototype.tile=function(t,e){if("string"===t.dtype)return mo($n(t.shape,t.dtype,this.readSync(t.dataId)),e);var n=new Fi(t.shape,e);return this.compileAndRun(n,[t])},t.prototype.pad=function(t,e,n){var r=s.getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new fi(t.shape,e,n):new pi(t.shape,e,n);return this.compileAndRun(r,[t])},t.prototype.transpose=function(t,e){if(this.shouldExecuteOnCPU([t]))return this.cpuBackend.transpose(t,e);var n=s.getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new Bi(t.shape,e):new Mi(t.shape,e);return this.compileAndRun(n,[t])},t.prototype.gather=function(t,e,n){if(this.shouldExecuteOnCPU([t,e]))return this.cpuBackend.gather(t,e,n);var r=new Aa(t.shape,e.size,n);return this.compileAndRun(r,[t,e])},t.prototype.batchToSpaceND=function(t,e,n){d(t.rank<=4,function(){return "batchToSpaceND for rank > 4 with a WebGL backend not implemented yet"});var r=e.reduce(function(t,e){return t*e}),o=xr(t.shape,e,r),a=br(o.length,e.length),i=wr(t.shape,e,r),s=Cr(n,e.length),u=Er(i,n,e.length);return t.reshape(o).transpose(a).reshape(i).slice(s,u)},t.prototype.spaceToBatchND=function(t,e,n){d(t.rank<=4,function(){return "spaceToBatchND for rank > 4 with a WebGL backend not implemented yet"});var r=e.reduce(function(t,e){return t*e}),o=[[0,0]];o.push.apply(o,n);for(var a=1+e.length;ae||n===t?r=!0:n=V(t,n+1);return n}(i,o),u=new Ii({windowSize:s,inSize:i,batchSize:a,numSegments:o},e),l=u.outputShape,c=l[0],h=l[1],p=this.makeOutputArray([c,h],r);return this.compileAndRun(u,[t,n],p),p.shape[1]===o?p:(n=Sn(0,o).tile([i/s]),this.segOpCompute(p,e,n,r,o))},t.prototype.argMinMaxReduce=function(t,e,n){var r=[e];if(nn("arg"+n.charAt(0).toUpperCase()+n.slice(1),r,t.rank),!s.getBool("WEBGL_PACK_REDUCE")||t.rank<=2){var o=tn(t.shape,r),a=o[0],i=y(o[1]),u=t.as2D(-1,i);return this.argReduce(u,n).reshape(a)}return this.argReducePacked(t,n)},t.prototype.argMin=function(t,e){return this.argMinMaxReduce(t,e,"min")},t.prototype.argMax=function(t,e){return this.argMinMaxReduce(t,e,"max")},t.prototype.cumsum=function(t,e,n,r){if(e!==t.rank-1)throw new Error("WebGL cumsum shader expects an inner-most axis="+(t.rank-1)+" but got axis="+e);var o=new da(t.shape,n,r);return this.compileAndRun(o,[t])},t.prototype.equal=function(t,e){if(s.getBool("WEBGL_PACK_BINARY_OPERATIONS"))return this.packedBinaryOp(t,e,"\n return vec4(equal(a, b));\n","bool");var n=new Yo("return float(a == b);",t.shape,e.shape),r=this.makeOutputArray(n.outputShape,"bool");return this.compileAndRun(n,[t,e],r)},t.prototype.notEqual=function(t,e){if(s.getBool("WEBGL_PACK_BINARY_OPERATIONS"))return this.packedBinaryOp(t,e,"\n return vec4(notEqual(a, b));\n","bool");var n=new Yo("return float(a != b);",t.shape,e.shape),r=this.makeOutputArray(n.outputShape,"bool");return this.compileAndRun(n,[t,e],r)},t.prototype.less=function(t,e){if(this.shouldExecuteOnCPU([t,e]))return this.cpuBackend.less(t,e);if(s.getBool("WEBGL_PACK_BINARY_OPERATIONS"))return this.packedBinaryOp(t,e,"\n return vec4(lessThan(a, b));\n","bool");var n=new Yo("return float(a < b);",t.shape,e.shape),r=this.makeOutputArray(n.outputShape,"bool");return this.compileAndRun(n,[t,e],r)},t.prototype.lessEqual=function(t,e){if(s.getBool("WEBGL_PACK_BINARY_OPERATIONS"))return this.packedBinaryOp(t,e,"\n return vec4(lessThanEqual(a, b));\n","bool");var n=new Yo("return float(a <= b);",t.shape,e.shape),r=this.makeOutputArray(n.outputShape,"bool");return this.compileAndRun(n,[t,e],r)},t.prototype.greater=function(t,e){if(this.shouldExecuteOnCPU([t,e]))return this.cpuBackend.greater(t,e);if(s.getBool("WEBGL_PACK_BINARY_OPERATIONS"))return this.packedBinaryOp(t,e,"\n return vec4(greaterThan(a, b));\n","bool");var n=new Yo("return float(a > b);",t.shape,e.shape),r=this.makeOutputArray(n.outputShape,"bool");return this.compileAndRun(n,[t,e],r)},t.prototype.greaterEqual=function(t,e){if(s.getBool("WEBGL_PACK_BINARY_OPERATIONS"))return this.packedBinaryOp(t,e,"\n return vec4(greaterThanEqual(a, b));\n","bool");var n=new Yo("return float(a >= b);",t.shape,e.shape),r=this.makeOutputArray(n.outputShape,"bool");return this.compileAndRun(n,[t,e],r)},t.prototype.logicalNot=function(t){var e=new Wi(t.shape,"return float(!(x >= 1.0));");return this.compileAndRun(e,[t])},t.prototype.logicalAnd=function(t,e){if(s.getBool("WEBGL_PACK_BINARY_OPERATIONS"))return this.packedBinaryOp(t,e,"\n return vec4(\n vec4(greaterThanEqual(a, vec4(1.0))) *\n vec4(greaterThanEqual(b, vec4(1.0))));\n","bool");var n=new Yo("return float(a >= 1.0 && b >= 1.0);",t.shape,e.shape),r=this.makeOutputArray(n.outputShape,"bool");return this.compileAndRun(n,[t,e],r)},t.prototype.logicalOr=function(t,e){if(s.getBool("WEBGL_PACK_BINARY_OPERATIONS"))return this.packedBinaryOp(t,e,"\n return min(\n vec4(greaterThanEqual(a, vec4(1.0))) +\n vec4(greaterThanEqual(b, vec4(1.0))),\n vec4(1.0));\n","bool");var n=new Yo("return float(a >= 1.0 || b >= 1.0);",t.shape,e.shape),r=this.makeOutputArray(n.outputShape,"bool");return this.compileAndRun(n,[t,e],r)},t.prototype.select=function(t,e,n){var r=new Si(t.rank,e.shape,e.rank),o=this.makeOutputArray(r.outputShape,bt(e.dtype,n.dtype));return this.compileAndRun(r,[t,e,n],o)},t.prototype.where=function(t){je("tf.where() in webgl locks the UI thread. Call tf.whereAsync() instead");var e=t.dataSync();return yo(t.shape,e)},t.prototype.topk=function(t,e,n){return go(t.dataSync(),t.shape,t.dtype,e)},t.prototype.min=function(t,e){nn("min",e,t.rank);var n=tn(t.shape,e),r=n[0],o=y(n[1]),a=t.as2D(-1,o);return this.reduce(a,"min",a.dtype).reshape(r)},t.prototype.minimum=function(t,e){if(this.shouldExecuteOnCPU([t,e]))return this.cpuBackend.minimum(t,e);var n=s.getBool("WEBGL_PACK_BINARY_OPERATIONS")?new Qo("\n vec4 result = vec4(min(a, b));\n vec4 isNaN = min(vec4(isnan(a)) + vec4(isnan(b)), vec4(1.0));\n \n result.r = isNaN.r > 0. ? NAN : result.r;\n result.g = isNaN.g > 0. ? NAN : result.g;\n result.b = isNaN.b > 0. ? NAN : result.b;\n result.a = isNaN.a > 0. ? NAN : result.a;\n\n return result;\n",t.shape,e.shape):new Yo("\n if (isnan(a)) return a;\n if (isnan(b)) return b;\n\n return min(a, b);\n",t.shape,e.shape);return this.compileAndRun(n,[t,e])},t.prototype.mod=function(t,e){var n=s.getBool("WEBGL_PACK_BINARY_OPERATIONS")?new Qo("\n vec4 result = mod(a, b);\n vec4 isNaN = vec4(equal(b, vec4(0.0)));\n \n result.r = isNaN.r > 0. ? NAN : result.r;\n result.g = isNaN.g > 0. ? NAN : result.g;\n result.b = isNaN.b > 0. ? NAN : result.b;\n result.a = isNaN.a > 0. ? NAN : result.a;\n\n return result;\n",t.shape,e.shape):new Yo("if (b == 0.0) return NAN;\n return mod(a, b);",t.shape,e.shape);return this.compileAndRun(n,[t,e])},t.prototype.max=function(t,e){if(this.shouldExecuteOnCPU([t]))return this.cpuBackend.max(t,e);nn("max",e,t.rank);var n=tn(t.shape,e),r=n[0],o=y(n[1]),a=t.as2D(-1,o);return this.reduce(a,"max",a.dtype).reshape(r)},t.prototype.maximum=function(t,e){if(this.shouldExecuteOnCPU([t,e]))return this.cpuBackend.maximum(t,e);var n=s.getBool("WEBGL_PACK_BINARY_OPERATIONS")?new Qo("\n vec4 result = vec4(max(a, b));\n vec4 isNaN = min(vec4(isnan(a)) + vec4(isnan(b)), vec4(1.0));\n \n result.r = isNaN.r > 0. ? NAN : result.r;\n result.g = isNaN.g > 0. ? NAN : result.g;\n result.b = isNaN.b > 0. ? NAN : result.b;\n result.a = isNaN.a > 0. ? NAN : result.a;\n\n return result;\n",t.shape,e.shape):new Yo("\n if (isnan(a)) return a;\n if (isnan(b)) return b;\n\n return max(a, b);\n",t.shape,e.shape);return this.compileAndRun(n,[t,e])},t.prototype.all=function(t,e){nn("all",e,t.rank);var n=tn(t.shape,e),r=n[0],o=y(n[1]),a=t.as2D(-1,o);return this.reduce(a,"all",a.dtype).reshape(r)},t.prototype.any=function(t,e){nn("any",e,t.rank);var n=tn(t.shape,e),r=n[0],o=y(n[1]),a=t.as2D(-1,o);return this.reduce(a,"any",a.dtype).reshape(r)},t.prototype.squaredDifference=function(t,e){var n=s.getBool("WEBGL_PACK_BINARY_OPERATIONS")?new Qo("return (a - b) * (a - b);",t.shape,e.shape):new Yo("return (a - b) * (a - b);",t.shape,e.shape);return this.compileAndRun(n,[t,e])},t.prototype.realDivide=function(t,e){if(s.getBool("WEBGL_PACK_BINARY_OPERATIONS")){return this.packedBinaryOp(t,e,"\n // vec4 one = vec4(equal(a, b));\n // return one + (vec4(1.0) - one) * a / b;\n vec4 result = a / b;\n if(b.x == 0.0) {\n result.x = NAN;\n } else if(a.x == b.x) {\n result.x = 1.;\n }\n if(b.y == 0.0) {\n result.y = NAN;\n } else if(a.y == b.y) {\n result.y = 1.;\n }\n if(b.z == 0.0) {\n result.z = NAN;\n } else if(a.z == b.z) {\n result.z = 1.;\n }\n if(b.w == 0.0) {\n result.w = NAN;\n } else if(a.w == b.w) {\n result.w = 1.;\n }\n \n return result;\n","float32",!0)}var n=new Yo("\nif (b == 0.0) {\n return NAN;\n} \nif (a == b) {\n return 1.0;\n};\nreturn a / b;",t.shape,e.shape),r=this.makeOutputArray(n.outputShape,"float32");return this.compileAndRun(n,[t,e],r)},t.prototype.floorDiv=function(t,e){if(s.getBool("WEBGL_PACK_BINARY_OPERATIONS"))return this.packedBinaryOp(t,e,"\n ivec4 ia = round(a);\n ivec4 ib = round(b);\n bvec4 cond = notEqual(ib, ivec4(0));\n ivec4 result = ivec4(0);\n vec4 s = sign(a) * sign(b);\n\n // Windows (D3D) wants guaranteed non-zero int division at compile-time.\n if (cond[0]) {\n result[0] = idiv(ia[0], ib[0], s[0]);\n }\n if (cond[1]) {\n result[1] = idiv(ia[1], ib[1], s[1]);\n }\n if (cond[2]) {\n result[2] = idiv(ia[2], ib[2], s[2]);\n }\n if (cond[3]) {\n result[3] = idiv(ia[3], ib[3], s[3]);\n }\n return vec4(result);\n","int32");var n=new Yo("\n float s = sign(a) * sign(b);\n int ia = round(a);\n int ib = round(b);\n if (ib != 0) {\n // Windows (D3D) wants guaranteed non-zero int division at compile-time.\n return float(idiv(ia, ib, s));\n } else {\n return NAN;\n }\n",t.shape,e.shape),r=this.makeOutputArray(n.outputShape,"int32");return this.compileAndRun(n,[t,e],r)},t.prototype.add=function(t,e){if("complex64"===t.dtype&&"complex64"===e.dtype)return this.complexSeparableBinaryOp(t,e,jo);if(this.shouldExecuteOnCPU([t,e]))return this.cpuBackend.add(t,e);var n=bt(t.dtype,e.dtype);if(s.getBool("WEBGL_PACK_BINARY_OPERATIONS"))return this.packedBinaryOp(t,e,jo,n);var r=new Yo(jo,t.shape,e.shape),o=this.makeOutputArray(r.outputShape,n);return this.compileAndRun(r,[t,e],o)},t.prototype.packedBinaryOp=function(t,e,n,r,o){void 0===o&&(o=!1);var a=new Qo(n,t.shape,e.shape,o),i=this.makePackedTensor(a.outputShape,r);return this.compileAndRun(a,[t,e],i)},t.prototype.complexSeparableBinaryOp=function(t,e,n){var r=this,o=this.texData.get(t.dataId),a=this.texData.get(e.dataId),i=[[o.complexTensors.real,a.complexTensors.real],[o.complexTensors.imag,a.complexTensors.imag]].map(function(o){var a=o[0],i=o[1],s=r.makeComplexComponentTensorHandle(t,a),u=r.makeComplexComponentTensorHandle(e,i),l=new Yo(n,t.shape,e.shape),c=r.makeOutputArray(l.outputShape,bt(a.dtype,i.dtype));return r.compileAndRun(l,[s,u],c)}),s=i[0],u=i[1],l=this.complex(s,u);return s.dispose(),u.dispose(),l},t.prototype.makeComplexComponentTensorHandle=function(t,e){return {dataId:e.dataId,dtype:e.dtype,shape:t.shape}},t.prototype.addN=function(t){if(1===t.length)return t[0];if(t.length>s.get("WEBGL_MAX_TEXTURES_IN_SHADER")){var e=Math.floor(t.length/2),n=this.addN(t.slice(0,e)),r=this.addN(t.slice(e));return this.addN([n,r])}var o=t.map(function(t){return t.dtype}).reduce(function(t,e){return bt(t,e)}),a=t.map(function(t){return t.shape}),i=s.getBool("WEBGL_PACK"),u=i?new bo(t[0].shape,a):new xo(t[0].shape,a),l=i?this.makePackedTensor(u.outputShape,o):this.makeOutputArray(u.outputShape,o);return this.compileAndRun(u,t,l)},t.prototype.subtract=function(t,e){if("complex64"===t.dtype&&"complex64"===e.dtype)return this.complexSeparableBinaryOp(t,e,Ko);if(this.shouldExecuteOnCPU([t,e]))return this.cpuBackend.subtract(t,e);var n=bt(t.dtype,e.dtype);if(s.getBool("WEBGL_PACK_BINARY_OPERATIONS"))return this.packedBinaryOp(t,e,Ko,t.dtype);var r=new Yo(Ko,t.shape,e.shape),o=this.makeOutputArray(r.outputShape,n);return this.compileAndRun(r,[t,e],o)},t.prototype.pow=function(t,e){var n=s.getBool("WEBGL_PACK_BINARY_OPERATIONS"),r=n?new Qo("\n // isModRound1 has 1 for components with round(mod(b, 2.0)) == 1, 0 otherwise.\n vec4 isModRound1 = vec4(equal(round(mod(b, 2.0)), ivec4(1)));\n vec4 multiplier = sign(a) * isModRound1 + (vec4(1.0) - isModRound1);\n vec4 result = multiplier * pow(abs(a), b);\n\n vec4 isNaN = vec4(lessThan(a, vec4(0.0))) * vec4(lessThan(floor(b), b));\n \n result.r = isNaN.r > 0. ? NAN : result.r;\n result.g = isNaN.g > 0. ? NAN : result.g;\n result.b = isNaN.b > 0. ? NAN : result.b;\n result.a = isNaN.a > 0. ? NAN : result.a;\n\n return result;\n",t.shape,e.shape):new Yo("\nif(a < 0.0 && floor(b) < b){\n return NAN;\n}\nreturn (round(mod(b, 2.0)) != 1) ?\n pow(abs(a), b) : sign(a) * pow(abs(a), b);\n",t.shape,e.shape),o=bt(t.dtype,e.dtype),a=n?this.makePackedTensor(r.outputShape,o):this.makeOutputArray(r.outputShape,o);return this.compileAndRun(r,[t,e],a)},t.prototype.ceil=function(t){var e=new Wi(t.shape,"return ceil(x);");return this.compileAndRun(e,[t])},t.prototype.floor=function(t){var e=new Wi(t.shape,"return floor(x);");return this.compileAndRun(e,[t])},t.prototype.sign=function(t){var e=new Wi(t.shape,"\n if (isnan(x)) { return 0.0; }\n return sign(x);\n");return this.compileAndRun(e,[t])},t.prototype.isNaN=function(t){var e=new Wi(t.shape,"return float(isnan(x));"),n=this.makeOutputArray(e.outputShape,"bool");return this.compileAndRun(e,[t],n)},t.prototype.isInf=function(t){var e=new Wi(t.shape,"return float(isinf(x));"),n=this.makeOutputArray(e.outputShape,"bool");return this.compileAndRun(e,[t],n)},t.prototype.isFinite=function(t){var e=new Wi(t.shape,"return float(!isnan(x) && !isinf(x));"),n=this.makeOutputArray(e.outputShape,"bool");return this.compileAndRun(e,[t],n)},t.prototype.round=function(t){var e=new Wi(t.shape,"\n // OpenGL ES does not support round function.\n // The algorithm is based on banker's rounding.\n float base = floor(x);\n if ((x - base) < 0.5) {\n return floor(x);\n } else if ((x - base) > 0.5) {\n return ceil(x);\n } else {\n if (mod(base, 2.0) == 0.0) {\n return base;\n } else {\n return base + 1.0;\n }\n }\n");return this.compileAndRun(e,[t])},t.prototype.exp=function(t){var e;return e=s.getBool("WEBGL_PACK")?new Ji(t.shape,qi):new Wi(t.shape,qi),this.compileAndRun(e,[t])},t.prototype.expm1=function(t){var e=new Wi(t.shape,"return exp(x) - 1.0;");return this.compileAndRun(e,[t])},t.prototype.log=function(t){var e;return e=s.getBool("WEBGL_PACK")?new Ji(t.shape,"\n vec4 result = log(x);\n vec4 isNaN = vec4(lessThan(x, vec4(0.0)));\n result.r = isNaN.r == 1.0 ? NAN : result.r;\n result.g = isNaN.g == 1.0 ? NAN : result.g;\n result.b = isNaN.b == 1.0 ? NAN : result.b;\n result.a = isNaN.a == 1.0 ? NAN : result.a;\n\n return result;\n"):new Wi(t.shape,"if (x < 0.0) return NAN;\n return log(x);"),this.compileAndRun(e,[t])},t.prototype.log1p=function(t){var e=new Wi(t.shape,"return log(1.0 + x);");return this.compileAndRun(e,[t])},t.prototype.sqrt=function(t){var e=new Wi(t.shape,"return sqrt(x);");return this.compileAndRun(e,[t])},t.prototype.rsqrt=function(t){if(this.shouldExecuteOnCPU([t]))return this.cpuBackend.rsqrt(t);var e=new Wi(t.shape,"return inversesqrt(x);");return this.compileAndRun(e,[t])},t.prototype.square=function(t){var e=new Wi(t.shape,"return x * x;");return this.compileAndRun(e,[t])},t.prototype.reciprocal=function(t){var e=new Wi(t.shape,"return 1.0 / x;");return this.compileAndRun(e,[t])},t.prototype.relu=function(t){var e;return e=s.getBool("WEBGL_PACK")?new Ji(t.shape,Qi):new Wi(t.shape,Vi),this.compileAndRun(e,[t])},t.prototype.prelu=function(t,e){var n=s.getBool("WEBGL_PACK_BINARY_OPERATIONS")?new Qo("\n vec4 aLessThanZero = vec4(lessThan(a, vec4(0.)));\n return (aLessThanZero * (b * a)) + ((vec4(1.0) - aLessThanZero) * a);\n",t.shape,e.shape):new Yo("return (a < 0.) ? b * a : a;",t.shape,e.shape);return this.compileAndRun(n,[t,e])},t.prototype.elu=function(t){var e=new Wi(t.shape,"return (x >= 0.0) ? x : (exp(x) - 1.0);");return this.compileAndRun(e,[t])},t.prototype.eluDer=function(t,e){var n=s.getBool("WEBGL_PACK_BINARY_OPERATIONS")?new Qo("\n vec4 bGTEZero = vec4(greaterThanEqual(b, vec4(0.)));\n return (bGTEZero * a) + ((vec4(1.0) - bGTEZero) * (a * (b + vec4(1.0))));\n",t.shape,e.shape):new Yo("return (b >= 1.0) ? a : a * (b + 1.0);",t.shape,e.shape);return this.compileAndRun(n,[t,e])},t.prototype.selu=function(t){var e=new Wi(t.shape,Gi);return this.compileAndRun(e,[t])},t.prototype.int=function(t){var e=new Wi(t.shape,"return float(int(x));"),n=this.makeOutputArray(e.outputShape,"int32");return this.compileAndRun(e,[t],n)},t.prototype.clip=function(t,e,n){var r,o=(r=s.getBool("WEBGL_PACK_CLIP")?new Zo(t.shape):new Jo(t.shape)).getCustomSetupFunc(e,n);return this.compileAndRun(r,[t],null,o)},t.prototype.abs=function(t){var e=new Wi(t.shape,"return abs(x);");return this.compileAndRun(e,[t])},t.prototype.complexAbs=function(t){var e=this.texData.get(t.dataId),n=new ta(t.shape),r=[this.makeComplexComponentTensorHandle(t,e.complexTensors.real),this.makeComplexComponentTensorHandle(t,e.complexTensors.imag)];return this.compileAndRun(n,r)},t.prototype.sigmoid=function(t){var e=new Wi(t.shape,"return 1.0 / (1.0 + exp(-1.0 * x));");return this.compileAndRun(e,[t])},t.prototype.softplus=function(t){var e=new Wi(t.shape,"\n float epsilon = 1.1920928955078125e-7;\n float threshold = log(epsilon) + 2.0;\n\n bool too_large = x > -threshold;\n bool too_small = x < threshold;\n\n float result;\n float exp_x = exp(x);\n\n if (too_large){\n result = x;\n }\n else if (too_small){\n result = exp_x;\n }\n else{\n result = log(exp_x + 1.0);\n }\n return result;\n");return this.compileAndRun(e,[t])},t.prototype.sin=function(t){var e=new Wi(t.shape,Hi);return this.compileAndRun(e,[t])},t.prototype.cos=function(t){var e=new Wi(t.shape,$i);return this.compileAndRun(e,[t])},t.prototype.tan=function(t){var e=new Wi(t.shape,"return tan(x);");return this.compileAndRun(e,[t])},t.prototype.asin=function(t){var e=new Wi(t.shape,"return asin(x);");return this.compileAndRun(e,[t])},t.prototype.acos=function(t){var e=new Wi(t.shape,"return acos(x);");return this.compileAndRun(e,[t])},t.prototype.atan=function(t){var e=new Wi(t.shape,ji);return this.compileAndRun(e,[t])},t.prototype.atan2=function(t,e){var n=s.getBool("WEBGL_PACK_BINARY_OPERATIONS")?new Qo("\n vec4 result = atan(a, b);\n vec4 isNaN = min(vec4(isnan(a)) + vec4(isnan(b)), vec4(1.0));\n \n result.r = isNaN.r > 0. ? NAN : result.r;\n result.g = isNaN.g > 0. ? NAN : result.g;\n result.b = isNaN.b > 0. ? NAN : result.b;\n result.a = isNaN.a > 0. ? NAN : result.a;\n\n return result;\n",t.shape,e.shape):new Yo("\n if (isnan(a)) return a;\n if (isnan(b)) return b;\n\n return atan(a, b);\n",t.shape,e.shape);return this.compileAndRun(n,[t,e])},t.prototype.sinh=function(t){var e=new Wi(t.shape,"\n float e2x = exp(x);\n return (e2x - 1.0 / e2x) / 2.0;\n");return this.compileAndRun(e,[t])},t.prototype.cosh=function(t){var e=new Wi(t.shape,"\n float e2x = exp(-x);\n return (e2x + 1.0 / e2x) / 2.0;\n");return this.compileAndRun(e,[t])},t.prototype.tanh=function(t){var e=new Wi(t.shape,"\n float e2x = exp(-2.0 * abs(x));\n return sign(x) * (1.0 - e2x) / (1.0 + e2x);\n");return this.compileAndRun(e,[t])},t.prototype.asinh=function(t){var e=new Wi(t.shape,"return log(x + sqrt(x * x + 1.0));");return this.compileAndRun(e,[t])},t.prototype.acosh=function(t){var e=new Wi(t.shape,Ki);return this.compileAndRun(e,[t])},t.prototype.atanh=function(t){var e=new Wi(t.shape,Xi);return this.compileAndRun(e,[t])},t.prototype.erf=function(t){var e=new Wi(t.shape,'\n // Error function is calculated approximately with elementary function.\n // See "Handbook of Mathematical Functions with Formulas,\n // Graphs, and Mathematical Tables", Abramowitz and Stegun.\n float p = 0.3275911;\n float a1 = 0.254829592;\n float a2 = -0.284496736;\n float a3 = 1.421413741;\n float a4 = -1.453152027;\n float a5 = 1.061405429;\n\n float t = 1.0 / (1.0 + p * x);\n return 1.0 - (((((a5*t + a4)*t) + a3)*t + a2)*t + a1)*t*exp(-x*x);\n');return this.compileAndRun(e,[t])},t.prototype.step=function(t,e){var n=new Wi(t.shape,function(t){return void 0===t&&(t=0),Ui+"\n return x > 0.0 ? 1.0 : float("+t+");\n "}(e));return this.compileAndRun(n,[t])},t.prototype.conv2dByMatMul=function(t,e,n){var r=t.shape,o=this.texData.get(t.dataId),a=n.inChannels,i=r[0]*r[1]*r[2],u=n.outChannels,l=(1===i||1===u)&&a>1e3,c=r[2]%2!=0&&!!o.isPacked;if(l||!s.getBool("WEBGL_LAZILY_UNPACK")||!s.getBool("WEBGL_PACK_BINARY_OPERATIONS")||!c){var h=this.reshape(t,[1,r[0]*r[1]*r[2],n.inChannels]),p=this.reshape(e,[1,n.inChannels,n.outChannels]);return this.reshape(this.batchMatMul(h,p,!1,!1),n.outShape)}var f=ht.make([1,r[0]*r[1]*(r[2]+1),n.inChannels],{dataId:t.dataId},t.dtype,this),v=o.shape;o.shape=o.shape.slice(),o.shape[o.shape.length-2]++,d(me(o.shape,f.shape),function(){return "packed reshape "+o.shape+" to "+f.shape+" isn't free"});var m=this.reshape(e,[1,n.inChannels,n.outChannels]),g=this.batchMatMul(f,m,!1,!1),y=this.texData.get(g.dataId);return d(y.isPacked,function(){return "batchMatMul result is expected to be packed"}),o.shape=v,y.shape=n.outShape,ht.make(n.outShape,{dataId:g.dataId},g.dtype,this)},t.prototype.conv2dWithIm2Row=function(t,e,n){var r=n.filterWidth,o=n.filterHeight,a=n.inChannels,i=n.outWidth,s=n.outHeight,u=r*o*a,l=s*i,c=[u,l],h=t.squeeze([0]),p=e.reshape([1,u,-1]),f=new ri(c,h.shape,n),d=this.compileAndRun(f,[h]).reshape([1,c[0],c[1]]),v=new ui(d.shape,[1,l,n.outChannels],!0,!1);return this.compileAndRun(v,[d,p]).reshape([1,s,i,n.outChannels])},t.prototype.conv2d=function(t,e,n){if(1===n.filterHeight&&1===n.filterWidth&&1===n.dilationHeight&&1===n.dilationWidth&&1===n.strideHeight&&1===n.strideWidth&&("SAME"===n.padInfo.type||"VALID"===n.padInfo.type))return this.conv2dByMatMul(t,e,n);if(s.getBool("WEBGL_CONV_IM2COL")&&1===t.shape[0])return this.conv2dWithIm2Row(t,e,n);var r=new la(n);return this.compileAndRun(r,[t,e])},t.prototype.conv2dDerInput=function(t,e,n){var r=new oa(n);return this.compileAndRun(r,[t,e])},t.prototype.conv2dDerFilter=function(t,e,n){var r=new ra(n);return this.compileAndRun(r,[t,e])},t.prototype.depthwiseConv2D=function(t,e,n){var r;return s.getBool("WEBGL_PACK_DEPTHWISECONV")&&n.strideWidth<=2&&n.outChannels/n.inChannels==1?(r=new pa(n),this.compileAndRun(r,[t,e],this.makePackedTensor(n.outShape,t.dtype))):(r=new ha(n),this.compileAndRun(r,[t,e]))},t.prototype.depthwiseConv2DDerInput=function(t,e,n){var r=new ua(n);return this.compileAndRun(r,[t,e])},t.prototype.depthwiseConv2DDerFilter=function(t,e,n){var r=new sa(n);return this.compileAndRun(r,[t,e])},t.prototype.conv3d=function(t,e,n){var r=new ca(n);return this.compileAndRun(r,[t,e])},t.prototype.conv3dDerInput=function(t,e,n){var r=new ia(n);return this.compileAndRun(r,[t,e])},t.prototype.conv3dDerFilter=function(t,e,n){var r=new aa(n);return this.compileAndRun(r,[t,e])},t.prototype.maxPool=function(t,e){var n=new di(e,"max",!1),r=this.makeOutputArray(n.outputShape,t.dtype);return this.compileAndRun(n,[t],r)},t.prototype.avgPool=function(t,e){var n=new di(e,"avg",!1),r=this.makeOutputArray(n.outputShape,"float32");return this.compileAndRun(n,[t],r)},t.prototype.maxPoolBackprop=function(t,e,n,r){var o=new di(r,"max",!0),a=this.compileAndRun(o,[e]),i=new si(r),s=this.makeOutputArray(i.outputShape,e.dtype),u=this.compileAndRun(i,[t,a],s);return a.dispose(),u},t.prototype.avgPoolBackprop=function(t,e,n){var r=new zo(n),o=this.makeOutputArray(r.outputShape,e.dtype);return this.compileAndRun(r,[t],o)},t.prototype.cast=function(t,e){return oo(t,e,this)},t.prototype.unstack=function(t,e){for(var n=t.shape[e],r=new Array(t.rank-1),o=0,a=0;a1,function(){return "blockSize should be > 1 for depthToSpace, but was: "+e});var r=t.shape[0],o="NHWC"===n?t.shape[1]:t.shape[2],a="NHWC"===n?t.shape[2]:t.shape[3],i="NHWC"===n?t.shape[3]:t.shape[1],s=o*e,u=a*e,l=i/(e*e),c=new ya("NHWC"===n?[r,s,u,l]:[r,l,s,u],e,n);return this.compileAndRun(c,[t])},t.prototype.split=function(t,e,n){return vo(t,e,n)},t.prototype.scatterND=function(t,e,n){var r=kr(0,t,n),o=r.sliceRank,a=r.numUpdates,i=r.sliceSize,s=r.strides,u=r.outputSize,l=[u/i,i],c=t.reshape([a,o]),h=e.reshape([a,i]);if(0===u)return ao(fn([]),n);var p=vn(0),f=new Ri(a,o,c.rank,h.rank,s,l);return this.compileAndRun(f,[h,c,p]).reshape(n)},t.prototype.sparseToDense=function(t,e,n,r){var o=kr(0,t,n),a=o.sliceRank,i=o.numUpdates,s=o.strides,u=o.outputSize,l=new Ri(i,a,t.rank,e.rank,s,[u,1],!1);return this.compileAndRun(l,[e,t,r]).reshape(n)},t.prototype.fft=function(t){return this.fftImpl(t,!1)},t.prototype.ifft=function(t){return this.fftImpl(t,!0)},t.prototype.fftImpl=function(t,e){var n=this.texData.get(t.dataId),r=new Ia(Ea,t.shape,e),o=new Ia(Ra,t.shape,e),a=[this.makeComplexComponentTensorHandle(t,n.complexTensors.real),this.makeComplexComponentTensorHandle(t,n.complexTensors.imag)],i=this.compileAndRun(r,a),s=this.compileAndRun(o,a),u=this.complex(i,s).as2D(t.shape[0],t.shape[1]);return i.dispose(),s.dispose(),u},t.prototype.gatherND=function(t,e){var n=e.shape,r=n[n.length-1],o=Rr(t,e),a=o[0],i=o[1],s=o[2],u=o[3],l=e.reshape([i,r]),c=t.reshape([t.size/s,s]),h=new _a(r,u,[i,s]);return this.compileAndRun(h,[c,l]).reshape(a)},t.prototype.fill=function(t,e,n){if("string"===(n=n||U(e))){var r=A(n,y(t));return r.fill(e),ht.make(t,{values:r},n)}var o=new Sa(t,e),a=o.getCustomSetupFunc(e),i=this.makeOutputArray(t,n);return this.compileAndRun(o,[],i,a)},t.prototype.onesLike=function(t){if("string"===t.dtype)throw new Error("onesLike is not supported under string dtype");return this.fill(t.shape,1,t.dtype)},t.prototype.zerosLike=function(t){return this.fill(t.shape,"string"===t.dtype?"":0,t.dtype)},t.prototype.linspace=function(t,e,n){return io(t,e,n)},t.prototype.makeOutputArray=function(t,e){return ht.make(t,{},e,this)},t.prototype.makePackedTensor=function(t,e){var n=ht.make(t,{},e,this);return this.texData.get(n.dataId).isPacked=!0,n},t.prototype.unpackTensor=function(t){var e=new Zi(t.shape);return this.compileAndRun(e,[t],ht.make(e.outputShape,{},t.dtype,this))},t.prototype.packTensor=function(t){var e=new hi(t.shape);return this.compileAndRun(e,[t],this.makePackedTensor(t.shape,t.dtype),null,!0)},t.prototype.packedReshape=function(t,e){var n=t.reshape([he(t.shape)].concat(pe(t.shape))),r=[he(e)].concat(pe(e)),o=new mi(r,n.shape);return this.compileAndRun(o,[n]).reshape(e)},t.prototype.decode=function(t){var e,n=this.texData.get(t),r=n.isPacked,o=n.shape,a=n.dtype,i=fe(o),s=Fa(o),u=this.makeTensorHandle(o,"float32");return this.texData.get(u.dataId).isPacked=!0,this.texData.get(u.dataId).dtype=a,this.texData.get(u.dataId).texShape=s.map(function(t){return 2*t}),e=r?new ga(i,s):new ma(i,s),this.compileAndRun(e,[{shape:i,dtype:a,dataId:t}],u,null,!0),u},t.prototype.compileAndRun=function(t,e,n,r,o){var a=this;if(void 0===o&&(o=!1),null==n&&(n=t.usesPackedTextures?this.makePackedTensor(t.outputShape,e[0].dtype):this.makeOutputArray(t.outputShape,e[0].dtype)),0===n.size)return this.texData.get(n.dataId).values=k(n.dtype,0),n;var i=e.map(function(e){if("complex64"===e.dtype)throw new Error("GPGPUProgram does not support complex64 input. For complex64 dtypes, please separate the program into real and imaginary parts.");var n=a.texData.get(e.dataId);if(null==n.texture){if(!t.usesPackedTextures&&y(e.shape)<=s.getNumber("WEBGL_SIZE_UPLOAD_UNIFORM"))return {shape:e.shape,texData:null,isUniform:!0,uniformValues:n.values};t.usesPackedTextures&&(n.isPacked=!0,n.shape=e.shape);}else if(!!n.isPacked!=!!t.usesPackedTextures)e=n.isPacked?a.unpackTensor(e):a.packTensor(e),n=a.texData.get(e.dataId);else if(n.isPacked&&!me(n.shape,e.shape)){var r=e,o=e.shape;e.shape=n.shape,e=a.packedReshape(e,o),n=a.texData.get(e.dataId),r.shape=o;}return a.uploadToGPU(e.dataId),{shape:e.shape,texData:n,isUniform:!1}});this.uploadToGPU(n.dataId);var u,l={shape:n.shape,texData:this.texData.get(n.dataId),isUniform:!1},c=function(t,e,n){var r="";e.concat(n).forEach(function(t){var e=null!=t.texData&&null!=t.texData.slice&&t.texData.slice.flatOffset>0,n=t.isUniform?"uniform":t.texData.texShape;r+=t.shape+"_"+n+"_"+e;});var o=t.userCode,a=t.constructor.name;return a+="_"+r+"_"+o}(t,i,l),h=this.getAndSaveBinary(c,function(){return function(t,e,n,r){var o=e.userCode,a=n.map(function(t,n){var r={logicalShape:t.shape,texShape:t.isUniform?null:t.texData.texShape,isUniform:t.isUniform,isPacked:!t.isUniform&&t.texData.isPacked,flatOffset:null};return null!=t.texData&&null!=t.texData.slice&&t.texData.slice.flatOffset>0&&(r.flatOffset=t.texData.slice.flatOffset),{name:e.variableNames[n],shapeInfo:r}}),i=a.map(function(t){return t.shapeInfo}),u={logicalShape:r.shape,texShape:r.texData.texShape,isUniform:!1,isPacked:r.texData.isPacked,flatOffset:null},l=ko(a,u,o,e.usesPackedTextures),c=t.createProgram(l),h=null,p=t.getUniformLocation(c,"NAN",!1);1===s.getNumber("WEBGL_VERSION")&&(h=t.getUniformLocation(c,"INFINITY",!1));for(var f={},d=0;d0?32:16})),this.floatPrecisionValue},t.prototype.epsilon=function(){return 32===this.floatPrecision()?1e-7:1e-4},t.prototype.uploadToGPU=function(t){var e,n=this.texData.get(t),r=n.shape,o=n.dtype,a=n.values,i=n.texture,s=n.usage,u=n.isPacked;if(null==i){var l,c=null!=this.activeTimers;c&&(l=performance.now());var h=n.texShape;if(null==h&&(h=de(r,u),n.texShape=h),null!=a){var p=fe(r),f=void 0,d=h[1],v=h[0],m=a instanceof Uint8Array;u?(d=(e=Ma(h[0],h[1]))[0],v=e[1],f=new Ca(p,[v,d],m)):f=new wa(p,[v,d],m);var g=this.makeTensorHandle([v,d],o);this.texData.get(g.dataId).usage=m?Ta.PIXELS:Ta.UPLOAD,this.gpgpu.uploadDenseMatrixToTexture(this.getTexture(g.dataId),d,v,a);var x=this.makeTensorHandle(f.outputShape,g.dtype);x.size=y(f.outputShape),this.texData.get(x.dataId).isPacked=u,this.compileAndRun(f,[g],x);var b=this.texData.get(x.dataId);n.texture=b.texture,n.texShape=b.texShape,n.isPacked=b.isPacked,n.usage=b.usage,this.disposeData(g.dataId),this.texData.delete(x.dataId),n.values=null,c&&(this.uploadWaitMs+=performance.now()-l);}else{var w=this.acquireTexture(h,s,o,u);n.texture=w;}}},t.prototype.convertAndCacheOnCPU=function(t,e){var n=this.texData.get(t),r=n.dtype;return this.releaseGPUData(t),null!=e&&(n.values=function(t,e){if("float32"===e||"complex64"===e)return t;if("int32"===e||"bool"===e){for(var n="int32"===e?new Int32Array(t.length):new Uint8Array(t.length),r=0;r1024*this.numMBBeforeWarning*1024){var o=(this.numBytesInGPU/1024/1024).toFixed(2);this.warnedAboutMemory=!0,console.warn("High memory usage in GPU: "+o+" MB, most likely due to a memory leak");}return this.textureManager.acquireTexture(t,e,r)},t.prototype.computeBytes=function(t,e){return t[0]*t[1]*M(e)},t}();Tt()&&At.registerBackend("webgl",function(){return new ns},2);var rs=ln({abs_:function(t){var e=Ye(t,"x","abs");return "complex64"===e.dtype?At.runKernel(function(t){return t.complexAbs(e)},{$x:e}):At.runKernel(function(t,n){var r=t.abs(e);return n([e]),r},{$x:e},function(t,e){var n=e[0];return {$x:function(){return t.mul(n.toFloat().step(-1))}}})}}),os=ln({acos_:function(t){var e=Ye(t,"x","acos");return At.runKernel(function(t,n){var r=t.acos(e);return n([e]),r},{$x:e},function(t,e){var n=e[0];return {$x:function(){return t.divStrict(vn(1).sub(n.toFloat().square()).sqrt()).neg()}}})}}),as=ln({acosh_:function(t){var e=Ye(t,"x","acosh");return At.runKernel(function(t,n){var r=t.acosh(e);return n([e]),r},{$x:e},function(t,e){var n=e[0];return {$x:function(){return t.divStrict(n.toFloat().square().sub(1).sqrt())}}})}}),is=ln({asin_:function(t){var e=Ye(t,"x","asin");return At.runKernel(function(t,n){var r=t.asin(e);return n([e]),r},{$x:e},function(t,e){var n=e[0];return {$x:function(){return t.divStrict(vn(1).sub(n.toFloat().square()).sqrt())}}})}}),ss=ln({asinh_:function(t){var e=Ye(t,"x","asinh");return At.runKernel(function(t,n){var r=t.asinh(e);return n([e]),r},{$x:e},function(t,e){var n=e[0];return {$x:function(){return t.divStrict(vn(1).add(n.toFloat().square()).sqrt())}}})}}),us=ln({atan_:function(t){var e=Ye(t,"x","atan");return At.runKernel(function(t,n){var r=t.atan(e);return n([e]),r},{$x:e},function(t,e){var n=e[0];return {$x:function(){return t.div(n.toFloat().square().add(1))}}})}}),ls=ln({atanh_:function(t){var e=Ye(t,"x","atanh");return At.runKernel(function(t,n){var r=t.atanh(e);return n([e]),r},{$x:e},function(t,e){var n=e[0];return {$x:function(){return t.div(vn(1).sub(n.toFloat().square()))}}})}}),cs=ln({ceil_:function(t){var e=Ye(t,"x","ceil");return At.runKernel(function(t){return t.ceil(e)},{$x:e},function(t){return {$x:function(){return kn(t)}}})}}),hs=ln({clipByValue_:function(t,e,n){var r=Ye(t,"x","clipByValue");return d(e<=n,function(){return "Error in clip: min ("+e+") must be less than or equal to max ("+n+")."}),At.runKernel(function(t,o){var a=t.clip(r,e,n);return o([r]),a},{$x:r},function(t,r){var o=r[0];return {$x:function(){return t.where(o.greaterEqual(e).logicalAnd(o.lessEqual(n)),kn(t))}}})}}),ps=ln({cos_:function(t){var e=Ye(t,"x","cos");return At.runKernel(function(t,n){var r=t.cos(e);return n([e]),r},{$x:e},function(t,e){var n=e[0];return {$x:function(){return n.toFloat().sin().neg().mul(t)}}})}}),fs=ln({cosh_:function(t){var e=Ye(t,"x","cosh");return At.runKernel(function(t,n){var r=t.cosh(e);return n([e]),r},{$x:e},function(t,e){var n=e[0];return {$x:function(){return n.toFloat().sinh().mulStrict(t)}}})}}),ds=ln({erf_:function(t){var e=Ye(t,"x","erf");return d("int32"===e.dtype||"float32"===e.dtype,function(){return "Input dtype must be `int32` or `float32`."}),"int32"===e.dtype&&(e=e.toFloat()),At.runKernel(function(t,n){var r=t.erf(e);return n([e]),r},{$x:e},function(t,e){var n=e[0];return {$x:function(){return t.mul(n.square().neg().exp().mul(2/Math.sqrt(Math.PI)))}}})}}),vs=ln({exp_:function(t){var e=Ye(t,"x","exp");return At.runKernel(function(t,n){var r=t.exp(e);return n([r]),r},{$x:e},function(t,e){return {$x:function(){return t.mulStrict(e[0])}}})}}),ms=ln({expm1_:function(t){var e=Ye(t,"x","expm1");return At.runKernel(function(t,n){var r=t.expm1(e);return n([e]),r},{$x:e},function(t,e){var n=e[0];return {$x:function(){return t.mul(n.exp())}}})}}),gs=ln({floor_:function(t){var e=Ye(t,"x","floor");return At.runKernel(function(t){return t.floor(e)},{$x:e},function(t){return {$x:function(){return kn(t)}}})}}),ys=ln({log_:function(t){var e=Ye(t,"x","log");return At.runKernel(function(t,n){var r=t.log(e);return n([e]),r},{$x:e},function(t,e){var n=e[0];return {$x:function(){return t.div(n.toFloat())}}})}}),xs=ln({log1p_:function(t){var e=Ye(t,"x","log1p");return At.runKernel(function(t,n){var r=t.log1p(e);return n([e]),r},{$x:e},function(t,e){var n=e[0];return {$x:function(){return t.div(n.add(1))}}})}}),bs=ln({logSigmoid_:function(t){var e=Ye(t,"x","logSigmoid");return At.runKernel(function(t,n){var r=t.softplus(e.neg()).neg();return n([e]),r},{$x:e},function(t,e){var n=e[0];return {$x:function(){return t.mul(n.neg().sigmoid())}}})}}),ws=ln({neg_:function(t){var e=Ye(t,"x","neg");return At.runKernel(function(t){return t.neg(e)},{$x:e},function(t){return {$x:function(){return t.neg()}}})}}),Cs=ln({reciprocal_:function(t){var e=Ye(t,"x","reciprocal");return At.runKernel(function(t,n){var r=t.reciprocal(e);return n([e]),r},{$x:e},function(t,e){var n=e[0];return {$x:function(){return t.div(n.square().neg())}}})}}),Es=ln({round_:function(t){var e=Ye(t,"x","round");return At.runKernel(function(t){return t.round(e)},{$x:e},function(t){return {$x:function(){return kn(t)}}})}}),Rs=ln({rsqrt_:function(t){var e=Ye(t,"x","rsqrt");return At.runKernel(function(t,n){var r=t.rsqrt(e);return n([e]),r},{$x:e},function(t,e){var n=e[0];return {$x:function(){return t.div(n.pow(1.5).mul(2)).neg()}}})}}),Is=ln({sigmoid_:function(t){var e=Ye(t,"x","sigmoid");return At.runKernel(function(t,n){var r=t.sigmoid(e);return n([r]),r},{$x:e},function(t,e){var n=e[0];return {$x:function(){return t.mul(n.mul(vn(1).sub(n)))}}})}}),Ss=ln({sign_:function(t){var e=Ye(t,"x","sign");return At.runKernel(function(t){return t.sign(e)},{$x:e},function(t){return {$x:function(){return kn(t)}}})}}),Ns=ln({isNaN_:function(t){var e=Ye(t,"x","isNaN");return At.runKernel(function(t){return t.isNaN(e)},{$x:e},function(t){return {$x:function(){return kn(t)}}})}}),ks=ln({isInf_:function(t){var e=Ye(t,"x","isInf");return At.runKernel(function(t){return t.isInf(e)},{$x:e},function(t){return {$x:function(){return kn(t)}}})}}),As=ln({isFinite_:function(t){var e=Ye(t,"x","isFinite");return At.runKernel(function(t){return t.isFinite(e)},{$x:e},function(t){return {$x:function(){return kn(t)}}})}}),Ts=ln({sin_:function(t){var e=Ye(t,"x","sin");return At.runKernel(function(t,n){var r=t.sin(e);return n([e]),r},{$x:e},function(t,e){var n=e[0];return {$x:function(){return n.toFloat().cos().mul(t)}}})}}),Ds=ln({sinh_:function(t){var e=Ye(t,"x","sinh");return At.runKernel(function(t,n){var r=t.sinh(e);return n([e]),r},{$x:e},function(t,e){var n=e[0];return {$x:function(){return n.toFloat().cosh().mulStrict(t)}}})}}),_s=ln({softplus_:function(t){var e=Ye(t,"x","softplus");return At.runKernel(function(t,n){var r=t.softplus(e);return n([e]),r},{$x:e},function(t,e){var n=e[0];return {$x:function(){return t.mul(n.sigmoid())}}})}}),Os=ln({sqrt_:function(t){var e=Ye(t,"x","sqrt");return At.runKernel(function(t,n){var r=t.sqrt(e);return n([e]),r},{$x:e},function(t,e){var n=e[0];return {$x:function(){return t.div(n.toFloat().sqrt().mul(2))}}})}}),Fs=ln({square_:function(t){var e=Ye(t,"x","square");return At.runKernel(function(t,n){return n([e]),t.square(e)},{$x:e},function(t,e){var n=e[0];return {$x:function(){return t.mul(n.toFloat().mul(2))}}})}}),Ms=ln({step_:function(t,e){void 0===e&&(e=0);var n=Ye(t,"x","step");return At.runKernel(function(t){return t.step(n,e)},{$x:n},function(t){return {$x:function(){return kn(t)}}})}}),Bs=ln({tan_:function(t){var e=Ye(t,"x","tan");return At.runKernel(function(t,n){var r=t.tan(e);return n([e]),r},{$x:e},function(t,e){var n=e[0];return {$x:function(){return t.div(n.cos().square())}}})}}),Ps=ln({tanh_:function(t){var e=Ye(t,"x","tanh");return At.runKernel(function(t,n){var r=t.tanh(e);return n([r]),r},{$x:e},function(t,e){var n=e[0];return {$x:function(){return vn(1).sub(n.square()).mulStrict(t)}}})}});function Ls(t,e,n,r,o,a){var i,s,u=Ye(t,"x","batchNorm"),l=Ye(e,"mean","batchNorm"),c=Ye(n,"variance","batchNorm");return null!=o&&(i=Ye(o,"scale","batchNorm")),null!=r&&(s=Ye(r,"offset","batchNorm")),d(2===u.rank,function(){return "Error in batchNorm3D: x must be rank 3 but got rank "+u.rank+"."}),d(2===l.rank||1===l.rank,function(){return "Error in batchNorm2D: mean must be rank 2 or rank 1 but got rank "+l.rank+"."}),d(2===c.rank||1===c.rank,function(){return "Error in batchNorm2D: variance must be rank 2 or rank 1 but got rank "+c.rank+"."}),null!=i&&d(2===i.rank||1===i.rank,function(){return "Error in batchNorm2D: scale must be rank 2 or rank 1 but got rank "+i.rank+"."}),null!=s&&d(2===s.rank||1===s.rank,function(){return "Error in batchNorm2D: offset must be rank 2 or rank 1 but got rank "+s.rank+"."}),zs(u,l,c,s,i,a)}function Ws(t,e,n,r,o,a){var i,s,u=Ye(t,"x","batchNorm"),l=Ye(e,"mean","batchNorm"),c=Ye(n,"variance","batchNorm");return null!=o&&(i=Ye(o,"scale","batchNorm")),null!=r&&(s=Ye(r,"offset","batchNorm")),d(3===u.rank,function(){return "Error in batchNorm3D: x must be rank 3 but got rank "+u.rank+"."}),d(3===l.rank||1===l.rank,function(){return "Error in batchNorm3D: mean must be rank 3 or rank 1 but got rank "+l.rank+"."}),d(3===c.rank||1===c.rank,function(){return "Error in batchNorm3D: variance must be rank 3 or rank 1 but got rank "+c.rank+"."}),null!=i&&d(3===i.rank||1===i.rank,function(){return "Error in batchNorm3D: scale must be rank 3 or rank 1 but got rank "+i.rank+"."}),null!=s&&d(3===s.rank||1===s.rank,function(){return "Error in batchNorm3D: offset must be rank 3 or rank 1 but got rank "+s.rank+"."}),zs(u,l,c,s,i,a)}function Us(t,e,n,r,o,a){var i,s,u=Ye(t,"x","batchNorm"),l=Ye(e,"mean","batchNorm"),c=Ye(n,"variance","batchNorm");return null!=o&&(i=Ye(o,"scale","batchNorm")),null!=r&&(s=Ye(r,"offset","batchNorm")),d(4===u.rank,function(){return "Error in batchNorm4D: x must be rank 4 but got rank "+u.rank+"."}),d(4===l.rank||1===l.rank,function(){return "Error in batchNorm4D: mean must be rank 4 or rank 1 but got rank "+l.rank+"."}),d(4===c.rank||1===c.rank,function(){return "Error in batchNorm4D: variance must be rank 4 or rank 1 but got rank "+c.rank+"."}),null!=i&&d(4===i.rank||1===i.rank,function(){return "Error in batchNorm4D: scale must be rank 4 or rank 1 but got rank "+i.rank+"."}),null!=s&&d(4===s.rank||1===s.rank,function(){return "Error in batchNorm4D: offset must be rank 4 or rank 1 but got rank "+s.rank+"."}),zs(u,l,c,s,i,a)}function zs(t,e,n,r,o,a){null==a&&(a=.001);var i,s,u,l=Ye(t,"x","batchNorm"),c=Ye(e,"mean","batchNorm"),h=Ye(n,"variance","batchNorm");null!=o&&(i=Ye(o,"scale","batchNorm")),null!=r&&(s=Ye(r,"offset","batchNorm")),d(c.rank===h.rank,function(){return "Batch normalization gradient requires mean and variance to have equal ranks."}),d(null==s||c.rank===s.rank,function(){return "Batch normalization gradient requires mean and offset to have equal ranks."}),d(null==i||c.rank===i.rank,function(){return "Batch normalization gradient requires mean and scale to have equal ranks."}),u=0===l.rank||1===l.rank?l.as4D(1,1,1,l.size):2===l.rank?l.as4D(1,1,l.shape[0],l.shape[1]):3===l.rank?l.as4D(1,l.shape[0],l.shape[1],l.shape[2]):l;return At.runKernel(function(t,e){var n=t.batchNormalization(u,Vs(c),Vs(h),a,Vs(i),Vs(s));return e([l,c,h,i]),n},{$x:l,$mean:c,$variance:h,$scale:i,$offset:s},function(t,e){var n=e,r=n[0],o=n[1],i=n[2],s=n[3],l=null==s?vn(1):s,c=$r(o.shape,u.shape),h=[];if(1===o.rank){for(var p=0;p=2&&i.rank>=2&&a.rank===i.rank,function(){return "Error in matMul: inputs must have the same rank of at least 2, got ranks "+a.rank+" and "+i.rank+"."}),d(x(h,p),function(){return "Error in matMul: outer dimensions ("+h+") and ("+p+") of Tensors with shapes "+a.shape+" and "+i.shape+" must match."}),d(s===u,function(){return "Error in matMul: inner shapes ("+s+") and ("+u+") of Tensors with shapes "+a.shape+" and "+i.shape+" and transposeA="+n+" and transposeB="+r+" must match."});var m=a.shape.slice(0,-2).concat([l,c]),g=n?a.as3D(f,s,l):a.as3D(f,l,s),b=r?i.as3D(v,c,u):i.as3D(v,u,c);return At.runKernel(function(t,e){var o=t.batchMatMul(g,b,n,r);return e([g,b]),o},{$a:g,$b:b},function(t,e){var o=e,a=o[0],i=o[1];return n||r?!n&&r?{$a:function(){return t.matMul(i,!1,!1)},$b:function(){return t.matMul(a,!0,!1)}}:n&&!r?{$a:function(){return i.matMul(t,!1,!0)},$b:function(){return a.matMul(t,!1,!1)}}:{$a:function(){return i.matMul(t,!0,!0)},$b:function(){return t.matMul(a,!0,!0)}}:{$a:function(){return t.matMul(i,!1,!0)},$b:function(){return a.matMul(t,!0,!1)}}}).reshape(m)}}),lu=ln({dot_:function(t,e){var n=Ye(t,"t1","dot"),r=Ye(e,"t2","dot");d(!(1!==n.rank&&2!==n.rank||1!==r.rank&&2!==r.rank),function(){return "Error in dot: inputs must all be rank 1 or 2, but got ranks "+n.rank+" and "+r.rank+"."});var o=1===n.rank?n.size:n.shape[1],a=1===r.rank?r.size:r.shape[0];return d(o===a,function(){return "Error in dot: inner dimensions of inputs must match, but got "+o+" and "+a+"."}),1===n.rank&&1===r.rank?n.as2D(1,-1).matMul(r.as2D(-1,1)).asScalar():1===n.rank&&2===r.rank?n.as2D(1,-1).matMul(r.as2D(r.shape[0],r.shape[1])).as1D():2===n.rank&&1===r.rank?n.matMul(r.as2D(-1,1)).as1D():n.matMul(r.as2D(r.shape[0],r.shape[1]))}}),cu=ln({outerProduct_:function(t,e){var n=Ye(t,"v1","outerProduct"),r=Ye(e,"v2","outerProduct");return d(1===n.rank&&1===r.rank,function(){return "Error in outerProduct: inputs must be rank 1, but got ranks "+n.rank+" and "+r.rank+"."}),n.as2D(-1,1).matMul(r.as2D(1,-1))}});var hu=ln({reverse_:function(t,e){var n=Ye(t,"x","reverse");if(0===n.rank)return n.clone();var r=S(e,n.shape);return At.runKernel(function(t){return t.reverse(n,r)},{$x:n},function(t){return {$x:function(){return t.reverse(r)}}}).reshapeAs(n)}}),pu=ln({reverse1d_:function(t){var e=Ye(t,"x","reverse");return d(1===e.rank,function(){return "Error in reverse1D: x must be rank 1 but got rank "+e.rank+"."}),hu(e,0)}}),fu=ln({reverse2d_:function(t,e){var n=Ye(t,"x","reverse");return d(2===n.rank,function(){return "Error in reverse2D: x must be rank 2 but got rank "+n.rank+"."}),hu(n,e)}}),du=ln({reverse3d_:function(t,e){var n=Ye(t,"x","reverse");return d(3===n.rank,function(){return "Error in reverse3D: x must be rank 3 but got rank "+n.rank+"."}),hu(n,e)}}),vu=ln({reverse4d_:function(t,e){var n=Ye(t,"x","reverse");return d(4===n.rank,function(){return "Error in reverse4D: x must be rank 4 but got rank "+n.rank+"."}),hu(n,e)}});function mu(t,e,n,r,o,a){var i=Ye(t,"x","maxPool"),s=i,u=!1;3===i.rank&&(u=!0,s=i.as4D(1,i.shape[0],i.shape[1],i.shape[2])),null==r&&(r=[1,1]),d(4===s.rank,function(){return "Error in maxPool: input must be rank 4 but got rank "+s.rank+"."}),d(ro(n,r),function(){return "Error in maxPool: Either strides or dilations must be 1. Got strides "+n+" and dilations '"+r+"'"}),null!=a&&d(b(o),function(){return "Error in maxPool: pad must be an integer when using, dimRoundingMode "+a+" but got pad "+o+"."});var l=Kr(s.shape,e,n,r,o,a),c=At.runKernel(function(t,e){var n=t.maxPool(s,l);return e([s,n]),n},{x:s},function(t,a){var i=a[0],s=a[1];return {x:function(){return function(t,e,n,r,o,a,i,s){var u=Ye(t,"dy","maxPoolBackprop"),l=Ye(e,"input","maxPoolBackprop"),c=Ye(n,"output","maxPoolBackprop");d(l.rank===u.rank,function(){return "Rank of input ("+l.rank+") does not match rank of dy ("+u.rank+")"}),null==a&&(a=[1,1]),d(ro(o,a),function(){return "Error in maxPoolBackProp: Either strides or dilations must be 1. Got strides "+o+" and dilations '"+a+"'"}),d(4===u.rank,function(){return "Error in maxPoolBackprop: dy must be rank 4 but got rank "+u.rank+"."}),d(4===l.rank,function(){return "Error in maxPoolBackprop: input must be rank 4 but got rank "+l.rank+"."}),null!=s&&d(b(i),function(){return "Error in maxPoolBackprop: pad must be an integer when using, dimRoundingMode "+s+" but got pad "+i+"."});var h=Kr(l.shape,r,o,a,i,s);return At.runKernel(function(t){return t.maxPoolBackprop(u,l,c,h)},{$dy:u,$input:l})}(t,i,s,e,n,r,o)}}});return u?c.as3D(c.shape[1],c.shape[2],c.shape[3]):c}function gu(t,e,n,r,o,a){var i=Ye(t,"x","avgPool","float32");null==r&&(r=[1,1]),d(ro(n,r),function(){return "Error in avgPool: Either strides or dilations must be 1. Got strides "+n+" and dilations '"+r+"'"});var s=i,u=!1;3===i.rank&&(u=!0,s=i.as4D(1,i.shape[0],i.shape[1],i.shape[2])),d(4===s.rank,function(){return "Error in avgPool: x must be rank 4 but got rank "+s.rank+"."}),null!=a&&d(b(o),function(){return "Error in avgPool: pad must be an integer when using, dimRoundingMode "+a+" but got pad "+o+"."});var l=Kr(s.shape,e,n,r,o,a),c=At.runKernel(function(t){return t.avgPool(s,l)},{x:s},function(t){return {x:function(){return function(t,e,n,r,o,a){var i=Ye(t,"dy","avgPoolBackprop"),s=Ye(e,"input","avgPoolBackprop");d(s.rank===i.rank,function(){return "Rank of input ("+s.rank+") does not match rank of dy ("+i.rank+")"}),null==o&&(o=[1,1]),d(ro(r,o),function(){return "Error in avgPoolBackprop: Either strides or dilations must be 1. Got strides "+r+" and dilations '"+o+"'"});var u=s,l=i,c=!1;3===s.rank&&(c=!0,u=s.as4D(1,s.shape[0],s.shape[1],s.shape[2]),l=i.as4D(1,i.shape[0],i.shape[1],i.shape[2])),d(4===l.rank,function(){return "Error in avgPoolBackprop: dy must be rank 4 but got rank "+l.rank+"."}),d(4===u.rank,function(){return "Error in avgPoolBackprop: input must be rank 4 but got rank "+u.rank+"."});var h=Kr(u.shape,n,r,o,a),p=At.runKernel(function(t){return t.avgPoolBackprop(l,u,h)},{dy4D:l,input4D:u});return c?p.as3D(p.shape[1],p.shape[2],p.shape[3]):p}(t,s,e,n,r,o)}}});return c=c.cast(i.dtype),u?c.as3D(c.shape[1],c.shape[2],c.shape[3]):c}var yu=ln({maxPool_:function(t,e,n,r,o){return mu(t,e,n,1,r,o)}}),xu=ln({avgPool_:function(t,e,n,r,o){return gu(t,e,n,1,r,o)}}),bu=ln({pool_:function(t,e,n,r,o,a){null==o&&(o=[1,1]),null==a&&(a=1),0===r&&(r="valid");var i=Ye(t,"x","maxPool"),s=i,u=!1;3===i.rank&&(u=!0,s=i.as4D(1,i.shape[0],i.shape[1],i.shape[2])),d(ro(a,o),function(){return "Error in pool: Either strides or dilations must be 1. Got strides "+a+" and dilations '"+o+"'"});var l,c=Kr(s.shape,e,a,o,r),h=[c.dilationHeight,c.dilationWidth];l="same"===r?function(t,e){var n=t.map(function(t,n){return t+(t-1)*(e[n]-1)}).map(function(t){return t-1}),r=n.map(function(t){return Math.floor(t/2)}),o=n.map(function(t,e){return t-r[e]});return n.map(function(t,e){return [r[e],o[e]]})}([c.filterHeight,c.filterWidth],h):[[0,0],[0,0]];var p=1===h[0]&&1===h[1],f=function(t,e,n){var r=n.map(function(t){return t[0]}),o=n.map(function(t){return t[1]}),a=t.concat(r,o),i=e.map(function(t,e){return (t-a[e]%t)%t}),s=o.map(function(t,e){return t+i[e]}),u=e.map(function(t,e){return [r[e],s[e]]}),l=e.map(function(t,e){return [0,i[e]]});return [u,l]}([c.inHeight,c.inWidth],h,l),v=f[0],m=f[1],g=p?r:"valid",y=p?s:pr(s,h,v),x=("avg"===n?function(){return gu(y,e,a,1,g)}:function(){return mu(y,e,a,1,g)})(),b=p?x:Kn(x,h,m);return u?b.as3D(b.shape[1],b.shape[2],b.shape[3]):b}});var wu=ln({slice_:function(t,e,n){var r,o,a=Ye(t,"x","slice");if(0===a.rank)throw new Error("Slicing scalar is not possible");r="number"==typeof e?[e].concat(new Array(a.rank-1).fill(0)):e.length=0?t:(d(-1===t,function(){return "Bad value in size"}),a.shape[e]-r[e])}),function(t,e,n){d(t.rank===e.length,function(){return "Error in slice"+t.rank+"D: Length of begin "+e+" must match the rank of the array ("+t.rank+")."}),d(t.rank===n.length,function(){return "Error in slice"+t.rank+"D: Length of size "+n+" must match the rank of the array ("+t.rank+")."});for(var r=function(r){d(e[r]+n[r]<=t.shape[r],function(){return "Error in slice"+t.rank+"D: begin["+r+"] + size["+r+"] ("+(e[r]+n[r])+") would overflow input.shape["+r+"] ("+t.shape[r]+")"});},o=0;o0&&(e=e.sum(n)),e.reshape(r.shape)},$b:function(){var e=t,n=$r(o.shape,a);return n.length>0&&(e=e.sum(n)),e.reshape(o.shape)}}})}}),Qu=ln({addN_:function(t){d(Array.isArray(t),function(){return "The argument passed to tf.addN() must be a list of tensors"}),d(t.length>=1,function(){return "Must pass at least one tensor to tf.addN(), but got "+t.length});var e=t.map(function(t,e){return Ye(t,"tensors"+e,"addN")}),n=e[0];e.forEach(function(t){if(t.dtype!==n.dtype)throw new Error("All tensors passed to tf.addN() must have the same dtype")}),e.forEach(function(t){if(!x(t.shape,n.shape))throw new Error("All tensors passed to tf.addN() must have the same shape")});var r=e;return At.runKernel(function(t){return t.addN(e)},r,function(t){var n={};return e.forEach(function(e,r){n[r]=function(){return t.clone()};}),n})}}),Ju=ln({addStrict_:function(t,e){var n=Ye(t,"a","addStrict"),r=Ye(e,"b","addStrict");return v(n.shape,r.shape,"Error in addStrict: "),n.add(r)}}),Zu=ln({atan2_:function(t,e){var n,r=Ye(t,"a","atan2"),o=Ye(e,"b","atan2");n=Ct(r,o),r=n[0],o=n[1];var a=jr(r.shape,o.shape);return At.runKernel(function(t,e){var n=t.atan2(r,o);return e([r,o]),n},{$a:r,$b:o},function(t,e){var n=e[0],r=e[1];return {$a:function(){var e=Yu(n.square(),r.square()),o=t.mul(r.div(e)),i=$r(n.shape,a);return i.length>0&&(o=o.sum(i)),o.reshape(n.shape)},$b:function(){var e=Yu(n.square(),r.square()),o=ws(t.mul(n.div(e))),i=$r(r.shape,a);return i.length>0&&(o=o.sum(i)),o.reshape(r.shape)}}})}}),tl=ln({div_:function(t,e){var n,r=Ye(t,"a","div"),o=Ye(e,"b","div");if(n=Ct(r,o),r=n[0],o=n[1],"int32"===r.dtype&&"int32"===o.dtype)return nl(r,o);var a=jr(r.shape,o.shape);return At.runKernel(function(t,e){var n=t.realDivide(r,o);return e([r,o]),n},{$a:r,$b:o},function(t,e){var n=e[0],r=e[1];return {$a:function(){var e=t.div(r.toFloat()),o=$r(n.shape,a);return o.length>0?e.sum(o).reshape(n.shape):e},$b:function(){var e=t.mul(n.toFloat()),o=$r(r.shape,a);o.length>0&&(e=e.sum(o).reshape(r.shape));var i=r.square();return e.div(i.toFloat()).neg()}}})}}),el=ln({divStrict_:function(t,e){var n=Ye(t,"a","div"),r=Ye(e,"b","div");return v(n.shape,r.shape,"Error in divideStrict: "),n.div(r)}}),nl=ln({floorDiv_:function(t,e){var n,r=Ye(t,"a","floorDiv"),o=Ye(e,"b","floorDiv");n=Ct(r,o),r=n[0],o=n[1];var a=jr(r.shape,o.shape);return At.runKernel(function(t,e){var n=t.floorDiv(r,o);return e([r,o]),n},{$a:r,$b:o},function(t,e){var n=e[0],r=e[1];return {$a:function(){var e=t.div(r.toFloat()),o=$r(n.shape,a);return o.length>0?e.sum(o).reshape(n.shape):e},$b:function(){var e=t.mul(n.toFloat()),o=$r(r.shape,a);o.length>0&&(e=e.sum(o).reshape(r.shape));var i=r.square();return e.div(i.toFloat()).neg()}}})}}),rl=ln({maximum_:function(t,e){var n,r=Ye(t,"a","maximum"),o=Ye(e,"b","maximum");return n=Ct(r,o),r=n[0],o=n[1],"bool"===r.dtype&&(r=r.toInt(),o=o.toInt()),jr(r.shape,o.shape),At.runKernel(function(t,e){var n=t.maximum(r,o);return e([r,o]),n},{$a:r,$b:o},function(t,e){var n=e[0],r=e[1];return {$a:function(){return t.mul(n.greaterEqual(r).toFloat())},$b:function(){return t.mul(n.less(r).toFloat())}}})}}),ol=ln({maximumStrict_:function(t,e){var n=Ye(t,"a","maximumStrict"),r=Ye(e,"b","maximumStrict");return v(n.shape,r.shape,"Error in maximumStrict: "),n.maximum(r)}}),al=ln({minimum_:function(t,e){var n,r=Ye(t,"a","minimum"),o=Ye(e,"b","minimum");return n=Ct(r,o),r=n[0],o=n[1],"bool"===r.dtype&&(r=r.toInt(),o=o.toInt()),jr(r.shape,o.shape),At.runKernel(function(t,e){var n=t.minimum(r,o);return e([r,o]),n},{$a:r,$b:o},function(t,e){var n=e[0],r=e[1];return {$a:function(){return t.mul(n.lessEqual(r).toFloat())},$b:function(){return t.mul(n.greater(r).toFloat())}}})}}),il=ln({minimumStrict_:function(t,e){var n=Ye(t,"a","minimumStrict"),r=Ye(e,"b","minimumStrict");return v(n.shape,r.shape,"Error in minimumStrict: "),n.minimum(r)}}),sl=ln({mod_:function(t,e){var n,r=Ye(t,"a","mod"),o=Ye(e,"b","mod");n=Ct(r,o),r=n[0],o=n[1];var a=jr(r.shape,o.shape);return At.runKernel(function(t,e){var n=t.mod(r,o);return e([r,o]),n},{$a:r,$b:o},function(t,e){var n=e[0],r=e[1];return {$a:function(){var e=$r(n.shape,a);return e.length>0?t.sum(e).reshape(n.shape):t},$b:function(){var e=t.mul(n.div(r).floor().neg()),o=$r(r.shape,a);return o.length>0?e.sum(o).reshape(r.shape):e}}})}}),ul=ln({modStrict_:function(t,e){var n=Ye(t,"a","modStrict"),r=Ye(e,"b","modStrict");return v(n.shape,r.shape,"Error in modStrict: "),n.mod(r)}}),ll=ln({mul_:function(t,e){var n,r=Ye(t,"a","mul"),o=Ye(e,"b","mul");n=Ct(r,o),r=n[0],o=n[1];var a=jr(r.shape,o.shape);return At.runKernel(function(t,e){var n=t.multiply(r,o);return e([r,o]),n},{$a:r,$b:o},function(t,e){var n=e[0],r=e[1];return {$a:function(){var e=t.mul(r.toFloat()),o=$r(n.shape,a);return o.length>0?e.sum(o).reshape(n.shape):e},$b:function(){var e=t.mul(n.toFloat()),o=$r(r.shape,a);return o.length>0?e.sum(o).reshape(r.shape):e}}})}}),cl=ln({mulStrict_:function(t,e){var n=Ye(t,"a","mul"),r=Ye(e,"b","mul");return v(n.shape,r.shape,"Error in multiplyStrict: "),n.mul(r)}}),hl=ln({pow_:function(t,e){var n=Ye(t,"base","pow"),r=Ye(e,"exp","pow"),o=jr(n.shape,r.shape);return t=n.cast(bt(n.dtype,r.dtype)),e=r.cast(bt(n.dtype,r.dtype)),At.runKernel(function(t,e){var o=t.pow(n,r);return e([n,r,o]),o},{$base:n,$exp:r},function(t,e){var n=e[0],r=e[1],a=e[2];return {$base:function(){var e=r.toFloat(),a=t.mul(e.mul(n.pow(e.sub(vn(1))))),i=$r(n.shape,o);return i.length>0&&(a=a.sum(i)),a.reshape(n.shape)},$exp:function(){var e=n.greater(0),i=n.log().where(e,kn(n)),s=t.mul(a.mul(i)),u=$r(r.shape,o);return u.length>0&&(s=s.sum(u)),s.reshape(r.shape)}}})}}),pl=ln({powStrict_:function(t,e){return v(t.shape,e.shape,"Error in powStrict: "),t.pow(e)}}),fl=ln({squaredDifference_:function(t,e){var n,r=Ye(t,"a","squaredDifference"),o=Ye(e,"b","squaredDifference");return n=Ct(r,o),r=n[0],o=n[1],jr(r.shape,o.shape),At.runKernel(function(t,e){var n=t.squaredDifference(r,o);return e([r,o]),n},{$a:r,$b:o},function(t,e){var n=e[0],r=e[1],o=vn(2);return {$a:function(){return t.mul(n.sub(r).mul(o))},$b:function(){return t.mul(r.sub(n).mul(o))}}})}}),dl=ln({squaredDifferenceStrict_:function(t,e){var n=Ye(t,"a","squaredDifferenceStrict"),r=Ye(e,"b","squaredDifferenceStrict");return v(n.shape,r.shape,"Error in squaredDifferenceStrict: "),n.squaredDifference(r)}}),vl=ln({sub_:function(t,e){var n,r=Ye(t,"a","sub"),o=Ye(e,"b","sub");n=Ct(r,o),r=n[0],o=n[1];var a=jr(r.shape,o.shape);return At.runKernel(function(t){return t.subtract(r,o)},{$a:r,$b:o},function(t){return {$a:function(){var e=t,n=$r(r.shape,a);return n.length>0&&(e=e.sum(n)),e.reshape(r.shape)},$b:function(){var e=t,n=$r(o.shape,a);return n.length>0&&(e=e.sum(n)),e.neg().reshape(o.shape)}}})}}),ml=ln({subStrict_:function(t,e){var n=Ye(t,"a","subStrict"),r=Ye(e,"b","subStrict");return v(n.shape,r.shape,"Error in subStrict: "),n.sub(r)}});var gl=ln({logicalAnd_:function(t,e){var n=Ye(t,"a","logicalAnd","bool"),r=Ye(e,"b","logicalAnd","bool");return jr(n.shape,r.shape),At.runKernel(function(t){return t.logicalAnd(n,r)},{$a:n,$b:r})}}),yl=ln({logicalNot_:function(t){var e=Ye(t,"x","logicalNot","bool");return At.runKernel(function(t){return t.logicalNot(e)},{$x:e})}}),xl=ln({logicalOr_:function(t,e){var n=Ye(t,"a","logicalOr","bool"),r=Ye(e,"b","logicalOr","bool");return jr(n.shape,r.shape),At.runKernel(function(t){return t.logicalOr(n,r)},{$a:n,$b:r})}}),bl=ln({logicalXor_:function(t,e){var n=Ye(t,"a","logicalXor","bool"),r=Ye(e,"b","logicalXor","bool");return jr(n.shape,r.shape),xl(t,e).logicalAnd(gl(t,e).logicalNot())}}),wl=ln({where_:function(t,e,n){var r=Ye(e,"a","where"),o=Ye(n,"b","where"),a=Ye(t,"condition","where","bool");return v(r.shape,o.shape,"Error in where: "),1===a.rank?d(a.shape[0]===r.shape[0],function(){return "The first dimension of `a` must match the size of `condition`."}):v(a.shape,o.shape,"Error in where: "),At.runKernel(function(t,e){var n=t.select(a,r,o);return e([a]),n},{$condition:a,$a:r,$b:o},function(t,e){var n=e[0];return {$condition:function(){return kn(n).toFloat()},$a:function(){return t.mul(n.cast(t.dtype))},$b:function(){return t.mul(n.logicalNot().cast(t.dtype))}}})}}),Cl=function(t){return r(this,void 0,void 0,function(){var e,n,r;return o(this,function(o){switch(o.label){case 0:return [4,(e=Ye(t,"condition","whereAsync","bool")).data()];case 1:return n=o.sent(),r=yo(e.shape,n),t!==e&&e.dispose(),[2,r]}})})};var El=ln({elu_:function(t){var e=Ye(t,"x","elu");return At.runKernel(function(t,n){var r=t.elu(e);return n([r]),r},{$x:e},function(t,e){var n=e[0];return {$x:function(){return At.runKernel(function(e){return e.eluDer(t,n)},{dy:t,y:n})}}})}}),Rl=ln({leakyRelu_:function(t,e){void 0===e&&(e=.2);var n=Ye(t,"x","leakyRelu");return rl(vn(e).mul(n),n)}}),Il=ln({prelu_:function(t,e){var n=Ye(t,"x","prelu"),r=Ye(e,"alpha","prelu");return At.runKernel(function(t,e){var o=t.prelu(n,r);return e([n,r]),o},{$x:n,$alpha:r},function(t,e){var n=e[0],r=e[1],o=n.greater(0);return {$x:function(){return wl(o,t,t.mul(r))},$alpha:function(){var e=wl(o,kn(t),t.mul(n)),a=$r(r.shape,t.shape);return a.length>0&&(e=e.sum(a)),e.reshape(r.shape)}}})}}),Sl=ln({relu_:function(t){var e=Ye(t,"x","relu");return "bool"===e.dtype?e.toInt():At.runKernel(function(t,n){var r=t.relu(e);return n([e]),r},{$x:e},function(t,e){var n=e[0];return {$x:function(){return t.mulStrict(n.step().toFloat())}}})}}),Nl=ln({selu_:function(t){var e=Ye(t,"x","selu");return At.runKernel(function(t,n){var r=t.selu(e);return n([e]),r},{$x:e},function(t,e){var n=e[0];return {$x:function(){var e=n.greater(vn(0)),r=vn(Pi),o=vn(Li),a=t.mul(o),i=t.mul(r).mul(n.toFloat().exp());return wl(e,a,i)}}})}});var kl=ln({transpose_:function(t,e){var n=Ye(t,"x","transpose");return null==e&&(e=n.shape.map(function(t,e){return e}).reverse()),d(n.rank===e.length,function(){return "Error in transpose: rank of input "+n.rank+" must match length of perm "+e+"."}),e.forEach(function(t){d(t>=0&&to)throw new Error("'k' passed to topk() must be <= the last dimension ("+o+") but got "+e);var a=At.runKernel(function(t){return t.topk(r,e,n)},{$x:r});return {values:a[0],indices:a[1]}}});var Ul=ln({scatterND_:function(t,e,n){var r=Ye(t,"indices","scatterND","int32"),o=Ye(e,"updates","scatterND");return Nr(o,r,n),At.runKernel(function(t){return t.scatterND(r,o,n)},{$indices:r,$updates:o})}});var zl=ln({fft_:function(t){d("complex64"===t.dtype,function(){return "The dtype for tf.spectral.fft() must be complex64 but got "+t.dtype+"."});var e=t.shape[t.shape.length-1],n=t.size/e,r=t.as2D(n,e);return At.runKernel(function(t){return t.fft(r)},{input:t}).reshape(t.shape)}}),Vl=ln({ifft_:function(t){d("complex64"===t.dtype,function(){return "The dtype for tf.spectral.ifft() must be complex64 but got "+t.dtype+"."});var e=t.shape[t.shape.length-1],n=t.size/e,r=t.as2D(n,e);return At.runKernel(function(t){return t.ifft(r)},{input:t}).reshape(t.shape)}}),Gl=ln({rfft_:function(t,e){d("float32"===t.dtype,function(){return "The dtype for rfft() must be real value but got "+t.dtype});var n,r=t.shape[t.shape.length-1],o=t.size/r;if(null!=e&&er){var s=t.shape.map(function(t){return t});s[t.shape.length-1]=e-r,n=t.concat(En(s),t.shape.length-1),r=e;}else n=t;var u=n.zerosLike(),l=cn(n,u).as2D(o,r),c=zl(l),h=Math.floor(r/2)+1,p=hn(c),f=pn(c),v=p.split([h,r-h],p.shape.length-1),m=f.split([h,r-h],f.shape.length-1),g=n.shape.slice();return g[n.shape.length-1]=h,cn(v[0],m[0]).reshape(g)}}),ql=ln({irfft_:function(t){var e=t.shape[t.shape.length-1],n=t.size/e;if(e<=2){var r=t.as2D(n,e),o=Vl(r);return hn(o)}var a=[n,2*(e-1)],i=hn(t).as2D(n,e),s=pn(t).as2D(n,e),u=i.slice([0,1],[n,e-2]).reverse(1),l=s.slice([0,1],[n,e-2]).reverse(1).mul(vn(-1)),c=i.concat(u,1),h=s.concat(l,1);return r=cn(c,h).as2D(a[0],a[1]),o=Vl(r),hn(o)}}),Hl=Object.freeze({fft:zl,ifft:Vl,rfft:Gl,irfft:ql});var $l=ln({sparseToDense_:function(t,e,n,r){void 0===r&&(r=0);var o=Ye(t,"sparseIndices","sparseToDense","int32"),a=Ye(e,"sparseValues","sparseToDense"),i=Ye(r,"defaultValue","sparseToDense",a.dtype);return function(t,e,n,r){if("int32"!==t.dtype)throw new Error("tf.sparseToDense() expects the indices to be int32 type, but the dtype was "+t.dtype+".");if(t.rank>2)throw new Error("sparseIndices should be a scalar, vector, or matrix, but got shape "+t.shape+".");var o=t.rank>0?t.shape[0]:1,a=t.rank>1?t.shape[1]:1;if(n.length!==a)throw new Error("outputShape has incorrect number of elements:, "+n.length+", should be: "+a+".");var i=e.size;if(0!==e.rank&&(1!==e.rank||i!==o))throw new Error("sparseValues has incorrect shape "+e.shape+", should be [] or ["+o+"]");if(e.dtype!==r.dtype)throw new Error("sparseValues.dtype must match defaultValues.dtype")}(o,a,n,i),At.runKernel(function(t){return t.sparseToDense(o,a,n,i)},{$sparseIndices:o,$sparseValues:a,$defaultValue:i})}});var jl=ln({gatherND_:function(t,e){var n=Ye(e,"indices","gatherND","int32"),r=Ye(t,"x","gatherND");return At.runKernel(function(t){return t.gatherND(r,n)},{$x:r,$indices:n})}});var Kl=ln({dropout_:function(t,e,n,r){if(null!=n&&!x(t.shape,n))throw new Error("Non-default noise shape is not implemented yet: "+JSON.stringify(n));var o=cr(t.shape,0,1,"float32",r).greater(e);return o=o.div(vl(1,e)),t.mul(o)}});function Xl(t,e,n){for(var r=1-t%2,o=new Float32Array(t),a=0;a1?s.div(vn(i)):s}if(n===Yl.SUM_BY_NONZERO_WEIGHTS){if(null==o)return a.sum().div(vn(r.size));var u=o.mul(Cn(r.shape)).notEqual(vn(0)).sum().toFloat();return a.sum().div(u)}throw Error("Unknown reduction: "+n)}}),rc=ln({cosineDistance_:function(t,e,n,r,o){void 0===o&&(o=Yl.SUM_BY_NONZERO_WEIGHTS);var a=Ye(t,"labels","cosineDistance"),i=Ye(e,"predictions","cosineDistance"),s=null;null!=r&&(s=Ye(r,"weights","cosineDistance")),v(a.shape,i.shape,"Error in cosineDistance: ");var u=vn(1).sub(a.mul(i).sum(n,!0));return nc(u,s,o)}}),oc=ln({hingeLoss_:function(t,e,n,r){void 0===r&&(r=Yl.SUM_BY_NONZERO_WEIGHTS);var o=Ye(t,"labels","hingeLoss"),a=Ye(e,"predictions","hingeLoss"),i=null;null!=n&&(i=Ye(n,"weights","hingeLoss")),v(o.shape,a.shape,"Error in hingeLoss: ");var s=vn(1);o=vn(2).mul(o).sub(s);var u=s.sub(o.mul(a)).relu();return nc(u,i,r)}}),ac=ln({huberLoss_:function(t,e,n,r,o){void 0===r&&(r=1),void 0===o&&(o=Yl.SUM_BY_NONZERO_WEIGHTS);var a=Ye(t,"labels","huberLoss"),i=Ye(e,"predictions","huberLoss"),s=null;null!=n&&(s=Ye(n,"weights","huberLoss")),v(a.shape,i.shape,"Error in huberLoss: ");var u=vn(r),l=i.sub(a).abs(),c=al(l,u),h=l.sub(c),p=vn(.5).mul(c.square()).add(u.mul(h));return nc(p,s,o)}}),ic=ln({logLoss_:function(t,e,n,r,o){void 0===r&&(r=1e-7),void 0===o&&(o=Yl.SUM_BY_NONZERO_WEIGHTS);var a=Ye(t,"labels","logLoss"),i=Ye(e,"predictions","logLoss"),s=null;null!=n&&(s=Ye(n,"weights","logLoss")),v(a.shape,i.shape,"Error in logLoss: ");var u=vn(1),l=vn(r),c=a.mul(i.add(l).log()).neg().sub(u.sub(a).mul(u.sub(i).add(l).log()));return nc(c,s,o)}}),sc=ln({meanSquaredError_:function(t,e,n,r){void 0===r&&(r=Yl.SUM_BY_NONZERO_WEIGHTS);var o=Ye(t,"labels","meanSquaredError"),a=Ye(e,"predictions","meanSquaredError"),i=null;null!=n&&(i=Ye(n,"weights","meanSquaredError")),v(o.shape,a.shape,"Error in meanSquaredError: ");var s=o.squaredDifference(a);return nc(s,i,r)}}),uc=ln({sigmoidCrossEntropy_:function(t,e,n,r,o){void 0===r&&(r=0),void 0===o&&(o=Yl.SUM_BY_NONZERO_WEIGHTS);var a=Ye(t,"multiClassLabels","sigmoidCrossEntropy"),i=Ye(e,"logits","sigmoidCrossEntropy"),s=null;if(null!=n&&(s=Ye(n,"weights","sigmoidCrossEntropy")),v(a.shape,i.shape,"Error in sigmoidCrossEntropy: "),r>0){var u=vn(r),l=vn(1),c=vn(.5);a=a.mul(l.sub(u)).add(c.mul(u));}var h=function(t,e){var n=Ye(t,"labels","sigmoidCrossEntropyWithLogits"),r=Ye(e,"logits","sigmoidCrossEntropyWithLogits");v(n.shape,r.shape,"Error in sigmoidCrossEntropyWithLogits: ");var o=r.relu(),a=r.mul(n),i=r.abs().neg().exp().log1p();return o.sub(a).add(i)}(a,i);return nc(h,s,o)}}),lc=ln({softmaxCrossEntropy_:function(t,e,n,r,o){void 0===r&&(r=0),void 0===o&&(o=Yl.SUM_BY_NONZERO_WEIGHTS);var a=Ye(t,"onehotLabels","softmaxCrossEntropy"),i=Ye(e,"logits","softmaxCrossEntropy"),s=null;if(null!=n&&(s=Ye(n,"weights","softmaxCrossEntropy")),v(a.shape,i.shape,"Error in softmaxCrossEntropy: "),r>0){var u=vn(r),l=vn(1),c=vn(a.shape[1]);a=a.mul(l.sub(u)).add(u.div(c));}var h=function(t,e,n){if(void 0===n&&(n=-1),-1===n&&(n=e.rank-1),n!==e.rank-1)throw Error("Softmax cross entropy along a non-last dimension is not yet supported. Labels / logits was rank "+e.rank+" and dim was "+n);return Wr(function(t,e,r){var o=e.logSumExp([n],!0),a=e.toFloat().sub(o);return r([t,a]),{value:a.mul(t).neg().sum([n]),gradFunc:function(t,e){var r=e[0],o=e[1],a=en(t.shape,[n]);return [t.reshape(a).mul(r.toFloat().sub(o.exp())),t.reshape(a).mul(o.exp().sub(r.toFloat()))]}}})(t,e)}(a,i);return nc(h,s,o)}}),cc=Object.freeze({get Reduction(){return Yl},absoluteDifference:ec,computeWeightedLoss:nc,cosineDistance:rc,hingeLoss:oc,huberLoss:ac,logLoss:ic,meanSquaredError:sc,sigmoidCrossEntropy:uc,softmaxCrossEntropy:lc});function hc(t,e){return void 0===e&&(e=!1),At.tidy(function(){if(2!==t.shape.length)throw new Error("qr2d() requires a 2D Tensor, but got a "+t.shape.length+"D Tensor.");for(var n=t.shape[0],r=t.shape[1],o=tr(n),a=t.clone(),i=gn([[1]],[1,1]),s=i.clone(),u=n>=r?r:n,l=function(t){var e,u=a,l=s,c=o;e=At.tidy(function(){var e=a.slice([t,t],[n-t,1]),u=e.norm(),l=a.slice([t,t],[1,1]),c=l.sign().neg(),h=l.sub(c.mul(u)),p=e.div(h);s=1===p.shape[0]?i.clone():i.concat(p.slice([1,0],[p.shape[0]-1,p.shape[1]]),0);var f=c.matMul(h).div(u).neg(),d=a.slice([t,0],[n-t,r]),v=f.mul(s);a=0===t?d.sub(v.matMul(s.transpose().matMul(d))):a.slice([0,0],[t,r]).concat(d.sub(v.matMul(s.transpose().matMul(d))),0);var m=o.slice([0,t],[n,o.shape[1]-t]);return o=0===t?m.sub(m.matMul(s).matMul(v.transpose())):o.slice([0,0],[n,t]).concat(m.sub(m.matMul(s).matMul(v.transpose())),1),[s,a,o]}),s=e[0],a=e[1],o=e[2],Me([u,l,c]);},c=0;cr&&(o=o.slice([0,0],[n,r]),a=a.slice([0,0],[r,r])),[o,a]})}var pc=ln({gramSchmidt_:function(t){var e;if(Array.isArray(t)){e=!1,d(null!=t&&t.length>0,function(){return "Gram-Schmidt process: input must not be null, undefined, or empty"});for(var n=t[0].shape[0],r=function(e){d(t[e].shape[0]===n,function(){return "Gram-Schmidt: Non-unique lengths found in the input vectors: ("+t[e].shape[0]+" vs. "+n+")"});},o=1;o0)for(var n=0;n= 2, but got rank "+t.rank);if(2===t.rank)return hc(t,e);var n=t.shape.slice(0,t.shape.length-2).reduce(function(t,e){return t*e}),r=gr(t.reshape([n,t.shape[t.shape.length-2],t.shape[t.shape.length-1]]),0),o=[],a=[];return r.forEach(function(t){var n=hc(t,e),r=n[0],i=n[1];o.push(r),a.push(i);}),[dr(o,0).reshape(t.shape),dr(a,0).reshape(t.shape)]}}),dc=Object.freeze({gramSchmidt:pc,qr:fc});function vc(t,e,n,r,o){null==r&&(r=.5),null==o&&(o=Number.NEGATIVE_INFINITY);var a=t.shape[0];return n=Math.min(n,a),d(0<=r&&r<=1,function(){return "iouThreshold must be in [0, 1], but was '"+r+"'"}),d(2===t.rank,function(){return "boxes must be a 2D tensor, but was of rank '"+t.rank+"'"}),d(4===t.shape[1],function(){return "boxes must have 4 columns, but 2nd dimension was "+t.shape[1]}),d(1===e.rank,function(){return "scores must be a 1D tensor"}),d(e.shape[0]===a,function(){return "scores has incompatible shape with boxes. Expected "+a+", but was "+e.shape[0]}),{maxOutputSize:n,iouThreshold:r,scoreThreshold:o}}var mc=ln({resizeBilinear_:function(t,e,n){void 0===n&&(n=!1);var r=Ye(t,"images","resizeBilinear");d(3===r.rank||4===r.rank,function(){return "Error in resizeBilinear: x must be rank 3 or 4, but got rank "+r.rank+"."}),d(2===e.length,function(){return "Error in resizeBilinear: new shape must 2D, but got shape "+e+"."});var o=r,a=!1;3===r.rank&&(a=!0,o=r.as4D(1,r.shape[0],r.shape[1],r.shape[2]));var i=e[0],s=e[1],u=At.runKernel(function(t,e){return e([o]),t.resizeBilinear(o,i,s,n)},{batchImages:o},function(t,e){return {batchImages:function(){return At.runKernel(function(r){return r.resizeBilinearBackprop(t,e[0],n)},{})}}});return a?u.as3D(u.shape[1],u.shape[2],u.shape[3]):u}}),gc=ln({resizeNearestNeighbor_:function(t,e,n){void 0===n&&(n=!1);var r=Ye(t,"images","resizeNearestNeighbor");d(3===r.rank||4===r.rank,function(){return "Error in resizeNearestNeighbor: x must be rank 3 or 4, but got rank "+r.rank+"."}),d(2===e.length,function(){return "Error in resizeNearestNeighbor: new shape must 2D, but got shape "+e+"."}),d("float32"===r.dtype||"int32"===r.dtype,function(){return "`images` must have `int32` or `float32` as dtype"});var o=r,a=!1;3===r.rank&&(a=!0,o=r.as4D(1,r.shape[0],r.shape[1],r.shape[2]));var i=e[0],s=e[1],u=At.runKernel(function(t,e){return e([o]),t.resizeNearestNeighbor(o,i,s,n)},{batchImages:o},function(t,e){return {batchImages:function(){return At.runKernel(function(r){return r.resizeNearestNeighborBackprop(t,e[0],n)},{})}}});return a?u.as3D(u.shape[1],u.shape[2],u.shape[3]):u}}),yc=ln({nonMaxSuppression_:function(t,e,n,r,o){void 0===r&&(r=.5),void 0===o&&(o=Number.NEGATIVE_INFINITY);var a=Ye(t,"boxes","nonMaxSuppression"),i=Ye(e,"scores","nonMaxSuppression"),s=vc(a,i,n,r,o);return n=s.maxOutputSize,r=s.iouThreshold,o=s.scoreThreshold,At.runKernel(function(t){return t.nonMaxSuppression(a,i,n,r,o)},{$boxes:a})}}),xc=function(t,e,n,a,i){return void 0===a&&(a=.5),void 0===i&&(i=Number.NEGATIVE_INFINITY),r(this,void 0,void 0,function(){var r,s,u,l,c,h;return o(this,function(o){switch(o.label){case 0:return r=Ye(t,"boxes","nonMaxSuppressionAsync"),s=Ye(e,"scores","nonMaxSuppressionAsync"),u=vc(r,s,n,a,i),n=u.maxOutputSize,a=u.iouThreshold,i=u.scoreThreshold,[4,r.data()];case 1:return l=o.sent(),[4,s.data()];case 2:return c=o.sent(),h=po(l,c,n,a,i),r!==t&&r.dispose(),s!==e&&s.dispose(),[2,h]}})})},bc=ln({cropAndResize_:function(t,e,n,r,o,a){var i=Ye(t,"image","cropAndResize","float32"),s=Ye(e,"boxes","cropAndResize","float32"),u=Ye(n,"boxInd","cropAndResize","int32");o=o||"bilinear",a=a||0;var l=s.shape[0];return d(4===i.rank,function(){return "Error in cropAndResize: image must be rank 4,but got rank "+i.rank+"."}),d(2===s.rank&&4===s.shape[1],function(){return "Error in cropAndResize: boxes must be have size ["+l+",4] but had shape "+s.shape+"."}),d(1===u.rank&&u.shape[0]===l,function(){return "Error in cropAndResize: boxInd must be have size ["+l+"] but had shape "+s.shape+"."}),d(2===r.length,function(){return "Error in cropAndResize: cropSize must be of length 2, but got length "+r.length+"."}),d(r[0]>=1&&r[1]>=1,function(){return "cropSize must be atleast [1,1], but was "+r}),d("bilinear"===o||"nearest"===o,function(){return "method must be bilinear or nearest, but was "+o}),At.runKernel(function(t,e){return t.cropAndResize(i,s,u,r,o,a)},{$image:i,$boxes:s})}}),wc=Object.freeze({resizeBilinear:mc,resizeNearestNeighbor:gc,nonMaxSuppression:yc,nonMaxSuppressionAsync:xc,cropAndResize:bc});var Cc=ln({matMul_:function(t,e,n,r,o,a){var i;void 0===n&&(n=!1),void 0===r&&(r=!1),void 0===a&&(a="linear");var s=Ye(t,"a","fused matMul"),u=Ye(e,"b","fused matMul");i=Ct(s,u),s=i[0],u=i[1];var l=n?s.shape[s.rank-2]:s.shape[s.rank-1],c=r?u.shape[u.rank-1]:u.shape[u.rank-2],h=n?s.shape[s.rank-1]:s.shape[s.rank-2],p=r?u.shape[u.rank-2]:u.shape[u.rank-1],f=s.shape.slice(0,-2),v=u.shape.slice(0,-2),m=y(f),g=y(v);d(s.rank>=2&&u.rank>=2&&s.rank===u.rank,function(){return "Error in fused matMul: inputs must have the same rank of at least 2, got ranks "+s.rank+" and "+u.rank+"."}),d(x(f,v),function(){return "Error in fused matMul: outer dimensions ("+f+") and ("+v+") of Tensors with shapes "+s.shape+" and "+u.shape+" must match."}),d(l===c,function(){return "Error in fused matMul: inner shapes ("+l+") and ("+c+") of Tensors with shapes "+s.shape+" and "+u.shape+" and transposeA="+n+" and transposeB="+r+" must match."});var b,w=s.shape.slice(0,-2).concat([h,p]),C=n?s.as3D(m,l,h):s.as3D(m,h,l),E=r?u.as3D(g,p,c):u.as3D(g,c,p);null!=o&&jr(w,(b=Ct(b=Ye(o,"bias","fused matMul"),s)[0]).shape);var R={$a:C,$b:E};return null!=o&&(R.$bias=b),At.runKernel(function(t,e){var o=t.fusedBatchMatMul(C,E,n,r,b,a);return e([C,E,o]),o},R,function(t,e){var i,s=e[0],u=e[1],l=e[2];if(null==a||"linear"===a)i=t;else{if("relu"!==a)throw new Error("Gradient for activation "+a+" has not been implemented yet.");i=t.mul(l.step());}var c={};return null!=o&&(c={$bias:function(){var t=i,e=$r(b.shape,i.shape);return e.length>0&&(t=t.sum(e)),t.reshape(b.shape)}}),n||r?!n&&r?Object.assign({$a:function(){return i.matMul(u,!1,!1)},$b:function(){return i.matMul(s,!0,!1)}},c):n&&!r?Object.assign({$a:function(){return u.matMul(i,!1,!0)},$b:function(){return s.matMul(i,!1,!1)}},c):Object.assign({$a:function(){return u.matMul(i,!0,!0)},$b:function(){return i.matMul(s,!0,!0)}},c):Object.assign({$a:function(){return i.matMul(u,!1,!0)},$b:function(){return s.matMul(i,!0,!1)}},c)}).reshape(w)}}),Ec=Object.freeze({matMul:Cc}),Rc=Object.freeze({image:wc,linalg:dc,losses:cc,spectral:Hl,fused:Ec,signal:tc,op:ln,batchNormalization2d:qs,batchNormalization3d:Hs,batchNormalization4d:$s,batchNormalization:js,batchNorm:Ks,batchNorm2d:Xs,batchNorm3d:Ys,batchNorm4d:Qs,complex:cn,real:hn,imag:pn,concat:An,concat1d:Tn,concat2d:Dn,concat3d:_n,concat4d:On,split:Fn,conv1d:eu,conv2d:nu,conv3d:ru,conv2dDerFilter:ou,depthwiseConv2d:au,separableConv2d:iu,conv2dTranspose:su,matMul:uu,dot:lu,outerProduct:cu,reverse:hu,reverse1d:pu,reverse2d:fu,reverse3d:du,reverse4d:vu,maxPool:yu,avgPool:xu,pool:bu,slice:wu,slice1d:Cu,slice2d:Eu,slice3d:Ru,slice4d:Iu,abs:rs,acos:os,acosh:as,asin:is,asinh:ss,atan:us,atanh:ls,ceil:cs,clipByValue:hs,cos:ps,cosh:fs,erf:ds,exp:vs,expm1:ms,floor:gs,log:ys,log1p:xs,logSigmoid:bs,neg:ws,reciprocal:Cs,round:Es,rsqrt:Rs,sigmoid:Is,sign:Ss,isNaN:Ns,isInf:ks,isFinite:As,sin:Ts,sinh:Ds,softplus:_s,sqrt:Os,square:Fs,step:Ms,tan:Bs,tanh:Ps,all:Nu,any:ku,argMax:Au,argMin:Tu,logSumExp:Du,max:_u,mean:Ou,min:Fu,moments:Mu,sum:Bu,prod:Pu,equal:Lu,equalStrict:Wu,greater:Uu,greaterEqual:zu,greaterEqualStrict:Vu,greaterStrict:Gu,less:qu,lessEqual:Hu,lessEqualStrict:$u,lessStrict:ju,notEqual:Ku,notEqualStrict:Xu,add:Yu,addN:Qu,addStrict:Ju,atan2:Zu,div:tl,divStrict:el,floorDiv:nl,maximum:rl,maximumStrict:ol,minimum:al,minimumStrict:il,mod:sl,modStrict:ul,mul:ll,mulStrict:cl,pow:hl,powStrict:pl,squaredDifference:fl,squaredDifferenceStrict:dl,sub:vl,subStrict:ml,elu:El,leakyRelu:Rl,prelu:Il,relu:Sl,selu:Nl,logicalAnd:gl,logicalNot:yl,logicalOr:xl,logicalXor:bl,where:wl,whereAsync:Cl,buffer:$n,print:jn,batchToSpaceND:Kn,cast:Xn,clone:Yn,cumsum:Qn,depthToSpace:Jn,expandDims:Zn,eye:tr,multinomial:er,oneHot:nr,pad:rr,pad1d:or,pad2d:ar,pad3d:ir,pad4d:sr,rand:ur,randomNormal:lr,randomUniform:cr,reshape:hr,spaceToBatchND:pr,squeeze:fr,stack:dr,tile:vr,truncatedNormal:mr,unstack:gr,setdiff1dAsync:yr,fill:Rn,linspace:In,ones:Cn,range:Sn,scalar:vn,tensor:fn,tensor1d:mn,tensor2d:gn,tensor3d:yn,tensor4d:xn,tensor5d:bn,tensor6d:wn,zeros:En,onesLike:Nn,zerosLike:kn,transpose:kl,softmax:zr,logSoftmax:Vr,localResponseNormalization:Al,norm:Tl,gather:Ol,unsortedSegmentSum:Fl,basicLSTMCell:Ml,multiRNNCell:Bl,movingAverage:Pl,stridedSlice:Ll,topk:Wl,scatterND:Ul,fft:zl,ifft:Vl,rfft:Gl,irfft:ql,sparseToDense:$l,gatherND:jl,dropout:Kl,hannWindow:Ql,hammingWindow:Jl,frame:Zl});var Ic=function(){function t(){if(this.blockSize=48,this.firstUse=!0,s.get("IS_BROWSER")){var t=function(){if("undefined"!=typeof OffscreenCanvas)return new OffscreenCanvas(300,150);if("undefined"!=typeof document)return document.createElement("canvas");throw new Error("Cannot create a canvas in this context")}();this.fromPixels2DContext=t.getContext("2d");}this.data=new Gr(this,At);}return t.prototype.register=function(t,e,n){if(this.firstUse&&(this.firstUse=!1,s.get("IS_NODE")&&je("\n============================\nHi there 👋. Looks like you are running TensorFlow.js in Node.js. To speed things up dramatically, install our node backend, which binds to TensorFlow C++, by running npm i @tensorflow/tfjs-node, or npm i @tensorflow/tfjs-node-gpu if you have CUDA. Then call require('@tensorflow/tfjs-node'); (-gpu suffix for CUDA) at the start of your program. Visit https://github.com/tensorflow/tfjs-node for more details.\n============================\n")),this.data.has(t))throw new Error("Data buffer is already registered");this.data.set(t,{dtype:n});},t.prototype.write=function(t,e){if(null==e)throw new Error("MathBackendCPU.write(): values can not be null");this.data.get(t).values=e;},t.prototype.fromPixels=function(t,e){if(null==t)throw new Error("pixels passed to tf.browser.fromPixels() can not be null");var n,r;if(s.get("IS_NODE")&&null==t.getContext)throw new Error("When running in node, pixels must be an HTMLCanvasElement like the one returned by the `canvas` npm package");if(null!=t.getContext)n=t.getContext("2d").getImageData(0,0,t.width,t.height).data;else if(t instanceof ImageData||t.data instanceof Uint8Array)n=t.data;else{if(!(t instanceof HTMLImageElement||t instanceof HTMLVideoElement))throw new Error("pixels passed to tf.browser.fromPixels() must be either an HTMLVideoElement, HTMLImageElement, HTMLCanvasElement, ImageData or {data: Uint32Array, width: number, height: number}, but was "+t.constructor.name);if(null==this.fromPixels2DContext)throw new Error("Can't read pixels from HTMLImageElement outside the browser.");this.fromPixels2DContext.canvas.width=t.width,this.fromPixels2DContext.canvas.height=t.height,this.fromPixels2DContext.drawImage(t,0,0,t.width,t.height),n=this.fromPixels2DContext.getImageData(0,0,t.width,t.height).data;}if(4===e)r=new Int32Array(n);else{var o=t.width*t.height;r=new Int32Array(o*e);for(var a=0;ap&&(p=v,f=d);}u[c]=f;}return i},t.prototype.cumsum=function(t,e,n,r){if(this.assertNotComplex(t,"cumsum"),e!==t.rank-1)throw new Error("backend.cumsum in CPU expects an inner-most axis="+(t.rank-1)+" but got axis="+e);for(var o=bt(t.dtype,"int32"),a=En(t.shape,o),i=this.readSync(a.dataId),s=this.readSync(t.dataId),u=t.shape[t.rank-1],l=r?function(t,e){return t+u-e-1}:function(t,e){return t+e},c=0;ce?1:0})},t.prototype.greaterEqual=function(t,e){return this.assertNotComplex([t,e],"greaterEqual"),this.broadcastedBinaryOp(t,e,"bool",function(t,e){return t>=e?1:0})},t.prototype.logicalNot=function(t){this.assertNotComplex(t,"logicalNot");for(var e=this.readSync(t.dataId),n=new Uint8Array(e.length),r=0;r1||1===e.rank?1:e.shape[1],c=0;c=0&&e>=0?n:(n+e)%e})},t.prototype.max=function(t,e){this.assertNotComplex(t,"max"),nn("max",e,t.rank);for(var n=tn(t.shape,e),r=n[0],o=n[1],a=En(r,t.dtype),i=y(o),s=this.readSync(a.dataId),u=this.readSync(t.dataId),l=0;lh&&(h=f);}s[l]=h;}return a},t.prototype.maximum=function(t,e){return this.assertNotComplex([t,e],"maximum"),this.broadcastedBinaryOp(t,e,t.dtype,function(t,e){return Math.max(t,e)})},t.prototype.all=function(t,e){this.assertNotComplex(t,"all"),nn("all",e,t.rank);for(var n=tn(t.shape,e),r=n[0],o=n[1],a=En(r,t.dtype),i=y(o),s=this.readSync(a.dataId),u=this.readSync(t.dataId),l=0;l0?n[r]=1:n[r]=0;return ht.make(t.shape,{values:n})},t.prototype.isNaN=function(t){this.assertNotComplex(t,"x");for(var e=this.readSync(t.dataId),n=new Uint8Array(e.length),r=0;r.5?n[r]=Math.ceil(e[r]):n[r]=o%2==0?o:o+1;}return ht.make(t.shape,{values:n})},t.prototype.exp=function(t){this.assertNotComplex(t,"exp");for(var e=this.readSync(t.dataId),n=new Float32Array(e.length),r=0;r=0?o:Math.exp(o)-1;}return ht.make(t.shape,{values:e})},t.prototype.eluDer=function(t,e){this.assertNotComplex([t,e],"eluDer");for(var n=new Float32Array(e.size),r=this.readSync(e.dataId),o=this.readSync(t.dataId),a=0;a=1?o[a]:o[a]*(i+1);}return ht.make(e.shape,{values:n})},t.prototype.selu=function(t){this.assertNotComplex(t,"selu");for(var e=Pi,n=Li,r=new Float32Array(t.size),o=this.readSync(t.dataId),a=0;a=0?n*i:e*(Math.exp(i)-1);}return ht.make(t.shape,{values:r})},t.prototype.clip=function(t,e,n){this.assertNotComplex(t,"clip");for(var r=new Float32Array(t.size),o=this.readSync(t.dataId),a=0;an?n:i-e,i=r[o]0?1:e;}return ht.make(t.shape,{values:n})},t.prototype.conv2d=function(t,e,n){this.assertNotComplex([t,e],"conv2d");for(var r=n.filterHeight,o=n.filterWidth,a=n.dilationHeight,i=n.dilationWidth,s=n.padInfo.left,u=n.padInfo.top,l=$n(n.outShape,t.dtype),c=this.readSync(t.dataId),h=this.readSync(e.dataId),p=l.values,f=0;f=n.inHeight))for(var w=x*e.strides[0],C=d+b*t.strides[1],E=0;E=n.inWidth))for(var k=w+S*e.strides[1],A=C+N*n.inChannels,T=k,D=0;D=n.inDepth))for(var R=C*e.strides[0],I=g+E*t.strides[1],S=0;S=n.inHeight))for(var D=R+A*e.strides[1],_=I+T*t.strides[2],O=0;O=n.inWidth))for(var L=D+B*e.strides[2],W=_+P*n.inChannels,U=L,z=0;z=n.inHeight))for(var C=b*e.strides[0],E=v+w*t.strides[1],R=0;R=n.inWidth))for(var A=C+N*e.strides[1],T=E+k*n.inChannels,D=I,_=A,O=0;OD?D=P:"avg"===n&&(_+=P,O++);}if(isNaN(D))break}d[S+N*g+w]="avg"===n?_/O:D;}return f.toTensor()},t.prototype.maxPool=function(t,e){return this.pool(t,e,"max")},t.prototype.maxPoolPositions=function(t,e){for(var n=$n(e.outShape,"int32"),r=e.strideHeight,o=e.strideWidth,a=e.dilationHeight,i=e.dilationWidth,s=e.effectiveFilterHeight,u=e.effectiveFilterWidth,l=e.padInfo.top,c=e.padInfo.left,h=this.bufferSync(t),p=0;pC&&(C=k,E=I*u+N);}n.set(E,p,d,y,f);}}return n.toTensor()},t.prototype.maxPoolBackprop=function(t,e,n,r){this.assertNotComplex([e,n],"maxPoolBackprop");for(var o=this.maxPoolPositions(e,r),a=r.strideHeight,i=r.strideWidth,s=r.dilationHeight,u=r.dilationWidth,l=r.effectiveFilterHeight,c=r.effectiveFilterWidth,h=c-1-r.padInfo.left,p=l-1-r.padInfo.top,f=$n(e.shape,"float32"),d=this.bufferSync(o),v=this.bufferSync(t),m=0;m=r.outHeight||Math.floor(R)!==R))for(var I=0;I=r.outWidth||Math.floor(S)!==S)){var N=l*c-1-d.get(m,R,S,g)===E*c+I?1:0;if(0!==N)C+=v.get(m,R,S,g)*N;}}}f.set(C,m,y,x,g);}return f.toTensor()},t.prototype.avgPoolBackprop=function(t,e,n){this.assertNotComplex([t,e],"avgPoolBackprop");for(var r=n.strideHeight,o=n.strideWidth,a=n.filterHeight,i=n.filterWidth,s=n.dilationHeight,u=n.dilationWidth,l=n.effectiveFilterHeight,c=n.effectiveFilterWidth,h=c-1-n.padInfo.left,p=l-1-n.padInfo.top,f=$n(e.shape,"float32"),d=1/(a*i),v=this.bufferSync(t),m=0;m=n.outHeight||Math.floor(R)!==R))for(var I=0;I=n.outWidth||Math.floor(S)!==S))C+=v.get(m,R,S,g);}}f.set(C*d,m,y,x,g);}return f.toTensor()},t.prototype.cast=function(t,e){return oo(t,e,this)},t.prototype.reshape=function(t,e){return ao(t,e)},t.prototype.avgPool=function(t,e){return this.assertNotComplex(t,"avgPool"),this.pool(t,e,"avg").toFloat()},t.prototype.resizeBilinear=function(t,e,n,r){this.assertNotComplex(t,"resizeBilinear");for(var o=t.shape,a=o[0],i=o[1],s=o[2],u=o[3],l=this.readSync(t.dataId),c=new Float32Array(y([a,e,n,u])),h=[r&&e>1?i-1:i,r&&n>1?s-1:s],p=[r&&e>1?e-1:e,r&&n>1?n-1:n],f=0,d=h[0]/p[0],v=h[1]/p[1],m=0;m1?a-1:a,n&&c>1?i-1:i],f=[n&&l>1?l-1:l,n&&c>1?c-1:c],d=p[0]/f[0],v=p[1]/f[1],m=this.readSync(t.dataId),g=0,y=0;y1?i-1:i,r&&n>1?s-1:s],p=[r&&e>1?e-1:e,r&&n>1?n-1:n],f=h[0]/p[0],d=h[1]/p[1],v=0,m=0;m1?a-1:a,n&&c>1?i-1:i],d=[n&&l>1?l-1:l,n&&c>1?c-1:c],v=f[0]/d[0],m=f[1]/d[1],g=1/v,y=1/m,x=2*Math.ceil(g)+2,b=2*Math.ceil(y)+2,w=0;w=l)){var M=C+F*t.strides[1],B=F*v;if(E===Math.min(a-1,n?Math.round(B):Math.floor(B)))for(var P=0;P=c)){var W=M+L*t.strides[2],U=L*m;N===Math.min(i-1,n?Math.round(U):Math.floor(U))&&(_+=p[W+D]);}}}}h[k+D]=_;}return xn(h,e.shape,e.dtype)},t.prototype.batchNormalization=function(t,e,n,r,o,a){this.assertNotComplex([t,e,n,o,a],"batchNorm");for(var i=this.readSync(t.dataId),s=this.readSync(e.dataId),u=this.readSync(n.dataId),l=o?this.readSync(o.dataId):new Float32Array([1]),c=a?this.readSync(a.dataId):new Float32Array([0]),h=new Float32Array(i.length),p=c.length,f=l.length,d=u.length,v=s.length,m=0,g=0,y=0,x=0,b=0;b=p&&(m=0),g>=v&&(g=0),y>=f&&(y=0),x>=d&&(x=0);return xn(h,t.shape)},t.prototype.localResponseNormalization4D=function(t,e,n,r,o){this.assertNotComplex(t,"localResponseNormalization4D");var a=t.shape[3],i=a-1,s=this.readSync(t.dataId),u=t.size,l=new Float32Array(u);function c(t){for(var n=t%a,r=t-n+Math.max(0,n-e),o=t-n+Math.min(n+e,i),u=0;r<=o;r++){var l=s[r];u+=l*l;}return u}for(var h=0;h=0&&a[i]1,function(){return "blockSize should be > 1 for depthToSpace, but was: "+e});for(var r=t.shape[0],o=t.shape[1],a=t.shape[2],i=t.shape[3],s=o*e,u=a*e,l=i/(e*e),c=this.readSync(t.dataId),h=new Float32Array(r*s*u*l),p=0,f=0;f=s))for(var N=p>1?(R-C)*(u-1)/(p-1):0,k=f>1?(I-E)*(l-1)/(f-1):0,A=0;A1?C*(u-1)+A*N:.5*(C+R)*(u-1);if(T<0||T>u-1)for(var D=0;D1?E*(l-1)+D*k:.5*(E+I)*(l-1))<0||H>l-1)for(_=0;_1?E*(l-1)+D*k:.5*(E+I)*(l-1))<0||H>l-1)for(_=0;_=t.size/s)throw new Error("Invalid indices: "+f+" does not index into "+t.shape);for(var g=0;g=r/o)throw new Error("Invalid indices: "+v+" does not index into "+n);for(var x=0;x0,function(){return "scheme must not be an empty string."});var r=t.getInstance();d(null==r.managers[e],function(){return "A model store manager is already registered for scheme '"+e+"'."}),r.managers[e]=n;},t.getManager=function(t){var e=this.getInstance().managers[t];if(null==e)throw new Error("Cannot find model manager for scheme '"+t+"'");return e},t.getSchemes=function(){return Object.keys(this.getInstance().managers)},t}();function Vc(t){if(-1===t.indexOf(Uc))throw new Error("The url string provided does not contain a scheme. Supported schemes are: "+zc.getSchemes().join(","));return {scheme:t.split(Uc)[0],path:t.split(Uc)[1]}}function Gc(t,e,n){return void 0===n&&(n=!1),r(this,void 0,void 0,function(){var r,a,i,s,u,l,c,h,p;return o(this,function(o){switch(o.label){case 0:return d(t!==e,function(){return "Old path and new path are the same: '"+t+"'"}),d((r=Wc.getLoadHandlers(t)).length>0,function(){return "Copying failed because no load handler is found for source URL "+t+"."}),d(r.length<2,function(){return "Copying failed because more than one ("+r.length+") load handlers for source URL "+t+"."}),a=r[0],d((i=Wc.getSaveHandlers(e)).length>0,function(){return "Copying failed because no save handler is found for destination URL "+e+"."}),d(i.length<2,function(){return "Copying failed because more than one ("+r.length+") save handlers for destination URL "+e+"."}),s=i[0],u=Vc(t).scheme,l=Vc(t).path,c=u===Vc(t).scheme,[4,a.load()];case 1:return h=o.sent(),n&&c?[4,zc.getManager(u).removeModel(l)]:[3,3];case 2:o.sent(),o.label=3;case 3:return [4,s.save(h)];case 4:return p=o.sent(),!n||c?[3,6]:[4,zc.getManager(u).removeModel(l)];case 5:o.sent(),o.label=6;case 6:return [2,p.modelArtifactsInfo]}})})}var qc="models_store",Hc="model_info_store";function $c(){if(!s.getBool("IS_BROWSER"))throw new Error("Failed to obtain IndexedDB factory because the current environmentis not a web browser.");var t=window,e=t.indexedDB||t.mozIndexedDB||t.webkitIndexedDB||t.msIndexedDB||t.shimIndexedDB;if(null==e)throw new Error("The current browser does not appear to support IndexedDB.");return e}function jc(t){var e=t.result;e.createObjectStore(qc,{keyPath:"modelPath"}),e.createObjectStore(Hc,{keyPath:"modelPath"});}var Kc=function(){function t(t){if(this.indexedDB=$c(),null==t||!t)throw new Error("For IndexedDB, modelPath must not be null, undefined or empty.");this.modelPath=t;}return t.prototype.save=function(t){return r(this,void 0,void 0,function(){return o(this,function(e){if(t.modelTopology instanceof ArrayBuffer)throw new Error("BrowserLocalStorage.save() does not support saving model topology in binary formats yet.");return [2,this.databaseAction(this.modelPath,t)]})})},t.prototype.load=function(){return r(this,void 0,void 0,function(){return o(this,function(t){return [2,this.databaseAction(this.modelPath)]})})},t.prototype.databaseAction=function(t,e){var n=this;return new Promise(function(t,r){var o=n.indexedDB.open("tensorflowjs",1);o.onupgradeneeded=function(){return jc(o)},o.onsuccess=function(){var a=o.result;if(null==e){var i=a.transaction(qc,"readonly"),s=i.objectStore(qc).get(n.modelPath);s.onsuccess=function(){if(null==s.result)return a.close(),r(new Error("Cannot find model with path '"+n.modelPath+"' in IndexedDB."));t(s.result.modelArtifacts);},s.onerror=function(t){return a.close(),r(s.error)},i.oncomplete=function(){return a.close()};}else{var u,l=Lc(e),c=a.transaction(Hc,"readwrite"),h=c.objectStore(Hc),p=h.put({modelPath:n.modelPath,modelArtifactsInfo:l});p.onsuccess=function(){var o=(u=a.transaction(qc,"readwrite")).objectStore(qc).put({modelPath:n.modelPath,modelArtifacts:e,modelArtifactsInfo:l});o.onsuccess=function(){return t({modelArtifactsInfo:l})},o.onerror=function(t){var e=(h=c.objectStore(Hc)).delete(n.modelPath);e.onsuccess=function(){return a.close(),r(o.error)},e.onerror=function(t){return a.close(),r(o.error)};};},p.onerror=function(t){return a.close(),r(p.error)},c.oncomplete=function(){null==u?a.close():u.oncomplete=function(){return a.close()};};}},o.onerror=function(t){return r(o.error)};})},t.URL_SCHEME="indexeddb://",t}(),Xc=function(t){return s.getBool("IS_BROWSER")&&!Array.isArray(t)&&t.startsWith(Kc.URL_SCHEME)?(e=t.slice(Kc.URL_SCHEME.length),new Kc(e)):null;var e;};Wc.registerSaveRouter(Xc),Wc.registerLoadRouter(Xc);var Yc=function(){function t(){this.indexedDB=$c();}return t.prototype.listModels=function(){return r(this,void 0,void 0,function(){var t=this;return o(this,function(e){return [2,new Promise(function(e,n){var r=t.indexedDB.open("tensorflowjs",1);r.onupgradeneeded=function(){return jc(r)},r.onsuccess=function(){var t=r.result,o=t.transaction(Hc,"readonly"),a=o.objectStore(Hc).getAll();a.onsuccess=function(){for(var t={},n=0,r=a.result;n0,function(){return "promises must be a none empty array"});}(t),function(t,e){d(t>=0&&t<=1,function(){return "Progress fraction must be in range [0, 1], but got startFraction "+t}),d(e>=0&&e<=1,function(){return "Progress fraction must be in range [0, 1], but got endFraction "+e}),d(e>=t,function(){return "startFraction must be no more than endFraction, but got startFraction "+t+" and endFraction "+e});}(n=null==n?0:n,r=null==r?1:r);var o=0;return Promise.all(t.map(function(a){return a.then(function(a){var i=n+ ++o/t.length*(r-n);return e(i),a}),a}))}function mh(t,e){return r(this,void 0,void 0,function(){var n,r,a,i,s,u,l,c,h;return o(this,function(o){switch(o.label){case 0:return null==e&&(e={}),n=null==e.fetchFunc?Y:e.fetchFunc,r=t.map(function(t){return n(t,e.requestInit)}),a=0,i=.5,null!=e.onProgress?[3,2]:[4,Promise.all(r)];case 1:return s=o.sent(),[3,4];case 2:return [4,vh(r,e.onProgress,a,i)];case 3:s=o.sent(),o.label=4;case 4:return u=s.map(function(t){return t.arrayBuffer()}),l=.5,c=1,null!=e.onProgress?[3,6]:[4,Promise.all(u)];case 5:return h=o.sent(),[3,8];case 6:return [4,vh(u,e.onProgress,l,c)];case 7:h=o.sent(),o.label=8;case 8:return [2,h]}})})}function gh(t){var e=this;return function(n,a,i){return void 0===a&&(a=""),r(e,void 0,void 0,function(){var e,r,s,u,l,c,h,p,f,d;return o(this,function(o){switch(o.label){case 0:if(e=n.map(function(){return !1}),r={},s=null!=i?i.map(function(){return !1}):[],u=[],n.forEach(function(t,n){var o=0;t.weights.forEach(function(t){var a="quantization"in t?t.quantization.dtype:t.dtype,l=Tc[a]*y(t.shape),c=function(){e[n]=!0,null==r[n]&&(r[n]=[]),r[n].push({manifestEntry:t,groupOffset:o,sizeBytes:l});};null!=i?i.forEach(function(e,n){e===t.name&&(c(),s[n]=!0);}):c(),u.push(t.name),o+=l;});}),!s.every(function(t){return t}))throw l=i.filter(function(t,e){return !s[e]}),new Error("Could not find weights in manifest with names: "+l.join(", ")+". \nManifest JSON has weights with names: "+u.join(", ")+".");return c=e.reduce(function(t,e,n){return e&&t.push(n),t},[]),h=[],c.forEach(function(t){n[t].paths.forEach(function(t){var e=a+(a.endsWith("/")?"":"/")+t;h.push(e);});}),[4,t(h)];case 1:return p=o.sent(),f={},d=0,c.forEach(function(t){for(var e=n[t].paths.length,o=0,a=0;a0,function(){return "URL path for http must not be null, undefined or empty."}),Array.isArray(t)&&d(2===t.length,function(){return "URL paths for http must have a length of 2, (actual length is "+t.length+")."}),this.path=t,null!=e.requestInit&&null!=e.requestInit.body)throw new Error("requestInit is expected to have no pre-existing body, but has one.");this.requestInit=e.requestInit||{};}return t.prototype.save=function(t){return r(this,void 0,void 0,function(){var e,n,r,a;return o(this,function(o){switch(o.label){case 0:if(t.modelTopology instanceof ArrayBuffer)throw new Error("BrowserHTTPRequest.save() does not support saving model topology in binary formats yet.");return (e=Object.assign({method:this.DEFAULT_METHOD},this.requestInit)).body=new FormData,n=[{paths:["./model.weights.bin"],weights:t.weightSpecs}],r={modelTopology:t.modelTopology,format:t.format,generatedBy:t.generatedBy,convertedBy:t.convertedBy,weightsManifest:n},e.body.append("model.json",new Blob([JSON.stringify(r)],{type:"application/json"}),"model.json"),null!=t.weightData&&e.body.append("model.weights.bin",new Blob([t.weightData],{type:"application/octet-stream"}),"model.weights.bin"),[4,this.fetch(this.path,e)];case 1:if((a=o.sent()).ok)return [2,{modelArtifactsInfo:Lc(t),responses:[a]}];throw new Error("BrowserHTTPRequest.save() failed due to HTTP response status "+a.status+".")}})})},t.prototype.load=function(){return r(this,void 0,void 0,function(){var t,e,n,r,a,i,s,u;return o(this,function(o){switch(o.label){case 0:return [4,this.fetch(this.path,this.requestInit)];case 1:if(!(t=o.sent()).ok)throw new Error("Request to "+this.path+" failed with status code "+t.status+". Please verify this URL points to the model JSON of the model to load.");o.label=2;case 2:return o.trys.push([2,4,,5]),[4,t.json()];case 3:return e=o.sent(),[3,5];case 4:throw o.sent(),n="Failed to parse model JSON of response from "+this.path+".",this.path.endsWith(".pb")?n+=" Your path contains a .pb file extension. Support for .pb models have been removed in TensorFlow.js 1.0 in favor of .json models. You can re-convert your Python TensorFlow model using the TensorFlow.js 1.0 conversion scripts or you can convert your.pb models with the 'pb2json'NPM script in the tensorflow/tfjs-converter repository.":n+=" Please make sure the server is serving valid JSON for this request.",new Error(n);case 5:if(r=e.modelTopology,a=e.weightsManifest,null==r&&null==a)throw new Error("The JSON from HTTP path "+this.path+" contains neither model topology or manifest for weights.");return null==a?[3,7]:[4,this.loadWeights(a)];case 6:u=o.sent(),i=u[0],s=u[1],o.label=7;case 7:return [2,{modelTopology:r,weightSpecs:i,weightData:s}]}})})},t.prototype.loadWeights=function(t){return r(this,void 0,void 0,function(){var e,n,r,a,i,s,u,l,c,h,p;return o(this,function(o){switch(o.label){case 0:for(e=Array.isArray(this.path)?this.path[1]:this.path,n=function(t){var e=t.lastIndexOf("/"),n=t.lastIndexOf("?"),r=t.substring(0,e),o=n>e?t.substring(n):"";return [r+"/",o]}(e),r=n[0],a=n[1],i=this.weightPathPrefix||r,s=[],u=0,l=t;u0&&(t=n({weightSpecs:this.weightSpecs},t)),null!=this.weightData&&this.weightData.byteLength>0&&(t=n({weightData:this.weightData},t)),null!=this.trainingConfig&&(t=n({trainingConfig:this.trainingConfig},t)),[2,t]})})},t}(),Eh=function(){function t(t){this.saveHandler=t;}return t.prototype.save=function(t){return r(this,void 0,void 0,function(){return o(this,function(e){return [2,this.saveHandler(t)]})})},t}();var Rh=Object.freeze({browserFiles:function(t){return new dh(t)},browserHTTPRequest:function(t,e){return wh(t,e)},concatenateArrayBuffers:Bc,decodeWeights:_c,encodeWeights:function(t,e){return r(this,void 0,void 0,function(){var n,a,i,u,l,c=this;return o(this,function(h){switch(h.label){case 0:for(n=[],a=[],i=Array.isArray(t)?t.map(function(t){return t.name}):Object.keys(t),u=function(u){var l=i[u],h=Array.isArray(t)?t[u].tensor:t[l];if("float32"!==h.dtype&&"int32"!==h.dtype&&"bool"!==h.dtype&&"string"!==h.dtype)throw new Error("Unsupported dtype in weight '"+l+"': "+h.dtype);var p={name:l,shape:h.shape,dtype:h.dtype};if("string"===h.dtype){var f=new Promise(function(t){return r(c,void 0,void 0,function(){var e,n,r;return o(this,function(o){switch(o.label){case 0:return e=p,[4,h.data()];case 1:return n=o.sent(),r=s.platform.encodeUTF8(n.join(Dc)),e.byteLength=r.length,e.delimiter=Dc,t(r),[2]}})})});a.push(f);}else a.push(h.data());null!=e&&(p.group=e),n.push(p);},l=0;l0&&Number.isInteger(n),function(){return "If provided, numClasses must be a positive integer, but got "+n}),d(1===r.rank,function(){return "Expected the rank of labels to be 1, but got "+r.rank}),d(1===o.rank,function(){return "Expected the rank of predictions to be 1, but got "+o.rank}),d(r.shape[0]===o.shape[0],function(){return "Mismatch in the number of examples: "+r.shape[0]+" vs. "+o.shape[0]+". Labels and predictions should have the same number of elements."}),d(n>0&&Number.isInteger(n),function(){return "numClasses is required to be a positive integer, but got "+n});var a=nr(r.asType("int32"),n),i=nr(o.asType("int32"),n);return a.transpose().matMul(i).asType("int32")}}),Sh=Object.freeze({confusionMatrix:Ih});var Nh=ln({fromPixels_:function(t,e){if(void 0===e&&(e=3),e>4)throw new Error("Cannot construct Tensor with more than 4 channels from pixels.");return At.fromPixels(t,e)}}),kh=Object.freeze({toPixels:function(t,e){return r(this,void 0,void 0,function(){var n,r,a,i,s,u,l,c,h,p,f,d,v,m,g,y,x,b,w,C,E,R,I;return o(this,function(o){switch(o.label){case 0:if(n=Ye(t,"img","toPixels"),t instanceof ht||(n=n.toInt()),2!==n.rank&&3!==n.rank)throw new Error("toPixels only supports rank 2 or 3 tensors, got rank "+n.rank+".");if(r=n.shape.slice(0,2),a=r[0],i=r[1],(s=2===n.rank?1:n.shape[2])>4||2===s)throw new Error("toPixels only supports depth of size 1, 3 or 4 but got "+s);return [4,n.data()];case 1:return u=o.sent(),l=n.min(),c=n.max(),[4,Promise.all([l.data(),c.data()])];case 2:if(h=o.sent(),p=h[0],f=h[1],d=p[0],v=f[0],l.dispose(),c.dispose(),"float32"===n.dtype){if(d<0||v>1)throw new Error("Tensor values for a float32 Tensor must be in the range [0 - 1] but got range ["+d+" - "+v+"].")}else{if("int32"!==n.dtype)throw new Error("Unsupported type for toPixels: "+n.dtype+". Please use float32 or int32 tensors.");if(d<0||v>255)throw new Error("Tensor values for a int32 Tensor must be in the range [0 - 255] but got range ["+d+" - "+v+"].")}for(m="float32"===n.dtype?255:1,g=new Uint8ClampedArray(i*a*4),y=0;y0,function(){return "Class being registered has an empty-string as its className, which is disallowed."}),Th.register(t);}var _h=Object.freeze({Serializable:Ah,SerializationMap:Th,registerClass:Dh}),Oh=.001,Fh=.1;function Mh(){return 32===At.backend.floatPrecision()?Oh:Fh}function Bh(t,e,n){var r=!0;if((F(t)||F(e))&&(r=!1),F(t)&&F(e)&&(r=!0),r){var o=t.constructor.name,a=e.constructor.name;if(o!==a)throw new Error("Arrays are of different type. Actual: "+o+". Expected: "+a)}if(Array.isArray(t)&&Array.isArray(e)){var i=Ke(t),s=Ke(e);if(!x(i,s))throw new Error("Arrays have different shapes. Actual: ["+i+"]. Expected: ["+s+"]")}var u=F(t)?t:g(t),l=F(e)?e:g(e);if(u.length!==l.length)throw new Error("Arrays have different lengths actual: "+u.length+" vs expected: "+l.length+".\nActual: "+u+".\nExpected: "+l+".");for(var c=0;cn)}var Lh=Object.freeze({TEST_EPSILON_FLOAT16:Fh,expectArraysClose:function(t,e,n){return null==n&&(n=Mh()),Bh(t,e,function(t,e){return Ph(t,e,n)})},testEpsilon:Mh,expectPromiseToFail:function(t,e){t().then(function(){return e.fail()},function(){return e()});},expectArraysEqual:function(t,e){var n="string"==typeof e||"number"==typeof e||"boolean"==typeof e?[e]:e;return P(t)||P(t[0])||P(e)||P(e[0])?Bh(t,n,function(t,e){return t==e}):Bh(t,e,function(t,e){return Ph(t,e,0)})},expectNumbersClose:function(t,e,n){if(null==n&&(n=Mh()),!Ph(t,e,n))throw new Error("Numbers differ: actual === "+t+", expected === "+e)},expectValuesInRange:function(t,e,n){for(var r=0;rn)throw new Error("Value out of range:"+t[r]+" low: "+e+", high: "+n)},expectArrayBuffersEqual:function(t,e){expect(new Float32Array(t)).toEqual(new Float32Array(e));}}),Wh="1.2.2",Uh=Object.freeze({gpgpu_util:ti,webgl_util:Se,MathBackendWebGL:ns,setWebGLContext:Ot,GPGPUContext:ei}),zh=function(t){function n(){return null!==t&&t.apply(this,arguments)||this}return e(n,t),n.prototype.minimize=function(t,e,n){void 0===e&&(e=!1);var r=this.computeGradients(t,n),o=r.value,a=r.grads;if(null!=n){var i=n.map(function(t){return {name:t.name,tensor:a[t.name]}});this.applyGradients(i);}else this.applyGradients(a);return Me(a),e?o:(o.dispose(),null)},Object.defineProperty(n.prototype,"iterations",{get:function(){return null==this.iterations_&&(this.iterations_=0),this.iterations_},enumerable:!0,configurable:!0}),n.prototype.incrementIterations=function(){this.iterations_=this.iterations+1;},n.prototype.computeGradients=function(t,e){return Lr(t,e)},n.prototype.dispose=function(){null!=this.iterations_&&Me(this.iterations_);},n.prototype.saveIterations=function(){return r(this,void 0,void 0,function(){return o(this,function(t){return null==this.iterations_&&(this.iterations_=0),[2,{name:"iter",tensor:vn(this.iterations_,"int32")}]})})},n.prototype.getWeights=function(){return r(this,void 0,void 0,function(){return o(this,function(t){throw new Error("getWeights() is not implemented for this optimizer yet.")})})},n.prototype.setWeights=function(t){return r(this,void 0,void 0,function(){return o(this,function(t){throw new Error("setWeights() is not implemented for this optimizer class "+this.getClassName())})})},n.prototype.extractIterations=function(t){return r(this,void 0,void 0,function(){var e;return o(this,function(n){switch(n.label){case 0:return e=this,[4,t[0].tensor.data()];case 1:return e.iterations_=n.sent()[0],[2,t.slice(1)]}})})},n}(Ah);Object.defineProperty(zh,Symbol.hasInstance,{value:function(t){return null!=t.minimize&&null!=t.computeGradients&&null!=t.applyGradients}});var Vh=function(t){function n(e,n,r){void 0===r&&(r=null);var o=t.call(this)||this;return o.learningRate=e,o.rho=n,o.epsilon=r,o.accumulatedGrads=[],o.accumulatedUpdates=[],null==r&&(o.epsilon=At.backend.epsilon()),o}return e(n,t),n.prototype.applyGradients=function(t){var e=this;(Array.isArray(t)?t.map(function(t){return t.name}):Object.keys(t)).forEach(function(n,r){var o=At.registeredVariables[n];null==e.accumulatedGrads[r]&&(e.accumulatedGrads[r]={originalName:n+"/accum_grad",variable:Fe(function(){return kn(o).variable(!1)})}),null==e.accumulatedUpdates[r]&&(e.accumulatedUpdates[r]={originalName:n+"/accum_var",variable:Fe(function(){return kn(o).variable(!1)})});var a=Array.isArray(t)?t[r].tensor:t[n];if(null!=a){var i=e.accumulatedGrads[r].variable,s=e.accumulatedUpdates[r].variable;Fe(function(){var t=i.mul(e.rho).add(a.square().mul(1-e.rho)),n=s.add(e.epsilon).sqrt().div(i.add(e.epsilon).sqrt()).mul(a),r=s.mul(e.rho).add(n.square().mul(1-e.rho));i.assign(t),s.assign(r);var u=n.mul(-e.learningRate).add(o);o.assign(u);});}}),this.incrementIterations();},n.prototype.dispose=function(){null!=this.accumulatedUpdates&&(Me(this.accumulatedGrads.map(function(t){return t.variable})),Me(this.accumulatedUpdates.map(function(t){return t.variable})));},n.prototype.getWeights=function(){return r(this,void 0,void 0,function(){var t;return o(this,function(e){switch(e.label){case 0:return t=this.accumulatedGrads.concat(this.accumulatedUpdates),[4,this.saveIterations()];case 1:return [2,[e.sent()].concat(t.map(function(t){return {name:t.originalName,tensor:t.variable}}))]}})})},n.prototype.setWeights=function(t){return r(this,void 0,void 0,function(){var e;return o(this,function(n){switch(n.label){case 0:return [4,this.extractIterations(t)];case 1:return t=n.sent(),e=t.length/2,this.accumulatedGrads=t.slice(0,e).map(function(t){return {originalName:t.name,variable:t.tensor.variable(!1)}}),this.accumulatedUpdates=t.slice(e,2*e).map(function(t){return {originalName:t.name,variable:t.tensor.variable(!1)}}),[2]}})})},n.prototype.getConfig=function(){return {learningRate:this.learningRate,rho:this.rho,epsilon:this.epsilon}},n.fromConfig=function(t,e){return new t(e.learningRate,e.rho,e.epsilon)},n.className="AdadeltaOptimizer",n}(zh);Dh(Vh);var Gh=function(t){function n(e,n){void 0===n&&(n=.1);var r=t.call(this)||this;return r.learningRate=e,r.initialAccumulatorValue=n,r.accumulatedGrads=[],r}return e(n,t),n.prototype.applyGradients=function(t){var e=this;(Array.isArray(t)?t.map(function(t){return t.name}):Object.keys(t)).forEach(function(n,r){var o=At.registeredVariables[n];if(null==e.accumulatedGrads[r]){e.accumulatedGrads[r]={originalName:n+"/accumulator",variable:Fe(function(){return Rn(o.shape,e.initialAccumulatorValue).variable(!1)})};}var a=Array.isArray(t)?t[r].tensor:t[n];if(null!=a){var i=e.accumulatedGrads[r].variable;Fe(function(){var t=i.add(a.square());i.assign(t);var n=a.div(t.add(At.backend.epsilon()).sqrt()).mul(-e.learningRate).add(o);o.assign(n);});}}),this.incrementIterations();},n.prototype.dispose=function(){null!=this.accumulatedGrads&&Me(this.accumulatedGrads.map(function(t){return t.variable}));},n.prototype.getWeights=function(){return r(this,void 0,void 0,function(){return o(this,function(t){switch(t.label){case 0:return [4,this.saveIterations()];case 1:return [2,[t.sent()].concat(this.accumulatedGrads.map(function(t){return {name:t.originalName,tensor:t.variable}}))]}})})},n.prototype.setWeights=function(t){return r(this,void 0,void 0,function(){return o(this,function(e){switch(e.label){case 0:return [4,this.extractIterations(t)];case 1:return t=e.sent(),this.accumulatedGrads=t.map(function(t){return {originalName:t.name,variable:t.tensor.variable(!1)}}),[2]}})})},n.prototype.getConfig=function(){return {learningRate:this.learningRate,initialAccumulatorValue:this.initialAccumulatorValue}},n.fromConfig=function(t,e){return new t(e.learningRate,e.initialAccumulatorValue)},n.className="Adagrad",n}(zh);Dh(Gh);var qh=function(t){function n(e,n,r,o){void 0===o&&(o=null);var a=t.call(this)||this;return a.learningRate=e,a.beta1=n,a.beta2=r,a.epsilon=o,a.accumulatedFirstMoment=[],a.accumulatedSecondMoment=[],Fe(function(){a.accBeta1=vn(n).variable(),a.accBeta2=vn(r).variable();}),null==o&&(a.epsilon=At.backend.epsilon()),a}return e(n,t),n.prototype.applyGradients=function(t){var e=this,n=Array.isArray(t)?t.map(function(t){return t.name}):Object.keys(t);Fe(function(){var r=vl(1,e.accBeta1),o=vl(1,e.accBeta2);n.forEach(function(n,a){var i=At.registeredVariables[n];null==e.accumulatedFirstMoment[a]&&(e.accumulatedFirstMoment[a]={originalName:n+"/m",variable:Fe(function(){return kn(i).variable(!1)})}),null==e.accumulatedSecondMoment[a]&&(e.accumulatedSecondMoment[a]={originalName:n+"/v",variable:Fe(function(){return kn(i).variable(!1)})});var s=Array.isArray(t)?t[a].tensor:t[n];if(null!=s){var u=e.accumulatedFirstMoment[a].variable,l=e.accumulatedSecondMoment[a].variable,c=u.mul(e.beta1).add(s.mul(1-e.beta1)),h=l.mul(e.beta2).add(s.square().mul(1-e.beta2)),p=c.div(r),f=h.div(o);u.assign(c),l.assign(h);var d=p.div(f.sqrt().add(e.epsilon)).mul(-e.learningRate).add(i);i.assign(d);}}),e.accBeta1.assign(e.accBeta1.mul(e.beta1)),e.accBeta2.assign(e.accBeta2.mul(e.beta2));}),this.incrementIterations();},n.prototype.dispose=function(){this.accBeta1.dispose(),this.accBeta2.dispose(),null!=this.accumulatedFirstMoment&&Me(this.accumulatedFirstMoment.map(function(t){return t.variable})),null!=this.accumulatedSecondMoment&&Me(this.accumulatedSecondMoment.map(function(t){return t.variable}));},n.prototype.getWeights=function(){return r(this,void 0,void 0,function(){var t;return o(this,function(e){switch(e.label){case 0:return t=this.accumulatedFirstMoment.concat(this.accumulatedSecondMoment),[4,this.saveIterations()];case 1:return [2,[e.sent()].concat(t.map(function(t){return {name:t.originalName,tensor:t.variable}}))]}})})},n.prototype.setWeights=function(t){return r(this,void 0,void 0,function(){var e,n=this;return o(this,function(r){switch(r.label){case 0:return [4,this.extractIterations(t)];case 1:return t=r.sent(),Fe(function(){n.accBeta1.assign(hl(n.beta1,n.iterations_+1)),n.accBeta2.assign(hl(n.beta2,n.iterations_+1));}),e=t.length/2,this.accumulatedFirstMoment=t.slice(0,e).map(function(t){return {originalName:t.name,variable:t.tensor.variable(!1)}}),this.accumulatedSecondMoment=t.slice(e,2*e).map(function(t){return {originalName:t.name,variable:t.tensor.variable(!1)}}),[2]}})})},n.prototype.getConfig=function(){return {learningRate:this.learningRate,beta1:this.beta1,beta2:this.beta2,epsilon:this.epsilon}},n.fromConfig=function(t,e){return new t(e.learningRate,e.beta1,e.beta2,e.epsilon)},n.className="Adam",n}(zh);Dh(qh);var Hh=function(t){function n(e,n,r,o,a){void 0===o&&(o=null),void 0===a&&(a=0);var i=t.call(this)||this;return i.learningRate=e,i.beta1=n,i.beta2=r,i.epsilon=o,i.decay=a,i.accumulatedFirstMoment=[],i.accumulatedWeightedInfNorm=[],Fe(function(){i.iteration=vn(0).variable(),i.accBeta1=vn(n).variable();}),null==o&&(i.epsilon=At.backend.epsilon()),i}return e(n,t),n.prototype.applyGradients=function(t){var e=this,n=Array.isArray(t)?t.map(function(t){return t.name}):Object.keys(t);Fe(function(){var r=vl(1,e.accBeta1),o=tl(-e.learningRate,e.iteration.mul(e.decay).add(1));n.forEach(function(n,a){var i=At.registeredVariables[n];null==e.accumulatedFirstMoment[a]&&(e.accumulatedFirstMoment[a]={originalName:n+"/m",variable:kn(i).variable(!1)}),null==e.accumulatedWeightedInfNorm[a]&&(e.accumulatedWeightedInfNorm[a]={originalName:n+"/v",variable:kn(i).variable(!1)});var s=Array.isArray(t)?t[a].tensor:t[n];if(null!=s){var u=e.accumulatedFirstMoment[a].variable,l=e.accumulatedWeightedInfNorm[a].variable,c=u.mul(e.beta1).add(s.mul(1-e.beta1)),h=l.mul(e.beta2),p=s.abs(),f=h.maximum(p);u.assign(c),l.assign(f);var d=o.div(r).mul(c.div(f.add(e.epsilon))).add(i);i.assign(d);}}),e.iteration.assign(e.iteration.add(1)),e.accBeta1.assign(e.accBeta1.mul(e.beta1));}),this.incrementIterations();},n.prototype.dispose=function(){this.accBeta1.dispose(),this.iteration.dispose(),null!=this.accumulatedFirstMoment&&Me(this.accumulatedFirstMoment.map(function(t){return t.variable})),null!=this.accumulatedWeightedInfNorm&&Me(this.accumulatedWeightedInfNorm.map(function(t){return t.variable}));},n.prototype.getWeights=function(){return r(this,void 0,void 0,function(){return o(this,function(t){throw new Error("getWeights() is not implemented for Adamax yet.")})})},n.prototype.setWeights=function(t){return r(this,void 0,void 0,function(){return o(this,function(t){throw new Error("setWeights() is not implemented for Adamax yet.")})})},n.prototype.getConfig=function(){return {learningRate:this.learningRate,beta1:this.beta1,beta2:this.beta2,epsilon:this.epsilon,decay:this.decay}},n.fromConfig=function(t,e){return new t(e.learningRate,e.beta1,e.beta2,e.epsilon,e.decay)},n.className="Adamax",n}(zh);Dh(Hh);var $h=function(t){function n(e){var n=t.call(this)||this;return n.learningRate=e,n.setLearningRate(e),n}return e(n,t),n.prototype.applyGradients=function(t){var e=this;(Array.isArray(t)?t.map(function(t){return t.name}):Object.keys(t)).forEach(function(n,r){var o=Array.isArray(t)?t[r].tensor:t[n];if(null!=o){var a=At.registeredVariables[n];Fe(function(){var t=e.c.mul(o).add(a);a.assign(t);});}}),this.incrementIterations();},n.prototype.setLearningRate=function(t){this.learningRate=t,null!=this.c&&this.c.dispose(),this.c=Be(vn(-t));},n.prototype.dispose=function(){this.c.dispose();},n.prototype.getWeights=function(){return r(this,void 0,void 0,function(){return o(this,function(t){switch(t.label){case 0:return [4,this.saveIterations()];case 1:return [2,[t.sent()]]}})})},n.prototype.setWeights=function(t){return r(this,void 0,void 0,function(){return o(this,function(e){switch(e.label){case 0:return [4,this.extractIterations(t)];case 1:if(0!==(t=e.sent()).length)throw new Error("SGD optimizer does not have settable weights.");return [2]}})})},n.prototype.getConfig=function(){return {learningRate:this.learningRate}},n.fromConfig=function(t,e){return new t(e.learningRate)},n.className="SGD",n}(zh);Dh($h);var jh=function(t){function n(e,n,r){void 0===r&&(r=!1);var o=t.call(this,e)||this;return o.learningRate=e,o.momentum=n,o.useNesterov=r,o.accumulations=[],o.m=vn(o.momentum),o}return e(n,t),n.prototype.applyGradients=function(t){var e=this;(Array.isArray(t)?t.map(function(t){return t.name}):Object.keys(t)).forEach(function(n,r){var o=At.registeredVariables[n];if(null==e.accumulations[r]){e.accumulations[r]={originalName:n+"/momentum",variable:Fe(function(){return kn(o).variable(!1)})};}var a=e.accumulations[r].variable,i=Array.isArray(t)?t[r].tensor:t[n];null!=i&&Fe(function(){var t,n=e.m.mul(a).add(i);t=e.useNesterov?e.c.mul(i.add(n.mul(e.m))).add(o):e.c.mul(n).add(o),a.assign(n),o.assign(t);});}),this.incrementIterations();},n.prototype.dispose=function(){this.m.dispose(),null!=this.accumulations&&Me(this.accumulations.map(function(t){return t.variable}));},n.prototype.setMomentum=function(t){this.momentum=t;},n.prototype.getWeights=function(){return r(this,void 0,void 0,function(){return o(this,function(t){switch(t.label){case 0:return [4,this.saveIterations()];case 1:return [2,[t.sent()].concat(this.accumulations.map(function(t){return {name:t.originalName,tensor:t.variable}}))]}})})},n.prototype.setWeights=function(t){return r(this,void 0,void 0,function(){return o(this,function(e){switch(e.label){case 0:return [4,this.extractIterations(t)];case 1:return t=e.sent(),this.accumulations=t.map(function(t){return {originalName:t.name,variable:t.tensor.variable(!1)}}),[2]}})})},n.prototype.getConfig=function(){return {learningRate:this.learningRate,momentum:this.momentum,useNesterov:this.useNesterov}},n.fromConfig=function(t,e){return new t(e.learningRate,e.momentum,e.useNesterov)},n.className="MomentumOptimizer",n}($h);Dh(jh);var Kh=function(t){function n(e,n,r,o,a){void 0===n&&(n=.9),void 0===r&&(r=0),void 0===o&&(o=null),void 0===a&&(a=!1);var i=t.call(this)||this;return i.learningRate=e,i.decay=n,i.momentum=r,i.epsilon=o,i.accumulatedMeanSquares=[],i.accumulatedMoments=[],i.accumulatedMeanGrads=[],i.centered=a,null==o&&(i.epsilon=At.backend.epsilon()),i}return e(n,t),n.prototype.applyGradients=function(t){var e=this;(Array.isArray(t)?t.map(function(t){return t.name}):Object.keys(t)).forEach(function(n,r){var o=At.registeredVariables[n];null==e.accumulatedMeanSquares[r]&&(e.accumulatedMeanSquares[r]={originalName:n+"/rms",variable:Fe(function(){return kn(o).variable(!1)})}),null==e.accumulatedMoments[r]&&(e.accumulatedMoments[r]={originalName:n+"/momentum",variable:Fe(function(){return kn(o).variable(!1)})}),null==e.accumulatedMeanGrads[r]&&e.centered&&(e.accumulatedMeanGrads[r]={originalName:n+"/mg",variable:Fe(function(){return kn(o).variable(!1)})});var a=Array.isArray(t)?t[r].tensor:t[n];if(null!=a){var i=e.accumulatedMeanSquares[r].variable,s=e.accumulatedMoments[r].variable;Fe(function(){var t=i.mul(e.decay).add(a.square().mul(1-e.decay));if(e.centered){var n=e.accumulatedMeanGrads[r].variable,u=n.mul(e.decay).add(a.mul(1-e.decay)),l=s.mul(e.momentum).add(a.mul(e.learningRate).div(t.sub(u.square().add(e.epsilon)).sqrt()));i.assign(t),n.assign(u),s.assign(l);var c=o.sub(l);o.assign(c);}else{var h=i.mul(e.decay).add(a.square().mul(1-e.decay));l=s.mul(e.momentum).add(a.mul(e.learningRate).div(h.add(e.epsilon).sqrt()));i.assign(h),s.assign(l);c=o.sub(l);o.assign(c);}});}}),this.incrementIterations();},n.prototype.dispose=function(){null!=this.accumulatedMeanSquares&&Me(this.accumulatedMeanSquares.map(function(t){return t.variable})),null!=this.accumulatedMeanGrads&&this.centered&&Me(this.accumulatedMeanGrads.map(function(t){return t.variable})),null!=this.accumulatedMoments&&Me(this.accumulatedMoments.map(function(t){return t.variable}));},n.prototype.getWeights=function(){return r(this,void 0,void 0,function(){var t;return o(this,function(e){switch(e.label){case 0:return t=this.accumulatedMeanSquares.concat(this.accumulatedMoments),this.centered&&t.push.apply(t,this.accumulatedMeanGrads),[4,this.saveIterations()];case 1:return [2,[e.sent()].concat(t.map(function(t){return {name:t.originalName,tensor:t.variable}}))]}})})},n.prototype.setWeights=function(t){return r(this,void 0,void 0,function(){var e;return o(this,function(n){switch(n.label){case 0:return [4,this.extractIterations(t)];case 1:return t=n.sent(),e=this.centered?t.length/3:t.length/2,this.accumulatedMeanSquares=t.slice(0,e).map(function(t){return {originalName:t.name,variable:t.tensor.variable(!1)}}),this.accumulatedMoments=t.slice(e,2*e).map(function(t){return {originalName:t.name,variable:t.tensor.variable(!1)}}),this.centered&&(this.accumulatedMeanGrads=t.slice(2*e,3*e).map(function(t){return {originalName:t.name,variable:t.tensor.variable(!1)}})),[2]}})})},n.prototype.getConfig=function(){return {learningRate:this.learningRate,decay:this.decay,momentum:this.momentum,epsilon:this.epsilon,centered:this.centered}},n.fromConfig=function(t,e){return new t(e.learningRate,e.decay,e.momentum,e.epsilon,e.centered)},n.className="RMSProp",n}(zh);Dh(Kh);var Xh=function(){function t(){}return t.sgd=function(t){return new $h(t)},t.momentum=function(t,e,n){return void 0===n&&(n=!1),new jh(t,e,n)},t.rmsprop=function(t,e,n,r,o){return void 0===e&&(e=.9),void 0===n&&(n=0),void 0===r&&(r=null),void 0===o&&(o=!1),new Kh(t,e,n,r,o)},t.adam=function(t,e,n,r){return void 0===t&&(t=.001),void 0===e&&(e=.9),void 0===n&&(n=.999),void 0===r&&(r=null),new qh(t,e,n,r)},t.adadelta=function(t,e,n){return void 0===t&&(t=.001),void 0===e&&(e=.95),void 0===n&&(n=null),new Vh(t,e,n)},t.adamax=function(t,e,n,r,o){return void 0===t&&(t=.002),void 0===e&&(e=.9),void 0===n&&(n=.999),void 0===r&&(r=null),void 0===o&&(o=0),new Hh(t,e,n,r,o)},t.adagrad=function(t,e){return void 0===e&&(e=.1),new Gh(t,e)},t}(),Yh={sgd:Xh.sgd,momentum:Xh.momentum,adadelta:Xh.adadelta,adagrad:Xh.adagrad,rmsprop:Xh.rmsprop,adamax:Xh.adamax,adam:Xh.adam},Qh="undefined"!=typeof requestAnimationFrame?requestAnimationFrame:"undefined"!=typeof setImmediate?setImmediate:function(t){return t()};function Jh(){return new Promise(function(t){return Qh(function(){return t()})})}lt=Rc; + + var tfCore_esm = /*#__PURE__*/Object.freeze({ + AdadeltaOptimizer: Vh, + AdagradOptimizer: Gh, + AdamOptimizer: qh, + AdamaxOptimizer: Hh, + DataStorage: Gr, + get ENV () { return s; }, + Environment: a, + KernelBackend: qr, + MomentumOptimizer: jh, + Optimizer: zh, + RMSPropOptimizer: Kh, + get Rank () { return ft; }, + get Reduction () { return Yl; }, + SGDOptimizer: $h, + Tensor: ht, + TensorBuffer: st, + Variable: pt, + abs: rs, + acos: os, + acosh: as, + add: Yu, + addN: Qu, + addStrict: Ju, + all: Nu, + any: ku, + argMax: Au, + argMin: Tu, + asin: is, + asinh: ss, + atan: us, + atan2: Zu, + atanh: ls, + avgPool: xu, + backend: He, + backend_util: so, + basicLSTMCell: Ml, + batchNorm: Ks, + batchNorm2d: Xs, + batchNorm3d: Ys, + batchNorm4d: Qs, + batchNormalization: js, + batchNormalization2d: qs, + batchNormalization3d: Hs, + batchNormalization4d: $s, + batchToSpaceND: Kn, + browser: kh, + buffer: $n, + cast: Xn, + ceil: cs, + clipByValue: hs, + clone: Yn, + complex: cn, + concat: An, + concat1d: Tn, + concat2d: Dn, + concat3d: _n, + concat4d: On, + conv1d: eu, + conv2d: nu, + conv2dDerFilter: ou, + conv2dTranspose: su, + conv3d: ru, + cos: ps, + cosh: fs, + cumsum: Qn, + customGrad: Wr, + deprecationWarn: Te, + depthToSpace: Jn, + depthwiseConv2d: au, + disableDeprecationWarnings: Ae, + dispose: Me, + disposeVariables: De, + div: tl, + divStrict: el, + dot: lu, + dropout: Kl, + elu: El, + enableDebugMode: ke, + enableProdMode: Ne, + environment: l, + equal: Lu, + equalStrict: Wu, + erf: ds, + exp: vs, + expandDims: Zn, + expm1: ms, + eye: tr, + fft: zl, + fill: Rn, + findBackend: Ve, + findBackendFactory: Ge, + floor: gs, + floorDiv: nl, + frame: Zl, + fused: Ec, + gather: Ol, + gatherND: jl, + getBackend: Ue, + grad: Fr, + grads: Mr, + greater: Uu, + greaterEqual: zu, + greaterEqualStrict: Vu, + greaterStrict: Gu, + hammingWindow: Jl, + hannWindow: Ql, + ifft: Vl, + imag: pn, + image: wc, + io: Rh, + irfft: ql, + isFinite: As, + isInf: ks, + isNaN: Ns, + keep: Be, + leakyRelu: Rl, + less: qu, + lessEqual: Hu, + lessEqualStrict: $u, + lessStrict: ju, + linalg: dc, + linspace: In, + localResponseNormalization: Al, + log: ys, + log1p: xs, + logSigmoid: bs, + logSoftmax: Vr, + logSumExp: Du, + logicalAnd: gl, + logicalNot: yl, + logicalOr: xl, + logicalXor: bl, + losses: cc, + matMul: uu, + math: Sh, + max: _u, + maxPool: yu, + maximum: rl, + maximumStrict: ol, + mean: Ou, + memory: _e, + min: Fu, + minimum: al, + minimumStrict: il, + mod: sl, + modStrict: ul, + moments: Mu, + movingAverage: Pl, + mul: ll, + mulStrict: cl, + multiRNNCell: Bl, + multinomial: er, + neg: ws, + nextFrame: Jh, + norm: Tl, + notEqual: Ku, + notEqualStrict: Xu, + oneHot: nr, + ones: Cn, + onesLike: Nn, + op: ln, + outerProduct: cu, + pad: rr, + pad1d: or, + pad2d: ar, + pad3d: ir, + pad4d: sr, + pool: bu, + pow: hl, + powStrict: pl, + prelu: Il, + print: jn, + prod: Pu, + profile: Oe, + rand: ur, + randomNormal: lr, + randomUniform: cr, + range: Sn, + ready: We, + real: hn, + reciprocal: Cs, + registerBackend: qe, + relu: Sl, + removeBackend: ze, + reshape: hr, + reverse: hu, + reverse1d: pu, + reverse2d: fu, + reverse3d: du, + reverse4d: vu, + rfft: Gl, + round: Es, + rsqrt: Rs, + scalar: vn, + scatterND: Ul, + selu: Nl, + separableConv2d: iu, + serialization: _h, + setBackend: Le, + setPlatform: $e, + setdiff1dAsync: yr, + sigmoid: Is, + sign: Ss, + signal: tc, + sin: Ts, + sinh: Ds, + slice: wu, + slice1d: Cu, + slice2d: Eu, + slice3d: Ru, + slice4d: Iu, + softmax: zr, + softplus: _s, + spaceToBatchND: pr, + sparseToDense: $l, + spectral: Hl, + split: Fn, + sqrt: Os, + square: Fs, + squaredDifference: fl, + squaredDifferenceStrict: dl, + squeeze: fr, + stack: dr, + step: Ms, + stridedSlice: Ll, + sub: vl, + subStrict: ml, + sum: Bu, + tan: Bs, + tanh: Ps, + tensor: fn, + tensor1d: mn, + tensor2d: gn, + tensor3d: yn, + tensor4d: xn, + tensor5d: bn, + tensor6d: wn, + tensor_util: St, + test_util: Lh, + tidy: Fe, + tile: vr, + time: Pe, + topk: Wl, + train: Yh, + transpose: kl, + truncatedNormal: mr, + unsortedSegmentSum: Fl, + unstack: gr, + util: Q, + valueAndGrad: Br, + valueAndGrads: Pr, + variable: yt, + variableGrads: Lr, + version_core: Wh, + webgl: Uh, + where: wl, + whereAsync: Cl, + zeros: En, + zerosLike: kn + }); + + var Dimensions = /** @class */ (function () { + function Dimensions(width, height) { + if (!isValidNumber(width) || !isValidNumber(height)) { + throw new Error("Dimensions.constructor - expected width and height to be valid numbers, instead have " + JSON.stringify({ width: width, height: height })); + } + this._width = width; + this._height = height; + } + Object.defineProperty(Dimensions.prototype, "width", { + get: function () { return this._width; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Dimensions.prototype, "height", { + get: function () { return this._height; }, + enumerable: true, + configurable: true + }); + Dimensions.prototype.reverse = function () { + return new Dimensions(1 / this.width, 1 / this.height); + }; + return Dimensions; + }()); + + var Point = /** @class */ (function () { + function Point(x, y) { + this._x = x; + this._y = y; + } + Object.defineProperty(Point.prototype, "x", { + get: function () { return this._x; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Point.prototype, "y", { + get: function () { return this._y; }, + enumerable: true, + configurable: true + }); + Point.prototype.add = function (pt) { + return new Point(this.x + pt.x, this.y + pt.y); + }; + Point.prototype.sub = function (pt) { + return new Point(this.x - pt.x, this.y - pt.y); + }; + Point.prototype.mul = function (pt) { + return new Point(this.x * pt.x, this.y * pt.y); + }; + Point.prototype.div = function (pt) { + return new Point(this.x / pt.x, this.y / pt.y); + }; + Point.prototype.abs = function () { + return new Point(Math.abs(this.x), Math.abs(this.y)); + }; + Point.prototype.magnitude = function () { + return Math.sqrt(Math.pow(this.x, 2) + Math.pow(this.y, 2)); + }; + Point.prototype.floor = function () { + return new Point(Math.floor(this.x), Math.floor(this.y)); + }; + return Point; + }()); + + function isTensor(tensor, dim) { + return tensor instanceof ht && tensor.shape.length === dim; + } + function isTensor1D(tensor) { + return isTensor(tensor, 1); + } + function isTensor2D(tensor) { + return isTensor(tensor, 2); + } + function isTensor3D(tensor) { + return isTensor(tensor, 3); + } + function isTensor4D(tensor) { + return isTensor(tensor, 4); + } + function isFloat(num) { + return num % 1 !== 0; + } + function isEven(num) { + return num % 2 === 0; + } + function round(num, prec) { + if (prec === void 0) { prec = 2; } + var f = Math.pow(10, prec); + return Math.floor(num * f) / f; + } + function isDimensions(obj) { + return obj && obj.width && obj.height; + } + function computeReshapedDimensions(_a, inputSize) { + var width = _a.width, height = _a.height; + var scale = inputSize / Math.max(height, width); + return new Dimensions(Math.round(width * scale), Math.round(height * scale)); + } + function getCenterPoint(pts) { + return pts.reduce(function (sum, pt) { return sum.add(pt); }, new Point(0, 0)) + .div(new Point(pts.length, pts.length)); + } + function range(num, start, step) { + return Array(num).fill(0).map(function (_, i) { return start + (i * step); }); + } + function isValidNumber(num) { + return !!num && num !== Infinity && num !== -Infinity && !isNaN(num) || num === 0; + } + function isValidProbablitiy(num) { + return isValidNumber(num) && 0 <= num && num <= 1.0; + } + + var Box = /** @class */ (function () { + function Box(_box, allowNegativeDimensions) { + if (allowNegativeDimensions === void 0) { allowNegativeDimensions = true; } + var box = (_box || {}); + var isBbox = [box.left, box.top, box.right, box.bottom].every(isValidNumber); + var isRect = [box.x, box.y, box.width, box.height].every(isValidNumber); + if (!isRect && !isBbox) { + throw new Error("Box.constructor - expected box to be IBoundingBox | IRect, instead have " + JSON.stringify(box)); + } + var _a = isRect + ? [box.x, box.y, box.width, box.height] + : [box.left, box.top, box.right - box.left, box.bottom - box.top], x = _a[0], y = _a[1], width = _a[2], height = _a[3]; + Box.assertIsValidBox({ x: x, y: y, width: width, height: height }, 'Box.constructor', allowNegativeDimensions); + this._x = x; + this._y = y; + this._width = width; + this._height = height; + } + Box.isRect = function (rect) { + return !!rect && [rect.x, rect.y, rect.width, rect.height].every(isValidNumber); + }; + Box.assertIsValidBox = function (box, callee, allowNegativeDimensions) { + if (allowNegativeDimensions === void 0) { allowNegativeDimensions = false; } + if (!Box.isRect(box)) { + throw new Error(callee + " - invalid box: " + JSON.stringify(box) + ", expected object with properties x, y, width, height"); + } + if (!allowNegativeDimensions && (box.width < 0 || box.height < 0)) { + throw new Error(callee + " - width (" + box.width + ") and height (" + box.height + ") must be positive numbers"); + } + }; + Object.defineProperty(Box.prototype, "x", { + get: function () { return this._x; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Box.prototype, "y", { + get: function () { return this._y; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Box.prototype, "width", { + get: function () { return this._width; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Box.prototype, "height", { + get: function () { return this._height; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Box.prototype, "left", { + get: function () { return this.x; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Box.prototype, "top", { + get: function () { return this.y; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Box.prototype, "right", { + get: function () { return this.x + this.width; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Box.prototype, "bottom", { + get: function () { return this.y + this.height; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Box.prototype, "area", { + get: function () { return this.width * this.height; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Box.prototype, "topLeft", { + get: function () { return new Point(this.left, this.top); }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Box.prototype, "topRight", { + get: function () { return new Point(this.right, this.top); }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Box.prototype, "bottomLeft", { + get: function () { return new Point(this.left, this.bottom); }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Box.prototype, "bottomRight", { + get: function () { return new Point(this.right, this.bottom); }, + enumerable: true, + configurable: true + }); + Box.prototype.round = function () { + var _a = [this.x, this.y, this.width, this.height] + .map(function (val) { return Math.round(val); }), x = _a[0], y = _a[1], width = _a[2], height = _a[3]; + return new Box({ x: x, y: y, width: width, height: height }); + }; + Box.prototype.floor = function () { + var _a = [this.x, this.y, this.width, this.height] + .map(function (val) { return Math.floor(val); }), x = _a[0], y = _a[1], width = _a[2], height = _a[3]; + return new Box({ x: x, y: y, width: width, height: height }); + }; + Box.prototype.toSquare = function () { + var _a = this, x = _a.x, y = _a.y, width = _a.width, height = _a.height; + var diff = Math.abs(width - height); + if (width < height) { + x -= (diff / 2); + width += diff; + } + if (height < width) { + y -= (diff / 2); + height += diff; + } + return new Box({ x: x, y: y, width: width, height: height }); + }; + Box.prototype.rescale = function (s) { + var scaleX = isDimensions(s) ? s.width : s; + var scaleY = isDimensions(s) ? s.height : s; + return new Box({ + x: this.x * scaleX, + y: this.y * scaleY, + width: this.width * scaleX, + height: this.height * scaleY + }); + }; + Box.prototype.pad = function (padX, padY) { + var _a = [ + this.x - (padX / 2), + this.y - (padY / 2), + this.width + padX, + this.height + padY + ], x = _a[0], y = _a[1], width = _a[2], height = _a[3]; + return new Box({ x: x, y: y, width: width, height: height }); + }; + Box.prototype.clipAtImageBorders = function (imgWidth, imgHeight) { + var _a = this, x = _a.x, y = _a.y, right = _a.right, bottom = _a.bottom; + var clippedX = Math.max(x, 0); + var clippedY = Math.max(y, 0); + var newWidth = right - clippedX; + var newHeight = bottom - clippedY; + var clippedWidth = Math.min(newWidth, imgWidth - clippedX); + var clippedHeight = Math.min(newHeight, imgHeight - clippedY); + return (new Box({ x: clippedX, y: clippedY, width: clippedWidth, height: clippedHeight })).floor(); + }; + Box.prototype.shift = function (sx, sy) { + var _a = this, width = _a.width, height = _a.height; + var x = this.x + sx; + var y = this.y + sy; + return new Box({ x: x, y: y, width: width, height: height }); + }; + Box.prototype.padAtBorders = function (imageHeight, imageWidth) { + var w = this.width + 1; + var h = this.height + 1; + var dx = 1; + var dy = 1; + var edx = w; + var edy = h; + var x = this.left; + var y = this.top; + var ex = this.right; + var ey = this.bottom; + if (ex > imageWidth) { + edx = -ex + imageWidth + w; + ex = imageWidth; + } + if (ey > imageHeight) { + edy = -ey + imageHeight + h; + ey = imageHeight; + } + if (x < 1) { + edy = 2 - x; + x = 1; + } + if (y < 1) { + edy = 2 - y; + y = 1; + } + return { dy: dy, edy: edy, dx: dx, edx: edx, y: y, ey: ey, x: x, ex: ex, w: w, h: h }; + }; + Box.prototype.calibrate = function (region) { + return new Box({ + left: this.left + (region.left * this.width), + top: this.top + (region.top * this.height), + right: this.right + (region.right * this.width), + bottom: this.bottom + (region.bottom * this.height) + }).toSquare().round(); + }; + return Box; + }()); + + var BoundingBox = /** @class */ (function (_super) { + __extends(BoundingBox, _super); + function BoundingBox(left, top, right, bottom, allowNegativeDimensions) { + if (allowNegativeDimensions === void 0) { allowNegativeDimensions = false; } + return _super.call(this, { left: left, top: top, right: right, bottom: bottom }, allowNegativeDimensions) || this; + } + return BoundingBox; + }(Box)); + + var LabeledBox = /** @class */ (function (_super) { + __extends(LabeledBox, _super); + function LabeledBox(box, label) { + var _this = _super.call(this, box) || this; + _this._label = label; + return _this; + } + LabeledBox.assertIsValidLabeledBox = function (box, callee) { + Box.assertIsValidBox(box, callee); + if (!isValidNumber(box.label)) { + throw new Error(callee + " - expected property label (" + box.label + ") to be a number"); + } + }; + Object.defineProperty(LabeledBox.prototype, "label", { + get: function () { return this._label; }, + enumerable: true, + configurable: true + }); + return LabeledBox; + }(Box)); + + var ObjectDetection = /** @class */ (function () { + function ObjectDetection(score, classScore, className, relativeBox, imageDims) { + this._imageDims = new Dimensions(imageDims.width, imageDims.height); + this._score = score; + this._classScore = classScore; + this._className = className; + this._box = new Box(relativeBox).rescale(this._imageDims); + } + Object.defineProperty(ObjectDetection.prototype, "score", { + get: function () { return this._score; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(ObjectDetection.prototype, "classScore", { + get: function () { return this._classScore; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(ObjectDetection.prototype, "className", { + get: function () { return this._className; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(ObjectDetection.prototype, "box", { + get: function () { return this._box; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(ObjectDetection.prototype, "imageDims", { + get: function () { return this._imageDims; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(ObjectDetection.prototype, "imageWidth", { + get: function () { return this.imageDims.width; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(ObjectDetection.prototype, "imageHeight", { + get: function () { return this.imageDims.height; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(ObjectDetection.prototype, "relativeBox", { + get: function () { return new Box(this._box).rescale(this.imageDims.reverse()); }, + enumerable: true, + configurable: true + }); + ObjectDetection.prototype.forSize = function (width, height) { + return new ObjectDetection(this.score, this.classScore, this.className, this.relativeBox, { width: width, height: height }); + }; + return ObjectDetection; + }()); + + var PredictedBox = /** @class */ (function (_super) { + __extends(PredictedBox, _super); + function PredictedBox(box, label, score, classScore) { + var _this = _super.call(this, box, label) || this; + _this._score = score; + _this._classScore = classScore; + return _this; + } + PredictedBox.assertIsValidPredictedBox = function (box, callee) { + LabeledBox.assertIsValidLabeledBox(box, callee); + if (!isValidProbablitiy(box.score) + || !isValidProbablitiy(box.classScore)) { + throw new Error(callee + " - expected properties score (" + box.score + ") and (" + box.classScore + ") to be a number between [0, 1]"); + } + }; + Object.defineProperty(PredictedBox.prototype, "score", { + get: function () { return this._score; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(PredictedBox.prototype, "classScore", { + get: function () { return this._classScore; }, + enumerable: true, + configurable: true + }); + return PredictedBox; + }(LabeledBox)); + + var Rect = /** @class */ (function (_super) { + __extends(Rect, _super); + function Rect(x, y, width, height, allowNegativeDimensions) { + if (allowNegativeDimensions === void 0) { allowNegativeDimensions = false; } + return _super.call(this, { x: x, y: y, width: width, height: height }, allowNegativeDimensions) || this; + } + return Rect; + }(Box)); + + function createBrowserEnv() { + var fetch = window['fetch'] || function () { + throw new Error('fetch - missing fetch implementation for browser environment'); + }; + var readFile = function () { + throw new Error('readFile - filesystem not available for browser environment'); + }; + return { + Canvas: HTMLCanvasElement, + CanvasRenderingContext2D: CanvasRenderingContext2D, + Image: HTMLImageElement, + ImageData: ImageData, + Video: HTMLVideoElement, + createCanvasElement: function () { return document.createElement('canvas'); }, + createImageElement: function () { return document.createElement('img'); }, + fetch: fetch, + readFile: readFile + }; + } + + function createFileSystem(fs) { + var requireFsError = ''; + if (!fs) { + try { + fs = require('fs'); + } + catch (err) { + requireFsError = err.toString(); + } + } + var readFile = fs + ? function (filePath) { + return new Promise(function (res, rej) { + fs.readFile(filePath, function (err, buffer) { + return err ? rej(err) : res(buffer); + }); + }); + } + : function () { + throw new Error("readFile - failed to require fs in nodejs environment with error: " + requireFsError); + }; + return { + readFile: readFile + }; + } + + function createNodejsEnv() { + var Canvas = global['Canvas'] || global['HTMLCanvasElement']; + var Image = global['Image'] || global['HTMLImageElement']; + var createCanvasElement = function () { + if (Canvas) { + return new Canvas(); + } + throw new Error('createCanvasElement - missing Canvas implementation for nodejs environment'); + }; + var createImageElement = function () { + if (Image) { + return new Image(); + } + throw new Error('createImageElement - missing Image implementation for nodejs environment'); + }; + var fetch = global['fetch'] || function () { + throw new Error('fetch - missing fetch implementation for nodejs environment'); + }; + var fileSystem = createFileSystem(); + return __assign({ Canvas: Canvas || /** @class */ (function () { + function Canvas() { + } + return Canvas; + }()), CanvasRenderingContext2D: global['CanvasRenderingContext2D'] || /** @class */ (function () { + function class_1() { + } + return class_1; + }()), Image: Image || /** @class */ (function () { + function Image() { + } + return Image; + }()), ImageData: global['ImageData'] || /** @class */ (function () { + function class_2() { + } + return class_2; + }()), Video: global['HTMLVideoElement'] || /** @class */ (function () { + function class_3() { + } + return class_3; + }()), createCanvasElement: createCanvasElement, + createImageElement: createImageElement, + fetch: fetch }, fileSystem); + } + + function isBrowser() { + return typeof window === 'object' + && typeof document !== 'undefined' + && typeof HTMLImageElement !== 'undefined' + && typeof HTMLCanvasElement !== 'undefined' + && typeof HTMLVideoElement !== 'undefined' + && typeof ImageData !== 'undefined' + && typeof CanvasRenderingContext2D !== 'undefined'; + } + + function isNodejs() { + return typeof global === 'object' + && typeof require === 'function' + && typeof module !== 'undefined' + // issues with gatsby.js: module.exports is undefined + // && !!module.exports + && typeof process !== 'undefined' && !!process.version; + } + + var environment; + function getEnv() { + if (!environment) { + throw new Error('getEnv - environment is not defined, check isNodejs() and isBrowser()'); + } + return environment; + } + function setEnv(env) { + environment = env; + } + function initialize() { + // check for isBrowser() first to prevent electron renderer process + // to be initialized with wrong environment due to isNodejs() returning true + if (isBrowser()) { + setEnv(createBrowserEnv()); + } + if (isNodejs()) { + setEnv(createNodejsEnv()); + } + } + function monkeyPatch(env) { + if (!environment) { + initialize(); + } + if (!environment) { + throw new Error('monkeyPatch - environment is not defined, check isNodejs() and isBrowser()'); + } + var _a = env.Canvas, Canvas = _a === void 0 ? environment.Canvas : _a, _b = env.Image, Image = _b === void 0 ? environment.Image : _b; + environment.Canvas = Canvas; + environment.Image = Image; + environment.createCanvasElement = env.createCanvasElement || (function () { return new Canvas(); }); + environment.createImageElement = env.createImageElement || (function () { return new Image(); }); + environment.ImageData = env.ImageData || environment.ImageData; + environment.Video = env.Video || environment.Video; + environment.fetch = env.fetch || environment.fetch; + environment.readFile = env.readFile || environment.readFile; + } + var env = { + getEnv: getEnv, + setEnv: setEnv, + initialize: initialize, + createBrowserEnv: createBrowserEnv, + createFileSystem: createFileSystem, + createNodejsEnv: createNodejsEnv, + monkeyPatch: monkeyPatch, + isBrowser: isBrowser, + isNodejs: isNodejs + }; + initialize(); + + function resolveInput(arg) { + if (!env.isNodejs() && typeof arg === 'string') { + return document.getElementById(arg); + } + return arg; + } + + function getContext2dOrThrow(canvasArg) { + var _a = env.getEnv(), Canvas = _a.Canvas, CanvasRenderingContext2D = _a.CanvasRenderingContext2D; + if (canvasArg instanceof CanvasRenderingContext2D) { + return canvasArg; + } + var canvas = resolveInput(canvasArg); + if (!(canvas instanceof Canvas)) { + throw new Error('resolveContext2d - expected canvas to be of instance of Canvas'); + } + var ctx = canvas.getContext('2d'); + if (!ctx) { + throw new Error('resolveContext2d - canvas 2d context is null'); + } + return ctx; + } + + var AnchorPosition; + (function (AnchorPosition) { + AnchorPosition["TOP_LEFT"] = "TOP_LEFT"; + AnchorPosition["TOP_RIGHT"] = "TOP_RIGHT"; + AnchorPosition["BOTTOM_LEFT"] = "BOTTOM_LEFT"; + AnchorPosition["BOTTOM_RIGHT"] = "BOTTOM_RIGHT"; + })(AnchorPosition || (AnchorPosition = {})); + var DrawTextFieldOptions = /** @class */ (function () { + function DrawTextFieldOptions(options) { + if (options === void 0) { options = {}; } + var anchorPosition = options.anchorPosition, backgroundColor = options.backgroundColor, fontColor = options.fontColor, fontSize = options.fontSize, fontStyle = options.fontStyle, padding = options.padding; + this.anchorPosition = anchorPosition || AnchorPosition.TOP_LEFT; + this.backgroundColor = backgroundColor || 'rgba(0, 0, 0, 0.5)'; + this.fontColor = fontColor || 'rgba(255, 255, 255, 1)'; + this.fontSize = fontSize || 14; + this.fontStyle = fontStyle || 'Georgia'; + this.padding = padding || 4; + } + return DrawTextFieldOptions; + }()); + var DrawTextField = /** @class */ (function () { + function DrawTextField(text, anchor, options) { + if (options === void 0) { options = {}; } + this.text = typeof text === 'string' + ? [text] + : (text instanceof DrawTextField ? text.text : text); + this.anchor = anchor; + this.options = new DrawTextFieldOptions(options); + } + DrawTextField.prototype.measureWidth = function (ctx) { + var padding = this.options.padding; + return this.text.map(function (l) { return ctx.measureText(l).width; }).reduce(function (w0, w1) { return w0 < w1 ? w1 : w0; }, 0) + (2 * padding); + }; + DrawTextField.prototype.measureHeight = function () { + var _a = this.options, fontSize = _a.fontSize, padding = _a.padding; + return this.text.length * fontSize + (2 * padding); + }; + DrawTextField.prototype.getUpperLeft = function (ctx, canvasDims) { + var anchorPosition = this.options.anchorPosition; + var isShiftLeft = anchorPosition === AnchorPosition.BOTTOM_RIGHT || anchorPosition === AnchorPosition.TOP_RIGHT; + var isShiftTop = anchorPosition === AnchorPosition.BOTTOM_LEFT || anchorPosition === AnchorPosition.BOTTOM_RIGHT; + var textFieldWidth = this.measureWidth(ctx); + var textFieldHeight = this.measureHeight(); + var x = (isShiftLeft ? this.anchor.x - textFieldWidth : this.anchor.x); + var y = isShiftTop ? this.anchor.y - textFieldHeight : this.anchor.y; + // adjust anchor if text box exceeds canvas borders + if (canvasDims) { + var width = canvasDims.width, height = canvasDims.height; + var newX = Math.max(Math.min(x, width - textFieldWidth), 0); + var newY = Math.max(Math.min(y, height - textFieldHeight), 0); + return { x: newX, y: newY }; + } + return { x: x, y: y }; + }; + DrawTextField.prototype.draw = function (canvasArg) { + var canvas = resolveInput(canvasArg); + var ctx = getContext2dOrThrow(canvas); + var _a = this.options, backgroundColor = _a.backgroundColor, fontColor = _a.fontColor, fontSize = _a.fontSize, fontStyle = _a.fontStyle, padding = _a.padding; + ctx.font = fontSize + "px " + fontStyle; + var maxTextWidth = this.measureWidth(ctx); + var textHeight = this.measureHeight(); + ctx.fillStyle = backgroundColor; + var upperLeft = this.getUpperLeft(ctx, canvas); + ctx.fillRect(upperLeft.x, upperLeft.y, maxTextWidth, textHeight); + ctx.fillStyle = fontColor; + this.text.forEach(function (textLine, i) { + var x = padding + upperLeft.x; + var y = padding + upperLeft.y + ((i + 1) * fontSize); + ctx.fillText(textLine, x, y); + }); + }; + return DrawTextField; + }()); + + var DrawBoxOptions = /** @class */ (function () { + function DrawBoxOptions(options) { + if (options === void 0) { options = {}; } + var boxColor = options.boxColor, lineWidth = options.lineWidth, label = options.label, drawLabelOptions = options.drawLabelOptions; + this.boxColor = boxColor || 'rgba(0, 0, 255, 1)'; + this.lineWidth = lineWidth || 2; + this.label = label; + var defaultDrawLabelOptions = { + anchorPosition: AnchorPosition.BOTTOM_LEFT, + backgroundColor: this.boxColor + }; + this.drawLabelOptions = new DrawTextFieldOptions(Object.assign({}, defaultDrawLabelOptions, drawLabelOptions)); + } + return DrawBoxOptions; + }()); + var DrawBox = /** @class */ (function () { + function DrawBox(box, options) { + if (options === void 0) { options = {}; } + this.box = new Box(box); + this.options = new DrawBoxOptions(options); + } + DrawBox.prototype.draw = function (canvasArg) { + var ctx = getContext2dOrThrow(canvasArg); + var _a = this.options, boxColor = _a.boxColor, lineWidth = _a.lineWidth; + var _b = this.box, x = _b.x, y = _b.y, width = _b.width, height = _b.height; + ctx.strokeStyle = boxColor; + ctx.lineWidth = lineWidth; + ctx.strokeRect(x, y, width, height); + var label = this.options.label; + if (label) { + new DrawTextField([label], { x: x - (lineWidth / 2), y: y }, this.options.drawLabelOptions).draw(canvasArg); + } + }; + return DrawBox; + }()); + + + + var drawBase = /*#__PURE__*/Object.freeze({ + DrawBoxOptions: DrawBoxOptions, + DrawBox: DrawBox, + get AnchorPosition () { return AnchorPosition; }, + DrawTextFieldOptions: DrawTextFieldOptions, + DrawTextField: DrawTextField + }); + + function convLayer(x, params, padding, withRelu) { + if (padding === void 0) { padding = 'same'; } + if (withRelu === void 0) { withRelu = false; } + return Fe(function () { + var out = Yu(nu(x, params.filters, [1, 1], padding), params.bias); + return withRelu ? Sl(out) : out; + }); + } + + function disposeUnusedWeightTensors(weightMap, paramMappings) { + Object.keys(weightMap).forEach(function (path) { + if (!paramMappings.some(function (pm) { return pm.originalPath === path; })) { + weightMap[path].dispose(); + } + }); + } + + function extractConvParamsFactory(extractWeights, paramMappings) { + return function (channelsIn, channelsOut, filterSize, mappedPrefix) { + var filters = xn(extractWeights(channelsIn * channelsOut * filterSize * filterSize), [filterSize, filterSize, channelsIn, channelsOut]); + var bias = mn(extractWeights(channelsOut)); + paramMappings.push({ paramPath: mappedPrefix + "/filters" }, { paramPath: mappedPrefix + "/bias" }); + return { filters: filters, bias: bias }; + }; + } + + function extractFCParamsFactory(extractWeights, paramMappings) { + return function (channelsIn, channelsOut, mappedPrefix) { + var fc_weights = gn(extractWeights(channelsIn * channelsOut), [channelsIn, channelsOut]); + var fc_bias = mn(extractWeights(channelsOut)); + paramMappings.push({ paramPath: mappedPrefix + "/weights" }, { paramPath: mappedPrefix + "/bias" }); + return { + weights: fc_weights, + bias: fc_bias + }; + }; + } + + var SeparableConvParams = /** @class */ (function () { + function SeparableConvParams(depthwise_filter, pointwise_filter, bias) { + this.depthwise_filter = depthwise_filter; + this.pointwise_filter = pointwise_filter; + this.bias = bias; + } + return SeparableConvParams; + }()); + + function extractSeparableConvParamsFactory(extractWeights, paramMappings) { + return function (channelsIn, channelsOut, mappedPrefix) { + var depthwise_filter = xn(extractWeights(3 * 3 * channelsIn), [3, 3, channelsIn, 1]); + var pointwise_filter = xn(extractWeights(channelsIn * channelsOut), [1, 1, channelsIn, channelsOut]); + var bias = mn(extractWeights(channelsOut)); + paramMappings.push({ paramPath: mappedPrefix + "/depthwise_filter" }, { paramPath: mappedPrefix + "/pointwise_filter" }, { paramPath: mappedPrefix + "/bias" }); + return new SeparableConvParams(depthwise_filter, pointwise_filter, bias); + }; + } + function loadSeparableConvParamsFactory(extractWeightEntry) { + return function (prefix) { + var depthwise_filter = extractWeightEntry(prefix + "/depthwise_filter", 4); + var pointwise_filter = extractWeightEntry(prefix + "/pointwise_filter", 4); + var bias = extractWeightEntry(prefix + "/bias", 1); + return new SeparableConvParams(depthwise_filter, pointwise_filter, bias); + }; + } + + function extractWeightEntryFactory(weightMap, paramMappings) { + return function (originalPath, paramRank, mappedPath) { + var tensor = weightMap[originalPath]; + if (!isTensor(tensor, paramRank)) { + throw new Error("expected weightMap[" + originalPath + "] to be a Tensor" + paramRank + "D, instead have " + tensor); + } + paramMappings.push({ originalPath: originalPath, paramPath: mappedPath || originalPath }); + return tensor; + }; + } + + function extractWeightsFactory(weights) { + var remainingWeights = weights; + function extractWeights(numWeights) { + var ret = remainingWeights.slice(0, numWeights); + remainingWeights = remainingWeights.slice(numWeights); + return ret; + } + function getRemainingWeights() { + return remainingWeights; + } + return { + extractWeights: extractWeights, + getRemainingWeights: getRemainingWeights + }; + } + + function getModelUris(uri, defaultModelName) { + var defaultManifestFilename = defaultModelName + "-weights_manifest.json"; + if (!uri) { + return { + modelBaseUri: '', + manifestUri: defaultManifestFilename + }; + } + if (uri === '/') { + return { + modelBaseUri: '/', + manifestUri: "/" + defaultManifestFilename + }; + } + var protocol = uri.startsWith('http://') ? 'http://' : uri.startsWith('https://') ? 'https://' : ''; + uri = uri.replace(protocol, ''); + var parts = uri.split('/').filter(function (s) { return s; }); + var manifestFile = uri.endsWith('.json') + ? parts[parts.length - 1] + : defaultManifestFilename; + var modelBaseUri = protocol + (uri.endsWith('.json') ? parts.slice(0, parts.length - 1) : parts).join('/'); + modelBaseUri = uri.startsWith('/') ? "/" + modelBaseUri : modelBaseUri; + return { + modelBaseUri: modelBaseUri, + manifestUri: modelBaseUri === '/' ? "/" + manifestFile : modelBaseUri + "/" + manifestFile + }; + } + + function isMediaLoaded(media) { + var _a = env.getEnv(), Image = _a.Image, Video = _a.Video; + return (media instanceof Image && media.complete) + || (media instanceof Video && media.readyState >= 3); + } + + function awaitMediaLoaded(media) { + return new Promise(function (resolve, reject) { + if (media instanceof env.getEnv().Canvas || isMediaLoaded(media)) { + return resolve(); + } + function onLoad(e) { + if (!e.currentTarget) + return; + e.currentTarget.removeEventListener('load', onLoad); + e.currentTarget.removeEventListener('error', onError); + resolve(e); + } + function onError(e) { + if (!e.currentTarget) + return; + e.currentTarget.removeEventListener('load', onLoad); + e.currentTarget.removeEventListener('error', onError); + reject(e); + } + media.addEventListener('load', onLoad); + media.addEventListener('error', onError); + }); + } + + function bufferToImage(buf) { + return new Promise(function (resolve, reject) { + if (!(buf instanceof Blob)) { + return reject('bufferToImage - expected buf to be of type: Blob'); + } + var reader = new FileReader(); + reader.onload = function () { + if (typeof reader.result !== 'string') { + return reject('bufferToImage - expected reader.result to be a string, in onload'); + } + var img = env.getEnv().createImageElement(); + img.onload = function () { return resolve(img); }; + img.onerror = reject; + img.src = reader.result; + }; + reader.onerror = reject; + reader.readAsDataURL(buf); + }); + } + + function getMediaDimensions(input) { + var _a = env.getEnv(), Image = _a.Image, Video = _a.Video; + if (input instanceof Image) { + return new Dimensions(input.naturalWidth, input.naturalHeight); + } + if (input instanceof Video) { + return new Dimensions(input.videoWidth, input.videoHeight); + } + return new Dimensions(input.width, input.height); + } + + function createCanvas(_a) { + var width = _a.width, height = _a.height; + var createCanvasElement = env.getEnv().createCanvasElement; + var canvas = createCanvasElement(); + canvas.width = width; + canvas.height = height; + return canvas; + } + function createCanvasFromMedia(media, dims) { + var ImageData = env.getEnv().ImageData; + if (!(media instanceof ImageData) && !isMediaLoaded(media)) { + throw new Error('createCanvasFromMedia - media has not finished loading yet'); + } + var _a = dims || getMediaDimensions(media), width = _a.width, height = _a.height; + var canvas = createCanvas({ width: width, height: height }); + if (media instanceof ImageData) { + getContext2dOrThrow(canvas).putImageData(media, 0, 0); + } + else { + getContext2dOrThrow(canvas).drawImage(media, 0, 0, width, height); + } + return canvas; + } + + function fetchOrThrow(url, init) { + return __awaiter(this, void 0, void 0, function () { + var fetch, res; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + fetch = env.getEnv().fetch; + return [4 /*yield*/, fetch(url, init)]; + case 1: + res = _a.sent(); + if (!(res.status < 400)) { + throw new Error("failed to fetch: (" + res.status + ") " + res.statusText + ", from url: " + res.url); + } + return [2 /*return*/, res]; + } + }); + }); + } + + function fetchImage(uri) { + return __awaiter(this, void 0, void 0, function () { + var res, blob; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, fetchOrThrow(uri)]; + case 1: + res = _a.sent(); + return [4 /*yield*/, (res).blob()]; + case 2: + blob = _a.sent(); + if (!blob.type.startsWith('image/')) { + throw new Error("fetchImage - expected blob type to be of type image/*, instead have: " + blob.type + ", for url: " + res.url); + } + return [2 /*return*/, bufferToImage(blob)]; + } + }); + }); + } + + function fetchJson(uri) { + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, fetchOrThrow(uri)]; + case 1: return [2 /*return*/, (_a.sent()).json()]; + } + }); + }); + } + + function fetchNetWeights(uri) { + return __awaiter(this, void 0, void 0, function () { + var _a; + return __generator(this, function (_b) { + switch (_b.label) { + case 0: + _a = Float32Array.bind; + return [4 /*yield*/, fetchOrThrow(uri)]; + case 1: return [4 /*yield*/, (_b.sent()).arrayBuffer()]; + case 2: return [2 /*return*/, new (_a.apply(Float32Array, [void 0, _b.sent()]))()]; + } + }); + }); + } + + function imageTensorToCanvas(imgTensor, canvas) { + return __awaiter(this, void 0, void 0, function () { + var targetCanvas, _a, height, width, numChannels, imgTensor3D; + return __generator(this, function (_b) { + switch (_b.label) { + case 0: + targetCanvas = canvas || env.getEnv().createCanvasElement(); + _a = imgTensor.shape.slice(isTensor4D(imgTensor) ? 1 : 0), height = _a[0], width = _a[1], numChannels = _a[2]; + imgTensor3D = Fe(function () { return imgTensor.as3D(height, width, numChannels).toInt(); }); + return [4 /*yield*/, kh.toPixels(imgTensor3D, targetCanvas)]; + case 1: + _b.sent(); + imgTensor3D.dispose(); + return [2 /*return*/, targetCanvas]; + } + }); + }); + } + + function imageToSquare(input, inputSize, centerImage) { + if (centerImage === void 0) { centerImage = false; } + var _a = env.getEnv(), Image = _a.Image, Canvas = _a.Canvas; + if (!(input instanceof Image || input instanceof Canvas)) { + throw new Error('imageToSquare - expected arg0 to be HTMLImageElement | HTMLCanvasElement'); + } + var dims = getMediaDimensions(input); + var scale = inputSize / Math.max(dims.height, dims.width); + var width = scale * dims.width; + var height = scale * dims.height; + var targetCanvas = createCanvas({ width: inputSize, height: inputSize }); + var inputCanvas = input instanceof Canvas ? input : createCanvasFromMedia(input); + var offset = Math.abs(width - height) / 2; + var dx = centerImage && width < height ? offset : 0; + var dy = centerImage && height < width ? offset : 0; + getContext2dOrThrow(targetCanvas).drawImage(inputCanvas, dx, dy, width, height); + return targetCanvas; + } + + function isMediaElement(input) { + var _a = env.getEnv(), Image = _a.Image, Canvas = _a.Canvas, Video = _a.Video; + return input instanceof Image + || input instanceof Canvas + || input instanceof Video; + } + + function loadWeightMap(uri, defaultModelName) { + return __awaiter(this, void 0, void 0, function () { + var _a, manifestUri, modelBaseUri, manifest; + return __generator(this, function (_b) { + switch (_b.label) { + case 0: + _a = getModelUris(uri, defaultModelName), manifestUri = _a.manifestUri, modelBaseUri = _a.modelBaseUri; + return [4 /*yield*/, fetchJson(manifestUri)]; + case 1: + manifest = _b.sent(); + return [2 /*return*/, Rh.loadWeights(manifest, modelBaseUri)]; + } + }); + }); + } + + function matchDimensions(input, reference, useMediaDimensions) { + if (useMediaDimensions === void 0) { useMediaDimensions = false; } + var _a = useMediaDimensions + ? getMediaDimensions(reference) + : reference, width = _a.width, height = _a.height; + input.width = width; + input.height = height; + return { width: width, height: height }; + } + + /** + * Pads the smaller dimension of an image tensor with zeros, such that width === height. + * + * @param imgTensor The image tensor. + * @param isCenterImage (optional, default: false) If true, add an equal amount of padding on + * both sides of the minor dimension oof the image. + * @returns The padded tensor with width === height. + */ + function padToSquare(imgTensor, isCenterImage) { + if (isCenterImage === void 0) { isCenterImage = false; } + return Fe(function () { + var _a = imgTensor.shape.slice(1), height = _a[0], width = _a[1]; + if (height === width) { + return imgTensor; + } + var dimDiff = Math.abs(height - width); + var paddingAmount = Math.round(dimDiff * (isCenterImage ? 0.5 : 1)); + var paddingAxis = height > width ? 2 : 1; + var createPaddingTensor = function (paddingAmount) { + var paddingTensorShape = imgTensor.shape.slice(); + paddingTensorShape[paddingAxis] = paddingAmount; + return Rn(paddingTensorShape, 0); + }; + var paddingTensorAppend = createPaddingTensor(paddingAmount); + var remainingPaddingAmount = dimDiff - paddingTensorAppend.shape[paddingAxis]; + var paddingTensorPrepend = isCenterImage && remainingPaddingAmount + ? createPaddingTensor(remainingPaddingAmount) + : null; + var tensorsToStack = [ + paddingTensorPrepend, + imgTensor, + paddingTensorAppend + ] + .filter(function (t) { return !!t; }) + .map(function (t) { return t.toFloat(); }); + return An(tensorsToStack, paddingAxis); + }); + } + + var NetInput = /** @class */ (function () { + function NetInput(inputs, treatAsBatchInput) { + var _this = this; + if (treatAsBatchInput === void 0) { treatAsBatchInput = false; } + this._imageTensors = []; + this._canvases = []; + this._treatAsBatchInput = false; + this._inputDimensions = []; + if (!Array.isArray(inputs)) { + throw new Error("NetInput.constructor - expected inputs to be an Array of TResolvedNetInput or to be instanceof tf.Tensor4D, instead have " + inputs); + } + this._treatAsBatchInput = treatAsBatchInput; + this._batchSize = inputs.length; + inputs.forEach(function (input, idx) { + if (isTensor3D(input)) { + _this._imageTensors[idx] = input; + _this._inputDimensions[idx] = input.shape; + return; + } + if (isTensor4D(input)) { + var batchSize = input.shape[0]; + if (batchSize !== 1) { + throw new Error("NetInput - tf.Tensor4D with batchSize " + batchSize + " passed, but not supported in input array"); + } + _this._imageTensors[idx] = input; + _this._inputDimensions[idx] = input.shape.slice(1); + return; + } + var canvas = input instanceof env.getEnv().Canvas ? input : createCanvasFromMedia(input); + _this._canvases[idx] = canvas; + _this._inputDimensions[idx] = [canvas.height, canvas.width, 3]; + }); + } + Object.defineProperty(NetInput.prototype, "imageTensors", { + get: function () { + return this._imageTensors; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(NetInput.prototype, "canvases", { + get: function () { + return this._canvases; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(NetInput.prototype, "isBatchInput", { + get: function () { + return this.batchSize > 1 || this._treatAsBatchInput; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(NetInput.prototype, "batchSize", { + get: function () { + return this._batchSize; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(NetInput.prototype, "inputDimensions", { + get: function () { + return this._inputDimensions; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(NetInput.prototype, "inputSize", { + get: function () { + return this._inputSize; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(NetInput.prototype, "reshapedInputDimensions", { + get: function () { + var _this = this; + return range(this.batchSize, 0, 1).map(function (_, batchIdx) { return _this.getReshapedInputDimensions(batchIdx); }); + }, + enumerable: true, + configurable: true + }); + NetInput.prototype.getInput = function (batchIdx) { + return this.canvases[batchIdx] || this.imageTensors[batchIdx]; + }; + NetInput.prototype.getInputDimensions = function (batchIdx) { + return this._inputDimensions[batchIdx]; + }; + NetInput.prototype.getInputHeight = function (batchIdx) { + return this._inputDimensions[batchIdx][0]; + }; + NetInput.prototype.getInputWidth = function (batchIdx) { + return this._inputDimensions[batchIdx][1]; + }; + NetInput.prototype.getReshapedInputDimensions = function (batchIdx) { + if (typeof this.inputSize !== 'number') { + throw new Error('getReshapedInputDimensions - inputSize not set, toBatchTensor has not been called yet'); + } + var width = this.getInputWidth(batchIdx); + var height = this.getInputHeight(batchIdx); + return computeReshapedDimensions({ width: width, height: height }, this.inputSize); + }; + /** + * Create a batch tensor from all input canvases and tensors + * with size [batchSize, inputSize, inputSize, 3]. + * + * @param inputSize Height and width of the tensor. + * @param isCenterImage (optional, default: false) If true, add an equal amount of padding on + * both sides of the minor dimension oof the image. + * @returns The batch tensor. + */ + NetInput.prototype.toBatchTensor = function (inputSize, isCenterInputs) { + var _this = this; + if (isCenterInputs === void 0) { isCenterInputs = true; } + this._inputSize = inputSize; + return Fe(function () { + var inputTensors = range(_this.batchSize, 0, 1).map(function (batchIdx) { + var input = _this.getInput(batchIdx); + if (input instanceof ht) { + var imgTensor = isTensor4D(input) ? input : input.expandDims(); + imgTensor = padToSquare(imgTensor, isCenterInputs); + if (imgTensor.shape[1] !== inputSize || imgTensor.shape[2] !== inputSize) { + imgTensor = wc.resizeBilinear(imgTensor, [inputSize, inputSize]); + } + return imgTensor.as3D(inputSize, inputSize, 3); + } + if (input instanceof env.getEnv().Canvas) { + return kh.fromPixels(imageToSquare(input, inputSize, isCenterInputs)); + } + throw new Error("toBatchTensor - at batchIdx " + batchIdx + ", expected input to be instanceof tf.Tensor or instanceof HTMLCanvasElement, instead have " + input); + }); + var batchTensor = dr(inputTensors.map(function (t) { return t.toFloat(); })).as4D(_this.batchSize, inputSize, inputSize, 3); + return batchTensor; + }); + }; + return NetInput; + }()); + + /** + * Validates the input to make sure, they are valid net inputs and awaits all media elements + * to be finished loading. + * + * @param input The input, which can be a media element or an array of different media elements. + * @returns A NetInput instance, which can be passed into one of the neural networks. + */ + function toNetInput(inputs) { + return __awaiter(this, void 0, void 0, function () { + var inputArgArray, getIdxHint, inputArray; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + if (inputs instanceof NetInput) { + return [2 /*return*/, inputs]; + } + inputArgArray = Array.isArray(inputs) + ? inputs + : [inputs]; + if (!inputArgArray.length) { + throw new Error('toNetInput - empty array passed as input'); + } + getIdxHint = function (idx) { return Array.isArray(inputs) ? " at input index " + idx + ":" : ''; }; + inputArray = inputArgArray.map(resolveInput); + inputArray.forEach(function (input, i) { + if (!isMediaElement(input) && !isTensor3D(input) && !isTensor4D(input)) { + if (typeof inputArgArray[i] === 'string') { + throw new Error("toNetInput -" + getIdxHint(i) + " string passed, but could not resolve HTMLElement for element id " + inputArgArray[i]); + } + throw new Error("toNetInput -" + getIdxHint(i) + " expected media to be of type HTMLImageElement | HTMLVideoElement | HTMLCanvasElement | tf.Tensor3D, or to be an element id"); + } + if (isTensor4D(input)) { + // if tf.Tensor4D is passed in the input array, the batch size has to be 1 + var batchSize = input.shape[0]; + if (batchSize !== 1) { + throw new Error("toNetInput -" + getIdxHint(i) + " tf.Tensor4D with batchSize " + batchSize + " passed, but not supported in input array"); + } + } + }); + // wait for all media elements being loaded + return [4 /*yield*/, Promise.all(inputArray.map(function (input) { return isMediaElement(input) && awaitMediaLoaded(input); }))]; + case 1: + // wait for all media elements being loaded + _a.sent(); + return [2 /*return*/, new NetInput(inputArray, Array.isArray(inputs))]; + } + }); + }); + } + + var NeuralNetwork = /** @class */ (function () { + function NeuralNetwork(_name) { + this._name = _name; + this._params = undefined; + this._paramMappings = []; + } + Object.defineProperty(NeuralNetwork.prototype, "params", { + get: function () { return this._params; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(NeuralNetwork.prototype, "paramMappings", { + get: function () { return this._paramMappings; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(NeuralNetwork.prototype, "isLoaded", { + get: function () { return !!this.params; }, + enumerable: true, + configurable: true + }); + NeuralNetwork.prototype.getParamFromPath = function (paramPath) { + var _a = this.traversePropertyPath(paramPath), obj = _a.obj, objProp = _a.objProp; + return obj[objProp]; + }; + NeuralNetwork.prototype.reassignParamFromPath = function (paramPath, tensor) { + var _a = this.traversePropertyPath(paramPath), obj = _a.obj, objProp = _a.objProp; + obj[objProp].dispose(); + obj[objProp] = tensor; + }; + NeuralNetwork.prototype.getParamList = function () { + var _this = this; + return this._paramMappings.map(function (_a) { + var paramPath = _a.paramPath; + return ({ + path: paramPath, + tensor: _this.getParamFromPath(paramPath) + }); + }); + }; + NeuralNetwork.prototype.getTrainableParams = function () { + return this.getParamList().filter(function (param) { return param.tensor instanceof pt; }); + }; + NeuralNetwork.prototype.getFrozenParams = function () { + return this.getParamList().filter(function (param) { return !(param.tensor instanceof pt); }); + }; + NeuralNetwork.prototype.variable = function () { + var _this = this; + this.getFrozenParams().forEach(function (_a) { + var path = _a.path, tensor = _a.tensor; + _this.reassignParamFromPath(path, tensor.variable()); + }); + }; + NeuralNetwork.prototype.freeze = function () { + var _this = this; + this.getTrainableParams().forEach(function (_a) { + var path = _a.path, variable = _a.tensor; + var tensor = fn(variable.dataSync()); + variable.dispose(); + _this.reassignParamFromPath(path, tensor); + }); + }; + NeuralNetwork.prototype.dispose = function (throwOnRedispose) { + if (throwOnRedispose === void 0) { throwOnRedispose = true; } + this.getParamList().forEach(function (param) { + if (throwOnRedispose && param.tensor.isDisposed) { + throw new Error("param tensor has already been disposed for path " + param.path); + } + param.tensor.dispose(); + }); + this._params = undefined; + }; + NeuralNetwork.prototype.serializeParams = function () { + return new Float32Array(this.getParamList() + .map(function (_a) { + var tensor = _a.tensor; + return Array.from(tensor.dataSync()); + }) + .reduce(function (flat, arr) { return flat.concat(arr); })); + }; + NeuralNetwork.prototype.load = function (weightsOrUrl) { + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + if (weightsOrUrl instanceof Float32Array) { + this.extractWeights(weightsOrUrl); + return [2 /*return*/]; + } + return [4 /*yield*/, this.loadFromUri(weightsOrUrl)]; + case 1: + _a.sent(); + return [2 /*return*/]; + } + }); + }); + }; + NeuralNetwork.prototype.loadFromUri = function (uri) { + return __awaiter(this, void 0, void 0, function () { + var weightMap; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + if (uri && typeof uri !== 'string') { + throw new Error(this._name + ".loadFromUri - expected model uri"); + } + return [4 /*yield*/, loadWeightMap(uri, this.getDefaultModelName())]; + case 1: + weightMap = _a.sent(); + this.loadFromWeightMap(weightMap); + return [2 /*return*/]; + } + }); + }); + }; + NeuralNetwork.prototype.loadFromDisk = function (filePath) { + return __awaiter(this, void 0, void 0, function () { + var readFile, _a, manifestUri, modelBaseUri, fetchWeightsFromDisk, loadWeights, manifest, _b, _c, weightMap; + return __generator(this, function (_d) { + switch (_d.label) { + case 0: + if (filePath && typeof filePath !== 'string') { + throw new Error(this._name + ".loadFromDisk - expected model file path"); + } + readFile = env.getEnv().readFile; + _a = getModelUris(filePath, this.getDefaultModelName()), manifestUri = _a.manifestUri, modelBaseUri = _a.modelBaseUri; + fetchWeightsFromDisk = function (filePaths) { return Promise.all(filePaths.map(function (filePath) { return readFile(filePath).then(function (buf) { return buf.buffer; }); })); }; + loadWeights = Rh.weightsLoaderFactory(fetchWeightsFromDisk); + _c = (_b = JSON).parse; + return [4 /*yield*/, readFile(manifestUri)]; + case 1: + manifest = _c.apply(_b, [(_d.sent()).toString()]); + return [4 /*yield*/, loadWeights(manifest, modelBaseUri)]; + case 2: + weightMap = _d.sent(); + this.loadFromWeightMap(weightMap); + return [2 /*return*/]; + } + }); + }); + }; + NeuralNetwork.prototype.loadFromWeightMap = function (weightMap) { + var _a = this.extractParamsFromWeigthMap(weightMap), paramMappings = _a.paramMappings, params = _a.params; + this._paramMappings = paramMappings; + this._params = params; + }; + NeuralNetwork.prototype.extractWeights = function (weights) { + var _a = this.extractParams(weights), paramMappings = _a.paramMappings, params = _a.params; + this._paramMappings = paramMappings; + this._params = params; + }; + NeuralNetwork.prototype.traversePropertyPath = function (paramPath) { + if (!this.params) { + throw new Error("traversePropertyPath - model has no loaded params"); + } + var result = paramPath.split('/').reduce(function (res, objProp) { + if (!res.nextObj.hasOwnProperty(objProp)) { + throw new Error("traversePropertyPath - object does not have property " + objProp + ", for path " + paramPath); + } + return { obj: res.nextObj, objProp: objProp, nextObj: res.nextObj[objProp] }; + }, { nextObj: this.params }); + var obj = result.obj, objProp = result.objProp; + if (!obj || !objProp || !(obj[objProp] instanceof ht)) { + throw new Error("traversePropertyPath - parameter is not a tensor, for path " + paramPath); + } + return { obj: obj, objProp: objProp }; + }; + return NeuralNetwork; + }()); + + function iou(box1, box2, isIOU) { + if (isIOU === void 0) { isIOU = true; } + var width = Math.max(0.0, Math.min(box1.right, box2.right) - Math.max(box1.left, box2.left)); + var height = Math.max(0.0, Math.min(box1.bottom, box2.bottom) - Math.max(box1.top, box2.top)); + var interSection = width * height; + return isIOU + ? interSection / (box1.area + box2.area - interSection) + : interSection / Math.min(box1.area, box2.area); + } + + function minBbox(pts) { + var xs = pts.map(function (pt) { return pt.x; }); + var ys = pts.map(function (pt) { return pt.y; }); + var minX = xs.reduce(function (min, x) { return x < min ? x : min; }, Infinity); + var minY = ys.reduce(function (min, y) { return y < min ? y : min; }, Infinity); + var maxX = xs.reduce(function (max, x) { return max < x ? x : max; }, 0); + var maxY = ys.reduce(function (max, y) { return max < y ? y : max; }, 0); + return new BoundingBox(minX, minY, maxX, maxY); + } + + function nonMaxSuppression(boxes, scores, iouThreshold, isIOU) { + if (isIOU === void 0) { isIOU = true; } + var indicesSortedByScore = scores + .map(function (score, boxIndex) { return ({ score: score, boxIndex: boxIndex }); }) + .sort(function (c1, c2) { return c1.score - c2.score; }) + .map(function (c) { return c.boxIndex; }); + var pick = []; + var _loop_1 = function () { + var curr = indicesSortedByScore.pop(); + pick.push(curr); + var indices = indicesSortedByScore; + var outputs = []; + for (var i = 0; i < indices.length; i++) { + var idx = indices[i]; + var currBox = boxes[curr]; + var idxBox = boxes[idx]; + outputs.push(iou(currBox, idxBox, isIOU)); + } + indicesSortedByScore = indicesSortedByScore.filter(function (_, j) { return outputs[j] <= iouThreshold; }); + }; + while (indicesSortedByScore.length > 0) { + _loop_1(); + } + return pick; + } + + function normalize(x, meanRgb) { + return Fe(function () { + var r = meanRgb[0], g = meanRgb[1], b = meanRgb[2]; + var avg_r = Rn(x.shape.slice(0, 3).concat([1]), r); + var avg_g = Rn(x.shape.slice(0, 3).concat([1]), g); + var avg_b = Rn(x.shape.slice(0, 3).concat([1]), b); + var avg_rgb = An([avg_r, avg_g, avg_b], 3); + return vl(x, avg_rgb); + }); + } + + function shuffleArray(inputArray) { + var array = inputArray.slice(); + for (var i = array.length - 1; i > 0; i--) { + var j = Math.floor(Math.random() * (i + 1)); + var x = array[i]; + array[i] = array[j]; + array[j] = x; + } + return array; + } + + function sigmoid(x) { + return 1 / (1 + Math.exp(-x)); + } + function inverseSigmoid(x) { + return Math.log(x / (1 - x)); + } + + var isNumber = function (arg) { return typeof arg === 'number'; }; + function validateConfig(config) { + if (!config) { + throw new Error("invalid config: " + config); + } + if (typeof config.withSeparableConvs !== 'boolean') { + throw new Error("config.withSeparableConvs has to be a boolean, have: " + config.withSeparableConvs); + } + if (!isNumber(config.iouThreshold) || config.iouThreshold < 0 || config.iouThreshold > 1.0) { + throw new Error("config.iouThreshold has to be a number between [0, 1], have: " + config.iouThreshold); + } + if (!Array.isArray(config.classes) + || !config.classes.length + || !config.classes.every(function (c) { return typeof c === 'string'; })) { + throw new Error("config.classes has to be an array class names: string[], have: " + JSON.stringify(config.classes)); + } + if (!Array.isArray(config.anchors) + || !config.anchors.length + || !config.anchors.map(function (a) { return a || {}; }).every(function (a) { return isNumber(a.x) && isNumber(a.y); })) { + throw new Error("config.anchors has to be an array of { x: number, y: number }, have: " + JSON.stringify(config.anchors)); + } + if (config.meanRgb && (!Array.isArray(config.meanRgb) + || config.meanRgb.length !== 3 + || !config.meanRgb.every(isNumber))) { + throw new Error("config.meanRgb has to be an array of shape [number, number, number], have: " + JSON.stringify(config.meanRgb)); + } + } + + function leaky(x) { + return Fe(function () { + var min = ll(x, vn(0.10000000149011612)); + return Yu(Sl(vl(x, min)), min); + //return tf.maximum(x, min) + }); + } + + function convWithBatchNorm(x, params) { + return Fe(function () { + var out = rr(x, [[0, 0], [1, 1], [1, 1], [0, 0]]); + out = nu(out, params.conv.filters, [1, 1], 'valid'); + out = vl(out, params.bn.sub); + out = ll(out, params.bn.truediv); + out = Yu(out, params.conv.bias); + return leaky(out); + }); + } + + function depthwiseSeparableConv(x, params) { + return Fe(function () { + var out = rr(x, [[0, 0], [1, 1], [1, 1], [0, 0]]); + out = iu(out, params.depthwise_filter, params.pointwise_filter, [1, 1], 'valid'); + out = Yu(out, params.bias); + return leaky(out); + }); + } + + function extractorsFactory(extractWeights, paramMappings) { + var extractConvParams = extractConvParamsFactory(extractWeights, paramMappings); + function extractBatchNormParams(size, mappedPrefix) { + var sub = mn(extractWeights(size)); + var truediv = mn(extractWeights(size)); + paramMappings.push({ paramPath: mappedPrefix + "/sub" }, { paramPath: mappedPrefix + "/truediv" }); + return { sub: sub, truediv: truediv }; + } + function extractConvWithBatchNormParams(channelsIn, channelsOut, mappedPrefix) { + var conv = extractConvParams(channelsIn, channelsOut, 3, mappedPrefix + "/conv"); + var bn = extractBatchNormParams(channelsOut, mappedPrefix + "/bn"); + return { conv: conv, bn: bn }; + } + var extractSeparableConvParams = extractSeparableConvParamsFactory(extractWeights, paramMappings); + return { + extractConvParams: extractConvParams, + extractConvWithBatchNormParams: extractConvWithBatchNormParams, + extractSeparableConvParams: extractSeparableConvParams + }; + } + function extractParams(weights, config, boxEncodingSize, filterSizes) { + var _a = extractWeightsFactory(weights), extractWeights = _a.extractWeights, getRemainingWeights = _a.getRemainingWeights; + var paramMappings = []; + var _b = extractorsFactory(extractWeights, paramMappings), extractConvParams = _b.extractConvParams, extractConvWithBatchNormParams = _b.extractConvWithBatchNormParams, extractSeparableConvParams = _b.extractSeparableConvParams; + var params; + if (config.withSeparableConvs) { + var s0 = filterSizes[0], s1 = filterSizes[1], s2 = filterSizes[2], s3 = filterSizes[3], s4 = filterSizes[4], s5 = filterSizes[5], s6 = filterSizes[6], s7 = filterSizes[7], s8 = filterSizes[8]; + var conv0 = config.isFirstLayerConv2d + ? extractConvParams(s0, s1, 3, 'conv0') + : extractSeparableConvParams(s0, s1, 'conv0'); + var conv1 = extractSeparableConvParams(s1, s2, 'conv1'); + var conv2 = extractSeparableConvParams(s2, s3, 'conv2'); + var conv3 = extractSeparableConvParams(s3, s4, 'conv3'); + var conv4 = extractSeparableConvParams(s4, s5, 'conv4'); + var conv5 = extractSeparableConvParams(s5, s6, 'conv5'); + var conv6 = s7 ? extractSeparableConvParams(s6, s7, 'conv6') : undefined; + var conv7 = s8 ? extractSeparableConvParams(s7, s8, 'conv7') : undefined; + var conv8 = extractConvParams(s8 || s7 || s6, 5 * boxEncodingSize, 1, 'conv8'); + params = { conv0: conv0, conv1: conv1, conv2: conv2, conv3: conv3, conv4: conv4, conv5: conv5, conv6: conv6, conv7: conv7, conv8: conv8 }; + } + else { + var s0 = filterSizes[0], s1 = filterSizes[1], s2 = filterSizes[2], s3 = filterSizes[3], s4 = filterSizes[4], s5 = filterSizes[5], s6 = filterSizes[6], s7 = filterSizes[7], s8 = filterSizes[8]; + var conv0 = extractConvWithBatchNormParams(s0, s1, 'conv0'); + var conv1 = extractConvWithBatchNormParams(s1, s2, 'conv1'); + var conv2 = extractConvWithBatchNormParams(s2, s3, 'conv2'); + var conv3 = extractConvWithBatchNormParams(s3, s4, 'conv3'); + var conv4 = extractConvWithBatchNormParams(s4, s5, 'conv4'); + var conv5 = extractConvWithBatchNormParams(s5, s6, 'conv5'); + var conv6 = extractConvWithBatchNormParams(s6, s7, 'conv6'); + var conv7 = extractConvWithBatchNormParams(s7, s8, 'conv7'); + var conv8 = extractConvParams(s8, 5 * boxEncodingSize, 1, 'conv8'); + params = { conv0: conv0, conv1: conv1, conv2: conv2, conv3: conv3, conv4: conv4, conv5: conv5, conv6: conv6, conv7: conv7, conv8: conv8 }; + } + if (getRemainingWeights().length !== 0) { + throw new Error("weights remaing after extract: " + getRemainingWeights().length); + } + return { params: params, paramMappings: paramMappings }; + } + + function extractorsFactory$1(weightMap, paramMappings) { + var extractWeightEntry = extractWeightEntryFactory(weightMap, paramMappings); + function extractBatchNormParams(prefix) { + var sub = extractWeightEntry(prefix + "/sub", 1); + var truediv = extractWeightEntry(prefix + "/truediv", 1); + return { sub: sub, truediv: truediv }; + } + function extractConvParams(prefix) { + var filters = extractWeightEntry(prefix + "/filters", 4); + var bias = extractWeightEntry(prefix + "/bias", 1); + return { filters: filters, bias: bias }; + } + function extractConvWithBatchNormParams(prefix) { + var conv = extractConvParams(prefix + "/conv"); + var bn = extractBatchNormParams(prefix + "/bn"); + return { conv: conv, bn: bn }; + } + var extractSeparableConvParams = loadSeparableConvParamsFactory(extractWeightEntry); + return { + extractConvParams: extractConvParams, + extractConvWithBatchNormParams: extractConvWithBatchNormParams, + extractSeparableConvParams: extractSeparableConvParams + }; + } + function extractParamsFromWeigthMap(weightMap, config) { + var paramMappings = []; + var _a = extractorsFactory$1(weightMap, paramMappings), extractConvParams = _a.extractConvParams, extractConvWithBatchNormParams = _a.extractConvWithBatchNormParams, extractSeparableConvParams = _a.extractSeparableConvParams; + var params; + if (config.withSeparableConvs) { + var numFilters = (config.filterSizes && config.filterSizes.length || 9); + params = { + conv0: config.isFirstLayerConv2d ? extractConvParams('conv0') : extractSeparableConvParams('conv0'), + conv1: extractSeparableConvParams('conv1'), + conv2: extractSeparableConvParams('conv2'), + conv3: extractSeparableConvParams('conv3'), + conv4: extractSeparableConvParams('conv4'), + conv5: extractSeparableConvParams('conv5'), + conv6: numFilters > 7 ? extractSeparableConvParams('conv6') : undefined, + conv7: numFilters > 8 ? extractSeparableConvParams('conv7') : undefined, + conv8: extractConvParams('conv8') + }; + } + else { + params = { + conv0: extractConvWithBatchNormParams('conv0'), + conv1: extractConvWithBatchNormParams('conv1'), + conv2: extractConvWithBatchNormParams('conv2'), + conv3: extractConvWithBatchNormParams('conv3'), + conv4: extractConvWithBatchNormParams('conv4'), + conv5: extractConvWithBatchNormParams('conv5'), + conv6: extractConvWithBatchNormParams('conv6'), + conv7: extractConvWithBatchNormParams('conv7'), + conv8: extractConvParams('conv8') + }; + } + disposeUnusedWeightTensors(weightMap, paramMappings); + return { params: params, paramMappings: paramMappings }; + } + + var TinyYolov2SizeType; + (function (TinyYolov2SizeType) { + TinyYolov2SizeType[TinyYolov2SizeType["XS"] = 224] = "XS"; + TinyYolov2SizeType[TinyYolov2SizeType["SM"] = 320] = "SM"; + TinyYolov2SizeType[TinyYolov2SizeType["MD"] = 416] = "MD"; + TinyYolov2SizeType[TinyYolov2SizeType["LG"] = 608] = "LG"; + })(TinyYolov2SizeType || (TinyYolov2SizeType = {})); + var TinyYolov2Options = /** @class */ (function () { + function TinyYolov2Options(_a) { + var _b = _a === void 0 ? {} : _a, inputSize = _b.inputSize, scoreThreshold = _b.scoreThreshold; + this._name = 'TinyYolov2Options'; + this._inputSize = inputSize || 416; + this._scoreThreshold = scoreThreshold || 0.5; + if (typeof this._inputSize !== 'number' || this._inputSize % 32 !== 0) { + throw new Error(this._name + " - expected inputSize to be a number divisible by 32"); + } + if (typeof this._scoreThreshold !== 'number' || this._scoreThreshold <= 0 || this._scoreThreshold >= 1) { + throw new Error(this._name + " - expected scoreThreshold to be a number between 0 and 1"); + } + } + Object.defineProperty(TinyYolov2Options.prototype, "inputSize", { + get: function () { return this._inputSize; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(TinyYolov2Options.prototype, "scoreThreshold", { + get: function () { return this._scoreThreshold; }, + enumerable: true, + configurable: true + }); + return TinyYolov2Options; + }()); + + var TinyYolov2 = /** @class */ (function (_super) { + __extends(TinyYolov2, _super); + function TinyYolov2(config) { + var _this = _super.call(this, 'TinyYolov2') || this; + validateConfig(config); + _this._config = config; + return _this; + } + Object.defineProperty(TinyYolov2.prototype, "config", { + get: function () { + return this._config; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(TinyYolov2.prototype, "withClassScores", { + get: function () { + return this.config.withClassScores || this.config.classes.length > 1; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(TinyYolov2.prototype, "boxEncodingSize", { + get: function () { + return 5 + (this.withClassScores ? this.config.classes.length : 0); + }, + enumerable: true, + configurable: true + }); + TinyYolov2.prototype.runTinyYolov2 = function (x, params) { + var out = convWithBatchNorm(x, params.conv0); + out = yu(out, [2, 2], [2, 2], 'same'); + out = convWithBatchNorm(out, params.conv1); + out = yu(out, [2, 2], [2, 2], 'same'); + out = convWithBatchNorm(out, params.conv2); + out = yu(out, [2, 2], [2, 2], 'same'); + out = convWithBatchNorm(out, params.conv3); + out = yu(out, [2, 2], [2, 2], 'same'); + out = convWithBatchNorm(out, params.conv4); + out = yu(out, [2, 2], [2, 2], 'same'); + out = convWithBatchNorm(out, params.conv5); + out = yu(out, [2, 2], [1, 1], 'same'); + out = convWithBatchNorm(out, params.conv6); + out = convWithBatchNorm(out, params.conv7); + return convLayer(out, params.conv8, 'valid', false); + }; + TinyYolov2.prototype.runMobilenet = function (x, params) { + var out = this.config.isFirstLayerConv2d + ? leaky(convLayer(x, params.conv0, 'valid', false)) + : depthwiseSeparableConv(x, params.conv0); + out = yu(out, [2, 2], [2, 2], 'same'); + out = depthwiseSeparableConv(out, params.conv1); + out = yu(out, [2, 2], [2, 2], 'same'); + out = depthwiseSeparableConv(out, params.conv2); + out = yu(out, [2, 2], [2, 2], 'same'); + out = depthwiseSeparableConv(out, params.conv3); + out = yu(out, [2, 2], [2, 2], 'same'); + out = depthwiseSeparableConv(out, params.conv4); + out = yu(out, [2, 2], [2, 2], 'same'); + out = depthwiseSeparableConv(out, params.conv5); + out = yu(out, [2, 2], [1, 1], 'same'); + out = params.conv6 ? depthwiseSeparableConv(out, params.conv6) : out; + out = params.conv7 ? depthwiseSeparableConv(out, params.conv7) : out; + return convLayer(out, params.conv8, 'valid', false); + }; + TinyYolov2.prototype.forwardInput = function (input, inputSize) { + var _this = this; + var params = this.params; + if (!params) { + throw new Error('TinyYolov2 - load model before inference'); + } + return Fe(function () { + var batchTensor = input.toBatchTensor(inputSize, false).toFloat(); + batchTensor = _this.config.meanRgb + ? normalize(batchTensor, _this.config.meanRgb) + : batchTensor; + batchTensor = batchTensor.div(vn(256)); + return _this.config.withSeparableConvs + ? _this.runMobilenet(batchTensor, params) + : _this.runTinyYolov2(batchTensor, params); + }); + }; + TinyYolov2.prototype.forward = function (input, inputSize) { + return __awaiter(this, void 0, void 0, function () { + var _a; + return __generator(this, function (_b) { + switch (_b.label) { + case 0: + _a = this.forwardInput; + return [4 /*yield*/, toNetInput(input)]; + case 1: return [4 /*yield*/, _a.apply(this, [_b.sent(), inputSize])]; + case 2: return [2 /*return*/, _b.sent()]; + } + }); + }); + }; + TinyYolov2.prototype.detect = function (input, forwardParams) { + if (forwardParams === void 0) { forwardParams = {}; } + return __awaiter(this, void 0, void 0, function () { + var _a, inputSize, scoreThreshold, netInput, out, out0, inputDimensions, results, boxes, scores, classScores, classNames, indices, detections; + var _this = this; + return __generator(this, function (_b) { + switch (_b.label) { + case 0: + _a = new TinyYolov2Options(forwardParams), inputSize = _a.inputSize, scoreThreshold = _a.scoreThreshold; + return [4 /*yield*/, toNetInput(input)]; + case 1: + netInput = _b.sent(); + return [4 /*yield*/, this.forwardInput(netInput, inputSize)]; + case 2: + out = _b.sent(); + out0 = Fe(function () { return gr(out)[0].expandDims(); }); + inputDimensions = { + width: netInput.getInputWidth(0), + height: netInput.getInputHeight(0) + }; + return [4 /*yield*/, this.extractBoxes(out0, netInput.getReshapedInputDimensions(0), scoreThreshold)]; + case 3: + results = _b.sent(); + out.dispose(); + out0.dispose(); + boxes = results.map(function (res) { return res.box; }); + scores = results.map(function (res) { return res.score; }); + classScores = results.map(function (res) { return res.classScore; }); + classNames = results.map(function (res) { return _this.config.classes[res.label]; }); + indices = nonMaxSuppression(boxes.map(function (box) { return box.rescale(inputSize); }), scores, this.config.iouThreshold, true); + detections = indices.map(function (idx) { + return new ObjectDetection(scores[idx], classScores[idx], classNames[idx], boxes[idx], inputDimensions); + }); + return [2 /*return*/, detections]; + } + }); + }); + }; + TinyYolov2.prototype.getDefaultModelName = function () { + return ''; + }; + TinyYolov2.prototype.extractParamsFromWeigthMap = function (weightMap) { + return extractParamsFromWeigthMap(weightMap, this.config); + }; + TinyYolov2.prototype.extractParams = function (weights) { + var filterSizes = this.config.filterSizes || TinyYolov2.DEFAULT_FILTER_SIZES; + var numFilters = filterSizes ? filterSizes.length : undefined; + if (numFilters !== 7 && numFilters !== 8 && numFilters !== 9) { + throw new Error("TinyYolov2 - expected 7 | 8 | 9 convolutional filters, but found " + numFilters + " filterSizes in config"); + } + return extractParams(weights, this.config, this.boxEncodingSize, filterSizes); + }; + TinyYolov2.prototype.extractBoxes = function (outputTensor, inputBlobDimensions, scoreThreshold) { + return __awaiter(this, void 0, void 0, function () { + var width, height, inputSize, correctionFactorX, correctionFactorY, numCells, numBoxes, _a, boxesTensor, scoresTensor, classScoresTensor, results, scoresData, boxesData, row, col, anchor, score, ctX, ctY, width_1, height_1, x, y, pos, _b, classScore, label, _c; + var _this = this; + return __generator(this, function (_d) { + switch (_d.label) { + case 0: + width = inputBlobDimensions.width, height = inputBlobDimensions.height; + inputSize = Math.max(width, height); + correctionFactorX = inputSize / width; + correctionFactorY = inputSize / height; + numCells = outputTensor.shape[1]; + numBoxes = this.config.anchors.length; + _a = Fe(function () { + var reshaped = outputTensor.reshape([numCells, numCells, numBoxes, _this.boxEncodingSize]); + var boxes = reshaped.slice([0, 0, 0, 0], [numCells, numCells, numBoxes, 4]); + var scores = reshaped.slice([0, 0, 0, 4], [numCells, numCells, numBoxes, 1]); + var classScores = _this.withClassScores + ? zr(reshaped.slice([0, 0, 0, 5], [numCells, numCells, numBoxes, _this.config.classes.length]), 3) + : vn(0); + return [boxes, scores, classScores]; + }), boxesTensor = _a[0], scoresTensor = _a[1], classScoresTensor = _a[2]; + results = []; + return [4 /*yield*/, scoresTensor.array()]; + case 1: + scoresData = _d.sent(); + return [4 /*yield*/, boxesTensor.array()]; + case 2: + boxesData = _d.sent(); + row = 0; + _d.label = 3; + case 3: + if (!(row < numCells)) return [3 /*break*/, 12]; + col = 0; + _d.label = 4; + case 4: + if (!(col < numCells)) return [3 /*break*/, 11]; + anchor = 0; + _d.label = 5; + case 5: + if (!(anchor < numBoxes)) return [3 /*break*/, 10]; + score = sigmoid(scoresData[row][col][anchor][0]); + if (!(!scoreThreshold || score > scoreThreshold)) return [3 /*break*/, 9]; + ctX = ((col + sigmoid(boxesData[row][col][anchor][0])) / numCells) * correctionFactorX; + ctY = ((row + sigmoid(boxesData[row][col][anchor][1])) / numCells) * correctionFactorY; + width_1 = ((Math.exp(boxesData[row][col][anchor][2]) * this.config.anchors[anchor].x) / numCells) * correctionFactorX; + height_1 = ((Math.exp(boxesData[row][col][anchor][3]) * this.config.anchors[anchor].y) / numCells) * correctionFactorY; + x = (ctX - (width_1 / 2)); + y = (ctY - (height_1 / 2)); + pos = { row: row, col: col, anchor: anchor }; + if (!this.withClassScores) return [3 /*break*/, 7]; + return [4 /*yield*/, this.extractPredictedClass(classScoresTensor, pos)]; + case 6: + _c = _d.sent(); + return [3 /*break*/, 8]; + case 7: + _c = { classScore: 1, label: 0 }; + _d.label = 8; + case 8: + _b = _c, classScore = _b.classScore, label = _b.label; + results.push(__assign({ box: new BoundingBox(x, y, x + width_1, y + height_1), score: score, classScore: score * classScore, label: label }, pos)); + _d.label = 9; + case 9: + anchor++; + return [3 /*break*/, 5]; + case 10: + col++; + return [3 /*break*/, 4]; + case 11: + row++; + return [3 /*break*/, 3]; + case 12: + boxesTensor.dispose(); + scoresTensor.dispose(); + classScoresTensor.dispose(); + return [2 /*return*/, results]; + } + }); + }); + }; + TinyYolov2.prototype.extractPredictedClass = function (classesTensor, pos) { + return __awaiter(this, void 0, void 0, function () { + var row, col, anchor, classesData; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + row = pos.row, col = pos.col, anchor = pos.anchor; + return [4 /*yield*/, classesTensor.array()]; + case 1: + classesData = _a.sent(); + return [2 /*return*/, Array(this.config.classes.length).fill(0) + .map(function (_, i) { return classesData[row][col][anchor][i]; }) + .map(function (classScore, label) { return ({ + classScore: classScore, + label: label + }); }) + .reduce(function (max, curr) { return max.classScore > curr.classScore ? max : curr; })]; + } + }); + }); + }; + TinyYolov2.DEFAULT_FILTER_SIZES = [ + 3, 16, 32, 64, 128, 256, 512, 1024, 1024 + ]; + return TinyYolov2; + }(NeuralNetwork)); + + + + var tfjsImageRecognitionBase = /*#__PURE__*/Object.freeze({ + convLayer: convLayer, + disposeUnusedWeightTensors: disposeUnusedWeightTensors, + extractConvParamsFactory: extractConvParamsFactory, + extractFCParamsFactory: extractFCParamsFactory, + extractSeparableConvParamsFactory: extractSeparableConvParamsFactory, + loadSeparableConvParamsFactory: loadSeparableConvParamsFactory, + extractWeightEntryFactory: extractWeightEntryFactory, + extractWeightsFactory: extractWeightsFactory, + getModelUris: getModelUris, + SeparableConvParams: SeparableConvParams, + TinyYolov2: TinyYolov2, + get TinyYolov2SizeType () { return TinyYolov2SizeType; }, + TinyYolov2Options: TinyYolov2Options, + validateConfig: validateConfig + }); + + function drawContour(ctx, points, isClosed) { + if (isClosed === void 0) { isClosed = false; } + ctx.beginPath(); + points.slice(1).forEach(function (_a, prevIdx) { + var x = _a.x, y = _a.y; + var from = points[prevIdx]; + ctx.moveTo(from.x, from.y); + ctx.lineTo(x, y); + }); + if (isClosed) { + var from = points[points.length - 1]; + var to = points[0]; + if (!from || !to) { + return; + } + ctx.moveTo(from.x, from.y); + ctx.lineTo(to.x, to.y); + } + ctx.stroke(); + } + + var FaceDetection = /** @class */ (function (_super) { + __extends(FaceDetection, _super); + function FaceDetection(score, relativeBox, imageDims) { + return _super.call(this, score, score, '', relativeBox, imageDims) || this; + } + FaceDetection.prototype.forSize = function (width, height) { + var _a = _super.prototype.forSize.call(this, width, height), score = _a.score, relativeBox = _a.relativeBox, imageDims = _a.imageDims; + return new FaceDetection(score, relativeBox, imageDims); + }; + return FaceDetection; + }(ObjectDetection)); + + function isWithFaceDetection(obj) { + return obj['detection'] instanceof FaceDetection; + } + function extendWithFaceDetection(sourceObj, detection) { + var extension = { detection: detection }; + return Object.assign({}, sourceObj, extension); + } + + function drawDetections(canvasArg, detections) { + var detectionsArray = Array.isArray(detections) ? detections : [detections]; + detectionsArray.forEach(function (det) { + var score = det instanceof FaceDetection + ? det.score + : (isWithFaceDetection(det) ? det.detection.score : undefined); + var box = det instanceof FaceDetection + ? det.box + : (isWithFaceDetection(det) ? det.detection.box : new Box(det)); + var label = score ? "" + round(score) : undefined; + new DrawBox(box, { label: label }).draw(canvasArg); + }); + } + + function depthwiseSeparableConv$1(x, params, stride) { + return Fe(function () { + var out = iu(x, params.depthwise_filter, params.pointwise_filter, stride, 'same'); + out = Yu(out, params.bias); + return out; + }); + } + + function denseBlock3(x, denseBlockParams, isFirstLayer) { + if (isFirstLayer === void 0) { isFirstLayer = false; } + return Fe(function () { + var out1 = Sl(isFirstLayer + ? Yu(nu(x, denseBlockParams.conv0.filters, [2, 2], 'same'), denseBlockParams.conv0.bias) + : depthwiseSeparableConv$1(x, denseBlockParams.conv0, [2, 2])); + var out2 = depthwiseSeparableConv$1(out1, denseBlockParams.conv1, [1, 1]); + var in3 = Sl(Yu(out1, out2)); + var out3 = depthwiseSeparableConv$1(in3, denseBlockParams.conv2, [1, 1]); + return Sl(Yu(out1, Yu(out2, out3))); + }); + } + function denseBlock4(x, denseBlockParams, isFirstLayer, isScaleDown) { + if (isFirstLayer === void 0) { isFirstLayer = false; } + if (isScaleDown === void 0) { isScaleDown = true; } + return Fe(function () { + var out1 = Sl(isFirstLayer + ? Yu(nu(x, denseBlockParams.conv0.filters, isScaleDown ? [2, 2] : [1, 1], 'same'), denseBlockParams.conv0.bias) + : depthwiseSeparableConv$1(x, denseBlockParams.conv0, isScaleDown ? [2, 2] : [1, 1])); + var out2 = depthwiseSeparableConv$1(out1, denseBlockParams.conv1, [1, 1]); + var in3 = Sl(Yu(out1, out2)); + var out3 = depthwiseSeparableConv$1(in3, denseBlockParams.conv2, [1, 1]); + var in4 = Sl(Yu(out1, Yu(out2, out3))); + var out4 = depthwiseSeparableConv$1(in4, denseBlockParams.conv3, [1, 1]); + return Sl(Yu(out1, Yu(out2, Yu(out3, out4)))); + }); + } + + function extractorsFactory$2(extractWeights, paramMappings) { + var extractConvParams = extractConvParamsFactory(extractWeights, paramMappings); + var extractSeparableConvParams = extractSeparableConvParamsFactory(extractWeights, paramMappings); + function extractDenseBlock3Params(channelsIn, channelsOut, mappedPrefix, isFirstLayer) { + if (isFirstLayer === void 0) { isFirstLayer = false; } + var conv0 = isFirstLayer + ? extractConvParams(channelsIn, channelsOut, 3, mappedPrefix + "/conv0") + : extractSeparableConvParams(channelsIn, channelsOut, mappedPrefix + "/conv0"); + var conv1 = extractSeparableConvParams(channelsOut, channelsOut, mappedPrefix + "/conv1"); + var conv2 = extractSeparableConvParams(channelsOut, channelsOut, mappedPrefix + "/conv2"); + return { conv0: conv0, conv1: conv1, conv2: conv2 }; + } + function extractDenseBlock4Params(channelsIn, channelsOut, mappedPrefix, isFirstLayer) { + if (isFirstLayer === void 0) { isFirstLayer = false; } + var _a = extractDenseBlock3Params(channelsIn, channelsOut, mappedPrefix, isFirstLayer), conv0 = _a.conv0, conv1 = _a.conv1, conv2 = _a.conv2; + var conv3 = extractSeparableConvParams(channelsOut, channelsOut, mappedPrefix + "/conv3"); + return { conv0: conv0, conv1: conv1, conv2: conv2, conv3: conv3 }; + } + return { + extractDenseBlock3Params: extractDenseBlock3Params, + extractDenseBlock4Params: extractDenseBlock4Params + }; + } + + function extractParams$1(weights) { + var paramMappings = []; + var _a = extractWeightsFactory(weights), extractWeights = _a.extractWeights, getRemainingWeights = _a.getRemainingWeights; + var extractDenseBlock4Params = extractorsFactory$2(extractWeights, paramMappings).extractDenseBlock4Params; + var dense0 = extractDenseBlock4Params(3, 32, 'dense0', true); + var dense1 = extractDenseBlock4Params(32, 64, 'dense1'); + var dense2 = extractDenseBlock4Params(64, 128, 'dense2'); + var dense3 = extractDenseBlock4Params(128, 256, 'dense3'); + if (getRemainingWeights().length !== 0) { + throw new Error("weights remaing after extract: " + getRemainingWeights().length); + } + return { + paramMappings: paramMappings, + params: { dense0: dense0, dense1: dense1, dense2: dense2, dense3: dense3 } + }; + } + + function loadConvParamsFactory(extractWeightEntry) { + return function (prefix) { + var filters = extractWeightEntry(prefix + "/filters", 4); + var bias = extractWeightEntry(prefix + "/bias", 1); + return { filters: filters, bias: bias }; + }; + } + + function loadParamsFactory(weightMap, paramMappings) { + var extractWeightEntry = extractWeightEntryFactory(weightMap, paramMappings); + var extractConvParams = loadConvParamsFactory(extractWeightEntry); + var extractSeparableConvParams = loadSeparableConvParamsFactory(extractWeightEntry); + function extractDenseBlock3Params(prefix, isFirstLayer) { + if (isFirstLayer === void 0) { isFirstLayer = false; } + var conv0 = isFirstLayer + ? extractConvParams(prefix + "/conv0") + : extractSeparableConvParams(prefix + "/conv0"); + var conv1 = extractSeparableConvParams(prefix + "/conv1"); + var conv2 = extractSeparableConvParams(prefix + "/conv2"); + return { conv0: conv0, conv1: conv1, conv2: conv2 }; + } + function extractDenseBlock4Params(prefix, isFirstLayer) { + if (isFirstLayer === void 0) { isFirstLayer = false; } + var conv0 = isFirstLayer + ? extractConvParams(prefix + "/conv0") + : extractSeparableConvParams(prefix + "/conv0"); + var conv1 = extractSeparableConvParams(prefix + "/conv1"); + var conv2 = extractSeparableConvParams(prefix + "/conv2"); + var conv3 = extractSeparableConvParams(prefix + "/conv3"); + return { conv0: conv0, conv1: conv1, conv2: conv2, conv3: conv3 }; + } + return { + extractDenseBlock3Params: extractDenseBlock3Params, + extractDenseBlock4Params: extractDenseBlock4Params + }; + } + + function extractParamsFromWeigthMap$1(weightMap) { + var paramMappings = []; + var extractDenseBlock4Params = loadParamsFactory(weightMap, paramMappings).extractDenseBlock4Params; + var params = { + dense0: extractDenseBlock4Params('dense0', true), + dense1: extractDenseBlock4Params('dense1'), + dense2: extractDenseBlock4Params('dense2'), + dense3: extractDenseBlock4Params('dense3') + }; + disposeUnusedWeightTensors(weightMap, paramMappings); + return { params: params, paramMappings: paramMappings }; + } + + var FaceFeatureExtractor = /** @class */ (function (_super) { + __extends(FaceFeatureExtractor, _super); + function FaceFeatureExtractor() { + return _super.call(this, 'FaceFeatureExtractor') || this; + } + FaceFeatureExtractor.prototype.forwardInput = function (input) { + var params = this.params; + if (!params) { + throw new Error('FaceFeatureExtractor - load model before inference'); + } + return Fe(function () { + var batchTensor = input.toBatchTensor(112, true); + var meanRgb = [122.782, 117.001, 104.298]; + var normalized = normalize(batchTensor, meanRgb).div(vn(255)); + var out = denseBlock4(normalized, params.dense0, true); + out = denseBlock4(out, params.dense1); + out = denseBlock4(out, params.dense2); + out = denseBlock4(out, params.dense3); + out = xu(out, [7, 7], [2, 2], 'valid'); + return out; + }); + }; + FaceFeatureExtractor.prototype.forward = function (input) { + return __awaiter(this, void 0, void 0, function () { + var _a; + return __generator(this, function (_b) { + switch (_b.label) { + case 0: + _a = this.forwardInput; + return [4 /*yield*/, toNetInput(input)]; + case 1: return [2 /*return*/, _a.apply(this, [_b.sent()])]; + } + }); + }); + }; + FaceFeatureExtractor.prototype.getDefaultModelName = function () { + return 'face_feature_extractor_model'; + }; + FaceFeatureExtractor.prototype.extractParamsFromWeigthMap = function (weightMap) { + return extractParamsFromWeigthMap$1(weightMap); + }; + FaceFeatureExtractor.prototype.extractParams = function (weights) { + return extractParams$1(weights); + }; + return FaceFeatureExtractor; + }(NeuralNetwork)); + + function fullyConnectedLayer(x, params) { + return Fe(function () { + return Yu(uu(x, params.weights), params.bias); + }); + } + + function extractParams$2(weights, channelsIn, channelsOut) { + var paramMappings = []; + var _a = extractWeightsFactory(weights), extractWeights = _a.extractWeights, getRemainingWeights = _a.getRemainingWeights; + var extractFCParams = extractFCParamsFactory(extractWeights, paramMappings); + var fc = extractFCParams(channelsIn, channelsOut, 'fc'); + if (getRemainingWeights().length !== 0) { + throw new Error("weights remaing after extract: " + getRemainingWeights().length); + } + return { + paramMappings: paramMappings, + params: { fc: fc } + }; + } + + function extractParamsFromWeigthMap$2(weightMap) { + var paramMappings = []; + var extractWeightEntry = extractWeightEntryFactory(weightMap, paramMappings); + function extractFcParams(prefix) { + var weights = extractWeightEntry(prefix + "/weights", 2); + var bias = extractWeightEntry(prefix + "/bias", 1); + return { weights: weights, bias: bias }; + } + var params = { + fc: extractFcParams('fc') + }; + disposeUnusedWeightTensors(weightMap, paramMappings); + return { params: params, paramMappings: paramMappings }; + } + + function seperateWeightMaps(weightMap) { + var featureExtractorMap = {}; + var classifierMap = {}; + Object.keys(weightMap).forEach(function (key) { + var map = key.startsWith('fc') ? classifierMap : featureExtractorMap; + map[key] = weightMap[key]; + }); + return { featureExtractorMap: featureExtractorMap, classifierMap: classifierMap }; + } + + var FaceProcessor = /** @class */ (function (_super) { + __extends(FaceProcessor, _super); + function FaceProcessor(_name, faceFeatureExtractor) { + var _this = _super.call(this, _name) || this; + _this._faceFeatureExtractor = faceFeatureExtractor; + return _this; + } + Object.defineProperty(FaceProcessor.prototype, "faceFeatureExtractor", { + get: function () { + return this._faceFeatureExtractor; + }, + enumerable: true, + configurable: true + }); + FaceProcessor.prototype.runNet = function (input) { + var _this = this; + var params = this.params; + if (!params) { + throw new Error(this._name + " - load model before inference"); + } + return Fe(function () { + var bottleneckFeatures = input instanceof NetInput + ? _this.faceFeatureExtractor.forwardInput(input) + : input; + return fullyConnectedLayer(bottleneckFeatures.as2D(bottleneckFeatures.shape[0], -1), params.fc); + }); + }; + FaceProcessor.prototype.dispose = function (throwOnRedispose) { + if (throwOnRedispose === void 0) { throwOnRedispose = true; } + this.faceFeatureExtractor.dispose(throwOnRedispose); + _super.prototype.dispose.call(this, throwOnRedispose); + }; + FaceProcessor.prototype.loadClassifierParams = function (weights) { + var _a = this.extractClassifierParams(weights), params = _a.params, paramMappings = _a.paramMappings; + this._params = params; + this._paramMappings = paramMappings; + }; + FaceProcessor.prototype.extractClassifierParams = function (weights) { + return extractParams$2(weights, this.getClassifierChannelsIn(), this.getClassifierChannelsOut()); + }; + FaceProcessor.prototype.extractParamsFromWeigthMap = function (weightMap) { + var _a = seperateWeightMaps(weightMap), featureExtractorMap = _a.featureExtractorMap, classifierMap = _a.classifierMap; + this.faceFeatureExtractor.loadFromWeightMap(featureExtractorMap); + return extractParamsFromWeigthMap$2(classifierMap); + }; + FaceProcessor.prototype.extractParams = function (weights) { + var cIn = this.getClassifierChannelsIn(); + var cOut = this.getClassifierChannelsOut(); + var classifierWeightSize = (cOut * cIn) + cOut; + var featureExtractorWeights = weights.slice(0, weights.length - classifierWeightSize); + var classifierWeights = weights.slice(weights.length - classifierWeightSize); + this.faceFeatureExtractor.extractWeights(featureExtractorWeights); + return this.extractClassifierParams(classifierWeights); + }; + return FaceProcessor; + }(NeuralNetwork)); + + var FACE_EXPRESSION_LABELS = ['Neutro', 'Feliz', 'Triste', 'Raiva', 'Medo', 'Nojo', 'Surpreso']; + var FaceExpressions = /** @class */ (function () { + function FaceExpressions(probabilities) { + var _this = this; + if (probabilities.length !== 7) { + throw new Error("FaceExpressions.constructor - expected probabilities.length to be 7, have: " + probabilities.length); + } + FACE_EXPRESSION_LABELS.forEach(function (expression, idx) { + _this[expression] = probabilities[idx]; + }); + } + FaceExpressions.prototype.asSortedArray = function () { + var _this = this; + return FACE_EXPRESSION_LABELS + .map(function (expression) { return ({ expression: expression, probability: _this[expression] }); }) + .sort(function (e0, e1) { return e1.probability - e0.probability; }); + }; + return FaceExpressions; + }()); + + var FaceExpressionNet = /** @class */ (function (_super) { + __extends(FaceExpressionNet, _super); + function FaceExpressionNet(faceFeatureExtractor) { + if (faceFeatureExtractor === void 0) { faceFeatureExtractor = new FaceFeatureExtractor(); } + return _super.call(this, 'FaceExpressionNet', faceFeatureExtractor) || this; + } + FaceExpressionNet.prototype.forwardInput = function (input) { + var _this = this; + return Fe(function () { return zr(_this.runNet(input)); }); + }; + FaceExpressionNet.prototype.forward = function (input) { + return __awaiter(this, void 0, void 0, function () { + var _a; + return __generator(this, function (_b) { + switch (_b.label) { + case 0: + _a = this.forwardInput; + return [4 /*yield*/, toNetInput(input)]; + case 1: return [2 /*return*/, _a.apply(this, [_b.sent()])]; + } + }); + }); + }; + FaceExpressionNet.prototype.predictExpressions = function (input) { + return __awaiter(this, void 0, void 0, function () { + var netInput, out, probabilitesByBatch, predictionsByBatch; + var _this = this; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, toNetInput(input)]; + case 1: + netInput = _a.sent(); + return [4 /*yield*/, this.forwardInput(netInput)]; + case 2: + out = _a.sent(); + return [4 /*yield*/, Promise.all(gr(out).map(function (t) { return __awaiter(_this, void 0, void 0, function () { + var data; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, t.data()]; + case 1: + data = _a.sent(); + t.dispose(); + return [2 /*return*/, data]; + } + }); + }); }))]; + case 3: + probabilitesByBatch = _a.sent(); + out.dispose(); + predictionsByBatch = probabilitesByBatch + .map(function (probabilites) { return new FaceExpressions(probabilites); }); + return [2 /*return*/, netInput.isBatchInput + ? predictionsByBatch + : predictionsByBatch[0]]; + } + }); + }); + }; + FaceExpressionNet.prototype.getDefaultModelName = function () { + return 'face_expression_model'; + }; + FaceExpressionNet.prototype.getClassifierChannelsIn = function () { + return 256; + }; + FaceExpressionNet.prototype.getClassifierChannelsOut = function () { + return 7; + }; + return FaceExpressionNet; + }(FaceProcessor)); + + function isWithFaceExpressions(obj) { + return obj['expressions'] instanceof FaceExpressions; + } + function extendWithFaceExpressions(sourceObj, expressions) { + var extension = { expressions: expressions }; + return Object.assign({}, sourceObj, extension); + } + + function drawFaceExpressions(canvasArg, faceExpressions, minConfidence, textFieldAnchor) { + if (minConfidence === void 0) { minConfidence = 0.1; } + var faceExpressionsArray = Array.isArray(faceExpressions) ? faceExpressions : [faceExpressions]; + faceExpressionsArray.forEach(function (e) { + var expr = e instanceof FaceExpressions + ? e + : (isWithFaceExpressions(e) ? e.expressions : undefined); + if (!expr) { + throw new Error('drawFaceExpressions - expected faceExpressions to be FaceExpressions | WithFaceExpressions<{}> or array thereof'); + } + var sorted = expr.asSortedArray(); + var resultsToDisplay = sorted.filter(function (expr) { return expr.probability > minConfidence; }); + var anchor = isWithFaceDetection(e) + ? e.detection.box.bottomLeft + : (textFieldAnchor || new Point(0, 0)); + var drawTextField = new DrawTextField(resultsToDisplay.map(function (expr) { return expr.expression + " (" + round(expr.probability) + ")"; }), anchor); + drawTextField.draw(canvasArg); + }); + } + + function minBbox$1(pts) { + var xs = pts.map(function (pt) { return pt.x; }); + var ys = pts.map(function (pt) { return pt.y; }); + var minX = xs.reduce(function (min, x) { return x < min ? x : min; }, Infinity); + var minY = ys.reduce(function (min, y) { return y < min ? y : min; }, Infinity); + var maxX = xs.reduce(function (max, x) { return max < x ? x : max; }, 0); + var maxY = ys.reduce(function (max, y) { return max < y ? y : max; }, 0); + return new BoundingBox(minX, minY, maxX, maxY); + } + + // face alignment constants + var relX = 0.5; + var relY = 0.43; + var relScale = 0.45; + var FaceLandmarks = /** @class */ (function () { + function FaceLandmarks(relativeFaceLandmarkPositions, imgDims, shift) { + if (shift === void 0) { shift = new Point(0, 0); } + var width = imgDims.width, height = imgDims.height; + this._imgDims = new Dimensions(width, height); + this._shift = shift; + this._positions = relativeFaceLandmarkPositions.map(function (pt) { return pt.mul(new Point(width, height)).add(shift); }); + } + Object.defineProperty(FaceLandmarks.prototype, "shift", { + get: function () { return new Point(this._shift.x, this._shift.y); }, + enumerable: true, + configurable: true + }); + Object.defineProperty(FaceLandmarks.prototype, "imageWidth", { + get: function () { return this._imgDims.width; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(FaceLandmarks.prototype, "imageHeight", { + get: function () { return this._imgDims.height; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(FaceLandmarks.prototype, "positions", { + get: function () { return this._positions; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(FaceLandmarks.prototype, "relativePositions", { + get: function () { + var _this = this; + return this._positions.map(function (pt) { return pt.sub(_this._shift).div(new Point(_this.imageWidth, _this.imageHeight)); }); + }, + enumerable: true, + configurable: true + }); + FaceLandmarks.prototype.forSize = function (width, height) { + return new this.constructor(this.relativePositions, { width: width, height: height }); + }; + FaceLandmarks.prototype.shiftBy = function (x, y) { + return new this.constructor(this.relativePositions, this._imgDims, new Point(x, y)); + }; + FaceLandmarks.prototype.shiftByPoint = function (pt) { + return this.shiftBy(pt.x, pt.y); + }; + /** + * Aligns the face landmarks after face detection from the relative positions of the faces + * bounding box, or it's current shift. This function should be used to align the face images + * after face detection has been performed, before they are passed to the face recognition net. + * This will make the computed face descriptor more accurate. + * + * @param detection (optional) The bounding box of the face or the face detection result. If + * no argument was passed the position of the face landmarks are assumed to be relative to + * it's current shift. + * @returns The bounding box of the aligned face. + */ + FaceLandmarks.prototype.align = function (detection, options) { + if (options === void 0) { options = {}; } + if (detection) { + var box = detection instanceof FaceDetection + ? detection.box.floor() + : new Box(detection); + return this.shiftBy(box.x, box.y).align(null, options); + } + var _a = Object.assign({}, { useDlibAlignment: false, minBoxPadding: 0.2 }, options), useDlibAlignment = _a.useDlibAlignment, minBoxPadding = _a.minBoxPadding; + if (useDlibAlignment) { + return this.alignDlib(); + } + return this.alignMinBbox(minBoxPadding); + }; + FaceLandmarks.prototype.alignDlib = function () { + var centers = this.getRefPointsForAlignment(); + var leftEyeCenter = centers[0], rightEyeCenter = centers[1], mouthCenter = centers[2]; + var distToMouth = function (pt) { return mouthCenter.sub(pt).magnitude(); }; + var eyeToMouthDist = (distToMouth(leftEyeCenter) + distToMouth(rightEyeCenter)) / 2; + var size = Math.floor(eyeToMouthDist / relScale); + var refPoint = getCenterPoint(centers); + // TODO: pad in case rectangle is out of image bounds + var x = Math.floor(Math.max(0, refPoint.x - (relX * size))); + var y = Math.floor(Math.max(0, refPoint.y - (relY * size))); + return new Rect(x, y, Math.min(size, this.imageWidth + x), Math.min(size, this.imageHeight + y)); + }; + FaceLandmarks.prototype.alignMinBbox = function (padding) { + var box = minBbox$1(this.positions); + return box.pad(box.width * padding, box.height * padding); + }; + FaceLandmarks.prototype.getRefPointsForAlignment = function () { + throw new Error('getRefPointsForAlignment not implemented by base class'); + }; + return FaceLandmarks; + }()); + + var FaceLandmarks68 = /** @class */ (function (_super) { + __extends(FaceLandmarks68, _super); + function FaceLandmarks68() { + return _super !== null && _super.apply(this, arguments) || this; + } + FaceLandmarks68.prototype.getJawOutline = function () { + return this.positions.slice(0, 17); + }; + FaceLandmarks68.prototype.getLeftEyeBrow = function () { + return this.positions.slice(17, 22); + }; + FaceLandmarks68.prototype.getRightEyeBrow = function () { + return this.positions.slice(22, 27); + }; + FaceLandmarks68.prototype.getNose = function () { + return this.positions.slice(27, 36); + }; + FaceLandmarks68.prototype.getLeftEye = function () { + return this.positions.slice(36, 42); + }; + FaceLandmarks68.prototype.getRightEye = function () { + return this.positions.slice(42, 48); + }; + FaceLandmarks68.prototype.getMouth = function () { + return this.positions.slice(48, 68); + }; + FaceLandmarks68.prototype.getRefPointsForAlignment = function () { + return [ + this.getLeftEye(), + this.getRightEye(), + this.getMouth() + ].map(getCenterPoint); + }; + return FaceLandmarks68; + }(FaceLandmarks)); + + function isWithFaceLandmarks(obj) { + return isWithFaceDetection(obj) + && obj['landmarks'] instanceof FaceLandmarks + && obj['unshiftedLandmarks'] instanceof FaceLandmarks + && obj['alignedRect'] instanceof FaceDetection; + } + function extendWithFaceLandmarks(sourceObj, unshiftedLandmarks) { + var shift = sourceObj.detection.box; + var landmarks = unshiftedLandmarks.shiftBy(shift.x, shift.y); + var rect = landmarks.align(); + var imageDims = sourceObj.detection.imageDims; + var alignedRect = new FaceDetection(sourceObj.detection.score, rect.rescale(imageDims.reverse()), imageDims); + var extension = { + landmarks: landmarks, + unshiftedLandmarks: unshiftedLandmarks, + alignedRect: alignedRect + }; + return Object.assign({}, sourceObj, extension); + } + + var DrawFaceLandmarksOptions = /** @class */ (function () { + function DrawFaceLandmarksOptions(options) { + if (options === void 0) { options = {}; } + var _a = options.drawLines, drawLines = _a === void 0 ? true : _a, _b = options.drawPoints, drawPoints = _b === void 0 ? true : _b, lineWidth = options.lineWidth, lineColor = options.lineColor, pointSize = options.pointSize, pointColor = options.pointColor; + this.drawLines = drawLines; + this.drawPoints = drawPoints; + this.lineWidth = lineWidth || 1; + this.pointSize = pointSize || 2; + this.lineColor = lineColor || 'rgba(0, 255, 255, 1)'; + this.pointColor = pointColor || 'rgba(255, 0, 255, 1)'; + } + return DrawFaceLandmarksOptions; + }()); + var DrawFaceLandmarks = /** @class */ (function () { + function DrawFaceLandmarks(faceLandmarks, options) { + if (options === void 0) { options = {}; } + this.faceLandmarks = faceLandmarks; + this.options = new DrawFaceLandmarksOptions(options); + } + DrawFaceLandmarks.prototype.draw = function (canvasArg) { + var ctx = getContext2dOrThrow(canvasArg); + var _a = this.options, drawLines = _a.drawLines, drawPoints = _a.drawPoints, lineWidth = _a.lineWidth, lineColor = _a.lineColor, pointSize = _a.pointSize, pointColor = _a.pointColor; + if (drawLines && this.faceLandmarks instanceof FaceLandmarks68) { + ctx.strokeStyle = lineColor; + ctx.lineWidth = lineWidth; + drawContour(ctx, this.faceLandmarks.getJawOutline()); + drawContour(ctx, this.faceLandmarks.getLeftEyeBrow()); + drawContour(ctx, this.faceLandmarks.getRightEyeBrow()); + drawContour(ctx, this.faceLandmarks.getNose()); + drawContour(ctx, this.faceLandmarks.getLeftEye(), true); + drawContour(ctx, this.faceLandmarks.getRightEye(), true); + drawContour(ctx, this.faceLandmarks.getMouth(), true); + } + if (drawPoints) { + ctx.strokeStyle = pointColor; + ctx.fillStyle = pointColor; + var drawPoint = function (pt) { + ctx.beginPath(); + ctx.arc(pt.x, pt.y, pointSize, 0, 2 * Math.PI); + ctx.fill(); + }; + this.faceLandmarks.positions.forEach(drawPoint); + } + }; + return DrawFaceLandmarks; + }()); + function drawFaceLandmarks(canvasArg, faceLandmarks) { + var faceLandmarksArray = Array.isArray(faceLandmarks) ? faceLandmarks : [faceLandmarks]; + faceLandmarksArray.forEach(function (f) { + var landmarks = f instanceof FaceLandmarks + ? f + : (isWithFaceLandmarks(f) ? f.landmarks : undefined); + if (!landmarks) { + throw new Error('drawFaceLandmarks - expected faceExpressions to be FaceLandmarks | WithFaceLandmarks> or array thereof'); + } + new DrawFaceLandmarks(landmarks).draw(canvasArg); + }); + } + + + + var drawExtended = /*#__PURE__*/Object.freeze({ + drawContour: drawContour, + drawDetections: drawDetections, + drawFaceExpressions: drawFaceExpressions, + DrawFaceLandmarksOptions: DrawFaceLandmarksOptions, + DrawFaceLandmarks: DrawFaceLandmarks, + drawFaceLandmarks: drawFaceLandmarks + }); + + function extractorsFactory$3(extractWeights, paramMappings) { + var extractConvParams = extractConvParamsFactory(extractWeights, paramMappings); + var extractSeparableConvParams = extractSeparableConvParamsFactory(extractWeights, paramMappings); + function extractReductionBlockParams(channelsIn, channelsOut, mappedPrefix) { + var separable_conv0 = extractSeparableConvParams(channelsIn, channelsOut, mappedPrefix + "/separable_conv0"); + var separable_conv1 = extractSeparableConvParams(channelsOut, channelsOut, mappedPrefix + "/separable_conv1"); + var expansion_conv = extractConvParams(channelsIn, channelsOut, 1, mappedPrefix + "/expansion_conv"); + return { separable_conv0: separable_conv0, separable_conv1: separable_conv1, expansion_conv: expansion_conv }; + } + function extractMainBlockParams(channels, mappedPrefix) { + var separable_conv0 = extractSeparableConvParams(channels, channels, mappedPrefix + "/separable_conv0"); + var separable_conv1 = extractSeparableConvParams(channels, channels, mappedPrefix + "/separable_conv1"); + var separable_conv2 = extractSeparableConvParams(channels, channels, mappedPrefix + "/separable_conv2"); + return { separable_conv0: separable_conv0, separable_conv1: separable_conv1, separable_conv2: separable_conv2 }; + } + return { + extractConvParams: extractConvParams, + extractSeparableConvParams: extractSeparableConvParams, + extractReductionBlockParams: extractReductionBlockParams, + extractMainBlockParams: extractMainBlockParams + }; + } + function extractParams$3(weights, numMainBlocks) { + var paramMappings = []; + var _a = extractWeightsFactory(weights), extractWeights = _a.extractWeights, getRemainingWeights = _a.getRemainingWeights; + var _b = extractorsFactory$3(extractWeights, paramMappings), extractConvParams = _b.extractConvParams, extractSeparableConvParams = _b.extractSeparableConvParams, extractReductionBlockParams = _b.extractReductionBlockParams, extractMainBlockParams = _b.extractMainBlockParams; + var entry_flow_conv_in = extractConvParams(3, 32, 3, 'entry_flow/conv_in'); + var entry_flow_reduction_block_0 = extractReductionBlockParams(32, 64, 'entry_flow/reduction_block_0'); + var entry_flow_reduction_block_1 = extractReductionBlockParams(64, 128, 'entry_flow/reduction_block_1'); + var entry_flow = { + conv_in: entry_flow_conv_in, + reduction_block_0: entry_flow_reduction_block_0, + reduction_block_1: entry_flow_reduction_block_1 + }; + var middle_flow = {}; + range(numMainBlocks, 0, 1).forEach(function (idx) { + middle_flow["main_block_" + idx] = extractMainBlockParams(128, "middle_flow/main_block_" + idx); + }); + var exit_flow_reduction_block = extractReductionBlockParams(128, 256, 'exit_flow/reduction_block'); + var exit_flow_separable_conv = extractSeparableConvParams(256, 512, 'exit_flow/separable_conv'); + var exit_flow = { + reduction_block: exit_flow_reduction_block, + separable_conv: exit_flow_separable_conv + }; + if (getRemainingWeights().length !== 0) { + throw new Error("weights remaing after extract: " + getRemainingWeights().length); + } + return { + paramMappings: paramMappings, + params: { entry_flow: entry_flow, middle_flow: middle_flow, exit_flow: exit_flow } + }; + } + + function loadParamsFactory$1(weightMap, paramMappings) { + var extractWeightEntry = extractWeightEntryFactory(weightMap, paramMappings); + var extractConvParams = loadConvParamsFactory(extractWeightEntry); + var extractSeparableConvParams = loadSeparableConvParamsFactory(extractWeightEntry); + function extractReductionBlockParams(mappedPrefix) { + var separable_conv0 = extractSeparableConvParams(mappedPrefix + "/separable_conv0"); + var separable_conv1 = extractSeparableConvParams(mappedPrefix + "/separable_conv1"); + var expansion_conv = extractConvParams(mappedPrefix + "/expansion_conv"); + return { separable_conv0: separable_conv0, separable_conv1: separable_conv1, expansion_conv: expansion_conv }; + } + function extractMainBlockParams(mappedPrefix) { + var separable_conv0 = extractSeparableConvParams(mappedPrefix + "/separable_conv0"); + var separable_conv1 = extractSeparableConvParams(mappedPrefix + "/separable_conv1"); + var separable_conv2 = extractSeparableConvParams(mappedPrefix + "/separable_conv2"); + return { separable_conv0: separable_conv0, separable_conv1: separable_conv1, separable_conv2: separable_conv2 }; + } + return { + extractConvParams: extractConvParams, + extractSeparableConvParams: extractSeparableConvParams, + extractReductionBlockParams: extractReductionBlockParams, + extractMainBlockParams: extractMainBlockParams + }; + } + function extractParamsFromWeigthMap$3(weightMap, numMainBlocks) { + var paramMappings = []; + var _a = loadParamsFactory$1(weightMap, paramMappings), extractConvParams = _a.extractConvParams, extractSeparableConvParams = _a.extractSeparableConvParams, extractReductionBlockParams = _a.extractReductionBlockParams, extractMainBlockParams = _a.extractMainBlockParams; + var entry_flow_conv_in = extractConvParams('entry_flow/conv_in'); + var entry_flow_reduction_block_0 = extractReductionBlockParams('entry_flow/reduction_block_0'); + var entry_flow_reduction_block_1 = extractReductionBlockParams('entry_flow/reduction_block_1'); + var entry_flow = { + conv_in: entry_flow_conv_in, + reduction_block_0: entry_flow_reduction_block_0, + reduction_block_1: entry_flow_reduction_block_1 + }; + var middle_flow = {}; + range(numMainBlocks, 0, 1).forEach(function (idx) { + middle_flow["main_block_" + idx] = extractMainBlockParams("middle_flow/main_block_" + idx); + }); + var exit_flow_reduction_block = extractReductionBlockParams('exit_flow/reduction_block'); + var exit_flow_separable_conv = extractSeparableConvParams('exit_flow/separable_conv'); + var exit_flow = { + reduction_block: exit_flow_reduction_block, + separable_conv: exit_flow_separable_conv + }; + disposeUnusedWeightTensors(weightMap, paramMappings); + return { params: { entry_flow: entry_flow, middle_flow: middle_flow, exit_flow: exit_flow }, paramMappings: paramMappings }; + } + + function conv(x, params, stride) { + return Yu(nu(x, params.filters, stride, 'same'), params.bias); + } + function reductionBlock(x, params, isActivateInput) { + if (isActivateInput === void 0) { isActivateInput = true; } + var out = isActivateInput ? Sl(x) : x; + out = depthwiseSeparableConv$1(out, params.separable_conv0, [1, 1]); + out = depthwiseSeparableConv$1(Sl(out), params.separable_conv1, [1, 1]); + out = yu(out, [3, 3], [2, 2], 'same'); + out = Yu(out, conv(x, params.expansion_conv, [2, 2])); + return out; + } + function mainBlock(x, params) { + var out = depthwiseSeparableConv$1(Sl(x), params.separable_conv0, [1, 1]); + out = depthwiseSeparableConv$1(Sl(out), params.separable_conv1, [1, 1]); + out = depthwiseSeparableConv$1(Sl(out), params.separable_conv2, [1, 1]); + out = Yu(out, x); + return out; + } + var TinyXception = /** @class */ (function (_super) { + __extends(TinyXception, _super); + function TinyXception(numMainBlocks) { + var _this = _super.call(this, 'TinyXception') || this; + _this._numMainBlocks = numMainBlocks; + return _this; + } + TinyXception.prototype.forwardInput = function (input) { + var _this = this; + var params = this.params; + if (!params) { + throw new Error('TinyXception - load model before inference'); + } + return Fe(function () { + var batchTensor = input.toBatchTensor(112, true); + var meanRgb = [122.782, 117.001, 104.298]; + var normalized = normalize(batchTensor, meanRgb).div(vn(256)); + var out = Sl(conv(normalized, params.entry_flow.conv_in, [2, 2])); + out = reductionBlock(out, params.entry_flow.reduction_block_0, false); + out = reductionBlock(out, params.entry_flow.reduction_block_1); + range(_this._numMainBlocks, 0, 1).forEach(function (idx) { + out = mainBlock(out, params.middle_flow["main_block_" + idx]); + }); + out = reductionBlock(out, params.exit_flow.reduction_block); + out = Sl(depthwiseSeparableConv$1(out, params.exit_flow.separable_conv, [1, 1])); + return out; + }); + }; + TinyXception.prototype.forward = function (input) { + return __awaiter(this, void 0, void 0, function () { + var _a; + return __generator(this, function (_b) { + switch (_b.label) { + case 0: + _a = this.forwardInput; + return [4 /*yield*/, toNetInput(input)]; + case 1: return [2 /*return*/, _a.apply(this, [_b.sent()])]; + } + }); + }); + }; + TinyXception.prototype.getDefaultModelName = function () { + return 'tiny_xception_model'; + }; + TinyXception.prototype.extractParamsFromWeigthMap = function (weightMap) { + return extractParamsFromWeigthMap$3(weightMap, this._numMainBlocks); + }; + TinyXception.prototype.extractParams = function (weights) { + return extractParams$3(weights, this._numMainBlocks); + }; + return TinyXception; + }(NeuralNetwork)); + + function extractParams$4(weights) { + var paramMappings = []; + var _a = extractWeightsFactory(weights), extractWeights = _a.extractWeights, getRemainingWeights = _a.getRemainingWeights; + var extractFCParams = extractFCParamsFactory(extractWeights, paramMappings); + var age = extractFCParams(512, 1, 'fc/age'); + var gender = extractFCParams(512, 2, 'fc/gender'); + if (getRemainingWeights().length !== 0) { + throw new Error("weights remaing after extract: " + getRemainingWeights().length); + } + return { + paramMappings: paramMappings, + params: { fc: { age: age, gender: gender } } + }; + } + + function extractParamsFromWeigthMap$4(weightMap) { + var paramMappings = []; + var extractWeightEntry = extractWeightEntryFactory(weightMap, paramMappings); + function extractFcParams(prefix) { + var weights = extractWeightEntry(prefix + "/weights", 2); + var bias = extractWeightEntry(prefix + "/bias", 1); + return { weights: weights, bias: bias }; + } + var params = { + fc: { + age: extractFcParams('fc/age'), + gender: extractFcParams('fc/gender') + } + }; + disposeUnusedWeightTensors(weightMap, paramMappings); + return { params: params, paramMappings: paramMappings }; + } + + (function (Gender) { + Gender["FEMALE"] = "Feminino"; + Gender["MALE"] = "Masculino"; + })(exports.Gender || (exports.Gender = {})); + + var AgeGenderNet = /** @class */ (function (_super) { + __extends(AgeGenderNet, _super); + function AgeGenderNet(faceFeatureExtractor) { + if (faceFeatureExtractor === void 0) { faceFeatureExtractor = new TinyXception(2); } + var _this = _super.call(this, 'AgeGenderNet') || this; + _this._faceFeatureExtractor = faceFeatureExtractor; + return _this; + } + Object.defineProperty(AgeGenderNet.prototype, "faceFeatureExtractor", { + get: function () { + return this._faceFeatureExtractor; + }, + enumerable: true, + configurable: true + }); + AgeGenderNet.prototype.runNet = function (input) { + var _this = this; + var params = this.params; + if (!params) { + throw new Error(this._name + " - load model before inference"); + } + return Fe(function () { + var bottleneckFeatures = input instanceof NetInput + ? _this.faceFeatureExtractor.forwardInput(input) + : input; + var pooled = xu(bottleneckFeatures, [7, 7], [2, 2], 'valid').as2D(bottleneckFeatures.shape[0], -1); + var age = fullyConnectedLayer(pooled, params.fc.age).as1D(); + var gender = fullyConnectedLayer(pooled, params.fc.gender); + return { age: age, gender: gender }; + }); + }; + AgeGenderNet.prototype.forwardInput = function (input) { + var _this = this; + return Fe(function () { + var _a = _this.runNet(input), age = _a.age, gender = _a.gender; + return { age: age, gender: zr(gender) }; + }); + }; + AgeGenderNet.prototype.forward = function (input) { + return __awaiter(this, void 0, void 0, function () { + var _a; + return __generator(this, function (_b) { + switch (_b.label) { + case 0: + _a = this.forwardInput; + return [4 /*yield*/, toNetInput(input)]; + case 1: return [2 /*return*/, _a.apply(this, [_b.sent()])]; + } + }); + }); + }; + AgeGenderNet.prototype.predictAgeAndGender = function (input) { + return __awaiter(this, void 0, void 0, function () { + var netInput, out, ages, genders, ageAndGenderTensors, predictionsByBatch; + var _this = this; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, toNetInput(input)]; + case 1: + netInput = _a.sent(); + return [4 /*yield*/, this.forwardInput(netInput)]; + case 2: + out = _a.sent(); + ages = gr(out.age); + genders = gr(out.gender); + ageAndGenderTensors = ages.map(function (ageTensor, i) { return ({ + ageTensor: ageTensor, + genderTensor: genders[i] + }); }); + return [4 /*yield*/, Promise.all(ageAndGenderTensors.map(function (_a) { + var ageTensor = _a.ageTensor, genderTensor = _a.genderTensor; + return __awaiter(_this, void 0, void 0, function () { + var age, probMale, isMale, gender, genderProbability; + return __generator(this, function (_b) { + switch (_b.label) { + case 0: return [4 /*yield*/, ageTensor.data()]; + case 1: + age = (_b.sent())[0]; + return [4 /*yield*/, genderTensor.data()]; + case 2: + probMale = (_b.sent())[0]; + isMale = probMale > 0.5; + gender = isMale ? exports.Gender.MALE : exports.Gender.FEMALE; + genderProbability = isMale ? probMale : (1 - probMale); + ageTensor.dispose(); + genderTensor.dispose(); + return [2 /*return*/, { age: age, gender: gender, genderProbability: genderProbability ,probMale:probMale}]; + } + }); + }); + }))]; + case 3: + predictionsByBatch = _a.sent(); + out.age.dispose(); + out.gender.dispose(); + return [2 /*return*/, netInput.isBatchInput + ? predictionsByBatch + : predictionsByBatch[0]]; + } + }); + }); + }; + AgeGenderNet.prototype.getDefaultModelName = function () { + return 'age_gender_model'; + }; + AgeGenderNet.prototype.dispose = function (throwOnRedispose) { + if (throwOnRedispose === void 0) { throwOnRedispose = true; } + this.faceFeatureExtractor.dispose(throwOnRedispose); + _super.prototype.dispose.call(this, throwOnRedispose); + }; + AgeGenderNet.prototype.loadClassifierParams = function (weights) { + var _a = this.extractClassifierParams(weights), params = _a.params, paramMappings = _a.paramMappings; + this._params = params; + this._paramMappings = paramMappings; + }; + AgeGenderNet.prototype.extractClassifierParams = function (weights) { + return extractParams$4(weights); + }; + AgeGenderNet.prototype.extractParamsFromWeigthMap = function (weightMap) { + var _a = seperateWeightMaps(weightMap), featureExtractorMap = _a.featureExtractorMap, classifierMap = _a.classifierMap; + this.faceFeatureExtractor.loadFromWeightMap(featureExtractorMap); + return extractParamsFromWeigthMap$4(classifierMap); + }; + AgeGenderNet.prototype.extractParams = function (weights) { + var classifierWeightSize = (512 * 1 + 1) + (512 * 2 + 2); + var featureExtractorWeights = weights.slice(0, weights.length - classifierWeightSize); + var classifierWeights = weights.slice(weights.length - classifierWeightSize); + this.faceFeatureExtractor.extractWeights(featureExtractorWeights); + return this.extractClassifierParams(classifierWeights); + }; + return AgeGenderNet; + }(NeuralNetwork)); + + var FaceLandmarks5 = /** @class */ (function (_super) { + __extends(FaceLandmarks5, _super); + function FaceLandmarks5() { + return _super !== null && _super.apply(this, arguments) || this; + } + FaceLandmarks5.prototype.getRefPointsForAlignment = function () { + var pts = this.positions; + return [ + pts[0], + pts[1], + getCenterPoint([pts[3], pts[4]]) + ]; + }; + return FaceLandmarks5; + }(FaceLandmarks)); + + var FaceMatch = /** @class */ (function () { + function FaceMatch(label, distance,descriptors) { + this._label = label; + this._distance = distance; + this._descriptors =descriptors + } + Object.defineProperty(FaceMatch.prototype, "label", { + get: function () { return this._label; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(FaceMatch.prototype, "distance", { + get: function () { return this._distance; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(FaceMatch.prototype, "descriptors", { + get: function () { return this.descriptors; }, + enumerable: true, + configurable: true + }); + FaceMatch.prototype.toString = function (withDistance) { + if (withDistance === void 0) { withDistance = true; } + return "" + this.label + (withDistance ? " (" + round(this.distance) + ")" : ''); + }; + return FaceMatch; + }()); + + var LabeledFaceDescriptors = /** @class */ (function () { + function LabeledFaceDescriptors(label, descriptors) { + if (!(typeof label === 'string')) { + throw new Error('LabeledFaceDescriptors - constructor expected label to be a string'); + } + if (!Array.isArray(descriptors) || descriptors.some(function (desc) { return !(desc instanceof Float32Array); })) { + throw new Error('LabeledFaceDescriptors - constructor expected descriptors to be an array of Float32Array'); + } + this._label = label; + this._descriptors = descriptors; + } + Object.defineProperty(LabeledFaceDescriptors.prototype, "label", { + get: function () { return this._label; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(LabeledFaceDescriptors.prototype, "descriptors", { + get: function () { return this._descriptors; }, + enumerable: true, + configurable: true + }); + return LabeledFaceDescriptors; + }()); + + /** + * Extracts the image regions containing the detected faces. + * + * @param input The image that face detection has been performed on. + * @param detections The face detection results or face bounding boxes for that image. + * @returns The Canvases of the corresponding image region for each detected face. + */ + function extractFaces(input, detections) { + return __awaiter(this, void 0, void 0, function () { + var Canvas, canvas, netInput, tensorOrCanvas, _a, ctx, boxes; + return __generator(this, function (_b) { + switch (_b.label) { + case 0: + Canvas = env.getEnv().Canvas; + canvas = input; + if (!!(input instanceof Canvas)) return [3 /*break*/, 5]; + return [4 /*yield*/, toNetInput(input)]; + case 1: + netInput = _b.sent(); + if (netInput.batchSize > 1) { + throw new Error('extractFaces - batchSize > 1 not supported'); + } + tensorOrCanvas = netInput.getInput(0); + if (!(tensorOrCanvas instanceof Canvas)) return [3 /*break*/, 2]; + _a = tensorOrCanvas; + return [3 /*break*/, 4]; + case 2: return [4 /*yield*/, imageTensorToCanvas(tensorOrCanvas)]; + case 3: + _a = _b.sent(); + _b.label = 4; + case 4: + canvas = _a; + _b.label = 5; + case 5: + ctx = getContext2dOrThrow(canvas); + boxes = detections.map(function (det) { return det instanceof FaceDetection + ? det.forSize(canvas.width, canvas.height).box.floor() + : det; }) + .map(function (box) { return box.clipAtImageBorders(canvas.width, canvas.height); }); + return [2 /*return*/, boxes.map(function (_a) { + var x = _a.x, y = _a.y, width = _a.width, height = _a.height; + var faceImg = createCanvas({ width: width, height: height }); + getContext2dOrThrow(faceImg) + .putImageData(ctx.getImageData(x, y, width, height), 0, 0); + return faceImg; + })]; + } + }); + }); + } + + /** + * Extracts the tensors of the image regions containing the detected faces. + * Useful if you want to compute the face descriptors for the face images. + * Using this method is faster then extracting a canvas for each face and + * converting them to tensors individually. + * + * @param imageTensor The image tensor that face detection has been performed on. + * @param detections The face detection results or face bounding boxes for that image. + * @returns Tensors of the corresponding image region for each detected face. + */ + function extractFaceTensors(imageTensor, detections) { + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + if (!isTensor3D(imageTensor) && !isTensor4D(imageTensor)) { + throw new Error('extractFaceTensors - expected image tensor to be 3D or 4D'); + } + if (isTensor4D(imageTensor) && imageTensor.shape[0] > 1) { + throw new Error('extractFaceTensors - batchSize > 1 not supported'); + } + return [2 /*return*/, Fe(function () { + var _a = imageTensor.shape.slice(isTensor4D(imageTensor) ? 1 : 0), imgHeight = _a[0], imgWidth = _a[1], numChannels = _a[2]; + var boxes = detections.map(function (det) { return det instanceof FaceDetection + ? det.forSize(imgWidth, imgHeight).box + : det; }) + .map(function (box) { return box.clipAtImageBorders(imgWidth, imgHeight); }); + var faceTensors = boxes.map(function (_a) { + var x = _a.x, y = _a.y, width = _a.width, height = _a.height; + return Ru(imageTensor.as3D(imgHeight, imgWidth, numChannels), [y, x, 0], [height, width, numChannels]); + }); + return faceTensors; + })]; + }); + }); + } + + var FaceLandmark68NetBase = /** @class */ (function (_super) { + __extends(FaceLandmark68NetBase, _super); + function FaceLandmark68NetBase() { + return _super !== null && _super.apply(this, arguments) || this; + } + FaceLandmark68NetBase.prototype.postProcess = function (output, inputSize, originalDimensions) { + var inputDimensions = originalDimensions.map(function (_a) { + var width = _a.width, height = _a.height; + var scale = inputSize / Math.max(height, width); + return { + width: width * scale, + height: height * scale + }; + }); + var batchSize = inputDimensions.length; + return Fe(function () { + var createInterleavedTensor = function (fillX, fillY) { + return dr([ + Rn([68], fillX), + Rn([68], fillY) + ], 1).as2D(1, 136).as1D(); + }; + var getPadding = function (batchIdx, cond) { + var _a = inputDimensions[batchIdx], width = _a.width, height = _a.height; + return cond(width, height) ? Math.abs(width - height) / 2 : 0; + }; + var getPaddingX = function (batchIdx) { return getPadding(batchIdx, function (w, h) { return w < h; }); }; + var getPaddingY = function (batchIdx) { return getPadding(batchIdx, function (w, h) { return h < w; }); }; + var landmarkTensors = output + .mul(Rn([batchSize, 136], inputSize)) + .sub(dr(Array.from(Array(batchSize), function (_, batchIdx) { + return createInterleavedTensor(getPaddingX(batchIdx), getPaddingY(batchIdx)); + }))) + .div(dr(Array.from(Array(batchSize), function (_, batchIdx) { + return createInterleavedTensor(inputDimensions[batchIdx].width, inputDimensions[batchIdx].height); + }))); + return landmarkTensors; + }); + }; + FaceLandmark68NetBase.prototype.forwardInput = function (input) { + var _this = this; + return Fe(function () { + var out = _this.runNet(input); + return _this.postProcess(out, input.inputSize, input.inputDimensions.map(function (_a) { + var height = _a[0], width = _a[1]; + return ({ height: height, width: width }); + })); + }); + }; + FaceLandmark68NetBase.prototype.forward = function (input) { + return __awaiter(this, void 0, void 0, function () { + var _a; + return __generator(this, function (_b) { + switch (_b.label) { + case 0: + _a = this.forwardInput; + return [4 /*yield*/, toNetInput(input)]; + case 1: return [2 /*return*/, _a.apply(this, [_b.sent()])]; + } + }); + }); + }; + FaceLandmark68NetBase.prototype.detectLandmarks = function (input) { + return __awaiter(this, void 0, void 0, function () { + var netInput, landmarkTensors, landmarksForBatch; + var _this = this; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, toNetInput(input)]; + case 1: + netInput = _a.sent(); + landmarkTensors = Fe(function () { return gr(_this.forwardInput(netInput)); }); + return [4 /*yield*/, Promise.all(landmarkTensors.map(function (landmarkTensor, batchIdx) { return __awaiter(_this, void 0, void 0, function () { + var landmarksArray, _a, _b, xCoords, yCoords; + return __generator(this, function (_c) { + switch (_c.label) { + case 0: + _b = (_a = Array).from; + return [4 /*yield*/, landmarkTensor.data()]; + case 1: + landmarksArray = _b.apply(_a, [_c.sent()]); + xCoords = landmarksArray.filter(function (_, i) { return isEven(i); }); + yCoords = landmarksArray.filter(function (_, i) { return !isEven(i); }); + return [2 /*return*/, new FaceLandmarks68(Array(68).fill(0).map(function (_, i) { return new Point(xCoords[i], yCoords[i]); }), { + height: netInput.getInputHeight(batchIdx), + width: netInput.getInputWidth(batchIdx), + })]; + } + }); + }); }))]; + case 2: + landmarksForBatch = _a.sent(); + landmarkTensors.forEach(function (t) { return t.dispose(); }); + return [2 /*return*/, netInput.isBatchInput + ? landmarksForBatch + : landmarksForBatch[0]]; + } + }); + }); + }; + FaceLandmark68NetBase.prototype.getClassifierChannelsOut = function () { + return 136; + }; + return FaceLandmark68NetBase; + }(FaceProcessor)); + + var FaceLandmark68Net = /** @class */ (function (_super) { + __extends(FaceLandmark68Net, _super); + function FaceLandmark68Net(faceFeatureExtractor) { + if (faceFeatureExtractor === void 0) { faceFeatureExtractor = new FaceFeatureExtractor(); } + return _super.call(this, 'FaceLandmark68Net', faceFeatureExtractor) || this; + } + FaceLandmark68Net.prototype.getDefaultModelName = function () { + return 'face_landmark_68_model'; + }; + FaceLandmark68Net.prototype.getClassifierChannelsIn = function () { + return 256; + }; + return FaceLandmark68Net; + }(FaceLandmark68NetBase)); + + function extractParamsFromWeigthMapTiny(weightMap) { + var paramMappings = []; + var extractDenseBlock3Params = loadParamsFactory(weightMap, paramMappings).extractDenseBlock3Params; + var params = { + dense0: extractDenseBlock3Params('dense0', true), + dense1: extractDenseBlock3Params('dense1'), + dense2: extractDenseBlock3Params('dense2') + }; + disposeUnusedWeightTensors(weightMap, paramMappings); + return { params: params, paramMappings: paramMappings }; + } + + function extractParamsTiny(weights) { + var paramMappings = []; + var _a = extractWeightsFactory(weights), extractWeights = _a.extractWeights, getRemainingWeights = _a.getRemainingWeights; + var extractDenseBlock3Params = extractorsFactory$2(extractWeights, paramMappings).extractDenseBlock3Params; + var dense0 = extractDenseBlock3Params(3, 32, 'dense0', true); + var dense1 = extractDenseBlock3Params(32, 64, 'dense1'); + var dense2 = extractDenseBlock3Params(64, 128, 'dense2'); + if (getRemainingWeights().length !== 0) { + throw new Error("weights remaing after extract: " + getRemainingWeights().length); + } + return { + paramMappings: paramMappings, + params: { dense0: dense0, dense1: dense1, dense2: dense2 } + }; + } + + var TinyFaceFeatureExtractor = /** @class */ (function (_super) { + __extends(TinyFaceFeatureExtractor, _super); + function TinyFaceFeatureExtractor() { + return _super.call(this, 'TinyFaceFeatureExtractor') || this; + } + TinyFaceFeatureExtractor.prototype.forwardInput = function (input) { + var params = this.params; + if (!params) { + throw new Error('TinyFaceFeatureExtractor - load model before inference'); + } + return Fe(function () { + var batchTensor = input.toBatchTensor(112, true); + var meanRgb = [122.782, 117.001, 104.298]; + var normalized = normalize(batchTensor, meanRgb).div(vn(255)); + var out = denseBlock3(normalized, params.dense0, true); + out = denseBlock3(out, params.dense1); + out = denseBlock3(out, params.dense2); + out = xu(out, [14, 14], [2, 2], 'valid'); + return out; + }); + }; + TinyFaceFeatureExtractor.prototype.forward = function (input) { + return __awaiter(this, void 0, void 0, function () { + var _a; + return __generator(this, function (_b) { + switch (_b.label) { + case 0: + _a = this.forwardInput; + return [4 /*yield*/, toNetInput(input)]; + case 1: return [2 /*return*/, _a.apply(this, [_b.sent()])]; + } + }); + }); + }; + TinyFaceFeatureExtractor.prototype.getDefaultModelName = function () { + return 'face_feature_extractor_tiny_model'; + }; + TinyFaceFeatureExtractor.prototype.extractParamsFromWeigthMap = function (weightMap) { + return extractParamsFromWeigthMapTiny(weightMap); + }; + TinyFaceFeatureExtractor.prototype.extractParams = function (weights) { + return extractParamsTiny(weights); + }; + return TinyFaceFeatureExtractor; + }(NeuralNetwork)); + + var FaceLandmark68TinyNet = /** @class */ (function (_super) { + __extends(FaceLandmark68TinyNet, _super); + function FaceLandmark68TinyNet(faceFeatureExtractor) { + if (faceFeatureExtractor === void 0) { faceFeatureExtractor = new TinyFaceFeatureExtractor(); } + return _super.call(this, 'FaceLandmark68TinyNet', faceFeatureExtractor) || this; + } + FaceLandmark68TinyNet.prototype.getDefaultModelName = function () { + return 'face_landmark_68_tiny_model'; + }; + FaceLandmark68TinyNet.prototype.getClassifierChannelsIn = function () { + return 128; + }; + return FaceLandmark68TinyNet; + }(FaceLandmark68NetBase)); + + var FaceLandmarkNet = /** @class */ (function (_super) { + __extends(FaceLandmarkNet, _super); + function FaceLandmarkNet() { + return _super !== null && _super.apply(this, arguments) || this; + } + return FaceLandmarkNet; + }(FaceLandmark68Net)); + + function scale(x, params) { + return Yu(ll(x, params.weights), params.biases); + } + + function convLayer$1(x, params, strides, withRelu, padding) { + if (padding === void 0) { padding = 'same'; } + var _a = params.conv, filters = _a.filters, bias = _a.bias; + var out = nu(x, filters, strides, padding); + out = Yu(out, bias); + out = scale(out, params.scale); + return withRelu ? Sl(out) : out; + } + function conv$1(x, params) { + return convLayer$1(x, params, [1, 1], true); + } + function convNoRelu(x, params) { + return convLayer$1(x, params, [1, 1], false); + } + function convDown(x, params) { + return convLayer$1(x, params, [2, 2], true, 'valid'); + } + + function extractorsFactory$4(extractWeights, paramMappings) { + function extractFilterValues(numFilterValues, numFilters, filterSize) { + var weights = extractWeights(numFilterValues); + var depth = weights.length / (numFilters * filterSize * filterSize); + if (isFloat(depth)) { + throw new Error("depth has to be an integer: " + depth + ", weights.length: " + weights.length + ", numFilters: " + numFilters + ", filterSize: " + filterSize); + } + return Fe(function () { return kl(xn(weights, [numFilters, depth, filterSize, filterSize]), [2, 3, 1, 0]); }); + } + function extractConvParams(numFilterValues, numFilters, filterSize, mappedPrefix) { + var filters = extractFilterValues(numFilterValues, numFilters, filterSize); + var bias = mn(extractWeights(numFilters)); + paramMappings.push({ paramPath: mappedPrefix + "/filters" }, { paramPath: mappedPrefix + "/bias" }); + return { filters: filters, bias: bias }; + } + function extractScaleLayerParams(numWeights, mappedPrefix) { + var weights = mn(extractWeights(numWeights)); + var biases = mn(extractWeights(numWeights)); + paramMappings.push({ paramPath: mappedPrefix + "/weights" }, { paramPath: mappedPrefix + "/biases" }); + return { + weights: weights, + biases: biases + }; + } + function extractConvLayerParams(numFilterValues, numFilters, filterSize, mappedPrefix) { + var conv = extractConvParams(numFilterValues, numFilters, filterSize, mappedPrefix + "/conv"); + var scale = extractScaleLayerParams(numFilters, mappedPrefix + "/scale"); + return { conv: conv, scale: scale }; + } + function extractResidualLayerParams(numFilterValues, numFilters, filterSize, mappedPrefix, isDown) { + if (isDown === void 0) { isDown = false; } + var conv1 = extractConvLayerParams((isDown ? 0.5 : 1) * numFilterValues, numFilters, filterSize, mappedPrefix + "/conv1"); + var conv2 = extractConvLayerParams(numFilterValues, numFilters, filterSize, mappedPrefix + "/conv2"); + return { conv1: conv1, conv2: conv2 }; + } + return { + extractConvLayerParams: extractConvLayerParams, + extractResidualLayerParams: extractResidualLayerParams + }; + } + function extractParams$5(weights) { + var _a = extractWeightsFactory(weights), extractWeights = _a.extractWeights, getRemainingWeights = _a.getRemainingWeights; + var paramMappings = []; + var _b = extractorsFactory$4(extractWeights, paramMappings), extractConvLayerParams = _b.extractConvLayerParams, extractResidualLayerParams = _b.extractResidualLayerParams; + var conv32_down = extractConvLayerParams(4704, 32, 7, 'conv32_down'); + var conv32_1 = extractResidualLayerParams(9216, 32, 3, 'conv32_1'); + var conv32_2 = extractResidualLayerParams(9216, 32, 3, 'conv32_2'); + var conv32_3 = extractResidualLayerParams(9216, 32, 3, 'conv32_3'); + var conv64_down = extractResidualLayerParams(36864, 64, 3, 'conv64_down', true); + var conv64_1 = extractResidualLayerParams(36864, 64, 3, 'conv64_1'); + var conv64_2 = extractResidualLayerParams(36864, 64, 3, 'conv64_2'); + var conv64_3 = extractResidualLayerParams(36864, 64, 3, 'conv64_3'); + var conv128_down = extractResidualLayerParams(147456, 128, 3, 'conv128_down', true); + var conv128_1 = extractResidualLayerParams(147456, 128, 3, 'conv128_1'); + var conv128_2 = extractResidualLayerParams(147456, 128, 3, 'conv128_2'); + var conv256_down = extractResidualLayerParams(589824, 256, 3, 'conv256_down', true); + var conv256_1 = extractResidualLayerParams(589824, 256, 3, 'conv256_1'); + var conv256_2 = extractResidualLayerParams(589824, 256, 3, 'conv256_2'); + var conv256_down_out = extractResidualLayerParams(589824, 256, 3, 'conv256_down_out'); + var fc = Fe(function () { return kl(gn(extractWeights(256 * 128), [128, 256]), [1, 0]); }); + paramMappings.push({ paramPath: "fc" }); + if (getRemainingWeights().length !== 0) { + throw new Error("weights remaing after extract: " + getRemainingWeights().length); + } + var params = { + conv32_down: conv32_down, + conv32_1: conv32_1, + conv32_2: conv32_2, + conv32_3: conv32_3, + conv64_down: conv64_down, + conv64_1: conv64_1, + conv64_2: conv64_2, + conv64_3: conv64_3, + conv128_down: conv128_down, + conv128_1: conv128_1, + conv128_2: conv128_2, + conv256_down: conv256_down, + conv256_1: conv256_1, + conv256_2: conv256_2, + conv256_down_out: conv256_down_out, + fc: fc + }; + return { params: params, paramMappings: paramMappings }; + } + + function extractorsFactory$5(weightMap, paramMappings) { + var extractWeightEntry = extractWeightEntryFactory(weightMap, paramMappings); + function extractScaleLayerParams(prefix) { + var weights = extractWeightEntry(prefix + "/scale/weights", 1); + var biases = extractWeightEntry(prefix + "/scale/biases", 1); + return { weights: weights, biases: biases }; + } + function extractConvLayerParams(prefix) { + var filters = extractWeightEntry(prefix + "/conv/filters", 4); + var bias = extractWeightEntry(prefix + "/conv/bias", 1); + var scale = extractScaleLayerParams(prefix); + return { conv: { filters: filters, bias: bias }, scale: scale }; + } + function extractResidualLayerParams(prefix) { + return { + conv1: extractConvLayerParams(prefix + "/conv1"), + conv2: extractConvLayerParams(prefix + "/conv2") + }; + } + return { + extractConvLayerParams: extractConvLayerParams, + extractResidualLayerParams: extractResidualLayerParams + }; + } + function extractParamsFromWeigthMap$5(weightMap) { + var paramMappings = []; + var _a = extractorsFactory$5(weightMap, paramMappings), extractConvLayerParams = _a.extractConvLayerParams, extractResidualLayerParams = _a.extractResidualLayerParams; + var conv32_down = extractConvLayerParams('conv32_down'); + var conv32_1 = extractResidualLayerParams('conv32_1'); + var conv32_2 = extractResidualLayerParams('conv32_2'); + var conv32_3 = extractResidualLayerParams('conv32_3'); + var conv64_down = extractResidualLayerParams('conv64_down'); + var conv64_1 = extractResidualLayerParams('conv64_1'); + var conv64_2 = extractResidualLayerParams('conv64_2'); + var conv64_3 = extractResidualLayerParams('conv64_3'); + var conv128_down = extractResidualLayerParams('conv128_down'); + var conv128_1 = extractResidualLayerParams('conv128_1'); + var conv128_2 = extractResidualLayerParams('conv128_2'); + var conv256_down = extractResidualLayerParams('conv256_down'); + var conv256_1 = extractResidualLayerParams('conv256_1'); + var conv256_2 = extractResidualLayerParams('conv256_2'); + var conv256_down_out = extractResidualLayerParams('conv256_down_out'); + var fc = weightMap['fc']; + paramMappings.push({ originalPath: 'fc', paramPath: 'fc' }); + if (!isTensor2D(fc)) { + throw new Error("expected weightMap[fc] to be a Tensor2D, instead have " + fc); + } + var params = { + conv32_down: conv32_down, + conv32_1: conv32_1, + conv32_2: conv32_2, + conv32_3: conv32_3, + conv64_down: conv64_down, + conv64_1: conv64_1, + conv64_2: conv64_2, + conv64_3: conv64_3, + conv128_down: conv128_down, + conv128_1: conv128_1, + conv128_2: conv128_2, + conv256_down: conv256_down, + conv256_1: conv256_1, + conv256_2: conv256_2, + conv256_down_out: conv256_down_out, + fc: fc + }; + disposeUnusedWeightTensors(weightMap, paramMappings); + return { params: params, paramMappings: paramMappings }; + } + + function residual(x, params) { + var out = conv$1(x, params.conv1); + out = convNoRelu(out, params.conv2); + out = Yu(out, x); + out = Sl(out); + return out; + } + function residualDown(x, params) { + var out = convDown(x, params.conv1); + out = convNoRelu(out, params.conv2); + var pooled = xu(x, 2, 2, 'valid'); + var zeros = En(pooled.shape); + var isPad = pooled.shape[3] !== out.shape[3]; + var isAdjustShape = pooled.shape[1] !== out.shape[1] || pooled.shape[2] !== out.shape[2]; + if (isAdjustShape) { + var padShapeX = out.shape.slice(); + padShapeX[1] = 1; + var zerosW = En(padShapeX); + out = An([out, zerosW], 1); + var padShapeY = out.shape.slice(); + padShapeY[2] = 1; + var zerosH = En(padShapeY); + out = An([out, zerosH], 2); + } + pooled = isPad ? An([pooled, zeros], 3) : pooled; + out = Yu(pooled, out); + out = Sl(out); + return out; + } + + var FaceRecognitionNet = /** @class */ (function (_super) { + __extends(FaceRecognitionNet, _super); + function FaceRecognitionNet() { + return _super.call(this, 'FaceRecognitionNet') || this; + } + FaceRecognitionNet.prototype.forwardInput = function (input) { + var params = this.params; + if (!params) { + throw new Error('FaceRecognitionNet - load model before inference'); + } + return Fe(function () { + var batchTensor = input.toBatchTensor(150, true).toFloat(); + var meanRgb = [122.782, 117.001, 104.298]; + var normalized = normalize(batchTensor, meanRgb).div(vn(256)); + var out = convDown(normalized, params.conv32_down); + out = yu(out, 3, 2, 'valid'); + out = residual(out, params.conv32_1); + out = residual(out, params.conv32_2); + out = residual(out, params.conv32_3); + out = residualDown(out, params.conv64_down); + out = residual(out, params.conv64_1); + out = residual(out, params.conv64_2); + out = residual(out, params.conv64_3); + out = residualDown(out, params.conv128_down); + out = residual(out, params.conv128_1); + out = residual(out, params.conv128_2); + out = residualDown(out, params.conv256_down); + out = residual(out, params.conv256_1); + out = residual(out, params.conv256_2); + out = residualDown(out, params.conv256_down_out); + var globalAvg = out.mean([1, 2]); + var fullyConnected = uu(globalAvg, params.fc); + return fullyConnected; + }); + }; + FaceRecognitionNet.prototype.forward = function (input) { + return __awaiter(this, void 0, void 0, function () { + var _a; + return __generator(this, function (_b) { + switch (_b.label) { + case 0: + _a = this.forwardInput; + return [4 /*yield*/, toNetInput(input)]; + case 1: return [2 /*return*/, _a.apply(this, [_b.sent()])]; + } + }); + }); + }; + FaceRecognitionNet.prototype.computeFaceDescriptor = function (input) { + return __awaiter(this, void 0, void 0, function () { + var netInput, faceDescriptorTensors, faceDescriptorsForBatch; + var _this = this; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, toNetInput(input)]; + case 1: + netInput = _a.sent(); + faceDescriptorTensors = Fe(function () { return gr(_this.forwardInput(netInput)); }); + return [4 /*yield*/, Promise.all(faceDescriptorTensors.map(function (t) { return t.data(); }))]; + case 2: + faceDescriptorsForBatch = _a.sent(); + faceDescriptorTensors.forEach(function (t) { return t.dispose(); }); + return [2 /*return*/, netInput.isBatchInput + ? faceDescriptorsForBatch + : faceDescriptorsForBatch[0]]; + } + }); + }); + }; + FaceRecognitionNet.prototype.getDefaultModelName = function () { + return 'face_recognition_model'; + }; + FaceRecognitionNet.prototype.extractParamsFromWeigthMap = function (weightMap) { + return extractParamsFromWeigthMap$5(weightMap); + }; + FaceRecognitionNet.prototype.extractParams = function (weights) { + return extractParams$5(weights); + }; + return FaceRecognitionNet; + }(NeuralNetwork)); + + function createFaceRecognitionNet(weights) { + var net = new FaceRecognitionNet(); + net.extractWeights(weights); + return net; + } + + function extendWithFaceDescriptor(sourceObj, descriptor) { + var extension = { descriptor: descriptor }; + return Object.assign({}, sourceObj, extension); + } + + function isWithAge(obj) { + return typeof obj['age'] === 'number'; + } + function extendWithAge(sourceObj, age) { + var extension = { age: age }; + return Object.assign({}, sourceObj, extension); + } + + function isWithGender(obj) { + return (obj['gender'] === exports.Gender.MALE || obj['gender'] === exports.Gender.FEMALE) + && isValidProbablitiy(obj['genderProbability']); + } + function extendWithGender(sourceObj, gender, genderProbability) { + var extension = { gender: gender, genderProbability: genderProbability }; + return Object.assign({}, sourceObj, extension); + } + + var MtcnnOptions = /** @class */ (function () { + function MtcnnOptions(_a) { + var _b = _a === void 0 ? {} : _a, minFaceSize = _b.minFaceSize, scaleFactor = _b.scaleFactor, maxNumScales = _b.maxNumScales, scoreThresholds = _b.scoreThresholds, scaleSteps = _b.scaleSteps; + this._name = 'MtcnnOptions'; + this._minFaceSize = minFaceSize || 20; + this._scaleFactor = scaleFactor || 0.709; + this._maxNumScales = maxNumScales || 10; + this._scoreThresholds = scoreThresholds || [0.6, 0.7, 0.7]; + this._scaleSteps = scaleSteps; + if (typeof this._minFaceSize !== 'number' || this._minFaceSize < 0) { + throw new Error(this._name + " - expected minFaceSize to be a number > 0"); + } + if (typeof this._scaleFactor !== 'number' || this._scaleFactor <= 0 || this._scaleFactor >= 1) { + throw new Error(this._name + " - expected scaleFactor to be a number between 0 and 1"); + } + if (typeof this._maxNumScales !== 'number' || this._maxNumScales < 0) { + throw new Error(this._name + " - expected maxNumScales to be a number > 0"); + } + if (!Array.isArray(this._scoreThresholds) + || this._scoreThresholds.length !== 3 + || this._scoreThresholds.some(function (th) { return typeof th !== 'number'; })) { + throw new Error(this._name + " - expected scoreThresholds to be an array of numbers of length 3"); + } + if (this._scaleSteps + && (!Array.isArray(this._scaleSteps) || this._scaleSteps.some(function (th) { return typeof th !== 'number'; }))) { + throw new Error(this._name + " - expected scaleSteps to be an array of numbers"); + } + } + Object.defineProperty(MtcnnOptions.prototype, "minFaceSize", { + get: function () { return this._minFaceSize; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(MtcnnOptions.prototype, "scaleFactor", { + get: function () { return this._scaleFactor; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(MtcnnOptions.prototype, "maxNumScales", { + get: function () { return this._maxNumScales; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(MtcnnOptions.prototype, "scoreThresholds", { + get: function () { return this._scoreThresholds; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(MtcnnOptions.prototype, "scaleSteps", { + get: function () { return this._scaleSteps; }, + enumerable: true, + configurable: true + }); + return MtcnnOptions; + }()); + + function extractorsFactory$6(extractWeights, paramMappings) { + function extractDepthwiseConvParams(numChannels, mappedPrefix) { + var filters = xn(extractWeights(3 * 3 * numChannels), [3, 3, numChannels, 1]); + var batch_norm_scale = mn(extractWeights(numChannels)); + var batch_norm_offset = mn(extractWeights(numChannels)); + var batch_norm_mean = mn(extractWeights(numChannels)); + var batch_norm_variance = mn(extractWeights(numChannels)); + paramMappings.push({ paramPath: mappedPrefix + "/filters" }, { paramPath: mappedPrefix + "/batch_norm_scale" }, { paramPath: mappedPrefix + "/batch_norm_offset" }, { paramPath: mappedPrefix + "/batch_norm_mean" }, { paramPath: mappedPrefix + "/batch_norm_variance" }); + return { + filters: filters, + batch_norm_scale: batch_norm_scale, + batch_norm_offset: batch_norm_offset, + batch_norm_mean: batch_norm_mean, + batch_norm_variance: batch_norm_variance + }; + } + function extractConvParams(channelsIn, channelsOut, filterSize, mappedPrefix, isPointwiseConv) { + var filters = xn(extractWeights(channelsIn * channelsOut * filterSize * filterSize), [filterSize, filterSize, channelsIn, channelsOut]); + var bias = mn(extractWeights(channelsOut)); + paramMappings.push({ paramPath: mappedPrefix + "/filters" }, { paramPath: mappedPrefix + "/" + (isPointwiseConv ? 'batch_norm_offset' : 'bias') }); + return { filters: filters, bias: bias }; + } + function extractPointwiseConvParams(channelsIn, channelsOut, filterSize, mappedPrefix) { + var _a = extractConvParams(channelsIn, channelsOut, filterSize, mappedPrefix, true), filters = _a.filters, bias = _a.bias; + return { + filters: filters, + batch_norm_offset: bias + }; + } + function extractConvPairParams(channelsIn, channelsOut, mappedPrefix) { + var depthwise_conv = extractDepthwiseConvParams(channelsIn, mappedPrefix + "/depthwise_conv"); + var pointwise_conv = extractPointwiseConvParams(channelsIn, channelsOut, 1, mappedPrefix + "/pointwise_conv"); + return { depthwise_conv: depthwise_conv, pointwise_conv: pointwise_conv }; + } + function extractMobilenetV1Params() { + var conv_0 = extractPointwiseConvParams(3, 32, 3, 'mobilenetv1/conv_0'); + var conv_1 = extractConvPairParams(32, 64, 'mobilenetv1/conv_1'); + var conv_2 = extractConvPairParams(64, 128, 'mobilenetv1/conv_2'); + var conv_3 = extractConvPairParams(128, 128, 'mobilenetv1/conv_3'); + var conv_4 = extractConvPairParams(128, 256, 'mobilenetv1/conv_4'); + var conv_5 = extractConvPairParams(256, 256, 'mobilenetv1/conv_5'); + var conv_6 = extractConvPairParams(256, 512, 'mobilenetv1/conv_6'); + var conv_7 = extractConvPairParams(512, 512, 'mobilenetv1/conv_7'); + var conv_8 = extractConvPairParams(512, 512, 'mobilenetv1/conv_8'); + var conv_9 = extractConvPairParams(512, 512, 'mobilenetv1/conv_9'); + var conv_10 = extractConvPairParams(512, 512, 'mobilenetv1/conv_10'); + var conv_11 = extractConvPairParams(512, 512, 'mobilenetv1/conv_11'); + var conv_12 = extractConvPairParams(512, 1024, 'mobilenetv1/conv_12'); + var conv_13 = extractConvPairParams(1024, 1024, 'mobilenetv1/conv_13'); + return { + conv_0: conv_0, + conv_1: conv_1, + conv_2: conv_2, + conv_3: conv_3, + conv_4: conv_4, + conv_5: conv_5, + conv_6: conv_6, + conv_7: conv_7, + conv_8: conv_8, + conv_9: conv_9, + conv_10: conv_10, + conv_11: conv_11, + conv_12: conv_12, + conv_13: conv_13 + }; + } + function extractPredictionLayerParams() { + var conv_0 = extractPointwiseConvParams(1024, 256, 1, 'prediction_layer/conv_0'); + var conv_1 = extractPointwiseConvParams(256, 512, 3, 'prediction_layer/conv_1'); + var conv_2 = extractPointwiseConvParams(512, 128, 1, 'prediction_layer/conv_2'); + var conv_3 = extractPointwiseConvParams(128, 256, 3, 'prediction_layer/conv_3'); + var conv_4 = extractPointwiseConvParams(256, 128, 1, 'prediction_layer/conv_4'); + var conv_5 = extractPointwiseConvParams(128, 256, 3, 'prediction_layer/conv_5'); + var conv_6 = extractPointwiseConvParams(256, 64, 1, 'prediction_layer/conv_6'); + var conv_7 = extractPointwiseConvParams(64, 128, 3, 'prediction_layer/conv_7'); + var box_encoding_0_predictor = extractConvParams(512, 12, 1, 'prediction_layer/box_predictor_0/box_encoding_predictor'); + var class_predictor_0 = extractConvParams(512, 9, 1, 'prediction_layer/box_predictor_0/class_predictor'); + var box_encoding_1_predictor = extractConvParams(1024, 24, 1, 'prediction_layer/box_predictor_1/box_encoding_predictor'); + var class_predictor_1 = extractConvParams(1024, 18, 1, 'prediction_layer/box_predictor_1/class_predictor'); + var box_encoding_2_predictor = extractConvParams(512, 24, 1, 'prediction_layer/box_predictor_2/box_encoding_predictor'); + var class_predictor_2 = extractConvParams(512, 18, 1, 'prediction_layer/box_predictor_2/class_predictor'); + var box_encoding_3_predictor = extractConvParams(256, 24, 1, 'prediction_layer/box_predictor_3/box_encoding_predictor'); + var class_predictor_3 = extractConvParams(256, 18, 1, 'prediction_layer/box_predictor_3/class_predictor'); + var box_encoding_4_predictor = extractConvParams(256, 24, 1, 'prediction_layer/box_predictor_4/box_encoding_predictor'); + var class_predictor_4 = extractConvParams(256, 18, 1, 'prediction_layer/box_predictor_4/class_predictor'); + var box_encoding_5_predictor = extractConvParams(128, 24, 1, 'prediction_layer/box_predictor_5/box_encoding_predictor'); + var class_predictor_5 = extractConvParams(128, 18, 1, 'prediction_layer/box_predictor_5/class_predictor'); + var box_predictor_0 = { + box_encoding_predictor: box_encoding_0_predictor, + class_predictor: class_predictor_0 + }; + var box_predictor_1 = { + box_encoding_predictor: box_encoding_1_predictor, + class_predictor: class_predictor_1 + }; + var box_predictor_2 = { + box_encoding_predictor: box_encoding_2_predictor, + class_predictor: class_predictor_2 + }; + var box_predictor_3 = { + box_encoding_predictor: box_encoding_3_predictor, + class_predictor: class_predictor_3 + }; + var box_predictor_4 = { + box_encoding_predictor: box_encoding_4_predictor, + class_predictor: class_predictor_4 + }; + var box_predictor_5 = { + box_encoding_predictor: box_encoding_5_predictor, + class_predictor: class_predictor_5 + }; + return { + conv_0: conv_0, + conv_1: conv_1, + conv_2: conv_2, + conv_3: conv_3, + conv_4: conv_4, + conv_5: conv_5, + conv_6: conv_6, + conv_7: conv_7, + box_predictor_0: box_predictor_0, + box_predictor_1: box_predictor_1, + box_predictor_2: box_predictor_2, + box_predictor_3: box_predictor_3, + box_predictor_4: box_predictor_4, + box_predictor_5: box_predictor_5 + }; + } + return { + extractMobilenetV1Params: extractMobilenetV1Params, + extractPredictionLayerParams: extractPredictionLayerParams + }; + } + function extractParams$6(weights) { + var paramMappings = []; + var _a = extractWeightsFactory(weights), extractWeights = _a.extractWeights, getRemainingWeights = _a.getRemainingWeights; + var _b = extractorsFactory$6(extractWeights, paramMappings), extractMobilenetV1Params = _b.extractMobilenetV1Params, extractPredictionLayerParams = _b.extractPredictionLayerParams; + var mobilenetv1 = extractMobilenetV1Params(); + var prediction_layer = extractPredictionLayerParams(); + var extra_dim = yn(extractWeights(5118 * 4), [1, 5118, 4]); + var output_layer = { + extra_dim: extra_dim + }; + paramMappings.push({ paramPath: 'output_layer/extra_dim' }); + if (getRemainingWeights().length !== 0) { + throw new Error("weights remaing after extract: " + getRemainingWeights().length); + } + return { + params: { + mobilenetv1: mobilenetv1, + prediction_layer: prediction_layer, + output_layer: output_layer + }, + paramMappings: paramMappings + }; + } + + function extractorsFactory$7(weightMap, paramMappings) { + var extractWeightEntry = extractWeightEntryFactory(weightMap, paramMappings); + function extractPointwiseConvParams(prefix, idx, mappedPrefix) { + var filters = extractWeightEntry(prefix + "/Conv2d_" + idx + "_pointwise/weights", 4, mappedPrefix + "/filters"); + var batch_norm_offset = extractWeightEntry(prefix + "/Conv2d_" + idx + "_pointwise/convolution_bn_offset", 1, mappedPrefix + "/batch_norm_offset"); + return { filters: filters, batch_norm_offset: batch_norm_offset }; + } + function extractConvPairParams(idx) { + var mappedPrefix = "mobilenetv1/conv_" + idx; + var prefixDepthwiseConv = "MobilenetV1/Conv2d_" + idx + "_depthwise"; + var mappedPrefixDepthwiseConv = mappedPrefix + "/depthwise_conv"; + var mappedPrefixPointwiseConv = mappedPrefix + "/pointwise_conv"; + var filters = extractWeightEntry(prefixDepthwiseConv + "/depthwise_weights", 4, mappedPrefixDepthwiseConv + "/filters"); + var batch_norm_scale = extractWeightEntry(prefixDepthwiseConv + "/BatchNorm/gamma", 1, mappedPrefixDepthwiseConv + "/batch_norm_scale"); + var batch_norm_offset = extractWeightEntry(prefixDepthwiseConv + "/BatchNorm/beta", 1, mappedPrefixDepthwiseConv + "/batch_norm_offset"); + var batch_norm_mean = extractWeightEntry(prefixDepthwiseConv + "/BatchNorm/moving_mean", 1, mappedPrefixDepthwiseConv + "/batch_norm_mean"); + var batch_norm_variance = extractWeightEntry(prefixDepthwiseConv + "/BatchNorm/moving_variance", 1, mappedPrefixDepthwiseConv + "/batch_norm_variance"); + return { + depthwise_conv: { + filters: filters, + batch_norm_scale: batch_norm_scale, + batch_norm_offset: batch_norm_offset, + batch_norm_mean: batch_norm_mean, + batch_norm_variance: batch_norm_variance + }, + pointwise_conv: extractPointwiseConvParams('MobilenetV1', idx, mappedPrefixPointwiseConv) + }; + } + function extractMobilenetV1Params() { + return { + conv_0: extractPointwiseConvParams('MobilenetV1', 0, 'mobilenetv1/conv_0'), + conv_1: extractConvPairParams(1), + conv_2: extractConvPairParams(2), + conv_3: extractConvPairParams(3), + conv_4: extractConvPairParams(4), + conv_5: extractConvPairParams(5), + conv_6: extractConvPairParams(6), + conv_7: extractConvPairParams(7), + conv_8: extractConvPairParams(8), + conv_9: extractConvPairParams(9), + conv_10: extractConvPairParams(10), + conv_11: extractConvPairParams(11), + conv_12: extractConvPairParams(12), + conv_13: extractConvPairParams(13) + }; + } + function extractConvParams(prefix, mappedPrefix) { + var filters = extractWeightEntry(prefix + "/weights", 4, mappedPrefix + "/filters"); + var bias = extractWeightEntry(prefix + "/biases", 1, mappedPrefix + "/bias"); + return { filters: filters, bias: bias }; + } + function extractBoxPredictorParams(idx) { + var box_encoding_predictor = extractConvParams("Prediction/BoxPredictor_" + idx + "/BoxEncodingPredictor", "prediction_layer/box_predictor_" + idx + "/box_encoding_predictor"); + var class_predictor = extractConvParams("Prediction/BoxPredictor_" + idx + "/ClassPredictor", "prediction_layer/box_predictor_" + idx + "/class_predictor"); + return { box_encoding_predictor: box_encoding_predictor, class_predictor: class_predictor }; + } + function extractPredictionLayerParams() { + return { + conv_0: extractPointwiseConvParams('Prediction', 0, 'prediction_layer/conv_0'), + conv_1: extractPointwiseConvParams('Prediction', 1, 'prediction_layer/conv_1'), + conv_2: extractPointwiseConvParams('Prediction', 2, 'prediction_layer/conv_2'), + conv_3: extractPointwiseConvParams('Prediction', 3, 'prediction_layer/conv_3'), + conv_4: extractPointwiseConvParams('Prediction', 4, 'prediction_layer/conv_4'), + conv_5: extractPointwiseConvParams('Prediction', 5, 'prediction_layer/conv_5'), + conv_6: extractPointwiseConvParams('Prediction', 6, 'prediction_layer/conv_6'), + conv_7: extractPointwiseConvParams('Prediction', 7, 'prediction_layer/conv_7'), + box_predictor_0: extractBoxPredictorParams(0), + box_predictor_1: extractBoxPredictorParams(1), + box_predictor_2: extractBoxPredictorParams(2), + box_predictor_3: extractBoxPredictorParams(3), + box_predictor_4: extractBoxPredictorParams(4), + box_predictor_5: extractBoxPredictorParams(5) + }; + } + return { + extractMobilenetV1Params: extractMobilenetV1Params, + extractPredictionLayerParams: extractPredictionLayerParams + }; + } + function extractParamsFromWeigthMap$6(weightMap) { + var paramMappings = []; + var _a = extractorsFactory$7(weightMap, paramMappings), extractMobilenetV1Params = _a.extractMobilenetV1Params, extractPredictionLayerParams = _a.extractPredictionLayerParams; + var extra_dim = weightMap['Output/extra_dim']; + paramMappings.push({ originalPath: 'Output/extra_dim', paramPath: 'output_layer/extra_dim' }); + if (!isTensor3D(extra_dim)) { + throw new Error("expected weightMap['Output/extra_dim'] to be a Tensor3D, instead have " + extra_dim); + } + var params = { + mobilenetv1: extractMobilenetV1Params(), + prediction_layer: extractPredictionLayerParams(), + output_layer: { + extra_dim: extra_dim + } + }; + disposeUnusedWeightTensors(weightMap, paramMappings); + return { params: params, paramMappings: paramMappings }; + } + + function pointwiseConvLayer(x, params, strides) { + return Fe(function () { + var out = nu(x, params.filters, strides, 'same'); + out = Yu(out, params.batch_norm_offset); + return hs(out, 0, 6); + }); + } + + var epsilon = 0.0010000000474974513; + function depthwiseConvLayer(x, params, strides) { + return Fe(function () { + var out = au(x, params.filters, strides, 'same'); + out = Ks(out, params.batch_norm_mean, params.batch_norm_variance, params.batch_norm_offset, params.batch_norm_scale, epsilon); + return hs(out, 0, 6); + }); + } + function getStridesForLayerIdx(layerIdx) { + return [2, 4, 6, 12].some(function (idx) { return idx === layerIdx; }) ? [2, 2] : [1, 1]; + } + function mobileNetV1(x, params) { + return Fe(function () { + var conv11 = null; + var out = pointwiseConvLayer(x, params.conv_0, [2, 2]); + var convPairParams = [ + params.conv_1, + params.conv_2, + params.conv_3, + params.conv_4, + params.conv_5, + params.conv_6, + params.conv_7, + params.conv_8, + params.conv_9, + params.conv_10, + params.conv_11, + params.conv_12, + params.conv_13 + ]; + convPairParams.forEach(function (param, i) { + var layerIdx = i + 1; + var depthwiseConvStrides = getStridesForLayerIdx(layerIdx); + out = depthwiseConvLayer(out, param.depthwise_conv, depthwiseConvStrides); + out = pointwiseConvLayer(out, param.pointwise_conv, [1, 1]); + if (layerIdx === 11) { + conv11 = out; + } + }); + if (conv11 === null) { + throw new Error('mobileNetV1 - output of conv layer 11 is null'); + } + return { + out: out, + conv11: conv11 + }; + }); + } + + function nonMaxSuppression$1(boxes, scores, maxOutputSize, iouThreshold, scoreThreshold) { + var numBoxes = boxes.shape[0]; + var outputSize = Math.min(maxOutputSize, numBoxes); + var candidates = scores + .map(function (score, boxIndex) { return ({ score: score, boxIndex: boxIndex }); }) + .filter(function (c) { return c.score > scoreThreshold; }) + .sort(function (c1, c2) { return c2.score - c1.score; }); + var suppressFunc = function (x) { return x <= iouThreshold ? 1 : 0; }; + var selected = []; + candidates.forEach(function (c) { + if (selected.length >= outputSize) { + return; + } + var originalScore = c.score; + for (var j = selected.length - 1; j >= 0; --j) { + var iou = IOU(boxes, c.boxIndex, selected[j]); + if (iou === 0.0) { + continue; + } + c.score *= suppressFunc(iou); + if (c.score <= scoreThreshold) { + break; + } + } + if (originalScore === c.score) { + selected.push(c.boxIndex); + } + }); + return selected; + } + function IOU(boxes, i, j) { + var boxesData = boxes.arraySync(); + var yminI = Math.min(boxesData[i][0], boxesData[i][2]); + var xminI = Math.min(boxesData[i][1], boxesData[i][3]); + var ymaxI = Math.max(boxesData[i][0], boxesData[i][2]); + var xmaxI = Math.max(boxesData[i][1], boxesData[i][3]); + var yminJ = Math.min(boxesData[j][0], boxesData[j][2]); + var xminJ = Math.min(boxesData[j][1], boxesData[j][3]); + var ymaxJ = Math.max(boxesData[j][0], boxesData[j][2]); + var xmaxJ = Math.max(boxesData[j][1], boxesData[j][3]); + var areaI = (ymaxI - yminI) * (xmaxI - xminI); + var areaJ = (ymaxJ - yminJ) * (xmaxJ - xminJ); + if (areaI <= 0 || areaJ <= 0) { + return 0.0; + } + var intersectionYmin = Math.max(yminI, yminJ); + var intersectionXmin = Math.max(xminI, xminJ); + var intersectionYmax = Math.min(ymaxI, ymaxJ); + var intersectionXmax = Math.min(xmaxI, xmaxJ); + var intersectionArea = Math.max(intersectionYmax - intersectionYmin, 0.0) * + Math.max(intersectionXmax - intersectionXmin, 0.0); + return intersectionArea / (areaI + areaJ - intersectionArea); + } + + function getCenterCoordinatesAndSizesLayer(x) { + var vec = gr(kl(x, [1, 0])); + var sizes = [ + vl(vec[2], vec[0]), + vl(vec[3], vec[1]) + ]; + var centers = [ + Yu(vec[0], tl(sizes[0], vn(2))), + Yu(vec[1], tl(sizes[1], vn(2))) + ]; + return { + sizes: sizes, + centers: centers + }; + } + function decodeBoxesLayer(x0, x1) { + var _a = getCenterCoordinatesAndSizesLayer(x0), sizes = _a.sizes, centers = _a.centers; + var vec = gr(kl(x1, [1, 0])); + var div0_out = tl(ll(vs(tl(vec[2], vn(5))), sizes[0]), vn(2)); + var add0_out = Yu(ll(tl(vec[0], vn(10)), sizes[0]), centers[0]); + var div1_out = tl(ll(vs(tl(vec[3], vn(5))), sizes[1]), vn(2)); + var add1_out = Yu(ll(tl(vec[1], vn(10)), sizes[1]), centers[1]); + return kl(dr([ + vl(add0_out, div0_out), + vl(add1_out, div1_out), + Yu(add0_out, div0_out), + Yu(add1_out, div1_out) + ]), [1, 0]); + } + function outputLayer(boxPredictions, classPredictions, params) { + return Fe(function () { + var batchSize = boxPredictions.shape[0]; + var boxes = decodeBoxesLayer(hr(vr(params.extra_dim, [batchSize, 1, 1]), [-1, 4]), hr(boxPredictions, [-1, 4])); + boxes = hr(boxes, [batchSize, (boxes.shape[0] / batchSize), 4]); + var scoresAndClasses = Is(wu(classPredictions, [0, 0, 1], [-1, -1, -1])); + var scores = wu(scoresAndClasses, [0, 0, 0], [-1, -1, 1]); + scores = hr(scores, [batchSize, scores.shape[1]]); + var boxesByBatch = gr(boxes); + var scoresByBatch = gr(scores); + return { + boxes: boxesByBatch, + scores: scoresByBatch + }; + }); + } + + function boxPredictionLayer(x, params) { + return Fe(function () { + var batchSize = x.shape[0]; + var boxPredictionEncoding = hr(convLayer(x, params.box_encoding_predictor), [batchSize, -1, 1, 4]); + var classPrediction = hr(convLayer(x, params.class_predictor), [batchSize, -1, 3]); + return { + boxPredictionEncoding: boxPredictionEncoding, + classPrediction: classPrediction + }; + }); + } + + function predictionLayer(x, conv11, params) { + return Fe(function () { + var conv0 = pointwiseConvLayer(x, params.conv_0, [1, 1]); + var conv1 = pointwiseConvLayer(conv0, params.conv_1, [2, 2]); + var conv2 = pointwiseConvLayer(conv1, params.conv_2, [1, 1]); + var conv3 = pointwiseConvLayer(conv2, params.conv_3, [2, 2]); + var conv4 = pointwiseConvLayer(conv3, params.conv_4, [1, 1]); + var conv5 = pointwiseConvLayer(conv4, params.conv_5, [2, 2]); + var conv6 = pointwiseConvLayer(conv5, params.conv_6, [1, 1]); + var conv7 = pointwiseConvLayer(conv6, params.conv_7, [2, 2]); + var boxPrediction0 = boxPredictionLayer(conv11, params.box_predictor_0); + var boxPrediction1 = boxPredictionLayer(x, params.box_predictor_1); + var boxPrediction2 = boxPredictionLayer(conv1, params.box_predictor_2); + var boxPrediction3 = boxPredictionLayer(conv3, params.box_predictor_3); + var boxPrediction4 = boxPredictionLayer(conv5, params.box_predictor_4); + var boxPrediction5 = boxPredictionLayer(conv7, params.box_predictor_5); + var boxPredictions = An([ + boxPrediction0.boxPredictionEncoding, + boxPrediction1.boxPredictionEncoding, + boxPrediction2.boxPredictionEncoding, + boxPrediction3.boxPredictionEncoding, + boxPrediction4.boxPredictionEncoding, + boxPrediction5.boxPredictionEncoding + ], 1); + var classPredictions = An([ + boxPrediction0.classPrediction, + boxPrediction1.classPrediction, + boxPrediction2.classPrediction, + boxPrediction3.classPrediction, + boxPrediction4.classPrediction, + boxPrediction5.classPrediction + ], 1); + return { + boxPredictions: boxPredictions, + classPredictions: classPredictions + }; + }); + } + + var SsdMobilenetv1Options = /** @class */ (function () { + function SsdMobilenetv1Options(_a) { + var _b = _a === void 0 ? {} : _a, minConfidence = _b.minConfidence, maxResults = _b.maxResults; + this._name = 'SsdMobilenetv1Options'; + this._minConfidence = minConfidence || 0.5; + this._maxResults = maxResults || 100; + if (typeof this._minConfidence !== 'number' || this._minConfidence <= 0 || this._minConfidence >= 1) { + throw new Error(this._name + " - expected minConfidence to be a number between 0 and 1"); + } + if (typeof this._maxResults !== 'number') { + throw new Error(this._name + " - expected maxResults to be a number"); + } + } + Object.defineProperty(SsdMobilenetv1Options.prototype, "minConfidence", { + get: function () { return this._minConfidence; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(SsdMobilenetv1Options.prototype, "maxResults", { + get: function () { return this._maxResults; }, + enumerable: true, + configurable: true + }); + return SsdMobilenetv1Options; + }()); + + var SsdMobilenetv1 = /** @class */ (function (_super) { + __extends(SsdMobilenetv1, _super); + function SsdMobilenetv1() { + return _super.call(this, 'SsdMobilenetv1') || this; + } + SsdMobilenetv1.prototype.forwardInput = function (input) { + var params = this.params; + if (!params) { + throw new Error('SsdMobilenetv1 - load model before inference'); + } + return Fe(function () { + var batchTensor = input.toBatchTensor(512, false).toFloat(); + var x = vl(ll(batchTensor, vn(0.007843137718737125)), vn(1)); + var features = mobileNetV1(x, params.mobilenetv1); + var _a = predictionLayer(features.out, features.conv11, params.prediction_layer), boxPredictions = _a.boxPredictions, classPredictions = _a.classPredictions; + return outputLayer(boxPredictions, classPredictions, params.output_layer); + }); + }; + SsdMobilenetv1.prototype.forward = function (input) { + return __awaiter(this, void 0, void 0, function () { + var _a; + return __generator(this, function (_b) { + switch (_b.label) { + case 0: + _a = this.forwardInput; + return [4 /*yield*/, toNetInput(input)]; + case 1: return [2 /*return*/, _a.apply(this, [_b.sent()])]; + } + }); + }); + }; + SsdMobilenetv1.prototype.locateFaces = function (input, options) { + if (options === void 0) { options = {}; } + return __awaiter(this, void 0, void 0, function () { + var _a, maxResults, minConfidence, netInput, _b, _boxes, _scores, boxes, scores, i, scoresData, _c, _d, iouThreshold, indices, reshapedDims, inputSize, padX, padY, boxesData, results; + return __generator(this, function (_e) { + switch (_e.label) { + case 0: + _a = new SsdMobilenetv1Options(options), maxResults = _a.maxResults, minConfidence = _a.minConfidence; + return [4 /*yield*/, toNetInput(input)]; + case 1: + netInput = _e.sent(); + _b = this.forwardInput(netInput), _boxes = _b.boxes, _scores = _b.scores; + boxes = _boxes[0]; + scores = _scores[0]; + for (i = 1; i < _boxes.length; i++) { + _boxes[i].dispose(); + _scores[i].dispose(); + } + _d = (_c = Array).from; + return [4 /*yield*/, scores.data()]; + case 2: + scoresData = _d.apply(_c, [_e.sent()]); + iouThreshold = 0.5; + indices = nonMaxSuppression$1(boxes, scoresData, maxResults, iouThreshold, minConfidence); + reshapedDims = netInput.getReshapedInputDimensions(0); + inputSize = netInput.inputSize; + padX = inputSize / reshapedDims.width; + padY = inputSize / reshapedDims.height; + boxesData = boxes.arraySync(); + results = indices + .map(function (idx) { + var _a = [ + Math.max(0, boxesData[idx][0]), + Math.min(1.0, boxesData[idx][2]) + ].map(function (val) { return val * padY; }), top = _a[0], bottom = _a[1]; + var _b = [ + Math.max(0, boxesData[idx][1]), + Math.min(1.0, boxesData[idx][3]) + ].map(function (val) { return val * padX; }), left = _b[0], right = _b[1]; + return new FaceDetection(scoresData[idx], new Rect(left, top, right - left, bottom - top), { + height: netInput.getInputHeight(0), + width: netInput.getInputWidth(0) + }); + }); + boxes.dispose(); + scores.dispose(); + return [2 /*return*/, results]; + } + }); + }); + }; + SsdMobilenetv1.prototype.getDefaultModelName = function () { + return 'ssd_mobilenetv1_model'; + }; + SsdMobilenetv1.prototype.extractParamsFromWeigthMap = function (weightMap) { + return extractParamsFromWeigthMap$6(weightMap); + }; + SsdMobilenetv1.prototype.extractParams = function (weights) { + return extractParams$6(weights); + }; + return SsdMobilenetv1; + }(NeuralNetwork)); + + function createSsdMobilenetv1(weights) { + var net = new SsdMobilenetv1(); + net.extractWeights(weights); + return net; + } + function createFaceDetectionNet(weights) { + return createSsdMobilenetv1(weights); + } + // alias for backward compatibily + var FaceDetectionNet = /** @class */ (function (_super) { + __extends(FaceDetectionNet, _super); + function FaceDetectionNet() { + return _super !== null && _super.apply(this, arguments) || this; + } + return FaceDetectionNet; + }(SsdMobilenetv1)); + + var TinyFaceDetectorOptions = /** @class */ (function (_super) { + __extends(TinyFaceDetectorOptions, _super); + function TinyFaceDetectorOptions() { + var _this = _super !== null && _super.apply(this, arguments) || this; + _this._name = 'TinyFaceDetectorOptions'; + return _this; + } + return TinyFaceDetectorOptions; + }(TinyYolov2Options)); + + var ComposableTask = /** @class */ (function () { + function ComposableTask() { + } + ComposableTask.prototype.then = function (onfulfilled) { + return __awaiter(this, void 0, void 0, function () { + var _a; + return __generator(this, function (_b) { + switch (_b.label) { + case 0: + _a = onfulfilled; + return [4 /*yield*/, this.run()]; + case 1: return [2 /*return*/, _a.apply(void 0, [_b.sent()])]; + } + }); + }); + }; + ComposableTask.prototype.run = function () { + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + throw new Error('ComposableTask - run is not implemented'); + }); + }); + }; + return ComposableTask; + }()); + + function extractAllFacesAndComputeResults(parentResults, input, computeResults, extractedFaces, getRectForAlignment) { + if (getRectForAlignment === void 0) { getRectForAlignment = function (_a) { + var alignedRect = _a.alignedRect; + return alignedRect; + }; } + return __awaiter(this, void 0, void 0, function () { + var faceBoxes, faces, _a, _b, results; + return __generator(this, function (_c) { + switch (_c.label) { + case 0: + faceBoxes = parentResults.map(function (parentResult) { + return isWithFaceLandmarks(parentResult) + ? getRectForAlignment(parentResult) + : parentResult.detection; + }); + _a = extractedFaces; + if (_a) return [3 /*break*/, 5]; + if (!(input instanceof ht)) return [3 /*break*/, 2]; + return [4 /*yield*/, extractFaceTensors(input, faceBoxes)]; + case 1: + _b = _c.sent(); + return [3 /*break*/, 4]; + case 2: return [4 /*yield*/, extractFaces(input, faceBoxes)]; + case 3: + _b = _c.sent(); + _c.label = 4; + case 4: + _a = (_b); + _c.label = 5; + case 5: + faces = _a; + return [4 /*yield*/, computeResults(faces)]; + case 6: + results = _c.sent(); + faces.forEach(function (f) { return f instanceof ht && f.dispose(); }); + return [2 /*return*/, results]; + } + }); + }); + } + function extractSingleFaceAndComputeResult(parentResult, input, computeResult, extractedFaces, getRectForAlignment) { + return __awaiter(this, void 0, void 0, function () { + var _this = this; + return __generator(this, function (_a) { + return [2 /*return*/, extractAllFacesAndComputeResults([parentResult], input, function (faces) { return __awaiter(_this, void 0, void 0, function () { return __generator(this, function (_a) { + return [2 /*return*/, computeResult(faces[0])]; + }); }); }, extractedFaces, getRectForAlignment)]; + }); + }); + } + + function bgrToRgbTensor(tensor) { + return Fe(function () { return dr(gr(tensor, 3).reverse(), 3); }); + } + + var CELL_STRIDE = 2; + var CELL_SIZE = 12; + + function extractorsFactory$8(extractWeights, paramMappings) { + var extractConvParams = extractConvParamsFactory(extractWeights, paramMappings); + var extractFCParams = extractFCParamsFactory(extractWeights, paramMappings); + function extractPReluParams(size, paramPath) { + var alpha = mn(extractWeights(size)); + paramMappings.push({ paramPath: paramPath }); + return alpha; + } + function extractSharedParams(numFilters, mappedPrefix, isRnet) { + if (isRnet === void 0) { isRnet = false; } + var conv1 = extractConvParams(numFilters[0], numFilters[1], 3, mappedPrefix + "/conv1"); + var prelu1_alpha = extractPReluParams(numFilters[1], mappedPrefix + "/prelu1_alpha"); + var conv2 = extractConvParams(numFilters[1], numFilters[2], 3, mappedPrefix + "/conv2"); + var prelu2_alpha = extractPReluParams(numFilters[2], mappedPrefix + "/prelu2_alpha"); + var conv3 = extractConvParams(numFilters[2], numFilters[3], isRnet ? 2 : 3, mappedPrefix + "/conv3"); + var prelu3_alpha = extractPReluParams(numFilters[3], mappedPrefix + "/prelu3_alpha"); + return { conv1: conv1, prelu1_alpha: prelu1_alpha, conv2: conv2, prelu2_alpha: prelu2_alpha, conv3: conv3, prelu3_alpha: prelu3_alpha }; + } + function extractPNetParams() { + var sharedParams = extractSharedParams([3, 10, 16, 32], 'pnet'); + var conv4_1 = extractConvParams(32, 2, 1, 'pnet/conv4_1'); + var conv4_2 = extractConvParams(32, 4, 1, 'pnet/conv4_2'); + return __assign({}, sharedParams, { conv4_1: conv4_1, conv4_2: conv4_2 }); + } + function extractRNetParams() { + var sharedParams = extractSharedParams([3, 28, 48, 64], 'rnet', true); + var fc1 = extractFCParams(576, 128, 'rnet/fc1'); + var prelu4_alpha = extractPReluParams(128, 'rnet/prelu4_alpha'); + var fc2_1 = extractFCParams(128, 2, 'rnet/fc2_1'); + var fc2_2 = extractFCParams(128, 4, 'rnet/fc2_2'); + return __assign({}, sharedParams, { fc1: fc1, prelu4_alpha: prelu4_alpha, fc2_1: fc2_1, fc2_2: fc2_2 }); + } + function extractONetParams() { + var sharedParams = extractSharedParams([3, 32, 64, 64], 'onet'); + var conv4 = extractConvParams(64, 128, 2, 'onet/conv4'); + var prelu4_alpha = extractPReluParams(128, 'onet/prelu4_alpha'); + var fc1 = extractFCParams(1152, 256, 'onet/fc1'); + var prelu5_alpha = extractPReluParams(256, 'onet/prelu5_alpha'); + var fc2_1 = extractFCParams(256, 2, 'onet/fc2_1'); + var fc2_2 = extractFCParams(256, 4, 'onet/fc2_2'); + var fc2_3 = extractFCParams(256, 10, 'onet/fc2_3'); + return __assign({}, sharedParams, { conv4: conv4, prelu4_alpha: prelu4_alpha, fc1: fc1, prelu5_alpha: prelu5_alpha, fc2_1: fc2_1, fc2_2: fc2_2, fc2_3: fc2_3 }); + } + return { + extractPNetParams: extractPNetParams, + extractRNetParams: extractRNetParams, + extractONetParams: extractONetParams + }; + } + function extractParams$7(weights) { + var _a = extractWeightsFactory(weights), extractWeights = _a.extractWeights, getRemainingWeights = _a.getRemainingWeights; + var paramMappings = []; + var _b = extractorsFactory$8(extractWeights, paramMappings), extractPNetParams = _b.extractPNetParams, extractRNetParams = _b.extractRNetParams, extractONetParams = _b.extractONetParams; + var pnet = extractPNetParams(); + var rnet = extractRNetParams(); + var onet = extractONetParams(); + if (getRemainingWeights().length !== 0) { + throw new Error("weights remaing after extract: " + getRemainingWeights().length); + } + return { params: { pnet: pnet, rnet: rnet, onet: onet }, paramMappings: paramMappings }; + } + + function extractorsFactory$9(weightMap, paramMappings) { + var extractWeightEntry = extractWeightEntryFactory(weightMap, paramMappings); + function extractConvParams(prefix) { + var filters = extractWeightEntry(prefix + "/weights", 4, prefix + "/filters"); + var bias = extractWeightEntry(prefix + "/bias", 1); + return { filters: filters, bias: bias }; + } + function extractFCParams(prefix) { + var weights = extractWeightEntry(prefix + "/weights", 2); + var bias = extractWeightEntry(prefix + "/bias", 1); + return { weights: weights, bias: bias }; + } + function extractPReluParams(paramPath) { + return extractWeightEntry(paramPath, 1); + } + function extractSharedParams(prefix) { + var conv1 = extractConvParams(prefix + "/conv1"); + var prelu1_alpha = extractPReluParams(prefix + "/prelu1_alpha"); + var conv2 = extractConvParams(prefix + "/conv2"); + var prelu2_alpha = extractPReluParams(prefix + "/prelu2_alpha"); + var conv3 = extractConvParams(prefix + "/conv3"); + var prelu3_alpha = extractPReluParams(prefix + "/prelu3_alpha"); + return { conv1: conv1, prelu1_alpha: prelu1_alpha, conv2: conv2, prelu2_alpha: prelu2_alpha, conv3: conv3, prelu3_alpha: prelu3_alpha }; + } + function extractPNetParams() { + var sharedParams = extractSharedParams('pnet'); + var conv4_1 = extractConvParams('pnet/conv4_1'); + var conv4_2 = extractConvParams('pnet/conv4_2'); + return __assign({}, sharedParams, { conv4_1: conv4_1, conv4_2: conv4_2 }); + } + function extractRNetParams() { + var sharedParams = extractSharedParams('rnet'); + var fc1 = extractFCParams('rnet/fc1'); + var prelu4_alpha = extractPReluParams('rnet/prelu4_alpha'); + var fc2_1 = extractFCParams('rnet/fc2_1'); + var fc2_2 = extractFCParams('rnet/fc2_2'); + return __assign({}, sharedParams, { fc1: fc1, prelu4_alpha: prelu4_alpha, fc2_1: fc2_1, fc2_2: fc2_2 }); + } + function extractONetParams() { + var sharedParams = extractSharedParams('onet'); + var conv4 = extractConvParams('onet/conv4'); + var prelu4_alpha = extractPReluParams('onet/prelu4_alpha'); + var fc1 = extractFCParams('onet/fc1'); + var prelu5_alpha = extractPReluParams('onet/prelu5_alpha'); + var fc2_1 = extractFCParams('onet/fc2_1'); + var fc2_2 = extractFCParams('onet/fc2_2'); + var fc2_3 = extractFCParams('onet/fc2_3'); + return __assign({}, sharedParams, { conv4: conv4, prelu4_alpha: prelu4_alpha, fc1: fc1, prelu5_alpha: prelu5_alpha, fc2_1: fc2_1, fc2_2: fc2_2, fc2_3: fc2_3 }); + } + return { + extractPNetParams: extractPNetParams, + extractRNetParams: extractRNetParams, + extractONetParams: extractONetParams + }; + } + function extractParamsFromWeigthMap$7(weightMap) { + var paramMappings = []; + var _a = extractorsFactory$9(weightMap, paramMappings), extractPNetParams = _a.extractPNetParams, extractRNetParams = _a.extractRNetParams, extractONetParams = _a.extractONetParams; + var pnet = extractPNetParams(); + var rnet = extractRNetParams(); + var onet = extractONetParams(); + disposeUnusedWeightTensors(weightMap, paramMappings); + return { params: { pnet: pnet, rnet: rnet, onet: onet }, paramMappings: paramMappings }; + } + + function getSizesForScale(scale, _a) { + var height = _a[0], width = _a[1]; + return { + height: Math.floor(height * scale), + width: Math.floor(width * scale) + }; + } + + function pyramidDown(minFaceSize, scaleFactor, dims) { + var height = dims[0], width = dims[1]; + var m = CELL_SIZE / minFaceSize; + var scales = []; + var minLayer = Math.min(height, width) * m; + var exp = 0; + while (minLayer >= 12) { + scales.push(m * Math.pow(scaleFactor, exp)); + minLayer = minLayer * scaleFactor; + exp += 1; + } + return scales; + } + + var MtcnnBox = /** @class */ (function (_super) { + __extends(MtcnnBox, _super); + function MtcnnBox(left, top, right, bottom) { + return _super.call(this, { left: left, top: top, right: right, bottom: bottom }, true) || this; + } + return MtcnnBox; + }(Box)); + + function normalize$1(x) { + return Fe(function () { return ll(vl(x, vn(127.5)), vn(0.0078125)); }); + } + + function prelu(x, alpha) { + return Fe(function () { + return Yu(Sl(x), ll(alpha, ws(Sl(ws(x))))); + }); + } + + function sharedLayer(x, params, isPnet) { + if (isPnet === void 0) { isPnet = false; } + return Fe(function () { + var out = convLayer(x, params.conv1, 'valid'); + out = prelu(out, params.prelu1_alpha); + out = yu(out, isPnet ? [2, 2] : [3, 3], [2, 2], 'same'); + out = convLayer(out, params.conv2, 'valid'); + out = prelu(out, params.prelu2_alpha); + out = isPnet ? out : yu(out, [3, 3], [2, 2], 'valid'); + out = convLayer(out, params.conv3, 'valid'); + out = prelu(out, params.prelu3_alpha); + return out; + }); + } + + function PNet(x, params) { + return Fe(function () { + var out = sharedLayer(x, params, true); + var conv = convLayer(out, params.conv4_1, 'valid'); + var max = Zn(_u(conv, 3), 3); + var prob = zr(vl(conv, max), 3); + var regions = convLayer(out, params.conv4_2, 'valid'); + return { prob: prob, regions: regions }; + }); + } + + function rescaleAndNormalize(x, scale) { + return Fe(function () { + var _a = getSizesForScale(scale, x.shape.slice(1)), height = _a.height, width = _a.width; + var resized = wc.resizeBilinear(x, [height, width]); + var normalized = normalize$1(resized); + return kl(normalized, [0, 2, 1, 3]); + }); + } + function extractBoundingBoxes(scoresTensor, regionsTensor, scale, scoreThreshold) { + // TODO: fix this!, maybe better to use tf.gather here + var indices = []; + var scoresData = scoresTensor.arraySync(); + for (var y = 0; y < scoresTensor.shape[0]; y++) { + for (var x = 0; x < scoresTensor.shape[1]; x++) { + if (scoresData[y][x] >= scoreThreshold) { + indices.push(new Point(x, y)); + } + } + } + var boundingBoxes = indices.map(function (idx) { + var cell = new BoundingBox(Math.round((idx.y * CELL_STRIDE + 1) / scale), Math.round((idx.x * CELL_STRIDE + 1) / scale), Math.round((idx.y * CELL_STRIDE + CELL_SIZE) / scale), Math.round((idx.x * CELL_STRIDE + CELL_SIZE) / scale)); + var score = scoresData[idx.y][idx.x]; + var regionsData = regionsTensor.arraySync(); + var region = new MtcnnBox(regionsData[idx.y][idx.x][0], regionsData[idx.y][idx.x][1], regionsData[idx.y][idx.x][2], regionsData[idx.y][idx.x][3]); + return { + cell: cell, + score: score, + region: region + }; + }); + return boundingBoxes; + } + function stage1(imgTensor, scales, scoreThreshold, params, stats) { + stats.stage1 = []; + var pnetOutputs = scales.map(function (scale) { return Fe(function () { + var statsForScale = { scale: scale }; + var resized = rescaleAndNormalize(imgTensor, scale); + var ts = Date.now(); + var _a = PNet(resized, params), prob = _a.prob, regions = _a.regions; + statsForScale.pnet = Date.now() - ts; + var scoresTensor = gr(gr(prob, 3)[1])[0]; + var regionsTensor = gr(regions)[0]; + return { + scoresTensor: scoresTensor, + regionsTensor: regionsTensor, + scale: scale, + statsForScale: statsForScale + }; + }); }); + var boxesForScale = pnetOutputs.map(function (_a) { + var scoresTensor = _a.scoresTensor, regionsTensor = _a.regionsTensor, scale = _a.scale, statsForScale = _a.statsForScale; + var boundingBoxes = extractBoundingBoxes(scoresTensor, regionsTensor, scale, scoreThreshold); + scoresTensor.dispose(); + regionsTensor.dispose(); + if (!boundingBoxes.length) { + stats.stage1.push(statsForScale); + return []; + } + var ts = Date.now(); + var indices = nonMaxSuppression(boundingBoxes.map(function (bbox) { return bbox.cell; }), boundingBoxes.map(function (bbox) { return bbox.score; }), 0.5); + statsForScale.nms = Date.now() - ts; + statsForScale.numBoxes = indices.length; + stats.stage1.push(statsForScale); + return indices.map(function (boxIdx) { return boundingBoxes[boxIdx]; }); + }); + var allBoxes = boxesForScale.reduce(function (all, boxes) { return all.concat(boxes); }, []); + var finalBoxes = []; + var finalScores = []; + if (allBoxes.length > 0) { + var ts = Date.now(); + var indices = nonMaxSuppression(allBoxes.map(function (bbox) { return bbox.cell; }), allBoxes.map(function (bbox) { return bbox.score; }), 0.7); + stats.stage1_nms = Date.now() - ts; + finalScores = indices.map(function (idx) { return allBoxes[idx].score; }); + finalBoxes = indices + .map(function (idx) { return allBoxes[idx]; }) + .map(function (_a) { + var cell = _a.cell, region = _a.region; + return new BoundingBox(cell.left + (region.left * cell.width), cell.top + (region.top * cell.height), cell.right + (region.right * cell.width), cell.bottom + (region.bottom * cell.height)).toSquare().round(); + }); + } + return { + boxes: finalBoxes, + scores: finalScores + }; + } + + function extractImagePatches(img, boxes, _a) { + var width = _a.width, height = _a.height; + return __awaiter(this, void 0, void 0, function () { + var imgCtx, bitmaps, imagePatchesDatas; + var _this = this; + return __generator(this, function (_b) { + switch (_b.label) { + case 0: + imgCtx = getContext2dOrThrow(img); + return [4 /*yield*/, Promise.all(boxes.map(function (box) { return __awaiter(_this, void 0, void 0, function () { + var _a, y, ey, x, ex, fromX, fromY, imgData; + return __generator(this, function (_b) { + _a = box.padAtBorders(img.height, img.width), y = _a.y, ey = _a.ey, x = _a.x, ex = _a.ex; + fromX = x - 1; + fromY = y - 1; + imgData = imgCtx.getImageData(fromX, fromY, (ex - fromX), (ey - fromY)); + return [2 /*return*/, env.isNodejs() ? createCanvasFromMedia(imgData) : createImageBitmap(imgData)]; + }); + }); }))]; + case 1: + bitmaps = _b.sent(); + imagePatchesDatas = []; + bitmaps.forEach(function (bmp) { + var patch = createCanvas({ width: width, height: height }); + var patchCtx = getContext2dOrThrow(patch); + patchCtx.drawImage(bmp, 0, 0, width, height); + var data = patchCtx.getImageData(0, 0, width, height).data; + var currData = []; + // RGBA -> BGR + for (var i = 0; i < data.length; i += 4) { + currData.push(data[i + 2]); + currData.push(data[i + 1]); + currData.push(data[i]); + } + imagePatchesDatas.push(currData); + }); + return [2 /*return*/, imagePatchesDatas.map(function (data) { + var t = Fe(function () { + var imagePatchTensor = kl(xn(data, [1, width, height, 3]), [0, 2, 1, 3]).toFloat(); + return normalize$1(imagePatchTensor); + }); + return t; + })]; + } + }); + }); + } + + function RNet(x, params) { + return Fe(function () { + var convOut = sharedLayer(x, params); + var vectorized = hr(convOut, [convOut.shape[0], params.fc1.weights.shape[0]]); + var fc1 = fullyConnectedLayer(vectorized, params.fc1); + var prelu4 = prelu(fc1, params.prelu4_alpha); + var fc2_1 = fullyConnectedLayer(prelu4, params.fc2_1); + var max = Zn(_u(fc2_1, 1), 1); + var prob = zr(vl(fc2_1, max), 1); + var regions = fullyConnectedLayer(prelu4, params.fc2_2); + var scores = gr(prob, 1)[1]; + return { scores: scores, regions: regions }; + }); + } + + function stage2(img, inputBoxes, scoreThreshold, params, stats) { + return __awaiter(this, void 0, void 0, function () { + var ts, rnetInputs, rnetOuts, scoresTensor, scores, _a, _b, indices, filteredBoxes, filteredScores, finalBoxes, finalScores, indicesNms, regions_1; + return __generator(this, function (_c) { + switch (_c.label) { + case 0: + ts = Date.now(); + return [4 /*yield*/, extractImagePatches(img, inputBoxes, { width: 24, height: 24 })]; + case 1: + rnetInputs = _c.sent(); + stats.stage2_extractImagePatches = Date.now() - ts; + ts = Date.now(); + rnetOuts = rnetInputs.map(function (rnetInput) { + var out = RNet(rnetInput, params); + rnetInput.dispose(); + return out; + }); + stats.stage2_rnet = Date.now() - ts; + scoresTensor = rnetOuts.length > 1 + ? An(rnetOuts.map(function (out) { return out.scores; })) + : rnetOuts[0].scores; + _b = (_a = Array).from; + return [4 /*yield*/, scoresTensor.data()]; + case 2: + scores = _b.apply(_a, [_c.sent()]); + scoresTensor.dispose(); + indices = scores + .map(function (score, idx) { return ({ score: score, idx: idx }); }) + .filter(function (c) { return c.score > scoreThreshold; }) + .map(function (_a) { + var idx = _a.idx; + return idx; + }); + filteredBoxes = indices.map(function (idx) { return inputBoxes[idx]; }); + filteredScores = indices.map(function (idx) { return scores[idx]; }); + finalBoxes = []; + finalScores = []; + if (filteredBoxes.length > 0) { + ts = Date.now(); + indicesNms = nonMaxSuppression(filteredBoxes, filteredScores, 0.7); + stats.stage2_nms = Date.now() - ts; + regions_1 = indicesNms.map(function (idx) { + var regionsData = rnetOuts[indices[idx]].regions.arraySync(); + return new MtcnnBox(regionsData[0][0], regionsData[0][1], regionsData[0][2], regionsData[0][3]); + }); + finalScores = indicesNms.map(function (idx) { return filteredScores[idx]; }); + finalBoxes = indicesNms.map(function (idx, i) { return filteredBoxes[idx].calibrate(regions_1[i]); }); + } + rnetOuts.forEach(function (t) { + t.regions.dispose(); + t.scores.dispose(); + }); + return [2 /*return*/, { + boxes: finalBoxes, + scores: finalScores + }]; + } + }); + }); + } + + function ONet(x, params) { + return Fe(function () { + var out = sharedLayer(x, params); + out = yu(out, [2, 2], [2, 2], 'same'); + out = convLayer(out, params.conv4, 'valid'); + out = prelu(out, params.prelu4_alpha); + var vectorized = hr(out, [out.shape[0], params.fc1.weights.shape[0]]); + var fc1 = fullyConnectedLayer(vectorized, params.fc1); + var prelu5 = prelu(fc1, params.prelu5_alpha); + var fc2_1 = fullyConnectedLayer(prelu5, params.fc2_1); + var max = Zn(_u(fc2_1, 1), 1); + var prob = zr(vl(fc2_1, max), 1); + var regions = fullyConnectedLayer(prelu5, params.fc2_2); + var points = fullyConnectedLayer(prelu5, params.fc2_3); + var scores = gr(prob, 1)[1]; + return { scores: scores, regions: regions, points: points }; + }); + } + + function stage3(img, inputBoxes, scoreThreshold, params, stats) { + return __awaiter(this, void 0, void 0, function () { + var ts, onetInputs, onetOuts, scoresTensor, scores, _a, _b, indices, filteredRegions, filteredBoxes, filteredScores, finalBoxes, finalScores, points, indicesNms; + return __generator(this, function (_c) { + switch (_c.label) { + case 0: + ts = Date.now(); + return [4 /*yield*/, extractImagePatches(img, inputBoxes, { width: 48, height: 48 })]; + case 1: + onetInputs = _c.sent(); + stats.stage3_extractImagePatches = Date.now() - ts; + ts = Date.now(); + onetOuts = onetInputs.map(function (onetInput) { + var out = ONet(onetInput, params); + onetInput.dispose(); + return out; + }); + stats.stage3_onet = Date.now() - ts; + scoresTensor = onetOuts.length > 1 + ? An(onetOuts.map(function (out) { return out.scores; })) + : onetOuts[0].scores; + _b = (_a = Array).from; + return [4 /*yield*/, scoresTensor.data()]; + case 2: + scores = _b.apply(_a, [_c.sent()]); + scoresTensor.dispose(); + indices = scores + .map(function (score, idx) { return ({ score: score, idx: idx }); }) + .filter(function (c) { return c.score > scoreThreshold; }) + .map(function (_a) { + var idx = _a.idx; + return idx; + }); + filteredRegions = indices.map(function (idx) { + var regionsData = onetOuts[idx].regions.arraySync(); + return new MtcnnBox(regionsData[0][0], regionsData[0][1], regionsData[0][2], regionsData[0][3]); + }); + filteredBoxes = indices + .map(function (idx, i) { return inputBoxes[idx].calibrate(filteredRegions[i]); }); + filteredScores = indices.map(function (idx) { return scores[idx]; }); + finalBoxes = []; + finalScores = []; + points = []; + if (filteredBoxes.length > 0) { + ts = Date.now(); + indicesNms = nonMaxSuppression(filteredBoxes, filteredScores, 0.7, false); + stats.stage3_nms = Date.now() - ts; + finalBoxes = indicesNms.map(function (idx) { return filteredBoxes[idx]; }); + finalScores = indicesNms.map(function (idx) { return filteredScores[idx]; }); + points = indicesNms.map(function (idx, i) { + return Array(5).fill(0).map(function (_, ptIdx) { + var pointsData = onetOuts[idx].points.arraySync(); + return new Point(((pointsData[0][ptIdx] * (finalBoxes[i].width + 1)) + finalBoxes[i].left), ((pointsData[0][ptIdx + 5] * (finalBoxes[i].height + 1)) + finalBoxes[i].top)); + }); + }); + } + onetOuts.forEach(function (t) { + t.regions.dispose(); + t.scores.dispose(); + t.points.dispose(); + }); + return [2 /*return*/, { + boxes: finalBoxes, + scores: finalScores, + points: points + }]; + } + }); + }); + } + + var Mtcnn = /** @class */ (function (_super) { + __extends(Mtcnn, _super); + function Mtcnn() { + return _super.call(this, 'Mtcnn') || this; + } + Mtcnn.prototype.forwardInput = function (input, forwardParams) { + if (forwardParams === void 0) { forwardParams = {}; } + return __awaiter(this, void 0, void 0, function () { + var params, inputCanvas, stats, tsTotal, imgTensor, onReturn, _a, height, width, _b, minFaceSize, scaleFactor, maxNumScales, scoreThresholds, scaleSteps, scales, ts, out1, out2, out3, results; + return __generator(this, function (_c) { + switch (_c.label) { + case 0: + params = this.params; + if (!params) { + throw new Error('Mtcnn - load model before inference'); + } + inputCanvas = input.canvases[0]; + if (!inputCanvas) { + throw new Error('Mtcnn - inputCanvas is not defined, note that passing tensors into Mtcnn.forwardInput is not supported yet.'); + } + stats = {}; + tsTotal = Date.now(); + imgTensor = Fe(function () { + return bgrToRgbTensor(Zn(kh.fromPixels(inputCanvas)).toFloat()); + }); + onReturn = function (results) { + // dispose tensors on return + imgTensor.dispose(); + stats.total = Date.now() - tsTotal; + return results; + }; + _a = imgTensor.shape.slice(1), height = _a[0], width = _a[1]; + _b = new MtcnnOptions(forwardParams), minFaceSize = _b.minFaceSize, scaleFactor = _b.scaleFactor, maxNumScales = _b.maxNumScales, scoreThresholds = _b.scoreThresholds, scaleSteps = _b.scaleSteps; + scales = (scaleSteps || pyramidDown(minFaceSize, scaleFactor, [height, width])) + .filter(function (scale) { + var sizes = getSizesForScale(scale, [height, width]); + return Math.min(sizes.width, sizes.height) > CELL_SIZE; + }) + .slice(0, maxNumScales); + stats.scales = scales; + stats.pyramid = scales.map(function (scale) { return getSizesForScale(scale, [height, width]); }); + ts = Date.now(); + return [4 /*yield*/, stage1(imgTensor, scales, scoreThresholds[0], params.pnet, stats)]; + case 1: + out1 = _c.sent(); + stats.total_stage1 = Date.now() - ts; + if (!out1.boxes.length) { + return [2 /*return*/, onReturn({ results: [], stats: stats })]; + } + stats.stage2_numInputBoxes = out1.boxes.length; + // using the inputCanvas to extract and resize the image patches, since it is faster + // than doing this on the gpu + ts = Date.now(); + return [4 /*yield*/, stage2(inputCanvas, out1.boxes, scoreThresholds[1], params.rnet, stats)]; + case 2: + out2 = _c.sent(); + stats.total_stage2 = Date.now() - ts; + if (!out2.boxes.length) { + return [2 /*return*/, onReturn({ results: [], stats: stats })]; + } + stats.stage3_numInputBoxes = out2.boxes.length; + ts = Date.now(); + return [4 /*yield*/, stage3(inputCanvas, out2.boxes, scoreThresholds[2], params.onet, stats)]; + case 3: + out3 = _c.sent(); + stats.total_stage3 = Date.now() - ts; + results = out3.boxes.map(function (box, idx) { return extendWithFaceLandmarks(extendWithFaceDetection({}, new FaceDetection(out3.scores[idx], new Rect(box.left / width, box.top / height, box.width / width, box.height / height), { + height: height, + width: width + })), new FaceLandmarks5(out3.points[idx].map(function (pt) { return pt.sub(new Point(box.left, box.top)).div(new Point(box.width, box.height)); }), { width: box.width, height: box.height })); }); + return [2 /*return*/, onReturn({ results: results, stats: stats })]; + } + }); + }); + }; + Mtcnn.prototype.forward = function (input, forwardParams) { + if (forwardParams === void 0) { forwardParams = {}; } + return __awaiter(this, void 0, void 0, function () { + var _a; + return __generator(this, function (_b) { + switch (_b.label) { + case 0: + _a = this.forwardInput; + return [4 /*yield*/, toNetInput(input)]; + case 1: return [4 /*yield*/, _a.apply(this, [_b.sent(), + forwardParams])]; + case 2: return [2 /*return*/, (_b.sent()).results]; + } + }); + }); + }; + Mtcnn.prototype.forwardWithStats = function (input, forwardParams) { + if (forwardParams === void 0) { forwardParams = {}; } + return __awaiter(this, void 0, void 0, function () { + var _a; + return __generator(this, function (_b) { + switch (_b.label) { + case 0: + _a = this.forwardInput; + return [4 /*yield*/, toNetInput(input)]; + case 1: return [2 /*return*/, _a.apply(this, [_b.sent(), + forwardParams])]; + } + }); + }); + }; + Mtcnn.prototype.getDefaultModelName = function () { + return 'mtcnn_model'; + }; + Mtcnn.prototype.extractParamsFromWeigthMap = function (weightMap) { + return extractParamsFromWeigthMap$7(weightMap); + }; + Mtcnn.prototype.extractParams = function (weights) { + return extractParams$7(weights); + }; + return Mtcnn; + }(NeuralNetwork)); + + var IOU_THRESHOLD = 0.35; + var BOX_ANCHORS = [ + new Point(1.603231, 2.094468), + new Point(6.041143, 7.080126), + new Point(2.882459, 3.518061), + new Point(4.266906, 5.178857), + new Point(9.041765, 10.66308) + ]; + var MEAN_RGB = [117.001, 114.697, 97.404]; + + var TinyFaceDetector = /** @class */ (function (_super) { + __extends(TinyFaceDetector, _super); + function TinyFaceDetector() { + var _this = this; + var config = { + withSeparableConvs: true, + iouThreshold: IOU_THRESHOLD, + classes: ['face'], + anchors: BOX_ANCHORS, + meanRgb: MEAN_RGB, + isFirstLayerConv2d: true, + filterSizes: [3, 16, 32, 64, 128, 256, 512] + }; + _this = _super.call(this, config) || this; + return _this; + } + Object.defineProperty(TinyFaceDetector.prototype, "anchors", { + get: function () { + return this.config.anchors; + }, + enumerable: true, + configurable: true + }); + TinyFaceDetector.prototype.locateFaces = function (input, forwardParams) { + return __awaiter(this, void 0, void 0, function () { + var objectDetections; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, this.detect(input, forwardParams)]; + case 1: + objectDetections = _a.sent(); + return [2 /*return*/, objectDetections.map(function (det) { return new FaceDetection(det.score, det.relativeBox, { width: det.imageWidth, height: det.imageHeight }); })]; + } + }); + }); + }; + TinyFaceDetector.prototype.getDefaultModelName = function () { + return 'tiny_face_detector_model'; + }; + TinyFaceDetector.prototype.extractParamsFromWeigthMap = function (weightMap) { + return _super.prototype.extractParamsFromWeigthMap.call(this, weightMap); + }; + return TinyFaceDetector; + }(TinyYolov2)); + + var IOU_THRESHOLD$1 = 0.35; + var BOX_ANCHORS$1 = [ + new Point(0.738768, 0.874946), + new Point(2.42204, 2.65704), + new Point(4.30971, 7.04493), + new Point(10.246, 4.59428), + new Point(12.6868, 11.8741) + ]; + var BOX_ANCHORS_SEPARABLE = [ + new Point(1.603231, 2.094468), + new Point(6.041143, 7.080126), + new Point(2.882459, 3.518061), + new Point(4.266906, 5.178857), + new Point(9.041765, 10.66308) + ]; + var MEAN_RGB_SEPARABLE = [117.001, 114.697, 97.404]; + var DEFAULT_MODEL_NAME = 'tiny_yolov2_model'; + var DEFAULT_MODEL_NAME_SEPARABLE_CONV = 'tiny_yolov2_separable_conv_model'; + + var TinyYolov2$1 = /** @class */ (function (_super) { + __extends(TinyYolov2, _super); + function TinyYolov2(withSeparableConvs) { + if (withSeparableConvs === void 0) { withSeparableConvs = true; } + var _this = this; + var config = Object.assign({}, { + withSeparableConvs: withSeparableConvs, + iouThreshold: IOU_THRESHOLD$1, + classes: ['face'] + }, withSeparableConvs + ? { + anchors: BOX_ANCHORS_SEPARABLE, + meanRgb: MEAN_RGB_SEPARABLE + } + : { + anchors: BOX_ANCHORS$1, + withClassScores: true + }); + _this = _super.call(this, config) || this; + return _this; + } + Object.defineProperty(TinyYolov2.prototype, "withSeparableConvs", { + get: function () { + return this.config.withSeparableConvs; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(TinyYolov2.prototype, "anchors", { + get: function () { + return this.config.anchors; + }, + enumerable: true, + configurable: true + }); + TinyYolov2.prototype.locateFaces = function (input, forwardParams) { + return __awaiter(this, void 0, void 0, function () { + var objectDetections; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, this.detect(input, forwardParams)]; + case 1: + objectDetections = _a.sent(); + return [2 /*return*/, objectDetections.map(function (det) { return new FaceDetection(det.score, det.relativeBox, { width: det.imageWidth, height: det.imageHeight }); })]; + } + }); + }); + }; + TinyYolov2.prototype.getDefaultModelName = function () { + return this.withSeparableConvs ? DEFAULT_MODEL_NAME_SEPARABLE_CONV : DEFAULT_MODEL_NAME; + }; + TinyYolov2.prototype.extractParamsFromWeigthMap = function (weightMap) { + return _super.prototype.extractParamsFromWeigthMap.call(this, weightMap); + }; + return TinyYolov2; + }(TinyYolov2)); + + function createTinyYolov2(weights, withSeparableConvs) { + if (withSeparableConvs === void 0) { withSeparableConvs = true; } + var net = new TinyYolov2$1(withSeparableConvs); + net.extractWeights(weights); + return net; + } + + var nets = { + ssdMobilenetv1: new SsdMobilenetv1(), + tinyFaceDetector: new TinyFaceDetector(), + tinyYolov2: new TinyYolov2$1(), + mtcnn: new Mtcnn(), + faceLandmark68Net: new FaceLandmark68Net(), + faceLandmark68TinyNet: new FaceLandmark68TinyNet(), + faceRecognitionNet: new FaceRecognitionNet(), + faceExpressionNet: new FaceExpressionNet(), + ageGenderNet: new AgeGenderNet() + }; + /** + * Attempts to detect all faces in an image using SSD Mobilenetv1 Network. + * + * @param input The input image. + * @param options (optional, default: see SsdMobilenetv1Options constructor for default parameters). + * @returns Bounding box of each face with score. + */ + var ssdMobilenetv1 = function (input, options) { + return nets.ssdMobilenetv1.locateFaces(input, options); + }; + /** + * Attempts to detect all faces in an image using the Tiny Face Detector. + * + * @param input The input image. + * @param options (optional, default: see TinyFaceDetectorOptions constructor for default parameters). + * @returns Bounding box of each face with score. + */ + var tinyFaceDetector = function (input, options) { + return nets.tinyFaceDetector.locateFaces(input, options); + }; + /** + * Attempts to detect all faces in an image using the Tiny Yolov2 Network. + * + * @param input The input image. + * @param options (optional, default: see TinyYolov2Options constructor for default parameters). + * @returns Bounding box of each face with score. + */ + var tinyYolov2 = function (input, options) { + return nets.tinyYolov2.locateFaces(input, options); + }; + /** + * Attempts to detect all faces in an image and the 5 point face landmarks + * of each detected face using the MTCNN Network. + * + * @param input The input image. + * @param options (optional, default: see MtcnnOptions constructor for default parameters). + * @returns Bounding box of each face with score and 5 point face landmarks. + */ + var mtcnn = function (input, options) { + return nets.mtcnn.forward(input, options); + }; + /** + * Detects the 68 point face landmark positions of the face shown in an image. + * + * @param inputs The face image extracted from the bounding box of a face. Can + * also be an array of input images, which will be batch processed. + * @returns 68 point face landmarks or array thereof in case of batch input. + */ + var detectFaceLandmarks = function (input) { + return nets.faceLandmark68Net.detectLandmarks(input); + }; + /** + * Detects the 68 point face landmark positions of the face shown in an image + * using a tinier version of the 68 point face landmark model, which is slightly + * faster at inference, but also slightly less accurate. + * + * @param inputs The face image extracted from the bounding box of a face. Can + * also be an array of input images, which will be batch processed. + * @returns 68 point face landmarks or array thereof in case of batch input. + */ + var detectFaceLandmarksTiny = function (input) { + return nets.faceLandmark68TinyNet.detectLandmarks(input); + }; + /** + * Computes a 128 entry vector (face descriptor / face embeddings) from the face shown in an image, + * which uniquely represents the features of that persons face. The computed face descriptor can + * be used to measure the similarity between faces, by computing the euclidean distance of two + * face descriptors. + * + * @param inputs The face image extracted from the aligned bounding box of a face. Can + * also be an array of input images, which will be batch processed. + * @returns Face descriptor with 128 entries or array thereof in case of batch input. + */ + var computeFaceDescriptor = function (input) { + return nets.faceRecognitionNet.computeFaceDescriptor(input); + }; + /** + * Recognizes the facial expressions from a face image. + * + * @param inputs The face image extracted from the bounding box of a face. Can + * also be an array of input images, which will be batch processed. + * @returns Facial expressions with corresponding probabilities or array thereof in case of batch input. + */ + var recognizeFaceExpressions = function (input) { + return nets.faceExpressionNet.predictExpressions(input); + }; + /** + * Predicts age and gender from a face image. + * + * @param inputs The face image extracted from the bounding box of a face. Can + * also be an array of input images, which will be batch processed. + * @returns Predictions with age, gender and gender probability or array thereof in case of batch input. + */ + var predictAgeAndGender = function (input) { + return nets.ageGenderNet.predictAgeAndGender(input); + }; + var loadSsdMobilenetv1Model = function (url) { return nets.ssdMobilenetv1.load(url); }; + var loadTinyFaceDetectorModel = function (url) { return nets.tinyFaceDetector.load(url); }; + var loadMtcnnModel = function (url) { return nets.mtcnn.load(url); }; + var loadTinyYolov2Model = function (url) { return nets.tinyYolov2.load(url); }; + var loadFaceLandmarkModel = function (url) { return nets.faceLandmark68Net.load(url); }; + var loadFaceLandmarkTinyModel = function (url) { return nets.faceLandmark68TinyNet.load(url); }; + var loadFaceRecognitionModel = function (url) { return nets.faceRecognitionNet.load(url); }; + var loadFaceExpressionModel = function (url) { return nets.faceExpressionNet.load(url); }; + var loadAgeGenderModel = function (url) { return nets.ageGenderNet.load(url); }; + // backward compatibility + var loadFaceDetectionModel = loadSsdMobilenetv1Model; + var locateFaces = ssdMobilenetv1; + var detectLandmarks = detectFaceLandmarks; + + var PredictFaceExpressionsTaskBase = /** @class */ (function (_super) { + __extends(PredictFaceExpressionsTaskBase, _super); + function PredictFaceExpressionsTaskBase(parentTask, input, extractedFaces) { + var _this = _super.call(this) || this; + _this.parentTask = parentTask; + _this.input = input; + _this.extractedFaces = extractedFaces; + return _this; + } + return PredictFaceExpressionsTaskBase; + }(ComposableTask)); + var PredictAllFaceExpressionsTask = /** @class */ (function (_super) { + __extends(PredictAllFaceExpressionsTask, _super); + function PredictAllFaceExpressionsTask() { + return _super !== null && _super.apply(this, arguments) || this; + } + PredictAllFaceExpressionsTask.prototype.run = function () { + return __awaiter(this, void 0, void 0, function () { + var parentResults, faceExpressionsByFace; + var _this = this; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, this.parentTask]; + case 1: + parentResults = _a.sent(); + return [4 /*yield*/, extractAllFacesAndComputeResults(parentResults, this.input, function (faces) { return __awaiter(_this, void 0, void 0, function () { + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, Promise.all(faces.map(function (face) { return nets.faceExpressionNet.predictExpressions(face); }))]; + case 1: return [2 /*return*/, _a.sent()]; + } + }); + }); }, this.extractedFaces)]; + case 2: + faceExpressionsByFace = _a.sent(); + return [2 /*return*/, parentResults.map(function (parentResult, i) { return extendWithFaceExpressions(parentResult, faceExpressionsByFace[i]); })]; + } + }); + }); + }; + PredictAllFaceExpressionsTask.prototype.withAgeAndGender = function () { + return new PredictAllAgeAndGenderTask(this, this.input); + }; + return PredictAllFaceExpressionsTask; + }(PredictFaceExpressionsTaskBase)); + var PredictSingleFaceExpressionsTask = /** @class */ (function (_super) { + __extends(PredictSingleFaceExpressionsTask, _super); + function PredictSingleFaceExpressionsTask() { + return _super !== null && _super.apply(this, arguments) || this; + } + PredictSingleFaceExpressionsTask.prototype.run = function () { + return __awaiter(this, void 0, void 0, function () { + var parentResult, faceExpressions; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, this.parentTask]; + case 1: + parentResult = _a.sent(); + if (!parentResult) { + return [2 /*return*/]; + } + return [4 /*yield*/, extractSingleFaceAndComputeResult(parentResult, this.input, function (face) { return nets.faceExpressionNet.predictExpressions(face); }, this.extractedFaces)]; + case 2: + faceExpressions = _a.sent(); + return [2 /*return*/, extendWithFaceExpressions(parentResult, faceExpressions)]; + } + }); + }); + }; + PredictSingleFaceExpressionsTask.prototype.withAgeAndGender = function () { + return new PredictSingleAgeAndGenderTask(this, this.input); + }; + return PredictSingleFaceExpressionsTask; + }(PredictFaceExpressionsTaskBase)); + var PredictAllFaceExpressionsWithFaceAlignmentTask = /** @class */ (function (_super) { + __extends(PredictAllFaceExpressionsWithFaceAlignmentTask, _super); + function PredictAllFaceExpressionsWithFaceAlignmentTask() { + return _super !== null && _super.apply(this, arguments) || this; + } + PredictAllFaceExpressionsWithFaceAlignmentTask.prototype.withAgeAndGender = function () { + return new PredictAllAgeAndGenderWithFaceAlignmentTask(this, this.input); + }; + PredictAllFaceExpressionsWithFaceAlignmentTask.prototype.withFaceDescriptors = function () { + return new ComputeAllFaceDescriptorsTask(this, this.input); + }; + return PredictAllFaceExpressionsWithFaceAlignmentTask; + }(PredictAllFaceExpressionsTask)); + var PredictSingleFaceExpressionsWithFaceAlignmentTask = /** @class */ (function (_super) { + __extends(PredictSingleFaceExpressionsWithFaceAlignmentTask, _super); + function PredictSingleFaceExpressionsWithFaceAlignmentTask() { + return _super !== null && _super.apply(this, arguments) || this; + } + PredictSingleFaceExpressionsWithFaceAlignmentTask.prototype.withAgeAndGender = function () { + return new PredictSingleAgeAndGenderWithFaceAlignmentTask(this, this.input); + }; + PredictSingleFaceExpressionsWithFaceAlignmentTask.prototype.withFaceDescriptor = function () { + return new ComputeSingleFaceDescriptorTask(this, this.input); + }; + return PredictSingleFaceExpressionsWithFaceAlignmentTask; + }(PredictSingleFaceExpressionsTask)); + + var PredictAgeAndGenderTaskBase = /** @class */ (function (_super) { + __extends(PredictAgeAndGenderTaskBase, _super); + function PredictAgeAndGenderTaskBase(parentTask, input, extractedFaces) { + var _this = _super.call(this) || this; + _this.parentTask = parentTask; + _this.input = input; + _this.extractedFaces = extractedFaces; + return _this; + } + return PredictAgeAndGenderTaskBase; + }(ComposableTask)); + var PredictAllAgeAndGenderTask = /** @class */ (function (_super) { + __extends(PredictAllAgeAndGenderTask, _super); + function PredictAllAgeAndGenderTask() { + return _super !== null && _super.apply(this, arguments) || this; + } + PredictAllAgeAndGenderTask.prototype.run = function () { + return __awaiter(this, void 0, void 0, function () { + var parentResults, ageAndGenderByFace; + var _this = this; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, this.parentTask]; + case 1: + parentResults = _a.sent(); + return [4 /*yield*/, extractAllFacesAndComputeResults(parentResults, this.input, function (faces) { return __awaiter(_this, void 0, void 0, function () { + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, Promise.all(faces.map(function (face) { return nets.ageGenderNet.predictAgeAndGender(face); }))]; + case 1: return [2 /*return*/, _a.sent()]; + } + }); + }); }, this.extractedFaces)]; + case 2: + ageAndGenderByFace = _a.sent(); + return [2 /*return*/, parentResults.map(function (parentResult, i) { + var _a = ageAndGenderByFace[i], age = _a.age, gender = _a.gender, genderProbability = _a.genderProbability; + return extendWithAge(extendWithGender(parentResult, gender, genderProbability), age); + })]; + } + }); + }); + }; + PredictAllAgeAndGenderTask.prototype.withFaceExpressions = function () { + return new PredictAllFaceExpressionsTask(this, this.input); + }; + return PredictAllAgeAndGenderTask; + }(PredictAgeAndGenderTaskBase)); + var PredictSingleAgeAndGenderTask = /** @class */ (function (_super) { + __extends(PredictSingleAgeAndGenderTask, _super); + function PredictSingleAgeAndGenderTask() { + return _super !== null && _super.apply(this, arguments) || this; + } + PredictSingleAgeAndGenderTask.prototype.run = function () { + return __awaiter(this, void 0, void 0, function () { + var parentResult, _a, age, gender, genderProbability; + return __generator(this, function (_b) { + switch (_b.label) { + case 0: return [4 /*yield*/, this.parentTask]; + case 1: + parentResult = _b.sent(); + if (!parentResult) { + return [2 /*return*/]; + } + return [4 /*yield*/, extractSingleFaceAndComputeResult(parentResult, this.input, function (face) { return nets.ageGenderNet.predictAgeAndGender(face); }, this.extractedFaces)]; + case 2: + _a = _b.sent(), age = _a.age, gender = _a.gender, genderProbability = _a.genderProbability; + return [2 /*return*/, extendWithAge(extendWithGender(parentResult, gender, genderProbability), age)]; + } + }); + }); + }; + PredictSingleAgeAndGenderTask.prototype.withFaceExpressions = function () { + return new PredictSingleFaceExpressionsTask(this, this.input); + }; + return PredictSingleAgeAndGenderTask; + }(PredictAgeAndGenderTaskBase)); + var PredictAllAgeAndGenderWithFaceAlignmentTask = /** @class */ (function (_super) { + __extends(PredictAllAgeAndGenderWithFaceAlignmentTask, _super); + function PredictAllAgeAndGenderWithFaceAlignmentTask() { + return _super !== null && _super.apply(this, arguments) || this; + } + PredictAllAgeAndGenderWithFaceAlignmentTask.prototype.withFaceExpressions = function () { + return new PredictAllFaceExpressionsWithFaceAlignmentTask(this, this.input); + }; + PredictAllAgeAndGenderWithFaceAlignmentTask.prototype.withFaceDescriptors = function () { + return new ComputeAllFaceDescriptorsTask(this, this.input); + }; + return PredictAllAgeAndGenderWithFaceAlignmentTask; + }(PredictAllAgeAndGenderTask)); + var PredictSingleAgeAndGenderWithFaceAlignmentTask = /** @class */ (function (_super) { + __extends(PredictSingleAgeAndGenderWithFaceAlignmentTask, _super); + function PredictSingleAgeAndGenderWithFaceAlignmentTask() { + return _super !== null && _super.apply(this, arguments) || this; + } + PredictSingleAgeAndGenderWithFaceAlignmentTask.prototype.withFaceExpressions = function () { + return new PredictSingleFaceExpressionsWithFaceAlignmentTask(this, this.input); + }; + PredictSingleAgeAndGenderWithFaceAlignmentTask.prototype.withFaceDescriptor = function () { + return new ComputeSingleFaceDescriptorTask(this, this.input); + }; + return PredictSingleAgeAndGenderWithFaceAlignmentTask; + }(PredictSingleAgeAndGenderTask)); + + var ComputeFaceDescriptorsTaskBase = /** @class */ (function (_super) { + __extends(ComputeFaceDescriptorsTaskBase, _super); + function ComputeFaceDescriptorsTaskBase(parentTask, input) { + var _this = _super.call(this) || this; + _this.parentTask = parentTask; + _this.input = input; + return _this; + } + return ComputeFaceDescriptorsTaskBase; + }(ComposableTask)); + var ComputeAllFaceDescriptorsTask = /** @class */ (function (_super) { + __extends(ComputeAllFaceDescriptorsTask, _super); + function ComputeAllFaceDescriptorsTask() { + return _super !== null && _super.apply(this, arguments) || this; + } + ComputeAllFaceDescriptorsTask.prototype.run = function () { + return __awaiter(this, void 0, void 0, function () { + var parentResults, descriptors; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, this.parentTask]; + case 1: + parentResults = _a.sent(); + return [4 /*yield*/, extractAllFacesAndComputeResults(parentResults, this.input, function (faces) { return Promise.all(faces.map(function (face) { + return nets.faceRecognitionNet.computeFaceDescriptor(face); + })); }, null, function (parentResult) { return parentResult.landmarks.align(null, { useDlibAlignment: true }); })]; + case 2: + descriptors = _a.sent(); + return [2 /*return*/, descriptors.map(function (descriptor, i) { return extendWithFaceDescriptor(parentResults[i], descriptor); })]; + } + }); + }); + }; + ComputeAllFaceDescriptorsTask.prototype.withFaceExpressions = function () { + return new PredictAllFaceExpressionsWithFaceAlignmentTask(this, this.input); + }; + ComputeAllFaceDescriptorsTask.prototype.withAgeAndGender = function () { + return new PredictAllAgeAndGenderWithFaceAlignmentTask(this, this.input); + }; + return ComputeAllFaceDescriptorsTask; + }(ComputeFaceDescriptorsTaskBase)); + var ComputeSingleFaceDescriptorTask = /** @class */ (function (_super) { + __extends(ComputeSingleFaceDescriptorTask, _super); + function ComputeSingleFaceDescriptorTask() { + return _super !== null && _super.apply(this, arguments) || this; + } + ComputeSingleFaceDescriptorTask.prototype.run = function () { + return __awaiter(this, void 0, void 0, function () { + var parentResult, descriptor; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, this.parentTask]; + case 1: + parentResult = _a.sent(); + if (!parentResult) { + return [2 /*return*/]; + } + return [4 /*yield*/, extractSingleFaceAndComputeResult(parentResult, this.input, function (face) { return nets.faceRecognitionNet.computeFaceDescriptor(face); }, null, function (parentResult) { return parentResult.landmarks.align(null, { useDlibAlignment: true }); })]; + case 2: + descriptor = _a.sent(); + return [2 /*return*/, extendWithFaceDescriptor(parentResult, descriptor)]; + } + }); + }); + }; + ComputeSingleFaceDescriptorTask.prototype.withFaceExpressions = function () { + return new PredictSingleFaceExpressionsWithFaceAlignmentTask(this, this.input); + }; + ComputeSingleFaceDescriptorTask.prototype.withAgeAndGender = function () { + return new PredictSingleAgeAndGenderWithFaceAlignmentTask(this, this.input); + }; + return ComputeSingleFaceDescriptorTask; + }(ComputeFaceDescriptorsTaskBase)); + + var DetectFaceLandmarksTaskBase = /** @class */ (function (_super) { + __extends(DetectFaceLandmarksTaskBase, _super); + function DetectFaceLandmarksTaskBase(parentTask, input, useTinyLandmarkNet) { + var _this = _super.call(this) || this; + _this.parentTask = parentTask; + _this.input = input; + _this.useTinyLandmarkNet = useTinyLandmarkNet; + return _this; + } + Object.defineProperty(DetectFaceLandmarksTaskBase.prototype, "landmarkNet", { + get: function () { + return this.useTinyLandmarkNet + ? nets.faceLandmark68TinyNet + : nets.faceLandmark68Net; + }, + enumerable: true, + configurable: true + }); + return DetectFaceLandmarksTaskBase; + }(ComposableTask)); + var DetectAllFaceLandmarksTask = /** @class */ (function (_super) { + __extends(DetectAllFaceLandmarksTask, _super); + function DetectAllFaceLandmarksTask() { + return _super !== null && _super.apply(this, arguments) || this; + } + DetectAllFaceLandmarksTask.prototype.run = function () { + return __awaiter(this, void 0, void 0, function () { + var parentResults, detections, faces, _a, faceLandmarksByFace; + var _this = this; + return __generator(this, function (_b) { + switch (_b.label) { + case 0: return [4 /*yield*/, this.parentTask]; + case 1: + parentResults = _b.sent(); + detections = parentResults.map(function (res) { return res.detection; }); + if (!(this.input instanceof ht)) return [3 /*break*/, 3]; + return [4 /*yield*/, extractFaceTensors(this.input, detections)]; + case 2: + _a = _b.sent(); + return [3 /*break*/, 5]; + case 3: return [4 /*yield*/, extractFaces(this.input, detections)]; + case 4: + _a = _b.sent(); + _b.label = 5; + case 5: + faces = _a; + return [4 /*yield*/, Promise.all(faces.map(function (face) { return _this.landmarkNet.detectLandmarks(face); }))]; + case 6: + faceLandmarksByFace = _b.sent(); + faces.forEach(function (f) { return f instanceof ht && f.dispose(); }); + return [2 /*return*/, parentResults.map(function (parentResult, i) { + return extendWithFaceLandmarks(parentResult, faceLandmarksByFace[i]); + })]; + } + }); + }); + }; + DetectAllFaceLandmarksTask.prototype.withFaceExpressions = function () { + return new PredictAllFaceExpressionsWithFaceAlignmentTask(this, this.input); + }; + DetectAllFaceLandmarksTask.prototype.withAgeAndGender = function () { + return new PredictAllAgeAndGenderWithFaceAlignmentTask(this, this.input); + }; + DetectAllFaceLandmarksTask.prototype.withFaceDescriptors = function () { + return new ComputeAllFaceDescriptorsTask(this, this.input); + }; + return DetectAllFaceLandmarksTask; + }(DetectFaceLandmarksTaskBase)); + var DetectSingleFaceLandmarksTask = /** @class */ (function (_super) { + __extends(DetectSingleFaceLandmarksTask, _super); + function DetectSingleFaceLandmarksTask() { + return _super !== null && _super.apply(this, arguments) || this; + } + DetectSingleFaceLandmarksTask.prototype.run = function () { + return __awaiter(this, void 0, void 0, function () { + var parentResult, detection, faces, _a, landmarks; + return __generator(this, function (_b) { + switch (_b.label) { + case 0: return [4 /*yield*/, this.parentTask]; + case 1: + parentResult = _b.sent(); + if (!parentResult) { + return [2 /*return*/]; + } + detection = parentResult.detection; + if (!(this.input instanceof ht)) return [3 /*break*/, 3]; + return [4 /*yield*/, extractFaceTensors(this.input, [detection])]; + case 2: + _a = _b.sent(); + return [3 /*break*/, 5]; + case 3: return [4 /*yield*/, extractFaces(this.input, [detection])]; + case 4: + _a = _b.sent(); + _b.label = 5; + case 5: + faces = _a; + return [4 /*yield*/, this.landmarkNet.detectLandmarks(faces[0])]; + case 6: + landmarks = _b.sent(); + faces.forEach(function (f) { return f instanceof ht && f.dispose(); }); + return [2 /*return*/, extendWithFaceLandmarks(parentResult, landmarks)]; + } + }); + }); + }; + DetectSingleFaceLandmarksTask.prototype.withFaceExpressions = function () { + return new PredictSingleFaceExpressionsWithFaceAlignmentTask(this, this.input); + }; + DetectSingleFaceLandmarksTask.prototype.withAgeAndGender = function () { + return new PredictSingleAgeAndGenderWithFaceAlignmentTask(this, this.input); + }; + DetectSingleFaceLandmarksTask.prototype.withFaceDescriptor = function () { + return new ComputeSingleFaceDescriptorTask(this, this.input); + }; + return DetectSingleFaceLandmarksTask; + }(DetectFaceLandmarksTaskBase)); + + var DetectFacesTaskBase = /** @class */ (function (_super) { + __extends(DetectFacesTaskBase, _super); + function DetectFacesTaskBase(input, options) { + if (options === void 0) { options = new SsdMobilenetv1Options(); } + var _this = _super.call(this) || this; + _this.input = input; + _this.options = options; + return _this; + } + return DetectFacesTaskBase; + }(ComposableTask)); + var DetectAllFacesTask = /** @class */ (function (_super) { + __extends(DetectAllFacesTask, _super); + function DetectAllFacesTask() { + return _super !== null && _super.apply(this, arguments) || this; + } + DetectAllFacesTask.prototype.run = function () { + return __awaiter(this, void 0, void 0, function () { + var _a, input, options, faceDetectionFunction; + return __generator(this, function (_b) { + switch (_b.label) { + case 0: + _a = this, input = _a.input, options = _a.options; + if (!(options instanceof MtcnnOptions)) return [3 /*break*/, 2]; + return [4 /*yield*/, nets.mtcnn.forward(input, options)]; + case 1: return [2 /*return*/, (_b.sent()) + .map(function (result) { return result.detection; })]; + case 2: + faceDetectionFunction = options instanceof TinyFaceDetectorOptions + ? function (input) { return nets.tinyFaceDetector.locateFaces(input, options); } + : (options instanceof SsdMobilenetv1Options + ? function (input) { return nets.ssdMobilenetv1.locateFaces(input, options); } + : (options instanceof TinyYolov2Options + ? function (input) { return nets.tinyYolov2.locateFaces(input, options); } + : null)); + if (!faceDetectionFunction) { + throw new Error('detectFaces - expected options to be instance of TinyFaceDetectorOptions | SsdMobilenetv1Options | MtcnnOptions | TinyYolov2Options'); + } + return [2 /*return*/, faceDetectionFunction(input)]; + } + }); + }); + }; + DetectAllFacesTask.prototype.runAndExtendWithFaceDetections = function () { + var _this = this; + return new Promise(function (res) { return __awaiter(_this, void 0, void 0, function () { + var detections; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, this.run()]; + case 1: + detections = _a.sent(); + return [2 /*return*/, res(detections.map(function (detection) { return extendWithFaceDetection({}, detection); }))]; + } + }); + }); }); + }; + DetectAllFacesTask.prototype.withFaceLandmarks = function (useTinyLandmarkNet) { + if (useTinyLandmarkNet === void 0) { useTinyLandmarkNet = false; } + return new DetectAllFaceLandmarksTask(this.runAndExtendWithFaceDetections(), this.input, useTinyLandmarkNet); + }; + DetectAllFacesTask.prototype.withFaceExpressions = function () { + return new PredictAllFaceExpressionsTask(this.runAndExtendWithFaceDetections(), this.input); + }; + DetectAllFacesTask.prototype.withAgeAndGender = function () { + return new PredictAllAgeAndGenderTask(this.runAndExtendWithFaceDetections(), this.input); + }; + return DetectAllFacesTask; + }(DetectFacesTaskBase)); + var DetectSingleFaceTask = /** @class */ (function (_super) { + __extends(DetectSingleFaceTask, _super); + function DetectSingleFaceTask() { + return _super !== null && _super.apply(this, arguments) || this; + } + DetectSingleFaceTask.prototype.run = function () { + return __awaiter(this, void 0, void 0, function () { + var faceDetections, faceDetectionWithHighestScore; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, new DetectAllFacesTask(this.input, this.options)]; + case 1: + faceDetections = _a.sent(); + faceDetectionWithHighestScore = faceDetections[0]; + faceDetections.forEach(function (faceDetection) { + if (faceDetection.score > faceDetectionWithHighestScore.score) { + faceDetectionWithHighestScore = faceDetection; + } + }); + return [2 /*return*/, faceDetectionWithHighestScore]; + } + }); + }); + }; + DetectSingleFaceTask.prototype.runAndExtendWithFaceDetection = function () { + var _this = this; + return new Promise(function (res) { return __awaiter(_this, void 0, void 0, function () { + var detection; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, this.run()]; + case 1: + detection = _a.sent(); + return [2 /*return*/, res(detection ? extendWithFaceDetection({}, detection) : undefined)]; + } + }); + }); }); + }; + DetectSingleFaceTask.prototype.withFaceLandmarks = function (useTinyLandmarkNet) { + if (useTinyLandmarkNet === void 0) { useTinyLandmarkNet = false; } + return new DetectSingleFaceLandmarksTask(this.runAndExtendWithFaceDetection(), this.input, useTinyLandmarkNet); + }; + DetectSingleFaceTask.prototype.withFaceExpressions = function () { + return new PredictSingleFaceExpressionsTask(this.runAndExtendWithFaceDetection(), this.input); + }; + DetectSingleFaceTask.prototype.withAgeAndGender = function () { + return new PredictSingleAgeAndGenderTask(this.runAndExtendWithFaceDetection(), this.input); + }; + return DetectSingleFaceTask; + }(DetectFacesTaskBase)); + + function detectSingleFace(input, options) { + if (options === void 0) { options = new SsdMobilenetv1Options(); } + return new DetectSingleFaceTask(input, options); + } + function detectAllFaces(input, options) { + if (options === void 0) { options = new SsdMobilenetv1Options(); } + return new DetectAllFacesTask(input, options); + } + + // export allFaces API for backward compatibility + function allFacesSsdMobilenetv1(input, minConfidence) { + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, detectAllFaces(input, new SsdMobilenetv1Options(minConfidence ? { minConfidence: minConfidence } : {})) + .withFaceLandmarks() + .withFaceDescriptors()]; + case 1: return [2 /*return*/, _a.sent()]; + } + }); + }); + } + function allFacesTinyYolov2(input, forwardParams) { + if (forwardParams === void 0) { forwardParams = {}; } + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, detectAllFaces(input, new TinyYolov2Options(forwardParams)) + .withFaceLandmarks() + .withFaceDescriptors()]; + case 1: return [2 /*return*/, _a.sent()]; + } + }); + }); + } + function allFacesMtcnn(input, forwardParams) { + if (forwardParams === void 0) { forwardParams = {}; } + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, detectAllFaces(input, new MtcnnOptions(forwardParams)) + .withFaceLandmarks() + .withFaceDescriptors()]; + case 1: return [2 /*return*/, _a.sent()]; + } + }); + }); + } + var allFaces = allFacesSsdMobilenetv1; + + function euclideanDistance(arr1, arr2) { + if (arr1.length !== arr2.length) + throw new Error('euclideanDistance: arr1.length !== arr2.length'); + var desc1 = Array.from(arr1); + var desc2 = Array.from(arr2); + return Math.sqrt(desc1 + .map(function (val, i) { return val - desc2[i]; }) + .reduce(function (res, diff) { return res + Math.pow(diff, 2); }, 0)); + } + + var FaceMatcher = /** @class */ (function () { + function FaceMatcher(inputs, distanceThreshold) { + if (distanceThreshold === void 0) { distanceThreshold = 0.5; } + this._distanceThreshold = distanceThreshold; + var inputArray = Array.isArray(inputs) ? inputs : [inputs]; + if (!inputArray.length) { + throw new Error("FaceRecognizer.constructor - expected atleast one input"); + } + var count = 1; + var createUniqueLabel = function () { return "person " + count++; }; + this._labeledDescriptors = inputArray.map(function (desc) { + if (desc instanceof LabeledFaceDescriptors) { + return desc; + } + if (desc instanceof Float32Array) { + return new LabeledFaceDescriptors(createUniqueLabel(), [desc]); + } + if (desc.descriptor && desc.descriptor instanceof Float32Array) { + return new LabeledFaceDescriptors(createUniqueLabel(), [desc.descriptor]); + } + throw new Error("FaceRecognizer.constructor - expected inputs to be of type LabeledFaceDescriptors | WithFaceDescriptor | Float32Array | Array | Float32Array>"); + }); + } + Object.defineProperty(FaceMatcher.prototype, "labeledDescriptors", { + get: function () { return this._labeledDescriptors; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(FaceMatcher.prototype, "distanceThreshold", { + get: function () { return this._distanceThreshold; }, + enumerable: true, + configurable: true + }); + FaceMatcher.prototype.computeMeanDistance = function (queryDescriptor, descriptors) { + return descriptors + .map(function (d) { return euclideanDistance(d, queryDescriptor); }) + .reduce(function (d1, d2) { return d1 + d2; }, 0) + / (descriptors.length || 1); + }; + FaceMatcher.prototype.matchDescriptor = function (queryDescriptor) { + var _this = this; + return this.labeledDescriptors + .map(function (_a) { + var descriptors = _a.descriptors, label = _a.label; + return new FaceMatch(label, _this.computeMeanDistance(queryDescriptor, descriptors)); + }) + .reduce(function (best, curr) { return best.distance < curr.distance ? best : curr; }); + }; + FaceMatcher.prototype.findBestMatch = function (queryDescriptor) { + var bestMatch = this.matchDescriptor(queryDescriptor); + return bestMatch.distance < this.distanceThreshold + ? bestMatch + : new FaceMatch('unknown', bestMatch.distance); + }; + return FaceMatcher; + }()); + + function createMtcnn(weights) { + var net = new Mtcnn(); + net.extractWeights(weights); + return net; + } + + function createTinyFaceDetector(weights) { + var net = new TinyFaceDetector(); + net.extractWeights(weights); + return net; + } + + function resizeResults(results, dimensions) { + var _a = new Dimensions(dimensions.width, dimensions.height), width = _a.width, height = _a.height; + if (width <= 0 || height <= 0) { + throw new Error("resizeResults - invalid dimensions: " + JSON.stringify({ width: width, height: height })); + } + if (Array.isArray(results)) { + return results.map(function (obj) { return resizeResults(obj, { width: width, height: height }); }); + } + if (isWithFaceLandmarks(results)) { + var resizedDetection = results.detection.forSize(width, height); + var resizedLandmarks = results.unshiftedLandmarks.forSize(resizedDetection.box.width, resizedDetection.box.height); + return extendWithFaceLandmarks(extendWithFaceDetection(results, resizedDetection), resizedLandmarks); + } + if (isWithFaceDetection(results)) { + return extendWithFaceDetection(results, results.detection.forSize(width, height)); + } + if (results instanceof FaceLandmarks || results instanceof FaceDetection) { + return results.forSize(width, height); + } + return results; + } + + var draw = __assign({}, drawBase, drawExtended); + + exports.AgeGenderNet = AgeGenderNet; + exports.BoundingBox = BoundingBox; + exports.Box = Box; + exports.ComposableTask = ComposableTask; + exports.ComputeAllFaceDescriptorsTask = ComputeAllFaceDescriptorsTask; + exports.ComputeFaceDescriptorsTaskBase = ComputeFaceDescriptorsTaskBase; + exports.ComputeSingleFaceDescriptorTask = ComputeSingleFaceDescriptorTask; + exports.DetectAllFaceLandmarksTask = DetectAllFaceLandmarksTask; + exports.DetectAllFacesTask = DetectAllFacesTask; + exports.DetectFaceLandmarksTaskBase = DetectFaceLandmarksTaskBase; + exports.DetectFacesTaskBase = DetectFacesTaskBase; + exports.DetectSingleFaceLandmarksTask = DetectSingleFaceLandmarksTask; + exports.DetectSingleFaceTask = DetectSingleFaceTask; + exports.Dimensions = Dimensions; + exports.FACE_EXPRESSION_LABELS = FACE_EXPRESSION_LABELS; + exports.FaceDetection = FaceDetection; + exports.FaceDetectionNet = FaceDetectionNet; + exports.FaceExpressionNet = FaceExpressionNet; + exports.FaceExpressions = FaceExpressions; + exports.FaceLandmark68Net = FaceLandmark68Net; + exports.FaceLandmark68TinyNet = FaceLandmark68TinyNet; + exports.FaceLandmarkNet = FaceLandmarkNet; + exports.FaceLandmarks = FaceLandmarks; + exports.FaceLandmarks5 = FaceLandmarks5; + exports.FaceLandmarks68 = FaceLandmarks68; + exports.FaceMatch = FaceMatch; + exports.FaceMatcher = FaceMatcher; + exports.FaceRecognitionNet = FaceRecognitionNet; + exports.LabeledBox = LabeledBox; + exports.LabeledFaceDescriptors = LabeledFaceDescriptors; + exports.Mtcnn = Mtcnn; + exports.MtcnnOptions = MtcnnOptions; + exports.NetInput = NetInput; + exports.NeuralNetwork = NeuralNetwork; + exports.ObjectDetection = ObjectDetection; + exports.Point = Point; + exports.PredictedBox = PredictedBox; + exports.Rect = Rect; + exports.SsdMobilenetv1 = SsdMobilenetv1; + exports.SsdMobilenetv1Options = SsdMobilenetv1Options; + exports.TfjsImageRecognitionBase = tfjsImageRecognitionBase; + exports.TinyFaceDetector = TinyFaceDetector; + exports.TinyFaceDetectorOptions = TinyFaceDetectorOptions; + exports.TinyYolov2 = TinyYolov2$1; + exports.allFaces = allFaces; + exports.allFacesMtcnn = allFacesMtcnn; + exports.allFacesSsdMobilenetv1 = allFacesSsdMobilenetv1; + exports.allFacesTinyYolov2 = allFacesTinyYolov2; + exports.awaitMediaLoaded = awaitMediaLoaded; + exports.bufferToImage = bufferToImage; + exports.computeFaceDescriptor = computeFaceDescriptor; + exports.computeReshapedDimensions = computeReshapedDimensions; + exports.createCanvas = createCanvas; + exports.createCanvasFromMedia = createCanvasFromMedia; + exports.createFaceDetectionNet = createFaceDetectionNet; + exports.createFaceRecognitionNet = createFaceRecognitionNet; + exports.createMtcnn = createMtcnn; + exports.createSsdMobilenetv1 = createSsdMobilenetv1; + exports.createTinyFaceDetector = createTinyFaceDetector; + exports.createTinyYolov2 = createTinyYolov2; + exports.detectAllFaces = detectAllFaces; + exports.detectFaceLandmarks = detectFaceLandmarks; + exports.detectFaceLandmarksTiny = detectFaceLandmarksTiny; + exports.detectLandmarks = detectLandmarks; + exports.detectSingleFace = detectSingleFace; + exports.draw = draw; + exports.env = env; + exports.euclideanDistance = euclideanDistance; + exports.extendWithAge = extendWithAge; + exports.extendWithFaceDescriptor = extendWithFaceDescriptor; + exports.extendWithFaceDetection = extendWithFaceDetection; + exports.extendWithFaceExpressions = extendWithFaceExpressions; + exports.extendWithFaceLandmarks = extendWithFaceLandmarks; + exports.extendWithGender = extendWithGender; + exports.extractFaceTensors = extractFaceTensors; + exports.extractFaces = extractFaces; + exports.fetchImage = fetchImage; + exports.fetchJson = fetchJson; + exports.fetchNetWeights = fetchNetWeights; + exports.fetchOrThrow = fetchOrThrow; + exports.getCenterPoint = getCenterPoint; + exports.getContext2dOrThrow = getContext2dOrThrow; + exports.getMediaDimensions = getMediaDimensions; + exports.imageTensorToCanvas = imageTensorToCanvas; + exports.imageToSquare = imageToSquare; + exports.inverseSigmoid = inverseSigmoid; + exports.iou = iou; + exports.isDimensions = isDimensions; + exports.isEven = isEven; + exports.isFloat = isFloat; + exports.isMediaElement = isMediaElement; + exports.isMediaLoaded = isMediaLoaded; + exports.isTensor = isTensor; + exports.isTensor1D = isTensor1D; + exports.isTensor2D = isTensor2D; + exports.isTensor3D = isTensor3D; + exports.isTensor4D = isTensor4D; + exports.isValidNumber = isValidNumber; + exports.isValidProbablitiy = isValidProbablitiy; + exports.isWithAge = isWithAge; + exports.isWithFaceDetection = isWithFaceDetection; + exports.isWithFaceExpressions = isWithFaceExpressions; + exports.isWithFaceLandmarks = isWithFaceLandmarks; + exports.isWithGender = isWithGender; + exports.loadAgeGenderModel = loadAgeGenderModel; + exports.loadFaceDetectionModel = loadFaceDetectionModel; + exports.loadFaceExpressionModel = loadFaceExpressionModel; + exports.loadFaceLandmarkModel = loadFaceLandmarkModel; + exports.loadFaceLandmarkTinyModel = loadFaceLandmarkTinyModel; + exports.loadFaceRecognitionModel = loadFaceRecognitionModel; + exports.loadMtcnnModel = loadMtcnnModel; + exports.loadSsdMobilenetv1Model = loadSsdMobilenetv1Model; + exports.loadTinyFaceDetectorModel = loadTinyFaceDetectorModel; + exports.loadTinyYolov2Model = loadTinyYolov2Model; + exports.loadWeightMap = loadWeightMap; + exports.locateFaces = locateFaces; + exports.matchDimensions = matchDimensions; + exports.minBbox = minBbox; + exports.mtcnn = mtcnn; + exports.nets = nets; + exports.nonMaxSuppression = nonMaxSuppression; + exports.normalize = normalize; + exports.padToSquare = padToSquare; + exports.predictAgeAndGender = predictAgeAndGender; + exports.range = range; + exports.recognizeFaceExpressions = recognizeFaceExpressions; + exports.resizeResults = resizeResults; + exports.resolveInput = resolveInput; + exports.round = round; + exports.shuffleArray = shuffleArray; + exports.sigmoid = sigmoid; + exports.ssdMobilenetv1 = ssdMobilenetv1; + exports.tf = tfCore_esm; + exports.tinyFaceDetector = tinyFaceDetector; + exports.tinyYolov2 = tinyYolov2; + exports.toNetInput = toNetInput; + + Object.defineProperty(exports, '__esModule', { value: true }); + +})); +//# sourceMappingURL=face-api.js.map diff --git a/js/face-api.js.map b/js/face-api.js.map new file mode 100644 index 0000000000000000000000000000000000000000..223fcf2ba5e59829e462079a90bdcce2f90373e2 --- /dev/null +++ b/js/face-api.js.map @@ -0,0 +1 @@ +{"version":3,"file":"face-api.js","sources":["../node_modules/@tensorflow/tfjs-core/dist/tf-core.esm.js","../node_modules/tfjs-image-recognition-base/build/es6/classes/Dimensions.js","../node_modules/tfjs-image-recognition-base/build/es6/classes/Point.js","../node_modules/tfjs-image-recognition-base/build/es6/utils/index.js","../node_modules/tfjs-image-recognition-base/build/es6/classes/Box.js","../node_modules/tfjs-image-recognition-base/build/es6/classes/BoundingBox.js","../node_modules/tfjs-image-recognition-base/build/es6/classes/LabeledBox.js","../node_modules/tfjs-image-recognition-base/build/es6/classes/ObjectDetection.js","../node_modules/tfjs-image-recognition-base/build/es6/classes/PredictedBox.js","../node_modules/tfjs-image-recognition-base/build/es6/classes/Rect.js","../node_modules/tfjs-image-recognition-base/build/es6/env/createBrowserEnv.js","../node_modules/tfjs-image-recognition-base/build/es6/env/createFileSystem.js","../node_modules/tfjs-image-recognition-base/build/es6/env/createNodejsEnv.js","../node_modules/tfjs-image-recognition-base/build/es6/env/isBrowser.js","../node_modules/tfjs-image-recognition-base/build/es6/env/isNodejs.js","../node_modules/tfjs-image-recognition-base/build/es6/env/index.js","../node_modules/tfjs-image-recognition-base/build/es6/dom/resolveInput.js","../node_modules/tfjs-image-recognition-base/build/es6/dom/getContext2dOrThrow.js","../node_modules/tfjs-image-recognition-base/build/es6/draw/DrawTextField.js","../node_modules/tfjs-image-recognition-base/build/es6/draw/DrawBox.js","../node_modules/tfjs-image-recognition-base/build/es6/common/convLayer.js","../node_modules/tfjs-image-recognition-base/build/es6/common/disposeUnusedWeightTensors.js","../node_modules/tfjs-image-recognition-base/build/es6/common/extractConvParamsFactory.js","../node_modules/tfjs-image-recognition-base/build/es6/common/extractFCParamsFactory.js","../node_modules/tfjs-image-recognition-base/build/es6/common/types.js","../node_modules/tfjs-image-recognition-base/build/es6/common/extractSeparableConvParamsFactory.js","../node_modules/tfjs-image-recognition-base/build/es6/common/extractWeightEntryFactory.js","../node_modules/tfjs-image-recognition-base/build/es6/common/extractWeightsFactory.js","../node_modules/tfjs-image-recognition-base/build/es6/common/getModelUris.js","../node_modules/tfjs-image-recognition-base/build/es6/dom/isMediaLoaded.js","../node_modules/tfjs-image-recognition-base/build/es6/dom/awaitMediaLoaded.js","../node_modules/tfjs-image-recognition-base/build/es6/dom/bufferToImage.js","../node_modules/tfjs-image-recognition-base/build/es6/dom/getMediaDimensions.js","../node_modules/tfjs-image-recognition-base/build/es6/dom/createCanvas.js","../node_modules/tfjs-image-recognition-base/build/es6/dom/fetchOrThrow.js","../node_modules/tfjs-image-recognition-base/build/es6/dom/fetchImage.js","../node_modules/tfjs-image-recognition-base/build/es6/dom/fetchJson.js","../node_modules/tfjs-image-recognition-base/build/es6/dom/fetchNetWeights.js","../node_modules/tfjs-image-recognition-base/build/es6/dom/imageTensorToCanvas.js","../node_modules/tfjs-image-recognition-base/build/es6/dom/imageToSquare.js","../node_modules/tfjs-image-recognition-base/build/es6/dom/isMediaElement.js","../node_modules/tfjs-image-recognition-base/build/es6/dom/loadWeightMap.js","../node_modules/tfjs-image-recognition-base/build/es6/dom/matchDimensions.js","../node_modules/tfjs-image-recognition-base/build/es6/ops/padToSquare.js","../node_modules/tfjs-image-recognition-base/build/es6/dom/NetInput.js","../node_modules/tfjs-image-recognition-base/build/es6/dom/toNetInput.js","../node_modules/tfjs-image-recognition-base/build/es6/NeuralNetwork.js","../node_modules/tfjs-image-recognition-base/build/es6/ops/iou.js","../node_modules/tfjs-image-recognition-base/build/es6/ops/minBbox.js","../node_modules/tfjs-image-recognition-base/build/es6/ops/nonMaxSuppression.js","../node_modules/tfjs-image-recognition-base/build/es6/ops/normalize.js","../node_modules/tfjs-image-recognition-base/build/es6/ops/shuffleArray.js","../node_modules/tfjs-image-recognition-base/build/es6/ops/index.js","../node_modules/tfjs-image-recognition-base/build/es6/tinyYolov2/config.js","../node_modules/tfjs-image-recognition-base/build/es6/tinyYolov2/leaky.js","../node_modules/tfjs-image-recognition-base/build/es6/tinyYolov2/convWithBatchNorm.js","../node_modules/tfjs-image-recognition-base/build/es6/tinyYolov2/depthwiseSeparableConv.js","../node_modules/tfjs-image-recognition-base/build/es6/tinyYolov2/extractParams.js","../node_modules/tfjs-image-recognition-base/build/es6/tinyYolov2/extractParamsFromWeigthMap.js","../node_modules/tfjs-image-recognition-base/build/es6/tinyYolov2/TinyYolov2Options.js","../node_modules/tfjs-image-recognition-base/build/es6/tinyYolov2/TinyYolov2.js","../src/draw/drawContour.ts","../src/classes/FaceDetection.ts","../src/factories/WithFaceDetection.ts","../src/draw/drawDetections.ts","../src/common/depthwiseSeparableConv.ts","../src/faceFeatureExtractor/denseBlock.ts","../src/faceFeatureExtractor/extractorsFactory.ts","../src/faceFeatureExtractor/extractParams.ts","../src/common/loadConvParamsFactory.ts","../src/faceFeatureExtractor/loadParamsFactory.ts","../src/faceFeatureExtractor/extractParamsFromWeigthMap.ts","../src/faceFeatureExtractor/FaceFeatureExtractor.ts","../src/common/fullyConnectedLayer.ts","../src/faceProcessor/extractParams.ts","../src/faceProcessor/extractParamsFromWeigthMap.ts","../src/faceProcessor/util.ts","../src/faceProcessor/FaceProcessor.ts","../src/faceExpressionNet/FaceExpressions.ts","../src/faceExpressionNet/FaceExpressionNet.ts","../src/factories/WithFaceExpressions.ts","../src/draw/drawFaceExpressions.ts","../src/minBbox.ts","../src/classes/FaceLandmarks.ts","../src/classes/FaceLandmarks68.ts","../src/factories/WithFaceLandmarks.ts","../src/draw/DrawFaceLandmarks.ts","../src/xception/extractParams.ts","../src/xception/extractParamsFromWeigthMap.ts","../src/xception/TinyXception.ts","../src/ageGenderNet/extractParams.ts","../src/ageGenderNet/extractParamsFromWeigthMap.ts","../src/ageGenderNet/types.ts","../src/ageGenderNet/AgeGenderNet.ts","../src/classes/FaceLandmarks5.ts","../src/classes/FaceMatch.ts","../src/classes/LabeledFaceDescriptors.ts","../src/dom/extractFaces.ts","../src/dom/extractFaceTensors.ts","../src/faceLandmarkNet/FaceLandmark68NetBase.ts","../src/faceLandmarkNet/FaceLandmark68Net.ts","../src/faceFeatureExtractor/extractParamsFromWeigthMapTiny.ts","../src/faceFeatureExtractor/extractParamsTiny.ts","../src/faceFeatureExtractor/TinyFaceFeatureExtractor.ts","../src/faceLandmarkNet/FaceLandmark68TinyNet.ts","../src/faceLandmarkNet/index.ts","../src/faceRecognitionNet/scaleLayer.ts","../src/faceRecognitionNet/convLayer.ts","../src/faceRecognitionNet/extractParams.ts","../src/faceRecognitionNet/extractParamsFromWeigthMap.ts","../src/faceRecognitionNet/residualLayer.ts","../src/faceRecognitionNet/FaceRecognitionNet.ts","../src/faceRecognitionNet/index.ts","../src/factories/WithFaceDescriptor.ts","../src/factories/WithAge.ts","../src/factories/WithGender.ts","../src/mtcnn/MtcnnOptions.ts","../src/ssdMobilenetv1/extractParams.ts","../src/ssdMobilenetv1/extractParamsFromWeigthMap.ts","../src/ssdMobilenetv1/pointwiseConvLayer.ts","../src/ssdMobilenetv1/mobileNetV1.ts","../src/ssdMobilenetv1/nonMaxSuppression.ts","../src/ssdMobilenetv1/outputLayer.ts","../src/ssdMobilenetv1/boxPredictionLayer.ts","../src/ssdMobilenetv1/predictionLayer.ts","../src/ssdMobilenetv1/SsdMobilenetv1Options.ts","../src/ssdMobilenetv1/SsdMobilenetv1.ts","../src/ssdMobilenetv1/index.ts","../src/tinyFaceDetector/TinyFaceDetectorOptions.ts","../src/globalApi/ComposableTask.ts","../src/globalApi/extractFacesAndComputeResults.ts","../src/mtcnn/bgrToRgbTensor.ts","../src/mtcnn/config.ts","../src/mtcnn/extractParams.ts","../src/mtcnn/extractParamsFromWeigthMap.ts","../src/mtcnn/getSizesForScale.ts","../src/mtcnn/pyramidDown.ts","../src/mtcnn/MtcnnBox.ts","../src/mtcnn/normalize.ts","../src/mtcnn/prelu.ts","../src/mtcnn/sharedLayers.ts","../src/mtcnn/PNet.ts","../src/mtcnn/stage1.ts","../src/mtcnn/extractImagePatches.ts","../src/mtcnn/RNet.ts","../src/mtcnn/stage2.ts","../src/mtcnn/ONet.ts","../src/mtcnn/stage3.ts","../src/mtcnn/Mtcnn.ts","../src/tinyFaceDetector/const.ts","../src/tinyFaceDetector/TinyFaceDetector.ts","../src/tinyYolov2/const.ts","../src/tinyYolov2/TinyYolov2.ts","../src/tinyYolov2/index.ts","../src/globalApi/nets.ts","../src/globalApi/PredictFaceExpressionsTask.ts","../src/globalApi/PredictAgeAndGenderTask.ts","../src/globalApi/ComputeFaceDescriptorsTasks.ts","../src/globalApi/DetectFaceLandmarksTasks.ts","../src/globalApi/DetectFacesTasks.ts","../src/globalApi/detectFaces.ts","../src/globalApi/allFaces.ts","../src/euclideanDistance.ts","../src/globalApi/FaceMatcher.ts","../src/mtcnn/index.ts","../src/tinyFaceDetector/index.ts","../src/resizeResults.ts","../src/index.ts"],"sourcesContent":["/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nvar t=function(e,n){return(t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])})(e,n)};function e(e,n){function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}var n=function(){return(n=Object.assign||function(t){for(var e,n=1,r=arguments.length;n0&&o[o.length-1])&&(6===a[0]||2===a[0])){i=0;continue}if(3===a[0]&&(!o||a[1]>o[0]&&a[1]0;)r=Math.random()*e|0,n=t[--e],t[e]=t[r],t[r]=n}function h(t,e,n){return Math.max(t,Math.min(e,n))}function p(t){return t%2==0?t:t+1}function f(t){for(var e=0,n=0;n=n?o():setTimeout(i,s)}};i()})}function I(t,e){for(var n=1,r=-1,o=0;o=0)n*=t[o];else if(-1===t[o]){if(-1!==r)throw Error(\"Shapes can only have 1 implicit size. Found -1 at dim \"+r+\" and dim \"+o);r=o}else if(t[o]<0)throw Error(\"Shapes can not be < 0. Found \"+t[o]+\" at dim \"+o);if(-1===r){if(e>0&&e!==n)throw Error(\"Size(\"+e+\") must match the product of shape \"+t);return t}if(0===n)throw Error(\"Cannot infer the missing size in [\"+t+\"] when there are 0 elements\");if(e%n!=0)throw Error(\"The implicit shape can't be a fractional number. Got \"+e+\" / \"+n);var a=t.slice();return a[r]=e/n,a}function S(t,e){var n=e.length;return d((t=null==t?e.map(function(t,e){return e}):[].concat(t)).every(function(t){return t>=-n&&ti)&&1===t[i]&&(n.push(t[i]),r.push(i)),o[a]<=i&&a++}1!==t[i]&&(n.push(t[i]),r.push(i))}return{newShape:n,keptDims:r}}function k(t,e){var n=null;if(null==t||\"float32\"===t)n=new Float32Array(e);else if(\"int32\"===t)n=new Int32Array(e);else{if(\"bool\"!==t)throw new Error(\"Unknown data type \"+t);n=new Uint8Array(e)}return n}function A(t,e){var n=null;if(null==t||\"float32\"===t)n=new Float32Array(e);else if(\"int32\"===t)n=new Int32Array(e);else if(\"bool\"===t)n=new Uint8Array(e);else{if(\"string\"!==t)throw new Error(\"Unknown data type \"+t);n=new Array(e)}return n}function T(t,e,n){if(\"float32\"===e)for(var r=0;r=0;--r)n[r]=n[r+1]*t[r+1];return n}function q(t,e,n){if(\"string\"===e)throw new Error(\"Cannot convert a string[] to a TypedArray\");if(Array.isArray(t)&&(t=g(t)),n&&D(t,e),function(t,e){return t instanceof Float32Array&&\"float32\"===e||t instanceof Int32Array&&\"int32\"===e||t instanceof Uint8Array&&\"bool\"===e}(t,e))return t;if(null==e||\"float32\"===e||\"complex64\"===e)return new Float32Array(t);if(\"int32\"===e)return new Int32Array(t);if(\"bool\"===e){for(var r=new Uint8Array(t.length),o=0;o=0,function(){return\"Tensor must have a shape comprised of positive integers but got shape [\"+t+\"].\"})})}function Y(t,e){return s.platform.fetch(t,e)}var Q=Object.freeze({shuffle:c,clamp:h,nearestLargerEven:p,sum:f,randUniform:function(t,e){var n=Math.random();return e*n+(1-n)*t},distSquared:function(t,e){for(var n=0,r=0;r1)for(var l=0;ltt){var h=et*s,p=Array.from(e.slice(0,h)),f=Array.from(e.slice(u-et*s,u));return\"complex64\"===r&&(p=it(p),f=it(f)),[\"[\"+p.map(function(t,e){return ot(t,a[e],r)}).join(\", \")+\", ..., \"+f.map(function(t,e){return ot(t,a[u-et+e],r)}).join(\", \")+\"]\"]}var d=\"complex64\"===r?it(e):Array.from(e);return[\"[\"+d.map(function(t,e){return ot(t,a[e],r)}).join(\", \")+\"]\"]}var v=n.slice(1);var m=o.slice(1);var g=o[0]*s;var y=[];if(u>tt){for(var x=0;x=this.shape[n]){var i=\"Requested out of range element at \"+t+\". Buffer shape=\"+this.shape;throw new Error(i)}n++}for(var s=t[t.length-1],u=0;u0&&(t.unreliable=!0,null==t.reasons&&(t.reasons=[]),t.reasons.push(\"Memory usage by string tensors is approximate (2 bytes per character)\")),t},t.prototype.profile=function(t){return r(this,void 0,void 0,function(){var e,n;return o(this,function(r){return this.state.profiling=!0,e=this.state.numBytes,n=this.state.numTensors,this.state.activeProfile.kernels=[],this.state.activeProfile.result=t(),this.state.profiling=!1,this.state.activeProfile.peakBytes=Math.max.apply(Math,this.state.activeProfile.kernels.map(function(t){return t.totalBytesSnapshot})),this.state.activeProfile.newBytes=this.state.numBytes-e,this.state.activeProfile.newTensors=this.state.numTensors-n,[2,this.state.activeProfile]})})},t.prototype.isTapeOn=function(){return this.state.gradientDepth>0&&0===this.state.kernelDepth},t.prototype.addTapeNode=function(t,e,n){var r={};t.forEach(function(t,e){r[e]=t});var o={id:this.state.nextTapeNodeId++,name:this.state.activeScope.name,inputs:r,outputs:[e],gradient:function(t){var e=n(t),r={};return e.forEach(function(t,e){r[e]=function(){return t}}),r}};this.state.activeTape.push(o)},t.prototype.keep=function(t){return t.kept=!0,t},t.prototype.startTape=function(){0===this.state.gradientDepth&&(this.state.activeTape=[]),this.state.gradientDepth++},t.prototype.endTape=function(){this.state.gradientDepth--},t.prototype.startScope=function(t){var e={track:[],name:\"unnamed scope\",id:this.state.nextScopeId++};t&&(e.name=t),this.state.scopeStack.push(e),this.state.activeScope=e},t.prototype.endScope=function(t){for(var e=this,n=Rt(t),r=new Set(n.map(function(t){return t.id})),o=0;o0,function(){return\"gradients() received an empty list of xs.\"}),null!=n&&\"float32\"!==n.dtype)throw new Error(\"dy must have 'float32' dtype, but has '\"+n.dtype+\"'\");var a=this.scopedRun(function(){return o.startTape()},function(){return o.endTape()},function(){return o.tidy(\"forward\",t)});d(a instanceof ht,function(){return\"The result y returned by f() must be a tensor.\"});var i=function(t,e,n){for(var r={},o={},a=0;a=0;a--)for(i=(d=t[a]).inputs,c=0;c0)throw new Error(\"Cannot compute gradient of y=f(x) with respect to x. Make sure that the f you passed encloses all operations that lead from x to y.\");return this.tidy(\"backward\",function(){var t,r,s={};s[a.id]=null==n?(t=a.shape,r=$(y(t),\"float32\"),ht.make(t,{values:r})):n,function(t,e,n){for(var r=function(r){var o=e[r],a=[];if(o.outputs.forEach(function(e){var n=t[e.id];if(null!=n)a.push(n);else{var r=ht.make(e.shape,{values:j(e.size,e.dtype)},e.dtype);a.push(r)}}),null==o.gradient)throw new Error(\"Cannot compute gradient: gradient function not found for \"+o.name+\".\");var i=o.gradient(1===o.outputs.length?a[0]:a),s=function(e){if(!(e in i))throw new Error(\"Cannot backprop through input \"+e+\". Available gradients found: \"+Object.keys(i)+\".\");var r=n(function(){return i[e]()});if(\"float32\"!==r.dtype)throw new Error(\"Error in gradient for op \"+o.name+\". The gradient of input \"+e+\" must have 'float32' dtype, but has '\"+r.dtype+\"'\");var a=o.inputs[e];if(!x(r.shape,a.shape))throw new Error(\"Error in gradient for op \"+o.name+\". The gradient of input '\"+e+\"' has shape '\"+r.shape+\"', which does not match the shape of the input '\"+a.shape+\"'\");if(null==t[a.id])t[a.id]=r;else{var s=t[a.id];t[a.id]=s.add(r),s.dispose()}};for(var u in o.inputs)s(u)},o=e.length-1;o>=0;o--)r(o)}(s,i,function(t){return o.tidy(t)});var u=e.map(function(t){return s[t.id]});return 0===o.state.gradientDepth&&(o.state.activeTape.forEach(function(t){for(var e in t.saved)t.saved[e].dispose()}),o.state.activeTape=null),{value:a,grads:u}})},t.prototype.customGrad=function(t){var e=this;return d(z(t),function(){return\"The f passed in customGrad(f) must be a function.\"}),function(){for(var n,r=[],o=0;on||e>n){r=\"[\"+t+\"x\"+e+\"]\";throw new Error(\"Requested texture size \"+r+\" greater than WebGL maximum on this browser / GPU \"+(\"[\"+n+\"x\"+n+\"]\")+\".\")}}function Zt(t,e){return le(t,e,function(){return t.createFramebuffer()},\"Unable to create WebGLFramebuffer.\")}function te(t,e,n,r,o,a,i,s){var u=t.getAttribLocation(n,r);return-1!==u&&(Mt(t,e,function(){return t.bindBuffer(t.ARRAY_BUFFER,o)}),Mt(t,e,function(){return t.vertexAttribPointer(u,a,t.FLOAT,!1,i,s)}),Mt(t,e,function(){return t.enableVertexAttribArray(u)}),!0)}function ee(t,e,n,r){ce(t,r),Mt(t,e,function(){return t.activeTexture(t.TEXTURE0+r)}),Mt(t,e,function(){return t.bindTexture(t.TEXTURE_2D,n)})}function ne(t,e,n,r){return le(t,e,function(){return t.getUniformLocation(n,r)},'uniform \"'+r+'\" not present in program.')}function re(t,e,n){return t.getUniformLocation(e,n)}function oe(t,e,n,r,o,a){Mt(t,e,function(){return ee(t,e,r,a)}),Mt(t,e,function(){return t.uniform1i(o,a)})}function ae(t,e,n,r){Mt(t,e,function(){return t.bindFramebuffer(t.FRAMEBUFFER,r)}),Mt(t,e,function(){return t.framebufferTexture2D(t.FRAMEBUFFER,t.COLOR_ATTACHMENT0,t.TEXTURE_2D,n,0)})}function ie(t,e,n){Mt(t,e,function(){return t.bindFramebuffer(t.FRAMEBUFFER,n)}),Mt(t,e,function(){return t.framebufferTexture2D(t.FRAMEBUFFER,t.COLOR_ATTACHMENT0,t.TEXTURE_2D,null,0)})}function se(t){var e=t.checkFramebufferStatus(t.FRAMEBUFFER);if(e!==t.FRAMEBUFFER_COMPLETE)throw new Error(\"Error binding framebuffer: \"+ue(t,e))}function ue(t,e){switch(e){case t.FRAMEBUFFER_INCOMPLETE_ATTACHMENT:return\"FRAMEBUFFER_INCOMPLETE_ATTACHMENT\";case t.FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT:return\"FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT\";case t.FRAMEBUFFER_INCOMPLETE_DIMENSIONS:return\"FRAMEBUFFER_INCOMPLETE_DIMENSIONS\";case t.FRAMEBUFFER_UNSUPPORTED:return\"FRAMEBUFFER_UNSUPPORTED\";default:return\"unknown error \"+e}}function le(t,e,n,r){var o=Mt(t,e,function(){return n()});if(null==o)throw new Error(r);return o}function ce(t,e){var n=t.MAX_COMBINED_TEXTURE_IMAGE_UNITS-1,r=e+t.TEXTURE0;if(rn)throw new Error(\"textureUnit must be in \"+(\"[gl.TEXTURE0, gl.TEXTURE\"+n+\"]\")+\".\")}function he(t,e){return void 0===e&&(e=2),y(t.slice(0,t.length-e))}function pe(t){if(0===t.length)throw Error(\"Cannot get rows and columns of an empty shape array.\");return[t.length>1?t[t.length-2]:1,t[t.length-1]]}function fe(t){var e=[1,1,1];return 0===t.length||1===t.length&&1===t[0]||(e=[he(t)].concat(pe(t))),e}function de(t,e){var n;void 0===e&&(e=!1);var r=s.getNumber(\"WEBGL_MAX_TEXTURE_SIZE\");if(e&&(r*=2,1===(t=t.map(function(e,n){return n>=t.length-2?p(t[n]):t[n]})).length&&(t=[2,t[0]])),2!==t.length){var o=N(t);t=o.newShape}var a=y(t);if(t.length<=1&&a<=r)return[1,a];if(2===t.length&&t[0]<=r&&t[1]<=r)return t;if(3===t.length&&t[0]*t[1]<=r&&t[2]<=r)return[t[0]*t[1],t[2]];if(3===t.length&&t[0]<=r&&t[1]*t[2]<=r)return[t[0],t[1]*t[2]];if(4===t.length&&t[0]*t[1]*t[2]<=r&&t[3]<=r)return[t[0]*t[1]*t[2],t[3]];if(4===t.length&&t[0]<=r&&t[1]*t[2]*t[3]<=r)return[t[0],t[1]*t[2]*t[3]];if(e){var i=he(t),u=2,l=2;return t.length&&(u=(n=pe(t))[0],l=n[1]),C(a=i*(u/2)*(l/2)).map(function(t){return 2*t})}return C(a)}function ve(t){return t%2==0}function me(t,e){if(x(t=t.slice(-2),e=e.slice(-2)))return!0;if(!t.length||!e.length)return!0;if(0===t[0]||0===t[1]||0===e[0]||0===e[1])return!0;if(t.length!==e.length){var n=t.slice(-1)[0],r=e.slice(-1)[0];if(n===r)return!0;if(ve(n)&&ve(r)&&(1===t[0]||1===e[0]))return!0}return t[1]===e[1]&&ve(t[0])&&ve(e[0])}function ge(t){if(null==Gt){var e=Ft(t);Gt=e.getParameter(e.MAX_TEXTURE_SIZE)}return Gt}function ye(t){if(null==qt){var e=Ft(t);qt=e.getParameter(e.MAX_TEXTURE_IMAGE_UNITS)}return Math.min(16,qt)}function xe(t){if(0===t)return 0;var e=Ft(t);return be(e,\"EXT_disjoint_timer_query_webgl2\")&&2===t?2:be(e,\"EXT_disjoint_timer_query\")?1:0}function be(t,e){return null!=t.getExtension(e)}function we(t){try{if(null!=Ft(t))return!0}catch(t){return!1}return!1}function Ce(t){if(0===t)return!1;var e=Ft(t);if(1===t){if(!be(e,\"OES_texture_float\"))return!1}else if(!be(e,\"EXT_color_buffer_float\"))return!1;return Re(e,t)}function Ee(t){if(0===t)return!1;var e=Ft(t);if(1===t){if(!be(e,\"OES_texture_float\"))return!1;if(!be(e,\"WEBGL_color_buffer_float\"))return!1}else if(!be(e,\"EXT_color_buffer_float\"))return!1;return Re(e,t)}function Re(t,e){var n=t.createFramebuffer(),r=t.createTexture();t.bindTexture(t.TEXTURE_2D,r);var o=2===e?t.RGBA32F:t.RGBA;t.texImage2D(t.TEXTURE_2D,0,o,1,1,0,t.RGBA,t.FLOAT,null),t.bindFramebuffer(t.FRAMEBUFFER,n),t.framebufferTexture2D(t.FRAMEBUFFER,t.COLOR_ATTACHMENT0,t.TEXTURE_2D,r,0);var a=t.checkFramebufferStatus(t.FRAMEBUFFER)===t.FRAMEBUFFER_COMPLETE;return t.bindTexture(t.TEXTURE_2D,null),t.bindFramebuffer(t.FRAMEBUFFER,null),t.deleteTexture(r),t.deleteFramebuffer(n),a}function Ie(t){return 2===t&&null!=Ft(t).fenceSync}var Se=Object.freeze({callAndCheck:Mt,canBeRepresented:Lt,getWebGLErrorMessage:Wt,getExtensionOrThrow:Ut,createVertexShader:zt,createFragmentShader:Vt,createProgram:$t,linkProgram:jt,validateProgram:Kt,createStaticVertexBuffer:Xt,createStaticIndexBuffer:Yt,getNumChannels:function(){return 2===s.getNumber(\"WEBGL_VERSION\")?1:4},createTexture:Qt,validateTextureSize:Jt,createFramebuffer:Zt,bindVertexBufferToProgramAttribute:te,bindTextureUnit:ee,unbindTextureUnit:function(t,e,n){ce(t,n),Mt(t,e,function(){return t.activeTexture(t.TEXTURE0+n)}),Mt(t,e,function(){return t.bindTexture(t.TEXTURE_2D,null)})},getProgramUniformLocationOrThrow:ne,getProgramUniformLocation:re,bindTextureToProgramUniformSampler:oe,bindCanvasToFramebuffer:function(t,e){Mt(t,e,function(){return t.bindFramebuffer(t.FRAMEBUFFER,null)}),Mt(t,e,function(){return t.viewport(0,0,t.canvas.width,t.canvas.height)}),Mt(t,e,function(){return t.scissor(0,0,t.canvas.width,t.canvas.height)})},bindColorTextureToFramebuffer:ae,unbindColorTextureFromFramebuffer:ie,validateFramebuffer:se,getFramebufferErrorMessage:ue,getBatchDim:he,getRowsCols:pe,getShapeAs3D:fe,getTextureShapeFromLogicalShape:de,isReshapeFree:me,get MAX_TEXTURE_SIZE(){return Gt},get MAX_TEXTURES_IN_SHADER(){return qt},getWebGLMaxTextureSize:ge,getMaxTexturesInShader:ye,getWebGLDisjointQueryTimerVersion:xe,isWebGLVersionEnabled:we,isRenderToFloatTextureEnabled:Ce,isDownloadFloatTextureEnabled:Ee,isWebGLFenceEnabled:Ie});function Ne(){s.set(\"PROD\",!0)}function ke(){s.set(\"DEBUG\",!0)}function Ae(){s.set(\"DEPRECATION_WARNINGS_ENABLED\",!1),console.warn(\"TensorFlow.js deprecation warnings have been disabled.\")}function Te(t){s.getBool(\"DEPRECATION_WARNINGS_ENABLED\")&&console.warn(t+\" You can disable deprecation warnings with tf.disableDeprecationWarnings().\")}function De(){At.disposeVariables()}function _e(){return At.memory()}function Oe(t){return At.profile(t)}function Fe(t,e){return At.tidy(t,e)}function Me(t){Rt(t).forEach(function(t){return t.dispose()})}function Be(t){return At.keep(t)}function Pe(t){return At.time(t)}function Le(t){return At.setBackend(t)}function We(){return At.ready()}function Ue(){return At.backendName}function ze(t){At.removeBackend(t)}function Ve(t){return At.findBackend(t)}function Ge(t){return At.findBackendFactory(t)}function qe(t,e,n){return void 0===n&&(n=1),At.registerBackend(t,e,n)}function He(){return At.backend}function $e(t,e){s.setPlatform(t,e)}function je(){for(var t=[],e=0;e0,function(){return\"Element arr[\"+r.join(\"][\")+\"] should be a primitive, but is an array of \"+e.length+\" elements\"});d(e.length===n[0],function(){return\"Element arr[\"+r.join(\"][\")+\"] should have \"+n[0]+\" elements, but has \"+e.length+\" elements\"});var o=n.slice(1);for(var a=0;a=0&&(o=r),Xe(r,o,e,n),null==t||!F(t)&&!Array.isArray(t)&&\"number\"!=typeof t&&\"boolean\"!=typeof t&&\"string\"!=typeof t){var a=null==t?\"null\":t.constructor.name;throw new Error(\"Argument '\"+e+\"' passed to '\"+n+\"' must be a Tensor or TensorLike, but got '\"+a+\"'\")}var i=Ke(t);F(t)||Array.isArray(t)||(t=[t]);var u=\"string\"!==o?q(t,o,s.getBool(\"DEBUG\")):g(t);return ht.make(i,{values:u},o)}function Qe(t,e,n,r){if(void 0===r&&(r=\"numeric\"),!Array.isArray(t))throw new Error(\"Argument \"+e+\" passed to \"+n+\" must be a `Tensor[]` or `TensorLike[]`\");return t.map(function(t,r){return Ye(t,e+\"[\"+r+\"]\",n)},r)}function Je(t,e){for(var n=0;n=0&&e0}),s.registerFlag(\"WEBGL_VERSION\",function(){return we(2)?2:we(1)?1:0}),s.registerFlag(\"WEBGL_BUFFER_SUPPORTED\",function(){return 2===s.get(\"WEBGL_VERSION\")}),s.registerFlag(\"WEBGL_CPU_FORWARD\",function(){return!0}),s.registerFlag(\"WEBGL_PACK\",function(){return s.getBool(\"HAS_WEBGL\")}),s.registerFlag(\"WEBGL_PACK_NORMALIZATION\",function(){return s.getBool(\"WEBGL_PACK\")}),s.registerFlag(\"WEBGL_PACK_CLIP\",function(){return s.getBool(\"WEBGL_PACK\")}),s.registerFlag(\"WEBGL_PACK_DEPTHWISECONV\",function(){return!1}),s.registerFlag(\"WEBGL_PACK_BINARY_OPERATIONS\",function(){return s.getBool(\"WEBGL_PACK\")}),s.registerFlag(\"WEBGL_PACK_ARRAY_OPERATIONS\",function(){return s.getBool(\"WEBGL_PACK\")}),s.registerFlag(\"WEBGL_PACK_IMAGE_OPERATIONS\",function(){return s.getBool(\"WEBGL_PACK\")}),s.registerFlag(\"WEBGL_PACK_REDUCE\",function(){return s.getBool(\"WEBGL_PACK\")}),s.registerFlag(\"WEBGL_LAZILY_UNPACK\",function(){return s.getBool(\"WEBGL_PACK\")}),s.registerFlag(\"WEBGL_CONV_IM2COL\",function(){return s.getBool(\"WEBGL_PACK\")}),s.registerFlag(\"WEBGL_MAX_TEXTURE_SIZE\",function(){return ge(s.getNumber(\"WEBGL_VERSION\"))}),s.registerFlag(\"WEBGL_MAX_TEXTURES_IN_SHADER\",function(){return ye(s.getNumber(\"WEBGL_VERSION\"))}),s.registerFlag(\"WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION\",function(){var t=s.getNumber(\"WEBGL_VERSION\");return 0===t?0:xe(t)}),s.registerFlag(\"WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE\",function(){return s.getNumber(\"WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION\")>0&&(t=navigator.userAgent||navigator.vendor||window.opera,!(/(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(t)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\\-(n|u)|c55\\/|capi|ccwa|cdm\\-|cell|chtm|cldc|cmd\\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\\-s|devi|dica|dmob|do(c|p)o|ds(12|\\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\\-|_)|g1 u|g560|gene|gf\\-5|g\\-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd\\-(m|p|t)|hei\\-|hi(pt|ta)|hp( i|ip)|hs\\-c|ht(c(\\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\\-(20|go|ma)|i230|iac( |\\-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc\\-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|\\-[a-w])|libw|lynx|m1\\-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m\\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\\-2|po(ck|rt|se)|prox|psio|pt\\-g|qa\\-a|qc(07|12|21|32|60|\\-[2-7]|i\\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\\-|oo|p\\-)|sdk\\/|se(c(\\-|0|1)|47|mc|nd|ri)|sgh\\-|shar|sie(\\-|m)|sk\\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\\-|v\\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\\-|tdg\\-|tel(i|m)|tim\\-|t\\-mo|to(pl|sh)|ts(70|m\\-|m3|m5)|tx\\-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\\-|your|zeto|zte\\-/i.test(t.substr(0,4))));var t}),s.registerFlag(\"WEBGL_RENDER_FLOAT32_ENABLED\",function(){return Ce(s.getNumber(\"WEBGL_VERSION\"))}),s.registerFlag(\"WEBGL_DOWNLOAD_FLOAT_ENABLED\",function(){return Ee(s.getNumber(\"WEBGL_VERSION\"))}),s.registerFlag(\"WEBGL_FENCE_API_ENABLED\",function(){return Ie(s.getNumber(\"WEBGL_VERSION\"))}),s.registerFlag(\"WEBGL_SIZE_UPLOAD_UNIFORM\",function(){return s.getBool(\"WEBGL_RENDER_FLOAT32_ENABLED\")?4:0}),ct=Te;var cn=ln({complex_:function(t,e){var n=Ye(t,\"real\",\"complex\"),r=Ye(e,\"imag\",\"complex\");return v(n.shape,r.shape,\"real and imag shapes, \"+n.shape+\" and \"+r.shape+\", must match in call to tf.complex().\"),At.runKernel(function(t){return t.complex(n,r)},{$real:n,$imag:r})}}),hn=ln({real_:function(t){var e=Ye(t,\"input\",\"real\");return At.runKernel(function(t){return t.real(e)},{$input:e})}}),pn=ln({imag_:function(t){var e=Ye(t,\"input\",\"imag\");return At.runKernel(function(t){return t.imag(e)},{$input:e})}});function fn(t,e,n){return dn(t,e,Ke(t),n)}function dn(t,e,n,r){if(null==r&&(r=U(t)),\"complex64\"===r)throw new Error(\"Cannot construct a complex64 tensor directly. Please use tf.complex(real, imag).\");if(!F(t)&&!Array.isArray(t)&&\"number\"!=typeof t&&\"boolean\"!=typeof t&&\"string\"!=typeof t)throw new Error(\"values passed to tensor(values) must be a number/boolean/string or an array of numbers/booleans/strings, or a TypedArray\");if(null!=e){X(e);var o=y(e),a=y(n);d(o===a,function(){return\"Based on the provided shape, [\"+e+\"], the tensor should have \"+o+\" values but has \"+a});for(var i=0;i1)return En([0],r);var o=j(Math.abs(Math.ceil((e-t)/n)),r);e=1,function(){return\"Pass at least one tensor to concat\"});var n=Qe(t,\"tensors\",\"concat\");e=S(e,n[0].shape)[0];var r=un(n.map(function(t){return t.shape}),e);if(0===y(r))return fn([],r);if(1===(n=n.filter(function(t){return t.size>0})).length)return n[0];var o=n.map(function(t){return t.shape});sn(o,e);var a=n;return At.runKernel(function(t){return t.concat(n,e)},a,function(t){var n=o.map(function(t){return t[e]});return Fn(t,n,e).map(function(t){return function(){return t}})})}}),Tn=ln({concat1d_:function(t){return An(t,0)}}),Dn=ln({concat2d_:function(t,e){return An(t,e)}}),_n=ln({concat3d_:function(t,e){return An(t,e)}}),On=ln({concat4d_:function(t,e){return An(t,e)}}),Fn=ln({split_:function(t,e,n){void 0===n&&(n=0);var r,o=Ye(t,\"x\",\"split\");return n=S(n,o.shape)[0],\"number\"==typeof e?(d(o.shape[n]%e==0,function(){return\"Number of splits must evenly divide the axis.\"}),r=new Array(e).fill(o.shape[n]/e)):(d(o.shape[n]===e.reduce(function(t,e){return t+e}),function(){return\"The sum of sizes must match the size of the axis dimension.\"}),r=e),At.runKernel(function(t){return t.split(o,r,n)},{$x:o},function(t){return{$x:function(){return An(t,n)}}})}});\"undefined\"!=typeof globalThis?globalThis:\"undefined\"!=typeof window?window:\"undefined\"!=typeof global?global:\"undefined\"!=typeof self&&self;function Mn(t,e){return t(e={exports:{}},e.exports),e.exports}var Bn=Mn(function(t){!function(t,e,n){function r(t){var e,n=this,r=(e=4022871197,function(t){t=t.toString();for(var n=0;n>>0,e=(r*=e)>>>0,e+=4294967296*(r-=e)}return 2.3283064365386963e-10*(e>>>0)});n.next=function(){var t=2091639*n.s0+2.3283064365386963e-10*n.c;return n.s0=n.s1,n.s1=n.s2,n.s2=t-(n.c=0|t)},n.c=1,n.s0=r(\" \"),n.s1=r(\" \"),n.s2=r(\" \"),n.s0-=r(t),n.s0<0&&(n.s0+=1),n.s1-=r(t),n.s1<0&&(n.s1+=1),n.s2-=r(t),n.s2<0&&(n.s2+=1),r=null}function o(t,e){return e.c=t.c,e.s0=t.s0,e.s1=t.s1,e.s2=t.s2,e}function a(t,e){var n=new r(t),a=e&&e.state,i=n.next;return i.int32=function(){return 4294967296*n.next()|0},i.double=function(){return i()+1.1102230246251565e-16*(2097152*i()|0)},i.quick=i,a&&(\"object\"==typeof a&&o(a,n),i.state=function(){return o(n,{})}),i}e&&e.exports?e.exports=a:n&&n.amd?n(function(){return a}):this.alea=a}(0,t,!1)}),Pn=Mn(function(t){!function(t,e,n){function r(t){var e=this,n=\"\";e.x=0,e.y=0,e.z=0,e.w=0,e.next=function(){var t=e.x^e.x<<11;return e.x=e.y,e.y=e.z,e.z=e.w,e.w^=e.w>>>19^t^t>>>8},t===(0|t)?e.x=t:n+=t;for(var r=0;r>>0)/4294967296};return i.double=function(){do{var t=((n.next()>>>11)+(n.next()>>>0)/4294967296)/(1<<21)}while(0===t);return t},i.int32=n.next,i.quick=i,a&&(\"object\"==typeof a&&o(a,n),i.state=function(){return o(n,{})}),i}e&&e.exports?e.exports=a:n&&n.amd?n(function(){return a}):this.xor128=a}(0,t,!1)}),Ln=Mn(function(t){!function(t,e,n){function r(t){var e=this,n=\"\";e.next=function(){var t=e.x^e.x>>>2;return e.x=e.y,e.y=e.z,e.z=e.w,e.w=e.v,(e.d=e.d+362437|0)+(e.v=e.v^e.v<<4^t^t<<1)|0},e.x=0,e.y=0,e.z=0,e.w=0,e.v=0,t===(0|t)?e.x=t:n+=t;for(var r=0;r>>4),e.next()}function o(t,e){return e.x=t.x,e.y=t.y,e.z=t.z,e.w=t.w,e.v=t.v,e.d=t.d,e}function a(t,e){var n=new r(t),a=e&&e.state,i=function(){return(n.next()>>>0)/4294967296};return i.double=function(){do{var t=((n.next()>>>11)+(n.next()>>>0)/4294967296)/(1<<21)}while(0===t);return t},i.int32=n.next,i.quick=i,a&&(\"object\"==typeof a&&o(a,n),i.state=function(){return o(n,{})}),i}e&&e.exports?e.exports=a:n&&n.amd?n(function(){return a}):this.xorwow=a}(0,t,!1)}),Wn=Mn(function(t){!function(t,e,n){function r(t){var e=this;e.next=function(){var t,n,r=e.x,o=e.i;return t=r[o],n=(t^=t>>>7)^t<<24,n^=(t=r[o+1&7])^t>>>10,n^=(t=r[o+3&7])^t>>>3,n^=(t=r[o+4&7])^t<<7,t=r[o+7&7],n^=(t^=t<<13)^t<<9,r[o]=n,e.i=o+1&7,n},function(t,e){var n,r=[];if(e===(0|e))r[0]=e;else for(e=\"\"+e,n=0;n0;--n)t.next()}(e,t)}function o(t,e){return e.x=t.x.slice(),e.i=t.i,e}function a(t,e){null==t&&(t=+new Date);var n=new r(t),a=e&&e.state,i=function(){return(n.next()>>>0)/4294967296};return i.double=function(){do{var t=((n.next()>>>11)+(n.next()>>>0)/4294967296)/(1<<21)}while(0===t);return t},i.int32=n.next,i.quick=i,a&&(a.x&&o(a,n),i.state=function(){return o(n,{})}),i}e&&e.exports?e.exports=a:n&&n.amd?n(function(){return a}):this.xorshift7=a}(0,t,!1)}),Un=Mn(function(t){!function(t,e,n){function r(t){var e=this;e.next=function(){var t,n,r=e.w,o=e.X,a=e.i;return e.w=r=r+1640531527|0,n=o[a+34&127],t=o[a=a+1&127],n^=n<<13,t^=t<<17,n^=n>>>15,t^=t>>>12,n=o[a]=n^t,e.i=a,n+(r^r>>>16)|0},function(t,e){var n,r,o,a,i,s=[],u=128;for(e===(0|e)?(r=e,e=null):(e+=\"\\0\",r=0,u=Math.max(u,e.length)),o=0,a=-32;a>>15,r^=r<<4,r^=r>>>13,a>=0&&(i=i+1640531527|0,o=0==(n=s[127&a]^=r+i)?o+1:0);for(o>=128&&(s[127&(e&&e.length||0)]=-1),o=127,a=512;a>0;--a)r=s[o+34&127],n=s[o=o+1&127],r^=r<<13,n^=n<<17,r^=r>>>15,n^=n>>>12,s[o]=r^n;t.w=i,t.X=s,t.i=o}(e,t)}function o(t,e){return e.i=t.i,e.w=t.w,e.X=t.X.slice(),e}function a(t,e){null==t&&(t=+new Date);var n=new r(t),a=e&&e.state,i=function(){return(n.next()>>>0)/4294967296};return i.double=function(){do{var t=((n.next()>>>11)+(n.next()>>>0)/4294967296)/(1<<21)}while(0===t);return t},i.int32=n.next,i.quick=i,a&&(a.X&&o(a,n),i.state=function(){return o(n,{})}),i}e&&e.exports?e.exports=a:n&&n.amd?n(function(){return a}):this.xor4096=a}(0,t,!1)}),zn=Mn(function(t){!function(t,e,n){function r(t){var e=this,n=\"\";e.next=function(){var t=e.b,n=e.c,r=e.d,o=e.a;return t=t<<25^t>>>7^n,n=n-r|0,r=r<<24^r>>>8^o,o=o-t|0,e.b=t=t<<20^t>>>12^n,e.c=n=n-r|0,e.d=r<<16^n>>>16^o,e.a=o-t|0},e.a=0,e.b=0,e.c=-1640531527,e.d=1367130551,t===Math.floor(t)?(e.a=t/4294967296|0,e.b=0|t):n+=t;for(var r=0;r>>0)/4294967296};return i.double=function(){do{var t=((n.next()>>>11)+(n.next()>>>0)/4294967296)/(1<<21)}while(0===t);return t},i.int32=n.next,i.quick=i,a&&(\"object\"==typeof a&&o(a,n),i.state=function(){return o(n,{})}),i}e&&e.exports?e.exports=a:n&&n.amd?n(function(){return a}):this.tychei=a}(0,t,!1)}),Vn=Mn(function(t){!function(e,n){var r,o=this,a=256,i=6,s=\"random\",u=n.pow(a,i),l=n.pow(2,52),c=2*l,h=a-1;function p(t,h,p){var g=[],y=v(function t(e,n){var r,o=[],a=typeof e;if(n&&\"object\"==a)for(r in e)try{o.push(t(e[r],n-1))}catch(t){}return o.length?o:\"string\"==a?e:e+\"\\0\"}((h=1==h?{entropy:!0}:h||{}).entropy?[t,m(e)]:null==t?function(){try{var t;return r&&(t=r.randomBytes)?t=t(a):(t=new Uint8Array(a),(o.crypto||o.msCrypto).getRandomValues(t)),m(t)}catch(t){var n=o.navigator,i=n&&n.plugins;return[+new Date,o,i,o.screen,m(e)]}}():t,3),g),x=new f(g),b=function(){for(var t=x.g(i),e=u,n=0;t=c;)t/=2,e/=2,n>>>=1;return(t+n)/e};return b.int32=function(){return 0|x.g(4)},b.quick=function(){return x.g(4)/4294967296},b.double=b,v(m(x.S),e),(h.pass||p||function(t,e,r,o){return o&&(o.S&&d(o,x),t.state=function(){return d(x,{})}),r?(n[s]=t,e):t})(b,y,\"global\"in h?h.global:this==n,h.state)}function f(t){var e,n=t.length,r=this,o=0,i=r.i=r.j=0,s=r.S=[];for(n||(t=[n++]);o=1||0===i);var s=Math.sqrt(-2*Math.log(i)/i);e=this.mean+this.stdDev*o*s,n=this.mean+this.stdDev*a*s,this.truncated&&!this.isValidTruncated(e)||(r=!0)}return this.truncated&&!this.isValidTruncated(n)||(this.nextVal=this.convertValue(n)),this.convertValue(e)},t.prototype.convertValue=function(t){return null==this.dtype||\"float32\"===this.dtype?t:Math.round(t)},t.prototype.isValidTruncated=function(t){return t<=this.upper&&t>=this.lower},t}(),Hn=function(){function t(t,e,n,r){void 0===t&&(t=0),void 0===e&&(e=1);var o=this;if(this.canReturnFloat=function(){return null==o.dtype||\"float32\"===o.dtype},this.min=t,this.range=e-t,this.dtype=n,null==r&&(r=Math.random()),\"number\"==typeof r&&(r=r.toString()),!this.canReturnFloat()&&this.range<=1)throw new Error(\"The difference between \"+t+\" - \"+e+\" <= 1 and dtype is not float\");this.random=Gn(r)}return t.prototype.convertValue=function(t){return this.canReturnFloat()?t:Math.round(t)},t.prototype.nextValue=function(){return this.convertValue(this.min+this.range*this.random())},t}();function $n(t,e,n){return void 0===e&&(e=\"float32\"),e=e||\"float32\",X(t),new st(t,e,n)}function jn(t,e){void 0===e&&(e=!1),console.log(t.toString(e))}var Kn=ln({batchToSpaceND_:function(t,e,n){var r=Ye(t,\"x\",\"batchToSpaceND\"),o=e.reduce(function(t,e){return t*e});return d(r.rank>=1+e.length,function(){return\"input rank is \"+r.rank+\" but should be > than blockShape.length \"+e.length}),d(n.length===e.length,function(){return\"crops.length is \"+n.length+\" but should be equal to blockShape.length \"+e.length}),d(r.shape[0]%o==0,function(){return\"input tensor batch is \"+r.shape[0]+\" but is not divisible by the product of the elements of blockShape \"+e.join(\" * \")+\" === \"+o}),At.runKernel(function(t){return t.batchToSpaceND(r,e,n)},{$x:r},function(t){return{$x:function(){return t.spaceToBatchND(e,n)}}})}}),Xn=ln({cast_:function(t,e){var n=Ye(t,\"x\",\"cast\");if(!_(e))throw new Error(\"Failed to cast to unknown dtype \"+e);if(\"string\"===e&&\"string\"!==n.dtype||\"string\"!==e&&\"string\"===n.dtype)throw new Error(\"Only strings can be casted to strings\");return At.runKernel(function(t){return t.cast(n,e)},{$x:n},function(t){return{$x:function(){return t.clone()}}})}}),Yn=ln({clone_:function(t){var e=Ye(t,\"x\",\"clone\",null);return At.runKernel(function(t){return ht.make(e.shape,{dataId:e.dataId},e.dtype)},{$x:e},function(t){return{$x:function(){return t.toFloat()}}})}}),Qn=ln({cumsum_:function(t,e,n,r){void 0===e&&(e=0),void 0===n&&(n=!1),void 0===r&&(r=!1);var o=Ye(t,\"x\",\"cumsum\"),a=rn([e|=0],o.rank),i=o;null!=a&&(i=o.transpose(a));var s=an(1,o.rank)[0],u=At.runKernel(function(t){return t.cumsum(i,s,n,r)},{permutedX:i},function(t){return{permutedX:function(){return t.cumsum(e,n,!r)}}});return null!=a&&(u=u.transpose(a)),u}}),Jn=ln({depthToSpace_:function(t,e,n){void 0===n&&(n=\"NHWC\");var r=Ye(t,\"x\",\"depthToSpace\"),o=\"NHWC\"===n?r.shape[1]:r.shape[2],a=\"NHWC\"===n?r.shape[2]:r.shape[3],i=\"NHWC\"===n?r.shape[3]:r.shape[1];return d(o*e>=0,function(){return\"Negative dimension size caused by overflow when multiplying\\n \"+o+\" and \"+e+\" for depthToSpace with input shape\\n \"+r.shape}),d(a*e>=0,function(){return\"Negative dimension size caused by overflow when multiplying\\n \"+a+\" and \"+e+\" for depthToSpace with input shape\\n \"+r.shape}),d(i%(e*e)==0,function(){return\"Dimension size must be evenly divisible by \"+e*e+\" but is \"+i+\" for depthToSpace with input shape \"+r.shape}),At.runKernel(function(t){return t.depthToSpace(r,e,n)},{$x:r})}}),Zn=ln({expandDims_:function(t,e){void 0===e&&(e=0);var n=Ye(t,\"x\",\"expandDims\",null);d(e<=n.rank,function(){return\"Axis must be <= rank of the tensor\"});var r=n.shape.slice();return e<0&&(d(-(n.rank+1)<=e,function(){return\"Axis must be in the interval [\"+-(n.rank+1)+\", \"+n.rank+\"]\"}),e=n.rank+e+1),r.splice(e,0,1),hr(n,r)}}),tr=ln({eye_:function(t,e,n,r){void 0===r&&(r=\"float32\"),null==e&&(e=t);for(var o=$n([t,e],r),a=t<=e?t:e,i=0;i2)throw new Error(\"Rank of probabilities must be 1 or 2, but is \"+i);n=n||Math.random();var s=1===i?o.as2D(1,-1):o,u=At.runKernel(function(t){return t.multinomial(s,r,e,n)},{logits2D:s});return 1===i?u.as1D():u}}),nr=ln({oneHot_:function(t,e,n,r){if(void 0===n&&(n=1),void 0===r&&(r=0),e<2)throw new Error(\"Error in oneHot: depth must be >=2, but it is \"+e);var o=Ye(t,\"indices\",\"oneHot\",\"int32\"),a=o.shape.concat([e]);return o=o.flatten(),At.runKernel(function(t){return t.oneHot(o,e,n,r)},{$indices:o},function(t){return{$indices:function(){return En(o.shape,\"float32\")}}}).reshape(a)}}),rr=ln({pad_:function(t,e,n){void 0===n&&(n=0);var r=Ye(t,\"x\",\"pad\");if(0===r.rank)throw new Error(\"pad(scalar) is not defined. Pass non-scalar to pad\");var o=e.map(function(t){return t[0]});return At.runKernel(function(t){return t.pad(r,e,n)},{$x:r},function(t){return{$x:function(){return t.slice(o,r.shape)}}})}}),or=ln({pad1d_:function(t,e,n){return void 0===n&&(n=0),d(2===e.length,function(){return\"Invalid number of paddings. Must be length of 2.\"}),rr(t,[e],n)}}),ar=ln({pad2d_:function(t,e,n){return void 0===n&&(n=0),d(2===e.length&&2===e[0].length&&2===e[1].length,function(){return\"Invalid number of paddings. Must be length of 2 each.\"}),rr(t,e,n)}}),ir=ln({pad3d_:function(t,e,n){return void 0===n&&(n=0),d(3===e.length&&2===e[0].length&&2===e[1].length&&2===e[2].length,function(){return\"Invalid number of paddings. Must be length of 2 each.\"}),rr(t,e,n)}}),sr=ln({pad4d_:function(t,e,n){return void 0===n&&(n=0),d(4===e.length&&2===e[0].length&&2===e[1].length&&2===e[2].length&&2===e[3].length,function(){return\"Invalid number of paddings. Must be length of 2 each.\"}),rr(t,e,n)}}),ur=ln({rand_:function(t,e,n){var r=y(t),o=null;if(null==n||\"float32\"===n)o=new Float32Array(r);else if(\"int32\"===n)o=new Int32Array(r);else{if(\"bool\"!==n)throw new Error(\"Unknown data type \"+n);o=new Uint8Array(r)}for(var a=0;a=1+e.length,function(){return\"input rank \"+r.rank+\" should be > than [blockShape] \"+e.length}),d(n.length===e.length,function(){return\"paddings.shape[0] \"+n.length+\" must be equal to [blockShape] \"+e.length}),d(r.shape.reduce(function(t,r,o){return o>0&&o<=e.length?t&&(r+n[o-1][0]+n[o-1][1])%e[o-1]==0:t},!0),function(){return\"input spatial dimensions \"+r.shape.slice(1)+\" with paddings \"+n.toString()+\" must be divisible by blockShapes \"+e.toString()}),At.runKernel(function(t){return t.spaceToBatchND(r,e,n)},{$x:r},function(t){return{$x:function(){return t.batchToSpaceND(e,n)}}})}}),fr=ln({squeeze_:function(t,e){var n=Ye(t,\"x\",\"squeeze\");return hr(n,N(n.shape,e).newShape)}}),dr=ln({stack_:function(t,e){void 0===e&&(e=0);var n=Qe(t,\"tensors\",\"stack\");if(d(n.length>=1,function(){return\"Pass at least one tensor to tf.stack\"}),1===n.length)return n[0].expandDims(e);var r=n[0].rank,o=n[0].shape,a=n[0].dtype;d(e<=r,function(){return\"Axis must be <= rank of the tensor\"}),n.forEach(function(t){v(o,t.shape,\"All tensors passed to stack must have matching shapes\")}),n.forEach(function(t){d(a===t.dtype,function(){return\"All tensors passed to stack must have matching dtypes\"})});var i=n.map(function(t){return t.expandDims(e)});return An(i,e)}}),vr=ln({tile_:function(t,e){var n=Ye(t,\"x\",\"tile\",null);return d(n.rank===e.length,function(){return\"Error in transpose: rank of input \"+n.rank+\" must match length of reps \"+e+\".\"}),At.runKernel(function(t,r){var o=t.tile(n,e);return r([n]),o},{$x:n},function(t,n){var r=n[0];return{$x:function(){var n=kn(r);if(1===r.rank)for(var o=0;o=-n.shape.length&&e=2*e+1||o%2==1?i.push(o):a.push(o);r.push.apply(r,a),r.push(0),r.push.apply(r,i)}return r}function wr(t,e,n,r){void 0===r&&(r=!0);var o=[];r?o.push(t[0]/n):o.push(t[0]*n);for(var a=1;at.rank)throw new Error(\"index innermost dimension length must be <= tensor rank; saw: \"+e.shape[e.rank-1]+\" vs. \"+t.rank);if(0===t.size)throw new Error(\"Requested more than 0 entries, but input is empty. Input shape: \"+t.shape+\".\");for(var n=e.shape,r=n[n.length-1],o=1,a=0;a1?e.shape[e.rank-1]:1,o=e.rank>1?e.rank-1:1,a=\"Must have updates.shape = indices.shape[:batchDim] + shape[sliceDim:], got updates.shape: \"+n.shape+\", indices.shape: \"+e.shape+\", shape: \"+t+\", sliceDim: \"+r+\", and batchDim: \"+o+\".\";if(n.rank1?e.shape[e.rank-1]:1,o=n.length,a=1,i=r;i0?a>=c[e]:a<=c[e]);a+=o)n+=1;return n}),[l,f,h]}function Tr(t,e,n,r,o){var a=e[o],i=n[o]||1;(t&1<0?Number.MIN_SAFE_INTEGER:Number.MAX_SAFE_INTEGER);var s=r[o];return a<0&&(a+=s),a=h(0,a,s-1)}function Dr(t,e,n,r,o){var a=e[o],i=n[o]||1;(t&1<0?Number.MAX_SAFE_INTEGER:Number.MIN_SAFE_INTEGER);var s=r[o];return a<0&&(a+=s),a=i>0?h(0,a,s):h(-1,a,s-1)}function _r(t,e,n){for(var r=n.length,o=0;o1){r=o;break}for(o=r+1;o0||n[o]!==t[o])return!1;return!0}function Or(t,e){for(var n=t.length>0?t[t.length-1]:1,r=0;r0,function(){return\"variableGrads() expects at least one of the input variables to be trainable, but none of the \"+a+\" variables is trainable.\"});var i=At.gradients(t,e,null,!0),s=i.value,u=i.grads;d(u.some(function(t){return null!=t}),function(){return\"Cannot find a connection between any variable and the result of the loss function y=f(x). Please make sure the operations that use variables are inside the function f passed to minimize().\"}),d(0===s.rank,function(){return\"The f passed in variableGrads(f) must return a scalar, but it returned a rank-\"+s.rank+\" tensor\"});var l={};return e.forEach(function(t,e){null!=u[e]&&(l[t.name]=u[e])}),null!=o&&o.forEach(function(t){return l[t.name]=null}),{value:s,grads:l}}function Wr(t){return At.customGrad(t)}function Ur(t){if(t.filter(function(t){return null==t}).length>0)throw new Error(\"Cannot compute gradient of y=f(x) with respect to x. Make sure that\\n the f you passed encloses all operations that lead from x to y.\")}var zr=ln({softmax_:function(t,e){void 0===e&&(e=-1);var n=Ye(t,\"logits\",\"softmax\");if(-1===e&&(e=n.rank-1),e!==n.rank-1)throw Error(\"Softmax along a non-last dimension is not yet supported. Logits was rank \"+n.rank+\" and dim was \"+e);return Wr(function(t,n){var r=t.logSumExp([e],!0),o=t.toFloat().sub(r).exp();return n([o]),{value:o,gradFunc:function(t,n){var r=n[0],o=t.mul(r);return o.sub(o.sum([e],!0).mul(r))}}})(n)}}),Vr=ln({logSoftmax_:function(t,e){void 0===e&&(e=-1);var n=Ye(t,\"logits\",\"logSoftmax\");if(-1===e&&(e=n.rank-1),e!==n.rank-1)throw Error(\"Log Softmax along a non-last dimension is not yet supported. Logits was rank \"+n.rank+\" and axis was \"+e);return Wr(function(t,n){var r=t.max(e,!0),o=t.sub(r),a=o.toFloat().sub(o.exp().sum(e,!0).log());return n([a]),{value:a,gradFunc:function(t,n){var r=n[0].exp();return t.sub(t.sum(e,!0).mul(r))}}})(n)}}),Gr=function(){function t(t,e){this.backend=t,this.dataMover=e,this.data=new WeakMap}return t.prototype.get=function(t){return this.data.has(t)||this.dataMover.moveData(this.backend,t),this.data.get(t)},t.prototype.set=function(t,e){this.data.set(t,e)},t.prototype.has=function(t){return this.data.has(t)},t.prototype.delete=function(t){return this.data.delete(t)},t}(),qr=function(){function t(){}return t.prototype.time=function(t){throw new Error(\"Not yet implemented.\")},t.prototype.read=function(t){throw new Error(\"Not yet implemented.\")},t.prototype.readSync=function(t){throw new Error(\"Not yet implemented.\")},t.prototype.disposeData=function(t){throw new Error(\"Not yet implemented.\")},t.prototype.write=function(t,e){throw new Error(\"Not yet implemented.\")},t.prototype.fromPixels=function(t,e){throw new Error(\"Not yet implemented.\")},t.prototype.register=function(t,e,n){throw new Error(\"Not yet implemented.\")},t.prototype.memory=function(){throw new Error(\"Not yet implemented.\")},t.prototype.floatPrecision=function(){throw new Error(\"Not yet implemented\")},t.prototype.epsilon=function(){return 32===this.floatPrecision()?1e-7:1e-4},t.prototype.batchMatMul=function(t,e,n,r){throw new Error(\"Not yet implemented\")},t.prototype.fusedBatchMatMul=function(t,e,n,r,o,a){throw new Error(\"Not yet implemented\")},t.prototype.slice=function(t,e,n){throw new Error(\"Not yet implemented\")},t.prototype.stridedSlice=function(t,e,n,r,o,a,i,s,u){throw new Error(\"Not yet implemented\")},t.prototype.unstack=function(t,e){throw new Error(\"Not yet implemented\")},t.prototype.reverse=function(t,e){throw new Error(\"Not yet implemented\")},t.prototype.concat=function(t,e){throw new Error(\"Not yet implemented\")},t.prototype.neg=function(t){throw new Error(\"Not yet implemented\")},t.prototype.add=function(t,e){throw new Error(\"Not yet implemented\")},t.prototype.addN=function(t){throw new Error(\"Not yet implemented\")},t.prototype.subtract=function(t,e){throw new Error(\"Not yet implemented\")},t.prototype.multiply=function(t,e){throw new Error(\"Not yet implemented\")},t.prototype.realDivide=function(t,e){throw new Error(\"Not yet implemented\")},t.prototype.floorDiv=function(t,e){throw new Error(\"Not yet implemented\")},t.prototype.sum=function(t,e){throw new Error(\"Not yet implemented\")},t.prototype.prod=function(t,e){throw new Error(\"Not yet implemented\")},t.prototype.unsortedSegmentSum=function(t,e,n){throw new Error(\"Not yet implemented\")},t.prototype.argMin=function(t,e){throw new Error(\"Not yet implemented\")},t.prototype.argMax=function(t,e){throw new Error(\"Not yet implemented\")},t.prototype.equal=function(t,e){throw new Error(\"Not yet implemented\")},t.prototype.notEqual=function(t,e){throw new Error(\"Not yet implemented\")},t.prototype.less=function(t,e){throw new Error(\"Not yet implemented\")},t.prototype.lessEqual=function(t,e){throw new Error(\"Not yet implemented\")},t.prototype.greater=function(t,e){throw new Error(\"Not yet implemented\")},t.prototype.greaterEqual=function(t,e){throw new Error(\"Not yet implemented\")},t.prototype.logicalNot=function(t){throw new Error(\"Not yet implemented\")},t.prototype.logicalAnd=function(t,e){throw new Error(\"Not yet implemented\")},t.prototype.logicalOr=function(t,e){throw new Error(\"Not yet implemented\")},t.prototype.where=function(t){throw new Error(\"Not yet implemented\")},t.prototype.select=function(t,e,n){throw new Error(\"Not yet implemented\")},t.prototype.topk=function(t,e,n){throw new Error(\"Not yet implemented\")},t.prototype.min=function(t,e){throw new Error(\"Not yet implemented\")},t.prototype.minimum=function(t,e){throw new Error(\"Not yet implemented\")},t.prototype.mod=function(t,e){throw new Error(\"Not yet implemented\")},t.prototype.max=function(t,e){throw new Error(\"Not yet implemented\")},t.prototype.maximum=function(t,e){throw new Error(\"Not yet implemented\")},t.prototype.all=function(t,e){throw new Error(\"Not yet implemented\")},t.prototype.any=function(t,e){throw new Error(\"Not yet implemented\")},t.prototype.squaredDifference=function(t,e){throw new Error(\"Not yet implemented\")},t.prototype.ceil=function(t){throw new Error(\"Not yet implemented\")},t.prototype.floor=function(t){throw new Error(\"Not yet implemented\")},t.prototype.round=function(t){throw new Error(\"Not yet implemented\")},t.prototype.sign=function(t){throw new Error(\"Not yet implemented\")},t.prototype.isNaN=function(t){throw new Error(\"Not yet implemented\")},t.prototype.isInf=function(t){throw new Error(\"Not yet implemented\")},t.prototype.isFinite=function(t){throw new Error(\"Not yet implemented\")},t.prototype.pow=function(t,e){throw new Error(\"Not yet implemented\")},t.prototype.exp=function(t){throw new Error(\"Not yet implemented\")},t.prototype.expm1=function(t){throw new Error(\"Not yet implemented\")},t.prototype.log=function(t){throw new Error(\"Not yet implemented\")},t.prototype.log1p=function(t){throw new Error(\"Not yet implemented\")},t.prototype.sqrt=function(t){throw new Error(\"Not yet implemented\")},t.prototype.rsqrt=function(t){throw new Error(\"Not yet implemented\")},t.prototype.square=function(t){throw new Error(\"Not yet implemented\")},t.prototype.reciprocal=function(t){throw new Error(\"Not yet implemented\")},t.prototype.relu=function(t){throw new Error(\"Not yet implemented\")},t.prototype.prelu=function(t,e){throw new Error(\"Not yet implemented\")},t.prototype.elu=function(t){throw new Error(\"Not yet implemented\")},t.prototype.eluDer=function(t,e){throw new Error(\"Not yet implemented\")},t.prototype.selu=function(t){throw new Error(\"Not yet implemented\")},t.prototype.int=function(t){throw new Error(\"Not yet implemented\")},t.prototype.clip=function(t,e,n){throw new Error(\"Not yet implemented\")},t.prototype.abs=function(t){throw new Error(\"Not yet implemented\")},t.prototype.complexAbs=function(t){throw new Error(\"Not yet implemented\")},t.prototype.sigmoid=function(t){throw new Error(\"Not yet implemented\")},t.prototype.softplus=function(t){throw new Error(\"Not yet implemented\")},t.prototype.sin=function(t){throw new Error(\"Not yet implemented\")},t.prototype.cos=function(t){throw new Error(\"Not yet implemented\")},t.prototype.tan=function(t){throw new Error(\"Not yet implemented\")},t.prototype.asin=function(t){throw new Error(\"Not yet implemented\")},t.prototype.acos=function(t){throw new Error(\"Not yet implemented\")},t.prototype.atan=function(t){throw new Error(\"Not yet implemented\")},t.prototype.atan2=function(t,e){throw new Error(\"Not yet implemented\")},t.prototype.sinh=function(t){throw new Error(\"Not yet implemented\")},t.prototype.cosh=function(t){throw new Error(\"Not yet implemented\")},t.prototype.tanh=function(t){throw new Error(\"Not yet implemented\")},t.prototype.asinh=function(t){throw new Error(\"Not yet implemented\")},t.prototype.acosh=function(t){throw new Error(\"Not yet implemented\")},t.prototype.atanh=function(t){throw new Error(\"Not yet implemented\")},t.prototype.erf=function(t){throw new Error(\"Not yet implemented\")},t.prototype.step=function(t,e){throw new Error(\"Not yet implemented\")},t.prototype.conv2d=function(t,e,n){throw new Error(\"Not yet implemented\")},t.prototype.conv2dDerInput=function(t,e,n){throw new Error(\"Not yet implemented\")},t.prototype.conv2dDerFilter=function(t,e,n){throw new Error(\"Not yet implemented\")},t.prototype.depthwiseConv2D=function(t,e,n){throw new Error(\"Not yet implemented\")},t.prototype.depthwiseConv2DDerInput=function(t,e,n){throw new Error(\"Not yet implemented\")},t.prototype.depthwiseConv2DDerFilter=function(t,e,n){throw new Error(\"Not yet implemented\")},t.prototype.conv3d=function(t,e,n){throw new Error(\"Not yet implemented\")},t.prototype.conv3dDerInput=function(t,e,n){throw new Error(\"Not yet implemented\")},t.prototype.conv3dDerFilter=function(t,e,n){throw new Error(\"Not yet implemented\")},t.prototype.maxPool=function(t,e){throw new Error(\"Not yet implemented\")},t.prototype.maxPoolBackprop=function(t,e,n,r){throw new Error(\"Not yet implemented\")},t.prototype.avgPool=function(t,e){throw new Error(\"Not yet implemented\")},t.prototype.avgPoolBackprop=function(t,e,n){throw new Error(\"Not yet implemented\")},t.prototype.reshape=function(t,e){throw new Error(\"Not yet implemented\")},t.prototype.cast=function(t,e){throw new Error(\"Not yet implemented\")},t.prototype.tile=function(t,e){throw new Error(\"Not yet implemented\")},t.prototype.pad=function(t,e,n){throw new Error(\"Not yet implemented\")},t.prototype.transpose=function(t,e){throw new Error(\"Not yet implemented\")},t.prototype.gather=function(t,e,n){throw new Error(\"Not yet implemented\")},t.prototype.gatherND=function(t,e){throw new Error(\"Not yet implemented\")},t.prototype.scatterND=function(t,e,n){throw new Error(\"Not yet implemented\")},t.prototype.batchToSpaceND=function(t,e,n){throw new Error(\"Not yet implemented\")},t.prototype.spaceToBatchND=function(t,e,n){throw new Error(\"Not yet implemented\")},t.prototype.resizeBilinear=function(t,e,n,r){throw new Error(\"Not yet implemented\")},t.prototype.resizeBilinearBackprop=function(t,e,n){throw new Error(\"Not yet implemented\")},t.prototype.resizeNearestNeighbor=function(t,e,n,r){throw new Error(\"Not yet implemented\")},t.prototype.resizeNearestNeighborBackprop=function(t,e,n){throw new Error(\"Not yet implemented\")},t.prototype.batchNormalization=function(t,e,n,r,o,a){throw new Error(\"Not yet implemented\")},t.prototype.localResponseNormalization4D=function(t,e,n,r,o){throw new Error(\"Not yet implemented\")},t.prototype.LRNGrad=function(t,e,n,r,o,a,i){throw new Error(\"Not yet implemented\")},t.prototype.multinomial=function(t,e,n,r){throw new Error(\"Not yet implemented\")},t.prototype.oneHot=function(t,e,n,r){throw new Error(\"Not yet implemented\")},t.prototype.cumsum=function(t,e,n,r){throw new Error(\"Not yet implemented\")},t.prototype.nonMaxSuppression=function(t,e,n,r,o){throw new Error(\"Not yet implemented\")},t.prototype.fft=function(t){throw new Error(\"Not yet implemented\")},t.prototype.ifft=function(t){throw new Error(\"Not yet implemented\")},t.prototype.complex=function(t,e){throw new Error(\"Not yet implemented\")},t.prototype.real=function(t){throw new Error(\"Not yet implemented\")},t.prototype.imag=function(t){throw new Error(\"Not yet implemented\")},t.prototype.cropAndResize=function(t,e,n,r,o,a){throw new Error(\"Not yet implemented\")},t.prototype.depthToSpace=function(t,e,n){throw new Error(\"Not yet implemented\")},t.prototype.split=function(t,e,n){throw new Error(\"Not yet implemented\")},t.prototype.sparseToDense=function(t,e,n,r){throw new Error(\"Not yet implemented\")},t.prototype.fill=function(t,e,n){throw new Error(\"Not yet implemented.\")},t.prototype.onesLike=function(t){throw new Error(\"Not yet implemented\")},t.prototype.zerosLike=function(t){throw new Error(\"Not yet implemented\")},t.prototype.linspace=function(t,e,n){throw new Error(\"Not yet implemented\")},t.prototype.dispose=function(){throw new Error(\"Not yet implemented\")},t}();function Hr(t,e){for(var n=t.length,r=[],o=0;o1&&1===i&&r.unshift(a)}return r}function $r(t,e){for(var n=[],r=0;r1)&&n.unshift(a)}return n}function jr(t,e){for(var n=[],r=Math.max(t.length,e.length),o=0;oo}).sort(function(t,e){return e.score-t.score}),i=[],s=0;s=0;--p){if(fo(t,c,i[p])>=r){h=!0;break}}if(!h&&(i.push(c),i.length>=n))break}return mn(i,\"int32\")}function fo(t,e,n){var r=t.subarray(4*e,4*e+4),o=t.subarray(4*n,4*n+4),a=Math.min(r[0],r[2]),i=Math.min(r[1],r[3]),s=Math.max(r[0],r[2]),u=Math.max(r[1],r[3]),l=Math.min(o[0],o[2]),c=Math.min(o[1],o[3]),h=Math.max(o[0],o[2]),p=Math.max(o[1],o[3]),f=(s-a)*(u-i),d=(h-l)*(p-c);if(f<=0||d<=0)return 0;var v=Math.max(a,l),m=Math.max(i,c),g=Math.min(s,h),y=Math.min(u,p),x=Math.max(g-v,0)*Math.max(y-m,0);return x/(f+d-x)}function vo(t,e,n){var r=new Array(t.rank).fill(0),o=t.shape.slice();return e.map(function(e){o[n]=e;var a=t.slice(r,o);return r[n]+=e,a})}function mo(t,e){for(var n=new Array(t.rank),r=0;r\":\"<\",u=n?\"inOffset + i;\":\"round(getBestIndicesA(batch, inOffset + i));\";this.userCode=\"\\n void main() {\\n ivec2 coords = getOutputCoords();\\n int batch = coords[0];\\n int outIdx = coords[1];\\n int inOffset = outIdx * \"+r+\";\\n\\n int bestIndex = inOffset;\\n float bestValue = getA(batch, bestIndex);\\n\\n for (int i = 0; i < \"+r+\"; i++) {\\n int inIdx = \"+u+\";\\n float candidate = getA(batch, inIdx);\\n if (candidate \"+s+\" bestValue) {\\n bestValue = candidate;\\n bestIndex = inIdx;\\n }\\n }\\n setOutput(float(bestIndex));\\n }\\n \"}}();function Co(t,e){return[\"x\",\"y\",\"z\",\"w\",\"u\",\"v\"].slice(0,e).map(function(e){return t+\".\"+e})}function Eo(t,e){return 1===e?[t]:Co(t,e)}function Ro(){var t,e,n,r,o,a,i,u,l,c;return 2===s.getNumber(\"WEBGL_VERSION\")?(t=\"#version 300 es\",e=\"in\",n=\"out\",r=\"in\",o=\"texture\",a=\"outputColor\",i=\"out vec4 outputColor;\",u=\"\\n bool isnan_custom(float val) {\\n return (val > 0. || val < 0. || val == 0.) ? false : true;\\n }\\n \",l=\"\\n const float INFINITY = uintBitsToFloat(uint(0x7f800000));\\n \",c=\"\\n #define round(value) newRound(value)\\n int newRound(float value) {\\n return int(floor(value + 0.5));\\n }\\n\\n ivec4 newRound(vec4 value) {\\n return ivec4(floor(value + vec4(0.5)));\\n }\\n \"):(t=\"\",e=\"attribute\",n=\"varying\",r=\"varying\",o=\"texture2D\",a=\"gl_FragColor\",i=\"\",u=\"\\n bool isnan_custom(float val) {\\n return (val > 0. || val < 1. || val == 0.) ? false : true;\\n }\\n \",l=\"\\n uniform float INFINITY;\\n\\n bool isinf(float val) {\\n return abs(val) == INFINITY;\\n }\\n bvec4 isinf(vec4 val) {\\n return equal(abs(val), vec4(INFINITY));\\n }\\n \",c=\"\\n int round(float value) {\\n return int(floor(value + 0.5));\\n }\\n\\n ivec4 round(vec4 value) {\\n return ivec4(floor(value + vec4(0.5)));\\n }\\n \"),{version:t,attribute:e,varyingVs:n,varyingFs:r,texture2D:o,output:a,defineOutput:i,defineSpecialNaN:u,defineSpecialInf:l,defineRound:c}}function Io(t,e,n){void 0===n&&(n=\"index\");var r=G(e);return r.map(function(e,o){return\"int \"+t[o]+\" = \"+n+\" / \"+e+\"; \"+(o===r.length-1?\"int \"+t[o+1]+\" = \"+n+\" - \"+t[o]+\" * \"+e:\"index -= \"+t[o]+\" * \"+e)+\";\"}).join(\"\")}function So(t){var e=G(t).map(function(t){return t.toString()});return\"\\n int getFlatIndex(ivec3 coords) {\\n return coords.x * \"+e[0]+\" + coords.y * \"+e[1]+\" + coords.z;\\n }\\n\"}var No=\"\\n const float FLOAT_MAX = 1.70141184e38;\\n const float FLOAT_MIN = 1.17549435e-38;\\n\\n lowp vec4 encode_float(highp float v) {\\n if (isnan(v)) {\\n return vec4(255, 255, 255, 255);\\n }\\n\\n highp float av = abs(v);\\n\\n if(av < FLOAT_MIN) {\\n return vec4(0.0, 0.0, 0.0, 0.0);\\n } else if(v > FLOAT_MAX) {\\n return vec4(0.0, 0.0, 128.0, 127.0) / 255.0;\\n } else if(v < -FLOAT_MAX) {\\n return vec4(0.0, 0.0, 128.0, 255.0) / 255.0;\\n }\\n\\n highp vec4 c = vec4(0,0,0,0);\\n\\n highp float e = floor(log2(av));\\n highp float m = exp2(fract(log2(av))) - 1.0;\\n\\n c[2] = floor(128.0 * m);\\n m -= c[2] / 128.0;\\n c[1] = floor(32768.0 * m);\\n m -= c[1] / 32768.0;\\n c[0] = floor(8388608.0 * m);\\n\\n highp float ebias = e + 127.0;\\n c[3] = floor(ebias / 2.0);\\n ebias -= c[3] * 2.0;\\n c[2] += floor(ebias) * 128.0;\\n\\n c[3] += 128.0 * step(0.0, -v);\\n\\n return c / 255.0;\\n }\\n\";function ko(t,e,n,r){var o=[];t.forEach(function(t){var e=y(t.shapeInfo.logicalShape);t.shapeInfo.isUniform?o.push(\"uniform float \"+t.name+(e>1?\"[\"+e+\"]\":\"\")+\";\"):(o.push(\"uniform sampler2D \"+t.name+\";\"),o.push(\"uniform int offset\"+t.name+\";\"))});var a,i,s=o.join(\"\\n\"),u=t.map(function(t){return function(t,e,n){void 0===n&&(n=!1);var r=\"\";r+=n?To(t):Ao(t);var o=t.shapeInfo.logicalShape,a=e.logicalShape;o.length<=a.length&&(r+=n?function(t,e){var n,r=t.name,o=r.charAt(0).toUpperCase()+r.slice(1),a=\"get\"+o+\"AtOutCoords\",i=t.shapeInfo.logicalShape.length,s=e.logicalShape.length,u=Hr(t.shapeInfo.logicalShape,e.logicalShape),l=Po(s),c=s-i,h=[\"x\",\"y\",\"z\",\"w\",\"u\",\"v\"];n=0===i?\"\":s<2&&u.length>=1?\"coords = 0;\":u.map(function(t){return\"coords.\"+h[t+c]+\" = 0;\"}).join(\"\\n\");var p=\"\";p=s<2&&i>0?\"coords\":t.shapeInfo.logicalShape.map(function(t,e){return\"coords.\"+h[e+c]}).join(\", \");var f=\"return outputValue;\",d=1===y(t.shapeInfo.logicalShape),v=1===y(e.logicalShape);if(1!==i||d||v){if(d&&!v)f=1===s?\"\\n return vec4(outputValue.x, outputValue.x, 0., 0.);\\n \":\"\\n return vec4(outputValue.x);\\n \";else if(u.length){var m=i-2,g=i-1;u.indexOf(m)>-1&&u.indexOf(g)>-1?f=\"return vec4(outputValue.x);\":u.indexOf(m)>-1?f=\"return vec4(outputValue.x, outputValue.y, outputValue.x, outputValue.y);\":u.indexOf(g)>-1&&(f=\"return vec4(outputValue.xx, outputValue.zz);\")}}else f=\"\\n return vec4(outputValue.xy, outputValue.xy);\\n \";return\"\\n vec4 \"+a+\"() {\\n \"+l+\" coords = getOutputCoords();\\n \"+n+\"\\n vec4 outputValue = get\"+o+\"(\"+p+\");\\n \"+f+\"\\n }\\n \"}(t,e):function(t,e){var n=t.name,r=n.charAt(0).toUpperCase()+n.slice(1),o=\"get\"+r+\"AtOutCoords\",a=e.texShape,i=t.shapeInfo.texShape,s=t.shapeInfo.logicalShape.length,u=e.logicalShape.length;if(!t.shapeInfo.isUniform&&s===u&&null==t.shapeInfo.flatOffset&&x(i,a))return\"\\n float \"+o+\"() {\\n return sampleTexture(\"+n+\", resultUV);\\n }\\n \";var l,c=Po(u),h=Hr(t.shapeInfo.logicalShape,e.logicalShape),p=u-s,f=[\"x\",\"y\",\"z\",\"w\",\"u\",\"v\"];l=0===s?\"\":u<2&&h.length>=1?\"coords = 0;\":h.map(function(t){return\"coords.\"+f[t+p]+\" = 0;\"}).join(\"\\n\");var d=\"\";d=u<2&&s>0?\"coords\":t.shapeInfo.logicalShape.map(function(t,e){return\"coords.\"+f[e+p]}).join(\", \");return\"\\n float \"+o+\"() {\\n \"+c+\" coords = getOutputCoords();\\n \"+l+\"\\n return get\"+r+\"(\"+d+\");\\n }\\n \"}(t,e));return r}(t,e,r)}).join(\"\\n\"),l=e.texShape,c=Ro(),h=function(t){return\"\\n float sampleTexture(sampler2D textureSampler, vec2 uv) {\\n return \"+t.texture2D+\"(textureSampler, uv).r;\\n }\\n \"}(c),p=function(t){return t.version+\"\\n precision highp float;\\n precision highp int;\\n precision highp sampler2D;\\n \"+t.varyingFs+\" vec2 resultUV;\\n \"+t.defineOutput+\"\\n const vec2 halfCR = vec2(0.5, 0.5);\\n\\n struct ivec5\\n {\\n int x;\\n int y;\\n int z;\\n int w;\\n int u;\\n };\\n\\n struct ivec6\\n {\\n int x;\\n int y;\\n int z;\\n int w;\\n int u;\\n int v;\\n };\\n\\n uniform float NAN;\\n #define isnan(value) isnan_custom(value)\\n \"+t.defineSpecialNaN+\"\\n bvec4 isnan_custom(vec4 val) {\\n return bvec4(isnan(val.x), isnan(val.y), isnan(val.z), isnan(val.w));\\n }\\n\\n \"+t.defineSpecialInf+\"\\n \"+t.defineRound+\"\\n\\n int imod(int x, int y) {\\n return x - y * (x / y);\\n }\\n\\n int idiv(int a, int b, float sign) {\\n int res = a / b;\\n int mod = imod(a, b);\\n if (sign < 0. && mod != 0) {\\n res -= 1;\\n }\\n return res;\\n }\\n\\n //Based on the work of Dave Hoskins\\n //https://www.shadertoy.com/view/4djSRW\\n #define HASHSCALE1 443.8975\\n float random(float seed){\\n vec2 p = resultUV * seed;\\n vec3 p3 = fract(vec3(p.xyx) * HASHSCALE1);\\n p3 += dot(p3, p3.yzx + 19.19);\\n return fract((p3.x + p3.y) * p3.z);\\n }\\n\\n \"+Do+\"\\n \"+_o+\"\\n \"+Oo+\"\\n \"}(c);return e.isPacked?(a=function(t,e){switch(t.length){case 0:return\"\\n int getOutputCoords() {\\n return 0;\\n }\\n \";case 1:return function(t,e){var n=[Math.ceil(e[0]/2),Math.ceil(e[1]/2)];if(1===n[0])return\"\\n int getOutputCoords() {\\n return 2 * int(resultUV.x * \"+n[1]+\".0);\\n }\\n \";if(1===n[1])return\"\\n int getOutputCoords() {\\n return 2 * int(resultUV.y * \"+n[0]+\".0);\\n }\\n \";return\"\\n int getOutputCoords() {\\n ivec2 resTexRC = ivec2(resultUV.yx *\\n vec2(\"+n[0]+\", \"+n[1]+\"));\\n return 2 * (resTexRC.x * \"+n[1]+\" + resTexRC.y);\\n }\\n \"}(0,e);case 2:return function(t,e){var n=[Math.ceil(e[0]/2),Math.ceil(e[1]/2)];if(x(t,e))return\"\\n ivec2 getOutputCoords() {\\n return 2 * ivec2(resultUV.yx * vec2(\"+n[0]+\", \"+n[1]+\"));\\n }\\n \";var r=Math.ceil(t[1]/2);return\"\\n ivec2 getOutputCoords() {\\n ivec2 resTexRC = ivec2(resultUV.yx *\\n vec2(\"+n[0]+\", \"+n[1]+\"));\\n\\n int index = resTexRC.x * \"+n[1]+\" + resTexRC.y;\\n int r = 2 * (index / \"+r+\");\\n int c = imod(index, \"+r+\") * 2;\\n\\n return ivec2(r, c);\\n }\\n \"}(t,e);case 3:return n=t,r=e,o=[Math.ceil(r[0]/2),Math.ceil(r[1]/2)],a=Math.ceil(n[2]/2),i=a*Math.ceil(n[1]/2),\"\\n ivec3 getOutputCoords() {\\n ivec2 resTexRC = ivec2(resultUV.yx *\\n vec2(\"+o[0]+\", \"+o[1]+\"));\\n int index = resTexRC.x * \"+o[1]+\" + resTexRC.y;\\n\\n int b = index / \"+i+\";\\n index -= b * \"+i+\";\\n\\n int r = 2 * (index / \"+a+\");\\n int c = imod(index, \"+a+\") * 2;\\n\\n return ivec3(b, r, c);\\n }\\n \";default:return function(t,e){for(var n=[Math.ceil(e[0]/2),Math.ceil(e[1]/2)],r=Math.ceil(t[t.length-1]/2),o=r*Math.ceil(t[t.length-2]/2),a=o,i=\"\",s=\"b, r, c\",u=2;u2,function(){return\"Packed arg\"+(n.charAt(0).toUpperCase()+n.slice(1))+\" supports only inputs with rank above 2.\"});var o=t[t.length-1],a=Math.ceil(o/e);this.outputShape=t.slice(0,-1),a>1&&this.outputShape.push(a),r||this.variableNames.push(\"bestIndicesA\");var i,s,u=this.outputShape,l=u.length,c=Po(l),h=Eo(\"coords\",l);if(1===a){var p=Po(s=l+1);i=\"\\n \"+p+\" sourceLocR = \"+p+\"(\"+h.join()+\", 0);\\n ++\"+h[l-1]+\";\\n \"+p+\" sourceLocG = \"+p+\"(\"+h.join()+\", 0);\\n ++\"+h[l-2]+\";\\n \"+p+\" sourceLocA = \"+p+\"(\"+h.join()+\", 0);\\n --\"+h[l-1]+\";\\n \"+p+\" sourceLocB = \"+p+\"(\"+h.join()+\", 0);\\n --\"+h[l-2]+\";\"}else s=l,i=\"\\n \"+c+\" sourceLocR = coords;\\n ++\"+h[l-1]+\";\\n \"+c+\" sourceLocG = coords;\\n ++\"+h[l-2]+\";\\n \"+c+\" sourceLocA = coords;\\n --\"+h[l-1]+\";\\n \"+c+\" sourceLocB = coords;\\n --\"+h[l-2]+\";\";var f=[\"x\",\"y\",\"z\",\"w\",\"u\",\"v\"].slice(0,s),v=\".\"+f[s-1],m=f.map(function(t){return\"int \"+t}),g=Eo(\"sourceLocR\",s-1).concat(\"inIdx.r\"),y=Eo(\"sourceLocG\",s-1).concat(\"inIdx.g\"),x=Eo(\"sourceLocB\",s-1).concat(\"inIdx.b\"),b=Eo(\"sourceLocA\",s-1).concat(\"inIdx.a\"),w=\"max\"===n?\"greaterThan\":\"lessThan\",C=r?\"\":\"\\n inIdx = round(vec4(getBestIndicesAChannel(\"+g.join()+\"),\\n getBestIndicesAChannel(\"+y.join()+\"),\\n getBestIndicesAChannel(\"+x.join()+\"),\\n getBestIndicesAChannel(\"+b.join()+\")));\",E=\"vec4(\\n getAChannel(\"+g.join()+\"),\\n hasNextCol ? getAChannel(\"+y.join()+\") : 0.,\\n hasNextRow ? getAChannel(\"+x.join()+\") : 0.,\\n hasNextRow && hasNextCol ? getAChannel(\"+b.join()+\") : 0.)\",R=r?\"\":\"\\n float getBestIndicesAChannel(\"+m.join()+\") {\\n return getChannel(getBestIndicesA(\"+f.join()+\"),\\n vec2(\"+f.slice(-2).join()+\"));\\n }\";this.userCode=\"\\n float getAChannel(\"+m.join()+\") {\\n return getChannel(getA(\"+f.join()+\"),\\n vec2(\"+f.slice(-2).join()+\"));\\n }\\n \"+R+\"\\n void main() {\\n \"+c+\" coords = getOutputCoords();\\n bool hasNextCol = \"+h[l-1]+\" < \"+(u[l-1]-1)+\";\\n bool hasNextRow = \"+h[l-2]+\" < \"+(u[l-2]-1)+\";\\n \"+i+\"\\n ivec4 srcIdx = ivec4(sourceLocR\"+v+\", sourceLocG\"+v+\",\\n sourceLocB\"+v+\", sourceLocA\"+v+\") * \"+e+\";\\n ivec4 inIdx = srcIdx;\\n vec4 bestIndex = vec4(inIdx);\\n vec4 bestValue = \"+E+\";\\n\\n for (int i = 0; i < \"+e+\"; i++) {\\n inIdx = srcIdx;\\n \"+C+\"\\n vec4 candidate = \"+E+\";\\n bvec4 nan = isnan(candidate);\\n bvec4 replace = bvec4(\\n vec4(\"+w+\"(candidate, bestValue)) * (vec4(1.0) - vec4(nan)));\\n\\n bestValue = vec4(replace.x ? candidate.x : bestValue.x,\\n replace.y ? candidate.y : bestValue.y,\\n replace.z ? candidate.z : bestValue.z,\\n replace.w ? candidate.w : bestValue.w);\\n bestIndex = mix(bestIndex, vec4(inIdx), vec4(replace));\\n srcIdx++;\\n }\\n setOutput(bestIndex);\\n }\\n \"}}(),zo=function(){return function(t){this.variableNames=[\"dy\"],this.outputShape=t.inShape;var e=t.filterHeight,n=t.filterWidth,r=t.strideHeight,o=t.strideWidth,a=t.dilationHeight,i=t.dilationWidth,s=t.effectiveFilterHeight,u=t.effectiveFilterWidth,l=s-1-t.padInfo.top,c=u-1-t.padInfo.left,h=1/(e*n);this.userCode=\"\\n const ivec2 pads = ivec2(\"+l+\", \"+c+\");\\n const float avgMultiplier = float(\"+h+\");\\n\\n void main() {\\n ivec4 coords = getOutputCoords();\\n int b = coords[0];\\n int d = coords[3];\\n\\n ivec2 dyRCCorner = coords.yz - pads;\\n int dyRCorner = dyRCCorner.x;\\n int dyCCorner = dyRCCorner.y;\\n\\n // Convolve dy(?, ?, d) with pos mask(:, :, d) to get dx(xR, xC, d).\\n // ? = to be determined. : = across all values in that axis.\\n float dotProd = 0.0;\\n for (int wR = 0; wR < \"+s+\";\\n wR += \"+a+\") {\\n float dyR = float(dyRCorner + wR) / \"+r+\".0;\\n\\n if (dyR < 0.0 || dyR >= \"+t.outHeight+\".0 || fract(dyR) > 0.0) {\\n continue;\\n }\\n int idyR = int(dyR);\\n\\n for (int wC = 0; wC < \"+u+\";\\n wC+= \"+i+\") {\\n float dyC = float(dyCCorner + wC) / \"+o+\".0;\\n\\n if (dyC < 0.0 || dyC >= \"+t.outWidth+\".0 ||\\n fract(dyC) > 0.0) {\\n continue;\\n }\\n int idyC = int(dyC);\\n\\n float dyValue = getDy(b, idyR, idyC, d);\\n\\n dotProd += dyValue * avgMultiplier;\\n }\\n }\\n setOutput(dotProd);\\n }\\n \"}}(),Vo=function(){return function(t,e,n,r,o,a){this.outputShape=[],this.variableNames=[\"x\",\"mean\",\"variance\"],jr(t,e),jr(t,n);var i=\"0.0\";null!=r&&(jr(t,r),this.variableNames.push(\"offset\"),i=\"getOffsetAtOutCoords()\");var s=\"1.0\";null!=o&&(jr(t,o),this.variableNames.push(\"scale\"),s=\"getScaleAtOutCoords()\"),this.outputShape=t,this.userCode=\"\\n void main() {\\n float x = getXAtOutCoords();\\n float mean = getMeanAtOutCoords();\\n float variance = getVarianceAtOutCoords();\\n float offset = \"+i+\";\\n float scale = \"+s+\";\\n float inv = scale * inversesqrt(variance + float(\"+a+\"));\\n setOutput(dot(vec3(x, -mean, offset), vec3(inv, inv, 1)));\\n }\\n \"}}(),Go=function(){return function(t,e,n,r,o,a){this.usesPackedTextures=!0,this.variableNames=[\"x\",\"mean\",\"variance\"],jr(t,e),jr(t,n);var i=\"vec4(0.0)\";null!=r&&(jr(t,r),this.variableNames.push(\"offset\"),i=\"getOffsetAtOutCoords()\");var s=\"vec4(1.0)\";null!=o&&(jr(t,o),this.variableNames.push(\"scale\"),s=\"getScaleAtOutCoords()\"),this.outputShape=t,this.userCode=\"\\n void main() {\\n vec4 offset = \"+i+\";\\n vec4 scale = \"+s+\";\\n\\n vec4 x = getXAtOutCoords();\\n vec4 mean = getMeanAtOutCoords();\\n vec4 variance = getVarianceAtOutCoords();\\n\\n vec4 inv = scale * inversesqrt(variance + vec4(\"+a+\"));\\n\\n setOutput((x - mean) * inv + offset);\\n }\\n \"}}(),qo=\"return areal * breal - aimag * bimag;\",Ho=\"return areal * bimag + aimag * breal;\",$o=function(){return function(t,e,n){this.variableNames=[\"AReal\",\"AImag\",\"BReal\",\"BImag\"],this.outputShape=jr(e,n),this.userCode=\"\\n float binaryOpComplex(\\n float areal, float aimag, float breal, float bimag) {\\n \"+t+\"\\n }\\n\\n void main() {\\n float areal = getARealAtOutCoords();\\n float aimag = getAImagAtOutCoords();\\n float breal = getBRealAtOutCoords();\\n float bimag = getBImagAtOutCoords();\\n setOutput(binaryOpComplex(areal, aimag, breal, bimag));\\n }\\n \"}}(),jo=\"return a + b;\",Ko=\"return a - b;\",Xo=\"return a * b;\",Yo=function(){return function(t,e,n){this.variableNames=[\"A\",\"B\"],this.outputShape=jr(e,n),this.userCode=\"\\n float binaryOperation(float a, float b) {\\n \"+t+\"\\n }\\n\\n void main() {\\n float a = getAAtOutCoords();\\n float b = getBAtOutCoords();\\n setOutput(binaryOperation(a, b));\\n }\\n \"}}(),Qo=function(){return function(t,e,n,r){void 0===r&&(r=!1),this.variableNames=[\"A\",\"B\"],this.supportsBroadcasting=!0,this.usesPackedTextures=!0,this.outputShape=jr(e,n);var o=this.outputShape.length,a=\"\";if(r)if(0===o||1===y(this.outputShape))a=\"\\n result.y = 0.;\\n result.z = 0.;\\n result.w = 0.;\\n \";else if(a=\"\\n \"+Po(o)+\" coords = getOutputCoords();\\n \",1===o)a+=\"\\n result.y = (coords + 1) >= \"+this.outputShape[0]+\" ? 0. : result.y;\\n result.z = 0.;\\n result.w = 0.;\\n \";else{var i=Eo(\"coords\",o);a+=\"\\n bool nextRowOutOfBounds =\\n (\"+i[o-2]+\" + 1) >= \"+this.outputShape[o-2]+\";\\n bool nextColOutOfBounds =\\n (\"+i[o-1]+\" + 1) >= \"+this.outputShape[o-1]+\";\\n result.y = nextColOutOfBounds ? 0. : result.y;\\n result.z = nextRowOutOfBounds ? 0. : result.z;\\n result.w = nextColOutOfBounds || nextRowOutOfBounds ? 0. : result.w;\\n \"}this.userCode=\"\\n vec4 binaryOperation(vec4 a, vec4 b) {\\n \"+t+\"\\n }\\n\\n void main() {\\n vec4 a = getAAtOutCoords();\\n vec4 b = getBAtOutCoords();\\n\\n vec4 result = binaryOperation(a, b);\\n \"+a+\"\\n\\n setOutput(result);\\n }\\n \"}}(),Jo=function(){function t(t){this.variableNames=[\"A\"],this.outputShape=t,this.userCode=\"\\n uniform float min;\\n uniform float max;\\n\\n void main() {\\n float value = getAAtOutCoords();\\n if (isnan(value)) {\\n setOutput(value);\\n return;\\n }\\n\\n setOutput(clamp(value, min, max));\\n }\\n \"}return t.prototype.getCustomSetupFunc=function(t,e){var n=this;return function(r,o){null==n.minLoc&&(n.minLoc=r.getUniformLocationNoThrow(o,\"min\"),n.maxLoc=r.getUniformLocationNoThrow(o,\"max\")),r.gl.uniform1f(n.minLoc,t),r.gl.uniform1f(n.maxLoc,e)}},t}(),Zo=function(){function t(t){this.variableNames=[\"A\"],this.usesPackedTextures=!0,this.outputShape=t,this.userCode=\"\\n uniform float min;\\n uniform float max;\\n\\n void main() {\\n vec4 value = getAAtOutCoords();\\n\\n if (any(isnan(value))) {\\n setOutput(value);\\n return;\\n }\\n\\n setOutput(clamp(value, vec4(min), vec4(max)));\\n }\\n \"}return t.prototype.getCustomSetupFunc=function(t,e){var n=this;return function(r,o){null==n.minLoc&&(n.minLoc=r.getUniformLocationNoThrow(o,\"min\"),n.maxLoc=r.getUniformLocationNoThrow(o,\"max\")),r.gl.uniform1f(n.minLoc,t),r.gl.uniform1f(n.maxLoc,e)}},t}(),ta=function(){return function(t){this.variableNames=[\"real\",\"imag\"],this.outputShape=t,this.userCode=\"\\n void main() {\\n float re = abs(getRealAtOutCoords());\\n float im = abs(getImagAtOutCoords());\\n float mx = max(re, im);\\n\\n // sadly the length function in glsl is not underflow-safe\\n // (at least not on Intel GPUs). So the safe solution is\\n // to ensure underflow-safety in all cases.\\n setOutput(\\n mx == 0.0 ? 0.0 : mx * length(vec2(1, min(re, im)/mx))\\n );\\n }\\n \"}}(),ea=function(){return function(t){this.outputShape=[],this.outputShape=un(t,1),this.variableNames=t.map(function(t,e){return\"T\"+e});var e=new Array(t.length-1);e[0]=t[0][1];for(var n=1;n= \"+t.inHeight+\") {\\n continue;\\n }\\n\\n for (int yC = 0; yC < \"+t.outWidth+\"; yC++) {\\n int xC = wC + yC * \"+n+\" - \"+o+\";\\n\\n if (xC < 0 || xC >= \"+t.inWidth+\") {\\n continue;\\n }\\n\\n float dyValue = getDy(b, yR, yC, d2);\\n float xValue = getX(b, xR, xC, d1);\\n dotProd += (xValue * dyValue);\\n }\\n }\\n }\\n setOutput(dotProd);\\n }\\n \"}}(),oa=function(){return function(t){this.variableNames=[\"dy\",\"W\"],this.outputShape=t.inShape;var e=t.filterHeight,n=t.filterWidth,r=t.strideHeight,o=t.strideWidth,a=e-1-t.padInfo.top,i=n-1-t.padInfo.left;this.userCode=\"\\n const ivec2 pads = ivec2(\"+a+\", \"+i+\");\\n\\n void main() {\\n ivec4 coords = getOutputCoords();\\n int batch = coords[0];\\n int d1 = coords[3];\\n\\n ivec2 dyCorner = coords.yz - pads;\\n int dyRCorner = dyCorner.x;\\n int dyCCorner = dyCorner.y;\\n\\n // Convolve dy(?, ?, d2) with w(:, :, d1, d2) to compute dx(xR, xC, d1).\\n // ? = to be determined. : = across all values in that axis.\\n float dotProd = 0.0;\\n for (int wR = 0; wR < \"+e+\"; wR++) {\\n float dyR = float(dyRCorner + wR) / \"+r+\".0;\\n\\n if (dyR < 0.0 || dyR >= \"+t.outHeight+\".0 || fract(dyR) > 0.0) {\\n continue;\\n }\\n int idyR = int(dyR);\\n\\n int wRPerm = \"+e+\" - 1 - wR;\\n\\n for (int wC = 0; wC < \"+n+\"; wC++) {\\n float dyC = float(dyCCorner + wC) / \"+o+\".0;\\n\\n if (dyC < 0.0 || dyC >= \"+t.outWidth+\".0 ||\\n fract(dyC) > 0.0) {\\n continue;\\n }\\n int idyC = int(dyC);\\n\\n int wCPerm = \"+n+\" - 1 - wC;\\n\\n for (int d2 = 0; d2 < \"+t.outChannels+\"; d2++) {\\n float xValue = getDy(batch, idyR, idyC, d2);\\n float wValue = getW(wRPerm, wCPerm, d1, d2);\\n dotProd += xValue * wValue;\\n }\\n }\\n }\\n setOutput(dotProd);\\n }\\n \"}}(),aa=function(){return function(t){this.variableNames=[\"x\",\"dy\"],this.outputShape=t.filterShape;var e=t.strideDepth,n=t.strideHeight,r=t.strideWidth,o=t.padInfo.front,a=t.padInfo.top,i=t.padInfo.left;this.userCode=\"\\n void main() {\\n ivec5 coords = getOutputCoords();\\n int wF = coords.x;\\n int wR = coords.y;\\n int wC = coords.z;\\n int d1 = coords.w;\\n int d2 = coords.u;\\n\\n float dotProd = 0.0;\\n\\n for (int b = 0; b < \"+t.batchSize+\"; b++) {\\n for (int yF = 0; yF < \"+t.outDepth+\"; yF++) {\\n int xF = wF + yF * \"+e+\" - \"+o+\";\\n\\n if (xF < 0 || xF >= \"+t.inDepth+\") {\\n continue;\\n }\\n\\n for (int yR = 0; yR < \"+t.outHeight+\"; yR++) {\\n int xR = wR + yR * \"+n+\" - \"+a+\";\\n\\n if (xR < 0 || xR >= \"+t.inHeight+\") {\\n continue;\\n }\\n\\n for (int yC = 0; yC < \"+t.outWidth+\"; yC++) {\\n int xC = wC + yC * \"+r+\" - \"+i+\";\\n\\n if (xC < 0 || xC >= \"+t.inWidth+\") {\\n continue;\\n }\\n\\n float dyValue = getDy(b, yF, yR, yC, d2);\\n float xValue = getX(b, xF, xR, xC, d1);\\n dotProd += (xValue * dyValue);\\n }\\n }\\n }\\n }\\n setOutput(dotProd);\\n }\\n \"}}(),ia=function(){return function(t){this.variableNames=[\"dy\",\"W\"],this.outputShape=t.inShape;var e=t.filterDepth,n=t.filterHeight,r=t.filterWidth,o=t.strideDepth,a=t.strideHeight,i=t.strideWidth,s=e-1-t.padInfo.front,u=n-1-t.padInfo.top,l=r-1-t.padInfo.left;this.userCode=\"\\n const ivec3 pads = ivec3(\"+s+\", \"+u+\", \"+l+\");\\n\\n void main() {\\n ivec5 coords = getOutputCoords();\\n int batch = coords.x;\\n int d1 = coords.u;\\n\\n\\n ivec3 dyCorner = ivec3(coords.y, coords.z, coords.w) - pads;\\n int dyFCorner = dyCorner.x;\\n int dyRCorner = dyCorner.y;\\n int dyCCorner = dyCorner.z;\\n\\n float dotProd = 0.0;\\n for (int wF = 0; wF < \"+e+\"; wF++) {\\n float dyF = float(dyFCorner + wF) / \"+o+\".0;\\n\\n if (dyF < 0.0 || dyF >= \"+t.outDepth+\".0 || fract(dyF) > 0.0) {\\n continue;\\n }\\n int idyF = int(dyF);\\n\\n int wFPerm = \"+e+\" - 1 - wF;\\n\\n for (int wR = 0; wR < \"+n+\"; wR++) {\\n float dyR = float(dyRCorner + wR) / \"+a+\".0;\\n\\n if (dyR < 0.0 || dyR >= \"+t.outHeight+\".0 ||\\n fract(dyR) > 0.0) {\\n continue;\\n }\\n int idyR = int(dyR);\\n\\n int wRPerm = \"+n+\" - 1 - wR;\\n\\n for (int wC = 0; wC < \"+r+\"; wC++) {\\n float dyC = float(dyCCorner + wC) / \"+i+\".0;\\n\\n if (dyC < 0.0 || dyC >= \"+t.outWidth+\".0 ||\\n fract(dyC) > 0.0) {\\n continue;\\n }\\n int idyC = int(dyC);\\n\\n int wCPerm = \"+r+\" - 1 - wC;\\n\\n for (int d2 = 0; d2 < \"+t.outChannels+\"; d2++) {\\n float xValue = getDy(batch, idyF, idyR, idyC, d2);\\n float wValue = getW(wFPerm, wRPerm, wCPerm, d1, d2);\\n dotProd += xValue * wValue;\\n }\\n }\\n }\\n }\\n setOutput(dotProd);\\n }\\n \"}}(),sa=function(){return function(t){this.variableNames=[\"x\",\"dy\"],this.outputShape=t.filterShape;var e=t.strideHeight,n=t.strideWidth,r=t.padInfo.top,o=t.padInfo.left,a=t.outChannels/t.inChannels;this.userCode=\"\\n void main() {\\n ivec4 coords = getOutputCoords();\\n int wR = coords.x;\\n int wC = coords.y;\\n int d1 = coords.z;\\n int dm = coords.w;\\n int d2 = d1 * \"+a+\" + dm;\\n\\n float dotProd = 0.0;\\n\\n // TODO: Vec4 over the batch size\\n for (int b = 0; b < \"+t.batchSize+\"; b++) {\\n for (int yR = 0; yR < \"+t.outHeight+\"; yR++) {\\n int xR = wR + yR * \"+e+\" - \"+r+\";\\n\\n if (xR < 0 || xR >= \"+t.inHeight+\") {\\n continue;\\n }\\n\\n for (int yC = 0; yC < \"+t.outWidth+\"; yC++) {\\n int xC = wC + yC * \"+n+\" - \"+o+\";\\n\\n if (xC < 0 || xC >= \"+t.inWidth+\") {\\n continue;\\n }\\n\\n float dyValue = getDy(b, yR, yC, d2);\\n float xValue = getX(b, xR, xC, d1);\\n dotProd += (xValue * dyValue);\\n }\\n }\\n }\\n setOutput(dotProd);\\n }\\n \"}}(),ua=function(){return function(t){this.variableNames=[\"dy\",\"W\"],this.outputShape=t.inShape;var e=t.filterHeight,n=t.filterWidth,r=t.strideHeight,o=t.strideWidth,a=e-1-t.padInfo.top,i=n-1-t.padInfo.left,s=t.outChannels/t.inChannels;this.userCode=\"\\n const ivec2 pads = ivec2(\"+a+\", \"+i+\");\\n\\n void main() {\\n ivec4 coords = getOutputCoords();\\n int batch = coords[0];\\n int d1 = coords[3];\\n ivec2 dyCorner = coords.yz - pads;\\n int dyRCorner = dyCorner.x;\\n int dyCCorner = dyCorner.y;\\n\\n float dotProd = 0.0;\\n\\n for (int wR = 0; wR < \"+e+\"; wR++) {\\n float dyR = float(dyRCorner + wR) / \"+r+\".0;\\n\\n if (dyR < 0.0 || dyR >= \"+t.outHeight+\".0 || fract(dyR) > 0.0) {\\n continue;\\n }\\n int idyR = int(dyR);\\n\\n int wRPerm = \"+e+\" - 1 - wR;\\n\\n for (int wC = 0; wC < \"+n+\"; wC++) {\\n float dyC = float(dyCCorner + wC) / \"+o+\".0;\\n\\n if (dyC < 0.0 || dyC >= \"+t.outWidth+\".0 ||\\n fract(dyC) > 0.0) {\\n continue;\\n }\\n int idyC = int(dyC);\\n\\n int wCPerm = \"+n+\" - 1 - wC;\\n\\n // TODO: Vec4 over the channelMul\\n for (int dm = 0; dm < \"+s+\"; dm++) {\\n int d2 = d1 * \"+s+\" + dm;\\n float xValue = getDy(batch, idyR, idyC, d2);\\n float wValue = getW(wRPerm, wCPerm, d1, dm);\\n dotProd += xValue * wValue;\\n }\\n }\\n }\\n setOutput(dotProd);\\n }\\n \"}}(),la=function(){return function(t){this.variableNames=[\"x\",\"W\"],this.outputShape=t.outShape;var e=t.padInfo.top,n=t.padInfo.left,r=t.strideHeight,o=t.strideWidth,a=t.dilationHeight,i=t.dilationWidth,s=t.filterHeight,u=t.filterWidth,l=4*Math.floor(t.inChannels/4),c=t.inChannels%4;this.userCode=\"\\n const ivec2 strides = ivec2(\"+r+\", \"+o+\");\\n const ivec2 pads = ivec2(\"+e+\", \"+n+\");\\n\\n void main() {\\n ivec4 coords = getOutputCoords();\\n int batch = coords[0];\\n int d2 = coords[3];\\n\\n ivec2 xRCCorner = coords.yz * strides - pads;\\n int xRCorner = xRCCorner.x;\\n int xCCorner = xRCCorner.y;\\n\\n // Convolve x(?, ?, d1) with w(:, :, d1, d2) to get y(yR, yC, d2).\\n // ? = to be determined. : = across all values in that axis.\\n float dotProd = 0.0;\\n for (int wR = 0; wR < \"+s+\"; wR++) {\\n int xR = xRCorner + wR * \"+a+\";\\n\\n if (xR < 0 || xR >= \"+t.inHeight+\") {\\n continue;\\n }\\n\\n for (int wC = 0; wC < \"+u+\"; wC++) {\\n int xC = xCCorner + wC * \"+i+\";\\n\\n if (xC < 0 || xC >= \"+t.inWidth+\") {\\n continue;\\n }\\n\\n for (int d1 = 0; d1 < \"+l+\"; d1 += 4) {\\n vec4 xValues = vec4(\\n getX(batch, xR, xC, d1),\\n getX(batch, xR, xC, d1 + 1),\\n getX(batch, xR, xC, d1 + 2),\\n getX(batch, xR, xC, d1 + 3)\\n );\\n vec4 wValues = vec4(\\n getW(wR, wC, d1, d2),\\n getW(wR, wC, d1 + 1, d2),\\n getW(wR, wC, d1 + 2, d2),\\n getW(wR, wC, d1 + 3, d2)\\n );\\n\\n dotProd += dot(xValues, wValues);\\n }\\n\\n if (\"+(1===c)+\") {\\n dotProd +=\\n getX(batch, xR, xC, \"+l+\") *\\n getW(wR, wC, \"+l+\", d2);\\n } else if (\"+(2===c)+\") {\\n vec2 xValues = vec2(\\n getX(batch, xR, xC, \"+l+\"),\\n getX(batch, xR, xC, \"+l+\" + 1)\\n );\\n vec2 wValues = vec2(\\n getW(wR, wC, \"+l+\", d2),\\n getW(wR, wC, \"+l+\" + 1, d2)\\n );\\n dotProd += dot(xValues, wValues);\\n } else if (\"+(3===c)+\") {\\n vec3 xValues = vec3(\\n getX(batch, xR, xC, \"+l+\"),\\n getX(batch, xR, xC, \"+l+\" + 1),\\n getX(batch, xR, xC, \"+l+\" + 2)\\n );\\n vec3 wValues = vec3(\\n getW(wR, wC, \"+l+\", d2),\\n getW(wR, wC, \"+l+\" + 1, d2),\\n getW(wR, wC, \"+l+\" + 2, d2)\\n );\\n dotProd += dot(xValues, wValues);\\n }\\n }\\n }\\n setOutput(dotProd);\\n }\\n \"}}(),ca=function(){return function(t){this.variableNames=[\"x\",\"W\"],this.outputShape=t.outShape;var e=t.padInfo.front,n=t.padInfo.top,r=t.padInfo.left,o=t.strideDepth,a=t.strideHeight,i=t.strideWidth,s=t.dilationDepth,u=t.dilationHeight,l=t.dilationWidth,c=t.filterDepth,h=t.filterHeight,p=t.filterWidth,f=4*Math.floor(t.inChannels/4),d=t.inChannels%4;this.userCode=\"\\n const ivec3 strides = ivec3(\"+o+\", \"+a+\", \"+i+\");\\n const ivec3 pads = ivec3(\"+e+\", \"+n+\", \"+r+\");\\n\\n void main() {\\n ivec5 coords = getOutputCoords();\\n int batch = coords.x;\\n int d2 = coords.u;\\n\\n ivec3 xFRCCorner = ivec3(coords.y, coords.z, coords.w) * strides - pads;\\n int xFCorner = xFRCCorner.x;\\n int xRCorner = xFRCCorner.y;\\n int xCCorner = xFRCCorner.z;\\n\\n // Convolve x(?, ?, ?, d1) with w(:, :, :, d1, d2) to get\\n // y(yF, yR, yC, d2). ? = to be determined. : = across all\\n // values in that axis.\\n float dotProd = 0.0;\\n for (int wF = 0; wF < \"+c+\"; wF++) {\\n int xF = xFCorner + wF * \"+s+\";\\n\\n if (xF < 0 || xF >= \"+t.inDepth+\") {\\n continue;\\n }\\n\\n for (int wR = 0; wR < \"+h+\"; wR++) {\\n int xR = xRCorner + wR * \"+u+\";\\n\\n if (xR < 0 || xR >= \"+t.inHeight+\") {\\n continue;\\n }\\n\\n for (int wC = 0; wC < \"+p+\"; wC++) {\\n int xC = xCCorner + wC * \"+l+\";\\n\\n if (xC < 0 || xC >= \"+t.inWidth+\") {\\n continue;\\n }\\n\\n for (int d1 = 0; d1 < \"+f+\"; d1 += 4) {\\n vec4 xValues = vec4(\\n getX(batch, xF, xR, xC, d1),\\n getX(batch, xF, xR, xC, d1 + 1),\\n getX(batch, xF, xR, xC, d1 + 2),\\n getX(batch, xF, xR, xC, d1 + 3)\\n );\\n vec4 wValues = vec4(\\n getW(wF, wR, wC, d1, d2),\\n getW(wF, wR, wC, d1 + 1, d2),\\n getW(wF, wR, wC, d1 + 2, d2),\\n getW(wF, wR, wC, d1 + 3, d2)\\n );\\n\\n dotProd += dot(xValues, wValues);\\n }\\n\\n if (\"+(1===d)+\") {\\n dotProd +=\\n getX(batch, xF, xR, xC, \"+f+\") *\\n getW(wF, wR, wC, \"+f+\", d2);\\n } else if (\"+(2===d)+\") {\\n vec2 xValues = vec2(\\n getX(batch, xF, xR, xC, \"+f+\"),\\n getX(batch, xF, xR, xC, \"+f+\" + 1)\\n );\\n vec2 wValues = vec2(\\n getW(wF, wR, wC, \"+f+\", d2),\\n getW(wF, wR, wC, \"+f+\" + 1, d2)\\n );\\n dotProd += dot(xValues, wValues);\\n } else if (\"+(3===d)+\") {\\n vec3 xValues = vec3(\\n getX(batch, xF, xR, xC, \"+f+\"),\\n getX(batch, xF, xR, xC, \"+f+\" + 1),\\n getX(batch, xF, xR, xC, \"+f+\" + 2)\\n );\\n vec3 wValues = vec3(\\n getW(wF, wR, wC, \"+f+\", d2),\\n getW(wF, wR, wC, \"+f+\" + 1, d2),\\n getW(wF, wR, wC, \"+f+\" + 2, d2)\\n );\\n dotProd += dot(xValues, wValues);\\n }\\n }\\n }\\n }\\n setOutput(dotProd);\\n }\\n \"}}(),ha=function(){return function(t){this.variableNames=[\"x\",\"W\"],this.outputShape=t.outShape;var e=t.inHeight,n=t.inWidth,r=t.padInfo.top,o=t.padInfo.left,a=t.strideHeight,i=t.strideWidth,s=t.dilationHeight,u=t.dilationWidth,l=t.filterHeight,c=t.filterWidth,h=t.outChannels/t.inChannels;this.userCode=\"\\n const ivec2 strides = ivec2(\"+a+\", \"+i+\");\\n const ivec2 pads = ivec2(\"+r+\", \"+o+\");\\n\\n void main() {\\n ivec4 coords = getOutputCoords();\\n int batch = coords.x;\\n ivec2 xRCCorner = coords.yz * strides - pads;\\n int d2 = coords.w;\\n int d1 = d2 / \"+h+\";\\n int q = d2 - d1 * \"+h+\";\\n\\n int xRCorner = xRCCorner.x;\\n int xCCorner = xRCCorner.y;\\n\\n // Convolve x(?, ?, d1) with w(:, :, d1, q) to get y(yR, yC, d2).\\n // ? = to be determined. : = across all values in that axis.\\n float dotProd = 0.0;\\n // TODO(dsmilkov): Flatten the two for loops and vec4 the operations.\\n for (int wR = 0; wR < \"+l+\"; wR++) {\\n int xR = xRCorner + wR * \"+s+\";\\n\\n if (xR < 0 || xR >= \"+e+\") {\\n continue;\\n }\\n\\n for (int wC = 0; wC < \"+c+\"; wC++) {\\n int xC = xCCorner + wC * \"+u+\";\\n\\n if (xC < 0 || xC >= \"+n+\") {\\n continue;\\n }\\n\\n float xVal = getX(batch, xR, xC, d1);\\n float wVal = getW(wR, wC, d1, q);\\n dotProd += xVal * wVal;\\n }\\n }\\n setOutput(dotProd);\\n }\\n \"}}(),pa=function(){return function(t){this.variableNames=[\"x\",\"W\"],this.usesPackedTextures=!0,this.outputShape=t.outShape;for(var e=t.inHeight,n=t.inWidth,r=t.padInfo.top,o=t.padInfo.left,a=t.strideHeight,i=t.strideWidth,s=t.dilationHeight,u=t.dilationWidth,l=t.filterHeight,c=t.filterWidth,h=c,f=\"int xR; int xC; int xCOffset;\",d=0;d= 0 && xR < \"+e+\" && xCOffset >= 0 && xCOffset < \"+n+\") {\\n xTexelR\"+d+\"C\"+v+\" = getX(batch, xR, xCOffset, d1);\\n } else {\\n xTexelR\"+d+\"C\"+v+\" = vec4(0.);\\n }\\n\\n xCOffset = xC + 1 - 2;\\n if(xR >= 0 && xR < \"+e+\" && xCOffset >= 0 && xCOffset < \"+n+\") {\\n vec4 previous = getX(batch, xR, xCOffset, d1);\\n xR\"+d+\"C\"+v+\" = vec4(previous.zw, xTexelR\"+d+\"C\"+v+\".xy);\\n } else {\\n xR\"+d+\"C\"+v+\" = vec4(0, 0, xTexelR\"+d+\"C\"+v+\".xy);\\n }\\n \":\"\\n if(xR >= 0 && xR < \"+e+\" && xC >= 0 && xC < \"+n+\") {\\n xTexelR\"+d+\"C\"+v+\" = getX(batch, xR, xC, d1);\\n } else {\\n xTexelR\"+d+\"C\"+v+\" = vec4(0.);\\n }\\n\\n xR\"+d+\"C\"+v+\" = xTexelR\"+d+\"C\"+v+\";\\n \",v+1= 0 && xR < \"+e+\" &&\\n xCOffset >= 0 && xCOffset < \"+n+\") {\\n xTexelR\"+d+\"C\"+(v+2)+\" = getX(batch, xR, xCOffset, d1);\\n }\\n \",u>1&&(f+=\"\\n xCOffset -= 2;\\n if(xR >= 0 && xR < \"+e+\" &&\\n xCOffset >= 0 && xCOffset < \"+n+\") {\\n xTexelR\"+d+\"C\"+v+\" = getX(batch, xR, xCOffset, d1);\\n } else {\\n xTexelR\"+d+\"C\"+v+\" = vec4(0.);\\n }\\n \"),f+=\"\\n xR\"+d+\"C\"+(v+1)+\" = vec4(\\n xTexelR\"+d+\"C\"+v+\".zw, xTexelR\"+d+\"C\"+(v+2)+\".xy);\\n \"):f+=\"\\n xCOffset = xC + \"+g+\";\\n\\n if(xR >= 0 && xR < \"+e+\" &&\\n xCOffset >= 0 && xCOffset < \"+n+\") {\\n xTexelR\"+d+\"C\"+(v+2)+\" = getX(batch, xR, xCOffset, d1);\\n }\\n\\n xR\"+d+\"C\"+(v+1)+\" = xTexelR\"+d+\"C\"+(v+2)+\";\\n \"}}else v= 0 && xR < \"+e+\") {\\n \",o%2==1?(f+=\"\\n xCOffset = xC + 1 - \"+i+\";\\n if(xCOffset >= 0 && xCOffset < \"+n+\") {\\n xTexelR\"+d+\"C\"+v+\" = getX(batch, xR, xCOffset, d1);\\n } else {\\n xTexelR\"+d+\"C\"+v+\" = vec4(0.);\\n }\\n\\n if(xC + 1 >= 0 && xC + 1 < \"+n+\") {\\n xTexelR\"+d+\"C\"+(v+2)+\" = getX(batch, xR, xC + 1, d1);\\n } else {\\n xTexelR\"+d+\"C\"+(v+2)+\" = vec4(0.);\\n }\\n\\n xR\"+d+\"C\"+v+\" = vec4(\\n xTexelR\"+d+\"C\"+v+\".zw, xTexelR\"+d+\"C\"+(v+2)+\".zw);\\n \",v+1= 0 && xCOffset < \"+n+\") {\\n final = getX(batch, xR, xCOffset, d1);\\n }\\n xR\"+d+\"C\"+(v+1)+\" = vec4(xTexelR\"+d+\"C\"+(v+2)+\".xy, final.xy);\\n \")):(f+=\"\\n if(xC >= 0 && xC < \"+n+\") {\\n xTexelR\"+d+\"C\"+v+\" = getX(batch, xR, xC, d1);\\n } else {\\n xTexelR\"+d+\"C\"+v+\" = vec4(0.);\\n }\\n\\n xCOffset = xC + \"+i+\";\\n if(xCOffset >= 0 && xCOffset < \"+n+\") {\\n xTexelR\"+d+\"C\"+(v+2)+\" = getX(batch, xR, xCOffset, d1);\\n } else {\\n xTexelR\"+d+\"C\"+(v+2)+\" = vec4(0.);\\n }\\n\\n xR\"+d+\"C\"+v+\" = vec4(\\n xTexelR\"+d+\"C\"+v+\".xy, xTexelR\"+d+\"C\"+(v+2)+\".xy);\\n \",v+11?[\"\"+(i-1)/(c-1),\"(y2-y1) * height_ratio\",\"y1*\"+d+\" + float(y)*(height_scale)\"]:[\"0.0\",\"0.0\",\"0.5 * (y1+y2) * \"+d],g=m[0],y=m[1],x=m[2],b=h>1?[\"\"+(s-1)/(h-1),\"(x2-x1) * width_ratio\",\"x1*\"+v+\" + float(x)*(width_scale)\"]:[\"0.0\",\"0.0\",\"0.5 * (x1+x2) * \"+v],w=b[0],C=b[1],E=b[2];this.userCode=\"\\n const float height_ratio = float(\"+g+\");\\n const float width_ratio = float(\"+w+\");\\n void main() {\\n ivec4 coords = getOutputCoords();\\n int b = coords[0];\\n int y = coords[1];\\n int x = coords[2];\\n int d = coords[3];\\n\\n // get box vals\\n float y1 = getBoxes(b,0);\\n float x1 = getBoxes(b,1);\\n float y2 = getBoxes(b,2);\\n float x2 = getBoxes(b,3);\\n\\n // get image in batch index\\n int bInd = round(getBoxInd(b));\\n if(bInd < 0 || bInd >= \"+a+\") {\\n return;\\n }\\n\\n float height_scale = \"+y+\";\\n float width_scale = \"+C+\";\\n\\n float in_y = \"+x+\";\\n if( in_y < 0.0 || in_y > \"+d+\" ) {\\n setOutput(float(\"+o+\"));\\n return;\\n }\\n float in_x = \"+E+\";\\n if( in_x < 0.0 || in_x > \"+v+\" ) {\\n setOutput(float(\"+o+\"));\\n return;\\n }\\n\\n vec2 sourceFracIndexCR = vec2(in_x,in_y);\\n if(\"+p+\" == 1) {\\n // Compute the four integer indices.\\n ivec2 sourceFloorCR = ivec2(sourceFracIndexCR);\\n ivec2 sourceCeilCR = ivec2(ceil(sourceFracIndexCR));\\n\\n float topLeft = getImage(b, sourceFloorCR.y, sourceFloorCR.x, d);\\n float bottomLeft = getImage(b, sourceCeilCR.y, sourceFloorCR.x, d);\\n float topRight = getImage(b, sourceFloorCR.y, sourceCeilCR.x, d);\\n float bottomRight = getImage(b, sourceCeilCR.y, sourceCeilCR.x, d);\\n\\n vec2 fracCR = sourceFracIndexCR - vec2(sourceFloorCR);\\n\\n float top = topLeft + (topRight - topLeft) * fracCR.x;\\n float bottom = bottomLeft + (bottomRight - bottomLeft) * fracCR.x;\\n float newValue = top + (bottom - top) * fracCR.y;\\n setOutput(newValue);\\n } else {\\n // Compute the coordinators of nearest neighbor point.\\n ivec2 sourceNearestCR = ivec2(floor(\\n sourceFracIndexCR + vec2(0.5,0.5)));\\n float newValue = getImage(b, sourceNearestCR.y, sourceNearestCR.x, d);\\n setOutput(newValue);\\n }\\n }\\n \"}}(),da=function(){return function(t,e,n){this.variableNames=[\"x\"],this.outputShape=t;var r=t.length,o=t[t.length-1],a=n?\"<\":\">\";this.userCode=\"\\n int getIndex(int i) {\\n \"+(n?\"return \"+o+\" -i - 1;\":\"return i;\")+\"\\n }\\n\\n void main() {\\n \"+Po(r)+\" coords = getOutputCoords();\\n int end = \"+va(r,\"coords\")+\";\\n float val = 0.0;\\n for (int i = \"+o+\" - 1; i >= 0; i -= 1) {\\n int idx = getIndex(i);\\n if (idx \"+a+\" end) {\\n continue;\\n }\\n if (idx == end && \"+e+\") {\\n continue;\\n }\\n \"+va(r,\"coords\")+\" = idx;\\n val += getX(\"+function(t,e){if(1===t)return\"\"+e;if(2===t)return e+\".x, \"+e+\".y\";if(3===t)return e+\".x, \"+e+\".y, \"+e+\".z\";if(4===t)return e+\".x, \"+e+\".y, \"+e+\".z, \"+e+\".w\";throw Error(\"Cumulative sum for rank \"+t+\" is not yet supported\")}(r,\"coords\")+\");\\n }\\n setOutput(val);\\n }\\n \"}}();function va(t,e){if(1===t)return\"\"+e;if(2===t)return e+\".y\";if(3===t)return e+\".z\";if(4===t)return e+\".w\";throw Error(\"Cumulative sum for rank \"+t+\" is not yet supported\")}var ma=function(){return function(t,e){this.variableNames=[\"A\"];var n=Ro();this.outputShape=t,this.userCode=\"\\n ivec3 outCoordsFromFlatIndex(int index) {\\n \"+Io([\"r\",\"c\",\"d\"],t)+\"\\n return ivec3(r, c, d);\\n }\\n\\n void main() {\\n ivec2 resTexRC = ivec2(resultUV.yx *\\n vec2(\"+e[0]+\", \"+e[1]+\"));\\n int index = 4 * (resTexRC.x * \"+e[1]+\" + resTexRC.y);\\n\\n vec4 result = vec4(0.);\\n\\n for (int i=0; i<4; i++) {\\n int flatIndex = index + i;\\n ivec3 rc = outCoordsFromFlatIndex(flatIndex);\\n result[i] = getA(rc.x, rc.y, rc.z);\\n }\\n\\n \"+n.output+\" = result;\\n }\\n \"}}(),ga=function(){return function(t,e){this.variableNames=[\"A\"],this.usesPackedTextures=!0;var n=Ro();this.outputShape=t,this.userCode=\"\\n ivec3 outCoordsFromFlatIndex(int index) {\\n \"+Io([\"r\",\"c\",\"d\"],t)+\"\\n return ivec3(r, c, d);\\n }\\n\\n void main() {\\n ivec2 resTexRC = ivec2(resultUV.yx *\\n vec2(\"+e[0]+\", \"+e[1]+\"));\\n int index = 4 * (resTexRC.x * \"+e[1]+\" + resTexRC.y);\\n\\n vec4 result = vec4(0.);\\n\\n for (int i=0; i<4; i++) {\\n int flatIndex = index + i;\\n ivec3 rc = outCoordsFromFlatIndex(flatIndex);\\n result[i] = getChannel(getA(rc.x, rc.y, rc.z), vec2(rc.y, rc.z));\\n }\\n\\n \"+n.output+\" = result;\\n }\\n \"}}(),ya=function(){function t(t,e,n){this.variableNames=[\"x\"],this.outputShape=[],this.outputShape=t,this.blockSize=e,this.dataFormat=n,this.userCode=\"\\n void main() {\\n ivec4 coords = getOutputCoords();\\n int b = coords[0];\\n int h = \"+this.getHeightCoordString()+\";\\n int w = \"+this.getWidthCoordString()+\";\\n int d = \"+this.getDepthCoordString()+\";\\n\\n int in_h = h / \"+e+\";\\n int offset_h = imod(h, \"+e+\");\\n int in_w = w / \"+e+\";\\n int offset_w = imod(w, \"+e+\");\\n int offset_d = (offset_h * \"+e+\" + offset_w) *\\n \"+this.getOutputDepthSize()+\";\\n int in_d = d + offset_d;\\n\\n float result = \"+this.getInputSamplingString()+\";\\n setOutput(result);\\n }\\n \"}return t.prototype.getHeightCoordString=function(){return\"NHWC\"===this.dataFormat?\"coords[1]\":\"coords[2]\"},t.prototype.getWidthCoordString=function(){return\"NHWC\"===this.dataFormat?\"coords[2]\":\"coords[3]\"},t.prototype.getDepthCoordString=function(){return\"NHWC\"===this.dataFormat?\"coords[3]\":\"coords[1]\"},t.prototype.getOutputDepthSize=function(){return\"NHWC\"===this.dataFormat?this.outputShape[3]:this.outputShape[1]},t.prototype.getInputSamplingString=function(){return\"NHWC\"===this.dataFormat?\"getX(b, in_h, in_w, in_d)\":\"getX(b, in_d, in_h, in_w)\"},t}(),xa=function(){return function(t){this.variableNames=[\"A\"];var e=Ro();this.outputShape=t,this.userCode=\"\\n \"+No+\"\\n\\n void main() {\\n float x = getAAtOutCoords();\\n \"+e.output+\" = encode_float(x);\\n }\\n \"}}(),ba=function(){return function(t){this.variableNames=[\"A\"],this.usesPackedTextures=!0;var e=Ro();this.outputShape=t,this.userCode=\"\\n \"+No+\"\\n\\n void main() {\\n ivec3 coords = getOutputCoords();\\n float x = getChannel(getAAtOutCoords(), vec2(coords.y, coords.z));\\n \"+e.output+\" = encode_float(x);\\n }\\n \"}}(),wa=function(){return function(t,e,n){void 0===n&&(n=!1),this.variableNames=[\"A\"];var r=Ro(),o=e[0],a=e[1];this.outputShape=t;var i=\"result\";n&&(i=\"floor(result * 255. + 0.5)\"),this.userCode=\"\\n \"+So(t)+\"\\n\\n void main() {\\n ivec3 coords = getOutputCoords();\\n\\n int flatIndex = getFlatIndex(coords);\\n int offset = imod(flatIndex, 4);\\n\\n flatIndex /= 4;\\n int r = flatIndex / \"+a+\";\\n int c = imod(flatIndex, \"+a+\");\\n vec2 uv = (vec2(c, r) + halfCR) / vec2(\"+a+\".0, \"+o+\".0);\\n vec4 values = \"+r.texture2D+\"(A, uv);\\n\\n float result;\\n\\n if(offset == 0) {\\n result = values[0];\\n } else if(offset == 1) {\\n result = values[1];\\n } else if(offset == 2) {\\n result = values[2];\\n } else {\\n result = values[3];\\n }\\n\\n \"+r.output+\" = vec4(\"+i+\", 0., 0., 0.);\\n }\\n \"}}(),Ca=function(){return function(t,e,n){void 0===n&&(n=!1),this.variableNames=[\"A\"];var r=Ro(),o=e[0],a=e[1];this.outputShape=t;var i=\"\",s=\"result\";n&&(s=\"floor(result * 255. + 0.5)\");for(var u=0;u<=1;u++)for(var l=0;l<=1;l++){var c=2*u+l;i+=\"\\n localCoords = coords;\\n if(localCoords[2] + \"+l+\" < \"+t[2]+\") {\\n localCoords[2] += \"+l+\";\\n if(localCoords[1] + \"+u+\" < \"+t[1]+\") {\\n localCoords[1] += \"+u+\";\\n\\n flatIndex = getFlatIndex(localCoords);\\n offset = imod(flatIndex, 4);\\n \\n flatIndex /= 4;\\n r = flatIndex / \"+a+\";\\n c = imod(flatIndex, \"+a+\");\\n uv = (vec2(c, r) + halfCR) / vec2(\"+a+\".0, \"+o+\".0);\\n values = \"+r.texture2D+\"(A, uv);\\n\\n if(offset == 0) {\\n result[\"+c+\"] = values[0];\\n } else if(offset == 1) {\\n result[\"+c+\"] = values[1];\\n } else if(offset == 2) {\\n result[\"+c+\"] = values[2];\\n } else {\\n result[\"+c+\"] = values[3];\\n }\\n }\\n }\\n \"}this.userCode=\"\\n \"+So(t)+\"\\n\\n void main() {\\n ivec3 coords = getOutputCoords();\\n\\n vec4 result = vec4(0.);\\n int flatIndex, r, c, offset;\\n ivec3 localCoords;\\n vec2 uv;\\n vec4 values;\\n \\n \"+i+\"\\n\\n \"+r.output+\" = \"+s+\";\\n }\\n \"}}(),Ea=\"return real * expR - imag * expI;\",Ra=\"return real * expI + imag * expR;\",Ia=function(){return function(t,e,n){this.variableNames=[\"real\",\"imag\"];var r=e[1];this.outputShape=e;var o=n?\"2.0 * \"+Math.PI:\"-2.0 * \"+Math.PI,a=n?r+\".0\":\"1.0\";this.userCode=\"\\n const float exponentMultiplier = \"+o+\";\\n\\n float unaryOpComplex(float real, float expR, float imag, float expI) {\\n \"+t+\"\\n }\\n\\n float mulMatDFT(int batch, int index) {\\n float indexRatio = float(index) / float(\"+r+\");\\n float exponentMultiplierTimesIndexRatio =\\n exponentMultiplier * indexRatio;\\n\\n float result = 0.0;\\n\\n for (int i = 0; i < \"+r+\"; i++) {\\n // x = (-2|2 * PI / N) * index * i;\\n float x = exponentMultiplierTimesIndexRatio * float(i);\\n float expR = cos(x);\\n float expI = sin(x);\\n float real = getReal(batch, i);\\n float imag = getImag(batch, i);\\n\\n result +=\\n unaryOpComplex(real, expR, imag, expI) / \"+a+\";\\n }\\n\\n return result;\\n }\\n\\n void main() {\\n ivec2 coords = getOutputCoords();\\n setOutput(mulMatDFT(coords[0], coords[1]));\\n }\\n \"}}(),Sa=function(){function t(t,e){this.outputShape=[],this.variableNames=[\"x\"],this.outputShape=t,this.userCode=\"\\n uniform float value;\\n void main() {\\n // Input can be obtained from uniform value.\\n setOutput(value);\\n }\\n \"}return t.prototype.getCustomSetupFunc=function(t){var e=this;return function(n,r){null==e.valueLoc&&(e.valueLoc=n.getUniformLocationNoThrow(r,\"value\")),n.gl.uniform1f(e.valueLoc,t)}},t}(),Na=function(){return function(t){this.variableNames=[\"A\"];var e=Ro(),n=t[0],r=t[1];this.outputShape=t,this.userCode=\"\\n void main() {\\n ivec3 coords = getOutputCoords();\\n int texR = coords[0];\\n int texC = coords[1];\\n int depth = coords[2];\\n vec2 uv = (vec2(texC, texR) + halfCR) / vec2(\"+r+\".0, \"+n+\".0);\\n\\n vec4 values = \"+e.texture2D+\"(A, uv);\\n float value;\\n if (depth == 0) {\\n value = values.r;\\n } else if (depth == 1) {\\n value = values.g;\\n } else if (depth == 2) {\\n value = values.b;\\n } else if (depth == 3) {\\n value = values.a;\\n }\\n\\n setOutput(floor(value * 255.0 + 0.5));\\n }\\n \"}}(),ka=function(){return function(t){this.variableNames=[\"A\"];var e=Ro(),n=t[0],r=t[1];this.outputShape=t,this.userCode=\"\\n void main() {\\n ivec3 coords = getOutputCoords();\\n int texR = coords[0];\\n int texC = coords[1];\\n int depth = coords[2];\\n\\n vec4 result = vec4(0.);\\n\\n for(int row=0; row<=1; row++) {\\n for(int col=0; col<=1; col++) {\\n texC = coords[1] + row;\\n depth = coords[2] + col;\\n\\n vec2 uv = (vec2(texC, texR) + halfCR) / vec2(\"+r+\".0, \"+n+\".0);\\n vec4 values = \"+e.texture2D+\"(A, uv);\\n float value;\\n if (depth == 0) {\\n value = values.r;\\n } else if (depth == 1) {\\n value = values.g;\\n } else if (depth == 2) {\\n value = values.b;\\n } else if (depth == 3) {\\n value = values.a;\\n }\\n\\n result[row * 2 + col] = floor(value * 255.0 + 0.5);\\n }\\n }\\n\\n \"+e.output+\" = result;\\n }\\n \"}}(),Aa=function(){return function(t,e,n){this.variableNames=[\"A\",\"indices\"];var r=t.slice();r[n]=e,this.outputShape=r,this.rank=r.length;var o=Po(this.rank),a=function(t,e){var n=t.length;if(n>4)throw Error(\"Gather for rank \"+n+\" is not yet supported\");if(1===n)return\"int(getIndices(resRC))\";for(var r=[\"resRC.x\",\"resRC.y\",\"resRC.z\",\"resRC.w\"],o=[],a=0;a1?\"strides[j]\":\"strides\";this.userCode=\"\\n \"+r+\" strides = \"+r+\"(\"+this.strides+\");\\n void main() {\\n \"+o+\" coords = getOutputCoords();\\n int flattenIndex = 0;\\n for (int j = 0; j < \"+this.sliceDim+\"; j++) {\\n int index = round(getIndices(coords[0], j));\\n flattenIndex += index * \"+a+\";\\n }\\n setOutput(getX(flattenIndex, coords[1]));\\n }\\n \"}}();function Oa(t,e){return[e,t]}function Fa(t){var e=y(t);return C(Math.ceil(e/4))}function Ma(t,e){return[Math.max(1,Math.ceil(e/2)),Math.max(1,Math.ceil(t/2))]}function Ba(t,e){var n=Ro();return zt(t,e,n.version+\"\\n precision highp float;\\n \"+n.attribute+\" vec3 clipSpacePos;\\n \"+n.attribute+\" vec2 uv;\\n \"+n.varyingVs+\" vec2 resultUV;\\n\\n void main() {\\n gl_Position = vec4(clipSpacePos, 1);\\n resultUV = uv;\\n }\")}function Pa(t,e){return Xt(t,e,new Float32Array([-1,1,0,0,1,-1,-1,0,0,0,1,1,0,1,1,1,-1,0,1,0]))}function La(t,e){return Yt(t,e,new Uint16Array([0,1,2,2,1,3]))}function Wa(t,e){var n,r,o,a,i,u,l,c,h=t;return 2===s.getNumber(\"WEBGL_VERSION\")?(n=h.R32F,r=h.R16F,o=h.RGBA16F,a=h.RGBA32F,i=h.RED,u=4,l=1,c=h.HALF_FLOAT):(n=t.RGBA,r=t.RGBA,o=t.RGBA,a=h.RGBA,i=t.RGBA,u=4,l=4,c=null!=e?e.HALF_FLOAT_OES:null),{internalFormatFloat:n,internalFormatHalfFloat:r,internalFormatPackedHalfFloat:o,internalFormatPackedFloat:a,textureFormatFloat:i,downloadTextureFormat:t.RGBA,downloadUnpackNumChannels:u,defaultNumChannels:l,textureTypeHalfFloat:c}}function Ua(t,e,n,r,o,a,i){Jt(n,r);var s=Qt(t,e),u=t.TEXTURE_2D;return Mt(t,e,function(){return t.bindTexture(u,s)}),Mt(t,e,function(){return t.texParameteri(u,t.TEXTURE_WRAP_S,t.CLAMP_TO_EDGE)}),Mt(t,e,function(){return t.texParameteri(u,t.TEXTURE_WRAP_T,t.CLAMP_TO_EDGE)}),Mt(t,e,function(){return t.texParameteri(u,t.TEXTURE_MIN_FILTER,t.NEAREST)}),Mt(t,e,function(){return t.texParameteri(u,t.TEXTURE_MAG_FILTER,t.NEAREST)}),Mt(t,e,function(){return t.texImage2D(u,0,o,n,r,0,a,i,null)}),Mt(t,e,function(){return t.bindTexture(t.TEXTURE_2D,null)}),s}function za(t,e,n,r,o){var a=Oa(n,r);return Ua(t,e,a[0],a[1],o.internalFormatFloat,o.textureFormatFloat,t.FLOAT)}function Va(t,e,n,r,o){var a=Oa(n,r);return Ua(t,e,a[0],a[1],o.internalFormatHalfFloat,o.textureFormatFloat,o.textureTypeHalfFloat)}function Ga(t,e,n,r,o){var a=Oa(n,r);return Ua(t,e,a[0],a[1],t.RGBA,t.RGBA,t.UNSIGNED_BYTE)}function qa(t,e,n,r,o){var a=Ma(n,r);return Ua(t,e,a[0],a[1],o.internalFormatPackedFloat,t.RGBA,t.FLOAT)}function Ha(t,e,n,r,o){var a=Ma(n,r);return Ua(t,e,a[0],a[1],o.internalFormatPackedHalfFloat,t.RGBA,o.textureTypeHalfFloat)}function $a(t,e,n,r){return Mt(t,e,function(){return t.bindBuffer(t.ARRAY_BUFFER,r)}),te(t,e,n,\"clipSpacePos\",r,3,20,0)&&te(t,e,n,\"uv\",r,2,20,12)}function ja(t,e,n,r,o,a,i){var s,u,l;Mt(t,e,function(){return t.bindTexture(t.TEXTURE_2D,n)}),a instanceof Uint8Array?(s=new Uint8Array(r*o*4),u=t.UNSIGNED_BYTE,l=t.RGBA):(s=new Float32Array(r*o*4),u=t.FLOAT,l=i.internalFormatPackedFloat),s.set(a),Mt(t,e,function(){return t.texImage2D(t.TEXTURE_2D,0,l,r,o,0,t.RGBA,u,s)}),Mt(t,e,function(){return t.bindTexture(t.TEXTURE_2D,null)})}function Ka(t,e,n,r){Mt(t,e,function(){return t.bindTexture(t.TEXTURE_2D,n)}),r.data instanceof Uint8Array?Mt(t,e,function(){return t.texImage2D(t.TEXTURE_2D,0,t.RGBA,r.width,r.height,0,t.RGBA,t.UNSIGNED_BYTE,r.data)}):Mt(t,e,function(){return t.texImage2D(t.TEXTURE_2D,0,t.RGBA,t.RGBA,t.UNSIGNED_BYTE,r)}),Mt(t,e,function(){return t.bindTexture(t.TEXTURE_2D,null)})}function Xa(t,e,n,r,o){var a=t.createBuffer();Mt(t,e,function(){return t.bindBuffer(t.PIXEL_PACK_BUFFER,a)});var i=16*n*r;return Mt(t,e,function(){return t.bufferData(t.PIXEL_PACK_BUFFER,i,t.STREAM_READ)}),Mt(t,e,function(){return t.readPixels(0,0,r,n,t.RGBA,t.FLOAT,0)}),Mt(t,e,function(){return t.bindBuffer(t.PIXEL_PACK_BUFFER,null)}),a}function Ya(t,e,n){var r=t,o=new Float32Array(n);return r.bindBuffer(r.PIXEL_PACK_BUFFER,e),r.getBufferSubData(r.PIXEL_PACK_BUFFER,0,o),r.bindBuffer(r.PIXEL_PACK_BUFFER,null),o}function Qa(t,e,n,r,o){var a=Oa(n,r),i=a[0],s=a[1],u=new Uint8Array(n*r*4);return Mt(t,e,function(){return t.readPixels(0,0,i,s,o.downloadTextureFormat,t.UNSIGNED_BYTE,u)}),new Float32Array(u.buffer)}function Ja(t,e,n,r,o,a,i,s){var u=t,l=new Float32Array(function(t,e){var n=Ma(t,e);return n[0]*n[1]*4}(a,i));return u.bindBuffer(u.PIXEL_PACK_BUFFER,e),u.getBufferSubData(u.PIXEL_PACK_BUFFER,0,l),u.bindBuffer(u.PIXEL_PACK_BUFFER,null),l}function Za(t,e,n,r){var o=new Float32Array(n*r*4);return Mt(t,e,function(){return t.readPixels(0,0,r,n,t.RGBA,t.FLOAT,o)}),o}!function(t){t[t.RENDER=0]=\"RENDER\",t[t.UPLOAD=1]=\"UPLOAD\",t[t.PIXELS=2]=\"PIXELS\",t[t.DOWNLOAD=3]=\"DOWNLOAD\"}(Ta||(Ta={})),function(t){t[t.UNPACKED_FLOAT16=0]=\"UNPACKED_FLOAT16\",t[t.UNPACKED_FLOAT32=1]=\"UNPACKED_FLOAT32\",t[t.PACKED_4X1_UNSIGNED_BYTE=2]=\"PACKED_4X1_UNSIGNED_BYTE\",t[t.PACKED_2X2_FLOAT32=3]=\"PACKED_2X2_FLOAT32\",t[t.PACKED_2X2_FLOAT16=4]=\"PACKED_2X2_FLOAT16\"}(Da||(Da={}));var ti=Object.freeze({createVertexShader:Ba,createVertexBuffer:Pa,createIndexBuffer:La,getTextureConfig:Wa,createFloat32MatrixTexture:za,createFloat16MatrixTexture:Va,createUnsignedBytesMatrixTexture:Ga,createPackedMatrixTexture:qa,createFloat16PackedMatrixTexture:Ha,bindVertexProgramAttributeStreams:$a,uploadDenseMatrixToTexture:ja,uploadPixelDataToTexture:Ka,createBufferFromOutputTexture:Xa,downloadFloat32MatrixFromBuffer:Ya,downloadByteEncodedFloatMatrixFromOutputTexture:Qa,downloadPackedMatrixFromBuffer:Ja,downloadMatrixFromPackedOutputTexture:Za}),ei=function(){function t(t){this.outputTexture=null,this.program=null,this.disposed=!1,this.vertexAttrsAreBound=!1,this.itemsToPoll=[];var e=s.getNumber(\"WEBGL_VERSION\");null!=t?(this.gl=t,Ot(e,t)):this.gl=Ft(e),1===s.getNumber(\"WEBGL_VERSION\")?(this.textureFloatExtension=Ut(this.gl,this.debug,\"OES_texture_float\"),this.colorBufferFloatExtension=this.gl.getExtension(\"WEBGL_color_buffer_float\"),s.getBool(\"WEBGL_RENDER_FLOAT32_ENABLED\")||(this.textureHalfFloatExtension=Ut(this.gl,this.debug,\"OES_texture_half_float\"),this.colorBufferHalfFloatExtension=this.gl.getExtension(\"EXT_color_buffer_half_float\"))):this.colorBufferFloatExtension=Ut(this.gl,this.debug,\"EXT_color_buffer_float\"),this.vertexBuffer=Pa(this.gl,this.debug),this.indexBuffer=La(this.gl,this.debug),this.framebuffer=Zt(this.gl,this.debug),this.textureConfig=Wa(this.gl,this.textureHalfFloatExtension)}return Object.defineProperty(t.prototype,\"debug\",{get:function(){return s.getBool(\"DEBUG\")},enumerable:!0,configurable:!0}),t.prototype.dispose=function(){var t=this;if(!this.disposed){null!=this.program&&console.warn(\"Disposing a GPGPUContext that still has a bound WebGLProgram. This is probably a resource leak, delete the program with GPGPUContext.deleteProgram before disposing.\"),null!=this.outputTexture&&console.warn(\"Disposing a GPGPUContext that still has a bound output matrix texture. This is probably a resource leak, delete the output matrix texture with GPGPUContext.deleteMatrixTexture before disposing.\");var e=this.gl;Mt(e,this.debug,function(){return e.finish()}),Mt(e,this.debug,function(){return e.bindFramebuffer(e.FRAMEBUFFER,null)}),Mt(e,this.debug,function(){return e.deleteFramebuffer(t.framebuffer)}),Mt(e,this.debug,function(){return e.bindBuffer(e.ARRAY_BUFFER,null)}),Mt(e,this.debug,function(){return e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,null)}),Mt(e,this.debug,function(){return e.deleteBuffer(t.indexBuffer)}),this.disposed=!0}},t.prototype.createFloat32MatrixTexture=function(t,e){return this.throwIfDisposed(),za(this.gl,this.debug,t,e,this.textureConfig)},t.prototype.createFloat16MatrixTexture=function(t,e){return this.throwIfDisposed(),Va(this.gl,this.debug,t,e,this.textureConfig)},t.prototype.createUnsignedBytesMatrixTexture=function(t,e){return this.throwIfDisposed(),Ga(this.gl,this.debug,t,e,this.textureConfig)},t.prototype.uploadPixelDataToTexture=function(t,e){this.throwIfDisposed(),Ka(this.gl,this.debug,t,e)},t.prototype.uploadDenseMatrixToTexture=function(t,e,n,r){this.throwIfDisposed(),ja(this.gl,this.debug,t,e,n,r,this.textureConfig)},t.prototype.createFloat16PackedMatrixTexture=function(t,e){return this.throwIfDisposed(),Ha(this.gl,this.debug,t,e,this.textureConfig)},t.prototype.createPackedMatrixTexture=function(t,e){return this.throwIfDisposed(),qa(this.gl,this.debug,t,e,this.textureConfig)},t.prototype.deleteMatrixTexture=function(t){var e=this;this.throwIfDisposed(),this.outputTexture===t&&(ie(this.gl,this.debug,this.framebuffer),this.outputTexture=null),Mt(this.gl,this.debug,function(){return e.gl.deleteTexture(t)})},t.prototype.downloadByteEncodedFloatMatrixFromOutputTexture=function(t,e,n){var r=this;return this.downloadMatrixDriver(t,function(){return Qa(r.gl,r.debug,e,n,r.textureConfig)})},t.prototype.downloadPackedMatrixFromBuffer=function(t,e,n,r,o,a){return Ja(this.gl,t,0,0,0,o,a,this.textureConfig)},t.prototype.downloadFloat32MatrixFromBuffer=function(t,e){return Ya(this.gl,t,e)},t.prototype.createBufferFromTexture=function(t,e,n){this.bindTextureToFrameBuffer(t);var r=Xa(this.gl,this.debug,e,n,this.textureConfig);return this.unbindTextureToFrameBuffer(),r},t.prototype.createAndWaitForFence=function(){var t=this.createFence(this.gl);return this.pollFence(t)},t.prototype.createFence=function(t){var e,n,r=this;if(s.getBool(\"WEBGL_FENCE_API_ENABLED\")){var o=t,a=o.fenceSync(o.SYNC_GPU_COMMANDS_COMPLETE,0);t.flush(),n=function(){var t=o.clientWaitSync(a,0,0);return t===o.ALREADY_SIGNALED||t===o.CONDITION_SATISFIED},e=a}else s.getNumber(\"WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION\")>0?(e=this.beginQuery(),this.endQuery(),n=function(){return r.isQueryAvailable(e,s.getNumber(\"WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION\"))}):n=function(){return!0};return{query:e,isFencePassed:n}},t.prototype.downloadMatrixFromPackedTexture=function(t,e,n){var r=this;return this.downloadMatrixDriver(t,function(){return Za(r.gl,r.debug,e,n)})},t.prototype.createProgram=function(t){this.throwIfDisposed();var e=this.gl,n=Vt(e,this.debug,t),r=Ba(e,this.debug),o=$t(e,this.debug);return Mt(e,this.debug,function(){return e.attachShader(o,r)}),Mt(e,this.debug,function(){return e.attachShader(o,n)}),jt(e,this.debug,o),this.debug&&Kt(e,this.debug,o),this.vertexAttrsAreBound||(this.setProgram(o),this.vertexAttrsAreBound=$a(e,this.debug,this.program,this.vertexBuffer)),o},t.prototype.deleteProgram=function(t){var e=this;this.throwIfDisposed(),t===this.program&&(this.program=null),null!=t&&Mt(this.gl,this.debug,function(){return e.gl.deleteProgram(t)})},t.prototype.setProgram=function(t){var e=this;this.throwIfDisposed(),this.program=t,null!=this.program&&this.debug&&Kt(this.gl,this.debug,this.program),Mt(this.gl,this.debug,function(){return e.gl.useProgram(t)})},t.prototype.getUniformLocation=function(t,e,n){return void 0===n&&(n=!0),this.throwIfDisposed(),n?ne(this.gl,this.debug,t,e):re(this.gl,t,e)},t.prototype.getAttributeLocation=function(t,e){var n=this;return this.throwIfDisposed(),Mt(this.gl,this.debug,function(){return n.gl.getAttribLocation(t,e)})},t.prototype.getUniformLocationNoThrow=function(t,e){return this.throwIfDisposed(),this.gl.getUniformLocation(t,e)},t.prototype.setInputMatrixTexture=function(t,e,n){this.throwIfDisposed(),this.throwIfNoProgram(),oe(this.gl,this.debug,this.program,t,e,n)},t.prototype.setOutputMatrixTexture=function(t,e,n){this.setOutputMatrixTextureDriver(t,n,e)},t.prototype.setOutputPackedMatrixTexture=function(t,e,n){this.throwIfDisposed();var r=Ma(e,n),o=r[0],a=r[1];this.setOutputMatrixTextureDriver(t,o,a)},t.prototype.setOutputMatrixWriteRegion=function(t,e,n,r){this.setOutputMatrixWriteRegionDriver(n,t,r,e)},t.prototype.setOutputPackedMatrixWriteRegion=function(t,e,n,r){throw new Error(\"setOutputPackedMatrixWriteRegion not implemented.\")},t.prototype.debugValidate=function(){null!=this.program&&Kt(this.gl,this.debug,this.program),se(this.gl)},t.prototype.executeProgram=function(){this.throwIfDisposed(),this.throwIfNoProgram();var t=this.gl;this.debug&&this.debugValidate(),Mt(t,this.debug,function(){return t.drawElements(t.TRIANGLES,6,t.UNSIGNED_SHORT,0)})},t.prototype.blockUntilAllProgramsCompleted=function(){var t=this;this.throwIfDisposed(),Mt(this.gl,this.debug,function(){return t.gl.finish()})},t.prototype.getQueryTimerExtension=function(){return null==this.disjointQueryTimerExtension&&(this.disjointQueryTimerExtension=Ut(this.gl,this.debug,2===s.getNumber(\"WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION\")?\"EXT_disjoint_timer_query_webgl2\":\"EXT_disjoint_timer_query\")),this.disjointQueryTimerExtension},t.prototype.getQueryTimerExtensionWebGL2=function(){return this.getQueryTimerExtension()},t.prototype.getQueryTimerExtensionWebGL1=function(){return this.getQueryTimerExtension()},t.prototype.beginQuery=function(){if(2===s.getNumber(\"WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION\")){var t=this.gl,e=this.getQueryTimerExtensionWebGL2(),n=t.createQuery();return t.beginQuery(e.TIME_ELAPSED_EXT,n),n}var r=this.getQueryTimerExtensionWebGL1(),o=r.createQueryEXT();return r.beginQueryEXT(r.TIME_ELAPSED_EXT,o),o},t.prototype.endQuery=function(){if(2!==s.getNumber(\"WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION\")){var t=this.getQueryTimerExtensionWebGL1();t.endQueryEXT(t.TIME_ELAPSED_EXT)}else{var e=this.gl,n=this.getQueryTimerExtensionWebGL2();e.endQuery(n.TIME_ELAPSED_EXT)}},t.prototype.waitForQueryAndGetTime=function(t){return r(this,void 0,void 0,function(){var e=this;return o(this,function(n){switch(n.label){case 0:return[4,R(function(){return e.disposed||e.isQueryAvailable(t,s.getNumber(\"WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION\"))})];case 1:return n.sent(),[2,this.getQueryTime(t,s.getNumber(\"WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION\"))]}})})},t.prototype.getQueryTime=function(t,e){if(0===e)return null;if(2===e){var n=this.gl;return n.getQueryParameter(t,n.QUERY_RESULT)/1e6}var r=this.getQueryTimerExtensionWebGL1();return r.getQueryObjectEXT(t,r.QUERY_RESULT_EXT)/1e6},t.prototype.isQueryAvailable=function(t,e){if(0===e)return!0;if(2===e){var n=this.gl,r=this.getQueryTimerExtensionWebGL2(),o=n.getQueryParameter(t,n.QUERY_RESULT_AVAILABLE);return null==this.disjoint&&(this.disjoint=this.gl.getParameter(r.GPU_DISJOINT_EXT)),o&&!this.disjoint}o=(r=this.getQueryTimerExtensionWebGL1()).getQueryObjectEXT(t,r.QUERY_RESULT_AVAILABLE_EXT);return null==this.disjoint&&(this.disjoint=this.gl.getParameter(r.GPU_DISJOINT_EXT)),o&&!this.disjoint},t.prototype.pollFence=function(t){var e=this;return new Promise(function(n){e.addItemToPoll(function(){return t.isFencePassed()},function(){return n()})})},t.prototype.pollItems=function(){for(var t=function(t){for(var e=0;e1||R(function(){return n.pollItems(),0===n.itemsToPoll.length})},t.prototype.bindTextureToFrameBuffer=function(t){this.throwIfDisposed(),ae(this.gl,this.debug,t,this.framebuffer),this.debug&&se(this.gl)},t.prototype.unbindTextureToFrameBuffer=function(){null!=this.outputTexture?(ae(this.gl,this.debug,this.outputTexture,this.framebuffer),this.debug&&se(this.gl)):ie(this.gl,this.debug,this.framebuffer)},t.prototype.downloadMatrixDriver=function(t,e){this.bindTextureToFrameBuffer(t);var n=e();return this.unbindTextureToFrameBuffer(),n},t.prototype.setOutputMatrixTextureDriver=function(t,e,n){this.throwIfDisposed();var r=this.gl;ae(r,this.debug,t,this.framebuffer),this.debug&&se(r),this.outputTexture=t,Mt(r,this.debug,function(){return r.viewport(0,0,e,n)}),Mt(r,this.debug,function(){return r.scissor(0,0,e,n)})},t.prototype.setOutputMatrixWriteRegionDriver=function(t,e,n,r){var o=this;this.throwIfDisposed(),Mt(this.gl,this.debug,function(){return o.gl.scissor(t,e,n,r)})},t.prototype.throwIfDisposed=function(){if(this.disposed)throw new Error(\"Attempted to use disposed GPGPUContext.\")},t.prototype.throwIfNoProgram=function(){if(null==this.program)throw new Error(\"No GPU program is currently set.\")},t}();function ni(t,e){if(t.length!==e.length)throw Error(\"Binary was compiled with \"+t.length+\" inputs, but was executed with \"+e.length+\" inputs\");t.forEach(function(t,n){var r=t.logicalShape,o=e[n],a=o.shape;if(!x(r,a))throw Error(\"Binary was compiled with different shapes than the current args. Shapes \"+r+\" and \"+a+\" must match\");if(!t.isUniform||!o.isUniform){var i=t.texShape,s=o.isUniform?null:o.texData.texShape;if(!x(i,s))throw Error(\"Binary was compiled with different texture shapes than the current args. Shape \"+i+\" and \"+s+\" must match\")}})}var ri=function(){return function(t,e,n){this.variableNames=[\"A\"],this.usesPackedTextures=!0,this.outputShape=t;var r=n.filterWidth,o=n.inChannels,a=n.strideWidth,i=n.strideHeight,s=n.padInfo,u=n.outWidth,l=n.dilationWidth,c=n.dilationHeight,h=s.left,p=s.top,f=o*r,d=Ro();this.userCode=\"\\n void main() {\\n ivec2 rc = getOutputCoords();\\n\\n vec4 result = vec4(0);\\n\\n for(int row=0; row<=1; row++) {\\n for(int col=0; col<=1; col++) {\\n int blockIndex = rc.y + col;\\n int pos = rc.x + row;\\n\\n if(blockIndex >= \"+t[1]+\" || pos >= \"+t[0]+\") continue;\\n\\n int offsetY = int(blockIndex / (\"+u+\")) * \"+i+\" - \"+p+\";\\n int d0 = offsetY + \"+c+\" * (pos / \"+f+\");\\n\\n if(d0 >= \"+e[0]+\" || d0 < 0) continue;\\n\\n int offsetX = int(mod(float(blockIndex), \"+u+\".) * \"+a+\". - \"+h+\".);\\n int d1 = offsetX + \"+l+\" * (int(mod(float(pos), \"+f+\".) / \"+o+\".));\\n\\n if(d1 >= \"+e[1]+\" || d1 < 0) continue;\\n\\n vec2 innerDims = vec2(d1, int(mod(float(pos), \"+o+\".)));\\n result[row * 2 + col] = getChannel(getA(d0, int(innerDims.x),\\n int(innerDims.y)), innerDims);\\n }\\n }\\n\\n \"+d.output+\" = result;\\n }\\n \"}}(),oi=function(){return function(t,e,n,r,o){this.variableNames=[\"x\"],this.outputShape=[];var a,i=e,s=t[3]-1;this.outputShape=t;var u=\"float(\"+n+\") + float(\"+r+\") * sum\";a=.5===o?\"inversesqrt(\"+u+\")\":1===o?\"1.0/(\"+u+\")\":\"exp(log(\"+u+\") * float(-\"+o+\"));\",this.userCode=\"\\n void main() {\\n ivec4 coords = getOutputCoords();\\n int b = coords[0];\\n int r = coords[1];\\n int c = coords[2];\\n int d = coords[3];\\n float x = getX(b, r, c, d);\\n float sum = 0.0;\\n for (int j = -\"+i+\"; j <= \"+i+\"; j++) {\\n int idx = d + j;\\n if (idx >= 0 && idx <= \"+s+\") {\\n float z = getX(b, r, c, idx);\\n sum += z * z;\\n }\\n }\\n float val = x * \"+a+\";\\n setOutput(val);\\n }\\n \"}}(),ai=function(){return function(t,e,n,r,o){this.variableNames=[\"inputImage\",\"outputImage\",\"dy\"],this.outputShape=[],this.outputShape=t,this.depth=t[3],this.depthRadius=e,this.bias=n,this.alpha=r,this.beta=o,this.userCode=\"\\n void main() {\\n ivec4 coords = getOutputCoords();\\n int b = coords[0];\\n int r = coords[1];\\n int c = coords[2];\\n\\n float result = 0.0;\\n for (int d = 0; d < \"+this.depth+\"; ++d) {\\n int depthBegin = int(max(0.0, float(d - \"+e+\")));\\n int depthEnd = int(min(float(\"+this.depth+\"),\\n float(d + \"+e+\" + 1)));\\n\\n const int MIN_DEPTH_BEGIN = 0;\\n const int MAX_DEPTH_END = \"+this.depth+\";\\n\\n float norm = 0.0;\\n for (int k = MIN_DEPTH_BEGIN; k < MAX_DEPTH_END; ++k) {\\n if (k < depthBegin){\\n continue;\\n }\\n else if (k >= depthBegin && k < depthEnd) {\\n norm += getInputImage(b, r, c, k) * getInputImage(b, r, c, k);\\n }\\n else {\\n break;\\n }\\n }\\n\\n norm = float(\"+r+\") * norm + float(\"+n+\");\\n\\n for(int k = MIN_DEPTH_BEGIN; k < MAX_DEPTH_END; ++k){\\n if (k < depthBegin){\\n continue;\\n }\\n else if (k >= depthBegin && k < depthEnd){\\n float dyi = -2.0 * float(\"+r+\")\\n * float(\"+o+\")\\n * getInputImage(b ,r ,c, k) * getOutputImage(b, r, c, d)\\n / norm;\\n if (k == d) {\\n dyi += pow(norm, -1.0 * \"+o+\");\\n }\\n if (k == coords[3]) {\\n dyi *= getDy(b, r, c, d);\\n result += dyi;\\n }\\n }\\n else {\\n break;\\n }\\n }\\n }\\n setOutput(result);\\n }\\n \"}}(),ii=function(){return function(t,e,n,r,o){this.variableNames=[\"x\"],this.outputShape=[],this.usesPackedTextures=!0;var a,i=e,s=t[3]-1;this.outputShape=t;var u=\"float(\"+n+\") + float(\"+r+\") * sum\";a=.5===o?\"inversesqrt(\"+u+\")\":1===o?\"1.0/(\"+u+\")\":\"exp(log(\"+u+\") * float(-\"+o+\"));\",this.userCode=\"\\n void main() {\\n ivec4 coords = getOutputCoords();\\n int b = coords.x;\\n int r = coords.y;\\n int c = coords.z;\\n int d = coords.w;\\n\\n bool hasNextCol = d < \"+this.outputShape[3]+\";\\n bool hasNextRow = c < \"+this.outputShape[2]+\";\\n\\n vec4 sum = vec4(0.);\\n vec4 xFragAtOutputCoords = getX(b, r, c, d);\\n\\n vec4 xAtOutputCoords = vec4(\\n getChannel(xFragAtOutputCoords, vec2(c, d)),\\n hasNextCol ?\\n getChannel(xFragAtOutputCoords, vec2(c, d + 1)) : 0.0,\\n hasNextRow ?\\n getChannel(xFragAtOutputCoords , vec2(c + 1, d)) : 0.0,\\n (hasNextRow && hasNextCol) ?\\n getChannel(xFragAtOutputCoords, vec2(c + 1, d + 1)) : 0.0\\n );\\n\\n int firstChannel = d - \"+i+\";\\n vec2 cache = vec2(0.);\\n if(firstChannel >= 0){\\n vec4 firstChannelFrag = getX(b, r, c, firstChannel);\\n cache.x = getChannel(firstChannelFrag, vec2(c, firstChannel));\\n if(hasNextRow){\\n cache.y = getChannel(firstChannelFrag, vec2(c + 1, firstChannel));\\n }\\n }\\n\\n ivec2 depth = ivec2(d, d + 1);\\n for (int j = - \"+i+\"; j <= \"+i+\"; j++) {\\n ivec2 idx = depth + j;\\n bvec2 aboveLowerBound = greaterThanEqual(idx, ivec2(0));\\n bvec2 belowUpperBound = lessThanEqual(idx, ivec2(\"+s+\"));\\n\\n bool depthInRange = aboveLowerBound.x && belowUpperBound.x;\\n bool depthPlusOneInRange = aboveLowerBound.y && belowUpperBound.y;\\n\\n if(depthInRange || depthPlusOneInRange){\\n vec4 z = vec4(0.);\\n vec4 xFragAtCurrentDepth;\\n z.xz = cache.xy;\\n if(depthPlusOneInRange && hasNextCol){\\n xFragAtCurrentDepth = idx.y != d ?\\n getX(b, r, c, idx.y) : xFragAtOutputCoords;\\n z.y = getChannel(xFragAtCurrentDepth, vec2(c, idx.y));\\n if(hasNextRow){\\n z.w = getChannel(xFragAtCurrentDepth, vec2(c + 1, idx.y));\\n }\\n }\\n cache.xy = z.yw;\\n sum += z * z;\\n }\\n }\\n vec4 result = xAtOutputCoords * \"+a+\";\\n setOutput(result);\\n }\\n \"}}(),si=function(){return function(t){this.variableNames=[\"dy\",\"maxPos\"],this.outputShape=t.inShape;var e=t.strideHeight,n=t.strideWidth,r=t.dilationHeight,o=t.effectiveFilterHeight,a=t.effectiveFilterWidth,i=o-1-t.padInfo.top,s=a-1-t.padInfo.left,u=o*a-1;this.userCode=\"\\n const ivec2 pads = ivec2(\"+i+\", \"+s+\");\\n\\n void main() {\\n ivec4 coords = getOutputCoords();\\n int b = coords[0];\\n int d = coords[3];\\n\\n ivec2 dyRCCorner = coords.yz - pads;\\n int dyRCorner = dyRCCorner.x;\\n int dyCCorner = dyRCCorner.y;\\n\\n // Convolve dy(?, ?, d) with pos mask(:, :, d) to get dx(xR, xC, d).\\n // ? = to be determined. : = across all values in that axis.\\n float dotProd = 0.0;\\n for (int wR = 0; wR < \"+o+\";\\n wR += \"+r+\") {\\n float dyR = float(dyRCorner + wR) / \"+e+\".0;\\n\\n if (dyR < 0.0 || dyR >= \"+t.outHeight+\".0 || fract(dyR) > 0.0) {\\n continue;\\n }\\n int idyR = int(dyR);\\n\\n for (int wC = 0; wC < \"+a+\"; wC++) {\\n float dyC = float(dyCCorner + wC) / \"+n+\".0;\\n\\n if (dyC < 0.0 || dyC >= \"+t.outWidth+\".0 ||\\n fract(dyC) > 0.0) {\\n continue;\\n }\\n int idyC = int(dyC);\\n\\n float dyValue = getDy(b, idyR, idyC, d);\\n int maxPosValue = \"+u+\" - int(getMaxPos(b, idyR, idyC, d));\\n\\n // Get the current value, check it against the value from the\\n // position matrix.\\n int curPosValue = wR * \"+a+\" + wC;\\n float mask = float(maxPosValue == curPosValue ? 1.0 : 0.0);\\n\\n dotProd += dyValue * mask;\\n }\\n }\\n setOutput(dotProd);\\n }\\n \"}}(),ui=function(){return function(t,e,n,r,o,a){void 0===n&&(n=!1),void 0===r&&(r=!1),void 0===o&&(o=!1),void 0===a&&(a=null),this.variableNames=[\"matrixA\",\"matrixB\"],this.usesPackedTextures=!0,this.outputShape=e;var i=n?t[1]:t[2],s=Math.ceil(i/2),u=n?\"i * 2, rc.y\":\"rc.y, i * 2\",l=r?\"rc.z, i * 2\":\"i * 2, rc.z\",c=n?[\"a.xxyy\",\"a.zzww\"]:[\"a.xxzz\",\"a.yyww\"],h=r?[\"b.xzxz\",\"b.ywyw\"]:[\"b.xyxy\",\"b.zwzw\"],p=\"\",f=\"\";a&&(p=\"vec4 activation(vec4 x) {\\n \"+a+\"\\n }\",f=\"result = activation(result);\");var d=o?\"result += getBiasAtOutCoords();\":\"\";o&&this.variableNames.push(\"bias\"),this.userCode=\"\\n \"+p+\"\\n\\n const float sharedDimension = \"+s+\".0;\\n\\n vec4 dot2x2ARowBCol(ivec3 rc) {\\n vec4 result = vec4(0);\\n for (int i = 0; i < \"+s+\"; i++) {\\n vec4 a = getMatrixA(rc.x, \"+u+\");\\n vec4 b = getMatrixB(rc.x, \"+l+\");\\n\\n result += (\"+c[0]+\" * \"+h[0]+\") + (\"+c[1]+\" * \"+h[1]+\");\\n }\\n return result;\\n }\\n\\n void main() {\\n ivec3 rc = getOutputCoords();\\n vec4 result = dot2x2ARowBCol(rc);\\n\\n \"+d+\"\\n\\n \"+f+\"\\n\\n setOutput(result);\\n }\\n \"}}(),li=function(){function t(t,e,n){this.variableNames=[\"probs\"],this.outputShape=[t,n],this.userCode=\"\\n uniform float seed;\\n\\n void main() {\\n ivec2 coords = getOutputCoords();\\n int batch = coords[0];\\n\\n float r = random(seed);\\n float cdf = 0.0;\\n\\n for (int i = 0; i < \"+(e-1)+\"; i++) {\\n cdf += getProbs(batch, i);\\n\\n if (r < cdf) {\\n setOutput(float(i));\\n return;\\n }\\n }\\n\\n // If no other event happened, last event happened.\\n setOutput(float(\"+(e-1)+\"));\\n }\\n \"}return t.prototype.getCustomSetupFunc=function(t){var e=this;return function(n,r){null==e.seedLoc&&(e.seedLoc=n.getUniformLocation(r,\"seed\")),n.gl.uniform1f(e.seedLoc,t)}},t}(),ci=function(){return function(t,e,n,r){this.variableNames=[\"indices\"],this.outputShape=[t,e],this.userCode=\"\\n void main() {\\n ivec2 coords = getOutputCoords();\\n int index = round(getIndices(coords.x));\\n setOutput(mix(float(\"+r+\"), float(\"+n+\"),\\n float(index == coords.y)));\\n }\\n \"}}(),hi=function(){return function(t){this.variableNames=[\"A\"],this.outputShape=t;var e=t.length;if(0===e)this.userCode=\"\\n void main() {\\n setOutput(vec4(getA(), 0., 0., 0.));\\n }\\n \";else{var n=Eo(\"rc\",e),r=Po(e),o=function(t,e,n){if(1===t)return\"rc > \"+e[0];for(var r=\"\",o=t-2;o= \"+e[o],o= \"+e+\";\\n bool rEdge = rp1 >= \"+n+\";\\n \"}(e,t[t.length-1],t[t.length-2],n),i=function(t,e){var n=t.length,r=function(t,e){for(var n=[],r=0;r<=1;r++)for(var o=0;o<=1;o++){for(var a=(0===r?\"r\":\"rp1\")+\", \"+(0===o?\"c\":\"cp1\"),i=2;i= \"+t[0]+\" ? 0. : getA(rc + 1),\\n 0, 0\":\"getA(\"+r[0]+\"),\\n cEdge ? 0. : getA(\"+r[1]+\"),\\n rEdge ? 0. : getA(\"+r[2]+\"),\\n rEdge || cEdge ? 0. : getA(\"+r[3]+\")\"}(t,n);this.userCode=\"\\n void main() {\\n \"+r+\" rc = getOutputCoords();\\n\\n if(\"+o+\") {\\n setOutput(vec4(0));\\n } else {\\n \"+a+\"\\n\\n setOutput(vec4(\"+i+\"));\\n }\\n }\\n \"}}}();var pi=function(){return function(t,e,n){this.variableNames=[\"x\"],this.outputShape=e.map(function(e,n){return e[0]+t[n]+e[1]});var r=t.length,o=Po(r),a=e.map(function(t){return t[0]}).join(\",\"),i=e.map(function(e,n){return e[0]+t[n]}).join(\",\"),s=[\"coords[0]\",\"coords[1]\",\"coords[2]\",\"coords[3]\"].slice(0,r);this.userCode=1!==r?\"\\n \"+o+\" start = \"+o+\"(\"+a+\");\\n \"+o+\" end = \"+o+\"(\"+i+\");\\n\\n void main() {\\n \"+o+\" outC = getOutputCoords();\\n if (any(lessThan(outC, start)) || any(greaterThanEqual(outC, end))) {\\n setOutput(float(\"+n+\"));\\n } else {\\n \"+o+\" coords = outC - start;\\n setOutput(getX(\"+s+\"));\\n }\\n }\\n \":\"\\n int start = \"+a+\";\\n int end = \"+i+\";\\n\\n void main() {\\n int outC = getOutputCoords();\\n if (outC < start || outC >= end) {\\n setOutput(float(\"+n+\"));\\n } else {\\n setOutput(getX(outC - start));\\n }\\n }\\n \"}}(),fi=function(){return function(t,e,n){this.variableNames=[\"x\"],this.usesPackedTextures=!0,this.outputShape=e.map(function(e,n){return e[0]+t[n]+e[1]});for(var r=t.length,o=Po(r),a=e.map(function(t){return t[0]}).join(\",\"),i=e.map(function(e,n){return e[0]+t[n]}).join(\",\"),s=Eo(\"rc\",r),u=Eo(\"source\",r),l=s[r-1]+\" < \"+this.outputShape[r-1],c=1===r?\"source\":\"vec2(\"+u.slice(-2).join()+\")\",h=[o+\" rc = outputLoc;\",s[r-1]+\" += 1;\\n if(\"+l+\") {\\n \",1===r?\"\":\"}\\n rc = outputLoc;\\n \"+s[r-2]+\" += 1;\\n if(\"+s[r-2]+\" < \"+this.outputShape[r-2]+\") {\",1===r?\"\":\" \"+s[r-1]+\" += 1;\\n if(\"+l+\") {\"],p=1===r?\"rc < start || rc >= end\":\"any(lessThan(rc, start)) || any(greaterThanEqual(rc, end))\",f=\"\",d=0,v=1===r?2:4;d= \"+t.inHeight+\") {\\n continue;\\n }\\n\\n for (int wC = 0; wC < \"+l+\";\\n wC += \"+s+\") {\\n int xC = xCCorner + wC;\\n\\n if (xC < 0 || xC >= \"+t.inWidth+\") {\\n continue;\\n }\\n\\n float value = getX(batch, xR, xC, d);\\n\\n // If a min / max value has already been found, use it. If not,\\n // use the current value.\\n float currMinMaxValue = mix(\\n value, minMaxValue, minMaxValueFound);\\n if (value >= currMinMaxValue) {\\n minMaxValue = value;\\n minMaxValueFound = 1.0;\\n minMaxPosition = wR * \"+l+\" + wC;\\n }\\n }\\n }\\n setOutput(float(minMaxPosition));\\n }\\n \";else{var d=e+\"(\"+e+\"(\"+e+\"(minMaxValue[0], minMaxValue[1]), minMaxValue[2]), minMaxValue[3])\";\"avg\"===e&&(d=\"avgValue / count\");var v=4*Math.floor(r/4),m=r%4,g=\"\\n if (\"+p+\") {\\n avgValue += dot(values, ones);\\n } else {\\n minMaxValue = max(values, minMaxValue);\\n }\\n \";this.userCode=\"\\n const ivec2 strides = ivec2(\"+o+\", \"+a+\");\\n const ivec2 pads = ivec2(\"+c+\", \"+h+\");\\n const float initializationValue = \"+f+\";\\n const vec4 ones = vec4(1.0, 1.0, 1.0, 1.0);\\n\\n float count = 0.0;\\n\\n float getValue(int batch, int xR, int xC, int d) {\\n if (xC < 0 || xC >= \"+t.inWidth+\") {\\n return initializationValue;\\n }\\n count += 1.0;\\n return getX(batch, xR, xC, d);\\n }\\n\\n void main() {\\n ivec4 coords = getOutputCoords();\\n int batch = coords[0];\\n int d = coords[3];\\n\\n ivec2 xRCCorner = coords.yz * strides - pads;\\n int xRCorner = xRCCorner.x;\\n int xCCorner = xRCCorner.y;\\n\\n // max/min x(?, ?, d) to get y(yR, yC, d).\\n // ? = to be determined\\n vec4 minMaxValue = vec4(\"+f+\");\\n float avgValue = 0.0;\\n count = 0.0;\\n\\n for (int wR = 0; wR < \"+u+\";\\n wR += \"+i+\") {\\n int xR = xRCorner + wR;\\n\\n if (xR < 0 || xR >= \"+t.inHeight+\") {\\n continue;\\n }\\n\\n for (int wC = 0; wC < \"+v+\"; wC += 4) {\\n int xC = xCCorner + wC * \"+s+\";\\n\\n vec4 values = vec4(\\n getValue(batch, xR, xC, d),\\n getValue(batch, xR, xC + \"+s+\", d),\\n getValue(batch, xR, xC + 2 * \"+s+\", d),\\n getValue(batch, xR, xC + 3 * \"+s+\", d)\\n );\\n\\n \"+g+\"\\n }\\n\\n int xC = xCCorner + \"+v+\";\\n if (\"+(1===m)+\") {\\n vec4 values = vec4(\\n getValue(batch, xR, xC, d),\\n initializationValue,\\n initializationValue,\\n initializationValue\\n );\\n\\n \"+g+\"\\n } else if (\"+(2===m)+\") {\\n vec4 values = vec4(\\n getValue(batch, xR, xC, d),\\n getValue(batch, xR, xC + \"+s+\", d),\\n initializationValue,\\n initializationValue\\n );\\n\\n \"+g+\"\\n } else if (\"+(3===m)+\") {\\n vec4 values = vec4(\\n getValue(batch, xR, xC, d),\\n getValue(batch, xR, xC + \"+s+\", d),\\n getValue(batch, xR, xC + 2 * \"+s+\", d),\\n initializationValue\\n );\\n\\n \"+g+\"\\n }\\n }\\n setOutput(\"+d+\");\\n }\\n \"}}}(),vi=function(){return function(t,e){this.variableNames=[\"x\"];var n=t.windowSize,r=t.batchSize,o=t.inSize,a=Math.ceil(o/n);this.outputShape=[r,a];var i=\"0.0\",s=\"\";\"prod\"===e?i=\"1.0\":\"min\"===e?(i=\"1.0 / 1e-20\",s=\"min\"):\"max\"===e&&(i=\"-1.0 / 1e-20\",s=\"max\");var u=e+\"(\"+e+\"(\"+e+\"(minMaxValue[0], minMaxValue[1]), minMaxValue[2]), minMaxValue[3])\";\"sum\"===e?u=\"sumValue\":\"prod\"===e?u=\"prodValue\":\"all\"===e?u=\"allValue\":\"any\"===e&&(u=\"anyValue\");var l=4*Math.floor(n/4),c=n%4,h=\"\\n if (\"+(\"sum\"===e)+\") {\\n sumValue += dot(values, ones);\\n } else if (\"+(\"prod\"===e)+\") {\\n vec2 tmp = vec2(values[0], values[1]) * vec2(values[2], values[3]);\\n prodValue *= tmp[0] * tmp[1];\\n } else {\\n minMaxValue = \"+s+\"(values, minMaxValue);\\n }\\n \",p=\"vec4\";\"all\"===e?(i=\"1.0\",h=\"\\n bool reducedAllValue = all(values);\\n float floatedReducedAllValue = float(reducedAllValue);\\n allValue = float(allValue >= 1.0 && floatedReducedAllValue >= 1.0);\\n \",p=\"bvec4\"):\"any\"===e&&(i=\"0.0\",h=\"\\n bool reducedAnyValue = any(values);\\n float floatedReducedAnyValue = float(reducedAnyValue);\\n anyValue = float(anyValue >= 1.0 || floatedReducedAnyValue >= 1.0);\\n \",p=\"bvec4\");var f=\"\";o%n>0&&(f=\"\\n if (inIdx < 0 || inIdx >= \"+o+\") {\\n return initializationValue;\\n }\\n \"),this.userCode=\"\\n const float initializationValue = \"+i+\";\\n const vec4 ones = vec4(1.0, 1.0, 1.0, 1.0);\\n\\n float getValue(int batch, int inIdx) {\\n \"+f+\"\\n return getX(batch, inIdx);\\n }\\n\\n void main() {\\n ivec2 coords = getOutputCoords();\\n int batch = coords[0];\\n int outIdx = coords[1];\\n int inOffset = outIdx * \"+n+\";\\n\\n vec4 minMaxValue = vec4(\"+i+\");\\n float prodValue = 1.0;\\n float sumValue = 0.0;\\n float allValue = 1.0;\\n float anyValue = 0.0;\\n\\n for (int i = 0; i < \"+l+\"; i += 4) {\\n int inIdx = inOffset + i;\\n \"+p+\" values = \"+p+\"(\\n getValue(batch, inIdx),\\n getValue(batch, inIdx + 1),\\n getValue(batch, inIdx + 2),\\n getValue(batch, inIdx + 3)\\n );\\n\\n \"+h+\"\\n }\\n\\n int inIdx = inOffset + \"+l+\";\\n if (\"+(1===c)+\") {\\n \"+p+\" values = \"+p+\"(\\n getValue(batch, inIdx),\\n initializationValue,\\n initializationValue,\\n initializationValue\\n );\\n\\n \"+h+\"\\n } else if (\"+(2===c)+\") {\\n \"+p+\" values = \"+p+\"(\\n getValue(batch, inIdx),\\n getValue(batch, inIdx + 1),\\n initializationValue,\\n initializationValue\\n );\\n\\n \"+h+\"\\n } else if (\"+(3===c)+\") {\\n \"+p+\" values = \"+p+\"(\\n getValue(batch, inIdx),\\n getValue(batch, inIdx + 1),\\n getValue(batch, inIdx + 2),\\n initializationValue\\n );\\n\\n \"+h+\"\\n }\\n setOutput(\"+u+\");\\n }\\n \"}}(),mi=function(){return function(t,e){this.variableNames=[\"A\"],this.usesPackedTextures=!0,this.outputShape=t;for(var n=\"\",r=0;r<4;r++){var o=\"thisRC = rc;\";r%2==1&&(o+=\"thisRC.z += 1;\"),r>1&&(o+=\"thisRC.y += 1;\"),n+=\"\\n \"+o+\"\\n \"+(r>0?\"if(thisRC.y < rows && thisRC.z < cols){\":\"\")+\"\\n int flatIndex = getFlatIndex(thisRC);\\n\\n ivec3 inputRC = inputCoordsFromReshapedOutCoords(flatIndex);\\n vec2 inputRCInnerDims = vec2(float(inputRC.y),float(inputRC.z));\\n\\n result[\"+r+\"] =\\n getChannel(getA(inputRC.x, inputRC.y, inputRC.z), inputRCInnerDims);\\n \"+(r>0?\"}\":\"\")+\"\\n \"}this.userCode=\"\\n \\n ivec3 inputCoordsFromReshapedOutCoords(int index) {\\n \"+Io([\"r\",\"c\",\"d\"],e)+\"\\n return ivec3(r, c, d);\\n }\\n \\n \"+So(t)+\"\\n\\n void main() {\\n ivec3 rc = getOutputCoords();\\n\\n vec4 result = vec4(0.);\\n\\n ivec3 thisRC;\\n int rows = \"+t[1]+\";\\n int cols = \"+t[2]+\";\\n\\n \"+n+\"\\n\\n setOutput(result);\\n }\\n \"}}();var gi=function(){return function(t,e,n){this.variableNames=[\"dy\"],this.outputShape=[],this.outputShape=e.shape;var r=e.shape,o=r[1],a=r[2],i=t.shape,s=i[1],u=i[2],l=[n&&s>1?o-1:o,n&&u>1?a-1:a],c=[n&&s>1?s-1:s,n&&u>1?u-1:u],h=l[0]/c[0],p=l[1]/c[1],f=1/h,d=1/p,v=2*Math.ceil(f)+2,m=2*Math.ceil(d)+2;this.userCode=\"\\n void main() {\\n ivec4 coords = getOutputCoords();\\n int b = coords[0];\\n int d = coords[3];\\n int r = coords[1];\\n int c = coords[2];\\n\\n float accumulator = 0.0;\\n\\n const float heightScale = float(\"+h+\");\\n const float widthScale = float(\"+p+\");\\n\\n const float invHeightScale = float(\"+f+\");\\n const float invWidthScale = float(\"+d+\");\\n\\n const int winHeight = int(\"+v+\");\\n const int winWidth = int(\"+m+\");\\n\\n // Compute bounds for where in dy we will look\\n float startRLerp = floor(float(r) * invHeightScale);\\n int startDyR = int(startRLerp - float(winHeight / 2));\\n\\n float startCLerp = floor(float(c) * invWidthScale);\\n int startDyC = int(startCLerp - float(winWidth / 2));\\n\\n // Loop over dy\\n for (int dyROffset = 0; dyROffset < winHeight; dyROffset++) {\\n int dyR = dyROffset + startDyR;\\n\\n // Guard against the window exceeding the bounds of dy\\n if (dyR < 0 || dyR >= \"+s+\") {\\n continue;\\n }\\n\\n for (int dyCOffset = 0; dyCOffset < winWidth; dyCOffset++) {\\n int dyC = dyCOffset + startDyC;\\n\\n // Guard against the window exceeding the bounds of dy\\n if (dyC < 0 || dyC >= \"+u+\") {\\n continue;\\n }\\n\\n float dxR = float(dyR) * heightScale;\\n int topDxRIndex = int(floor(dxR));\\n int bottomDxRIndex = int(min(ceil(dxR), \"+(o-1)+\".0));\\n float dxRLerp = dxR - float(topDxRIndex);\\n float inverseDxRLerp = 1.0 - dxRLerp;\\n\\n float dxC = float(dyC) * widthScale;\\n int leftDxCIndex = int(floor(dxC));\\n int rightDxCIndex = int(min(ceil(dxC), \"+(a-1)+\".0));\\n float dxCLerp = dxC - float(leftDxCIndex);\\n float inverseDxCLerp = 1.0 - dxCLerp;\\n\\n if (r == topDxRIndex && c == leftDxCIndex) {\\n // topLeft\\n accumulator +=\\n getDy(b, dyR, dyC, d) * inverseDxRLerp * inverseDxCLerp;\\n }\\n\\n if (r == topDxRIndex && c == rightDxCIndex) {\\n // topRight\\n accumulator += getDy(b, dyR, dyC, d) * inverseDxRLerp * dxCLerp;\\n }\\n\\n if (r == bottomDxRIndex && c == leftDxCIndex) {\\n // bottomLeft\\n accumulator += getDy(b, dyR, dyC, d) * dxRLerp * inverseDxCLerp;\\n }\\n\\n if (r == bottomDxRIndex && c == rightDxCIndex) {\\n // bottomRight\\n accumulator += getDy(b, dyR, dyC, d) * dxRLerp * dxCLerp;\\n }\\n }\\n }\\n // End loop over dy\\n\\n setOutput(accumulator);\\n }\\n \"}}(),yi=function(){return function(t,e,n,r){this.variableNames=[\"A\"],this.outputShape=[];var o=t[0],a=t[1],i=t[2],s=t[3];this.outputShape=[o,e,n,s];var u=[r&&e>1?a-1:a,r&&n>1?i-1:i],l=[r&&e>1?e-1:e,r&&n>1?n-1:n];this.userCode=\"\\n const vec2 effectiveInputOverOutputRatioRC = vec2(\\n \"+u[0]/l[0]+\",\\n \"+u[1]/l[1]+\");\\n const vec2 inputShapeRC = vec2(\"+a+\".0, \"+i+\".0);\\n\\n void main() {\\n ivec4 coords = getOutputCoords();\\n int b = coords[0];\\n int d = coords[3];\\n ivec2 yRC = coords.yz;\\n\\n // Fractional source index.\\n vec2 sourceFracIndexRC = vec2(yRC) * effectiveInputOverOutputRatioRC;\\n\\n // Compute the four integer indices.\\n ivec2 sourceFloorRC = ivec2(sourceFracIndexRC);\\n ivec2 sourceCeilRC = ivec2(\\n min(inputShapeRC - 1.0, ceil(sourceFracIndexRC)));\\n\\n float topLeft = getA(b, sourceFloorRC.x, sourceFloorRC.y, d);\\n float bottomLeft = getA(b, sourceCeilRC.x, sourceFloorRC.y, d);\\n float topRight = getA(b, sourceFloorRC.x, sourceCeilRC.y, d);\\n float bottomRight = getA(b, sourceCeilRC.x, sourceCeilRC.y, d);\\n\\n vec2 fracRC = sourceFracIndexRC - vec2(sourceFloorRC);\\n\\n float top = topLeft + (topRight - topLeft) * fracRC.y;\\n float bottom = bottomLeft + (bottomRight - bottomLeft) * fracRC.y;\\n float newValue = top + (bottom - top) * fracRC.x;\\n\\n setOutput(newValue);\\n }\\n \"}}(),xi=function(){return function(t,e,n,r){this.variableNames=[\"A\"],this.usesPackedTextures=!0,this.outputShape=[];var o=t[0],a=t[1],i=t[2],s=t[3];this.outputShape=[o,e,n,s];var u=[r&&e>1?a-1:a,r&&n>1?i-1:i],l=[r&&e>1?e-1:e,r&&n>1?n-1:n];this.userCode=\"\\n const vec3 effectiveInputOverOutputRatioRC = vec3(\\n \"+u[0]/l[0]+\",\\n \"+u[1]/l[1]+\",\\n \"+u[1]/l[1]+\");\\n const vec3 inputShapeRC = vec3(\"+a+\".0, \"+i+\".0,\\n \"+i+\".0);\\n\\n float getAValue(int b, int r, int c, int d) {\\n return getChannel(getA(b, r, c, d), vec2(c, d));\\n }\\n\\n void main() {\\n ivec4 coords = getOutputCoords();\\n int b = coords[0];\\n int d = coords[3];\\n // Calculate values for next column in yRC.z.\\n ivec3 yRC = coords.yzz + ivec3(0, 0, 1);\\n\\n // Fractional source index.\\n vec3 sourceFracIndexRC = vec3(yRC) * effectiveInputOverOutputRatioRC;\\n\\n // Compute the four integer indices.\\n ivec3 sourceFloorRC = ivec3(sourceFracIndexRC);\\n ivec3 sourceCeilRC = ivec3(\\n min(inputShapeRC - 1.0, ceil(sourceFracIndexRC)));\\n \\n // Should we calculate next column and row elements in 2x2 packed cell.\\n bool hasNextCol = d < \"+(s-1)+\"; \\n bool hasNextRow = coords.z < \"+(n-1)+\";\\n\\n // In parallel, construct four corners for all four components in\\n // packed 2x2 cell.\\n vec4 topLeft = vec4(\\n getAValue(b, sourceFloorRC.x, sourceFloorRC.y, d),\\n hasNextCol ? getAValue(b, sourceFloorRC.x, sourceFloorRC.y, d + 1)\\n : 0.0,\\n hasNextRow ? getAValue(b, sourceFloorRC.x, sourceFloorRC.z, d)\\n : 0.0,\\n (hasNextRow && hasNextCol) ?\\n getAValue(b, sourceFloorRC.x, sourceFloorRC.z, d + 1) : 0.0);\\n\\n vec4 bottomLeft = vec4(\\n getAValue(b, sourceCeilRC.x, sourceFloorRC.y, d),\\n hasNextCol ? getAValue(b, sourceCeilRC.x, sourceFloorRC.y, d + 1)\\n : 0.0,\\n hasNextRow ? getAValue(b, sourceCeilRC.x, sourceFloorRC.z, d)\\n : 0.0,\\n (hasNextRow && hasNextCol) ?\\n getAValue(b, sourceCeilRC.x, sourceFloorRC.z, d + 1) : 0.0);\\n\\n vec4 topRight = vec4(\\n getAValue(b, sourceFloorRC.x, sourceCeilRC.y, d),\\n hasNextCol ? getAValue(b, sourceFloorRC.x, sourceCeilRC.y, d + 1)\\n : 0.0,\\n hasNextRow ? getAValue(b, sourceFloorRC.x, sourceCeilRC.z, d)\\n : 0.0,\\n (hasNextRow && hasNextCol) ?\\n getAValue(b, sourceFloorRC.x, sourceCeilRC.z, d + 1) : 0.0);\\n\\n vec4 bottomRight = vec4(\\n getAValue(b, sourceCeilRC.x, sourceCeilRC.y, d),\\n hasNextCol ? getAValue(b, sourceCeilRC.x, sourceCeilRC.y, d + 1)\\n : 0.0,\\n hasNextRow ? getAValue(b, sourceCeilRC.x, sourceCeilRC.z, d)\\n : 0.0,\\n (hasNextRow && hasNextCol) ?\\n getAValue(b, sourceCeilRC.x, sourceCeilRC.z, d + 1) : 0.0);\\n\\n vec3 fracRC = sourceFracIndexRC - vec3(sourceFloorRC);\\n\\n vec4 top = mix(topLeft, topRight, fracRC.yyzz);\\n vec4 bottom = mix(bottomLeft, bottomRight, fracRC.yyzz);\\n vec4 newValue = mix(top, bottom, fracRC.x);\\n\\n setOutput(newValue);\\n }\\n \"}}(),bi=function(){return function(t,e,n){this.variableNames=[\"dy\"],this.outputShape=[],this.outputShape=e.shape;var r=e.shape,o=r[1],a=r[2],i=t.shape,s=i[1],u=i[2],l=[n&&s>1?o-1:o,n&&u>1?a-1:a],c=[n&&s>1?s-1:s,n&&u>1?u-1:u],h=l[0]/c[0],p=l[1]/c[1],f=1/h,d=1/p,v=2*Math.ceil(f)+2,m=2*Math.ceil(d)+2;this.userCode=\"\\n void main() {\\n ivec4 coords = getOutputCoords();\\n int b = coords[0];\\n int d = coords[3];\\n int r = coords[1];\\n int c = coords[2];\\n\\n float accumulator = 0.0;\\n\\n const float heightScale = float(\"+h+\");\\n const float widthScale = float(\"+p+\");\\n\\n const float invHeightScale = float(\"+f+\");\\n const float invWidthScale = float(\"+d+\");\\n\\n const int winHeight = int(\"+v+\");\\n const int winWidth = int(\"+m+\");\\n\\n // Compute bounds for where in dy we will look\\n float startRLerp = floor(float(r) * invHeightScale);\\n int startDyR = int(floor(startRLerp - float(winHeight / 2)));\\n\\n float startCLerp = floor(float(c) * invWidthScale);\\n int startDyC = int(floor(startCLerp - float(winWidth / 2)));\\n\\n // Loop over dy\\n for (int dyROffset = 0; dyROffset < winHeight; dyROffset++) {\\n int dyR = dyROffset + startDyR;\\n\\n // Guard against the window exceeding the bounds of dy\\n if (dyR < 0 || dyR >= \"+s+\") {\\n continue;\\n }\\n\\n for (int dyCOffset = 0; dyCOffset < winWidth; dyCOffset++) {\\n int dyC = dyCOffset + startDyC;\\n\\n // Guard against the window exceeding the bounds of dy\\n if (dyC < 0 || dyC >= \"+u+\") {\\n continue;\\n }\\n\\n float sourceFracRow =\\n float(\"+l[0]+\") *\\n (float(dyR) / float(\"+c[0]+\"));\\n\\n float sourceFracCol =\\n float(\"+l[1]+\") *\\n (float(dyC) / float(\"+c[1]+\"));\\n\\n int sourceNearestRow = int(min(\\n float(int(\"+o+\") - 1),\\n \"+n+\" ? float(round(sourceFracRow)) :\\n float(floor(sourceFracRow))));\\n\\n int sourceNearestCol = int(min(\\n float(int(\"+a+\") - 1),\\n \"+n+\" ? float(round(sourceFracCol)) :\\n float(floor(sourceFracCol))));\\n\\n if (r == sourceNearestRow && c == sourceNearestCol) {\\n accumulator += getDy(b, dyR, dyC, d);\\n }\\n }\\n }\\n // End loop over dy\\n\\n setOutput(accumulator);\\n }\\n \"}}(),wi=function(){return function(t,e,n,r){this.variableNames=[\"A\"],this.outputShape=[];var o=t[0],a=t[1],i=t[2],s=t[3];this.outputShape=[o,e,n,s];var u=[r&&e>1?a-1:a,r&&n>1?i-1:i],l=[r&&e>1?e-1:e,r&&n>1?n-1:n],c=r?\"0.5\":\"0.0\";this.userCode=\"\\n const vec2 effectiveInputOverOutputRatioRC = vec2(\\n \"+u[0]/l[0]+\",\\n \"+u[1]/l[1]+\");\\n const vec2 inputShapeRC = vec2(\"+a+\".0, \"+i+\".0);\\n\\n void main() {\\n ivec4 coords = getOutputCoords();\\n int b = coords[0];\\n int d = coords[3];\\n ivec2 yRC = coords.yz;\\n\\n // Fractional source index.\\n vec2 sourceFracIndexRC = vec2(yRC) * effectiveInputOverOutputRatioRC;\\n\\n // Compute the coordinators of nearest neighbor point.\\n ivec2 sourceNearestRC = ivec2(\\n min(inputShapeRC - 1.0, floor(sourceFracIndexRC + \"+c+\")));\\n\\n float newValue = getA(b, sourceNearestRC.x, sourceNearestRC.y, d);\\n\\n setOutput(newValue);\\n }\\n \"}}(),Ci=function(){return function(t,e){this.variableNames=[\"x\"];var n=t.length;if(n>4)throw new Error(\"WebGL backend: Reverse of rank-\"+n+\" tensor is not yet supported\");if(this.outputShape=t,1!==n){var r=t.map(function(n,r){return function(n){return-1!==e.indexOf(n)&&1!==t[n]?t[n]+\" - coords[\"+n+\"] - 1\":\"coords[\"+n+\"]\"}(r)}).join(\",\"),o=Po(n);this.userCode=\"\\n void main() {\\n \"+o+\" coords = getOutputCoords();\\n setOutput(getX(\"+r+\"));\\n }\\n \"}else this.userCode=\"\\n void main() {\\n int coord = getOutputCoords();\\n setOutput(getX(\"+t[0]+\" - coord - 1));\\n }\\n \"}}(),Ei=function(){return function(t,e){this.variableNames=[\"x\"],this.usesPackedTextures=!0;var n=t.length;if(n>4)throw new Error(\"WebGL backend: Reverse of rank-\"+n+\" tensor is not yet supported\");this.outputShape=t;var r=Eo(\"rc\",n),o=r[n-1]+\" + 1 < \"+this.outputShape[n-1],a=r[n-2]+\" + 1 < \"+this.outputShape[n-2],i=Po(n);function s(n){var r=t.map(function(r,o){return function(n,r){return-1!==e.indexOf(n)&&1!==t[n]?t[n]+\" - \"+r[n]+\" - 1\":\"\"+r[n]}(o,n)});return\"getChannel(getX(\"+r.join(\",\")+\"), vec2(\"+r.slice(-2).join(\",\")+\"))\"}this.userCode=1===n?\"\\n void main(){\\n int rc = getOutputCoords();\\n vec4 result = vec4(0.);\\n result.r = getChannel(getX(\"+t[0]+\" - rc - 1),\\n \"+t[0]+\" - rc - 1);\\n if(\"+o+\"){\\n result.g = getChannel(getX(\"+t[0]+\" - (rc + 1) - 1),\\n \"+t[0]+\" - (rc + 1) - 1);\\n }\\n setOutput(result);\\n }\\n \":\"\\n void main() {\\n \"+i+\" rc = getOutputCoords();\\n vec4 result = vec4(0.);\\n result.r = \"+function(t){return s(t)}(r.slice())+\";\\n if(\"+o+\"){\\n result.g = \"+function(t){return t[n-1]=\"(\"+t[n-1]+\" + 1)\",s(t)}(r.slice())+\";\\n }\\n if(\"+a+\") {\\n result.b = \"+function(t){return t[n-2]=\"(\"+t[n-2]+\" + 1)\",s(t)}(r.slice())+\";\\n if(\"+o+\") {\\n result.a = \"+function(t){return t[n-1]=\"(\"+t[n-1]+\" + 1)\",t[n-2]=\"(\"+t[n-2]+\" + 1)\",s(t)}(r.slice())+\";\\n }\\n }\\n setOutput(result);\\n }\\n \"}}(),Ri=function(){return function(t,e,n,r,o,a,i){void 0===i&&(i=!0),this.variableNames=[\"updates\",\"indices\",\"defaultValue\"],this.outputShape=a;var s=Po(o.length),u=Po(a.length),l=\"\";1===n?l=\"i\":2===n&&(l=\"i, j\");var c=\"getIndices(\"+l+\")\",h=\"\";1===r?h=\"i\":2===r&&(h=\"i, coords[1]\");var p=\"getUpdates(\"+h+\")\",f=e>1?\"strides[j]\":\"strides\";this.userCode=\"\\n \"+s+\" strides = \"+s+\"(\"+o+\");\\n\\n void main() {\\n \"+u+\" coords = getOutputCoords();\\n float sum = 0.0;\\n bool found = false;\\n for (int i = 0; i < \"+t+\"; i++) {\\n int flattenedIndex = 0;\\n for (int j = 0; j < \"+e+\"; j++) {\\n int index = round(\"+c+\");\\n flattenedIndex += index * \"+f+\";\\n }\\n if (flattenedIndex == coords[0]) {\\n sum += \"+p+\";\\n found = true;\\n }\\n }\\n setOutput(mix(getDefaultValue(), sum, float(found)));\\n }\\n \"}}(),Ii=function(){return function(t,e){this.variableNames=[\"x\",\"segmentIds\"];var n=t.windowSize,r=t.batchSize,o=t.inSize,a=t.numSegments,i=a*Math.ceil(o/n);this.outputShape=[r,i];var s=4*Math.floor(n/4),u=n%4,l=\"\\n sumValue += dot(values, segFilter);\\n \",c=\"\";o%n>0&&(c=\"\\n if (inIdx < 0 || inIdx >= \"+o+\") {\\n return initializationValue;\\n }\\n \");var h=\"\";o%n>0&&(h=\"\\n if (inIdx < 0 || inIdx >= \"+o+\") {\\n return -1.0;\\n }\\n \"),this.userCode=\"\\n const float initializationValue = 0.0;\\n\\n float getValue(int batch, int inIdx) {\\n \"+c+\"\\n return getX(batch, inIdx);\\n }\\n\\n float getSegmentIdAtIndex(int inIdx) {\\n \"+h+\"\\n return getSegmentIds(inIdx);\\n }\\n\\n void main() {\\n ivec2 coords = getOutputCoords();\\n int batch = coords[0];\\n int outIdx = coords[1];\\n int inOffset = int(floor(float(outIdx) / float(\\n \"+a+\")) * float(\"+n+\"));\\n int currentSeg = int(mod(float(outIdx), float(\"+a+\")));\\n\\n float sumValue = 0.0;\\n\\n for (int i = 0; i < \"+s+\"; i += 4) {\\n int inIdx = inOffset + i;\\n vec4 values = vec4(\\n getValue(batch, inIdx),\\n getValue(batch, inIdx + 1),\\n getValue(batch, inIdx + 2),\\n getValue(batch, inIdx + 3)\\n );\\n\\n vec4 segFilter = vec4(\\n int(getSegmentIdAtIndex(inIdx)) == currentSeg ? 1 : 0,\\n int(getSegmentIdAtIndex(inIdx + 1)) == currentSeg ? 1 : 0,\\n int(getSegmentIdAtIndex(inIdx + 2)) == currentSeg ? 1 : 0,\\n int(getSegmentIdAtIndex(inIdx + 3)) == currentSeg ? 1 : 0\\n );\\n\\n \"+l+\"\\n }\\n\\n int inIdx = inOffset + \"+s+\";\\n if (\"+(1===u)+\") {\\n vec4 values = vec4(\\n getValue(batch, inIdx),\\n initializationValue,\\n initializationValue,\\n initializationValue\\n );\\n\\n int inIdxSeg = int(getSegmentIdAtIndex(inIdx));\\n\\n vec4 segFilter = vec4(\\n int(getSegmentIdAtIndex(inIdx)) == currentSeg ? 1 : 0,\\n 0,\\n 0,\\n 0\\n );\\n\\n \"+l+\"\\n } else if (\"+(2===u)+\") {\\n vec4 values = vec4(\\n getValue(batch, inIdx),\\n getValue(batch, inIdx + 1),\\n initializationValue,\\n initializationValue\\n );\\n\\n vec4 segFilter = vec4(\\n int(getSegmentIdAtIndex(inIdx)) == currentSeg ? 1 : 0,\\n int(getSegmentIdAtIndex(inIdx + 1)) == currentSeg ? 1 : 0,\\n 0,\\n 0\\n );\\n\\n \"+l+\"\\n } else if (\"+(3===u)+\") {\\n vec4 values = vec4(\\n getValue(batch, inIdx),\\n getValue(batch, inIdx + 1),\\n getValue(batch, inIdx + 2),\\n initializationValue\\n );\\n\\n vec4 segFilter = vec4(\\n int(getSegmentIdAtIndex(inIdx)) == currentSeg ? 1 : 0,\\n int(getSegmentIdAtIndex(inIdx + 1)) == currentSeg ? 1 : 0,\\n int(getSegmentIdAtIndex(inIdx + 2)) == currentSeg ? 1 : 0,\\n 0\\n );\\n\\n \"+l+\"\\n }\\n setOutput(sumValue);\\n }\\n \"}}(),Si=function(){return function(t,e,n){var r,o;if(this.variableNames=[\"c\",\"a\",\"b\"],this.outputShape=e,n>4)throw Error(\"Where for rank \"+n+\" is not yet supported\");if(1===n)o=\"resRC\",r=\"resRC\";else{for(var a=[\"resRC.x\",\"resRC.y\",\"resRC.z\",\"resRC.w\"],i=[],s=[],u=0;u= 1.0) {\\n setOutput(getA(\"+o+\"));\\n } else {\\n setOutput(getB(\"+o+\"));\\n }\\n }\\n \"}}(),Ni=function(){function t(t){this.variableNames=[\"source\"],this.outputShape=t,this.rank=t.length;var e,n=Po(this.rank),r=\"uniform int start[\"+this.rank+\"];\",o=function(t){if(1===t)return\"sourceLoc\";if(t<=6)return ki.slice(0,t).map(function(t){return\"sourceLoc.\"+t}).join(\",\");throw Error(\"Slicing for rank \"+t+\" is not yet supported\")}(this.rank);e=\"\\n \"+n+\" sourceLoc;\\n \"+n+\" coords = getOutputCoords();\\n \"+t.map(function(t,e){return\"sourceLoc.\"+ki[e]+\" = start[\"+e+\"] + coords.\"+ki[e]+\";\"}).join(\"\\n\")+\"\\n \",this.userCode=\"\\n \"+r+\"\\n void main() {\\n \"+e+\"\\n setOutput(getSource(\"+o+\"));\\n }\\n \"}return t.prototype.getCustomSetupFunc=function(t){var e=this;if(t.length!==this.rank)throw Error(\"The rank (\"+this.rank+\") of the program must match the length of start (\"+t.length+\")\");return function(n,r){null==e.startLoc&&(e.startLoc=n.getUniformLocationNoThrow(r,\"start\"),null==e.startLoc)||n.gl.uniform1iv(e.startLoc,t)}},t}(),ki=[\"x\",\"y\",\"z\",\"w\",\"u\",\"v\"];var Ai=function(){function t(t){this.variableNames=[\"source\"],this.usesPackedTextures=!0,this.outputShape=t,this.rank=t.length;var e=Po(this.rank),n=Eo(\"coords\",this.rank),r=Eo(\"sourceLoc\",this.rank),o=1===this.rank?\"sourceLoc\":\"vec2(\"+r.slice(-2).join()+\")\",a=\"getChannel(getSource(\"+r.join()+\"), \"+o+\")\",i=\"\\n result.x = \"+a+\";\\n if (++\"+n[this.rank-1]+\" < \"+t[this.rank-1]+\") {\\n ++\"+r[this.rank-1]+\";\\n result.y = \"+a+\";\\n --\"+r[this.rank-1]+\";\\n }\\n \",s=1===this.rank?\"\":\"\\n --\"+n[this.rank-1]+\";\\n if (++\"+n[this.rank-2]+\" < \"+t[this.rank-2]+\") {\\n ++\"+r[this.rank-2]+\";\\n result.z = \"+a+\";\\n if (++\"+n[this.rank-1]+\" < \"+t[this.rank-1]+\") {\\n ++\"+r[this.rank-1]+\";\\n result.w = \"+a+\";\\n }\\n }\\n \",u=this.rank<=4?\"sourceLoc = coords +\\n \"+e+\"(\"+t.map(function(t,e){return\"start[\"+e+\"]\"}).join()+\");\":t.map(function(t,e){return r[e]+\" = \"+n[e]+\" + start[\"+e+\"];\"}).join(\"\\n\");this.userCode=\"\\n uniform int start[\"+this.rank+\"];\\n void main() {\\n \"+e+\" coords = getOutputCoords();\\n \"+e+\" sourceLoc;\\n \"+u+\" \\n vec4 result = vec4(0.);\\n \"+i+\"\\n \"+s+\"\\n setOutput(result);\\n }\\n \"}return t.prototype.getCustomSetupFunc=function(t){var e=this;if(t.length!==this.rank)throw Error(\"The rank (\"+this.rank+\") of the program must match the length of start (\"+t.length+\")\");return function(n,r){null==e.startLoc&&(e.startLoc=n.getUniformLocationNoThrow(r,\"start\"),null==e.startLoc)||n.gl.uniform1iv(e.startLoc,t)}},t}(),Ti=function(){return function(t,e,n,r){this.variableNames=[\"x\"];var o=n.filter(function(t,e){return-1===r.indexOf(e)});this.outputShape=o;var a=n.length,i=Po(n.length),s=Po(o.length),u=\"\";if(1===a)u=\"coords * strides + begin\";else{var l=0;u=n.map(function(t,e){return-1===r.indexOf(e)?(l++,1===o.length?\"coords * strides[\"+e+\"] + begin[\"+e+\"]\":\"coords[\"+(l-1)+\"] * strides[\"+e+\"] + begin[\"+e+\"]\"):\"begin[\"+e+\"]\"}).join(\",\")}this.userCode=\"\\n \"+i+\" begin = \"+i+\"(\"+t+\");\\n \"+i+\" strides = \"+i+\"(\"+e+\");\\n\\n void main() {\\n \"+s+\" coords = getOutputCoords();\\n setOutput(getX(\"+u+\"));\\n }\\n \"}}(),Di=function(){function t(t){this.gpgpu=t,this.numUsedTextures=0,this.numFreeTextures=0,this.freeTextures={},this.logEnabled=!1,this.usedTextures={}}return t.prototype.acquireTexture=function(t,e,n){var r,o=_i(e,n),a=Oi(t,o,n);if(a in this.freeTextures||(this.freeTextures[a]=[]),a in this.usedTextures||(this.usedTextures[a]=[]),this.freeTextures[a].length>0){this.numFreeTextures--,this.numUsedTextures++,this.log();var i=this.freeTextures[a].shift();return this.usedTextures[a].push(i),i}return this.numUsedTextures++,this.log(),o===Da.PACKED_2X2_FLOAT32?r=this.gpgpu.createPackedMatrixTexture(t[0],t[1]):o===Da.PACKED_2X2_FLOAT16?r=this.gpgpu.createFloat16PackedMatrixTexture(t[0],t[1]):o===Da.UNPACKED_FLOAT32?r=this.gpgpu.createFloat32MatrixTexture(t[0],t[1]):o===Da.UNPACKED_FLOAT16?r=this.gpgpu.createFloat16MatrixTexture(t[0],t[1]):o===Da.PACKED_4X1_UNSIGNED_BYTE&&(r=this.gpgpu.createUnsignedBytesMatrixTexture(t[0],t[1])),this.usedTextures[a].push(r),r},t.prototype.releaseTexture=function(t,e,n,r){if(null!=this.freeTextures){var o=Oi(e,_i(n,r),r);o in this.freeTextures||(this.freeTextures[o]=[]),this.freeTextures[o].push(t),this.numFreeTextures++,this.numUsedTextures--;var a=this.usedTextures[o],i=a.indexOf(t);if(i<0)throw new Error(\"Cannot release a texture that was never provided by this texture manager\");a.splice(i,1),this.log()}},t.prototype.log=function(){if(this.logEnabled){var t=this.numFreeTextures+this.numUsedTextures;console.log(\"Free/Used\",this.numFreeTextures+\" / \"+this.numUsedTextures,\"(\"+t+\")\")}},t.prototype.getNumUsedTextures=function(){return this.numUsedTextures},t.prototype.getNumFreeTextures=function(){return this.numFreeTextures},t.prototype.dispose=function(){var t=this;if(null!=this.freeTextures){for(var e in this.freeTextures)this.freeTextures[e].forEach(function(e){t.gpgpu.deleteMatrixTexture(e)});for(var e in this.usedTextures)this.usedTextures[e].forEach(function(e){t.gpgpu.deleteMatrixTexture(e)});this.freeTextures=null,this.usedTextures=null,this.numUsedTextures=0,this.numFreeTextures=0}},t}();function _i(t,e){if(t===Ta.UPLOAD)return Da.PACKED_2X2_FLOAT32;if(t===Ta.RENDER||null==t)return e?s.getBool(\"WEBGL_RENDER_FLOAT32_ENABLED\")?Da.PACKED_2X2_FLOAT32:Da.PACKED_2X2_FLOAT16:s.getBool(\"WEBGL_RENDER_FLOAT32_ENABLED\")?Da.UNPACKED_FLOAT32:Da.UNPACKED_FLOAT16;if(t===Ta.DOWNLOAD||t===Ta.PIXELS)return Da.PACKED_4X1_UNSIGNED_BYTE;throw new Error(\"Unknown logical texture type \"+t)}function Oi(t,e,n){return t[0]+\"_\"+t[1]+\"_\"+e+\"_\"+n}var Fi=function(){return function(t,e){this.variableNames=[\"A\"];for(var n=new Array(t.length),r=0;r5)throw Error(\"Tile for rank \"+e+\" is not yet supported\");if(1===e)return\"imod(resRC, \"+t[0]+\")\";for(var n=[\"resRC.x\",\"resRC.y\",\"resRC.z\",\"resRC.w\",\"resRC.u\"],r=[],o=0;o6)throw Error(\"Transpose for rank \"+e+\" is not yet supported\");for(var n=[\"resRC.x\",\"resRC.y\",\"resRC.z\",\"resRC.w\",\"resRC.u\",\"resRC.v\"],r=new Array(e),o=0;o6)throw Error(\"Packed transpose for rank \"+this.rank+\" is not yet supported.\");var o=Po(this.rank),a=Co(\"rc\",this.rank),i=new Array(this.rank);for(r=0;r= 0.0) ? scale * x : scaleAlpha * (exp(x) - 1.0);\\n\";var qi=\"return exp(x);\",Hi=Ui+\"\\n return sin(x);\\n\",$i=Ui+\"\\n return cos(x);\\n\",ji=Ui+\"\\n return atan(x);\\n\",Ki=Ui+\"\\n if (x < 1.0) return NAN;\\n return log(x + sqrt(x * x - 1.0));\",Xi=Ui+\"\\n if ((x < -1.0) || (x > 1.0)) return NAN;\\n return (log(1.0 + x) - log(1.0 - x)) / 2.0;\",Yi=\"return x;\",Qi=\"\\n vec4 result = x * vec4(greaterThanEqual(x, vec4(0.0)));\\n bvec4 isNaN = isnan(x);\\n\\n result.r = isNaN.r ? x.r : result.r;\\n result.g = isNaN.g ? x.g : result.g;\\n result.b = isNaN.b ? x.b : result.b;\\n result.a = isNaN.a ? x.a : result.a;\\n\\n return result;\\n\",Ji=function(){return function(t,e){this.variableNames=[\"A\"],this.usesPackedTextures=!0,this.outputShape=t,this.userCode=\"\\n vec4 unaryOperation(vec4 x) {\\n \"+e+\"\\n }\\n\\n void main() {\\n vec4 x = getAAtOutCoords();\\n vec4 y = unaryOperation(x);\\n\\n setOutput(y);\\n }\\n \"}}(),Zi=function(){return function(t){this.variableNames=[\"A\"],this.usesPackedTextures=!0,this.outputShape=t;var e=t.length,n=Eo(\"rc\",e),r=Po(e),o=function(t,e){if(1===t)return\"rc\";for(var n=\"\",r=0;r0?this.gpgpu.beginQuery():{startMs:performance.now(),endMs:null}},t.prototype.endTimer=function(t){return s.getNumber(\"WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION\")>0?(this.gpgpu.endQuery(),t):(t.endMs=performance.now(),t)},t.prototype.getQueryTime=function(t){return r(this,void 0,void 0,function(){var e;return o(this,function(n){return s.getNumber(\"WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION\")>0?[2,this.gpgpu.waitForQueryAndGetTime(t)]:[2,(e=t).endMs-e.startMs]})})},t.prototype.disposeData=function(t){if(!this.pendingDisposal.has(t))if(this.pendingRead.has(t))this.pendingDisposal.add(t);else if(this.texData.has(t)){this.releaseGPUData(t);var e=this.texData.get(t).complexTensors;null!=e&&(e.real.dispose(),e.imag.dispose()),this.texData.delete(t)}},t.prototype.releaseGPUData=function(t){var e=this.texData.get(t),n=e.texture,r=e.dtype,o=e.texShape,a=e.usage,i=e.isPacked,s=e.slice,u=s&&s.origDataId||t,l=this.dataRefCount.get(u);l>1?this.dataRefCount.set(u,l-1):(this.dataRefCount.delete(u),null!=n&&(this.numBytesInGPU-=this.computeBytes(o,r),this.textureManager.releaseTexture(n,o,a,i)));var c=this.texData.get(t);c.texture=null,c.texShape=null,c.isPacked=!1,c.slice=null},t.prototype.getTexture=function(t){return this.uploadToGPU(t),this.texData.get(t).texture},t.prototype.getCPUBackend=function(){return s.getBool(\"WEBGL_CPU_FORWARD\")?(null==this.cpuBackend&&(this.cpuBackend=At.findBackend(\"cpu\")),this.cpuBackend):null},t.prototype.shouldExecuteOnCPU=function(t,e){var n=this;return void 0===e&&(e=128),null!=this.getCPUBackend()&&t.every(function(t){return null==n.texData.get(t.dataId).texture&&t.sizes.getNumber(\"WEBGL_MAX_TEXTURES_IN_SHADER\")){var n=Math.floor(t.length/2),r=this.concat(t.slice(0,n),e),o=this.concat(t.slice(n),e);return this.concat([r,o],e)}if(s.getBool(\"WEBGL_PACK_ARRAY_OPERATIONS\")&&t[0].rank>1){var a=new na(t.map(function(t){return t.shape}),e);return this.compileAndRun(a,t)}var i=un(t.map(function(t){return t.shape}),e),u=t.map(function(t){return t.as2D(-1,y(t.shape.slice(e)))}),l=new ea(u.map(function(t){return t.shape}));return this.compileAndRun(l,u).reshape(i)},t.prototype.neg=function(t){var e=new Wi(t.shape,\"return -x;\");return this.compileAndRun(e,[t])},t.prototype.batchMatMul=function(t,e,n,r){var o=n?t.shape[2]:t.shape[1],a=r?e.shape[1]:e.shape[2],i=n?t.shape[1]:t.shape[2],s=t.shape[0];if((1===o||1===a)&&i>1e3){n&&(t=t.transpose([0,2,1])),r&&(e=e.transpose([0,2,1]));var u=1===a?t:t.as3D(s,i,1),l=1===a?2:1,c=1===a?e.as3D(s,1,i):e;return this.multiply(u,c).sum(l,!0)}var h=bt(t.dtype,e.dtype),p=new ui(t.shape,[s,o,a],n,r),f=this.makePackedTensor(p.outputShape,h);return this.compileAndRun(p,[t,e],f)},t.prototype.fusedBatchMatMul=function(t,e,n,r,o,a){var i=n?t.shape[2]:t.shape[1],s=r?e.shape[1]:e.shape[2],u=t.shape[0],l=bt(t.dtype,e.dtype),c=new ui(t.shape,[u,i,s],n,r,!!o,a?function(t,e){if(void 0===e&&(e=!1),\"linear\"===t)return e?Yi:zi;if(\"relu\"===t)return e?Qi:Vi;throw new Error(\"Activation \"+t+\" has not been implemented for the WebGL backend.\")}(a,!0):null),h=this.makePackedTensor(c.outputShape,l),p=[t,e];return o&&p.push(o),this.compileAndRun(c,p,h)},t.prototype.multiply=function(t,e){if(\"complex64\"===t.dtype){var n=this.texData.get(t.dataId),r=this.texData.get(e.dataId),o=new $o(qo,t.shape,e.shape),a=new $o(Ho,t.shape,e.shape),i=[this.makeComplexComponentTensorHandle(t,n.complexTensors.real),this.makeComplexComponentTensorHandle(t,n.complexTensors.imag),this.makeComplexComponentTensorHandle(e,r.complexTensors.real),this.makeComplexComponentTensorHandle(e,r.complexTensors.imag)],u=this.compileAndRun(o,i),l=this.compileAndRun(a,i),c=this.complex(u,l);return u.dispose(),l.dispose(),c}if(this.shouldExecuteOnCPU([t,e]))return this.cpuBackend.multiply(t,e);if(s.getBool(\"WEBGL_PACK_BINARY_OPERATIONS\"))return this.packedBinaryOp(t,e,Xo,t.dtype);var h=new Yo(Xo,t.shape,e.shape),p=this.makeOutputArray(h.outputShape,t.dtype);return this.compileAndRun(h,[t,e],p)},t.prototype.batchNormalization=function(t,e,n,r,o,a){var i=[t,e,n],u=null;null!=a&&(u=a.shape,i.push(a));var l=null;if(null!=o&&(l=o.shape,i.push(o)),s.getBool(\"WEBGL_PACK_NORMALIZATION\")){var c=new Go(t.shape,e.shape,n.shape,u,l,r);return this.compileAndRun(c,i)}var h=new Vo(t.shape,e.shape,n.shape,u,l,r);return this.compileAndRun(h,i)},t.prototype.localResponseNormalization4D=function(t,e,n,r,o){var a=s.getBool(\"WEBGL_PACK_NORMALIZATION\")?new ii(t.shape,e,n,r,o):new oi(t.shape,e,n,r,o);return this.compileAndRun(a,[t])},t.prototype.LRNGrad=function(t,e,n,r,o,a,i){var s=new ai(e.shape,r,o,a,i);return this.compileAndRun(s,[e,n,t])},t.prototype.tile=function(t,e){if(\"string\"===t.dtype)return mo($n(t.shape,t.dtype,this.readSync(t.dataId)),e);var n=new Fi(t.shape,e);return this.compileAndRun(n,[t])},t.prototype.pad=function(t,e,n){var r=s.getBool(\"WEBGL_PACK_ARRAY_OPERATIONS\")?new fi(t.shape,e,n):new pi(t.shape,e,n);return this.compileAndRun(r,[t])},t.prototype.transpose=function(t,e){if(this.shouldExecuteOnCPU([t]))return this.cpuBackend.transpose(t,e);var n=s.getBool(\"WEBGL_PACK_ARRAY_OPERATIONS\")?new Bi(t.shape,e):new Mi(t.shape,e);return this.compileAndRun(n,[t])},t.prototype.gather=function(t,e,n){if(this.shouldExecuteOnCPU([t,e]))return this.cpuBackend.gather(t,e,n);var r=new Aa(t.shape,e.size,n);return this.compileAndRun(r,[t,e])},t.prototype.batchToSpaceND=function(t,e,n){d(t.rank<=4,function(){return\"batchToSpaceND for rank > 4 with a WebGL backend not implemented yet\"});var r=e.reduce(function(t,e){return t*e}),o=xr(t.shape,e,r),a=br(o.length,e.length),i=wr(t.shape,e,r),s=Cr(n,e.length),u=Er(i,n,e.length);return t.reshape(o).transpose(a).reshape(i).slice(s,u)},t.prototype.spaceToBatchND=function(t,e,n){d(t.rank<=4,function(){return\"spaceToBatchND for rank > 4 with a WebGL backend not implemented yet\"});var r=e.reduce(function(t,e){return t*e}),o=[[0,0]];o.push.apply(o,n);for(var a=1+e.length;ae||n===t?r=!0:n=V(t,n+1);return n}(i,o),u=new Ii({windowSize:s,inSize:i,batchSize:a,numSegments:o},e),l=u.outputShape,c=l[0],h=l[1],p=this.makeOutputArray([c,h],r);return this.compileAndRun(u,[t,n],p),p.shape[1]===o?p:(n=Sn(0,o).tile([i/s]),this.segOpCompute(p,e,n,r,o))},t.prototype.argMinMaxReduce=function(t,e,n){var r=[e];if(nn(\"arg\"+n.charAt(0).toUpperCase()+n.slice(1),r,t.rank),!s.getBool(\"WEBGL_PACK_REDUCE\")||t.rank<=2){var o=tn(t.shape,r),a=o[0],i=y(o[1]),u=t.as2D(-1,i);return this.argReduce(u,n).reshape(a)}return this.argReducePacked(t,n)},t.prototype.argMin=function(t,e){return this.argMinMaxReduce(t,e,\"min\")},t.prototype.argMax=function(t,e){return this.argMinMaxReduce(t,e,\"max\")},t.prototype.cumsum=function(t,e,n,r){if(e!==t.rank-1)throw new Error(\"WebGL cumsum shader expects an inner-most axis=\"+(t.rank-1)+\" but got axis=\"+e);var o=new da(t.shape,n,r);return this.compileAndRun(o,[t])},t.prototype.equal=function(t,e){if(s.getBool(\"WEBGL_PACK_BINARY_OPERATIONS\"))return this.packedBinaryOp(t,e,\"\\n return vec4(equal(a, b));\\n\",\"bool\");var n=new Yo(\"return float(a == b);\",t.shape,e.shape),r=this.makeOutputArray(n.outputShape,\"bool\");return this.compileAndRun(n,[t,e],r)},t.prototype.notEqual=function(t,e){if(s.getBool(\"WEBGL_PACK_BINARY_OPERATIONS\"))return this.packedBinaryOp(t,e,\"\\n return vec4(notEqual(a, b));\\n\",\"bool\");var n=new Yo(\"return float(a != b);\",t.shape,e.shape),r=this.makeOutputArray(n.outputShape,\"bool\");return this.compileAndRun(n,[t,e],r)},t.prototype.less=function(t,e){if(this.shouldExecuteOnCPU([t,e]))return this.cpuBackend.less(t,e);if(s.getBool(\"WEBGL_PACK_BINARY_OPERATIONS\"))return this.packedBinaryOp(t,e,\"\\n return vec4(lessThan(a, b));\\n\",\"bool\");var n=new Yo(\"return float(a < b);\",t.shape,e.shape),r=this.makeOutputArray(n.outputShape,\"bool\");return this.compileAndRun(n,[t,e],r)},t.prototype.lessEqual=function(t,e){if(s.getBool(\"WEBGL_PACK_BINARY_OPERATIONS\"))return this.packedBinaryOp(t,e,\"\\n return vec4(lessThanEqual(a, b));\\n\",\"bool\");var n=new Yo(\"return float(a <= b);\",t.shape,e.shape),r=this.makeOutputArray(n.outputShape,\"bool\");return this.compileAndRun(n,[t,e],r)},t.prototype.greater=function(t,e){if(this.shouldExecuteOnCPU([t,e]))return this.cpuBackend.greater(t,e);if(s.getBool(\"WEBGL_PACK_BINARY_OPERATIONS\"))return this.packedBinaryOp(t,e,\"\\n return vec4(greaterThan(a, b));\\n\",\"bool\");var n=new Yo(\"return float(a > b);\",t.shape,e.shape),r=this.makeOutputArray(n.outputShape,\"bool\");return this.compileAndRun(n,[t,e],r)},t.prototype.greaterEqual=function(t,e){if(s.getBool(\"WEBGL_PACK_BINARY_OPERATIONS\"))return this.packedBinaryOp(t,e,\"\\n return vec4(greaterThanEqual(a, b));\\n\",\"bool\");var n=new Yo(\"return float(a >= b);\",t.shape,e.shape),r=this.makeOutputArray(n.outputShape,\"bool\");return this.compileAndRun(n,[t,e],r)},t.prototype.logicalNot=function(t){var e=new Wi(t.shape,\"return float(!(x >= 1.0));\");return this.compileAndRun(e,[t])},t.prototype.logicalAnd=function(t,e){if(s.getBool(\"WEBGL_PACK_BINARY_OPERATIONS\"))return this.packedBinaryOp(t,e,\"\\n return vec4(\\n vec4(greaterThanEqual(a, vec4(1.0))) *\\n vec4(greaterThanEqual(b, vec4(1.0))));\\n\",\"bool\");var n=new Yo(\"return float(a >= 1.0 && b >= 1.0);\",t.shape,e.shape),r=this.makeOutputArray(n.outputShape,\"bool\");return this.compileAndRun(n,[t,e],r)},t.prototype.logicalOr=function(t,e){if(s.getBool(\"WEBGL_PACK_BINARY_OPERATIONS\"))return this.packedBinaryOp(t,e,\"\\n return min(\\n vec4(greaterThanEqual(a, vec4(1.0))) +\\n vec4(greaterThanEqual(b, vec4(1.0))),\\n vec4(1.0));\\n\",\"bool\");var n=new Yo(\"return float(a >= 1.0 || b >= 1.0);\",t.shape,e.shape),r=this.makeOutputArray(n.outputShape,\"bool\");return this.compileAndRun(n,[t,e],r)},t.prototype.select=function(t,e,n){var r=new Si(t.rank,e.shape,e.rank),o=this.makeOutputArray(r.outputShape,bt(e.dtype,n.dtype));return this.compileAndRun(r,[t,e,n],o)},t.prototype.where=function(t){je(\"tf.where() in webgl locks the UI thread. Call tf.whereAsync() instead\");var e=t.dataSync();return yo(t.shape,e)},t.prototype.topk=function(t,e,n){return go(t.dataSync(),t.shape,t.dtype,e)},t.prototype.min=function(t,e){nn(\"min\",e,t.rank);var n=tn(t.shape,e),r=n[0],o=y(n[1]),a=t.as2D(-1,o);return this.reduce(a,\"min\",a.dtype).reshape(r)},t.prototype.minimum=function(t,e){if(this.shouldExecuteOnCPU([t,e]))return this.cpuBackend.minimum(t,e);var n=s.getBool(\"WEBGL_PACK_BINARY_OPERATIONS\")?new Qo(\"\\n vec4 result = vec4(min(a, b));\\n vec4 isNaN = min(vec4(isnan(a)) + vec4(isnan(b)), vec4(1.0));\\n \\n result.r = isNaN.r > 0. ? NAN : result.r;\\n result.g = isNaN.g > 0. ? NAN : result.g;\\n result.b = isNaN.b > 0. ? NAN : result.b;\\n result.a = isNaN.a > 0. ? NAN : result.a;\\n\\n return result;\\n\",t.shape,e.shape):new Yo(\"\\n if (isnan(a)) return a;\\n if (isnan(b)) return b;\\n\\n return min(a, b);\\n\",t.shape,e.shape);return this.compileAndRun(n,[t,e])},t.prototype.mod=function(t,e){var n=s.getBool(\"WEBGL_PACK_BINARY_OPERATIONS\")?new Qo(\"\\n vec4 result = mod(a, b);\\n vec4 isNaN = vec4(equal(b, vec4(0.0)));\\n \\n result.r = isNaN.r > 0. ? NAN : result.r;\\n result.g = isNaN.g > 0. ? NAN : result.g;\\n result.b = isNaN.b > 0. ? NAN : result.b;\\n result.a = isNaN.a > 0. ? NAN : result.a;\\n\\n return result;\\n\",t.shape,e.shape):new Yo(\"if (b == 0.0) return NAN;\\n return mod(a, b);\",t.shape,e.shape);return this.compileAndRun(n,[t,e])},t.prototype.max=function(t,e){if(this.shouldExecuteOnCPU([t]))return this.cpuBackend.max(t,e);nn(\"max\",e,t.rank);var n=tn(t.shape,e),r=n[0],o=y(n[1]),a=t.as2D(-1,o);return this.reduce(a,\"max\",a.dtype).reshape(r)},t.prototype.maximum=function(t,e){if(this.shouldExecuteOnCPU([t,e]))return this.cpuBackend.maximum(t,e);var n=s.getBool(\"WEBGL_PACK_BINARY_OPERATIONS\")?new Qo(\"\\n vec4 result = vec4(max(a, b));\\n vec4 isNaN = min(vec4(isnan(a)) + vec4(isnan(b)), vec4(1.0));\\n \\n result.r = isNaN.r > 0. ? NAN : result.r;\\n result.g = isNaN.g > 0. ? NAN : result.g;\\n result.b = isNaN.b > 0. ? NAN : result.b;\\n result.a = isNaN.a > 0. ? NAN : result.a;\\n\\n return result;\\n\",t.shape,e.shape):new Yo(\"\\n if (isnan(a)) return a;\\n if (isnan(b)) return b;\\n\\n return max(a, b);\\n\",t.shape,e.shape);return this.compileAndRun(n,[t,e])},t.prototype.all=function(t,e){nn(\"all\",e,t.rank);var n=tn(t.shape,e),r=n[0],o=y(n[1]),a=t.as2D(-1,o);return this.reduce(a,\"all\",a.dtype).reshape(r)},t.prototype.any=function(t,e){nn(\"any\",e,t.rank);var n=tn(t.shape,e),r=n[0],o=y(n[1]),a=t.as2D(-1,o);return this.reduce(a,\"any\",a.dtype).reshape(r)},t.prototype.squaredDifference=function(t,e){var n=s.getBool(\"WEBGL_PACK_BINARY_OPERATIONS\")?new Qo(\"return (a - b) * (a - b);\",t.shape,e.shape):new Yo(\"return (a - b) * (a - b);\",t.shape,e.shape);return this.compileAndRun(n,[t,e])},t.prototype.realDivide=function(t,e){if(s.getBool(\"WEBGL_PACK_BINARY_OPERATIONS\")){return this.packedBinaryOp(t,e,\"\\n // vec4 one = vec4(equal(a, b));\\n // return one + (vec4(1.0) - one) * a / b;\\n vec4 result = a / b;\\n if(b.x == 0.0) {\\n result.x = NAN;\\n } else if(a.x == b.x) {\\n result.x = 1.;\\n }\\n if(b.y == 0.0) {\\n result.y = NAN;\\n } else if(a.y == b.y) {\\n result.y = 1.;\\n }\\n if(b.z == 0.0) {\\n result.z = NAN;\\n } else if(a.z == b.z) {\\n result.z = 1.;\\n }\\n if(b.w == 0.0) {\\n result.w = NAN;\\n } else if(a.w == b.w) {\\n result.w = 1.;\\n }\\n \\n return result;\\n\",\"float32\",!0)}var n=new Yo(\"\\nif (b == 0.0) {\\n return NAN;\\n} \\nif (a == b) {\\n return 1.0;\\n};\\nreturn a / b;\",t.shape,e.shape),r=this.makeOutputArray(n.outputShape,\"float32\");return this.compileAndRun(n,[t,e],r)},t.prototype.floorDiv=function(t,e){if(s.getBool(\"WEBGL_PACK_BINARY_OPERATIONS\"))return this.packedBinaryOp(t,e,\"\\n ivec4 ia = round(a);\\n ivec4 ib = round(b);\\n bvec4 cond = notEqual(ib, ivec4(0));\\n ivec4 result = ivec4(0);\\n vec4 s = sign(a) * sign(b);\\n\\n // Windows (D3D) wants guaranteed non-zero int division at compile-time.\\n if (cond[0]) {\\n result[0] = idiv(ia[0], ib[0], s[0]);\\n }\\n if (cond[1]) {\\n result[1] = idiv(ia[1], ib[1], s[1]);\\n }\\n if (cond[2]) {\\n result[2] = idiv(ia[2], ib[2], s[2]);\\n }\\n if (cond[3]) {\\n result[3] = idiv(ia[3], ib[3], s[3]);\\n }\\n return vec4(result);\\n\",\"int32\");var n=new Yo(\"\\n float s = sign(a) * sign(b);\\n int ia = round(a);\\n int ib = round(b);\\n if (ib != 0) {\\n // Windows (D3D) wants guaranteed non-zero int division at compile-time.\\n return float(idiv(ia, ib, s));\\n } else {\\n return NAN;\\n }\\n\",t.shape,e.shape),r=this.makeOutputArray(n.outputShape,\"int32\");return this.compileAndRun(n,[t,e],r)},t.prototype.add=function(t,e){if(\"complex64\"===t.dtype&&\"complex64\"===e.dtype)return this.complexSeparableBinaryOp(t,e,jo);if(this.shouldExecuteOnCPU([t,e]))return this.cpuBackend.add(t,e);var n=bt(t.dtype,e.dtype);if(s.getBool(\"WEBGL_PACK_BINARY_OPERATIONS\"))return this.packedBinaryOp(t,e,jo,n);var r=new Yo(jo,t.shape,e.shape),o=this.makeOutputArray(r.outputShape,n);return this.compileAndRun(r,[t,e],o)},t.prototype.packedBinaryOp=function(t,e,n,r,o){void 0===o&&(o=!1);var a=new Qo(n,t.shape,e.shape,o),i=this.makePackedTensor(a.outputShape,r);return this.compileAndRun(a,[t,e],i)},t.prototype.complexSeparableBinaryOp=function(t,e,n){var r=this,o=this.texData.get(t.dataId),a=this.texData.get(e.dataId),i=[[o.complexTensors.real,a.complexTensors.real],[o.complexTensors.imag,a.complexTensors.imag]].map(function(o){var a=o[0],i=o[1],s=r.makeComplexComponentTensorHandle(t,a),u=r.makeComplexComponentTensorHandle(e,i),l=new Yo(n,t.shape,e.shape),c=r.makeOutputArray(l.outputShape,bt(a.dtype,i.dtype));return r.compileAndRun(l,[s,u],c)}),s=i[0],u=i[1],l=this.complex(s,u);return s.dispose(),u.dispose(),l},t.prototype.makeComplexComponentTensorHandle=function(t,e){return{dataId:e.dataId,dtype:e.dtype,shape:t.shape}},t.prototype.addN=function(t){if(1===t.length)return t[0];if(t.length>s.get(\"WEBGL_MAX_TEXTURES_IN_SHADER\")){var e=Math.floor(t.length/2),n=this.addN(t.slice(0,e)),r=this.addN(t.slice(e));return this.addN([n,r])}var o=t.map(function(t){return t.dtype}).reduce(function(t,e){return bt(t,e)}),a=t.map(function(t){return t.shape}),i=s.getBool(\"WEBGL_PACK\"),u=i?new bo(t[0].shape,a):new xo(t[0].shape,a),l=i?this.makePackedTensor(u.outputShape,o):this.makeOutputArray(u.outputShape,o);return this.compileAndRun(u,t,l)},t.prototype.subtract=function(t,e){if(\"complex64\"===t.dtype&&\"complex64\"===e.dtype)return this.complexSeparableBinaryOp(t,e,Ko);if(this.shouldExecuteOnCPU([t,e]))return this.cpuBackend.subtract(t,e);var n=bt(t.dtype,e.dtype);if(s.getBool(\"WEBGL_PACK_BINARY_OPERATIONS\"))return this.packedBinaryOp(t,e,Ko,t.dtype);var r=new Yo(Ko,t.shape,e.shape),o=this.makeOutputArray(r.outputShape,n);return this.compileAndRun(r,[t,e],o)},t.prototype.pow=function(t,e){var n=s.getBool(\"WEBGL_PACK_BINARY_OPERATIONS\"),r=n?new Qo(\"\\n // isModRound1 has 1 for components with round(mod(b, 2.0)) == 1, 0 otherwise.\\n vec4 isModRound1 = vec4(equal(round(mod(b, 2.0)), ivec4(1)));\\n vec4 multiplier = sign(a) * isModRound1 + (vec4(1.0) - isModRound1);\\n vec4 result = multiplier * pow(abs(a), b);\\n\\n vec4 isNaN = vec4(lessThan(a, vec4(0.0))) * vec4(lessThan(floor(b), b));\\n \\n result.r = isNaN.r > 0. ? NAN : result.r;\\n result.g = isNaN.g > 0. ? NAN : result.g;\\n result.b = isNaN.b > 0. ? NAN : result.b;\\n result.a = isNaN.a > 0. ? NAN : result.a;\\n\\n return result;\\n\",t.shape,e.shape):new Yo(\"\\nif(a < 0.0 && floor(b) < b){\\n return NAN;\\n}\\nreturn (round(mod(b, 2.0)) != 1) ?\\n pow(abs(a), b) : sign(a) * pow(abs(a), b);\\n\",t.shape,e.shape),o=bt(t.dtype,e.dtype),a=n?this.makePackedTensor(r.outputShape,o):this.makeOutputArray(r.outputShape,o);return this.compileAndRun(r,[t,e],a)},t.prototype.ceil=function(t){var e=new Wi(t.shape,\"return ceil(x);\");return this.compileAndRun(e,[t])},t.prototype.floor=function(t){var e=new Wi(t.shape,\"return floor(x);\");return this.compileAndRun(e,[t])},t.prototype.sign=function(t){var e=new Wi(t.shape,\"\\n if (isnan(x)) { return 0.0; }\\n return sign(x);\\n\");return this.compileAndRun(e,[t])},t.prototype.isNaN=function(t){var e=new Wi(t.shape,\"return float(isnan(x));\"),n=this.makeOutputArray(e.outputShape,\"bool\");return this.compileAndRun(e,[t],n)},t.prototype.isInf=function(t){var e=new Wi(t.shape,\"return float(isinf(x));\"),n=this.makeOutputArray(e.outputShape,\"bool\");return this.compileAndRun(e,[t],n)},t.prototype.isFinite=function(t){var e=new Wi(t.shape,\"return float(!isnan(x) && !isinf(x));\"),n=this.makeOutputArray(e.outputShape,\"bool\");return this.compileAndRun(e,[t],n)},t.prototype.round=function(t){var e=new Wi(t.shape,\"\\n // OpenGL ES does not support round function.\\n // The algorithm is based on banker's rounding.\\n float base = floor(x);\\n if ((x - base) < 0.5) {\\n return floor(x);\\n } else if ((x - base) > 0.5) {\\n return ceil(x);\\n } else {\\n if (mod(base, 2.0) == 0.0) {\\n return base;\\n } else {\\n return base + 1.0;\\n }\\n }\\n\");return this.compileAndRun(e,[t])},t.prototype.exp=function(t){var e;return e=s.getBool(\"WEBGL_PACK\")?new Ji(t.shape,qi):new Wi(t.shape,qi),this.compileAndRun(e,[t])},t.prototype.expm1=function(t){var e=new Wi(t.shape,\"return exp(x) - 1.0;\");return this.compileAndRun(e,[t])},t.prototype.log=function(t){var e;return e=s.getBool(\"WEBGL_PACK\")?new Ji(t.shape,\"\\n vec4 result = log(x);\\n vec4 isNaN = vec4(lessThan(x, vec4(0.0)));\\n result.r = isNaN.r == 1.0 ? NAN : result.r;\\n result.g = isNaN.g == 1.0 ? NAN : result.g;\\n result.b = isNaN.b == 1.0 ? NAN : result.b;\\n result.a = isNaN.a == 1.0 ? NAN : result.a;\\n\\n return result;\\n\"):new Wi(t.shape,\"if (x < 0.0) return NAN;\\n return log(x);\"),this.compileAndRun(e,[t])},t.prototype.log1p=function(t){var e=new Wi(t.shape,\"return log(1.0 + x);\");return this.compileAndRun(e,[t])},t.prototype.sqrt=function(t){var e=new Wi(t.shape,\"return sqrt(x);\");return this.compileAndRun(e,[t])},t.prototype.rsqrt=function(t){if(this.shouldExecuteOnCPU([t]))return this.cpuBackend.rsqrt(t);var e=new Wi(t.shape,\"return inversesqrt(x);\");return this.compileAndRun(e,[t])},t.prototype.square=function(t){var e=new Wi(t.shape,\"return x * x;\");return this.compileAndRun(e,[t])},t.prototype.reciprocal=function(t){var e=new Wi(t.shape,\"return 1.0 / x;\");return this.compileAndRun(e,[t])},t.prototype.relu=function(t){var e;return e=s.getBool(\"WEBGL_PACK\")?new Ji(t.shape,Qi):new Wi(t.shape,Vi),this.compileAndRun(e,[t])},t.prototype.prelu=function(t,e){var n=s.getBool(\"WEBGL_PACK_BINARY_OPERATIONS\")?new Qo(\"\\n vec4 aLessThanZero = vec4(lessThan(a, vec4(0.)));\\n return (aLessThanZero * (b * a)) + ((vec4(1.0) - aLessThanZero) * a);\\n\",t.shape,e.shape):new Yo(\"return (a < 0.) ? b * a : a;\",t.shape,e.shape);return this.compileAndRun(n,[t,e])},t.prototype.elu=function(t){var e=new Wi(t.shape,\"return (x >= 0.0) ? x : (exp(x) - 1.0);\");return this.compileAndRun(e,[t])},t.prototype.eluDer=function(t,e){var n=s.getBool(\"WEBGL_PACK_BINARY_OPERATIONS\")?new Qo(\"\\n vec4 bGTEZero = vec4(greaterThanEqual(b, vec4(0.)));\\n return (bGTEZero * a) + ((vec4(1.0) - bGTEZero) * (a * (b + vec4(1.0))));\\n\",t.shape,e.shape):new Yo(\"return (b >= 1.0) ? a : a * (b + 1.0);\",t.shape,e.shape);return this.compileAndRun(n,[t,e])},t.prototype.selu=function(t){var e=new Wi(t.shape,Gi);return this.compileAndRun(e,[t])},t.prototype.int=function(t){var e=new Wi(t.shape,\"return float(int(x));\"),n=this.makeOutputArray(e.outputShape,\"int32\");return this.compileAndRun(e,[t],n)},t.prototype.clip=function(t,e,n){var r,o=(r=s.getBool(\"WEBGL_PACK_CLIP\")?new Zo(t.shape):new Jo(t.shape)).getCustomSetupFunc(e,n);return this.compileAndRun(r,[t],null,o)},t.prototype.abs=function(t){var e=new Wi(t.shape,\"return abs(x);\");return this.compileAndRun(e,[t])},t.prototype.complexAbs=function(t){var e=this.texData.get(t.dataId),n=new ta(t.shape),r=[this.makeComplexComponentTensorHandle(t,e.complexTensors.real),this.makeComplexComponentTensorHandle(t,e.complexTensors.imag)];return this.compileAndRun(n,r)},t.prototype.sigmoid=function(t){var e=new Wi(t.shape,\"return 1.0 / (1.0 + exp(-1.0 * x));\");return this.compileAndRun(e,[t])},t.prototype.softplus=function(t){var e=new Wi(t.shape,\"\\n float epsilon = 1.1920928955078125e-7;\\n float threshold = log(epsilon) + 2.0;\\n\\n bool too_large = x > -threshold;\\n bool too_small = x < threshold;\\n\\n float result;\\n float exp_x = exp(x);\\n\\n if (too_large){\\n result = x;\\n }\\n else if (too_small){\\n result = exp_x;\\n }\\n else{\\n result = log(exp_x + 1.0);\\n }\\n return result;\\n\");return this.compileAndRun(e,[t])},t.prototype.sin=function(t){var e=new Wi(t.shape,Hi);return this.compileAndRun(e,[t])},t.prototype.cos=function(t){var e=new Wi(t.shape,$i);return this.compileAndRun(e,[t])},t.prototype.tan=function(t){var e=new Wi(t.shape,\"return tan(x);\");return this.compileAndRun(e,[t])},t.prototype.asin=function(t){var e=new Wi(t.shape,\"return asin(x);\");return this.compileAndRun(e,[t])},t.prototype.acos=function(t){var e=new Wi(t.shape,\"return acos(x);\");return this.compileAndRun(e,[t])},t.prototype.atan=function(t){var e=new Wi(t.shape,ji);return this.compileAndRun(e,[t])},t.prototype.atan2=function(t,e){var n=s.getBool(\"WEBGL_PACK_BINARY_OPERATIONS\")?new Qo(\"\\n vec4 result = atan(a, b);\\n vec4 isNaN = min(vec4(isnan(a)) + vec4(isnan(b)), vec4(1.0));\\n \\n result.r = isNaN.r > 0. ? NAN : result.r;\\n result.g = isNaN.g > 0. ? NAN : result.g;\\n result.b = isNaN.b > 0. ? NAN : result.b;\\n result.a = isNaN.a > 0. ? NAN : result.a;\\n\\n return result;\\n\",t.shape,e.shape):new Yo(\"\\n if (isnan(a)) return a;\\n if (isnan(b)) return b;\\n\\n return atan(a, b);\\n\",t.shape,e.shape);return this.compileAndRun(n,[t,e])},t.prototype.sinh=function(t){var e=new Wi(t.shape,\"\\n float e2x = exp(x);\\n return (e2x - 1.0 / e2x) / 2.0;\\n\");return this.compileAndRun(e,[t])},t.prototype.cosh=function(t){var e=new Wi(t.shape,\"\\n float e2x = exp(-x);\\n return (e2x + 1.0 / e2x) / 2.0;\\n\");return this.compileAndRun(e,[t])},t.prototype.tanh=function(t){var e=new Wi(t.shape,\"\\n float e2x = exp(-2.0 * abs(x));\\n return sign(x) * (1.0 - e2x) / (1.0 + e2x);\\n\");return this.compileAndRun(e,[t])},t.prototype.asinh=function(t){var e=new Wi(t.shape,\"return log(x + sqrt(x * x + 1.0));\");return this.compileAndRun(e,[t])},t.prototype.acosh=function(t){var e=new Wi(t.shape,Ki);return this.compileAndRun(e,[t])},t.prototype.atanh=function(t){var e=new Wi(t.shape,Xi);return this.compileAndRun(e,[t])},t.prototype.erf=function(t){var e=new Wi(t.shape,'\\n // Error function is calculated approximately with elementary function.\\n // See \"Handbook of Mathematical Functions with Formulas,\\n // Graphs, and Mathematical Tables\", Abramowitz and Stegun.\\n float p = 0.3275911;\\n float a1 = 0.254829592;\\n float a2 = -0.284496736;\\n float a3 = 1.421413741;\\n float a4 = -1.453152027;\\n float a5 = 1.061405429;\\n\\n float t = 1.0 / (1.0 + p * x);\\n return 1.0 - (((((a5*t + a4)*t) + a3)*t + a2)*t + a1)*t*exp(-x*x);\\n');return this.compileAndRun(e,[t])},t.prototype.step=function(t,e){var n=new Wi(t.shape,function(t){return void 0===t&&(t=0),Ui+\"\\n return x > 0.0 ? 1.0 : float(\"+t+\");\\n \"}(e));return this.compileAndRun(n,[t])},t.prototype.conv2dByMatMul=function(t,e,n){var r=t.shape,o=this.texData.get(t.dataId),a=n.inChannels,i=r[0]*r[1]*r[2],u=n.outChannels,l=(1===i||1===u)&&a>1e3,c=r[2]%2!=0&&!!o.isPacked;if(l||!s.getBool(\"WEBGL_LAZILY_UNPACK\")||!s.getBool(\"WEBGL_PACK_BINARY_OPERATIONS\")||!c){var h=this.reshape(t,[1,r[0]*r[1]*r[2],n.inChannels]),p=this.reshape(e,[1,n.inChannels,n.outChannels]);return this.reshape(this.batchMatMul(h,p,!1,!1),n.outShape)}var f=ht.make([1,r[0]*r[1]*(r[2]+1),n.inChannels],{dataId:t.dataId},t.dtype,this),v=o.shape;o.shape=o.shape.slice(),o.shape[o.shape.length-2]++,d(me(o.shape,f.shape),function(){return\"packed reshape \"+o.shape+\" to \"+f.shape+\" isn't free\"});var m=this.reshape(e,[1,n.inChannels,n.outChannels]),g=this.batchMatMul(f,m,!1,!1),y=this.texData.get(g.dataId);return d(y.isPacked,function(){return\"batchMatMul result is expected to be packed\"}),o.shape=v,y.shape=n.outShape,ht.make(n.outShape,{dataId:g.dataId},g.dtype,this)},t.prototype.conv2dWithIm2Row=function(t,e,n){var r=n.filterWidth,o=n.filterHeight,a=n.inChannels,i=n.outWidth,s=n.outHeight,u=r*o*a,l=s*i,c=[u,l],h=t.squeeze([0]),p=e.reshape([1,u,-1]),f=new ri(c,h.shape,n),d=this.compileAndRun(f,[h]).reshape([1,c[0],c[1]]),v=new ui(d.shape,[1,l,n.outChannels],!0,!1);return this.compileAndRun(v,[d,p]).reshape([1,s,i,n.outChannels])},t.prototype.conv2d=function(t,e,n){if(1===n.filterHeight&&1===n.filterWidth&&1===n.dilationHeight&&1===n.dilationWidth&&1===n.strideHeight&&1===n.strideWidth&&(\"SAME\"===n.padInfo.type||\"VALID\"===n.padInfo.type))return this.conv2dByMatMul(t,e,n);if(s.getBool(\"WEBGL_CONV_IM2COL\")&&1===t.shape[0])return this.conv2dWithIm2Row(t,e,n);var r=new la(n);return this.compileAndRun(r,[t,e])},t.prototype.conv2dDerInput=function(t,e,n){var r=new oa(n);return this.compileAndRun(r,[t,e])},t.prototype.conv2dDerFilter=function(t,e,n){var r=new ra(n);return this.compileAndRun(r,[t,e])},t.prototype.depthwiseConv2D=function(t,e,n){var r;return s.getBool(\"WEBGL_PACK_DEPTHWISECONV\")&&n.strideWidth<=2&&n.outChannels/n.inChannels==1?(r=new pa(n),this.compileAndRun(r,[t,e],this.makePackedTensor(n.outShape,t.dtype))):(r=new ha(n),this.compileAndRun(r,[t,e]))},t.prototype.depthwiseConv2DDerInput=function(t,e,n){var r=new ua(n);return this.compileAndRun(r,[t,e])},t.prototype.depthwiseConv2DDerFilter=function(t,e,n){var r=new sa(n);return this.compileAndRun(r,[t,e])},t.prototype.conv3d=function(t,e,n){var r=new ca(n);return this.compileAndRun(r,[t,e])},t.prototype.conv3dDerInput=function(t,e,n){var r=new ia(n);return this.compileAndRun(r,[t,e])},t.prototype.conv3dDerFilter=function(t,e,n){var r=new aa(n);return this.compileAndRun(r,[t,e])},t.prototype.maxPool=function(t,e){var n=new di(e,\"max\",!1),r=this.makeOutputArray(n.outputShape,t.dtype);return this.compileAndRun(n,[t],r)},t.prototype.avgPool=function(t,e){var n=new di(e,\"avg\",!1),r=this.makeOutputArray(n.outputShape,\"float32\");return this.compileAndRun(n,[t],r)},t.prototype.maxPoolBackprop=function(t,e,n,r){var o=new di(r,\"max\",!0),a=this.compileAndRun(o,[e]),i=new si(r),s=this.makeOutputArray(i.outputShape,e.dtype),u=this.compileAndRun(i,[t,a],s);return a.dispose(),u},t.prototype.avgPoolBackprop=function(t,e,n){var r=new zo(n),o=this.makeOutputArray(r.outputShape,e.dtype);return this.compileAndRun(r,[t],o)},t.prototype.cast=function(t,e){return oo(t,e,this)},t.prototype.unstack=function(t,e){for(var n=t.shape[e],r=new Array(t.rank-1),o=0,a=0;a1,function(){return\"blockSize should be > 1 for depthToSpace, but was: \"+e});var r=t.shape[0],o=\"NHWC\"===n?t.shape[1]:t.shape[2],a=\"NHWC\"===n?t.shape[2]:t.shape[3],i=\"NHWC\"===n?t.shape[3]:t.shape[1],s=o*e,u=a*e,l=i/(e*e),c=new ya(\"NHWC\"===n?[r,s,u,l]:[r,l,s,u],e,n);return this.compileAndRun(c,[t])},t.prototype.split=function(t,e,n){return vo(t,e,n)},t.prototype.scatterND=function(t,e,n){var r=kr(0,t,n),o=r.sliceRank,a=r.numUpdates,i=r.sliceSize,s=r.strides,u=r.outputSize,l=[u/i,i],c=t.reshape([a,o]),h=e.reshape([a,i]);if(0===u)return ao(fn([]),n);var p=vn(0),f=new Ri(a,o,c.rank,h.rank,s,l);return this.compileAndRun(f,[h,c,p]).reshape(n)},t.prototype.sparseToDense=function(t,e,n,r){var o=kr(0,t,n),a=o.sliceRank,i=o.numUpdates,s=o.strides,u=o.outputSize,l=new Ri(i,a,t.rank,e.rank,s,[u,1],!1);return this.compileAndRun(l,[e,t,r]).reshape(n)},t.prototype.fft=function(t){return this.fftImpl(t,!1)},t.prototype.ifft=function(t){return this.fftImpl(t,!0)},t.prototype.fftImpl=function(t,e){var n=this.texData.get(t.dataId),r=new Ia(Ea,t.shape,e),o=new Ia(Ra,t.shape,e),a=[this.makeComplexComponentTensorHandle(t,n.complexTensors.real),this.makeComplexComponentTensorHandle(t,n.complexTensors.imag)],i=this.compileAndRun(r,a),s=this.compileAndRun(o,a),u=this.complex(i,s).as2D(t.shape[0],t.shape[1]);return i.dispose(),s.dispose(),u},t.prototype.gatherND=function(t,e){var n=e.shape,r=n[n.length-1],o=Rr(t,e),a=o[0],i=o[1],s=o[2],u=o[3],l=e.reshape([i,r]),c=t.reshape([t.size/s,s]),h=new _a(r,u,[i,s]);return this.compileAndRun(h,[c,l]).reshape(a)},t.prototype.fill=function(t,e,n){if(\"string\"===(n=n||U(e))){var r=A(n,y(t));return r.fill(e),ht.make(t,{values:r},n)}var o=new Sa(t,e),a=o.getCustomSetupFunc(e),i=this.makeOutputArray(t,n);return this.compileAndRun(o,[],i,a)},t.prototype.onesLike=function(t){if(\"string\"===t.dtype)throw new Error(\"onesLike is not supported under string dtype\");return this.fill(t.shape,1,t.dtype)},t.prototype.zerosLike=function(t){return this.fill(t.shape,\"string\"===t.dtype?\"\":0,t.dtype)},t.prototype.linspace=function(t,e,n){return io(t,e,n)},t.prototype.makeOutputArray=function(t,e){return ht.make(t,{},e,this)},t.prototype.makePackedTensor=function(t,e){var n=ht.make(t,{},e,this);return this.texData.get(n.dataId).isPacked=!0,n},t.prototype.unpackTensor=function(t){var e=new Zi(t.shape);return this.compileAndRun(e,[t],ht.make(e.outputShape,{},t.dtype,this))},t.prototype.packTensor=function(t){var e=new hi(t.shape);return this.compileAndRun(e,[t],this.makePackedTensor(t.shape,t.dtype),null,!0)},t.prototype.packedReshape=function(t,e){var n=t.reshape([he(t.shape)].concat(pe(t.shape))),r=[he(e)].concat(pe(e)),o=new mi(r,n.shape);return this.compileAndRun(o,[n]).reshape(e)},t.prototype.decode=function(t){var e,n=this.texData.get(t),r=n.isPacked,o=n.shape,a=n.dtype,i=fe(o),s=Fa(o),u=this.makeTensorHandle(o,\"float32\");return this.texData.get(u.dataId).isPacked=!0,this.texData.get(u.dataId).dtype=a,this.texData.get(u.dataId).texShape=s.map(function(t){return 2*t}),e=r?new ga(i,s):new ma(i,s),this.compileAndRun(e,[{shape:i,dtype:a,dataId:t}],u,null,!0),u},t.prototype.compileAndRun=function(t,e,n,r,o){var a=this;if(void 0===o&&(o=!1),null==n&&(n=t.usesPackedTextures?this.makePackedTensor(t.outputShape,e[0].dtype):this.makeOutputArray(t.outputShape,e[0].dtype)),0===n.size)return this.texData.get(n.dataId).values=k(n.dtype,0),n;var i=e.map(function(e){if(\"complex64\"===e.dtype)throw new Error(\"GPGPUProgram does not support complex64 input. For complex64 dtypes, please separate the program into real and imaginary parts.\");var n=a.texData.get(e.dataId);if(null==n.texture){if(!t.usesPackedTextures&&y(e.shape)<=s.getNumber(\"WEBGL_SIZE_UPLOAD_UNIFORM\"))return{shape:e.shape,texData:null,isUniform:!0,uniformValues:n.values};t.usesPackedTextures&&(n.isPacked=!0,n.shape=e.shape)}else if(!!n.isPacked!=!!t.usesPackedTextures)e=n.isPacked?a.unpackTensor(e):a.packTensor(e),n=a.texData.get(e.dataId);else if(n.isPacked&&!me(n.shape,e.shape)){var r=e,o=e.shape;e.shape=n.shape,e=a.packedReshape(e,o),n=a.texData.get(e.dataId),r.shape=o}return a.uploadToGPU(e.dataId),{shape:e.shape,texData:n,isUniform:!1}});this.uploadToGPU(n.dataId);var u,l={shape:n.shape,texData:this.texData.get(n.dataId),isUniform:!1},c=function(t,e,n){var r=\"\";e.concat(n).forEach(function(t){var e=null!=t.texData&&null!=t.texData.slice&&t.texData.slice.flatOffset>0,n=t.isUniform?\"uniform\":t.texData.texShape;r+=t.shape+\"_\"+n+\"_\"+e});var o=t.userCode,a=t.constructor.name;return a+=\"_\"+r+\"_\"+o}(t,i,l),h=this.getAndSaveBinary(c,function(){return function(t,e,n,r){var o=e.userCode,a=n.map(function(t,n){var r={logicalShape:t.shape,texShape:t.isUniform?null:t.texData.texShape,isUniform:t.isUniform,isPacked:!t.isUniform&&t.texData.isPacked,flatOffset:null};return null!=t.texData&&null!=t.texData.slice&&t.texData.slice.flatOffset>0&&(r.flatOffset=t.texData.slice.flatOffset),{name:e.variableNames[n],shapeInfo:r}}),i=a.map(function(t){return t.shapeInfo}),u={logicalShape:r.shape,texShape:r.texData.texShape,isUniform:!1,isPacked:r.texData.isPacked,flatOffset:null},l=ko(a,u,o,e.usesPackedTextures),c=t.createProgram(l),h=null,p=t.getUniformLocation(c,\"NAN\",!1);1===s.getNumber(\"WEBGL_VERSION\")&&(h=t.getUniformLocation(c,\"INFINITY\",!1));for(var f={},d=0;d0?32:16})),this.floatPrecisionValue},t.prototype.epsilon=function(){return 32===this.floatPrecision()?1e-7:1e-4},t.prototype.uploadToGPU=function(t){var e,n=this.texData.get(t),r=n.shape,o=n.dtype,a=n.values,i=n.texture,s=n.usage,u=n.isPacked;if(null==i){var l,c=null!=this.activeTimers;c&&(l=performance.now());var h=n.texShape;if(null==h&&(h=de(r,u),n.texShape=h),null!=a){var p=fe(r),f=void 0,d=h[1],v=h[0],m=a instanceof Uint8Array;u?(d=(e=Ma(h[0],h[1]))[0],v=e[1],f=new Ca(p,[v,d],m)):f=new wa(p,[v,d],m);var g=this.makeTensorHandle([v,d],o);this.texData.get(g.dataId).usage=m?Ta.PIXELS:Ta.UPLOAD,this.gpgpu.uploadDenseMatrixToTexture(this.getTexture(g.dataId),d,v,a);var x=this.makeTensorHandle(f.outputShape,g.dtype);x.size=y(f.outputShape),this.texData.get(x.dataId).isPacked=u,this.compileAndRun(f,[g],x);var b=this.texData.get(x.dataId);n.texture=b.texture,n.texShape=b.texShape,n.isPacked=b.isPacked,n.usage=b.usage,this.disposeData(g.dataId),this.texData.delete(x.dataId),n.values=null,c&&(this.uploadWaitMs+=performance.now()-l)}else{var w=this.acquireTexture(h,s,o,u);n.texture=w}}},t.prototype.convertAndCacheOnCPU=function(t,e){var n=this.texData.get(t),r=n.dtype;return this.releaseGPUData(t),null!=e&&(n.values=function(t,e){if(\"float32\"===e||\"complex64\"===e)return t;if(\"int32\"===e||\"bool\"===e){for(var n=\"int32\"===e?new Int32Array(t.length):new Uint8Array(t.length),r=0;r1024*this.numMBBeforeWarning*1024){var o=(this.numBytesInGPU/1024/1024).toFixed(2);this.warnedAboutMemory=!0,console.warn(\"High memory usage in GPU: \"+o+\" MB, most likely due to a memory leak\")}return this.textureManager.acquireTexture(t,e,r)},t.prototype.computeBytes=function(t,e){return t[0]*t[1]*M(e)},t}();Tt()&&At.registerBackend(\"webgl\",function(){return new ns},2);var rs=ln({abs_:function(t){var e=Ye(t,\"x\",\"abs\");return\"complex64\"===e.dtype?At.runKernel(function(t){return t.complexAbs(e)},{$x:e}):At.runKernel(function(t,n){var r=t.abs(e);return n([e]),r},{$x:e},function(t,e){var n=e[0];return{$x:function(){return t.mul(n.toFloat().step(-1))}}})}}),os=ln({acos_:function(t){var e=Ye(t,\"x\",\"acos\");return At.runKernel(function(t,n){var r=t.acos(e);return n([e]),r},{$x:e},function(t,e){var n=e[0];return{$x:function(){return t.divStrict(vn(1).sub(n.toFloat().square()).sqrt()).neg()}}})}}),as=ln({acosh_:function(t){var e=Ye(t,\"x\",\"acosh\");return At.runKernel(function(t,n){var r=t.acosh(e);return n([e]),r},{$x:e},function(t,e){var n=e[0];return{$x:function(){return t.divStrict(n.toFloat().square().sub(1).sqrt())}}})}}),is=ln({asin_:function(t){var e=Ye(t,\"x\",\"asin\");return At.runKernel(function(t,n){var r=t.asin(e);return n([e]),r},{$x:e},function(t,e){var n=e[0];return{$x:function(){return t.divStrict(vn(1).sub(n.toFloat().square()).sqrt())}}})}}),ss=ln({asinh_:function(t){var e=Ye(t,\"x\",\"asinh\");return At.runKernel(function(t,n){var r=t.asinh(e);return n([e]),r},{$x:e},function(t,e){var n=e[0];return{$x:function(){return t.divStrict(vn(1).add(n.toFloat().square()).sqrt())}}})}}),us=ln({atan_:function(t){var e=Ye(t,\"x\",\"atan\");return At.runKernel(function(t,n){var r=t.atan(e);return n([e]),r},{$x:e},function(t,e){var n=e[0];return{$x:function(){return t.div(n.toFloat().square().add(1))}}})}}),ls=ln({atanh_:function(t){var e=Ye(t,\"x\",\"atanh\");return At.runKernel(function(t,n){var r=t.atanh(e);return n([e]),r},{$x:e},function(t,e){var n=e[0];return{$x:function(){return t.div(vn(1).sub(n.toFloat().square()))}}})}}),cs=ln({ceil_:function(t){var e=Ye(t,\"x\",\"ceil\");return At.runKernel(function(t){return t.ceil(e)},{$x:e},function(t){return{$x:function(){return kn(t)}}})}}),hs=ln({clipByValue_:function(t,e,n){var r=Ye(t,\"x\",\"clipByValue\");return d(e<=n,function(){return\"Error in clip: min (\"+e+\") must be less than or equal to max (\"+n+\").\"}),At.runKernel(function(t,o){var a=t.clip(r,e,n);return o([r]),a},{$x:r},function(t,r){var o=r[0];return{$x:function(){return t.where(o.greaterEqual(e).logicalAnd(o.lessEqual(n)),kn(t))}}})}}),ps=ln({cos_:function(t){var e=Ye(t,\"x\",\"cos\");return At.runKernel(function(t,n){var r=t.cos(e);return n([e]),r},{$x:e},function(t,e){var n=e[0];return{$x:function(){return n.toFloat().sin().neg().mul(t)}}})}}),fs=ln({cosh_:function(t){var e=Ye(t,\"x\",\"cosh\");return At.runKernel(function(t,n){var r=t.cosh(e);return n([e]),r},{$x:e},function(t,e){var n=e[0];return{$x:function(){return n.toFloat().sinh().mulStrict(t)}}})}}),ds=ln({erf_:function(t){var e=Ye(t,\"x\",\"erf\");return d(\"int32\"===e.dtype||\"float32\"===e.dtype,function(){return\"Input dtype must be `int32` or `float32`.\"}),\"int32\"===e.dtype&&(e=e.toFloat()),At.runKernel(function(t,n){var r=t.erf(e);return n([e]),r},{$x:e},function(t,e){var n=e[0];return{$x:function(){return t.mul(n.square().neg().exp().mul(2/Math.sqrt(Math.PI)))}}})}}),vs=ln({exp_:function(t){var e=Ye(t,\"x\",\"exp\");return At.runKernel(function(t,n){var r=t.exp(e);return n([r]),r},{$x:e},function(t,e){return{$x:function(){return t.mulStrict(e[0])}}})}}),ms=ln({expm1_:function(t){var e=Ye(t,\"x\",\"expm1\");return At.runKernel(function(t,n){var r=t.expm1(e);return n([e]),r},{$x:e},function(t,e){var n=e[0];return{$x:function(){return t.mul(n.exp())}}})}}),gs=ln({floor_:function(t){var e=Ye(t,\"x\",\"floor\");return At.runKernel(function(t){return t.floor(e)},{$x:e},function(t){return{$x:function(){return kn(t)}}})}}),ys=ln({log_:function(t){var e=Ye(t,\"x\",\"log\");return At.runKernel(function(t,n){var r=t.log(e);return n([e]),r},{$x:e},function(t,e){var n=e[0];return{$x:function(){return t.div(n.toFloat())}}})}}),xs=ln({log1p_:function(t){var e=Ye(t,\"x\",\"log1p\");return At.runKernel(function(t,n){var r=t.log1p(e);return n([e]),r},{$x:e},function(t,e){var n=e[0];return{$x:function(){return t.div(n.add(1))}}})}}),bs=ln({logSigmoid_:function(t){var e=Ye(t,\"x\",\"logSigmoid\");return At.runKernel(function(t,n){var r=t.softplus(e.neg()).neg();return n([e]),r},{$x:e},function(t,e){var n=e[0];return{$x:function(){return t.mul(n.neg().sigmoid())}}})}}),ws=ln({neg_:function(t){var e=Ye(t,\"x\",\"neg\");return At.runKernel(function(t){return t.neg(e)},{$x:e},function(t){return{$x:function(){return t.neg()}}})}}),Cs=ln({reciprocal_:function(t){var e=Ye(t,\"x\",\"reciprocal\");return At.runKernel(function(t,n){var r=t.reciprocal(e);return n([e]),r},{$x:e},function(t,e){var n=e[0];return{$x:function(){return t.div(n.square().neg())}}})}}),Es=ln({round_:function(t){var e=Ye(t,\"x\",\"round\");return At.runKernel(function(t){return t.round(e)},{$x:e},function(t){return{$x:function(){return kn(t)}}})}}),Rs=ln({rsqrt_:function(t){var e=Ye(t,\"x\",\"rsqrt\");return At.runKernel(function(t,n){var r=t.rsqrt(e);return n([e]),r},{$x:e},function(t,e){var n=e[0];return{$x:function(){return t.div(n.pow(1.5).mul(2)).neg()}}})}}),Is=ln({sigmoid_:function(t){var e=Ye(t,\"x\",\"sigmoid\");return At.runKernel(function(t,n){var r=t.sigmoid(e);return n([r]),r},{$x:e},function(t,e){var n=e[0];return{$x:function(){return t.mul(n.mul(vn(1).sub(n)))}}})}}),Ss=ln({sign_:function(t){var e=Ye(t,\"x\",\"sign\");return At.runKernel(function(t){return t.sign(e)},{$x:e},function(t){return{$x:function(){return kn(t)}}})}}),Ns=ln({isNaN_:function(t){var e=Ye(t,\"x\",\"isNaN\");return At.runKernel(function(t){return t.isNaN(e)},{$x:e},function(t){return{$x:function(){return kn(t)}}})}}),ks=ln({isInf_:function(t){var e=Ye(t,\"x\",\"isInf\");return At.runKernel(function(t){return t.isInf(e)},{$x:e},function(t){return{$x:function(){return kn(t)}}})}}),As=ln({isFinite_:function(t){var e=Ye(t,\"x\",\"isFinite\");return At.runKernel(function(t){return t.isFinite(e)},{$x:e},function(t){return{$x:function(){return kn(t)}}})}}),Ts=ln({sin_:function(t){var e=Ye(t,\"x\",\"sin\");return At.runKernel(function(t,n){var r=t.sin(e);return n([e]),r},{$x:e},function(t,e){var n=e[0];return{$x:function(){return n.toFloat().cos().mul(t)}}})}}),Ds=ln({sinh_:function(t){var e=Ye(t,\"x\",\"sinh\");return At.runKernel(function(t,n){var r=t.sinh(e);return n([e]),r},{$x:e},function(t,e){var n=e[0];return{$x:function(){return n.toFloat().cosh().mulStrict(t)}}})}}),_s=ln({softplus_:function(t){var e=Ye(t,\"x\",\"softplus\");return At.runKernel(function(t,n){var r=t.softplus(e);return n([e]),r},{$x:e},function(t,e){var n=e[0];return{$x:function(){return t.mul(n.sigmoid())}}})}}),Os=ln({sqrt_:function(t){var e=Ye(t,\"x\",\"sqrt\");return At.runKernel(function(t,n){var r=t.sqrt(e);return n([e]),r},{$x:e},function(t,e){var n=e[0];return{$x:function(){return t.div(n.toFloat().sqrt().mul(2))}}})}}),Fs=ln({square_:function(t){var e=Ye(t,\"x\",\"square\");return At.runKernel(function(t,n){return n([e]),t.square(e)},{$x:e},function(t,e){var n=e[0];return{$x:function(){return t.mul(n.toFloat().mul(2))}}})}}),Ms=ln({step_:function(t,e){void 0===e&&(e=0);var n=Ye(t,\"x\",\"step\");return At.runKernel(function(t){return t.step(n,e)},{$x:n},function(t){return{$x:function(){return kn(t)}}})}}),Bs=ln({tan_:function(t){var e=Ye(t,\"x\",\"tan\");return At.runKernel(function(t,n){var r=t.tan(e);return n([e]),r},{$x:e},function(t,e){var n=e[0];return{$x:function(){return t.div(n.cos().square())}}})}}),Ps=ln({tanh_:function(t){var e=Ye(t,\"x\",\"tanh\");return At.runKernel(function(t,n){var r=t.tanh(e);return n([r]),r},{$x:e},function(t,e){var n=e[0];return{$x:function(){return vn(1).sub(n.square()).mulStrict(t)}}})}});function Ls(t,e,n,r,o,a){var i,s,u=Ye(t,\"x\",\"batchNorm\"),l=Ye(e,\"mean\",\"batchNorm\"),c=Ye(n,\"variance\",\"batchNorm\");return null!=o&&(i=Ye(o,\"scale\",\"batchNorm\")),null!=r&&(s=Ye(r,\"offset\",\"batchNorm\")),d(2===u.rank,function(){return\"Error in batchNorm3D: x must be rank 3 but got rank \"+u.rank+\".\"}),d(2===l.rank||1===l.rank,function(){return\"Error in batchNorm2D: mean must be rank 2 or rank 1 but got rank \"+l.rank+\".\"}),d(2===c.rank||1===c.rank,function(){return\"Error in batchNorm2D: variance must be rank 2 or rank 1 but got rank \"+c.rank+\".\"}),null!=i&&d(2===i.rank||1===i.rank,function(){return\"Error in batchNorm2D: scale must be rank 2 or rank 1 but got rank \"+i.rank+\".\"}),null!=s&&d(2===s.rank||1===s.rank,function(){return\"Error in batchNorm2D: offset must be rank 2 or rank 1 but got rank \"+s.rank+\".\"}),zs(u,l,c,s,i,a)}function Ws(t,e,n,r,o,a){var i,s,u=Ye(t,\"x\",\"batchNorm\"),l=Ye(e,\"mean\",\"batchNorm\"),c=Ye(n,\"variance\",\"batchNorm\");return null!=o&&(i=Ye(o,\"scale\",\"batchNorm\")),null!=r&&(s=Ye(r,\"offset\",\"batchNorm\")),d(3===u.rank,function(){return\"Error in batchNorm3D: x must be rank 3 but got rank \"+u.rank+\".\"}),d(3===l.rank||1===l.rank,function(){return\"Error in batchNorm3D: mean must be rank 3 or rank 1 but got rank \"+l.rank+\".\"}),d(3===c.rank||1===c.rank,function(){return\"Error in batchNorm3D: variance must be rank 3 or rank 1 but got rank \"+c.rank+\".\"}),null!=i&&d(3===i.rank||1===i.rank,function(){return\"Error in batchNorm3D: scale must be rank 3 or rank 1 but got rank \"+i.rank+\".\"}),null!=s&&d(3===s.rank||1===s.rank,function(){return\"Error in batchNorm3D: offset must be rank 3 or rank 1 but got rank \"+s.rank+\".\"}),zs(u,l,c,s,i,a)}function Us(t,e,n,r,o,a){var i,s,u=Ye(t,\"x\",\"batchNorm\"),l=Ye(e,\"mean\",\"batchNorm\"),c=Ye(n,\"variance\",\"batchNorm\");return null!=o&&(i=Ye(o,\"scale\",\"batchNorm\")),null!=r&&(s=Ye(r,\"offset\",\"batchNorm\")),d(4===u.rank,function(){return\"Error in batchNorm4D: x must be rank 4 but got rank \"+u.rank+\".\"}),d(4===l.rank||1===l.rank,function(){return\"Error in batchNorm4D: mean must be rank 4 or rank 1 but got rank \"+l.rank+\".\"}),d(4===c.rank||1===c.rank,function(){return\"Error in batchNorm4D: variance must be rank 4 or rank 1 but got rank \"+c.rank+\".\"}),null!=i&&d(4===i.rank||1===i.rank,function(){return\"Error in batchNorm4D: scale must be rank 4 or rank 1 but got rank \"+i.rank+\".\"}),null!=s&&d(4===s.rank||1===s.rank,function(){return\"Error in batchNorm4D: offset must be rank 4 or rank 1 but got rank \"+s.rank+\".\"}),zs(u,l,c,s,i,a)}function zs(t,e,n,r,o,a){null==a&&(a=.001);var i,s,u,l=Ye(t,\"x\",\"batchNorm\"),c=Ye(e,\"mean\",\"batchNorm\"),h=Ye(n,\"variance\",\"batchNorm\");null!=o&&(i=Ye(o,\"scale\",\"batchNorm\")),null!=r&&(s=Ye(r,\"offset\",\"batchNorm\")),d(c.rank===h.rank,function(){return\"Batch normalization gradient requires mean and variance to have equal ranks.\"}),d(null==s||c.rank===s.rank,function(){return\"Batch normalization gradient requires mean and offset to have equal ranks.\"}),d(null==i||c.rank===i.rank,function(){return\"Batch normalization gradient requires mean and scale to have equal ranks.\"}),u=0===l.rank||1===l.rank?l.as4D(1,1,1,l.size):2===l.rank?l.as4D(1,1,l.shape[0],l.shape[1]):3===l.rank?l.as4D(1,l.shape[0],l.shape[1],l.shape[2]):l;return At.runKernel(function(t,e){var n=t.batchNormalization(u,Vs(c),Vs(h),a,Vs(i),Vs(s));return e([l,c,h,i]),n},{$x:l,$mean:c,$variance:h,$scale:i,$offset:s},function(t,e){var n=e,r=n[0],o=n[1],i=n[2],s=n[3],l=null==s?vn(1):s,c=$r(o.shape,u.shape),h=[];if(1===o.rank){for(var p=0;p=2&&i.rank>=2&&a.rank===i.rank,function(){return\"Error in matMul: inputs must have the same rank of at least 2, got ranks \"+a.rank+\" and \"+i.rank+\".\"}),d(x(h,p),function(){return\"Error in matMul: outer dimensions (\"+h+\") and (\"+p+\") of Tensors with shapes \"+a.shape+\" and \"+i.shape+\" must match.\"}),d(s===u,function(){return\"Error in matMul: inner shapes (\"+s+\") and (\"+u+\") of Tensors with shapes \"+a.shape+\" and \"+i.shape+\" and transposeA=\"+n+\" and transposeB=\"+r+\" must match.\"});var m=a.shape.slice(0,-2).concat([l,c]),g=n?a.as3D(f,s,l):a.as3D(f,l,s),b=r?i.as3D(v,c,u):i.as3D(v,u,c);return At.runKernel(function(t,e){var o=t.batchMatMul(g,b,n,r);return e([g,b]),o},{$a:g,$b:b},function(t,e){var o=e,a=o[0],i=o[1];return n||r?!n&&r?{$a:function(){return t.matMul(i,!1,!1)},$b:function(){return t.matMul(a,!0,!1)}}:n&&!r?{$a:function(){return i.matMul(t,!1,!0)},$b:function(){return a.matMul(t,!1,!1)}}:{$a:function(){return i.matMul(t,!0,!0)},$b:function(){return t.matMul(a,!0,!0)}}:{$a:function(){return t.matMul(i,!1,!0)},$b:function(){return a.matMul(t,!0,!1)}}}).reshape(m)}}),lu=ln({dot_:function(t,e){var n=Ye(t,\"t1\",\"dot\"),r=Ye(e,\"t2\",\"dot\");d(!(1!==n.rank&&2!==n.rank||1!==r.rank&&2!==r.rank),function(){return\"Error in dot: inputs must all be rank 1 or 2, but got ranks \"+n.rank+\" and \"+r.rank+\".\"});var o=1===n.rank?n.size:n.shape[1],a=1===r.rank?r.size:r.shape[0];return d(o===a,function(){return\"Error in dot: inner dimensions of inputs must match, but got \"+o+\" and \"+a+\".\"}),1===n.rank&&1===r.rank?n.as2D(1,-1).matMul(r.as2D(-1,1)).asScalar():1===n.rank&&2===r.rank?n.as2D(1,-1).matMul(r.as2D(r.shape[0],r.shape[1])).as1D():2===n.rank&&1===r.rank?n.matMul(r.as2D(-1,1)).as1D():n.matMul(r.as2D(r.shape[0],r.shape[1]))}}),cu=ln({outerProduct_:function(t,e){var n=Ye(t,\"v1\",\"outerProduct\"),r=Ye(e,\"v2\",\"outerProduct\");return d(1===n.rank&&1===r.rank,function(){return\"Error in outerProduct: inputs must be rank 1, but got ranks \"+n.rank+\" and \"+r.rank+\".\"}),n.as2D(-1,1).matMul(r.as2D(1,-1))}});var hu=ln({reverse_:function(t,e){var n=Ye(t,\"x\",\"reverse\");if(0===n.rank)return n.clone();var r=S(e,n.shape);return At.runKernel(function(t){return t.reverse(n,r)},{$x:n},function(t){return{$x:function(){return t.reverse(r)}}}).reshapeAs(n)}}),pu=ln({reverse1d_:function(t){var e=Ye(t,\"x\",\"reverse\");return d(1===e.rank,function(){return\"Error in reverse1D: x must be rank 1 but got rank \"+e.rank+\".\"}),hu(e,0)}}),fu=ln({reverse2d_:function(t,e){var n=Ye(t,\"x\",\"reverse\");return d(2===n.rank,function(){return\"Error in reverse2D: x must be rank 2 but got rank \"+n.rank+\".\"}),hu(n,e)}}),du=ln({reverse3d_:function(t,e){var n=Ye(t,\"x\",\"reverse\");return d(3===n.rank,function(){return\"Error in reverse3D: x must be rank 3 but got rank \"+n.rank+\".\"}),hu(n,e)}}),vu=ln({reverse4d_:function(t,e){var n=Ye(t,\"x\",\"reverse\");return d(4===n.rank,function(){return\"Error in reverse4D: x must be rank 4 but got rank \"+n.rank+\".\"}),hu(n,e)}});function mu(t,e,n,r,o,a){var i=Ye(t,\"x\",\"maxPool\"),s=i,u=!1;3===i.rank&&(u=!0,s=i.as4D(1,i.shape[0],i.shape[1],i.shape[2])),null==r&&(r=[1,1]),d(4===s.rank,function(){return\"Error in maxPool: input must be rank 4 but got rank \"+s.rank+\".\"}),d(ro(n,r),function(){return\"Error in maxPool: Either strides or dilations must be 1. Got strides \"+n+\" and dilations '\"+r+\"'\"}),null!=a&&d(b(o),function(){return\"Error in maxPool: pad must be an integer when using, dimRoundingMode \"+a+\" but got pad \"+o+\".\"});var l=Kr(s.shape,e,n,r,o,a),c=At.runKernel(function(t,e){var n=t.maxPool(s,l);return e([s,n]),n},{x:s},function(t,a){var i=a[0],s=a[1];return{x:function(){return function(t,e,n,r,o,a,i,s){var u=Ye(t,\"dy\",\"maxPoolBackprop\"),l=Ye(e,\"input\",\"maxPoolBackprop\"),c=Ye(n,\"output\",\"maxPoolBackprop\");d(l.rank===u.rank,function(){return\"Rank of input (\"+l.rank+\") does not match rank of dy (\"+u.rank+\")\"}),null==a&&(a=[1,1]),d(ro(o,a),function(){return\"Error in maxPoolBackProp: Either strides or dilations must be 1. Got strides \"+o+\" and dilations '\"+a+\"'\"}),d(4===u.rank,function(){return\"Error in maxPoolBackprop: dy must be rank 4 but got rank \"+u.rank+\".\"}),d(4===l.rank,function(){return\"Error in maxPoolBackprop: input must be rank 4 but got rank \"+l.rank+\".\"}),null!=s&&d(b(i),function(){return\"Error in maxPoolBackprop: pad must be an integer when using, dimRoundingMode \"+s+\" but got pad \"+i+\".\"});var h=Kr(l.shape,r,o,a,i,s);return At.runKernel(function(t){return t.maxPoolBackprop(u,l,c,h)},{$dy:u,$input:l})}(t,i,s,e,n,r,o)}}});return u?c.as3D(c.shape[1],c.shape[2],c.shape[3]):c}function gu(t,e,n,r,o,a){var i=Ye(t,\"x\",\"avgPool\",\"float32\");null==r&&(r=[1,1]),d(ro(n,r),function(){return\"Error in avgPool: Either strides or dilations must be 1. Got strides \"+n+\" and dilations '\"+r+\"'\"});var s=i,u=!1;3===i.rank&&(u=!0,s=i.as4D(1,i.shape[0],i.shape[1],i.shape[2])),d(4===s.rank,function(){return\"Error in avgPool: x must be rank 4 but got rank \"+s.rank+\".\"}),null!=a&&d(b(o),function(){return\"Error in avgPool: pad must be an integer when using, dimRoundingMode \"+a+\" but got pad \"+o+\".\"});var l=Kr(s.shape,e,n,r,o,a),c=At.runKernel(function(t){return t.avgPool(s,l)},{x:s},function(t){return{x:function(){return function(t,e,n,r,o,a){var i=Ye(t,\"dy\",\"avgPoolBackprop\"),s=Ye(e,\"input\",\"avgPoolBackprop\");d(s.rank===i.rank,function(){return\"Rank of input (\"+s.rank+\") does not match rank of dy (\"+i.rank+\")\"}),null==o&&(o=[1,1]),d(ro(r,o),function(){return\"Error in avgPoolBackprop: Either strides or dilations must be 1. Got strides \"+r+\" and dilations '\"+o+\"'\"});var u=s,l=i,c=!1;3===s.rank&&(c=!0,u=s.as4D(1,s.shape[0],s.shape[1],s.shape[2]),l=i.as4D(1,i.shape[0],i.shape[1],i.shape[2])),d(4===l.rank,function(){return\"Error in avgPoolBackprop: dy must be rank 4 but got rank \"+l.rank+\".\"}),d(4===u.rank,function(){return\"Error in avgPoolBackprop: input must be rank 4 but got rank \"+u.rank+\".\"});var h=Kr(u.shape,n,r,o,a),p=At.runKernel(function(t){return t.avgPoolBackprop(l,u,h)},{dy4D:l,input4D:u});return c?p.as3D(p.shape[1],p.shape[2],p.shape[3]):p}(t,s,e,n,r,o)}}});return c=c.cast(i.dtype),u?c.as3D(c.shape[1],c.shape[2],c.shape[3]):c}var yu=ln({maxPool_:function(t,e,n,r,o){return mu(t,e,n,1,r,o)}}),xu=ln({avgPool_:function(t,e,n,r,o){return gu(t,e,n,1,r,o)}}),bu=ln({pool_:function(t,e,n,r,o,a){null==o&&(o=[1,1]),null==a&&(a=1),0===r&&(r=\"valid\");var i=Ye(t,\"x\",\"maxPool\"),s=i,u=!1;3===i.rank&&(u=!0,s=i.as4D(1,i.shape[0],i.shape[1],i.shape[2])),d(ro(a,o),function(){return\"Error in pool: Either strides or dilations must be 1. Got strides \"+a+\" and dilations '\"+o+\"'\"});var l,c=Kr(s.shape,e,a,o,r),h=[c.dilationHeight,c.dilationWidth];l=\"same\"===r?function(t,e){var n=t.map(function(t,n){return t+(t-1)*(e[n]-1)}).map(function(t){return t-1}),r=n.map(function(t){return Math.floor(t/2)}),o=n.map(function(t,e){return t-r[e]});return n.map(function(t,e){return[r[e],o[e]]})}([c.filterHeight,c.filterWidth],h):[[0,0],[0,0]];var p=1===h[0]&&1===h[1],f=function(t,e,n){var r=n.map(function(t){return t[0]}),o=n.map(function(t){return t[1]}),a=t.concat(r,o),i=e.map(function(t,e){return(t-a[e]%t)%t}),s=o.map(function(t,e){return t+i[e]}),u=e.map(function(t,e){return[r[e],s[e]]}),l=e.map(function(t,e){return[0,i[e]]});return[u,l]}([c.inHeight,c.inWidth],h,l),v=f[0],m=f[1],g=p?r:\"valid\",y=p?s:pr(s,h,v),x=(\"avg\"===n?function(){return gu(y,e,a,1,g)}:function(){return mu(y,e,a,1,g)})(),b=p?x:Kn(x,h,m);return u?b.as3D(b.shape[1],b.shape[2],b.shape[3]):b}});var wu=ln({slice_:function(t,e,n){var r,o,a=Ye(t,\"x\",\"slice\");if(0===a.rank)throw new Error(\"Slicing scalar is not possible\");r=\"number\"==typeof e?[e].concat(new Array(a.rank-1).fill(0)):e.length=0?t:(d(-1===t,function(){return\"Bad value in size\"}),a.shape[e]-r[e])}),function(t,e,n){d(t.rank===e.length,function(){return\"Error in slice\"+t.rank+\"D: Length of begin \"+e+\" must match the rank of the array (\"+t.rank+\").\"}),d(t.rank===n.length,function(){return\"Error in slice\"+t.rank+\"D: Length of size \"+n+\" must match the rank of the array (\"+t.rank+\").\"});for(var r=function(r){d(e[r]+n[r]<=t.shape[r],function(){return\"Error in slice\"+t.rank+\"D: begin[\"+r+\"] + size[\"+r+\"] (\"+(e[r]+n[r])+\") would overflow input.shape[\"+r+\"] (\"+t.shape[r]+\")\"})},o=0;o0&&(e=e.sum(n)),e.reshape(r.shape)},$b:function(){var e=t,n=$r(o.shape,a);return n.length>0&&(e=e.sum(n)),e.reshape(o.shape)}}})}}),Qu=ln({addN_:function(t){d(Array.isArray(t),function(){return\"The argument passed to tf.addN() must be a list of tensors\"}),d(t.length>=1,function(){return\"Must pass at least one tensor to tf.addN(), but got \"+t.length});var e=t.map(function(t,e){return Ye(t,\"tensors\"+e,\"addN\")}),n=e[0];e.forEach(function(t){if(t.dtype!==n.dtype)throw new Error(\"All tensors passed to tf.addN() must have the same dtype\")}),e.forEach(function(t){if(!x(t.shape,n.shape))throw new Error(\"All tensors passed to tf.addN() must have the same shape\")});var r=e;return At.runKernel(function(t){return t.addN(e)},r,function(t){var n={};return e.forEach(function(e,r){n[r]=function(){return t.clone()}}),n})}}),Ju=ln({addStrict_:function(t,e){var n=Ye(t,\"a\",\"addStrict\"),r=Ye(e,\"b\",\"addStrict\");return v(n.shape,r.shape,\"Error in addStrict: \"),n.add(r)}}),Zu=ln({atan2_:function(t,e){var n,r=Ye(t,\"a\",\"atan2\"),o=Ye(e,\"b\",\"atan2\");n=Ct(r,o),r=n[0],o=n[1];var a=jr(r.shape,o.shape);return At.runKernel(function(t,e){var n=t.atan2(r,o);return e([r,o]),n},{$a:r,$b:o},function(t,e){var n=e[0],r=e[1];return{$a:function(){var e=Yu(n.square(),r.square()),o=t.mul(r.div(e)),i=$r(n.shape,a);return i.length>0&&(o=o.sum(i)),o.reshape(n.shape)},$b:function(){var e=Yu(n.square(),r.square()),o=ws(t.mul(n.div(e))),i=$r(r.shape,a);return i.length>0&&(o=o.sum(i)),o.reshape(r.shape)}}})}}),tl=ln({div_:function(t,e){var n,r=Ye(t,\"a\",\"div\"),o=Ye(e,\"b\",\"div\");if(n=Ct(r,o),r=n[0],o=n[1],\"int32\"===r.dtype&&\"int32\"===o.dtype)return nl(r,o);var a=jr(r.shape,o.shape);return At.runKernel(function(t,e){var n=t.realDivide(r,o);return e([r,o]),n},{$a:r,$b:o},function(t,e){var n=e[0],r=e[1];return{$a:function(){var e=t.div(r.toFloat()),o=$r(n.shape,a);return o.length>0?e.sum(o).reshape(n.shape):e},$b:function(){var e=t.mul(n.toFloat()),o=$r(r.shape,a);o.length>0&&(e=e.sum(o).reshape(r.shape));var i=r.square();return e.div(i.toFloat()).neg()}}})}}),el=ln({divStrict_:function(t,e){var n=Ye(t,\"a\",\"div\"),r=Ye(e,\"b\",\"div\");return v(n.shape,r.shape,\"Error in divideStrict: \"),n.div(r)}}),nl=ln({floorDiv_:function(t,e){var n,r=Ye(t,\"a\",\"floorDiv\"),o=Ye(e,\"b\",\"floorDiv\");n=Ct(r,o),r=n[0],o=n[1];var a=jr(r.shape,o.shape);return At.runKernel(function(t,e){var n=t.floorDiv(r,o);return e([r,o]),n},{$a:r,$b:o},function(t,e){var n=e[0],r=e[1];return{$a:function(){var e=t.div(r.toFloat()),o=$r(n.shape,a);return o.length>0?e.sum(o).reshape(n.shape):e},$b:function(){var e=t.mul(n.toFloat()),o=$r(r.shape,a);o.length>0&&(e=e.sum(o).reshape(r.shape));var i=r.square();return e.div(i.toFloat()).neg()}}})}}),rl=ln({maximum_:function(t,e){var n,r=Ye(t,\"a\",\"maximum\"),o=Ye(e,\"b\",\"maximum\");return n=Ct(r,o),r=n[0],o=n[1],\"bool\"===r.dtype&&(r=r.toInt(),o=o.toInt()),jr(r.shape,o.shape),At.runKernel(function(t,e){var n=t.maximum(r,o);return e([r,o]),n},{$a:r,$b:o},function(t,e){var n=e[0],r=e[1];return{$a:function(){return t.mul(n.greaterEqual(r).toFloat())},$b:function(){return t.mul(n.less(r).toFloat())}}})}}),ol=ln({maximumStrict_:function(t,e){var n=Ye(t,\"a\",\"maximumStrict\"),r=Ye(e,\"b\",\"maximumStrict\");return v(n.shape,r.shape,\"Error in maximumStrict: \"),n.maximum(r)}}),al=ln({minimum_:function(t,e){var n,r=Ye(t,\"a\",\"minimum\"),o=Ye(e,\"b\",\"minimum\");return n=Ct(r,o),r=n[0],o=n[1],\"bool\"===r.dtype&&(r=r.toInt(),o=o.toInt()),jr(r.shape,o.shape),At.runKernel(function(t,e){var n=t.minimum(r,o);return e([r,o]),n},{$a:r,$b:o},function(t,e){var n=e[0],r=e[1];return{$a:function(){return t.mul(n.lessEqual(r).toFloat())},$b:function(){return t.mul(n.greater(r).toFloat())}}})}}),il=ln({minimumStrict_:function(t,e){var n=Ye(t,\"a\",\"minimumStrict\"),r=Ye(e,\"b\",\"minimumStrict\");return v(n.shape,r.shape,\"Error in minimumStrict: \"),n.minimum(r)}}),sl=ln({mod_:function(t,e){var n,r=Ye(t,\"a\",\"mod\"),o=Ye(e,\"b\",\"mod\");n=Ct(r,o),r=n[0],o=n[1];var a=jr(r.shape,o.shape);return At.runKernel(function(t,e){var n=t.mod(r,o);return e([r,o]),n},{$a:r,$b:o},function(t,e){var n=e[0],r=e[1];return{$a:function(){var e=$r(n.shape,a);return e.length>0?t.sum(e).reshape(n.shape):t},$b:function(){var e=t.mul(n.div(r).floor().neg()),o=$r(r.shape,a);return o.length>0?e.sum(o).reshape(r.shape):e}}})}}),ul=ln({modStrict_:function(t,e){var n=Ye(t,\"a\",\"modStrict\"),r=Ye(e,\"b\",\"modStrict\");return v(n.shape,r.shape,\"Error in modStrict: \"),n.mod(r)}}),ll=ln({mul_:function(t,e){var n,r=Ye(t,\"a\",\"mul\"),o=Ye(e,\"b\",\"mul\");n=Ct(r,o),r=n[0],o=n[1];var a=jr(r.shape,o.shape);return At.runKernel(function(t,e){var n=t.multiply(r,o);return e([r,o]),n},{$a:r,$b:o},function(t,e){var n=e[0],r=e[1];return{$a:function(){var e=t.mul(r.toFloat()),o=$r(n.shape,a);return o.length>0?e.sum(o).reshape(n.shape):e},$b:function(){var e=t.mul(n.toFloat()),o=$r(r.shape,a);return o.length>0?e.sum(o).reshape(r.shape):e}}})}}),cl=ln({mulStrict_:function(t,e){var n=Ye(t,\"a\",\"mul\"),r=Ye(e,\"b\",\"mul\");return v(n.shape,r.shape,\"Error in multiplyStrict: \"),n.mul(r)}}),hl=ln({pow_:function(t,e){var n=Ye(t,\"base\",\"pow\"),r=Ye(e,\"exp\",\"pow\"),o=jr(n.shape,r.shape);return t=n.cast(bt(n.dtype,r.dtype)),e=r.cast(bt(n.dtype,r.dtype)),At.runKernel(function(t,e){var o=t.pow(n,r);return e([n,r,o]),o},{$base:n,$exp:r},function(t,e){var n=e[0],r=e[1],a=e[2];return{$base:function(){var e=r.toFloat(),a=t.mul(e.mul(n.pow(e.sub(vn(1))))),i=$r(n.shape,o);return i.length>0&&(a=a.sum(i)),a.reshape(n.shape)},$exp:function(){var e=n.greater(0),i=n.log().where(e,kn(n)),s=t.mul(a.mul(i)),u=$r(r.shape,o);return u.length>0&&(s=s.sum(u)),s.reshape(r.shape)}}})}}),pl=ln({powStrict_:function(t,e){return v(t.shape,e.shape,\"Error in powStrict: \"),t.pow(e)}}),fl=ln({squaredDifference_:function(t,e){var n,r=Ye(t,\"a\",\"squaredDifference\"),o=Ye(e,\"b\",\"squaredDifference\");return n=Ct(r,o),r=n[0],o=n[1],jr(r.shape,o.shape),At.runKernel(function(t,e){var n=t.squaredDifference(r,o);return e([r,o]),n},{$a:r,$b:o},function(t,e){var n=e[0],r=e[1],o=vn(2);return{$a:function(){return t.mul(n.sub(r).mul(o))},$b:function(){return t.mul(r.sub(n).mul(o))}}})}}),dl=ln({squaredDifferenceStrict_:function(t,e){var n=Ye(t,\"a\",\"squaredDifferenceStrict\"),r=Ye(e,\"b\",\"squaredDifferenceStrict\");return v(n.shape,r.shape,\"Error in squaredDifferenceStrict: \"),n.squaredDifference(r)}}),vl=ln({sub_:function(t,e){var n,r=Ye(t,\"a\",\"sub\"),o=Ye(e,\"b\",\"sub\");n=Ct(r,o),r=n[0],o=n[1];var a=jr(r.shape,o.shape);return At.runKernel(function(t){return t.subtract(r,o)},{$a:r,$b:o},function(t){return{$a:function(){var e=t,n=$r(r.shape,a);return n.length>0&&(e=e.sum(n)),e.reshape(r.shape)},$b:function(){var e=t,n=$r(o.shape,a);return n.length>0&&(e=e.sum(n)),e.neg().reshape(o.shape)}}})}}),ml=ln({subStrict_:function(t,e){var n=Ye(t,\"a\",\"subStrict\"),r=Ye(e,\"b\",\"subStrict\");return v(n.shape,r.shape,\"Error in subStrict: \"),n.sub(r)}});var gl=ln({logicalAnd_:function(t,e){var n=Ye(t,\"a\",\"logicalAnd\",\"bool\"),r=Ye(e,\"b\",\"logicalAnd\",\"bool\");return jr(n.shape,r.shape),At.runKernel(function(t){return t.logicalAnd(n,r)},{$a:n,$b:r})}}),yl=ln({logicalNot_:function(t){var e=Ye(t,\"x\",\"logicalNot\",\"bool\");return At.runKernel(function(t){return t.logicalNot(e)},{$x:e})}}),xl=ln({logicalOr_:function(t,e){var n=Ye(t,\"a\",\"logicalOr\",\"bool\"),r=Ye(e,\"b\",\"logicalOr\",\"bool\");return jr(n.shape,r.shape),At.runKernel(function(t){return t.logicalOr(n,r)},{$a:n,$b:r})}}),bl=ln({logicalXor_:function(t,e){var n=Ye(t,\"a\",\"logicalXor\",\"bool\"),r=Ye(e,\"b\",\"logicalXor\",\"bool\");return jr(n.shape,r.shape),xl(t,e).logicalAnd(gl(t,e).logicalNot())}}),wl=ln({where_:function(t,e,n){var r=Ye(e,\"a\",\"where\"),o=Ye(n,\"b\",\"where\"),a=Ye(t,\"condition\",\"where\",\"bool\");return v(r.shape,o.shape,\"Error in where: \"),1===a.rank?d(a.shape[0]===r.shape[0],function(){return\"The first dimension of `a` must match the size of `condition`.\"}):v(a.shape,o.shape,\"Error in where: \"),At.runKernel(function(t,e){var n=t.select(a,r,o);return e([a]),n},{$condition:a,$a:r,$b:o},function(t,e){var n=e[0];return{$condition:function(){return kn(n).toFloat()},$a:function(){return t.mul(n.cast(t.dtype))},$b:function(){return t.mul(n.logicalNot().cast(t.dtype))}}})}}),Cl=function(t){return r(this,void 0,void 0,function(){var e,n,r;return o(this,function(o){switch(o.label){case 0:return[4,(e=Ye(t,\"condition\",\"whereAsync\",\"bool\")).data()];case 1:return n=o.sent(),r=yo(e.shape,n),t!==e&&e.dispose(),[2,r]}})})};var El=ln({elu_:function(t){var e=Ye(t,\"x\",\"elu\");return At.runKernel(function(t,n){var r=t.elu(e);return n([r]),r},{$x:e},function(t,e){var n=e[0];return{$x:function(){return At.runKernel(function(e){return e.eluDer(t,n)},{dy:t,y:n})}}})}}),Rl=ln({leakyRelu_:function(t,e){void 0===e&&(e=.2);var n=Ye(t,\"x\",\"leakyRelu\");return rl(vn(e).mul(n),n)}}),Il=ln({prelu_:function(t,e){var n=Ye(t,\"x\",\"prelu\"),r=Ye(e,\"alpha\",\"prelu\");return At.runKernel(function(t,e){var o=t.prelu(n,r);return e([n,r]),o},{$x:n,$alpha:r},function(t,e){var n=e[0],r=e[1],o=n.greater(0);return{$x:function(){return wl(o,t,t.mul(r))},$alpha:function(){var e=wl(o,kn(t),t.mul(n)),a=$r(r.shape,t.shape);return a.length>0&&(e=e.sum(a)),e.reshape(r.shape)}}})}}),Sl=ln({relu_:function(t){var e=Ye(t,\"x\",\"relu\");return\"bool\"===e.dtype?e.toInt():At.runKernel(function(t,n){var r=t.relu(e);return n([e]),r},{$x:e},function(t,e){var n=e[0];return{$x:function(){return t.mulStrict(n.step().toFloat())}}})}}),Nl=ln({selu_:function(t){var e=Ye(t,\"x\",\"selu\");return At.runKernel(function(t,n){var r=t.selu(e);return n([e]),r},{$x:e},function(t,e){var n=e[0];return{$x:function(){var e=n.greater(vn(0)),r=vn(Pi),o=vn(Li),a=t.mul(o),i=t.mul(r).mul(n.toFloat().exp());return wl(e,a,i)}}})}});var kl=ln({transpose_:function(t,e){var n=Ye(t,\"x\",\"transpose\");return null==e&&(e=n.shape.map(function(t,e){return e}).reverse()),d(n.rank===e.length,function(){return\"Error in transpose: rank of input \"+n.rank+\" must match length of perm \"+e+\".\"}),e.forEach(function(t){d(t>=0&&to)throw new Error(\"'k' passed to topk() must be <= the last dimension (\"+o+\") but got \"+e);var a=At.runKernel(function(t){return t.topk(r,e,n)},{$x:r});return{values:a[0],indices:a[1]}}});var Ul=ln({scatterND_:function(t,e,n){var r=Ye(t,\"indices\",\"scatterND\",\"int32\"),o=Ye(e,\"updates\",\"scatterND\");return Nr(o,r,n),At.runKernel(function(t){return t.scatterND(r,o,n)},{$indices:r,$updates:o})}});var zl=ln({fft_:function(t){d(\"complex64\"===t.dtype,function(){return\"The dtype for tf.spectral.fft() must be complex64 but got \"+t.dtype+\".\"});var e=t.shape[t.shape.length-1],n=t.size/e,r=t.as2D(n,e);return At.runKernel(function(t){return t.fft(r)},{input:t}).reshape(t.shape)}}),Vl=ln({ifft_:function(t){d(\"complex64\"===t.dtype,function(){return\"The dtype for tf.spectral.ifft() must be complex64 but got \"+t.dtype+\".\"});var e=t.shape[t.shape.length-1],n=t.size/e,r=t.as2D(n,e);return At.runKernel(function(t){return t.ifft(r)},{input:t}).reshape(t.shape)}}),Gl=ln({rfft_:function(t,e){d(\"float32\"===t.dtype,function(){return\"The dtype for rfft() must be real value but got \"+t.dtype});var n,r=t.shape[t.shape.length-1],o=t.size/r;if(null!=e&&er){var s=t.shape.map(function(t){return t});s[t.shape.length-1]=e-r,n=t.concat(En(s),t.shape.length-1),r=e}else n=t;var u=n.zerosLike(),l=cn(n,u).as2D(o,r),c=zl(l),h=Math.floor(r/2)+1,p=hn(c),f=pn(c),v=p.split([h,r-h],p.shape.length-1),m=f.split([h,r-h],f.shape.length-1),g=n.shape.slice();return g[n.shape.length-1]=h,cn(v[0],m[0]).reshape(g)}}),ql=ln({irfft_:function(t){var e=t.shape[t.shape.length-1],n=t.size/e;if(e<=2){var r=t.as2D(n,e),o=Vl(r);return hn(o)}var a=[n,2*(e-1)],i=hn(t).as2D(n,e),s=pn(t).as2D(n,e),u=i.slice([0,1],[n,e-2]).reverse(1),l=s.slice([0,1],[n,e-2]).reverse(1).mul(vn(-1)),c=i.concat(u,1),h=s.concat(l,1);return r=cn(c,h).as2D(a[0],a[1]),o=Vl(r),hn(o)}}),Hl=Object.freeze({fft:zl,ifft:Vl,rfft:Gl,irfft:ql});var $l=ln({sparseToDense_:function(t,e,n,r){void 0===r&&(r=0);var o=Ye(t,\"sparseIndices\",\"sparseToDense\",\"int32\"),a=Ye(e,\"sparseValues\",\"sparseToDense\"),i=Ye(r,\"defaultValue\",\"sparseToDense\",a.dtype);return function(t,e,n,r){if(\"int32\"!==t.dtype)throw new Error(\"tf.sparseToDense() expects the indices to be int32 type, but the dtype was \"+t.dtype+\".\");if(t.rank>2)throw new Error(\"sparseIndices should be a scalar, vector, or matrix, but got shape \"+t.shape+\".\");var o=t.rank>0?t.shape[0]:1,a=t.rank>1?t.shape[1]:1;if(n.length!==a)throw new Error(\"outputShape has incorrect number of elements:, \"+n.length+\", should be: \"+a+\".\");var i=e.size;if(0!==e.rank&&(1!==e.rank||i!==o))throw new Error(\"sparseValues has incorrect shape \"+e.shape+\", should be [] or [\"+o+\"]\");if(e.dtype!==r.dtype)throw new Error(\"sparseValues.dtype must match defaultValues.dtype\")}(o,a,n,i),At.runKernel(function(t){return t.sparseToDense(o,a,n,i)},{$sparseIndices:o,$sparseValues:a,$defaultValue:i})}});var jl=ln({gatherND_:function(t,e){var n=Ye(e,\"indices\",\"gatherND\",\"int32\"),r=Ye(t,\"x\",\"gatherND\");return At.runKernel(function(t){return t.gatherND(r,n)},{$x:r,$indices:n})}});var Kl=ln({dropout_:function(t,e,n,r){if(null!=n&&!x(t.shape,n))throw new Error(\"Non-default noise shape is not implemented yet: \"+JSON.stringify(n));var o=cr(t.shape,0,1,\"float32\",r).greater(e);return o=o.div(vl(1,e)),t.mul(o)}});function Xl(t,e,n){for(var r=1-t%2,o=new Float32Array(t),a=0;a1?s.div(vn(i)):s}if(n===Yl.SUM_BY_NONZERO_WEIGHTS){if(null==o)return a.sum().div(vn(r.size));var u=o.mul(Cn(r.shape)).notEqual(vn(0)).sum().toFloat();return a.sum().div(u)}throw Error(\"Unknown reduction: \"+n)}}),rc=ln({cosineDistance_:function(t,e,n,r,o){void 0===o&&(o=Yl.SUM_BY_NONZERO_WEIGHTS);var a=Ye(t,\"labels\",\"cosineDistance\"),i=Ye(e,\"predictions\",\"cosineDistance\"),s=null;null!=r&&(s=Ye(r,\"weights\",\"cosineDistance\")),v(a.shape,i.shape,\"Error in cosineDistance: \");var u=vn(1).sub(a.mul(i).sum(n,!0));return nc(u,s,o)}}),oc=ln({hingeLoss_:function(t,e,n,r){void 0===r&&(r=Yl.SUM_BY_NONZERO_WEIGHTS);var o=Ye(t,\"labels\",\"hingeLoss\"),a=Ye(e,\"predictions\",\"hingeLoss\"),i=null;null!=n&&(i=Ye(n,\"weights\",\"hingeLoss\")),v(o.shape,a.shape,\"Error in hingeLoss: \");var s=vn(1);o=vn(2).mul(o).sub(s);var u=s.sub(o.mul(a)).relu();return nc(u,i,r)}}),ac=ln({huberLoss_:function(t,e,n,r,o){void 0===r&&(r=1),void 0===o&&(o=Yl.SUM_BY_NONZERO_WEIGHTS);var a=Ye(t,\"labels\",\"huberLoss\"),i=Ye(e,\"predictions\",\"huberLoss\"),s=null;null!=n&&(s=Ye(n,\"weights\",\"huberLoss\")),v(a.shape,i.shape,\"Error in huberLoss: \");var u=vn(r),l=i.sub(a).abs(),c=al(l,u),h=l.sub(c),p=vn(.5).mul(c.square()).add(u.mul(h));return nc(p,s,o)}}),ic=ln({logLoss_:function(t,e,n,r,o){void 0===r&&(r=1e-7),void 0===o&&(o=Yl.SUM_BY_NONZERO_WEIGHTS);var a=Ye(t,\"labels\",\"logLoss\"),i=Ye(e,\"predictions\",\"logLoss\"),s=null;null!=n&&(s=Ye(n,\"weights\",\"logLoss\")),v(a.shape,i.shape,\"Error in logLoss: \");var u=vn(1),l=vn(r),c=a.mul(i.add(l).log()).neg().sub(u.sub(a).mul(u.sub(i).add(l).log()));return nc(c,s,o)}}),sc=ln({meanSquaredError_:function(t,e,n,r){void 0===r&&(r=Yl.SUM_BY_NONZERO_WEIGHTS);var o=Ye(t,\"labels\",\"meanSquaredError\"),a=Ye(e,\"predictions\",\"meanSquaredError\"),i=null;null!=n&&(i=Ye(n,\"weights\",\"meanSquaredError\")),v(o.shape,a.shape,\"Error in meanSquaredError: \");var s=o.squaredDifference(a);return nc(s,i,r)}}),uc=ln({sigmoidCrossEntropy_:function(t,e,n,r,o){void 0===r&&(r=0),void 0===o&&(o=Yl.SUM_BY_NONZERO_WEIGHTS);var a=Ye(t,\"multiClassLabels\",\"sigmoidCrossEntropy\"),i=Ye(e,\"logits\",\"sigmoidCrossEntropy\"),s=null;if(null!=n&&(s=Ye(n,\"weights\",\"sigmoidCrossEntropy\")),v(a.shape,i.shape,\"Error in sigmoidCrossEntropy: \"),r>0){var u=vn(r),l=vn(1),c=vn(.5);a=a.mul(l.sub(u)).add(c.mul(u))}var h=function(t,e){var n=Ye(t,\"labels\",\"sigmoidCrossEntropyWithLogits\"),r=Ye(e,\"logits\",\"sigmoidCrossEntropyWithLogits\");v(n.shape,r.shape,\"Error in sigmoidCrossEntropyWithLogits: \");var o=r.relu(),a=r.mul(n),i=r.abs().neg().exp().log1p();return o.sub(a).add(i)}(a,i);return nc(h,s,o)}}),lc=ln({softmaxCrossEntropy_:function(t,e,n,r,o){void 0===r&&(r=0),void 0===o&&(o=Yl.SUM_BY_NONZERO_WEIGHTS);var a=Ye(t,\"onehotLabels\",\"softmaxCrossEntropy\"),i=Ye(e,\"logits\",\"softmaxCrossEntropy\"),s=null;if(null!=n&&(s=Ye(n,\"weights\",\"softmaxCrossEntropy\")),v(a.shape,i.shape,\"Error in softmaxCrossEntropy: \"),r>0){var u=vn(r),l=vn(1),c=vn(a.shape[1]);a=a.mul(l.sub(u)).add(u.div(c))}var h=function(t,e,n){if(void 0===n&&(n=-1),-1===n&&(n=e.rank-1),n!==e.rank-1)throw Error(\"Softmax cross entropy along a non-last dimension is not yet supported. Labels / logits was rank \"+e.rank+\" and dim was \"+n);return Wr(function(t,e,r){var o=e.logSumExp([n],!0),a=e.toFloat().sub(o);return r([t,a]),{value:a.mul(t).neg().sum([n]),gradFunc:function(t,e){var r=e[0],o=e[1],a=en(t.shape,[n]);return[t.reshape(a).mul(r.toFloat().sub(o.exp())),t.reshape(a).mul(o.exp().sub(r.toFloat()))]}}})(t,e)}(a,i);return nc(h,s,o)}}),cc=Object.freeze({get Reduction(){return Yl},absoluteDifference:ec,computeWeightedLoss:nc,cosineDistance:rc,hingeLoss:oc,huberLoss:ac,logLoss:ic,meanSquaredError:sc,sigmoidCrossEntropy:uc,softmaxCrossEntropy:lc});function hc(t,e){return void 0===e&&(e=!1),At.tidy(function(){if(2!==t.shape.length)throw new Error(\"qr2d() requires a 2D Tensor, but got a \"+t.shape.length+\"D Tensor.\");for(var n=t.shape[0],r=t.shape[1],o=tr(n),a=t.clone(),i=gn([[1]],[1,1]),s=i.clone(),u=n>=r?r:n,l=function(t){var e,u=a,l=s,c=o;e=At.tidy(function(){var e=a.slice([t,t],[n-t,1]),u=e.norm(),l=a.slice([t,t],[1,1]),c=l.sign().neg(),h=l.sub(c.mul(u)),p=e.div(h);s=1===p.shape[0]?i.clone():i.concat(p.slice([1,0],[p.shape[0]-1,p.shape[1]]),0);var f=c.matMul(h).div(u).neg(),d=a.slice([t,0],[n-t,r]),v=f.mul(s);a=0===t?d.sub(v.matMul(s.transpose().matMul(d))):a.slice([0,0],[t,r]).concat(d.sub(v.matMul(s.transpose().matMul(d))),0);var m=o.slice([0,t],[n,o.shape[1]-t]);return o=0===t?m.sub(m.matMul(s).matMul(v.transpose())):o.slice([0,0],[n,t]).concat(m.sub(m.matMul(s).matMul(v.transpose())),1),[s,a,o]}),s=e[0],a=e[1],o=e[2],Me([u,l,c])},c=0;cr&&(o=o.slice([0,0],[n,r]),a=a.slice([0,0],[r,r])),[o,a]})}var pc=ln({gramSchmidt_:function(t){var e;if(Array.isArray(t)){e=!1,d(null!=t&&t.length>0,function(){return\"Gram-Schmidt process: input must not be null, undefined, or empty\"});for(var n=t[0].shape[0],r=function(e){d(t[e].shape[0]===n,function(){return\"Gram-Schmidt: Non-unique lengths found in the input vectors: (\"+t[e].shape[0]+\" vs. \"+n+\")\"})},o=1;o0)for(var n=0;n= 2, but got rank \"+t.rank);if(2===t.rank)return hc(t,e);var n=t.shape.slice(0,t.shape.length-2).reduce(function(t,e){return t*e}),r=gr(t.reshape([n,t.shape[t.shape.length-2],t.shape[t.shape.length-1]]),0),o=[],a=[];return r.forEach(function(t){var n=hc(t,e),r=n[0],i=n[1];o.push(r),a.push(i)}),[dr(o,0).reshape(t.shape),dr(a,0).reshape(t.shape)]}}),dc=Object.freeze({gramSchmidt:pc,qr:fc});function vc(t,e,n,r,o){null==r&&(r=.5),null==o&&(o=Number.NEGATIVE_INFINITY);var a=t.shape[0];return n=Math.min(n,a),d(0<=r&&r<=1,function(){return\"iouThreshold must be in [0, 1], but was '\"+r+\"'\"}),d(2===t.rank,function(){return\"boxes must be a 2D tensor, but was of rank '\"+t.rank+\"'\"}),d(4===t.shape[1],function(){return\"boxes must have 4 columns, but 2nd dimension was \"+t.shape[1]}),d(1===e.rank,function(){return\"scores must be a 1D tensor\"}),d(e.shape[0]===a,function(){return\"scores has incompatible shape with boxes. Expected \"+a+\", but was \"+e.shape[0]}),{maxOutputSize:n,iouThreshold:r,scoreThreshold:o}}var mc=ln({resizeBilinear_:function(t,e,n){void 0===n&&(n=!1);var r=Ye(t,\"images\",\"resizeBilinear\");d(3===r.rank||4===r.rank,function(){return\"Error in resizeBilinear: x must be rank 3 or 4, but got rank \"+r.rank+\".\"}),d(2===e.length,function(){return\"Error in resizeBilinear: new shape must 2D, but got shape \"+e+\".\"});var o=r,a=!1;3===r.rank&&(a=!0,o=r.as4D(1,r.shape[0],r.shape[1],r.shape[2]));var i=e[0],s=e[1],u=At.runKernel(function(t,e){return e([o]),t.resizeBilinear(o,i,s,n)},{batchImages:o},function(t,e){return{batchImages:function(){return At.runKernel(function(r){return r.resizeBilinearBackprop(t,e[0],n)},{})}}});return a?u.as3D(u.shape[1],u.shape[2],u.shape[3]):u}}),gc=ln({resizeNearestNeighbor_:function(t,e,n){void 0===n&&(n=!1);var r=Ye(t,\"images\",\"resizeNearestNeighbor\");d(3===r.rank||4===r.rank,function(){return\"Error in resizeNearestNeighbor: x must be rank 3 or 4, but got rank \"+r.rank+\".\"}),d(2===e.length,function(){return\"Error in resizeNearestNeighbor: new shape must 2D, but got shape \"+e+\".\"}),d(\"float32\"===r.dtype||\"int32\"===r.dtype,function(){return\"`images` must have `int32` or `float32` as dtype\"});var o=r,a=!1;3===r.rank&&(a=!0,o=r.as4D(1,r.shape[0],r.shape[1],r.shape[2]));var i=e[0],s=e[1],u=At.runKernel(function(t,e){return e([o]),t.resizeNearestNeighbor(o,i,s,n)},{batchImages:o},function(t,e){return{batchImages:function(){return At.runKernel(function(r){return r.resizeNearestNeighborBackprop(t,e[0],n)},{})}}});return a?u.as3D(u.shape[1],u.shape[2],u.shape[3]):u}}),yc=ln({nonMaxSuppression_:function(t,e,n,r,o){void 0===r&&(r=.5),void 0===o&&(o=Number.NEGATIVE_INFINITY);var a=Ye(t,\"boxes\",\"nonMaxSuppression\"),i=Ye(e,\"scores\",\"nonMaxSuppression\"),s=vc(a,i,n,r,o);return n=s.maxOutputSize,r=s.iouThreshold,o=s.scoreThreshold,At.runKernel(function(t){return t.nonMaxSuppression(a,i,n,r,o)},{$boxes:a})}}),xc=function(t,e,n,a,i){return void 0===a&&(a=.5),void 0===i&&(i=Number.NEGATIVE_INFINITY),r(this,void 0,void 0,function(){var r,s,u,l,c,h;return o(this,function(o){switch(o.label){case 0:return r=Ye(t,\"boxes\",\"nonMaxSuppressionAsync\"),s=Ye(e,\"scores\",\"nonMaxSuppressionAsync\"),u=vc(r,s,n,a,i),n=u.maxOutputSize,a=u.iouThreshold,i=u.scoreThreshold,[4,r.data()];case 1:return l=o.sent(),[4,s.data()];case 2:return c=o.sent(),h=po(l,c,n,a,i),r!==t&&r.dispose(),s!==e&&s.dispose(),[2,h]}})})},bc=ln({cropAndResize_:function(t,e,n,r,o,a){var i=Ye(t,\"image\",\"cropAndResize\",\"float32\"),s=Ye(e,\"boxes\",\"cropAndResize\",\"float32\"),u=Ye(n,\"boxInd\",\"cropAndResize\",\"int32\");o=o||\"bilinear\",a=a||0;var l=s.shape[0];return d(4===i.rank,function(){return\"Error in cropAndResize: image must be rank 4,but got rank \"+i.rank+\".\"}),d(2===s.rank&&4===s.shape[1],function(){return\"Error in cropAndResize: boxes must be have size [\"+l+\",4] but had shape \"+s.shape+\".\"}),d(1===u.rank&&u.shape[0]===l,function(){return\"Error in cropAndResize: boxInd must be have size [\"+l+\"] but had shape \"+s.shape+\".\"}),d(2===r.length,function(){return\"Error in cropAndResize: cropSize must be of length 2, but got length \"+r.length+\".\"}),d(r[0]>=1&&r[1]>=1,function(){return\"cropSize must be atleast [1,1], but was \"+r}),d(\"bilinear\"===o||\"nearest\"===o,function(){return\"method must be bilinear or nearest, but was \"+o}),At.runKernel(function(t,e){return t.cropAndResize(i,s,u,r,o,a)},{$image:i,$boxes:s})}}),wc=Object.freeze({resizeBilinear:mc,resizeNearestNeighbor:gc,nonMaxSuppression:yc,nonMaxSuppressionAsync:xc,cropAndResize:bc});var Cc=ln({matMul_:function(t,e,n,r,o,a){var i;void 0===n&&(n=!1),void 0===r&&(r=!1),void 0===a&&(a=\"linear\");var s=Ye(t,\"a\",\"fused matMul\"),u=Ye(e,\"b\",\"fused matMul\");i=Ct(s,u),s=i[0],u=i[1];var l=n?s.shape[s.rank-2]:s.shape[s.rank-1],c=r?u.shape[u.rank-1]:u.shape[u.rank-2],h=n?s.shape[s.rank-1]:s.shape[s.rank-2],p=r?u.shape[u.rank-2]:u.shape[u.rank-1],f=s.shape.slice(0,-2),v=u.shape.slice(0,-2),m=y(f),g=y(v);d(s.rank>=2&&u.rank>=2&&s.rank===u.rank,function(){return\"Error in fused matMul: inputs must have the same rank of at least 2, got ranks \"+s.rank+\" and \"+u.rank+\".\"}),d(x(f,v),function(){return\"Error in fused matMul: outer dimensions (\"+f+\") and (\"+v+\") of Tensors with shapes \"+s.shape+\" and \"+u.shape+\" must match.\"}),d(l===c,function(){return\"Error in fused matMul: inner shapes (\"+l+\") and (\"+c+\") of Tensors with shapes \"+s.shape+\" and \"+u.shape+\" and transposeA=\"+n+\" and transposeB=\"+r+\" must match.\"});var b,w=s.shape.slice(0,-2).concat([h,p]),C=n?s.as3D(m,l,h):s.as3D(m,h,l),E=r?u.as3D(g,p,c):u.as3D(g,c,p);null!=o&&jr(w,(b=Ct(b=Ye(o,\"bias\",\"fused matMul\"),s)[0]).shape);var R={$a:C,$b:E};return null!=o&&(R.$bias=b),At.runKernel(function(t,e){var o=t.fusedBatchMatMul(C,E,n,r,b,a);return e([C,E,o]),o},R,function(t,e){var i,s=e[0],u=e[1],l=e[2];if(null==a||\"linear\"===a)i=t;else{if(\"relu\"!==a)throw new Error(\"Gradient for activation \"+a+\" has not been implemented yet.\");i=t.mul(l.step())}var c={};return null!=o&&(c={$bias:function(){var t=i,e=$r(b.shape,i.shape);return e.length>0&&(t=t.sum(e)),t.reshape(b.shape)}}),n||r?!n&&r?Object.assign({$a:function(){return i.matMul(u,!1,!1)},$b:function(){return i.matMul(s,!0,!1)}},c):n&&!r?Object.assign({$a:function(){return u.matMul(i,!1,!0)},$b:function(){return s.matMul(i,!1,!1)}},c):Object.assign({$a:function(){return u.matMul(i,!0,!0)},$b:function(){return i.matMul(s,!0,!0)}},c):Object.assign({$a:function(){return i.matMul(u,!1,!0)},$b:function(){return s.matMul(i,!0,!1)}},c)}).reshape(w)}}),Ec=Object.freeze({matMul:Cc}),Rc=Object.freeze({image:wc,linalg:dc,losses:cc,spectral:Hl,fused:Ec,signal:tc,op:ln,batchNormalization2d:qs,batchNormalization3d:Hs,batchNormalization4d:$s,batchNormalization:js,batchNorm:Ks,batchNorm2d:Xs,batchNorm3d:Ys,batchNorm4d:Qs,complex:cn,real:hn,imag:pn,concat:An,concat1d:Tn,concat2d:Dn,concat3d:_n,concat4d:On,split:Fn,conv1d:eu,conv2d:nu,conv3d:ru,conv2dDerFilter:ou,depthwiseConv2d:au,separableConv2d:iu,conv2dTranspose:su,matMul:uu,dot:lu,outerProduct:cu,reverse:hu,reverse1d:pu,reverse2d:fu,reverse3d:du,reverse4d:vu,maxPool:yu,avgPool:xu,pool:bu,slice:wu,slice1d:Cu,slice2d:Eu,slice3d:Ru,slice4d:Iu,abs:rs,acos:os,acosh:as,asin:is,asinh:ss,atan:us,atanh:ls,ceil:cs,clipByValue:hs,cos:ps,cosh:fs,erf:ds,exp:vs,expm1:ms,floor:gs,log:ys,log1p:xs,logSigmoid:bs,neg:ws,reciprocal:Cs,round:Es,rsqrt:Rs,sigmoid:Is,sign:Ss,isNaN:Ns,isInf:ks,isFinite:As,sin:Ts,sinh:Ds,softplus:_s,sqrt:Os,square:Fs,step:Ms,tan:Bs,tanh:Ps,all:Nu,any:ku,argMax:Au,argMin:Tu,logSumExp:Du,max:_u,mean:Ou,min:Fu,moments:Mu,sum:Bu,prod:Pu,equal:Lu,equalStrict:Wu,greater:Uu,greaterEqual:zu,greaterEqualStrict:Vu,greaterStrict:Gu,less:qu,lessEqual:Hu,lessEqualStrict:$u,lessStrict:ju,notEqual:Ku,notEqualStrict:Xu,add:Yu,addN:Qu,addStrict:Ju,atan2:Zu,div:tl,divStrict:el,floorDiv:nl,maximum:rl,maximumStrict:ol,minimum:al,minimumStrict:il,mod:sl,modStrict:ul,mul:ll,mulStrict:cl,pow:hl,powStrict:pl,squaredDifference:fl,squaredDifferenceStrict:dl,sub:vl,subStrict:ml,elu:El,leakyRelu:Rl,prelu:Il,relu:Sl,selu:Nl,logicalAnd:gl,logicalNot:yl,logicalOr:xl,logicalXor:bl,where:wl,whereAsync:Cl,buffer:$n,print:jn,batchToSpaceND:Kn,cast:Xn,clone:Yn,cumsum:Qn,depthToSpace:Jn,expandDims:Zn,eye:tr,multinomial:er,oneHot:nr,pad:rr,pad1d:or,pad2d:ar,pad3d:ir,pad4d:sr,rand:ur,randomNormal:lr,randomUniform:cr,reshape:hr,spaceToBatchND:pr,squeeze:fr,stack:dr,tile:vr,truncatedNormal:mr,unstack:gr,setdiff1dAsync:yr,fill:Rn,linspace:In,ones:Cn,range:Sn,scalar:vn,tensor:fn,tensor1d:mn,tensor2d:gn,tensor3d:yn,tensor4d:xn,tensor5d:bn,tensor6d:wn,zeros:En,onesLike:Nn,zerosLike:kn,transpose:kl,softmax:zr,logSoftmax:Vr,localResponseNormalization:Al,norm:Tl,gather:Ol,unsortedSegmentSum:Fl,basicLSTMCell:Ml,multiRNNCell:Bl,movingAverage:Pl,stridedSlice:Ll,topk:Wl,scatterND:Ul,fft:zl,ifft:Vl,rfft:Gl,irfft:ql,sparseToDense:$l,gatherND:jl,dropout:Kl,hannWindow:Ql,hammingWindow:Jl,frame:Zl});var Ic=function(){function t(){if(this.blockSize=48,this.firstUse=!0,s.get(\"IS_BROWSER\")){var t=function(){if(\"undefined\"!=typeof OffscreenCanvas)return new OffscreenCanvas(300,150);if(\"undefined\"!=typeof document)return document.createElement(\"canvas\");throw new Error(\"Cannot create a canvas in this context\")}();this.fromPixels2DContext=t.getContext(\"2d\")}this.data=new Gr(this,At)}return t.prototype.register=function(t,e,n){if(this.firstUse&&(this.firstUse=!1,s.get(\"IS_NODE\")&&je(\"\\n============================\\nHi there 👋. Looks like you are running TensorFlow.js in Node.js. To speed things up dramatically, install our node backend, which binds to TensorFlow C++, by running npm i @tensorflow/tfjs-node, or npm i @tensorflow/tfjs-node-gpu if you have CUDA. Then call require('@tensorflow/tfjs-node'); (-gpu suffix for CUDA) at the start of your program. Visit https://github.com/tensorflow/tfjs-node for more details.\\n============================\\n\")),this.data.has(t))throw new Error(\"Data buffer is already registered\");this.data.set(t,{dtype:n})},t.prototype.write=function(t,e){if(null==e)throw new Error(\"MathBackendCPU.write(): values can not be null\");this.data.get(t).values=e},t.prototype.fromPixels=function(t,e){if(null==t)throw new Error(\"pixels passed to tf.browser.fromPixels() can not be null\");var n,r;if(s.get(\"IS_NODE\")&&null==t.getContext)throw new Error(\"When running in node, pixels must be an HTMLCanvasElement like the one returned by the `canvas` npm package\");if(null!=t.getContext)n=t.getContext(\"2d\").getImageData(0,0,t.width,t.height).data;else if(t instanceof ImageData||t.data instanceof Uint8Array)n=t.data;else{if(!(t instanceof HTMLImageElement||t instanceof HTMLVideoElement))throw new Error(\"pixels passed to tf.browser.fromPixels() must be either an HTMLVideoElement, HTMLImageElement, HTMLCanvasElement, ImageData or {data: Uint32Array, width: number, height: number}, but was \"+t.constructor.name);if(null==this.fromPixels2DContext)throw new Error(\"Can't read pixels from HTMLImageElement outside the browser.\");this.fromPixels2DContext.canvas.width=t.width,this.fromPixels2DContext.canvas.height=t.height,this.fromPixels2DContext.drawImage(t,0,0,t.width,t.height),n=this.fromPixels2DContext.getImageData(0,0,t.width,t.height).data}if(4===e)r=new Int32Array(n);else{var o=t.width*t.height;r=new Int32Array(o*e);for(var a=0;ap&&(p=v,f=d)}u[c]=f}return i},t.prototype.cumsum=function(t,e,n,r){if(this.assertNotComplex(t,\"cumsum\"),e!==t.rank-1)throw new Error(\"backend.cumsum in CPU expects an inner-most axis=\"+(t.rank-1)+\" but got axis=\"+e);for(var o=bt(t.dtype,\"int32\"),a=En(t.shape,o),i=this.readSync(a.dataId),s=this.readSync(t.dataId),u=t.shape[t.rank-1],l=r?function(t,e){return t+u-e-1}:function(t,e){return t+e},c=0;ce?1:0})},t.prototype.greaterEqual=function(t,e){return this.assertNotComplex([t,e],\"greaterEqual\"),this.broadcastedBinaryOp(t,e,\"bool\",function(t,e){return t>=e?1:0})},t.prototype.logicalNot=function(t){this.assertNotComplex(t,\"logicalNot\");for(var e=this.readSync(t.dataId),n=new Uint8Array(e.length),r=0;r1||1===e.rank?1:e.shape[1],c=0;c=0&&e>=0?n:(n+e)%e})},t.prototype.max=function(t,e){this.assertNotComplex(t,\"max\"),nn(\"max\",e,t.rank);for(var n=tn(t.shape,e),r=n[0],o=n[1],a=En(r,t.dtype),i=y(o),s=this.readSync(a.dataId),u=this.readSync(t.dataId),l=0;lh&&(h=f)}s[l]=h}return a},t.prototype.maximum=function(t,e){return this.assertNotComplex([t,e],\"maximum\"),this.broadcastedBinaryOp(t,e,t.dtype,function(t,e){return Math.max(t,e)})},t.prototype.all=function(t,e){this.assertNotComplex(t,\"all\"),nn(\"all\",e,t.rank);for(var n=tn(t.shape,e),r=n[0],o=n[1],a=En(r,t.dtype),i=y(o),s=this.readSync(a.dataId),u=this.readSync(t.dataId),l=0;l0?n[r]=1:n[r]=0;return ht.make(t.shape,{values:n})},t.prototype.isNaN=function(t){this.assertNotComplex(t,\"x\");for(var e=this.readSync(t.dataId),n=new Uint8Array(e.length),r=0;r.5?n[r]=Math.ceil(e[r]):n[r]=o%2==0?o:o+1}return ht.make(t.shape,{values:n})},t.prototype.exp=function(t){this.assertNotComplex(t,\"exp\");for(var e=this.readSync(t.dataId),n=new Float32Array(e.length),r=0;r=0?o:Math.exp(o)-1}return ht.make(t.shape,{values:e})},t.prototype.eluDer=function(t,e){this.assertNotComplex([t,e],\"eluDer\");for(var n=new Float32Array(e.size),r=this.readSync(e.dataId),o=this.readSync(t.dataId),a=0;a=1?o[a]:o[a]*(i+1)}return ht.make(e.shape,{values:n})},t.prototype.selu=function(t){this.assertNotComplex(t,\"selu\");for(var e=Pi,n=Li,r=new Float32Array(t.size),o=this.readSync(t.dataId),a=0;a=0?n*i:e*(Math.exp(i)-1)}return ht.make(t.shape,{values:r})},t.prototype.clip=function(t,e,n){this.assertNotComplex(t,\"clip\");for(var r=new Float32Array(t.size),o=this.readSync(t.dataId),a=0;an?n:i-e,i=r[o]0?1:e}return ht.make(t.shape,{values:n})},t.prototype.conv2d=function(t,e,n){this.assertNotComplex([t,e],\"conv2d\");for(var r=n.filterHeight,o=n.filterWidth,a=n.dilationHeight,i=n.dilationWidth,s=n.padInfo.left,u=n.padInfo.top,l=$n(n.outShape,t.dtype),c=this.readSync(t.dataId),h=this.readSync(e.dataId),p=l.values,f=0;f=n.inHeight))for(var w=x*e.strides[0],C=d+b*t.strides[1],E=0;E=n.inWidth))for(var k=w+S*e.strides[1],A=C+N*n.inChannels,T=k,D=0;D=n.inDepth))for(var R=C*e.strides[0],I=g+E*t.strides[1],S=0;S=n.inHeight))for(var D=R+A*e.strides[1],_=I+T*t.strides[2],O=0;O=n.inWidth))for(var L=D+B*e.strides[2],W=_+P*n.inChannels,U=L,z=0;z=n.inHeight))for(var C=b*e.strides[0],E=v+w*t.strides[1],R=0;R=n.inWidth))for(var A=C+N*e.strides[1],T=E+k*n.inChannels,D=I,_=A,O=0;OD?D=P:\"avg\"===n&&(_+=P,O++)}if(isNaN(D))break}d[S+N*g+w]=\"avg\"===n?_/O:D}return f.toTensor()},t.prototype.maxPool=function(t,e){return this.pool(t,e,\"max\")},t.prototype.maxPoolPositions=function(t,e){for(var n=$n(e.outShape,\"int32\"),r=e.strideHeight,o=e.strideWidth,a=e.dilationHeight,i=e.dilationWidth,s=e.effectiveFilterHeight,u=e.effectiveFilterWidth,l=e.padInfo.top,c=e.padInfo.left,h=this.bufferSync(t),p=0;pC&&(C=k,E=I*u+N)}n.set(E,p,d,y,f)}}return n.toTensor()},t.prototype.maxPoolBackprop=function(t,e,n,r){this.assertNotComplex([e,n],\"maxPoolBackprop\");for(var o=this.maxPoolPositions(e,r),a=r.strideHeight,i=r.strideWidth,s=r.dilationHeight,u=r.dilationWidth,l=r.effectiveFilterHeight,c=r.effectiveFilterWidth,h=c-1-r.padInfo.left,p=l-1-r.padInfo.top,f=$n(e.shape,\"float32\"),d=this.bufferSync(o),v=this.bufferSync(t),m=0;m=r.outHeight||Math.floor(R)!==R))for(var I=0;I=r.outWidth||Math.floor(S)!==S)){var N=l*c-1-d.get(m,R,S,g)===E*c+I?1:0;if(0!==N)C+=v.get(m,R,S,g)*N}}}f.set(C,m,y,x,g)}return f.toTensor()},t.prototype.avgPoolBackprop=function(t,e,n){this.assertNotComplex([t,e],\"avgPoolBackprop\");for(var r=n.strideHeight,o=n.strideWidth,a=n.filterHeight,i=n.filterWidth,s=n.dilationHeight,u=n.dilationWidth,l=n.effectiveFilterHeight,c=n.effectiveFilterWidth,h=c-1-n.padInfo.left,p=l-1-n.padInfo.top,f=$n(e.shape,\"float32\"),d=1/(a*i),v=this.bufferSync(t),m=0;m=n.outHeight||Math.floor(R)!==R))for(var I=0;I=n.outWidth||Math.floor(S)!==S))C+=v.get(m,R,S,g)}}f.set(C*d,m,y,x,g)}return f.toTensor()},t.prototype.cast=function(t,e){return oo(t,e,this)},t.prototype.reshape=function(t,e){return ao(t,e)},t.prototype.avgPool=function(t,e){return this.assertNotComplex(t,\"avgPool\"),this.pool(t,e,\"avg\").toFloat()},t.prototype.resizeBilinear=function(t,e,n,r){this.assertNotComplex(t,\"resizeBilinear\");for(var o=t.shape,a=o[0],i=o[1],s=o[2],u=o[3],l=this.readSync(t.dataId),c=new Float32Array(y([a,e,n,u])),h=[r&&e>1?i-1:i,r&&n>1?s-1:s],p=[r&&e>1?e-1:e,r&&n>1?n-1:n],f=0,d=h[0]/p[0],v=h[1]/p[1],m=0;m1?a-1:a,n&&c>1?i-1:i],f=[n&&l>1?l-1:l,n&&c>1?c-1:c],d=p[0]/f[0],v=p[1]/f[1],m=this.readSync(t.dataId),g=0,y=0;y1?i-1:i,r&&n>1?s-1:s],p=[r&&e>1?e-1:e,r&&n>1?n-1:n],f=h[0]/p[0],d=h[1]/p[1],v=0,m=0;m1?a-1:a,n&&c>1?i-1:i],d=[n&&l>1?l-1:l,n&&c>1?c-1:c],v=f[0]/d[0],m=f[1]/d[1],g=1/v,y=1/m,x=2*Math.ceil(g)+2,b=2*Math.ceil(y)+2,w=0;w=l)){var M=C+F*t.strides[1],B=F*v;if(E===Math.min(a-1,n?Math.round(B):Math.floor(B)))for(var P=0;P=c)){var W=M+L*t.strides[2],U=L*m;N===Math.min(i-1,n?Math.round(U):Math.floor(U))&&(_+=p[W+D])}}}}h[k+D]=_}return xn(h,e.shape,e.dtype)},t.prototype.batchNormalization=function(t,e,n,r,o,a){this.assertNotComplex([t,e,n,o,a],\"batchNorm\");for(var i=this.readSync(t.dataId),s=this.readSync(e.dataId),u=this.readSync(n.dataId),l=o?this.readSync(o.dataId):new Float32Array([1]),c=a?this.readSync(a.dataId):new Float32Array([0]),h=new Float32Array(i.length),p=c.length,f=l.length,d=u.length,v=s.length,m=0,g=0,y=0,x=0,b=0;b=p&&(m=0),g>=v&&(g=0),y>=f&&(y=0),x>=d&&(x=0);return xn(h,t.shape)},t.prototype.localResponseNormalization4D=function(t,e,n,r,o){this.assertNotComplex(t,\"localResponseNormalization4D\");var a=t.shape[3],i=a-1,s=this.readSync(t.dataId),u=t.size,l=new Float32Array(u);function c(t){for(var n=t%a,r=t-n+Math.max(0,n-e),o=t-n+Math.min(n+e,i),u=0;r<=o;r++){var l=s[r];u+=l*l}return u}for(var h=0;h=0&&a[i]1,function(){return\"blockSize should be > 1 for depthToSpace, but was: \"+e});for(var r=t.shape[0],o=t.shape[1],a=t.shape[2],i=t.shape[3],s=o*e,u=a*e,l=i/(e*e),c=this.readSync(t.dataId),h=new Float32Array(r*s*u*l),p=0,f=0;f=s))for(var N=p>1?(R-C)*(u-1)/(p-1):0,k=f>1?(I-E)*(l-1)/(f-1):0,A=0;A1?C*(u-1)+A*N:.5*(C+R)*(u-1);if(T<0||T>u-1)for(var D=0;D1?E*(l-1)+D*k:.5*(E+I)*(l-1))<0||H>l-1)for(_=0;_1?E*(l-1)+D*k:.5*(E+I)*(l-1))<0||H>l-1)for(_=0;_=t.size/s)throw new Error(\"Invalid indices: \"+f+\" does not index into \"+t.shape);for(var g=0;g=r/o)throw new Error(\"Invalid indices: \"+v+\" does not index into \"+n);for(var x=0;x0,function(){return\"scheme must not be an empty string.\"});var r=t.getInstance();d(null==r.managers[e],function(){return\"A model store manager is already registered for scheme '\"+e+\"'.\"}),r.managers[e]=n},t.getManager=function(t){var e=this.getInstance().managers[t];if(null==e)throw new Error(\"Cannot find model manager for scheme '\"+t+\"'\");return e},t.getSchemes=function(){return Object.keys(this.getInstance().managers)},t}();function Vc(t){if(-1===t.indexOf(Uc))throw new Error(\"The url string provided does not contain a scheme. Supported schemes are: \"+zc.getSchemes().join(\",\"));return{scheme:t.split(Uc)[0],path:t.split(Uc)[1]}}function Gc(t,e,n){return void 0===n&&(n=!1),r(this,void 0,void 0,function(){var r,a,i,s,u,l,c,h,p;return o(this,function(o){switch(o.label){case 0:return d(t!==e,function(){return\"Old path and new path are the same: '\"+t+\"'\"}),d((r=Wc.getLoadHandlers(t)).length>0,function(){return\"Copying failed because no load handler is found for source URL \"+t+\".\"}),d(r.length<2,function(){return\"Copying failed because more than one (\"+r.length+\") load handlers for source URL \"+t+\".\"}),a=r[0],d((i=Wc.getSaveHandlers(e)).length>0,function(){return\"Copying failed because no save handler is found for destination URL \"+e+\".\"}),d(i.length<2,function(){return\"Copying failed because more than one (\"+r.length+\") save handlers for destination URL \"+e+\".\"}),s=i[0],u=Vc(t).scheme,l=Vc(t).path,c=u===Vc(t).scheme,[4,a.load()];case 1:return h=o.sent(),n&&c?[4,zc.getManager(u).removeModel(l)]:[3,3];case 2:o.sent(),o.label=3;case 3:return[4,s.save(h)];case 4:return p=o.sent(),!n||c?[3,6]:[4,zc.getManager(u).removeModel(l)];case 5:o.sent(),o.label=6;case 6:return[2,p.modelArtifactsInfo]}})})}var qc=\"models_store\",Hc=\"model_info_store\";function $c(){if(!s.getBool(\"IS_BROWSER\"))throw new Error(\"Failed to obtain IndexedDB factory because the current environmentis not a web browser.\");var t=window,e=t.indexedDB||t.mozIndexedDB||t.webkitIndexedDB||t.msIndexedDB||t.shimIndexedDB;if(null==e)throw new Error(\"The current browser does not appear to support IndexedDB.\");return e}function jc(t){var e=t.result;e.createObjectStore(qc,{keyPath:\"modelPath\"}),e.createObjectStore(Hc,{keyPath:\"modelPath\"})}var Kc=function(){function t(t){if(this.indexedDB=$c(),null==t||!t)throw new Error(\"For IndexedDB, modelPath must not be null, undefined or empty.\");this.modelPath=t}return t.prototype.save=function(t){return r(this,void 0,void 0,function(){return o(this,function(e){if(t.modelTopology instanceof ArrayBuffer)throw new Error(\"BrowserLocalStorage.save() does not support saving model topology in binary formats yet.\");return[2,this.databaseAction(this.modelPath,t)]})})},t.prototype.load=function(){return r(this,void 0,void 0,function(){return o(this,function(t){return[2,this.databaseAction(this.modelPath)]})})},t.prototype.databaseAction=function(t,e){var n=this;return new Promise(function(t,r){var o=n.indexedDB.open(\"tensorflowjs\",1);o.onupgradeneeded=function(){return jc(o)},o.onsuccess=function(){var a=o.result;if(null==e){var i=a.transaction(qc,\"readonly\"),s=i.objectStore(qc).get(n.modelPath);s.onsuccess=function(){if(null==s.result)return a.close(),r(new Error(\"Cannot find model with path '\"+n.modelPath+\"' in IndexedDB.\"));t(s.result.modelArtifacts)},s.onerror=function(t){return a.close(),r(s.error)},i.oncomplete=function(){return a.close()}}else{var u,l=Lc(e),c=a.transaction(Hc,\"readwrite\"),h=c.objectStore(Hc),p=h.put({modelPath:n.modelPath,modelArtifactsInfo:l});p.onsuccess=function(){var o=(u=a.transaction(qc,\"readwrite\")).objectStore(qc).put({modelPath:n.modelPath,modelArtifacts:e,modelArtifactsInfo:l});o.onsuccess=function(){return t({modelArtifactsInfo:l})},o.onerror=function(t){var e=(h=c.objectStore(Hc)).delete(n.modelPath);e.onsuccess=function(){return a.close(),r(o.error)},e.onerror=function(t){return a.close(),r(o.error)}}},p.onerror=function(t){return a.close(),r(p.error)},c.oncomplete=function(){null==u?a.close():u.oncomplete=function(){return a.close()}}}},o.onerror=function(t){return r(o.error)}})},t.URL_SCHEME=\"indexeddb://\",t}(),Xc=function(t){return s.getBool(\"IS_BROWSER\")&&!Array.isArray(t)&&t.startsWith(Kc.URL_SCHEME)?(e=t.slice(Kc.URL_SCHEME.length),new Kc(e)):null;var e};Wc.registerSaveRouter(Xc),Wc.registerLoadRouter(Xc);var Yc=function(){function t(){this.indexedDB=$c()}return t.prototype.listModels=function(){return r(this,void 0,void 0,function(){var t=this;return o(this,function(e){return[2,new Promise(function(e,n){var r=t.indexedDB.open(\"tensorflowjs\",1);r.onupgradeneeded=function(){return jc(r)},r.onsuccess=function(){var t=r.result,o=t.transaction(Hc,\"readonly\"),a=o.objectStore(Hc).getAll();a.onsuccess=function(){for(var t={},n=0,r=a.result;n0,function(){return\"promises must be a none empty array\"})}(t),function(t,e){d(t>=0&&t<=1,function(){return\"Progress fraction must be in range [0, 1], but got startFraction \"+t}),d(e>=0&&e<=1,function(){return\"Progress fraction must be in range [0, 1], but got endFraction \"+e}),d(e>=t,function(){return\"startFraction must be no more than endFraction, but got startFraction \"+t+\" and endFraction \"+e})}(n=null==n?0:n,r=null==r?1:r);var o=0;return Promise.all(t.map(function(a){return a.then(function(a){var i=n+ ++o/t.length*(r-n);return e(i),a}),a}))}function mh(t,e){return r(this,void 0,void 0,function(){var n,r,a,i,s,u,l,c,h;return o(this,function(o){switch(o.label){case 0:return null==e&&(e={}),n=null==e.fetchFunc?Y:e.fetchFunc,r=t.map(function(t){return n(t,e.requestInit)}),a=0,i=.5,null!=e.onProgress?[3,2]:[4,Promise.all(r)];case 1:return s=o.sent(),[3,4];case 2:return[4,vh(r,e.onProgress,a,i)];case 3:s=o.sent(),o.label=4;case 4:return u=s.map(function(t){return t.arrayBuffer()}),l=.5,c=1,null!=e.onProgress?[3,6]:[4,Promise.all(u)];case 5:return h=o.sent(),[3,8];case 6:return[4,vh(u,e.onProgress,l,c)];case 7:h=o.sent(),o.label=8;case 8:return[2,h]}})})}function gh(t){var e=this;return function(n,a,i){return void 0===a&&(a=\"\"),r(e,void 0,void 0,function(){var e,r,s,u,l,c,h,p,f,d;return o(this,function(o){switch(o.label){case 0:if(e=n.map(function(){return!1}),r={},s=null!=i?i.map(function(){return!1}):[],u=[],n.forEach(function(t,n){var o=0;t.weights.forEach(function(t){var a=\"quantization\"in t?t.quantization.dtype:t.dtype,l=Tc[a]*y(t.shape),c=function(){e[n]=!0,null==r[n]&&(r[n]=[]),r[n].push({manifestEntry:t,groupOffset:o,sizeBytes:l})};null!=i?i.forEach(function(e,n){e===t.name&&(c(),s[n]=!0)}):c(),u.push(t.name),o+=l})}),!s.every(function(t){return t}))throw l=i.filter(function(t,e){return!s[e]}),new Error(\"Could not find weights in manifest with names: \"+l.join(\", \")+\". \\nManifest JSON has weights with names: \"+u.join(\", \")+\".\");return c=e.reduce(function(t,e,n){return e&&t.push(n),t},[]),h=[],c.forEach(function(t){n[t].paths.forEach(function(t){var e=a+(a.endsWith(\"/\")?\"\":\"/\")+t;h.push(e)})}),[4,t(h)];case 1:return p=o.sent(),f={},d=0,c.forEach(function(t){for(var e=n[t].paths.length,o=0,a=0;a0,function(){return\"URL path for http must not be null, undefined or empty.\"}),Array.isArray(t)&&d(2===t.length,function(){return\"URL paths for http must have a length of 2, (actual length is \"+t.length+\").\"}),this.path=t,null!=e.requestInit&&null!=e.requestInit.body)throw new Error(\"requestInit is expected to have no pre-existing body, but has one.\");this.requestInit=e.requestInit||{}}return t.prototype.save=function(t){return r(this,void 0,void 0,function(){var e,n,r,a;return o(this,function(o){switch(o.label){case 0:if(t.modelTopology instanceof ArrayBuffer)throw new Error(\"BrowserHTTPRequest.save() does not support saving model topology in binary formats yet.\");return(e=Object.assign({method:this.DEFAULT_METHOD},this.requestInit)).body=new FormData,n=[{paths:[\"./model.weights.bin\"],weights:t.weightSpecs}],r={modelTopology:t.modelTopology,format:t.format,generatedBy:t.generatedBy,convertedBy:t.convertedBy,weightsManifest:n},e.body.append(\"model.json\",new Blob([JSON.stringify(r)],{type:\"application/json\"}),\"model.json\"),null!=t.weightData&&e.body.append(\"model.weights.bin\",new Blob([t.weightData],{type:\"application/octet-stream\"}),\"model.weights.bin\"),[4,this.fetch(this.path,e)];case 1:if((a=o.sent()).ok)return[2,{modelArtifactsInfo:Lc(t),responses:[a]}];throw new Error(\"BrowserHTTPRequest.save() failed due to HTTP response status \"+a.status+\".\")}})})},t.prototype.load=function(){return r(this,void 0,void 0,function(){var t,e,n,r,a,i,s,u;return o(this,function(o){switch(o.label){case 0:return[4,this.fetch(this.path,this.requestInit)];case 1:if(!(t=o.sent()).ok)throw new Error(\"Request to \"+this.path+\" failed with status code \"+t.status+\". Please verify this URL points to the model JSON of the model to load.\");o.label=2;case 2:return o.trys.push([2,4,,5]),[4,t.json()];case 3:return e=o.sent(),[3,5];case 4:throw o.sent(),n=\"Failed to parse model JSON of response from \"+this.path+\".\",this.path.endsWith(\".pb\")?n+=\" Your path contains a .pb file extension. Support for .pb models have been removed in TensorFlow.js 1.0 in favor of .json models. You can re-convert your Python TensorFlow model using the TensorFlow.js 1.0 conversion scripts or you can convert your.pb models with the 'pb2json'NPM script in the tensorflow/tfjs-converter repository.\":n+=\" Please make sure the server is serving valid JSON for this request.\",new Error(n);case 5:if(r=e.modelTopology,a=e.weightsManifest,null==r&&null==a)throw new Error(\"The JSON from HTTP path \"+this.path+\" contains neither model topology or manifest for weights.\");return null==a?[3,7]:[4,this.loadWeights(a)];case 6:u=o.sent(),i=u[0],s=u[1],o.label=7;case 7:return[2,{modelTopology:r,weightSpecs:i,weightData:s}]}})})},t.prototype.loadWeights=function(t){return r(this,void 0,void 0,function(){var e,n,r,a,i,s,u,l,c,h,p;return o(this,function(o){switch(o.label){case 0:for(e=Array.isArray(this.path)?this.path[1]:this.path,n=function(t){var e=t.lastIndexOf(\"/\"),n=t.lastIndexOf(\"?\"),r=t.substring(0,e),o=n>e?t.substring(n):\"\";return[r+\"/\",o]}(e),r=n[0],a=n[1],i=this.weightPathPrefix||r,s=[],u=0,l=t;u0&&(t=n({weightSpecs:this.weightSpecs},t)),null!=this.weightData&&this.weightData.byteLength>0&&(t=n({weightData:this.weightData},t)),null!=this.trainingConfig&&(t=n({trainingConfig:this.trainingConfig},t)),[2,t]})})},t}(),Eh=function(){function t(t){this.saveHandler=t}return t.prototype.save=function(t){return r(this,void 0,void 0,function(){return o(this,function(e){return[2,this.saveHandler(t)]})})},t}();var Rh=Object.freeze({browserFiles:function(t){return new dh(t)},browserHTTPRequest:function(t,e){return wh(t,e)},concatenateArrayBuffers:Bc,decodeWeights:_c,encodeWeights:function(t,e){return r(this,void 0,void 0,function(){var n,a,i,u,l,c=this;return o(this,function(h){switch(h.label){case 0:for(n=[],a=[],i=Array.isArray(t)?t.map(function(t){return t.name}):Object.keys(t),u=function(u){var l=i[u],h=Array.isArray(t)?t[u].tensor:t[l];if(\"float32\"!==h.dtype&&\"int32\"!==h.dtype&&\"bool\"!==h.dtype&&\"string\"!==h.dtype)throw new Error(\"Unsupported dtype in weight '\"+l+\"': \"+h.dtype);var p={name:l,shape:h.shape,dtype:h.dtype};if(\"string\"===h.dtype){var f=new Promise(function(t){return r(c,void 0,void 0,function(){var e,n,r;return o(this,function(o){switch(o.label){case 0:return e=p,[4,h.data()];case 1:return n=o.sent(),r=s.platform.encodeUTF8(n.join(Dc)),e.byteLength=r.length,e.delimiter=Dc,t(r),[2]}})})});a.push(f)}else a.push(h.data());null!=e&&(p.group=e),n.push(p)},l=0;l0&&Number.isInteger(n),function(){return\"If provided, numClasses must be a positive integer, but got \"+n}),d(1===r.rank,function(){return\"Expected the rank of labels to be 1, but got \"+r.rank}),d(1===o.rank,function(){return\"Expected the rank of predictions to be 1, but got \"+o.rank}),d(r.shape[0]===o.shape[0],function(){return\"Mismatch in the number of examples: \"+r.shape[0]+\" vs. \"+o.shape[0]+\". Labels and predictions should have the same number of elements.\"}),d(n>0&&Number.isInteger(n),function(){return\"numClasses is required to be a positive integer, but got \"+n});var a=nr(r.asType(\"int32\"),n),i=nr(o.asType(\"int32\"),n);return a.transpose().matMul(i).asType(\"int32\")}}),Sh=Object.freeze({confusionMatrix:Ih});var Nh=ln({fromPixels_:function(t,e){if(void 0===e&&(e=3),e>4)throw new Error(\"Cannot construct Tensor with more than 4 channels from pixels.\");return At.fromPixels(t,e)}}),kh=Object.freeze({toPixels:function(t,e){return r(this,void 0,void 0,function(){var n,r,a,i,s,u,l,c,h,p,f,d,v,m,g,y,x,b,w,C,E,R,I;return o(this,function(o){switch(o.label){case 0:if(n=Ye(t,\"img\",\"toPixels\"),t instanceof ht||(n=n.toInt()),2!==n.rank&&3!==n.rank)throw new Error(\"toPixels only supports rank 2 or 3 tensors, got rank \"+n.rank+\".\");if(r=n.shape.slice(0,2),a=r[0],i=r[1],(s=2===n.rank?1:n.shape[2])>4||2===s)throw new Error(\"toPixels only supports depth of size 1, 3 or 4 but got \"+s);return[4,n.data()];case 1:return u=o.sent(),l=n.min(),c=n.max(),[4,Promise.all([l.data(),c.data()])];case 2:if(h=o.sent(),p=h[0],f=h[1],d=p[0],v=f[0],l.dispose(),c.dispose(),\"float32\"===n.dtype){if(d<0||v>1)throw new Error(\"Tensor values for a float32 Tensor must be in the range [0 - 1] but got range [\"+d+\" - \"+v+\"].\")}else{if(\"int32\"!==n.dtype)throw new Error(\"Unsupported type for toPixels: \"+n.dtype+\". Please use float32 or int32 tensors.\");if(d<0||v>255)throw new Error(\"Tensor values for a int32 Tensor must be in the range [0 - 255] but got range [\"+d+\" - \"+v+\"].\")}for(m=\"float32\"===n.dtype?255:1,g=new Uint8ClampedArray(i*a*4),y=0;y0,function(){return\"Class being registered has an empty-string as its className, which is disallowed.\"}),Th.register(t)}var _h=Object.freeze({Serializable:Ah,SerializationMap:Th,registerClass:Dh}),Oh=.001,Fh=.1;function Mh(){return 32===At.backend.floatPrecision()?Oh:Fh}function Bh(t,e,n){var r=!0;if((F(t)||F(e))&&(r=!1),F(t)&&F(e)&&(r=!0),r){var o=t.constructor.name,a=e.constructor.name;if(o!==a)throw new Error(\"Arrays are of different type. Actual: \"+o+\". Expected: \"+a)}if(Array.isArray(t)&&Array.isArray(e)){var i=Ke(t),s=Ke(e);if(!x(i,s))throw new Error(\"Arrays have different shapes. Actual: [\"+i+\"]. Expected: [\"+s+\"]\")}var u=F(t)?t:g(t),l=F(e)?e:g(e);if(u.length!==l.length)throw new Error(\"Arrays have different lengths actual: \"+u.length+\" vs expected: \"+l.length+\".\\nActual: \"+u+\".\\nExpected: \"+l+\".\");for(var c=0;cn)}var Lh=Object.freeze({TEST_EPSILON_FLOAT16:Fh,expectArraysClose:function(t,e,n){return null==n&&(n=Mh()),Bh(t,e,function(t,e){return Ph(t,e,n)})},testEpsilon:Mh,expectPromiseToFail:function(t,e){t().then(function(){return e.fail()},function(){return e()})},expectArraysEqual:function(t,e){var n=\"string\"==typeof e||\"number\"==typeof e||\"boolean\"==typeof e?[e]:e;return P(t)||P(t[0])||P(e)||P(e[0])?Bh(t,n,function(t,e){return t==e}):Bh(t,e,function(t,e){return Ph(t,e,0)})},expectNumbersClose:function(t,e,n){if(null==n&&(n=Mh()),!Ph(t,e,n))throw new Error(\"Numbers differ: actual === \"+t+\", expected === \"+e)},expectValuesInRange:function(t,e,n){for(var r=0;rn)throw new Error(\"Value out of range:\"+t[r]+\" low: \"+e+\", high: \"+n)},expectArrayBuffersEqual:function(t,e){expect(new Float32Array(t)).toEqual(new Float32Array(e))}}),Wh=\"1.2.2\",Uh=Object.freeze({gpgpu_util:ti,webgl_util:Se,MathBackendWebGL:ns,setWebGLContext:Ot,GPGPUContext:ei}),zh=function(t){function n(){return null!==t&&t.apply(this,arguments)||this}return e(n,t),n.prototype.minimize=function(t,e,n){void 0===e&&(e=!1);var r=this.computeGradients(t,n),o=r.value,a=r.grads;if(null!=n){var i=n.map(function(t){return{name:t.name,tensor:a[t.name]}});this.applyGradients(i)}else this.applyGradients(a);return Me(a),e?o:(o.dispose(),null)},Object.defineProperty(n.prototype,\"iterations\",{get:function(){return null==this.iterations_&&(this.iterations_=0),this.iterations_},enumerable:!0,configurable:!0}),n.prototype.incrementIterations=function(){this.iterations_=this.iterations+1},n.prototype.computeGradients=function(t,e){return Lr(t,e)},n.prototype.dispose=function(){null!=this.iterations_&&Me(this.iterations_)},n.prototype.saveIterations=function(){return r(this,void 0,void 0,function(){return o(this,function(t){return null==this.iterations_&&(this.iterations_=0),[2,{name:\"iter\",tensor:vn(this.iterations_,\"int32\")}]})})},n.prototype.getWeights=function(){return r(this,void 0,void 0,function(){return o(this,function(t){throw new Error(\"getWeights() is not implemented for this optimizer yet.\")})})},n.prototype.setWeights=function(t){return r(this,void 0,void 0,function(){return o(this,function(t){throw new Error(\"setWeights() is not implemented for this optimizer class \"+this.getClassName())})})},n.prototype.extractIterations=function(t){return r(this,void 0,void 0,function(){var e;return o(this,function(n){switch(n.label){case 0:return e=this,[4,t[0].tensor.data()];case 1:return e.iterations_=n.sent()[0],[2,t.slice(1)]}})})},n}(Ah);Object.defineProperty(zh,Symbol.hasInstance,{value:function(t){return null!=t.minimize&&null!=t.computeGradients&&null!=t.applyGradients}});var Vh=function(t){function n(e,n,r){void 0===r&&(r=null);var o=t.call(this)||this;return o.learningRate=e,o.rho=n,o.epsilon=r,o.accumulatedGrads=[],o.accumulatedUpdates=[],null==r&&(o.epsilon=At.backend.epsilon()),o}return e(n,t),n.prototype.applyGradients=function(t){var e=this;(Array.isArray(t)?t.map(function(t){return t.name}):Object.keys(t)).forEach(function(n,r){var o=At.registeredVariables[n];null==e.accumulatedGrads[r]&&(e.accumulatedGrads[r]={originalName:n+\"/accum_grad\",variable:Fe(function(){return kn(o).variable(!1)})}),null==e.accumulatedUpdates[r]&&(e.accumulatedUpdates[r]={originalName:n+\"/accum_var\",variable:Fe(function(){return kn(o).variable(!1)})});var a=Array.isArray(t)?t[r].tensor:t[n];if(null!=a){var i=e.accumulatedGrads[r].variable,s=e.accumulatedUpdates[r].variable;Fe(function(){var t=i.mul(e.rho).add(a.square().mul(1-e.rho)),n=s.add(e.epsilon).sqrt().div(i.add(e.epsilon).sqrt()).mul(a),r=s.mul(e.rho).add(n.square().mul(1-e.rho));i.assign(t),s.assign(r);var u=n.mul(-e.learningRate).add(o);o.assign(u)})}}),this.incrementIterations()},n.prototype.dispose=function(){null!=this.accumulatedUpdates&&(Me(this.accumulatedGrads.map(function(t){return t.variable})),Me(this.accumulatedUpdates.map(function(t){return t.variable})))},n.prototype.getWeights=function(){return r(this,void 0,void 0,function(){var t;return o(this,function(e){switch(e.label){case 0:return t=this.accumulatedGrads.concat(this.accumulatedUpdates),[4,this.saveIterations()];case 1:return[2,[e.sent()].concat(t.map(function(t){return{name:t.originalName,tensor:t.variable}}))]}})})},n.prototype.setWeights=function(t){return r(this,void 0,void 0,function(){var e;return o(this,function(n){switch(n.label){case 0:return[4,this.extractIterations(t)];case 1:return t=n.sent(),e=t.length/2,!1,this.accumulatedGrads=t.slice(0,e).map(function(t){return{originalName:t.name,variable:t.tensor.variable(!1)}}),this.accumulatedUpdates=t.slice(e,2*e).map(function(t){return{originalName:t.name,variable:t.tensor.variable(!1)}}),[2]}})})},n.prototype.getConfig=function(){return{learningRate:this.learningRate,rho:this.rho,epsilon:this.epsilon}},n.fromConfig=function(t,e){return new t(e.learningRate,e.rho,e.epsilon)},n.className=\"AdadeltaOptimizer\",n}(zh);Dh(Vh);var Gh=function(t){function n(e,n){void 0===n&&(n=.1);var r=t.call(this)||this;return r.learningRate=e,r.initialAccumulatorValue=n,r.accumulatedGrads=[],r}return e(n,t),n.prototype.applyGradients=function(t){var e=this;(Array.isArray(t)?t.map(function(t){return t.name}):Object.keys(t)).forEach(function(n,r){var o=At.registeredVariables[n];if(null==e.accumulatedGrads[r]){e.accumulatedGrads[r]={originalName:n+\"/accumulator\",variable:Fe(function(){return Rn(o.shape,e.initialAccumulatorValue).variable(!1)})}}var a=Array.isArray(t)?t[r].tensor:t[n];if(null!=a){var i=e.accumulatedGrads[r].variable;Fe(function(){var t=i.add(a.square());i.assign(t);var n=a.div(t.add(At.backend.epsilon()).sqrt()).mul(-e.learningRate).add(o);o.assign(n)})}}),this.incrementIterations()},n.prototype.dispose=function(){null!=this.accumulatedGrads&&Me(this.accumulatedGrads.map(function(t){return t.variable}))},n.prototype.getWeights=function(){return r(this,void 0,void 0,function(){return o(this,function(t){switch(t.label){case 0:return[4,this.saveIterations()];case 1:return[2,[t.sent()].concat(this.accumulatedGrads.map(function(t){return{name:t.originalName,tensor:t.variable}}))]}})})},n.prototype.setWeights=function(t){return r(this,void 0,void 0,function(){return o(this,function(e){switch(e.label){case 0:return[4,this.extractIterations(t)];case 1:return t=e.sent(),!1,this.accumulatedGrads=t.map(function(t){return{originalName:t.name,variable:t.tensor.variable(!1)}}),[2]}})})},n.prototype.getConfig=function(){return{learningRate:this.learningRate,initialAccumulatorValue:this.initialAccumulatorValue}},n.fromConfig=function(t,e){return new t(e.learningRate,e.initialAccumulatorValue)},n.className=\"Adagrad\",n}(zh);Dh(Gh);var qh=function(t){function n(e,n,r,o){void 0===o&&(o=null);var a=t.call(this)||this;return a.learningRate=e,a.beta1=n,a.beta2=r,a.epsilon=o,a.accumulatedFirstMoment=[],a.accumulatedSecondMoment=[],Fe(function(){a.accBeta1=vn(n).variable(),a.accBeta2=vn(r).variable()}),null==o&&(a.epsilon=At.backend.epsilon()),a}return e(n,t),n.prototype.applyGradients=function(t){var e=this,n=Array.isArray(t)?t.map(function(t){return t.name}):Object.keys(t);Fe(function(){var r=vl(1,e.accBeta1),o=vl(1,e.accBeta2);n.forEach(function(n,a){var i=At.registeredVariables[n];null==e.accumulatedFirstMoment[a]&&(e.accumulatedFirstMoment[a]={originalName:n+\"/m\",variable:Fe(function(){return kn(i).variable(!1)})}),null==e.accumulatedSecondMoment[a]&&(e.accumulatedSecondMoment[a]={originalName:n+\"/v\",variable:Fe(function(){return kn(i).variable(!1)})});var s=Array.isArray(t)?t[a].tensor:t[n];if(null!=s){var u=e.accumulatedFirstMoment[a].variable,l=e.accumulatedSecondMoment[a].variable,c=u.mul(e.beta1).add(s.mul(1-e.beta1)),h=l.mul(e.beta2).add(s.square().mul(1-e.beta2)),p=c.div(r),f=h.div(o);u.assign(c),l.assign(h);var d=p.div(f.sqrt().add(e.epsilon)).mul(-e.learningRate).add(i);i.assign(d)}}),e.accBeta1.assign(e.accBeta1.mul(e.beta1)),e.accBeta2.assign(e.accBeta2.mul(e.beta2))}),this.incrementIterations()},n.prototype.dispose=function(){this.accBeta1.dispose(),this.accBeta2.dispose(),null!=this.accumulatedFirstMoment&&Me(this.accumulatedFirstMoment.map(function(t){return t.variable})),null!=this.accumulatedSecondMoment&&Me(this.accumulatedSecondMoment.map(function(t){return t.variable}))},n.prototype.getWeights=function(){return r(this,void 0,void 0,function(){var t;return o(this,function(e){switch(e.label){case 0:return t=this.accumulatedFirstMoment.concat(this.accumulatedSecondMoment),[4,this.saveIterations()];case 1:return[2,[e.sent()].concat(t.map(function(t){return{name:t.originalName,tensor:t.variable}}))]}})})},n.prototype.setWeights=function(t){return r(this,void 0,void 0,function(){var e,n=this;return o(this,function(r){switch(r.label){case 0:return[4,this.extractIterations(t)];case 1:return t=r.sent(),Fe(function(){n.accBeta1.assign(hl(n.beta1,n.iterations_+1)),n.accBeta2.assign(hl(n.beta2,n.iterations_+1))}),e=t.length/2,!1,this.accumulatedFirstMoment=t.slice(0,e).map(function(t){return{originalName:t.name,variable:t.tensor.variable(!1)}}),this.accumulatedSecondMoment=t.slice(e,2*e).map(function(t){return{originalName:t.name,variable:t.tensor.variable(!1)}}),[2]}})})},n.prototype.getConfig=function(){return{learningRate:this.learningRate,beta1:this.beta1,beta2:this.beta2,epsilon:this.epsilon}},n.fromConfig=function(t,e){return new t(e.learningRate,e.beta1,e.beta2,e.epsilon)},n.className=\"Adam\",n}(zh);Dh(qh);var Hh=function(t){function n(e,n,r,o,a){void 0===o&&(o=null),void 0===a&&(a=0);var i=t.call(this)||this;return i.learningRate=e,i.beta1=n,i.beta2=r,i.epsilon=o,i.decay=a,i.accumulatedFirstMoment=[],i.accumulatedWeightedInfNorm=[],Fe(function(){i.iteration=vn(0).variable(),i.accBeta1=vn(n).variable()}),null==o&&(i.epsilon=At.backend.epsilon()),i}return e(n,t),n.prototype.applyGradients=function(t){var e=this,n=Array.isArray(t)?t.map(function(t){return t.name}):Object.keys(t);Fe(function(){var r=vl(1,e.accBeta1),o=tl(-e.learningRate,e.iteration.mul(e.decay).add(1));n.forEach(function(n,a){var i=At.registeredVariables[n];null==e.accumulatedFirstMoment[a]&&(e.accumulatedFirstMoment[a]={originalName:n+\"/m\",variable:kn(i).variable(!1)}),null==e.accumulatedWeightedInfNorm[a]&&(e.accumulatedWeightedInfNorm[a]={originalName:n+\"/v\",variable:kn(i).variable(!1)});var s=Array.isArray(t)?t[a].tensor:t[n];if(null!=s){var u=e.accumulatedFirstMoment[a].variable,l=e.accumulatedWeightedInfNorm[a].variable,c=u.mul(e.beta1).add(s.mul(1-e.beta1)),h=l.mul(e.beta2),p=s.abs(),f=h.maximum(p);u.assign(c),l.assign(f);var d=o.div(r).mul(c.div(f.add(e.epsilon))).add(i);i.assign(d)}}),e.iteration.assign(e.iteration.add(1)),e.accBeta1.assign(e.accBeta1.mul(e.beta1))}),this.incrementIterations()},n.prototype.dispose=function(){this.accBeta1.dispose(),this.iteration.dispose(),null!=this.accumulatedFirstMoment&&Me(this.accumulatedFirstMoment.map(function(t){return t.variable})),null!=this.accumulatedWeightedInfNorm&&Me(this.accumulatedWeightedInfNorm.map(function(t){return t.variable}))},n.prototype.getWeights=function(){return r(this,void 0,void 0,function(){return o(this,function(t){throw new Error(\"getWeights() is not implemented for Adamax yet.\")})})},n.prototype.setWeights=function(t){return r(this,void 0,void 0,function(){return o(this,function(t){throw new Error(\"setWeights() is not implemented for Adamax yet.\")})})},n.prototype.getConfig=function(){return{learningRate:this.learningRate,beta1:this.beta1,beta2:this.beta2,epsilon:this.epsilon,decay:this.decay}},n.fromConfig=function(t,e){return new t(e.learningRate,e.beta1,e.beta2,e.epsilon,e.decay)},n.className=\"Adamax\",n}(zh);Dh(Hh);var $h=function(t){function n(e){var n=t.call(this)||this;return n.learningRate=e,n.setLearningRate(e),n}return e(n,t),n.prototype.applyGradients=function(t){var e=this;(Array.isArray(t)?t.map(function(t){return t.name}):Object.keys(t)).forEach(function(n,r){var o=Array.isArray(t)?t[r].tensor:t[n];if(null!=o){var a=At.registeredVariables[n];Fe(function(){var t=e.c.mul(o).add(a);a.assign(t)})}}),this.incrementIterations()},n.prototype.setLearningRate=function(t){this.learningRate=t,null!=this.c&&this.c.dispose(),this.c=Be(vn(-t))},n.prototype.dispose=function(){this.c.dispose()},n.prototype.getWeights=function(){return r(this,void 0,void 0,function(){return o(this,function(t){switch(t.label){case 0:return[4,this.saveIterations()];case 1:return[2,[t.sent()]]}})})},n.prototype.setWeights=function(t){return r(this,void 0,void 0,function(){return o(this,function(e){switch(e.label){case 0:return[4,this.extractIterations(t)];case 1:if(0!==(t=e.sent()).length)throw new Error(\"SGD optimizer does not have settable weights.\");return[2]}})})},n.prototype.getConfig=function(){return{learningRate:this.learningRate}},n.fromConfig=function(t,e){return new t(e.learningRate)},n.className=\"SGD\",n}(zh);Dh($h);var jh=function(t){function n(e,n,r){void 0===r&&(r=!1);var o=t.call(this,e)||this;return o.learningRate=e,o.momentum=n,o.useNesterov=r,o.accumulations=[],o.m=vn(o.momentum),o}return e(n,t),n.prototype.applyGradients=function(t){var e=this;(Array.isArray(t)?t.map(function(t){return t.name}):Object.keys(t)).forEach(function(n,r){var o=At.registeredVariables[n];if(null==e.accumulations[r]){e.accumulations[r]={originalName:n+\"/momentum\",variable:Fe(function(){return kn(o).variable(!1)})}}var a=e.accumulations[r].variable,i=Array.isArray(t)?t[r].tensor:t[n];null!=i&&Fe(function(){var t,n=e.m.mul(a).add(i);t=e.useNesterov?e.c.mul(i.add(n.mul(e.m))).add(o):e.c.mul(n).add(o),a.assign(n),o.assign(t)})}),this.incrementIterations()},n.prototype.dispose=function(){this.m.dispose(),null!=this.accumulations&&Me(this.accumulations.map(function(t){return t.variable}))},n.prototype.setMomentum=function(t){this.momentum=t},n.prototype.getWeights=function(){return r(this,void 0,void 0,function(){return o(this,function(t){switch(t.label){case 0:return[4,this.saveIterations()];case 1:return[2,[t.sent()].concat(this.accumulations.map(function(t){return{name:t.originalName,tensor:t.variable}}))]}})})},n.prototype.setWeights=function(t){return r(this,void 0,void 0,function(){return o(this,function(e){switch(e.label){case 0:return[4,this.extractIterations(t)];case 1:return t=e.sent(),!1,this.accumulations=t.map(function(t){return{originalName:t.name,variable:t.tensor.variable(!1)}}),[2]}})})},n.prototype.getConfig=function(){return{learningRate:this.learningRate,momentum:this.momentum,useNesterov:this.useNesterov}},n.fromConfig=function(t,e){return new t(e.learningRate,e.momentum,e.useNesterov)},n.className=\"MomentumOptimizer\",n}($h);Dh(jh);var Kh=function(t){function n(e,n,r,o,a){void 0===n&&(n=.9),void 0===r&&(r=0),void 0===o&&(o=null),void 0===a&&(a=!1);var i=t.call(this)||this;return i.learningRate=e,i.decay=n,i.momentum=r,i.epsilon=o,i.accumulatedMeanSquares=[],i.accumulatedMoments=[],i.accumulatedMeanGrads=[],i.centered=a,null==o&&(i.epsilon=At.backend.epsilon()),i}return e(n,t),n.prototype.applyGradients=function(t){var e=this;(Array.isArray(t)?t.map(function(t){return t.name}):Object.keys(t)).forEach(function(n,r){var o=At.registeredVariables[n];null==e.accumulatedMeanSquares[r]&&(e.accumulatedMeanSquares[r]={originalName:n+\"/rms\",variable:Fe(function(){return kn(o).variable(!1)})}),null==e.accumulatedMoments[r]&&(e.accumulatedMoments[r]={originalName:n+\"/momentum\",variable:Fe(function(){return kn(o).variable(!1)})}),null==e.accumulatedMeanGrads[r]&&e.centered&&(e.accumulatedMeanGrads[r]={originalName:n+\"/mg\",variable:Fe(function(){return kn(o).variable(!1)})});var a=Array.isArray(t)?t[r].tensor:t[n];if(null!=a){var i=e.accumulatedMeanSquares[r].variable,s=e.accumulatedMoments[r].variable;Fe(function(){var t=i.mul(e.decay).add(a.square().mul(1-e.decay));if(e.centered){var n=e.accumulatedMeanGrads[r].variable,u=n.mul(e.decay).add(a.mul(1-e.decay)),l=s.mul(e.momentum).add(a.mul(e.learningRate).div(t.sub(u.square().add(e.epsilon)).sqrt()));i.assign(t),n.assign(u),s.assign(l);var c=o.sub(l);o.assign(c)}else{var h=i.mul(e.decay).add(a.square().mul(1-e.decay));l=s.mul(e.momentum).add(a.mul(e.learningRate).div(h.add(e.epsilon).sqrt()));i.assign(h),s.assign(l);c=o.sub(l);o.assign(c)}})}}),this.incrementIterations()},n.prototype.dispose=function(){null!=this.accumulatedMeanSquares&&Me(this.accumulatedMeanSquares.map(function(t){return t.variable})),null!=this.accumulatedMeanGrads&&this.centered&&Me(this.accumulatedMeanGrads.map(function(t){return t.variable})),null!=this.accumulatedMoments&&Me(this.accumulatedMoments.map(function(t){return t.variable}))},n.prototype.getWeights=function(){return r(this,void 0,void 0,function(){var t;return o(this,function(e){switch(e.label){case 0:return t=this.accumulatedMeanSquares.concat(this.accumulatedMoments),this.centered&&t.push.apply(t,this.accumulatedMeanGrads),[4,this.saveIterations()];case 1:return[2,[e.sent()].concat(t.map(function(t){return{name:t.originalName,tensor:t.variable}}))]}})})},n.prototype.setWeights=function(t){return r(this,void 0,void 0,function(){var e;return o(this,function(n){switch(n.label){case 0:return[4,this.extractIterations(t)];case 1:return t=n.sent(),e=this.centered?t.length/3:t.length/2,!1,this.accumulatedMeanSquares=t.slice(0,e).map(function(t){return{originalName:t.name,variable:t.tensor.variable(!1)}}),this.accumulatedMoments=t.slice(e,2*e).map(function(t){return{originalName:t.name,variable:t.tensor.variable(!1)}}),this.centered&&(this.accumulatedMeanGrads=t.slice(2*e,3*e).map(function(t){return{originalName:t.name,variable:t.tensor.variable(!1)}})),[2]}})})},n.prototype.getConfig=function(){return{learningRate:this.learningRate,decay:this.decay,momentum:this.momentum,epsilon:this.epsilon,centered:this.centered}},n.fromConfig=function(t,e){return new t(e.learningRate,e.decay,e.momentum,e.epsilon,e.centered)},n.className=\"RMSProp\",n}(zh);Dh(Kh);var Xh=function(){function t(){}return t.sgd=function(t){return new $h(t)},t.momentum=function(t,e,n){return void 0===n&&(n=!1),new jh(t,e,n)},t.rmsprop=function(t,e,n,r,o){return void 0===e&&(e=.9),void 0===n&&(n=0),void 0===r&&(r=null),void 0===o&&(o=!1),new Kh(t,e,n,r,o)},t.adam=function(t,e,n,r){return void 0===t&&(t=.001),void 0===e&&(e=.9),void 0===n&&(n=.999),void 0===r&&(r=null),new qh(t,e,n,r)},t.adadelta=function(t,e,n){return void 0===t&&(t=.001),void 0===e&&(e=.95),void 0===n&&(n=null),new Vh(t,e,n)},t.adamax=function(t,e,n,r,o){return void 0===t&&(t=.002),void 0===e&&(e=.9),void 0===n&&(n=.999),void 0===r&&(r=null),void 0===o&&(o=0),new Hh(t,e,n,r,o)},t.adagrad=function(t,e){return void 0===e&&(e=.1),new Gh(t,e)},t}(),Yh={sgd:Xh.sgd,momentum:Xh.momentum,adadelta:Xh.adadelta,adagrad:Xh.adagrad,rmsprop:Xh.rmsprop,adamax:Xh.adamax,adam:Xh.adam},Qh=\"undefined\"!=typeof requestAnimationFrame?requestAnimationFrame:\"undefined\"!=typeof setImmediate?setImmediate:function(t){return t()};function Jh(){return new Promise(function(t){return Qh(function(){return t()})})}lt=Rc;export{Vh as AdadeltaOptimizer,Gh as AdagradOptimizer,qh as AdamOptimizer,Hh as AdamaxOptimizer,Gr as DataStorage,s as ENV,a as Environment,qr as KernelBackend,jh as MomentumOptimizer,zh as Optimizer,Kh as RMSPropOptimizer,ft as Rank,Yl as Reduction,$h as SGDOptimizer,ht as Tensor,st as TensorBuffer,pt as Variable,rs as abs,os as acos,as as acosh,Yu as add,Qu as addN,Ju as addStrict,Nu as all,ku as any,Au as argMax,Tu as argMin,is as asin,ss as asinh,us as atan,Zu as atan2,ls as atanh,xu as avgPool,He as backend,so as backend_util,Ml as basicLSTMCell,Ks as batchNorm,Xs as batchNorm2d,Ys as batchNorm3d,Qs as batchNorm4d,js as batchNormalization,qs as batchNormalization2d,Hs as batchNormalization3d,$s as batchNormalization4d,Kn as batchToSpaceND,kh as browser,$n as buffer,Xn as cast,cs as ceil,hs as clipByValue,Yn as clone,cn as complex,An as concat,Tn as concat1d,Dn as concat2d,_n as concat3d,On as concat4d,eu as conv1d,nu as conv2d,ou as conv2dDerFilter,su as conv2dTranspose,ru as conv3d,ps as cos,fs as cosh,Qn as cumsum,Wr as customGrad,Te as deprecationWarn,Jn as depthToSpace,au as depthwiseConv2d,Ae as disableDeprecationWarnings,Me as dispose,De as disposeVariables,tl as div,el as divStrict,lu as dot,Kl as dropout,El as elu,ke as enableDebugMode,Ne as enableProdMode,l as environment,Lu as equal,Wu as equalStrict,ds as erf,vs as exp,Zn as expandDims,ms as expm1,tr as eye,zl as fft,Rn as fill,Ve as findBackend,Ge as findBackendFactory,gs as floor,nl as floorDiv,Zl as frame,Ec as fused,Ol as gather,jl as gatherND,Ue as getBackend,Fr as grad,Mr as grads,Uu as greater,zu as greaterEqual,Vu as greaterEqualStrict,Gu as greaterStrict,Jl as hammingWindow,Ql as hannWindow,Vl as ifft,pn as imag,wc as image,Rh as io,ql as irfft,As as isFinite,ks as isInf,Ns as isNaN,Be as keep,Rl as leakyRelu,qu as less,Hu as lessEqual,$u as lessEqualStrict,ju as lessStrict,dc as linalg,In as linspace,Al as localResponseNormalization,ys as log,xs as log1p,bs as logSigmoid,Vr as logSoftmax,Du as logSumExp,gl as logicalAnd,yl as logicalNot,xl as logicalOr,bl as logicalXor,cc as losses,uu as matMul,Sh as math,_u as max,yu as maxPool,rl as maximum,ol as maximumStrict,Ou as mean,_e as memory,Fu as min,al as minimum,il as minimumStrict,sl as mod,ul as modStrict,Mu as moments,Pl as movingAverage,ll as mul,cl as mulStrict,Bl as multiRNNCell,er as multinomial,ws as neg,Jh as nextFrame,Tl as norm,Ku as notEqual,Xu as notEqualStrict,nr as oneHot,Cn as ones,Nn as onesLike,ln as op,cu as outerProduct,rr as pad,or as pad1d,ar as pad2d,ir as pad3d,sr as pad4d,bu as pool,hl as pow,pl as powStrict,Il as prelu,jn as print,Pu as prod,Oe as profile,ur as rand,lr as randomNormal,cr as randomUniform,Sn as range,We as ready,hn as real,Cs as reciprocal,qe as registerBackend,Sl as relu,ze as removeBackend,hr as reshape,hu as reverse,pu as reverse1d,fu as reverse2d,du as reverse3d,vu as reverse4d,Gl as rfft,Es as round,Rs as rsqrt,vn as scalar,Ul as scatterND,Nl as selu,iu as separableConv2d,_h as serialization,Le as setBackend,$e as setPlatform,yr as setdiff1dAsync,Is as sigmoid,Ss as sign,tc as signal,Ts as sin,Ds as sinh,wu as slice,Cu as slice1d,Eu as slice2d,Ru as slice3d,Iu as slice4d,zr as softmax,_s as softplus,pr as spaceToBatchND,$l as sparseToDense,Hl as spectral,Fn as split,Os as sqrt,Fs as square,fl as squaredDifference,dl as squaredDifferenceStrict,fr as squeeze,dr as stack,Ms as step,Ll as stridedSlice,vl as sub,ml as subStrict,Bu as sum,Bs as tan,Ps as tanh,fn as tensor,mn as tensor1d,gn as tensor2d,yn as tensor3d,xn as tensor4d,bn as tensor5d,wn as tensor6d,St as tensor_util,Lh as test_util,Fe as tidy,vr as tile,Pe as time,Wl as topk,Yh as train,kl as transpose,mr as truncatedNormal,Fl as unsortedSegmentSum,gr as unstack,Q as util,Br as valueAndGrad,Pr as valueAndGrads,yt as variable,Lr as variableGrads,Wh as version_core,Uh as webgl,wl as where,Cl as whereAsync,En as zeros,kn as zerosLike};\n//# sourceMappingURL=tf-core.esm.js.map\n","import { isValidNumber } from '../utils';\r\nvar Dimensions = /** @class */ (function () {\r\n function Dimensions(width, height) {\r\n if (!isValidNumber(width) || !isValidNumber(height)) {\r\n throw new Error(\"Dimensions.constructor - expected width and height to be valid numbers, instead have \" + JSON.stringify({ width: width, height: height }));\r\n }\r\n this._width = width;\r\n this._height = height;\r\n }\r\n Object.defineProperty(Dimensions.prototype, \"width\", {\r\n get: function () { return this._width; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Dimensions.prototype, \"height\", {\r\n get: function () { return this._height; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Dimensions.prototype.reverse = function () {\r\n return new Dimensions(1 / this.width, 1 / this.height);\r\n };\r\n return Dimensions;\r\n}());\r\nexport { Dimensions };\r\n//# sourceMappingURL=Dimensions.js.map","var Point = /** @class */ (function () {\r\n function Point(x, y) {\r\n this._x = x;\r\n this._y = y;\r\n }\r\n Object.defineProperty(Point.prototype, \"x\", {\r\n get: function () { return this._x; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Point.prototype, \"y\", {\r\n get: function () { return this._y; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Point.prototype.add = function (pt) {\r\n return new Point(this.x + pt.x, this.y + pt.y);\r\n };\r\n Point.prototype.sub = function (pt) {\r\n return new Point(this.x - pt.x, this.y - pt.y);\r\n };\r\n Point.prototype.mul = function (pt) {\r\n return new Point(this.x * pt.x, this.y * pt.y);\r\n };\r\n Point.prototype.div = function (pt) {\r\n return new Point(this.x / pt.x, this.y / pt.y);\r\n };\r\n Point.prototype.abs = function () {\r\n return new Point(Math.abs(this.x), Math.abs(this.y));\r\n };\r\n Point.prototype.magnitude = function () {\r\n return Math.sqrt(Math.pow(this.x, 2) + Math.pow(this.y, 2));\r\n };\r\n Point.prototype.floor = function () {\r\n return new Point(Math.floor(this.x), Math.floor(this.y));\r\n };\r\n return Point;\r\n}());\r\nexport { Point };\r\n//# sourceMappingURL=Point.js.map","import * as tf from '@tensorflow/tfjs-core';\r\nimport { Dimensions } from '../classes/Dimensions';\r\nimport { Point } from '../classes/Point';\r\nexport function isTensor(tensor, dim) {\r\n return tensor instanceof tf.Tensor && tensor.shape.length === dim;\r\n}\r\nexport function isTensor1D(tensor) {\r\n return isTensor(tensor, 1);\r\n}\r\nexport function isTensor2D(tensor) {\r\n return isTensor(tensor, 2);\r\n}\r\nexport function isTensor3D(tensor) {\r\n return isTensor(tensor, 3);\r\n}\r\nexport function isTensor4D(tensor) {\r\n return isTensor(tensor, 4);\r\n}\r\nexport function isFloat(num) {\r\n return num % 1 !== 0;\r\n}\r\nexport function isEven(num) {\r\n return num % 2 === 0;\r\n}\r\nexport function round(num, prec) {\r\n if (prec === void 0) { prec = 2; }\r\n var f = Math.pow(10, prec);\r\n return Math.floor(num * f) / f;\r\n}\r\nexport function isDimensions(obj) {\r\n return obj && obj.width && obj.height;\r\n}\r\nexport function computeReshapedDimensions(_a, inputSize) {\r\n var width = _a.width, height = _a.height;\r\n var scale = inputSize / Math.max(height, width);\r\n return new Dimensions(Math.round(width * scale), Math.round(height * scale));\r\n}\r\nexport function getCenterPoint(pts) {\r\n return pts.reduce(function (sum, pt) { return sum.add(pt); }, new Point(0, 0))\r\n .div(new Point(pts.length, pts.length));\r\n}\r\nexport function range(num, start, step) {\r\n return Array(num).fill(0).map(function (_, i) { return start + (i * step); });\r\n}\r\nexport function isValidNumber(num) {\r\n return !!num && num !== Infinity && num !== -Infinity && !isNaN(num) || num === 0;\r\n}\r\nexport function isValidProbablitiy(num) {\r\n return isValidNumber(num) && 0 <= num && num <= 1.0;\r\n}\r\n//# sourceMappingURL=index.js.map","import { isDimensions, isValidNumber } from '../utils';\r\nimport { Point } from './Point';\r\nvar Box = /** @class */ (function () {\r\n function Box(_box, allowNegativeDimensions) {\r\n if (allowNegativeDimensions === void 0) { allowNegativeDimensions = true; }\r\n var box = (_box || {});\r\n var isBbox = [box.left, box.top, box.right, box.bottom].every(isValidNumber);\r\n var isRect = [box.x, box.y, box.width, box.height].every(isValidNumber);\r\n if (!isRect && !isBbox) {\r\n throw new Error(\"Box.constructor - expected box to be IBoundingBox | IRect, instead have \" + JSON.stringify(box));\r\n }\r\n var _a = isRect\r\n ? [box.x, box.y, box.width, box.height]\r\n : [box.left, box.top, box.right - box.left, box.bottom - box.top], x = _a[0], y = _a[1], width = _a[2], height = _a[3];\r\n Box.assertIsValidBox({ x: x, y: y, width: width, height: height }, 'Box.constructor', allowNegativeDimensions);\r\n this._x = x;\r\n this._y = y;\r\n this._width = width;\r\n this._height = height;\r\n }\r\n Box.isRect = function (rect) {\r\n return !!rect && [rect.x, rect.y, rect.width, rect.height].every(isValidNumber);\r\n };\r\n Box.assertIsValidBox = function (box, callee, allowNegativeDimensions) {\r\n if (allowNegativeDimensions === void 0) { allowNegativeDimensions = false; }\r\n if (!Box.isRect(box)) {\r\n throw new Error(callee + \" - invalid box: \" + JSON.stringify(box) + \", expected object with properties x, y, width, height\");\r\n }\r\n if (!allowNegativeDimensions && (box.width < 0 || box.height < 0)) {\r\n throw new Error(callee + \" - width (\" + box.width + \") and height (\" + box.height + \") must be positive numbers\");\r\n }\r\n };\r\n Object.defineProperty(Box.prototype, \"x\", {\r\n get: function () { return this._x; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Box.prototype, \"y\", {\r\n get: function () { return this._y; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Box.prototype, \"width\", {\r\n get: function () { return this._width; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Box.prototype, \"height\", {\r\n get: function () { return this._height; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Box.prototype, \"left\", {\r\n get: function () { return this.x; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Box.prototype, \"top\", {\r\n get: function () { return this.y; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Box.prototype, \"right\", {\r\n get: function () { return this.x + this.width; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Box.prototype, \"bottom\", {\r\n get: function () { return this.y + this.height; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Box.prototype, \"area\", {\r\n get: function () { return this.width * this.height; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Box.prototype, \"topLeft\", {\r\n get: function () { return new Point(this.left, this.top); },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Box.prototype, \"topRight\", {\r\n get: function () { return new Point(this.right, this.top); },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Box.prototype, \"bottomLeft\", {\r\n get: function () { return new Point(this.left, this.bottom); },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Box.prototype, \"bottomRight\", {\r\n get: function () { return new Point(this.right, this.bottom); },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Box.prototype.round = function () {\r\n var _a = [this.x, this.y, this.width, this.height]\r\n .map(function (val) { return Math.round(val); }), x = _a[0], y = _a[1], width = _a[2], height = _a[3];\r\n return new Box({ x: x, y: y, width: width, height: height });\r\n };\r\n Box.prototype.floor = function () {\r\n var _a = [this.x, this.y, this.width, this.height]\r\n .map(function (val) { return Math.floor(val); }), x = _a[0], y = _a[1], width = _a[2], height = _a[3];\r\n return new Box({ x: x, y: y, width: width, height: height });\r\n };\r\n Box.prototype.toSquare = function () {\r\n var _a = this, x = _a.x, y = _a.y, width = _a.width, height = _a.height;\r\n var diff = Math.abs(width - height);\r\n if (width < height) {\r\n x -= (diff / 2);\r\n width += diff;\r\n }\r\n if (height < width) {\r\n y -= (diff / 2);\r\n height += diff;\r\n }\r\n return new Box({ x: x, y: y, width: width, height: height });\r\n };\r\n Box.prototype.rescale = function (s) {\r\n var scaleX = isDimensions(s) ? s.width : s;\r\n var scaleY = isDimensions(s) ? s.height : s;\r\n return new Box({\r\n x: this.x * scaleX,\r\n y: this.y * scaleY,\r\n width: this.width * scaleX,\r\n height: this.height * scaleY\r\n });\r\n };\r\n Box.prototype.pad = function (padX, padY) {\r\n var _a = [\r\n this.x - (padX / 2),\r\n this.y - (padY / 2),\r\n this.width + padX,\r\n this.height + padY\r\n ], x = _a[0], y = _a[1], width = _a[2], height = _a[3];\r\n return new Box({ x: x, y: y, width: width, height: height });\r\n };\r\n Box.prototype.clipAtImageBorders = function (imgWidth, imgHeight) {\r\n var _a = this, x = _a.x, y = _a.y, right = _a.right, bottom = _a.bottom;\r\n var clippedX = Math.max(x, 0);\r\n var clippedY = Math.max(y, 0);\r\n var newWidth = right - clippedX;\r\n var newHeight = bottom - clippedY;\r\n var clippedWidth = Math.min(newWidth, imgWidth - clippedX);\r\n var clippedHeight = Math.min(newHeight, imgHeight - clippedY);\r\n return (new Box({ x: clippedX, y: clippedY, width: clippedWidth, height: clippedHeight })).floor();\r\n };\r\n Box.prototype.shift = function (sx, sy) {\r\n var _a = this, width = _a.width, height = _a.height;\r\n var x = this.x + sx;\r\n var y = this.y + sy;\r\n return new Box({ x: x, y: y, width: width, height: height });\r\n };\r\n Box.prototype.padAtBorders = function (imageHeight, imageWidth) {\r\n var w = this.width + 1;\r\n var h = this.height + 1;\r\n var dx = 1;\r\n var dy = 1;\r\n var edx = w;\r\n var edy = h;\r\n var x = this.left;\r\n var y = this.top;\r\n var ex = this.right;\r\n var ey = this.bottom;\r\n if (ex > imageWidth) {\r\n edx = -ex + imageWidth + w;\r\n ex = imageWidth;\r\n }\r\n if (ey > imageHeight) {\r\n edy = -ey + imageHeight + h;\r\n ey = imageHeight;\r\n }\r\n if (x < 1) {\r\n edy = 2 - x;\r\n x = 1;\r\n }\r\n if (y < 1) {\r\n edy = 2 - y;\r\n y = 1;\r\n }\r\n return { dy: dy, edy: edy, dx: dx, edx: edx, y: y, ey: ey, x: x, ex: ex, w: w, h: h };\r\n };\r\n Box.prototype.calibrate = function (region) {\r\n return new Box({\r\n left: this.left + (region.left * this.width),\r\n top: this.top + (region.top * this.height),\r\n right: this.right + (region.right * this.width),\r\n bottom: this.bottom + (region.bottom * this.height)\r\n }).toSquare().round();\r\n };\r\n return Box;\r\n}());\r\nexport { Box };\r\n//# sourceMappingURL=Box.js.map","import * as tslib_1 from \"tslib\";\r\nimport { Box } from './Box';\r\nvar BoundingBox = /** @class */ (function (_super) {\r\n tslib_1.__extends(BoundingBox, _super);\r\n function BoundingBox(left, top, right, bottom, allowNegativeDimensions) {\r\n if (allowNegativeDimensions === void 0) { allowNegativeDimensions = false; }\r\n return _super.call(this, { left: left, top: top, right: right, bottom: bottom }, allowNegativeDimensions) || this;\r\n }\r\n return BoundingBox;\r\n}(Box));\r\nexport { BoundingBox };\r\n//# sourceMappingURL=BoundingBox.js.map","import * as tslib_1 from \"tslib\";\r\nimport { Box } from './Box';\r\nimport { isValidNumber } from '../utils/index';\r\nvar LabeledBox = /** @class */ (function (_super) {\r\n tslib_1.__extends(LabeledBox, _super);\r\n function LabeledBox(box, label) {\r\n var _this = _super.call(this, box) || this;\r\n _this._label = label;\r\n return _this;\r\n }\r\n LabeledBox.assertIsValidLabeledBox = function (box, callee) {\r\n Box.assertIsValidBox(box, callee);\r\n if (!isValidNumber(box.label)) {\r\n throw new Error(callee + \" - expected property label (\" + box.label + \") to be a number\");\r\n }\r\n };\r\n Object.defineProperty(LabeledBox.prototype, \"label\", {\r\n get: function () { return this._label; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n return LabeledBox;\r\n}(Box));\r\nexport { LabeledBox };\r\n//# sourceMappingURL=LabeledBox.js.map","import { Box } from './Box';\r\nimport { Dimensions } from './Dimensions';\r\nvar ObjectDetection = /** @class */ (function () {\r\n function ObjectDetection(score, classScore, className, relativeBox, imageDims) {\r\n this._imageDims = new Dimensions(imageDims.width, imageDims.height);\r\n this._score = score;\r\n this._classScore = classScore;\r\n this._className = className;\r\n this._box = new Box(relativeBox).rescale(this._imageDims);\r\n }\r\n Object.defineProperty(ObjectDetection.prototype, \"score\", {\r\n get: function () { return this._score; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ObjectDetection.prototype, \"classScore\", {\r\n get: function () { return this._classScore; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ObjectDetection.prototype, \"className\", {\r\n get: function () { return this._className; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ObjectDetection.prototype, \"box\", {\r\n get: function () { return this._box; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ObjectDetection.prototype, \"imageDims\", {\r\n get: function () { return this._imageDims; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ObjectDetection.prototype, \"imageWidth\", {\r\n get: function () { return this.imageDims.width; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ObjectDetection.prototype, \"imageHeight\", {\r\n get: function () { return this.imageDims.height; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ObjectDetection.prototype, \"relativeBox\", {\r\n get: function () { return new Box(this._box).rescale(this.imageDims.reverse()); },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n ObjectDetection.prototype.forSize = function (width, height) {\r\n return new ObjectDetection(this.score, this.classScore, this.className, this.relativeBox, { width: width, height: height });\r\n };\r\n return ObjectDetection;\r\n}());\r\nexport { ObjectDetection };\r\n//# sourceMappingURL=ObjectDetection.js.map","import * as tslib_1 from \"tslib\";\r\nimport { isValidProbablitiy } from '../utils';\r\nimport { LabeledBox } from './LabeledBox';\r\nvar PredictedBox = /** @class */ (function (_super) {\r\n tslib_1.__extends(PredictedBox, _super);\r\n function PredictedBox(box, label, score, classScore) {\r\n var _this = _super.call(this, box, label) || this;\r\n _this._score = score;\r\n _this._classScore = classScore;\r\n return _this;\r\n }\r\n PredictedBox.assertIsValidPredictedBox = function (box, callee) {\r\n LabeledBox.assertIsValidLabeledBox(box, callee);\r\n if (!isValidProbablitiy(box.score)\r\n || !isValidProbablitiy(box.classScore)) {\r\n throw new Error(callee + \" - expected properties score (\" + box.score + \") and (\" + box.classScore + \") to be a number between [0, 1]\");\r\n }\r\n };\r\n Object.defineProperty(PredictedBox.prototype, \"score\", {\r\n get: function () { return this._score; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(PredictedBox.prototype, \"classScore\", {\r\n get: function () { return this._classScore; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n return PredictedBox;\r\n}(LabeledBox));\r\nexport { PredictedBox };\r\n//# sourceMappingURL=PredictedBox.js.map","import * as tslib_1 from \"tslib\";\r\nimport { Box } from './Box';\r\nvar Rect = /** @class */ (function (_super) {\r\n tslib_1.__extends(Rect, _super);\r\n function Rect(x, y, width, height, allowNegativeDimensions) {\r\n if (allowNegativeDimensions === void 0) { allowNegativeDimensions = false; }\r\n return _super.call(this, { x: x, y: y, width: width, height: height }, allowNegativeDimensions) || this;\r\n }\r\n return Rect;\r\n}(Box));\r\nexport { Rect };\r\n//# sourceMappingURL=Rect.js.map","export function createBrowserEnv() {\r\n var fetch = window['fetch'] || function () {\r\n throw new Error('fetch - missing fetch implementation for browser environment');\r\n };\r\n var readFile = function () {\r\n throw new Error('readFile - filesystem not available for browser environment');\r\n };\r\n return {\r\n Canvas: HTMLCanvasElement,\r\n CanvasRenderingContext2D: CanvasRenderingContext2D,\r\n Image: HTMLImageElement,\r\n ImageData: ImageData,\r\n Video: HTMLVideoElement,\r\n createCanvasElement: function () { return document.createElement('canvas'); },\r\n createImageElement: function () { return document.createElement('img'); },\r\n fetch: fetch,\r\n readFile: readFile\r\n };\r\n}\r\n//# sourceMappingURL=createBrowserEnv.js.map","export function createFileSystem(fs) {\r\n var requireFsError = '';\r\n if (!fs) {\r\n try {\r\n fs = require('fs');\r\n }\r\n catch (err) {\r\n requireFsError = err.toString();\r\n }\r\n }\r\n var readFile = fs\r\n ? function (filePath) {\r\n return new Promise(function (res, rej) {\r\n fs.readFile(filePath, function (err, buffer) {\r\n return err ? rej(err) : res(buffer);\r\n });\r\n });\r\n }\r\n : function () {\r\n throw new Error(\"readFile - failed to require fs in nodejs environment with error: \" + requireFsError);\r\n };\r\n return {\r\n readFile: readFile\r\n };\r\n}\r\n//# sourceMappingURL=createFileSystem.js.map","import * as tslib_1 from \"tslib\";\r\nimport { createFileSystem } from './createFileSystem';\r\nexport function createNodejsEnv() {\r\n var Canvas = global['Canvas'] || global['HTMLCanvasElement'];\r\n var Image = global['Image'] || global['HTMLImageElement'];\r\n var createCanvasElement = function () {\r\n if (Canvas) {\r\n return new Canvas();\r\n }\r\n throw new Error('createCanvasElement - missing Canvas implementation for nodejs environment');\r\n };\r\n var createImageElement = function () {\r\n if (Image) {\r\n return new Image();\r\n }\r\n throw new Error('createImageElement - missing Image implementation for nodejs environment');\r\n };\r\n var fetch = global['fetch'] || function () {\r\n throw new Error('fetch - missing fetch implementation for nodejs environment');\r\n };\r\n var fileSystem = createFileSystem();\r\n return tslib_1.__assign({ Canvas: Canvas || /** @class */ (function () {\r\n function Canvas() {\r\n }\r\n return Canvas;\r\n }()), CanvasRenderingContext2D: global['CanvasRenderingContext2D'] || /** @class */ (function () {\r\n function class_1() {\r\n }\r\n return class_1;\r\n }()), Image: Image || /** @class */ (function () {\r\n function Image() {\r\n }\r\n return Image;\r\n }()), ImageData: global['ImageData'] || /** @class */ (function () {\r\n function class_2() {\r\n }\r\n return class_2;\r\n }()), Video: global['HTMLVideoElement'] || /** @class */ (function () {\r\n function class_3() {\r\n }\r\n return class_3;\r\n }()), createCanvasElement: createCanvasElement,\r\n createImageElement: createImageElement,\r\n fetch: fetch }, fileSystem);\r\n}\r\n//# sourceMappingURL=createNodejsEnv.js.map","export function isBrowser() {\r\n return typeof window === 'object'\r\n && typeof document !== 'undefined'\r\n && typeof HTMLImageElement !== 'undefined'\r\n && typeof HTMLCanvasElement !== 'undefined'\r\n && typeof HTMLVideoElement !== 'undefined'\r\n && typeof ImageData !== 'undefined'\r\n && typeof CanvasRenderingContext2D !== 'undefined';\r\n}\r\n//# sourceMappingURL=isBrowser.js.map","export function isNodejs() {\r\n return typeof global === 'object'\r\n && typeof require === 'function'\r\n && typeof module !== 'undefined'\r\n // issues with gatsby.js: module.exports is undefined\r\n // && !!module.exports\r\n && typeof process !== 'undefined' && !!process.version;\r\n}\r\n//# sourceMappingURL=isNodejs.js.map","import { createBrowserEnv } from './createBrowserEnv';\r\nimport { createFileSystem } from './createFileSystem';\r\nimport { createNodejsEnv } from './createNodejsEnv';\r\nimport { isBrowser } from './isBrowser';\r\nimport { isNodejs } from './isNodejs';\r\nvar environment;\r\nfunction getEnv() {\r\n if (!environment) {\r\n throw new Error('getEnv - environment is not defined, check isNodejs() and isBrowser()');\r\n }\r\n return environment;\r\n}\r\nfunction setEnv(env) {\r\n environment = env;\r\n}\r\nfunction initialize() {\r\n // check for isBrowser() first to prevent electron renderer process\r\n // to be initialized with wrong environment due to isNodejs() returning true\r\n if (isBrowser()) {\r\n setEnv(createBrowserEnv());\r\n }\r\n if (isNodejs()) {\r\n setEnv(createNodejsEnv());\r\n }\r\n}\r\nfunction monkeyPatch(env) {\r\n if (!environment) {\r\n initialize();\r\n }\r\n if (!environment) {\r\n throw new Error('monkeyPatch - environment is not defined, check isNodejs() and isBrowser()');\r\n }\r\n var _a = env.Canvas, Canvas = _a === void 0 ? environment.Canvas : _a, _b = env.Image, Image = _b === void 0 ? environment.Image : _b;\r\n environment.Canvas = Canvas;\r\n environment.Image = Image;\r\n environment.createCanvasElement = env.createCanvasElement || (function () { return new Canvas(); });\r\n environment.createImageElement = env.createImageElement || (function () { return new Image(); });\r\n environment.ImageData = env.ImageData || environment.ImageData;\r\n environment.Video = env.Video || environment.Video;\r\n environment.fetch = env.fetch || environment.fetch;\r\n environment.readFile = env.readFile || environment.readFile;\r\n}\r\nexport var env = {\r\n getEnv: getEnv,\r\n setEnv: setEnv,\r\n initialize: initialize,\r\n createBrowserEnv: createBrowserEnv,\r\n createFileSystem: createFileSystem,\r\n createNodejsEnv: createNodejsEnv,\r\n monkeyPatch: monkeyPatch,\r\n isBrowser: isBrowser,\r\n isNodejs: isNodejs\r\n};\r\ninitialize();\r\n//# sourceMappingURL=index.js.map","import { env } from '../env';\r\nexport function resolveInput(arg) {\r\n if (!env.isNodejs() && typeof arg === 'string') {\r\n return document.getElementById(arg);\r\n }\r\n return arg;\r\n}\r\n//# sourceMappingURL=resolveInput.js.map","import { env } from '../env';\r\nimport { resolveInput } from './resolveInput';\r\nexport function getContext2dOrThrow(canvasArg) {\r\n var _a = env.getEnv(), Canvas = _a.Canvas, CanvasRenderingContext2D = _a.CanvasRenderingContext2D;\r\n if (canvasArg instanceof CanvasRenderingContext2D) {\r\n return canvasArg;\r\n }\r\n var canvas = resolveInput(canvasArg);\r\n if (!(canvas instanceof Canvas)) {\r\n throw new Error('resolveContext2d - expected canvas to be of instance of Canvas');\r\n }\r\n var ctx = canvas.getContext('2d');\r\n if (!ctx) {\r\n throw new Error('resolveContext2d - canvas 2d context is null');\r\n }\r\n return ctx;\r\n}\r\n//# sourceMappingURL=getContext2dOrThrow.js.map","import { getContext2dOrThrow } from '../dom/getContext2dOrThrow';\r\nimport { resolveInput } from '../dom/resolveInput';\r\nexport var AnchorPosition;\r\n(function (AnchorPosition) {\r\n AnchorPosition[\"TOP_LEFT\"] = \"TOP_LEFT\";\r\n AnchorPosition[\"TOP_RIGHT\"] = \"TOP_RIGHT\";\r\n AnchorPosition[\"BOTTOM_LEFT\"] = \"BOTTOM_LEFT\";\r\n AnchorPosition[\"BOTTOM_RIGHT\"] = \"BOTTOM_RIGHT\";\r\n})(AnchorPosition || (AnchorPosition = {}));\r\nvar DrawTextFieldOptions = /** @class */ (function () {\r\n function DrawTextFieldOptions(options) {\r\n if (options === void 0) { options = {}; }\r\n var anchorPosition = options.anchorPosition, backgroundColor = options.backgroundColor, fontColor = options.fontColor, fontSize = options.fontSize, fontStyle = options.fontStyle, padding = options.padding;\r\n this.anchorPosition = anchorPosition || AnchorPosition.TOP_LEFT;\r\n this.backgroundColor = backgroundColor || 'rgba(0, 0, 0, 0.5)';\r\n this.fontColor = fontColor || 'rgba(255, 255, 255, 1)';\r\n this.fontSize = fontSize || 14;\r\n this.fontStyle = fontStyle || 'Georgia';\r\n this.padding = padding || 4;\r\n }\r\n return DrawTextFieldOptions;\r\n}());\r\nexport { DrawTextFieldOptions };\r\nvar DrawTextField = /** @class */ (function () {\r\n function DrawTextField(text, anchor, options) {\r\n if (options === void 0) { options = {}; }\r\n this.text = typeof text === 'string'\r\n ? [text]\r\n : (text instanceof DrawTextField ? text.text : text);\r\n this.anchor = anchor;\r\n this.options = new DrawTextFieldOptions(options);\r\n }\r\n DrawTextField.prototype.measureWidth = function (ctx) {\r\n var padding = this.options.padding;\r\n return this.text.map(function (l) { return ctx.measureText(l).width; }).reduce(function (w0, w1) { return w0 < w1 ? w1 : w0; }, 0) + (2 * padding);\r\n };\r\n DrawTextField.prototype.measureHeight = function () {\r\n var _a = this.options, fontSize = _a.fontSize, padding = _a.padding;\r\n return this.text.length * fontSize + (2 * padding);\r\n };\r\n DrawTextField.prototype.getUpperLeft = function (ctx, canvasDims) {\r\n var anchorPosition = this.options.anchorPosition;\r\n var isShiftLeft = anchorPosition === AnchorPosition.BOTTOM_RIGHT || anchorPosition === AnchorPosition.TOP_RIGHT;\r\n var isShiftTop = anchorPosition === AnchorPosition.BOTTOM_LEFT || anchorPosition === AnchorPosition.BOTTOM_RIGHT;\r\n var textFieldWidth = this.measureWidth(ctx);\r\n var textFieldHeight = this.measureHeight();\r\n var x = (isShiftLeft ? this.anchor.x - textFieldWidth : this.anchor.x);\r\n var y = isShiftTop ? this.anchor.y - textFieldHeight : this.anchor.y;\r\n // adjust anchor if text box exceeds canvas borders\r\n if (canvasDims) {\r\n var width = canvasDims.width, height = canvasDims.height;\r\n var newX = Math.max(Math.min(x, width - textFieldWidth), 0);\r\n var newY = Math.max(Math.min(y, height - textFieldHeight), 0);\r\n return { x: newX, y: newY };\r\n }\r\n return { x: x, y: y };\r\n };\r\n DrawTextField.prototype.draw = function (canvasArg) {\r\n var canvas = resolveInput(canvasArg);\r\n var ctx = getContext2dOrThrow(canvas);\r\n var _a = this.options, backgroundColor = _a.backgroundColor, fontColor = _a.fontColor, fontSize = _a.fontSize, fontStyle = _a.fontStyle, padding = _a.padding;\r\n ctx.font = fontSize + \"px \" + fontStyle;\r\n var maxTextWidth = this.measureWidth(ctx);\r\n var textHeight = this.measureHeight();\r\n ctx.fillStyle = backgroundColor;\r\n var upperLeft = this.getUpperLeft(ctx, canvas);\r\n ctx.fillRect(upperLeft.x, upperLeft.y, maxTextWidth, textHeight);\r\n ctx.fillStyle = fontColor;\r\n this.text.forEach(function (textLine, i) {\r\n var x = padding + upperLeft.x;\r\n var y = padding + upperLeft.y + ((i + 1) * fontSize);\r\n ctx.fillText(textLine, x, y);\r\n });\r\n };\r\n return DrawTextField;\r\n}());\r\nexport { DrawTextField };\r\n//# sourceMappingURL=DrawTextField.js.map","import { Box } from '../classes';\r\nimport { getContext2dOrThrow } from '../dom/getContext2dOrThrow';\r\nimport { AnchorPosition, DrawTextField, DrawTextFieldOptions } from './DrawTextField';\r\nvar DrawBoxOptions = /** @class */ (function () {\r\n function DrawBoxOptions(options) {\r\n if (options === void 0) { options = {}; }\r\n var boxColor = options.boxColor, lineWidth = options.lineWidth, label = options.label, drawLabelOptions = options.drawLabelOptions;\r\n this.boxColor = boxColor || 'rgba(0, 0, 255, 1)';\r\n this.lineWidth = lineWidth || 2;\r\n this.label = label;\r\n var defaultDrawLabelOptions = {\r\n anchorPosition: AnchorPosition.BOTTOM_LEFT,\r\n backgroundColor: this.boxColor\r\n };\r\n this.drawLabelOptions = new DrawTextFieldOptions(Object.assign({}, defaultDrawLabelOptions, drawLabelOptions));\r\n }\r\n return DrawBoxOptions;\r\n}());\r\nexport { DrawBoxOptions };\r\nvar DrawBox = /** @class */ (function () {\r\n function DrawBox(box, options) {\r\n if (options === void 0) { options = {}; }\r\n this.box = new Box(box);\r\n this.options = new DrawBoxOptions(options);\r\n }\r\n DrawBox.prototype.draw = function (canvasArg) {\r\n var ctx = getContext2dOrThrow(canvasArg);\r\n var _a = this.options, boxColor = _a.boxColor, lineWidth = _a.lineWidth;\r\n var _b = this.box, x = _b.x, y = _b.y, width = _b.width, height = _b.height;\r\n ctx.strokeStyle = boxColor;\r\n ctx.lineWidth = lineWidth;\r\n ctx.strokeRect(x, y, width, height);\r\n var label = this.options.label;\r\n if (label) {\r\n new DrawTextField([label], { x: x - (lineWidth / 2), y: y }, this.options.drawLabelOptions).draw(canvasArg);\r\n }\r\n };\r\n return DrawBox;\r\n}());\r\nexport { DrawBox };\r\n//# sourceMappingURL=DrawBox.js.map","import * as tf from '@tensorflow/tfjs-core';\r\nexport function convLayer(x, params, padding, withRelu) {\r\n if (padding === void 0) { padding = 'same'; }\r\n if (withRelu === void 0) { withRelu = false; }\r\n return tf.tidy(function () {\r\n var out = tf.add(tf.conv2d(x, params.filters, [1, 1], padding), params.bias);\r\n return withRelu ? tf.relu(out) : out;\r\n });\r\n}\r\n//# sourceMappingURL=convLayer.js.map","export function disposeUnusedWeightTensors(weightMap, paramMappings) {\r\n Object.keys(weightMap).forEach(function (path) {\r\n if (!paramMappings.some(function (pm) { return pm.originalPath === path; })) {\r\n weightMap[path].dispose();\r\n }\r\n });\r\n}\r\n//# sourceMappingURL=disposeUnusedWeightTensors.js.map","import * as tf from '@tensorflow/tfjs-core';\r\nexport function extractConvParamsFactory(extractWeights, paramMappings) {\r\n return function (channelsIn, channelsOut, filterSize, mappedPrefix) {\r\n var filters = tf.tensor4d(extractWeights(channelsIn * channelsOut * filterSize * filterSize), [filterSize, filterSize, channelsIn, channelsOut]);\r\n var bias = tf.tensor1d(extractWeights(channelsOut));\r\n paramMappings.push({ paramPath: mappedPrefix + \"/filters\" }, { paramPath: mappedPrefix + \"/bias\" });\r\n return { filters: filters, bias: bias };\r\n };\r\n}\r\n//# sourceMappingURL=extractConvParamsFactory.js.map","import * as tf from '@tensorflow/tfjs-core';\r\nexport function extractFCParamsFactory(extractWeights, paramMappings) {\r\n return function (channelsIn, channelsOut, mappedPrefix) {\r\n var fc_weights = tf.tensor2d(extractWeights(channelsIn * channelsOut), [channelsIn, channelsOut]);\r\n var fc_bias = tf.tensor1d(extractWeights(channelsOut));\r\n paramMappings.push({ paramPath: mappedPrefix + \"/weights\" }, { paramPath: mappedPrefix + \"/bias\" });\r\n return {\r\n weights: fc_weights,\r\n bias: fc_bias\r\n };\r\n };\r\n}\r\n//# sourceMappingURL=extractFCParamsFactory.js.map","var SeparableConvParams = /** @class */ (function () {\r\n function SeparableConvParams(depthwise_filter, pointwise_filter, bias) {\r\n this.depthwise_filter = depthwise_filter;\r\n this.pointwise_filter = pointwise_filter;\r\n this.bias = bias;\r\n }\r\n return SeparableConvParams;\r\n}());\r\nexport { SeparableConvParams };\r\n//# sourceMappingURL=types.js.map","import * as tf from '@tensorflow/tfjs-core';\r\nimport { SeparableConvParams } from './types';\r\nexport function extractSeparableConvParamsFactory(extractWeights, paramMappings) {\r\n return function (channelsIn, channelsOut, mappedPrefix) {\r\n var depthwise_filter = tf.tensor4d(extractWeights(3 * 3 * channelsIn), [3, 3, channelsIn, 1]);\r\n var pointwise_filter = tf.tensor4d(extractWeights(channelsIn * channelsOut), [1, 1, channelsIn, channelsOut]);\r\n var bias = tf.tensor1d(extractWeights(channelsOut));\r\n paramMappings.push({ paramPath: mappedPrefix + \"/depthwise_filter\" }, { paramPath: mappedPrefix + \"/pointwise_filter\" }, { paramPath: mappedPrefix + \"/bias\" });\r\n return new SeparableConvParams(depthwise_filter, pointwise_filter, bias);\r\n };\r\n}\r\nexport function loadSeparableConvParamsFactory(extractWeightEntry) {\r\n return function (prefix) {\r\n var depthwise_filter = extractWeightEntry(prefix + \"/depthwise_filter\", 4);\r\n var pointwise_filter = extractWeightEntry(prefix + \"/pointwise_filter\", 4);\r\n var bias = extractWeightEntry(prefix + \"/bias\", 1);\r\n return new SeparableConvParams(depthwise_filter, pointwise_filter, bias);\r\n };\r\n}\r\n//# sourceMappingURL=extractSeparableConvParamsFactory.js.map","import { isTensor } from '../utils';\r\nexport function extractWeightEntryFactory(weightMap, paramMappings) {\r\n return function (originalPath, paramRank, mappedPath) {\r\n var tensor = weightMap[originalPath];\r\n if (!isTensor(tensor, paramRank)) {\r\n throw new Error(\"expected weightMap[\" + originalPath + \"] to be a Tensor\" + paramRank + \"D, instead have \" + tensor);\r\n }\r\n paramMappings.push({ originalPath: originalPath, paramPath: mappedPath || originalPath });\r\n return tensor;\r\n };\r\n}\r\n//# sourceMappingURL=extractWeightEntryFactory.js.map","export function extractWeightsFactory(weights) {\r\n var remainingWeights = weights;\r\n function extractWeights(numWeights) {\r\n var ret = remainingWeights.slice(0, numWeights);\r\n remainingWeights = remainingWeights.slice(numWeights);\r\n return ret;\r\n }\r\n function getRemainingWeights() {\r\n return remainingWeights;\r\n }\r\n return {\r\n extractWeights: extractWeights,\r\n getRemainingWeights: getRemainingWeights\r\n };\r\n}\r\n//# sourceMappingURL=extractWeightsFactory.js.map","export function getModelUris(uri, defaultModelName) {\r\n var defaultManifestFilename = defaultModelName + \"-weights_manifest.json\";\r\n if (!uri) {\r\n return {\r\n modelBaseUri: '',\r\n manifestUri: defaultManifestFilename\r\n };\r\n }\r\n if (uri === '/') {\r\n return {\r\n modelBaseUri: '/',\r\n manifestUri: \"/\" + defaultManifestFilename\r\n };\r\n }\r\n var protocol = uri.startsWith('http://') ? 'http://' : uri.startsWith('https://') ? 'https://' : '';\r\n uri = uri.replace(protocol, '');\r\n var parts = uri.split('/').filter(function (s) { return s; });\r\n var manifestFile = uri.endsWith('.json')\r\n ? parts[parts.length - 1]\r\n : defaultManifestFilename;\r\n var modelBaseUri = protocol + (uri.endsWith('.json') ? parts.slice(0, parts.length - 1) : parts).join('/');\r\n modelBaseUri = uri.startsWith('/') ? \"/\" + modelBaseUri : modelBaseUri;\r\n return {\r\n modelBaseUri: modelBaseUri,\r\n manifestUri: modelBaseUri === '/' ? \"/\" + manifestFile : modelBaseUri + \"/\" + manifestFile\r\n };\r\n}\r\n//# sourceMappingURL=getModelUris.js.map","import { env } from '../env';\r\nexport function isMediaLoaded(media) {\r\n var _a = env.getEnv(), Image = _a.Image, Video = _a.Video;\r\n return (media instanceof Image && media.complete)\r\n || (media instanceof Video && media.readyState >= 3);\r\n}\r\n//# sourceMappingURL=isMediaLoaded.js.map","import { env } from '../env';\r\nimport { isMediaLoaded } from './isMediaLoaded';\r\nexport function awaitMediaLoaded(media) {\r\n return new Promise(function (resolve, reject) {\r\n if (media instanceof env.getEnv().Canvas || isMediaLoaded(media)) {\r\n return resolve();\r\n }\r\n function onLoad(e) {\r\n if (!e.currentTarget)\r\n return;\r\n e.currentTarget.removeEventListener('load', onLoad);\r\n e.currentTarget.removeEventListener('error', onError);\r\n resolve(e);\r\n }\r\n function onError(e) {\r\n if (!e.currentTarget)\r\n return;\r\n e.currentTarget.removeEventListener('load', onLoad);\r\n e.currentTarget.removeEventListener('error', onError);\r\n reject(e);\r\n }\r\n media.addEventListener('load', onLoad);\r\n media.addEventListener('error', onError);\r\n });\r\n}\r\n//# sourceMappingURL=awaitMediaLoaded.js.map","import { env } from '../env';\r\nexport function bufferToImage(buf) {\r\n return new Promise(function (resolve, reject) {\r\n if (!(buf instanceof Blob)) {\r\n return reject('bufferToImage - expected buf to be of type: Blob');\r\n }\r\n var reader = new FileReader();\r\n reader.onload = function () {\r\n if (typeof reader.result !== 'string') {\r\n return reject('bufferToImage - expected reader.result to be a string, in onload');\r\n }\r\n var img = env.getEnv().createImageElement();\r\n img.onload = function () { return resolve(img); };\r\n img.onerror = reject;\r\n img.src = reader.result;\r\n };\r\n reader.onerror = reject;\r\n reader.readAsDataURL(buf);\r\n });\r\n}\r\n//# sourceMappingURL=bufferToImage.js.map","import { Dimensions } from '../classes/Dimensions';\r\nimport { env } from '../env';\r\nexport function getMediaDimensions(input) {\r\n var _a = env.getEnv(), Image = _a.Image, Video = _a.Video;\r\n if (input instanceof Image) {\r\n return new Dimensions(input.naturalWidth, input.naturalHeight);\r\n }\r\n if (input instanceof Video) {\r\n return new Dimensions(input.videoWidth, input.videoHeight);\r\n }\r\n return new Dimensions(input.width, input.height);\r\n}\r\n//# sourceMappingURL=getMediaDimensions.js.map","import { env } from '../env';\r\nimport { getContext2dOrThrow } from './getContext2dOrThrow';\r\nimport { getMediaDimensions } from './getMediaDimensions';\r\nimport { isMediaLoaded } from './isMediaLoaded';\r\nexport function createCanvas(_a) {\r\n var width = _a.width, height = _a.height;\r\n var createCanvasElement = env.getEnv().createCanvasElement;\r\n var canvas = createCanvasElement();\r\n canvas.width = width;\r\n canvas.height = height;\r\n return canvas;\r\n}\r\nexport function createCanvasFromMedia(media, dims) {\r\n var ImageData = env.getEnv().ImageData;\r\n if (!(media instanceof ImageData) && !isMediaLoaded(media)) {\r\n throw new Error('createCanvasFromMedia - media has not finished loading yet');\r\n }\r\n var _a = dims || getMediaDimensions(media), width = _a.width, height = _a.height;\r\n var canvas = createCanvas({ width: width, height: height });\r\n if (media instanceof ImageData) {\r\n getContext2dOrThrow(canvas).putImageData(media, 0, 0);\r\n }\r\n else {\r\n getContext2dOrThrow(canvas).drawImage(media, 0, 0, width, height);\r\n }\r\n return canvas;\r\n}\r\n//# sourceMappingURL=createCanvas.js.map","import * as tslib_1 from \"tslib\";\r\nimport { env } from '../env';\r\nexport function fetchOrThrow(url, init) {\r\n return tslib_1.__awaiter(this, void 0, void 0, function () {\r\n var fetch, res;\r\n return tslib_1.__generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0:\r\n fetch = env.getEnv().fetch;\r\n return [4 /*yield*/, fetch(url, init)];\r\n case 1:\r\n res = _a.sent();\r\n if (!(res.status < 400)) {\r\n throw new Error(\"failed to fetch: (\" + res.status + \") \" + res.statusText + \", from url: \" + res.url);\r\n }\r\n return [2 /*return*/, res];\r\n }\r\n });\r\n });\r\n}\r\n//# sourceMappingURL=fetchOrThrow.js.map","import * as tslib_1 from \"tslib\";\r\nimport { bufferToImage } from './bufferToImage';\r\nimport { fetchOrThrow } from './fetchOrThrow';\r\nexport function fetchImage(uri) {\r\n return tslib_1.__awaiter(this, void 0, void 0, function () {\r\n var res, blob;\r\n return tslib_1.__generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0: return [4 /*yield*/, fetchOrThrow(uri)];\r\n case 1:\r\n res = _a.sent();\r\n return [4 /*yield*/, (res).blob()];\r\n case 2:\r\n blob = _a.sent();\r\n if (!blob.type.startsWith('image/')) {\r\n throw new Error(\"fetchImage - expected blob type to be of type image/*, instead have: \" + blob.type + \", for url: \" + res.url);\r\n }\r\n return [2 /*return*/, bufferToImage(blob)];\r\n }\r\n });\r\n });\r\n}\r\n//# sourceMappingURL=fetchImage.js.map","import * as tslib_1 from \"tslib\";\r\nimport { fetchOrThrow } from './fetchOrThrow';\r\nexport function fetchJson(uri) {\r\n return tslib_1.__awaiter(this, void 0, void 0, function () {\r\n return tslib_1.__generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0: return [4 /*yield*/, fetchOrThrow(uri)];\r\n case 1: return [2 /*return*/, (_a.sent()).json()];\r\n }\r\n });\r\n });\r\n}\r\n//# sourceMappingURL=fetchJson.js.map","import * as tslib_1 from \"tslib\";\r\nimport { fetchOrThrow } from './fetchOrThrow';\r\nexport function fetchNetWeights(uri) {\r\n return tslib_1.__awaiter(this, void 0, void 0, function () {\r\n var _a;\r\n return tslib_1.__generator(this, function (_b) {\r\n switch (_b.label) {\r\n case 0:\r\n _a = Float32Array.bind;\r\n return [4 /*yield*/, fetchOrThrow(uri)];\r\n case 1: return [4 /*yield*/, (_b.sent()).arrayBuffer()];\r\n case 2: return [2 /*return*/, new (_a.apply(Float32Array, [void 0, _b.sent()]))()];\r\n }\r\n });\r\n });\r\n}\r\n//# sourceMappingURL=fetchNetWeights.js.map","import * as tslib_1 from \"tslib\";\r\nimport * as tf from '@tensorflow/tfjs-core';\r\nimport { env } from '../env';\r\nimport { isTensor4D } from '../utils';\r\nexport function imageTensorToCanvas(imgTensor, canvas) {\r\n return tslib_1.__awaiter(this, void 0, void 0, function () {\r\n var targetCanvas, _a, height, width, numChannels, imgTensor3D;\r\n return tslib_1.__generator(this, function (_b) {\r\n switch (_b.label) {\r\n case 0:\r\n targetCanvas = canvas || env.getEnv().createCanvasElement();\r\n _a = imgTensor.shape.slice(isTensor4D(imgTensor) ? 1 : 0), height = _a[0], width = _a[1], numChannels = _a[2];\r\n imgTensor3D = tf.tidy(function () { return imgTensor.as3D(height, width, numChannels).toInt(); });\r\n return [4 /*yield*/, tf.browser.toPixels(imgTensor3D, targetCanvas)];\r\n case 1:\r\n _b.sent();\r\n imgTensor3D.dispose();\r\n return [2 /*return*/, targetCanvas];\r\n }\r\n });\r\n });\r\n}\r\n//# sourceMappingURL=imageTensorToCanvas.js.map","import { env } from '../env';\r\nimport { createCanvas, createCanvasFromMedia } from './createCanvas';\r\nimport { getContext2dOrThrow } from './getContext2dOrThrow';\r\nimport { getMediaDimensions } from './getMediaDimensions';\r\nexport function imageToSquare(input, inputSize, centerImage) {\r\n if (centerImage === void 0) { centerImage = false; }\r\n var _a = env.getEnv(), Image = _a.Image, Canvas = _a.Canvas;\r\n if (!(input instanceof Image || input instanceof Canvas)) {\r\n throw new Error('imageToSquare - expected arg0 to be HTMLImageElement | HTMLCanvasElement');\r\n }\r\n var dims = getMediaDimensions(input);\r\n var scale = inputSize / Math.max(dims.height, dims.width);\r\n var width = scale * dims.width;\r\n var height = scale * dims.height;\r\n var targetCanvas = createCanvas({ width: inputSize, height: inputSize });\r\n var inputCanvas = input instanceof Canvas ? input : createCanvasFromMedia(input);\r\n var offset = Math.abs(width - height) / 2;\r\n var dx = centerImage && width < height ? offset : 0;\r\n var dy = centerImage && height < width ? offset : 0;\r\n getContext2dOrThrow(targetCanvas).drawImage(inputCanvas, dx, dy, width, height);\r\n return targetCanvas;\r\n}\r\n//# sourceMappingURL=imageToSquare.js.map","import { env } from '../env';\r\nexport function isMediaElement(input) {\r\n var _a = env.getEnv(), Image = _a.Image, Canvas = _a.Canvas, Video = _a.Video;\r\n return input instanceof Image\r\n || input instanceof Canvas\r\n || input instanceof Video;\r\n}\r\n//# sourceMappingURL=isMediaElement.js.map","import * as tslib_1 from \"tslib\";\r\nimport * as tf from '@tensorflow/tfjs-core';\r\nimport { getModelUris } from '../common/getModelUris';\r\nimport { fetchJson } from './fetchJson';\r\nexport function loadWeightMap(uri, defaultModelName) {\r\n return tslib_1.__awaiter(this, void 0, void 0, function () {\r\n var _a, manifestUri, modelBaseUri, manifest;\r\n return tslib_1.__generator(this, function (_b) {\r\n switch (_b.label) {\r\n case 0:\r\n _a = getModelUris(uri, defaultModelName), manifestUri = _a.manifestUri, modelBaseUri = _a.modelBaseUri;\r\n return [4 /*yield*/, fetchJson(manifestUri)];\r\n case 1:\r\n manifest = _b.sent();\r\n return [2 /*return*/, tf.io.loadWeights(manifest, modelBaseUri)];\r\n }\r\n });\r\n });\r\n}\r\n//# sourceMappingURL=loadWeightMap.js.map","import { getMediaDimensions } from './getMediaDimensions';\r\nexport function matchDimensions(input, reference, useMediaDimensions) {\r\n if (useMediaDimensions === void 0) { useMediaDimensions = false; }\r\n var _a = useMediaDimensions\r\n ? getMediaDimensions(reference)\r\n : reference, width = _a.width, height = _a.height;\r\n input.width = width;\r\n input.height = height;\r\n return { width: width, height: height };\r\n}\r\n//# sourceMappingURL=matchDimensions.js.map","import * as tf from '@tensorflow/tfjs-core';\r\n/**\r\n * Pads the smaller dimension of an image tensor with zeros, such that width === height.\r\n *\r\n * @param imgTensor The image tensor.\r\n * @param isCenterImage (optional, default: false) If true, add an equal amount of padding on\r\n * both sides of the minor dimension oof the image.\r\n * @returns The padded tensor with width === height.\r\n */\r\nexport function padToSquare(imgTensor, isCenterImage) {\r\n if (isCenterImage === void 0) { isCenterImage = false; }\r\n return tf.tidy(function () {\r\n var _a = imgTensor.shape.slice(1), height = _a[0], width = _a[1];\r\n if (height === width) {\r\n return imgTensor;\r\n }\r\n var dimDiff = Math.abs(height - width);\r\n var paddingAmount = Math.round(dimDiff * (isCenterImage ? 0.5 : 1));\r\n var paddingAxis = height > width ? 2 : 1;\r\n var createPaddingTensor = function (paddingAmount) {\r\n var paddingTensorShape = imgTensor.shape.slice();\r\n paddingTensorShape[paddingAxis] = paddingAmount;\r\n return tf.fill(paddingTensorShape, 0);\r\n };\r\n var paddingTensorAppend = createPaddingTensor(paddingAmount);\r\n var remainingPaddingAmount = dimDiff - paddingTensorAppend.shape[paddingAxis];\r\n var paddingTensorPrepend = isCenterImage && remainingPaddingAmount\r\n ? createPaddingTensor(remainingPaddingAmount)\r\n : null;\r\n var tensorsToStack = [\r\n paddingTensorPrepend,\r\n imgTensor,\r\n paddingTensorAppend\r\n ]\r\n .filter(function (t) { return !!t; })\r\n .map(function (t) { return t.toFloat(); });\r\n return tf.concat(tensorsToStack, paddingAxis);\r\n });\r\n}\r\n//# sourceMappingURL=padToSquare.js.map","import * as tf from '@tensorflow/tfjs-core';\r\nimport { env } from '../env';\r\nimport { padToSquare } from '../ops/padToSquare';\r\nimport { computeReshapedDimensions, isTensor3D, isTensor4D, range } from '../utils';\r\nimport { createCanvasFromMedia } from './createCanvas';\r\nimport { imageToSquare } from './imageToSquare';\r\nvar NetInput = /** @class */ (function () {\r\n function NetInput(inputs, treatAsBatchInput) {\r\n var _this = this;\r\n if (treatAsBatchInput === void 0) { treatAsBatchInput = false; }\r\n this._imageTensors = [];\r\n this._canvases = [];\r\n this._treatAsBatchInput = false;\r\n this._inputDimensions = [];\r\n if (!Array.isArray(inputs)) {\r\n throw new Error(\"NetInput.constructor - expected inputs to be an Array of TResolvedNetInput or to be instanceof tf.Tensor4D, instead have \" + inputs);\r\n }\r\n this._treatAsBatchInput = treatAsBatchInput;\r\n this._batchSize = inputs.length;\r\n inputs.forEach(function (input, idx) {\r\n if (isTensor3D(input)) {\r\n _this._imageTensors[idx] = input;\r\n _this._inputDimensions[idx] = input.shape;\r\n return;\r\n }\r\n if (isTensor4D(input)) {\r\n var batchSize = input.shape[0];\r\n if (batchSize !== 1) {\r\n throw new Error(\"NetInput - tf.Tensor4D with batchSize \" + batchSize + \" passed, but not supported in input array\");\r\n }\r\n _this._imageTensors[idx] = input;\r\n _this._inputDimensions[idx] = input.shape.slice(1);\r\n return;\r\n }\r\n var canvas = input instanceof env.getEnv().Canvas ? input : createCanvasFromMedia(input);\r\n _this._canvases[idx] = canvas;\r\n _this._inputDimensions[idx] = [canvas.height, canvas.width, 3];\r\n });\r\n }\r\n Object.defineProperty(NetInput.prototype, \"imageTensors\", {\r\n get: function () {\r\n return this._imageTensors;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(NetInput.prototype, \"canvases\", {\r\n get: function () {\r\n return this._canvases;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(NetInput.prototype, \"isBatchInput\", {\r\n get: function () {\r\n return this.batchSize > 1 || this._treatAsBatchInput;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(NetInput.prototype, \"batchSize\", {\r\n get: function () {\r\n return this._batchSize;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(NetInput.prototype, \"inputDimensions\", {\r\n get: function () {\r\n return this._inputDimensions;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(NetInput.prototype, \"inputSize\", {\r\n get: function () {\r\n return this._inputSize;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(NetInput.prototype, \"reshapedInputDimensions\", {\r\n get: function () {\r\n var _this = this;\r\n return range(this.batchSize, 0, 1).map(function (_, batchIdx) { return _this.getReshapedInputDimensions(batchIdx); });\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n NetInput.prototype.getInput = function (batchIdx) {\r\n return this.canvases[batchIdx] || this.imageTensors[batchIdx];\r\n };\r\n NetInput.prototype.getInputDimensions = function (batchIdx) {\r\n return this._inputDimensions[batchIdx];\r\n };\r\n NetInput.prototype.getInputHeight = function (batchIdx) {\r\n return this._inputDimensions[batchIdx][0];\r\n };\r\n NetInput.prototype.getInputWidth = function (batchIdx) {\r\n return this._inputDimensions[batchIdx][1];\r\n };\r\n NetInput.prototype.getReshapedInputDimensions = function (batchIdx) {\r\n if (typeof this.inputSize !== 'number') {\r\n throw new Error('getReshapedInputDimensions - inputSize not set, toBatchTensor has not been called yet');\r\n }\r\n var width = this.getInputWidth(batchIdx);\r\n var height = this.getInputHeight(batchIdx);\r\n return computeReshapedDimensions({ width: width, height: height }, this.inputSize);\r\n };\r\n /**\r\n * Create a batch tensor from all input canvases and tensors\r\n * with size [batchSize, inputSize, inputSize, 3].\r\n *\r\n * @param inputSize Height and width of the tensor.\r\n * @param isCenterImage (optional, default: false) If true, add an equal amount of padding on\r\n * both sides of the minor dimension oof the image.\r\n * @returns The batch tensor.\r\n */\r\n NetInput.prototype.toBatchTensor = function (inputSize, isCenterInputs) {\r\n var _this = this;\r\n if (isCenterInputs === void 0) { isCenterInputs = true; }\r\n this._inputSize = inputSize;\r\n return tf.tidy(function () {\r\n var inputTensors = range(_this.batchSize, 0, 1).map(function (batchIdx) {\r\n var input = _this.getInput(batchIdx);\r\n if (input instanceof tf.Tensor) {\r\n var imgTensor = isTensor4D(input) ? input : input.expandDims();\r\n imgTensor = padToSquare(imgTensor, isCenterInputs);\r\n if (imgTensor.shape[1] !== inputSize || imgTensor.shape[2] !== inputSize) {\r\n imgTensor = tf.image.resizeBilinear(imgTensor, [inputSize, inputSize]);\r\n }\r\n return imgTensor.as3D(inputSize, inputSize, 3);\r\n }\r\n if (input instanceof env.getEnv().Canvas) {\r\n return tf.browser.fromPixels(imageToSquare(input, inputSize, isCenterInputs));\r\n }\r\n throw new Error(\"toBatchTensor - at batchIdx \" + batchIdx + \", expected input to be instanceof tf.Tensor or instanceof HTMLCanvasElement, instead have \" + input);\r\n });\r\n var batchTensor = tf.stack(inputTensors.map(function (t) { return t.toFloat(); })).as4D(_this.batchSize, inputSize, inputSize, 3);\r\n return batchTensor;\r\n });\r\n };\r\n return NetInput;\r\n}());\r\nexport { NetInput };\r\n//# sourceMappingURL=NetInput.js.map","import * as tslib_1 from \"tslib\";\r\nimport { isTensor3D, isTensor4D } from '../utils';\r\nimport { awaitMediaLoaded } from './awaitMediaLoaded';\r\nimport { isMediaElement } from './isMediaElement';\r\nimport { NetInput } from './NetInput';\r\nimport { resolveInput } from './resolveInput';\r\n/**\r\n * Validates the input to make sure, they are valid net inputs and awaits all media elements\r\n * to be finished loading.\r\n *\r\n * @param input The input, which can be a media element or an array of different media elements.\r\n * @returns A NetInput instance, which can be passed into one of the neural networks.\r\n */\r\nexport function toNetInput(inputs) {\r\n return tslib_1.__awaiter(this, void 0, void 0, function () {\r\n var inputArgArray, getIdxHint, inputArray;\r\n return tslib_1.__generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0:\r\n if (inputs instanceof NetInput) {\r\n return [2 /*return*/, inputs];\r\n }\r\n inputArgArray = Array.isArray(inputs)\r\n ? inputs\r\n : [inputs];\r\n if (!inputArgArray.length) {\r\n throw new Error('toNetInput - empty array passed as input');\r\n }\r\n getIdxHint = function (idx) { return Array.isArray(inputs) ? \" at input index \" + idx + \":\" : ''; };\r\n inputArray = inputArgArray.map(resolveInput);\r\n inputArray.forEach(function (input, i) {\r\n if (!isMediaElement(input) && !isTensor3D(input) && !isTensor4D(input)) {\r\n if (typeof inputArgArray[i] === 'string') {\r\n throw new Error(\"toNetInput -\" + getIdxHint(i) + \" string passed, but could not resolve HTMLElement for element id \" + inputArgArray[i]);\r\n }\r\n throw new Error(\"toNetInput -\" + getIdxHint(i) + \" expected media to be of type HTMLImageElement | HTMLVideoElement | HTMLCanvasElement | tf.Tensor3D, or to be an element id\");\r\n }\r\n if (isTensor4D(input)) {\r\n // if tf.Tensor4D is passed in the input array, the batch size has to be 1\r\n var batchSize = input.shape[0];\r\n if (batchSize !== 1) {\r\n throw new Error(\"toNetInput -\" + getIdxHint(i) + \" tf.Tensor4D with batchSize \" + batchSize + \" passed, but not supported in input array\");\r\n }\r\n }\r\n });\r\n // wait for all media elements being loaded\r\n return [4 /*yield*/, Promise.all(inputArray.map(function (input) { return isMediaElement(input) && awaitMediaLoaded(input); }))];\r\n case 1:\r\n // wait for all media elements being loaded\r\n _a.sent();\r\n return [2 /*return*/, new NetInput(inputArray, Array.isArray(inputs))];\r\n }\r\n });\r\n });\r\n}\r\n//# sourceMappingURL=toNetInput.js.map","import * as tslib_1 from \"tslib\";\r\nimport * as tf from '@tensorflow/tfjs-core';\r\nimport { getModelUris } from './common/getModelUris';\r\nimport { loadWeightMap } from './dom';\r\nimport { env } from './env';\r\nvar NeuralNetwork = /** @class */ (function () {\r\n function NeuralNetwork(_name) {\r\n this._name = _name;\r\n this._params = undefined;\r\n this._paramMappings = [];\r\n }\r\n Object.defineProperty(NeuralNetwork.prototype, \"params\", {\r\n get: function () { return this._params; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(NeuralNetwork.prototype, \"paramMappings\", {\r\n get: function () { return this._paramMappings; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(NeuralNetwork.prototype, \"isLoaded\", {\r\n get: function () { return !!this.params; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n NeuralNetwork.prototype.getParamFromPath = function (paramPath) {\r\n var _a = this.traversePropertyPath(paramPath), obj = _a.obj, objProp = _a.objProp;\r\n return obj[objProp];\r\n };\r\n NeuralNetwork.prototype.reassignParamFromPath = function (paramPath, tensor) {\r\n var _a = this.traversePropertyPath(paramPath), obj = _a.obj, objProp = _a.objProp;\r\n obj[objProp].dispose();\r\n obj[objProp] = tensor;\r\n };\r\n NeuralNetwork.prototype.getParamList = function () {\r\n var _this = this;\r\n return this._paramMappings.map(function (_a) {\r\n var paramPath = _a.paramPath;\r\n return ({\r\n path: paramPath,\r\n tensor: _this.getParamFromPath(paramPath)\r\n });\r\n });\r\n };\r\n NeuralNetwork.prototype.getTrainableParams = function () {\r\n return this.getParamList().filter(function (param) { return param.tensor instanceof tf.Variable; });\r\n };\r\n NeuralNetwork.prototype.getFrozenParams = function () {\r\n return this.getParamList().filter(function (param) { return !(param.tensor instanceof tf.Variable); });\r\n };\r\n NeuralNetwork.prototype.variable = function () {\r\n var _this = this;\r\n this.getFrozenParams().forEach(function (_a) {\r\n var path = _a.path, tensor = _a.tensor;\r\n _this.reassignParamFromPath(path, tensor.variable());\r\n });\r\n };\r\n NeuralNetwork.prototype.freeze = function () {\r\n var _this = this;\r\n this.getTrainableParams().forEach(function (_a) {\r\n var path = _a.path, variable = _a.tensor;\r\n var tensor = tf.tensor(variable.dataSync());\r\n variable.dispose();\r\n _this.reassignParamFromPath(path, tensor);\r\n });\r\n };\r\n NeuralNetwork.prototype.dispose = function (throwOnRedispose) {\r\n if (throwOnRedispose === void 0) { throwOnRedispose = true; }\r\n this.getParamList().forEach(function (param) {\r\n if (throwOnRedispose && param.tensor.isDisposed) {\r\n throw new Error(\"param tensor has already been disposed for path \" + param.path);\r\n }\r\n param.tensor.dispose();\r\n });\r\n this._params = undefined;\r\n };\r\n NeuralNetwork.prototype.serializeParams = function () {\r\n return new Float32Array(this.getParamList()\r\n .map(function (_a) {\r\n var tensor = _a.tensor;\r\n return Array.from(tensor.dataSync());\r\n })\r\n .reduce(function (flat, arr) { return flat.concat(arr); }));\r\n };\r\n NeuralNetwork.prototype.load = function (weightsOrUrl) {\r\n return tslib_1.__awaiter(this, void 0, void 0, function () {\r\n return tslib_1.__generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0:\r\n if (weightsOrUrl instanceof Float32Array) {\r\n this.extractWeights(weightsOrUrl);\r\n return [2 /*return*/];\r\n }\r\n return [4 /*yield*/, this.loadFromUri(weightsOrUrl)];\r\n case 1:\r\n _a.sent();\r\n return [2 /*return*/];\r\n }\r\n });\r\n });\r\n };\r\n NeuralNetwork.prototype.loadFromUri = function (uri) {\r\n return tslib_1.__awaiter(this, void 0, void 0, function () {\r\n var weightMap;\r\n return tslib_1.__generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0:\r\n if (uri && typeof uri !== 'string') {\r\n throw new Error(this._name + \".loadFromUri - expected model uri\");\r\n }\r\n return [4 /*yield*/, loadWeightMap(uri, this.getDefaultModelName())];\r\n case 1:\r\n weightMap = _a.sent();\r\n this.loadFromWeightMap(weightMap);\r\n return [2 /*return*/];\r\n }\r\n });\r\n });\r\n };\r\n NeuralNetwork.prototype.loadFromDisk = function (filePath) {\r\n return tslib_1.__awaiter(this, void 0, void 0, function () {\r\n var readFile, _a, manifestUri, modelBaseUri, fetchWeightsFromDisk, loadWeights, manifest, _b, _c, weightMap;\r\n return tslib_1.__generator(this, function (_d) {\r\n switch (_d.label) {\r\n case 0:\r\n if (filePath && typeof filePath !== 'string') {\r\n throw new Error(this._name + \".loadFromDisk - expected model file path\");\r\n }\r\n readFile = env.getEnv().readFile;\r\n _a = getModelUris(filePath, this.getDefaultModelName()), manifestUri = _a.manifestUri, modelBaseUri = _a.modelBaseUri;\r\n fetchWeightsFromDisk = function (filePaths) { return Promise.all(filePaths.map(function (filePath) { return readFile(filePath).then(function (buf) { return buf.buffer; }); })); };\r\n loadWeights = tf.io.weightsLoaderFactory(fetchWeightsFromDisk);\r\n _c = (_b = JSON).parse;\r\n return [4 /*yield*/, readFile(manifestUri)];\r\n case 1:\r\n manifest = _c.apply(_b, [(_d.sent()).toString()]);\r\n return [4 /*yield*/, loadWeights(manifest, modelBaseUri)];\r\n case 2:\r\n weightMap = _d.sent();\r\n this.loadFromWeightMap(weightMap);\r\n return [2 /*return*/];\r\n }\r\n });\r\n });\r\n };\r\n NeuralNetwork.prototype.loadFromWeightMap = function (weightMap) {\r\n var _a = this.extractParamsFromWeigthMap(weightMap), paramMappings = _a.paramMappings, params = _a.params;\r\n this._paramMappings = paramMappings;\r\n this._params = params;\r\n };\r\n NeuralNetwork.prototype.extractWeights = function (weights) {\r\n var _a = this.extractParams(weights), paramMappings = _a.paramMappings, params = _a.params;\r\n this._paramMappings = paramMappings;\r\n this._params = params;\r\n };\r\n NeuralNetwork.prototype.traversePropertyPath = function (paramPath) {\r\n if (!this.params) {\r\n throw new Error(\"traversePropertyPath - model has no loaded params\");\r\n }\r\n var result = paramPath.split('/').reduce(function (res, objProp) {\r\n if (!res.nextObj.hasOwnProperty(objProp)) {\r\n throw new Error(\"traversePropertyPath - object does not have property \" + objProp + \", for path \" + paramPath);\r\n }\r\n return { obj: res.nextObj, objProp: objProp, nextObj: res.nextObj[objProp] };\r\n }, { nextObj: this.params });\r\n var obj = result.obj, objProp = result.objProp;\r\n if (!obj || !objProp || !(obj[objProp] instanceof tf.Tensor)) {\r\n throw new Error(\"traversePropertyPath - parameter is not a tensor, for path \" + paramPath);\r\n }\r\n return { obj: obj, objProp: objProp };\r\n };\r\n return NeuralNetwork;\r\n}());\r\nexport { NeuralNetwork };\r\n//# sourceMappingURL=NeuralNetwork.js.map","export function iou(box1, box2, isIOU) {\r\n if (isIOU === void 0) { isIOU = true; }\r\n var width = Math.max(0.0, Math.min(box1.right, box2.right) - Math.max(box1.left, box2.left));\r\n var height = Math.max(0.0, Math.min(box1.bottom, box2.bottom) - Math.max(box1.top, box2.top));\r\n var interSection = width * height;\r\n return isIOU\r\n ? interSection / (box1.area + box2.area - interSection)\r\n : interSection / Math.min(box1.area, box2.area);\r\n}\r\n//# sourceMappingURL=iou.js.map","import { BoundingBox } from '../classes';\r\nexport function minBbox(pts) {\r\n var xs = pts.map(function (pt) { return pt.x; });\r\n var ys = pts.map(function (pt) { return pt.y; });\r\n var minX = xs.reduce(function (min, x) { return x < min ? x : min; }, Infinity);\r\n var minY = ys.reduce(function (min, y) { return y < min ? y : min; }, Infinity);\r\n var maxX = xs.reduce(function (max, x) { return max < x ? x : max; }, 0);\r\n var maxY = ys.reduce(function (max, y) { return max < y ? y : max; }, 0);\r\n return new BoundingBox(minX, minY, maxX, maxY);\r\n}\r\n//# sourceMappingURL=minBbox.js.map","import { iou } from './iou';\r\nexport function nonMaxSuppression(boxes, scores, iouThreshold, isIOU) {\r\n if (isIOU === void 0) { isIOU = true; }\r\n var indicesSortedByScore = scores\r\n .map(function (score, boxIndex) { return ({ score: score, boxIndex: boxIndex }); })\r\n .sort(function (c1, c2) { return c1.score - c2.score; })\r\n .map(function (c) { return c.boxIndex; });\r\n var pick = [];\r\n var _loop_1 = function () {\r\n var curr = indicesSortedByScore.pop();\r\n pick.push(curr);\r\n var indices = indicesSortedByScore;\r\n var outputs = [];\r\n for (var i = 0; i < indices.length; i++) {\r\n var idx = indices[i];\r\n var currBox = boxes[curr];\r\n var idxBox = boxes[idx];\r\n outputs.push(iou(currBox, idxBox, isIOU));\r\n }\r\n indicesSortedByScore = indicesSortedByScore.filter(function (_, j) { return outputs[j] <= iouThreshold; });\r\n };\r\n while (indicesSortedByScore.length > 0) {\r\n _loop_1();\r\n }\r\n return pick;\r\n}\r\n//# sourceMappingURL=nonMaxSuppression.js.map","import * as tf from '@tensorflow/tfjs-core';\r\nexport function normalize(x, meanRgb) {\r\n return tf.tidy(function () {\r\n var r = meanRgb[0], g = meanRgb[1], b = meanRgb[2];\r\n var avg_r = tf.fill(x.shape.slice(0, 3).concat([1]), r);\r\n var avg_g = tf.fill(x.shape.slice(0, 3).concat([1]), g);\r\n var avg_b = tf.fill(x.shape.slice(0, 3).concat([1]), b);\r\n var avg_rgb = tf.concat([avg_r, avg_g, avg_b], 3);\r\n return tf.sub(x, avg_rgb);\r\n });\r\n}\r\n//# sourceMappingURL=normalize.js.map","export function shuffleArray(inputArray) {\r\n var array = inputArray.slice();\r\n for (var i = array.length - 1; i > 0; i--) {\r\n var j = Math.floor(Math.random() * (i + 1));\r\n var x = array[i];\r\n array[i] = array[j];\r\n array[j] = x;\r\n }\r\n return array;\r\n}\r\n//# sourceMappingURL=shuffleArray.js.map","export * from './iou';\r\nexport * from './minBbox';\r\nexport * from './nonMaxSuppression';\r\nexport * from './normalize';\r\nexport * from './padToSquare';\r\nexport * from './shuffleArray';\r\nexport function sigmoid(x) {\r\n return 1 / (1 + Math.exp(-x));\r\n}\r\nexport function inverseSigmoid(x) {\r\n return Math.log(x / (1 - x));\r\n}\r\n//# sourceMappingURL=index.js.map","var isNumber = function (arg) { return typeof arg === 'number'; };\r\nexport function validateConfig(config) {\r\n if (!config) {\r\n throw new Error(\"invalid config: \" + config);\r\n }\r\n if (typeof config.withSeparableConvs !== 'boolean') {\r\n throw new Error(\"config.withSeparableConvs has to be a boolean, have: \" + config.withSeparableConvs);\r\n }\r\n if (!isNumber(config.iouThreshold) || config.iouThreshold < 0 || config.iouThreshold > 1.0) {\r\n throw new Error(\"config.iouThreshold has to be a number between [0, 1], have: \" + config.iouThreshold);\r\n }\r\n if (!Array.isArray(config.classes)\r\n || !config.classes.length\r\n || !config.classes.every(function (c) { return typeof c === 'string'; })) {\r\n throw new Error(\"config.classes has to be an array class names: string[], have: \" + JSON.stringify(config.classes));\r\n }\r\n if (!Array.isArray(config.anchors)\r\n || !config.anchors.length\r\n || !config.anchors.map(function (a) { return a || {}; }).every(function (a) { return isNumber(a.x) && isNumber(a.y); })) {\r\n throw new Error(\"config.anchors has to be an array of { x: number, y: number }, have: \" + JSON.stringify(config.anchors));\r\n }\r\n if (config.meanRgb && (!Array.isArray(config.meanRgb)\r\n || config.meanRgb.length !== 3\r\n || !config.meanRgb.every(isNumber))) {\r\n throw new Error(\"config.meanRgb has to be an array of shape [number, number, number], have: \" + JSON.stringify(config.meanRgb));\r\n }\r\n}\r\n//# sourceMappingURL=config.js.map","import * as tf from '@tensorflow/tfjs-core';\r\nexport function leaky(x) {\r\n return tf.tidy(function () {\r\n var min = tf.mul(x, tf.scalar(0.10000000149011612));\r\n return tf.add(tf.relu(tf.sub(x, min)), min);\r\n //return tf.maximum(x, min)\r\n });\r\n}\r\n//# sourceMappingURL=leaky.js.map","import * as tf from '@tensorflow/tfjs-core';\r\nimport { leaky } from './leaky';\r\nexport function convWithBatchNorm(x, params) {\r\n return tf.tidy(function () {\r\n var out = tf.pad(x, [[0, 0], [1, 1], [1, 1], [0, 0]]);\r\n out = tf.conv2d(out, params.conv.filters, [1, 1], 'valid');\r\n out = tf.sub(out, params.bn.sub);\r\n out = tf.mul(out, params.bn.truediv);\r\n out = tf.add(out, params.conv.bias);\r\n return leaky(out);\r\n });\r\n}\r\n//# sourceMappingURL=convWithBatchNorm.js.map","import * as tf from '@tensorflow/tfjs-core';\r\nimport { leaky } from './leaky';\r\nexport function depthwiseSeparableConv(x, params) {\r\n return tf.tidy(function () {\r\n var out = tf.pad(x, [[0, 0], [1, 1], [1, 1], [0, 0]]);\r\n out = tf.separableConv2d(out, params.depthwise_filter, params.pointwise_filter, [1, 1], 'valid');\r\n out = tf.add(out, params.bias);\r\n return leaky(out);\r\n });\r\n}\r\n//# sourceMappingURL=depthwiseSeparableConv.js.map","import * as tf from '@tensorflow/tfjs-core';\r\nimport { extractConvParamsFactory } from '../common';\r\nimport { extractSeparableConvParamsFactory } from '../common/extractSeparableConvParamsFactory';\r\nimport { extractWeightsFactory } from '../common/extractWeightsFactory';\r\nfunction extractorsFactory(extractWeights, paramMappings) {\r\n var extractConvParams = extractConvParamsFactory(extractWeights, paramMappings);\r\n function extractBatchNormParams(size, mappedPrefix) {\r\n var sub = tf.tensor1d(extractWeights(size));\r\n var truediv = tf.tensor1d(extractWeights(size));\r\n paramMappings.push({ paramPath: mappedPrefix + \"/sub\" }, { paramPath: mappedPrefix + \"/truediv\" });\r\n return { sub: sub, truediv: truediv };\r\n }\r\n function extractConvWithBatchNormParams(channelsIn, channelsOut, mappedPrefix) {\r\n var conv = extractConvParams(channelsIn, channelsOut, 3, mappedPrefix + \"/conv\");\r\n var bn = extractBatchNormParams(channelsOut, mappedPrefix + \"/bn\");\r\n return { conv: conv, bn: bn };\r\n }\r\n var extractSeparableConvParams = extractSeparableConvParamsFactory(extractWeights, paramMappings);\r\n return {\r\n extractConvParams: extractConvParams,\r\n extractConvWithBatchNormParams: extractConvWithBatchNormParams,\r\n extractSeparableConvParams: extractSeparableConvParams\r\n };\r\n}\r\nexport function extractParams(weights, config, boxEncodingSize, filterSizes) {\r\n var _a = extractWeightsFactory(weights), extractWeights = _a.extractWeights, getRemainingWeights = _a.getRemainingWeights;\r\n var paramMappings = [];\r\n var _b = extractorsFactory(extractWeights, paramMappings), extractConvParams = _b.extractConvParams, extractConvWithBatchNormParams = _b.extractConvWithBatchNormParams, extractSeparableConvParams = _b.extractSeparableConvParams;\r\n var params;\r\n if (config.withSeparableConvs) {\r\n var s0 = filterSizes[0], s1 = filterSizes[1], s2 = filterSizes[2], s3 = filterSizes[3], s4 = filterSizes[4], s5 = filterSizes[5], s6 = filterSizes[6], s7 = filterSizes[7], s8 = filterSizes[8];\r\n var conv0 = config.isFirstLayerConv2d\r\n ? extractConvParams(s0, s1, 3, 'conv0')\r\n : extractSeparableConvParams(s0, s1, 'conv0');\r\n var conv1 = extractSeparableConvParams(s1, s2, 'conv1');\r\n var conv2 = extractSeparableConvParams(s2, s3, 'conv2');\r\n var conv3 = extractSeparableConvParams(s3, s4, 'conv3');\r\n var conv4 = extractSeparableConvParams(s4, s5, 'conv4');\r\n var conv5 = extractSeparableConvParams(s5, s6, 'conv5');\r\n var conv6 = s7 ? extractSeparableConvParams(s6, s7, 'conv6') : undefined;\r\n var conv7 = s8 ? extractSeparableConvParams(s7, s8, 'conv7') : undefined;\r\n var conv8 = extractConvParams(s8 || s7 || s6, 5 * boxEncodingSize, 1, 'conv8');\r\n params = { conv0: conv0, conv1: conv1, conv2: conv2, conv3: conv3, conv4: conv4, conv5: conv5, conv6: conv6, conv7: conv7, conv8: conv8 };\r\n }\r\n else {\r\n var s0 = filterSizes[0], s1 = filterSizes[1], s2 = filterSizes[2], s3 = filterSizes[3], s4 = filterSizes[4], s5 = filterSizes[5], s6 = filterSizes[6], s7 = filterSizes[7], s8 = filterSizes[8];\r\n var conv0 = extractConvWithBatchNormParams(s0, s1, 'conv0');\r\n var conv1 = extractConvWithBatchNormParams(s1, s2, 'conv1');\r\n var conv2 = extractConvWithBatchNormParams(s2, s3, 'conv2');\r\n var conv3 = extractConvWithBatchNormParams(s3, s4, 'conv3');\r\n var conv4 = extractConvWithBatchNormParams(s4, s5, 'conv4');\r\n var conv5 = extractConvWithBatchNormParams(s5, s6, 'conv5');\r\n var conv6 = extractConvWithBatchNormParams(s6, s7, 'conv6');\r\n var conv7 = extractConvWithBatchNormParams(s7, s8, 'conv7');\r\n var conv8 = extractConvParams(s8, 5 * boxEncodingSize, 1, 'conv8');\r\n params = { conv0: conv0, conv1: conv1, conv2: conv2, conv3: conv3, conv4: conv4, conv5: conv5, conv6: conv6, conv7: conv7, conv8: conv8 };\r\n }\r\n if (getRemainingWeights().length !== 0) {\r\n throw new Error(\"weights remaing after extract: \" + getRemainingWeights().length);\r\n }\r\n return { params: params, paramMappings: paramMappings };\r\n}\r\n//# sourceMappingURL=extractParams.js.map","import { disposeUnusedWeightTensors } from '../common/disposeUnusedWeightTensors';\r\nimport { loadSeparableConvParamsFactory } from '../common/extractSeparableConvParamsFactory';\r\nimport { extractWeightEntryFactory } from '../common/extractWeightEntryFactory';\r\nfunction extractorsFactory(weightMap, paramMappings) {\r\n var extractWeightEntry = extractWeightEntryFactory(weightMap, paramMappings);\r\n function extractBatchNormParams(prefix) {\r\n var sub = extractWeightEntry(prefix + \"/sub\", 1);\r\n var truediv = extractWeightEntry(prefix + \"/truediv\", 1);\r\n return { sub: sub, truediv: truediv };\r\n }\r\n function extractConvParams(prefix) {\r\n var filters = extractWeightEntry(prefix + \"/filters\", 4);\r\n var bias = extractWeightEntry(prefix + \"/bias\", 1);\r\n return { filters: filters, bias: bias };\r\n }\r\n function extractConvWithBatchNormParams(prefix) {\r\n var conv = extractConvParams(prefix + \"/conv\");\r\n var bn = extractBatchNormParams(prefix + \"/bn\");\r\n return { conv: conv, bn: bn };\r\n }\r\n var extractSeparableConvParams = loadSeparableConvParamsFactory(extractWeightEntry);\r\n return {\r\n extractConvParams: extractConvParams,\r\n extractConvWithBatchNormParams: extractConvWithBatchNormParams,\r\n extractSeparableConvParams: extractSeparableConvParams\r\n };\r\n}\r\nexport function extractParamsFromWeigthMap(weightMap, config) {\r\n var paramMappings = [];\r\n var _a = extractorsFactory(weightMap, paramMappings), extractConvParams = _a.extractConvParams, extractConvWithBatchNormParams = _a.extractConvWithBatchNormParams, extractSeparableConvParams = _a.extractSeparableConvParams;\r\n var params;\r\n if (config.withSeparableConvs) {\r\n var numFilters = (config.filterSizes && config.filterSizes.length || 9);\r\n params = {\r\n conv0: config.isFirstLayerConv2d ? extractConvParams('conv0') : extractSeparableConvParams('conv0'),\r\n conv1: extractSeparableConvParams('conv1'),\r\n conv2: extractSeparableConvParams('conv2'),\r\n conv3: extractSeparableConvParams('conv3'),\r\n conv4: extractSeparableConvParams('conv4'),\r\n conv5: extractSeparableConvParams('conv5'),\r\n conv6: numFilters > 7 ? extractSeparableConvParams('conv6') : undefined,\r\n conv7: numFilters > 8 ? extractSeparableConvParams('conv7') : undefined,\r\n conv8: extractConvParams('conv8')\r\n };\r\n }\r\n else {\r\n params = {\r\n conv0: extractConvWithBatchNormParams('conv0'),\r\n conv1: extractConvWithBatchNormParams('conv1'),\r\n conv2: extractConvWithBatchNormParams('conv2'),\r\n conv3: extractConvWithBatchNormParams('conv3'),\r\n conv4: extractConvWithBatchNormParams('conv4'),\r\n conv5: extractConvWithBatchNormParams('conv5'),\r\n conv6: extractConvWithBatchNormParams('conv6'),\r\n conv7: extractConvWithBatchNormParams('conv7'),\r\n conv8: extractConvParams('conv8')\r\n };\r\n }\r\n disposeUnusedWeightTensors(weightMap, paramMappings);\r\n return { params: params, paramMappings: paramMappings };\r\n}\r\n//# sourceMappingURL=extractParamsFromWeigthMap.js.map","export var TinyYolov2SizeType;\r\n(function (TinyYolov2SizeType) {\r\n TinyYolov2SizeType[TinyYolov2SizeType[\"XS\"] = 224] = \"XS\";\r\n TinyYolov2SizeType[TinyYolov2SizeType[\"SM\"] = 320] = \"SM\";\r\n TinyYolov2SizeType[TinyYolov2SizeType[\"MD\"] = 416] = \"MD\";\r\n TinyYolov2SizeType[TinyYolov2SizeType[\"LG\"] = 608] = \"LG\";\r\n})(TinyYolov2SizeType || (TinyYolov2SizeType = {}));\r\nvar TinyYolov2Options = /** @class */ (function () {\r\n function TinyYolov2Options(_a) {\r\n var _b = _a === void 0 ? {} : _a, inputSize = _b.inputSize, scoreThreshold = _b.scoreThreshold;\r\n this._name = 'TinyYolov2Options';\r\n this._inputSize = inputSize || 416;\r\n this._scoreThreshold = scoreThreshold || 0.5;\r\n if (typeof this._inputSize !== 'number' || this._inputSize % 32 !== 0) {\r\n throw new Error(this._name + \" - expected inputSize to be a number divisible by 32\");\r\n }\r\n if (typeof this._scoreThreshold !== 'number' || this._scoreThreshold <= 0 || this._scoreThreshold >= 1) {\r\n throw new Error(this._name + \" - expected scoreThreshold to be a number between 0 and 1\");\r\n }\r\n }\r\n Object.defineProperty(TinyYolov2Options.prototype, \"inputSize\", {\r\n get: function () { return this._inputSize; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(TinyYolov2Options.prototype, \"scoreThreshold\", {\r\n get: function () { return this._scoreThreshold; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n return TinyYolov2Options;\r\n}());\r\nexport { TinyYolov2Options };\r\n//# sourceMappingURL=TinyYolov2Options.js.map","import * as tslib_1 from \"tslib\";\r\nimport * as tf from '@tensorflow/tfjs-core';\r\nimport { BoundingBox } from '../classes/BoundingBox';\r\nimport { ObjectDetection } from '../classes/ObjectDetection';\r\nimport { convLayer } from '../common';\r\nimport { toNetInput } from '../dom';\r\nimport { NeuralNetwork } from '../NeuralNetwork';\r\nimport { sigmoid } from '../ops';\r\nimport { nonMaxSuppression } from '../ops/nonMaxSuppression';\r\nimport { normalize } from '../ops/normalize';\r\nimport { validateConfig } from './config';\r\nimport { convWithBatchNorm } from './convWithBatchNorm';\r\nimport { depthwiseSeparableConv } from './depthwiseSeparableConv';\r\nimport { extractParams } from './extractParams';\r\nimport { extractParamsFromWeigthMap } from './extractParamsFromWeigthMap';\r\nimport { leaky } from './leaky';\r\nimport { TinyYolov2Options } from './TinyYolov2Options';\r\nvar TinyYolov2 = /** @class */ (function (_super) {\r\n tslib_1.__extends(TinyYolov2, _super);\r\n function TinyYolov2(config) {\r\n var _this = _super.call(this, 'TinyYolov2') || this;\r\n validateConfig(config);\r\n _this._config = config;\r\n return _this;\r\n }\r\n Object.defineProperty(TinyYolov2.prototype, \"config\", {\r\n get: function () {\r\n return this._config;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(TinyYolov2.prototype, \"withClassScores\", {\r\n get: function () {\r\n return this.config.withClassScores || this.config.classes.length > 1;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(TinyYolov2.prototype, \"boxEncodingSize\", {\r\n get: function () {\r\n return 5 + (this.withClassScores ? this.config.classes.length : 0);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n TinyYolov2.prototype.runTinyYolov2 = function (x, params) {\r\n var out = convWithBatchNorm(x, params.conv0);\r\n out = tf.maxPool(out, [2, 2], [2, 2], 'same');\r\n out = convWithBatchNorm(out, params.conv1);\r\n out = tf.maxPool(out, [2, 2], [2, 2], 'same');\r\n out = convWithBatchNorm(out, params.conv2);\r\n out = tf.maxPool(out, [2, 2], [2, 2], 'same');\r\n out = convWithBatchNorm(out, params.conv3);\r\n out = tf.maxPool(out, [2, 2], [2, 2], 'same');\r\n out = convWithBatchNorm(out, params.conv4);\r\n out = tf.maxPool(out, [2, 2], [2, 2], 'same');\r\n out = convWithBatchNorm(out, params.conv5);\r\n out = tf.maxPool(out, [2, 2], [1, 1], 'same');\r\n out = convWithBatchNorm(out, params.conv6);\r\n out = convWithBatchNorm(out, params.conv7);\r\n return convLayer(out, params.conv8, 'valid', false);\r\n };\r\n TinyYolov2.prototype.runMobilenet = function (x, params) {\r\n var out = this.config.isFirstLayerConv2d\r\n ? leaky(convLayer(x, params.conv0, 'valid', false))\r\n : depthwiseSeparableConv(x, params.conv0);\r\n out = tf.maxPool(out, [2, 2], [2, 2], 'same');\r\n out = depthwiseSeparableConv(out, params.conv1);\r\n out = tf.maxPool(out, [2, 2], [2, 2], 'same');\r\n out = depthwiseSeparableConv(out, params.conv2);\r\n out = tf.maxPool(out, [2, 2], [2, 2], 'same');\r\n out = depthwiseSeparableConv(out, params.conv3);\r\n out = tf.maxPool(out, [2, 2], [2, 2], 'same');\r\n out = depthwiseSeparableConv(out, params.conv4);\r\n out = tf.maxPool(out, [2, 2], [2, 2], 'same');\r\n out = depthwiseSeparableConv(out, params.conv5);\r\n out = tf.maxPool(out, [2, 2], [1, 1], 'same');\r\n out = params.conv6 ? depthwiseSeparableConv(out, params.conv6) : out;\r\n out = params.conv7 ? depthwiseSeparableConv(out, params.conv7) : out;\r\n return convLayer(out, params.conv8, 'valid', false);\r\n };\r\n TinyYolov2.prototype.forwardInput = function (input, inputSize) {\r\n var _this = this;\r\n var params = this.params;\r\n if (!params) {\r\n throw new Error('TinyYolov2 - load model before inference');\r\n }\r\n return tf.tidy(function () {\r\n var batchTensor = input.toBatchTensor(inputSize, false).toFloat();\r\n batchTensor = _this.config.meanRgb\r\n ? normalize(batchTensor, _this.config.meanRgb)\r\n : batchTensor;\r\n batchTensor = batchTensor.div(tf.scalar(256));\r\n return _this.config.withSeparableConvs\r\n ? _this.runMobilenet(batchTensor, params)\r\n : _this.runTinyYolov2(batchTensor, params);\r\n });\r\n };\r\n TinyYolov2.prototype.forward = function (input, inputSize) {\r\n return tslib_1.__awaiter(this, void 0, void 0, function () {\r\n var _a;\r\n return tslib_1.__generator(this, function (_b) {\r\n switch (_b.label) {\r\n case 0:\r\n _a = this.forwardInput;\r\n return [4 /*yield*/, toNetInput(input)];\r\n case 1: return [4 /*yield*/, _a.apply(this, [_b.sent(), inputSize])];\r\n case 2: return [2 /*return*/, _b.sent()];\r\n }\r\n });\r\n });\r\n };\r\n TinyYolov2.prototype.detect = function (input, forwardParams) {\r\n if (forwardParams === void 0) { forwardParams = {}; }\r\n return tslib_1.__awaiter(this, void 0, void 0, function () {\r\n var _a, inputSize, scoreThreshold, netInput, out, out0, inputDimensions, results, boxes, scores, classScores, classNames, indices, detections;\r\n var _this = this;\r\n return tslib_1.__generator(this, function (_b) {\r\n switch (_b.label) {\r\n case 0:\r\n _a = new TinyYolov2Options(forwardParams), inputSize = _a.inputSize, scoreThreshold = _a.scoreThreshold;\r\n return [4 /*yield*/, toNetInput(input)];\r\n case 1:\r\n netInput = _b.sent();\r\n return [4 /*yield*/, this.forwardInput(netInput, inputSize)];\r\n case 2:\r\n out = _b.sent();\r\n out0 = tf.tidy(function () { return tf.unstack(out)[0].expandDims(); });\r\n inputDimensions = {\r\n width: netInput.getInputWidth(0),\r\n height: netInput.getInputHeight(0)\r\n };\r\n return [4 /*yield*/, this.extractBoxes(out0, netInput.getReshapedInputDimensions(0), scoreThreshold)];\r\n case 3:\r\n results = _b.sent();\r\n out.dispose();\r\n out0.dispose();\r\n boxes = results.map(function (res) { return res.box; });\r\n scores = results.map(function (res) { return res.score; });\r\n classScores = results.map(function (res) { return res.classScore; });\r\n classNames = results.map(function (res) { return _this.config.classes[res.label]; });\r\n indices = nonMaxSuppression(boxes.map(function (box) { return box.rescale(inputSize); }), scores, this.config.iouThreshold, true);\r\n detections = indices.map(function (idx) {\r\n return new ObjectDetection(scores[idx], classScores[idx], classNames[idx], boxes[idx], inputDimensions);\r\n });\r\n return [2 /*return*/, detections];\r\n }\r\n });\r\n });\r\n };\r\n TinyYolov2.prototype.getDefaultModelName = function () {\r\n return '';\r\n };\r\n TinyYolov2.prototype.extractParamsFromWeigthMap = function (weightMap) {\r\n return extractParamsFromWeigthMap(weightMap, this.config);\r\n };\r\n TinyYolov2.prototype.extractParams = function (weights) {\r\n var filterSizes = this.config.filterSizes || TinyYolov2.DEFAULT_FILTER_SIZES;\r\n var numFilters = filterSizes ? filterSizes.length : undefined;\r\n if (numFilters !== 7 && numFilters !== 8 && numFilters !== 9) {\r\n throw new Error(\"TinyYolov2 - expected 7 | 8 | 9 convolutional filters, but found \" + numFilters + \" filterSizes in config\");\r\n }\r\n return extractParams(weights, this.config, this.boxEncodingSize, filterSizes);\r\n };\r\n TinyYolov2.prototype.extractBoxes = function (outputTensor, inputBlobDimensions, scoreThreshold) {\r\n return tslib_1.__awaiter(this, void 0, void 0, function () {\r\n var width, height, inputSize, correctionFactorX, correctionFactorY, numCells, numBoxes, _a, boxesTensor, scoresTensor, classScoresTensor, results, scoresData, boxesData, row, col, anchor, score, ctX, ctY, width_1, height_1, x, y, pos, _b, classScore, label, _c;\r\n var _this = this;\r\n return tslib_1.__generator(this, function (_d) {\r\n switch (_d.label) {\r\n case 0:\r\n width = inputBlobDimensions.width, height = inputBlobDimensions.height;\r\n inputSize = Math.max(width, height);\r\n correctionFactorX = inputSize / width;\r\n correctionFactorY = inputSize / height;\r\n numCells = outputTensor.shape[1];\r\n numBoxes = this.config.anchors.length;\r\n _a = tf.tidy(function () {\r\n var reshaped = outputTensor.reshape([numCells, numCells, numBoxes, _this.boxEncodingSize]);\r\n var boxes = reshaped.slice([0, 0, 0, 0], [numCells, numCells, numBoxes, 4]);\r\n var scores = reshaped.slice([0, 0, 0, 4], [numCells, numCells, numBoxes, 1]);\r\n var classScores = _this.withClassScores\r\n ? tf.softmax(reshaped.slice([0, 0, 0, 5], [numCells, numCells, numBoxes, _this.config.classes.length]), 3)\r\n : tf.scalar(0);\r\n return [boxes, scores, classScores];\r\n }), boxesTensor = _a[0], scoresTensor = _a[1], classScoresTensor = _a[2];\r\n results = [];\r\n return [4 /*yield*/, scoresTensor.array()];\r\n case 1:\r\n scoresData = _d.sent();\r\n return [4 /*yield*/, boxesTensor.array()];\r\n case 2:\r\n boxesData = _d.sent();\r\n row = 0;\r\n _d.label = 3;\r\n case 3:\r\n if (!(row < numCells)) return [3 /*break*/, 12];\r\n col = 0;\r\n _d.label = 4;\r\n case 4:\r\n if (!(col < numCells)) return [3 /*break*/, 11];\r\n anchor = 0;\r\n _d.label = 5;\r\n case 5:\r\n if (!(anchor < numBoxes)) return [3 /*break*/, 10];\r\n score = sigmoid(scoresData[row][col][anchor][0]);\r\n if (!(!scoreThreshold || score > scoreThreshold)) return [3 /*break*/, 9];\r\n ctX = ((col + sigmoid(boxesData[row][col][anchor][0])) / numCells) * correctionFactorX;\r\n ctY = ((row + sigmoid(boxesData[row][col][anchor][1])) / numCells) * correctionFactorY;\r\n width_1 = ((Math.exp(boxesData[row][col][anchor][2]) * this.config.anchors[anchor].x) / numCells) * correctionFactorX;\r\n height_1 = ((Math.exp(boxesData[row][col][anchor][3]) * this.config.anchors[anchor].y) / numCells) * correctionFactorY;\r\n x = (ctX - (width_1 / 2));\r\n y = (ctY - (height_1 / 2));\r\n pos = { row: row, col: col, anchor: anchor };\r\n if (!this.withClassScores) return [3 /*break*/, 7];\r\n return [4 /*yield*/, this.extractPredictedClass(classScoresTensor, pos)];\r\n case 6:\r\n _c = _d.sent();\r\n return [3 /*break*/, 8];\r\n case 7:\r\n _c = { classScore: 1, label: 0 };\r\n _d.label = 8;\r\n case 8:\r\n _b = _c, classScore = _b.classScore, label = _b.label;\r\n results.push(tslib_1.__assign({ box: new BoundingBox(x, y, x + width_1, y + height_1), score: score, classScore: score * classScore, label: label }, pos));\r\n _d.label = 9;\r\n case 9:\r\n anchor++;\r\n return [3 /*break*/, 5];\r\n case 10:\r\n col++;\r\n return [3 /*break*/, 4];\r\n case 11:\r\n row++;\r\n return [3 /*break*/, 3];\r\n case 12:\r\n boxesTensor.dispose();\r\n scoresTensor.dispose();\r\n classScoresTensor.dispose();\r\n return [2 /*return*/, results];\r\n }\r\n });\r\n });\r\n };\r\n TinyYolov2.prototype.extractPredictedClass = function (classesTensor, pos) {\r\n return tslib_1.__awaiter(this, void 0, void 0, function () {\r\n var row, col, anchor, classesData;\r\n return tslib_1.__generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0:\r\n row = pos.row, col = pos.col, anchor = pos.anchor;\r\n return [4 /*yield*/, classesTensor.array()];\r\n case 1:\r\n classesData = _a.sent();\r\n return [2 /*return*/, Array(this.config.classes.length).fill(0)\r\n .map(function (_, i) { return classesData[row][col][anchor][i]; })\r\n .map(function (classScore, label) { return ({\r\n classScore: classScore,\r\n label: label\r\n }); })\r\n .reduce(function (max, curr) { return max.classScore > curr.classScore ? max : curr; })];\r\n }\r\n });\r\n });\r\n };\r\n TinyYolov2.DEFAULT_FILTER_SIZES = [\r\n 3, 16, 32, 64, 128, 256, 512, 1024, 1024\r\n ];\r\n return TinyYolov2;\r\n}(NeuralNetwork));\r\nexport { TinyYolov2 };\r\n//# sourceMappingURL=TinyYolov2.js.map","import { Point } from 'tfjs-image-recognition-base';\n\nexport function drawContour(\n ctx: CanvasRenderingContext2D,\n points: Point[],\n isClosed: boolean = false\n) {\n ctx.beginPath()\n\n points.slice(1).forEach(({ x, y }, prevIdx) => {\n const from = points[prevIdx]\n ctx.moveTo(from.x, from.y)\n ctx.lineTo(x, y)\n })\n\n if (isClosed) {\n const from = points[points.length - 1]\n const to = points[0]\n if (!from || !to) {\n return\n }\n\n ctx.moveTo(from.x, from.y)\n ctx.lineTo(to.x, to.y)\n }\n\n ctx.stroke()\n}","import { Box, IDimensions, ObjectDetection, Rect } from 'tfjs-image-recognition-base';\n\nexport interface IFaceDetecion {\n score: number\n box: Box\n}\n\nexport class FaceDetection extends ObjectDetection implements IFaceDetecion {\n constructor(\n score: number,\n relativeBox: Rect,\n imageDims: IDimensions\n ) {\n super(score, score, '', relativeBox, imageDims)\n }\n\n public forSize(width: number, height: number): FaceDetection {\n const { score, relativeBox, imageDims } = super.forSize(width, height)\n return new FaceDetection(score, relativeBox, imageDims)\n }\n}","import { FaceDetection } from '../classes/FaceDetection';\n\nexport type WithFaceDetection = TSource & {\n detection: FaceDetection\n}\n\nexport function isWithFaceDetection(obj: any): obj is WithFaceDetection<{}> {\n return obj['detection'] instanceof FaceDetection\n}\n\nexport function extendWithFaceDetection<\n TSource\n> (\n sourceObj: TSource,\n detection: FaceDetection\n): WithFaceDetection {\n\n const extension = { detection }\n return Object.assign({}, sourceObj, extension)\n}\n","import { Box, draw, IBoundingBox, IRect, round } from 'tfjs-image-recognition-base';\n\nimport { FaceDetection } from '../classes/FaceDetection';\nimport { isWithFaceDetection, WithFaceDetection } from '../factories/WithFaceDetection';\n\nexport type TDrawDetectionsInput = IRect | IBoundingBox | FaceDetection | WithFaceDetection<{}>\n\nexport function drawDetections(\n canvasArg: string | HTMLCanvasElement,\n detections: TDrawDetectionsInput | Array\n) {\n const detectionsArray = Array.isArray(detections) ? detections : [detections]\n\n detectionsArray.forEach(det => {\n const score = det instanceof FaceDetection\n ? det.score\n : (isWithFaceDetection(det) ? det.detection.score : undefined)\n\n const box = det instanceof FaceDetection\n ? det.box\n : (isWithFaceDetection(det) ? det.detection.box : new Box(det))\n\n const label = score ? `${round(score)}` : undefined\n new draw.DrawBox(box, { label }).draw(canvasArg)\n })\n}","import * as tf from '@tensorflow/tfjs-core';\nimport { TfjsImageRecognitionBase } from 'tfjs-image-recognition-base';\n\nexport function depthwiseSeparableConv(\n x: tf.Tensor4D,\n params: TfjsImageRecognitionBase.SeparableConvParams,\n stride: [number, number]\n): tf.Tensor4D {\n return tf.tidy(() => {\n let out = tf.separableConv2d(x, params.depthwise_filter, params.pointwise_filter, stride, 'same')\n out = tf.add(out, params.bias)\n return out\n })\n}","import * as tf from '@tensorflow/tfjs-core';\nimport { TfjsImageRecognitionBase } from 'tfjs-image-recognition-base';\n\nimport { depthwiseSeparableConv } from '../common/depthwiseSeparableConv';\nimport { DenseBlock3Params, DenseBlock4Params } from './types';\n\nexport function denseBlock3(\n x: tf.Tensor4D,\n denseBlockParams: DenseBlock3Params,\n isFirstLayer: boolean = false\n): tf.Tensor4D {\n return tf.tidy(() => {\n const out1 = tf.relu(\n isFirstLayer\n ? tf.add(\n tf.conv2d(x, (denseBlockParams.conv0 as TfjsImageRecognitionBase.ConvParams).filters, [2, 2], 'same'),\n denseBlockParams.conv0.bias\n )\n : depthwiseSeparableConv(x, denseBlockParams.conv0 as TfjsImageRecognitionBase.SeparableConvParams, [2, 2])\n ) as tf.Tensor4D\n const out2 = depthwiseSeparableConv(out1, denseBlockParams.conv1, [1, 1])\n\n const in3 = tf.relu(tf.add(out1, out2)) as tf.Tensor4D\n const out3 = depthwiseSeparableConv(in3, denseBlockParams.conv2, [1, 1])\n\n return tf.relu(tf.add(out1, tf.add(out2, out3))) as tf.Tensor4D\n })\n}\n\nexport function denseBlock4(\n x: tf.Tensor4D,\n denseBlockParams: DenseBlock4Params,\n isFirstLayer: boolean = false,\n isScaleDown: boolean = true\n): tf.Tensor4D {\n return tf.tidy(() => {\n const out1 = tf.relu(\n isFirstLayer\n ? tf.add(\n tf.conv2d(x, (denseBlockParams.conv0 as TfjsImageRecognitionBase.ConvParams).filters, isScaleDown ? [2, 2] : [1, 1], 'same'),\n denseBlockParams.conv0.bias\n )\n : depthwiseSeparableConv(x, denseBlockParams.conv0 as TfjsImageRecognitionBase.SeparableConvParams, isScaleDown ? [2, 2] : [1, 1])\n ) as tf.Tensor4D\n const out2 = depthwiseSeparableConv(out1, denseBlockParams.conv1, [1, 1])\n\n const in3 = tf.relu(tf.add(out1, out2)) as tf.Tensor4D\n const out3 = depthwiseSeparableConv(in3, denseBlockParams.conv2, [1, 1])\n\n const in4 = tf.relu(tf.add(out1, tf.add(out2, out3))) as tf.Tensor4D\n const out4 = depthwiseSeparableConv(in4, denseBlockParams.conv3, [1, 1])\n\n return tf.relu(tf.add(out1, tf.add(out2, tf.add(out3, out4)))) as tf.Tensor4D\n })\n}\n","import { TfjsImageRecognitionBase } from 'tfjs-image-recognition-base';\n\nimport { DenseBlock3Params, DenseBlock4Params } from './types';\n\nexport function extractorsFactory(extractWeights: TfjsImageRecognitionBase.ExtractWeightsFunction, paramMappings: TfjsImageRecognitionBase.ParamMapping[]) {\n\n const extractConvParams = TfjsImageRecognitionBase.extractConvParamsFactory(extractWeights, paramMappings)\n const extractSeparableConvParams = TfjsImageRecognitionBase.extractSeparableConvParamsFactory(extractWeights, paramMappings)\n\n function extractDenseBlock3Params(channelsIn: number, channelsOut: number, mappedPrefix: string, isFirstLayer: boolean = false): DenseBlock3Params {\n\n const conv0 = isFirstLayer\n ? extractConvParams(channelsIn, channelsOut, 3, `${mappedPrefix}/conv0`)\n : extractSeparableConvParams(channelsIn, channelsOut, `${mappedPrefix}/conv0`)\n const conv1 = extractSeparableConvParams(channelsOut, channelsOut, `${mappedPrefix}/conv1`)\n const conv2 = extractSeparableConvParams(channelsOut, channelsOut, `${mappedPrefix}/conv2`)\n\n return { conv0, conv1, conv2 }\n }\n\n function extractDenseBlock4Params(channelsIn: number, channelsOut: number, mappedPrefix: string, isFirstLayer: boolean = false): DenseBlock4Params {\n\n const { conv0, conv1, conv2 } = extractDenseBlock3Params(channelsIn, channelsOut, mappedPrefix, isFirstLayer)\n const conv3 = extractSeparableConvParams(channelsOut, channelsOut, `${mappedPrefix}/conv3`)\n\n return { conv0, conv1, conv2, conv3 }\n }\n\n return {\n extractDenseBlock3Params,\n extractDenseBlock4Params\n }\n\n}","\nimport { extractorsFactory } from './extractorsFactory';\nimport { FaceFeatureExtractorParams } from './types';\nimport { TfjsImageRecognitionBase } from 'tfjs-image-recognition-base';\n\nexport function extractParams(weights: Float32Array): { params: FaceFeatureExtractorParams, paramMappings: TfjsImageRecognitionBase.ParamMapping[] } {\n\n const paramMappings: TfjsImageRecognitionBase.ParamMapping[] = []\n\n const {\n extractWeights,\n getRemainingWeights\n } = TfjsImageRecognitionBase.extractWeightsFactory(weights)\n\n const {\n extractDenseBlock4Params\n } = extractorsFactory(extractWeights, paramMappings)\n\n const dense0 = extractDenseBlock4Params(3, 32, 'dense0', true)\n const dense1 = extractDenseBlock4Params(32, 64, 'dense1')\n const dense2 = extractDenseBlock4Params(64, 128, 'dense2')\n const dense3 = extractDenseBlock4Params(128, 256, 'dense3')\n\n if (getRemainingWeights().length !== 0) {\n throw new Error(`weights remaing after extract: ${getRemainingWeights().length}`)\n }\n\n return {\n paramMappings,\n params: { dense0, dense1, dense2, dense3 }\n }\n}","import * as tf from '@tensorflow/tfjs-core';\nimport { TfjsImageRecognitionBase } from 'tfjs-image-recognition-base';\n\nexport function loadConvParamsFactory(extractWeightEntry: (originalPath: string, paramRank: number) => T) {\n return function(prefix: string): TfjsImageRecognitionBase.ConvParams {\n const filters = extractWeightEntry(`${prefix}/filters`, 4)\n const bias = extractWeightEntry(`${prefix}/bias`, 1)\n\n return { filters, bias }\n }\n}","import { TfjsImageRecognitionBase } from 'tfjs-image-recognition-base';\n\nimport { loadConvParamsFactory } from '../common/loadConvParamsFactory';\nimport { DenseBlock3Params, DenseBlock4Params } from './types';\n\nexport function loadParamsFactory(weightMap: any, paramMappings: TfjsImageRecognitionBase.ParamMapping[]) {\n\n const extractWeightEntry = TfjsImageRecognitionBase.extractWeightEntryFactory(weightMap, paramMappings)\n\n const extractConvParams = loadConvParamsFactory(extractWeightEntry)\n const extractSeparableConvParams = TfjsImageRecognitionBase.loadSeparableConvParamsFactory(extractWeightEntry)\n\n function extractDenseBlock3Params(prefix: string, isFirstLayer: boolean = false): DenseBlock3Params {\n const conv0 = isFirstLayer\n ? extractConvParams(`${prefix}/conv0`)\n : extractSeparableConvParams(`${prefix}/conv0`)\n const conv1 = extractSeparableConvParams(`${prefix}/conv1`)\n const conv2 = extractSeparableConvParams(`${prefix}/conv2`)\n\n return { conv0, conv1, conv2 }\n }\n\n function extractDenseBlock4Params(prefix: string, isFirstLayer: boolean = false): DenseBlock4Params {\n const conv0 = isFirstLayer\n ? extractConvParams(`${prefix}/conv0`)\n : extractSeparableConvParams(`${prefix}/conv0`)\n const conv1 = extractSeparableConvParams(`${prefix}/conv1`)\n const conv2 = extractSeparableConvParams(`${prefix}/conv2`)\n const conv3 = extractSeparableConvParams(`${prefix}/conv3`)\n\n return { conv0, conv1, conv2, conv3 }\n }\n\n return {\n extractDenseBlock3Params,\n extractDenseBlock4Params\n }\n}","import * as tf from '@tensorflow/tfjs-core';\nimport { TfjsImageRecognitionBase } from 'tfjs-image-recognition-base';\n\nimport { loadParamsFactory } from './loadParamsFactory';\nimport { FaceFeatureExtractorParams } from './types';\n\nexport function extractParamsFromWeigthMap(\n weightMap: tf.NamedTensorMap\n): { params: FaceFeatureExtractorParams, paramMappings: TfjsImageRecognitionBase.ParamMapping[] } {\n\n const paramMappings: TfjsImageRecognitionBase.ParamMapping[] = []\n\n const {\n extractDenseBlock4Params\n } = loadParamsFactory(weightMap, paramMappings)\n\n const params = {\n dense0: extractDenseBlock4Params('dense0', true),\n dense1: extractDenseBlock4Params('dense1'),\n dense2: extractDenseBlock4Params('dense2'),\n dense3: extractDenseBlock4Params('dense3')\n }\n\n TfjsImageRecognitionBase.disposeUnusedWeightTensors(weightMap, paramMappings)\n\n return { params, paramMappings }\n}","import * as tf from '@tensorflow/tfjs-core';\nimport { NetInput, NeuralNetwork, normalize, TNetInput, toNetInput } from 'tfjs-image-recognition-base';\n\nimport { denseBlock4 } from './denseBlock';\nimport { extractParams } from './extractParams';\nimport { extractParamsFromWeigthMap } from './extractParamsFromWeigthMap';\nimport { FaceFeatureExtractorParams, IFaceFeatureExtractor } from './types';\n\nexport class FaceFeatureExtractor extends NeuralNetwork implements IFaceFeatureExtractor {\n\n constructor() {\n super('FaceFeatureExtractor')\n }\n\n public forwardInput(input: NetInput): tf.Tensor4D {\n\n const { params } = this\n\n if (!params) {\n throw new Error('FaceFeatureExtractor - load model before inference')\n }\n\n return tf.tidy(() => {\n const batchTensor = input.toBatchTensor(112, true)\n const meanRgb = [122.782, 117.001, 104.298]\n const normalized = normalize(batchTensor, meanRgb).div(tf.scalar(255)) as tf.Tensor4D\n\n let out = denseBlock4(normalized, params.dense0, true)\n out = denseBlock4(out, params.dense1)\n out = denseBlock4(out, params.dense2)\n out = denseBlock4(out, params.dense3)\n out = tf.avgPool(out, [7, 7], [2, 2], 'valid')\n\n return out\n })\n }\n\n public async forward(input: TNetInput): Promise {\n return this.forwardInput(await toNetInput(input))\n }\n\n protected getDefaultModelName(): string {\n return 'face_feature_extractor_model'\n }\n\n protected extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap) {\n return extractParamsFromWeigthMap(weightMap)\n }\n\n protected extractParams(weights: Float32Array) {\n return extractParams(weights)\n }\n}","import * as tf from '@tensorflow/tfjs-core';\nimport { TfjsImageRecognitionBase } from 'tfjs-image-recognition-base';\n\nexport function fullyConnectedLayer(\n x: tf.Tensor2D,\n params: TfjsImageRecognitionBase.FCParams\n): tf.Tensor2D {\n return tf.tidy(() =>\n tf.add(\n tf.matMul(x, params.weights),\n params.bias\n )\n )\n}","import { TfjsImageRecognitionBase } from 'tfjs-image-recognition-base';\n\nimport { NetParams } from './types';\n\nexport function extractParams(weights: Float32Array, channelsIn: number, channelsOut: number): { params: NetParams, paramMappings: TfjsImageRecognitionBase.ParamMapping[] } {\n\n const paramMappings: TfjsImageRecognitionBase.ParamMapping[] = []\n\n const {\n extractWeights,\n getRemainingWeights\n } = TfjsImageRecognitionBase.extractWeightsFactory(weights)\n\n const extractFCParams = TfjsImageRecognitionBase.extractFCParamsFactory(extractWeights, paramMappings)\n\n const fc = extractFCParams(channelsIn, channelsOut, 'fc')\n\n if (getRemainingWeights().length !== 0) {\n throw new Error(`weights remaing after extract: ${getRemainingWeights().length}`)\n }\n\n return {\n paramMappings,\n params: { fc }\n }\n}","import * as tf from '@tensorflow/tfjs-core';\nimport { TfjsImageRecognitionBase } from 'tfjs-image-recognition-base';\n\nimport { NetParams } from './types';\n\nexport function extractParamsFromWeigthMap(\n weightMap: tf.NamedTensorMap\n): { params: NetParams, paramMappings: TfjsImageRecognitionBase.ParamMapping[] } {\n\n const paramMappings: TfjsImageRecognitionBase.ParamMapping[] = []\n\n const extractWeightEntry = TfjsImageRecognitionBase.extractWeightEntryFactory(weightMap, paramMappings)\n\n function extractFcParams(prefix: string): TfjsImageRecognitionBase.FCParams {\n const weights = extractWeightEntry(`${prefix}/weights`, 2)\n const bias = extractWeightEntry(`${prefix}/bias`, 1)\n return { weights, bias }\n }\n\n const params = {\n fc: extractFcParams('fc')\n }\n\n TfjsImageRecognitionBase.disposeUnusedWeightTensors(weightMap, paramMappings)\n\n return { params, paramMappings }\n}","import * as tf from '@tensorflow/tfjs-core';\n\nexport function seperateWeightMaps(weightMap: tf.NamedTensorMap) {\n\n const featureExtractorMap: tf.NamedTensorMap = {}\n const classifierMap: tf.NamedTensorMap = {}\n\n Object.keys(weightMap).forEach(key => {\n const map = key.startsWith('fc') ? classifierMap : featureExtractorMap\n map[key] = weightMap[key]\n })\n\n return { featureExtractorMap, classifierMap }\n\n}","import * as tf from '@tensorflow/tfjs-core';\nimport { NetInput, NeuralNetwork } from 'tfjs-image-recognition-base';\n\nimport { fullyConnectedLayer } from '../common/fullyConnectedLayer';\nimport {\n FaceFeatureExtractorParams,\n IFaceFeatureExtractor,\n TinyFaceFeatureExtractorParams,\n} from '../faceFeatureExtractor/types';\nimport { extractParams } from './extractParams';\nimport { extractParamsFromWeigthMap } from './extractParamsFromWeigthMap';\nimport { NetParams } from './types';\nimport { seperateWeightMaps } from './util';\n\nexport abstract class FaceProcessor<\n TExtractorParams extends FaceFeatureExtractorParams | TinyFaceFeatureExtractorParams\n>\n extends NeuralNetwork {\n\n protected _faceFeatureExtractor: IFaceFeatureExtractor\n\n constructor(_name: string, faceFeatureExtractor: IFaceFeatureExtractor) {\n super(_name)\n this._faceFeatureExtractor = faceFeatureExtractor\n }\n\n public get faceFeatureExtractor(): IFaceFeatureExtractor {\n return this._faceFeatureExtractor\n }\n\n protected abstract getDefaultModelName(): string\n protected abstract getClassifierChannelsIn(): number\n protected abstract getClassifierChannelsOut(): number\n\n public runNet(input: NetInput | tf.Tensor4D): tf.Tensor2D {\n\n const { params } = this\n\n if (!params) {\n throw new Error(`${this._name} - load model before inference`)\n }\n\n return tf.tidy(() => {\n const bottleneckFeatures = input instanceof NetInput\n ? this.faceFeatureExtractor.forwardInput(input)\n : input\n return fullyConnectedLayer(bottleneckFeatures.as2D(bottleneckFeatures.shape[0], -1), params.fc)\n })\n }\n\n public dispose(throwOnRedispose: boolean = true) {\n this.faceFeatureExtractor.dispose(throwOnRedispose)\n super.dispose(throwOnRedispose)\n }\n\n public loadClassifierParams(weights: Float32Array) {\n const { params, paramMappings } = this.extractClassifierParams(weights)\n this._params = params\n this._paramMappings = paramMappings\n }\n\n public extractClassifierParams(weights: Float32Array) {\n return extractParams(weights, this.getClassifierChannelsIn(), this.getClassifierChannelsOut())\n }\n\n protected extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap) {\n\n const { featureExtractorMap, classifierMap } = seperateWeightMaps(weightMap)\n\n this.faceFeatureExtractor.loadFromWeightMap(featureExtractorMap)\n\n return extractParamsFromWeigthMap(classifierMap)\n }\n\n protected extractParams(weights: Float32Array) {\n\n const cIn = this.getClassifierChannelsIn()\n const cOut = this.getClassifierChannelsOut()\n const classifierWeightSize = (cOut * cIn ) + cOut\n\n const featureExtractorWeights = weights.slice(0, weights.length - classifierWeightSize)\n const classifierWeights = weights.slice(weights.length - classifierWeightSize)\n\n this.faceFeatureExtractor.extractWeights(featureExtractorWeights)\n return this.extractClassifierParams(classifierWeights)\n }\n}","export const FACE_EXPRESSION_LABELS = ['neutral', 'happy', 'sad', 'angry', 'fearful', 'disgusted', 'surprised']\n\nexport class FaceExpressions {\n public neutral: number\n public happy: number\n public sad: number\n public angry: number\n public fearful: number\n public disgusted: number\n public surprised: number\n\n constructor(probabilities: number[] | Float32Array) {\n if (probabilities.length !== 7) {\n throw new Error(`FaceExpressions.constructor - expected probabilities.length to be 7, have: ${probabilities.length}`)\n }\n\n FACE_EXPRESSION_LABELS.forEach((expression, idx) => {\n this[expression] = probabilities[idx]\n })\n }\n\n asSortedArray() {\n return FACE_EXPRESSION_LABELS\n .map(expression => ({ expression, probability: this[expression] as number }))\n .sort((e0, e1) => e1.probability - e0.probability)\n }\n}","import * as tf from '@tensorflow/tfjs-core';\nimport { NetInput, TNetInput, toNetInput } from 'tfjs-image-recognition-base';\n\nimport { FaceFeatureExtractor } from '../faceFeatureExtractor/FaceFeatureExtractor';\nimport { FaceFeatureExtractorParams } from '../faceFeatureExtractor/types';\nimport { FaceProcessor } from '../faceProcessor/FaceProcessor';\nimport { FaceExpressions } from './FaceExpressions';\n\nexport class FaceExpressionNet extends FaceProcessor {\n\n constructor(faceFeatureExtractor: FaceFeatureExtractor = new FaceFeatureExtractor()) {\n super('FaceExpressionNet', faceFeatureExtractor)\n }\n\n public forwardInput(input: NetInput | tf.Tensor4D): tf.Tensor2D {\n return tf.tidy(() => tf.softmax(this.runNet(input)))\n }\n\n public async forward(input: TNetInput): Promise {\n return this.forwardInput(await toNetInput(input))\n }\n\n public async predictExpressions(input: TNetInput) {\n const netInput = await toNetInput(input)\n const out = await this.forwardInput(netInput)\n const probabilitesByBatch = await Promise.all(tf.unstack(out).map(async t => {\n const data = await t.data()\n t.dispose()\n return data\n }))\n out.dispose()\n\n const predictionsByBatch = probabilitesByBatch\n .map(probabilites => new FaceExpressions(probabilites as Float32Array))\n\n return netInput.isBatchInput\n ? predictionsByBatch\n : predictionsByBatch[0]\n }\n\n protected getDefaultModelName(): string {\n return 'face_expression_model'\n }\n\n protected getClassifierChannelsIn(): number {\n return 256\n }\n\n protected getClassifierChannelsOut(): number {\n return 7\n }\n}","import { FaceExpressions } from '../faceExpressionNet/FaceExpressions';\n\nexport type WithFaceExpressions = TSource & {\n expressions: FaceExpressions\n}\n\nexport function isWithFaceExpressions(obj: any): obj is WithFaceExpressions<{}> {\n return obj['expressions'] instanceof FaceExpressions\n}\n\nexport function extendWithFaceExpressions<\n TSource\n> (\n sourceObj: TSource,\n expressions: FaceExpressions\n): WithFaceExpressions {\n\n const extension = { expressions }\n return Object.assign({}, sourceObj, extension)\n}","import { draw, IPoint, Point, round } from 'tfjs-image-recognition-base';\n\nimport { FaceExpressions } from '../faceExpressionNet';\nimport { isWithFaceDetection } from '../factories/WithFaceDetection';\nimport { isWithFaceExpressions, WithFaceExpressions } from '../factories/WithFaceExpressions';\n\nexport type DrawFaceExpressionsInput = FaceExpressions | WithFaceExpressions<{}>\n\nexport function drawFaceExpressions(\n canvasArg: string | HTMLCanvasElement,\n faceExpressions: DrawFaceExpressionsInput | Array,\n minConfidence = 0.1,\n textFieldAnchor?: IPoint\n) {\n const faceExpressionsArray = Array.isArray(faceExpressions) ? faceExpressions : [faceExpressions]\n\n faceExpressionsArray.forEach(e => {\n const expr = e instanceof FaceExpressions\n ? e\n : (isWithFaceExpressions(e) ? e.expressions : undefined)\n if (!expr) {\n throw new Error('drawFaceExpressions - expected faceExpressions to be FaceExpressions | WithFaceExpressions<{}> or array thereof')\n }\n\n const sorted = expr.asSortedArray()\n const resultsToDisplay = sorted.filter(expr => expr.probability > minConfidence)\n\n const anchor = isWithFaceDetection(e)\n ? e.detection.box.bottomLeft\n : (textFieldAnchor || new Point(0, 0))\n\n const drawTextField = new draw.DrawTextField(\n resultsToDisplay.map(expr => `${expr.expression} (${round(expr.probability)})`),\n anchor\n )\n drawTextField.draw(canvasArg)\n })\n}","import { BoundingBox, IPoint } from 'tfjs-image-recognition-base';\n\nexport function minBbox(pts: IPoint[]): BoundingBox {\n const xs = pts.map(pt => pt.x)\n const ys = pts.map(pt => pt.y)\n const minX = xs.reduce((min, x) => x < min ? x : min, Infinity)\n const minY = ys.reduce((min, y) => y < min ? y : min, Infinity)\n const maxX = xs.reduce((max, x) => max < x ? x : max, 0)\n const maxY = ys.reduce((max, y) => max < y ? y : max, 0)\n\n return new BoundingBox(minX, minY, maxX, maxY)\n}\n","import { Box, Dimensions, getCenterPoint, IBoundingBox, IDimensions, IRect, Point, Rect } from 'tfjs-image-recognition-base';\n\nimport { minBbox } from '../minBbox';\nimport { FaceDetection } from './FaceDetection';\n\n// face alignment constants\nconst relX = 0.5\nconst relY = 0.43\nconst relScale = 0.45\n\nexport interface IFaceLandmarks {\n positions: Point[]\n shift: Point\n}\n\nexport class FaceLandmarks implements IFaceLandmarks {\n protected _shift: Point\n protected _positions: Point[]\n protected _imgDims: Dimensions\n\n constructor(\n relativeFaceLandmarkPositions: Point[],\n imgDims: IDimensions,\n shift: Point = new Point(0, 0)\n ) {\n const { width, height } = imgDims\n this._imgDims = new Dimensions(width, height)\n this._shift = shift\n this._positions = relativeFaceLandmarkPositions.map(\n pt => pt.mul(new Point(width, height)).add(shift)\n )\n }\n\n public get shift(): Point { return new Point(this._shift.x, this._shift.y) }\n public get imageWidth(): number { return this._imgDims.width }\n public get imageHeight(): number { return this._imgDims.height }\n public get positions(): Point[] { return this._positions }\n public get relativePositions(): Point[] {\n return this._positions.map(\n pt => pt.sub(this._shift).div(new Point(this.imageWidth, this.imageHeight))\n )\n }\n\n public forSize(width: number, height: number): T {\n return new (this.constructor as any)(\n this.relativePositions,\n { width, height }\n )\n }\n\n public shiftBy(x: number, y: number): T {\n return new (this.constructor as any)(\n this.relativePositions,\n this._imgDims,\n new Point(x, y)\n )\n }\n\n public shiftByPoint(pt: Point): T {\n return this.shiftBy(pt.x, pt.y)\n }\n\n /**\n * Aligns the face landmarks after face detection from the relative positions of the faces\n * bounding box, or it's current shift. This function should be used to align the face images\n * after face detection has been performed, before they are passed to the face recognition net.\n * This will make the computed face descriptor more accurate.\n *\n * @param detection (optional) The bounding box of the face or the face detection result. If\n * no argument was passed the position of the face landmarks are assumed to be relative to\n * it's current shift.\n * @returns The bounding box of the aligned face.\n */\n public align(\n detection?: FaceDetection | IRect | IBoundingBox | null,\n options: { useDlibAlignment?: boolean, minBoxPadding?: number } = { }\n ): Box {\n if (detection) {\n const box = detection instanceof FaceDetection\n ? detection.box.floor()\n : new Box(detection)\n\n return this.shiftBy(box.x, box.y).align(null, options)\n }\n\n const { useDlibAlignment, minBoxPadding } = Object.assign({}, { useDlibAlignment: false, minBoxPadding: 0.2 }, options)\n\n if (useDlibAlignment) {\n return this.alignDlib()\n }\n\n return this.alignMinBbox(minBoxPadding)\n }\n\n private alignDlib(): Box {\n\n const centers = this.getRefPointsForAlignment()\n\n const [leftEyeCenter, rightEyeCenter, mouthCenter] = centers\n const distToMouth = (pt: Point) => mouthCenter.sub(pt).magnitude()\n const eyeToMouthDist = (distToMouth(leftEyeCenter) + distToMouth(rightEyeCenter)) / 2\n\n const size = Math.floor(eyeToMouthDist / relScale)\n\n const refPoint = getCenterPoint(centers)\n // TODO: pad in case rectangle is out of image bounds\n const x = Math.floor(Math.max(0, refPoint.x - (relX * size)))\n const y = Math.floor(Math.max(0, refPoint.y - (relY * size)))\n\n return new Rect(x, y, Math.min(size, this.imageWidth + x), Math.min(size, this.imageHeight + y))\n }\n\n private alignMinBbox(padding: number): Box {\n const box = minBbox(this.positions)\n return box.pad(box.width * padding, box.height * padding)\n }\n\n protected getRefPointsForAlignment(): Point[] {\n throw new Error('getRefPointsForAlignment not implemented by base class')\n }\n}","import { getCenterPoint, Point } from 'tfjs-image-recognition-base';\n\nimport { FaceLandmarks } from '../classes/FaceLandmarks';\n\nexport class FaceLandmarks68 extends FaceLandmarks {\n public getJawOutline(): Point[] {\n return this.positions.slice(0, 17)\n }\n\n public getLeftEyeBrow(): Point[] {\n return this.positions.slice(17, 22)\n }\n\n public getRightEyeBrow(): Point[] {\n return this.positions.slice(22, 27)\n }\n\n public getNose(): Point[] {\n return this.positions.slice(27, 36)\n }\n\n public getLeftEye(): Point[] {\n return this.positions.slice(36, 42)\n }\n\n public getRightEye(): Point[] {\n return this.positions.slice(42, 48)\n }\n\n public getMouth(): Point[] {\n return this.positions.slice(48, 68)\n }\n\n protected getRefPointsForAlignment(): Point[] {\n return [\n this.getLeftEye(),\n this.getRightEye(),\n this.getMouth()\n ].map(getCenterPoint)\n }\n}","import { FaceDetection } from '../classes/FaceDetection';\nimport { FaceLandmarks } from '../classes/FaceLandmarks';\nimport { FaceLandmarks68 } from '../classes/FaceLandmarks68';\nimport { isWithFaceDetection, WithFaceDetection } from './WithFaceDetection';\n\nexport type WithFaceLandmarks<\n TSource extends WithFaceDetection<{}>,\n TFaceLandmarks extends FaceLandmarks = FaceLandmarks68\n> = TSource & {\n landmarks: TFaceLandmarks\n unshiftedLandmarks: TFaceLandmarks\n alignedRect: FaceDetection\n}\n\nexport function isWithFaceLandmarks(obj: any): obj is WithFaceLandmarks, FaceLandmarks> {\n return isWithFaceDetection(obj)\n && obj['landmarks'] instanceof FaceLandmarks\n && obj['unshiftedLandmarks'] instanceof FaceLandmarks\n && obj['alignedRect'] instanceof FaceDetection\n}\n\nexport function extendWithFaceLandmarks<\n TSource extends WithFaceDetection<{}>,\n TFaceLandmarks extends FaceLandmarks = FaceLandmarks68\n> (\n sourceObj: TSource,\n unshiftedLandmarks: TFaceLandmarks\n): WithFaceLandmarks {\n\n const { box: shift } = sourceObj.detection\n const landmarks = unshiftedLandmarks.shiftBy(shift.x, shift.y)\n\n const rect = landmarks.align()\n const { imageDims } = sourceObj.detection\n const alignedRect = new FaceDetection(sourceObj.detection.score, rect.rescale(imageDims.reverse()), imageDims)\n\n const extension = {\n landmarks,\n unshiftedLandmarks,\n alignedRect\n }\n\n return Object.assign({}, sourceObj, extension)\n}","import { getContext2dOrThrow, IPoint } from 'tfjs-image-recognition-base';\n\nimport { FaceLandmarks } from '../classes/FaceLandmarks';\nimport { FaceLandmarks68 } from '../classes/FaceLandmarks68';\nimport { WithFaceDetection } from '../factories/WithFaceDetection';\nimport { isWithFaceLandmarks, WithFaceLandmarks } from '../factories/WithFaceLandmarks';\nimport { drawContour } from './drawContour';\n\nexport interface IDrawFaceLandmarksOptions {\n drawLines?: boolean\n drawPoints?: boolean\n lineWidth?: number\n pointSize?: number\n lineColor?: string\n pointColor?: string\n}\n\nexport class DrawFaceLandmarksOptions {\n public drawLines: boolean\n public drawPoints: boolean\n public lineWidth: number\n public pointSize: number\n public lineColor: string\n public pointColor: string\n\n constructor(options: IDrawFaceLandmarksOptions = {}) {\n const { drawLines = true, drawPoints = true, lineWidth, lineColor, pointSize, pointColor } = options\n this.drawLines = drawLines\n this.drawPoints = drawPoints\n this.lineWidth = lineWidth || 1\n this.pointSize = pointSize || 2\n this.lineColor = lineColor || 'rgba(0, 255, 255, 1)'\n this.pointColor = pointColor || 'rgba(255, 0, 255, 1)'\n }\n}\n\nexport class DrawFaceLandmarks {\n public faceLandmarks: FaceLandmarks\n public options: DrawFaceLandmarksOptions\n\n constructor(\n faceLandmarks: FaceLandmarks,\n options: IDrawFaceLandmarksOptions = {}\n ) {\n this.faceLandmarks = faceLandmarks\n this.options = new DrawFaceLandmarksOptions(options)\n }\n\n draw(canvasArg: string | HTMLCanvasElement | CanvasRenderingContext2D) {\n const ctx = getContext2dOrThrow(canvasArg)\n\n const { drawLines, drawPoints, lineWidth, lineColor, pointSize, pointColor } = this.options\n\n if (drawLines && this.faceLandmarks instanceof FaceLandmarks68) {\n ctx.strokeStyle = lineColor\n ctx.lineWidth = lineWidth\n drawContour(ctx, this.faceLandmarks.getJawOutline())\n drawContour(ctx, this.faceLandmarks.getLeftEyeBrow())\n drawContour(ctx, this.faceLandmarks.getRightEyeBrow())\n drawContour(ctx, this.faceLandmarks.getNose())\n drawContour(ctx, this.faceLandmarks.getLeftEye(), true)\n drawContour(ctx, this.faceLandmarks.getRightEye(), true)\n drawContour(ctx, this.faceLandmarks.getMouth(), true)\n }\n\n if (drawPoints) {\n ctx.strokeStyle = pointColor\n ctx.fillStyle = pointColor\n\n const drawPoint = (pt: IPoint) => {\n ctx.beginPath()\n ctx.arc(pt.x, pt.y, pointSize, 0, 2 * Math.PI)\n ctx.fill()\n }\n this.faceLandmarks.positions.forEach(drawPoint)\n }\n }\n}\n\nexport type DrawFaceLandmarksInput = FaceLandmarks | WithFaceLandmarks>\n\nexport function drawFaceLandmarks(\n canvasArg: string | HTMLCanvasElement,\n faceLandmarks: DrawFaceLandmarksInput | Array\n) {\n const faceLandmarksArray = Array.isArray(faceLandmarks) ? faceLandmarks : [faceLandmarks]\n faceLandmarksArray.forEach(f => {\n const landmarks = f instanceof FaceLandmarks\n ? f\n : (isWithFaceLandmarks(f) ? f.landmarks : undefined)\n if (!landmarks) {\n throw new Error('drawFaceLandmarks - expected faceExpressions to be FaceLandmarks | WithFaceLandmarks> or array thereof')\n }\n\n new DrawFaceLandmarks(landmarks).draw(canvasArg)\n })\n}","import { range, TfjsImageRecognitionBase } from 'tfjs-image-recognition-base';\n\nimport { MainBlockParams, ReductionBlockParams, TinyXceptionParams } from './types';\n\nfunction extractorsFactory(extractWeights: TfjsImageRecognitionBase.ExtractWeightsFunction, paramMappings: TfjsImageRecognitionBase.ParamMapping[]) {\n\n const extractConvParams = TfjsImageRecognitionBase.extractConvParamsFactory(extractWeights, paramMappings)\n const extractSeparableConvParams = TfjsImageRecognitionBase.extractSeparableConvParamsFactory(extractWeights, paramMappings)\n\n function extractReductionBlockParams(channelsIn: number, channelsOut: number, mappedPrefix: string): ReductionBlockParams {\n\n const separable_conv0 = extractSeparableConvParams(channelsIn, channelsOut, `${mappedPrefix}/separable_conv0`)\n const separable_conv1 = extractSeparableConvParams(channelsOut, channelsOut, `${mappedPrefix}/separable_conv1`)\n const expansion_conv = extractConvParams(channelsIn, channelsOut, 1, `${mappedPrefix}/expansion_conv`)\n\n return { separable_conv0, separable_conv1, expansion_conv }\n }\n\n function extractMainBlockParams(channels: number, mappedPrefix: string): MainBlockParams {\n\n const separable_conv0 = extractSeparableConvParams(channels, channels, `${mappedPrefix}/separable_conv0`)\n const separable_conv1 = extractSeparableConvParams(channels, channels, `${mappedPrefix}/separable_conv1`)\n const separable_conv2 = extractSeparableConvParams(channels, channels, `${mappedPrefix}/separable_conv2`)\n\n return { separable_conv0, separable_conv1, separable_conv2 }\n }\n\n return {\n extractConvParams,\n extractSeparableConvParams,\n extractReductionBlockParams,\n extractMainBlockParams\n }\n\n}\n\nexport function extractParams(weights: Float32Array, numMainBlocks: number): { params: TinyXceptionParams, paramMappings: TfjsImageRecognitionBase.ParamMapping[] } {\n\n const paramMappings: TfjsImageRecognitionBase.ParamMapping[] = []\n\n const {\n extractWeights,\n getRemainingWeights\n } = TfjsImageRecognitionBase.extractWeightsFactory(weights)\n\n const {\n extractConvParams,\n extractSeparableConvParams,\n extractReductionBlockParams,\n extractMainBlockParams\n } = extractorsFactory(extractWeights, paramMappings)\n\n const entry_flow_conv_in = extractConvParams(3, 32, 3, 'entry_flow/conv_in')\n const entry_flow_reduction_block_0 = extractReductionBlockParams(32, 64, 'entry_flow/reduction_block_0')\n const entry_flow_reduction_block_1 = extractReductionBlockParams(64, 128, 'entry_flow/reduction_block_1')\n\n const entry_flow = {\n conv_in: entry_flow_conv_in,\n reduction_block_0: entry_flow_reduction_block_0,\n reduction_block_1: entry_flow_reduction_block_1\n }\n\n const middle_flow = {}\n range(numMainBlocks, 0, 1).forEach((idx) => {\n middle_flow[`main_block_${idx}`] = extractMainBlockParams(128, `middle_flow/main_block_${idx}`)\n })\n\n const exit_flow_reduction_block = extractReductionBlockParams(128, 256, 'exit_flow/reduction_block')\n const exit_flow_separable_conv = extractSeparableConvParams(256, 512, 'exit_flow/separable_conv')\n\n const exit_flow = {\n reduction_block: exit_flow_reduction_block,\n separable_conv: exit_flow_separable_conv\n }\n\n if (getRemainingWeights().length !== 0) {\n throw new Error(`weights remaing after extract: ${getRemainingWeights().length}`)\n }\n\n return {\n paramMappings,\n params: { entry_flow, middle_flow, exit_flow }\n }\n}","import * as tf from '@tensorflow/tfjs-core';\nimport { TfjsImageRecognitionBase, range } from 'tfjs-image-recognition-base';\n\nimport { loadConvParamsFactory } from '../common/loadConvParamsFactory';\nimport { MainBlockParams, ReductionBlockParams, TinyXceptionParams } from './types';\n\nfunction loadParamsFactory(weightMap: any, paramMappings: TfjsImageRecognitionBase.ParamMapping[]) {\n\n const extractWeightEntry = TfjsImageRecognitionBase.extractWeightEntryFactory(weightMap, paramMappings)\n\n const extractConvParams = loadConvParamsFactory(extractWeightEntry)\n const extractSeparableConvParams = TfjsImageRecognitionBase.loadSeparableConvParamsFactory(extractWeightEntry)\n\n function extractReductionBlockParams(mappedPrefix: string): ReductionBlockParams {\n\n const separable_conv0 = extractSeparableConvParams(`${mappedPrefix}/separable_conv0`)\n const separable_conv1 = extractSeparableConvParams(`${mappedPrefix}/separable_conv1`)\n const expansion_conv = extractConvParams(`${mappedPrefix}/expansion_conv`)\n\n return { separable_conv0, separable_conv1, expansion_conv }\n }\n\n function extractMainBlockParams(mappedPrefix: string): MainBlockParams {\n\n const separable_conv0 = extractSeparableConvParams(`${mappedPrefix}/separable_conv0`)\n const separable_conv1 = extractSeparableConvParams(`${mappedPrefix}/separable_conv1`)\n const separable_conv2 = extractSeparableConvParams(`${mappedPrefix}/separable_conv2`)\n\n return { separable_conv0, separable_conv1, separable_conv2 }\n }\n\n return {\n extractConvParams,\n extractSeparableConvParams,\n extractReductionBlockParams,\n extractMainBlockParams\n }\n}\n\nexport function extractParamsFromWeigthMap(\n weightMap: tf.NamedTensorMap,\n numMainBlocks: number\n): { params: TinyXceptionParams, paramMappings: TfjsImageRecognitionBase.ParamMapping[] } {\n\n const paramMappings: TfjsImageRecognitionBase.ParamMapping[] = []\n\n const {\n extractConvParams,\n extractSeparableConvParams,\n extractReductionBlockParams,\n extractMainBlockParams\n } = loadParamsFactory(weightMap, paramMappings)\n\n const entry_flow_conv_in = extractConvParams('entry_flow/conv_in')\n const entry_flow_reduction_block_0 = extractReductionBlockParams('entry_flow/reduction_block_0')\n const entry_flow_reduction_block_1 = extractReductionBlockParams('entry_flow/reduction_block_1')\n\n const entry_flow = {\n conv_in: entry_flow_conv_in,\n reduction_block_0: entry_flow_reduction_block_0,\n reduction_block_1: entry_flow_reduction_block_1\n }\n\n const middle_flow = {}\n range(numMainBlocks, 0, 1).forEach((idx) => {\n middle_flow[`main_block_${idx}`] = extractMainBlockParams(`middle_flow/main_block_${idx}`)\n })\n\n const exit_flow_reduction_block = extractReductionBlockParams('exit_flow/reduction_block')\n const exit_flow_separable_conv = extractSeparableConvParams('exit_flow/separable_conv')\n\n const exit_flow = {\n reduction_block: exit_flow_reduction_block,\n separable_conv: exit_flow_separable_conv\n }\n\n TfjsImageRecognitionBase.disposeUnusedWeightTensors(weightMap, paramMappings)\n\n return { params: { entry_flow, middle_flow, exit_flow }, paramMappings }\n}","import * as tf from '@tensorflow/tfjs-core';\nimport {\n NetInput,\n NeuralNetwork,\n normalize,\n range,\n TfjsImageRecognitionBase,\n TNetInput,\n toNetInput,\n} from 'tfjs-image-recognition-base';\n\nimport { depthwiseSeparableConv } from '../common/depthwiseSeparableConv';\nimport { bgrToRgbTensor } from '../mtcnn/bgrToRgbTensor';\nimport { extractParams } from './extractParams';\nimport { extractParamsFromWeigthMap } from './extractParamsFromWeigthMap';\nimport { MainBlockParams, ReductionBlockParams, TinyXceptionParams } from './types';\n\nfunction conv(x: tf.Tensor4D, params: TfjsImageRecognitionBase.ConvParams, stride: [number, number]): tf.Tensor4D {\n return tf.add(tf.conv2d(x, params.filters, stride, 'same'), params.bias)\n}\n\nfunction reductionBlock(x: tf.Tensor4D, params: ReductionBlockParams, isActivateInput: boolean = true): tf.Tensor4D {\n let out = isActivateInput ? tf.relu(x) : x\n out = depthwiseSeparableConv(out, params.separable_conv0, [1, 1])\n out = depthwiseSeparableConv(tf.relu(out), params.separable_conv1, [1, 1])\n out = tf.maxPool(out, [3, 3], [2, 2], 'same')\n out = tf.add(out, conv(x, params.expansion_conv, [2, 2]))\n return out\n}\n\nfunction mainBlock(x: tf.Tensor4D, params: MainBlockParams): tf.Tensor4D {\n let out = depthwiseSeparableConv(tf.relu(x), params.separable_conv0, [1, 1])\n out = depthwiseSeparableConv(tf.relu(out), params.separable_conv1, [1, 1])\n out = depthwiseSeparableConv(tf.relu(out), params.separable_conv2, [1, 1])\n out = tf.add(out, x)\n return out\n}\n\nexport class TinyXception extends NeuralNetwork {\n\n private _numMainBlocks: number\n\n constructor(numMainBlocks: number) {\n super('TinyXception')\n this._numMainBlocks = numMainBlocks\n }\n\n public forwardInput(input: NetInput): tf.Tensor4D {\n\n const { params } = this\n\n if (!params) {\n throw new Error('TinyXception - load model before inference')\n }\n\n return tf.tidy(() => {\n const batchTensor = input.toBatchTensor(112, true)\n const meanRgb = [122.782, 117.001, 104.298]\n const normalized = normalize(batchTensor, meanRgb).div(tf.scalar(256)) as tf.Tensor4D\n\n let out = tf.relu(conv(normalized, params.entry_flow.conv_in, [2, 2]))\n out = reductionBlock(out, params.entry_flow.reduction_block_0, false)\n out = reductionBlock(out, params.entry_flow.reduction_block_1)\n\n range(this._numMainBlocks, 0, 1).forEach((idx) => {\n out = mainBlock(out, params.middle_flow[`main_block_${idx}`])\n })\n\n out = reductionBlock(out, params.exit_flow.reduction_block)\n out = tf.relu(depthwiseSeparableConv(out, params.exit_flow.separable_conv, [1, 1]))\n return out\n })\n }\n\n public async forward(input: TNetInput): Promise {\n return this.forwardInput(await toNetInput(input))\n }\n\n protected getDefaultModelName(): string {\n return 'tiny_xception_model'\n }\n\n protected extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap) {\n return extractParamsFromWeigthMap(weightMap, this._numMainBlocks)\n }\n\n protected extractParams(weights: Float32Array) {\n return extractParams(weights, this._numMainBlocks)\n }\n}","import { TfjsImageRecognitionBase } from 'tfjs-image-recognition-base';\n\nimport { NetParams } from './types';\n\nexport function extractParams(weights: Float32Array): { params: NetParams, paramMappings: TfjsImageRecognitionBase.ParamMapping[] } {\n\n const paramMappings: TfjsImageRecognitionBase.ParamMapping[] = []\n\n const {\n extractWeights,\n getRemainingWeights\n } = TfjsImageRecognitionBase.extractWeightsFactory(weights)\n\n const extractFCParams = TfjsImageRecognitionBase.extractFCParamsFactory(extractWeights, paramMappings)\n\n const age = extractFCParams(512, 1, 'fc/age')\n const gender = extractFCParams(512, 2, 'fc/gender')\n\n if (getRemainingWeights().length !== 0) {\n throw new Error(`weights remaing after extract: ${getRemainingWeights().length}`)\n }\n\n return {\n paramMappings,\n params: { fc: { age, gender } }\n }\n}","import * as tf from '@tensorflow/tfjs-core';\nimport { TfjsImageRecognitionBase } from 'tfjs-image-recognition-base';\n\nimport { NetParams } from './types';\n\nexport function extractParamsFromWeigthMap(\n weightMap: tf.NamedTensorMap\n): { params: NetParams, paramMappings: TfjsImageRecognitionBase.ParamMapping[] } {\n\n const paramMappings: TfjsImageRecognitionBase.ParamMapping[] = []\n\n const extractWeightEntry = TfjsImageRecognitionBase.extractWeightEntryFactory(weightMap, paramMappings)\n\n function extractFcParams(prefix: string): TfjsImageRecognitionBase.FCParams {\n const weights = extractWeightEntry(`${prefix}/weights`, 2)\n const bias = extractWeightEntry(`${prefix}/bias`, 1)\n return { weights, bias }\n }\n\n const params = {\n fc: {\n age: extractFcParams('fc/age'),\n gender: extractFcParams('fc/gender')\n }\n }\n\n TfjsImageRecognitionBase.disposeUnusedWeightTensors(weightMap, paramMappings)\n\n return { params, paramMappings }\n}","import * as tf from '@tensorflow/tfjs-core';\nimport { TfjsImageRecognitionBase } from 'tfjs-image-recognition-base';\n\nexport type AgeAndGenderPrediction = {\n age: number\n gender: Gender\n genderProbability: number\n}\n\nexport enum Gender {\n FEMALE = 'female',\n MALE = 'male'\n}\n\nexport type NetOutput = { age: tf.Tensor1D, gender: tf.Tensor2D }\n\nexport type NetParams = {\n fc: {\n age: TfjsImageRecognitionBase.FCParams\n gender: TfjsImageRecognitionBase.FCParams\n }\n}","import * as tf from '@tensorflow/tfjs-core';\nimport { NetInput, NeuralNetwork, TNetInput, toNetInput } from 'tfjs-image-recognition-base';\n\nimport { fullyConnectedLayer } from '../common/fullyConnectedLayer';\nimport { seperateWeightMaps } from '../faceProcessor/util';\nimport { TinyXception } from '../xception/TinyXception';\nimport { extractParams } from './extractParams';\nimport { extractParamsFromWeigthMap } from './extractParamsFromWeigthMap';\nimport { AgeAndGenderPrediction, Gender, NetOutput, NetParams } from './types';\n\nexport class AgeGenderNet extends NeuralNetwork {\n\n private _faceFeatureExtractor: TinyXception\n\n constructor(faceFeatureExtractor: TinyXception = new TinyXception(2)) {\n super('AgeGenderNet')\n this._faceFeatureExtractor = faceFeatureExtractor\n }\n\n public get faceFeatureExtractor(): TinyXception {\n return this._faceFeatureExtractor\n }\n\n public runNet(input: NetInput | tf.Tensor4D): NetOutput {\n\n const { params } = this\n\n if (!params) {\n throw new Error(`${this._name} - load model before inference`)\n }\n\n return tf.tidy(() => {\n const bottleneckFeatures = input instanceof NetInput\n ? this.faceFeatureExtractor.forwardInput(input)\n : input\n\n const pooled = tf.avgPool(bottleneckFeatures, [7, 7], [2, 2], 'valid').as2D(bottleneckFeatures.shape[0], -1)\n const age = fullyConnectedLayer(pooled, params.fc.age).as1D()\n const gender = fullyConnectedLayer(pooled, params.fc.gender)\n return { age, gender }\n })\n }\n\n public forwardInput(input: NetInput | tf.Tensor4D): NetOutput {\n return tf.tidy(() => {\n const { age, gender } = this.runNet(input)\n return { age, gender: tf.softmax(gender) }\n })\n }\n\n public async forward(input: TNetInput): Promise {\n return this.forwardInput(await toNetInput(input))\n }\n\n public async predictAgeAndGender(input: TNetInput): Promise {\n const netInput = await toNetInput(input)\n const out = await this.forwardInput(netInput)\n\n const ages = tf.unstack(out.age)\n const genders = tf.unstack(out.gender)\n const ageAndGenderTensors = ages.map((ageTensor, i) => ({\n ageTensor,\n genderTensor: genders[i]\n }))\n\n const predictionsByBatch = await Promise.all(\n ageAndGenderTensors.map(async ({ ageTensor, genderTensor }) => {\n const age = (await ageTensor.data())[0]\n const probMale = (await genderTensor.data())[0]\n const isMale = probMale > 0.5\n const gender = isMale ? Gender.MALE : Gender.FEMALE\n const genderProbability = isMale ? probMale : (1 - probMale)\n\n ageTensor.dispose()\n genderTensor.dispose()\n return { age, gender, genderProbability }\n })\n )\n out.age.dispose()\n out.gender.dispose()\n\n return netInput.isBatchInput\n ? predictionsByBatch\n : predictionsByBatch[0]\n }\n\n protected getDefaultModelName(): string {\n return 'age_gender_model'\n }\n\n public dispose(throwOnRedispose: boolean = true) {\n this.faceFeatureExtractor.dispose(throwOnRedispose)\n super.dispose(throwOnRedispose)\n }\n\n public loadClassifierParams(weights: Float32Array) {\n const { params, paramMappings } = this.extractClassifierParams(weights)\n this._params = params\n this._paramMappings = paramMappings\n }\n\n public extractClassifierParams(weights: Float32Array) {\n return extractParams(weights)\n }\n\n protected extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap) {\n\n const { featureExtractorMap, classifierMap } = seperateWeightMaps(weightMap)\n\n this.faceFeatureExtractor.loadFromWeightMap(featureExtractorMap)\n\n return extractParamsFromWeigthMap(classifierMap)\n }\n\n protected extractParams(weights: Float32Array) {\n\n const classifierWeightSize = (512 * 1 + 1) + (512 * 2 + 2)\n\n const featureExtractorWeights = weights.slice(0, weights.length - classifierWeightSize)\n const classifierWeights = weights.slice(weights.length - classifierWeightSize)\n\n this.faceFeatureExtractor.extractWeights(featureExtractorWeights)\n return this.extractClassifierParams(classifierWeights)\n }\n}","import { getCenterPoint, Point } from 'tfjs-image-recognition-base';\n\nimport { FaceLandmarks } from './FaceLandmarks';\n\nexport class FaceLandmarks5 extends FaceLandmarks {\n\n protected getRefPointsForAlignment(): Point[] {\n const pts = this.positions\n return [\n pts[0],\n pts[1],\n getCenterPoint([pts[3], pts[4]])\n ]\n }\n}","import { round } from 'tfjs-image-recognition-base';\n\nexport interface IFaceMatch {\n label: string\n distance: number\n}\n\nexport class FaceMatch implements IFaceMatch {\n private _label: string\n private _distance: number\n\n constructor(label: string, distance: number) {\n this._label = label\n this._distance = distance\n }\n\n public get label(): string { return this._label }\n public get distance(): number { return this._distance }\n\n public toString(withDistance: boolean = true): string {\n return `${this.label}${withDistance ? ` (${round(this.distance)})` : ''}`\n }\n}","export class LabeledFaceDescriptors {\n private _label: string\n private _descriptors: Float32Array[]\n\n constructor(label: string, descriptors: Float32Array[]) {\n if (!(typeof label === 'string')) {\n throw new Error('LabeledFaceDescriptors - constructor expected label to be a string')\n }\n\n if (!Array.isArray(descriptors) || descriptors.some(desc => !(desc instanceof Float32Array))) {\n throw new Error('LabeledFaceDescriptors - constructor expected descriptors to be an array of Float32Array')\n }\n\n this._label = label\n this._descriptors = descriptors\n }\n\n public get label(): string { return this._label }\n public get descriptors(): Float32Array[] { return this._descriptors }\n}","import {\n createCanvas,\n env,\n getContext2dOrThrow,\n imageTensorToCanvas,\n Rect,\n TNetInput,\n toNetInput,\n} from 'tfjs-image-recognition-base';\n\nimport { FaceDetection } from '../classes/FaceDetection';\n\n/**\n * Extracts the image regions containing the detected faces.\n *\n * @param input The image that face detection has been performed on.\n * @param detections The face detection results or face bounding boxes for that image.\n * @returns The Canvases of the corresponding image region for each detected face.\n */\nexport async function extractFaces(\n input: TNetInput,\n detections: Array\n): Promise {\n\n const { Canvas } = env.getEnv()\n\n let canvas = input as HTMLCanvasElement\n\n if (!(input instanceof Canvas)) {\n const netInput = await toNetInput(input)\n\n if (netInput.batchSize > 1) {\n throw new Error('extractFaces - batchSize > 1 not supported')\n }\n\n const tensorOrCanvas = netInput.getInput(0)\n canvas = tensorOrCanvas instanceof Canvas\n ? tensorOrCanvas\n : await imageTensorToCanvas(tensorOrCanvas)\n }\n\n const ctx = getContext2dOrThrow(canvas)\n const boxes = detections.map(\n det => det instanceof FaceDetection\n ? det.forSize(canvas.width, canvas.height).box.floor()\n : det\n )\n .map(box => box.clipAtImageBorders(canvas.width, canvas.height))\n\n return boxes.map(({ x, y, width, height }) => {\n const faceImg = createCanvas({ width, height })\n getContext2dOrThrow(faceImg)\n .putImageData(ctx.getImageData(x, y, width, height), 0, 0)\n return faceImg\n })\n}","import * as tf from '@tensorflow/tfjs-core';\nimport { isTensor4D, Rect, isTensor3D } from 'tfjs-image-recognition-base';\n\nimport { FaceDetection } from '../classes/FaceDetection';\n\n/**\n * Extracts the tensors of the image regions containing the detected faces.\n * Useful if you want to compute the face descriptors for the face images.\n * Using this method is faster then extracting a canvas for each face and\n * converting them to tensors individually.\n *\n * @param imageTensor The image tensor that face detection has been performed on.\n * @param detections The face detection results or face bounding boxes for that image.\n * @returns Tensors of the corresponding image region for each detected face.\n */\nexport async function extractFaceTensors(\n imageTensor: tf.Tensor3D | tf.Tensor4D,\n detections: Array\n): Promise {\n\n if (!isTensor3D(imageTensor) && !isTensor4D(imageTensor)) {\n throw new Error('extractFaceTensors - expected image tensor to be 3D or 4D')\n }\n\n if (isTensor4D(imageTensor) && imageTensor.shape[0] > 1) {\n throw new Error('extractFaceTensors - batchSize > 1 not supported')\n }\n\n return tf.tidy(() => {\n const [imgHeight, imgWidth, numChannels] = imageTensor.shape.slice(isTensor4D(imageTensor) ? 1 : 0)\n\n const boxes = detections.map(\n det => det instanceof FaceDetection\n ? det.forSize(imgWidth, imgHeight).box\n : det\n )\n .map(box => box.clipAtImageBorders(imgWidth, imgHeight))\n\n const faceTensors = boxes.map(({ x, y, width, height }) =>\n tf.slice3d(imageTensor.as3D(imgHeight, imgWidth, numChannels), [y, x, 0], [height, width, numChannels])\n )\n\n return faceTensors\n })\n}","import * as tf from '@tensorflow/tfjs-core';\nimport { IDimensions, isEven, NetInput, Point, TNetInput, toNetInput } from 'tfjs-image-recognition-base';\n\nimport { FaceLandmarks68 } from '../classes/FaceLandmarks68';\nimport { FaceFeatureExtractorParams, TinyFaceFeatureExtractorParams } from '../faceFeatureExtractor/types';\nimport { FaceProcessor } from '../faceProcessor/FaceProcessor';\n\nexport abstract class FaceLandmark68NetBase<\n TExtractorParams extends FaceFeatureExtractorParams | TinyFaceFeatureExtractorParams\n>\n extends FaceProcessor {\n\n public postProcess(output: tf.Tensor2D, inputSize: number, originalDimensions: IDimensions[]): tf.Tensor2D {\n\n const inputDimensions = originalDimensions.map(({ width, height }) => {\n const scale = inputSize / Math.max(height, width)\n return {\n width: width * scale,\n height: height * scale\n }\n })\n\n const batchSize = inputDimensions.length\n\n return tf.tidy(() => {\n const createInterleavedTensor = (fillX: number, fillY: number) =>\n tf.stack([\n tf.fill([68], fillX),\n tf.fill([68], fillY)\n ], 1).as2D(1, 136).as1D()\n\n const getPadding = (batchIdx: number, cond: (w: number, h: number) => boolean): number => {\n const { width, height } = inputDimensions[batchIdx]\n return cond(width, height) ? Math.abs(width - height) / 2 : 0\n }\n const getPaddingX = (batchIdx: number) => getPadding(batchIdx, (w, h) => w < h)\n const getPaddingY = (batchIdx: number) => getPadding(batchIdx, (w, h) => h < w)\n\n const landmarkTensors = output\n .mul(tf.fill([batchSize, 136], inputSize))\n .sub(tf.stack(Array.from(Array(batchSize), (_, batchIdx) =>\n createInterleavedTensor(\n getPaddingX(batchIdx),\n getPaddingY(batchIdx)\n )\n )))\n .div(tf.stack(Array.from(Array(batchSize), (_, batchIdx) =>\n createInterleavedTensor(\n inputDimensions[batchIdx].width,\n inputDimensions[batchIdx].height\n )\n )))\n\n return landmarkTensors as tf.Tensor2D\n })\n }\n\n public forwardInput(input: NetInput): tf.Tensor2D {\n return tf.tidy(() => {\n const out = this.runNet(input)\n return this.postProcess(\n out,\n input.inputSize as number,\n input.inputDimensions.map(([height, width]) => ({ height, width }))\n )\n })\n }\n\n public async forward(input: TNetInput): Promise {\n return this.forwardInput(await toNetInput(input))\n }\n\n public async detectLandmarks(input: TNetInput): Promise {\n const netInput = await toNetInput(input)\n const landmarkTensors = tf.tidy(\n () => tf.unstack(this.forwardInput(netInput))\n )\n\n const landmarksForBatch = await Promise.all(landmarkTensors.map(\n async (landmarkTensor, batchIdx) => {\n const landmarksArray = Array.from(await landmarkTensor.data())\n const xCoords = landmarksArray.filter((_, i) => isEven(i))\n const yCoords = landmarksArray.filter((_, i) => !isEven(i))\n\n return new FaceLandmarks68(\n Array(68).fill(0).map((_, i) => new Point(xCoords[i], yCoords[i])),\n {\n height: netInput.getInputHeight(batchIdx),\n width : netInput.getInputWidth(batchIdx),\n }\n )\n }\n ))\n\n landmarkTensors.forEach(t => t.dispose())\n\n return netInput.isBatchInput\n ? landmarksForBatch\n : landmarksForBatch[0]\n }\n\n protected getClassifierChannelsOut(): number {\n return 136\n }\n}","import { FaceFeatureExtractor } from '../faceFeatureExtractor/FaceFeatureExtractor';\nimport { FaceFeatureExtractorParams } from '../faceFeatureExtractor/types';\nimport { FaceLandmark68NetBase } from './FaceLandmark68NetBase';\n\nexport class FaceLandmark68Net extends FaceLandmark68NetBase {\n\n constructor(faceFeatureExtractor: FaceFeatureExtractor = new FaceFeatureExtractor()) {\n super('FaceLandmark68Net', faceFeatureExtractor)\n }\n\n protected getDefaultModelName(): string {\n return 'face_landmark_68_model'\n }\n\n protected getClassifierChannelsIn(): number {\n return 256\n }\n}","import * as tf from '@tensorflow/tfjs-core';\nimport { TfjsImageRecognitionBase } from 'tfjs-image-recognition-base';\n\nimport { loadParamsFactory } from './loadParamsFactory';\nimport { TinyFaceFeatureExtractorParams } from './types';\n\nexport function extractParamsFromWeigthMapTiny(\n weightMap: tf.NamedTensorMap\n): { params: TinyFaceFeatureExtractorParams, paramMappings: TfjsImageRecognitionBase.ParamMapping[] } {\n\n const paramMappings: TfjsImageRecognitionBase.ParamMapping[] = []\n\n const {\n extractDenseBlock3Params\n } = loadParamsFactory(weightMap, paramMappings)\n\n const params = {\n dense0: extractDenseBlock3Params('dense0', true),\n dense1: extractDenseBlock3Params('dense1'),\n dense2: extractDenseBlock3Params('dense2')\n }\n\n TfjsImageRecognitionBase.disposeUnusedWeightTensors(weightMap, paramMappings)\n\n return { params, paramMappings }\n}","import { TfjsImageRecognitionBase } from 'tfjs-image-recognition-base';\n\nimport { extractorsFactory } from './extractorsFactory';\nimport { TinyFaceFeatureExtractorParams } from './types';\n\n\nexport function extractParamsTiny(weights: Float32Array): { params: TinyFaceFeatureExtractorParams, paramMappings: TfjsImageRecognitionBase.ParamMapping[] } {\n\n const paramMappings: TfjsImageRecognitionBase.ParamMapping[] = []\n\n const {\n extractWeights,\n getRemainingWeights\n } = TfjsImageRecognitionBase.extractWeightsFactory(weights)\n\n const {\n extractDenseBlock3Params\n } = extractorsFactory(extractWeights, paramMappings)\n\n const dense0 = extractDenseBlock3Params(3, 32, 'dense0', true)\n const dense1 = extractDenseBlock3Params(32, 64, 'dense1')\n const dense2 = extractDenseBlock3Params(64, 128, 'dense2')\n\n if (getRemainingWeights().length !== 0) {\n throw new Error(`weights remaing after extract: ${getRemainingWeights().length}`)\n }\n\n return {\n paramMappings,\n params: { dense0, dense1, dense2 }\n }\n}","import * as tf from '@tensorflow/tfjs-core';\nimport { NetInput, NeuralNetwork, normalize, TNetInput, toNetInput } from 'tfjs-image-recognition-base';\n\nimport { denseBlock3 } from './denseBlock';\nimport { extractParamsFromWeigthMapTiny } from './extractParamsFromWeigthMapTiny';\nimport { extractParamsTiny } from './extractParamsTiny';\nimport { IFaceFeatureExtractor, TinyFaceFeatureExtractorParams } from './types';\n\nexport class TinyFaceFeatureExtractor extends NeuralNetwork implements IFaceFeatureExtractor {\n\n constructor() {\n super('TinyFaceFeatureExtractor')\n }\n\n public forwardInput(input: NetInput): tf.Tensor4D {\n\n const { params } = this\n\n if (!params) {\n throw new Error('TinyFaceFeatureExtractor - load model before inference')\n }\n\n return tf.tidy(() => {\n const batchTensor = input.toBatchTensor(112, true)\n const meanRgb = [122.782, 117.001, 104.298]\n const normalized = normalize(batchTensor, meanRgb).div(tf.scalar(255)) as tf.Tensor4D\n\n let out = denseBlock3(normalized, params.dense0, true)\n out = denseBlock3(out, params.dense1)\n out = denseBlock3(out, params.dense2)\n out = tf.avgPool(out, [14, 14], [2, 2], 'valid')\n\n return out\n })\n }\n\n public async forward(input: TNetInput): Promise {\n return this.forwardInput(await toNetInput(input))\n }\n\n protected getDefaultModelName(): string {\n return 'face_feature_extractor_tiny_model'\n }\n\n protected extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap) {\n return extractParamsFromWeigthMapTiny(weightMap)\n }\n\n protected extractParams(weights: Float32Array) {\n return extractParamsTiny(weights)\n }\n}","import { TinyFaceFeatureExtractor } from '../faceFeatureExtractor/TinyFaceFeatureExtractor';\nimport { TinyFaceFeatureExtractorParams } from '../faceFeatureExtractor/types';\nimport { FaceLandmark68NetBase } from './FaceLandmark68NetBase';\n\nexport class FaceLandmark68TinyNet extends FaceLandmark68NetBase {\n\n constructor(faceFeatureExtractor: TinyFaceFeatureExtractor = new TinyFaceFeatureExtractor()) {\n super('FaceLandmark68TinyNet', faceFeatureExtractor)\n }\n\n protected getDefaultModelName(): string {\n return 'face_landmark_68_tiny_model'\n }\n\n protected getClassifierChannelsIn(): number {\n return 128\n }\n}","import { FaceLandmark68Net } from './FaceLandmark68Net';\n\nexport * from './FaceLandmark68Net';\nexport * from './FaceLandmark68TinyNet';\n\nexport class FaceLandmarkNet extends FaceLandmark68Net {}","import * as tf from '@tensorflow/tfjs-core';\n\nimport { ScaleLayerParams } from './types';\n\nexport function scale(x: tf.Tensor4D, params: ScaleLayerParams): tf.Tensor4D {\n return tf.add(tf.mul(x, params.weights), params.biases)\n}\n","import * as tf from '@tensorflow/tfjs-core';\n\nimport { scale } from './scaleLayer';\nimport { ConvLayerParams } from './types';\n\n\nfunction convLayer(\n x: tf.Tensor4D,\n params: ConvLayerParams,\n strides: [number, number],\n withRelu: boolean,\n padding: 'valid' | 'same' = 'same'\n): tf.Tensor4D {\n const { filters, bias } = params.conv\n\n let out = tf.conv2d(x, filters, strides, padding)\n out = tf.add(out, bias)\n out = scale(out, params.scale)\n return withRelu ? tf.relu(out) : out\n}\n\nexport function conv(x: tf.Tensor4D, params: ConvLayerParams) {\n return convLayer(x, params, [1, 1], true)\n}\n\nexport function convNoRelu(x: tf.Tensor4D, params: ConvLayerParams) {\n return convLayer(x, params, [1, 1], false)\n}\n\nexport function convDown(x: tf.Tensor4D, params: ConvLayerParams) {\n return convLayer(x, params, [2, 2], true, 'valid')\n}","import * as tf from '@tensorflow/tfjs-core';\nimport { isFloat, TfjsImageRecognitionBase } from 'tfjs-image-recognition-base';\n\nimport { ConvLayerParams, NetParams, ResidualLayerParams, ScaleLayerParams } from './types';\n\nfunction extractorsFactory(extractWeights: TfjsImageRecognitionBase.ExtractWeightsFunction, paramMappings: TfjsImageRecognitionBase.ParamMapping[]) {\n\n function extractFilterValues(numFilterValues: number, numFilters: number, filterSize: number): tf.Tensor4D {\n const weights = extractWeights(numFilterValues)\n const depth = weights.length / (numFilters * filterSize * filterSize)\n\n if (isFloat(depth)) {\n throw new Error(`depth has to be an integer: ${depth}, weights.length: ${weights.length}, numFilters: ${numFilters}, filterSize: ${filterSize}`)\n }\n\n return tf.tidy(\n () => tf.transpose(\n tf.tensor4d(weights, [numFilters, depth, filterSize, filterSize]),\n [2, 3, 1, 0]\n )\n )\n }\n\n function extractConvParams(\n numFilterValues: number,\n numFilters: number,\n filterSize: number,\n mappedPrefix: string\n ): TfjsImageRecognitionBase.ConvParams {\n\n const filters = extractFilterValues(numFilterValues, numFilters, filterSize)\n const bias = tf.tensor1d(extractWeights(numFilters))\n\n paramMappings.push(\n { paramPath: `${mappedPrefix}/filters` },\n { paramPath: `${mappedPrefix}/bias` }\n )\n\n return { filters, bias }\n }\n\n function extractScaleLayerParams(numWeights: number, mappedPrefix: string): ScaleLayerParams {\n\n const weights = tf.tensor1d(extractWeights(numWeights))\n const biases = tf.tensor1d(extractWeights(numWeights))\n\n paramMappings.push(\n { paramPath: `${mappedPrefix}/weights` },\n { paramPath: `${mappedPrefix}/biases` }\n )\n\n return {\n weights,\n biases\n }\n }\n\n function extractConvLayerParams(\n numFilterValues: number,\n numFilters: number,\n filterSize: number,\n mappedPrefix: string\n ): ConvLayerParams {\n\n const conv = extractConvParams(numFilterValues, numFilters, filterSize, `${mappedPrefix}/conv`)\n const scale = extractScaleLayerParams(numFilters, `${mappedPrefix}/scale`)\n\n return { conv, scale }\n }\n\n function extractResidualLayerParams(\n numFilterValues: number,\n numFilters: number,\n filterSize: number,\n mappedPrefix: string,\n isDown: boolean = false\n ): ResidualLayerParams {\n\n const conv1 = extractConvLayerParams((isDown ? 0.5 : 1) * numFilterValues, numFilters, filterSize, `${mappedPrefix}/conv1`)\n const conv2 = extractConvLayerParams(numFilterValues, numFilters, filterSize, `${mappedPrefix}/conv2`)\n\n return { conv1, conv2 }\n }\n\n return {\n extractConvLayerParams,\n extractResidualLayerParams\n }\n\n}\n\nexport function extractParams(weights: Float32Array): { params: NetParams, paramMappings: TfjsImageRecognitionBase.ParamMapping[] } {\n\n const {\n extractWeights,\n getRemainingWeights\n } = TfjsImageRecognitionBase.extractWeightsFactory(weights)\n\n const paramMappings: TfjsImageRecognitionBase.ParamMapping[] = []\n\n const {\n extractConvLayerParams,\n extractResidualLayerParams\n } = extractorsFactory(extractWeights, paramMappings)\n\n const conv32_down = extractConvLayerParams(4704, 32, 7, 'conv32_down')\n const conv32_1 = extractResidualLayerParams(9216, 32, 3, 'conv32_1')\n const conv32_2 = extractResidualLayerParams(9216, 32, 3, 'conv32_2')\n const conv32_3 = extractResidualLayerParams(9216, 32, 3, 'conv32_3')\n\n const conv64_down = extractResidualLayerParams(36864, 64, 3, 'conv64_down', true)\n const conv64_1 = extractResidualLayerParams(36864, 64, 3, 'conv64_1')\n const conv64_2 = extractResidualLayerParams(36864, 64, 3, 'conv64_2')\n const conv64_3 = extractResidualLayerParams(36864, 64, 3, 'conv64_3')\n\n const conv128_down = extractResidualLayerParams(147456, 128, 3, 'conv128_down', true)\n const conv128_1 = extractResidualLayerParams(147456, 128, 3, 'conv128_1')\n const conv128_2 = extractResidualLayerParams(147456, 128, 3, 'conv128_2')\n\n const conv256_down = extractResidualLayerParams(589824, 256, 3, 'conv256_down', true)\n const conv256_1 = extractResidualLayerParams(589824, 256, 3, 'conv256_1')\n const conv256_2 = extractResidualLayerParams(589824, 256, 3, 'conv256_2')\n const conv256_down_out = extractResidualLayerParams(589824, 256, 3, 'conv256_down_out')\n\n const fc = tf.tidy(\n () => tf.transpose(tf.tensor2d(extractWeights(256 * 128), [128, 256]), [1, 0])\n )\n paramMappings.push({ paramPath: `fc` })\n\n if (getRemainingWeights().length !== 0) {\n throw new Error(`weights remaing after extract: ${getRemainingWeights().length}`)\n }\n\n const params = {\n conv32_down,\n conv32_1,\n conv32_2,\n conv32_3,\n conv64_down,\n conv64_1,\n conv64_2,\n conv64_3,\n conv128_down,\n conv128_1,\n conv128_2,\n conv256_down,\n conv256_1,\n conv256_2,\n conv256_down_out,\n fc\n }\n\n return { params, paramMappings }\n}","import * as tf from '@tensorflow/tfjs-core';\nimport { isTensor2D, TfjsImageRecognitionBase } from 'tfjs-image-recognition-base';\n\nimport { ConvLayerParams, NetParams, ResidualLayerParams, ScaleLayerParams } from './types';\n\nfunction extractorsFactory(weightMap: any, paramMappings: TfjsImageRecognitionBase.ParamMapping[]) {\n\n const extractWeightEntry = TfjsImageRecognitionBase.extractWeightEntryFactory(weightMap, paramMappings)\n\n function extractScaleLayerParams(prefix: string): ScaleLayerParams {\n\n const weights = extractWeightEntry(`${prefix}/scale/weights`, 1)\n const biases = extractWeightEntry(`${prefix}/scale/biases`, 1)\n\n return { weights, biases }\n }\n\n function extractConvLayerParams(prefix: string): ConvLayerParams {\n\n const filters = extractWeightEntry(`${prefix}/conv/filters`, 4)\n const bias = extractWeightEntry(`${prefix}/conv/bias`, 1)\n const scale = extractScaleLayerParams(prefix)\n\n return { conv: { filters, bias }, scale }\n }\n\n function extractResidualLayerParams(prefix: string): ResidualLayerParams {\n return {\n conv1: extractConvLayerParams(`${prefix}/conv1`),\n conv2: extractConvLayerParams(`${prefix}/conv2`)\n }\n }\n\n return {\n extractConvLayerParams,\n extractResidualLayerParams\n }\n\n}\n\nexport function extractParamsFromWeigthMap(\n weightMap: tf.NamedTensorMap\n): { params: NetParams, paramMappings: TfjsImageRecognitionBase.ParamMapping[] } {\n\n const paramMappings: TfjsImageRecognitionBase.ParamMapping[] = []\n\n const {\n extractConvLayerParams,\n extractResidualLayerParams\n } = extractorsFactory(weightMap, paramMappings)\n\n const conv32_down = extractConvLayerParams('conv32_down')\n const conv32_1 = extractResidualLayerParams('conv32_1')\n const conv32_2 = extractResidualLayerParams('conv32_2')\n const conv32_3 = extractResidualLayerParams('conv32_3')\n\n const conv64_down = extractResidualLayerParams('conv64_down')\n const conv64_1 = extractResidualLayerParams('conv64_1')\n const conv64_2 = extractResidualLayerParams('conv64_2')\n const conv64_3 = extractResidualLayerParams('conv64_3')\n\n const conv128_down = extractResidualLayerParams('conv128_down')\n const conv128_1 = extractResidualLayerParams('conv128_1')\n const conv128_2 = extractResidualLayerParams('conv128_2')\n\n const conv256_down = extractResidualLayerParams('conv256_down')\n const conv256_1 = extractResidualLayerParams('conv256_1')\n const conv256_2 = extractResidualLayerParams('conv256_2')\n const conv256_down_out = extractResidualLayerParams('conv256_down_out')\n\n const fc = weightMap['fc']\n paramMappings.push({ originalPath: 'fc', paramPath: 'fc' })\n\n if (!isTensor2D(fc)) {\n throw new Error(`expected weightMap[fc] to be a Tensor2D, instead have ${fc}`)\n }\n\n const params = {\n conv32_down,\n conv32_1,\n conv32_2,\n conv32_3,\n conv64_down,\n conv64_1,\n conv64_2,\n conv64_3,\n conv128_down,\n conv128_1,\n conv128_2,\n conv256_down,\n conv256_1,\n conv256_2,\n conv256_down_out,\n fc\n }\n\n TfjsImageRecognitionBase.disposeUnusedWeightTensors(weightMap, paramMappings)\n\n return { params, paramMappings }\n}","import * as tf from '@tensorflow/tfjs-core';\n\nimport { conv, convDown, convNoRelu } from './convLayer';\nimport { ResidualLayerParams } from './types';\n\nexport function residual(x: tf.Tensor4D, params: ResidualLayerParams): tf.Tensor4D {\n let out = conv(x, params.conv1)\n out = convNoRelu(out, params.conv2)\n out = tf.add(out, x)\n out = tf.relu(out)\n return out\n}\n\nexport function residualDown(x: tf.Tensor4D, params: ResidualLayerParams): tf.Tensor4D {\n let out = convDown(x, params.conv1)\n out = convNoRelu(out, params.conv2)\n\n let pooled = tf.avgPool(x, 2, 2, 'valid') as tf.Tensor4D\n const zeros = tf.zeros(pooled.shape)\n const isPad = pooled.shape[3] !== out.shape[3]\n const isAdjustShape = pooled.shape[1] !== out.shape[1] || pooled.shape[2] !== out.shape[2]\n\n if (isAdjustShape) {\n const padShapeX = [...out.shape] as [number, number, number, number]\n padShapeX[1] = 1\n const zerosW = tf.zeros(padShapeX)\n out = tf.concat([out, zerosW], 1)\n\n const padShapeY = [...out.shape] as [number, number, number, number]\n padShapeY[2] = 1\n const zerosH = tf.zeros(padShapeY)\n out = tf.concat([out, zerosH], 2)\n }\n\n pooled = isPad ? tf.concat([pooled, zeros], 3) : pooled\n out = tf.add(pooled, out) as tf.Tensor4D\n\n out = tf.relu(out)\n return out\n}","import * as tf from '@tensorflow/tfjs-core';\nimport { NetInput, NeuralNetwork, normalize, TNetInput, toNetInput } from 'tfjs-image-recognition-base';\n\nimport { convDown } from './convLayer';\nimport { extractParams } from './extractParams';\nimport { extractParamsFromWeigthMap } from './extractParamsFromWeigthMap';\nimport { residual, residualDown } from './residualLayer';\nimport { NetParams } from './types';\n\n\nexport class FaceRecognitionNet extends NeuralNetwork {\n\n constructor() {\n super('FaceRecognitionNet')\n }\n\n public forwardInput(input: NetInput): tf.Tensor2D {\n\n const { params } = this\n\n if (!params) {\n throw new Error('FaceRecognitionNet - load model before inference')\n }\n\n return tf.tidy(() => {\n const batchTensor = input.toBatchTensor(150, true).toFloat()\n\n const meanRgb = [122.782, 117.001, 104.298]\n const normalized = normalize(batchTensor, meanRgb).div(tf.scalar(256)) as tf.Tensor4D\n\n let out = convDown(normalized, params.conv32_down)\n out = tf.maxPool(out, 3, 2, 'valid')\n\n out = residual(out, params.conv32_1)\n out = residual(out, params.conv32_2)\n out = residual(out, params.conv32_3)\n\n out = residualDown(out, params.conv64_down)\n out = residual(out, params.conv64_1)\n out = residual(out, params.conv64_2)\n out = residual(out, params.conv64_3)\n\n out = residualDown(out, params.conv128_down)\n out = residual(out, params.conv128_1)\n out = residual(out, params.conv128_2)\n\n out = residualDown(out, params.conv256_down)\n out = residual(out, params.conv256_1)\n out = residual(out, params.conv256_2)\n out = residualDown(out, params.conv256_down_out)\n\n const globalAvg = out.mean([1, 2]) as tf.Tensor2D\n const fullyConnected = tf.matMul(globalAvg, params.fc)\n\n return fullyConnected\n })\n }\n\n public async forward(input: TNetInput): Promise {\n return this.forwardInput(await toNetInput(input))\n }\n\n public async computeFaceDescriptor(input: TNetInput): Promise {\n const netInput = await toNetInput(input)\n\n const faceDescriptorTensors = tf.tidy(\n () => tf.unstack(this.forwardInput(netInput))\n )\n\n const faceDescriptorsForBatch = await Promise.all(faceDescriptorTensors.map(\n t => t.data()\n )) as Float32Array[]\n\n faceDescriptorTensors.forEach(t => t.dispose())\n\n return netInput.isBatchInput\n ? faceDescriptorsForBatch\n : faceDescriptorsForBatch[0]\n }\n\n protected getDefaultModelName(): string {\n return 'face_recognition_model'\n }\n\n protected extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap) {\n return extractParamsFromWeigthMap(weightMap)\n }\n\n protected extractParams(weights: Float32Array) {\n return extractParams(weights)\n }\n}","import { FaceRecognitionNet } from './FaceRecognitionNet';\n\nexport * from './FaceRecognitionNet';\n\nexport function createFaceRecognitionNet(weights: Float32Array) {\n const net = new FaceRecognitionNet()\n net.extractWeights(weights)\n return net\n}","export type WithFaceDescriptor = TSource & {\n descriptor: Float32Array\n}\n\nexport function extendWithFaceDescriptor<\n TSource\n> (\n sourceObj: TSource,\n descriptor: Float32Array\n): WithFaceDescriptor {\n\n const extension = { descriptor }\n return Object.assign({}, sourceObj, extension)\n}\n\n","export type WithAge = TSource & {\n age: number\n}\n\nexport function isWithAge(obj: any): obj is WithAge<{}> {\n return typeof obj['age'] === 'number'\n}\n\nexport function extendWithAge<\n TSource\n> (\n sourceObj: TSource,\n age: number\n): WithAge {\n\n const extension = { age }\n return Object.assign({}, sourceObj, extension)\n}","import { isValidProbablitiy } from 'tfjs-image-recognition-base';\n\nimport { Gender } from '../ageGenderNet/types';\n\nexport type WithGender = TSource & {\n gender: Gender\n genderProbability: number\n}\n\nexport function isWithGender(obj: any): obj is WithGender<{}> {\n return (obj['gender'] === Gender.MALE || obj['gender'] === Gender.FEMALE)\n && isValidProbablitiy(obj['genderProbability'])\n}\n\nexport function extendWithGender<\n TSource\n> (\n sourceObj: TSource,\n gender: Gender,\n genderProbability: number\n): WithGender {\n\n const extension = { gender, genderProbability }\n return Object.assign({}, sourceObj, extension)\n}","export interface IMtcnnOptions {\n minFaceSize?: number\n scaleFactor?: number\n maxNumScales?: number\n scoreThresholds?: number[]\n scaleSteps?: number[]\n}\n\nexport class MtcnnOptions {\n protected _name: string = 'MtcnnOptions'\n\n private _minFaceSize: number\n private _scaleFactor: number\n private _maxNumScales: number\n private _scoreThresholds: number[]\n private _scaleSteps: number[] | undefined\n\n constructor({ minFaceSize, scaleFactor, maxNumScales, scoreThresholds, scaleSteps }: IMtcnnOptions = {}) {\n this._minFaceSize = minFaceSize || 20\n this._scaleFactor = scaleFactor || 0.709\n this._maxNumScales = maxNumScales || 10\n this._scoreThresholds = scoreThresholds || [0.6, 0.7, 0.7]\n this._scaleSteps = scaleSteps\n\n if (typeof this._minFaceSize !== 'number' || this._minFaceSize < 0) {\n throw new Error(`${this._name} - expected minFaceSize to be a number > 0`)\n }\n\n if (typeof this._scaleFactor !== 'number' || this._scaleFactor <= 0 || this._scaleFactor >= 1) {\n throw new Error(`${this._name} - expected scaleFactor to be a number between 0 and 1`)\n }\n\n if (typeof this._maxNumScales !== 'number' || this._maxNumScales < 0) {\n throw new Error(`${this._name} - expected maxNumScales to be a number > 0`)\n }\n\n if (\n !Array.isArray(this._scoreThresholds)\n || this._scoreThresholds.length !== 3\n || this._scoreThresholds.some(th => typeof th !== 'number')\n ) {\n throw new Error(`${this._name} - expected scoreThresholds to be an array of numbers of length 3`)\n }\n\n if (\n this._scaleSteps\n && (!Array.isArray(this._scaleSteps) || this._scaleSteps.some(th => typeof th !== 'number'))\n ) {\n throw new Error(`${this._name} - expected scaleSteps to be an array of numbers`)\n }\n }\n\n get minFaceSize(): number { return this._minFaceSize }\n get scaleFactor(): number { return this._scaleFactor }\n get maxNumScales(): number { return this._maxNumScales }\n get scoreThresholds(): number[] { return this._scoreThresholds }\n get scaleSteps(): number[] | undefined { return this._scaleSteps }\n}","import * as tf from '@tensorflow/tfjs-core';\nimport { TfjsImageRecognitionBase } from 'tfjs-image-recognition-base';\n\nimport { MobileNetV1, NetParams, PointwiseConvParams, PredictionLayerParams } from './types';\n\nfunction extractorsFactory(extractWeights: TfjsImageRecognitionBase.ExtractWeightsFunction, paramMappings: TfjsImageRecognitionBase.ParamMapping[]) {\n\n function extractDepthwiseConvParams(numChannels: number, mappedPrefix: string): MobileNetV1.DepthwiseConvParams {\n\n const filters = tf.tensor4d(extractWeights(3 * 3 * numChannels), [3, 3, numChannels, 1])\n const batch_norm_scale = tf.tensor1d(extractWeights(numChannels))\n const batch_norm_offset = tf.tensor1d(extractWeights(numChannels))\n const batch_norm_mean = tf.tensor1d(extractWeights(numChannels))\n const batch_norm_variance = tf.tensor1d(extractWeights(numChannels))\n\n paramMappings.push(\n { paramPath: `${mappedPrefix}/filters` },\n { paramPath: `${mappedPrefix}/batch_norm_scale` },\n { paramPath: `${mappedPrefix}/batch_norm_offset` },\n { paramPath: `${mappedPrefix}/batch_norm_mean` },\n { paramPath: `${mappedPrefix}/batch_norm_variance` }\n )\n\n return {\n filters,\n batch_norm_scale,\n batch_norm_offset,\n batch_norm_mean,\n batch_norm_variance\n }\n }\n\n function extractConvParams(\n channelsIn: number,\n channelsOut: number,\n filterSize: number,\n mappedPrefix: string,\n isPointwiseConv?: boolean\n ): TfjsImageRecognitionBase.ConvParams {\n\n const filters = tf.tensor4d(\n extractWeights(channelsIn * channelsOut * filterSize * filterSize),\n [filterSize, filterSize, channelsIn, channelsOut]\n )\n const bias = tf.tensor1d(extractWeights(channelsOut))\n\n paramMappings.push(\n { paramPath: `${mappedPrefix}/filters` },\n { paramPath: `${mappedPrefix}/${isPointwiseConv ? 'batch_norm_offset' : 'bias'}` }\n )\n\n return { filters, bias }\n }\n\n function extractPointwiseConvParams(\n channelsIn: number,\n channelsOut: number,\n filterSize: number,\n mappedPrefix: string\n ): PointwiseConvParams {\n\n const {\n filters,\n bias\n } = extractConvParams(channelsIn, channelsOut, filterSize, mappedPrefix, true)\n\n return {\n filters,\n batch_norm_offset: bias\n }\n }\n\n function extractConvPairParams(\n channelsIn: number,\n channelsOut: number,\n mappedPrefix: string\n ): MobileNetV1.ConvPairParams {\n\n const depthwise_conv = extractDepthwiseConvParams(channelsIn, `${mappedPrefix}/depthwise_conv`)\n const pointwise_conv = extractPointwiseConvParams(channelsIn, channelsOut, 1, `${mappedPrefix}/pointwise_conv`)\n\n return { depthwise_conv, pointwise_conv }\n }\n\n function extractMobilenetV1Params(): MobileNetV1.Params {\n\n const conv_0 = extractPointwiseConvParams(3, 32, 3, 'mobilenetv1/conv_0')\n\n const conv_1 = extractConvPairParams(32, 64, 'mobilenetv1/conv_1')\n const conv_2 = extractConvPairParams(64, 128, 'mobilenetv1/conv_2')\n const conv_3 = extractConvPairParams(128, 128, 'mobilenetv1/conv_3')\n const conv_4 = extractConvPairParams(128, 256, 'mobilenetv1/conv_4')\n const conv_5 = extractConvPairParams(256, 256, 'mobilenetv1/conv_5')\n const conv_6 = extractConvPairParams(256, 512, 'mobilenetv1/conv_6')\n const conv_7 = extractConvPairParams(512, 512, 'mobilenetv1/conv_7')\n const conv_8 = extractConvPairParams(512, 512, 'mobilenetv1/conv_8')\n const conv_9 = extractConvPairParams(512, 512, 'mobilenetv1/conv_9')\n const conv_10 = extractConvPairParams(512, 512, 'mobilenetv1/conv_10')\n const conv_11 = extractConvPairParams(512, 512, 'mobilenetv1/conv_11')\n const conv_12 = extractConvPairParams(512, 1024, 'mobilenetv1/conv_12')\n const conv_13 = extractConvPairParams(1024, 1024, 'mobilenetv1/conv_13')\n\n return {\n conv_0,\n conv_1,\n conv_2,\n conv_3,\n conv_4,\n conv_5,\n conv_6,\n conv_7,\n conv_8,\n conv_9,\n conv_10,\n conv_11,\n conv_12,\n conv_13\n }\n }\n\n function extractPredictionLayerParams(): PredictionLayerParams {\n const conv_0 = extractPointwiseConvParams(1024, 256, 1, 'prediction_layer/conv_0')\n const conv_1 = extractPointwiseConvParams(256, 512, 3, 'prediction_layer/conv_1')\n const conv_2 = extractPointwiseConvParams(512, 128, 1, 'prediction_layer/conv_2')\n const conv_3 = extractPointwiseConvParams(128, 256, 3, 'prediction_layer/conv_3')\n const conv_4 = extractPointwiseConvParams(256, 128, 1, 'prediction_layer/conv_4')\n const conv_5 = extractPointwiseConvParams(128, 256, 3, 'prediction_layer/conv_5')\n const conv_6 = extractPointwiseConvParams(256, 64, 1, 'prediction_layer/conv_6')\n const conv_7 = extractPointwiseConvParams(64, 128, 3, 'prediction_layer/conv_7')\n\n const box_encoding_0_predictor = extractConvParams(512, 12, 1, 'prediction_layer/box_predictor_0/box_encoding_predictor')\n const class_predictor_0 = extractConvParams(512, 9, 1, 'prediction_layer/box_predictor_0/class_predictor')\n const box_encoding_1_predictor = extractConvParams(1024, 24, 1, 'prediction_layer/box_predictor_1/box_encoding_predictor')\n const class_predictor_1 = extractConvParams(1024, 18, 1, 'prediction_layer/box_predictor_1/class_predictor')\n const box_encoding_2_predictor = extractConvParams(512, 24, 1, 'prediction_layer/box_predictor_2/box_encoding_predictor')\n const class_predictor_2 = extractConvParams(512, 18, 1, 'prediction_layer/box_predictor_2/class_predictor')\n const box_encoding_3_predictor = extractConvParams(256, 24, 1, 'prediction_layer/box_predictor_3/box_encoding_predictor')\n const class_predictor_3 = extractConvParams(256, 18, 1, 'prediction_layer/box_predictor_3/class_predictor')\n const box_encoding_4_predictor = extractConvParams(256, 24, 1, 'prediction_layer/box_predictor_4/box_encoding_predictor')\n const class_predictor_4 = extractConvParams(256, 18, 1, 'prediction_layer/box_predictor_4/class_predictor')\n const box_encoding_5_predictor = extractConvParams(128, 24, 1, 'prediction_layer/box_predictor_5/box_encoding_predictor')\n const class_predictor_5 = extractConvParams(128, 18, 1, 'prediction_layer/box_predictor_5/class_predictor')\n\n const box_predictor_0 = {\n box_encoding_predictor: box_encoding_0_predictor,\n class_predictor: class_predictor_0\n }\n const box_predictor_1 = {\n box_encoding_predictor: box_encoding_1_predictor,\n class_predictor: class_predictor_1\n }\n const box_predictor_2 = {\n box_encoding_predictor: box_encoding_2_predictor,\n class_predictor: class_predictor_2\n }\n const box_predictor_3 = {\n box_encoding_predictor: box_encoding_3_predictor,\n class_predictor: class_predictor_3\n }\n const box_predictor_4 = {\n box_encoding_predictor: box_encoding_4_predictor,\n class_predictor: class_predictor_4\n }\n const box_predictor_5 = {\n box_encoding_predictor: box_encoding_5_predictor,\n class_predictor: class_predictor_5\n }\n\n return {\n conv_0,\n conv_1,\n conv_2,\n conv_3,\n conv_4,\n conv_5,\n conv_6,\n conv_7,\n box_predictor_0,\n box_predictor_1,\n box_predictor_2,\n box_predictor_3,\n box_predictor_4,\n box_predictor_5\n }\n }\n\n return {\n extractMobilenetV1Params,\n extractPredictionLayerParams\n }\n\n}\n\nexport function extractParams(weights: Float32Array): { params: NetParams, paramMappings: TfjsImageRecognitionBase.ParamMapping[] } {\n\n const paramMappings: TfjsImageRecognitionBase.ParamMapping[] = []\n\n const {\n extractWeights,\n getRemainingWeights\n } = TfjsImageRecognitionBase.extractWeightsFactory(weights)\n\n const {\n extractMobilenetV1Params,\n extractPredictionLayerParams\n } = extractorsFactory(extractWeights, paramMappings)\n\n const mobilenetv1 = extractMobilenetV1Params()\n const prediction_layer = extractPredictionLayerParams()\n const extra_dim = tf.tensor3d(\n extractWeights(5118 * 4),\n [1, 5118, 4]\n )\n const output_layer = {\n extra_dim\n }\n\n paramMappings.push({ paramPath: 'output_layer/extra_dim' })\n\n if (getRemainingWeights().length !== 0) {\n throw new Error(`weights remaing after extract: ${getRemainingWeights().length}`)\n }\n\n return {\n params: {\n mobilenetv1,\n prediction_layer,\n output_layer\n },\n paramMappings\n }\n}","import * as tf from '@tensorflow/tfjs-core';\nimport { isTensor3D, TfjsImageRecognitionBase } from 'tfjs-image-recognition-base';\n\nimport { BoxPredictionParams, MobileNetV1, NetParams, PointwiseConvParams, PredictionLayerParams } from './types';\n\nfunction extractorsFactory(weightMap: any, paramMappings: TfjsImageRecognitionBase.ParamMapping[]) {\n\n const extractWeightEntry = TfjsImageRecognitionBase.extractWeightEntryFactory(weightMap, paramMappings)\n\n function extractPointwiseConvParams(prefix: string, idx: number, mappedPrefix: string): PointwiseConvParams {\n\n const filters = extractWeightEntry(`${prefix}/Conv2d_${idx}_pointwise/weights`, 4, `${mappedPrefix}/filters`)\n const batch_norm_offset = extractWeightEntry(`${prefix}/Conv2d_${idx}_pointwise/convolution_bn_offset`, 1, `${mappedPrefix}/batch_norm_offset`)\n\n return { filters, batch_norm_offset }\n }\n\n function extractConvPairParams(idx: number): MobileNetV1.ConvPairParams {\n\n const mappedPrefix = `mobilenetv1/conv_${idx}`\n const prefixDepthwiseConv = `MobilenetV1/Conv2d_${idx}_depthwise`\n const mappedPrefixDepthwiseConv = `${mappedPrefix}/depthwise_conv`\n const mappedPrefixPointwiseConv = `${mappedPrefix}/pointwise_conv`\n\n const filters = extractWeightEntry(`${prefixDepthwiseConv}/depthwise_weights`, 4, `${mappedPrefixDepthwiseConv}/filters`)\n const batch_norm_scale = extractWeightEntry(`${prefixDepthwiseConv}/BatchNorm/gamma`, 1, `${mappedPrefixDepthwiseConv}/batch_norm_scale`)\n const batch_norm_offset = extractWeightEntry(`${prefixDepthwiseConv}/BatchNorm/beta`, 1, `${mappedPrefixDepthwiseConv}/batch_norm_offset`)\n const batch_norm_mean = extractWeightEntry(`${prefixDepthwiseConv}/BatchNorm/moving_mean`, 1, `${mappedPrefixDepthwiseConv}/batch_norm_mean`)\n const batch_norm_variance = extractWeightEntry(`${prefixDepthwiseConv}/BatchNorm/moving_variance`, 1, `${mappedPrefixDepthwiseConv}/batch_norm_variance`)\n\n return {\n depthwise_conv: {\n filters,\n batch_norm_scale,\n batch_norm_offset,\n batch_norm_mean,\n batch_norm_variance\n },\n pointwise_conv: extractPointwiseConvParams('MobilenetV1', idx, mappedPrefixPointwiseConv)\n }\n }\n\n function extractMobilenetV1Params(): MobileNetV1.Params {\n return {\n conv_0: extractPointwiseConvParams('MobilenetV1', 0, 'mobilenetv1/conv_0'),\n conv_1: extractConvPairParams(1),\n conv_2: extractConvPairParams(2),\n conv_3: extractConvPairParams(3),\n conv_4: extractConvPairParams(4),\n conv_5: extractConvPairParams(5),\n conv_6: extractConvPairParams(6),\n conv_7: extractConvPairParams(7),\n conv_8: extractConvPairParams(8),\n conv_9: extractConvPairParams(9),\n conv_10: extractConvPairParams(10),\n conv_11: extractConvPairParams(11),\n conv_12: extractConvPairParams(12),\n conv_13: extractConvPairParams(13)\n }\n }\n\n function extractConvParams(prefix: string, mappedPrefix: string): TfjsImageRecognitionBase.ConvParams {\n const filters = extractWeightEntry(`${prefix}/weights`, 4, `${mappedPrefix}/filters`)\n const bias = extractWeightEntry(`${prefix}/biases`, 1, `${mappedPrefix}/bias`)\n\n return { filters, bias }\n }\n\n function extractBoxPredictorParams(idx: number): BoxPredictionParams {\n\n const box_encoding_predictor = extractConvParams(\n `Prediction/BoxPredictor_${idx}/BoxEncodingPredictor`,\n `prediction_layer/box_predictor_${idx}/box_encoding_predictor`\n )\n const class_predictor = extractConvParams(\n `Prediction/BoxPredictor_${idx}/ClassPredictor`,\n `prediction_layer/box_predictor_${idx}/class_predictor`\n )\n\n return { box_encoding_predictor, class_predictor }\n }\n\n function extractPredictionLayerParams(): PredictionLayerParams {\n return {\n conv_0: extractPointwiseConvParams('Prediction', 0, 'prediction_layer/conv_0'),\n conv_1: extractPointwiseConvParams('Prediction', 1, 'prediction_layer/conv_1'),\n conv_2: extractPointwiseConvParams('Prediction', 2, 'prediction_layer/conv_2'),\n conv_3: extractPointwiseConvParams('Prediction', 3, 'prediction_layer/conv_3'),\n conv_4: extractPointwiseConvParams('Prediction', 4, 'prediction_layer/conv_4'),\n conv_5: extractPointwiseConvParams('Prediction', 5, 'prediction_layer/conv_5'),\n conv_6: extractPointwiseConvParams('Prediction', 6, 'prediction_layer/conv_6'),\n conv_7: extractPointwiseConvParams('Prediction', 7, 'prediction_layer/conv_7'),\n box_predictor_0: extractBoxPredictorParams(0),\n box_predictor_1: extractBoxPredictorParams(1),\n box_predictor_2: extractBoxPredictorParams(2),\n box_predictor_3: extractBoxPredictorParams(3),\n box_predictor_4: extractBoxPredictorParams(4),\n box_predictor_5: extractBoxPredictorParams(5)\n }\n }\n\n return {\n extractMobilenetV1Params,\n extractPredictionLayerParams\n }\n}\n\nexport function extractParamsFromWeigthMap(\n weightMap: tf.NamedTensorMap\n): { params: NetParams, paramMappings: TfjsImageRecognitionBase.ParamMapping[] } {\n\n const paramMappings: TfjsImageRecognitionBase.ParamMapping[] = []\n\n const {\n extractMobilenetV1Params,\n extractPredictionLayerParams\n } = extractorsFactory(weightMap, paramMappings)\n\n const extra_dim = weightMap['Output/extra_dim']\n paramMappings.push({ originalPath: 'Output/extra_dim', paramPath: 'output_layer/extra_dim' })\n\n if (!isTensor3D(extra_dim)) {\n throw new Error(`expected weightMap['Output/extra_dim'] to be a Tensor3D, instead have ${extra_dim}`)\n }\n\n const params = {\n mobilenetv1: extractMobilenetV1Params(),\n prediction_layer: extractPredictionLayerParams(),\n output_layer: {\n extra_dim\n }\n }\n\n TfjsImageRecognitionBase.disposeUnusedWeightTensors(weightMap, paramMappings)\n\n return { params, paramMappings }\n}","import * as tf from '@tensorflow/tfjs-core';\n\nimport { PointwiseConvParams } from './types';\n\nexport function pointwiseConvLayer(\n x: tf.Tensor4D,\n params: PointwiseConvParams,\n strides: [number, number]\n) {\n return tf.tidy(() => {\n\n let out = tf.conv2d(x, params.filters, strides, 'same')\n out = tf.add(out, params.batch_norm_offset)\n return tf.clipByValue(out, 0, 6)\n\n })\n}","import * as tf from '@tensorflow/tfjs-core';\n\nimport { pointwiseConvLayer } from './pointwiseConvLayer';\nimport { MobileNetV1 } from './types';\n\nconst epsilon = 0.0010000000474974513\n\nfunction depthwiseConvLayer(\n x: tf.Tensor4D,\n params: MobileNetV1.DepthwiseConvParams,\n strides: [number, number]\n) {\n return tf.tidy(() => {\n\n let out = tf.depthwiseConv2d(x, params.filters, strides, 'same')\n out = tf.batchNorm(\n out,\n params.batch_norm_mean,\n params.batch_norm_variance,\n params.batch_norm_offset,\n params.batch_norm_scale,\n epsilon\n )\n return tf.clipByValue(out, 0, 6)\n\n })\n}\n\nfunction getStridesForLayerIdx(layerIdx: number): [number, number] {\n return [2, 4, 6, 12].some(idx => idx === layerIdx) ? [2, 2] : [1, 1]\n}\n\nexport function mobileNetV1(x: tf.Tensor4D, params: MobileNetV1.Params) {\n return tf.tidy(() => {\n\n let conv11 = null\n let out = pointwiseConvLayer(x, params.conv_0, [2, 2])\n\n const convPairParams = [\n params.conv_1,\n params.conv_2,\n params.conv_3,\n params.conv_4,\n params.conv_5,\n params.conv_6,\n params.conv_7,\n params.conv_8,\n params.conv_9,\n params.conv_10,\n params.conv_11,\n params.conv_12,\n params.conv_13\n ]\n\n convPairParams.forEach((param, i) => {\n const layerIdx = i + 1\n const depthwiseConvStrides = getStridesForLayerIdx(layerIdx)\n out = depthwiseConvLayer(out, param.depthwise_conv, depthwiseConvStrides)\n out = pointwiseConvLayer(out, param.pointwise_conv, [1, 1])\n if (layerIdx === 11) {\n conv11 = out\n }\n })\n\n if (conv11 === null) {\n throw new Error('mobileNetV1 - output of conv layer 11 is null')\n }\n\n return {\n out,\n conv11: conv11 as any\n }\n\n })\n}","import * as tf from '@tensorflow/tfjs-core'\n\nexport function nonMaxSuppression(\n boxes: tf.Tensor2D,\n scores: number[],\n maxOutputSize: number,\n iouThreshold: number,\n scoreThreshold: number\n): number[] {\n\n const numBoxes = boxes.shape[0]\n const outputSize = Math.min(\n maxOutputSize,\n numBoxes\n )\n\n const candidates = scores\n .map((score, boxIndex) => ({ score, boxIndex }))\n .filter(c => c.score > scoreThreshold)\n .sort((c1, c2) => c2.score - c1.score)\n\n const suppressFunc = (x: number) => x <= iouThreshold ? 1 : 0\n\n const selected: number[] = []\n\n candidates.forEach(c => {\n if (selected.length >= outputSize) {\n return\n }\n const originalScore = c.score\n\n for (let j = selected.length - 1; j >= 0; --j) {\n const iou = IOU(boxes, c.boxIndex, selected[j])\n if (iou === 0.0) {\n continue\n }\n c.score *= suppressFunc(iou)\n if (c.score <= scoreThreshold) {\n break\n }\n }\n\n if (originalScore === c.score) {\n selected.push(c.boxIndex)\n }\n })\n\n return selected\n}\n\nfunction IOU(boxes: tf.Tensor2D, i: number, j: number) {\n const boxesData = boxes.arraySync()\n const yminI = Math.min(boxesData[i][0], boxesData[i][2])\n const xminI = Math.min(boxesData[i][1], boxesData[i][3])\n const ymaxI = Math.max(boxesData[i][0], boxesData[i][2])\n const xmaxI = Math.max(boxesData[i][1], boxesData[i][3])\n const yminJ = Math.min(boxesData[j][0], boxesData[j][2])\n const xminJ = Math.min(boxesData[j][1], boxesData[j][3])\n const ymaxJ = Math.max(boxesData[j][0], boxesData[j][2])\n const xmaxJ = Math.max(boxesData[j][1], boxesData[j][3])\n const areaI = (ymaxI - yminI) * (xmaxI - xminI)\n const areaJ = (ymaxJ - yminJ) * (xmaxJ - xminJ)\n if (areaI <= 0 || areaJ <= 0) {\n return 0.0\n }\n const intersectionYmin = Math.max(yminI, yminJ)\n const intersectionXmin = Math.max(xminI, xminJ)\n const intersectionYmax = Math.min(ymaxI, ymaxJ)\n const intersectionXmax = Math.min(xmaxI, xmaxJ)\n const intersectionArea =\n Math.max(intersectionYmax - intersectionYmin, 0.0) *\n Math.max(intersectionXmax - intersectionXmin, 0.0)\n return intersectionArea / (areaI + areaJ - intersectionArea)\n}","import * as tf from '@tensorflow/tfjs-core';\n\nimport { OutputLayerParams } from './types';\n\n\nfunction getCenterCoordinatesAndSizesLayer(x: tf.Tensor2D) {\n const vec = tf.unstack(tf.transpose(x, [1, 0]))\n\n const sizes = [\n tf.sub(vec[2], vec[0]),\n tf.sub(vec[3], vec[1])\n ]\n\n const centers = [\n tf.add(vec[0], tf.div(sizes[0], tf.scalar(2))),\n tf.add(vec[1], tf.div(sizes[1], tf.scalar(2)))\n ]\n\n return {\n sizes,\n centers\n }\n}\n\nfunction decodeBoxesLayer(x0: tf.Tensor2D, x1: tf.Tensor2D) {\n const {\n sizes,\n centers\n } = getCenterCoordinatesAndSizesLayer(x0)\n\n const vec = tf.unstack(tf.transpose(x1, [1, 0]))\n\n const div0_out = tf.div(tf.mul(tf.exp(tf.div(vec[2], tf.scalar(5))), sizes[0]), tf.scalar(2))\n const add0_out = tf.add(tf.mul(tf.div(vec[0], tf.scalar(10)), sizes[0]), centers[0])\n\n const div1_out = tf.div(tf.mul(tf.exp(tf.div(vec[3], tf.scalar(5))), sizes[1]), tf.scalar(2))\n const add1_out = tf.add(tf.mul(tf.div(vec[1], tf.scalar(10)), sizes[1]), centers[1])\n\n return tf.transpose(\n tf.stack([\n tf.sub(add0_out, div0_out),\n tf.sub(add1_out, div1_out),\n tf.add(add0_out, div0_out),\n tf.add(add1_out, div1_out)\n ]),\n [1, 0]\n )\n}\n\nexport function outputLayer(\n boxPredictions: tf.Tensor4D,\n classPredictions: tf.Tensor4D,\n params: OutputLayerParams\n) {\n return tf.tidy(() => {\n\n const batchSize = boxPredictions.shape[0]\n\n let boxes = decodeBoxesLayer(\n tf.reshape(tf.tile(params.extra_dim, [batchSize, 1, 1]), [-1, 4]) as tf.Tensor2D,\n tf.reshape(boxPredictions, [-1, 4]) as tf.Tensor2D\n )\n boxes = tf.reshape(\n boxes,\n [batchSize, (boxes.shape[0] / batchSize), 4]\n )\n\n const scoresAndClasses = tf.sigmoid(tf.slice(classPredictions, [0, 0, 1], [-1, -1, -1]))\n let scores = tf.slice(scoresAndClasses, [0, 0, 0], [-1, -1, 1]) as tf.Tensor\n\n scores = tf.reshape(\n scores,\n [batchSize, scores.shape[1] as number]\n )\n\n const boxesByBatch = tf.unstack(boxes) as tf.Tensor2D[]\n const scoresByBatch = tf.unstack(scores) as tf.Tensor1D[]\n\n return {\n boxes: boxesByBatch,\n scores: scoresByBatch\n }\n\n })\n}","import * as tf from '@tensorflow/tfjs-core';\nimport { TfjsImageRecognitionBase } from 'tfjs-image-recognition-base';\n\nimport { BoxPredictionParams } from './types';\n\n\nexport function boxPredictionLayer(\n x: tf.Tensor4D,\n params: BoxPredictionParams\n) {\n return tf.tidy(() => {\n\n const batchSize = x.shape[0]\n\n const boxPredictionEncoding = tf.reshape(\n TfjsImageRecognitionBase.convLayer(x, params.box_encoding_predictor),\n [batchSize, -1, 1, 4]\n )\n const classPrediction = tf.reshape(\n TfjsImageRecognitionBase.convLayer(x, params.class_predictor),\n [batchSize, -1, 3]\n )\n\n return {\n boxPredictionEncoding,\n classPrediction\n }\n })\n}","import * as tf from '@tensorflow/tfjs-core';\n\nimport { boxPredictionLayer } from './boxPredictionLayer';\nimport { pointwiseConvLayer } from './pointwiseConvLayer';\nimport { PredictionLayerParams } from './types';\n\nexport function predictionLayer(\n x: tf.Tensor4D,\n conv11: tf.Tensor4D,\n params: PredictionLayerParams\n) {\n return tf.tidy(() => {\n\n const conv0 = pointwiseConvLayer(x, params.conv_0, [1, 1])\n const conv1 = pointwiseConvLayer(conv0, params.conv_1, [2, 2])\n const conv2 = pointwiseConvLayer(conv1, params.conv_2, [1, 1])\n const conv3 = pointwiseConvLayer(conv2, params.conv_3, [2, 2])\n const conv4 = pointwiseConvLayer(conv3, params.conv_4, [1, 1])\n const conv5 = pointwiseConvLayer(conv4, params.conv_5, [2, 2])\n const conv6 = pointwiseConvLayer(conv5, params.conv_6, [1, 1])\n const conv7 = pointwiseConvLayer(conv6, params.conv_7, [2, 2])\n\n const boxPrediction0 = boxPredictionLayer(conv11, params.box_predictor_0)\n const boxPrediction1 = boxPredictionLayer(x, params.box_predictor_1)\n const boxPrediction2 = boxPredictionLayer(conv1, params.box_predictor_2)\n const boxPrediction3 = boxPredictionLayer(conv3, params.box_predictor_3)\n const boxPrediction4 = boxPredictionLayer(conv5, params.box_predictor_4)\n const boxPrediction5 = boxPredictionLayer(conv7, params.box_predictor_5)\n\n const boxPredictions = tf.concat([\n boxPrediction0.boxPredictionEncoding,\n boxPrediction1.boxPredictionEncoding,\n boxPrediction2.boxPredictionEncoding,\n boxPrediction3.boxPredictionEncoding,\n boxPrediction4.boxPredictionEncoding,\n boxPrediction5.boxPredictionEncoding\n ], 1) as tf.Tensor4D\n\n const classPredictions = tf.concat([\n boxPrediction0.classPrediction,\n boxPrediction1.classPrediction,\n boxPrediction2.classPrediction,\n boxPrediction3.classPrediction,\n boxPrediction4.classPrediction,\n boxPrediction5.classPrediction\n ], 1) as tf.Tensor4D\n\n return {\n boxPredictions,\n classPredictions\n }\n })\n}","export interface ISsdMobilenetv1Options {\n minConfidence?: number\n maxResults?: number\n}\n\nexport class SsdMobilenetv1Options {\n protected _name: string = 'SsdMobilenetv1Options'\n\n private _minConfidence: number\n private _maxResults: number\n\n constructor({ minConfidence, maxResults }: ISsdMobilenetv1Options = {}) {\n this._minConfidence = minConfidence || 0.5\n this._maxResults = maxResults || 100\n\n if (typeof this._minConfidence !== 'number' || this._minConfidence <= 0 || this._minConfidence >= 1) {\n throw new Error(`${this._name} - expected minConfidence to be a number between 0 and 1`)\n }\n\n if (typeof this._maxResults !== 'number') {\n throw new Error(`${this._name} - expected maxResults to be a number`)\n }\n }\n\n get minConfidence(): number { return this._minConfidence }\n get maxResults(): number { return this._maxResults }\n}","import * as tf from '@tensorflow/tfjs-core';\nimport { NetInput, NeuralNetwork, Rect, TNetInput, toNetInput } from 'tfjs-image-recognition-base';\n\nimport { FaceDetection } from '../classes/FaceDetection';\nimport { extractParams } from './extractParams';\nimport { extractParamsFromWeigthMap } from './extractParamsFromWeigthMap';\nimport { mobileNetV1 } from './mobileNetV1';\nimport { nonMaxSuppression } from './nonMaxSuppression';\nimport { outputLayer } from './outputLayer';\nimport { predictionLayer } from './predictionLayer';\nimport { ISsdMobilenetv1Options, SsdMobilenetv1Options } from './SsdMobilenetv1Options';\nimport { NetParams } from './types';\n\n\nexport class SsdMobilenetv1 extends NeuralNetwork {\n\n constructor() {\n super('SsdMobilenetv1')\n }\n\n public forwardInput(input: NetInput) {\n\n const { params } = this\n\n if (!params) {\n throw new Error('SsdMobilenetv1 - load model before inference')\n }\n\n return tf.tidy(() => {\n const batchTensor = input.toBatchTensor(512, false).toFloat()\n\n const x = tf.sub(tf.mul(batchTensor, tf.scalar(0.007843137718737125)), tf.scalar(1)) as tf.Tensor4D\n const features = mobileNetV1(x, params.mobilenetv1)\n\n const {\n boxPredictions,\n classPredictions\n } = predictionLayer(features.out, features.conv11, params.prediction_layer)\n\n return outputLayer(boxPredictions, classPredictions, params.output_layer)\n })\n }\n\n public async forward(input: TNetInput) {\n return this.forwardInput(await toNetInput(input))\n }\n\n public async locateFaces(\n input: TNetInput,\n options: ISsdMobilenetv1Options = {}\n ): Promise {\n\n const { maxResults, minConfidence } = new SsdMobilenetv1Options(options)\n\n const netInput = await toNetInput(input)\n\n const {\n boxes: _boxes,\n scores: _scores\n } = this.forwardInput(netInput)\n\n\n // TODO batches\n const boxes = _boxes[0]\n const scores = _scores[0]\n for (let i = 1; i < _boxes.length; i++) {\n _boxes[i].dispose()\n _scores[i].dispose()\n }\n\n // TODO find a better way to filter by minConfidence\n const scoresData = Array.from(await scores.data())\n\n const iouThreshold = 0.5\n const indices = nonMaxSuppression(\n boxes,\n scoresData,\n maxResults,\n iouThreshold,\n minConfidence\n )\n\n const reshapedDims = netInput.getReshapedInputDimensions(0)\n const inputSize = netInput.inputSize as number\n const padX = inputSize / reshapedDims.width\n const padY = inputSize / reshapedDims.height\n\n const boxesData = boxes.arraySync()\n const results = indices\n .map(idx => {\n const [top, bottom] = [\n Math.max(0, boxesData[idx][0]),\n Math.min(1.0, boxesData[idx][2])\n ].map(val => val * padY)\n const [left, right] = [\n Math.max(0, boxesData[idx][1]),\n Math.min(1.0, boxesData[idx][3])\n ].map(val => val * padX)\n return new FaceDetection(\n scoresData[idx],\n new Rect(\n left,\n top,\n right - left,\n bottom - top\n ),\n {\n height: netInput.getInputHeight(0),\n width: netInput.getInputWidth(0)\n }\n )\n })\n\n boxes.dispose()\n scores.dispose()\n\n return results\n }\n\n protected getDefaultModelName(): string {\n return 'ssd_mobilenetv1_model'\n }\n\n protected extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap) {\n return extractParamsFromWeigthMap(weightMap)\n }\n\n protected extractParams(weights: Float32Array) {\n return extractParams(weights)\n }\n}","import { SsdMobilenetv1 } from './SsdMobilenetv1';\n\nexport * from './SsdMobilenetv1';\nexport * from './SsdMobilenetv1Options';\n\nexport function createSsdMobilenetv1(weights: Float32Array) {\n const net = new SsdMobilenetv1()\n net.extractWeights(weights)\n return net\n}\n\nexport function createFaceDetectionNet(weights: Float32Array) {\n return createSsdMobilenetv1(weights)\n}\n\n// alias for backward compatibily\nexport class FaceDetectionNet extends SsdMobilenetv1 {}","import { TfjsImageRecognitionBase } from 'tfjs-image-recognition-base';\n\nexport interface ITinyFaceDetectorOptions extends TfjsImageRecognitionBase.ITinyYolov2Options {}\n\nexport class TinyFaceDetectorOptions extends TfjsImageRecognitionBase.TinyYolov2Options {\n protected _name: string = 'TinyFaceDetectorOptions'\n}","export class ComposableTask {\n\n public async then(\n onfulfilled: (value: T) => T | PromiseLike\n ): Promise {\n return onfulfilled(await this.run())\n }\n\n public async run(): Promise {\n throw new Error('ComposableTask - run is not implemented')\n }\n}\n","import * as tf from '@tensorflow/tfjs-core';\nimport { TNetInput } from 'tfjs-image-recognition-base';\n\nimport { FaceDetection } from '../classes/FaceDetection';\nimport { extractFaces, extractFaceTensors } from '../dom';\nimport { WithFaceDetection } from '../factories/WithFaceDetection';\nimport { isWithFaceLandmarks, WithFaceLandmarks } from '../factories/WithFaceLandmarks';\n\nexport async function extractAllFacesAndComputeResults, TResult>(\n parentResults: TSource[],\n input: TNetInput,\n computeResults: (faces: Array) => Promise,\n extractedFaces?: Array | null,\n getRectForAlignment: (parentResult: WithFaceLandmarks) => FaceDetection = ({ alignedRect }) => alignedRect\n) {\n const faceBoxes = parentResults.map(parentResult =>\n isWithFaceLandmarks(parentResult)\n ? getRectForAlignment(parentResult)\n : parentResult.detection\n )\n const faces: Array = extractedFaces || (\n input instanceof tf.Tensor\n ? await extractFaceTensors(input, faceBoxes)\n : await extractFaces(input, faceBoxes)\n )\n\n const results = await computeResults(faces)\n\n faces.forEach(f => f instanceof tf.Tensor && f.dispose())\n\n return results\n}\n\nexport async function extractSingleFaceAndComputeResult, TResult>(\n parentResult: TSource,\n input: TNetInput,\n computeResult: (face: HTMLCanvasElement | tf.Tensor3D) => Promise,\n extractedFaces?: Array | null,\n getRectForAlignment?: (parentResult: WithFaceLandmarks) => FaceDetection\n) {\n return extractAllFacesAndComputeResults(\n [parentResult],\n input,\n async faces => computeResult(faces[0]),\n extractedFaces,\n getRectForAlignment\n )\n}","import * as tf from '@tensorflow/tfjs-core';\n\nexport function bgrToRgbTensor(tensor: tf.Tensor4D): tf.Tensor4D {\n return tf.tidy(\n () => tf.stack(tf.unstack(tensor, 3).reverse(), 3)\n ) as tf.Tensor4D\n}","export const CELL_STRIDE = 2\nexport const CELL_SIZE = 12","import * as tf from '@tensorflow/tfjs-core';\nimport { TfjsImageRecognitionBase } from 'tfjs-image-recognition-base';\n\nimport { NetParams, ONetParams, PNetParams, RNetParams, SharedParams } from './types';\n\nfunction extractorsFactory(extractWeights: TfjsImageRecognitionBase.ExtractWeightsFunction, paramMappings: TfjsImageRecognitionBase.ParamMapping[]) {\n\n const extractConvParams = TfjsImageRecognitionBase.extractConvParamsFactory(extractWeights, paramMappings)\n const extractFCParams = TfjsImageRecognitionBase.extractFCParamsFactory(extractWeights, paramMappings)\n\n function extractPReluParams(size: number, paramPath: string): tf.Tensor1D {\n const alpha = tf.tensor1d(extractWeights(size))\n paramMappings.push({ paramPath })\n return alpha\n }\n\n function extractSharedParams(numFilters: number[], mappedPrefix: string, isRnet: boolean = false): SharedParams {\n\n const conv1 = extractConvParams(numFilters[0], numFilters[1], 3, `${mappedPrefix}/conv1`)\n const prelu1_alpha = extractPReluParams(numFilters[1], `${mappedPrefix}/prelu1_alpha`)\n const conv2 = extractConvParams(numFilters[1], numFilters[2], 3, `${mappedPrefix}/conv2`)\n const prelu2_alpha = extractPReluParams(numFilters[2], `${mappedPrefix}/prelu2_alpha`)\n const conv3 = extractConvParams(numFilters[2], numFilters[3], isRnet ? 2 : 3, `${mappedPrefix}/conv3`)\n const prelu3_alpha = extractPReluParams(numFilters[3], `${mappedPrefix}/prelu3_alpha`)\n\n return { conv1, prelu1_alpha, conv2, prelu2_alpha, conv3, prelu3_alpha }\n }\n\n function extractPNetParams(): PNetParams {\n\n const sharedParams = extractSharedParams([3, 10, 16, 32], 'pnet')\n const conv4_1 = extractConvParams(32, 2, 1, 'pnet/conv4_1')\n const conv4_2 = extractConvParams(32, 4, 1, 'pnet/conv4_2')\n\n return { ...sharedParams, conv4_1, conv4_2 }\n }\n\n function extractRNetParams(): RNetParams {\n\n const sharedParams = extractSharedParams([3, 28, 48, 64], 'rnet', true)\n const fc1 = extractFCParams(576, 128, 'rnet/fc1')\n const prelu4_alpha = extractPReluParams(128, 'rnet/prelu4_alpha')\n const fc2_1 = extractFCParams(128, 2, 'rnet/fc2_1')\n const fc2_2 = extractFCParams(128, 4, 'rnet/fc2_2')\n\n return { ...sharedParams, fc1, prelu4_alpha, fc2_1, fc2_2 }\n }\n\n function extractONetParams(): ONetParams {\n\n const sharedParams = extractSharedParams([3, 32, 64, 64], 'onet')\n const conv4 = extractConvParams(64, 128, 2, 'onet/conv4')\n const prelu4_alpha = extractPReluParams(128, 'onet/prelu4_alpha')\n const fc1 = extractFCParams(1152, 256, 'onet/fc1')\n const prelu5_alpha = extractPReluParams(256, 'onet/prelu5_alpha')\n const fc2_1 = extractFCParams(256, 2, 'onet/fc2_1')\n const fc2_2 = extractFCParams(256, 4, 'onet/fc2_2')\n const fc2_3 = extractFCParams(256, 10, 'onet/fc2_3')\n\n return { ...sharedParams, conv4, prelu4_alpha, fc1, prelu5_alpha, fc2_1, fc2_2, fc2_3 }\n }\n\n return {\n extractPNetParams,\n extractRNetParams,\n extractONetParams\n }\n\n}\n\nexport function extractParams(weights: Float32Array): { params: NetParams, paramMappings: TfjsImageRecognitionBase.ParamMapping[] } {\n\n const {\n extractWeights,\n getRemainingWeights\n } = TfjsImageRecognitionBase.extractWeightsFactory(weights)\n\n const paramMappings: TfjsImageRecognitionBase.ParamMapping[] = []\n\n const {\n extractPNetParams,\n extractRNetParams,\n extractONetParams\n } = extractorsFactory(extractWeights, paramMappings)\n\n const pnet = extractPNetParams()\n const rnet = extractRNetParams()\n const onet = extractONetParams()\n\n if (getRemainingWeights().length !== 0) {\n throw new Error(`weights remaing after extract: ${getRemainingWeights().length}`)\n }\n\n return { params: { pnet, rnet, onet }, paramMappings }\n}","import * as tf from '@tensorflow/tfjs-core';\nimport { TfjsImageRecognitionBase } from 'tfjs-image-recognition-base';\n\nimport { NetParams, ONetParams, PNetParams, RNetParams, SharedParams } from './types';\n\nfunction extractorsFactory(weightMap: any, paramMappings: TfjsImageRecognitionBase.ParamMapping[]) {\n\n const extractWeightEntry = TfjsImageRecognitionBase.extractWeightEntryFactory(weightMap, paramMappings)\n\n function extractConvParams(prefix: string): TfjsImageRecognitionBase.ConvParams {\n const filters = extractWeightEntry(`${prefix}/weights`, 4, `${prefix}/filters`)\n const bias = extractWeightEntry(`${prefix}/bias`, 1)\n\n return { filters, bias }\n }\n\n function extractFCParams(prefix: string): TfjsImageRecognitionBase.FCParams {\n const weights = extractWeightEntry(`${prefix}/weights`, 2)\n const bias = extractWeightEntry(`${prefix}/bias`, 1)\n\n return { weights, bias }\n }\n\n function extractPReluParams(paramPath: string): tf.Tensor1D {\n return extractWeightEntry(paramPath, 1)\n }\n\n function extractSharedParams(prefix: string): SharedParams {\n\n const conv1 = extractConvParams(`${prefix}/conv1`)\n const prelu1_alpha = extractPReluParams(`${prefix}/prelu1_alpha`)\n const conv2 = extractConvParams(`${prefix}/conv2`)\n const prelu2_alpha = extractPReluParams(`${prefix}/prelu2_alpha`)\n const conv3 = extractConvParams(`${prefix}/conv3`)\n const prelu3_alpha = extractPReluParams(`${prefix}/prelu3_alpha`)\n\n return { conv1, prelu1_alpha, conv2, prelu2_alpha, conv3, prelu3_alpha }\n }\n\n function extractPNetParams(): PNetParams {\n\n const sharedParams = extractSharedParams('pnet')\n const conv4_1 = extractConvParams('pnet/conv4_1')\n const conv4_2 = extractConvParams('pnet/conv4_2')\n\n return { ...sharedParams, conv4_1, conv4_2 }\n }\n\n function extractRNetParams(): RNetParams {\n\n const sharedParams = extractSharedParams('rnet')\n const fc1 = extractFCParams('rnet/fc1')\n const prelu4_alpha = extractPReluParams('rnet/prelu4_alpha')\n const fc2_1 = extractFCParams('rnet/fc2_1')\n const fc2_2 = extractFCParams('rnet/fc2_2')\n\n return { ...sharedParams, fc1, prelu4_alpha, fc2_1, fc2_2 }\n }\n\n function extractONetParams(): ONetParams {\n\n const sharedParams = extractSharedParams('onet')\n const conv4 = extractConvParams('onet/conv4')\n const prelu4_alpha = extractPReluParams('onet/prelu4_alpha')\n const fc1 = extractFCParams('onet/fc1')\n const prelu5_alpha = extractPReluParams('onet/prelu5_alpha')\n const fc2_1 = extractFCParams('onet/fc2_1')\n const fc2_2 = extractFCParams('onet/fc2_2')\n const fc2_3 = extractFCParams('onet/fc2_3')\n\n return { ...sharedParams, conv4, prelu4_alpha, fc1, prelu5_alpha, fc2_1, fc2_2, fc2_3 }\n }\n\n return {\n extractPNetParams,\n extractRNetParams,\n extractONetParams\n }\n\n}\n\nexport function extractParamsFromWeigthMap(\n weightMap: tf.NamedTensorMap\n): { params: NetParams, paramMappings: TfjsImageRecognitionBase.ParamMapping[] } {\n\n const paramMappings: TfjsImageRecognitionBase.ParamMapping[] = []\n\n const {\n extractPNetParams,\n extractRNetParams,\n extractONetParams\n } = extractorsFactory(weightMap, paramMappings)\n\n const pnet = extractPNetParams()\n const rnet = extractRNetParams()\n const onet = extractONetParams()\n\n TfjsImageRecognitionBase.disposeUnusedWeightTensors(weightMap, paramMappings)\n\n return { params: { pnet, rnet, onet }, paramMappings }\n}","export function getSizesForScale(scale: number, [height, width]: number[]) {\n return {\n height: Math.floor(height * scale),\n width: Math.floor(width * scale)\n }\n}","import { CELL_SIZE } from './config';\n\nexport function pyramidDown(minFaceSize: number, scaleFactor: number, dims: number[]): number[] {\n\n const [height, width] = dims\n const m = CELL_SIZE / minFaceSize\n\n const scales = []\n\n let minLayer = Math.min(height, width) * m\n let exp = 0\n while (minLayer >= 12) {\n scales.push(m * Math.pow(scaleFactor, exp))\n minLayer = minLayer * scaleFactor\n exp += 1\n }\n\n return scales\n}","import { Box } from 'tfjs-image-recognition-base';\n\nexport class MtcnnBox extends Box {\n constructor(left: number, top: number, right: number, bottom: number) {\n super({ left, top, right, bottom }, true)\n }\n}","import * as tf from '@tensorflow/tfjs-core';\n\nexport function normalize(x: tf.Tensor4D): tf.Tensor4D {\n return tf.tidy(\n () => tf.mul(tf.sub(x, tf.scalar(127.5)), tf.scalar(0.0078125))\n )\n}","import * as tf from '@tensorflow/tfjs-core';\n\nexport function prelu(x: T, alpha: tf.Tensor1D): T {\n return tf.tidy(() =>\n tf.add(\n tf.relu(x),\n tf.mul(alpha, tf.neg(tf.relu(tf.neg(x))))\n )\n )\n}\n","import * as tf from '@tensorflow/tfjs-core';\nimport { TfjsImageRecognitionBase } from 'tfjs-image-recognition-base';\n\nimport { prelu } from './prelu';\nimport { SharedParams } from './types';\n\nexport function sharedLayer(x: tf.Tensor4D, params: SharedParams, isPnet: boolean = false) {\n return tf.tidy(() => {\n\n let out = TfjsImageRecognitionBase.convLayer(x, params.conv1, 'valid')\n out = prelu(out, params.prelu1_alpha)\n out = tf.maxPool(out, isPnet ? [2, 2]: [3, 3], [2, 2], 'same')\n out = TfjsImageRecognitionBase.convLayer(out, params.conv2, 'valid')\n out = prelu(out, params.prelu2_alpha)\n out = isPnet ? out : tf.maxPool(out, [3, 3], [2, 2], 'valid')\n out = TfjsImageRecognitionBase.convLayer(out, params.conv3, 'valid')\n out = prelu(out, params.prelu3_alpha)\n\n return out\n })\n}","import * as tf from '@tensorflow/tfjs-core';\nimport { TfjsImageRecognitionBase } from 'tfjs-image-recognition-base';\n\nimport { sharedLayer } from './sharedLayers';\nimport { PNetParams } from './types';\n\nexport function PNet(x: tf.Tensor4D, params: PNetParams): { prob: tf.Tensor4D, regions: tf.Tensor4D } {\n return tf.tidy(() => {\n\n let out = sharedLayer(x, params, true)\n const conv = TfjsImageRecognitionBase.convLayer(out, params.conv4_1, 'valid')\n const max = tf.expandDims(tf.max(conv, 3), 3)\n const prob = tf.softmax(tf.sub(conv, max), 3) as tf.Tensor4D\n const regions = TfjsImageRecognitionBase.convLayer(out, params.conv4_2, 'valid')\n\n return { prob, regions }\n })\n}","import * as tf from '@tensorflow/tfjs-core';\nimport { BoundingBox, nonMaxSuppression, Point } from 'tfjs-image-recognition-base';\n\nimport { CELL_SIZE, CELL_STRIDE } from './config';\nimport { getSizesForScale } from './getSizesForScale';\nimport { MtcnnBox } from './MtcnnBox';\nimport { normalize } from './normalize';\nimport { PNet } from './PNet';\nimport { PNetParams } from './types';\n\nfunction rescaleAndNormalize(x: tf.Tensor4D, scale: number): tf.Tensor4D {\n return tf.tidy(() => {\n\n const { height, width } = getSizesForScale(scale, x.shape.slice(1))\n const resized = tf.image.resizeBilinear(x, [height, width])\n const normalized = normalize(resized)\n\n return (tf.transpose(normalized, [0, 2, 1, 3]) as tf.Tensor4D)\n })\n}\n\nfunction extractBoundingBoxes(\n scoresTensor: tf.Tensor2D,\n regionsTensor: tf.Tensor3D,\n scale: number,\n scoreThreshold: number\n) {\n\n // TODO: fix this!, maybe better to use tf.gather here\n const indices: Point[] = []\n const scoresData = scoresTensor.arraySync();\n for (let y = 0; y < scoresTensor.shape[0]; y++) {\n for (let x = 0; x < scoresTensor.shape[1]; x++) {\n if (scoresData[y][x] >= scoreThreshold) {\n indices.push(new Point(x, y))\n }\n }\n }\n\n const boundingBoxes = indices.map(idx => {\n const cell = new BoundingBox(\n Math.round((idx.y * CELL_STRIDE + 1) / scale),\n Math.round((idx.x * CELL_STRIDE + 1) / scale),\n Math.round((idx.y * CELL_STRIDE + CELL_SIZE) / scale),\n Math.round((idx.x * CELL_STRIDE + CELL_SIZE) / scale)\n )\n\n const score = scoresData[idx.y][idx.x]\n\n const regionsData = regionsTensor.arraySync()\n const region = new MtcnnBox(\n regionsData[idx.y][idx.x][0],\n regionsData[idx.y][idx.x][1],\n regionsData[idx.y][idx.x][2],\n regionsData[idx.y][idx.x][3]\n )\n\n return {\n cell,\n score,\n region\n }\n })\n\n return boundingBoxes\n}\n\nexport function stage1(\n imgTensor: tf.Tensor4D,\n scales: number[],\n scoreThreshold: number,\n params: PNetParams,\n stats: any\n) {\n stats.stage1 = []\n\n const pnetOutputs = scales.map((scale) => tf.tidy(() => {\n const statsForScale: any = { scale }\n const resized = rescaleAndNormalize(imgTensor, scale)\n\n let ts = Date.now()\n const { prob, regions } = PNet(resized, params)\n statsForScale.pnet = Date.now() - ts\n\n const scoresTensor = tf.unstack(tf.unstack(prob, 3)[1])[0] as tf.Tensor2D\n const regionsTensor = tf.unstack(regions)[0] as tf.Tensor3D\n\n return {\n scoresTensor,\n regionsTensor,\n scale,\n statsForScale\n }\n }))\n\n const boxesForScale = pnetOutputs.map(({ scoresTensor, regionsTensor, scale, statsForScale }) => {\n const boundingBoxes = extractBoundingBoxes(\n scoresTensor,\n regionsTensor,\n scale,\n scoreThreshold\n )\n\n scoresTensor.dispose()\n regionsTensor.dispose()\n\n if (!boundingBoxes.length) {\n stats.stage1.push(statsForScale)\n return []\n }\n\n let ts = Date.now()\n const indices = nonMaxSuppression(\n boundingBoxes.map(bbox => bbox.cell),\n boundingBoxes.map(bbox => bbox.score),\n 0.5\n )\n statsForScale.nms = Date.now() - ts\n statsForScale.numBoxes = indices.length\n\n stats.stage1.push(statsForScale)\n return indices.map(boxIdx => boundingBoxes[boxIdx])\n })\n\n const allBoxes = boxesForScale.reduce(\n (all, boxes) => all.concat(boxes), []\n )\n\n let finalBoxes: BoundingBox[] = []\n let finalScores: number[] = []\n\n if (allBoxes.length > 0) {\n let ts = Date.now()\n const indices = nonMaxSuppression(\n allBoxes.map(bbox => bbox.cell),\n allBoxes.map(bbox => bbox.score),\n 0.7\n )\n stats.stage1_nms = Date.now() - ts\n\n finalScores = indices.map(idx => allBoxes[idx].score)\n finalBoxes = indices\n .map(idx => allBoxes[idx])\n .map(({ cell, region }) =>\n new BoundingBox(\n cell.left + (region.left * cell.width),\n cell.top + (region.top * cell.height),\n cell.right + (region.right * cell.width),\n cell.bottom + (region.bottom * cell.height)\n ).toSquare().round()\n )\n\n }\n\n return {\n boxes: finalBoxes,\n scores: finalScores\n }\n\n}\n","import * as tf from '@tensorflow/tfjs-core';\nimport {\n Box,\n createCanvas,\n createCanvasFromMedia,\n env,\n getContext2dOrThrow,\n IDimensions,\n} from 'tfjs-image-recognition-base';\n\nimport { normalize } from './normalize';\n\nexport async function extractImagePatches(\n img: HTMLCanvasElement,\n boxes: Box[],\n { width, height }: IDimensions\n): Promise {\n\n\n const imgCtx = getContext2dOrThrow(img)\n\n const bitmaps = await Promise.all(boxes.map(async box => {\n // TODO: correct padding\n const { y, ey, x, ex } = box.padAtBorders(img.height, img.width)\n\n const fromX = x - 1\n const fromY = y - 1\n const imgData = imgCtx.getImageData(fromX, fromY, (ex - fromX), (ey - fromY))\n\n return env.isNodejs() ? createCanvasFromMedia(imgData) : createImageBitmap(imgData)\n }))\n\n const imagePatchesDatas: number[][] = []\n\n bitmaps.forEach(bmp => {\n const patch = createCanvas({ width, height })\n const patchCtx = getContext2dOrThrow(patch)\n patchCtx.drawImage(bmp, 0, 0, width, height)\n const { data } = patchCtx.getImageData(0, 0, width, height)\n\n const currData = []\n // RGBA -> BGR\n for(let i = 0; i < data.length; i+=4) {\n currData.push(data[i + 2])\n currData.push(data[i + 1])\n currData.push(data[i])\n }\n imagePatchesDatas.push(currData)\n })\n\n\n return imagePatchesDatas.map(data => {\n const t = tf.tidy(() => {\n const imagePatchTensor = tf.transpose(\n tf.tensor4d(data, [1, width, height, 3]),\n [0, 2, 1, 3]\n ).toFloat() as tf.Tensor4D\n\n return normalize(imagePatchTensor)\n })\n return t\n })\n}","import * as tf from '@tensorflow/tfjs-core';\n\nimport { fullyConnectedLayer } from '../common/fullyConnectedLayer';\nimport { prelu } from './prelu';\nimport { sharedLayer } from './sharedLayers';\nimport { RNetParams } from './types';\n\nexport function RNet(x: tf.Tensor4D, params: RNetParams): { scores: tf.Tensor1D, regions: tf.Tensor2D } {\n return tf.tidy(() => {\n\n const convOut = sharedLayer(x, params)\n const vectorized = tf.reshape(convOut, [convOut.shape[0], params.fc1.weights.shape[0]]) as tf.Tensor2D\n const fc1 = fullyConnectedLayer(vectorized, params.fc1)\n const prelu4 = prelu(fc1, params.prelu4_alpha)\n const fc2_1 = fullyConnectedLayer(prelu4, params.fc2_1)\n const max = tf.expandDims(tf.max(fc2_1, 1), 1)\n const prob = tf.softmax(tf.sub(fc2_1, max), 1) as tf.Tensor2D\n const regions = fullyConnectedLayer(prelu4, params.fc2_2)\n\n const scores = tf.unstack(prob, 1)[1] as tf.Tensor1D\n return { scores, regions }\n })\n}","import * as tf from '@tensorflow/tfjs-core';\nimport { Box, nonMaxSuppression } from 'tfjs-image-recognition-base';\n\nimport { extractImagePatches } from './extractImagePatches';\nimport { MtcnnBox } from './MtcnnBox';\nimport { RNet } from './RNet';\nimport { RNetParams } from './types';\n\nexport async function stage2(\n img: HTMLCanvasElement,\n inputBoxes: Box[],\n scoreThreshold: number,\n params: RNetParams,\n stats: any\n) {\n\n let ts = Date.now()\n const rnetInputs = await extractImagePatches(img, inputBoxes, { width: 24, height: 24 })\n stats.stage2_extractImagePatches = Date.now() - ts\n\n ts = Date.now()\n const rnetOuts = rnetInputs.map(\n rnetInput => {\n const out = RNet(rnetInput, params)\n rnetInput.dispose()\n return out\n }\n )\n stats.stage2_rnet = Date.now() - ts\n\n const scoresTensor = rnetOuts.length > 1\n ? tf.concat(rnetOuts.map(out => out.scores))\n : rnetOuts[0].scores\n const scores = Array.from(await scoresTensor.data())\n scoresTensor.dispose()\n\n const indices = scores\n .map((score, idx) => ({ score, idx }))\n .filter(c => c.score > scoreThreshold)\n .map(({ idx }) => idx)\n\n const filteredBoxes = indices.map(idx => inputBoxes[idx])\n const filteredScores = indices.map(idx => scores[idx])\n\n let finalBoxes: Box[] = []\n let finalScores: number[] = []\n\n if (filteredBoxes.length > 0) {\n ts = Date.now()\n const indicesNms = nonMaxSuppression(\n filteredBoxes,\n filteredScores,\n 0.7\n )\n stats.stage2_nms = Date.now() - ts\n\n const regions = indicesNms.map(idx =>{\n const regionsData = rnetOuts[indices[idx]].regions.arraySync()\n return new MtcnnBox(\n regionsData[0][0],\n regionsData[0][1],\n regionsData[0][2],\n regionsData[0][3]\n )\n }\n )\n\n finalScores = indicesNms.map(idx => filteredScores[idx])\n finalBoxes = indicesNms.map((idx, i) => filteredBoxes[idx].calibrate(regions[i]))\n }\n\n rnetOuts.forEach(t => {\n t.regions.dispose()\n t.scores.dispose()\n })\n\n return {\n boxes: finalBoxes,\n scores: finalScores\n }\n}","import * as tf from '@tensorflow/tfjs-core';\nimport { TfjsImageRecognitionBase } from 'tfjs-image-recognition-base';\n\nimport { fullyConnectedLayer } from '../common/fullyConnectedLayer';\nimport { prelu } from './prelu';\nimport { sharedLayer } from './sharedLayers';\nimport { ONetParams } from './types';\n\nexport function ONet(x: tf.Tensor4D, params: ONetParams): { scores: tf.Tensor1D, regions: tf.Tensor2D, points: tf.Tensor2D } {\n return tf.tidy(() => {\n\n let out = sharedLayer(x, params)\n out = tf.maxPool(out, [2, 2], [2, 2], 'same')\n out = TfjsImageRecognitionBase.convLayer(out, params.conv4, 'valid')\n out = prelu(out, params.prelu4_alpha)\n\n const vectorized = tf.reshape(out, [out.shape[0], params.fc1.weights.shape[0]]) as tf.Tensor2D\n const fc1 = fullyConnectedLayer(vectorized, params.fc1)\n const prelu5 = prelu(fc1, params.prelu5_alpha)\n const fc2_1 = fullyConnectedLayer(prelu5, params.fc2_1)\n const max = tf.expandDims(tf.max(fc2_1, 1), 1)\n\n const prob = tf.softmax(tf.sub(fc2_1, max), 1) as tf.Tensor2D\n const regions = fullyConnectedLayer(prelu5, params.fc2_2)\n const points = fullyConnectedLayer(prelu5, params.fc2_3)\n\n const scores = tf.unstack(prob, 1)[1] as tf.Tensor1D\n return { scores, regions, points }\n })\n}","import * as tf from '@tensorflow/tfjs-core';\nimport { BoundingBox, Box, nonMaxSuppression, Point } from 'tfjs-image-recognition-base';\n\nimport { extractImagePatches } from './extractImagePatches';\nimport { MtcnnBox } from './MtcnnBox';\nimport { ONet } from './ONet';\nimport { ONetParams } from './types';\n\nexport async function stage3(\n img: HTMLCanvasElement,\n inputBoxes: BoundingBox[],\n scoreThreshold: number,\n params: ONetParams,\n stats: any\n) {\n\n let ts = Date.now()\n const onetInputs = await extractImagePatches(img, inputBoxes, { width: 48, height: 48 })\n stats.stage3_extractImagePatches = Date.now() - ts\n\n ts = Date.now()\n const onetOuts = onetInputs.map(\n onetInput => {\n const out = ONet(onetInput, params)\n onetInput.dispose()\n return out\n }\n )\n stats.stage3_onet = Date.now() - ts\n\n const scoresTensor = onetOuts.length > 1\n ? tf.concat(onetOuts.map(out => out.scores))\n : onetOuts[0].scores\n const scores = Array.from(await scoresTensor.data())\n scoresTensor.dispose()\n\n const indices = scores\n .map((score, idx) => ({ score, idx }))\n .filter(c => c.score > scoreThreshold)\n .map(({ idx }) => idx)\n\n const filteredRegions = indices.map(idx => {\n const regionsData = onetOuts[idx].regions.arraySync();\n return new MtcnnBox(\n regionsData[0][0],\n regionsData[0][1],\n regionsData[0][2],\n regionsData[0][3]\n )})\n const filteredBoxes = indices\n .map((idx, i) => inputBoxes[idx].calibrate(filteredRegions[i]))\n const filteredScores = indices.map(idx => scores[idx])\n\n let finalBoxes: Box[] = []\n let finalScores: number[] = []\n let points: Point[][] = []\n\n if (filteredBoxes.length > 0) {\n\n ts = Date.now()\n const indicesNms = nonMaxSuppression(\n filteredBoxes,\n filteredScores,\n 0.7,\n false\n )\n stats.stage3_nms = Date.now() - ts\n\n finalBoxes = indicesNms.map(idx => filteredBoxes[idx])\n finalScores = indicesNms.map(idx => filteredScores[idx])\n points = indicesNms.map((idx, i) =>\n Array(5).fill(0).map((_, ptIdx) =>{\n const pointsData = onetOuts[idx].points.arraySync()\n return new Point(\n ((pointsData[0][ptIdx] * (finalBoxes[i].width + 1)) + finalBoxes[i].left) ,\n ((pointsData[0][ptIdx+5] * (finalBoxes[i].height + 1)) + finalBoxes[i].top)\n )\n }\n )\n )\n }\n\n onetOuts.forEach(t => {\n t.regions.dispose()\n t.scores.dispose()\n t.points.dispose()\n })\n\n return {\n boxes: finalBoxes,\n scores: finalScores,\n points\n }\n\n}\n","import * as tf from '@tensorflow/tfjs-core';\nimport { NetInput, NeuralNetwork, Point, Rect, TNetInput, toNetInput } from 'tfjs-image-recognition-base';\n\nimport { FaceDetection } from '../classes/FaceDetection';\nimport { FaceLandmarks5 } from '../classes/FaceLandmarks5';\nimport { extendWithFaceDetection, extendWithFaceLandmarks } from '../factories';\nimport { bgrToRgbTensor } from './bgrToRgbTensor';\nimport { CELL_SIZE } from './config';\nimport { extractParams } from './extractParams';\nimport { extractParamsFromWeigthMap } from './extractParamsFromWeigthMap';\nimport { getSizesForScale } from './getSizesForScale';\nimport { IMtcnnOptions, MtcnnOptions } from './MtcnnOptions';\nimport { pyramidDown } from './pyramidDown';\nimport { stage1 } from './stage1';\nimport { stage2 } from './stage2';\nimport { stage3 } from './stage3';\nimport { MtcnnResult, NetParams } from './types';\n\nexport class Mtcnn extends NeuralNetwork {\n\n constructor() {\n super('Mtcnn')\n }\n\n public async forwardInput(\n input: NetInput,\n forwardParams: IMtcnnOptions = {}\n ): Promise<{ results: MtcnnResult[], stats: any }> {\n\n const { params } = this\n\n if (!params) {\n throw new Error('Mtcnn - load model before inference')\n }\n\n const inputCanvas = input.canvases[0]\n\n if (!inputCanvas) {\n throw new Error('Mtcnn - inputCanvas is not defined, note that passing tensors into Mtcnn.forwardInput is not supported yet.')\n }\n\n const stats: any = {}\n\n const tsTotal = Date.now()\n\n const imgTensor = tf.tidy(() =>\n bgrToRgbTensor(\n tf.expandDims(tf.browser.fromPixels(inputCanvas)).toFloat() as tf.Tensor4D\n )\n )\n\n const onReturn = (results: any) => {\n // dispose tensors on return\n imgTensor.dispose()\n stats.total = Date.now() - tsTotal\n return results\n }\n\n const [height, width] = imgTensor.shape.slice(1)\n\n const {\n minFaceSize,\n scaleFactor,\n maxNumScales,\n scoreThresholds,\n scaleSteps\n } = new MtcnnOptions(forwardParams)\n\n const scales = (scaleSteps || pyramidDown(minFaceSize, scaleFactor, [height, width]))\n .filter(scale => {\n const sizes = getSizesForScale(scale, [height, width])\n return Math.min(sizes.width, sizes.height) > CELL_SIZE\n })\n .slice(0, maxNumScales)\n\n stats.scales = scales\n stats.pyramid = scales.map(scale => getSizesForScale(scale, [height, width]))\n\n let ts = Date.now()\n const out1 = await stage1(imgTensor, scales, scoreThresholds[0], params.pnet, stats)\n stats.total_stage1 = Date.now() - ts\n\n if (!out1.boxes.length) {\n return onReturn({ results: [], stats })\n }\n\n stats.stage2_numInputBoxes = out1.boxes.length\n // using the inputCanvas to extract and resize the image patches, since it is faster\n // than doing this on the gpu\n ts = Date.now()\n const out2 = await stage2(inputCanvas, out1.boxes, scoreThresholds[1], params.rnet, stats)\n stats.total_stage2 = Date.now() - ts\n\n if (!out2.boxes.length) {\n return onReturn({ results: [], stats })\n }\n\n stats.stage3_numInputBoxes = out2.boxes.length\n\n ts = Date.now()\n const out3 = await stage3(inputCanvas, out2.boxes, scoreThresholds[2], params.onet, stats)\n stats.total_stage3 = Date.now() - ts\n\n const results = out3.boxes.map((box, idx) => extendWithFaceLandmarks(\n extendWithFaceDetection<{}>(\n {},\n new FaceDetection(\n out3.scores[idx],\n new Rect(\n box.left / width,\n box.top / height,\n box.width / width,\n box.height / height\n ),\n {\n height,\n width\n }\n )\n ),\n new FaceLandmarks5(\n out3.points[idx].map(pt => pt.sub(new Point(box.left, box.top)).div(new Point(box.width, box.height))),\n { width: box.width, height: box.height }\n )\n ))\n\n return onReturn({ results, stats })\n }\n\n public async forward(\n input: TNetInput,\n forwardParams: IMtcnnOptions = {}\n ): Promise {\n return (\n await this.forwardInput(\n await toNetInput(input),\n forwardParams\n )\n ).results\n }\n\n public async forwardWithStats(\n input: TNetInput,\n forwardParams: IMtcnnOptions = {}\n ): Promise<{ results: MtcnnResult[], stats: any }> {\n return this.forwardInput(\n await toNetInput(input),\n forwardParams\n )\n }\n\n protected getDefaultModelName(): string {\n return 'mtcnn_model'\n }\n\n protected extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap) {\n return extractParamsFromWeigthMap(weightMap)\n }\n\n protected extractParams(weights: Float32Array) {\n return extractParams(weights)\n }\n}","import { Point } from 'tfjs-image-recognition-base';\n\nexport const IOU_THRESHOLD = 0.4\n\nexport const BOX_ANCHORS = [\n new Point(1.603231, 2.094468),\n new Point(6.041143, 7.080126),\n new Point(2.882459, 3.518061),\n new Point(4.266906, 5.178857),\n new Point(9.041765, 10.66308)\n]\n\nexport const MEAN_RGB: [number, number, number] = [117.001, 114.697, 97.404]","import * as tf from '@tensorflow/tfjs-core';\nimport { Point, TfjsImageRecognitionBase, TNetInput } from 'tfjs-image-recognition-base';\n\nimport { FaceDetection } from '../classes';\nimport { BOX_ANCHORS, IOU_THRESHOLD, MEAN_RGB } from './const';\n\nexport class TinyFaceDetector extends TfjsImageRecognitionBase.TinyYolov2 {\n\n constructor() {\n const config = {\n withSeparableConvs: true,\n iouThreshold: IOU_THRESHOLD,\n classes: ['face'],\n anchors: BOX_ANCHORS,\n meanRgb: MEAN_RGB,\n isFirstLayerConv2d: true,\n filterSizes: [3, 16, 32, 64, 128, 256, 512]\n }\n\n super(config)\n }\n\n public get anchors(): Point[] {\n return this.config.anchors\n }\n\n public async locateFaces(input: TNetInput, forwardParams: TfjsImageRecognitionBase.ITinyYolov2Options): Promise {\n const objectDetections = await this.detect(input, forwardParams)\n return objectDetections.map(det => new FaceDetection(det.score, det.relativeBox, { width: det.imageWidth, height: det.imageHeight }))\n }\n\n protected getDefaultModelName(): string {\n return 'tiny_face_detector_model'\n }\n\n protected extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap): { params: TfjsImageRecognitionBase.TinyYolov2NetParams, paramMappings: TfjsImageRecognitionBase.ParamMapping[] } {\n return super.extractParamsFromWeigthMap(weightMap)\n }\n}","import { Point } from 'tfjs-image-recognition-base';\n\nexport const IOU_THRESHOLD = 0.4\n\nexport const BOX_ANCHORS = [\n new Point(0.738768, 0.874946),\n new Point(2.42204, 2.65704),\n new Point(4.30971, 7.04493),\n new Point(10.246, 4.59428),\n new Point(12.6868, 11.8741)\n]\n\nexport const BOX_ANCHORS_SEPARABLE = [\n new Point(1.603231, 2.094468),\n new Point(6.041143, 7.080126),\n new Point(2.882459, 3.518061),\n new Point(4.266906, 5.178857),\n new Point(9.041765, 10.66308)\n]\n\nexport const MEAN_RGB_SEPARABLE: [number, number, number] = [117.001, 114.697, 97.404]\n\nexport const DEFAULT_MODEL_NAME = 'tiny_yolov2_model'\nexport const DEFAULT_MODEL_NAME_SEPARABLE_CONV = 'tiny_yolov2_separable_conv_model'","import * as tf from '@tensorflow/tfjs-core';\nimport { Point, TfjsImageRecognitionBase, TNetInput } from 'tfjs-image-recognition-base';\n\nimport { FaceDetection } from '../classes';\nimport {\n BOX_ANCHORS,\n BOX_ANCHORS_SEPARABLE,\n DEFAULT_MODEL_NAME,\n DEFAULT_MODEL_NAME_SEPARABLE_CONV,\n IOU_THRESHOLD,\n MEAN_RGB_SEPARABLE,\n} from './const';\n\nexport class TinyYolov2 extends TfjsImageRecognitionBase.TinyYolov2 {\n\n constructor(withSeparableConvs: boolean = true) {\n const config = Object.assign({}, {\n withSeparableConvs,\n iouThreshold: IOU_THRESHOLD,\n classes: ['face']\n },\n withSeparableConvs\n ? {\n anchors: BOX_ANCHORS_SEPARABLE,\n meanRgb: MEAN_RGB_SEPARABLE\n }\n : {\n anchors: BOX_ANCHORS,\n withClassScores: true\n }\n )\n\n super(config)\n }\n\n public get withSeparableConvs(): boolean {\n return this.config.withSeparableConvs\n }\n\n public get anchors(): Point[] {\n return this.config.anchors\n }\n\n public async locateFaces(input: TNetInput, forwardParams: TfjsImageRecognitionBase.ITinyYolov2Options): Promise {\n const objectDetections = await this.detect(input, forwardParams)\n return objectDetections.map(det => new FaceDetection(det.score, det.relativeBox, { width: det.imageWidth, height: det.imageHeight }))\n }\n\n protected getDefaultModelName(): string {\n return this.withSeparableConvs ? DEFAULT_MODEL_NAME_SEPARABLE_CONV : DEFAULT_MODEL_NAME\n }\n\n protected extractParamsFromWeigthMap(weightMap: tf.NamedTensorMap): { params: TfjsImageRecognitionBase.TinyYolov2NetParams, paramMappings: TfjsImageRecognitionBase.ParamMapping[] } {\n return super.extractParamsFromWeigthMap(weightMap)\n }\n}","import { TinyYolov2 } from './TinyYolov2';\n\nexport { TinyYolov2 }\n\nexport function createTinyYolov2(weights: Float32Array, withSeparableConvs: boolean = true) {\n const net = new TinyYolov2(withSeparableConvs)\n net.extractWeights(weights)\n return net\n}","import { TfjsImageRecognitionBase, TNetInput } from 'tfjs-image-recognition-base';\n\nimport { AgeGenderNet } from '../ageGenderNet/AgeGenderNet';\nimport { AgeAndGenderPrediction } from '../ageGenderNet/types';\nimport { FaceDetection } from '../classes/FaceDetection';\nimport { FaceLandmarks5 } from '../classes/FaceLandmarks5';\nimport { FaceLandmarks68 } from '../classes/FaceLandmarks68';\nimport { FaceExpressionNet } from '../faceExpressionNet/FaceExpressionNet';\nimport { FaceExpressions } from '../faceExpressionNet/FaceExpressions';\nimport { FaceLandmark68Net } from '../faceLandmarkNet/FaceLandmark68Net';\nimport { FaceLandmark68TinyNet } from '../faceLandmarkNet/FaceLandmark68TinyNet';\nimport { FaceRecognitionNet } from '../faceRecognitionNet/FaceRecognitionNet';\nimport { WithFaceDetection } from '../factories/WithFaceDetection';\nimport { WithFaceLandmarks } from '../factories/WithFaceLandmarks';\nimport { Mtcnn } from '../mtcnn/Mtcnn';\nimport { MtcnnOptions } from '../mtcnn/MtcnnOptions';\nimport { SsdMobilenetv1 } from '../ssdMobilenetv1/SsdMobilenetv1';\nimport { SsdMobilenetv1Options } from '../ssdMobilenetv1/SsdMobilenetv1Options';\nimport { TinyFaceDetector } from '../tinyFaceDetector/TinyFaceDetector';\nimport { TinyFaceDetectorOptions } from '../tinyFaceDetector/TinyFaceDetectorOptions';\nimport { TinyYolov2 } from '../tinyYolov2';\n\nexport const nets = {\n ssdMobilenetv1: new SsdMobilenetv1(),\n tinyFaceDetector: new TinyFaceDetector(),\n tinyYolov2: new TinyYolov2(),\n mtcnn: new Mtcnn(),\n faceLandmark68Net: new FaceLandmark68Net(),\n faceLandmark68TinyNet: new FaceLandmark68TinyNet(),\n faceRecognitionNet: new FaceRecognitionNet(),\n faceExpressionNet: new FaceExpressionNet(),\n ageGenderNet: new AgeGenderNet()\n}\n\n/**\n * Attempts to detect all faces in an image using SSD Mobilenetv1 Network.\n *\n * @param input The input image.\n * @param options (optional, default: see SsdMobilenetv1Options constructor for default parameters).\n * @returns Bounding box of each face with score.\n */\nexport const ssdMobilenetv1 = (input: TNetInput, options: SsdMobilenetv1Options): Promise =>\n nets.ssdMobilenetv1.locateFaces(input, options)\n\n/**\n * Attempts to detect all faces in an image using the Tiny Face Detector.\n *\n * @param input The input image.\n * @param options (optional, default: see TinyFaceDetectorOptions constructor for default parameters).\n * @returns Bounding box of each face with score.\n */\nexport const tinyFaceDetector = (input: TNetInput, options: TinyFaceDetectorOptions): Promise =>\n nets.tinyFaceDetector.locateFaces(input, options)\n\n/**\n * Attempts to detect all faces in an image using the Tiny Yolov2 Network.\n *\n * @param input The input image.\n * @param options (optional, default: see TinyYolov2Options constructor for default parameters).\n * @returns Bounding box of each face with score.\n */\nexport const tinyYolov2 = (input: TNetInput, options: TfjsImageRecognitionBase.ITinyYolov2Options): Promise =>\n nets.tinyYolov2.locateFaces(input, options)\n\n/**\n * Attempts to detect all faces in an image and the 5 point face landmarks\n * of each detected face using the MTCNN Network.\n *\n * @param input The input image.\n * @param options (optional, default: see MtcnnOptions constructor for default parameters).\n * @returns Bounding box of each face with score and 5 point face landmarks.\n */\nexport const mtcnn = (input: TNetInput, options: MtcnnOptions): Promise, FaceLandmarks5>[]> =>\n nets.mtcnn.forward(input, options)\n\n/**\n * Detects the 68 point face landmark positions of the face shown in an image.\n *\n * @param inputs The face image extracted from the bounding box of a face. Can\n * also be an array of input images, which will be batch processed.\n * @returns 68 point face landmarks or array thereof in case of batch input.\n */\nexport const detectFaceLandmarks = (input: TNetInput): Promise =>\n nets.faceLandmark68Net.detectLandmarks(input)\n\n/**\n * Detects the 68 point face landmark positions of the face shown in an image\n * using a tinier version of the 68 point face landmark model, which is slightly\n * faster at inference, but also slightly less accurate.\n *\n * @param inputs The face image extracted from the bounding box of a face. Can\n * also be an array of input images, which will be batch processed.\n * @returns 68 point face landmarks or array thereof in case of batch input.\n */\nexport const detectFaceLandmarksTiny = (input: TNetInput): Promise =>\n nets.faceLandmark68TinyNet.detectLandmarks(input)\n\n/**\n * Computes a 128 entry vector (face descriptor / face embeddings) from the face shown in an image,\n * which uniquely represents the features of that persons face. The computed face descriptor can\n * be used to measure the similarity between faces, by computing the euclidean distance of two\n * face descriptors.\n *\n * @param inputs The face image extracted from the aligned bounding box of a face. Can\n * also be an array of input images, which will be batch processed.\n * @returns Face descriptor with 128 entries or array thereof in case of batch input.\n */\nexport const computeFaceDescriptor = (input: TNetInput): Promise =>\n nets.faceRecognitionNet.computeFaceDescriptor(input)\n\n\n/**\n * Recognizes the facial expressions from a face image.\n *\n * @param inputs The face image extracted from the bounding box of a face. Can\n * also be an array of input images, which will be batch processed.\n * @returns Facial expressions with corresponding probabilities or array thereof in case of batch input.\n */\nexport const recognizeFaceExpressions = (input: TNetInput): Promise =>\n nets.faceExpressionNet.predictExpressions(input)\n\n/**\n * Predicts age and gender from a face image.\n *\n * @param inputs The face image extracted from the bounding box of a face. Can\n * also be an array of input images, which will be batch processed.\n * @returns Predictions with age, gender and gender probability or array thereof in case of batch input.\n */\nexport const predictAgeAndGender = (input: TNetInput): Promise =>\n nets.ageGenderNet.predictAgeAndGender(input)\n\nexport const loadSsdMobilenetv1Model = (url: string) => nets.ssdMobilenetv1.load(url)\nexport const loadTinyFaceDetectorModel = (url: string) => nets.tinyFaceDetector.load(url)\nexport const loadMtcnnModel = (url: string) => nets.mtcnn.load(url)\nexport const loadTinyYolov2Model = (url: string) => nets.tinyYolov2.load(url)\nexport const loadFaceLandmarkModel = (url: string) => nets.faceLandmark68Net.load(url)\nexport const loadFaceLandmarkTinyModel = (url: string) => nets.faceLandmark68TinyNet.load(url)\nexport const loadFaceRecognitionModel = (url: string) => nets.faceRecognitionNet.load(url)\nexport const loadFaceExpressionModel = (url: string) => nets.faceExpressionNet.load(url)\nexport const loadAgeGenderModel = (url: string) => nets.ageGenderNet.load(url)\n\n// backward compatibility\nexport const loadFaceDetectionModel = loadSsdMobilenetv1Model\nexport const locateFaces = ssdMobilenetv1\nexport const detectLandmarks = detectFaceLandmarks","import * as tf from '@tensorflow/tfjs-core';\nimport { TNetInput } from 'tfjs-image-recognition-base';\n\nimport { FaceExpressions } from '../faceExpressionNet/FaceExpressions';\nimport { WithFaceDetection } from '../factories/WithFaceDetection';\nimport { extendWithFaceExpressions, WithFaceExpressions } from '../factories/WithFaceExpressions';\nimport { WithFaceLandmarks } from '../factories/WithFaceLandmarks';\nimport { ComposableTask } from './ComposableTask';\nimport { ComputeAllFaceDescriptorsTask, ComputeSingleFaceDescriptorTask } from './ComputeFaceDescriptorsTasks';\nimport { extractAllFacesAndComputeResults, extractSingleFaceAndComputeResult } from './extractFacesAndComputeResults';\nimport { nets } from './nets';\nimport {\n PredictAllAgeAndGenderTask,\n PredictAllAgeAndGenderWithFaceAlignmentTask,\n PredictSingleAgeAndGenderTask,\n PredictSingleAgeAndGenderWithFaceAlignmentTask,\n} from './PredictAgeAndGenderTask';\n\nexport class PredictFaceExpressionsTaskBase extends ComposableTask {\n constructor(\n protected parentTask: ComposableTask | Promise,\n protected input: TNetInput,\n protected extractedFaces?: Array\n ) {\n super()\n }\n}\n\nexport class PredictAllFaceExpressionsTask<\n TSource extends WithFaceDetection<{}>\n> extends PredictFaceExpressionsTaskBase[], TSource[]> {\n\n public async run(): Promise[]> {\n\n const parentResults = await this.parentTask\n\n const faceExpressionsByFace = await extractAllFacesAndComputeResults(\n parentResults,\n this.input,\n async faces => await Promise.all(faces.map(\n face => nets.faceExpressionNet.predictExpressions(face) as Promise\n )),\n this.extractedFaces\n )\n\n return parentResults.map(\n (parentResult, i) => extendWithFaceExpressions(parentResult, faceExpressionsByFace[i])\n )\n }\n\n withAgeAndGender() {\n return new PredictAllAgeAndGenderTask(this, this.input)\n }\n}\n\nexport class PredictSingleFaceExpressionsTask<\n TSource extends WithFaceDetection<{}>\n> extends PredictFaceExpressionsTaskBase | undefined, TSource | undefined> {\n\n public async run(): Promise | undefined> {\n\n const parentResult = await this.parentTask\n if (!parentResult) {\n return\n }\n\n const faceExpressions = await extractSingleFaceAndComputeResult(\n parentResult,\n this.input,\n face => nets.faceExpressionNet.predictExpressions(face) as Promise,\n this.extractedFaces\n )\n\n return extendWithFaceExpressions(parentResult, faceExpressions)\n }\n\n withAgeAndGender() {\n return new PredictSingleAgeAndGenderTask(this, this.input)\n }\n}\n\nexport class PredictAllFaceExpressionsWithFaceAlignmentTask<\n TSource extends WithFaceLandmarks>\n> extends PredictAllFaceExpressionsTask {\n\n withAgeAndGender() {\n return new PredictAllAgeAndGenderWithFaceAlignmentTask(this, this.input)\n }\n\n withFaceDescriptors() {\n return new ComputeAllFaceDescriptorsTask(this, this.input)\n }\n}\n\nexport class PredictSingleFaceExpressionsWithFaceAlignmentTask<\n TSource extends WithFaceLandmarks>\n> extends PredictSingleFaceExpressionsTask {\n\n withAgeAndGender() {\n return new PredictSingleAgeAndGenderWithFaceAlignmentTask(this, this.input)\n }\n\n withFaceDescriptor() {\n return new ComputeSingleFaceDescriptorTask(this, this.input)\n }\n}","import * as tf from '@tensorflow/tfjs-core';\nimport { TNetInput } from 'tfjs-image-recognition-base';\n\nimport { AgeAndGenderPrediction } from '../ageGenderNet/types';\nimport { extendWithAge, WithAge } from '../factories/WithAge';\nimport { WithFaceDetection } from '../factories/WithFaceDetection';\nimport { WithFaceLandmarks } from '../factories/WithFaceLandmarks';\nimport { extendWithGender, WithGender } from '../factories/WithGender';\nimport { ComposableTask } from './ComposableTask';\nimport { ComputeAllFaceDescriptorsTask, ComputeSingleFaceDescriptorTask } from './ComputeFaceDescriptorsTasks';\nimport { extractAllFacesAndComputeResults, extractSingleFaceAndComputeResult } from './extractFacesAndComputeResults';\nimport { nets } from './nets';\nimport {\n PredictAllFaceExpressionsTask,\n PredictAllFaceExpressionsWithFaceAlignmentTask,\n PredictSingleFaceExpressionsTask,\n PredictSingleFaceExpressionsWithFaceAlignmentTask,\n} from './PredictFaceExpressionsTask';\n\nexport class PredictAgeAndGenderTaskBase extends ComposableTask {\n constructor(\n protected parentTask: ComposableTask | Promise,\n protected input: TNetInput,\n protected extractedFaces?: Array\n ) {\n super()\n }\n}\n\nexport class PredictAllAgeAndGenderTask<\n TSource extends WithFaceDetection<{}>\n> extends PredictAgeAndGenderTaskBase>[], TSource[]> {\n\n public async run(): Promise>[]> {\n\n const parentResults = await this.parentTask\n\n const ageAndGenderByFace = await extractAllFacesAndComputeResults(\n parentResults,\n this.input,\n async faces => await Promise.all(faces.map(\n face => nets.ageGenderNet.predictAgeAndGender(face) as Promise\n )),\n this.extractedFaces\n )\n\n return parentResults.map((parentResult, i) => {\n const { age, gender, genderProbability } = ageAndGenderByFace[i]\n return extendWithAge(extendWithGender(parentResult, gender, genderProbability), age)\n })\n }\n\n withFaceExpressions() {\n return new PredictAllFaceExpressionsTask(this, this.input)\n }\n}\n\nexport class PredictSingleAgeAndGenderTask<\n TSource extends WithFaceDetection<{}>\n> extends PredictAgeAndGenderTaskBase> | undefined, TSource | undefined> {\n\n public async run(): Promise> | undefined> {\n\n const parentResult = await this.parentTask\n if (!parentResult) {\n return\n }\n\n const { age, gender, genderProbability } = await extractSingleFaceAndComputeResult(\n parentResult,\n this.input,\n face => nets.ageGenderNet.predictAgeAndGender(face) as Promise,\n this.extractedFaces\n )\n\n return extendWithAge(extendWithGender(parentResult, gender, genderProbability), age)\n }\n\n withFaceExpressions() {\n return new PredictSingleFaceExpressionsTask(this, this.input)\n }\n}\n\nexport class PredictAllAgeAndGenderWithFaceAlignmentTask<\n TSource extends WithFaceLandmarks>\n> extends PredictAllAgeAndGenderTask {\n\n withFaceExpressions() {\n return new PredictAllFaceExpressionsWithFaceAlignmentTask(this, this.input)\n }\n\n withFaceDescriptors() {\n return new ComputeAllFaceDescriptorsTask(this, this.input)\n }\n}\n\nexport class PredictSingleAgeAndGenderWithFaceAlignmentTask<\n TSource extends WithFaceLandmarks>\n> extends PredictSingleAgeAndGenderTask {\n\n withFaceExpressions() {\n return new PredictSingleFaceExpressionsWithFaceAlignmentTask(this, this.input)\n }\n\n withFaceDescriptor() {\n return new ComputeSingleFaceDescriptorTask(this, this.input)\n }\n}","import { TNetInput } from 'tfjs-image-recognition-base';\n\nimport { extendWithFaceDescriptor, WithFaceDescriptor } from '../factories/WithFaceDescriptor';\nimport { WithFaceDetection } from '../factories/WithFaceDetection';\nimport { WithFaceLandmarks } from '../factories/WithFaceLandmarks';\nimport { ComposableTask } from './ComposableTask';\nimport { extractAllFacesAndComputeResults, extractSingleFaceAndComputeResult } from './extractFacesAndComputeResults';\nimport { nets } from './nets';\nimport {\n PredictAllAgeAndGenderWithFaceAlignmentTask,\n PredictSingleAgeAndGenderWithFaceAlignmentTask,\n} from './PredictAgeAndGenderTask';\nimport {\n PredictAllFaceExpressionsWithFaceAlignmentTask,\n PredictSingleFaceExpressionsWithFaceAlignmentTask,\n} from './PredictFaceExpressionsTask';\n\nexport class ComputeFaceDescriptorsTaskBase extends ComposableTask {\n constructor(\n protected parentTask: ComposableTask | Promise,\n protected input: TNetInput\n ) {\n super()\n }\n}\n\nexport class ComputeAllFaceDescriptorsTask<\n TSource extends WithFaceLandmarks>\n> extends ComputeFaceDescriptorsTaskBase[], TSource[]> {\n\n public async run(): Promise[]> {\n\n const parentResults = await this.parentTask\n\n const descriptors = await extractAllFacesAndComputeResults(\n parentResults,\n this.input,\n faces => Promise.all(faces.map(face =>\n nets.faceRecognitionNet.computeFaceDescriptor(face) as Promise\n )),\n null,\n parentResult => parentResult.landmarks.align(null, { useDlibAlignment: true })\n )\n\n return descriptors.map((descriptor, i) => extendWithFaceDescriptor(parentResults[i], descriptor))\n }\n\n withFaceExpressions() {\n return new PredictAllFaceExpressionsWithFaceAlignmentTask(this, this.input)\n }\n\n withAgeAndGender() {\n return new PredictAllAgeAndGenderWithFaceAlignmentTask(this, this.input)\n }\n}\n\nexport class ComputeSingleFaceDescriptorTask<\n TSource extends WithFaceLandmarks>\n> extends ComputeFaceDescriptorsTaskBase | undefined, TSource | undefined> {\n\n public async run(): Promise | undefined> {\n\n const parentResult = await this.parentTask\n if (!parentResult) {\n return\n }\n const descriptor = await extractSingleFaceAndComputeResult(\n parentResult,\n this.input,\n face => nets.faceRecognitionNet.computeFaceDescriptor(face) as Promise,\n null,\n parentResult => parentResult.landmarks.align(null, { useDlibAlignment: true })\n )\n\n return extendWithFaceDescriptor(parentResult, descriptor)\n }\n\n withFaceExpressions() {\n return new PredictSingleFaceExpressionsWithFaceAlignmentTask(this, this.input)\n }\n\n withAgeAndGender() {\n return new PredictSingleAgeAndGenderWithFaceAlignmentTask(this, this.input)\n }\n}","import * as tf from '@tensorflow/tfjs-core';\nimport { TNetInput } from 'tfjs-image-recognition-base';\n\nimport { FaceLandmarks68 } from '../classes/FaceLandmarks68';\nimport { extractFaces, extractFaceTensors } from '../dom';\nimport { FaceLandmark68Net } from '../faceLandmarkNet/FaceLandmark68Net';\nimport { FaceLandmark68TinyNet } from '../faceLandmarkNet/FaceLandmark68TinyNet';\nimport { WithFaceDetection } from '../factories/WithFaceDetection';\nimport { extendWithFaceLandmarks, WithFaceLandmarks } from '../factories/WithFaceLandmarks';\nimport { ComposableTask } from './ComposableTask';\nimport { ComputeAllFaceDescriptorsTask, ComputeSingleFaceDescriptorTask } from './ComputeFaceDescriptorsTasks';\nimport { nets } from './nets';\nimport {\n PredictAllAgeAndGenderWithFaceAlignmentTask,\n PredictSingleAgeAndGenderWithFaceAlignmentTask,\n} from './PredictAgeAndGenderTask';\nimport {\n PredictAllFaceExpressionsWithFaceAlignmentTask,\n PredictSingleFaceExpressionsWithFaceAlignmentTask,\n} from './PredictFaceExpressionsTask';\n\nexport class DetectFaceLandmarksTaskBase extends ComposableTask {\n constructor(\n protected parentTask: ComposableTask | Promise,\n protected input: TNetInput,\n protected useTinyLandmarkNet: boolean\n ) {\n super()\n }\n\n protected get landmarkNet(): FaceLandmark68Net | FaceLandmark68TinyNet {\n return this.useTinyLandmarkNet\n ? nets.faceLandmark68TinyNet\n : nets.faceLandmark68Net\n }\n}\n\nexport class DetectAllFaceLandmarksTask<\n TSource extends WithFaceDetection<{}>\n> extends DetectFaceLandmarksTaskBase[], TSource[]> {\n\n public async run(): Promise[]> {\n\n const parentResults = await this.parentTask\n const detections = parentResults.map(res => res.detection)\n\n const faces: Array = this.input instanceof tf.Tensor\n ? await extractFaceTensors(this.input, detections)\n : await extractFaces(this.input, detections)\n\n const faceLandmarksByFace = await Promise.all(faces.map(\n face => this.landmarkNet.detectLandmarks(face)\n )) as FaceLandmarks68[]\n\n faces.forEach(f => f instanceof tf.Tensor && f.dispose())\n\n return parentResults.map((parentResult, i) =>\n extendWithFaceLandmarks(parentResult, faceLandmarksByFace[i])\n )\n }\n\n withFaceExpressions() {\n return new PredictAllFaceExpressionsWithFaceAlignmentTask(this, this.input)\n }\n\n withAgeAndGender() {\n return new PredictAllAgeAndGenderWithFaceAlignmentTask(this, this.input)\n }\n\n withFaceDescriptors() {\n return new ComputeAllFaceDescriptorsTask(this, this.input)\n }\n}\n\nexport class DetectSingleFaceLandmarksTask<\n TSource extends WithFaceDetection<{}>\n> extends DetectFaceLandmarksTaskBase | undefined, TSource | undefined> {\n\n public async run(): Promise | undefined> {\n\n const parentResult = await this.parentTask\n if (!parentResult) {\n return\n }\n\n const { detection } = parentResult\n const faces: Array = this.input instanceof tf.Tensor\n ? await extractFaceTensors(this.input, [detection])\n : await extractFaces(this.input, [detection])\n\n const landmarks = await this.landmarkNet.detectLandmarks(faces[0]) as FaceLandmarks68\n\n faces.forEach(f => f instanceof tf.Tensor && f.dispose())\n\n return extendWithFaceLandmarks(parentResult, landmarks)\n }\n\n withFaceExpressions() {\n return new PredictSingleFaceExpressionsWithFaceAlignmentTask(this, this.input)\n }\n\n withAgeAndGender() {\n return new PredictSingleAgeAndGenderWithFaceAlignmentTask(this, this.input)\n }\n\n withFaceDescriptor() {\n return new ComputeSingleFaceDescriptorTask(this, this.input)\n }\n}","import { TfjsImageRecognitionBase, TNetInput } from 'tfjs-image-recognition-base';\n\nimport { FaceDetection } from '../classes/FaceDetection';\nimport { extendWithFaceDetection, WithFaceDetection } from '../factories/WithFaceDetection';\nimport { MtcnnOptions } from '../mtcnn/MtcnnOptions';\nimport { SsdMobilenetv1Options } from '../ssdMobilenetv1/SsdMobilenetv1Options';\nimport { TinyFaceDetectorOptions } from '../tinyFaceDetector/TinyFaceDetectorOptions';\nimport { ComposableTask } from './ComposableTask';\nimport { DetectAllFaceLandmarksTask, DetectSingleFaceLandmarksTask } from './DetectFaceLandmarksTasks';\nimport { nets } from './nets';\nimport { PredictAllAgeAndGenderTask, PredictSingleAgeAndGenderTask } from './PredictAgeAndGenderTask';\nimport { PredictAllFaceExpressionsTask, PredictSingleFaceExpressionsTask } from './PredictFaceExpressionsTask';\nimport { FaceDetectionOptions } from './types';\n\nexport class DetectFacesTaskBase extends ComposableTask {\n constructor(\n protected input: TNetInput,\n protected options: FaceDetectionOptions = new SsdMobilenetv1Options()\n ) {\n super()\n }\n}\n\nexport class DetectAllFacesTask extends DetectFacesTaskBase {\n\n public async run(): Promise {\n\n const { input, options } = this\n\n if (options instanceof MtcnnOptions) {\n return (await nets.mtcnn.forward(input, options))\n .map(result => result.detection)\n }\n\n const faceDetectionFunction = options instanceof TinyFaceDetectorOptions\n ? (input: TNetInput) => nets.tinyFaceDetector.locateFaces(input, options)\n : (\n options instanceof SsdMobilenetv1Options\n ? (input: TNetInput) => nets.ssdMobilenetv1.locateFaces(input, options)\n : (\n options instanceof TfjsImageRecognitionBase.TinyYolov2Options\n ? (input: TNetInput) => nets.tinyYolov2.locateFaces(input, options)\n : null\n )\n )\n\n if (!faceDetectionFunction) {\n throw new Error('detectFaces - expected options to be instance of TinyFaceDetectorOptions | SsdMobilenetv1Options | MtcnnOptions | TinyYolov2Options')\n }\n\n return faceDetectionFunction(input)\n }\n\n private runAndExtendWithFaceDetections(): Promise[]> {\n return new Promise[]>(async res => {\n const detections = await this.run()\n return res(detections.map(detection => extendWithFaceDetection({}, detection)))\n })\n }\n\n withFaceLandmarks(useTinyLandmarkNet: boolean = false) {\n return new DetectAllFaceLandmarksTask(\n this.runAndExtendWithFaceDetections(),\n this.input,\n useTinyLandmarkNet\n )\n }\n\n withFaceExpressions() {\n return new PredictAllFaceExpressionsTask (\n this.runAndExtendWithFaceDetections(),\n this.input\n )\n }\n\n withAgeAndGender() {\n return new PredictAllAgeAndGenderTask(\n this.runAndExtendWithFaceDetections(),\n this.input\n )\n }\n}\n\nexport class DetectSingleFaceTask extends DetectFacesTaskBase {\n\n public async run(): Promise {\n const faceDetections = await new DetectAllFacesTask(this.input, this.options);\n let faceDetectionWithHighestScore = faceDetections[0];\n faceDetections.forEach(faceDetection => {\n if (faceDetection.score > faceDetectionWithHighestScore.score) {\n faceDetectionWithHighestScore = faceDetection;\n }\n });\n return faceDetectionWithHighestScore;\n }\n\n private runAndExtendWithFaceDetection(): Promise> {\n return new Promise>(async res => {\n const detection = await this.run()\n return res(detection ? extendWithFaceDetection<{}>({}, detection) : undefined)\n })\n }\n\n withFaceLandmarks(useTinyLandmarkNet: boolean = false) {\n return new DetectSingleFaceLandmarksTask(\n this.runAndExtendWithFaceDetection(),\n this.input,\n useTinyLandmarkNet\n )\n }\n\n withFaceExpressions() {\n return new PredictSingleFaceExpressionsTask(\n this.runAndExtendWithFaceDetection(),\n this.input\n )\n }\n\n withAgeAndGender() {\n return new PredictSingleAgeAndGenderTask(\n this.runAndExtendWithFaceDetection(),\n this.input\n )\n }\n}","import { TNetInput } from 'tfjs-image-recognition-base';\n\nimport { SsdMobilenetv1Options } from '../ssdMobilenetv1/SsdMobilenetv1Options';\nimport { DetectAllFacesTask, DetectSingleFaceTask } from './DetectFacesTasks';\nimport { FaceDetectionOptions } from './types';\n\nexport function detectSingleFace(\n input: TNetInput,\n options: FaceDetectionOptions = new SsdMobilenetv1Options()\n): DetectSingleFaceTask {\n return new DetectSingleFaceTask(input, options)\n}\n\nexport function detectAllFaces(\n input: TNetInput,\n options: FaceDetectionOptions = new SsdMobilenetv1Options()\n): DetectAllFacesTask {\n return new DetectAllFacesTask(input, options)\n}","import { TfjsImageRecognitionBase, TNetInput } from 'tfjs-image-recognition-base';\n\nimport { WithFaceDescriptor, WithFaceDetection, WithFaceLandmarks } from '../factories';\nimport { IMtcnnOptions, MtcnnOptions } from '../mtcnn/MtcnnOptions';\nimport { SsdMobilenetv1Options } from '../ssdMobilenetv1';\nimport { detectAllFaces } from './detectFaces';\n\n// export allFaces API for backward compatibility\n\nexport async function allFacesSsdMobilenetv1(\n input: TNetInput,\n minConfidence?: number\n): Promise>>[]> {\n return await detectAllFaces(input, new SsdMobilenetv1Options(minConfidence ? { minConfidence } : {}))\n .withFaceLandmarks()\n .withFaceDescriptors()\n}\n\nexport async function allFacesTinyYolov2(\n input: TNetInput,\n forwardParams: TfjsImageRecognitionBase.ITinyYolov2Options = {}\n): Promise>>[]> {\n return await detectAllFaces(input, new TfjsImageRecognitionBase.TinyYolov2Options(forwardParams))\n .withFaceLandmarks()\n .withFaceDescriptors()\n}\n\nexport async function allFacesMtcnn(\n input: TNetInput,\n forwardParams: IMtcnnOptions = {}\n): Promise>>[]> {\n return await detectAllFaces(input, new MtcnnOptions(forwardParams))\n .withFaceLandmarks()\n .withFaceDescriptors()\n}\n\nexport const allFaces = allFacesSsdMobilenetv1\n","export function euclideanDistance(arr1: number[] | Float32Array, arr2: number[] | Float32Array) {\n if (arr1.length !== arr2.length)\n throw new Error('euclideanDistance: arr1.length !== arr2.length')\n\n const desc1 = Array.from(arr1)\n const desc2 = Array.from(arr2)\n\n return Math.sqrt(\n desc1\n .map((val, i) => val - desc2[i])\n .reduce((res, diff) => res + Math.pow(diff, 2), 0)\n )\n}","import { FaceMatch } from '../classes/FaceMatch';\nimport { LabeledFaceDescriptors } from '../classes/LabeledFaceDescriptors';\nimport { euclideanDistance } from '../euclideanDistance';\nimport { WithFaceDescriptor } from '../factories';\n\nexport class FaceMatcher {\n\n private _labeledDescriptors: LabeledFaceDescriptors[]\n private _distanceThreshold: number\n\n constructor(\n inputs: LabeledFaceDescriptors | WithFaceDescriptor | Float32Array | Array | Float32Array>,\n distanceThreshold: number = 0.6\n ) {\n\n this._distanceThreshold = distanceThreshold\n\n const inputArray = Array.isArray(inputs) ? inputs : [inputs]\n\n if (!inputArray.length) {\n throw new Error(`FaceRecognizer.constructor - expected atleast one input`)\n }\n\n let count = 1\n const createUniqueLabel = () => `person ${count++}`\n\n this._labeledDescriptors = inputArray.map((desc) => {\n if (desc instanceof LabeledFaceDescriptors) {\n return desc\n }\n\n if (desc instanceof Float32Array) {\n return new LabeledFaceDescriptors(createUniqueLabel(), [desc])\n }\n\n if (desc.descriptor && desc.descriptor instanceof Float32Array) {\n return new LabeledFaceDescriptors(createUniqueLabel(), [desc.descriptor])\n }\n\n throw new Error(`FaceRecognizer.constructor - expected inputs to be of type LabeledFaceDescriptors | WithFaceDescriptor | Float32Array | Array | Float32Array>`)\n })\n }\n\n public get labeledDescriptors(): LabeledFaceDescriptors[] { return this._labeledDescriptors }\n public get distanceThreshold(): number { return this._distanceThreshold }\n\n public computeMeanDistance(queryDescriptor: Float32Array, descriptors: Float32Array[]): number {\n return descriptors\n .map(d => euclideanDistance(d, queryDescriptor))\n .reduce((d1, d2) => d1 + d2, 0)\n / (descriptors.length || 1)\n }\n\n public matchDescriptor(queryDescriptor: Float32Array): FaceMatch {\n return this.labeledDescriptors\n .map(({ descriptors, label }) => new FaceMatch(\n label,\n this.computeMeanDistance(queryDescriptor, descriptors)\n ))\n .reduce((best, curr) => best.distance < curr.distance ? best : curr)\n }\n\n public findBestMatch(queryDescriptor: Float32Array): FaceMatch {\n const bestMatch = this.matchDescriptor(queryDescriptor)\n return bestMatch.distance < this.distanceThreshold\n ? bestMatch\n : new FaceMatch('unknown', bestMatch.distance)\n }\n\n}","import { Mtcnn } from './Mtcnn';\n\nexport * from './Mtcnn';\nexport * from './MtcnnOptions';\n\nexport function createMtcnn(weights: Float32Array) {\n const net = new Mtcnn()\n net.extractWeights(weights)\n return net\n}","import { TinyFaceDetector } from './TinyFaceDetector';\n\nexport * from './TinyFaceDetector';\nexport * from './TinyFaceDetectorOptions';\n\nexport function createTinyFaceDetector(weights: Float32Array) {\n const net = new TinyFaceDetector()\n net.extractWeights(weights)\n return net\n}","import { Dimensions, IDimensions } from 'tfjs-image-recognition-base';\n\nimport { FaceDetection } from './classes/FaceDetection';\nimport { FaceLandmarks } from './classes/FaceLandmarks';\nimport { extendWithFaceDetection, isWithFaceDetection } from './factories/WithFaceDetection';\nimport { extendWithFaceLandmarks, isWithFaceLandmarks } from './factories/WithFaceLandmarks';\n\nexport function resizeResults(results: T, dimensions: IDimensions): T {\n\n const { width, height } = new Dimensions(dimensions.width, dimensions.height)\n\n if (width <= 0 || height <= 0) {\n throw new Error(`resizeResults - invalid dimensions: ${JSON.stringify({ width, height })}`)\n }\n\n if (Array.isArray(results)) {\n return results.map(obj => resizeResults(obj, { width, height })) as any as T\n }\n\n if (isWithFaceLandmarks(results)) {\n const resizedDetection = results.detection.forSize(width, height)\n const resizedLandmarks = results.unshiftedLandmarks.forSize(resizedDetection.box.width, resizedDetection.box.height)\n\n return extendWithFaceLandmarks(extendWithFaceDetection(results, resizedDetection), resizedLandmarks)\n }\n\n if (isWithFaceDetection(results)) {\n return extendWithFaceDetection(results, results.detection.forSize(width, height))\n }\n\n if (results instanceof FaceLandmarks || results instanceof FaceDetection) {\n return (results as any).forSize(width, height)\n }\n\n return results\n}","import * as tf from '@tensorflow/tfjs-core';\nimport { draw as drawBase } from 'tfjs-image-recognition-base';\n\nimport * as drawExtended from './draw';\n\nexport {\n tf\n}\n\nexport * from 'tfjs-image-recognition-base';\n\nexport * from './ageGenderNet/index';\nconst draw = {...drawBase, ...drawExtended }\nexport { draw }\n\nexport * from './classes/index';\nexport * from './dom/index'\nexport * from './faceExpressionNet/index';\nexport * from './faceLandmarkNet/index';\nexport * from './faceRecognitionNet/index';\nexport * from './factories/index';\nexport * from './globalApi/index';\nexport * from './mtcnn/index';\nexport * from './ssdMobilenetv1/index';\nexport * from './tinyFaceDetector/index';\nexport * from './tinyYolov2/index';\n\nexport * from './euclideanDistance';\nexport * from './resizeResults';"],"names":["tf.Tensor","tslib_1.__extends","tslib_1.__assign","tf.tidy","tf.add","tf.conv2d","tf.relu","tf.tensor4d","tf.tensor1d","tf.tensor2d","tslib_1.__awaiter","tslib_1.__generator","tf.browser","tf.io","tf.fill","tf.concat","tf.image","tf.stack","tf.Variable","tf.tensor","tf.sub","tf.mul","tf.scalar","tf.pad","tf.separableConv2d","extractorsFactory","tf.maxPool","tf.unstack","tf.softmax","draw.DrawBox","depthwiseSeparableConv","TfjsImageRecognitionBase.extractConvParamsFactory","TfjsImageRecognitionBase.extractSeparableConvParamsFactory","extractParams","TfjsImageRecognitionBase.extractWeightEntryFactory","TfjsImageRecognitionBase.loadSeparableConvParamsFactory","extractParamsFromWeigthMap","TfjsImageRecognitionBase.disposeUnusedWeightTensors","tf.avgPool","tf.matMul","TfjsImageRecognitionBase.extractFCParamsFactory","draw.DrawTextField","minBbox","loadParamsFactory","Gender","tf.slice3d","convLayer","conv","tf.transpose","tf.zeros","tf.tensor3d","tf.clipByValue","tf.depthwiseConv2d","tf.batchNorm","nonMaxSuppression","tf.div","tf.exp","tf.reshape","tf.tile","tf.sigmoid","tf.slice","TfjsImageRecognitionBase.convLayer","TfjsImageRecognitionBase.TinyYolov2Options","normalize","tf.neg","tf.expandDims","tf.max","TfjsImageRecognitionBase.TinyYolov2","IOU_THRESHOLD","BOX_ANCHORS","TinyYolov2"],"mappings":"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CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,eAAe,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,eAAe,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,eAAe,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,eAAe,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,eAAe,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,eAAe,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,eAAe,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,eAAe,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,eAAe,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,eAAe,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,eAAe,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,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C,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,IAAI,CAAC,eAAe,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,IAAI,CAAC,eAAe,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,IAAI,CAAC,eAAe,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,IAAI,CAAC,eAAe,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,IAAI,CAAC,eAAe,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,IAAI,CAAC,eAAe,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,IAAI,CAAC,eAAe,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,IAAI,CAAC,eAAe,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,IAAI,CAAC,eAAe,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,IAAI,CAAC,eAAe,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,qBAAqB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,eAAe,EAAE,CAAC,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC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AC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CA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,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,OAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,OAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,OAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,OAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,OAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,OAAM,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC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C,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAA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GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,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AAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC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,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,EAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO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AC,GAAG,CAAC,CAAC,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,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AC,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,IAAI,KAAK,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CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,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AE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,OAAO,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CA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AAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,C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CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,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C,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAA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C,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAA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AC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,EA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K,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,CAA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,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC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CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,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AAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,C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AAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,C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AAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,C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AAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,sBAAsB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,C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,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS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AC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CA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CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,KAAK,GAAG,UAAU,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAC,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,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C,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,OAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,UAAU,CAA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C,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAA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"} \ No newline at end of file diff --git a/js/iniciar.js b/js/iniciar.js new file mode 100644 index 0000000000000000000000000000000000000000..c124bbaf6151c2390681613c402999384872ec2a --- /dev/null +++ b/js/iniciar.js @@ -0,0 +1,11 @@ +$(document).ready(() => { + run(); +}) +async function run() { + await faceapi.nets.tinyFaceDetector.loadFromUri('./models'), + await faceapi.nets.ssdMobilenetv1.loadFromUri("./models") + await faceapi.nets.faceLandmark68Net.loadFromUri("./models") + await faceapi.nets.faceRecognitionNet.loadFromUri("./models") + await faceapi.nets.faceExpressionNet.loadFromUri("./models") + await faceapi.nets.ageGenderNet.loadFromUri("./models") +} \ No newline at end of file diff --git a/js/jquery-3.4.1.min.js b/js/jquery-3.4.1.min.js new file mode 100644 index 0000000000000000000000000000000000000000..a1c07fd803b5fc9c54f44e31123ae4fa11e134b0 --- /dev/null +++ b/js/jquery-3.4.1.min.js @@ -0,0 +1,2 @@ +/*! jQuery v3.4.1 | (c) JS Foundation and other contributors | jquery.org/license */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],E=C.document,r=Object.getPrototypeOf,s=t.slice,g=t.concat,u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType},x=function(e){return null!=e&&e===e.window},c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.4.1",k=function(e,t){return new k.fn.init(e,t)},p=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;function d(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp($),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+$),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),ne=function(e,t,n){var r="0x"+t-65536;return r!=r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(m.childNodes),m.childNodes),t[m.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&((e?e.ownerDocument||e:m)!==C&&T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!A[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&U.test(t)){(s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=k),o=(l=h(t)).length;while(o--)l[o]="#"+s+" "+xe(l[o]);c=l.join(","),f=ee.test(t)&&ye(e.parentNode)||e}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){A(t,!0)}finally{s===k&&e.removeAttribute("id")}}}return g(t.replace(B,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[k]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e.namespaceURI,n=(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:m;return r!==C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),m!==C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=k,!C.getElementsByName||!C.getElementsByName(k).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+k+"-]").length||v.push("~="),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+k+"+*").length||v.push(".#.+[+~]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",$)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e===C||e.ownerDocument===m&&y(m,e)?-1:t===C||t.ownerDocument===m&&y(m,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e===C?-1:t===C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]===m?-1:s[r]===m?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if((e.ownerDocument||e)!==C&&T(e),d.matchesSelector&&E&&!A[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){A(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=p[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&p(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?k.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?k.grep(e,function(e){return e===n!==r}):"string"!=typeof n?k.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(k.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||q,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:L.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof k?t[0]:t,k.merge(this,k.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),D.test(r[1])&&k.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(k):k.makeArray(e,this)}).prototype=k.fn,q=k(E);var H=/^(?:parents|prev(?:Until|All))/,O={children:!0,contents:!0,next:!0,prev:!0};function P(e,t){while((e=e[t])&&1!==e.nodeType);return e}k.fn.extend({has:function(e){var t=k(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i,ge={option:[1,""],thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?k.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;nx",y.noCloneChecked=!!me.cloneNode(!0).lastChild.defaultValue;var Te=/^key/,Ce=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Ee=/^([^.]*)(?:\.(.+)|)/;function ke(){return!0}function Se(){return!1}function Ne(e,t){return e===function(){try{return E.activeElement}catch(e){}}()==("focus"===t)}function Ae(e,t,n,r,i,o){var a,s;if("object"==typeof t){for(s in"string"!=typeof n&&(r=r||n,n=void 0),t)Ae(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=Se;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return k().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=k.guid++)),e.each(function(){k.event.add(this,t,i,r,n)})}function De(e,i,o){o?(Q.set(e,i,!1),k.event.add(e,i,{namespace:!1,handler:function(e){var t,n,r=Q.get(this,i);if(1&e.isTrigger&&this[i]){if(r.length)(k.event.special[i]||{}).delegateType&&e.stopPropagation();else if(r=s.call(arguments),Q.set(this,i,r),t=o(this,i),this[i](),r!==(n=Q.get(this,i))||t?Q.set(this,i,!1):n={},r!==n)return e.stopImmediatePropagation(),e.preventDefault(),n.value}else r.length&&(Q.set(this,i,{value:k.event.trigger(k.extend(r[0],k.Event.prototype),r.slice(1),this)}),e.stopImmediatePropagation())}})):void 0===Q.get(e,i)&&k.event.add(e,i,ke)}k.event={global:{},add:function(t,e,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Q.get(t);if(v){n.handler&&(n=(o=n).handler,i=o.selector),i&&k.find.matchesSelector(ie,i),n.guid||(n.guid=k.guid++),(u=v.events)||(u=v.events={}),(a=v.handle)||(a=v.handle=function(e){return"undefined"!=typeof k&&k.event.triggered!==e.type?k.event.dispatch.apply(t,arguments):void 0}),l=(e=(e||"").match(R)||[""]).length;while(l--)d=g=(s=Ee.exec(e[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=k.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=k.event.special[d]||{},c=k.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&k.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(t,r,h,a)||t.addEventListener&&t.addEventListener(d,a)),f.add&&(f.add.call(t,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),k.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Q.hasData(e)&&Q.get(e);if(v&&(u=v.events)){l=(t=(t||"").match(R)||[""]).length;while(l--)if(d=g=(s=Ee.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d){f=k.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,v.handle)||k.removeEvent(e,d,v.handle),delete u[d])}else for(d in u)k.event.remove(e,d+t[l],n,r,!0);k.isEmptyObject(u)&&Q.remove(e,"handle events")}},dispatch:function(e){var t,n,r,i,o,a,s=k.event.fix(e),u=new Array(arguments.length),l=(Q.get(this,"events")||{})[s.type]||[],c=k.event.special[s.type]||{};for(u[0]=s,t=1;t\x20\t\r\n\f]*)[^>]*)\/>/gi,qe=/\s*$/g;function Oe(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&k(e).children("tbody")[0]||e}function Pe(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function Re(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Me(e,t){var n,r,i,o,a,s,u,l;if(1===t.nodeType){if(Q.hasData(e)&&(o=Q.access(e),a=Q.set(t,o),l=o.events))for(i in delete a.handle,a.events={},l)for(n=0,r=l[i].length;n")},clone:function(e,t,n){var r,i,o,a,s,u,l,c=e.cloneNode(!0),f=oe(e);if(!(y.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||k.isXMLDoc(e)))for(a=ve(c),r=0,i=(o=ve(e)).length;r").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var Vt,Gt=[],Yt=/(=)\?(?=&|$)|\?\?/;k.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Gt.pop()||k.expando+"_"+kt++;return this[e]=!0,e}}),k.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Yt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Yt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Yt,"$1"+r):!1!==e.jsonp&&(e.url+=(St.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||k.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?k(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Gt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((Vt=E.implementation.createHTMLDocument("").body).innerHTML="
",2===Vt.childNodes.length),k.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=D.exec(e))?[t.createElement(i[1])]:(i=we([e],t,o),o&&o.length&&k(o).remove(),k.merge([],i.childNodes)));var r,i,o},k.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(k.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},k.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){k.fn[t]=function(e){return this.on(t,e)}}),k.expr.pseudos.animated=function(t){return k.grep(k.timers,function(e){return t===e.elem}).length},k.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=k.css(e,"position"),c=k(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=k.css(e,"top"),u=k.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,k.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},k.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){k.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===k.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===k.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=k(e).offset()).top+=k.css(e,"borderTopWidth",!0),i.left+=k.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-k.css(r,"marginTop",!0),left:t.left-i.left-k.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===k.css(e,"position"))e=e.offsetParent;return e||ie})}}),k.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;k.fn[t]=function(e){return _(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),k.each(["top","left"],function(e,n){k.cssHooks[n]=ze(y.pixelPosition,function(e,t){if(t)return t=_e(e,n),$e.test(t)?k(e).position()[n]+"px":t})}),k.each({Height:"height",Width:"width"},function(a,s){k.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){k.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return _(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?k.css(e,t,i):k.style(e,t,n,i)},s,n?e:void 0,n)}})}),k.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){k.fn[n]=function(e,t){return 0 { + if (event.target.checked) { + extractPointsButton.disabled = false; + extractPointsButton.addEventListener("change", extractPointsButton); + resultsContainer.innerHTML = ""; + video = document.createElement("video"); + video.width = 200; + video.height = 150; + video.autoplay = true; + stream = await navigator.mediaDevices.getUserMedia({ + audio: false, + video: true, + }); + canvas.width = video.width; + canvas.height = video.height; + canvas.id = "landmarkCanvas"; + video.srcObject = stream; + resultsContainer.appendChild(video); + resultsContainer.appendChild(canvas); + + } else { + extractPointsButton.checked = false; + extractPointsButton.disabled = true; + extractPointsButton.removeEventListener("change", extractPointsButton); + + clearInterval(extractPointsInterval); + resultsContainer.innerHTML = ""; + video.srcObject = null; + if (stream != null) { + stream.getTracks().forEach((track) => track.stop()); + } + } + }); + + let resetTimer; + let currentIndex = 0; + function piscar() { + const btnOptions = document.querySelectorAll('.eye-button'); + btnOptions[currentIndex].classList.remove('selected'); + currentIndex = (currentIndex + 1) % btnOptions.length; + btnOptions[currentIndex].classList.add('selected'); + clearTimeout(resetTimer); + resetTimer = setTimeout(() => { + if(btnOptions[currentIndex].innerText!="#"){ + document.getElementById("text").innerHTML += btnOptions[currentIndex].innerText; + }else{ + document.getElementById("text").innerHTML =""; + } + btnOptions[currentIndex].classList.remove('selected'); + currentIndex = 0; + btnOptions[currentIndex].classList.add('selected'); + }, 3000); + } + + function unite(leftEyebrow, rightEyebrow) { + const united = []; + for (const point of leftEyebrow) { united.push(point); } + for (const point of rightEyebrow) {united.push(point); } + return united; + } + + extractPointsButton.addEventListener("change", async (event) => { + if (event.target.checked) { + extractPointsInterval = setInterval(async () => { + canvas = document.getElementById("landmarkCanvas"); + displaySize = { width: video.width, height: video.height}; + faceapi.matchDimensions(canvas,displaySize); + detections = await faceapi.detectAllFaces(video, new faceapi.TinyFaceDetectorOptions()).withFaceLandmarks(); + resizedDetections = faceapi.resizeResults(detections, displaySize); + resultsContainer.appendChild(video); + resultsContainer.appendChild(canvas); + + + function getBoxFromPoints(points) { + let minX = points[0].x; + let minY = points[0].y; + let maxX = points[0].x; + let maxY = points[0].y; + + points.forEach(point => { + minX = Math.min(minX, point.x); + minY = Math.min(minY, point.y); + maxX = Math.max(maxX, point.x); + maxY = Math.max(maxY, point.y); + }); + + return { + x: minX, + y: minY, + width: maxX - minX, + height: maxY - minY, + center: { + x: (minX + maxX) / 2, + y: (minY + maxY) / 2 + } + }; +} + + +function calcularPontoDeOlhar(face) { + const olhoEsquerdo = face.landmarks.positions.slice(36, 42); + const olhoDireito = face.landmarks.positions.slice(42, 48); + + // Calculando os pontos centrais para cada olho + const centroEsquerdo = calcularCentro(olhoEsquerdo); + const centroDireito = calcularCentro(olhoDireito); + + // Calculando um ponto médio entre os centros dos dois olhos + const pontoFocal = { + x: (centroEsquerdo.x + centroDireito.x) / 2, + y: (centroEsquerdo.y + centroDireito.y) / 2 + }; + + return pontoFocal; +} + +function calcularCentro(pontos) { + const totalPontos = pontos.length; + const centro = pontos.reduce((soma, ponto) => { + soma.x += ponto._x; + soma.y += ponto._y; + return soma; + }, {x: 0, y: 0}); + + centro.x /= totalPontos; + centro.y /= totalPontos; + return centro; +} +function verificarBotaoSobOlhar(pontoFocal) { + const botoes = document.querySelectorAll('.eye-button'); + for(const botao of botoes) { + const rect = botao.getBoundingClientRect(); + if ( + pontoFocal.x >= rect.left && pontoFocal.x <= rect.right && + pontoFocal.y >= rect.top && pontoFocal.y <= rect.bottom + + ) { + + return botao; + } + } + return null; +} + + + for (const face of resizedDetections) { + const features = { + olhoEsquerdo: face.landmarks.positions.slice(36, 42), + olhoDireito: face.landmarks.positions.slice(42, 48), + }; + + const pre = document.createElement("pre"); + pre.innerText = JSON.stringify(features, null, 2); + pontos.innerHTML = ""; + pontos.appendChild(pre); + + for (const eye of [features.olhoEsquerdo, features.olhoDireito]) { + const eyeBox = getBoxFromPoints(eye); + const fontSize = 20; + const context = canvas.getContext("2d"); + context.lineWidth = 2; + context.beginPath() + let rect = canvas.getBoundingClientRect(); + let pontoFocal = { + x: eyeBox.center.x + rect.left, + y: eyeBox.center.y + rect.top + }; + const botaoSobOlhar = verificarBotaoSobOlhar(pontoFocal); + + if (botaoSobOlhar) { + piscar(); + context.fillStyle = "rgba(0, 255, 0, 0.5)"; // Verde + context.strokeStyle = "#00FF00"; // Verde + if (botaoSelecionado !== botaoSobOlhar) { + //removeOverlayElement(eyeOverlay); + botaoSelecionado = botaoSobOlhar; + tempoInicial = new Date().getTime(); + // } else if (new Date().getTime() - tempoInicial > tempoDeSelecao) { + // console.log('Botão selecionado:', botaoSelecionado.id); + // alert(botaoSelecionado.id) + + } + } + else { + context.fillStyle = "rgba(20, 30, 22, 0.5)"; // Sua cor original + context.strokeStyle = "#FF0000"; // Vermelho + } + + context.strokeRect(eyeBox.center.x-10, eyeBox.center.y-10, 30, 20); + context.fillRect(eyeBox.center.x-10, eyeBox.center.y-10, 30, 20); + context.arc(eyeBox.center.x, eyeBox.center.y, 4, 0, 2 * Math.PI); + context.fill(); + context.closePath(); + + } + } +}, 500) +} else { + clearInterval(extractPointsInterval); +} +}); diff --git a/js/scripts.js b/js/scripts.js new file mode 100644 index 0000000000000000000000000000000000000000..aca6a640830d83e12d4ea2069342f5237c3b1db9 --- /dev/null +++ b/js/scripts.js @@ -0,0 +1,30 @@ +const links = document.querySelectorAll("nav a"); +const sections = document.querySelectorAll("section"); + +links.forEach(link => { + link.addEventListener("click", function(event) { + event.preventDefault(); + const href = this.getAttribute("href"); + const section = document.querySelector(href); + sections.forEach(section => { + section.classList.remove("active"); + }); + section.classList.add("active"); + links.forEach(link => { + link.classList.remove("active"); + }); + this.classList.add("active"); + }); +}); + + + + + document.querySelector("#compara-imagens-menu").addEventListener("click", function() { + document.querySelector("#compara-imagens").style.display = "block"; + document.querySelector("#detectar-emocoes").style.display = "none"; + }); + document.querySelector("#detectar-emocoes-menu").addEventListener("click", function() { + document.querySelector("#compara-imagens").style.display = "none"; + document.querySelector("#detectar-emocoes").style.display = "block"; + }); \ No newline at end of file diff --git a/models/age_gender_model-shard1 b/models/age_gender_model-shard1 new file mode 100644 index 0000000000000000000000000000000000000000..d942d6ad136534941aa2f043767e18c3613fa23d Binary files /dev/null and b/models/age_gender_model-shard1 differ diff --git a/models/age_gender_model-weights_manifest.json b/models/age_gender_model-weights_manifest.json new file mode 100644 index 0000000000000000000000000000000000000000..ebc009ab84d94c0d06a6f94bbe7c446153658f3c --- /dev/null +++ b/models/age_gender_model-weights_manifest.json @@ -0,0 +1 @@ +[{"weights":[{"name":"entry_flow/conv_in/filters","shape":[3,3,3,32],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.005431825039433498,"min":-0.7441600304023892}},{"name":"entry_flow/conv_in/bias","shape":[32],"dtype":"float32"},{"name":"entry_flow/reduction_block_0/separable_conv0/depthwise_filter","shape":[3,3,32,1],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.005691980614381678,"min":-0.6090419257388395}},{"name":"entry_flow/reduction_block_0/separable_conv0/pointwise_filter","shape":[1,1,32,64],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.009089225881239947,"min":-1.1179747833925135}},{"name":"entry_flow/reduction_block_0/separable_conv0/bias","shape":[64],"dtype":"float32"},{"name":"entry_flow/reduction_block_0/separable_conv1/depthwise_filter","shape":[3,3,64,1],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.00683894624897078,"min":-0.8138346036275228}},{"name":"entry_flow/reduction_block_0/separable_conv1/pointwise_filter","shape":[1,1,64,64],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.011632566358528886,"min":-1.3028474321552352}},{"name":"entry_flow/reduction_block_0/separable_conv1/bias","shape":[64],"dtype":"float32"},{"name":"entry_flow/reduction_block_0/expansion_conv/filters","shape":[1,1,32,64],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.010254812240600587,"min":-0.9229331016540528}},{"name":"entry_flow/reduction_block_0/expansion_conv/bias","shape":[64],"dtype":"float32"},{"name":"entry_flow/reduction_block_1/separable_conv0/depthwise_filter","shape":[3,3,64,1],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.0052509616403018725,"min":-0.6406173201168285}},{"name":"entry_flow/reduction_block_1/separable_conv0/pointwise_filter","shape":[1,1,64,128],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.010788509424994973,"min":-1.4564487723743214}},{"name":"entry_flow/reduction_block_1/separable_conv0/bias","shape":[128],"dtype":"float32"},{"name":"entry_flow/reduction_block_1/separable_conv1/depthwise_filter","shape":[3,3,128,1],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.00553213918910307,"min":-0.7025816770160899}},{"name":"entry_flow/reduction_block_1/separable_conv1/pointwise_filter","shape":[1,1,128,128],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.013602388606351965,"min":-1.6186842441558837}},{"name":"entry_flow/reduction_block_1/separable_conv1/bias","shape":[128],"dtype":"float32"},{"name":"entry_flow/reduction_block_1/expansion_conv/filters","shape":[1,1,64,128],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.007571851038465313,"min":-1.158493208885193}},{"name":"entry_flow/reduction_block_1/expansion_conv/bias","shape":[128],"dtype":"float32"},{"name":"middle_flow/main_block_0/separable_conv0/depthwise_filter","shape":[3,3,128,1],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.005766328409606335,"min":-0.6688940955143349}},{"name":"middle_flow/main_block_0/separable_conv0/pointwise_filter","shape":[1,1,128,128],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.012136116214826995,"min":-1.5776951079275094}},{"name":"middle_flow/main_block_0/separable_conv0/bias","shape":[128],"dtype":"float32"},{"name":"middle_flow/main_block_0/separable_conv1/depthwise_filter","shape":[3,3,128,1],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.004314773222979377,"min":-0.5652352922102984}},{"name":"middle_flow/main_block_0/separable_conv1/pointwise_filter","shape":[1,1,128,128],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.01107162026798024,"min":-1.2400214700137868}},{"name":"middle_flow/main_block_0/separable_conv1/bias","shape":[128],"dtype":"float32"},{"name":"middle_flow/main_block_0/separable_conv2/depthwise_filter","shape":[3,3,128,1],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.0036451735917259667,"min":-0.4848080876995536}},{"name":"middle_flow/main_block_0/separable_conv2/pointwise_filter","shape":[1,1,128,128],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.008791744942758598,"min":-1.134135097615859}},{"name":"middle_flow/main_block_0/separable_conv2/bias","shape":[128],"dtype":"float32"},{"name":"middle_flow/main_block_1/separable_conv0/depthwise_filter","shape":[3,3,128,1],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.004915751896652521,"min":-0.6095532351849126}},{"name":"middle_flow/main_block_1/separable_conv0/pointwise_filter","shape":[1,1,128,128],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.010868691463096469,"min":-1.3368490499608656}},{"name":"middle_flow/main_block_1/separable_conv0/bias","shape":[128],"dtype":"float32"},{"name":"middle_flow/main_block_1/separable_conv1/depthwise_filter","shape":[3,3,128,1],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.005010117269029804,"min":-0.6012140722835765}},{"name":"middle_flow/main_block_1/separable_conv1/pointwise_filter","shape":[1,1,128,128],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.010311148213405235,"min":-1.3816938605963016}},{"name":"middle_flow/main_block_1/separable_conv1/bias","shape":[128],"dtype":"float32"},{"name":"middle_flow/main_block_1/separable_conv2/depthwise_filter","shape":[3,3,128,1],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.004911523706772748,"min":-0.7367285560159123}},{"name":"middle_flow/main_block_1/separable_conv2/pointwise_filter","shape":[1,1,128,128],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.008976466047997568,"min":-1.2207993825276693}},{"name":"middle_flow/main_block_1/separable_conv2/bias","shape":[128],"dtype":"float32"},{"name":"exit_flow/reduction_block/separable_conv0/depthwise_filter","shape":[3,3,128,1],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.005074804436926748,"min":-0.7104726211697447}},{"name":"exit_flow/reduction_block/separable_conv0/pointwise_filter","shape":[1,1,128,256],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.011453078307357489,"min":-1.4545409450344011}},{"name":"exit_flow/reduction_block/separable_conv0/bias","shape":[256],"dtype":"float32"},{"name":"exit_flow/reduction_block/separable_conv1/depthwise_filter","shape":[3,3,256,1],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.007741751390344957,"min":-1.1380374543807086}},{"name":"exit_flow/reduction_block/separable_conv1/pointwise_filter","shape":[1,1,256,256],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.011347713189966538,"min":-1.497898141075583}},{"name":"exit_flow/reduction_block/separable_conv1/bias","shape":[256],"dtype":"float32"},{"name":"exit_flow/reduction_block/expansion_conv/filters","shape":[1,1,128,256],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.006717281014311547,"min":-0.8329428457746318}},{"name":"exit_flow/reduction_block/expansion_conv/bias","shape":[256],"dtype":"float32"},{"name":"exit_flow/separable_conv/depthwise_filter","shape":[3,3,256,1],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.0027201742518181892,"min":-0.3237007359663645}},{"name":"exit_flow/separable_conv/pointwise_filter","shape":[1,1,256,512],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.010076364348916447,"min":-1.330080094056971}},{"name":"exit_flow/separable_conv/bias","shape":[512],"dtype":"float32"},{"name":"fc/age/weights","shape":[512,1],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.008674054987290326,"min":-1.2664120281443876}},{"name":"fc/age/bias","shape":[1],"dtype":"float32"},{"name":"fc/gender/weights","shape":[512,2],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.0029948226377075793,"min":-0.34140978069866407}},{"name":"fc/gender/bias","shape":[2],"dtype":"float32"}],"paths":["age_gender_model-shard1"]}] \ No newline at end of file diff --git a/models/face_expression_model-shard1 b/models/face_expression_model-shard1 new file mode 100644 index 0000000000000000000000000000000000000000..619cdf6d46e8757999a250616782ddb3e25c6504 Binary files /dev/null and b/models/face_expression_model-shard1 differ diff --git a/models/face_expression_model-weights_manifest.json b/models/face_expression_model-weights_manifest.json new file mode 100644 index 0000000000000000000000000000000000000000..7b74b5ab4117c9cc306e566afc0a2639d35c5183 --- /dev/null +++ b/models/face_expression_model-weights_manifest.json @@ -0,0 +1 @@ +[{"weights":[{"name":"dense0/conv0/filters","shape":[3,3,3,32],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.0057930146946626555,"min":-0.7125408074435067}},{"name":"dense0/conv0/bias","shape":[32],"dtype":"float32"},{"name":"dense0/conv1/depthwise_filter","shape":[3,3,32,1],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.006473719839956246,"min":-0.6408982641556684}},{"name":"dense0/conv1/pointwise_filter","shape":[1,1,32,32],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.010509579321917366,"min":-1.408283629136927}},{"name":"dense0/conv1/bias","shape":[32],"dtype":"float32"},{"name":"dense0/conv2/depthwise_filter","shape":[3,3,32,1],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.005666389652326995,"min":-0.7252978754978554}},{"name":"dense0/conv2/pointwise_filter","shape":[1,1,32,32],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.010316079270605948,"min":-1.1760330368490781}},{"name":"dense0/conv2/bias","shape":[32],"dtype":"float32"},{"name":"dense0/conv3/depthwise_filter","shape":[3,3,32,1],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.0063220320963392074,"min":-0.853474333005793}},{"name":"dense0/conv3/pointwise_filter","shape":[1,1,32,32],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.010322785377502442,"min":-1.4658355236053466}},{"name":"dense0/conv3/bias","shape":[32],"dtype":"float32"},{"name":"dense1/conv0/depthwise_filter","shape":[3,3,32,1],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.0042531527724920535,"min":-0.5741756242864272}},{"name":"dense1/conv0/pointwise_filter","shape":[1,1,32,64],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.010653339647779278,"min":-1.1825207009035}},{"name":"dense1/conv0/bias","shape":[64],"dtype":"float32"},{"name":"dense1/conv1/depthwise_filter","shape":[3,3,64,1],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.005166931012097527,"min":-0.6355325144879957}},{"name":"dense1/conv1/pointwise_filter","shape":[1,1,64,64],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.011478300188101974,"min":-1.3888743227603388}},{"name":"dense1/conv1/bias","shape":[64],"dtype":"float32"},{"name":"dense1/conv2/depthwise_filter","shape":[3,3,64,1],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.006144821410085641,"min":-0.8479853545918185}},{"name":"dense1/conv2/pointwise_filter","shape":[1,1,64,64],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.010541967317169788,"min":-1.3809977185492421}},{"name":"dense1/conv2/bias","shape":[64],"dtype":"float32"},{"name":"dense1/conv3/depthwise_filter","shape":[3,3,64,1],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.005769844849904378,"min":-0.686611537138621}},{"name":"dense1/conv3/pointwise_filter","shape":[1,1,64,64],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.010939095534530341,"min":-1.2689350820055196}},{"name":"dense1/conv3/bias","shape":[64],"dtype":"float32"},{"name":"dense2/conv0/depthwise_filter","shape":[3,3,64,1],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.0037769308277204924,"min":-0.40790852939381317}},{"name":"dense2/conv0/pointwise_filter","shape":[1,1,64,128],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.01188667194516051,"min":-1.4382873053644218}},{"name":"dense2/conv0/bias","shape":[128],"dtype":"float32"},{"name":"dense2/conv1/depthwise_filter","shape":[3,3,128,1],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.006497045825509464,"min":-0.8381189114907208}},{"name":"dense2/conv1/pointwise_filter","shape":[1,1,128,128],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.011632198913424622,"min":-1.3377028750438316}},{"name":"dense2/conv1/bias","shape":[128],"dtype":"float32"},{"name":"dense2/conv2/depthwise_filter","shape":[3,3,128,1],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.005947182225246056,"min":-0.7969224181829715}},{"name":"dense2/conv2/pointwise_filter","shape":[1,1,128,128],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.011436844339557722,"min":-1.4524792311238306}},{"name":"dense2/conv2/bias","shape":[128],"dtype":"float32"},{"name":"dense2/conv3/depthwise_filter","shape":[3,3,128,1],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.006665432686899222,"min":-0.8998334127313949}},{"name":"dense2/conv3/pointwise_filter","shape":[1,1,128,128],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.01283421422920975,"min":-1.642779421338848}},{"name":"dense2/conv3/bias","shape":[128],"dtype":"float32"},{"name":"dense3/conv0/depthwise_filter","shape":[3,3,128,1],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.004711699953266218,"min":-0.6737730933170692}},{"name":"dense3/conv0/pointwise_filter","shape":[1,1,128,256],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.010955964817720302,"min":-1.3914075318504784}},{"name":"dense3/conv0/bias","shape":[256],"dtype":"float32"},{"name":"dense3/conv1/depthwise_filter","shape":[3,3,256,1],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.00554193468654857,"min":-0.7149095745647656}},{"name":"dense3/conv1/pointwise_filter","shape":[1,1,256,256],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.016790372250126858,"min":-2.484975093018775}},{"name":"dense3/conv1/bias","shape":[256],"dtype":"float32"},{"name":"dense3/conv2/depthwise_filter","shape":[3,3,256,1],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.006361540626077091,"min":-0.8142772001378676}},{"name":"dense3/conv2/pointwise_filter","shape":[1,1,256,256],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.01777329678628959,"min":-1.7062364914838006}},{"name":"dense3/conv2/bias","shape":[256],"dtype":"float32"},{"name":"dense3/conv3/depthwise_filter","shape":[3,3,256,1],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.006900275922289082,"min":-0.8625344902861353}},{"name":"dense3/conv3/pointwise_filter","shape":[1,1,256,256],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.015449936717164282,"min":-1.9003422162112067}},{"name":"dense3/conv3/bias","shape":[256],"dtype":"float32"},{"name":"fc/weights","shape":[256,7],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.004834276554631252,"min":-0.7203072066400565}},{"name":"fc/bias","shape":[7],"dtype":"float32"}],"paths":["face_expression_model-shard1"]}] \ No newline at end of file diff --git a/models/face_landmark_68_model-shard1 b/models/face_landmark_68_model-shard1 new file mode 100644 index 0000000000000000000000000000000000000000..fcaca474f001923870e24940a926d9f01b4ac9e9 Binary files /dev/null and b/models/face_landmark_68_model-shard1 differ diff --git a/models/face_landmark_68_model-weights_manifest.json b/models/face_landmark_68_model-weights_manifest.json new file mode 100644 index 0000000000000000000000000000000000000000..0fe27075f26c5ca65afa82254f01d85ff4fd6511 --- /dev/null +++ b/models/face_landmark_68_model-weights_manifest.json @@ -0,0 +1 @@ +[{"weights":[{"name":"dense0/conv0/filters","shape":[3,3,3,32],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.004853619781194949,"min":-0.5872879935245888}},{"name":"dense0/conv0/bias","shape":[32],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.004396426443960153,"min":-0.7298067896973853}},{"name":"dense0/conv1/depthwise_filter","shape":[3,3,32,1],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.00635151559231328,"min":-0.5589333721235686}},{"name":"dense0/conv1/pointwise_filter","shape":[1,1,32,32],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.009354315552057004,"min":-1.2628325995276957}},{"name":"dense0/conv1/bias","shape":[32],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.0029380727048013726,"min":-0.5846764682554731}},{"name":"dense0/conv2/depthwise_filter","shape":[3,3,32,1],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.0049374802439820535,"min":-0.6171850304977566}},{"name":"dense0/conv2/pointwise_filter","shape":[1,1,32,32],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.009941946758943446,"min":-1.3421628124573652}},{"name":"dense0/conv2/bias","shape":[32],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.0030300481062309416,"min":-0.5272283704841838}},{"name":"dense0/conv3/depthwise_filter","shape":[3,3,32,1],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.005672684837790097,"min":-0.7431217137505026}},{"name":"dense0/conv3/pointwise_filter","shape":[1,1,32,32],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.010712201455060173,"min":-1.5639814124387852}},{"name":"dense0/conv3/bias","shape":[32],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.0030966934035806097,"min":-0.3839899820439956}},{"name":"dense1/conv0/depthwise_filter","shape":[3,3,32,1],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.0039155554537679636,"min":-0.48161332081345953}},{"name":"dense1/conv0/pointwise_filter","shape":[1,1,32,64],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.01023082966898002,"min":-1.094698774580862}},{"name":"dense1/conv0/bias","shape":[64],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.0027264176630506327,"min":-0.3871513081531898}},{"name":"dense1/conv1/depthwise_filter","shape":[3,3,64,1],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.004583378632863362,"min":-0.5454220573107401}},{"name":"dense1/conv1/pointwise_filter","shape":[1,1,64,64],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.00915846403907327,"min":-1.117332612766939}},{"name":"dense1/conv1/bias","shape":[64],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.003091680419211294,"min":-0.5966943209077797}},{"name":"dense1/conv2/depthwise_filter","shape":[3,3,64,1],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.005407439727409214,"min":-0.708374604290607}},{"name":"dense1/conv2/pointwise_filter","shape":[1,1,64,64],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.00946493943532308,"min":-1.2399070660273235}},{"name":"dense1/conv2/bias","shape":[64],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.004409168514550901,"min":-0.9788354102303}},{"name":"dense1/conv3/depthwise_filter","shape":[3,3,64,1],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.004478132958505668,"min":-0.6493292789833219}},{"name":"dense1/conv3/pointwise_filter","shape":[1,1,64,64],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.011063695888893277,"min":-1.2501976354449402}},{"name":"dense1/conv3/bias","shape":[64],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.003909627596537272,"min":-0.6646366914113363}},{"name":"dense2/conv0/depthwise_filter","shape":[3,3,64,1],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.003213915404151468,"min":-0.3374611174359041}},{"name":"dense2/conv0/pointwise_filter","shape":[1,1,64,128],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.010917326048308728,"min":-1.4520043644250609}},{"name":"dense2/conv0/bias","shape":[128],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.002800439152063108,"min":-0.38085972468058266}},{"name":"dense2/conv1/depthwise_filter","shape":[3,3,128,1],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.0050568851770139206,"min":-0.6927932692509071}},{"name":"dense2/conv1/pointwise_filter","shape":[1,1,128,128],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.01074961213504567,"min":-1.3222022926106174}},{"name":"dense2/conv1/bias","shape":[128],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.0030654204242369708,"min":-0.5487102559384177}},{"name":"dense2/conv2/depthwise_filter","shape":[3,3,128,1],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.00591809165244009,"min":-0.917304206128214}},{"name":"dense2/conv2/pointwise_filter","shape":[1,1,128,128],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.01092823346455892,"min":-1.366029183069865}},{"name":"dense2/conv2/bias","shape":[128],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.002681120470458386,"min":-0.36463238398234055}},{"name":"dense2/conv3/depthwise_filter","shape":[3,3,128,1],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.0048311497650894465,"min":-0.5797379718107336}},{"name":"dense2/conv3/pointwise_filter","shape":[1,1,128,128],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.011227761062921263,"min":-1.4483811771168429}},{"name":"dense2/conv3/bias","shape":[128],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.0034643323982463162,"min":-0.3360402426298927}},{"name":"dense3/conv0/depthwise_filter","shape":[3,3,128,1],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.003394978887894574,"min":-0.49227193874471326}},{"name":"dense3/conv0/pointwise_filter","shape":[1,1,128,256],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.010051267287310432,"min":-1.2765109454884247}},{"name":"dense3/conv0/bias","shape":[256],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.003142924752889895,"min":-0.4588670139219247}},{"name":"dense3/conv1/depthwise_filter","shape":[3,3,256,1],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.00448304671867221,"min":-0.5872791201460595}},{"name":"dense3/conv1/pointwise_filter","shape":[1,1,256,256],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.016063522357566685,"min":-2.3613377865623026}},{"name":"dense3/conv1/bias","shape":[256],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.00287135781026354,"min":-0.47664539650374765}},{"name":"dense3/conv2/depthwise_filter","shape":[3,3,256,1],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.006002906724518421,"min":-0.7923836876364315}},{"name":"dense3/conv2/pointwise_filter","shape":[1,1,256,256],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.017087187019048954,"min":-1.6061955797906016}},{"name":"dense3/conv2/bias","shape":[256],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.003124481205846749,"min":-0.46242321846531886}},{"name":"dense3/conv3/depthwise_filter","shape":[3,3,256,1],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.006576311588287353,"min":-1.0193282961845398}},{"name":"dense3/conv3/pointwise_filter","shape":[1,1,256,256],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.015590153955945782,"min":-1.99553970636106}},{"name":"dense3/conv3/bias","shape":[256],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.004453541601405424,"min":-0.6546706154065973}},{"name":"fc/weights","shape":[256,136],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.010417488509533453,"min":-1.500118345372817}},{"name":"fc/bias","shape":[136],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.0025084222648658005,"min":0.07683877646923065}}],"paths":["face_landmark_68_model-shard1"]}] \ No newline at end of file diff --git a/models/face_landmark_68_tiny_model-shard1 b/models/face_landmark_68_tiny_model-shard1 new file mode 100644 index 0000000000000000000000000000000000000000..f04a9d5ecd26eb59062ea72c6617a955af22cc5c Binary files /dev/null and b/models/face_landmark_68_tiny_model-shard1 differ diff --git a/models/face_landmark_68_tiny_model-weights_manifest.json b/models/face_landmark_68_tiny_model-weights_manifest.json new file mode 100644 index 0000000000000000000000000000000000000000..5dc790e48fd770a98d9c2c5b445e035a261c0d25 --- /dev/null +++ b/models/face_landmark_68_tiny_model-weights_manifest.json @@ -0,0 +1 @@ +[{"weights":[{"name":"dense0/conv0/filters","shape":[3,3,3,32],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.008194216092427571,"min":-0.9423348506291708}},{"name":"dense0/conv0/bias","shape":[32],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.006839508168837603,"min":-0.8412595047670252}},{"name":"dense0/conv1/depthwise_filter","shape":[3,3,32,1],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.009194007106855804,"min":-1.2779669878529567}},{"name":"dense0/conv1/pointwise_filter","shape":[1,1,32,32],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.0036026100317637128,"min":-0.3170296827952067}},{"name":"dense0/conv1/bias","shape":[32],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.000740380117706224,"min":-0.06367269012273527}},{"name":"dense0/conv2/depthwise_filter","shape":[3,3,32,1],"dtype":"float32","quantization":{"dtype":"uint8","scale":1,"min":0}},{"name":"dense0/conv2/pointwise_filter","shape":[1,1,32,32],"dtype":"float32","quantization":{"dtype":"uint8","scale":1,"min":0}},{"name":"dense0/conv2/bias","shape":[32],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.0037702228508743585,"min":-0.6220867703942692}},{"name":"dense1/conv0/depthwise_filter","shape":[3,3,32,1],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.0033707996209462483,"min":-0.421349952618281}},{"name":"dense1/conv0/pointwise_filter","shape":[1,1,32,64],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.014611541991140328,"min":-1.8556658328748217}},{"name":"dense1/conv0/bias","shape":[64],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.002832523046755323,"min":-0.30307996600281956}},{"name":"dense1/conv1/depthwise_filter","shape":[3,3,64,1],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.006593170586754294,"min":-0.6329443763284123}},{"name":"dense1/conv1/pointwise_filter","shape":[1,1,64,64],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.012215249211180444,"min":-1.6001976466646382}},{"name":"dense1/conv1/bias","shape":[64],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.002384825547536214,"min":-0.3028728445370992}},{"name":"dense1/conv2/depthwise_filter","shape":[3,3,64,1],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.005859645441466687,"min":-0.7617539073906693}},{"name":"dense1/conv2/pointwise_filter","shape":[1,1,64,64],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.013121426806730382,"min":-1.7845140457153321}},{"name":"dense1/conv2/bias","shape":[64],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.0032247188044529336,"min":-0.46435950784122243}},{"name":"dense2/conv0/depthwise_filter","shape":[3,3,64,1],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.002659512618008782,"min":-0.32977956463308894}},{"name":"dense2/conv0/pointwise_filter","shape":[1,1,64,128],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.015499923743453681,"min":-1.9839902391620712}},{"name":"dense2/conv0/bias","shape":[128],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.0032450980999890497,"min":-0.522460794098237}},{"name":"dense2/conv1/depthwise_filter","shape":[3,3,128,1],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.005911862382701799,"min":-0.792189559282041}},{"name":"dense2/conv1/pointwise_filter","shape":[1,1,128,128],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.021025861478319356,"min":-2.2077154552235325}},{"name":"dense2/conv1/bias","shape":[128],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.00349616945958605,"min":-0.46149436866535865}},{"name":"dense2/conv2/depthwise_filter","shape":[3,3,128,1],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.008104994250278847,"min":-1.013124281284856}},{"name":"dense2/conv2/pointwise_filter","shape":[1,1,128,128],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.029337059282789044,"min":-3.5791212325002633}},{"name":"dense2/conv2/bias","shape":[128],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.0038808938334969913,"min":-0.4230174278511721}},{"name":"fc/weights","shape":[128,136],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.014016061670639936,"min":-1.8921683255363912}},{"name":"fc/bias","shape":[136],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.0029505149698724935,"min":0.088760145008564}}],"paths":["face_landmark_68_tiny_model-shard1"]}] \ No newline at end of file diff --git a/models/face_recognition_model-shard1 b/models/face_recognition_model-shard1 new file mode 100644 index 0000000000000000000000000000000000000000..506ab81da05114f26a201d6894010785ef59345b --- /dev/null +++ b/models/face_recognition_model-shard1 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:412566a2b8d814d84c60b8055ec5d3b3b2328ef7cd7853384e03ec3db7b053d8 +size 4194304 diff --git a/models/face_recognition_model-shard2 b/models/face_recognition_model-shard2 new file mode 100644 index 0000000000000000000000000000000000000000..cee94b750ec18b618b0228b80f548f0579aa31ac --- /dev/null +++ b/models/face_recognition_model-shard2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:69350fdecd845c532e44dd8f7d0521c773505ef46b87cc34f46640a0cc334ecc +size 2249728 diff --git a/models/face_recognition_model-weights_manifest.json b/models/face_recognition_model-weights_manifest.json new file mode 100644 index 0000000000000000000000000000000000000000..554d3e4e2119a9c1861f5a093ef0a3aa510d5bd8 --- /dev/null +++ b/models/face_recognition_model-weights_manifest.json @@ -0,0 +1 @@ +[{"weights":[{"name":"conv32_down/conv/filters","shape":[7,7,3,32],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.0005260649557207145,"min":-0.07101876902229645}},{"name":"conv32_down/conv/bias","shape":[32],"dtype":"float32","quantization":{"dtype":"uint8","scale":8.471445956577858e-7,"min":-0.00014740315964445472}},{"name":"conv32_down/scale/weights","shape":[32],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.06814416062598135,"min":5.788674831390381}},{"name":"conv32_down/scale/biases","shape":[32],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.008471635042452345,"min":-0.931879854669758}},{"name":"conv32_1/conv1/conv/filters","shape":[3,3,32,32],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.0007328585666768691,"min":-0.0974701893680236}},{"name":"conv32_1/conv1/conv/bias","shape":[32],"dtype":"float32","quantization":{"dtype":"uint8","scale":1.5952091238361e-8,"min":-0.000001978059313556764}},{"name":"conv32_1/conv1/scale/weights","shape":[32],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.02146628510718252,"min":3.1103382110595703}},{"name":"conv32_1/conv1/scale/biases","shape":[32],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.0194976619645661,"min":-2.3787147596770644}},{"name":"conv32_1/conv2/conv/filters","shape":[3,3,32,32],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.0004114975824075587,"min":-0.05267169054816751}},{"name":"conv32_1/conv2/conv/bias","shape":[32],"dtype":"float32","quantization":{"dtype":"uint8","scale":4.600177166424806e-9,"min":-5.70421968636676e-7}},{"name":"conv32_1/conv2/scale/weights","shape":[32],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.03400764932819441,"min":2.1677730083465576}},{"name":"conv32_1/conv2/scale/biases","shape":[32],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.010974494616190593,"min":-1.240117891629537}},{"name":"conv32_2/conv1/conv/filters","shape":[3,3,32,32],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.0005358753251094444,"min":-0.0760942961655411}},{"name":"conv32_2/conv1/conv/bias","shape":[32],"dtype":"float32","quantization":{"dtype":"uint8","scale":5.9886454383719385e-9,"min":-7.366033889197485e-7}},{"name":"conv32_2/conv1/scale/weights","shape":[32],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.014633869657329485,"min":2.769575357437134}},{"name":"conv32_2/conv1/scale/biases","shape":[32],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.022131107367721257,"min":-2.5229462399202234}},{"name":"conv32_2/conv2/conv/filters","shape":[3,3,32,32],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.00030145110452876373,"min":-0.03949009469326805}},{"name":"conv32_2/conv2/conv/bias","shape":[32],"dtype":"float32","quantization":{"dtype":"uint8","scale":6.8779549306497095e-9,"min":-9.010120959151119e-7}},{"name":"conv32_2/conv2/scale/weights","shape":[32],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.03929369870354148,"min":4.8010945320129395}},{"name":"conv32_2/conv2/scale/biases","shape":[32],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.010553357180427103,"min":-1.2452961472903983}},{"name":"conv32_3/conv1/conv/filters","shape":[3,3,32,32],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.0003133527642371608,"min":-0.040735859350830905}},{"name":"conv32_3/conv1/conv/bias","shape":[32],"dtype":"float32","quantization":{"dtype":"uint8","scale":4.1064200719547974e-9,"min":-3.0387508532465503e-7}},{"name":"conv32_3/conv1/scale/weights","shape":[32],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.009252088210161994,"min":2.333256721496582}},{"name":"conv32_3/conv1/scale/biases","shape":[32],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.007104101251153385,"min":-0.34810096130651585}},{"name":"conv32_3/conv2/conv/filters","shape":[3,3,32,32],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.00029995629892629733,"min":-0.031195455088334923}},{"name":"conv32_3/conv2/conv/bias","shape":[32],"dtype":"float32","quantization":{"dtype":"uint8","scale":5.62726418316814e-9,"min":-6.921534945296811e-7}},{"name":"conv32_3/conv2/scale/weights","shape":[32],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.0467432975769043,"min":5.362040996551514}},{"name":"conv32_3/conv2/scale/biases","shape":[32],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.010314425300149357,"min":-1.268674311918371}},{"name":"conv64_down/conv1/conv/filters","shape":[3,3,32,64],"dtype":"float32"},{"name":"conv64_down/conv1/conv/bias","shape":[64],"dtype":"float32","quantization":{"dtype":"uint8","scale":8.373908033218849e-10,"min":-1.172347124650639e-7}},{"name":"conv64_down/conv1/scale/weights","shape":[64],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.0066875364266189875,"min":2.5088400840759277}},{"name":"conv64_down/conv1/scale/biases","shape":[64],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.01691421620986041,"min":-2.0973628100226906}},{"name":"conv64_down/conv2/conv/filters","shape":[3,3,64,64],"dtype":"float32"},{"name":"conv64_down/conv2/conv/bias","shape":[64],"dtype":"float32","quantization":{"dtype":"uint8","scale":2.3252014483766877e-9,"min":-2.673981665633191e-7}},{"name":"conv64_down/conv2/scale/weights","shape":[64],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.032557439804077146,"min":2.6351239681243896}},{"name":"conv64_down/conv2/scale/biases","shape":[64],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.015429047509735706,"min":-1.5429047509735707}},{"name":"conv64_1/conv1/conv/filters","shape":[3,3,64,64],"dtype":"float32"},{"name":"conv64_1/conv1/conv/bias","shape":[64],"dtype":"float32","quantization":{"dtype":"uint8","scale":1.1319172039756998e-9,"min":-1.4941307092479238e-7}},{"name":"conv64_1/conv1/scale/weights","shape":[64],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.007802607031429515,"min":3.401733160018921}},{"name":"conv64_1/conv1/scale/biases","shape":[64],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.01425027146058924,"min":-0.6982633015688727}},{"name":"conv64_1/conv2/conv/filters","shape":[3,3,64,64],"dtype":"float32"},{"name":"conv64_1/conv2/conv/bias","shape":[64],"dtype":"float32","quantization":{"dtype":"uint8","scale":2.5635019893325435e-9,"min":-2.717312108692496e-7}},{"name":"conv64_1/conv2/scale/weights","shape":[64],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.04062801716374416,"min":3.542381525039673}},{"name":"conv64_1/conv2/scale/biases","shape":[64],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.007973166306813557,"min":-0.7415044665336609}},{"name":"conv64_2/conv1/conv/filters","shape":[3,3,64,64],"dtype":"float32"},{"name":"conv64_2/conv1/conv/bias","shape":[64],"dtype":"float32","quantization":{"dtype":"uint8","scale":1.2535732661062331e-9,"min":-1.8302169685151004e-7}},{"name":"conv64_2/conv1/scale/weights","shape":[64],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.005631206549850164,"min":2.9051668643951416}},{"name":"conv64_2/conv1/scale/biases","shape":[64],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.01859012585060269,"min":-2.3795361088771445}},{"name":"conv64_2/conv2/conv/filters","shape":[3,3,64,64],"dtype":"float32"},{"name":"conv64_2/conv2/conv/bias","shape":[64],"dtype":"float32","quantization":{"dtype":"uint8","scale":2.486726369919351e-9,"min":-3.5311514452854786e-7}},{"name":"conv64_2/conv2/scale/weights","shape":[64],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.03740917467603497,"min":5.571568965911865}},{"name":"conv64_2/conv2/scale/biases","shape":[64],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.006418555858088475,"min":-0.5263215803632549}},{"name":"conv64_3/conv1/conv/filters","shape":[3,3,64,64],"dtype":"float32"},{"name":"conv64_3/conv1/conv/bias","shape":[64],"dtype":"float32","quantization":{"dtype":"uint8","scale":7.432564576875473e-10,"min":-8.47312361763804e-8}},{"name":"conv64_3/conv1/scale/weights","shape":[64],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.006400122362024644,"min":2.268010377883911}},{"name":"conv64_3/conv1/scale/biases","shape":[64],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.010945847922680425,"min":-1.3353934465670119}},{"name":"conv64_3/conv2/conv/filters","shape":[3,3,64,64],"dtype":"float32"},{"name":"conv64_3/conv2/conv/bias","shape":[64],"dtype":"float32","quantization":{"dtype":"uint8","scale":2.278228722014533e-9,"min":-3.212302498040492e-7}},{"name":"conv64_3/conv2/scale/weights","shape":[64],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.029840927498013366,"min":7.038398265838623}},{"name":"conv64_3/conv2/scale/biases","shape":[64],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.010651412197187834,"min":-1.161003929493474}},{"name":"conv128_down/conv1/conv/filters","shape":[3,3,64,128],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.00020040544662989823,"min":-0.022245004575918704}},{"name":"conv128_down/conv1/conv/bias","shape":[128],"dtype":"float32","quantization":{"dtype":"uint8","scale":4.3550543563576545e-10,"min":-4.311503812794078e-8}},{"name":"conv128_down/conv1/scale/weights","shape":[128],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.007448580685783835,"min":2.830846071243286}},{"name":"conv128_down/conv1/scale/biases","shape":[128],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.01211262824488621,"min":-1.6957679542840696}},{"name":"conv128_down/conv2/conv/filters","shape":[3,3,128,128],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.00022380277514457702,"min":-0.02484210804104805}},{"name":"conv128_down/conv2/conv/bias","shape":[128],"dtype":"float32","quantization":{"dtype":"uint8","scale":9.031058637304466e-10,"min":-1.1650065642122761e-7}},{"name":"conv128_down/conv2/scale/weights","shape":[128],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.027663578706629135,"min":3.1111555099487305}},{"name":"conv128_down/conv2/scale/biases","shape":[128],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.008878476946961646,"min":-1.029903325847551}},{"name":"conv128_1/conv1/conv/filters","shape":[3,3,128,128],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.00022380667574265425,"min":-0.032899581334170175}},{"name":"conv128_1/conv1/conv/bias","shape":[128],"dtype":"float32","quantization":{"dtype":"uint8","scale":4.4147297756478345e-10,"min":-5.253528433020923e-8}},{"name":"conv128_1/conv1/scale/weights","shape":[128],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.013599334978589825,"min":3.634530782699585}},{"name":"conv128_1/conv1/scale/biases","shape":[128],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.014059314073300829,"min":-1.4059314073300828}},{"name":"conv128_1/conv2/conv/filters","shape":[3,3,128,128],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.00021715293474057143,"min":-0.02909849325523657}},{"name":"conv128_1/conv2/conv/bias","shape":[128],"dtype":"float32","quantization":{"dtype":"uint8","scale":9.887046963276768e-10,"min":-1.1370104007768284e-7}},{"name":"conv128_1/conv2/scale/weights","shape":[128],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.029993299409454943,"min":3.630716562271118}},{"name":"conv128_1/conv2/scale/biases","shape":[128],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.00782704236460667,"min":-0.7200878975438136}},{"name":"conv128_2/conv1/conv/filters","shape":[3,3,128,128],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.00017718105923895743,"min":-0.022324813464108636}},{"name":"conv128_2/conv1/conv/bias","shape":[128],"dtype":"float32","quantization":{"dtype":"uint8","scale":3.567012027797675e-10,"min":-5.243507680862582e-8}},{"name":"conv128_2/conv1/scale/weights","shape":[128],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.007940645778880399,"min":4.927767753601074}},{"name":"conv128_2/conv1/scale/biases","shape":[128],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.015933452867994122,"min":-1.5614783810634238}},{"name":"conv128_2/conv2/conv/filters","shape":[3,3,128,128],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.0001451439717236687,"min":-0.01712698866339291}},{"name":"conv128_2/conv2/conv/bias","shape":[128],"dtype":"float32","quantization":{"dtype":"uint8","scale":1.0383988570966347e-9,"min":-1.2356946399449953e-7}},{"name":"conv128_2/conv2/scale/weights","shape":[128],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.02892604528688917,"min":4.750600814819336}},{"name":"conv128_2/conv2/scale/biases","shape":[128],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.00797275748907351,"min":-0.7414664464838364}},{"name":"conv256_down/conv1/conv/filters","shape":[3,3,128,256],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.0002698827827093648,"min":-0.03994265184098599}},{"name":"conv256_down/conv1/conv/bias","shape":[256],"dtype":"float32","quantization":{"dtype":"uint8","scale":5.036909834755123e-10,"min":-6.396875490139006e-8}},{"name":"conv256_down/conv1/scale/weights","shape":[256],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.014870181738161573,"min":4.269900798797607}},{"name":"conv256_down/conv1/scale/biases","shape":[256],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.022031106200872685,"min":-3.1063859743230484}},{"name":"conv256_down/conv2/conv/filters","shape":[3,3,256,256],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.00046430734150549946,"min":-0.03946612402796745}},{"name":"conv256_down/conv2/conv/bias","shape":[256],"dtype":"float32","quantization":{"dtype":"uint8","scale":6.693064577513153e-10,"min":-7.630093618364995e-8}},{"name":"conv256_down/conv2/scale/weights","shape":[256],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.03475512242784687,"min":3.608360528945923}},{"name":"conv256_down/conv2/scale/biases","shape":[256],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.01290142021927179,"min":-1.1482263995151893}},{"name":"conv256_1/conv1/conv/filters","shape":[3,3,256,256],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.00037147209924810076,"min":-0.04234781931428348}},{"name":"conv256_1/conv1/conv/bias","shape":[256],"dtype":"float32","quantization":{"dtype":"uint8","scale":3.2105515457510146e-10,"min":-3.467395669411096e-8}},{"name":"conv256_1/conv1/scale/weights","shape":[256],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.043242172166412955,"min":5.28542947769165}},{"name":"conv256_1/conv1/scale/biases","shape":[256],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.01643658619300992,"min":-1.3149268954407936}},{"name":"conv256_1/conv2/conv/filters","shape":[3,3,256,256],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.0003289232651392619,"min":-0.041773254672686264}},{"name":"conv256_1/conv2/conv/bias","shape":[256],"dtype":"float32","quantization":{"dtype":"uint8","scale":9.13591691187321e-10,"min":-1.2333487831028833e-7}},{"name":"conv256_1/conv2/scale/weights","shape":[256],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.0573908618852204,"min":4.360693454742432}},{"name":"conv256_1/conv2/scale/biases","shape":[256],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.0164216583850337,"min":-1.3958409627278647}},{"name":"conv256_2/conv1/conv/filters","shape":[3,3,256,256],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.00010476927912118389,"min":-0.015610622589056398}},{"name":"conv256_2/conv1/conv/bias","shape":[256],"dtype":"float32","quantization":{"dtype":"uint8","scale":2.418552539068639e-10,"min":-2.539480166022071e-8}},{"name":"conv256_2/conv1/scale/weights","shape":[256],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.06024209564807368,"min":6.598613739013672}},{"name":"conv256_2/conv1/scale/biases","shape":[256],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.01578534350675695,"min":-1.1049740454729864}},{"name":"conv256_2/conv2/conv/filters","shape":[3,3,256,256],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.00005543030908002573,"min":-0.007427661416723448}},{"name":"conv256_2/conv2/conv/bias","shape":[256],"dtype":"float32","quantization":{"dtype":"uint8","scale":1.0822061852320308e-9,"min":-1.515088659324843e-7}},{"name":"conv256_2/conv2/scale/weights","shape":[256],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.04302893993901272,"min":2.2855491638183594}},{"name":"conv256_2/conv2/scale/biases","shape":[256],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.006792667566561232,"min":-0.8083274404207865}},{"name":"conv256_down_out/conv1/conv/filters","shape":[3,3,256,256],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.000568966465253456,"min":-0.05632768006009214}},{"name":"conv256_down_out/conv1/conv/bias","shape":[256],"dtype":"float32","quantization":{"dtype":"uint8","scale":4.5347887884881677e-10,"min":-6.530095855422961e-8}},{"name":"conv256_down_out/conv1/scale/weights","shape":[256],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.017565592597512638,"min":4.594101905822754}},{"name":"conv256_down_out/conv1/scale/biases","shape":[256],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.04850864223405427,"min":-6.306123490427055}},{"name":"conv256_down_out/conv2/conv/filters","shape":[3,3,256,256],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.0003739110687199761,"min":-0.06954745878191555}},{"name":"conv256_down_out/conv2/conv/bias","shape":[256],"dtype":"float32","quantization":{"dtype":"uint8","scale":1.2668428328152895e-9,"min":-2.2549802424112154e-7}},{"name":"conv256_down_out/conv2/scale/weights","shape":[256],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.04351314469879749,"min":4.31956672668457}},{"name":"conv256_down_out/conv2/scale/biases","shape":[256],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.021499746921015722,"min":-1.2039858275768804}},{"name":"fc","shape":[256,128],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.000357687911566566,"min":-0.04578405268052045}}],"paths":["face_recognition_model-shard1","face_recognition_model-shard2"]}] \ No newline at end of file diff --git a/models/mtcnn_model-shard1 b/models/mtcnn_model-shard1 new file mode 100644 index 0000000000000000000000000000000000000000..13ce821e65eaa830f473dd56cbf03a4a8a1aef67 --- /dev/null +++ b/models/mtcnn_model-shard1 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:20f4d3ac278e42e9a079453441533ec4e79bb6bd2e7cf7bd33e34ee123d674cb +size 1983400 diff --git a/models/mtcnn_model-weights_manifest.json b/models/mtcnn_model-weights_manifest.json new file mode 100644 index 0000000000000000000000000000000000000000..c290984bdaf9ebc88d8f917faac51febf15b7989 --- /dev/null +++ b/models/mtcnn_model-weights_manifest.json @@ -0,0 +1 @@ +[{"paths":["mtcnn_model-shard1"],"weights":[{"dtype":"float32","name":"pnet/conv1/weights","shape":[3,3,3,10]},{"dtype":"float32","name":"pnet/conv1/bias","shape":[10]},{"dtype":"float32","name":"pnet/prelu1_alpha","shape":[10]},{"dtype":"float32","name":"pnet/conv2/weights","shape":[3,3,10,16]},{"dtype":"float32","name":"pnet/conv2/bias","shape":[16]},{"dtype":"float32","name":"pnet/prelu2_alpha","shape":[16]},{"dtype":"float32","name":"pnet/conv3/weights","shape":[3,3,16,32]},{"dtype":"float32","name":"pnet/conv3/bias","shape":[32]},{"dtype":"float32","name":"pnet/prelu3_alpha","shape":[32]},{"dtype":"float32","name":"pnet/conv4_1/weights","shape":[1,1,32,2]},{"dtype":"float32","name":"pnet/conv4_1/bias","shape":[2]},{"dtype":"float32","name":"pnet/conv4_2/weights","shape":[1,1,32,4]},{"dtype":"float32","name":"pnet/conv4_2/bias","shape":[4]},{"dtype":"float32","name":"rnet/conv1/weights","shape":[3,3,3,28]},{"dtype":"float32","name":"rnet/conv1/bias","shape":[28]},{"dtype":"float32","name":"rnet/prelu1_alpha","shape":[28]},{"dtype":"float32","name":"rnet/conv2/weights","shape":[3,3,28,48]},{"dtype":"float32","name":"rnet/conv2/bias","shape":[48]},{"dtype":"float32","name":"rnet/prelu2_alpha","shape":[48]},{"dtype":"float32","name":"rnet/conv3/weights","shape":[2,2,48,64]},{"dtype":"float32","name":"rnet/conv3/bias","shape":[64]},{"dtype":"float32","name":"rnet/prelu3_alpha","shape":[64]},{"dtype":"float32","name":"rnet/fc1/weights","shape":[576,128]},{"dtype":"float32","name":"rnet/fc1/bias","shape":[128]},{"dtype":"float32","name":"rnet/prelu4_alpha","shape":[128]},{"dtype":"float32","name":"rnet/fc2_1/weights","shape":[128,2]},{"dtype":"float32","name":"rnet/fc2_1/bias","shape":[2]},{"dtype":"float32","name":"rnet/fc2_2/weights","shape":[128,4]},{"dtype":"float32","name":"rnet/fc2_2/bias","shape":[4]},{"dtype":"float32","name":"onet/conv1/weights","shape":[3,3,3,32]},{"dtype":"float32","name":"onet/conv1/bias","shape":[32]},{"dtype":"float32","name":"onet/prelu1_alpha","shape":[32]},{"dtype":"float32","name":"onet/conv2/weights","shape":[3,3,32,64]},{"dtype":"float32","name":"onet/conv2/bias","shape":[64]},{"dtype":"float32","name":"onet/prelu2_alpha","shape":[64]},{"dtype":"float32","name":"onet/conv3/weights","shape":[3,3,64,64]},{"dtype":"float32","name":"onet/conv3/bias","shape":[64]},{"dtype":"float32","name":"onet/prelu3_alpha","shape":[64]},{"dtype":"float32","name":"onet/conv4/weights","shape":[2,2,64,128]},{"dtype":"float32","name":"onet/conv4/bias","shape":[128]},{"dtype":"float32","name":"onet/prelu4_alpha","shape":[128]},{"dtype":"float32","name":"onet/fc1/weights","shape":[1152,256]},{"dtype":"float32","name":"onet/fc1/bias","shape":[256]},{"dtype":"float32","name":"onet/prelu5_alpha","shape":[256]},{"dtype":"float32","name":"onet/fc2_1/weights","shape":[256,2]},{"dtype":"float32","name":"onet/fc2_1/bias","shape":[2]},{"dtype":"float32","name":"onet/fc2_2/weights","shape":[256,4]},{"dtype":"float32","name":"onet/fc2_2/bias","shape":[4]},{"dtype":"float32","name":"onet/fc2_3/weights","shape":[256,10]},{"dtype":"float32","name":"onet/fc2_3/bias","shape":[10]}]}] \ No newline at end of file diff --git a/models/ssd_mobilenetv1_model-shard1 b/models/ssd_mobilenetv1_model-shard1 new file mode 100644 index 0000000000000000000000000000000000000000..cd8ff498e67c651ed6e2a9a334d6193f35f22a45 --- /dev/null +++ b/models/ssd_mobilenetv1_model-shard1 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6ff16f095b0371f24accb48aab82e595697baa821cf851167cbf9203d1d7ec9a +size 4194304 diff --git a/models/ssd_mobilenetv1_model-shard2 b/models/ssd_mobilenetv1_model-shard2 new file mode 100644 index 0000000000000000000000000000000000000000..108dbc1e2d86e922311fe853cd75bf22d97860a5 --- /dev/null +++ b/models/ssd_mobilenetv1_model-shard2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2539847e627c8c4a561e999170735e6c527deecc6fdba2959fc5312fb1ea1de3 +size 1422653 diff --git a/models/ssd_mobilenetv1_model-weights_manifest.json b/models/ssd_mobilenetv1_model-weights_manifest.json new file mode 100644 index 0000000000000000000000000000000000000000..204e0d13c87e9c059e4995f39447dcc45921a630 --- /dev/null +++ b/models/ssd_mobilenetv1_model-weights_manifest.json @@ -0,0 +1 @@ +[{"paths":["ssd_mobilenetv1_model-shard1","ssd_mobilenetv1_model-shard2"],"weights":[{"dtype":"float32","shape":[1,1,512,9],"quantization":{"scale":0.0026856216729856004,"min":-0.34107395246917127,"dtype":"uint8"},"name":"Prediction/BoxPredictor_0/ClassPredictor/weights"},{"dtype":"float32","shape":[9],"quantization":{"scale":0.00198518248165355,"min":-0.32159956202787515,"dtype":"uint8"},"name":"Prediction/BoxPredictor_0/ClassPredictor/biases"},{"dtype":"float32","shape":[1,1,1024,18],"quantization":{"scale":0.003060340296988394,"min":-0.489654447518143,"dtype":"uint8"},"name":"Prediction/BoxPredictor_1/ClassPredictor/weights"},{"dtype":"float32","shape":[18],"quantization":{"scale":0.0008040678851744708,"min":-0.12221831854651957,"dtype":"uint8"},"name":"Prediction/BoxPredictor_1/ClassPredictor/biases"},{"dtype":"float32","shape":[1,1,512,18],"quantization":{"scale":0.0012513800578958848,"min":-0.16017664741067325,"dtype":"uint8"},"name":"Prediction/BoxPredictor_2/ClassPredictor/weights"},{"dtype":"float32","shape":[18],"quantization":{"scale":0.000338070518245884,"min":-0.05510549447407909,"dtype":"uint8"},"name":"Prediction/BoxPredictor_2/ClassPredictor/biases"},{"dtype":"float32","shape":[1,1,256,18],"quantization":{"scale":0.0011819932975021064,"min":-0.1453851755927591,"dtype":"uint8"},"name":"Prediction/BoxPredictor_3/ClassPredictor/weights"},{"dtype":"float32","shape":[18],"quantization":{"scale":0.00015985782386041154,"min":-0.026536398760828316,"dtype":"uint8"},"name":"Prediction/BoxPredictor_3/ClassPredictor/biases"},{"dtype":"float32","shape":[1,1,256,18],"quantization":{"scale":0.0007035591438704846,"min":-0.08513065640832863,"dtype":"uint8"},"name":"Prediction/BoxPredictor_4/ClassPredictor/weights"},{"dtype":"float32","shape":[18],"quantization":{"scale":0.00008793946574716008,"min":-0.013190919862074012,"dtype":"uint8"},"name":"Prediction/BoxPredictor_4/ClassPredictor/biases"},{"dtype":"float32","shape":[1,1,128,18],"quantization":{"scale":0.00081320781918133,"min":-0.11059626340866088,"dtype":"uint8"},"name":"Prediction/BoxPredictor_5/ClassPredictor/weights"},{"dtype":"float32","shape":[18],"quantization":{"scale":0.0000980533805547976,"min":-0.014609953702664841,"dtype":"uint8"},"name":"Prediction/BoxPredictor_5/ClassPredictor/biases"},{"dtype":"int32","shape":[],"quantization":{"scale":1,"min":3,"dtype":"uint8"},"name":"Prediction/BoxPredictor_0/stack_1/2"},{"dtype":"int32","shape":[3],"quantization":{"scale":0.00392156862745098,"min":0,"dtype":"uint8"},"name":"Postprocessor/Slice/begin"},{"dtype":"int32","shape":[3],"quantization":{"scale":1,"min":-1,"dtype":"uint8"},"name":"Postprocessor/Slice/size"},{"dtype":"float32","shape":[1,1,512,12],"quantization":{"scale":0.003730384859384275,"min":-0.4327246436885759,"dtype":"uint8"},"name":"Prediction/BoxPredictor_0/BoxEncodingPredictor/weights"},{"dtype":"float32","shape":[12],"quantization":{"scale":0.0018744708568442102,"min":-0.3917644090804399,"dtype":"uint8"},"name":"Prediction/BoxPredictor_0/BoxEncodingPredictor/biases"},{"dtype":"int32","shape":[],"quantization":{"scale":1,"min":3072,"dtype":"uint8"},"name":"Prediction/BoxPredictor_0/stack_1/1"},{"dtype":"float32","shape":[1,1,1024,24],"quantization":{"scale":0.00157488017689948,"min":-0.20000978246623397,"dtype":"uint8"},"name":"Prediction/BoxPredictor_1/BoxEncodingPredictor/weights"},{"dtype":"float32","shape":[24],"quantization":{"scale":0.0002823906713256649,"min":-0.043488163384152394,"dtype":"uint8"},"name":"Prediction/BoxPredictor_1/BoxEncodingPredictor/biases"},{"dtype":"int32","shape":[],"quantization":{"scale":1,"min":1536,"dtype":"uint8"},"name":"Prediction/BoxPredictor_1/stack_1/1"},{"dtype":"float32","shape":[1,1,512,24],"quantization":{"scale":0.0007974451663447361,"min":-0.11004743295557358,"dtype":"uint8"},"name":"Prediction/BoxPredictor_2/BoxEncodingPredictor/weights"},{"dtype":"float32","shape":[24],"quantization":{"scale":0.0001350417988849621,"min":-0.02039131163162928,"dtype":"uint8"},"name":"Prediction/BoxPredictor_2/BoxEncodingPredictor/biases"},{"dtype":"int32","shape":[],"quantization":{"scale":1,"min":384,"dtype":"uint8"},"name":"Prediction/BoxPredictor_2/stack_1/1"},{"dtype":"float32","shape":[1,1,256,24],"quantization":{"scale":0.0007113990246080885,"min":-0.0860792819775787,"dtype":"uint8"},"name":"Prediction/BoxPredictor_3/BoxEncodingPredictor/weights"},{"dtype":"float32","shape":[24],"quantization":{"scale":0.000050115815418608046,"min":-0.007617603943628423,"dtype":"uint8"},"name":"Prediction/BoxPredictor_3/BoxEncodingPredictor/biases"},{"dtype":"int32","shape":[],"quantization":{"scale":1,"min":96,"dtype":"uint8"},"name":"Prediction/BoxPredictor_3/stack_1/1"},{"dtype":"float32","shape":[1,1,256,24],"quantization":{"scale":0.000590049314732645,"min":-0.06903576982371946,"dtype":"uint8"},"name":"Prediction/BoxPredictor_4/BoxEncodingPredictor/weights"},{"dtype":"float32","shape":[24],"quantization":{"scale":0.00003513663861097074,"min":-0.006359731588585704,"dtype":"uint8"},"name":"Prediction/BoxPredictor_4/BoxEncodingPredictor/biases"},{"dtype":"int32","shape":[],"quantization":{"scale":1,"min":24,"dtype":"uint8"},"name":"Prediction/BoxPredictor_4/stack_1/1"},{"dtype":"float32","shape":[1,1,128,24],"quantization":{"scale":0.0005990567744946948,"min":-0.07907549423329971,"dtype":"uint8"},"name":"Prediction/BoxPredictor_5/BoxEncodingPredictor/weights"},{"dtype":"float32","shape":[24],"quantization":{"scale":0.00003392884288640583,"min":-0.006039334033780238,"dtype":"uint8"},"name":"Prediction/BoxPredictor_5/BoxEncodingPredictor/biases"},{"dtype":"float32","shape":[],"quantization":{"scale":1,"min":0.007843137718737125,"dtype":"uint8"},"name":"Preprocessor/mul/x"},{"dtype":"int32","shape":[2],"quantization":{"scale":1,"min":512,"dtype":"uint8"},"name":"Preprocessor/ResizeImage/size"},{"dtype":"float32","shape":[],"quantization":{"scale":1,"min":1,"dtype":"uint8"},"name":"Preprocessor/sub/y"},{"dtype":"float32","shape":[3,3,3,32],"quantization":{"scale":0.03948551065781537,"min":-5.014659853542552,"dtype":"uint8"},"name":"MobilenetV1/Conv2d_0_pointwise/weights"},{"dtype":"float32","shape":[32],"quantization":{"scale":0.0498106133704092,"min":-7.371970778820562,"dtype":"uint8"},"name":"MobilenetV1/Conv2d_0_pointwise/convolution_bn_offset"},{"dtype":"float32","shape":[3,3,32,1],"quantization":{"scale":0.036833542468501075,"min":-4.714693435968138,"dtype":"uint8"},"name":"MobilenetV1/Conv2d_1_depthwise/depthwise_weights"},{"dtype":"float32","shape":[32],"quantization":{"scale":0.012173276705046495,"min":-0.012173276705046495,"dtype":"uint8"},"name":"MobilenetV1/Conv2d_1_depthwise/BatchNorm/gamma"},{"dtype":"float32","shape":[32],"quantization":{"scale":0.032182769214405736,"min":-2.4780732295092416,"dtype":"uint8"},"name":"MobilenetV1/Conv2d_1_depthwise/BatchNorm/beta"},{"dtype":"float32","shape":[32],"quantization":{"scale":0.028287527607936486,"min":-3.366215785344442,"dtype":"uint8"},"name":"MobilenetV1/Conv2d_1_depthwise/BatchNorm/moving_mean"},{"dtype":"float32","shape":[32],"quantization":{"scale":0.04716738532571232,"min":3.9071404665769224e-36,"dtype":"uint8"},"name":"MobilenetV1/Conv2d_1_depthwise/BatchNorm/moving_variance"},{"dtype":"float32","shape":[1,1,32,64],"quantization":{"scale":0.04010109433940812,"min":-4.290817094316669,"dtype":"uint8"},"name":"MobilenetV1/Conv2d_1_pointwise/weights"},{"dtype":"float32","shape":[64],"quantization":{"scale":0.2212210038129021,"min":-34.51047659481273,"dtype":"uint8"},"name":"MobilenetV1/Conv2d_1_pointwise/convolution_bn_offset"},{"dtype":"float32","shape":[3,3,64,1],"quantization":{"scale":0.010024750933927648,"min":-1.343316625146305,"dtype":"uint8"},"name":"MobilenetV1/Conv2d_2_depthwise/depthwise_weights"},{"dtype":"float32","shape":[64],"quantization":{"scale":0.006120916675118839,"min":0.5227176547050476,"dtype":"uint8"},"name":"MobilenetV1/Conv2d_2_depthwise/BatchNorm/gamma"},{"dtype":"float32","shape":[64],"quantization":{"scale":0.02317035385206634,"min":-0.7646216771181892,"dtype":"uint8"},"name":"MobilenetV1/Conv2d_2_depthwise/BatchNorm/beta"},{"dtype":"float32","shape":[64],"quantization":{"scale":0.04980821422502106,"min":-5.8275610643274645,"dtype":"uint8"},"name":"MobilenetV1/Conv2d_2_depthwise/BatchNorm/moving_mean"},{"dtype":"float32","shape":[64],"quantization":{"scale":0.051751047022202436,"min":3.916113799002297e-36,"dtype":"uint8"},"name":"MobilenetV1/Conv2d_2_depthwise/BatchNorm/moving_variance"},{"dtype":"float32","shape":[1,1,64,128],"quantization":{"scale":0.021979344124887504,"min":-2.1319963801140878,"dtype":"uint8"},"name":"MobilenetV1/Conv2d_2_pointwise/weights"},{"dtype":"float32","shape":[128],"quantization":{"scale":0.09958663267247816,"min":-11.054116226645077,"dtype":"uint8"},"name":"MobilenetV1/Conv2d_2_pointwise/convolution_bn_offset"},{"dtype":"float32","shape":[3,3,128,1],"quantization":{"scale":0.01943492702409333,"min":-2.6237151482525993,"dtype":"uint8"},"name":"MobilenetV1/Conv2d_3_depthwise/depthwise_weights"},{"dtype":"float32","shape":[128],"quantization":{"scale":0.017852897737540452,"min":0.40204083919525146,"dtype":"uint8"},"name":"MobilenetV1/Conv2d_3_depthwise/BatchNorm/gamma"},{"dtype":"float32","shape":[128],"quantization":{"scale":0.029888209174661076,"min":-1.972621805527631,"dtype":"uint8"},"name":"MobilenetV1/Conv2d_3_depthwise/BatchNorm/beta"},{"dtype":"float32","shape":[128],"quantization":{"scale":0.029319268581913967,"min":-5.130872001834945,"dtype":"uint8"},"name":"MobilenetV1/Conv2d_3_depthwise/BatchNorm/moving_mean"},{"dtype":"float32","shape":[128],"quantization":{"scale":0.014018708584355373,"min":3.9083178263362604e-36,"dtype":"uint8"},"name":"MobilenetV1/Conv2d_3_depthwise/BatchNorm/moving_variance"},{"dtype":"float32","shape":[1,1,128,128],"quantization":{"scale":0.020776657964669022,"min":-2.5347522716896207,"dtype":"uint8"},"name":"MobilenetV1/Conv2d_3_pointwise/weights"},{"dtype":"float32","shape":[128],"quantization":{"scale":0.14383157094319662,"min":-9.636715253194174,"dtype":"uint8"},"name":"MobilenetV1/Conv2d_3_pointwise/convolution_bn_offset"},{"dtype":"float32","shape":[3,3,128,1],"quantization":{"scale":0.004463558571011412,"min":-0.5981168485155293,"dtype":"uint8"},"name":"MobilenetV1/Conv2d_4_depthwise/depthwise_weights"},{"dtype":"float32","shape":[128],"quantization":{"scale":0.006487431245691636,"min":0.47910428047180176,"dtype":"uint8"},"name":"MobilenetV1/Conv2d_4_depthwise/BatchNorm/gamma"},{"dtype":"float32","shape":[128],"quantization":{"scale":0.026542164297664865,"min":-1.2209395576925839,"dtype":"uint8"},"name":"MobilenetV1/Conv2d_4_depthwise/BatchNorm/beta"},{"dtype":"float32","shape":[128],"quantization":{"scale":0.05119945675719018,"min":-8.60150873520795,"dtype":"uint8"},"name":"MobilenetV1/Conv2d_4_depthwise/BatchNorm/moving_mean"},{"dtype":"float32","shape":[128],"quantization":{"scale":0.03081628388049556,"min":3.911508751095344e-36,"dtype":"uint8"},"name":"MobilenetV1/Conv2d_4_depthwise/BatchNorm/moving_variance"},{"dtype":"float32","shape":[1,1,128,256],"quantization":{"scale":0.010758659886378868,"min":-1.0328313490923713,"dtype":"uint8"},"name":"MobilenetV1/Conv2d_4_pointwise/weights"},{"dtype":"float32","shape":[256],"quantization":{"scale":0.08058219610476026,"min":-9.34753474815219,"dtype":"uint8"},"name":"MobilenetV1/Conv2d_4_pointwise/convolution_bn_offset"},{"dtype":"float32","shape":[3,3,256,1],"quantization":{"scale":0.01145936741548426,"min":-1.3292866201961742,"dtype":"uint8"},"name":"MobilenetV1/Conv2d_5_depthwise/depthwise_weights"},{"dtype":"float32","shape":[256],"quantization":{"scale":0.0083988838336047,"min":0.36280909180641174,"dtype":"uint8"},"name":"MobilenetV1/Conv2d_5_depthwise/BatchNorm/gamma"},{"dtype":"float32","shape":[256],"quantization":{"scale":0.02858148649627087,"min":-3.6584302715226715,"dtype":"uint8"},"name":"MobilenetV1/Conv2d_5_depthwise/BatchNorm/beta"},{"dtype":"float32","shape":[256],"quantization":{"scale":0.03988401375564874,"min":-7.099354448505476,"dtype":"uint8"},"name":"MobilenetV1/Conv2d_5_depthwise/BatchNorm/moving_mean"},{"dtype":"float32","shape":[256],"quantization":{"scale":0.009090481683904049,"min":0.020878996700048447,"dtype":"uint8"},"name":"MobilenetV1/Conv2d_5_depthwise/BatchNorm/moving_variance"},{"dtype":"float32","shape":[1,1,256,256],"quantization":{"scale":0.008951201625898773,"min":-1.1189002032373465,"dtype":"uint8"},"name":"MobilenetV1/Conv2d_5_pointwise/weights"},{"dtype":"float32","shape":[256],"quantization":{"scale":0.051758006974762565,"min":-5.745138774198645,"dtype":"uint8"},"name":"MobilenetV1/Conv2d_5_pointwise/convolution_bn_offset"},{"dtype":"float32","shape":[3,3,256,1],"quantization":{"scale":0.004110433190476661,"min":-0.6042336790000691,"dtype":"uint8"},"name":"MobilenetV1/Conv2d_6_depthwise/depthwise_weights"},{"dtype":"float32","shape":[256],"quantization":{"scale":0.013170199768216002,"min":0.3386639356613159,"dtype":"uint8"},"name":"MobilenetV1/Conv2d_6_depthwise/BatchNorm/gamma"},{"dtype":"float32","shape":[256],"quantization":{"scale":0.03599378548416437,"min":-3.70735990486893,"dtype":"uint8"},"name":"MobilenetV1/Conv2d_6_depthwise/BatchNorm/beta"},{"dtype":"float32","shape":[256],"quantization":{"scale":0.026967673208199296,"min":-3.748506575939702,"dtype":"uint8"},"name":"MobilenetV1/Conv2d_6_depthwise/BatchNorm/moving_mean"},{"dtype":"float32","shape":[256],"quantization":{"scale":0.012615410486857097,"min":3.9111388979838637e-36,"dtype":"uint8"},"name":"MobilenetV1/Conv2d_6_depthwise/BatchNorm/moving_variance"},{"dtype":"float32","shape":[1,1,256,512],"quantization":{"scale":0.00822840648538926,"min":-1.1848905338960536,"dtype":"uint8"},"name":"MobilenetV1/Conv2d_6_pointwise/weights"},{"dtype":"float32","shape":[512],"quantization":{"scale":0.06608965817619772,"min":-7.468131373910342,"dtype":"uint8"},"name":"MobilenetV1/Conv2d_6_pointwise/convolution_bn_offset"},{"dtype":"float32","shape":[3,3,512,1],"quantization":{"scale":0.008801074355256323,"min":-0.9593171047229393,"dtype":"uint8"},"name":"MobilenetV1/Conv2d_7_depthwise/depthwise_weights"},{"dtype":"float32","shape":[512],"quantization":{"scale":0.030577416513480393,"min":0.3285980224609375,"dtype":"uint8"},"name":"MobilenetV1/Conv2d_7_depthwise/BatchNorm/gamma"},{"dtype":"float32","shape":[512],"quantization":{"scale":0.04778536441279393,"min":-8.935863145192464,"dtype":"uint8"},"name":"MobilenetV1/Conv2d_7_depthwise/BatchNorm/beta"},{"dtype":"float32","shape":[512],"quantization":{"scale":0.04331884945140165,"min":-9.660103427662568,"dtype":"uint8"},"name":"MobilenetV1/Conv2d_7_depthwise/BatchNorm/moving_mean"},{"dtype":"float32","shape":[512],"quantization":{"scale":0.04126455444367785,"min":0.000604183878749609,"dtype":"uint8"},"name":"MobilenetV1/Conv2d_7_depthwise/BatchNorm/moving_variance"},{"dtype":"float32","shape":[1,1,512,512],"quantization":{"scale":0.009305818408143287,"min":-1.1446156642016243,"dtype":"uint8"},"name":"MobilenetV1/Conv2d_7_pointwise/weights"},{"dtype":"float32","shape":[512],"quantization":{"scale":0.04640720217835669,"min":-4.733534622192383,"dtype":"uint8"},"name":"MobilenetV1/Conv2d_7_pointwise/convolution_bn_offset"},{"dtype":"float32","shape":[3,3,512,1],"quantization":{"scale":0.008138792655047248,"min":-0.9766551186056698,"dtype":"uint8"},"name":"MobilenetV1/Conv2d_8_depthwise/depthwise_weights"},{"dtype":"float32","shape":[512],"quantization":{"scale":0.027351748358969596,"min":0.34030041098594666,"dtype":"uint8"},"name":"MobilenetV1/Conv2d_8_depthwise/BatchNorm/gamma"},{"dtype":"float32","shape":[512],"quantization":{"scale":0.04415061053107767,"min":-7.019947074441349,"dtype":"uint8"},"name":"MobilenetV1/Conv2d_8_depthwise/BatchNorm/beta"},{"dtype":"float32","shape":[512],"quantization":{"scale":0.02476683784933651,"min":-2.9224868662217083,"dtype":"uint8"},"name":"MobilenetV1/Conv2d_8_depthwise/BatchNorm/moving_mean"},{"dtype":"float32","shape":[512],"quantization":{"scale":0.02547598832684076,"min":0.00026032101595774293,"dtype":"uint8"},"name":"MobilenetV1/Conv2d_8_depthwise/BatchNorm/moving_variance"},{"dtype":"float32","shape":[1,1,512,512],"quantization":{"scale":0.01083052625843123,"min":-1.2563410459780227,"dtype":"uint8"},"name":"MobilenetV1/Conv2d_8_pointwise/weights"},{"dtype":"float32","shape":[512],"quantization":{"scale":0.06360894371481503,"min":-7.951117964351878,"dtype":"uint8"},"name":"MobilenetV1/Conv2d_8_pointwise/convolution_bn_offset"},{"dtype":"float32","shape":[3,3,512,1],"quantization":{"scale":0.006704086883395326,"min":-0.8648272079579971,"dtype":"uint8"},"name":"MobilenetV1/Conv2d_9_depthwise/depthwise_weights"},{"dtype":"float32","shape":[512],"quantization":{"scale":0.015343831567203297,"min":0.2711026668548584,"dtype":"uint8"},"name":"MobilenetV1/Conv2d_9_depthwise/BatchNorm/gamma"},{"dtype":"float32","shape":[512],"quantization":{"scale":0.03378283930759804,"min":-4.797163181678922,"dtype":"uint8"},"name":"MobilenetV1/Conv2d_9_depthwise/BatchNorm/beta"},{"dtype":"float32","shape":[512],"quantization":{"scale":0.021910778213949763,"min":-3.987761634938857,"dtype":"uint8"},"name":"MobilenetV1/Conv2d_9_depthwise/BatchNorm/moving_mean"},{"dtype":"float32","shape":[512],"quantization":{"scale":0.009284070410007296,"min":0.000021581046894425526,"dtype":"uint8"},"name":"MobilenetV1/Conv2d_9_depthwise/BatchNorm/moving_variance"},{"dtype":"float32","shape":[1,1,512,512],"quantization":{"scale":0.012783036979974485,"min":-1.9046725100161983,"dtype":"uint8"},"name":"MobilenetV1/Conv2d_9_pointwise/weights"},{"dtype":"float32","shape":[512],"quantization":{"scale":0.07273082733154297,"min":-9.52773838043213,"dtype":"uint8"},"name":"MobilenetV1/Conv2d_9_pointwise/convolution_bn_offset"},{"dtype":"float32","shape":[3,3,512,1],"quantization":{"scale":0.006126228033327589,"min":-0.7351473639993107,"dtype":"uint8"},"name":"MobilenetV1/Conv2d_10_depthwise/depthwise_weights"},{"dtype":"float32","shape":[512],"quantization":{"scale":0.029703759212119908,"min":0.28687000274658203,"dtype":"uint8"},"name":"MobilenetV1/Conv2d_10_depthwise/BatchNorm/gamma"},{"dtype":"float32","shape":[512],"quantization":{"scale":0.04394429898729511,"min":-6.3279790541704966,"dtype":"uint8"},"name":"MobilenetV1/Conv2d_10_depthwise/BatchNorm/beta"},{"dtype":"float32","shape":[512],"quantization":{"scale":0.016566915605582443,"min":-2.7501079905266854,"dtype":"uint8"},"name":"MobilenetV1/Conv2d_10_depthwise/BatchNorm/moving_mean"},{"dtype":"float32","shape":[512],"quantization":{"scale":0.012152872833551145,"min":3.913338286370366e-36,"dtype":"uint8"},"name":"MobilenetV1/Conv2d_10_depthwise/BatchNorm/moving_variance"},{"dtype":"float32","shape":[1,1,512,512],"quantization":{"scale":0.01354524388032801,"min":-1.7473364605623134,"dtype":"uint8"},"name":"MobilenetV1/Conv2d_10_pointwise/weights"},{"dtype":"float32","shape":[512],"quantization":{"scale":0.08566816367355047,"min":-9.937506986131854,"dtype":"uint8"},"name":"MobilenetV1/Conv2d_10_pointwise/convolution_bn_offset"},{"dtype":"float32","shape":[3,3,512,1],"quantization":{"scale":0.006012305558896532,"min":-0.7876120282154457,"dtype":"uint8"},"name":"MobilenetV1/Conv2d_11_depthwise/depthwise_weights"},{"dtype":"float32","shape":[512],"quantization":{"scale":0.01469323155926723,"min":0.29223933815956116,"dtype":"uint8"},"name":"MobilenetV1/Conv2d_11_depthwise/BatchNorm/gamma"},{"dtype":"float32","shape":[512],"quantization":{"scale":0.030889174517463234,"min":-3.2433633243336395,"dtype":"uint8"},"name":"MobilenetV1/Conv2d_11_depthwise/BatchNorm/beta"},{"dtype":"float32","shape":[512],"quantization":{"scale":0.014836942448335536,"min":-2.047498057870304,"dtype":"uint8"},"name":"MobilenetV1/Conv2d_11_depthwise/BatchNorm/moving_mean"},{"dtype":"float32","shape":[512],"quantization":{"scale":0.007234466105343445,"min":0.00013165915152058005,"dtype":"uint8"},"name":"MobilenetV1/Conv2d_11_depthwise/BatchNorm/moving_variance"},{"dtype":"float32","shape":[1,1,512,512],"quantization":{"scale":0.016261722527298274,"min":-1.4798167499841428,"dtype":"uint8"},"name":"MobilenetV1/Conv2d_11_pointwise/weights"},{"dtype":"float32","shape":[512],"quantization":{"scale":0.091437328563017,"min":-14.172785927267636,"dtype":"uint8"},"name":"MobilenetV1/Conv2d_11_pointwise/convolution_bn_offset"},{"dtype":"float32","shape":[3,3,512,1],"quantization":{"scale":0.004750356487199372,"min":-0.650798838746314,"dtype":"uint8"},"name":"MobilenetV1/Conv2d_12_depthwise/depthwise_weights"},{"dtype":"float32","shape":[512],"quantization":{"scale":0.008174965545242907,"min":0.3120670020580292,"dtype":"uint8"},"name":"MobilenetV1/Conv2d_12_depthwise/BatchNorm/gamma"},{"dtype":"float32","shape":[512],"quantization":{"scale":0.030133422215779623,"min":-2.41067377726237,"dtype":"uint8"},"name":"MobilenetV1/Conv2d_12_depthwise/BatchNorm/beta"},{"dtype":"float32","shape":[512],"quantization":{"scale":0.006088157261119169,"min":-0.7853722866843729,"dtype":"uint8"},"name":"MobilenetV1/Conv2d_12_depthwise/BatchNorm/moving_mean"},{"dtype":"float32","shape":[512],"quantization":{"scale":0.003668997334498985,"min":3.9124486300013356e-36,"dtype":"uint8"},"name":"MobilenetV1/Conv2d_12_depthwise/BatchNorm/moving_variance"},{"dtype":"float32","shape":[1,1,512,1024],"quantization":{"scale":0.010959514449624454,"min":-1.4028178495519301,"dtype":"uint8"},"name":"MobilenetV1/Conv2d_12_pointwise/weights"},{"dtype":"float32","shape":[1024],"quantization":{"scale":0.10896045834410424,"min":-14.818622334798176,"dtype":"uint8"},"name":"MobilenetV1/Conv2d_12_pointwise/convolution_bn_offset"},{"dtype":"float32","shape":[3,3,1024,1],"quantization":{"scale":0.004633033509347953,"min":-0.5652300881404502,"dtype":"uint8"},"name":"MobilenetV1/Conv2d_13_depthwise/depthwise_weights"},{"dtype":"float32","shape":[1024],"quantization":{"scale":0.022285057224479377,"min":0.23505790531635284,"dtype":"uint8"},"name":"MobilenetV1/Conv2d_13_depthwise/BatchNorm/gamma"},{"dtype":"float32","shape":[1024],"quantization":{"scale":0.0324854850769043,"min":-3.9957146644592285,"dtype":"uint8"},"name":"MobilenetV1/Conv2d_13_depthwise/BatchNorm/beta"},{"dtype":"float32","shape":[1024],"quantization":{"scale":0.014760061806323482,"min":-2.125448900110581,"dtype":"uint8"},"name":"MobilenetV1/Conv2d_13_depthwise/BatchNorm/moving_mean"},{"dtype":"float32","shape":[1024],"quantization":{"scale":0.0036057423142825855,"min":3.9067056828997994e-36,"dtype":"uint8"},"name":"MobilenetV1/Conv2d_13_depthwise/BatchNorm/moving_variance"},{"dtype":"float32","shape":[1,1,1024,1024],"quantization":{"scale":0.017311988157384536,"min":-2.094750567043529,"dtype":"uint8"},"name":"MobilenetV1/Conv2d_13_pointwise/weights"},{"dtype":"float32","shape":[1024],"quantization":{"scale":0.16447528764313343,"min":-25.658144872328815,"dtype":"uint8"},"name":"MobilenetV1/Conv2d_13_pointwise/convolution_bn_offset"},{"dtype":"float32","shape":[1,1,1024,256],"quantization":{"scale":0.0026493051472832175,"min":-0.36825341547236723,"dtype":"uint8"},"name":"Prediction/Conv2d_0_pointwise/weights"},{"dtype":"float32","shape":[256],"quantization":{"scale":0.012474596734140433,"min":-2.3078003958159803,"dtype":"uint8"},"name":"Prediction/Conv2d_0_pointwise/convolution_bn_offset"},{"dtype":"float32","shape":[3,3,256,512],"quantization":{"scale":0.014533351449405445,"min":-1.8166689311756807,"dtype":"uint8"},"name":"Prediction/Conv2d_1_pointwise/weights"},{"dtype":"float32","shape":[512],"quantization":{"scale":0.024268776762719248,"min":-2.4754152297973633,"dtype":"uint8"},"name":"Prediction/Conv2d_1_pointwise/convolution_bn_offset"},{"dtype":"float32","shape":[1,1,512,128],"quantization":{"scale":0.002208403746287028,"min":-0.28709248701731366,"dtype":"uint8"},"name":"Prediction/Conv2d_2_pointwise/weights"},{"dtype":"float32","shape":[128],"quantization":{"scale":0.012451349052728392,"min":-1.5937726787492341,"dtype":"uint8"},"name":"Prediction/Conv2d_2_pointwise/convolution_bn_offset"},{"dtype":"float32","shape":[3,3,128,256],"quantization":{"scale":0.026334229637594783,"min":-2.8967652601354263,"dtype":"uint8"},"name":"Prediction/Conv2d_3_pointwise/weights"},{"dtype":"float32","shape":[256],"quantization":{"scale":0.02509917792151956,"min":-1.4055539636050953,"dtype":"uint8"},"name":"Prediction/Conv2d_3_pointwise/convolution_bn_offset"},{"dtype":"float32","shape":[1,1,256,128],"quantization":{"scale":0.004565340046789132,"min":-0.3971845840706545,"dtype":"uint8"},"name":"Prediction/Conv2d_4_pointwise/weights"},{"dtype":"float32","shape":[128],"quantization":{"scale":0.017302456556581983,"min":-2.5953684834872974,"dtype":"uint8"},"name":"Prediction/Conv2d_4_pointwise/convolution_bn_offset"},{"dtype":"float32","shape":[3,3,128,256],"quantization":{"scale":0.025347338470758176,"min":-3.8527954475552426,"dtype":"uint8"},"name":"Prediction/Conv2d_5_pointwise/weights"},{"dtype":"float32","shape":[256],"quantization":{"scale":0.033134659598855414,"min":-2.9158500446992766,"dtype":"uint8"},"name":"Prediction/Conv2d_5_pointwise/convolution_bn_offset"},{"dtype":"float32","shape":[1,1,256,64],"quantization":{"scale":0.002493104397081861,"min":-0.2817207968702503,"dtype":"uint8"},"name":"Prediction/Conv2d_6_pointwise/weights"},{"dtype":"float32","shape":[64],"quantization":{"scale":0.011383360974928912,"min":-1.2749364291920382,"dtype":"uint8"},"name":"Prediction/Conv2d_6_pointwise/convolution_bn_offset"},{"dtype":"float32","shape":[3,3,64,128],"quantization":{"scale":0.020821522731407017,"min":-2.7484410005457263,"dtype":"uint8"},"name":"Prediction/Conv2d_7_pointwise/weights"},{"dtype":"float32","shape":[128],"quantization":{"scale":0.052144218893612135,"min":-3.5979511036592373,"dtype":"uint8"},"name":"Prediction/Conv2d_7_pointwise/convolution_bn_offset"},{"dtype":"int32","shape":[],"quantization":{"scale":1,"min":6,"dtype":"uint8"},"name":"Prediction/BoxPredictor_5/stack_1/1"},{"dtype":"int32","shape":[],"quantization":{"scale":1,"min":1,"dtype":"uint8"},"name":"concat_1/axis"},{"dtype":"int32","shape":[1],"quantization":{"scale":1,"min":0,"dtype":"uint8"},"name":"Prediction/BoxPredictor_0/strided_slice/stack"},{"dtype":"int32","shape":[1],"quantization":{"scale":1,"min":1,"dtype":"uint8"},"name":"Prediction/BoxPredictor_0/strided_slice/stack_1"},{"dtype":"int32","shape":[],"quantization":{"scale":1,"min":5118,"dtype":"uint8"},"name":"Postprocessor/stack/1"},{"dtype":"int32","shape":[],"quantization":{"scale":1,"min":4,"dtype":"uint8"},"name":"Prediction/BoxPredictor_0/stack/3"},{"dtype":"float32","shape":[1, 5118, 4],"name":"Output/extra_dim"}]}] \ No newline at end of file diff --git a/models/tiny_face_detector_model-shard1 b/models/tiny_face_detector_model-shard1 new file mode 100644 index 0000000000000000000000000000000000000000..a3f113a54220f9bda6b5e9a805fa657a13a0cd21 Binary files /dev/null and b/models/tiny_face_detector_model-shard1 differ diff --git a/models/tiny_face_detector_model-weights_manifest.json b/models/tiny_face_detector_model-weights_manifest.json new file mode 100644 index 0000000000000000000000000000000000000000..7d3b222d04af27b6238f07b631e7c8c5f470b81f --- /dev/null +++ b/models/tiny_face_detector_model-weights_manifest.json @@ -0,0 +1 @@ +[{"weights":[{"name":"conv0/filters","shape":[3,3,3,16],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.009007044399485869,"min":-1.2069439495311063}},{"name":"conv0/bias","shape":[16],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.005263455241334205,"min":-0.9211046672334858}},{"name":"conv1/depthwise_filter","shape":[3,3,16,1],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.004001977630690033,"min":-0.5042491814669441}},{"name":"conv1/pointwise_filter","shape":[1,1,16,32],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.013836609615999109,"min":-1.411334180831909}},{"name":"conv1/bias","shape":[32],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.0015159862590771096,"min":-0.30926119685173037}},{"name":"conv2/depthwise_filter","shape":[3,3,32,1],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.002666276225856706,"min":-0.317286870876948}},{"name":"conv2/pointwise_filter","shape":[1,1,32,64],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.015265831292844286,"min":-1.6792414422128714}},{"name":"conv2/bias","shape":[64],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.0020280554598453,"min":-0.37113414915168985}},{"name":"conv3/depthwise_filter","shape":[3,3,64,1],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.006100742489683862,"min":-0.8907084034938438}},{"name":"conv3/pointwise_filter","shape":[1,1,64,128],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.016276211832083907,"min":-2.0508026908425725}},{"name":"conv3/bias","shape":[128],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.003394414279975143,"min":-0.7637432129944072}},{"name":"conv4/depthwise_filter","shape":[3,3,128,1],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.006716050119961009,"min":-0.8059260143953211}},{"name":"conv4/pointwise_filter","shape":[1,1,128,256],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.021875603993733724,"min":-2.8875797271728514}},{"name":"conv4/bias","shape":[256],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.0041141652009066415,"min":-0.8187188749804216}},{"name":"conv5/depthwise_filter","shape":[3,3,256,1],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.008423839597141042,"min":-0.9013508368940915}},{"name":"conv5/pointwise_filter","shape":[1,1,256,512],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.030007277283014035,"min":-3.8709387695088107}},{"name":"conv5/bias","shape":[512],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.008402082966823203,"min":-1.4871686851277068}},{"name":"conv8/filters","shape":[1,1,512,25],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.028336129469030042,"min":-4.675461362389957}},{"name":"conv8/bias","shape":[25],"dtype":"float32","quantization":{"dtype":"uint8","scale":0.002268134028303857,"min":-0.41053225912299807}}],"paths":["tiny_face_detector_model-shard1"]}] \ No newline at end of file