How to use f2 method in differencify

Best JavaScript code snippet using differencify

main.js

Source:main.js Github

copy

Full Screen

1/*2​x=r sin(φ)cos(θ)3​y=r sin(φ)sin(θ)4​z=r cos(φ)5*/6/* DATA SAMPLE TEMPLATE7{8 Thermo1 Object Temp,9 Thermo2 Object Temp,10 Thermo3 Object Temp,11 Thermo4 Object Temp,12 Distance,13 Pitch,14 Roll,15 Acc X,16 Acc Y,17 Acc Z,18 Thermo Ave. Device Temp,19 Time Stamp,20 Hand,21 Target,22 on/off Target Observed23}*/24var preProcess = 2; //THERMOPILE PREPROCESSING NORMALIZATION METHOD SELECTION25//sensor data object26var state = {};27 // Web Bluetooth connection -->28$( document ).ready(function() {29 button = document.getElementById("connect");30 message = document.getElementById("message");31});32//connection flag33var bluetoothDataFlag = false;34if ( 'bluetooth' in navigator === false ) {35 button.style.display = 'none';36 message.innerHTML = 'This browser doesn\'t support the <a href="https://developer.mozilla.org/en-US/docs/Web/API/Web_Bluetooth_API" target="_blank">Web Bluetooth API</a> :(';37}38const services = {39 controlService: {40 name: 'control service',41 uuid: '0000a000-0000-1000-8000-00805f9b34fb'42 }43}44const characteristics = {45 commandReadCharacteristic: {46 name: 'command read characteristic',47 uuid: '0000a001-0000-1000-8000-00805f9b34fb'48 },49 commandWriteCharacteristic: {50 name: 'command write characteristic',51 uuid: '0000a002-0000-1000-8000-00805f9b34fb'52 },53 deviceDataCharacteristic: {54 name: 'imu data characteristic',55 uuid: '0000a003-0000-1000-8000-00805f9b34fb'56 }57}58var _this;59var state = {};60var previousPose;61var sendCommandFlag = false; //global to keep track of when command is sent back to device62//let commandValue = new Uint8Array([0x01,0x03,0x02,0x03,0x01]); //command to send back to device63let commandValue = new Uint8Array([0x99]); //command to send back to device64class ControllerWebBluetooth {65 constructor(name) {66 _this = this;67 this.name = name;68 this.services = services;69 this.characteristics = characteristics;70 this.standardServer;71 }72 connect() {73 return navigator.bluetooth.requestDevice({74 filters: [{75 name: this.name76 },77 {78 services: [services.controlService.uuid]79 }80 ]81 })82 .then(device => {83 console.log('Device discovered', device.name);84 return device.gatt.connect();85 })86 .then(server => {87 console.log('server device: ' + Object.keys(server.device));88 this.getServices([services.controlService, ], [characteristics.commandReadCharacteristic, characteristics.commandWriteCharacteristic, characteristics.deviceDataCharacteristic], server);89 })90 .catch(error => {91 console.log('error', error)92 })93 }94 getServices(requestedServices, requestedCharacteristics, server) {95 this.standardServer = server;96 requestedServices.filter((service) => {97 if (service.uuid == services.controlService.uuid) {98 _this.getControlService(requestedServices, requestedCharacteristics, this.standardServer);99 }100 })101 }102 getControlService(requestedServices, requestedCharacteristics, server) {103 let controlService = requestedServices.filter((service) => {104 return service.uuid == services.controlService.uuid105 });106 let commandReadChar = requestedCharacteristics.filter((char) => {107 return char.uuid == characteristics.commandReadCharacteristic.uuid108 });109 let commandWriteChar = requestedCharacteristics.filter((char) => {110 return char.uuid == characteristics.commandWriteCharacteristic.uuid111 });112 // Before having access to IMU, EMG and Pose data, we need to indicate to the Myo that we want to receive this data.113 return server.getPrimaryService(controlService[0].uuid)114 .then(service => {115 console.log('getting service: ', controlService[0].name);116 return service.getCharacteristic(commandWriteChar[0].uuid);117 })118 .then(characteristic => {119 console.log('getting characteristic: ', commandWriteChar[0].name);120 // return new Buffer([0x01,3,emg_mode,imu_mode,classifier_mode]);121 // The values passed in the buffer indicate that we want to receive all data without restriction;122 // let commandValue = new Uint8Array([0x01,0x03,0x02,0x03,0x01]);123 //this could be config info to be sent to the wearable device124 let commandValue = new Uint8Array([0x99]);125 // characteristic.writeValue(commandValue); //disable initial write to device126 })127 .then(_ => {128 let deviceDataChar = requestedCharacteristics.filter((char) => {129 return char.uuid == characteristics.deviceDataCharacteristic.uuid130 });131 console.log('getting service: ', controlService[0].name);132 _this.getdeviceData(controlService[0], deviceDataChar[0], server);133 })134 .catch(error => {135 console.log('error: ', error);136 })137 }138 sendControlService(requestedServices, requestedCharacteristics, server) {139 let controlService = requestedServices.filter((service) => {140 return service.uuid == services.controlService.uuid141 });142 let commandReadChar = requestedCharacteristics.filter((char) => {143 return char.uuid == characteristics.commandReadCharacteristic.uuid144 });145 let commandWriteChar = requestedCharacteristics.filter((char) => {146 return char.uuid == characteristics.commandWriteCharacteristic.uuid147 });148 // Before having access to sensor, we need to indicate to the Tingle that we want to receive this data.149 return server.getPrimaryService(controlService[0].uuid)150 .then(service => {151 console.log('getting service: ', controlService[0].name);152 return service.getCharacteristic(commandWriteChar[0].uuid);153 })154 .then(characteristic => {155 console.log('getting write command to device characteristic: ', commandWriteChar[0].name);156 // return new Buffer([0x01,3,emg_mode,imu_mode,classifier_mode]);157 // The values passed in the buffer indicate that we want to receive all data without restriction;158 let commandValue = new Uint8Array([0x99]);159 getConfig();160 commandValue[0] = targetCommand;161 console.log("CONFIG target:" + activeTarget + " command:" + commandValue[0]);162 characteristic.writeValue(commandValue);163 })164 .then(_ => {165 // let deviceDataChar = requestedCharacteristics.filter((char) => {return char.uuid == characteristics.deviceDataCharacteristic.uuid});166 console.log("COMMAND SENT TO DEVICE");167 sendCommandFlag = false;168 // console.log('getting service: ', controlService[0].name);169 // _this.getdeviceData(controlService[0], deviceDataChar[0], server);170 })171 .catch(error => {172 sendCommandFlag = false;173 console.log("COMMAND SEND ERROR");174 console.log('error: ', error);175 })176 }177 handleDeviceDataChanged(event) {178 //byteLength of deviceData DataView object is 20.179 // deviceData return {{orientation: {w: *, x: *, y: *, z: *}, accelerometer: Array, gyroscope: Array}}180 let deviceData = event.target.value;181 let accelerometerRoll = ( (event.target.value.getUint8(0) / 255) * 360 );182 let accelerometerPitch = ( (event.target.value.getUint8(1) / 255) * 360 );183 let proximity = (event.target.value.getUint8(2) );184 let objectTemp1 = (event.target.value.getUint8(3) / 8) + 70;185 let objectTemp2 = (event.target.value.getUint8(4) / 8) + 70;186 let objectTemp3 = (event.target.value.getUint8(5) / 8) + 70;187 let objectTemp4 = (event.target.value.getUint8(6) / 8) + 70;188 let ambientAverage = (event.target.value.getUint8(7) / 8) + 70;189 let batteryVoltage = (event.target.value.getUint8(8) );190 let deviceCommand = (event.target.value.getUint8(9) );191 let accelerometerX = (event.target.value.getUint8(10) / 100) - 1;192 let accelerometerY = (event.target.value.getUint8(11) / 100) - 1;193 let accelerometerZ = (event.target.value.getUint8(12) / 100) - 1;194 let objectTemp1norm = (event.target.value.getUint8(13) / 255 );195 let objectTemp2norm = (event.target.value.getUint8(14) / 255 );196 let objectTemp3norm = (event.target.value.getUint8(15) / 255 );197 let objectTemp4norm = (event.target.value.getUint8(16) / 255 );198 let deviceNN5 = (event.target.value.getUint8(17) / 255 );199 let deviceNN7 = (event.target.value.getUint8(18) / 255 );200 console.log(accelerometerRoll + " " + accelerometerPitch + " " + proximity + " " + objectTemp1 + " " + objectTemp2 + " " + objectTemp3 + " " + objectTemp4 + " " + objectTemp1norm + " " + objectTemp2norm + " " + objectTemp3norm + " " + objectTemp4norm + " " + ambientAverage + " " + batteryVoltage);201 console.log("DEVICE NN5: " + deviceNN5 + " DEVICE NN7: " + deviceNN7);202 var data = {203 accelerometer: {204 pitch: accelerometerPitch,205 roll: accelerometerRoll,206 x: accelerometerX,207 y: accelerometerY,208 z: accelerometerZ209 },210 objectTemp: {211 a: objectTemp1,212 b: objectTemp2,213 c: objectTemp3,214 d: objectTemp4,215 e: objectTemp1norm,216 f: objectTemp2norm,217 g: objectTemp3norm,218 h: objectTemp4norm219 },220 ambientTemp: {221 a: ambientAverage222 },223 proximityData: {224 a: proximity225 },226 batteryData: {227 a: batteryVoltage228 },229 detectionData: {230 a: deviceNN5,231 b: deviceNN7232 }233 }234 state = {235 orientation: data.orientation,236 accelerometer: data.accelerometer,237 objectTemp: data.objectTemp,238 ambientTemp: data.ambientTemp,239 proximityData: data.proximityData,240 battery: data.batteryData,241 deviceDetect: data.detectionData242 }243 //move this out of state change 244 if (sendCommandFlag) {245 //this.standardServer = server;246 for (var i = 0; i < 3; i++) {247 // sendControlService();248 _this.sendControlService([services.controlService, ], [characteristics.commandReadCharacteristic, characteristics.commandWriteCharacteristic, characteristics.deviceDataCharacteristic], _this.standardServer);249 }250 sendCommandFlag = false;251 }252 _this.onStateChangeCallback(state);253 }254 onStateChangeCallback() {}255 getdeviceData(service, characteristic, server) {256 return server.getPrimaryService(service.uuid)257 .then(newService => {258 console.log('getting characteristic: ', characteristic.name);259 return newService.getCharacteristic(characteristic.uuid)260 })261 .then(char => {262 char.startNotifications().then(res => {263 char.addEventListener('characteristicvaluechanged', _this.handleDeviceDataChanged);264 })265 })266 }267 onStateChange(callback) {268 _this.onStateChangeCallback = callback;269 }270}271/*******************************************************************************************************************272 *********************************************** INITIALIZE *********************************************************273 ********************************************************************************************************************/274//sensor array sample data275var sensorDataArray = new Array(18).fill(0);276var masterDataArray = new Array(42);277for (var i = 0; i < masterDataArray.length; i++) {278 masterDataArray[i] = new Array;279}280var batteryVoltage;281var selectedTargetNum = 0; //starting target number index282var selectedTargetName = "sh-r-eyes-select"; //starting target ID283//sensor array sample data FOR CUSTOM TRAINING284var NN1TrueDataArray = new Array;285var NN1FalseDataArray = new Array;286var NN2TrueDataArray = new Array;287var NN2FalseDataArray = new Array;288var NN1Architecture = 'none';289var NN2Architecture = 'none';290var NN1NumInputs = 5;291var NN2NumInputs = 7;292//master session data array of arrays293var sensorDataSession = [];294//which samples in the session data array are part of a particular sample set295var sessionSampleSetIndex = [];296var getSamplesFlag = 0;297var getSamplesTypeFlag = 0; //0=none 1=NN1T 2=NN1F 3=NN2T 4=NN2F298//do we have a trained NN to apply to live sensor data?299var haveNNFlag1 = false;300var trainNNFlag1 = false;301var activeNNFlag1 = false;302var haveNNFlag2 = false;303var trainNNFlag2 = false;304var activeNNFlag2 = false;305//stored MM models306var loadNNFlag = false;307var loadNNTargetSelect;308var loadNNData5 = new Array(500).fill(0);309var loadNNData7 = new Array(575).fill(0);310//NN scores311var scoreArray = new Array(1).fill(0);312var scoreArraySmooth = new Array(2);313scoreArraySmooth[0] = 0.5;314scoreArraySmooth[1] = 0.5;315var pastDataNN1 = new Array(5).fill(0.5);316var pastDataNN2 = new Array(5).fill(0.5);317var initialised = false;318var timeout = null;319$(document).ready(function() {320 /*******************************************************************************************************************321 *********************************************** WEB BLUETOOTH ******************************************************322 ********************************************************************************************************************/323 //Web Bluetooth connection button and ongoing device data update function324 button.onclick = function(e) {325 var sensorController = new ControllerWebBluetooth("Tingle");326 sensorController.connect();327 //ON SENSOR DATA UPDATE328 sensorController.onStateChange(function(state) {329 bluetoothDataFlag = true;330 });331 //check for new data every X milliseconds - this is to decouple execution from Web Bluetooth actions332 setInterval(function() {333 // bluetoothDataFlag = getBluetoothDataFlag();334 if (bluetoothDataFlag == true) {335 // state = getState();336 /* objectTempData = state.objectTemp;337 proximityData = state.proximityData;338 accelerometerData = state.accelerometer;339 ambientTempData = state.ambientTemp;340 heartRateData = state.heartRate; */341 timeStamp = new Date().getTime();342 //load data into global array343 sensorDataArray = new Array(18).fill(0);344 sensorDataArray[0] = state.objectTemp.a.toFixed(1);345 sensorDataArray[1] = state.objectTemp.b.toFixed(1);346 sensorDataArray[2] = state.objectTemp.c.toFixed(1);347 sensorDataArray[3] = state.objectTemp.d.toFixed(1);348 sensorDataArray[4] = state.proximityData.a.toFixed(1);349 sensorDataArray[5] = state.accelerometer.pitch.toFixed(1);350 sensorDataArray[6] = state.accelerometer.roll.toFixed(1);351 sensorDataArray[7] = state.accelerometer.x.toFixed(2);352 sensorDataArray[8] = state.accelerometer.y.toFixed(2);353 sensorDataArray[9] = state.accelerometer.z.toFixed(2);354 sensorDataArray[10] = state.ambientTemp.a.toFixed(2);355 sensorDataArray[11] = state.objectTemp.e.toFixed(4);356 sensorDataArray[12] = state.objectTemp.f.toFixed(4);357 sensorDataArray[13] = state.objectTemp.g.toFixed(4);358 sensorDataArray[14] = state.objectTemp.h.toFixed(4);359 sensorDataArray[15] = timeStamp;360 batteryVoltage = state.battery.a.toFixed(2);361 //update time series chart362 var rawThermo1Chart = ((sensorDataArray[0] - 76) / 24);363 var rawThermo2Chart = ((sensorDataArray[1] - 76) / 24);364 var rawThermo3Chart = ((sensorDataArray[2] - 76) / 24);365 var rawThermo4Chart = ((sensorDataArray[3] - 76) / 24);366 var rawPitchChart = (sensorDataArray[5] / 400);367 var rawRollChart = (sensorDataArray[6] / 400);368 var rawProximityChart = (sensorDataArray[4] / 270);369 //sensor values in bottom 2/3 of chart , 1/10 height each370 rawThermo1Chart = (rawThermo1Chart / 4.5) + 5.5 * 0.1;371 rawThermo2Chart = (rawThermo2Chart / 4.5) + 5 * 0.1;372 rawThermo3Chart = (rawThermo3Chart / 4.5) + 4.5 * 0.1;373 rawThermo4Chart = (rawThermo4Chart / 4.5) + 4 * 0.1;374 rawPitchChart = (rawPitchChart / 7) + 3 * 0.1;375 rawRollChart = (rawRollChart / 7) + 2 * 0.1;376 rawProximityChart = (rawProximityChart / 10) + 1 * 0.1;377 lineThermo1.append(timeStamp, rawThermo1Chart);378 lineThermo2.append(timeStamp, rawThermo2Chart);379 lineThermo3.append(timeStamp, rawThermo3Chart);380 lineThermo4.append(timeStamp, rawThermo4Chart);381 linePitch.append(timeStamp, rawPitchChart);382 lineRoll.append(timeStamp, rawRollChart);383 lineProximity.append(timeStamp, rawProximityChart);384 //if data sample collection has been flagged385 // getSensorData();386 if (getSamplesFlag > 0) {387 collectData();388 } else if (trainNNFlag1 || trainNNFlag2) {389 //don't do anything390 } else {391 if (haveNNFlag1 && activeNNFlag1) { //we have a NN and we want to apply to current sensor data392 getNNScore(1);393 } else if( loadNNFlag ){ //run loaded model394 getNNScore(1);395 }396 if (haveNNFlag2 && activeNNFlag2) { //we have a NN and we want to apply to current sensor data397 getNNScore(2);398 } else if( loadNNFlag ){ //run loaded model399 getNNScore(2);400 } 401 }402 displayData();403 bluetoothDataFlag = false;404 }405 }, 200); // throttle 100 = 10Hz limit406 }407 /*******************************************************************************************************************408 **************************************** STREAMING SENSOR DATA CHART ***********************************************409 *******************************************************************************************************************/410 //add smoothie.js time series streaming data chart411 var chartHeight = 100;412 var chartWidth = $(window).width();413 $("#streaming-data-chart").html('<canvas id="chart-canvas" width="' + chartWidth + '" height="' + chartHeight + '"></canvas>');414 var streamingChart = new SmoothieChart({/* grid: { strokeStyle:'rgb(125, 0, 0)', fillStyle:'rgb(60, 0, 0)', lineWidth: 1, millisPerLine: 250, verticalSections: 6, }, labels: { fillStyle:'rgb(60, 0, 0)' } */ });415streamingChart.streamTo(document.getElementById("chart-canvas"), 350 /*delay*/ );416 var lineThermo1 = new TimeSeries();417 var lineThermo2 = new TimeSeries();418 var lineThermo3 = new TimeSeries();419 var lineThermo4 = new TimeSeries();420 var linePitch = new TimeSeries();421 var lineRoll = new TimeSeries();422 var lineProximity = new TimeSeries();423 var lineNN1 = new TimeSeries();424 var lineNN2 = new TimeSeries();425 var lineNN1Smooth = new TimeSeries();426 var lineNN2Smooth = new TimeSeries();427 var lineNN1Var = new TimeSeries();428 var lineNN2Var = new TimeSeries();429 var lineNNAv = new TimeSeries();430 streamingChart.addTimeSeries(lineThermo1, {431 strokeStyle: 'rgb(133, 87, 35)',432 lineWidth: 3433 });434 streamingChart.addTimeSeries(lineThermo2, {435 strokeStyle: 'rgb(185, 156, 107)',436 lineWidth: 3437 });438 streamingChart.addTimeSeries(lineThermo3, {439 strokeStyle: 'rgb(143, 59, 27)',440 lineWidth: 3441 });442 streamingChart.addTimeSeries(lineThermo4, {443 strokeStyle: 'rgb(213, 117, 0)',444 lineWidth: 3445 });446 streamingChart.addTimeSeries(linePitch, {447 strokeStyle: 'rgb(128, 128, 128)',448 lineWidth: 3449 });450 streamingChart.addTimeSeries(lineRoll, {451 strokeStyle: 'rgb(240, 240, 240)',452 lineWidth: 3453 });454 streamingChart.addTimeSeries(lineProximity, {455 strokeStyle: 'rgb(128, 128, 255)',456 lineWidth: 3457 });458 streamingChart.addTimeSeries(lineNN1, {459 strokeStyle: 'rgb(72, 244, 68)',460 lineWidth: 4461 });462 streamingChart.addTimeSeries(lineNN2, {463 strokeStyle: 'rgb(244, 66, 66)',464 lineWidth: 4465 });466 streamingChart.addTimeSeries(lineNN1Smooth, {467 strokeStyle: 'rgb(58, 230, 54)',468 lineWidth: 3469 });470 streamingChart.addTimeSeries(lineNN2Smooth, {471 strokeStyle: 'rgb(230, 52, 52)',472 lineWidth: 3473 });474 streamingChart.addTimeSeries(lineNN1Var, {475 strokeStyle: 'rgb(38, 210, 32)',476 lineWidth: 3477 });478 streamingChart.addTimeSeries(lineNN2Var, {479 strokeStyle: 'rgb(210, 30, 30)',480 lineWidth: 3481 });482 streamingChart.addTimeSeries(lineNNAv, {483 strokeStyle: 'rgb(255, 0, 255)',484 lineWidth: 4485 });486 //min/max streaming chart button487 $('#circleDrop').click(function() {488 $('.card-middle').slideToggle();489 $('.close').toggleClass('closeRotate');490 var chartHeight = $(window).height() / 1.2;491 var chartWidth = $(window).width();492 if ($("#chart-size-button").hasClass('closeRotate')) {493 $("#streaming-data-chart").html('<canvas id="chart-canvas" width="' + chartWidth + '" height="' + chartHeight + '"></canvas>');494 } else {495 $("#streaming-data-chart").html('<canvas id="chart-canvas" width="' + chartWidth + '" height="' + 100 + '"></canvas>');496 }497 //hide controls498 $("#basic-interface-container, #hand-head-ui-container, #nn-slide-controls, .console, #interface-controls, #dump-print, #record-controls").toggleClass("hide-for-chart");499 //redraw chart500 streamingChart.streamTo(document.getElementById("chart-canvas"), 350 /*delay*/ );501 });502 function displayData() {503 var objectTempElement1 = document.getElementsByClassName('object-temp-1-data')[0];504 objectTempElement1.innerHTML = sensorDataArray[0];505 var objectTempElement2 = document.getElementsByClassName('object-temp-2-data')[0];506 objectTempElement2.innerHTML = sensorDataArray[1];507 var objectTempElement3 = document.getElementsByClassName('object-temp-3-data')[0];508 objectTempElement3.innerHTML = sensorDataArray[2];509 var objectTempElement4 = document.getElementsByClassName('object-temp-4-data')[0];510 objectTempElement4.innerHTML = sensorDataArray[3];511 var proximityElement = document.getElementsByClassName('proximity-data')[0];512 proximityElement.innerHTML = sensorDataArray[4];513 var accelerometerPitchDiv = document.getElementsByClassName('accelerometer-pitch-data')[0];514 accelerometerPitchDiv.innerHTML = sensorDataArray[5];515 var accelerometerRollDiv = document.getElementsByClassName('accelerometer-roll-data')[0];516 accelerometerRollDiv.innerHTML = sensorDataArray[6];517 var accelerometerXElement = document.getElementsByClassName('accelerometer-x-data')[0];518 accelerometerXElement.innerHTML = sensorDataArray[7];519 var accelerometerYElement = document.getElementsByClassName('accelerometer-y-data')[0];520 accelerometerYElement.innerHTML = sensorDataArray[8];521 var accelerometerZElement = document.getElementsByClassName('accelerometer-z-data')[0];522 accelerometerZElement.innerHTML = sensorDataArray[9];523 var ambientTempAverageElement = document.getElementsByClassName('ambient-temp-average-data')[0];524 ambientTempAverageElement.innerHTML = sensorDataArray[10];525 var batteryDataElement = document.getElementsByClassName('battery-data')[0];526 batteryDataElement.innerHTML = batteryVoltage;527 }528 function updateSampleCountDisplay() {529 $('.message-nn1-true').html(NN1TrueDataArray.length);530 $('.message-nn1-false').html(NN1FalseDataArray.length);531 $('.message-nn2-true').html(NN2TrueDataArray.length);532 $('.message-nn2-false').html(NN2FalseDataArray.length);533 }534 /**********************************************************************************************************535 ********************************** COLLECT SENSOR DATA ***************************************************536 **********************************************************************************************************/537 function collectData() {538 var collectedDataArray = new Array(18).fill(0); //12 device 539 collectedDataArray = sensorDataArray;540 console.log("web bluetooth sensor data:");541 console.dir(collectedDataArray);542 //add sample to set543 sensorDataSession.push(collectedDataArray);544 //add to master545 masterDataArray[selectedTargetNum].push(sensorDataArray);546 $( "span[data='" + selectedTargetNum + "']" ).html(masterDataArray[selectedTargetNum].length);547 if (getSamplesTypeFlag == 1) {548 //add to master549 // masterDataArray[selectedTargetNum].push(collectedDataArray);550 // $( "span[data='" + selectedTargetNum + "']" ).html(masterDataArray[selectedTargetNum].length);551 NN1TrueDataArray.push(collectedDataArray);552 $('.message-nn1-true').html(NN1TrueDataArray.length);553 } else if (getSamplesTypeFlag == 2) {554 NN1FalseDataArray.push(collectedDataArray);555 $('.message-nn1-false').html(NN1FalseDataArray.length);556 } else if (getSamplesTypeFlag == 3) {557 NN2TrueDataArray.push(collectedDataArray);558 $('.message-nn2-true').html(NN2TrueDataArray.length);559 } else if (getSamplesTypeFlag == 4) {560 NN2FalseDataArray.push(collectedDataArray);561 $('.message-nn2-false').html(NN2FalseDataArray.length);562 }563 console.log("Set Index: ");564 console.dir(sessionSampleSetIndex);565 //countdown for data collection566 getSamplesFlag = getSamplesFlag - 1;567 }568 /*******************************************************************************************************************569 *********************************************** NEURAL NETWORKS ****************************************************570 ********************************************************************************************************************/571 /**572 * Attach synaptic neural net components to app object573 */574 var nnRate = $("#rate-input").val();575 var nnIterations = $("#iterations-input").val();576 var nnError = $("#error-input").val();577 // ************** NEURAL NET #1578 var Neuron = synaptic.Neuron;579 var Layer = synaptic.Layer;580 var Network = synaptic.Network;581 var Trainer = synaptic.Trainer;582 var Architect = synaptic.Architect;583 var neuralNet = new Architect.LSTM(5, 5, 2, 1);584 var trainer = new Trainer(neuralNet);585 var trainingData;586 // ************* NEURAL NET #2587 var Neuron2 = synaptic.Neuron;588 var Layer2 = synaptic.Layer;589 var Network2 = synaptic.Network;590 var Trainer2 = synaptic.Trainer;591 var Architect2 = synaptic.Architect;592 var neuralNet2 = new Architect2.LSTM(7, 5, 2, 1);593 var trainer2 = new Trainer2(neuralNet2);594 var trainingData2;595 /**********************************************************************************************************596 ********************************** GET NEURAL NETWORK MODEL SCORE *****************************************597 **********************************************************************************************************/598 function getNNScore(selectNN) {599 var scoreArray = new Array(1).fill(0);600 var timeStamp = new Date().getTime();601 var displayScore;602 if (selectNN == 1) {603 var feedArray = new Array(5).fill(0);604 if(preProcess == 1){605 feedArray[0] = sensorDataArray[0] / 101;606 feedArray[1] = sensorDataArray[1] / 101;607 feedArray[2] = sensorDataArray[2] / 101;608 feedArray[3] = sensorDataArray[3] / 101; 609 } else if(preProcess == 2) {610 feedArray[0] = (sensorDataArray[0] - 69) / (101 - 69);611 feedArray[1] = (sensorDataArray[1] - 69) / (101 - 69);612 feedArray[2] = (sensorDataArray[2] - 69) / (101 - 69);613 feedArray[3] = (sensorDataArray[3] - 69) / (101 - 69);614 } else if(preProcess == 3) {615 feedArray[0] = sensorDataArray[11];616 feedArray[1] = sensorDataArray[12];617 feedArray[2] = sensorDataArray[13];618 feedArray[3] = sensorDataArray[14]; 619 } else if(preProcess == 4) {620 var thermSampAv = ( (parseFloat(sensorDataArray[0]) - 69) + (parseFloat(sensorDataArray[1]) - 69) + (parseFloat(sensorDataArray[2]) - 69) + (parseFloat(sensorDataArray[3]) - 69)) / 4;621 feedArray[0] = (sensorDataArray[0] - 69) / thermSampAv - 0.5;622 feedArray[1] = (sensorDataArray[1] - 69) / thermSampAv - 0.5;623 feedArray[2] = (sensorDataArray[2] - 69) / thermSampAv - 0.5;624 feedArray[3] = (sensorDataArray[3] - 69) / thermSampAv - 0.5; 625 } else if(preProcess == 5) {626 var thermSampMin = Math.min( parseFloat(sensorDataArray[0]), Math.min( parseFloat(sensorDataArray[1]), Math.min( parseFloat(sensorDataArray[2]), parseFloat(sensorDataArray[3]) ) ) );627 feedArray[0] = (sensorDataArray[0] - 69) / (thermSampMin - 69);628 feedArray[1] = (sensorDataArray[1] - 69) / (thermSampMin - 69);629 feedArray[2] = (sensorDataArray[2] - 69) / (thermSampMin - 69);630 feedArray[3] = (sensorDataArray[3] - 69) / (thermSampMin - 69);631 }632 feedArray[4] = sensorDataArray[4] / 250;633 // use trained NN or loaded NN634 if (haveNNFlag1 && activeNNFlag1) {635 scoreArray = neuralNet.activate(feedArray); //RUN TRAINED NN MODEL636 } else if (loadNNFlag) {637 scoreArray = runStoredModel5(feedArray); //RUN STORED NN MODEL638 }639 console.log("NN1 FEED ARRAY: " + feedArray);640 console.log("NN1 SCORE ARRAY: " + scoreArray);641 displayScore = scoreArray[0].toFixed(4) * 100;642 displayScore = displayScore.toFixed(2);643 $(".message-nn1-score").html(displayScore + '%');644 var rawLineNN1Chart = scoreArray[0].toFixed(4);645 rawLineNN1Chart = (rawLineNN1Chart / 2) + 0.7;646 lineNN1.append(timeStamp, rawLineNN1Chart);647 //RUNNING AVERAGE648 scoreArraySmooth[0] = (parseFloat(scoreArraySmooth[0]) + parseFloat(scoreArray[0]) ) / 2;649 var rawLineNN1ChartSmooth = scoreArraySmooth[0].toFixed(4);650 rawLineNN1ChartSmooth = (rawLineNN1ChartSmooth / 2) + 0.7;651 lineNN1Smooth.append(timeStamp, rawLineNN1ChartSmooth);652 console.log("rawLineNN1ChartSmooth: " + rawLineNN1ChartSmooth);653 //VARIANCE654 //update historical data and calcualte average655 var NN1Av = 0;656 for(var j = 0; j < 4; j++){ 657 pastDataNN1[j] = pastDataNN1[j + 1]; 658 NN1Av = NN1Av + pastDataNN1[j + 1];659 }660 pastDataNN1[4] = parseFloat(scoreArray[0]);661 NN1Av = (NN1Av + pastDataNN1[4]) / 5;662 //calculate variance663 var NN1Var = 0;664 for(var k = 0; k < 5; k++){ 665 NN1Var = NN1Var + Math.abs(NN1Av - pastDataNN1[k]);666 }667 NN1Var = NN1Var / 5;668 lineNN1Var.append(timeStamp, NN1Var);669 console.log("NN1 Variance: " + (NN1Var * 100));670 } else if (selectNN == 2) {671 var feedArray = new Array(7).fill(0);672 if(preProcess == 1){673 feedArray[0] = sensorDataArray[0] / 101;674 feedArray[1] = sensorDataArray[1] / 101;675 feedArray[2] = sensorDataArray[2] / 101;676 feedArray[3] = sensorDataArray[3] / 101; 677 } else if(preProcess == 2) {678 feedArray[0] = (sensorDataArray[0] - 69) / (101 - 69);679 feedArray[1] = (sensorDataArray[1] - 69) / (101 - 69);680 feedArray[2] = (sensorDataArray[2] - 69) / (101 - 69);681 feedArray[3] = (sensorDataArray[3] - 69) / (101 - 69);682 } else if(preProcess == 3) {683 feedArray[0] = sensorDataArray[11];684 feedArray[1] = sensorDataArray[12];685 feedArray[2] = sensorDataArray[13];686 feedArray[3] = sensorDataArray[14]; 687 } else if(preProcess == 4) {688 var thermSampAv = ( (parseFloat(sensorDataArray[0]) - 69) + (parseFloat(sensorDataArray[1]) - 69) + (parseFloat(sensorDataArray[2]) - 69) + (parseFloat(sensorDataArray[3]) - 69)) / 4;689 feedArray[0] = (sensorDataArray[0] - 69) / thermSampAv - 0.5;690 feedArray[1] = (sensorDataArray[1] - 69) / thermSampAv - 0.5;691 feedArray[2] = (sensorDataArray[2] - 69) / thermSampAv - 0.5;692 feedArray[3] = (sensorDataArray[3] - 69) / thermSampAv - 0.5; 693 } else if(preProcess == 5) {694 var thermSampMin = Math.min( parseFloat(sensorDataArray[0]), Math.min( parseFloat(sensorDataArray[1]), Math.min( parseFloat(sensorDataArray[2]), parseFloat(sensorDataArray[3]) ) ) );695 feedArray[0] = (sensorDataArray[0] - 69) / (thermSampMin - 69);696 feedArray[1] = (sensorDataArray[1] - 69) / (thermSampMin - 69);697 feedArray[2] = (sensorDataArray[2] - 69) / (thermSampMin - 69);698 feedArray[3] = (sensorDataArray[3] - 69) / (thermSampMin - 69);699 }700 feedArray[4] = sensorDataArray[4] / 250;701 feedArray[5] = sensorDataArray[5] / 360;702 feedArray[6] = sensorDataArray[6] / 360;703 if (haveNNFlag2 && activeNNFlag2) {704 scoreArray = neuralNet2.activate(feedArray); //RUN TRAINED NN MODEL705 } else if (loadNNFlag) {706 scoreArray = runStoredModel7(feedArray); //RUN STORED NN MODEL707 }708 console.log("NN2 FEED ARRAY: " + feedArray);709 console.log("NN2 SCORE ARRAY: " + scoreArray);710 displayScore = scoreArray[0].toFixed(4) * 100;711 displayScore = displayScore.toFixed(2);712 $(".message-nn2-score").html(displayScore + '%');713 var rawLineNN2Chart = scoreArray[0].toFixed(4);714 rawLineNN2Chart = (rawLineNN2Chart / 2) + 0.7;715 lineNN2.append(timeStamp, rawLineNN2Chart);716 //RUNNING AVERAGE717 scoreArraySmooth[1] = ( parseFloat(scoreArraySmooth[1]) + parseFloat(scoreArraySmooth[1]) + parseFloat(scoreArray[0]) ) / 3;718 var rawLineNN2ChartSmooth = scoreArraySmooth[1].toFixed(4);719 rawLineNN2ChartSmooth = (rawLineNN2ChartSmooth / 2) + 0.7;720 lineNN2Smooth.append(timeStamp, rawLineNN2ChartSmooth);721 console.log("rawLineNN2ChartSmooth: " + rawLineNN2ChartSmooth);722 //VARIANCE723 //update historical data and calcualte average724 var NN2Av = 0;725 for(var j = 0; j < 4; j++){ 726 pastDataNN2[j] = pastDataNN2[j + 1]; 727 NN2Av = NN2Av + pastDataNN2[j + 1];728 }729 pastDataNN2[4] = parseFloat(scoreArray[0]);730 NN2Av = (NN2Av + pastDataNN2[4]) / 5;731 //calculate variance732 var NN2Var = 0;733 for(var k = 0; k < 5; k++){ 734 NN2Var = NN2Var + Math.abs(NN2Av - pastDataNN2[k]);735 }736 NN2Var = NN2Var / 5;737 lineNN2Var.append(timeStamp, NN2Var);738 console.log("NN2 Variance: " + (NN2Var * 100));739 //PLOT AVERAGE OF NN1 and NN2740 var rawLineNNAv = ( parseFloat(scoreArraySmooth[0]) + parseFloat(scoreArraySmooth[1]) ) / 2;741 rawLineNNAv = (rawLineNNAv / 2) + 0.7;742 lineNNAv.append(timeStamp, rawLineNNAv);743 }744 }745 /**********************************************************************************************************746 ********************************** TRAIN NEURAL NETWORK MODEL *********************************************747 **********************************************************************************************************/748 function trainNN(selectNN) {749 //'5:2:1', '5:5:1', '5:5:2:1', '5:5:5:1', '7:2:1', '7:7:1', '7:7:2:1', '7:7:7:1'750 // var processedDataSession = sensorDataSession;751 var processedDataSession = new Array;752 var falseDataArray = new Array;753 var trueDataArray = new Array;754 trainingData = new Array;755 trainingData2 = new Array;756 nnRate = $("#rate-input").val();757 nnIterations = $("#iterations-input").val();758 nnError = $("#error-input").val();759 /* if (selectNN == 1) {760 trueDataArray = NN1TrueDataArray;761 falseDataArray = NN1FalseDataArray;762 } else if (selectNN == 2) {763 trueDataArray = NN2TrueDataArray;764 falseDataArray = NN2FalseDataArray;765 } */766 /* cycle the position text field inputs */767 console.log("***FINDING DATA TO TRAIN AGAINST***");768 $( ".target-select-text" ).each(function() {769 var positionSelectedSampleTotal = parseInt( $( this ).val() );770 var falseSelectElementID = $(this).attr("id"); 771 console.log(falseSelectElementID + " : " + positionSelectedSampleTotal);772 if(positionSelectedSampleTotal > 0){773 var falseSelectElementIndex = parseInt( $(this).attr("num") );774 // var falseSelectElementID = parseInt( $(this).attr("id") );775 var falseSelectLength = masterDataArray[falseSelectElementIndex].length;776 console.log("** " + positionSelectedSampleTotal + " SAMPLES FROM " + falseSelectElementID);777 console.log("false select length: " + falseSelectLength);778 //asking for more data than exists779 if(positionSelectedSampleTotal >= falseSelectLength){780 for(var j = 0; j < falseSelectLength; j++){781 falseDataArray.push(masterDataArray[falseSelectElementIndex][j]);782 }783 } else {784 /* var j=0;785 while(j < positionSelectedSampleTotal){786 var oneQuartPlace = Math.round( (falseSelectLength / 4) * 1) + j - 1; //get data from different places787 var midPlace = Math.round( (falseSelectLength / 4) * 2) + j - 1;788 var threeQuartPlace = Math.round( (falseSelectLength / 4) * 3) + j - 1;789 console.log("quarter place:" + oneQuartPlace + " half place:" + midPlace + " three quarter place:" + threeQuartPlace);790 if(j < positionSelectedSampleTotal){ falseDataArray.push(masterDataArray[falseSelectElementIndex][j]); j++;791 792 if(j < positionSelectedSampleTotal && oneQuartPlace < falseSelectLength){ falseDataArray.push(masterDataArray[falseSelectElementIndex][oneQuartPlace]); j++; 793 794 if(j < positionSelectedSampleTotal && midPlace < falseSelectLength){ falseDataArray.push(masterDataArray[falseSelectElementIndex][midPlace]); j++; 795 if(j < positionSelectedSampleTotal && threeQuartPlace < falseSelectLength){ falseDataArray.push(masterDataArray[falseSelectElementIndex][threeQuartPlace]); j++; }796 }797 }798 }799 } */800 var trackRandom = new Array(2000).fill(0);801 var countFalseSamples = 0;802 while(countFalseSamples < positionSelectedSampleTotal){803 //random sample in target position array of samples804 var randomSampleIndex = Math.floor(Math.random() * falseSelectLength) + 1;805 //make sure we haven't used this data point yet806 if(trackRandom[(randomSampleIndex - 1)] == 0){807 falseDataArray.push(masterDataArray[falseSelectElementIndex][(randomSampleIndex - 1)]);808 //done with that sample, make note in tracking array809 trackRandom[(randomSampleIndex - 1)] = 1;810 countFalseSamples++;811 }812 }813 }814 }815 });816 console.log("TRAINING AGAINST " + falseDataArray.length + " SAMPLES");817 console.log("FALSE DATA: " + falseDataArray);818 //true data is currently selected target819 trueDataArray = masterDataArray[selectedTargetNum];820 //ADD DUPLICATE TRUE DATA IF MORE FALSE DATA THAN TRUE DATA821 var trueDataCounter = 0;822 while(falseDataArray.length > trueDataArray.length){823 trueDataArray.push(masterDataArray[selectedTargetNum][trueDataCounter]);824 trueDataCounter++;825 if(trueDataCounter > (masterDataArray[selectedTargetNum].length - 1)) trueDataCounter = 0;826 }827 console.log("TRAINING FOR " + trueDataArray.length + "TARGET SAMPLES");828 //combine true and false data829 var addSample = new Array(18).fill(0);830 for (var j = 0; j < trueDataArray.length; j++) {831 addSample = trueDataArray[j];832 addSample[17] = 1; //true833 processedDataSession.push(addSample);834 }835 for (var k = 0; k < falseDataArray.length; k++) {836 addSample = falseDataArray[k];837 addSample[17] = 0; //false838 processedDataSession.push(addSample);839 }840 neuralNet = new Architect.LSTM(5, 5, 2, 1);841 trainer = new Trainer(neuralNet);842 neuralNet2 = new Architect.LSTM(7, 5, 2, 1);843 trainer2 = new Trainer2(neuralNet2);844 for (var i = 0; i < processedDataSession.length; i++) {845 var currentSample = processedDataSession[i];846 var outputArray = new Array(1).fill(0);847 outputArray[0] = currentSample[17]; //true or false848 var inputArray = new Array(5).fill(0);849 if(preProcess == 1){850 inputArray[0] = currentSample[0] / 101;851 inputArray[1] = currentSample[1] / 101;852 inputArray[2] = currentSample[2] / 101;853 inputArray[3] = currentSample[3] / 101; 854 } else if(preProcess == 2) {855 inputArray[0] = (currentSample[0] - 69) / (101 - 69);856 inputArray[1] = (currentSample[1] - 69) / (101 - 69);857 inputArray[2] = (currentSample[2] - 69) / (101 - 69);858 inputArray[3] = (currentSample[3] - 69) / (101 - 69);859 } else if(preProcess == 3) {860 inputArray[0] = currentSample[11];861 inputArray[1] = currentSample[12];862 inputArray[2] = currentSample[13];863 inputArray[3] = currentSample[14]; 864 } else if(preProcess == 4) {865 var thermSampAv = ( (parseFloat(currentSample[0]) - 69) + (parseFloat(currentSample[1]) - 69) + (parseFloat(currentSample[2]) - 69) + (parseFloat(currentSample[3]) - 69) ) / 4;866 console.log("average for norm: " + thermSampAv);867 inputArray[0] = ( (currentSample[0] - 69) / thermSampAv) - 0.5;868 inputArray[1] = ( (currentSample[1] - 69) / thermSampAv) - 0.5;869 inputArray[2] = ( (currentSample[2] - 69) / thermSampAv) - 0.5;870 inputArray[3] = ( (currentSample[3] - 69) / thermSampAv) - 0.5; 871 } else if(preProcess == 5) {872 var thermSampMin = Math.min( parseFloat(currentSample[0]), Math.min( parseFloat(currentSample[1]), Math.min( parseFloat(currentSample[2]), parseFloat(currentSample[3]) ) ) );873 inputArray[0] = (currentSample[0] - 69) / (thermSampMin - 69);874 inputArray[1] = (currentSample[1] - 69) / (thermSampMin - 69);875 inputArray[2] = (currentSample[2] - 69) / (thermSampMin - 69);876 inputArray[3] = (currentSample[3] - 69) / (thermSampMin - 69);877 }878 inputArray[4] = currentSample[4] / 250;879 var inputArray2 = new Array(7).fill(0);880 if(preProcess == 1){881 inputArray2[0] = currentSample[0] / 101;882 inputArray2[1] = currentSample[1] / 101;883 inputArray2[2] = currentSample[2] / 101;884 inputArray2[3] = currentSample[3] / 101; 885 } else if(preProcess == 2) {886 inputArray2[0] = (currentSample[0] - 69) / (101 - 69);887 inputArray2[1] = (currentSample[1] - 69) / (101 - 69);888 inputArray2[2] = (currentSample[2] - 69) / (101 - 69);889 inputArray2[3] = (currentSample[3] - 69) / (101 - 69);890 } else if(preProcess == 3) {891 inputArray2[0] = currentSample[11];892 inputArray2[1] = currentSample[12];893 inputArray2[2] = currentSample[13];894 inputArray2[3] = currentSample[14]; 895 } else if(preProcess == 4) {896 var thermSampAv = ( (parseFloat(currentSample[0]) - 69) + (parseFloat(currentSample[1]) - 69) + (parseFloat(currentSample[2]) - 69) + (parseFloat(currentSample[3]) - 69)) / 4;897 inputArray2[0] = ( (currentSample[0] - 69) / thermSampAv) - 0.5;898 inputArray2[1] = ( (currentSample[1] - 69) / thermSampAv) - 0.5;899 inputArray2[2] = ( (currentSample[2] - 69) / thermSampAv) - 0.5;900 inputArray2[3] = ( (currentSample[3] - 69) / thermSampAv) - 0.5; 901 } else if(preProcess == 5) {902 var thermSampMin = Math.min( parseFloat(currentSample[0]), Math.min( parseFloat(currentSample[1]), Math.min( parseFloat(currentSample[2]), parseFloat(currentSample[3]) ) ) );903 inputArray2[0] = (currentSample[0] - 69) / (thermSampMin - 69);904 inputArray2[1] = (currentSample[1] - 69) / (thermSampMin - 69);905 inputArray2[2] = (currentSample[2] - 69) / (thermSampMin - 69);906 inputArray2[3] = (currentSample[3] - 69) / (thermSampMin - 69);907 }908 inputArray2[4] = currentSample[4] / 250;909 inputArray2[5] = currentSample[5] / 360;910 inputArray2[6] = currentSample[6] / 360;911 trainingData.push({912 input: inputArray,913 output: outputArray914 });915 trainingData2.push({916 input: inputArray2,917 output: outputArray918 });919 console.log(currentSample + " TRAINING INPUT: " + inputArray + " --> NN# " + selectNN);920 console.log(currentSample + " TRAINING OUTPUT: " + outputArray + " --> NN# " + selectNN);921 }922 console.log("TRAINING ON selectNN1 --> interations:" + nnIterations + " error:" + nnError + " rate:" + nnRate);923 trainer.train(trainingData, {924 rate: nnRate,925 iterations: nnIterations,926 error: nnError,927 shuffle: true,928 log: 5,929 cost: Trainer.cost.CROSS_ENTROPY930 });931 //we have a trained NN to use932 haveNNFlag1 = true;933 trainNNFlag1 = false;934 $('#activate-btn').addClass("haveNN");935 $('#export-btn').addClass("haveNN");936 console.log("TRAINING ON selectNN2");937 trainer2.train(trainingData2, {938 rate: nnRate,939 iterations: nnIterations,940 error: nnError,941 shuffle: true,942 log: 5,943 cost: Trainer2.cost.CROSS_ENTROPY944 });945 //we have a trained NN to use946 haveNNFlag2 = true;947 trainNNFlag2 = false;948 $('#activate2-btn').addClass("haveNN");949 $('#export2-btn').addClass("haveNN");950 }951 952 /********************************************************************************************************************953 *********************************************** RUN STORED MODEL ****************************************************954 ********************************************************************************************************************/955 function runStoredModel5(feedArray){956 var output = [];957 var F1 = loadNNData5;958 F1[3] = feedArray[0];959 F1[5] = feedArray[1];960 F1[7] = feedArray[2];961 F1[9] = feedArray[3];962 F1[11] = feedArray[4];963 F1[0] = F1[1];F1[1] = F1[2];F1[1] += F1[3] * F1[4];F1[1] += F1[5] * F1[6];F1[1] += F1[7] * F1[8];F1[1] += F1[9] * F1[10];F1[1] += F1[11] * F1[12];F1[1] += F1[13] * F1[14];F1[1] += F1[15] * F1[16];F1[1] += F1[17] * F1[18];F1[1] += F1[19] * F1[20];F1[1] += F1[21] * F1[22];F1[23] = (1 / (1 + Math.exp(-F1[1])));F1[24] = F1[23] * (1 - F1[23]);F1[25] = F1[23];F1[26] = F1[23];F1[27] = F1[23];F1[28] = F1[23];F1[29] = F1[23];964 F1[30] = F1[31];F1[31] = F1[32];F1[31] += F1[3] * F1[33];F1[31] += F1[5] * F1[34];F1[31] += F1[7] * F1[35];F1[31] += F1[9] * F1[36];F1[31] += F1[11] * F1[37];F1[31] += F1[13] * F1[38];F1[31] += F1[15] * F1[39];F1[31] += F1[17] * F1[40];F1[31] += F1[19] * F1[41];F1[31] += F1[21] * F1[42];F1[43] = (1 / (1 + Math.exp(-F1[31])));F1[44] = F1[43] * (1 - F1[43]);F1[45] = F1[43];F1[46] = F1[43];F1[47] = F1[43];F1[48] = F1[43];F1[49] = F1[43];965 F1[50] = F1[51];F1[51] = F1[52];F1[51] += F1[3] * F1[53];F1[51] += F1[5] * F1[54];F1[51] += F1[7] * F1[55];F1[51] += F1[9] * F1[56];F1[51] += F1[11] * F1[57];F1[51] += F1[13] * F1[58];F1[51] += F1[15] * F1[59];F1[51] += F1[17] * F1[60];F1[51] += F1[19] * F1[61];F1[51] += F1[21] * F1[62];F1[63] = (1 / (1 + Math.exp(-F1[51])));F1[64] = F1[63] * (1 - F1[63]);F1[65] = F1[63];F1[66] = F1[63];F1[67] = F1[63];F1[68] = F1[63];F1[69] = F1[63];966 F1[70] = F1[71];F1[71] = F1[72];F1[71] += F1[3] * F1[73];F1[71] += F1[5] * F1[74];F1[71] += F1[7] * F1[75];F1[71] += F1[9] * F1[76];F1[71] += F1[11] * F1[77];F1[71] += F1[13] * F1[78];F1[71] += F1[15] * F1[79];F1[71] += F1[17] * F1[80];F1[71] += F1[19] * F1[81];F1[71] += F1[21] * F1[82];F1[83] = (1 / (1 + Math.exp(-F1[71])));F1[84] = F1[83] * (1 - F1[83]);F1[85] = F1[83];F1[86] = F1[83];F1[87] = F1[83];F1[88] = F1[83];F1[89] = F1[83];967 F1[90] = F1[91];F1[91] = F1[92];F1[91] += F1[3] * F1[93];F1[91] += F1[5] * F1[94];F1[91] += F1[7] * F1[95];F1[91] += F1[9] * F1[96];F1[91] += F1[11] * F1[97];F1[91] += F1[13] * F1[98];F1[91] += F1[15] * F1[99];F1[91] += F1[17] * F1[100];F1[91] += F1[19] * F1[101];F1[91] += F1[21] * F1[102];F1[103] = (1 / (1 + Math.exp(-F1[91])));F1[104] = F1[103] * (1 - F1[103]);F1[105] = F1[103];F1[106] = F1[103];F1[107] = F1[103];F1[108] = F1[103];F1[109] = F1[103];968 F1[110] = F1[111];F1[111] = F1[112];F1[111] += F1[3] * F1[113];F1[111] += F1[5] * F1[114];F1[111] += F1[7] * F1[115];F1[111] += F1[9] * F1[116];F1[111] += F1[11] * F1[117];F1[111] += F1[13] * F1[118];F1[111] += F1[15] * F1[119];F1[111] += F1[17] * F1[120];F1[111] += F1[19] * F1[121];F1[111] += F1[21] * F1[122];F1[123] = (1 / (1 + Math.exp(-F1[111])));F1[124] = F1[123] * (1 - F1[123]);F1[125] = F1[123];969 F1[126] = F1[127];F1[127] = F1[128];F1[127] += F1[3] * F1[129];F1[127] += F1[5] * F1[130];F1[127] += F1[7] * F1[131];F1[127] += F1[9] * F1[132];F1[127] += F1[11] * F1[133];F1[127] += F1[13] * F1[134];F1[127] += F1[15] * F1[135];F1[127] += F1[17] * F1[136];F1[127] += F1[19] * F1[137];F1[127] += F1[21] * F1[138];F1[139] = (1 / (1 + Math.exp(-F1[127])));F1[140] = F1[139] * (1 - F1[139]);F1[141] = F1[139];970 F1[142] = F1[143];F1[143] = F1[144];F1[143] += F1[3] * F1[145];F1[143] += F1[5] * F1[146];F1[143] += F1[7] * F1[147];F1[143] += F1[9] * F1[148];F1[143] += F1[11] * F1[149];F1[143] += F1[13] * F1[150];F1[143] += F1[15] * F1[151];F1[143] += F1[17] * F1[152];F1[143] += F1[19] * F1[153];F1[143] += F1[21] * F1[154];F1[155] = (1 / (1 + Math.exp(-F1[143])));F1[156] = F1[155] * (1 - F1[155]);F1[157] = F1[155];971 F1[158] = F1[159];F1[159] = F1[160];F1[159] += F1[3] * F1[161];F1[159] += F1[5] * F1[162];F1[159] += F1[7] * F1[163];F1[159] += F1[9] * F1[164];F1[159] += F1[11] * F1[165];F1[159] += F1[13] * F1[166];F1[159] += F1[15] * F1[167];F1[159] += F1[17] * F1[168];F1[159] += F1[19] * F1[169];F1[159] += F1[21] * F1[170];F1[171] = (1 / (1 + Math.exp(-F1[159])));F1[172] = F1[171] * (1 - F1[171]);F1[173] = F1[171];972 F1[174] = F1[175];F1[175] = F1[176];F1[175] += F1[3] * F1[177];F1[175] += F1[5] * F1[178];F1[175] += F1[7] * F1[179];F1[175] += F1[9] * F1[180];F1[175] += F1[11] * F1[181];F1[175] += F1[13] * F1[182];F1[175] += F1[15] * F1[183];F1[175] += F1[17] * F1[184];F1[175] += F1[19] * F1[185];F1[175] += F1[21] * F1[186];F1[187] = (1 / (1 + Math.exp(-F1[175])));F1[188] = F1[187] * (1 - F1[187]);F1[189] = F1[187];973 F1[190] = F1[191];F1[191] = F1[125] * F1[192] * F1[191] + F1[193];F1[191] += F1[3] * F1[194] * F1[25];F1[191] += F1[5] * F1[195] * F1[26];F1[191] += F1[7] * F1[196] * F1[27];F1[191] += F1[9] * F1[197] * F1[28];F1[191] += F1[11] * F1[198] * F1[29];F1[13] = (1 / (1 + Math.exp(-F1[191])));F1[199] = F1[13] * (1 - F1[13]);974 F1[200] = F1[201];F1[201] = F1[141] * F1[202] * F1[201] + F1[203];F1[201] += F1[3] * F1[204] * F1[45];F1[201] += F1[5] * F1[205] * F1[46];F1[201] += F1[7] * F1[206] * F1[47];F1[201] += F1[9] * F1[207] * F1[48];F1[201] += F1[11] * F1[208] * F1[49];F1[15] = (1 / (1 + Math.exp(-F1[201])));F1[209] = F1[15] * (1 - F1[15]);975 F1[210] = F1[211];F1[211] = F1[157] * F1[212] * F1[211] + F1[213];F1[211] += F1[3] * F1[214] * F1[65];F1[211] += F1[5] * F1[215] * F1[66];F1[211] += F1[7] * F1[216] * F1[67];F1[211] += F1[9] * F1[217] * F1[68];F1[211] += F1[11] * F1[218] * F1[69];F1[17] = (1 / (1 + Math.exp(-F1[211])));F1[219] = F1[17] * (1 - F1[17]);976 F1[220] = F1[221];F1[221] = F1[173] * F1[222] * F1[221] + F1[223];F1[221] += F1[3] * F1[224] * F1[85];F1[221] += F1[5] * F1[225] * F1[86];F1[221] += F1[7] * F1[226] * F1[87];F1[221] += F1[9] * F1[227] * F1[88];F1[221] += F1[11] * F1[228] * F1[89];F1[19] = (1 / (1 + Math.exp(-F1[221])));F1[229] = F1[19] * (1 - F1[19]);977 F1[230] = F1[231];F1[231] = F1[189] * F1[232] * F1[231] + F1[233];F1[231] += F1[3] * F1[234] * F1[105];F1[231] += F1[5] * F1[235] * F1[106];F1[231] += F1[7] * F1[236] * F1[107];F1[231] += F1[9] * F1[237] * F1[108];F1[231] += F1[11] * F1[238] * F1[109];F1[21] = (1 / (1 + Math.exp(-F1[231])));F1[239] = F1[21] * (1 - F1[21]);978 F1[240] = F1[241];F1[241] = F1[242];F1[241] += F1[3] * F1[243];F1[241] += F1[5] * F1[244];F1[241] += F1[7] * F1[245];F1[241] += F1[9] * F1[246];F1[241] += F1[11] * F1[247];F1[241] += F1[13] * F1[248];F1[241] += F1[15] * F1[249];F1[241] += F1[17] * F1[250];F1[241] += F1[19] * F1[251];F1[241] += F1[21] * F1[252];F1[253] = (1 / (1 + Math.exp(-F1[241])));F1[254] = F1[253] * (1 - F1[253]);F1[255] = F1[253];979 F1[256] = F1[257];F1[257] = F1[258];F1[257] += F1[3] * F1[259];F1[257] += F1[5] * F1[260];F1[257] += F1[7] * F1[261];F1[257] += F1[9] * F1[262];F1[257] += F1[11] * F1[263];F1[257] += F1[13] * F1[264];F1[257] += F1[15] * F1[265];F1[257] += F1[17] * F1[266];F1[257] += F1[19] * F1[267];F1[257] += F1[21] * F1[268];F1[269] = (1 / (1 + Math.exp(-F1[257])));F1[270] = F1[269] * (1 - F1[269]);F1[271] = F1[269];980 F1[272] = F1[273];F1[273] = F1[274];F1[273] += F1[3] * F1[275];F1[273] += F1[5] * F1[276];F1[273] += F1[7] * F1[277];F1[273] += F1[9] * F1[278];F1[273] += F1[11] * F1[279];F1[273] += F1[13] * F1[280];F1[273] += F1[15] * F1[281];F1[273] += F1[17] * F1[282];F1[273] += F1[19] * F1[283];F1[273] += F1[21] * F1[284];F1[285] = (1 / (1 + Math.exp(-F1[273])));F1[286] = F1[285] * (1 - F1[285]);F1[287] = F1[285];981 F1[288] = F1[289];F1[289] = F1[290];F1[289] += F1[3] * F1[291];F1[289] += F1[5] * F1[292];F1[289] += F1[7] * F1[293];F1[289] += F1[9] * F1[294];F1[289] += F1[11] * F1[295];F1[289] += F1[13] * F1[296];F1[289] += F1[15] * F1[297];F1[289] += F1[17] * F1[298];F1[289] += F1[19] * F1[299];F1[289] += F1[21] * F1[300];F1[301] = (1 / (1 + Math.exp(-F1[289])));F1[302] = F1[301] * (1 - F1[301]);F1[303] = F1[301];982 F1[304] = F1[305];F1[305] = F1[306];F1[305] += F1[3] * F1[307];F1[305] += F1[5] * F1[308];F1[305] += F1[7] * F1[309];F1[305] += F1[9] * F1[310];F1[305] += F1[11] * F1[311];F1[305] += F1[13] * F1[312];F1[305] += F1[15] * F1[313];F1[305] += F1[17] * F1[314];F1[305] += F1[19] * F1[315];F1[305] += F1[21] * F1[316];F1[317] = (1 / (1 + Math.exp(-F1[305])));F1[318] = F1[317] * (1 - F1[317]);F1[319] = F1[317];983 F1[320] = F1[321];F1[321] = F1[322];F1[321] += F1[3] * F1[323];F1[321] += F1[5] * F1[324];F1[321] += F1[7] * F1[325];F1[321] += F1[9] * F1[326];F1[321] += F1[11] * F1[327];F1[321] += F1[13] * F1[328];F1[321] += F1[15] * F1[329];F1[321] += F1[17] * F1[330];F1[321] += F1[19] * F1[331];F1[321] += F1[21] * F1[332];F1[321] += F1[333] * F1[334];F1[321] += F1[335] * F1[336];F1[337] = (1 / (1 + Math.exp(-F1[321])));F1[338] = F1[337] * (1 - F1[337]);F1[339] = F1[337];F1[340] = F1[337];F1[341] = F1[337];F1[342] = F1[337];F1[343] = F1[337];F1[344] = F1[337];F1[345] = F1[337];F1[346] = F1[337];F1[347] = F1[337];F1[348] = F1[337];984 F1[349] = F1[350];F1[350] = F1[351];F1[350] += F1[3] * F1[352];F1[350] += F1[5] * F1[353];F1[350] += F1[7] * F1[354];F1[350] += F1[9] * F1[355];F1[350] += F1[11] * F1[356];F1[350] += F1[13] * F1[357];F1[350] += F1[15] * F1[358];F1[350] += F1[17] * F1[359];F1[350] += F1[19] * F1[360];F1[350] += F1[21] * F1[361];F1[350] += F1[333] * F1[362];F1[350] += F1[335] * F1[363];F1[364] = (1 / (1 + Math.exp(-F1[350])));F1[365] = F1[364] * (1 - F1[364]);F1[366] = F1[364];F1[367] = F1[364];F1[368] = F1[364];F1[369] = F1[364];F1[370] = F1[364];F1[371] = F1[364];F1[372] = F1[364];F1[373] = F1[364];F1[374] = F1[364];F1[375] = F1[364];985 F1[376] = F1[377];F1[377] = F1[378];F1[377] += F1[3] * F1[379];F1[377] += F1[5] * F1[380];F1[377] += F1[7] * F1[381];F1[377] += F1[9] * F1[382];F1[377] += F1[11] * F1[383];F1[377] += F1[13] * F1[384];F1[377] += F1[15] * F1[385];F1[377] += F1[17] * F1[386];F1[377] += F1[19] * F1[387];F1[377] += F1[21] * F1[388];F1[377] += F1[333] * F1[389];F1[377] += F1[335] * F1[390];F1[391] = (1 / (1 + Math.exp(-F1[377])));F1[392] = F1[391] * (1 - F1[391]);F1[393] = F1[391];986 F1[394] = F1[395];F1[395] = F1[396];F1[395] += F1[3] * F1[397];F1[395] += F1[5] * F1[398];F1[395] += F1[7] * F1[399];F1[395] += F1[9] * F1[400];F1[395] += F1[11] * F1[401];F1[395] += F1[13] * F1[402];F1[395] += F1[15] * F1[403];F1[395] += F1[17] * F1[404];F1[395] += F1[19] * F1[405];F1[395] += F1[21] * F1[406];F1[395] += F1[333] * F1[407];F1[395] += F1[335] * F1[408];F1[409] = (1 / (1 + Math.exp(-F1[395])));F1[410] = F1[409] * (1 - F1[409]);F1[411] = F1[409];987 F1[412] = F1[413];F1[413] = F1[393] * F1[414] * F1[413] + F1[415];F1[413] += F1[3] * F1[416] * F1[339];F1[413] += F1[5] * F1[417] * F1[340];F1[413] += F1[7] * F1[418] * F1[341];F1[413] += F1[9] * F1[419] * F1[342];F1[413] += F1[11] * F1[420] * F1[343];F1[413] += F1[13] * F1[421] * F1[344];F1[413] += F1[15] * F1[422] * F1[345];F1[413] += F1[17] * F1[423] * F1[346];F1[413] += F1[19] * F1[424] * F1[347];F1[413] += F1[21] * F1[425] * F1[348];F1[333] = (1 / (1 + Math.exp(-F1[413])));F1[426] = F1[333] * (1 - F1[333]);988 F1[427] = F1[428];F1[428] = F1[411] * F1[429] * F1[428] + F1[430];F1[428] += F1[3] * F1[431] * F1[366];F1[428] += F1[5] * F1[432] * F1[367];F1[428] += F1[7] * F1[433] * F1[368];F1[428] += F1[9] * F1[434] * F1[369];F1[428] += F1[11] * F1[435] * F1[370];F1[428] += F1[13] * F1[436] * F1[371];F1[428] += F1[15] * F1[437] * F1[372];F1[428] += F1[17] * F1[438] * F1[373];F1[428] += F1[19] * F1[439] * F1[374];F1[428] += F1[21] * F1[440] * F1[375];F1[335] = (1 / (1 + Math.exp(-F1[428])));F1[441] = F1[335] * (1 - F1[335]);989 F1[442] = F1[443];F1[443] = F1[444];F1[443] += F1[3] * F1[445];F1[443] += F1[5] * F1[446];F1[443] += F1[7] * F1[447];F1[443] += F1[9] * F1[448];F1[443] += F1[11] * F1[449];F1[443] += F1[13] * F1[450];F1[443] += F1[15] * F1[451];F1[443] += F1[17] * F1[452];F1[443] += F1[19] * F1[453];F1[443] += F1[21] * F1[454];F1[443] += F1[333] * F1[455];F1[443] += F1[335] * F1[456];F1[457] = (1 / (1 + Math.exp(-F1[443])));F1[458] = F1[457] * (1 - F1[457]);F1[459] = F1[457];990 F1[460] = F1[461];F1[461] = F1[462];F1[461] += F1[3] * F1[463];F1[461] += F1[5] * F1[464];F1[461] += F1[7] * F1[465];F1[461] += F1[9] * F1[466];F1[461] += F1[11] * F1[467];F1[461] += F1[13] * F1[468];F1[461] += F1[15] * F1[469];F1[461] += F1[17] * F1[470];F1[461] += F1[19] * F1[471];F1[461] += F1[21] * F1[472];F1[461] += F1[333] * F1[473];F1[461] += F1[335] * F1[474];F1[475] = (1 / (1 + Math.exp(-F1[461])));F1[476] = F1[475] * (1 - F1[475]);F1[477] = F1[475];991 F1[478] = F1[479];F1[479] = F1[480];F1[479] += F1[13] * F1[481] * F1[255];F1[479] += F1[15] * F1[482] * F1[271];F1[479] += F1[17] * F1[483] * F1[287];F1[479] += F1[19] * F1[484] * F1[303];F1[479] += F1[21] * F1[485] * F1[319];F1[479] += F1[333] * F1[486] * F1[459];F1[479] += F1[335] * F1[487] * F1[477];F1[479] += F1[3] * F1[488];F1[479] += F1[5] * F1[489];F1[479] += F1[7] * F1[490];F1[479] += F1[9] * F1[491];F1[479] += F1[11] * F1[492];F1[493] = (1 / (1 + Math.exp(-F1[479])));F1[494] = F1[493] * (1 - F1[493]);992 // var output = [];993 output[0] = F1[493];994 return output;995 }996 function runStoredModel7(feedArray){997 var output = [];998 var F2 = loadNNData7;999 F2[3] = feedArray[0];1000 F2[5] = feedArray[1];1001 F2[7] = feedArray[2];1002 F2[9] = feedArray[3];1003 F2[11] = feedArray[4];1004 F2[13] = feedArray[5];1005 F2[15] = feedArray[6];1006 F2[0] = F2[1];F2[1] = F2[2];F2[1] += F2[3] * F2[4];F2[1] += F2[5] * F2[6];F2[1] += F2[7] * F2[8];F2[1] += F2[9] * F2[10];F2[1] += F2[11] * F2[12];F2[1] += F2[13] * F2[14];F2[1] += F2[15] * F2[16];F2[1] += F2[17] * F2[18];F2[1] += F2[19] * F2[20];F2[1] += F2[21] * F2[22];F2[1] += F2[23] * F2[24];F2[1] += F2[25] * F2[26];F2[27] = (1 / (1 + Math.exp(-F2[1])));F2[28] = F2[27] * (1 - F2[27]);F2[29] = F2[27];F2[30] = F2[27];F2[31] = F2[27];F2[32] = F2[27];F2[33] = F2[27];F2[34] = F2[27];F2[35] = F2[27];1007 F2[36] = F2[37];F2[37] = F2[38];F2[37] += F2[3] * F2[39];F2[37] += F2[5] * F2[40];F2[37] += F2[7] * F2[41];F2[37] += F2[9] * F2[42];F2[37] += F2[11] * F2[43];F2[37] += F2[13] * F2[44];F2[37] += F2[15] * F2[45];F2[37] += F2[17] * F2[46];F2[37] += F2[19] * F2[47];F2[37] += F2[21] * F2[48];F2[37] += F2[23] * F2[49];F2[37] += F2[25] * F2[50];F2[51] = (1 / (1 + Math.exp(-F2[37])));F2[52] = F2[51] * (1 - F2[51]);F2[53] = F2[51];F2[54] = F2[51];F2[55] = F2[51];F2[56] = F2[51];F2[57] = F2[51];F2[58] = F2[51];F2[59] = F2[51];1008 F2[60] = F2[61];F2[61] = F2[62];F2[61] += F2[3] * F2[63];F2[61] += F2[5] * F2[64];F2[61] += F2[7] * F2[65];F2[61] += F2[9] * F2[66];F2[61] += F2[11] * F2[67];F2[61] += F2[13] * F2[68];F2[61] += F2[15] * F2[69];F2[61] += F2[17] * F2[70];F2[61] += F2[19] * F2[71];F2[61] += F2[21] * F2[72];F2[61] += F2[23] * F2[73];F2[61] += F2[25] * F2[74];F2[75] = (1 / (1 + Math.exp(-F2[61])));F2[76] = F2[75] * (1 - F2[75]);F2[77] = F2[75];F2[78] = F2[75];F2[79] = F2[75];F2[80] = F2[75];F2[81] = F2[75];F2[82] = F2[75];F2[83] = F2[75];1009 F2[84] = F2[85];F2[85] = F2[86];F2[85] += F2[3] * F2[87];F2[85] += F2[5] * F2[88];F2[85] += F2[7] * F2[89];F2[85] += F2[9] * F2[90];F2[85] += F2[11] * F2[91];F2[85] += F2[13] * F2[92];F2[85] += F2[15] * F2[93];F2[85] += F2[17] * F2[94];F2[85] += F2[19] * F2[95];F2[85] += F2[21] * F2[96];F2[85] += F2[23] * F2[97];F2[85] += F2[25] * F2[98];F2[99] = (1 / (1 + Math.exp(-F2[85])));F2[100] = F2[99] * (1 - F2[99]);F2[101] = F2[99];F2[102] = F2[99];F2[103] = F2[99];F2[104] = F2[99];F2[105] = F2[99];F2[106] = F2[99];F2[107] = F2[99];1010 F2[108] = F2[109];F2[109] = F2[110];F2[109] += F2[3] * F2[111];F2[109] += F2[5] * F2[112];F2[109] += F2[7] * F2[113];F2[109] += F2[9] * F2[114];F2[109] += F2[11] * F2[115];F2[109] += F2[13] * F2[116];F2[109] += F2[15] * F2[117];F2[109] += F2[17] * F2[118];F2[109] += F2[19] * F2[119];F2[109] += F2[21] * F2[120];F2[109] += F2[23] * F2[121];F2[109] += F2[25] * F2[122];F2[123] = (1 / (1 + Math.exp(-F2[109])));F2[124] = F2[123] * (1 - F2[123]);F2[125] = F2[123];F2[126] = F2[123];F2[127] = F2[123];F2[128] = F2[123];F2[129] = F2[123];F2[130] = F2[123];F2[131] = F2[123];1011 F2[132] = F2[133];F2[133] = F2[134];F2[133] += F2[3] * F2[135];F2[133] += F2[5] * F2[136];F2[133] += F2[7] * F2[137];F2[133] += F2[9] * F2[138];F2[133] += F2[11] * F2[139];F2[133] += F2[13] * F2[140];F2[133] += F2[15] * F2[141];F2[133] += F2[17] * F2[142];F2[133] += F2[19] * F2[143];F2[133] += F2[21] * F2[144];F2[133] += F2[23] * F2[145];F2[133] += F2[25] * F2[146];F2[147] = (1 / (1 + Math.exp(-F2[133])));F2[148] = F2[147] * (1 - F2[147]);F2[149] = F2[147];1012 F2[150] = F2[151];F2[151] = F2[152];F2[151] += F2[3] * F2[153];F2[151] += F2[5] * F2[154];F2[151] += F2[7] * F2[155];F2[151] += F2[9] * F2[156];F2[151] += F2[11] * F2[157];F2[151] += F2[13] * F2[158];F2[151] += F2[15] * F2[159];F2[151] += F2[17] * F2[160];F2[151] += F2[19] * F2[161];F2[151] += F2[21] * F2[162];F2[151] += F2[23] * F2[163];F2[151] += F2[25] * F2[164];F2[165] = (1 / (1 + Math.exp(-F2[151])));F2[166] = F2[165] * (1 - F2[165]);F2[167] = F2[165];1013 F2[168] = F2[169];F2[169] = F2[170];F2[169] += F2[3] * F2[171];F2[169] += F2[5] * F2[172];F2[169] += F2[7] * F2[173];F2[169] += F2[9] * F2[174];F2[169] += F2[11] * F2[175];F2[169] += F2[13] * F2[176];F2[169] += F2[15] * F2[177];F2[169] += F2[17] * F2[178];F2[169] += F2[19] * F2[179];F2[169] += F2[21] * F2[180];F2[169] += F2[23] * F2[181];F2[169] += F2[25] * F2[182];F2[183] = (1 / (1 + Math.exp(-F2[169])));F2[184] = F2[183] * (1 - F2[183]);F2[185] = F2[183];1014 F2[186] = F2[187];F2[187] = F2[188];F2[187] += F2[3] * F2[189];F2[187] += F2[5] * F2[190];F2[187] += F2[7] * F2[191];F2[187] += F2[9] * F2[192];F2[187] += F2[11] * F2[193];F2[187] += F2[13] * F2[194];F2[187] += F2[15] * F2[195];F2[187] += F2[17] * F2[196];F2[187] += F2[19] * F2[197];F2[187] += F2[21] * F2[198];F2[187] += F2[23] * F2[199];F2[187] += F2[25] * F2[200];F2[201] = (1 / (1 + Math.exp(-F2[187])));F2[202] = F2[201] * (1 - F2[201]);F2[203] = F2[201];1015 F2[204] = F2[205];F2[205] = F2[206];F2[205] += F2[3] * F2[207];F2[205] += F2[5] * F2[208];F2[205] += F2[7] * F2[209];F2[205] += F2[9] * F2[210];F2[205] += F2[11] * F2[211];F2[205] += F2[13] * F2[212];F2[205] += F2[15] * F2[213];F2[205] += F2[17] * F2[214];F2[205] += F2[19] * F2[215];F2[205] += F2[21] * F2[216];F2[205] += F2[23] * F2[217];F2[205] += F2[25] * F2[218];F2[219] = (1 / (1 + Math.exp(-F2[205])));F2[220] = F2[219] * (1 - F2[219]);F2[221] = F2[219];1016 F2[222] = F2[223];F2[223] = F2[149] * F2[224] * F2[223] + F2[225];F2[223] += F2[3] * F2[226] * F2[29];F2[223] += F2[5] * F2[227] * F2[30];F2[223] += F2[7] * F2[228] * F2[31];F2[223] += F2[9] * F2[229] * F2[32];F2[223] += F2[11] * F2[230] * F2[33];F2[223] += F2[13] * F2[231] * F2[34];F2[223] += F2[15] * F2[232] * F2[35];F2[17] = (1 / (1 + Math.exp(-F2[223])));F2[233] = F2[17] * (1 - F2[17]);1017 F2[234] = F2[235];F2[235] = F2[167] * F2[236] * F2[235] + F2[237];F2[235] += F2[3] * F2[238] * F2[53];F2[235] += F2[5] * F2[239] * F2[54];F2[235] += F2[7] * F2[240] * F2[55];F2[235] += F2[9] * F2[241] * F2[56];F2[235] += F2[11] * F2[242] * F2[57];F2[235] += F2[13] * F2[243] * F2[58];F2[235] += F2[15] * F2[244] * F2[59];F2[19] = (1 / (1 + Math.exp(-F2[235])));F2[245] = F2[19] * (1 - F2[19]);1018 F2[246] = F2[247];F2[247] = F2[185] * F2[248] * F2[247] + F2[249];F2[247] += F2[3] * F2[250] * F2[77];F2[247] += F2[5] * F2[251] * F2[78];F2[247] += F2[7] * F2[252] * F2[79];F2[247] += F2[9] * F2[253] * F2[80];F2[247] += F2[11] * F2[254] * F2[81];F2[247] += F2[13] * F2[255] * F2[82];F2[247] += F2[15] * F2[256] * F2[83];F2[21] = (1 / (1 + Math.exp(-F2[247])));F2[257] = F2[21] * (1 - F2[21]);1019 F2[258] = F2[259];F2[259] = F2[203] * F2[260] * F2[259] + F2[261];F2[259] += F2[3] * F2[262] * F2[101];F2[259] += F2[5] * F2[263] * F2[102];F2[259] += F2[7] * F2[264] * F2[103];F2[259] += F2[9] * F2[265] * F2[104];F2[259] += F2[11] * F2[266] * F2[105];F2[259] += F2[13] * F2[267] * F2[106];F2[259] += F2[15] * F2[268] * F2[107];F2[23] = (1 / (1 + Math.exp(-F2[259])));F2[269] = F2[23] * (1 - F2[23]);1020 F2[270] = F2[271];F2[271] = F2[221] * F2[272] * F2[271] + F2[273];F2[271] += F2[3] * F2[274] * F2[125];F2[271] += F2[5] * F2[275] * F2[126];F2[271] += F2[7] * F2[276] * F2[127];F2[271] += F2[9] * F2[277] * F2[128];F2[271] += F2[11] * F2[278] * F2[129];F2[271] += F2[13] * F2[279] * F2[130];F2[271] += F2[15] * F2[280] * F2[131];F2[25] = (1 / (1 + Math.exp(-F2[271])));F2[281] = F2[25] * (1 - F2[25]);1021 F2[282] = F2[283];F2[283] = F2[284];F2[283] += F2[3] * F2[285];F2[283] += F2[5] * F2[286];F2[283] += F2[7] * F2[287];F2[283] += F2[9] * F2[288];F2[283] += F2[11] * F2[289];F2[283] += F2[13] * F2[290];F2[283] += F2[15] * F2[291];F2[283] += F2[17] * F2[292];F2[283] += F2[19] * F2[293];F2[283] += F2[21] * F2[294];F2[283] += F2[23] * F2[295];F2[283] += F2[25] * F2[296];F2[297] = (1 / (1 + Math.exp(-F2[283])));F2[298] = F2[297] * (1 - F2[297]);F2[299] = F2[297];1022 F2[300] = F2[301];F2[301] = F2[302];F2[301] += F2[3] * F2[303];F2[301] += F2[5] * F2[304];F2[301] += F2[7] * F2[305];F2[301] += F2[9] * F2[306];F2[301] += F2[11] * F2[307];F2[301] += F2[13] * F2[308];F2[301] += F2[15] * F2[309];F2[301] += F2[17] * F2[310];F2[301] += F2[19] * F2[311];F2[301] += F2[21] * F2[312];F2[301] += F2[23] * F2[313];F2[301] += F2[25] * F2[314];F2[315] = (1 / (1 + Math.exp(-F2[301])));F2[316] = F2[315] * (1 - F2[315]);F2[317] = F2[315];1023 F2[318] = F2[319];F2[319] = F2[320];F2[319] += F2[3] * F2[321];F2[319] += F2[5] * F2[322];F2[319] += F2[7] * F2[323];F2[319] += F2[9] * F2[324];F2[319] += F2[11] * F2[325];F2[319] += F2[13] * F2[326];F2[319] += F2[15] * F2[327];F2[319] += F2[17] * F2[328];F2[319] += F2[19] * F2[329];F2[319] += F2[21] * F2[330];F2[319] += F2[23] * F2[331];F2[319] += F2[25] * F2[332];F2[333] = (1 / (1 + Math.exp(-F2[319])));F2[334] = F2[333] * (1 - F2[333]);F2[335] = F2[333];1024 F2[336] = F2[337];F2[337] = F2[338];F2[337] += F2[3] * F2[339];F2[337] += F2[5] * F2[340];F2[337] += F2[7] * F2[341];F2[337] += F2[9] * F2[342];F2[337] += F2[11] * F2[343];F2[337] += F2[13] * F2[344];F2[337] += F2[15] * F2[345];F2[337] += F2[17] * F2[346];F2[337] += F2[19] * F2[347];F2[337] += F2[21] * F2[348];F2[337] += F2[23] * F2[349];F2[337] += F2[25] * F2[350];F2[351] = (1 / (1 + Math.exp(-F2[337])));F2[352] = F2[351] * (1 - F2[351]);F2[353] = F2[351];1025 F2[354] = F2[355];F2[355] = F2[356];F2[355] += F2[3] * F2[357];F2[355] += F2[5] * F2[358];F2[355] += F2[7] * F2[359];F2[355] += F2[9] * F2[360];F2[355] += F2[11] * F2[361];F2[355] += F2[13] * F2[362];F2[355] += F2[15] * F2[363];F2[355] += F2[17] * F2[364];F2[355] += F2[19] * F2[365];F2[355] += F2[21] * F2[366];F2[355] += F2[23] * F2[367];F2[355] += F2[25] * F2[368];F2[369] = (1 / (1 + Math.exp(-F2[355])));F2[370] = F2[369] * (1 - F2[369]);F2[371] = F2[369];1026 F2[372] = F2[373];F2[373] = F2[374];F2[373] += F2[3] * F2[375];F2[373] += F2[5] * F2[376];F2[373] += F2[7] * F2[377];F2[373] += F2[9] * F2[378];F2[373] += F2[11] * F2[379];F2[373] += F2[13] * F2[380];F2[373] += F2[15] * F2[381];F2[373] += F2[17] * F2[382];F2[373] += F2[19] * F2[383];F2[373] += F2[21] * F2[384];F2[373] += F2[23] * F2[385];F2[373] += F2[25] * F2[386];F2[373] += F2[387] * F2[388];F2[373] += F2[389] * F2[390];F2[391] = (1 / (1 + Math.exp(-F2[373])));F2[392] = F2[391] * (1 - F2[391]);F2[393] = F2[391];F2[394] = F2[391];F2[395] = F2[391];F2[396] = F2[391];F2[397] = F2[391];F2[398] = F2[391];F2[399] = F2[391];F2[400] = F2[391];F2[401] = F2[391];F2[402] = F2[391];F2[403] = F2[391];F2[404] = F2[391];1027 F2[405] = F2[406];F2[406] = F2[407];F2[406] += F2[3] * F2[408];F2[406] += F2[5] * F2[409];F2[406] += F2[7] * F2[410];F2[406] += F2[9] * F2[411];F2[406] += F2[11] * F2[412];F2[406] += F2[13] * F2[413];F2[406] += F2[15] * F2[414];F2[406] += F2[17] * F2[415];F2[406] += F2[19] * F2[416];F2[406] += F2[21] * F2[417];F2[406] += F2[23] * F2[418];F2[406] += F2[25] * F2[419];F2[406] += F2[387] * F2[420];F2[406] += F2[389] * F2[421];F2[422] = (1 / (1 + Math.exp(-F2[406])));F2[423] = F2[422] * (1 - F2[422]);F2[424] = F2[422];F2[425] = F2[422];F2[426] = F2[422];F2[427] = F2[422];F2[428] = F2[422];F2[429] = F2[422];F2[430] = F2[422];F2[431] = F2[422];F2[432] = F2[422];F2[433] = F2[422];F2[434] = F2[422];F2[435] = F2[422];1028 F2[436] = F2[437];F2[437] = F2[438];F2[437] += F2[3] * F2[439];F2[437] += F2[5] * F2[440];F2[437] += F2[7] * F2[441];F2[437] += F2[9] * F2[442];F2[437] += F2[11] * F2[443];F2[437] += F2[13] * F2[444];F2[437] += F2[15] * F2[445];F2[437] += F2[17] * F2[446];F2[437] += F2[19] * F2[447];F2[437] += F2[21] * F2[448];F2[437] += F2[23] * F2[449];F2[437] += F2[25] * F2[450];F2[437] += F2[387] * F2[451];F2[437] += F2[389] * F2[452];F2[453] = (1 / (1 + Math.exp(-F2[437])));F2[454] = F2[453] * (1 - F2[453]);F2[455] = F2[453];1029 F2[456] = F2[457];F2[457] = F2[458];F2[457] += F2[3] * F2[459];F2[457] += F2[5] * F2[460];F2[457] += F2[7] * F2[461];F2[457] += F2[9] * F2[462];F2[457] += F2[11] * F2[463];F2[457] += F2[13] * F2[464];F2[457] += F2[15] * F2[465];F2[457] += F2[17] * F2[466];F2[457] += F2[19] * F2[467];F2[457] += F2[21] * F2[468];F2[457] += F2[23] * F2[469];F2[457] += F2[25] * F2[470];F2[457] += F2[387] * F2[471];F2[457] += F2[389] * F2[472];F2[473] = (1 / (1 + Math.exp(-F2[457])));F2[474] = F2[473] * (1 - F2[473]);F2[475] = F2[473];1030 F2[476] = F2[477];F2[477] = F2[455] * F2[478] * F2[477] + F2[479];F2[477] += F2[3] * F2[480] * F2[393];F2[477] += F2[5] * F2[481] * F2[394];F2[477] += F2[7] * F2[482] * F2[395];F2[477] += F2[9] * F2[483] * F2[396];F2[477] += F2[11] * F2[484] * F2[397];F2[477] += F2[13] * F2[485] * F2[398];F2[477] += F2[15] * F2[486] * F2[399];F2[477] += F2[17] * F2[487] * F2[400];F2[477] += F2[19] * F2[488] * F2[401];F2[477] += F2[21] * F2[489] * F2[402];F2[477] += F2[23] * F2[490] * F2[403];F2[477] += F2[25] * F2[491] * F2[404];F2[387] = (1 / (1 + Math.exp(-F2[477])));F2[492] = F2[387] * (1 - F2[387]);1031 F2[493] = F2[494];F2[494] = F2[475] * F2[495] * F2[494] + F2[496];F2[494] += F2[3] * F2[497] * F2[424];F2[494] += F2[5] * F2[498] * F2[425];F2[494] += F2[7] * F2[499] * F2[426];F2[494] += F2[9] * F2[500] * F2[427];F2[494] += F2[11] * F2[501] * F2[428];F2[494] += F2[13] * F2[502] * F2[429];F2[494] += F2[15] * F2[503] * F2[430];F2[494] += F2[17] * F2[504] * F2[431];F2[494] += F2[19] * F2[505] * F2[432];F2[494] += F2[21] * F2[506] * F2[433];F2[494] += F2[23] * F2[507] * F2[434];F2[494] += F2[25] * F2[508] * F2[435];F2[389] = (1 / (1 + Math.exp(-F2[494])));F2[509] = F2[389] * (1 - F2[389]);1032 F2[510] = F2[511];F2[511] = F2[512];F2[511] += F2[3] * F2[513];F2[511] += F2[5] * F2[514];F2[511] += F2[7] * F2[515];F2[511] += F2[9] * F2[516];F2[511] += F2[11] * F2[517];F2[511] += F2[13] * F2[518];F2[511] += F2[15] * F2[519];F2[511] += F2[17] * F2[520];F2[511] += F2[19] * F2[521];F2[511] += F2[21] * F2[522];F2[511] += F2[23] * F2[523];F2[511] += F2[25] * F2[524];F2[511] += F2[387] * F2[525];F2[511] += F2[389] * F2[526];F2[527] = (1 / (1 + Math.exp(-F2[511])));F2[528] = F2[527] * (1 - F2[527]);F2[529] = F2[527];1033 F2[530] = F2[531];F2[531] = F2[532];F2[531] += F2[3] * F2[533];F2[531] += F2[5] * F2[534];F2[531] += F2[7] * F2[535];F2[531] += F2[9] * F2[536];F2[531] += F2[11] * F2[537];F2[531] += F2[13] * F2[538];F2[531] += F2[15] * F2[539];F2[531] += F2[17] * F2[540];F2[531] += F2[19] * F2[541];F2[531] += F2[21] * F2[542];F2[531] += F2[23] * F2[543];F2[531] += F2[25] * F2[544];F2[531] += F2[387] * F2[545];F2[531] += F2[389] * F2[546];F2[547] = (1 / (1 + Math.exp(-F2[531])));F2[548] = F2[547] * (1 - F2[547]);F2[549] = F2[547];1034 F2[550] = F2[551];F2[551] = F2[552];F2[551] += F2[17] * F2[553] * F2[299];F2[551] += F2[19] * F2[554] * F2[317];F2[551] += F2[21] * F2[555] * F2[335];F2[551] += F2[23] * F2[556] * F2[353];F2[551] += F2[25] * F2[557] * F2[371];F2[551] += F2[387] * F2[558] * F2[529];F2[551] += F2[389] * F2[559] * F2[549];F2[551] += F2[3] * F2[560];F2[551] += F2[5] * F2[561];F2[551] += F2[7] * F2[562];F2[551] += F2[9] * F2[563];F2[551] += F2[11] * F2[564];F2[551] += F2[13] * F2[565];F2[551] += F2[15] * F2[566];F2[567] = (1 / (1 + Math.exp(-F2[551])));F2[568] = F2[567] * (1 - F2[567]);1035 // var output = [];1036 output[0] = F2[567];1037 return output;1038 }1039 /********************************************************************************************************************1040 *********************************************** CHANGE CURRENT TARGET ***********************************************1041 ********************************************************************************************************************/1042 $('.target-select-radio').click(function() {1043 selectedTargetNum = parseInt( $(this).attr("num") );1044 selectedTargetName = $(this).attr("id");1045 var isChecked = $('#rdSelect').prop('checked');1046 console.log("SELECTED TARGET: " + selectedTargetName + " " + selectedTargetNum + " " + isChecked);1047 });1048 /********************************************************************************************************************1049 *********************************************** SLIDER UI ***********************************************************1050 ********************************************************************************************************************/1051 var rangeSlider = function(){1052 var slider = $('.range-slider'),1053 range = $('.range-slider__range'),1054 value = $('.range-slider__value');1055 1056 slider.each(function(){1057 value.each(function(){1058 var value = $(this).prev().attr('value');1059 $(this).html(value);1060 });1061 if( $(this).hasClass('nn-architecture') ){ $('.range-slider__value.nn-architecture').html('2:5:1'); }1062 range.on('input', function(){1063 var labels = ['2:1', '2:5:1', '2:5:5:1', '3:1', '3:5:1', '3:5:5:1', '5:1', '5:5:1', '5:7:7:1'];1064 $(this).next(value).html(this.value);1065 if( $(this).hasClass('nn-architecture') ){ $(this).next(value).html( labels[this.value] ); }1066 1067 });1068 });1069 }1070 rangeSlider();1071 //RANGE SLIDER EVENT HANDLER1072 $( ".range-slider" ).each(function() {1073 if($(this).hasClass("nn-architecture")){1074 // Add labels to slider whose values 1075 // are specified by min, max and whose1076 // step is set to 11077 1078 // Get the options for this slider1079 //var opt = $(this).data().uiSlider.options;1080 // Get the number of possible values1081 var $input = $(this).find("input");1082 var min = parseInt($input.attr("min"));1083 var max = parseInt($input.attr("max"));1084 var step = parseInt($input.attr("step"));1085 var increment = parseInt($input.attr("increment"));1086 var vals = max - min; //opt.max - opt.min;1087 //if(min < 0){ vals = max + min; }1088 var labels = ['2:1', '2:5:1', '2:5:5:1', '3:1', '3:5:1', '3:5:5:1', '5:1', '5:5:1', '5:7:7:1'];1089 1090 // Space out values1091 for (var i = 0; (i * increment) <= vals; i++) {1092 var s = min + (i * increment);1093 var el = $('<label>'+ labels[s] +'</label>').css('left',( 4 + Math.abs((s-min)/vals) *($input.width() -24)+'px'));1094 // var el = $('<label>'+ s +'</label>').css('left',( 3 + ((s-min)/vals) *($input.width() -24)+'px'));1095 if(s == 0){ el = $('<label>'+ labels[s] +'</label>').css('left',( 21 + Math.abs((s-min)/vals) *($input.width() -24)+'px')); }1096 if(s == vals){ el = $('<label>'+ labels[s] +'</label>').css('left',( -20 + Math.abs((s-min)/vals) *($input.width() -24)+'px')); }1097 $(this).append(el);1098 }1099 } 1100 });1101 /*******************************************************************************************************************1102 ******************************************* NEURAL NETWORK BUTTONS *************************************************1103 ********************************************************************************************************************/1104 $('#train-btn').click(function() {1105 console.log("train button 1");1106 trainNNFlag1 = true;1107 trainNN(1);1108 });1109 $('#activate-btn').click(function() {1110 console.log("activate button");1111 activeNNFlag1 = true;1112 $('#activate-btn').toggleClass("activatedNN");1113 //if loaded NN, turn off1114 if (loadNNFlag) {1115 loadNNFlag = false;1116 $('#load-nn-btn').toggleClass("activatedNN");1117 }1118 });1119 $('#train2-btn').click(function() {1120 console.log("train button 2");1121 trainNNFlag2 = true;1122 trainNN(2);1123 });1124 $('#activate2-btn').click(function() {1125 console.log("activate button");1126 activeNNFlag2 = true;1127 $('#activate2-btn').toggleClass("activatedNN");1128 //if leaded NN, turn off1129 if (loadNNFlag) {1130 loadNNFlag = false;1131 $('#load-nn-btn').toggleClass("activatedNN");1132 }1133 });1134 // ************* LOAD TWO EXPORTED NEURAL NET ACTIVATION FUNCTIONS AND WEIGHTS1135 $('#load-nn-btn').click(function() {1136 console.log("load exported NN button");1137 loadNNFlag = true;1138 $('#load-nn-btn').toggleClass("activatedNN");1139 console.log("LOADING MODEL FOR TARGET: " + selectedTargetName + " " + selectedTargetNum);1140 //SHORT RIGHT1141 if(selectedTargetName == 'sh-r-eyes-select'){1142 loadNNData5 = set_RHand_ShortHair_EyesPosition_5Weights(loadNNData5);1143 loadNNData7 = set_RHand_ShortHair_EyesPosition_7Weights(loadNNData7);1144 } else if(selectedTargetName == 'sh-r-mouth-select'){1145 loadNNData5 = set_RHand_ShortHair_MouthPosition_5Weights(loadNNData5);1146 loadNNData7 = set_RHand_ShortHair_MouthPosition_7Weights(loadNNData7);1147 } else if(selectedTargetName == 'sh-r-front-select'){1148 loadNNData5 = set_RHand_ShortHair_FrontPosition_5Weights(loadNNData5);1149 loadNNData7 = set_RHand_ShortHair_FrontPosition_7Weights(loadNNData7);1150 } else if(selectedTargetName == 'sh-r-side-select'){1151 loadNNData5 = set_RHand_ShortHair_SidePosition_5Weights(loadNNData5);1152 loadNNData7 = set_RHand_ShortHair_SidePosition_7Weights(loadNNData7);1153 } else if(selectedTargetName == 'sh-r-top-select'){1154 loadNNData5 = set_RHand_ShortHair_TopPosition_5Weights(loadNNData5);1155 loadNNData7 = set_RHand_ShortHair_TopPosition_7Weights(loadNNData7);1156 } else if(selectedTargetName == 'sh-r-back-select'){1157 loadNNData5 = set_RHand_ShortHair_BackPosition_5Weights(loadNNData5);1158 loadNNData7 = set_RHand_ShortHair_BackPosition_7Weights(loadNNData7);1159 }1160 //SHORT LEFT1161 else if(selectedTargetName == 'sh-l-eyes-select'){1162 loadNNData5 = set_LHand_ShortHair_EyesPosition_5Weights(loadNNData5);1163 loadNNData7 = set_LHand_ShortHair_EyesPosition_7Weights(loadNNData7);1164 } else if(selectedTargetName == 'sh-l-mouth-select'){1165 loadNNData5 = set_LHand_ShortHair_MouthPosition_5Weights(loadNNData5);1166 loadNNData7 = set_LHand_ShortHair_MouthPosition_7Weights(loadNNData7);1167 } else if(selectedTargetName == 'sh-l-front-select'){1168 loadNNData5 = set_LHand_ShortHair_FrontPosition_5Weights(loadNNData5);1169 loadNNData7 = set_LHand_ShortHair_FrontPosition_7Weights(loadNNData7);1170 } else if(selectedTargetName == 'sh-l-side-select'){1171 loadNNData5 = set_LHand_ShortHair_SidePosition_5Weights(loadNNData5);1172 loadNNData7 = set_LHand_ShortHair_SidePosition_7Weights(loadNNData7);1173 } else if(selectedTargetName == 'sh-l-top-select'){1174 loadNNData5 = set_LHand_ShortHair_TopPosition_5Weights(loadNNData5);1175 loadNNData7 = set_LHand_ShortHair_TopPosition_7Weights(loadNNData7);1176 } else if(selectedTargetName == 'sh-l-back-select'){1177 loadNNData5 = set_LHand_ShortHair_BackPosition_5Weights(loadNNData5);1178 loadNNData7 = set_LHand_ShortHair_BackPosition_7Weights(loadNNData7);1179 }1180 //MEDIUM LEFT1181 else if(selectedTargetName == 'md-l-eyes-select'){1182 loadNNData5 = set_LHand_MediumHair_EyesPosition_5Weights(loadNNData5);1183 loadNNData7 = set_LHand_MediumHair_EyesPosition_7Weights(loadNNData7);1184 } else if(selectedTargetName == 'md-l-mouth-select'){1185 loadNNData5 = set_LHand_MediumHair_MouthPosition_5Weights(loadNNData5);1186 loadNNData7 = set_LHand_MediumHair_MouthPosition_7Weights(loadNNData7);1187 } else if(selectedTargetName == 'md-l-front-select'){1188 loadNNData5 = set_LHand_MediumHair_FrontPosition_5Weights(loadNNData5);1189 loadNNData7 = set_LHand_MediumHair_FrontPosition_7Weights(loadNNData7);1190 } else if(selectedTargetName == 'md-l-side-select'){1191 loadNNData5 = set_LHand_MediumHair_SidePosition_5Weights(loadNNData5);1192 loadNNData7 = set_LHand_MediumHair_SidePosition_7Weights(loadNNData7);1193 } else if(selectedTargetName == 'md-l-top-select'){1194 loadNNData5 = set_LHand_MediumHair_TopPosition_5Weights(loadNNData5);1195 loadNNData7 = set_LHand_MediumHair_TopPosition_7Weights(loadNNData7);1196 } else if(selectedTargetName == 'md-l-back-select'){1197 loadNNData5 = set_LHand_MediumHair_BackPosition_5Weights(loadNNData5);1198 loadNNData7 = set_LHand_MediumHair_BackPosition_7Weights(loadNNData7);1199 }1200 //MEDIUM RIGHT1201 else if(selectedTargetName == 'md-r-eyes-select'){1202 loadNNData5 = set_RHand_MediumHair_EyesPosition_5Weights(loadNNData5);1203 loadNNData7 = set_RHand_MediumHair_EyesPosition_7Weights(loadNNData7);1204 } else if(selectedTargetName == 'md-r-mouth-select'){1205 loadNNData5 = set_RHand_MediumHair_MouthPosition_5Weights(loadNNData5);1206 loadNNData7 = set_RHand_MediumHair_MouthPosition_7Weights(loadNNData7);1207 } else if(selectedTargetName == 'md-r-front-select'){1208 loadNNData5 = set_RHand_MediumHair_FrontPosition_5Weights(loadNNData5);1209 loadNNData7 = set_RHand_MediumHair_FrontPosition_7Weights(loadNNData7);1210 } else if(selectedTargetName == 'md-r-side-select'){1211 loadNNData5 = set_RHand_MediumHair_SidePosition_5Weights(loadNNData5);1212 loadNNData7 = set_RHand_MediumHair_SidePosition_7Weights(loadNNData7);1213 } else if(selectedTargetName == 'md-r-top-select'){1214 loadNNData5 = set_RHand_MediumHair_TopPosition_5Weights(loadNNData5);1215 loadNNData7 = set_RHand_MediumHair_TopPosition_7Weights(loadNNData7);1216 } else if(selectedTargetName == 'md-r-back-select'){1217 loadNNData5 = set_RHand_MediumHair_BackPosition_5Weights(loadNNData5);1218 loadNNData7 = set_RHand_MediumHair_BackPosition_7Weights(loadNNData7);1219 }1220 //LONG LEFT1221 else if(selectedTargetName == 'lg-l-eyes-select'){1222 loadNNData5 = set_LHand_LongHair_EyesPosition_5Weights(loadNNData5);1223 loadNNData7 = set_LHand_LongHair_EyesPosition_7Weights(loadNNData7);1224 } else if(selectedTargetName == 'lg-l-mouth-select'){1225 loadNNData5 = set_LHand_LongHair_MouthPosition_5Weights(loadNNData5);1226 loadNNData7 = set_LHand_LongHair_MouthPosition_7Weights(loadNNData7);1227 } else if(selectedTargetName == 'lg-l-front-select'){1228 loadNNData5 = set_LHand_LongHair_FrontPosition_5Weights(loadNNData5);1229 loadNNData7 = set_LHand_LongHair_FrontPosition_7Weights(loadNNData7);1230 } else if(selectedTargetName == 'lg-l-side-select'){1231 loadNNData5 = set_LHand_LongHair_SidePosition_5Weights(loadNNData5);1232 loadNNData7 = set_LHand_LongHair_SidePosition_7Weights(loadNNData7);1233 } else if(selectedTargetName == 'lg-l-top-select'){1234 loadNNData5 = set_LHand_LongHair_TopPosition_5Weights(loadNNData5);1235 loadNNData7 = set_LHand_LongHair_TopPosition_7Weights(loadNNData7);1236 } else if(selectedTargetName == 'lg-l-back-select'){1237 loadNNData5 = set_LHand_LongHair_BackPosition_5Weights(loadNNData5);1238 loadNNData7 = set_LHand_LongHair_BackPosition_7Weights(loadNNData7);1239 }1240 //LONG RIGHT1241 else if(selectedTargetName == 'lg-r-eyes-select'){1242 loadNNData5 = set_RHand_LongHair_EyesPosition_5Weights(loadNNData5);1243 loadNNData7 = set_RHand_LongHair_EyesPosition_7Weights(loadNNData7);1244 } else if(selectedTargetName == 'lg-r-mouth-select'){1245 loadNNData5 = set_RHand_LongHair_MouthPosition_5Weights(loadNNData5);1246 loadNNData7 = set_RHand_LongHair_MouthPosition_7Weights(loadNNData7);1247 } else if(selectedTargetName == 'lg-r-front-select'){1248 loadNNData5 = set_RHand_LongHair_FrontPosition_5Weights(loadNNData5);1249 loadNNData7 = set_RHand_LongHair_FrontPosition_7Weights(loadNNData7);1250 } else if(selectedTargetName == 'lg-r-side-select'){1251 loadNNData5 = set_RHand_LongHair_SidePosition_5Weights(loadNNData5);1252 loadNNData7 = set_RHand_LongHair_SidePosition_7Weights(loadNNData7);1253 } else if(selectedTargetName == 'lg-r-top-select'){1254 loadNNData5 = set_RHand_LongHair_TopPosition_5Weights(loadNNData5);1255 loadNNData7 = set_RHand_LongHair_TopPosition_7Weights(loadNNData7);1256 } else if(selectedTargetName == 'lg-r-back-select'){1257 loadNNData5 = set_RHand_LongHair_BackPosition_5Weights(loadNNData5);1258 loadNNData7 = set_RHand_LongHair_BackPosition_7Weights(loadNNData7);1259 }1260 });1261 /*******************************************************************************************************************1262 ********************************** COLLECT, PRINT, LOAD BUTTON ACTIONS *********************************************1263 ********************************************************************************************************************/1264 /*************** COLLECT SAMPLE - SONSOR AND MODEL DATA - STORE IN GSHEET AND ADD TO NN TRAINING OBJECT *****************/1265 $('#collect-true-1').click(function() {1266 //how many samples for this set?1267 getSamplesFlag = $('input.sample-size').val();1268 getSamplesTypeFlag = 1;1269 console.log("Collect btn NN1T #samples flag: " + getSamplesFlag);1270 });1271 $('#collect-false-1').click(function() {1272 //how many samples for this set?1273 //this flag is applied in the bluetooth data notification function1274 getSamplesFlag = $('input.sample-size').val();1275 getSamplesTypeFlag = 2;1276 console.log("Collect btn NN1F #samples flag: " + getSamplesFlag);1277 });1278 $('#collect-true-2').click(function() {1279 //how many samples for this set?1280 getSamplesFlag = $('input.sample-size').val();1281 //this flag is applied in the bluetooth data notification function1282 getSamplesTypeFlag = 3;1283 console.log("Collect btn NN2T #samples flag: " + getSamplesFlag);1284 });1285 $('#collect-false-2').click(function() {1286 //how many samples for this set?1287 getSamplesFlag = $('input.sample-size').val();1288 //this flag is applied in the bluetooth data notification function1289 getSamplesTypeFlag = 4;1290 console.log("Collect btn NN2F #samples flag: " + getSamplesFlag);1291 });1292 $('#clear-1').click(function() {1293 NN1TrueDataArray = new Array;1294 NN1FalseDataArray = new Array;1295 sensorDataArray = new Array(18).fill(0);1296 sensorDataSession = new Array;1297 updateSampleCountDisplay();1298 $("#dump-print").html("");1299 console.log("Clear NN1 Data");1300 });1301 $('#clear-2').click(function() {1302 NN2TrueDataArray = new Array;1303 NN2FalseDataArray = new Array;1304 sensorDataArray = new Array(18).fill(0);1305 sensorDataSession = new Array;1306 updateSampleCountDisplay();1307 $("#dump-print").html("");1308 console.log("Clear NN2 Data");1309 });1310 $('#export-btn').click(function() {1311 console.log("export1 NN button");1312 //clear everything but key values from stored NN1313 neuralNet.clear();1314 //export optimized weights and activation function1315 var standalone = neuralNet.standalone();1316 //convert to string for parsing1317 standalone = standalone.toString();1318 console.log(standalone);1319 $("#dump-print").html(standalone);1320 $("#dump-print").addClass("active-print");1321 });1322 $('#export2-btn').click(function() {1323 console.log("export2 NN button");1324 //clear everything but key values from stored NN1325 neuralNet2.clear();1326 //export optimized weights and activation function1327 var standalone = neuralNet2.standalone();1328 //convert to string for parsing1329 standalone = standalone.toString();1330 console.log(standalone);1331 $("#dump-print").html(standalone);1332 $("#dump-print").addClass("active-print");1333 });1334 //print sensor data to browser at bottom of app screen1335 $('#print-btn').click(function() {1336 console.log("print button");1337 $("#dump-print").html("");1338 var dataVarNames=["sh_r_eyes_data", "sh_r_mouth_data", "sh_r_front_data", "sh_r_side_data", "sh_r_top_data", "sh_r_back_data", "sh_r_off_data",1339 "sh_l_eyes_data", "sh_l_mouth_data", "sh_l_front_data", "sh_l_side_data", "sh_l_top_data", "sh_l_back_data", "sh_l_off_data",1340 "md_r_eyes_data", "md_r_mouth_data", "md_r_front_data", "md_r_side_data", "md_r_top_data", "md_r_back_data", "md_r_off_data",1341 "md_l_eyes_data", "md_l_mouth_data", "md_l_front_data", "md_l_side_data", "md_l_top_data", "md_l_back_data", "md_l_off_data",1342 "lg_r_eyes_data", "lg_r_mouth_data", "lg_r_front_data", "lg_r_side_data", "lg_r_top_data", "lg_r_back_data", "lg_r_off_data",1343 "lg_l_eyes_data", "lg_l_mouth_data", "lg_l_front_data", "lg_l_side_data", "lg_l_top_data", "lg_l_back_data", "lg_l_off_data"];1344 for( var i=0; i < masterDataArray.length; i++){1345 $("#dump-print").append("<p>var " + dataVarNames[i] + "=" + JSON.stringify(masterDataArray[i]) + ";</p>" );1346 console.log(dataVarNames[i] + " SESSION DATA: " + masterDataArray[i]);1347 }1348 // $("#dump-print").html(JSON.stringify(sensorDataSession));1349 $("#dump-print").addClass("active-print");1350 // console.log("SENSOR SESSIONS DATA: " + sensorDataSession);1351 });1352 //load data from js file (JSON or JS object) into sensor session data1353 $('#load-btn').click(function() {1354 console.log("load button");1355 masterDataArray[0] = sh_r_eyes_data1356 masterDataArray[1] = sh_r_mouth_data;1357 masterDataArray[2] = sh_r_front_data;1358 masterDataArray[3] = sh_r_side_data;1359 masterDataArray[4] = sh_r_top_data;1360 masterDataArray[5] = sh_r_back_data;1361 masterDataArray[6] = sh_r_off_data;1362 masterDataArray[7] = sh_l_eyes_data;1363 masterDataArray[8] = sh_l_mouth_data;1364 masterDataArray[9] = sh_l_front_data;1365 masterDataArray[10] = sh_l_side_data;1366 masterDataArray[11] = sh_l_top_data;1367 masterDataArray[12] = sh_l_back_data;1368 masterDataArray[13] = sh_l_off_data;1369 masterDataArray[14] = md_r_eyes_data;1370 masterDataArray[15] = md_r_mouth_data;1371 masterDataArray[16] = md_r_front_data;1372 masterDataArray[17] = md_r_side_data;1373 masterDataArray[18] = md_r_top_data;1374 masterDataArray[19] = md_r_back_data;1375 masterDataArray[20] = md_r_off_data;1376 masterDataArray[21] = md_l_eyes_data;1377 masterDataArray[22] = md_l_mouth_data;1378 masterDataArray[23] = md_l_front_data;1379 masterDataArray[24] = md_l_side_data;1380 masterDataArray[25] = md_l_top_data;1381 masterDataArray[26] = md_l_back_data;1382 masterDataArray[27] = md_l_off_data;1383 masterDataArray[28] = lg_r_eyes_data;1384 masterDataArray[29] = lg_r_mouth_data;1385 masterDataArray[30] = lg_r_front_data;1386 masterDataArray[31] = lg_r_side_data;1387 masterDataArray[32] = lg_r_top_data;1388 masterDataArray[33] = lg_r_back_data;1389 masterDataArray[34] = lg_r_off_data;1390 masterDataArray[35] = lg_l_eyes_data;1391 masterDataArray[36] = lg_l_mouth_data;1392 masterDataArray[37] = lg_l_front_data;1393 masterDataArray[38] = lg_l_side_data;1394 masterDataArray[39] = lg_l_top_data;1395 masterDataArray[40] = lg_l_back_data;1396 masterDataArray[41] = lg_l_off_data;1397 /* masterDataArray[28] = $.merge( lg_r_eyes_data, md_r_eyes_data);1398 masterDataArray[29] = $.merge( lg_r_mouth_data, md_r_mouth_data);1399 masterDataArray[30] = $.merge( lg_r_front_data, md_r_front_data);1400 masterDataArray[31] = $.merge( lg_r_side_data, md_r_side_data);1401 masterDataArray[32] = $.merge( lg_r_top_data, md_r_top_data);1402 masterDataArray[33] = $.merge( lg_r_back_data, md_r_back_data);1403 masterDataArray[34] = $.merge( lg_r_off_data, md_r_off_data);1404 masterDataArray[35] = $.merge( lg_l_eyes_data, md_l_eyes_data);1405 masterDataArray[36] = $.merge( lg_l_mouth_data, md_l_mouth_data);1406 masterDataArray[37] = $.merge( lg_l_front_data, md_l_front_data);1407 masterDataArray[38] = $.merge( lg_l_side_data, md_l_side_data);1408 masterDataArray[39] = $.merge( lg_l_top_data, md_l_top_data);1409 masterDataArray[40] = $.merge( lg_l_back_data, md_l_back_data);1410 masterDataArray[41] = $.merge( lg_l_off_data, md_l_off_data); */1411 //update data count labels1412 for( var i=0; i < masterDataArray.length; i++){1413 $( "span[data='" + i + "']" ).html(masterDataArray[i].length);1414 }1415 });1416}); // end on document load...

Full Screen

Full Screen

TreeGrid.js

Source:TreeGrid.js Github

copy

Full Screen

1describe("Ext.tree.TreeGrid", function() {2 var TreeGridItem = Ext.define(null, {3 extend: 'Ext.data.Model',4 fields: ['f1', 'f2'],5 proxy: {6 type: 'memory'7 }8 }),9 tree,10 view,11 store,12 recordCount,13 treeData = {14 f1: 'root1',15 f2: 'root.a',16 // Add cls. Tests must not throw errors with this present.17 cls: 'test-EXTJS-16367',18 children: [{19 f1: '1',20 f2: 'a',21 children: [{22 f1: '1.1',23 f2: 'a.a',24 leaf: true25 }, {26 f1: '1.2',27 f2: 'a.b',28 leaf: true29 }, {30 f1: '1.3',31 f2: 'a.c',32 leaf: true33 }, {34 f1: '1.4',35 f2: 'a.d',36 leaf: true37 }]38 }, {39 f1: '2',40 f2: 'b',41 children: [{42 f1: '2.1',43 f2: 'b.a',44 leaf: true45 }, {46 f1: '2.2',47 f2: 'b.b',48 leaf: true49 }, {50 f1: '2.3',51 f2: 'b.c',52 leaf: true53 }, {54 f1: '2.4',55 f2: 'b.d',56 leaf: true57 }]58 }, {59 f1: '3',60 f2: 'c',61 children: [{62 f1: '3.1',63 f2: 'c.a',64 leaf: true65 }, {66 f1: '3.2',67 f2: 'c.b',68 leaf: true69 }, {70 f1: '3.3',71 f2: 'c.c',72 leaf: true73 }, {74 f1: '3.4',75 f2: 'c.d',76 leaf: true77 }]78 }, {79 f1: '4',80 f2: 'd',81 children: [{82 f1: '4.1',83 f2: 'd.a',84 leaf: true85 }, {86 f1: '4.2',87 f2: 'd.b',88 leaf: true89 }, {90 f1: '4.3',91 f2: 'd.c',92 leaf: true93 }, {94 f1: '4.4',95 f2: 'd.d',96 leaf: true97 }]98 }, {99 f1: '5',100 f2: 'e',101 children: [{102 f1: '5.1',103 f2: 'e.a',104 leaf: true105 }, {106 f1: '5.2',107 f2: 'e.b',108 leaf: true109 }, {110 f1: '5.3',111 f2: 'e.c',112 leaf: true113 }, {114 f1: '5.4',115 f2: 'e.d',116 leaf: true117 }]118 }, {119 f1: '6',120 f2: 'f',121 children: [{122 f1: '6.1',123 f2: 'f.a',124 leaf: true125 }, {126 f1: '6.2',127 f2: 'f.b',128 leaf: true129 }, {130 f1: '6.3',131 f2: 'f.c',132 leaf: true133 }, {134 f1: '6.4',135 f2: 'f.d',136 leaf: true137 }]138 }]139 },140 synchronousLoad = true,141 treeStoreLoad = Ext.data.TreeStore.prototype.load,142 loadStore;143 144 function makeTreeGrid(cfg, storeCfg) {145 tree = new Ext.tree.Panel(Ext.apply({146 animate: false,147 renderTo: Ext.getBody(),148 store: store = new Ext.data.TreeStore(Ext.apply({149 model: TreeGridItem,150 root: Ext.clone(treeData)151 }, storeCfg)),152 trailingBufferZone: 1000,153 leadingBufferZone: 1000,154 width: 200,155 columns: [{156 xtype: 'treecolumn',157 text: 'F1',158 dataIndex: 'f1',159 width: 100160 }, {161 text: 'F2',162 dataIndex: 'f2',163 flex: 1164 }]165 }, cfg));166 view = tree.getView();167 }168 beforeEach(function() {169 // Override so that we can control asynchronous loading170 loadStore = Ext.data.TreeStore.prototype.load = function() {171 treeStoreLoad.apply(this, arguments);172 if (synchronousLoad) {173 this.flushLoad.apply(this, arguments);174 }175 return this;176 };177 });178 afterEach(function(){179 // Undo the overrides.180 Ext.data.TreeStore.prototype.load = treeStoreLoad;181 Ext.destroy(tree);182 });183 184 describe('Model mutation', function() {185 it('should not have to render a whole row, it should update innerHTML of cell', function() {186 makeTreeGrid();187 // Test cls config188 expect(view.getCellByPosition({row:0, column: 0}).hasCls('test-EXTJS-16367')).toBe(true);189 var createRowSpy = spyOn(view, 'createRowElement').andCallThrough();190 store.getAt(0).set({191 f1: 'ploot',192 f2: 'gronk'193 });194 // MUST not have created a bew row, we must have just updated the text within the cell195 expect(createRowSpy).not.toHaveBeenCalled();196 });197 });198 describe('autoloading', function() {199 it('should not autoload the store if the root is visible', function() {200 var loadCount = 0;201 // rootVisible defaults to true, so no autoload202 makeTreeGrid({203 columns: [{204 xtype: 'treecolumn',205 text: 'F1',206 dataIndex: 'f1',207 width: 100208 }],209 store: {210 listeners: {211 load: function() {212 loadCount++;213 }214 }215 }216 });217 expect(loadCount).toBe(0);218 });219 it('should not autoload the store if the root is visible and there is a locked column', function() {220 var loadCount = 0;221 // rootVisible defaults to true, so no autoload222 makeTreeGrid({223 columns: [{224 xtype: 'treecolumn',225 text: 'F1',226 dataIndex: 'f1',227 width: 100,228 locked: true229 }],230 store: {231 listeners: {232 load: function() {233 loadCount++;234 }235 }236 }237 });238 expect(loadCount).toBe(0);239 });240 it('should autoload the store if the root is visible', function() {241 var loadCount = 0;242 // rootVisible set to false, so autoload so that user sees the tree content243 makeTreeGrid({244 rootVisible: false,245 columns: [{246 xtype: 'treecolumn',247 text: 'F1',248 dataIndex: 'f1',249 width: 100250 }],251 store: {252 proxy: 'memory',253 listeners: {254 load: function() {255 loadCount++;256 }257 }258 }259 });260 expect(loadCount).toBe(1);261 });262 it('should autoload the store if the root is visible and there is a locked column', function() {263 var loadCount = 0;264 // rootVisible set to false, so autoload so that user sees the tree content265 makeTreeGrid({266 rootVisible: false,267 columns: [{268 xtype: 'treecolumn',269 text: 'F1',270 dataIndex: 'f1',271 width: 100,272 locked: true273 }],274 store: {275 proxy: 'memory',276 listeners: {277 load: function() {278 loadCount++;279 }280 }281 }282 });283 expect(loadCount).toBe(1);284 });285 });286 describe("Buffered rendering", function() {287 var rootNode;288 beforeEach(function() {289 makeTreeGrid({290 height: 45,291 plugins: Ext.create('Ext.grid.plugin.BufferedRenderer', {292 trailingBufferZone: 1,293 leadingBufferZone: 1294 })295 });296 tree.expandAll();297 recordCount = tree.view.store.getCount();298 rootNode = tree.getRootNode();299 });300 it("should not render every node", function() {301 expect(recordCount).toEqual(31);302 // The view's Composite element should only contain the visible rows plus buffer zones.303 // Should be less than the total node count in the Tree structure.304 expect(tree.view.all.getCount()).toBeLessThan(recordCount);305 });306 it("should not not scroll upon node expand", function() {307 tree.collapseAll();308 rootNode.expand();309 tree.view.setScrollY(40);310 tree.getRootNode().childNodes[1].expand();311 // Expanding a node should not scroll.312 expect(tree.view.getScrollY()).toEqual(40);313 });314 });315 describe('buffered rendering with locking and rootVisible: false', function() {316 var rootNode;317 beforeEach(function() {318 makeTreeGrid({319 renderTo: Ext.getBody(),320 height: 120,321 store: new Ext.data.TreeStore({322 model: TreeGridItem,323 root: {324 f1: 'Root',325 f2: 'root',326 children: [{327 f1: 'c0',328 f2: 'c0',329 leaf: true330 }, {331 f1: 'c1',332 f2: 'c1',333 leaf: true334 }, {335 f1: 'c2',336 f2: 'c2',337 leaf: true338 }]339 }340 }),341 plugins: Ext.create('Ext.grid.plugin.BufferedRenderer', {342 trailingBufferZone: 1,343 leadingBufferZone: 1344 }),345 columns: [{346 xtype: 'treecolumn',347 text: 'F1',348 dataIndex: 'f1',349 width: 100,350 locked: true351 }, {352 text: 'F2',353 dataIndex: 'f2',354 flex: 1355 }],356 rootVisible: false357 });358 recordCount = tree.lockedGrid.view.store.getCount();359 rootNode = tree.getRootNode();360 });361 it('should work when inserting a node at the top', function() {362 expect(tree.lockedGrid.view.all.getCount()).toEqual(3);363 expect(tree.normalGrid.view.all.getCount()).toEqual(3);364 rootNode.insertBefore({text:'Top'}, rootNode.childNodes[0]);365 expect(tree.lockedGrid.view.all.getCount()).toEqual(4);366 expect(tree.normalGrid.view.all.getCount()).toEqual(4);367 });368 });369 describe("Buffered rendering and locking", function() {370 var rootNode;371 beforeEach(function() {372 makeTreeGrid({373 height: 45,374 plugins: Ext.create('Ext.grid.plugin.BufferedRenderer', {375 trailingBufferZone: 1,376 leadingBufferZone: 1377 }),378 columns: [{379 xtype: 'treecolumn',380 text: 'F1',381 dataIndex: 'f1',382 width: 100,383 locked: true384 }, {385 text: 'F2',386 dataIndex: 'f2',387 flex: 1388 }]389 });390 tree.expandAll();391 recordCount = tree.lockedGrid.view.store.getCount();392 rootNode = tree.getRootNode();393 });394 it("should not render every node", function() {395 var lockedTree = tree.lockedGrid,396 normalGrid = tree.normalGrid,397 viewSize = lockedTree.view.all.getCount();398 expect(recordCount).toEqual(31);399 // The view's Composite element should only contain the visible rows plus buffer zones.400 // Should be less than the total node count in the Tree structure.401 expect(viewSize).toBeLE(recordCount);402 expect(normalGrid.view.all.getCount()).toEqual(viewSize);403 });404 it('should sync scroll positions between the two sides', function() {405 var lockedTree = tree.lockedGrid,406 normalGrid = tree.normalGrid,407 lockedView = lockedTree.view,408 normalView = normalGrid.view;409 tree.collapseAll();410 rootNode.expand();411 normalView.setScrollY(30);412 waits(200); // Wait for the scroll listener (deferred to next animation Frame)413 runs(function() {414 expect(lockedView.getScrollY()).toEqual(30);415 // Now, at 120px high, the entire tree is rendered, scrolling will not triggert action by the buffered renderer416 // Scrolling should still sync417 tree.setHeight(120);418 normalView.setScrollY(45);419 waits(200); // Wait for the scroll listener (deferred to next animation Frame)420 runs(function() {421 expect(lockedView.getScrollY()).toEqual(45);422 rootNode.childNodes[2].expand();423 // Root node, its 6 children, and child[2]'s 4 children: 11 records in NodeStore424 expect(normalView.store.getCount()).toEqual(11);425 // But scroll position should not change426 expect(lockedView.el.dom.scrollTop).toEqual(45);427 });428 });429 });430 });431 432 describe('reconfigure', function() {433 it('should allow reconfigure', function() {434 var cols = [{435 xtype: 'treecolumn',436 text: 'Task',437 flex: 1,438 dataIndex: 'task'439 }, {440 text: 'URL',441 flex: 1,442 sortable: false,443 dataIndex: 'url'444 }];445 var cols2 = [{446 xtype: 'treecolumn',447 text: 'New Task',448 flex: 1,449 dataIndex: 'new_task'450 }, {451 text: 'New URL',452 flex: 1,453 sortable: false,454 dataIndex: 'new_url'455 }];456 Ext.define('ReconfigureTestTask', {457 extend: 'Ext.data.Model',458 fields: [{459 name: 'task',460 type: 'string'461 }, {462 name: 'url',463 type: 'string'464 }]465 });466 Ext.define('ReconfigureTestNewTask', {467 extend: 'Ext.data.Model',468 fields: [{469 name: 'new_task',470 type: 'string'471 }, {472 name: 'new_url',473 type: 'string'474 }]475 });476 var store = Ext.create('Ext.data.TreeStore', {477 model: 'ReconfigureTestTask',478 root: {479 expanded: true,480 children: [{481 task: 'task1',482 url: 'url1',483 expanded: true,484 children: [{485 task: 'task1.1',486 url: 'url1.1',487 leaf: true488 }]489 }, {490 task: 'task2',491 url: 'url2',492 expanded: true,493 children: [{494 task: 'task2.1',495 url: 'url2.1',496 leaf: true497 }]498 }]499 }500 });501 var store2 = Ext.create('Ext.data.TreeStore', {502 model: 'ReconfigureTestNewTask',503 root: {504 expanded: true,505 children: [{506 new_task: 'new-task1',507 new_url: 'new-url1',508 expanded: true,509 children: [{510 new_task: 'new-task1.1',511 new_url: 'new-url1.1',512 leaf: true513 }]514 }, {515 new_task: 'new-task2',516 new_url: 'new-url2',517 expanded: true,518 children: [{519 new_task: 'new-task2.1',520 new_url: 'new-url2.1',521 leaf: true522 }]523 }]524 }525 });526 var myTree = Ext.create('Ext.tree.Panel', {527 title: 'treegrid',528 width: 600,529 height: 300,530 renderTo: Ext.getBody(),531 collapsible: true,532 rootVisible: false,533 useArrows: true,534 store: store,535 multiSelect: true,536 columns: cols537 }),538 root = myTree.getRootNode();539 expect(root.childNodes[0].data.task).toEqual('task1');540 expect(root.childNodes[0].data.url).toEqual('url1');541 expect(root.childNodes[0].childNodes[0].data.task).toEqual('task1.1');542 expect(root.childNodes[0].childNodes[0].data.url).toEqual('url1.1');543 expect(root.childNodes[1].data.task).toEqual('task2');544 expect(root.childNodes[1].data.url).toEqual('url2');545 expect(root.childNodes[1].childNodes[0].data.task).toEqual('task2.1');546 expect(root.childNodes[1].childNodes[0].data.url).toEqual('url2.1');547 myTree.reconfigure(store2, cols2);548 root = myTree.getRootNode();549 expect(root.childNodes[0].data.new_task).toEqual('new-task1');550 expect(root.childNodes[0].data.new_url).toEqual('new-url1');551 expect(root.childNodes[0].childNodes[0].data.new_task).toEqual('new-task1.1');552 expect(root.childNodes[0].childNodes[0].data.new_url).toEqual('new-url1.1');553 expect(root.childNodes[1].data.new_task).toEqual('new-task2');554 expect(root.childNodes[1].data.new_url).toEqual('new-url2');555 expect(root.childNodes[1].childNodes[0].data.new_task).toEqual('new-task2.1');556 expect(root.childNodes[1].childNodes[0].data.new_url).toEqual('new-url2.1');557 558 myTree.destroy();559 Ext.undefine('ReconfigureTestTask');560 Ext.undefine('ReconfigureTestNewTask');561 });562 });563 ...

Full Screen

Full Screen

sparse_feature_cross_op_test.py

Source:sparse_feature_cross_op_test.py Github

copy

Full Screen

1# Copyright 2016 The TensorFlow Authors. All Rights Reserved.2#3# Licensed under the Apache License, Version 2.0 (the "License");4# you may not use this file except in compliance with the License.5# You may obtain a copy of the License at6#7# http://www.apache.org/licenses/LICENSE-2.08#9# Unless required by applicable law or agreed to in writing, software10# distributed under the License is distributed on an "AS IS" BASIS,11# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.12# See the License for the specific language governing permissions and13# limitations under the License.14# ==============================================================================15"""Tests for tf.contrib.layers.sparse_feature_cross."""16from __future__ import absolute_import17from __future__ import division18from __future__ import print_function19import numpy20from tensorflow.contrib import layers21from tensorflow.contrib.layers.python.ops import sparse_feature_cross_op22from tensorflow.python.client import session23from tensorflow.python.framework import constant_op24from tensorflow.python.framework import dtypes25from tensorflow.python.framework import sparse_tensor26from tensorflow.python.ops import sparse_ops27from tensorflow.python.platform import test28class SparseCrossOpTest(test.TestCase):29 def test_simple(self):30 """Tests a simple scenario.31 """32 op = sparse_feature_cross_op.sparse_feature_cross([33 self._sparse_tensor([['batch1-FC1-F1'],34 ['batch2-FC1-F1', 'batch2-FC1-F2']]),35 self._sparse_tensor([['batch1-FC2-F1'],36 ['batch2-FC2-F1', 'batch2-FC2-F2']])37 ])38 expected_out = self._sparse_tensor([['batch1-FC1-F1_X_batch1-FC2-F1'], [39 'batch2-FC1-F1_X_batch2-FC2-F1', 'batch2-FC1-F1_X_batch2-FC2-F2',40 'batch2-FC1-F2_X_batch2-FC2-F1', 'batch2-FC1-F2_X_batch2-FC2-F2'41 ]])42 with self.test_session() as sess:43 self._assert_sparse_tensor_equals(expected_out, sess.run(op))44 def test_dense(self):45 """Tests only dense inputs.46 """47 op = sparse_feature_cross_op.sparse_feature_cross([48 constant_op.constant([['batch1-FC1-F1', 'batch1-FC1-F2'],49 ['batch2-FC1-F1', 'batch2-FC1-F2']],50 dtypes.string),51 constant_op.constant([['batch1-FC2-F1', 'batch1-FC2-F2'],52 ['batch2-FC2-F1', 'batch2-FC2-F2']],53 dtypes.string),54 ])55 expected_out = self._sparse_tensor([[56 'batch1-FC1-F1_X_batch1-FC2-F1', 'batch1-FC1-F1_X_batch1-FC2-F2',57 'batch1-FC1-F2_X_batch1-FC2-F1', 'batch1-FC1-F2_X_batch1-FC2-F2'58 ], [59 'batch2-FC1-F1_X_batch2-FC2-F1', 'batch2-FC1-F1_X_batch2-FC2-F2',60 'batch2-FC1-F2_X_batch2-FC2-F1', 'batch2-FC1-F2_X_batch2-FC2-F2'61 ]])62 with self.test_session() as sess:63 self._assert_sparse_tensor_equals(expected_out, sess.run(op))64 def test_integer_mixed_string_sparse(self):65 """Tests mixed type."""66 op = sparse_feature_cross_op.sparse_feature_cross([67 self._sparse_tensor([[11], [333, 55555]]),68 self._sparse_tensor([['batch1-FC2-F1'],69 ['batch2-FC2-F1', 'batch2-FC2-F2']])70 ])71 expected_out = self._sparse_tensor([['11_X_batch1-FC2-F1'], [72 '333_X_batch2-FC2-F1', '333_X_batch2-FC2-F2', '55555_X_batch2-FC2-F1',73 '55555_X_batch2-FC2-F2'74 ]])75 with self.test_session() as sess:76 self._assert_sparse_tensor_equals(expected_out, sess.run(op))77 def test_integer_mixed_string_dense(self):78 """Tests mixed dense inputs.79 """80 op = sparse_feature_cross_op.sparse_feature_cross([81 constant_op.constant([[11, 333], [55555, 999999]], dtypes.int64),82 constant_op.constant([['batch1-FC2-F1', 'batch1-FC2-F2'],83 ['batch2-FC2-F1', 'batch2-FC2-F2']],84 dtypes.string),85 ])86 expected_out = self._sparse_tensor([[87 '11_X_batch1-FC2-F1', '11_X_batch1-FC2-F2', '333_X_batch1-FC2-F1',88 '333_X_batch1-FC2-F2'89 ], [90 '55555_X_batch2-FC2-F1', '55555_X_batch2-FC2-F2',91 '999999_X_batch2-FC2-F1', '999999_X_batch2-FC2-F2'92 ]])93 with self.test_session() as sess:94 self._assert_sparse_tensor_equals(expected_out, sess.run(op))95 def test_sparse_cross_dense(self):96 """Tests sparse and dense inputs.97 """98 op = sparse_feature_cross_op.sparse_feature_cross([99 self._sparse_tensor([['batch1-FC1-F1'],100 ['batch2-FC1-F1', 'batch2-FC1-F2']]),101 constant_op.constant([['batch1-FC2-F1', 'batch1-FC2-F2'],102 ['batch2-FC2-F1', 'batch2-FC2-F2']],103 dtypes.string),104 ])105 expected_out = self._sparse_tensor(106 [['batch1-FC1-F1_X_batch1-FC2-F1', 'batch1-FC1-F1_X_batch1-FC2-F2'], [107 'batch2-FC1-F1_X_batch2-FC2-F1', 'batch2-FC1-F1_X_batch2-FC2-F2',108 'batch2-FC1-F2_X_batch2-FC2-F1', 'batch2-FC1-F2_X_batch2-FC2-F2'109 ]])110 with self.test_session() as sess:111 self._assert_sparse_tensor_equals(expected_out, sess.run(op))112 def test_integer_sparse_input(self):113 """Tests mixed type sparse and dense inputs."""114 op = sparse_feature_cross_op.sparse_feature_cross([115 self._sparse_tensor([[11], [333, 5555]]),116 constant_op.constant([['batch1-FC2-F1', 'batch1-FC2-F2'],117 ['batch2-FC2-F1', 'batch2-FC2-F2']],118 dtypes.string),119 ])120 expected_out = self._sparse_tensor(121 [['11_X_batch1-FC2-F1', '11_X_batch1-FC2-F2'], [122 '333_X_batch2-FC2-F1', '333_X_batch2-FC2-F2',123 '5555_X_batch2-FC2-F1', '5555_X_batch2-FC2-F2'124 ]])125 with self.test_session() as sess:126 self._assert_sparse_tensor_equals(expected_out, sess.run(op))127 def test_permutation_3x3x3(self):128 """Tests 3x3x3 permutation.129 """130 op = sparse_feature_cross_op.sparse_feature_cross([131 self._sparse_tensor(132 [['batch1-FC1-F1', 'batch1-FC1-F2', 'batch1-FC1-F3']]),133 self._sparse_tensor(134 [['batch1-FC2-F1', 'batch1-FC2-F2', 'batch1-FC2-F3']]),135 self._sparse_tensor(136 [['batch1-FC3-F1', 'batch1-FC3-F2', 'batch1-FC3-F3']])137 ])138 expected_out = self._sparse_tensor([[139 'batch1-FC1-F1_X_batch1-FC2-F1_X_batch1-FC3-F1',140 'batch1-FC1-F1_X_batch1-FC2-F1_X_batch1-FC3-F2',141 'batch1-FC1-F1_X_batch1-FC2-F1_X_batch1-FC3-F3',142 'batch1-FC1-F1_X_batch1-FC2-F2_X_batch1-FC3-F1',143 'batch1-FC1-F1_X_batch1-FC2-F2_X_batch1-FC3-F2',144 'batch1-FC1-F1_X_batch1-FC2-F2_X_batch1-FC3-F3',145 'batch1-FC1-F1_X_batch1-FC2-F3_X_batch1-FC3-F1',146 'batch1-FC1-F1_X_batch1-FC2-F3_X_batch1-FC3-F2',147 'batch1-FC1-F1_X_batch1-FC2-F3_X_batch1-FC3-F3',148 'batch1-FC1-F2_X_batch1-FC2-F1_X_batch1-FC3-F1',149 'batch1-FC1-F2_X_batch1-FC2-F1_X_batch1-FC3-F2',150 'batch1-FC1-F2_X_batch1-FC2-F1_X_batch1-FC3-F3',151 'batch1-FC1-F2_X_batch1-FC2-F2_X_batch1-FC3-F1',152 'batch1-FC1-F2_X_batch1-FC2-F2_X_batch1-FC3-F2',153 'batch1-FC1-F2_X_batch1-FC2-F2_X_batch1-FC3-F3',154 'batch1-FC1-F2_X_batch1-FC2-F3_X_batch1-FC3-F1',155 'batch1-FC1-F2_X_batch1-FC2-F3_X_batch1-FC3-F2',156 'batch1-FC1-F2_X_batch1-FC2-F3_X_batch1-FC3-F3',157 'batch1-FC1-F3_X_batch1-FC2-F1_X_batch1-FC3-F1',158 'batch1-FC1-F3_X_batch1-FC2-F1_X_batch1-FC3-F2',159 'batch1-FC1-F3_X_batch1-FC2-F1_X_batch1-FC3-F3',160 'batch1-FC1-F3_X_batch1-FC2-F2_X_batch1-FC3-F1',161 'batch1-FC1-F3_X_batch1-FC2-F2_X_batch1-FC3-F2',162 'batch1-FC1-F3_X_batch1-FC2-F2_X_batch1-FC3-F3',163 'batch1-FC1-F3_X_batch1-FC2-F3_X_batch1-FC3-F1',164 'batch1-FC1-F3_X_batch1-FC2-F3_X_batch1-FC3-F2',165 'batch1-FC1-F3_X_batch1-FC2-F3_X_batch1-FC3-F3'166 ]])167 with self.test_session() as sess:168 self._assert_sparse_tensor_equals(expected_out, sess.run(op))169 def test_permutation_3x1x2(self):170 """Tests 3x1x2 permutation.171 """172 op = sparse_feature_cross_op.sparse_feature_cross([173 self._sparse_tensor(174 [['batch1-FC1-F1', 'batch1-FC1-F2', 'batch1-FC1-F3']]),175 self._sparse_tensor([['batch1-FC2-F1']]),176 self._sparse_tensor([['batch1-FC3-F1', 'batch1-FC3-F2']])177 ])178 expected_out = self._sparse_tensor([[179 'batch1-FC1-F1_X_batch1-FC2-F1_X_batch1-FC3-F1',180 'batch1-FC1-F1_X_batch1-FC2-F1_X_batch1-FC3-F2',181 'batch1-FC1-F2_X_batch1-FC2-F1_X_batch1-FC3-F1',182 'batch1-FC1-F2_X_batch1-FC2-F1_X_batch1-FC3-F2',183 'batch1-FC1-F3_X_batch1-FC2-F1_X_batch1-FC3-F1',184 'batch1-FC1-F3_X_batch1-FC2-F1_X_batch1-FC3-F2'185 ]])186 with self.test_session() as sess:187 self._assert_sparse_tensor_equals(expected_out, sess.run(op))188 def test_large_batch(self):189 """Tests with large batch size to force multithreding.190 """191 batch_size = 5000192 col1 = []193 col2 = []194 col3 = []195 for b in range(batch_size):196 col1.append(197 ['batch%d-FC1-F1' % b, 'batch%d-FC1-F2' % b, 'batch%d-FC1-F3' % b])198 col2.append(['batch%d-FC2-F1' % b])199 col3.append(['batch%d-FC3-F1' % b, 'batch%d-FC3-F2' % b])200 op = sparse_feature_cross_op.sparse_feature_cross([201 self._sparse_tensor(col1), self._sparse_tensor(col2),202 self._sparse_tensor(col3)203 ])204 col_out = []205 for b in range(batch_size):206 col_out.append([207 'batch%d-FC1-F1_X_batch%d-FC2-F1_X_batch%d-FC3-F1' % (b, b, b),208 'batch%d-FC1-F1_X_batch%d-FC2-F1_X_batch%d-FC3-F2' % (b, b, b),209 'batch%d-FC1-F2_X_batch%d-FC2-F1_X_batch%d-FC3-F1' % (b, b, b),210 'batch%d-FC1-F2_X_batch%d-FC2-F1_X_batch%d-FC3-F2' % (b, b, b),211 'batch%d-FC1-F3_X_batch%d-FC2-F1_X_batch%d-FC3-F1' % (b, b, b),212 'batch%d-FC1-F3_X_batch%d-FC2-F1_X_batch%d-FC3-F2' % (b, b, b)213 ])214 expected_out = self._sparse_tensor(col_out)215 with self.test_session() as sess:216 self._assert_sparse_tensor_equals(expected_out, sess.run(op))217 def test_one_column_empty(self):218 """Tests when one column is empty.219 The crossed tensor should be empty.220 """221 op = sparse_feature_cross_op.sparse_feature_cross([222 self._sparse_tensor([['batch1-FC1-F1', 'batch1-FC1-F2']]),223 self._sparse_tensor([], 1),224 self._sparse_tensor([['batch1-FC3-F1', 'batch1-FC3-F2']])225 ])226 with self.test_session() as sess:227 self._assert_sparse_tensor_empty(sess.run(op))228 def test_some_columns_empty(self):229 """Tests when more than one columns are empty.230 Cross for the corresponding batch should be empty.231 """232 op = sparse_feature_cross_op.sparse_feature_cross([233 self._sparse_tensor([['batch1-FC1-F1', 'batch1-FC1-F2']], 2),234 self._sparse_tensor([['batch1-FC2-F1'], ['batch2-FC2-F1']], 2),235 self._sparse_tensor([['batch1-FC3-F1', 'batch1-FC3-F2']], 2)236 ])237 expected_out = self._sparse_tensor([[238 'batch1-FC1-F1_X_batch1-FC2-F1_X_batch1-FC3-F1',239 'batch1-FC1-F1_X_batch1-FC2-F1_X_batch1-FC3-F2',240 'batch1-FC1-F2_X_batch1-FC2-F1_X_batch1-FC3-F1',241 'batch1-FC1-F2_X_batch1-FC2-F1_X_batch1-FC3-F2'242 ]], 2)243 with self.test_session() as sess:244 self._assert_sparse_tensor_equals(expected_out, sess.run(op))245 def test_all_columns_empty(self):246 """Tests when all columns are empty.247 The crossed tensor should be empty.248 """249 op = sparse_feature_cross_op.sparse_feature_cross([250 self._sparse_tensor([]), self._sparse_tensor([]),251 self._sparse_tensor([])252 ])253 with self.test_session() as sess:254 self._assert_sparse_tensor_empty(sess.run(op))255 def test_hashed_output_zero_bucket(self):256 """Tests a simple scenario.257 """258 op = sparse_feature_cross_op.sparse_feature_cross(259 [260 self._sparse_tensor([['batch1-FC1-F1']]),261 self._sparse_tensor([['batch1-FC2-F1']]),262 self._sparse_tensor([['batch1-FC3-F1']])263 ],264 hashed_output=True)265 # Check actual hashed output to prevent unintentional hashing changes.266 expected_out = self._sparse_tensor([[3735511728867393167]])267 with self.test_session() as sess:268 self._assert_sparse_tensor_equals(expected_out, sess.run(op))269 def test_hashed_output_zero_bucket_v2(self):270 """Tests a simple scenario.271 """272 op = sparse_feature_cross_op.sparse_feature_cross(273 [274 self._sparse_tensor([['batch1-FC1-F1']]),275 self._sparse_tensor([['batch1-FC2-F1']]),276 self._sparse_tensor([['batch1-FC3-F1']])277 ],278 hashed_output=True,279 hash_key=layers.SPARSE_FEATURE_CROSS_DEFAULT_HASH_KEY)280 # Check actual hashed output to prevent unintentional hashing changes.281 expected_out = self._sparse_tensor([[1971693436396284976]])282 with self.test_session() as sess:283 self._assert_sparse_tensor_equals(expected_out, sess.run(op))284 # TODO(sibyl-Aix6ihai): Add benchmark to compare Hashed vs Non-hashed.285 def test_hashed_output(self):286 """Tests a simple scenario.287 """288 op = sparse_feature_cross_op.sparse_feature_cross(289 [290 self._sparse_tensor([['batch1-FC1-F1']]),291 self._sparse_tensor([['batch1-FC2-F1']]),292 self._sparse_tensor([['batch1-FC3-F1']])293 ],294 hashed_output=True,295 num_buckets=100)296 # Check actual hashed output to prevent unintentional hashing changes.297 expected_out = self._sparse_tensor([[74]])298 with self.test_session() as sess:299 self._assert_sparse_tensor_equals(expected_out, sess.run(op))300 def test_hashed_output_v2(self):301 """Tests a simple scenario.302 """303 op = sparse_feature_cross_op.sparse_feature_cross(304 [305 self._sparse_tensor([['batch1-FC1-F1']]),306 self._sparse_tensor([['batch1-FC2-F1']]),307 self._sparse_tensor([['batch1-FC3-F1']])308 ],309 hashed_output=True,310 num_buckets=100,311 hash_key=layers.SPARSE_FEATURE_CROSS_DEFAULT_HASH_KEY)312 # Check actual hashed output to prevent unintentional hashing changes.313 expected_out = self._sparse_tensor([[83]])314 with self.test_session() as sess:315 self._assert_sparse_tensor_equals(expected_out, sess.run(op))316 def test_hashed_output_v1_has_collision(self):317 """Tests the old version of the fingerprint concatenation has collisions.318 """319 # The last 10 bits of 359 and 1024+359 are identical.320 # As a result, all the crosses collide.321 t1 = constant_op.constant([[359], [359 + 1024]])322 t2 = constant_op.constant([list(range(10)), list(range(10))])323 cross = sparse_feature_cross_op.sparse_feature_cross(324 [t2, t1], hashed_output=True, num_buckets=1024)325 cross_dense = sparse_ops.sparse_tensor_to_dense(cross)326 with session.Session():327 values = cross_dense.eval()328 self.assertTrue(numpy.equal(values[0], values[1]).all())329 def test_hashed_output_v2_has_no_collision(self):330 """Tests the new version of the fingerprint concatenation has no collisions.331 """332 # Although the last 10 bits of 359 and 1024+359 are identical.333 # As a result, all the crosses shouldn't collide.334 t1 = constant_op.constant([[359], [359 + 1024]])335 t2 = constant_op.constant([list(range(10)), list(range(10))])336 cross = sparse_feature_cross_op.sparse_feature_cross(337 [t2, t1],338 hashed_output=True,339 num_buckets=1024,340 hash_key=layers.SPARSE_FEATURE_CROSS_DEFAULT_HASH_KEY)341 cross_dense = sparse_ops.sparse_tensor_to_dense(cross)342 with session.Session():343 values = cross_dense.eval()344 self.assertTrue(numpy.not_equal(values[0], values[1]).all())345 def test_hashed_3x1x2(self):346 """Tests 3x1x2 permutation with hashed output.347 """348 op = sparse_feature_cross_op.sparse_feature_cross(349 [350 self._sparse_tensor(351 [['batch1-FC1-F1', 'batch1-FC1-F2', 'batch1-FC1-F3']]),352 self._sparse_tensor([['batch1-FC2-F1']]),353 self._sparse_tensor([['batch1-FC3-F1', 'batch1-FC3-F2']])354 ],355 hashed_output=True,356 num_buckets=1000)357 with self.test_session() as sess:358 out = sess.run(op)359 self.assertEqual(6, len(out.values))360 self.assertAllEqual([[0, i] for i in range(6)], out.indices)361 self.assertTrue(all(x < 1000 and x >= 0 for x in out.values))362 all_values_are_different = len(out.values) == len(set(out.values))363 self.assertTrue(all_values_are_different)364 def _assert_sparse_tensor_empty(self, sp):365 self.assertEquals(0, sp.indices.size)366 self.assertEquals(0, sp.values.size)367 # TODO(zakaria): check if we can ignore the first dim of the shape.368 self.assertEquals(0, sp.dense_shape[1])369 def _assert_sparse_tensor_equals(self, sp1, sp2):370 self.assertAllEqual(sp1.indices.eval(), sp2.indices)371 self.assertAllEqual(sp1.values.eval(), sp2.values)372 self.assertAllEqual(sp1.dense_shape.eval(), sp2.dense_shape)373 def _sparse_tensor(self, data, batch_size=-1):374 """Generates a SparseTensor.375 Args:376 data: Should be a list of list of strings or int64. Each item of the outer377 list represents a batch. Each item of the batch is a feature of a378 specific feature column.379 batch_size: optional batch size, especially for cases when data has no380 entry for some batches.381 Returns:382 A SparseTensor.383 """384 indices = []385 values = []386 max_col_count = 0387 for batch, batch_ix in zip(data, range(len(data))):388 for column, column_ix in zip(batch, range(len(batch))):389 indices.append([batch_ix, column_ix])390 values.append(column)391 max_col_count = max(max_col_count, column_ix + 1)392 shape = [batch_size if batch_size != -1 else len(data), max_col_count]393 value_type = (dtypes.string if not values or isinstance(values[0], str) else394 dtypes.int64)395 return sparse_tensor.SparseTensor(396 constant_op.constant(indices, dtypes.int64, [len(indices), 2]),397 constant_op.constant(values, value_type, [len(indices)]),398 constant_op.constant(shape, dtypes.int64))399if __name__ == '__main__':...

Full Screen

Full Screen

general.js

Source:general.js Github

copy

Full Screen

1truncate_constants: {2 options = {3 features : "ASTREL"4 };5 input: {6 function chunkData() { 7 var x = "very long string, very long string, very long string, very long string, very long string, very long string, very long string, very long string, very long string, very long string, very long string, very long string";8 }9 }10 expect: {11 '{12 "query":[13 {"a": 0, "b": 1, "f2": ":VarDef[1]-String"}14 ],15 "assign":[16 {"v": 0, "inf": "x"},17 {"v": 1, "giv": "very%20long%20string%2C%20very%20long%20string%2C%20very%20long%20string%2C%20very%20long%20"}18 ]19 }'20 }21}22escape_constants: {23 options = {24 features : "ASTREL"25 };26 input: {27 function chunkData() { 28 var x = '"quoted text"';29 }30 }31 expect: {32 '{33 "query":[34 {"a": 0, "b": 1, "f2": ":VarDef[1]-String"}35 ],36 "assign":[37 {"v": 0, "inf": "x"},38 {"v": 1, "giv": "%22quoted%20text%22"}39 ]40 }'41 }42}43var_scope: {44 options = {45 features : "ASTREL"46 };47 input: {48 function chunkData() { 49 var a = 1;50 var b = 2;51 var x = a + b;52 x = a + b;53 }54 }55 expect: {56 '{57 "query":[58 {"a": 0, "b": 1, "f2": ":VarDef[1]-Number"},59 {"a": 2, "b": 3, "f2": ":VarDef[1]-Number"},60 {"a": 4, "b": 0, "f2": ":VarDef[1]Binary+[0]"},61 {"a": 4, "b": 2, "f2": ":VarDef[1]Binary+[1]"},62 {"a": 0, "b": 2, "f2": ":Binary+[1]"},63 {"a": 4, "b": 0, "f2": ":Assign=[1]Binary+[0]"},64 {"a": 4, "b": 2, "f2": ":Assign=[1]Binary+[1]"}65 ],66 "assign":[67 {"v": 0, "inf": "a"},68 {"v": 1, "giv": "1"},69 {"v": 2, "inf": "b"},70 {"v": 3, "giv": "2"},71 {"v": 4, "inf": "x"}72 ]73 }'74 }75}76this_scope: {77 options = {78 features : "ASTREL"79 };80 input: {81 function chunkData(a) {82 this.x = a; 83 }84 function chunkData2(a) {85 this.x = a; 86 }87 }88 expect: {89 '{90 "query":[91 {"a": 0, "b": 1, "f2": ":Assign=[1]"}, 92 {"a": 2, "b": 1, "f2": "Dot[0]:Assign=[1]"},93 {"a": 0, "b": 3, "f2": ":Assign=[1]"}, 94 {"a": 2, "b": 3, "f2": "Dot[0]:Assign=[1]"}95 ],96 "assign":[97 {"v": 0, "giv": "x"},98 {"v": 1, "inf": "a"},99 {"v": 2, "giv": "this"},100 {"v": 3, "inf": "a"} 101 ]102 }'103 }104}105this_is_given: {106 options = {107 features : "ASTREL"108 };109 input: {110 function chunkData(a) {111 this.x = a; 112 }113 }114 expect: {115 '{116 "query":[117 {"a": 0, "b": 1, "f2": ":Assign=[1]"}, 118 {"a": 2, "b": 1, "f2": "Dot[0]:Assign=[1]"}119 ],120 "assign":[121 {"v": 0, "giv": "x"},122 {"v": 1, "inf": "a"},123 {"v": 2, "giv": "this"}124 ]125 }'126 }127}128this_attr_scope: {129 options = {130 features : "ASTREL"131 };132 input: {133 function chunkData(a,b) {134 this.x = a;135 this.x = b;136 }137 }138 expect: {139 '{140 "query":[141 {"a": 0, "b": 1, "f2": ":Assign=[1]"}, 142 {"a": 2, "b": 1, "f2": "Dot[0]:Assign=[1]"},143 {"a": 0, "b": 3, "f2": ":Assign=[1]"},144 {"a": 2, "b": 3, "f2": "Dot[0]:Assign=[1]"}145 ],146 "assign":[147 {"v": 0, "giv": "x"},148 {"v": 1, "inf": "a"},149 {"v": 2, "giv": "this"},150 {"v": 3, "inf": "b"}151 ]152 }'153 }154}155bool_const_type: {156 options = {157 features : "FNAMES"158 };159 input: {160 function chunkData() { 161 var x = true;162 }163 }164 expect: {165 '{166 "query":[167 {"a": 0, "b": 1, "f2": "FNDECL"} 168 ],169 "assign":[170 {"v": 0, "giv": "chunkData"},171 {"v": 1, "inf": "x"} 172 ]173 }'174 }175}176handles_toString_call: {177 options = {178 features : "FNAMES"179 };180 input: {181 function chunkData() { 182 var x = true;183 x.toString();184 }185 }186 expect: {187 '{188 "query":[189 {"a": 0, "b": 1, "f2": "FNDECL"}190 ],191 "assign":[192 {"v": 0, "giv": "chunkData"},193 {"v": 1, "inf": "x"} 194 ]195 }'196 }197}198escape_backslash: {199 options = {200 features : "FNAMES"201 };202 input: {203 function chunkData(x) { 204 x.replace(/\s/g, "a");205 }206 }207 expect: {208 '{209 "query":[210 {"a": 0, "b": 1, "f2": "FNPAR"} 211 ],212 "assign":[213 {"v": 0, "giv": "chunkData"},214 {"v": 1, "inf": "x"} 215 ]216 }'217 }218}219func_no_duplicates: {220 options = {221 features : "ASTREL"222 };223 input: {224 function chunkData() { 225 var a = new chunkData();226 a = new chunkData(); 227 }228 }229 expect: {230 '{231 "query":[232 {"a": 0, "b": 1, "f2": ":VarDef[1]New[0]"},233 {"a": 0, "b": 1, "f2": ":Assign=[1]New[0]"}234 ],235 "assign":[236 {"v": 0, "inf": "a"},237 {"v": 1, "giv": "chunkData"}238 ]239 }'240 }241}242func_allow_different_features_duplicates: {243 options = {244 features : "ASTREL"245 };246 input: {247 function chunkData(x) { 248 x.foo(42, 42, 42, 42);249 return 42;250 }251 }252 expect: {253 '{254 "query":[255 {"a": 0, "b": 1, "f2": ":Dot[0]"},256 {"a": 0, "b": 2, "f2": "Dot[0]:Call[1]-Number"},257 {"a": 0, "b": 2, "f2": "Dot[0]:Call[2]-Number"},258 {"a": 0, "b": 2, "f2": "Dot[0]:Call[3]-Number"},259 {"a": 0, "b": 2, "f2": "Dot[0]:Call[4]-Number"}260 ],261 "assign":[262 {"v": 0, "inf": "x"},263 {"v": 1, "giv": "foo"},264 {"v": 2, "giv": "42"}265 ]266 }'267 }268}269method_name_fixed: { 270 input: {271 function chunkData(x) { 272 x.foo();273 bar();274 }275 }276 expect: {277 '{278 "query":[279 {"a": 0, "b": 1, "f2": ":Dot[0]"},280 {"a": 2, "b": 0, "f2": "FNPAR"}281 ],282 "assign":[283 {"v": 0, "inf": "x"},284 {"v": 1, "giv": "foo"},285 {"v": 2, "giv": "chunkData"}286 ]287 }'288 }...

Full Screen

Full Screen

generating_dates.py

Source:generating_dates.py Github

copy

Full Screen

1import sys2import glob3import os4# This below is just a logic check to make sure that you aren't using an empty directory, so to make sure you have5# your directory right before you try filling the array, i've hashed it out as it is not really needed for the code6# but could be useful when adding a new location or directory7#numbfile = len(glob.glob('../data/20*.dat'))8#print (numbfile)9# Below is where the java script is created, this shouldnt break, and there is no need to edit it, this part is10# completely static11javascript= '../html/js/darkskiesdata.js'12f2=open(javascript,'w')13f2.write(str("var darkSkyEvents; \14darkSkyEvents = \15 ["))16#######################################################################################################################17 # DO NOT EDIT ABOVE THIS LINE #18#######################################################################################################################19#The below loops create a java script array containing all the details needed to populate the calander on the websie20#This one bellow is for the Uni observatory21for infile in sorted(glob.glob('../demodata/mu_graph/20*.png')):22 currentFile = os.path.basename(infile)23 f2.write(str("{\n" ))24 #print (("date:" + "\'" + (currentFile[0:4])+ "/" + (currentFile[4:6]) + "/" + (currentFile[6:8])+ "\'"))25 f2.write(str(("date:" + "\'" + (currentFile[0:4])+ "/" + (currentFile[4:6]) + "/" + (currentFile[6:8])+ "\',\n")))26 f2.write(str(("title: \'Macquarie Uni\',\n" )))27 f2.write(str(("desc: \'" + currentFile +"',\n" )))28 f2.write(str(("graph: \'" + "images/" + currentFile + "',\n")))29 f2.write(str(("dataFile: \'" + "data/" + currentFile.replace(".png", ".dat") + "'\n")))30 f2.write(str("},\n"))31# This one is for SSO32for infile2 in sorted(glob.glob('../demodata/sso_graph/20*.png')):33 currentFile2 = os.path.basename(infile2)34 f2.write(str("{\n" ))35 #print (("date:" + "\'" + (currentFile2[0:4])+ "/" + (currentFile[4:6]) + "/" + (currentFile[6:8])+ "\'"))36 f2.write(str(("date:" + "\'" + (currentFile2[0:4])+ "/" + (currentFile2[4:6]) + "/" + (currentFile2[6:8])+ "\',\n")))37 f2.write(str(("title: \'Siding Springs\',\n" )))38 f2.write(str(("desc: \'" + currentFile2 +"',\n" )))39 f2.write(str(("graph: \'" + "images/"+ currentFile2 + "',\n")))40 f2.write(str(("dataFile: \'" + "data/" + currentFile2.replace(".png", ".dat") + "'\n")))#41 f2.write(str("},\n" ))42# Template below43 # If you ever need to add any more locations all you need to do is follow this template, you will need to chang the44 # path in the glob bellow to the location of the new images, which will likely only mean changing the sso_graph to the45 # new folder being used. Must also change the infile2 to infilen n being an new number and the same wiht currentFile46 # IMPORTANT: the indents must be kept as they are so only remove the hashes, otherwise the loop will not work47#for infile2 in sorted(glob.glob('../demodata/sso_graph/20*.png')):48# currentFile2 = os.path.basename(infile2)49 # f2.write(str("{\n" ))50 # #print (("date:" + "\'" + (currentFile2[0:4])+ "/" + (currentFile[4:6]) + "/" + (currentFile[6:8])+ "\'"))51 # f2.write(str(("date:" + "\'" + (currentFile2[0:4])+ "/" + (currentFile2[4:6]) + "/" + (currentFile2[6:8])+ "\',\n")))52 # f2.write(str(("title: \'(LOCATION)\',\n" )))53 # f2.write(str(("desc: \'" + currentFile2 +"',\n" )))54 # f2.write(str(("graph: \'" + "images/"+ currentFile2 + "',\n")))55 # f2.write(str(("dataFile: \'" + "data/" + currentFile2.replace(".png", ".dat") + "'\n")))#56 # f2.write(str("},\n" ))57#######################################################################################################################58 # DO NOT EDIT BELOW THIS LINE #59#######################################################################################################################60#The below block of code closes the array and once again as before is completely static so need not be messed with61f2.write(str("\n{\n" ))62f2.write(str(("date: \'1996/12/12\',")))63f2.write(str(("title: \'A legend was born\',")))64f2.write(str(("desc: \'Well done for finding my easter egg!\'")))65f2.write(str("}\n\n" ))66f2.write(str(" ];\n"))...

Full Screen

Full Screen

autogen_x86imm.py

Source:autogen_x86imm.py Github

copy

Full Screen

1#!/usr/bin/python2# By Nguyen Anh Quynh, 20153# This tool extract sizes of immediadte operands from X86 instruction names.4# Syntax: ./autogen_x86imm.py5# Gather immediate sizes to put into X86ImmSize.inc6OUTPUT = "../arch/X86/X86ImmSize.inc"7f = open("../arch/X86/X86GenInstrInfo.inc")8f2 = open(OUTPUT, "w")9for line in f.readlines():10 tmp = line.strip().split("=")11 if len(tmp) == 2: # X86_xxx = nnn,12 name = tmp[0].strip()13 if name == "X86_INSTRUCTION_LIST_END": # no more instructions14 break15 if name.endswith("_DB"): # pseudo instruction16 continue17 if "_LOCK_" in name or "BEXTR" in name: # exception18 continue19 if name.startswith("X86_"): # instruction20 if name.endswith("16mi8"):21 f2.write("{2, %s},\n" %name)22 elif name.endswith("16ri8"):23 f2.write("{2, %s},\n" %name)24 elif name.endswith("32ri8"):25 f2.write("{4, %s},\n" %name)26 elif name.endswith("32mi8"):27 f2.write("{4, %s},\n" %name)28 elif name.endswith("64i32"):29 f2.write("{8, %s},\n" %name)30 elif name.endswith("64mi32"):31 f2.write("{8, %s},\n" %name)32 elif name.endswith("64ri32"):33 f2.write("{8, %s},\n" %name)34 elif name.endswith("64ri8"):35 f2.write("{8, %s},\n" %name)36 elif name.endswith("64mi8"):37 f2.write("{8, %s},\n" %name)38 elif name.endswith("16rmi8"):39 f2.write("{2, %s},\n" %name)40 elif name.endswith("32rmi8"):41 f2.write("{4, %s},\n" %name)42 elif name.endswith("16rri8"):43 f2.write("{2, %s},\n" %name)44 elif name.endswith("32rri8"):45 f2.write("{4, %s},\n" %name)46 elif name.endswith("64rmi8"):47 f2.write("{8, %s},\n" %name)48 elif name.endswith("64rmi32"):49 f2.write("{8, %s},\n" %name)50 elif name.endswith("64rri32"):51 f2.write("{8, %s},\n" %name)52 elif name.endswith("64rri8"):53 f2.write("{8, %s},\n" %name)54 elif name.endswith("32ri64"): # special case55 f2.write("{8, %s},\n" %name)56 elif name.endswith("16i8"): # special case57 f2.write("{2, %s},\n" %name)58 elif name.endswith("32i8"): # special case59 f2.write("{4, %s},\n" %name)60 elif name.endswith("64i16"): # special case61 f2.write("{8, %s},\n" %name)62 elif name.endswith("64i8"): # special case63 f2.write("{8, %s},\n" %name)64 elif name.endswith("i8") or "i8_" in name:65 f2.write("{1, %s},\n" %name)66 elif "8ri" in name or "8mi" in name:67 f2.write("{1, %s},\n" %name)68 elif name.endswith("i16") or "i16_" in name:69 f2.write("{2, %s},\n" %name)70 elif "16ri" in name or "16mi" in name:71 f2.write("{2, %s},\n" %name)72 elif name.endswith("i32") or "i32_" in name:73 f2.write("{4, %s},\n" %name)74 elif "32ri" in name or "32mi" in name:75 f2.write("{4, %s},\n" %name)76 elif name.endswith("i64") or "i64_" in name:77 f2.write("{8, %s},\n" %name)78 elif "64ri" in name or "64mi" in name:79 f2.write("{8, %s},\n" %name)80f.close()81f2.close()...

Full Screen

Full Screen

informeAccidentesTrabajadorCtrl.js

Source:informeAccidentesTrabajadorCtrl.js Github

copy

Full Screen

1Vue.use(VeeValidate)2Vue.component('v-select', VueSelect.VueSelect);3window.onload = function(){4 var notificacionTrabajador = new Vue({5 el: '#notificacionTrabajador',6 created() {7 this.getAccidentes()8 this.$validator.localize('es')9 }, 10 mounted(){11 var self = this12 $.datepicker.regional['es'] = {13 closeText: 'Cerrar',14 prevText: '<Anterior',15 nextText: 'Siguiente>',16 currentText: 'Hoy',17 monthNames: ['Enero', 'Febrero', 'Marzo', 'Abril', 'Mayo', 'Junio', 'Julio', 'Agosto', 'Septiembre', 'Octubre', 'Noviembre', 'Diciembre'],18 monthNamesShort: ['Ene','Feb','Mar','Abr', 'May','Jun','Jul','Ago','Sep', 'Oct','Nov','Dic'],19 dayNames: ['Domingo', 'Lunes', 'Martes', 'Miércoles', 'Jueves', 'Viernes', 'Sábado'],20 dayNamesShort: ['Dom','Lun','Mar','Mié','Juv','Vie','Sáb'],21 dayNamesMin: ['Do','Lu','Ma','Mi','Ju','Vi','Sá'],22 weekHeader: 'Sm',23 dateFormat: 'dd-mm-yy',24 firstDay: 1,25 isRTL: false,26 showMonthAfterYear: false,27 changeYear: true,28 yearSuffix: ''29 };30 },31 data:{32 vista1: false,33 personaId : 0,34 b: [],35 fecha_accidente: null,36 lugar_del_accidente:'',37 descripcion:'',38 lesion:'',39 area_del_cuerpo_id:'',40 hora_accidente: null,41 cedula:"",42 hora_accidente: null,43 nombres: "",44 datos:false,45 lista1:[],46 paginacion:{47 paginate:{currentPage:1},48 totalItems:null,49 itemsPerPage:550 }51 },52 methods:{53 getAccidentes(){54 axios.post('getaccidentes').then(r =>{55 if (r.data['resultado']== 'sin datos'){56 swal('Atención', 'Estimado(a) usuario(a) no tiene datos', 'error')57 .then(response => {58 if(response){59 var l = location.href60 l = l.split('/informacionInmediata/')61 l.pop()62 var url = l.join('/')63 window.location.href = url64 this.datos = false65 }66 })67 }else{68 this.datos = true69 this.lista1 = r.data70 this.paginacion.totalItems = r.data.length71 72 }73 })74 },75 formatoVw(date){76 var f2 = date.split('-')77 var fecha = f2[2].length==4? f2[0]+'-'+f2[1]+'-'+f2[2]:f2[2]+'-'+f2[1]+'-'+f2[0]78 return fecha79 },80 formatoDB (date) {81 var f2 = date.split('-')82 var fecha = f2[2].length==4? f2[2]+'-'+f2[1]+'-'+f2[0]:f2[0]+'-'+f2[1]+'-'+f2[2]83 return fecha84 }, 85 pdf(accidente){86 window.open('pdfAccidente/' + accidente.id,'_blank')87 },88 verDatos(b){89 this.vista1 = true90 this.datos = false91 this.fecha_accidente = this.formatoVw(b.fecha_del_accidente)92 this.lugar_del_accidente = b.lugar_del_accidente93 this.descripcion = b.descripcion94 this.lesion = b.lesion.descripcion95 this.area_del_cuerpo_id = b.area_cuerpo.descripcion96 this.hora_accidente = b.hora_accidente97 this.cedula = b.persona.cedula_identidad98 this.hora_accidente = b.hora_del_accidente99 this.nombres = b.persona.primer_nombre + " " + b.persona.primer_apellido 100 },101 atras1(){102 this.vista1 = false103 this.datos =true104 },105 },106 computed: {107 array () {108 return this.lista1109 .slice(((this.paginacion.paginate.currentPage - 1) * this.paginacion.itemsPerPage),110 (this.paginacion.paginate.currentPage * this.paginacion.itemsPerPage)); 111 } 112 113 }114 })...

Full Screen

Full Screen

modifier-semicolon-insertion.js

Source:modifier-semicolon-insertion.js Github

copy

Full Screen

1Reflect.parse(`2function a()f1()3f2()4`);5Reflect.parse(`6let a7f2()8`);9Reflect.parse(`10let a=111f2()12`);13Reflect.parse(`14import 'a'15f2()16`, {target: "module"});17Reflect.parse(`18export { a } from 'a'19f2()20`, {target: "module"});21Reflect.parse(`22var a23f2()24`);25Reflect.parse(`26var a=127f2()28`);29Reflect.parse(`30f1()31f2()32`);33Reflect.parse(`34while(false) { continue35f2() }36`);37Reflect.parse(`38while(false) { break39f2() }40`);41Reflect.parse(`42function a() { return43f2() }44`);45Reflect.parse(`46throw 147f2()48`);49Reflect.parse(`50debugger51f2()...

Full Screen

Full Screen

Using AI Code Generation

copy

Full Screen

1var differencify = require('differencify');2var differencify = require('differencify');3var differencify = require('differencify');4differencify.init({5});6describe('Differencify', function () {7 this.timeout(30000);8 it('should take a screenshot', function () {9 var screenshot = browser.saveScreen('google');10 expect(screenshot).to.matchImage('google');11 });12});

Full Screen

Using AI Code Generation

copy

Full Screen

1const differencify = require('differencify');2const differencifyConfig = {3 diffOptions: {4 },5 {6 }7};8const f2 = differencify.init(differencifyConfig);9f2.initSuite('test suite', () => {10 f2.initTest('test 1', () => {11 f2.test('test 1', async (page, testInfo) => {12 });13 });14});15### init(config)16Default: `{ thresholdType: 'percent', threshold: 0.01 }`17The options to be passed to the [pixelmatch](

Full Screen

Using AI Code Generation

copy

Full Screen

1const diff = require('differencify').f2;2diff({3 formatImageName: '{tag}-{logName}-{width}x{height}',4});5const diff = require('differencify').f3;6diff({7 formatImageName: '{tag}-{logName}-{width}x{height}',8});9const diff = require('differencify').f4;10diff({11 formatImageName: '{tag}-{logName}-{width}x{height}',12});13const diff = require('differencify').f5;14diff({15 formatImageName: '{tag}-{logName}-{width}x{height}',16});17const diff = require('differencify').f6;18diff({

Full Screen

Using AI Code Generation

copy

Full Screen

1const differencify = require("differencify");2const assert = require("assert");3describe("My Test", () => {4 it("should be equal", async () => {5 assert.equal(result.isSameDimensions, true);6 });7});8### differencify.f2(url, [options])9Device name. See [DeviceDescriptors](

Full Screen

Using AI Code Generation

copy

Full Screen

1var differencify = require('differencify');2var differencify = new differencify();3 if (err) {4 console.log(err);5 } else {6 console.log(data);7 }8});9var differencify = require('differencify');10var differencify = new differencify();11 if (err) {12 console.log(err);13 } else {14 console.log(data);15 }16});

Full Screen

Using AI Code Generation

copy

Full Screen

1var differencify = require('differencify');2var assert = require('assert');3var fs = require('fs');4var path = require('path');5var diff = differencify.init({});6describe('differencify', function() {7 it('should work', function() {8 var img1 = fs.readFileSync(path.join(__dirname, 'img1.png'));9 var img2 = fs.readFileSync(path.join(__dirname, 'img2.png'));10 var diffImg = diff.f2(img1, img2);11 fs.writeFileSync(path.join(__dirname, 'diff.png'), diffImg);12 assert(diffImg.length > 0);13 });14});

Full Screen

Using AI Code Generation

copy

Full Screen

1var differencify = require('differencify');2var f2 = differencify.f2;3 output: {4 errorColor: {5 },6 }7}).then(function (result) {8 console.log(result);9}).catch(function (err) {10 console.log(err);11});

Full Screen

Using AI Code Generation

copy

Full Screen

1var differencify = require('differencify');2var differencifyInstance = differencify.init({3});4 if (err) {5 console.log(err);6 } else {7 console.log(result);8 }9});10 if (err) {11 console.log(err);12 } else {13 console.log(result);14 }15});16var differencify = require('differencify');17var differencifyInstance = differencify.init({18});19console.log(result);20console.log(result);21var differencify = require('differencify');22var differencifyInstance = differencify.init({23});24 if (err) {25 console.log(err);26 } else {27 console.log(result);28 }29});30 if (err) {31 console.log(err);32 } else {33 console.log(result);34 }35});

Full Screen

Using AI Code Generation

copy

Full Screen

1const diff = require('differencify');2const fs = require('fs');3const differencify = diff();4const image1 = fs.readFileSync('image1.png');5const image2 = fs.readFileSync('image2.png');6const result = differencify.f2(image1, image2);7console.log(result);8[MIT License](

Full Screen

Automation Testing Tutorials

Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.

LambdaTest Learning Hubs:

YouTube

You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.

Run differencify automation tests on LambdaTest cloud grid

Perform automation testing on 3000+ real desktop and mobile devices online.

Try LambdaTest Now !!

Get 100 minutes of automation test minutes FREE!!

Next-Gen App & Browser Testing Cloud

Was this article helpful?

Helpful

NotHelpful