{"version":3,"sources":["generators/python/lists.ts","generators/python/logic.ts","generators/python/loops.ts","generators/python/math.ts","generators/python/procedures.ts","generators/python/text.ts","generators/python/variables.ts","generators/python/python_generator.ts","generators/python/variables_dynamic.ts","generators/python.ts"],"names":["lists_create_empty","block","generator","Order","ATOMIC","lists_create_with","elements","Array","itemCount_","i","valueToCode","NONE","join","lists_repeat","item","times","MULTIPLICATIVE","lists_length","FUNCTION_CALL","lists_isEmpty","LOGICAL_NOT","lists_indexOf","list","errorIndex","firstIndexAdjustment","lastIndexAdjustment","workspace","options","oneBasedIndex","getFieldValue","functionName","provideFunction_","FUNCTION_NAME_PLACEHOLDER_","lists_getIndex","mode","where","listOrder","MEMBER","at","getAdjustedInt","definitions_","code","Error","lists_setIndex","value","match","listVar","nameDB_","getDistinctName","NameType","VARIABLE","xVar","lists_getSublist","where1","where2","at1","at2","isNumber","String","lists_sort","type","reverse","sortFunctionName","lists_split","value_input","value_delim","lists_reverse","controls_if","n","branchCode","conditionCode","STATEMENT_PREFIX","injectId","statementToCode","PASS","STATEMENT_SUFFIX","prefixLines","INDENT","getInput","logic_compare","operator","OPERATORS","order","RELATIONAL","argument0","argument1","logic_operation","LOGICAL_AND","LOGICAL_OR","defaultArgument","logic_negate","logic_boolean","logic_null","logic_ternary","value_if","CONDITIONAL","value_then","value_else","controls_repeat_ext","repeats","getField","parseInt","branch","addLoopTrap","loopVar","controls_whileUntil","until","controls_for","variable0","getVariableName","increment","defineUpRange","defineDownRange","Number","Math","abs","range","scrub","arg","suffix","varName","startVar","endVar","incVar","controls_forEach","controls_flow_statements","xfix","loop","getSurroundLoop","suppressPrefixSuffix","math_number","number","Infinity","UNARY_SIGN","math_arithmetic","tuple","ADDITIVE","EXPONENTIATION","math_single","math_constant","CONSTANTS","constant","math_number_property","PROPERTIES","dropdownProperty","inputOrder","outputOrder","numberToCheck","divisor","math_change","math_on_list","func","math_modulo","math_constrain","argument2","math_random_int","math_random_float","math_atan2","procedures_defreturn","globals","usedVariables","allUsedVarModels","variable","getName","getVars","includes","push","devVarList","allDeveloperVariables","length","DEVELOPER_VARIABLE","globalString","funcName","getProcedureName","xfix1","loopTrap","INFINITE_LOOP_TRAP","returnValue","xfix2","args","variables","scrub_","procedures_callreturn","procedures_callnoreturn","forBlock","procedures_ifreturn","hasReturnValue_","text","quote_","text_join","element","codeAndOrder","forceString","element0","element1","tempVar","text_append","text_length","text_isEmpty","text_indexOf","substring","text_charAt","textOrder","text_getSubstring","text_changeCase","text_trim","text_print","text_prompt_ext","msg","text_count","sub","text_replace","from","to","text_reverse","variables_get","variables_set","COLLECTION","STRING_CONVERSION","BITWISE_NOT","BITWISE_SHIFT","BITWISE_AND","BITWISE_XOR","BITWISE_OR","LAMBDA","PythonGenerator","CodeGenerator","constructor","name","ORDER_OVERRIDES","isInitialized","key","addReservedWords","init","reset","Names","RESERVED_WORDS_","setVariableMap","getVariableMap","populateVariables","populateProcedures","defvars","DEVELOPER_VARIABLE_TYPE","getId","finish","imports","definitions","def","replace","scrubNakedValue","line","string","quote","multiline_quote_","split","map","lines","thisOnly","commentCode","outputConnection","targetConnection","comment","getCommentText","wrap","COMMENT_WRAP","inputList","inputTypes","VALUE","childBlock","connection","targetBlock","allNestedComments","nextBlock","nextConnection","nextCode","blockToCode","atId","delta","negate","defaultAtIndex","atOrder","$jscomp$tmp$exports$module$name","controls_ifelse","controls_repeat","math_round","math_trig","procedures_defnoreturn","strRegExp","test","text_prompt","pythonGenerator","generators","lists","logic","loops","math","procedures","variablesDynamic"],"mappings":"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","file":"python_compressed.js","sourcesContent":["/**\n * @license\n * Copyright 2012 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * @file Generating Python for list blocks.\n */\n\n// Former goog.module ID: Blockly.Python.lists\n\nimport type {CreateWithBlock} from '../../blocks/lists.js';\nimport type {Block} from '../../core/block.js';\nimport {NameType} from '../../core/names.js';\nimport * as stringUtils from '../../core/utils/string.js';\nimport type {PythonGenerator} from './python_generator.js';\nimport {Order} from './python_generator.js';\n\nexport function lists_create_empty(\n  block: Block,\n  generator: PythonGenerator,\n): [string, Order] {\n  // Create an empty list.\n  return ['[]', Order.ATOMIC];\n}\n\nexport function lists_create_with(\n  block: Block,\n  generator: PythonGenerator,\n): [string, Order] {\n  // Create a list with any number of elements of any type.\n  const createWithBlock = block as CreateWithBlock;\n  const elements = new Array(createWithBlock.itemCount_);\n  for (let i = 0; i < createWithBlock.itemCount_; i++) {\n    elements[i] = generator.valueToCode(block, 'ADD' + i, Order.NONE) || 'None';\n  }\n  const code = '[' + elements.join(', ') + ']';\n  return [code, Order.ATOMIC];\n}\n\nexport function lists_repeat(\n  block: Block,\n  generator: PythonGenerator,\n): [string, Order] {\n  // Create a list with one element repeated.\n  const item = generator.valueToCode(block, 'ITEM', Order.NONE) || 'None';\n  const times =\n    generator.valueToCode(block, 'NUM', Order.MULTIPLICATIVE) || '0';\n  const code = '[' + item + '] * ' + times;\n  return [code, Order.MULTIPLICATIVE];\n}\n\nexport function lists_length(\n  block: Block,\n  generator: PythonGenerator,\n): [string, Order] {\n  // String or array length.\n  const list = generator.valueToCode(block, 'VALUE', Order.NONE) || '[]';\n  return ['len(' + list + ')', Order.FUNCTION_CALL];\n}\n\nexport function lists_isEmpty(\n  block: Block,\n  generator: PythonGenerator,\n): [string, Order] {\n  // Is the string null or array empty?\n  const list = generator.valueToCode(block, 'VALUE', Order.NONE) || '[]';\n  const code = 'not len(' + list + ')';\n  return [code, Order.LOGICAL_NOT];\n}\n\nexport function lists_indexOf(\n  block: Block,\n  generator: PythonGenerator,\n): [string, Order] {\n  // Find an item in the list.\n  const item = generator.valueToCode(block, 'FIND', Order.NONE) || '[]';\n  const list = generator.valueToCode(block, 'VALUE', Order.NONE) || \"''\";\n  let errorIndex = ' -1';\n  let firstIndexAdjustment = '';\n  let lastIndexAdjustment = ' - 1';\n\n  if (block.workspace.options.oneBasedIndex) {\n    errorIndex = ' 0';\n    firstIndexAdjustment = ' + 1';\n    lastIndexAdjustment = '';\n  }\n\n  let functionName;\n  if (block.getFieldValue('END') === 'FIRST') {\n    functionName = generator.provideFunction_(\n      'first_index',\n      `\ndef ${generator.FUNCTION_NAME_PLACEHOLDER_}(my_list, elem):\n  try: index = my_list.index(elem)${firstIndexAdjustment}\n  except: index =${errorIndex}\n  return index\n`,\n    );\n  } else {\n    functionName = generator.provideFunction_(\n      'last_index',\n      `\ndef ${generator.FUNCTION_NAME_PLACEHOLDER_}(my_list, elem):\n  try: index = len(my_list) - my_list[::-1].index(elem)${lastIndexAdjustment}\n  except: index =${errorIndex}\n  return index\n`,\n    );\n  }\n  const code = functionName + '(' + list + ', ' + item + ')';\n  return [code, Order.FUNCTION_CALL];\n}\n\nexport function lists_getIndex(\n  block: Block,\n  generator: PythonGenerator,\n): [string, Order] | string {\n  // Get element at index.\n  // Note: Until January 2013 this block did not have MODE or WHERE inputs.\n  const mode = block.getFieldValue('MODE') || 'GET';\n  const where = block.getFieldValue('WHERE') || 'FROM_START';\n  const listOrder = where === 'RANDOM' ? Order.NONE : Order.MEMBER;\n  const list = generator.valueToCode(block, 'VALUE', listOrder) || '[]';\n\n  switch (where) {\n    case 'FIRST':\n      if (mode === 'GET') {\n        const code = list + '[0]';\n        return [code, Order.MEMBER];\n      } else if (mode === 'GET_REMOVE') {\n        const code = list + '.pop(0)';\n        return [code, Order.FUNCTION_CALL];\n      } else if (mode === 'REMOVE') {\n        return list + '.pop(0)\\n';\n      }\n      break;\n    case 'LAST':\n      if (mode === 'GET') {\n        const code = list + '[-1]';\n        return [code, Order.MEMBER];\n      } else if (mode === 'GET_REMOVE') {\n        const code = list + '.pop()';\n        return [code, Order.FUNCTION_CALL];\n      } else if (mode === 'REMOVE') {\n        return list + '.pop()\\n';\n      }\n      break;\n    case 'FROM_START': {\n      const at = generator.getAdjustedInt(block, 'AT');\n      if (mode === 'GET') {\n        const code = list + '[' + at + ']';\n        return [code, Order.MEMBER];\n      } else if (mode === 'GET_REMOVE') {\n        const code = list + '.pop(' + at + ')';\n        return [code, Order.FUNCTION_CALL];\n      } else if (mode === 'REMOVE') {\n        return list + '.pop(' + at + ')\\n';\n      }\n      break;\n    }\n    case 'FROM_END': {\n      const at = generator.getAdjustedInt(block, 'AT', 1, true);\n      if (mode === 'GET') {\n        const code = list + '[' + at + ']';\n        return [code, Order.MEMBER];\n      } else if (mode === 'GET_REMOVE') {\n        const code = list + '.pop(' + at + ')';\n        return [code, Order.FUNCTION_CALL];\n      } else if (mode === 'REMOVE') {\n        return list + '.pop(' + at + ')\\n';\n      }\n      break;\n    }\n    case 'RANDOM':\n      (generator as AnyDuringMigration).definitions_['import_random'] =\n        'import random';\n      if (mode === 'GET') {\n        const code = 'random.choice(' + list + ')';\n        return [code, Order.FUNCTION_CALL];\n      } else {\n        const functionName = generator.provideFunction_(\n          'lists_remove_random_item',\n          `\ndef ${generator.FUNCTION_NAME_PLACEHOLDER_}(myList):\n  x = int(random.random() * len(myList))\n  return myList.pop(x)\n`,\n        );\n        const code = functionName + '(' + list + ')';\n        if (mode === 'GET_REMOVE') {\n          return [code, Order.FUNCTION_CALL];\n        } else if (mode === 'REMOVE') {\n          return code + '\\n';\n        }\n      }\n      break;\n  }\n  throw Error('Unhandled combination (lists_getIndex).');\n}\n\nexport function lists_setIndex(block: Block, generator: PythonGenerator) {\n  // Set element at index.\n  // Note: Until February 2013 this block did not have MODE or WHERE inputs.\n  let list = generator.valueToCode(block, 'LIST', Order.MEMBER) || '[]';\n  const mode = block.getFieldValue('MODE') || 'GET';\n  const where = block.getFieldValue('WHERE') || 'FROM_START';\n  const value = generator.valueToCode(block, 'TO', Order.NONE) || 'None';\n  // Cache non-trivial values to variables to prevent repeated look-ups.\n  // Closure, which accesses and modifies 'list'.\n  function cacheList() {\n    if (list.match(/^\\w+$/)) {\n      return '';\n    }\n    const listVar = generator.nameDB_!.getDistinctName(\n      'tmp_list',\n      NameType.VARIABLE,\n    );\n    const code = listVar + ' = ' + list + '\\n';\n    list = listVar;\n    return code;\n  }\n\n  switch (where) {\n    case 'FIRST':\n      if (mode === 'SET') {\n        return list + '[0] = ' + value + '\\n';\n      } else if (mode === 'INSERT') {\n        return list + '.insert(0, ' + value + ')\\n';\n      }\n      break;\n    case 'LAST':\n      if (mode === 'SET') {\n        return list + '[-1] = ' + value + '\\n';\n      } else if (mode === 'INSERT') {\n        return list + '.append(' + value + ')\\n';\n      }\n      break;\n    case 'FROM_START': {\n      const at = generator.getAdjustedInt(block, 'AT');\n      if (mode === 'SET') {\n        return list + '[' + at + '] = ' + value + '\\n';\n      } else if (mode === 'INSERT') {\n        return list + '.insert(' + at + ', ' + value + ')\\n';\n      }\n      break;\n    }\n    case 'FROM_END': {\n      const at = generator.getAdjustedInt(block, 'AT', 1, true);\n      if (mode === 'SET') {\n        return list + '[' + at + '] = ' + value + '\\n';\n      } else if (mode === 'INSERT') {\n        return list + '.insert(' + at + ', ' + value + ')\\n';\n      }\n      break;\n    }\n    case 'RANDOM': {\n      (generator as AnyDuringMigration).definitions_['import_random'] =\n        'import random';\n      let code = cacheList();\n      const xVar = generator.nameDB_!.getDistinctName(\n        'tmp_x',\n        NameType.VARIABLE,\n      );\n      code += xVar + ' = int(random.random() * len(' + list + '))\\n';\n      if (mode === 'SET') {\n        code += list + '[' + xVar + '] = ' + value + '\\n';\n        return code;\n      } else if (mode === 'INSERT') {\n        code += list + '.insert(' + xVar + ', ' + value + ')\\n';\n        return code;\n      }\n      break;\n    }\n  }\n  throw Error('Unhandled combination (lists_setIndex).');\n}\n\nexport function lists_getSublist(\n  block: Block,\n  generator: PythonGenerator,\n): [string, Order] {\n  // Get sublist.\n  const list = generator.valueToCode(block, 'LIST', Order.MEMBER) || '[]';\n  const where1 = block.getFieldValue('WHERE1');\n  const where2 = block.getFieldValue('WHERE2');\n  let at1;\n  switch (where1) {\n    case 'FROM_START':\n      at1 = generator.getAdjustedInt(block, 'AT1');\n      if (at1 === 0) {\n        at1 = '';\n      }\n      break;\n    case 'FROM_END':\n      at1 = generator.getAdjustedInt(block, 'AT1', 1, true);\n      break;\n    case 'FIRST':\n      at1 = '';\n      break;\n    default:\n      throw Error('Unhandled option (lists_getSublist)');\n  }\n\n  let at2;\n  switch (where2) {\n    case 'FROM_START':\n      at2 = generator.getAdjustedInt(block, 'AT2', 1);\n      break;\n    case 'FROM_END':\n      at2 = generator.getAdjustedInt(block, 'AT2', 0, true);\n      // Ensure that if the result calculated is 0 that sub-sequence will\n      // include all elements as expected.\n      if (!stringUtils.isNumber(String(at2))) {\n        (generator as AnyDuringMigration).definitions_['import_sys'] =\n          'import sys';\n        at2 += ' or sys.maxsize';\n      } else if (at2 === 0) {\n        at2 = '';\n      }\n      break;\n    case 'LAST':\n      at2 = '';\n      break;\n    default:\n      throw Error('Unhandled option (lists_getSublist)');\n  }\n  const code = list + '[' + at1 + ' : ' + at2 + ']';\n  return [code, Order.MEMBER];\n}\n\nexport function lists_sort(\n  block: Block,\n  generator: PythonGenerator,\n): [string, Order] {\n  // Block for sorting a list.\n  const list = generator.valueToCode(block, 'LIST', Order.NONE) || '[]';\n  const type = block.getFieldValue('TYPE');\n  const reverse = block.getFieldValue('DIRECTION') === '1' ? 'False' : 'True';\n  const sortFunctionName = generator.provideFunction_(\n    'lists_sort',\n    `\ndef ${generator.FUNCTION_NAME_PLACEHOLDER_}(my_list, type, reverse):\n  def try_float(s):\n    try:\n      return float(s)\n    except:\n      return 0\n  key_funcs = {\n    \"NUMERIC\": try_float,\n    \"TEXT\": str,\n    \"IGNORE_CASE\": lambda s: str(s).lower()\n  }\n  key_func = key_funcs[type]\n  list_cpy = list(my_list)\n  return sorted(list_cpy, key=key_func, reverse=reverse)\n`,\n  );\n\n  const code =\n    sortFunctionName + '(' + list + ', \"' + type + '\", ' + reverse + ')';\n  return [code, Order.FUNCTION_CALL];\n}\n\nexport function lists_split(\n  block: Block,\n  generator: PythonGenerator,\n): [string, Order] {\n  // Block for splitting text into a list, or joining a list into text.\n  const mode = block.getFieldValue('MODE');\n  let code;\n  if (mode === 'SPLIT') {\n    const value_input =\n      generator.valueToCode(block, 'INPUT', Order.MEMBER) || \"''\";\n    const value_delim = generator.valueToCode(block, 'DELIM', Order.NONE);\n    code = value_input + '.split(' + value_delim + ')';\n  } else if (mode === 'JOIN') {\n    const value_input =\n      generator.valueToCode(block, 'INPUT', Order.NONE) || '[]';\n    const value_delim =\n      generator.valueToCode(block, 'DELIM', Order.MEMBER) || \"''\";\n    code = value_delim + '.join(' + value_input + ')';\n  } else {\n    throw Error('Unknown mode: ' + mode);\n  }\n  return [code, Order.FUNCTION_CALL];\n}\n\nexport function lists_reverse(\n  block: Block,\n  generator: PythonGenerator,\n): [string, Order] {\n  // Block for reversing a list.\n  const list = generator.valueToCode(block, 'LIST', Order.NONE) || '[]';\n  const code = 'list(reversed(' + list + '))';\n  return [code, Order.FUNCTION_CALL];\n}\n","/**\n * @license\n * Copyright 2012 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * @file Generating Python for logic blocks.\n */\n\n// Former goog.module ID: Blockly.Python.logic\n\nimport type {Block} from '../../core/block.js';\nimport type {PythonGenerator} from './python_generator.js';\nimport {Order} from './python_generator.js';\n\nexport function controls_if(block: Block, generator: PythonGenerator) {\n  // If/elseif/else condition.\n  let n = 0;\n  let code = '',\n    branchCode,\n    conditionCode;\n  if (generator.STATEMENT_PREFIX) {\n    // Automatic prefix insertion is switched off for this block.  Add manually.\n    code += generator.injectId(generator.STATEMENT_PREFIX, block);\n  }\n  do {\n    conditionCode =\n      generator.valueToCode(block, 'IF' + n, Order.NONE) || 'False';\n    branchCode = generator.statementToCode(block, 'DO' + n) || generator.PASS;\n    if (generator.STATEMENT_SUFFIX) {\n      branchCode =\n        generator.prefixLines(\n          generator.injectId(generator.STATEMENT_SUFFIX, block),\n          generator.INDENT,\n        ) + branchCode;\n    }\n    code += (n === 0 ? 'if ' : 'elif ') + conditionCode + ':\\n' + branchCode;\n    n++;\n  } while (block.getInput('IF' + n));\n\n  if (block.getInput('ELSE') || generator.STATEMENT_SUFFIX) {\n    if (block.getInput('ELSE')) {\n      branchCode = generator.statementToCode(block, 'ELSE') || generator.PASS;\n    } else {\n      branchCode = generator.PASS;\n    }\n    if (generator.STATEMENT_SUFFIX) {\n      branchCode =\n        generator.prefixLines(\n          generator.injectId(generator.STATEMENT_SUFFIX, block),\n          generator.INDENT,\n        ) + branchCode;\n    }\n    code += 'else:\\n' + branchCode;\n  }\n  return code;\n}\n\nexport const controls_ifelse = controls_if;\n\nexport function logic_compare(\n  block: Block,\n  generator: PythonGenerator,\n): [string, Order] {\n  // Comparison operator.\n  const OPERATORS = {\n    'EQ': '==',\n    'NEQ': '!=',\n    'LT': '<',\n    'LTE': '<=',\n    'GT': '>',\n    'GTE': '>=',\n  };\n  type OperatorOption = keyof typeof OPERATORS;\n  const operator = OPERATORS[block.getFieldValue('OP') as OperatorOption];\n  const order = Order.RELATIONAL;\n  const argument0 = generator.valueToCode(block, 'A', order) || '0';\n  const argument1 = generator.valueToCode(block, 'B', order) || '0';\n  const code = argument0 + ' ' + operator + ' ' + argument1;\n  return [code, order];\n}\n\nexport function logic_operation(\n  block: Block,\n  generator: PythonGenerator,\n): [string, Order] {\n  // Operations 'and', 'or'.\n  const operator = block.getFieldValue('OP') === 'AND' ? 'and' : 'or';\n  const order = operator === 'and' ? Order.LOGICAL_AND : Order.LOGICAL_OR;\n  let argument0 = generator.valueToCode(block, 'A', order);\n  let argument1 = generator.valueToCode(block, 'B', order);\n  if (!argument0 && !argument1) {\n    // If there are no arguments, then the return value is false.\n    argument0 = 'False';\n    argument1 = 'False';\n  } else {\n    // Single missing arguments have no effect on the return value.\n    const defaultArgument = operator === 'and' ? 'True' : 'False';\n    if (!argument0) {\n      argument0 = defaultArgument;\n    }\n    if (!argument1) {\n      argument1 = defaultArgument;\n    }\n  }\n  const code = argument0 + ' ' + operator + ' ' + argument1;\n  return [code, order];\n}\n\nexport function logic_negate(\n  block: Block,\n  generator: PythonGenerator,\n): [string, Order] {\n  // Negation.\n  const argument0 =\n    generator.valueToCode(block, 'BOOL', Order.LOGICAL_NOT) || 'True';\n  const code = 'not ' + argument0;\n  return [code, Order.LOGICAL_NOT];\n}\n\nexport function logic_boolean(\n  block: Block,\n  generator: PythonGenerator,\n): [string, Order] {\n  // Boolean values true and false.\n  const code = block.getFieldValue('BOOL') === 'TRUE' ? 'True' : 'False';\n  return [code, Order.ATOMIC];\n}\n\nexport function logic_null(\n  block: Block,\n  generator: PythonGenerator,\n): [string, Order] {\n  // Null data type.\n  return ['None', Order.ATOMIC];\n}\n\nexport function logic_ternary(\n  block: Block,\n  generator: PythonGenerator,\n): [string, Order] {\n  // Ternary operator.\n  const value_if =\n    generator.valueToCode(block, 'IF', Order.CONDITIONAL) || 'False';\n  const value_then =\n    generator.valueToCode(block, 'THEN', Order.CONDITIONAL) || 'None';\n  const value_else =\n    generator.valueToCode(block, 'ELSE', Order.CONDITIONAL) || 'None';\n  const code = value_then + ' if ' + value_if + ' else ' + value_else;\n  return [code, Order.CONDITIONAL];\n}\n","/**\n * @license\n * Copyright 2012 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * @file Generating Python for loop blocks.\n */\n\n// Former goog.module ID: Blockly.Python.loops\n\nimport type {ControlFlowInLoopBlock} from '../../blocks/loops.js';\nimport type {Block} from '../../core/block.js';\nimport {NameType} from '../../core/names.js';\nimport * as stringUtils from '../../core/utils/string.js';\nimport type {PythonGenerator} from './python_generator.js';\nimport {Order} from './python_generator.js';\n\nexport function controls_repeat_ext(block: Block, generator: PythonGenerator) {\n  // Repeat n times.\n  let repeats;\n  if (block.getField('TIMES')) {\n    // Internal number.\n    repeats = String(parseInt(block.getFieldValue('TIMES'), 10));\n  } else {\n    // External number.\n    repeats = generator.valueToCode(block, 'TIMES', Order.NONE) || '0';\n  }\n  if (stringUtils.isNumber(repeats)) {\n    repeats = parseInt(repeats, 10);\n  } else {\n    repeats = 'int(' + repeats + ')';\n  }\n  let branch = generator.statementToCode(block, 'DO');\n  branch = generator.addLoopTrap(branch, block) || generator.PASS;\n  const loopVar = generator.nameDB_!.getDistinctName(\n    'count',\n    NameType.VARIABLE,\n  );\n  const code = 'for ' + loopVar + ' in range(' + repeats + '):\\n' + branch;\n  return code;\n}\n\nexport const controls_repeat = controls_repeat_ext;\n\nexport function controls_whileUntil(block: Block, generator: PythonGenerator) {\n  // Do while/until loop.\n  const until = block.getFieldValue('MODE') === 'UNTIL';\n  let argument0 =\n    generator.valueToCode(\n      block,\n      'BOOL',\n      until ? Order.LOGICAL_NOT : Order.NONE,\n    ) || 'False';\n  let branch = generator.statementToCode(block, 'DO');\n  branch = generator.addLoopTrap(branch, block) || generator.PASS;\n  if (until) {\n    argument0 = 'not ' + argument0;\n  }\n  return 'while ' + argument0 + ':\\n' + branch;\n}\n\nexport function controls_for(block: Block, generator: PythonGenerator) {\n  // For loop.\n  const variable0 = generator.getVariableName(block.getFieldValue('VAR'));\n  let argument0: string | number =\n    generator.valueToCode(block, 'FROM', Order.NONE) || '0';\n  let argument1: string | number =\n    generator.valueToCode(block, 'TO', Order.NONE) || '0';\n  let increment: string | number =\n    generator.valueToCode(block, 'BY', Order.NONE) || '1';\n  let branch = generator.statementToCode(block, 'DO');\n  branch = generator.addLoopTrap(branch, block) || generator.PASS;\n\n  let code = '';\n  let range;\n\n  // Helper functions.\n  const defineUpRange = function () {\n    return generator.provideFunction_(\n      'upRange',\n      `\ndef ${generator.FUNCTION_NAME_PLACEHOLDER_}(start, stop, step):\n  while start <= stop:\n    yield start\n    start += abs(step)\n`,\n    );\n  };\n  const defineDownRange = function () {\n    return generator.provideFunction_(\n      'downRange',\n      `\ndef ${generator.FUNCTION_NAME_PLACEHOLDER_}(start, stop, step):\n  while start >= stop:\n    yield start\n    start -= abs(step)\n`,\n    );\n  };\n  // Arguments are legal generator code (numbers or strings returned by scrub()).\n  const generateUpDownRange = function (\n    start: string,\n    end: string,\n    inc: string,\n  ) {\n    return (\n      '(' +\n      start +\n      ' <= ' +\n      end +\n      ') and ' +\n      defineUpRange() +\n      '(' +\n      start +\n      ', ' +\n      end +\n      ', ' +\n      inc +\n      ') or ' +\n      defineDownRange() +\n      '(' +\n      start +\n      ', ' +\n      end +\n      ', ' +\n      inc +\n      ')'\n    );\n  };\n\n  if (\n    stringUtils.isNumber(argument0) &&\n    stringUtils.isNumber(argument1) &&\n    stringUtils.isNumber(increment)\n  ) {\n    // All parameters are simple numbers.\n    argument0 = Number(argument0);\n    argument1 = Number(argument1);\n    increment = Math.abs(Number(increment));\n    if (argument0 % 1 === 0 && argument1 % 1 === 0 && increment % 1 === 0) {\n      // All parameters are integers.\n      if (argument0 <= argument1) {\n        // Count up.\n        argument1++;\n        if (argument0 === 0 && increment === 1) {\n          // If starting index is 0, omit it.\n          range = argument1;\n        } else {\n          range = argument0 + ', ' + argument1;\n        }\n        // If increment isn't 1, it must be explicit.\n        if (increment !== 1) {\n          range += ', ' + increment;\n        }\n      } else {\n        // Count down.\n        argument1--;\n        range = argument0 + ', ' + argument1 + ', -' + increment;\n      }\n      range = 'range(' + range + ')';\n    } else {\n      // At least one of the parameters is not an integer.\n      if (argument0 < argument1) {\n        range = defineUpRange();\n      } else {\n        range = defineDownRange();\n      }\n      range += '(' + argument0 + ', ' + argument1 + ', ' + increment + ')';\n    }\n  } else {\n    // Cache non-trivial values to variables to prevent repeated look-ups.\n    const scrub = function (arg: string, suffix: string) {\n      if (stringUtils.isNumber(arg)) {\n        // Simple number.\n        arg = String(Number(arg));\n      } else if (!arg.match(/^\\w+$/)) {\n        // Not a variable, it's complicated.\n        const varName = generator.nameDB_!.getDistinctName(\n          variable0 + suffix,\n          NameType.VARIABLE,\n        );\n        code += varName + ' = ' + arg + '\\n';\n        arg = varName;\n      }\n      return arg;\n    };\n    const startVar = scrub(argument0, '_start');\n    const endVar = scrub(argument1, '_end');\n    const incVar = scrub(increment, '_inc');\n\n    if (typeof startVar === 'number' && typeof endVar === 'number') {\n      if (startVar < endVar) {\n        range = defineUpRange();\n      } else {\n        range = defineDownRange();\n      }\n      range += '(' + startVar + ', ' + endVar + ', ' + incVar + ')';\n    } else {\n      // We cannot determine direction statically.\n      range = generateUpDownRange(startVar, endVar, incVar);\n    }\n  }\n  code += 'for ' + variable0 + ' in ' + range + ':\\n' + branch;\n  return code;\n}\n\nexport function controls_forEach(block: Block, generator: PythonGenerator) {\n  // For each loop.\n  const variable0 = generator.getVariableName(block.getFieldValue('VAR'));\n  const argument0 =\n    generator.valueToCode(block, 'LIST', Order.RELATIONAL) || '[]';\n  let branch = generator.statementToCode(block, 'DO');\n  branch = generator.addLoopTrap(branch, block) || generator.PASS;\n  const code = 'for ' + variable0 + ' in ' + argument0 + ':\\n' + branch;\n  return code;\n}\n\nexport function controls_flow_statements(\n  block: Block,\n  generator: PythonGenerator,\n) {\n  // Flow statements: continue, break.\n  let xfix = '';\n  if (generator.STATEMENT_PREFIX) {\n    // Automatic prefix insertion is switched off for this block.  Add manually.\n    xfix += generator.injectId(generator.STATEMENT_PREFIX, block);\n  }\n  if (generator.STATEMENT_SUFFIX) {\n    // Inject any statement suffix here since the regular one at the end\n    // will not get executed if the break/continue is triggered.\n    xfix += generator.injectId(generator.STATEMENT_SUFFIX, block);\n  }\n  if (generator.STATEMENT_PREFIX) {\n    const loop = (block as ControlFlowInLoopBlock).getSurroundLoop();\n    if (loop && !loop.suppressPrefixSuffix) {\n      // Inject loop's statement prefix here since the regular one at the end\n      // of the loop will not get executed if 'continue' is triggered.\n      // In the case of 'break', a prefix is needed due to the loop's suffix.\n      xfix += generator.injectId(generator.STATEMENT_PREFIX, loop);\n    }\n  }\n  switch (block.getFieldValue('FLOW')) {\n    case 'BREAK':\n      return xfix + 'break\\n';\n    case 'CONTINUE':\n      return xfix + 'continue\\n';\n  }\n  throw Error('Unknown flow statement.');\n}\n","/**\n * @license\n * Copyright 2012 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * @file Generating Python for math blocks.\n */\n\n// Former goog.module ID: Blockly.Python.math\n\nimport type {Block} from '../../core/block.js';\nimport type {PythonGenerator} from './python_generator.js';\nimport {Order} from './python_generator.js';\n\n// If any new block imports any library, add that library name here.\n// RESERVED WORDS: 'math,random,Number'\n\nexport function math_number(\n  block: Block,\n  generator: PythonGenerator,\n): [string, Order] {\n  // Numeric value.\n  let number = Number(block.getFieldValue('NUM'));\n  if (number === Infinity) {\n    return ['float(\"inf\")', Order.FUNCTION_CALL];\n  } else if (number === -Infinity) {\n    return ['-float(\"inf\")', Order.UNARY_SIGN];\n  } else {\n    return [String(number), number < 0 ? Order.UNARY_SIGN : Order.ATOMIC];\n  }\n}\n\nexport function math_arithmetic(\n  block: Block,\n  generator: PythonGenerator,\n): [string, Order] {\n  // Basic arithmetic operators, and power.\n  const OPERATORS: Record<string, [string | null, Order]> = {\n    'ADD': [' + ', Order.ADDITIVE],\n    'MINUS': [' - ', Order.ADDITIVE],\n    'MULTIPLY': [' * ', Order.MULTIPLICATIVE],\n    'DIVIDE': [' / ', Order.MULTIPLICATIVE],\n    'POWER': [' ** ', Order.EXPONENTIATION],\n  };\n  type OperatorOption = keyof typeof OPERATORS;\n  const tuple = OPERATORS[block.getFieldValue('OP') as OperatorOption];\n  const operator = tuple[0];\n  const order = tuple[1];\n  const argument0 = generator.valueToCode(block, 'A', order) || '0';\n  const argument1 = generator.valueToCode(block, 'B', order) || '0';\n  const code = argument0 + operator + argument1;\n  return [code, order];\n  // In case of 'DIVIDE', division between integers returns different results\n  // in generator 2 and 3. However, is not an issue since Blockly does not\n  // guarantee identical results in all languages.  To do otherwise would\n  // require every operator to be wrapped in a function call.  This would kill\n  // legibility of the generated code.\n}\n\nexport function math_single(\n  block: Block,\n  generator: PythonGenerator,\n): [string, Order] {\n  // Math operators with single operand.\n  const operator = block.getFieldValue('OP');\n  let code;\n  let arg;\n  if (operator === 'NEG') {\n    // Negation is a special case given its different operator precedence.\n    code = generator.valueToCode(block, 'NUM', Order.UNARY_SIGN) || '0';\n    return ['-' + code, Order.UNARY_SIGN];\n  }\n  // TODO(#7600): find better approach than casting to any to override\n  // CodeGenerator declaring .definitions protected (here and below).\n  (generator as AnyDuringMigration).definitions_['import_math'] = 'import math';\n  if (operator === 'SIN' || operator === 'COS' || operator === 'TAN') {\n    arg = generator.valueToCode(block, 'NUM', Order.MULTIPLICATIVE) || '0';\n  } else {\n    arg = generator.valueToCode(block, 'NUM', Order.NONE) || '0';\n  }\n  // First, handle cases which generate values that don't need parentheses\n  // wrapping the code.\n  switch (operator) {\n    case 'ABS':\n      code = 'math.fabs(' + arg + ')';\n      break;\n    case 'ROOT':\n      code = 'math.sqrt(' + arg + ')';\n      break;\n    case 'LN':\n      code = 'math.log(' + arg + ')';\n      break;\n    case 'LOG10':\n      code = 'math.log10(' + arg + ')';\n      break;\n    case 'EXP':\n      code = 'math.exp(' + arg + ')';\n      break;\n    case 'POW10':\n      code = 'math.pow(10,' + arg + ')';\n      break;\n    case 'ROUND':\n      code = 'round(' + arg + ')';\n      break;\n    case 'ROUNDUP':\n      code = 'math.ceil(' + arg + ')';\n      break;\n    case 'ROUNDDOWN':\n      code = 'math.floor(' + arg + ')';\n      break;\n    case 'SIN':\n      code = 'math.sin(' + arg + ' / 180.0 * math.pi)';\n      break;\n    case 'COS':\n      code = 'math.cos(' + arg + ' / 180.0 * math.pi)';\n      break;\n    case 'TAN':\n      code = 'math.tan(' + arg + ' / 180.0 * math.pi)';\n      break;\n  }\n  if (code) {\n    return [code, Order.FUNCTION_CALL];\n  }\n  // Second, handle cases which generate values that may need parentheses\n  // wrapping the code.\n  switch (operator) {\n    case 'ASIN':\n      code = 'math.asin(' + arg + ') / math.pi * 180';\n      break;\n    case 'ACOS':\n      code = 'math.acos(' + arg + ') / math.pi * 180';\n      break;\n    case 'ATAN':\n      code = 'math.atan(' + arg + ') / math.pi * 180';\n      break;\n    default:\n      throw Error('Unknown math operator: ' + operator);\n  }\n  return [code, Order.MULTIPLICATIVE];\n}\n\nexport function math_constant(\n  block: Block,\n  generator: PythonGenerator,\n): [string, Order] {\n  // Constants: PI, E, the Golden Ratio, sqrt(2), 1/sqrt(2), INFINITY.\n  const CONSTANTS: Record<string, [string, Order]> = {\n    'PI': ['math.pi', Order.MEMBER],\n    'E': ['math.e', Order.MEMBER],\n    'GOLDEN_RATIO': ['(1 + math.sqrt(5)) / 2', Order.MULTIPLICATIVE],\n    'SQRT2': ['math.sqrt(2)', Order.MEMBER],\n    'SQRT1_2': ['math.sqrt(1.0 / 2)', Order.MEMBER],\n    'INFINITY': [\"float('inf')\", Order.ATOMIC],\n  };\n  type ConstantOption = keyof typeof CONSTANTS;\n  const constant = block.getFieldValue('CONSTANT') as ConstantOption;\n  if (constant !== 'INFINITY') {\n    (generator as AnyDuringMigration).definitions_['import_math'] =\n      'import math';\n  }\n  return CONSTANTS[constant];\n}\n\nexport function math_number_property(\n  block: Block,\n  generator: PythonGenerator,\n): [string, Order] {\n  // Check if a number is even, odd, prime, whole, positive, or negative\n  // or if it is divisible by certain number. Returns true or false.\n  const PROPERTIES: Record<string, [string | null, Order, Order]> = {\n    'EVEN': [' % 2 == 0', Order.MULTIPLICATIVE, Order.RELATIONAL],\n    'ODD': [' % 2 == 1', Order.MULTIPLICATIVE, Order.RELATIONAL],\n    'WHOLE': [' % 1 == 0', Order.MULTIPLICATIVE, Order.RELATIONAL],\n    'POSITIVE': [' > 0', Order.RELATIONAL, Order.RELATIONAL],\n    'NEGATIVE': [' < 0', Order.RELATIONAL, Order.RELATIONAL],\n    'DIVISIBLE_BY': [null, Order.MULTIPLICATIVE, Order.RELATIONAL],\n    'PRIME': [null, Order.NONE, Order.FUNCTION_CALL],\n  };\n  type PropertyOption = keyof typeof PROPERTIES;\n  const dropdownProperty = block.getFieldValue('PROPERTY') as PropertyOption;\n  const [suffix, inputOrder, outputOrder] = PROPERTIES[dropdownProperty];\n  const numberToCheck =\n    generator.valueToCode(block, 'NUMBER_TO_CHECK', inputOrder) || '0';\n  let code;\n  if (dropdownProperty === 'PRIME') {\n    // Prime is a special case as it is not a one-liner test.\n    (generator as AnyDuringMigration).definitions_['import_math'] =\n      'import math';\n    (generator as AnyDuringMigration).definitions_[\n      'from_numbers_import_Number'\n    ] = 'from numbers import Number';\n    const functionName = generator.provideFunction_(\n      'math_isPrime',\n      `\ndef ${generator.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`,\n    );\n    code = functionName + '(' + numberToCheck + ')';\n  } else if (dropdownProperty === 'DIVISIBLE_BY') {\n    const divisor =\n      generator.valueToCode(block, 'DIVISOR', Order.MULTIPLICATIVE) || '0';\n    // If 'divisor' is some code that evals to 0, generator will raise an error.\n    if (divisor === '0') {\n      return ['False', Order.ATOMIC];\n    }\n    code = numberToCheck + ' % ' + divisor + ' == 0';\n  } else {\n    code = numberToCheck + suffix;\n  }\n  return [code, outputOrder];\n}\n\nexport function math_change(block: Block, generator: PythonGenerator) {\n  // Add to a variable in place.\n  (generator as AnyDuringMigration).definitions_['from_numbers_import_Number'] =\n    'from numbers import Number';\n  const argument0 =\n    generator.valueToCode(block, 'DELTA', Order.ADDITIVE) || '0';\n  const varName = generator.getVariableName(block.getFieldValue('VAR'));\n  return (\n    varName +\n    ' = (' +\n    varName +\n    ' if isinstance(' +\n    varName +\n    ', Number) else 0) + ' +\n    argument0 +\n    '\\n'\n  );\n}\n\n// Rounding functions have a single operand.\nexport const math_round = math_single;\n// Trigonometry functions have a single operand.\nexport const math_trig = math_single;\n\nexport function math_on_list(\n  block: Block,\n  generator: PythonGenerator,\n): [string, Order] {\n  // Math functions for lists.\n  const func = block.getFieldValue('OP');\n  const list = generator.valueToCode(block, 'LIST', Order.NONE) || '[]';\n  let code;\n  switch (func) {\n    case 'SUM':\n      code = 'sum(' + list + ')';\n      break;\n    case 'MIN':\n      code = 'min(' + list + ')';\n      break;\n    case 'MAX':\n      code = 'max(' + list + ')';\n      break;\n    case 'AVERAGE': {\n      (generator as AnyDuringMigration).definitions_[\n        'from_numbers_import_Number'\n      ] = 'from numbers import Number';\n      // This operation excludes null and values that aren't int or float:\n      // math_mean([null, null, \"aString\", 1, 9]) -> 5.0\n      const functionName = generator.provideFunction_(\n        'math_mean',\n        `\ndef ${generator.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`,\n      );\n      code = functionName + '(' + list + ')';\n      break;\n    }\n    case 'MEDIAN': {\n      (generator as AnyDuringMigration).definitions_[\n        'from_numbers_import_Number'\n      ] = 'from numbers import Number';\n      // This operation excludes null values:\n      // math_median([null, null, 1, 3]) -> 2.0\n      const functionName = generator.provideFunction_(\n        'math_median',\n        `\ndef ${generator.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`,\n      );\n      code = functionName + '(' + list + ')';\n      break;\n    }\n    case 'MODE': {\n      // As a list of numbers can contain more than one mode,\n      // the returned result is provided as an array.\n      // Mode of [3, 'x', 'x', 1, 1, 2, '3'] -> ['x', 1]\n      const functionName = generator.provideFunction_(\n        'math_modes',\n        `\ndef ${generator.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`,\n      );\n      code = functionName + '(' + list + ')';\n      break;\n    }\n    case 'STD_DEV': {\n      (generator as AnyDuringMigration).definitions_['import_math'] =\n        'import math';\n      const functionName = generator.provideFunction_(\n        'math_standard_deviation',\n        `\ndef ${generator.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`,\n      );\n      code = functionName + '(' + list + ')';\n      break;\n    }\n    case 'RANDOM':\n      (generator as AnyDuringMigration).definitions_['import_random'] =\n        'import random';\n      code = 'random.choice(' + list + ')';\n      break;\n    default:\n      throw Error('Unknown operator: ' + func);\n  }\n  return [code, Order.FUNCTION_CALL];\n}\n\nexport function math_modulo(\n  block: Block,\n  generator: PythonGenerator,\n): [string, Order] {\n  // Remainder computation.\n  const argument0 =\n    generator.valueToCode(block, 'DIVIDEND', Order.MULTIPLICATIVE) || '0';\n  const argument1 =\n    generator.valueToCode(block, 'DIVISOR', Order.MULTIPLICATIVE) || '0';\n  const code = argument0 + ' % ' + argument1;\n  return [code, Order.MULTIPLICATIVE];\n}\n\nexport function math_constrain(\n  block: Block,\n  generator: PythonGenerator,\n): [string, Order] {\n  // Constrain a number between two limits.\n  const argument0 = generator.valueToCode(block, 'VALUE', Order.NONE) || '0';\n  const argument1 = generator.valueToCode(block, 'LOW', Order.NONE) || '0';\n  const argument2 =\n    generator.valueToCode(block, 'HIGH', Order.NONE) || \"float('inf')\";\n  const code =\n    'min(max(' + argument0 + ', ' + argument1 + '), ' + argument2 + ')';\n  return [code, Order.FUNCTION_CALL];\n}\n\nexport function math_random_int(\n  block: Block,\n  generator: PythonGenerator,\n): [string, Order] {\n  // Random integer between [X] and [Y].\n  (generator as AnyDuringMigration).definitions_['import_random'] =\n    'import random';\n  const argument0 = generator.valueToCode(block, 'FROM', Order.NONE) || '0';\n  const argument1 = generator.valueToCode(block, 'TO', Order.NONE) || '0';\n  const code = 'random.randint(' + argument0 + ', ' + argument1 + ')';\n  return [code, Order.FUNCTION_CALL];\n}\n\nexport function math_random_float(\n  block: Block,\n  generator: PythonGenerator,\n): [string, Order] {\n  // Random fraction between 0 and 1.\n  (generator as AnyDuringMigration).definitions_['import_random'] =\n    'import random';\n  return ['random.random()', Order.FUNCTION_CALL];\n}\n\nexport function math_atan2(\n  block: Block,\n  generator: PythonGenerator,\n): [string, Order] {\n  // Arctangent of point (X, Y) in degrees from -180 to 180.\n  (generator as AnyDuringMigration).definitions_['import_math'] = 'import math';\n  const argument0 = generator.valueToCode(block, 'X', Order.NONE) || '0';\n  const argument1 = generator.valueToCode(block, 'Y', Order.NONE) || '0';\n  return [\n    'math.atan2(' + argument1 + ', ' + argument0 + ') / math.pi * 180',\n    Order.MULTIPLICATIVE,\n  ];\n}\n","/**\n * @license\n * Copyright 2012 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * @file Generating Python for procedure blocks.\n */\n\n// Former goog.module ID: Blockly.Python.procedures\n\nimport type {IfReturnBlock} from '../../blocks/procedures.js';\nimport type {Block} from '../../core/block.js';\nimport {NameType} from '../../core/names.js';\nimport * as Variables from '../../core/variables.js';\nimport type {PythonGenerator} from './python_generator.js';\nimport {Order} from './python_generator.js';\n\nexport function procedures_defreturn(block: Block, generator: PythonGenerator) {\n  // Define a procedure with a return value.\n  // First, add a 'global' statement for every variable that is not shadowed by\n  // a local parameter.\n  const globals = [];\n  const workspace = block.workspace;\n  const usedVariables = Variables.allUsedVarModels(workspace) || [];\n  for (const variable of usedVariables) {\n    const varName = variable.getName();\n    // getVars returns parameter names, not ids, for procedure blocks\n    if (!block.getVars().includes(varName)) {\n      globals.push(generator.getVariableName(varName));\n    }\n  }\n  // Add developer variables.\n  const devVarList = Variables.allDeveloperVariables(workspace);\n  for (let i = 0; i < devVarList.length; i++) {\n    globals.push(\n      generator.nameDB_!.getName(devVarList[i], NameType.DEVELOPER_VARIABLE),\n    );\n  }\n\n  const globalString = globals.length\n    ? generator.INDENT + 'global ' + globals.join(', ') + '\\n'\n    : '';\n  const funcName = generator.getProcedureName(block.getFieldValue('NAME'));\n  let xfix1 = '';\n  if (generator.STATEMENT_PREFIX) {\n    xfix1 += generator.injectId(generator.STATEMENT_PREFIX, block);\n  }\n  if (generator.STATEMENT_SUFFIX) {\n    xfix1 += generator.injectId(generator.STATEMENT_SUFFIX, block);\n  }\n  if (xfix1) {\n    xfix1 = generator.prefixLines(xfix1, generator.INDENT);\n  }\n  let loopTrap = '';\n  if (generator.INFINITE_LOOP_TRAP) {\n    loopTrap = generator.prefixLines(\n      generator.injectId(generator.INFINITE_LOOP_TRAP, block),\n      generator.INDENT,\n    );\n  }\n  let branch = '';\n  if (block.getInput('STACK')) {\n    // The 'procedures_defreturn' block might not have a STACK input.\n    branch = generator.statementToCode(block, 'STACK');\n  }\n  let returnValue = '';\n  if (block.getInput('RETURN')) {\n    // The 'procedures_defnoreturn' block (which shares this code)\n    // does not have a RETURN input.\n    returnValue = generator.valueToCode(block, 'RETURN', Order.NONE) || '';\n  }\n  let xfix2 = '';\n  if (branch && returnValue) {\n    // After executing the function body, revisit this block for the return.\n    xfix2 = xfix1;\n  }\n  if (returnValue) {\n    returnValue = generator.INDENT + 'return ' + returnValue + '\\n';\n  } else if (!branch) {\n    branch = generator.PASS;\n  }\n  const args = [];\n  const variables = block.getVars();\n  for (let i = 0; i < variables.length; i++) {\n    args[i] = generator.getVariableName(variables[i]);\n  }\n  let code =\n    'def ' +\n    funcName +\n    '(' +\n    args.join(', ') +\n    '):\\n' +\n    globalString +\n    xfix1 +\n    loopTrap +\n    branch +\n    xfix2 +\n    returnValue;\n  code = generator.scrub_(block, code);\n  // Add % so as not to collide with helper functions in definitions list.\n  // TODO(#7600): find better approach than casting to any to override\n  // CodeGenerator declaring .definitions protected.\n  (generator as AnyDuringMigration).definitions_['%' + funcName] = code;\n  return null;\n}\n\n// Defining a procedure without a return value uses the same generator as\n// a procedure with a return value.\nexport const procedures_defnoreturn = procedures_defreturn;\n\nexport function procedures_callreturn(\n  block: Block,\n  generator: PythonGenerator,\n): [string, Order] {\n  // Call a procedure with a return value.\n  const funcName = generator.getProcedureName(block.getFieldValue('NAME'));\n  const args = [];\n  const variables = block.getVars();\n  for (let i = 0; i < variables.length; i++) {\n    args[i] = generator.valueToCode(block, 'ARG' + i, Order.NONE) || 'None';\n  }\n  const code = funcName + '(' + args.join(', ') + ')';\n  return [code, Order.FUNCTION_CALL];\n}\n\nexport function procedures_callnoreturn(\n  block: Block,\n  generator: PythonGenerator,\n) {\n  // Call a procedure with no return value.\n  // Generated code is for a function call as a statement is the same as a\n  // function call as a value, with the addition of line ending.\n  const tuple = generator.forBlock['procedures_callreturn'](block, generator)!;\n  return tuple[0] + '\\n';\n}\n\nexport function procedures_ifreturn(block: Block, generator: PythonGenerator) {\n  // Conditionally return value from a procedure.\n  const condition =\n    generator.valueToCode(block, 'CONDITION', Order.NONE) || 'False';\n  let code = 'if ' + condition + ':\\n';\n  if (generator.STATEMENT_SUFFIX) {\n    // Inject any statement suffix here since the regular one at the end\n    // will not get executed if the return is triggered.\n    code += generator.prefixLines(\n      generator.injectId(generator.STATEMENT_SUFFIX, block),\n      generator.INDENT,\n    );\n  }\n  if ((block as IfReturnBlock).hasReturnValue_) {\n    const value = generator.valueToCode(block, 'VALUE', Order.NONE) || 'None';\n    code += generator.INDENT + 'return ' + value + '\\n';\n  } else {\n    code += generator.INDENT + 'return\\n';\n  }\n  return code;\n}\n","/**\n * @license\n * Copyright 2012 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * @file Generating Python for text blocks.\n */\n\n// Former goog.module ID: Blockly.Python.texts\n\nimport type {JoinMutatorBlock} from '../../blocks/text.js';\nimport type {Block} from '../../core/block.js';\nimport {NameType} from '../../core/names.js';\nimport * as stringUtils from '../../core/utils/string.js';\nimport type {PythonGenerator} from './python_generator.js';\nimport {Order} from './python_generator.js';\n\nexport function text(\n  block: Block,\n  generator: PythonGenerator,\n): [string, Order] {\n  // Text value.\n  const code = generator.quote_(block.getFieldValue('TEXT'));\n  return [code, Order.ATOMIC];\n}\n\n/**\n * Regular expression to detect a single-quoted string literal.\n */\nconst strRegExp = /^\\s*'([^']|\\\\')*'\\s*$/;\n\n/**\n * Enclose the provided value in 'str(...)' function.\n * Leave string literals alone.\n *\n * @param value Code evaluating to a value.\n * @returns Array containing code evaluating to a string\n *     and\n *    the order of the returned code.[string, number]\n */\nconst forceString = function (value: string): [string, Order] {\n  if (strRegExp.test(value)) {\n    return [value, Order.ATOMIC];\n  }\n  return ['str(' + value + ')', Order.FUNCTION_CALL];\n};\n\nexport function text_join(\n  block: Block,\n  generator: PythonGenerator,\n): [string, Order] {\n  // Create a string made up of any number of elements of any type.\n  // Should we allow joining by '-' or ',' or any other characters?\n  const joinBlock = block as JoinMutatorBlock;\n  switch (joinBlock.itemCount_) {\n    case 0:\n      return [\"''\", Order.ATOMIC];\n    case 1: {\n      const element = generator.valueToCode(block, 'ADD0', Order.NONE) || \"''\";\n      const codeAndOrder = forceString(element);\n      return codeAndOrder;\n    }\n    case 2: {\n      const element0 = generator.valueToCode(block, 'ADD0', Order.NONE) || \"''\";\n      const element1 = generator.valueToCode(block, 'ADD1', Order.NONE) || \"''\";\n      const code = forceString(element0)[0] + ' + ' + forceString(element1)[0];\n      return [code, Order.ADDITIVE];\n    }\n    default: {\n      const elements = [];\n      for (let i = 0; i < joinBlock.itemCount_; i++) {\n        elements[i] =\n          generator.valueToCode(block, 'ADD' + i, Order.NONE) || \"''\";\n      }\n      const tempVar = generator.nameDB_!.getDistinctName(\n        'x',\n        NameType.VARIABLE,\n      );\n      const code =\n        \"''.join([str(\" +\n        tempVar +\n        ') for ' +\n        tempVar +\n        ' in [' +\n        elements.join(', ') +\n        ']])';\n      return [code, Order.FUNCTION_CALL];\n    }\n  }\n}\n\nexport function text_append(block: Block, generator: PythonGenerator) {\n  // Append to a variable in place.\n  const varName = generator.getVariableName(block.getFieldValue('VAR'));\n  const value = generator.valueToCode(block, 'TEXT', Order.NONE) || \"''\";\n  return varName + ' = str(' + varName + ') + ' + forceString(value)[0] + '\\n';\n}\n\nexport function text_length(\n  block: Block,\n  generator: PythonGenerator,\n): [string, Order] {\n  // Is the string null or array empty?\n  const text = generator.valueToCode(block, 'VALUE', Order.NONE) || \"''\";\n  return ['len(' + text + ')', Order.FUNCTION_CALL];\n}\n\nexport function text_isEmpty(\n  block: Block,\n  generator: PythonGenerator,\n): [string, Order] {\n  // Is the string null or array empty?\n  const text = generator.valueToCode(block, 'VALUE', Order.NONE) || \"''\";\n  const code = 'not len(' + text + ')';\n  return [code, Order.LOGICAL_NOT];\n}\n\nexport function text_indexOf(\n  block: Block,\n  generator: PythonGenerator,\n): [string, Order] {\n  // Search the text for a substring.\n  // Should we allow for non-case sensitive???\n  const operator = block.getFieldValue('END') === 'FIRST' ? 'find' : 'rfind';\n  const substring = generator.valueToCode(block, 'FIND', Order.NONE) || \"''\";\n  const text = generator.valueToCode(block, 'VALUE', Order.MEMBER) || \"''\";\n  const code = text + '.' + operator + '(' + substring + ')';\n  if (block.workspace.options.oneBasedIndex) {\n    return [code + ' + 1', Order.ADDITIVE];\n  }\n  return [code, Order.FUNCTION_CALL];\n}\n\nexport function text_charAt(\n  block: Block,\n  generator: PythonGenerator,\n): [string, Order] {\n  // Get letter at index.\n  // Note: Until January 2013 this block did not have the WHERE input.\n  const where = block.getFieldValue('WHERE') || 'FROM_START';\n  const textOrder = where === 'RANDOM' ? Order.NONE : Order.MEMBER;\n  const text = generator.valueToCode(block, 'VALUE', textOrder) || \"''\";\n  switch (where) {\n    case 'FIRST': {\n      const code = text + '[0]';\n      return [code, Order.MEMBER];\n    }\n    case 'LAST': {\n      const code = text + '[-1]';\n      return [code, Order.MEMBER];\n    }\n    case 'FROM_START': {\n      const at = generator.getAdjustedInt(block, 'AT');\n      const code = text + '[' + at + ']';\n      return [code, Order.MEMBER];\n    }\n    case 'FROM_END': {\n      const at = generator.getAdjustedInt(block, 'AT', 1, true);\n      const code = text + '[' + at + ']';\n      return [code, Order.MEMBER];\n    }\n    case 'RANDOM': {\n      // TODO(#7600): find better approach than casting to any to override\n      // CodeGenerator declaring .definitions protected (here and below).\n      (generator as AnyDuringMigration).definitions_['import_random'] =\n        'import random';\n      const functionName = generator.provideFunction_(\n        'text_random_letter',\n        `\ndef ${generator.FUNCTION_NAME_PLACEHOLDER_}(text):\n  x = int(random.random() * len(text))\n  return text[x]\n`,\n      );\n      const code = functionName + '(' + text + ')';\n      return [code, Order.FUNCTION_CALL];\n    }\n  }\n  throw Error('Unhandled option (text_charAt).');\n}\n\nexport function text_getSubstring(\n  block: Block,\n  generator: PythonGenerator,\n): [string, Order] {\n  // Get substring.\n  const where1 = block.getFieldValue('WHERE1');\n  const where2 = block.getFieldValue('WHERE2');\n  const text = generator.valueToCode(block, 'STRING', Order.MEMBER) || \"''\";\n  let at1;\n  switch (where1) {\n    case 'FROM_START':\n      at1 = generator.getAdjustedInt(block, 'AT1');\n      if (at1 === 0) {\n        at1 = '';\n      }\n      break;\n    case 'FROM_END':\n      at1 = generator.getAdjustedInt(block, 'AT1', 1, true);\n      break;\n    case 'FIRST':\n      at1 = '';\n      break;\n    default:\n      throw Error('Unhandled option (text_getSubstring)');\n  }\n\n  let at2;\n  switch (where2) {\n    case 'FROM_START':\n      at2 = generator.getAdjustedInt(block, 'AT2', 1);\n      break;\n    case 'FROM_END':\n      at2 = generator.getAdjustedInt(block, 'AT2', 0, true);\n      // Ensure that if the result calculated is 0 that sub-sequence will\n      // include all elements as expected.\n      if (!stringUtils.isNumber(String(at2))) {\n        (generator as AnyDuringMigration).definitions_['import_sys'] =\n          'import sys';\n        at2 += ' or sys.maxsize';\n      } else if (at2 === 0) {\n        at2 = '';\n      }\n      break;\n    case 'LAST':\n      at2 = '';\n      break;\n    default:\n      throw Error('Unhandled option (text_getSubstring)');\n  }\n  const code = text + '[' + at1 + ' : ' + at2 + ']';\n  return [code, Order.MEMBER];\n}\n\nexport function text_changeCase(\n  block: Block,\n  generator: PythonGenerator,\n): [string, Order] {\n  // Change capitalization.\n  const OPERATORS = {\n    'UPPERCASE': '.upper()',\n    'LOWERCASE': '.lower()',\n    'TITLECASE': '.title()',\n  };\n  type OperatorOption = keyof typeof OPERATORS;\n  const operator = OPERATORS[block.getFieldValue('CASE') as OperatorOption];\n  const text = generator.valueToCode(block, 'TEXT', Order.MEMBER) || \"''\";\n  const code = text + operator;\n  return [code, Order.FUNCTION_CALL];\n}\n\nexport function text_trim(\n  block: Block,\n  generator: PythonGenerator,\n): [string, Order] {\n  // Trim spaces.\n  const OPERATORS = {\n    'LEFT': '.lstrip()',\n    'RIGHT': '.rstrip()',\n    'BOTH': '.strip()',\n  };\n  type OperatorOption = keyof typeof OPERATORS;\n  const operator = OPERATORS[block.getFieldValue('MODE') as OperatorOption];\n  const text = generator.valueToCode(block, 'TEXT', Order.MEMBER) || \"''\";\n  const code = text + operator;\n  return [code, Order.FUNCTION_CALL];\n}\n\nexport function text_print(block: Block, generator: PythonGenerator) {\n  // Print statement.\n  const msg = generator.valueToCode(block, 'TEXT', Order.NONE) || \"''\";\n  return 'print(' + msg + ')\\n';\n}\n\nexport function text_prompt_ext(\n  block: Block,\n  generator: PythonGenerator,\n): [string, Order] {\n  // Prompt function.\n  const functionName = generator.provideFunction_(\n    'text_prompt',\n    `\ndef ${generator.FUNCTION_NAME_PLACEHOLDER_}(msg):\n  try:\n    return raw_input(msg)\n  except NameError:\n    return input(msg)\n`,\n  );\n  let msg;\n  if (block.getField('TEXT')) {\n    // Internal message.\n    msg = generator.quote_(block.getFieldValue('TEXT'));\n  } else {\n    // External message.\n    msg = generator.valueToCode(block, 'TEXT', Order.NONE) || \"''\";\n  }\n  let code = functionName + '(' + msg + ')';\n  const toNumber = block.getFieldValue('TYPE') === 'NUMBER';\n  if (toNumber) {\n    code = 'float(' + code + ')';\n  }\n  return [code, Order.FUNCTION_CALL];\n}\n\nexport const text_prompt = text_prompt_ext;\n\nexport function text_count(\n  block: Block,\n  generator: PythonGenerator,\n): [string, Order] {\n  const text = generator.valueToCode(block, 'TEXT', Order.MEMBER) || \"''\";\n  const sub = generator.valueToCode(block, 'SUB', Order.NONE) || \"''\";\n  const code = text + '.count(' + sub + ')';\n  return [code, Order.FUNCTION_CALL];\n}\n\nexport function text_replace(\n  block: Block,\n  generator: PythonGenerator,\n): [string, Order] {\n  const text = generator.valueToCode(block, 'TEXT', Order.MEMBER) || \"''\";\n  const from = generator.valueToCode(block, 'FROM', Order.NONE) || \"''\";\n  const to = generator.valueToCode(block, 'TO', Order.NONE) || \"''\";\n  const code = text + '.replace(' + from + ', ' + to + ')';\n  return [code, Order.MEMBER];\n}\n\nexport function text_reverse(\n  block: Block,\n  generator: PythonGenerator,\n): [string, Order] {\n  const text = generator.valueToCode(block, 'TEXT', Order.MEMBER) || \"''\";\n  const code = text + '[::-1]';\n  return [code, Order.MEMBER];\n}\n","/**\n * @license\n * Copyright 2012 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * @file Generating Python for variable blocks.\n */\n\n// Former goog.module ID: Blockly.Python.variables\n\nimport type {Block} from '../../core/block.js';\nimport type {PythonGenerator} from './python_generator.js';\nimport {Order} from './python_generator.js';\n\nexport function variables_get(\n  block: Block,\n  generator: PythonGenerator,\n): [string, Order] {\n  // Variable getter.\n  const code = generator.getVariableName(block.getFieldValue('VAR'));\n  return [code, Order.ATOMIC];\n}\n\nexport function variables_set(block: Block, generator: PythonGenerator) {\n  // Variable setter.\n  const argument0 = generator.valueToCode(block, 'VALUE', Order.NONE) || '0';\n  const varName = generator.getVariableName(block.getFieldValue('VAR'));\n  return varName + ' = ' + argument0 + '\\n';\n}\n","/**\n * @license\n * Copyright 2012 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * @file Python code generator class, including helper methods for\n * generating Python for blocks.\n */\n\n// Former goog.module ID: Blockly.Python\n\nimport type {Block} from '../../core/block.js';\nimport {CodeGenerator} from '../../core/generator.js';\nimport {inputTypes} from '../../core/inputs/input_types.js';\nimport {Names} from '../../core/names.js';\nimport * as stringUtils from '../../core/utils/string.js';\nimport * as Variables from '../../core/variables.js';\nimport type {Workspace} from '../../core/workspace.js';\n\n/**\n * Order of operation ENUMs.\n * http://docs.python.org/reference/expressions.html#summary\n */\n// prettier-ignore\nexport enum Order {\n  ATOMIC = 0,             // 0 \"\" ...\n  COLLECTION = 1,         // tuples, lists, dictionaries\n  STRING_CONVERSION = 1,  // `expression...`\n  MEMBER = 2.1,           // . []\n  FUNCTION_CALL = 2.2,    // ()\n  EXPONENTIATION = 3,     // **\n  UNARY_SIGN = 4,         // + -\n  BITWISE_NOT = 4,        // ~\n  MULTIPLICATIVE = 5,     // * / // %\n  ADDITIVE = 6,           // + -\n  BITWISE_SHIFT = 7,      // << >>\n  BITWISE_AND = 8,        // &\n  BITWISE_XOR = 9,        // ^\n  BITWISE_OR = 10,        // |\n  RELATIONAL = 11,        // in, not in, is, is not, >, >=, <>, !=, ==\n  LOGICAL_NOT = 12,       // not\n  LOGICAL_AND = 13,       // and\n  LOGICAL_OR = 14,        // or\n  CONDITIONAL = 15,       // if else\n  LAMBDA = 16,            // lambda\n  NONE = 99,              // (...)\n}\n\n/**\n * PythonScript code generator class.\n */\nexport class PythonGenerator extends CodeGenerator {\n  /** List of outer-inner pairings that do NOT require parentheses. */\n  ORDER_OVERRIDES: [Order, Order][] = [\n    // (foo()).bar -> foo().bar\n    // (foo())[0] -> foo()[0]\n    [Order.FUNCTION_CALL, Order.MEMBER],\n    // (foo())() -> foo()()\n    [Order.FUNCTION_CALL, Order.FUNCTION_CALL],\n    // (foo.bar).baz -> foo.bar.baz\n    // (foo.bar)[0] -> foo.bar[0]\n    // (foo[0]).bar -> foo[0].bar\n    // (foo[0])[1] -> foo[0][1]\n    [Order.MEMBER, Order.MEMBER],\n    // (foo.bar)() -> foo.bar()\n    // (foo[0])() -> foo[0]()\n    [Order.MEMBER, Order.FUNCTION_CALL],\n\n    // not (not foo) -> not not foo\n    [Order.LOGICAL_NOT, Order.LOGICAL_NOT],\n    // a and (b and c) -> a and b and c\n    [Order.LOGICAL_AND, Order.LOGICAL_AND],\n    // a or (b or c) -> a or b or c\n    [Order.LOGICAL_OR, Order.LOGICAL_OR],\n  ];\n\n  /**\n   * Empty loops or conditionals are not allowed in Python.\n   */\n  PASS: string = ''; // Initialised by init().\n\n  /** @param name Name of the language the generator is for. */\n  constructor(name = 'Python') {\n    super(name);\n    this.isInitialized = false;\n\n    // Copy Order values onto instance for backwards compatibility\n    // while ensuring they are not part of the publically-advertised\n    // API.\n    //\n    // TODO(#7085): deprecate these in due course.  (Could initially\n    // replace data properties with get accessors that call\n    // deprecate.warn().)\n    for (const key in Order) {\n      // Must assign Order[key] to a temporary to get the type guard to work;\n      // see https://github.com/microsoft/TypeScript/issues/10530.\n      const value = Order[key];\n      // Skip reverse-lookup entries in the enum.  Due to\n      // https://github.com/microsoft/TypeScript/issues/55713 this (as\n      // of TypeScript 5.5.2) actually narrows the type of value to\n      // never - but that still allows the following assignment to\n      // succeed.\n      if (typeof value === 'string') continue;\n      (this as unknown as Record<string, Order>)['ORDER_' + key] = value;\n    }\n\n    // List of illegal variable names.  This is not intended to be a\n    // security feature.  Blockly is 100% client-side, so bypassing\n    // this list is trivial.  This is intended to prevent users from\n    // accidentally clobbering a built-in object or function.\n    this.addReservedWords(\n      // import keyword\n      // print(','.join(sorted(keyword.kwlist)))\n      // https://docs.python.org/3/reference/lexical_analysis.html#keywords\n      // https://docs.python.org/2/reference/lexical_analysis.html#keywords\n      'False,None,True,and,as,assert,break,class,continue,def,del,elif,else,' +\n        'except,exec,finally,for,from,global,if,import,in,is,lambda,nonlocal,' +\n        'not,or,pass,print,raise,return,try,while,with,yield,' +\n        // https://docs.python.org/3/library/constants.html\n        // https://docs.python.org/2/library/constants.html\n        'NotImplemented,Ellipsis,__debug__,quit,exit,copyright,license,credits,' +\n        // >>> print(','.join(sorted(dir(__builtins__))))\n        // https://docs.python.org/3/library/functions.html\n        // https://docs.python.org/2/library/functions.html\n        'ArithmeticError,AssertionError,AttributeError,BaseException,' +\n        'BlockingIOError,BrokenPipeError,BufferError,BytesWarning,' +\n        'ChildProcessError,ConnectionAbortedError,ConnectionError,' +\n        'ConnectionRefusedError,ConnectionResetError,DeprecationWarning,' +\n        'EOFError,Ellipsis,EnvironmentError,Exception,FileExistsError,' +\n        'FileNotFoundError,FloatingPointError,FutureWarning,GeneratorExit,' +\n        'IOError,ImportError,ImportWarning,IndentationError,IndexError,' +\n        'InterruptedError,IsADirectoryError,KeyError,KeyboardInterrupt,' +\n        'LookupError,MemoryError,ModuleNotFoundError,NameError,' +\n        'NotADirectoryError,NotImplemented,NotImplementedError,OSError,' +\n        'OverflowError,PendingDeprecationWarning,PermissionError,' +\n        'ProcessLookupError,RecursionError,ReferenceError,ResourceWarning,' +\n        'RuntimeError,RuntimeWarning,StandardError,StopAsyncIteration,' +\n        'StopIteration,SyntaxError,SyntaxWarning,SystemError,SystemExit,' +\n        'TabError,TimeoutError,TypeError,UnboundLocalError,UnicodeDecodeError,' +\n        'UnicodeEncodeError,UnicodeError,UnicodeTranslateError,UnicodeWarning,' +\n        'UserWarning,ValueError,Warning,ZeroDivisionError,_,__build_class__,' +\n        '__debug__,__doc__,__import__,__loader__,__name__,__package__,__spec__,' +\n        'abs,all,any,apply,ascii,basestring,bin,bool,buffer,bytearray,bytes,' +\n        'callable,chr,classmethod,cmp,coerce,compile,complex,copyright,credits,' +\n        'delattr,dict,dir,divmod,enumerate,eval,exec,execfile,exit,file,filter,' +\n        'float,format,frozenset,getattr,globals,hasattr,hash,help,hex,id,input,' +\n        'int,intern,isinstance,issubclass,iter,len,license,list,locals,long,' +\n        'map,max,memoryview,min,next,object,oct,open,ord,pow,print,property,' +\n        'quit,range,raw_input,reduce,reload,repr,reversed,round,set,setattr,' +\n        'slice,sorted,staticmethod,str,sum,super,tuple,type,unichr,unicode,' +\n        'vars,xrange,zip',\n    );\n  }\n\n  /**\n   * Initialise the database of variable names.\n   *\n   * @param workspace Workspace to generate code from.\n   */\n  init(workspace: Workspace) {\n    super.init(workspace);\n\n    this.PASS = this.INDENT + 'pass\\n';\n\n    if (!this.nameDB_) {\n      this.nameDB_ = new Names(this.RESERVED_WORDS_);\n    } else {\n      this.nameDB_.reset();\n    }\n\n    this.nameDB_.setVariableMap(workspace.getVariableMap());\n    this.nameDB_.populateVariables(workspace);\n    this.nameDB_.populateProcedures(workspace);\n\n    const defvars = [];\n    // Add developer variables (not created or named by the user).\n    const devVarList = Variables.allDeveloperVariables(workspace);\n    for (let i = 0; i < devVarList.length; i++) {\n      defvars.push(\n        this.nameDB_.getName(devVarList[i], Names.DEVELOPER_VARIABLE_TYPE) +\n          ' = None',\n      );\n    }\n\n    // Add user variables, but only ones that are being used.\n    const variables = Variables.allUsedVarModels(workspace);\n    for (let i = 0; i < variables.length; i++) {\n      defvars.push(this.getVariableName(variables[i].getId()) + ' = None');\n    }\n\n    this.definitions_['variables'] = defvars.join('\\n');\n    this.isInitialized = true;\n  }\n\n  /**\n   * Prepend the generated code with import statements and variable definitions.\n   *\n   * @param code Generated code.\n   * @returns Completed code.\n   */\n  finish(code: string): string {\n    // Convert the definitions dictionary into a list.\n    const imports = [];\n    const definitions = [];\n    for (let name in this.definitions_) {\n      const def = this.definitions_[name];\n      if (def.match(/^(from\\s+\\S+\\s+)?import\\s+\\S+/)) {\n        imports.push(def);\n      } else {\n        definitions.push(def);\n      }\n    }\n    // Call Blockly.CodeGenerator's finish.\n    code = super.finish(code);\n    this.isInitialized = false;\n\n    this.nameDB_!.reset();\n    const allDefs = imports.join('\\n') + '\\n\\n' + definitions.join('\\n\\n');\n    return allDefs.replace(/\\n\\n+/g, '\\n\\n').replace(/\\n*$/, '\\n\\n\\n') + code;\n  }\n\n  /**\n   * Naked values are top-level blocks with outputs that aren't plugged into\n   * anything.\n   *\n   * @param line Line of generated code.\n   * @returns Legal line of code.\n   */\n  scrubNakedValue(line: string): string {\n    return line + '\\n';\n  }\n\n  /**\n   * Encode a string as a properly escaped Python string, complete with quotes.\n   *\n   * @param string Text to encode.\n   * @returns Python string.\n   */\n  quote_(string: string): string {\n    string = string.replace(/\\\\/g, '\\\\\\\\').replace(/\\n/g, '\\\\\\n');\n\n    // Follow the CPython behaviour of repr() for a non-byte string.\n    let quote = \"'\";\n    if (string.includes(\"'\")) {\n      if (!string.includes('\"')) {\n        quote = '\"';\n      } else {\n        string = string.replace(/'/g, \"\\\\'\");\n      }\n    }\n    return quote + string + quote;\n  }\n\n  /**\n   * Encode a string as a properly escaped multiline Python string, complete\n   * with quotes.\n   *\n   * @param string Text to encode.\n   * @returns Python string.\n   */\n  multiline_quote_(string: string): string {\n    const lines = string.split(/\\n/g).map(this.quote_);\n    // Join with the following, plus a newline:\n    // + '\\n' +\n    return lines.join(\" + '\\\\n' + \\n\");\n  }\n\n  /**\n   * Common tasks for generating Python from blocks.\n   * Handles comments for the specified block and any connected value blocks.\n   * Calls any statements following this block.\n   *\n   * @param block The current block.\n   * @param code The Python code created for this block.\n   * @param thisOnly True to generate code for only this statement.\n   * @returns Python code with comments and subsequent blocks added.\n   */\n  scrub_(block: Block, code: string, thisOnly = false): string {\n    let commentCode = '';\n    // Only collect comments for blocks that aren't inline.\n    if (!block.outputConnection || !block.outputConnection.targetConnection) {\n      // Collect comment for this block.\n      let comment = block.getCommentText();\n      if (comment) {\n        comment = stringUtils.wrap(comment, this.COMMENT_WRAP - 3);\n        commentCode += this.prefixLines(comment + '\\n', '# ');\n      }\n      // Collect comments for all value arguments.\n      // Don't collect comments for nested statements.\n      for (let i = 0; i < block.inputList.length; i++) {\n        if (block.inputList[i].type === inputTypes.VALUE) {\n          const childBlock = block.inputList[i].connection!.targetBlock();\n          if (childBlock) {\n            comment = this.allNestedComments(childBlock);\n            if (comment) {\n              commentCode += this.prefixLines(comment, '# ');\n            }\n          }\n        }\n      }\n    }\n    const nextBlock =\n      block.nextConnection && block.nextConnection.targetBlock();\n    const nextCode = thisOnly ? '' : this.blockToCode(nextBlock);\n    return commentCode + code + nextCode;\n  }\n\n  /**\n   * Gets a property and adjusts the value, taking into account indexing.\n   * If a static int, casts to an integer, otherwise returns a code string.\n   *\n   * @param block The block.\n   * @param atId The ID of the input block to get (and adjust) the value of.\n   * @param delta Value to add.\n   * @param negate Whether to negate the value.\n   * @returns The adjusted value or code that evaluates to it.\n   */\n  getAdjustedInt(\n    block: Block,\n    atId: string,\n    delta = 0,\n    negate = false,\n  ): string | number {\n    if (block.workspace.options.oneBasedIndex) {\n      delta--;\n    }\n    const defaultAtIndex = block.workspace.options.oneBasedIndex ? '1' : '0';\n    const atOrder = delta ? Order.ADDITIVE : Order.NONE;\n    let at: string | number =\n      this.valueToCode(block, atId, atOrder) || defaultAtIndex;\n\n    if (stringUtils.isNumber(at)) {\n      // If the index is a naked number, adjust it right now.\n      at = parseInt(at, 10) + delta;\n      if (negate) {\n        at = -at;\n      }\n    } else {\n      // If the index is dynamic, adjust it in code.\n      if (delta > 0) {\n        at = 'int(' + at + ' + ' + delta + ')';\n      } else if (delta < 0) {\n        at = 'int(' + at + ' - ' + -delta + ')';\n      } else {\n        at = 'int(' + at + ')';\n      }\n      if (negate) {\n        at = '-' + at;\n      }\n    }\n    return at;\n  }\n}\n","/**\n * @license\n * Copyright 2018 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * @file Generating Python for dynamic variable blocks.\n */\n\n// Former goog.module ID: Blockly.Python.variablesDynamic\n\n// generator is dynamically typed.\nexport {\n  variables_get as variables_get_dynamic,\n  variables_set as variables_set_dynamic,\n} from './variables.js';\n","/**\n * @license\n * Copyright 2021 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * @file Instantiate a PythonGenerator and populate it with the\n * complete set of block generator functions for Python.  This is the\n * entrypoint for python_compressed.js.\n */\n\n// Former goog.module ID: Blockly.Python.all\n\nimport * as lists from './python/lists.js';\nimport * as logic from './python/logic.js';\nimport * as loops from './python/loops.js';\nimport * as math from './python/math.js';\nimport * as procedures from './python/procedures.js';\nimport {PythonGenerator} from './python/python_generator.js';\nimport * as text from './python/text.js';\nimport * as variables from './python/variables.js';\nimport * as variablesDynamic from './python/variables_dynamic.js';\n\nexport * from './python/python_generator.js';\n\n/**\n * Python code generator instance.\n * @type {!PythonGenerator}\n */\nexport const pythonGenerator = new PythonGenerator();\n\n// Add reserved words.  This list should include all words mentioned\n// in RESERVED WORDS: comments in the imports above.\npythonGenerator.addReservedWords('math,random,Number');\n\n// Install per-block-type generator functions:\n// Install per-block-type generator functions:\nconst generators: typeof pythonGenerator.forBlock = {\n  ...lists,\n  ...logic,\n  ...loops,\n  ...math,\n  ...procedures,\n  ...text,\n  ...variables,\n  ...variablesDynamic,\n};\nfor (const name in generators) {\n  pythonGenerator.forBlock[name] = generators[name];\n}\n"]}