diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index dd6e871..2d11a16 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -21,10 +21,16 @@ jobs: runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v2 - - name: Use Node.js 14 + - name: Setup Python + uses: actions/setup-python@v5 + with: + python-version: '3.10' + - name: Use Node.js 21 uses: actions/setup-node@v3 with: - node-version: 16 + node-version: 21 + - name: Install setuptools + run: pip install setuptools - name: Install Packages run: npm install - name: Build @@ -47,4 +53,4 @@ jobs: run: | gh release upload --clobber "${GITHUB_REF#refs/tags/}" dist/*/* env: - GITHUB_TOKEN: ${{ secrets.GH_TOKEN }} \ No newline at end of file + GITHUB_TOKEN: ${{ secrets.GH_TOKEN }} diff --git a/.gitignore b/.gitignore index 8800630..b3b5b74 100644 --- a/.gitignore +++ b/.gitignore @@ -44,6 +44,8 @@ build/Release # Dependency directories node_modules/ jspm_packages/ +.vs/ +.vscode/ # Snowpack dependency directory (https://snowpack.dev/) web_modules/ diff --git a/README.md b/README.md new file mode 100644 index 0000000..e122dcf --- /dev/null +++ b/README.md @@ -0,0 +1 @@ +This is an app for XRP Blockly stuff that has been modified by Team 5338 RoboLoco to actually work and support saving. diff --git a/app/electron/apis.js b/app/electron/apis.js index 0b9ce94..5e61fce 100644 --- a/app/electron/apis.js +++ b/app/electron/apis.js @@ -1,6 +1,6 @@ const { dialog } = require('electron'); const path = require('path'); -const fs = require('fs'); +const fs = require('fs-extra'); const drivelist = require('drivelist'); /* List of all APIS */ @@ -16,8 +16,8 @@ global.share.ipcMain.handle('open-file', handleOpenFile); async function handleSaveCode(event, req) { const appState = JSON.parse(fs.readFileSync(path.join(__dirname, "../state.json"))); if (appState.fullPath != "") { - let filePath = path.join(appState.fullPath, req.filename); - fs.writeFileSync(filePath, req.content); + let filePath = path.join(appState.fullPath, req.filename); + fs.writeFileSync(filePath, req.content); return { status: 200, payload: path.basename(filePath, path.extname(filePath)), @@ -61,15 +61,16 @@ async function handleSaveAsCode(event, req) { }; // Uploads Code to robot -async function handleUploadCode (event, code) { +async function handleUploadCode(event, code) { try { let drives = await drivelist.list(); - + let first_bot = drives.find(x => x.description.includes('Maker Pi RP2040')); let first_bot_drive = first_bot.mountpoints[0].path; let output_filepath = path.join(first_bot_drive, 'code.py'); + let initLib = initializeCodeLibrary(first_bot_drive) fs.writeFileSync(output_filepath, code); - + return { status: 201, message: "Code Uploaded" @@ -80,8 +81,32 @@ async function handleUploadCode (event, code) { message: `Internal Error: ${e}` }; } + }; + +function initializeCodeLibrary(fpath) { + try { + const wpilibLoc = path.join(__dirname, "../lib/WPILib"); + let output_filepath = path.join(fpath, 'WPILib'); + fs.pathExists(output_filepath).then(exists => { + if (exists) { + return true + } else { + fs.copy(wpilibLoc, output_filepath).then(() => { + return true + }) + .catch(err => { + console.error(err) + }) + } + } + ); + } catch (e) { + return false; + } +} + // Opens File async function handleOpenFile(event, req) { const filePath = dialog.showOpenDialogSync({ @@ -93,7 +118,7 @@ async function handleOpenFile(event, req) { if (filePath) { let inputFile = fs.readFileSync(filePath[0], { encoding: 'utf8' }); - + return { status: 200, payload: { diff --git a/app/electron/main.js b/app/electron/main.js index 0f9cc7e..786c72c 100644 --- a/app/electron/main.js +++ b/app/electron/main.js @@ -3,7 +3,7 @@ // Modules to control application life and create native browser window const { app, BrowserWindow, ipcMain, dialog } = require('electron'); const path = require('path'); -const fs = require('fs'); +const fs = require('fs-extra'); const drivelist = require('drivelist'); const { SerialPort } = require('serialport'); var AsyncPolling = require('async-polling'); @@ -34,7 +34,8 @@ createWindow = () => { }); // and load the index.html of the app. - mainWindow.loadFile('index.html') + // mainWindow.loadFile('../../index.html') + mainWindow.loadFile('../app/index.html') mainWindow.setMenu(null); // Open the DevTools. @@ -48,6 +49,15 @@ var stoppingPorts = false; // This method will be called when Electron has finished // initialization and is ready to create browser windows. // Some APIs can only be used after this event occurs. +fs.access(path.join(__dirname, "../state.json"), err => { + if (err) { + console.log('The file does not exist.'); + fs.writeFile(path.join(__dirname, "../state.json"), JSON.stringify({"fullPath":""}), test); + } +}); +function test(){ + console.log("File Created"); +} app.whenReady().then(() => { ipcMain.handle('load-appstate', () => { return { diff --git a/app/js/python-compressed.js b/app/js/python-compressed.js index 55cacf1..47d48d2 100644 --- a/app/js/python-compressed.js +++ b/app/js/python-compressed.js @@ -2,106 +2,106 @@ /* eslint-disable */ ;(function(root, factory) { - if (typeof define === 'function' && define.amd) { // AMD - define(["./blockly_compressed.js"], factory); - } else if (typeof exports === 'object') { // Node.js - module.exports = factory(require("./blockly_compressed.js")); - } else { // Browser - var factoryExports = factory(root.Blockly); - root.Blockly.Python = factoryExports; - } -}(this, function(__parent__) { -var $=__parent__.__namespace__; -var module$contents$Blockly$Python_Python=new $.module$exports$Blockly$Generator.Generator("Python");module$contents$Blockly$Python_Python.addReservedWords("False,None,True,and,as,assert,break,class,continue,def,del,elif,else,except,exec,finally,for,from,global,if,import,in,is,lambda,nonlocal,not,or,pass,print,raise,return,try,while,with,yield,NotImplemented,Ellipsis,__debug__,quit,exit,copyright,license,credits,ArithmeticError,AssertionError,AttributeError,BaseException,BlockingIOError,BrokenPipeError,BufferError,BytesWarning,ChildProcessError,ConnectionAbortedError,ConnectionError,ConnectionRefusedError,ConnectionResetError,DeprecationWarning,EOFError,Ellipsis,EnvironmentError,Exception,FileExistsError,FileNotFoundError,FloatingPointError,FutureWarning,GeneratorExit,IOError,ImportError,ImportWarning,IndentationError,IndexError,InterruptedError,IsADirectoryError,KeyError,KeyboardInterrupt,LookupError,MemoryError,ModuleNotFoundError,NameError,NotADirectoryError,NotImplemented,NotImplementedError,OSError,OverflowError,PendingDeprecationWarning,PermissionError,ProcessLookupError,RecursionError,ReferenceError,ResourceWarning,RuntimeError,RuntimeWarning,StandardError,StopAsyncIteration,StopIteration,SyntaxError,SyntaxWarning,SystemError,SystemExit,TabError,TimeoutError,TypeError,UnboundLocalError,UnicodeDecodeError,UnicodeEncodeError,UnicodeError,UnicodeTranslateError,UnicodeWarning,UserWarning,ValueError,Warning,ZeroDivisionError,_,__build_class__,__debug__,__doc__,__import__,__loader__,__name__,__package__,__spec__,abs,all,any,apply,ascii,basestring,bin,bool,buffer,bytearray,bytes,callable,chr,classmethod,cmp,coerce,compile,complex,copyright,credits,delattr,dict,dir,divmod,enumerate,eval,exec,execfile,exit,file,filter,float,format,frozenset,getattr,globals,hasattr,hash,help,hex,id,input,int,intern,isinstance,issubclass,iter,len,license,list,locals,long,map,max,memoryview,min,next,object,oct,open,ord,pow,print,property,quit,range,raw_input,reduce,reload,repr,reversed,round,set,setattr,slice,sorted,staticmethod,str,sum,super,tuple,type,unichr,unicode,vars,xrange,zip"); -module$contents$Blockly$Python_Python.ORDER_ATOMIC=0;module$contents$Blockly$Python_Python.ORDER_COLLECTION=1;module$contents$Blockly$Python_Python.ORDER_STRING_CONVERSION=1;module$contents$Blockly$Python_Python.ORDER_MEMBER=2.1;module$contents$Blockly$Python_Python.ORDER_FUNCTION_CALL=2.2;module$contents$Blockly$Python_Python.ORDER_EXPONENTIATION=3;module$contents$Blockly$Python_Python.ORDER_UNARY_SIGN=4;module$contents$Blockly$Python_Python.ORDER_BITWISE_NOT=4; -module$contents$Blockly$Python_Python.ORDER_MULTIPLICATIVE=5;module$contents$Blockly$Python_Python.ORDER_ADDITIVE=6;module$contents$Blockly$Python_Python.ORDER_BITWISE_SHIFT=7;module$contents$Blockly$Python_Python.ORDER_BITWISE_AND=8;module$contents$Blockly$Python_Python.ORDER_BITWISE_XOR=9;module$contents$Blockly$Python_Python.ORDER_BITWISE_OR=10;module$contents$Blockly$Python_Python.ORDER_RELATIONAL=11;module$contents$Blockly$Python_Python.ORDER_LOGICAL_NOT=12; -module$contents$Blockly$Python_Python.ORDER_LOGICAL_AND=13;module$contents$Blockly$Python_Python.ORDER_LOGICAL_OR=14;module$contents$Blockly$Python_Python.ORDER_CONDITIONAL=15;module$contents$Blockly$Python_Python.ORDER_LAMBDA=16;module$contents$Blockly$Python_Python.ORDER_NONE=99; -module$contents$Blockly$Python_Python.ORDER_OVERRIDES=[[module$contents$Blockly$Python_Python.ORDER_FUNCTION_CALL,module$contents$Blockly$Python_Python.ORDER_MEMBER],[module$contents$Blockly$Python_Python.ORDER_FUNCTION_CALL,module$contents$Blockly$Python_Python.ORDER_FUNCTION_CALL],[module$contents$Blockly$Python_Python.ORDER_MEMBER,module$contents$Blockly$Python_Python.ORDER_MEMBER],[module$contents$Blockly$Python_Python.ORDER_MEMBER,module$contents$Blockly$Python_Python.ORDER_FUNCTION_CALL],[module$contents$Blockly$Python_Python.ORDER_LOGICAL_NOT, -module$contents$Blockly$Python_Python.ORDER_LOGICAL_NOT],[module$contents$Blockly$Python_Python.ORDER_LOGICAL_AND,module$contents$Blockly$Python_Python.ORDER_LOGICAL_AND],[module$contents$Blockly$Python_Python.ORDER_LOGICAL_OR,module$contents$Blockly$Python_Python.ORDER_LOGICAL_OR]];module$contents$Blockly$Python_Python.isInitialized=!1; -module$contents$Blockly$Python_Python.init=function(a){Object.getPrototypeOf(this).init.call(this);this.PASS=this.INDENT+"pass\n";this.nameDB_?this.nameDB_.reset():this.nameDB_=new $.module$exports$Blockly$Names.Names(this.RESERVED_WORDS_);this.nameDB_.setVariableMap(a.getVariableMap());this.nameDB_.populateVariables(a);this.nameDB_.populateProcedures(a);for(var b=[],c=(0,$.module$exports$Blockly$Variables.allDeveloperVariables)(a),d=0;dc?"int("+a+" - "+-c+")":"int("+a+")",d&&(a="-"+a));return a};$.Blockly.Python=module$contents$Blockly$Python_Python;var module$exports$Blockly$Python$variables={};$.Blockly.Python.variables_get=function(a){return[$.Blockly.Python.nameDB_.getName(a.getFieldValue("VAR"),$.module$exports$Blockly$Names.NameType.VARIABLE),$.Blockly.Python.ORDER_ATOMIC]};$.Blockly.Python.variables_set=function(a){var b=$.Blockly.Python.valueToCode(a,"VALUE",$.Blockly.Python.ORDER_NONE)||"0";return $.Blockly.Python.nameDB_.getName(a.getFieldValue("VAR"),$.module$exports$Blockly$Names.NameType.VARIABLE)+" = "+b+"\n"};var module$exports$Blockly$Python$variablesDynamic={};$.Blockly.Python.variables_get_dynamic=$.Blockly.Python.variables_get;$.Blockly.Python.variables_set_dynamic=$.Blockly.Python.variables_set;var module$exports$Blockly$Python$texts={};$.Blockly.Python.text=function(a){return[$.Blockly.Python.quote_(a.getFieldValue("TEXT")),$.Blockly.Python.ORDER_ATOMIC]};$.Blockly.Python.text_multiline=function(a){a=$.Blockly.Python.multiline_quote_(a.getFieldValue("TEXT"));var b=-1!==a.indexOf("+")?$.Blockly.Python.ORDER_ADDITIVE:$.Blockly.Python.ORDER_ATOMIC;return[a,b]}; -var module$contents$Blockly$Python$texts_strRegExp=/^\s*'([^']|\\')*'\s*$/,module$contents$Blockly$Python$texts_forceString=function(a){return module$contents$Blockly$Python$texts_strRegExp.test(a)?[a,$.Blockly.Python.ORDER_ATOMIC]:["str("+a+")",$.Blockly.Python.ORDER_FUNCTION_CALL]}; -$.Blockly.Python.text_join=function(a){switch(a.itemCount_){case 0:return["''",$.Blockly.Python.ORDER_ATOMIC];case 1:return a=$.Blockly.Python.valueToCode(a,"ADD0",$.Blockly.Python.ORDER_NONE)||"''",module$contents$Blockly$Python$texts_forceString(a);case 2:var b=$.Blockly.Python.valueToCode(a,"ADD0",$.Blockly.Python.ORDER_NONE)||"''";a=$.Blockly.Python.valueToCode(a,"ADD1",$.Blockly.Python.ORDER_NONE)||"''";return[module$contents$Blockly$Python$texts_forceString(b)[0]+" + "+module$contents$Blockly$Python$texts_forceString(a)[0], -$.Blockly.Python.ORDER_ADDITIVE];default:b=[];for(var c=0;ca?$.Blockly.Python.ORDER_UNARY_SIGN:$.Blockly.Python.ORDER_ATOMIC;return[a,b]}; -$.Blockly.Python.math_arithmetic=function(a){var b={ADD:[" + ",$.Blockly.Python.ORDER_ADDITIVE],MINUS:[" - ",$.Blockly.Python.ORDER_ADDITIVE],MULTIPLY:[" * ",$.Blockly.Python.ORDER_MULTIPLICATIVE],DIVIDE:[" / ",$.Blockly.Python.ORDER_MULTIPLICATIVE],POWER:[" ** ",$.Blockly.Python.ORDER_EXPONENTIATION]}[a.getFieldValue("OP")],c=b[0];b=b[1];var d=$.Blockly.Python.valueToCode(a,"A",b)||"0";a=$.Blockly.Python.valueToCode(a,"B",b)||"0";return[d+c+a,b]}; -$.Blockly.Python.math_single=function(a){var b=a.getFieldValue("OP");if("NEG"===b){var c=$.Blockly.Python.valueToCode(a,"NUM",$.Blockly.Python.ORDER_UNARY_SIGN)||"0";return["-"+c,$.Blockly.Python.ORDER_UNARY_SIGN]}$.Blockly.Python.definitions_.import_math="import math";a="SIN"===b||"COS"===b||"TAN"===b?$.Blockly.Python.valueToCode(a,"NUM",$.Blockly.Python.ORDER_MULTIPLICATIVE)||"0":$.Blockly.Python.valueToCode(a,"NUM",$.Blockly.Python.ORDER_NONE)||"0";switch(b){case "ABS":c="math.fabs("+a+")";break; -case "ROOT":c="math.sqrt("+a+")";break;case "LN":c="math.log("+a+")";break;case "LOG10":c="math.log10("+a+")";break;case "EXP":c="math.exp("+a+")";break;case "POW10":c="math.pow(10,"+a+")";break;case "ROUND":c="round("+a+")";break;case "ROUNDUP":c="math.ceil("+a+")";break;case "ROUNDDOWN":c="math.floor("+a+")";break;case "SIN":c="math.sin("+a+" / 180.0 * math.pi)";break;case "COS":c="math.cos("+a+" / 180.0 * math.pi)";break;case "TAN":c="math.tan("+a+" / 180.0 * math.pi)"}if(c)return[c,$.Blockly.Python.ORDER_FUNCTION_CALL]; -switch(b){case "ASIN":c="math.asin("+a+") / math.pi * 180";break;case "ACOS":c="math.acos("+a+") / math.pi * 180";break;case "ATAN":c="math.atan("+a+") / math.pi * 180";break;default:throw Error("Unknown math operator: "+b);}return[c,$.Blockly.Python.ORDER_MULTIPLICATIVE]}; -$.Blockly.Python.math_constant=function(a){var b={PI:["math.pi",$.Blockly.Python.ORDER_MEMBER],E:["math.e",$.Blockly.Python.ORDER_MEMBER],GOLDEN_RATIO:["(1 + math.sqrt(5)) / 2",$.Blockly.Python.ORDER_MULTIPLICATIVE],SQRT2:["math.sqrt(2)",$.Blockly.Python.ORDER_MEMBER],SQRT1_2:["math.sqrt(1.0 / 2)",$.Blockly.Python.ORDER_MEMBER],INFINITY:["float('inf')",$.Blockly.Python.ORDER_ATOMIC]};a=a.getFieldValue("CONSTANT");"INFINITY"!==a&&($.Blockly.Python.definitions_.import_math="import math");return b[a]}; -$.Blockly.Python.math_number_property=function(a){var b={EVEN:[" % 2 == 0",$.Blockly.Python.ORDER_MULTIPLICATIVE,$.Blockly.Python.ORDER_RELATIONAL],ODD:[" % 2 == 1",$.Blockly.Python.ORDER_MULTIPLICATIVE,$.Blockly.Python.ORDER_RELATIONAL],WHOLE:[" % 1 == 0",$.Blockly.Python.ORDER_MULTIPLICATIVE,$.Blockly.Python.ORDER_RELATIONAL],POSITIVE:[" > 0",$.Blockly.Python.ORDER_RELATIONAL,$.Blockly.Python.ORDER_RELATIONAL],NEGATIVE:[" < 0",$.Blockly.Python.ORDER_RELATIONAL,$.Blockly.Python.ORDER_RELATIONAL], -DIVISIBLE_BY:[null,$.Blockly.Python.ORDER_MULTIPLICATIVE,$.Blockly.Python.ORDER_RELATIONAL],PRIME:[null,$.Blockly.Python.ORDER_NONE,$.Blockly.Python.ORDER_FUNCTION_CALL]},c=a.getFieldValue("PROPERTY");b=$.$jscomp.makeIterator(b[c]);var d=b.next().value,e=b.next().value;b=b.next().value;e=$.Blockly.Python.valueToCode(a,"NUMBER_TO_CHECK",e)||"0";if("PRIME"===c)$.Blockly.Python.definitions_.import_math="import math",$.Blockly.Python.definitions_.from_numbers_import_Number="from numbers import Number", -a=$.Blockly.Python.provideFunction_("math_isPrime","\ndef "+$.Blockly.Python.FUNCTION_NAME_PLACEHOLDER_+"(n):\n # https://en.wikipedia.org/wiki/Primality_test#Naive_methods\n # If n is not a number but a string, try parsing it.\n if not isinstance(n, Number):\n try:\n n = float(n)\n except:\n return False\n if n == 2 or n == 3:\n return True\n # False if n is negative, is 1, or not whole, or if n is divisible by 2 or 3.\n if n <= 1 or n % 1 != 0 or n % 2 == 0 or n % 3 == 0:\n return False\n # Check all the numbers of form 6k +/- 1, up to sqrt(n).\n for x in range(6, int(math.sqrt(n)) + 2, 6):\n if n % (x - 1) == 0 or n % (x + 1) == 0:\n return False\n return True\n")+ -"("+e+")";else if("DIVISIBLE_BY"===c){a=$.Blockly.Python.valueToCode(a,"DIVISOR",$.Blockly.Python.ORDER_MULTIPLICATIVE)||"0";if("0"===a)return["False",$.Blockly.Python.ORDER_ATOMIC];a=e+" % "+a+" == 0"}else a=e+d;return[a,b]}; -$.Blockly.Python.math_change=function(a){$.Blockly.Python.definitions_.from_numbers_import_Number="from numbers import Number";var b=$.Blockly.Python.valueToCode(a,"DELTA",$.Blockly.Python.ORDER_ADDITIVE)||"0";a=$.Blockly.Python.nameDB_.getName(a.getFieldValue("VAR"),$.module$exports$Blockly$Names.NameType.VARIABLE);return a+" = ("+a+" if isinstance("+a+", Number) else 0) + "+b+"\n"};$.Blockly.Python.math_round=$.Blockly.Python.math_single;$.Blockly.Python.math_trig=$.Blockly.Python.math_single; -$.Blockly.Python.math_on_list=function(a){var b=a.getFieldValue("OP");a=$.Blockly.Python.valueToCode(a,"LIST",$.Blockly.Python.ORDER_NONE)||"[]";switch(b){case "SUM":b="sum("+a+")";break;case "MIN":b="min("+a+")";break;case "MAX":b="max("+a+")";break;case "AVERAGE":$.Blockly.Python.definitions_.from_numbers_import_Number="from numbers import Number";b=$.Blockly.Python.provideFunction_("math_mean","\ndef "+$.Blockly.Python.FUNCTION_NAME_PLACEHOLDER_+"(myList):\n localList = [e for e in myList if isinstance(e, Number)]\n if not localList: return\n return float(sum(localList)) / len(localList)\n")+ -"("+a+")";break;case "MEDIAN":$.Blockly.Python.definitions_.from_numbers_import_Number="from numbers import Number";b=$.Blockly.Python.provideFunction_("math_median","\ndef "+$.Blockly.Python.FUNCTION_NAME_PLACEHOLDER_+"(myList):\n localList = sorted([e for e in myList if isinstance(e, Number)])\n if not localList: return\n if len(localList) % 2 == 0:\n return (localList[len(localList) // 2 - 1] + localList[len(localList) // 2]) / 2.0\n else:\n return localList[(len(localList) - 1) // 2]\n")+ -"("+a+")";break;case "MODE":b=$.Blockly.Python.provideFunction_("math_modes","\ndef "+$.Blockly.Python.FUNCTION_NAME_PLACEHOLDER_+'(some_list):\n modes = []\n # Using a lists of [item, count] to keep count rather than dict\n # to avoid "unhashable" errors when the counted item is itself a list or dict.\n counts = []\n maxCount = 1\n for item in some_list:\n found = False\n for count in counts:\n if count[0] == item:\n count[1] += 1\n maxCount = max(maxCount, count[1])\n found = True\n if not found:\n counts.append([item, 1])\n for counted_item, item_count in counts:\n if item_count == maxCount:\n modes.append(counted_item)\n return modes\n')+ -"("+a+")";break;case "STD_DEV":$.Blockly.Python.definitions_.import_math="import math";b=$.Blockly.Python.provideFunction_("math_standard_deviation","\ndef "+$.Blockly.Python.FUNCTION_NAME_PLACEHOLDER_+"(numbers):\n n = len(numbers)\n if n == 0: return\n mean = float(sum(numbers)) / n\n variance = sum((x - mean) ** 2 for x in numbers) / n\n return math.sqrt(variance)\n")+"("+a+")";break;case "RANDOM":$.Blockly.Python.definitions_.import_random="import random";b="random.choice("+a+")";break;default:throw Error("Unknown operator: "+ -b);}return[b,$.Blockly.Python.ORDER_FUNCTION_CALL]};$.Blockly.Python.math_modulo=function(a){var b=$.Blockly.Python.valueToCode(a,"DIVIDEND",$.Blockly.Python.ORDER_MULTIPLICATIVE)||"0";a=$.Blockly.Python.valueToCode(a,"DIVISOR",$.Blockly.Python.ORDER_MULTIPLICATIVE)||"0";return[b+" % "+a,$.Blockly.Python.ORDER_MULTIPLICATIVE]}; -$.Blockly.Python.math_constrain=function(a){var b=$.Blockly.Python.valueToCode(a,"VALUE",$.Blockly.Python.ORDER_NONE)||"0",c=$.Blockly.Python.valueToCode(a,"LOW",$.Blockly.Python.ORDER_NONE)||"0";a=$.Blockly.Python.valueToCode(a,"HIGH",$.Blockly.Python.ORDER_NONE)||"float('inf')";return["min(max("+b+", "+c+"), "+a+")",$.Blockly.Python.ORDER_FUNCTION_CALL]}; -$.Blockly.Python.math_random_int=function(a){$.Blockly.Python.definitions_.import_random="import random";var b=$.Blockly.Python.valueToCode(a,"FROM",$.Blockly.Python.ORDER_NONE)||"0";a=$.Blockly.Python.valueToCode(a,"TO",$.Blockly.Python.ORDER_NONE)||"0";return["random.randint("+b+", "+a+")",$.Blockly.Python.ORDER_FUNCTION_CALL]};$.Blockly.Python.math_random_float=function(a){$.Blockly.Python.definitions_.import_random="import random";return["random.random()",$.Blockly.Python.ORDER_FUNCTION_CALL]}; -$.Blockly.Python.math_atan2=function(a){$.Blockly.Python.definitions_.import_math="import math";var b=$.Blockly.Python.valueToCode(a,"X",$.Blockly.Python.ORDER_NONE)||"0";return["math.atan2("+($.Blockly.Python.valueToCode(a,"Y",$.Blockly.Python.ORDER_NONE)||"0")+", "+b+") / math.pi * 180",$.Blockly.Python.ORDER_MULTIPLICATIVE]};var module$exports$Blockly$Python$loops={}; -$.Blockly.Python.controls_repeat_ext=function(a){var b=a.getField("TIMES")?String(parseInt(a.getFieldValue("TIMES"),10)):$.Blockly.Python.valueToCode(a,"TIMES",$.Blockly.Python.ORDER_NONE)||"0";b=(0,$.module$exports$Blockly$utils$string.isNumber)(b)?parseInt(b,10):"int("+b+")";var c=$.Blockly.Python.statementToCode(a,"DO");c=$.Blockly.Python.addLoopTrap(c,a)||$.Blockly.Python.PASS;return"for "+$.Blockly.Python.nameDB_.getDistinctName("count",$.module$exports$Blockly$Names.NameType.VARIABLE)+" in range("+ -b+"):\n"+c};$.Blockly.Python.controls_repeat=$.Blockly.Python.controls_repeat_ext;$.Blockly.Python.controls_whileUntil=function(a){var b="UNTIL"===a.getFieldValue("MODE"),c=$.Blockly.Python.valueToCode(a,"BOOL",b?$.Blockly.Python.ORDER_LOGICAL_NOT:$.Blockly.Python.ORDER_NONE)||"False",d=$.Blockly.Python.statementToCode(a,"DO");d=$.Blockly.Python.addLoopTrap(d,a)||$.Blockly.Python.PASS;b&&(c="not "+c);return"while "+c+":\n"+d}; -$.Blockly.Python.controls_for=function(a){var b=$.Blockly.Python.nameDB_.getName(a.getFieldValue("VAR"),$.module$exports$Blockly$Names.NameType.VARIABLE),c=$.Blockly.Python.valueToCode(a,"FROM",$.Blockly.Python.ORDER_NONE)||"0",d=$.Blockly.Python.valueToCode(a,"TO",$.Blockly.Python.ORDER_NONE)||"0",e=$.Blockly.Python.valueToCode(a,"BY",$.Blockly.Python.ORDER_NONE)||"1",f=$.Blockly.Python.statementToCode(a,"DO");f=$.Blockly.Python.addLoopTrap(f,a)||$.Blockly.Python.PASS;var g="";a=function(){return $.Blockly.Python.provideFunction_("upRange", -"\ndef "+$.Blockly.Python.FUNCTION_NAME_PLACEHOLDER_+"(start, stop, step):\n while start <= stop:\n yield start\n start += abs(step)\n")};var h=function(){return $.Blockly.Python.provideFunction_("downRange","\ndef "+$.Blockly.Python.FUNCTION_NAME_PLACEHOLDER_+"(start, stop, step):\n while start >= stop:\n yield start\n start -= abs(step)\n")};if((0,$.module$exports$Blockly$utils$string.isNumber)(c)&&(0,$.module$exports$Blockly$utils$string.isNumber)(d)&&(0,$.module$exports$Blockly$utils$string.isNumber)(e))c= -Number(c),d=Number(d),e=Math.abs(Number(e)),0===c%1&&0===d%1&&0===e%1?(c<=d?(d++,a=0===c&&1===e?d:c+", "+d,1!==e&&(a+=", "+e)):(d--,a=c+", "+d+", -"+e),a="range("+a+")"):(a=c",GTE:">="}[a.getFieldValue("OP")],c=$.Blockly.Python.ORDER_RELATIONAL,d=$.Blockly.Python.valueToCode(a,"A",c)||"0";a=$.Blockly.Python.valueToCode(a,"B",c)||"0";return[d+" "+b+" "+a,c]}; -$.Blockly.Python.logic_operation=function(a){var b="AND"===a.getFieldValue("OP")?"and":"or",c="and"===b?$.Blockly.Python.ORDER_LOGICAL_AND:$.Blockly.Python.ORDER_LOGICAL_OR,d=$.Blockly.Python.valueToCode(a,"A",c);a=$.Blockly.Python.valueToCode(a,"B",c);if(d||a){var e="and"===b?"True":"False";d||(d=e);a||(a=e)}else a=d="False";return[d+" "+b+" "+a,c]};$.Blockly.Python.logic_negate=function(a){return["not "+($.Blockly.Python.valueToCode(a,"BOOL",$.Blockly.Python.ORDER_LOGICAL_NOT)||"True"),$.Blockly.Python.ORDER_LOGICAL_NOT]}; -$.Blockly.Python.logic_boolean=function(a){return["TRUE"===a.getFieldValue("BOOL")?"True":"False",$.Blockly.Python.ORDER_ATOMIC]};$.Blockly.Python.logic_null=function(a){return["None",$.Blockly.Python.ORDER_ATOMIC]}; -$.Blockly.Python.logic_ternary=function(a){var b=$.Blockly.Python.valueToCode(a,"IF",$.Blockly.Python.ORDER_CONDITIONAL)||"False",c=$.Blockly.Python.valueToCode(a,"THEN",$.Blockly.Python.ORDER_CONDITIONAL)||"None";a=$.Blockly.Python.valueToCode(a,"ELSE",$.Blockly.Python.ORDER_CONDITIONAL)||"None";return[c+" if "+b+" else "+a,$.Blockly.Python.ORDER_CONDITIONAL]};var module$exports$Blockly$Python$lists={};$.Blockly.Python.lists_create_empty=function(a){return["[]",$.Blockly.Python.ORDER_ATOMIC]};$.Blockly.Python.lists_create_with=function(a){for(var b=Array(a.itemCount_),c=0;cc?"int("+a+" - "+-c+")":"int("+a+")",d&&(a="-"+a));return a};$.Blockly.Python=module$contents$Blockly$Python_Python;var module$exports$Blockly$Python$variables={};$.Blockly.Python.variables_get=function(a){return[$.Blockly.Python.nameDB_.getName(a.getFieldValue("VAR"),$.module$exports$Blockly$Names.NameType.VARIABLE),$.Blockly.Python.ORDER_ATOMIC]};$.Blockly.Python.variables_set=function(a){var b=$.Blockly.Python.valueToCode(a,"VALUE",$.Blockly.Python.ORDER_NONE)||"0";return $.Blockly.Python.nameDB_.getName(a.getFieldValue("VAR"),$.module$exports$Blockly$Names.NameType.VARIABLE)+" = "+b+"\n"};var module$exports$Blockly$Python$variablesDynamic={};$.Blockly.Python.variables_get_dynamic=$.Blockly.Python.variables_get;$.Blockly.Python.variables_set_dynamic=$.Blockly.Python.variables_set;var module$exports$Blockly$Python$texts={};$.Blockly.Python.text=function(a){return[$.Blockly.Python.quote_(a.getFieldValue("TEXT")),$.Blockly.Python.ORDER_ATOMIC]};$.Blockly.Python.text_multiline=function(a){a=$.Blockly.Python.multiline_quote_(a.getFieldValue("TEXT"));var b=-1!==a.indexOf("+")?$.Blockly.Python.ORDER_ADDITIVE:$.Blockly.Python.ORDER_ATOMIC;return[a,b]}; + var module$contents$Blockly$Python$texts_strRegExp=/^\s*'([^']|\\')*'\s*$/,module$contents$Blockly$Python$texts_forceString=function(a){return module$contents$Blockly$Python$texts_strRegExp.test(a)?[a,$.Blockly.Python.ORDER_ATOMIC]:["str("+a+")",$.Blockly.Python.ORDER_FUNCTION_CALL]}; + $.Blockly.Python.text_join=function(a){switch(a.itemCount_){case 0:return["''",$.Blockly.Python.ORDER_ATOMIC];case 1:return a=$.Blockly.Python.valueToCode(a,"ADD0",$.Blockly.Python.ORDER_NONE)||"''",module$contents$Blockly$Python$texts_forceString(a);case 2:var b=$.Blockly.Python.valueToCode(a,"ADD0",$.Blockly.Python.ORDER_NONE)||"''";a=$.Blockly.Python.valueToCode(a,"ADD1",$.Blockly.Python.ORDER_NONE)||"''";return[module$contents$Blockly$Python$texts_forceString(b)[0]+" + "+module$contents$Blockly$Python$texts_forceString(a)[0], + $.Blockly.Python.ORDER_ADDITIVE];default:b=[];for(var c=0;ca?$.Blockly.Python.ORDER_UNARY_SIGN:$.Blockly.Python.ORDER_ATOMIC;return[a,b]}; + $.Blockly.Python.math_arithmetic=function(a){var b={ADD:[" + ",$.Blockly.Python.ORDER_ADDITIVE],MINUS:[" - ",$.Blockly.Python.ORDER_ADDITIVE],MULTIPLY:[" * ",$.Blockly.Python.ORDER_MULTIPLICATIVE],DIVIDE:[" / ",$.Blockly.Python.ORDER_MULTIPLICATIVE],POWER:[" ** ",$.Blockly.Python.ORDER_EXPONENTIATION]}[a.getFieldValue("OP")],c=b[0];b=b[1];var d=$.Blockly.Python.valueToCode(a,"A",b)||"0";a=$.Blockly.Python.valueToCode(a,"B",b)||"0";return[d+c+a,b]}; + $.Blockly.Python.math_single=function(a){var b=a.getFieldValue("OP");if("NEG"===b){var c=$.Blockly.Python.valueToCode(a,"NUM",$.Blockly.Python.ORDER_UNARY_SIGN)||"0";return["-"+c,$.Blockly.Python.ORDER_UNARY_SIGN]}$.Blockly.Python.definitions_.import_math="import math";a="SIN"===b||"COS"===b||"TAN"===b?$.Blockly.Python.valueToCode(a,"NUM",$.Blockly.Python.ORDER_MULTIPLICATIVE)||"0":$.Blockly.Python.valueToCode(a,"NUM",$.Blockly.Python.ORDER_NONE)||"0";switch(b){case "ABS":c="math.fabs("+a+")";break; + case "ROOT":c="math.sqrt("+a+")";break;case "LN":c="math.log("+a+")";break;case "LOG10":c="math.log10("+a+")";break;case "EXP":c="math.exp("+a+")";break;case "POW10":c="math.pow(10,"+a+")";break;case "ROUND":c="round("+a+")";break;case "ROUNDUP":c="math.ceil("+a+")";break;case "ROUNDDOWN":c="math.floor("+a+")";break;case "SIN":c="math.sin("+a+" / 180.0 * math.pi)";break;case "COS":c="math.cos("+a+" / 180.0 * math.pi)";break;case "TAN":c="math.tan("+a+" / 180.0 * math.pi)"}if(c)return[c,$.Blockly.Python.ORDER_FUNCTION_CALL]; + switch(b){case "ASIN":c="math.asin("+a+") / math.pi * 180";break;case "ACOS":c="math.acos("+a+") / math.pi * 180";break;case "ATAN":c="math.atan("+a+") / math.pi * 180";break;default:throw Error("Unknown math operator: "+b);}return[c,$.Blockly.Python.ORDER_MULTIPLICATIVE]}; + $.Blockly.Python.math_constant=function(a){var b={PI:["math.pi",$.Blockly.Python.ORDER_MEMBER],E:["math.e",$.Blockly.Python.ORDER_MEMBER],GOLDEN_RATIO:["(1 + math.sqrt(5)) / 2",$.Blockly.Python.ORDER_MULTIPLICATIVE],SQRT2:["math.sqrt(2)",$.Blockly.Python.ORDER_MEMBER],SQRT1_2:["math.sqrt(1.0 / 2)",$.Blockly.Python.ORDER_MEMBER],INFINITY:["float('inf')",$.Blockly.Python.ORDER_ATOMIC]};a=a.getFieldValue("CONSTANT");"INFINITY"!==a&&($.Blockly.Python.definitions_.import_math="import math");return b[a]}; + $.Blockly.Python.math_number_property=function(a){var b={EVEN:[" % 2 == 0",$.Blockly.Python.ORDER_MULTIPLICATIVE,$.Blockly.Python.ORDER_RELATIONAL],ODD:[" % 2 == 1",$.Blockly.Python.ORDER_MULTIPLICATIVE,$.Blockly.Python.ORDER_RELATIONAL],WHOLE:[" % 1 == 0",$.Blockly.Python.ORDER_MULTIPLICATIVE,$.Blockly.Python.ORDER_RELATIONAL],POSITIVE:[" > 0",$.Blockly.Python.ORDER_RELATIONAL,$.Blockly.Python.ORDER_RELATIONAL],NEGATIVE:[" < 0",$.Blockly.Python.ORDER_RELATIONAL,$.Blockly.Python.ORDER_RELATIONAL], + DIVISIBLE_BY:[null,$.Blockly.Python.ORDER_MULTIPLICATIVE,$.Blockly.Python.ORDER_RELATIONAL],PRIME:[null,$.Blockly.Python.ORDER_NONE,$.Blockly.Python.ORDER_FUNCTION_CALL]},c=a.getFieldValue("PROPERTY");b=$.$jscomp.makeIterator(b[c]);var d=b.next().value,e=b.next().value;b=b.next().value;e=$.Blockly.Python.valueToCode(a,"NUMBER_TO_CHECK",e)||"0";if("PRIME"===c)$.Blockly.Python.definitions_.import_math="import math",$.Blockly.Python.definitions_.from_numbers_import_Number="from numbers import Number", + a=$.Blockly.Python.provideFunction_("math_isPrime","\ndef "+$.Blockly.Python.FUNCTION_NAME_PLACEHOLDER_+"(n):\n # https://en.wikipedia.org/wiki/Primality_test#Naive_methods\n # If n is not a number but a string, try parsing it.\n if not isinstance(n, Number):\n try:\n n = float(n)\n except:\n return False\n if n == 2 or n == 3:\n return True\n # False if n is negative, is 1, or not whole, or if n is divisible by 2 or 3.\n if n <= 1 or n % 1 != 0 or n % 2 == 0 or n % 3 == 0:\n return False\n # Check all the numbers of form 6k +/- 1, up to sqrt(n).\n for x in range(6, int(math.sqrt(n)) + 2, 6):\n if n % (x - 1) == 0 or n % (x + 1) == 0:\n return False\n return True\n")+ + "("+e+")";else if("DIVISIBLE_BY"===c){a=$.Blockly.Python.valueToCode(a,"DIVISOR",$.Blockly.Python.ORDER_MULTIPLICATIVE)||"0";if("0"===a)return["False",$.Blockly.Python.ORDER_ATOMIC];a=e+" % "+a+" == 0"}else a=e+d;return[a,b]}; + $.Blockly.Python.math_change=function(a){$.Blockly.Python.definitions_.from_numbers_import_Number="from numbers import Number";var b=$.Blockly.Python.valueToCode(a,"DELTA",$.Blockly.Python.ORDER_ADDITIVE)||"0";a=$.Blockly.Python.nameDB_.getName(a.getFieldValue("VAR"),$.module$exports$Blockly$Names.NameType.VARIABLE);return a+" = ("+a+" if isinstance("+a+", Number) else 0) + "+b+"\n"};$.Blockly.Python.math_round=$.Blockly.Python.math_single;$.Blockly.Python.math_trig=$.Blockly.Python.math_single; + $.Blockly.Python.math_on_list=function(a){var b=a.getFieldValue("OP");a=$.Blockly.Python.valueToCode(a,"LIST",$.Blockly.Python.ORDER_NONE)||"[]";switch(b){case "SUM":b="sum("+a+")";break;case "MIN":b="min("+a+")";break;case "MAX":b="max("+a+")";break;case "AVERAGE":$.Blockly.Python.definitions_.from_numbers_import_Number="from numbers import Number";b=$.Blockly.Python.provideFunction_("math_mean","\ndef "+$.Blockly.Python.FUNCTION_NAME_PLACEHOLDER_+"(myList):\n localList = [e for e in myList if isinstance(e, Number)]\n if not localList: return\n return float(sum(localList)) / len(localList)\n")+ + "("+a+")";break;case "MEDIAN":$.Blockly.Python.definitions_.from_numbers_import_Number="from numbers import Number";b=$.Blockly.Python.provideFunction_("math_median","\ndef "+$.Blockly.Python.FUNCTION_NAME_PLACEHOLDER_+"(myList):\n localList = sorted([e for e in myList if isinstance(e, Number)])\n if not localList: return\n if len(localList) % 2 == 0:\n return (localList[len(localList) // 2 - 1] + localList[len(localList) // 2]) / 2.0\n else:\n return localList[(len(localList) - 1) // 2]\n")+ + "("+a+")";break;case "MODE":b=$.Blockly.Python.provideFunction_("math_modes","\ndef "+$.Blockly.Python.FUNCTION_NAME_PLACEHOLDER_+'(some_list):\n modes = []\n # Using a lists of [item, count] to keep count rather than dict\n # to avoid "unhashable" errors when the counted item is itself a list or dict.\n counts = []\n maxCount = 1\n for item in some_list:\n found = False\n for count in counts:\n if count[0] == item:\n count[1] += 1\n maxCount = max(maxCount, count[1])\n found = True\n if not found:\n counts.append([item, 1])\n for counted_item, item_count in counts:\n if item_count == maxCount:\n modes.append(counted_item)\n return modes\n')+ + "("+a+")";break;case "STD_DEV":$.Blockly.Python.definitions_.import_math="import math";b=$.Blockly.Python.provideFunction_("math_standard_deviation","\ndef "+$.Blockly.Python.FUNCTION_NAME_PLACEHOLDER_+"(numbers):\n n = len(numbers)\n if n == 0: return\n mean = float(sum(numbers)) / n\n variance = sum((x - mean) ** 2 for x in numbers) / n\n return math.sqrt(variance)\n")+"("+a+")";break;case "RANDOM":$.Blockly.Python.definitions_.import_random="import random";b="random.choice("+a+")";break;default:throw Error("Unknown operator: "+ + b);}return[b,$.Blockly.Python.ORDER_FUNCTION_CALL]};$.Blockly.Python.math_modulo=function(a){var b=$.Blockly.Python.valueToCode(a,"DIVIDEND",$.Blockly.Python.ORDER_MULTIPLICATIVE)||"0";a=$.Blockly.Python.valueToCode(a,"DIVISOR",$.Blockly.Python.ORDER_MULTIPLICATIVE)||"0";return[b+" % "+a,$.Blockly.Python.ORDER_MULTIPLICATIVE]}; + $.Blockly.Python.math_constrain=function(a){var b=$.Blockly.Python.valueToCode(a,"VALUE",$.Blockly.Python.ORDER_NONE)||"0",c=$.Blockly.Python.valueToCode(a,"LOW",$.Blockly.Python.ORDER_NONE)||"0";a=$.Blockly.Python.valueToCode(a,"HIGH",$.Blockly.Python.ORDER_NONE)||"float('inf')";return["min(max("+b+", "+c+"), "+a+")",$.Blockly.Python.ORDER_FUNCTION_CALL]}; + $.Blockly.Python.math_random_int=function(a){$.Blockly.Python.definitions_.import_random="import random";var b=$.Blockly.Python.valueToCode(a,"FROM",$.Blockly.Python.ORDER_NONE)||"0";a=$.Blockly.Python.valueToCode(a,"TO",$.Blockly.Python.ORDER_NONE)||"0";return["random.randint("+b+", "+a+")",$.Blockly.Python.ORDER_FUNCTION_CALL]};$.Blockly.Python.math_random_float=function(a){$.Blockly.Python.definitions_.import_random="import random";return["random.random()",$.Blockly.Python.ORDER_FUNCTION_CALL]}; + $.Blockly.Python.math_atan2=function(a){$.Blockly.Python.definitions_.import_math="import math";var b=$.Blockly.Python.valueToCode(a,"X",$.Blockly.Python.ORDER_NONE)||"0";return["math.atan2("+($.Blockly.Python.valueToCode(a,"Y",$.Blockly.Python.ORDER_NONE)||"0")+", "+b+") / math.pi * 180",$.Blockly.Python.ORDER_MULTIPLICATIVE]};var module$exports$Blockly$Python$loops={}; + $.Blockly.Python.controls_repeat_ext=function(a){var b=a.getField("TIMES")?String(parseInt(a.getFieldValue("TIMES"),10)):$.Blockly.Python.valueToCode(a,"TIMES",$.Blockly.Python.ORDER_NONE)||"0";b=(0,$.module$exports$Blockly$utils$string.isNumber)(b)?parseInt(b,10):"int("+b+")";var c=$.Blockly.Python.statementToCode(a,"DO");c=$.Blockly.Python.addLoopTrap(c,a)||$.Blockly.Python.PASS;return"for "+$.Blockly.Python.nameDB_.getDistinctName("count",$.module$exports$Blockly$Names.NameType.VARIABLE)+" in range("+ + b+"):\n"+c};$.Blockly.Python.controls_repeat=$.Blockly.Python.controls_repeat_ext;$.Blockly.Python.controls_whileUntil=function(a){var b="UNTIL"===a.getFieldValue("MODE"),c=$.Blockly.Python.valueToCode(a,"BOOL",b?$.Blockly.Python.ORDER_LOGICAL_NOT:$.Blockly.Python.ORDER_NONE)||"False",d=$.Blockly.Python.statementToCode(a,"DO");d=$.Blockly.Python.addLoopTrap(d,a)||$.Blockly.Python.PASS;b&&(c="not "+c);return"while "+c+":\n"+d}; + $.Blockly.Python.controls_for=function(a){var b=$.Blockly.Python.nameDB_.getName(a.getFieldValue("VAR"),$.module$exports$Blockly$Names.NameType.VARIABLE),c=$.Blockly.Python.valueToCode(a,"FROM",$.Blockly.Python.ORDER_NONE)||"0",d=$.Blockly.Python.valueToCode(a,"TO",$.Blockly.Python.ORDER_NONE)||"0",e=$.Blockly.Python.valueToCode(a,"BY",$.Blockly.Python.ORDER_NONE)||"1",f=$.Blockly.Python.statementToCode(a,"DO");f=$.Blockly.Python.addLoopTrap(f,a)||$.Blockly.Python.PASS;var g="";a=function(){return $.Blockly.Python.provideFunction_("upRange", + "\ndef "+$.Blockly.Python.FUNCTION_NAME_PLACEHOLDER_+"(start, stop, step):\n while start <= stop:\n yield start\n start += abs(step)\n")};var h=function(){return $.Blockly.Python.provideFunction_("downRange","\ndef "+$.Blockly.Python.FUNCTION_NAME_PLACEHOLDER_+"(start, stop, step):\n while start >= stop:\n yield start\n start -= abs(step)\n")};if((0,$.module$exports$Blockly$utils$string.isNumber)(c)&&(0,$.module$exports$Blockly$utils$string.isNumber)(d)&&(0,$.module$exports$Blockly$utils$string.isNumber)(e))c= + Number(c),d=Number(d),e=Math.abs(Number(e)),0===c%1&&0===d%1&&0===e%1?(c<=d?(d++,a=0===c&&1===e?d:c+", "+d,1!==e&&(a+=", "+e)):(d--,a=c+", "+d+", -"+e),a="range("+a+")"):(a=c",GTE:">="}[a.getFieldValue("OP")],c=$.Blockly.Python.ORDER_RELATIONAL,d=$.Blockly.Python.valueToCode(a,"A",c)||"0";a=$.Blockly.Python.valueToCode(a,"B",c)||"0";return[d+" "+b+" "+a,c]}; + $.Blockly.Python.logic_operation=function(a){var b="AND"===a.getFieldValue("OP")?"and":"or",c="and"===b?$.Blockly.Python.ORDER_LOGICAL_AND:$.Blockly.Python.ORDER_LOGICAL_OR,d=$.Blockly.Python.valueToCode(a,"A",c);a=$.Blockly.Python.valueToCode(a,"B",c);if(d||a){var e="and"===b?"True":"False";d||(d=e);a||(a=e)}else a=d="False";return[d+" "+b+" "+a,c]};$.Blockly.Python.logic_negate=function(a){return["not "+($.Blockly.Python.valueToCode(a,"BOOL",$.Blockly.Python.ORDER_LOGICAL_NOT)||"True"),$.Blockly.Python.ORDER_LOGICAL_NOT]}; + $.Blockly.Python.logic_boolean=function(a){return["TRUE"===a.getFieldValue("BOOL")?"True":"False",$.Blockly.Python.ORDER_ATOMIC]};$.Blockly.Python.logic_null=function(a){return["None",$.Blockly.Python.ORDER_ATOMIC]}; + $.Blockly.Python.logic_ternary=function(a){var b=$.Blockly.Python.valueToCode(a,"IF",$.Blockly.Python.ORDER_CONDITIONAL)||"False",c=$.Blockly.Python.valueToCode(a,"THEN",$.Blockly.Python.ORDER_CONDITIONAL)||"None";a=$.Blockly.Python.valueToCode(a,"ELSE",$.Blockly.Python.ORDER_CONDITIONAL)||"None";return[c+" if "+b+" else "+a,$.Blockly.Python.ORDER_CONDITIONAL]};var module$exports$Blockly$Python$lists={};$.Blockly.Python.lists_create_empty=function(a){return["[]",$.Blockly.Python.ORDER_ATOMIC]};$.Blockly.Python.lists_create_with=function(a){for(var b=Array(a.itemCount_),c=0;c