From a0224384fce1e8885c73a04a0df5d1328d5db6b5 Mon Sep 17 00:00:00 2001 From: bcopy <500789+bcopy@users.noreply.github.com> Date: Mon, 19 Oct 2020 20:25:29 +0200 Subject: [PATCH] Switch to Javascript interpreter and code gen --- modules/frontend/pom.xml | 2 +- .../src/main/frontend/package-lock.json | 44 +- .../frontend/src/main/frontend/package.json | 1 + .../main/frontend/public/assets/js/brython.js | 14201 ---------------- .../public/assets/js/brython_stdlib.js | 3 - .../main/frontend/public/python-executor.html | 24 - .../frontend/src/blockly/drivar/generators.js | 4 +- .../src/components/PythonExecutor.vue | 4 +- .../src/main/frontend/src/views/Edit.vue | 16 +- 9 files changed, 29 insertions(+), 14270 deletions(-) delete mode 100644 modules/frontend/src/main/frontend/public/assets/js/brython.js delete mode 100644 modules/frontend/src/main/frontend/public/assets/js/brython_stdlib.js delete mode 100644 modules/frontend/src/main/frontend/public/python-executor.html diff --git a/modules/frontend/pom.xml b/modules/frontend/pom.xml index 37f4ec4..5991d14 100644 --- a/modules/frontend/pom.xml +++ b/modules/frontend/pom.xml @@ -34,7 +34,7 @@ ${project.basedir}/src/main/frontend v12.18.3 - 6.14.6 + 6.14.8 diff --git a/modules/frontend/src/main/frontend/package-lock.json b/modules/frontend/src/main/frontend/package-lock.json index e06fa54..aef5f96 100644 --- a/modules/frontend/src/main/frontend/package-lock.json +++ b/modules/frontend/src/main/frontend/package-lock.json @@ -2690,11 +2690,6 @@ "node-releases": "^1.1.58" } }, - "brython": { - "version": "3.8.10", - "resolved": "https://registry.npmjs.org/brython/-/brython-3.8.10.tgz", - "integrity": "sha512-tFywZH5YmBLyZO/c5j/LRjLqrvohPVpw9rlNqHlIODEgnDrClBtgKljB1gDZkfKpWUOy/s2QPyqaD4i/eyJD9g==" - }, "buffer": { "version": "4.9.2", "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", @@ -6577,6 +6572,14 @@ "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.5.1.tgz", "integrity": "sha512-XwIBPqcMn57FxfT+Go5pzySnm4KWkT1Tv7gjrpT1srtf8Weynl6R273VJ5GjkRb51IzMp5nbaPjJXMWeju2MKg==" }, + "js-interpreter": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/js-interpreter/-/js-interpreter-2.2.0.tgz", + "integrity": "sha512-eZq/kAEjxahuGowG91tWLVgzPuLGGqyakTFF7JPlblV6b/Uu9EOnYxs5EOSVQlKwHoq7MND0gu1zk3OGs5a6Iw==", + "requires": { + "minimist": "^1.2.0" + } + }, "js-message": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/js-message/-/js-message-1.0.5.tgz", @@ -8788,11 +8791,6 @@ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" }, - "pyodide": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pyodide/-/pyodide-0.1.1.tgz", - "integrity": "sha512-lsC2ZOX8BQpDplHvybJ+wU4qi4efs8WMD5jyllqIaEg9i4uTfyjAZvoe+mQKi6KK9+ldvSc0HivVpwzI7+tY8g==" - }, "q": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", @@ -10831,6 +10829,15 @@ "resolved": "https://registry.npmjs.org/vue-class-component/-/vue-class-component-7.2.5.tgz", "integrity": "sha512-0CSftHY0bDTD+4FbYkuFf6+iKDjZ4h2in2YYJDRMk5daZIjrgT9LjFHvP7Rzqy9/s1pij3zDtTSLRUjsPWMwqg==" }, + "vue-console-interactive": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/vue-console-interactive/-/vue-console-interactive-0.4.2.tgz", + "integrity": "sha512-wZrPhN/1Hw7DNewJxJa8O2O9JRz+19QVGWlpBzfyCLyZNoP2de8u3x23bjxa7pevTAz2BXqMGrO45q2tJ3Ad+Q==", + "requires": { + "vue": "^2.5.2", + "vue-router": "^3.0.1" + } + }, "vue-eslint-parser": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-7.1.0.tgz", @@ -10857,23 +10864,6 @@ } } }, - "vue-friendly-iframe": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/vue-friendly-iframe/-/vue-friendly-iframe-0.18.0.tgz", - "integrity": "sha512-RHDxKEnlFhtcf7mie7/4s1o1j4qac/vzcb5kvuKIo1daTkvfZEGTx0Irri15wfl1MCi9loCSSvuVgeUxlArHhA==", - "dev": true, - "requires": { - "uuid": "3.1.0" - }, - "dependencies": { - "uuid": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.1.0.tgz", - "integrity": "sha512-DIWtzUkw04M4k3bf1IcpS2tngXEL26YUD2M0tMDUpnUrz2hgzUBlD55a4FjdLGPvfHxS6uluGWvaVEqgBcVa+g==", - "dev": true - } - } - }, "vue-functional-data-merge": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/vue-functional-data-merge/-/vue-functional-data-merge-3.1.0.tgz", diff --git a/modules/frontend/src/main/frontend/package.json b/modules/frontend/src/main/frontend/package.json index 3f0ab2a..bab5e88 100644 --- a/modules/frontend/src/main/frontend/package.json +++ b/modules/frontend/src/main/frontend/package.json @@ -20,6 +20,7 @@ "drivar-blockly": "https://github.com/cmcrobotics/drivar-blockly.git", "file-loader": "^6.0.0", "golden-layout": "^1.5.9", + "js-interpreter": "^2.2.0", "lodash": "^4.17.19", "uuid": "^8.2.0", "vue": "^2.6.11", diff --git a/modules/frontend/src/main/frontend/public/assets/js/brython.js b/modules/frontend/src/main/frontend/public/assets/js/brython.js deleted file mode 100644 index aa5b08e..0000000 --- a/modules/frontend/src/main/frontend/public/assets/js/brython.js +++ /dev/null @@ -1,14201 +0,0 @@ -// brython.js brython.info -// version [3, 8, 0, 'final', 0] -// implementation [3, 8, 10, 'final', 0] -// version compiled from commented, indented source files at -// github.com/brython-dev/brython -var __BRYTHON__=__BRYTHON__ ||{} -try{ -eval("async function* f(){}")}catch(err){console.warn("Your browser is not fully supported. If you are using "+ -"Microsoft Edge, please upgrade to the latest version")} -;(function($B){ -$B.isWebWorker=('undefined' !==typeof WorkerGlobalScope)&& -("function"===typeof importScripts)&& -(navigator instanceof WorkerNavigator) -$B.isNode=(typeof process !=='undefined')&&(process.release.name==='node') -var _window -if($B.isNode){_window={location:{href:'',origin:'',pathname:''},navigator:{userLanguage:''}}}else{ -_window=self} -var href=_window.location.href -$B.protocol=href.split(':')[0] -$B.BigInt=_window.BigInt -var $path -if($B.brython_path===undefined){ -var this_url; -if($B.isWebWorker){this_url=_window.location.href; -if(this_url.startsWith("blob:")){this_url=this_url.substr(5)}}else{var scripts=document.getElementsByTagName('script') -this_url=scripts[scripts.length-1].src} -var elts=this_url.split('/') -elts.pop() -$path=$B.brython_path=elts.join('/')+'/'}else{if(! $B.brython_path.endsWith("/")){$B.brython_path+="/"} -$path=$B.brython_path} -var path=_window.location.origin+_window.location.pathname,path_elts=path.split("/") -path_elts.pop() -var $script_dir=$B.script_dir=path_elts.join("/") -$B.__ARGV=[] -$B.webworkers={} -$B.$py_module_path={} -$B.file_cache={} -$B.$py_src={} -$B.path=[$path+'Lib',$path+'libs',$script_dir,$path+'Lib/site-packages'] -$B.async_enabled=false -if($B.async_enabled){$B.block={}} -$B.imported={} -$B.precompiled={} -$B.frames_stack=[] -$B.builtins={} -$B.builtins_scope={id:'__builtins__',module:'__builtins__',binding:{}} -$B.builtin_funcs={} -$B.builtin_classes=[] -$B.__getattr__=function(attr){return this[attr]} -$B.__setattr__=function(attr,value){ -if(['debug','stdout','stderr'].indexOf(attr)>-1){$B[attr]=value} -else{throw $B.builtins.AttributeError.$factory( -'__BRYTHON__ object has no attribute '+attr)}} -$B.language=_window.navigator.userLanguage ||_window.navigator.language -$B.locale="C" -if($B.isWebWorker){$B.charset="utf-8"}else{ -$B.charset=document.characterSet ||document.inputEncoding ||"utf-8"} -$B.max_int=Math.pow(2,53)-1 -$B.min_int=-$B.max_int -$B.$py_next_hash=Math.pow(2,53)-1 -$B.$py_UUID=0 -$B.lambda_magic=Math.random().toString(36).substr(2,8) -$B.set_func_names=function(klass,module){if(klass.$infos){var name=klass.$infos.__name__ -klass.$infos.__module__=module -klass.$infos.__qualname__=name}else{var name=klass.__name__ -klass.$infos={__name__:name,__module__:module,__qualname__:name}} -klass.__module__=module -for(var attr in klass){if(typeof klass[attr]=='function'){klass[attr].$infos={__doc__:klass[attr].__doc__ ||"",__module__:module,__qualname__ :name+'.'+attr,__name__:attr} -if(klass[attr].$type=="classmethod"){klass[attr].__class__=$B.method}}}} -var has_storage=typeof(Storage)!=="undefined" -if(has_storage){$B.has_local_storage=false -try{if(localStorage){$B.local_storage=localStorage -$B.has_local_storage=true}}catch(err){} -$B.has_session_storage=false -try{if(sessionStorage){$B.session_storage=sessionStorage -$B.has_session_storage=true}}catch(err){}}else{$B.has_local_storage=false -$B.has_session_storage=false} -$B.globals=function(){ -return $B.frames_stack[$B.frames_stack.length-1][3]} -$B.scripts={} -$B.$options={} -$B.update_VFS=function(scripts){$B.VFS=$B.VFS ||{} -var vfs_timestamp=scripts.$timestamp -if(vfs_timestamp !==undefined){delete scripts.$timestamp} -for(var script in scripts){if($B.VFS.hasOwnProperty(script)){console.warn("Virtual File System: duplicate entry "+script)} -$B.VFS[script]=scripts[script] -$B.VFS[script].timestamp=vfs_timestamp}} -$B.add_files=function(files){ -$B.files=$B.files ||{} -for(var file in files){$B.files[file]=files[file]}} -$B.python_to_js=function(src,script_id){$B.meta_path=$B.$meta_path.slice() -if(!$B.use_VFS){$B.meta_path.shift()} -if(script_id===undefined){script_id="__main__"} -var root=__BRYTHON__.py2js(src,script_id,script_id),js=root.to_js() -js="(function() {\n var $locals_"+script_id+" = {}\n"+js+"\n}())" -return js} -_window.py=function(src){ -var root=$B.py2js(src[0],"script","script"),js=root.to_js() -$B.set_import_paths() -new Function("$locals_script",js)({})}})(__BRYTHON__) -; -__BRYTHON__.implementation=[3,8,10,'final',0] -__BRYTHON__.__MAGIC__="3.8.10" -__BRYTHON__.version_info=[3,8,0,'final',0] -__BRYTHON__.compiled_date="2020-08-29 08:41:15.261825" -__BRYTHON__.timestamp=1598683275261 -__BRYTHON__.builtin_module_names=["_aio","_ajax","_base64","_binascii","_io_classes","_json","_jsre","_locale","_multiprocessing","_posixsubprocess","_profile","_sre_utils","_string","_strptime","_svg","_warnings","_webcomponent","_webworker","_zlib_utils","array","builtins","dis","hashlib","long_int","marshal","math","math1","modulefinder","posix","random","unicodedata"] -; - -;(function($B){Number.isInteger=Number.isInteger ||function(value){return typeof value==='number' && -isFinite(value)&& -Math.floor(value)===value}; -Number.isSafeInteger=Number.isSafeInteger ||function(value){return Number.isInteger(value)&& Math.abs(value)<=Number.MAX_SAFE_INTEGER;}; -var js,$pos,res,$op -var _b_=$B.builtins -var _window -if($B.isNode){_window={location:{href:'',origin:'',pathname:''}}}else{ -_window=self} -$B.parser={} -var clone=$B.clone=function(obj){var res={} -for(var attr in obj){res[attr]=obj[attr]} -return res} -$B.last=function(table){if(table===undefined){console.log($B.frames_stack.slice())} -return table[table.length-1]} -$B.list2obj=function(list,value){var res={},i=list.length -if(value===undefined){value=true} -while(i--> 0){res[list[i]]=value} -return res} -$B.op2method={operations:{"**":"pow","//":"floordiv","<<":"lshift",">>":"rshift","+":"add","-":"sub","*":"mul","/":"truediv","%":"mod","@":"matmul" },augmented_assigns:{"//=":"ifloordiv",">>=":"irshift","<<=":"ilshift","**=":"ipow","+=":"iadd","-=":"isub","*=":"imul","/=":"itruediv","%=":"imod","&=":"iand","|=":"ior","^=":"ixor","@=":"imatmul"},binary:{"&":"and","|":"or","~":"invert","^":"xor"},comparisons:{"<":"lt",">":"gt","<=":"le",">=":"ge","==":"eq","!=":"ne"},boolean:{"or":"or","and":"and","in":"in","not":"not","is":"is","not_in":"not_in","is_not":"is_not" },subset:function(){var res={},keys=[] -if(arguments[0]=="all"){keys=Object.keys($B.op2method) -keys.splice(keys.indexOf("subset"),1)}else{for(var i=0,len=arguments.length;i < len;i++){keys.push(arguments[i])}} -for(var i=0,len=keys.length;i < len;i++){var key=keys[i],ops=$B.op2method[key] -if(ops===undefined){throw Error(key)} -for(var attr in ops){res[attr]=ops[attr]}} -return res}} -var $operators=$B.op2method.subset("all") -var $augmented_assigns=$B.augmented_assigns=$B.op2method.augmented_assigns -var noassign=$B.list2obj(['True','False','None','__debug__']) -var $op_order=[['or'],['and'],['not'],['in','not_in'],['<','<=','>','>=','!=','==','is','is_not'],['|'],['^'],['&'],['>>','<<'],['+'],['-'],['*','@','/','//','%'],['unary_neg','unary_inv','unary_pos'],['**'] -] -var $op_weight={},$weight=1 -$op_order.forEach(function(_tmp){_tmp.forEach(function(item){$op_weight[item]=$weight}) -$weight++}) -var $loop_num=0 -var create_temp_name=$B.parser.create_temp_name=function(prefix){var _prefix=prefix ||'$temp' -return _prefix+$loop_num++;} -var replace_node=$B.parser.replace_node=function(replace_what,replace_with){var parent=replace_what.parent -var pos=get_rank_in_parent(replace_what) -parent.children[pos]=replace_with -replace_with.parent=parent -replace_with.bindings=replace_what.bindings} -var get_rank_in_parent=$B.parser.get_rank_in_parent=function(node){return node.parent.children.indexOf(node)} -var add_identnode=$B.parser.add_identnode=function(parent,insert_at,name,val){var new_node=new $Node() -new_node.parent=parent -new_node.locals=parent.locals -new_node.module=parent.module -var new_ctx=new $NodeCtx(new_node) -var expr_ctx=new $ExprCtx(new_ctx,'id',true) -var idctx=new $IdCtx(expr_ctx,name) -var assign=new $AssignCtx(expr_ctx) -if(insert_at===-1) -parent.add(new_node) -else -parent.insert(insert_at,new_node) -assign.tree[1]=val -return new_node} -var chained_comp_num=0 -var $_SyntaxError=$B.parser.$_SyntaxError=function(C,msg,indent){ -var ctx_node=C -while(ctx_node.type !=='node'){ctx_node=ctx_node.parent} -var tree_node=ctx_node.node,root=tree_node -while(root.parent !==undefined){root=root.parent} -var module=tree_node.module,src=root.src,line_num=tree_node.line_num -if(src){line_num=src.substr(0,$pos).split("\n").length} -if(root.line_info){line_num=root.line_info} -if(indent===undefined ||typeof indent !="number"){if(Array.isArray(msg)){$B.$SyntaxError(module,msg[0],src,$pos,line_num,root)} -if(msg==="Triple string end not found"){ -$B.$SyntaxError(module,'invalid syntax : triple string end not found',src,$pos,line_num,root)} -var message='invalid syntax' -if(!(msg.startsWith("token "))){message+=' ('+msg+')'} -$B.$SyntaxError(module,message,src,$pos,line_num,root)}else{throw $B.$IndentationError(module,msg,src,$pos,line_num,root)}} -function SyntaxWarning(C,msg){var node=$get_node(C),module=$get_module(C),src=module.src,lines=src.split("\n"),message=`Module ${module.module}line ${node.line_num}:${msg}\n`+ -' '+lines[node.line_num-1] -$B.$getattr($B.stderr,"write")(message)} -function check_assignment(C){var ctx=C,forbidden=['assert','del','import','raise','return'] -while(ctx){if(forbidden.indexOf(ctx.type)>-1){$_SyntaxError(C,'invalid syntax - assign')}else if(ctx.type=="expr" && -ctx.tree[0].type=="op"){if($B.op2method.comparisons[ctx.tree[0].op]!==undefined){$_SyntaxError(C,["cannot assign to comparison"])}else{$_SyntaxError(C,["cannot assign to operator"])}} -ctx=ctx.parent}} -var $Node=$B.parser.$Node=function(type){this.type=type -this.children=[]} -$Node.prototype.add=function(child){ -this.children[this.children.length]=child -child.parent=this -child.module=this.module} -$Node.prototype.insert=function(pos,child){ -this.children.splice(pos,0,child) -child.parent=this -child.module=this.module} -$Node.prototype.toString=function(){return ""} -$Node.prototype.show=function(indent){ -var res='' -if(this.type==='module'){this.children.forEach(function(child){res+=child.show(indent)}) -return res} -indent=indent ||0 -res+=' '.repeat(indent) -res+=this.C -if(this.children.length > 0){res+='{'} -res+='\n' -this.children.forEach(function(child){res+='['+i+'] '+child.show(indent+4)}) -if(this.children.length > 0){res+=' '.repeat(indent) -res+='}\n'} -return res} -$Node.prototype.to_js=function(indent){ -if(this.js !==undefined){return this.js} -this.res=[] -this.unbound=[] -if(this.type==='module'){this.children.forEach(function(child){this.res.push(child.to_js())},this) -this.js=this.res.join('') -return this.js} -indent=indent ||0 -var ctx_js=this.C.to_js() -if(ctx_js){ -this.res.push(' '.repeat(indent)) -this.res.push(ctx_js) -if(this.children.length > 0){this.res.push('{')} -this.res.push('\n') -this.children.forEach(function(child){this.res.push(child.to_js(indent+4))},this) -if(this.children.length > 0){this.res.push(' '.repeat(indent)) -this.res.push('}\n')}} -this.js=this.res.join('') -return this.js} -$Node.prototype.transform=function(rank){ -if(this.has_await){this.parent.insert(rank,$NodeJS("var save_stack = $B.save_stack()")) -this.parent.insert(rank+2,$NodeJS("$B.restore_stack(save_stack, $locals)")) -this.has_await=false -return 1} -if(this.has_yield && ! this.has_yield.transformed){ -var parent=this.parent -if(this.has_yield.from){var new_node=new $Node() -var new_ctx=new $NodeCtx(new_node) -var new_expr=new $ExprCtx(new_ctx,'js',false) -var _id=new $RawJSCtx(new_expr,`var _i${this.has_yield.from_num}`) -var assign=new $AssignCtx(new_expr) -var right=new $ExprCtx(assign) -right.tree=this.has_yield.tree -parent.insert(rank,new_node) -var pnode=$get_node(this.has_yield) -var n=this.has_yield.from_num -var replace_with=`$B.$import("sys",[],{}) -_i${n}=_b_.iter(_i${n}) -var $failed${n}=false -try{var _y${n}=_b_.next(_i${n})}catch(_e){$B.set_exc(_e) -$failed${n}=true -$B.pmframe=$B.last($B.frames_stack) -_e=$B.exception(_e) -if(_e.__class__===_b_.StopIteration){var _r${n}=$B.$getattr(_e,"value")}else{throw _e}} -if(! $failed${n}){while(true){var $failed1${n}=false -try{$B.leave_frame({$locals}) -var _s${n}=yield _y${n} -$B.frames_stack.push($top_frame)}catch(_e){if(_e.__class__===_b_.GeneratorExit){var $failed2${n}=false -try{var _m${n}=$B.$geatttr(_i${n},"close")}catch(_e1){$failed2${n}=true -if(_e1.__class__ !==_b_.AttributeError){throw _e1}} -if(! $failed2${n}){$B.$call(_m${n})()} -throw _e}else if($B.is_exc(_e,[_b_.BaseException])){var _x=$B.$call($B.$getattr($locals.sys,"exc_info"))() -var $failed3${n}=false -try{var _m${n}=$B.$getattr(_i${n},"throw")}catch(err){$failed3${n}=true -if($B.is_exc(err,[_b_.AttributeError])){throw err}} -if(! $failed3${n}){try{_y${n}=$B.$call(_m${n}).apply(null,_b_.list.$factory(_x${n}))}catch(err){if($B.$is_exc(err,[_b_.StopIteration])){_r${n}=$B.$getattr(err,"value") -break} -throw err}}}} -if(! $failed1${n}){try{if(_s${n}===_b_.None){_y${n}=_b_.next(_i${n})}else{_y${n}=$B.$call($B.$getattr(_i${n},"send"))(_s${n})}}catch(err){if($B.is_exc(err,[_b_.StopIteration])){_r${n}=$B.$getattr(err,"value") -break} -throw err}}}}` -parent.insert(rank+1,$NodeJS(replace_with)) -return 3} -parent.children.splice(rank,1) -if(this.has_yield.tree[0].type==='abstract_expr'){new_node=$NodeJS("var result = _b_.None")}else{var new_node=new $Node() -var new_ctx=new $NodeCtx(new_node) -var new_expr=new $ExprCtx(new_ctx,'js',false) -var _id=new $RawJSCtx(new_expr,'var result') -var assign=new $AssignCtx(new_expr) -assign.tree[1]=this.has_yield.tree[0] -_id.parent=assign} -new_node.line_num=this.line_num -parent.insert(rank,new_node) -var try_node=new $NodeJS("try") -try_node.add($NodeJS("$B.leave_frame({$locals})")) -try_node.add(this) -parent.insert(rank+1,try_node) -this.has_yield.to_js=function(){return 'yield result'} -this.has_yield.transformed=true -var i=0 -while(i < try_node.children.length){var offset=try_node.children[i].transform(i) -if(offset===undefined){offset=1} -i+=offset} -var catch_node=$NodeJS(`catch(err${this.line_num})`) -catch_node.add($NodeJS("$B.frames_stack.push($top_frame)")) -catch_node.add($NodeJS(`throw err${this.line_num}`)) -parent.insert(rank+2,catch_node) -parent.insert(rank+3,$NodeJS("$B.frames_stack.push($top_frame)")) -return 2} -if(this.type==='module'){ -this.__doc__=$get_docstring(this) -var i=0 -while(i < this.children.length){var offset=this.children[i].transform(i) -if(offset===undefined){offset=1} -i+=offset}}else{var elt=this.C.tree[0],ctx_offset -if(elt===undefined){console.log(this)} -if(elt.transform !==undefined){ctx_offset=elt.transform(this,rank)} -var i=0 -while(i < this.children.length){var offset=this.children[i].transform(i) -if(offset===undefined){offset=1} -i+=offset} -if(ctx_offset===undefined){ctx_offset=1} -return ctx_offset}} -$Node.prototype.clone=function(){var res=new $Node(this.type) -for(var attr in this){res[attr]=this[attr]} -return res} -$Node.prototype.clone_tree=function(){var res=new $Node(this.type) -for(var attr in this){res[attr]=this[attr]} -res.children=[] -for(var i=0,len=this.children.length;i < len;i++){res.add(this.children[i].clone_tree())} -return res} -var $AbstractExprCtx=$B.parser.$AbstractExprCtx=function(C,with_commas){this.type='abstract_expr' -this.with_commas=with_commas -this.parent=C -this.tree=[] -C.tree[C.tree.length]=this} -$AbstractExprCtx.prototype.toString=function(){return '(abstract_expr '+this.with_commas+') '+this.tree} -$AbstractExprCtx.prototype.transition=function(token,value){var C=this -var packed=C.packed,is_await=C.is_await,assign=C.assign -if(! assign){switch(token){case 'id': -case 'imaginary': -case 'int': -case 'float': -case 'str': -case 'bytes': -case '[': -case '(': -case '{': -case '.': -case 'not': -case 'lambda': -case 'yield': -C.parent.tree.pop() -var commas=C.with_commas -C=C.parent -C.packed=packed -C.is_await=is_await -if(assign){console.log("set assign to parent",C) -C.assign=assign}}} -switch(token){case 'await': -return new $AwaitCtx(C) -case 'id': -return new $IdCtx(new $ExprCtx(C,'id',commas),value) -case 'str': -return new $StringCtx(new $ExprCtx(C,'str',commas),value) -case 'bytes': -return new $StringCtx(new $ExprCtx(C,'bytes',commas),value) -case 'int': -return new $NumberCtx('int',new $ExprCtx(C,'int',commas),value) -case 'float': -return new $NumberCtx('float',new $ExprCtx(C,'float',commas),value) -case 'imaginary': -return new $NumberCtx('imaginary',new $ExprCtx(C,'imaginary',commas),value) -case '(': -return new $ListOrTupleCtx( -new $ExprCtx(C,'tuple',commas),'tuple') -case '[': -return new $ListOrTupleCtx( -new $ExprCtx(C,'list',commas),'list') -case '{': -return new $DictOrSetCtx( -new $ExprCtx(C,'dict_or_set',commas)) -case '.': -return new $EllipsisCtx( -new $ExprCtx(C,'ellipsis',commas)) -case 'not': -if(C.type=='op' && C.op=='is'){ -C.op='is_not' -return C} -return new $NotCtx(new $ExprCtx(C,'not',commas)) -case 'lambda': -return new $LambdaCtx(new $ExprCtx(C,'lambda',commas)) -case 'op': -var tg=value -switch(tg){case '*': -C.parent.tree.pop() -var commas=C.with_commas -C=C.parent -return new $PackedCtx( -new $ExprCtx(C,'expr',commas)) -case '-': -case '~': -case '+': -C.parent.tree.pop() -var left=new $UnaryCtx(C.parent,tg) -if(tg=='-'){var op_expr=new $OpCtx(left,'unary_neg')}else if(tg=='+'){var op_expr=new $OpCtx(left,'unary_pos')}else{var op_expr=new $OpCtx(left,'unary_inv')} -return new $AbstractExprCtx(op_expr,false) -case 'not': -C.parent.tree.pop() -var commas=C.with_commas -C=C.parent -return new $NotCtx( -new $ExprCtx(C,'not',commas))} -$_SyntaxError(C,'token '+token+' after '+ -C) -case '=': -$_SyntaxError(C,'token '+token+' after '+ -C) -case 'yield': -return new $AbstractExprCtx(new $YieldCtx(C),true) -case ':': -if(C.parent.type=="sub" || -(C.parent.type=="list_or_tuple" && -C.parent.parent.type=="sub")){return new $AbstractExprCtx(new $SliceCtx(C.parent),false)} -return $transition(C.parent,token,value) -case ')': -case ',': -switch(C.parent.type){case 'slice': -case 'list_or_tuple': -case 'call_arg': -case 'op': -case 'yield': -break -case 'annotation': -$_SyntaxError(C,"empty annotation") -default: -$_SyntaxError(C,token)}} -return $transition(C.parent,token,value)} -$AbstractExprCtx.prototype.to_js=function(){this.js_processed=true -if(this.type==='list')return '['+$to_js(this.tree)+']' -return $to_js(this.tree)} -var $AliasCtx=$B.parser.$AliasCtx=function(C){ -this.type='ctx_manager_alias' -this.parent=C -this.tree=[] -C.tree[C.tree.length-1].alias=this} -$AliasCtx.prototype.transition=function(token,value){var C=this -switch(token){case ',': -case ':': -C.parent.set_alias(C.tree[0].tree[0]) -return $transition(C.parent,token,value)} -$_SyntaxError(C,'token '+token+' after '+C)} -var $AnnotationCtx=$B.parser.$AnnotationCtx=function(C){ -this.type='annotation' -this.parent=C -this.tree=[] -C.annotation=this -var scope=$get_scope(C) -if(scope.binding.__annotations__===undefined){ -scope.binding.__annotations__=true -C.create_annotations=true} -if(scope.ntype=="def" && C.tree && C.tree.length > 0 && -C.tree[0].type=="id"){var name=C.tree[0].value -if(scope.globals && scope.globals.has(name)>-1){$_SyntaxError(C,["annotated name '"+name+ -"' can't be global"])} -scope.annotations=scope.annotations ||new Set() -scope.annotations.add(name) -if(! C.$in_parens){scope.binding=scope.binding ||{} -scope.binding[name]=true}}} -$AnnotationCtx.prototype.toString=function(){return '(annotation) '+this.tree} -$AnnotationCtx.prototype.transition=function(token,value){var C=this -if(token=="eol" && C.tree.length==1 && -C.tree[0].tree.length==0){$_SyntaxError(C,"empty annotation")}else if(token==':' && C.parent.type !="def"){$_SyntaxError(C,"more than one annotation")}else if(token=="augm_assign"){$_SyntaxError(C,"augmented assign as annotation")}else if(token=="op"){$_SyntaxError(C,"operator as annotation")} -return $transition(C.parent,token)} -$AnnotationCtx.prototype.to_js=function(){return $to_js(this.tree)} -var $AssertCtx=$B.parser.$AssertCtx=function(C){ -this.type='assert' -this.parent=C -this.tree=[] -C.tree[C.tree.length]=this} -$AssertCtx.prototype.toString=function(){return '(assert) '+this.tree} -$AssertCtx.prototype.transition=function(token,value){var C=this -if(token=='eol'){return $transition(C.parent,token)} -$_SyntaxError(C,token)} -$AssertCtx.prototype.transform=function(node,rank){if(this.tree[0].type=='list_or_tuple'){ -var condition=this.tree[0].tree[0] -var message=this.tree[0].tree[1]}else{var condition=this.tree[0] -var message=null} -if(this.tree[0].type=="expr" && this.tree[0].name=="tuple" && -this.tree[0].tree[0].tree.length > 1){SyntaxWarning(this,"assertion is always true, perhaps "+ -"remove parentheses?")} -var new_ctx=new $ConditionCtx(node.C,'if') -var not_ctx=new $NotCtx(new_ctx) -not_ctx.tree=[condition] -node.C=new_ctx -var new_node=new $Node() -var js='throw _b_.AssertionError.$factory()' -if(message !==null){js='throw _b_.AssertionError.$factory(_b_.str.$factory('+ -message.to_js()+'))'} -new $NodeJSCtx(new_node,js) -node.add(new_node)} -var $AssignCtx=$B.parser.$AssignCtx=function(C,expression){ -check_assignment(C) -if(C.type=="expr" && C.tree[0].type=="lambda"){$_SyntaxError(C,["cannot assign to lambda"])} -this.type='assign' -if(expression=='expression'){this.expression=true -console.log("parent of assign expr",C.parent)} -C.parent.tree.pop() -C.parent.tree[C.parent.tree.length]=this -this.parent=C.parent -this.tree=[C] -var scope=$get_scope(this) -if(C.type=='expr' && C.tree[0].type=='call'){$_SyntaxError(C,["cannot assign to function call "])}else if(C.type=='list_or_tuple' || -(C.type=='expr' && C.tree[0].type=='list_or_tuple')){if(C.type=='expr'){C=C.tree[0]} -C.bind_ids(scope)}else if(C.type=='assign'){C.tree.forEach(function(elt){var assigned=elt.tree[0] -if(assigned.type=='id'){$bind(assigned.value,scope,this)}},this)}else{var assigned=C.tree[0] -if(assigned && assigned.type=='id'){if(noassign[assigned.value]===true){$_SyntaxError(C,["cannot assign to keyword"])} -assigned.bound=true -if(!scope.globals ||!scope.globals.has(assigned.value)){ -var node=$get_node(this) -node.bound_before=Object.keys(scope.binding) -$bind(assigned.value,scope,this)}else{ -var module=$get_module(C) -assigned.global_module=module.module -$bind(assigned.value,module,this)}}else if(["str","int","float","complex"].indexOf(assigned.type)>-1){$_SyntaxError(C,["cannot assign to literal"])}else if(assigned.type=="unary"){$_SyntaxError(C,["cannot assign to operator"])}}} -$AssignCtx.prototype.guess_type=function(){return} -$AssignCtx.prototype.toString=function(){return '(assign) '+this.tree[0]+'='+this.tree[1]} -$AssignCtx.prototype.transition=function(token,value){var C=this -if(token=='eol'){if(C.tree[1].type=='abstract_expr'){$_SyntaxError(C,'token '+token+' after '+ -C)} -C.guess_type() -return $transition(C.parent,'eol')} -$_SyntaxError(C,'token '+token+' after '+C)} -$AssignCtx.prototype.transform=function(node,rank){ -var scope=$get_scope(this) -var left=this.tree[0],right=this.tree[1],assigned=[] -while(left.type=='assign'){assigned.push(left.tree[1]) -left=left.tree[0]} -if(assigned.length > 0){assigned.push(left) -var ctx=node.C -ctx.tree=[] -var nleft=new $RawJSCtx(ctx,'var $temp'+$loop_num) -nleft.tree=ctx.tree -var nassign=new $AssignCtx(nleft) -nassign.tree[1]=right -assigned.forEach(function(elt){if(elt.type=="expr" && elt.tree[0].type=="list_or_tuple" && -elt.tree[0].real=="tuple" && -elt.tree[0].tree.length==1){ -elt=elt.tree[0].tree[0]} -var new_node=new $Node(),node_ctx=new $NodeCtx(new_node) -new_node.locals=node.locals -new_node.line_num=node.line_num -node.parent.insert(rank+1,new_node) -elt.parent=node_ctx -var assign=new $AssignCtx(elt) -new $RawJSCtx(assign,'$temp'+$loop_num)}) -$loop_num++ -this.tree[0]=left -return} -var left_items=null -switch(left.type){case 'expr': -if(left.tree.length > 1){left_items=left.tree}else if(left.tree[0].type=='list_or_tuple' || -left.tree[0].type=='target_list'){left_items=left.tree[0].tree}else if(left.tree[0].type=='id'){ -var name=left.tree[0].value -if(scope.globals && scope.globals.has(name)){}else{left.tree[0].bound=true}} -break -case 'target_list': -case 'list_or_tuple': -left_items=left.tree} -var right=this.tree[1] -if(left_items===null){if(left.tree[0].bound){if(right.type=="expr" && right.name=="int"){node.bindings=node.bindings ||{} -node.bindings[left.tree[0].value]="int"}} -return} -var right_items=null -if(right.type=='list' ||right.type=='tuple'|| -(right.type=='expr' && right.tree.length > 1)){right_items=right.tree} -if(right_items !==null){ -if(right_items.length > left_items.length){throw Error('ValueError : too many values to unpack (expected '+ -left_items.length+')')}else if(right_items.length < left_items.length){throw Error('ValueError : need more than '+ -right_items.length+' to unpack')} -var new_nodes=[],pos=0 -var new_node=new $Node() -new_node.line_num=node.line_num -new $NodeJSCtx(new_node,'void(0)') -new_nodes[pos++]=new_node -var $var='$temp'+$loop_num -var new_node=new $Node() -new_node.line_num=node.line_num -new $NodeJSCtx(new_node,'var '+$var+' = [], $pos = 0') -new_nodes[pos++]=new_node -right_items.forEach(function(right_item){var js=$var+'[$pos++] = '+right_item.to_js() -var new_node=new $Node() -new_node.line_num=node.line_num -new $NodeJSCtx(new_node,js) -new_nodes[pos++]=new_node}) -var this_node=$get_node(this) -left_items.forEach(function(left_item){var new_node=new $Node() -new_node.id=this_node.module -new_node.locals=this_node.locals -new_node.line_num=node.line_num -var C=new $NodeCtx(new_node) -left_item.parent=C -var assign=new $AssignCtx(left_item,false) -assign.tree[1]=new $JSCode($var+'['+i+']') -new_nodes[pos++]=new_node},this) -node.parent.children.splice(rank,1) -for(var i=new_nodes.length-1;i >=0;i--){node.parent.insert(rank,new_nodes[i])} -$loop_num++}else{ -node.parent.children.splice(rank,1) -var rname=create_temp_name('$right') -var rlname=create_temp_name('$rlist'); -var new_node=$NodeJS('var '+rname+' = '+ -'$B.$getattr($B.$iter('+right.to_js()+ -'), "__next__");') -new_node.line_num=node.line_num -node.parent.insert(rank++,new_node) -node.parent.insert(rank++,$NodeJS('var '+rlname+'=[], $pos=0;'+ -'while(1){'+ -'try{'+ -rlname+'[$pos++] = '+rname+'()'+ -'}catch(err){'+ -'break'+ -'}'+ -'}') -) -var packed=null -var min_length=left_items.length -for(var i=0;i < left_items.length;i++){var expr=left_items[i] -if(expr.type=='packed' || -(expr.type=='expr' && expr.tree[0].type=='packed')){packed=i -min_length-- -break}} -node.parent.insert(rank++,$NodeJS('if('+rlname+'.length<'+min_length+'){'+ -'throw _b_.ValueError.$factory('+ -'"need more than " +'+rlname+ -'.length + " value" + ('+rlname+ -'.length > 1 ?'+' "s" : "") + " to unpack")}' -) -) -if(packed==null){node.parent.insert(rank++,$NodeJS('if('+rlname+'.length>'+min_length+'){'+ -'throw _b_.ValueError.$factory('+ -'"too many values to unpack '+ -'(expected '+left_items.length+')"'+ -')'+ -'}') -)} -left_items.forEach(function(left_item,i){var new_node=new $Node() -new_node.id=scope.id -new_node.line_num=node.line_num -node.parent.insert(rank++,new_node) -var C=new $NodeCtx(new_node) -left_item.parent=C -var assign=new $AssignCtx(left_item,false) -var js=rlname -if(packed==null ||i < packed){js+='['+i+']'}else if(i==packed){js+='.slice('+i+','+rlname+'.length-'+ -(left_items.length-i-1)+')'}else{js+='['+rlname+'.length-'+(left_items.length-i)+']'} -assign.tree[1]=new $JSCode(js)}) -$loop_num++}} -$AssignCtx.prototype.to_js=function(){this.js_processed=true -if(this.parent.type=='call'){ -return '{$nat:"kw",name:'+this.tree[0].to_js()+ -',value:'+this.tree[1].to_js()+'}'} -var left=this.tree[0] -while(left.type=='expr'){left=left.tree[0]} -var right=this.tree[1] -if(left.type=='attribute' ||left.type=='sub'){ -var right_js=right.to_js() -var res='',rvar='',$var='$temp'+$loop_num -if(right.type=='expr' && right.tree[0]!==undefined && -right.tree[0].type=='call' && -('eval'==right.tree[0].func.value || -'exec'==right.tree[0].func.value)){res+='var '+$var+' = '+right_js+';\n' -rvar=$var}else if(right.type=='expr' && right.tree[0]!==undefined && -right.tree[0].type=='sub'){res+='var '+$var+' = '+right_js+';\n' -rvar=$var}else{rvar=right_js} -if(left.type=='attribute'){ -$loop_num++ -left.func='setattr' -var left_to_js=left.to_js() -left.func='getattr' -if(left.assign_self){return res+left_to_js[0]+rvar+left_to_js[1]+rvar+')'} -res+=left_to_js -res=res.substr(0,res.length-1) -return res+','+rvar+');_b_.None;'} -if(left.type=='sub'){ -var seq=left.value.to_js(),temp='$temp'+$loop_num,type -if(left.value.type=='id'){type=$get_node(this).locals[left.value.value]} -$loop_num++ -var res='var '+temp+' = '+seq+'\n' -if(type !=='list'){res+='if(Array.isArray('+temp+') && !'+ -temp+'.__class__){'} -if(left.tree.length==1){res+='$B.set_list_key('+temp+','+ -(left.tree[0].to_js()+'' ||'null')+','+ -right.to_js()+')'}else if(left.tree.length==2){res+='$B.set_list_slice('+temp+','+ -(left.tree[0].to_js()+'' ||'null')+','+ -(left.tree[1].to_js()+'' ||'null')+','+ -right.to_js()+')'}else if(left.tree.length==3){res+='$B.set_list_slice_step('+temp+','+ -(left.tree[0].to_js()+'' ||'null')+','+ -(left.tree[1].to_js()+'' ||'null')+','+ -(left.tree[2].to_js()+'' ||'null')+','+ -right.to_js()+')'} -if(type=='list'){return res} -res+='\n}else{' -if(left.tree.length==1){res+='$B.$setitem('+left.value.to_js()+ -','+left.tree[0].to_js()+','+right_js+')};_b_.None;'}else{left.func='setitem' -res+=left.to_js() -res=res.substr(0,res.length-1) -left.func='getitem' -res+=','+right_js+')};_b_.None;'} -return res}} -return left.to_js()+' = '+right.to_js()} -var $AsyncCtx=$B.parser.$AsyncCtx=function(C){ -this.type='async' -this.parent=C -C.async=true} -$AsyncCtx.prototype.toString=function(){return '(async)'} -$AsyncCtx.prototype.transition=function(token,value){var C=this -if(token=="def"){return $transition(C.parent,token,value)}else if(token=="for" ||token=="with"){var ntype=$get_scope(C).ntype -if(ntype !=="def" && ntype !="generator"){$_SyntaxError(C,["'async "+token+ -"' outside async function"])} -var ctx=$transition(C.parent,token,value) -ctx.parent.async=true -return ctx} -$_SyntaxError(C,'token '+token+' after '+C)} -var $AttrCtx=$B.parser.$AttrCtx=function(C){ -this.type='attribute' -this.value=C.tree[0] -this.parent=C -C.tree.pop() -C.tree[C.tree.length]=this -this.tree=[] -this.func='getattr' } -$AttrCtx.prototype.toString=function(){return '(attr) '+this.value+'.'+this.name} -$AttrCtx.prototype.transition=function(token,value){var C=this -if(token==='id'){var name=value -if(noassign[name]===true){$_SyntaxError(C,["cannot assign to "+name])} -name=$mangle(name,C) -C.name=name -return C.parent} -$_SyntaxError(C,token)} -$AttrCtx.prototype.to_js=function(){this.js_processed=true -var js=this.value.to_js() -if(this.func=="setattr" && this.value.type=="id"){var scope=$get_scope(this),parent=scope.parent -if(scope.ntype=="def"){if(parent.ntype=="class"){var params=scope.C.tree[0].positional_list -if(this.value.value==params[0]&& parent.C && -parent.C.tree[0].args===undefined){ -this.assign_self=true -return[js+".__class__ && "+js+".__dict__ && !"+ -js+".__class__.$has_setattr && ! "+js+ -".$is_class ? _b_.dict.$setitem("+js+ -".__dict__, '"+this.name+ -"', ",") : $B.$setattr("+js+ -', "'+this.name+'", ']}}}} -if(this.func=='setattr'){ -return '$B.$setattr('+js+',"'+this.name+'")'}else{return '$B.$getattr('+js+',"'+this.name+'")'}} -var $AugmentedAssignCtx=$B.parser.$AugmentedAssignCtx=function(C,op){ -check_assignment(C) -this.type='augm_assign' -this.C=C -this.parent=C.parent -C.parent.tree.pop() -C.parent.tree[C.parent.tree.length]=this -this.op=op -this.tree=[C] -var scope=this.scope=$get_scope(this) -if(C.type=='expr'){var assigned=C.tree[0] -if(assigned.type=='id'){var name=assigned.value -if(noassign[name]===true){$_SyntaxError(C,["cannot assign to keyword"])}else if((scope.ntype=='def' ||scope.ntype=='generator')&& -(scope.binding[name]===undefined)){if(scope.globals===undefined || -! scope.globals.has(name)){ -assigned.unbound=true}}}else if(['str','int','float','complex'].indexOf(assigned.type)>-1){$_SyntaxError(C,["cannot assign to literal"])}} -$get_node(this).bound_before=Object.keys(scope.binding) -this.module=scope.module} -$AugmentedAssignCtx.prototype.toString=function(){return '(augm assign) '+this.tree} -$AugmentedAssignCtx.prototype.transition=function(token,value){var C=this -if(token=='eol'){if(C.tree[1].type=='abstract_expr'){$_SyntaxError(C,'token '+token+' after '+ -C)} -return $transition(C.parent,'eol')} -$_SyntaxError(C,'token '+token+' after '+C)} -$AugmentedAssignCtx.prototype.transform=function(node,rank){var C=this.C,op=this.op,func='__'+$operators[op]+'__',offset=0,parent=node.parent,line_num=node.line_num,lnum_set=false -parent.children.splice(rank,1) -var left_is_id=(this.tree[0].type=='expr' && -this.tree[0].tree[0].type=='id') -if(left_is_id){var left_bound_to_int= -this.tree[0].tree[0].bindingType(this.scope)=="int" -this.tree[0].tree[0].augm_assign=true -if($B.debug > 0){var check_node=$NodeJS('if('+this.tree[0].to_js()+ -' === undefined){throw _b_.NameError.$factory("name \'' + - this.tree[0].tree[0].value + '\' is not defined")}') -node.parent.insert(rank,check_node) -offset++} -var left_id=this.tree[0].tree[0].value,was_bound=this.scope.binding[left_id]!==undefined,left_id_unbound=this.tree[0].tree[0].unbound} -var right_is_int=(this.tree[1].type=='expr' && -this.tree[1].tree[0].type=='int') -if(right_is_int){var value=this.tree[1].tree[0].value,to_int=parseInt(value[1],value[0]) -right_is_int=(to_int > $B.min_int)&&(to_int < $B.max_int)} -var right=right_is_int ? this.tree[1].tree[0].to_js():'$temp' -if(!right_is_int){ -var new_node=new $Node() -new_node.line_num=line_num -lnum_set=true -new $NodeJSCtx(new_node,'var $temp,$left;') -parent.insert(rank,new_node) -offset++ -var new_node=new $Node() -new_node.id=this.scope.id -var new_ctx=new $NodeCtx(new_node) -var new_expr=new $ExprCtx(new_ctx,'js',false) -var _id=new $RawJSCtx(new_expr,'$temp') -var assign=new $AssignCtx(new_expr) -assign.tree[1]=this.tree[1] -_id.parent=assign -parent.insert(rank+offset,new_node) -offset++} -var prefix='',in_class=false -switch(op){case '+=': -case '-=': -case '*=': -case '/=': -if(left_is_id){var scope=this.scope,global_ns='$local_'+scope.module.replace(/\./g,'_') -switch(scope.ntype){case 'module': -prefix=global_ns -break -case 'def': -case 'generator': -if(scope.globals && -scope.globals.has(C.tree[0].value)){prefix=global_ns}else{prefix='$locals'} -break -case 'class': -var new_node=new $Node() -if(!lnum_set){new_node.line_num=line_num -lnum_set=true} -new $NodeJSCtx(new_node,'var $left = '+ -C.to_js()) -parent.insert(rank+offset,new_node) -in_class=true -offset++}}} -var left=C.tree[0].to_js() -if(C.tree[0].type=="id"){var binding_scope=C.tree[0].firstBindingScopeId(),left_value=C.tree[0].value -if(binding_scope){left="$locals_"+binding_scope.replace(/\./g,'_')+ -'["'+left_value+'"]'}else{left='$locals["'+left_value+'"]'}} -if(left_bound_to_int && right_is_int){parent.insert(rank+offset,$NodeJS(left+" "+op+" "+right)) -return offset++} -prefix=prefix && !C.tree[0].unknown_binding && !left_id_unbound -var op1=op.charAt(0) -if(prefix){var left1=in_class ? '$left' :left -var new_node=new $Node() -if(!lnum_set){new_node.line_num=line_num;lnum_set=true} -js=right_is_int ? 'if(' :'if(typeof $temp.valueOf() == "number" && ' -js+=left1+'.constructor === Number' -js+=' && Number.isSafeInteger('+left+op1+right+')){'+ -(right_is_int ? '(' :'(typeof $temp == "number" && ')+ -'typeof '+left1+' == "number") ? ' -js+=left+op+right -js+=' : '+left+' = new Number('+left+op1+ -(right_is_int ? right :right+'.valueOf()')+')}' -new $NodeJSCtx(new_node,js) -parent.insert(rank+offset,new_node) -offset++} -var aaops={'+=':'add','-=':'sub','*=':'mul'} -if(C.tree[0].type=='sub' && -('+='==op ||'-='==op ||'*='==op)&& -C.tree[0].tree.length==1){var js1='$B.augm_item_'+aaops[op]+'('+ -C.tree[0].value.to_js()+','+ -C.tree[0].tree[0].to_js()+','+right+');_b_.None;' -var new_node=new $Node() -if(!lnum_set){new_node.line_num=line_num;lnum_set=true} -new $NodeJSCtx(new_node,js1) -parent.insert(rank+offset,new_node) -offset++ -return} -var new_node=new $Node() -if(!lnum_set){new_node.line_num=line_num;lnum_set=true} -var js='' -if(prefix){js+='else '} -js+='if(! _b_.hasattr('+C.to_js()+',"'+func+'"))' -new $NodeJSCtx(new_node,js) -parent.insert(rank+offset,new_node) -offset++ -var aa1=new $Node() -aa1.id=this.scope.id -aa1.line_num=node.line_num -new_node.add(aa1) -var ctx1=new $NodeCtx(aa1) -var expr1=new $ExprCtx(ctx1,'clone',false) -if(left_id_unbound){new $RawJSCtx(expr1,left)}else{expr1.tree=C.tree -expr1.tree.forEach(function(elt){elt.parent=expr1})} -var assign1=new $AssignCtx(expr1) -var new_op=new $OpCtx(expr1,op.substr(0,op.length-1)) -new_op.parent=assign1 -new $RawJSCtx(new_op,right) -assign1.tree.push(new_op) -expr1.parent.tree.pop() -expr1.parent.tree.push(assign1) -var else_node=$NodeJS("else") -parent.insert(rank+offset,else_node) -var aa2=new $Node() -aa2.line_num=node.line_num -else_node.add(aa2) -var ctx2=new $NodeCtx(aa2) -var expr2=new $ExprCtx(ctx2,'clone',false) -if(left_id_unbound){var js=left -if(! binding_scope){js='$B.$local_search("'+left_value+'");'+left} -new $RawJSCtx(expr2,js)}else{expr2.tree=C.tree -expr2.tree.forEach(function(elt){elt.parent=expr2})} -var assign2=new $AssignCtx(expr2) -assign2.tree.push($NodeJS('$B.$getattr('+C.to_js()+',"'+ -func+'")('+right+')')) -expr2.parent.tree.pop() -expr2.parent.tree.push(assign2) -if(left_is_id && !was_bound && !this.scope.blurred){this.scope.binding[left_id]=undefined} -return offset} -$AugmentedAssignCtx.prototype.to_js=function(){return ''} -var $AwaitCtx=$B.parser.$AwaitCtx=function(C){ -this.type='await' -this.parent=C -this.tree=[] -C.tree.push(this) -var p=C -while(p){if(p.type=="list_or_tuple"){p.is_await=true} -p=p.parent}} -$AwaitCtx.prototype.transition=function(token,value){var C=this -C.parent.is_await=true -return $transition(C.parent,token,value)} -$AwaitCtx.prototype.to_js=function(){return 'var save_stack = $B.save_stack();'+ -'await ($B.promise('+$to_js(this.tree)+'));'+ -'$B.restore_stack(save_stack, $locals); '} -var $BodyCtx=$B.parser.$BodyCtx=function(C){ -var ctx_node=C.parent -while(ctx_node.type !=='node'){ctx_node=ctx_node.parent} -var tree_node=ctx_node.node -var body_node=new $Node() -body_node.is_body_node=true -body_node.line_num=tree_node.line_num -tree_node.insert(0,body_node) -return new $NodeCtx(body_node)} -var set_loop_context=$B.parser.set_loop_context=function(C,kw){ -var ctx_node=C -while(ctx_node.type !=='node'){ctx_node=ctx_node.parent} -var tree_node=ctx_node.node -var loop_node=tree_node.parent -var break_flag=false -while(1){if(loop_node.type=='module'){ -$_SyntaxError(C,kw+' outside of a loop')}else{var ctx=loop_node.C.tree[0] -if(ctx.type=='condition' && ctx.token=='while'){this.loop_ctx=ctx -ctx['has_'+kw]=true -break} -switch(ctx.type){case 'for': -this.loop_ctx=ctx -ctx['has_'+kw]=true -break_flag=true -break -case 'def': -case 'generator': -case 'class': -$_SyntaxError(C,kw+' outside of a loop') -default: -loop_node=loop_node.parent} -if(break_flag){break}}}} -var $BreakCtx=$B.parser.$BreakCtx=function(C){ -this.type='break' -this.parent=C -C.tree[C.tree.length]=this -set_loop_context.apply(this,[C,'break'])} -$BreakCtx.prototype.toString=function(){return 'break '} -$BreakCtx.prototype.transition=function(token,value){var C=this -if(token=='eol'){return $transition(C.parent,'eol')} -$_SyntaxError(C,token)} -$BreakCtx.prototype.to_js=function(){this.js_processed=true -var scope=$get_scope(this) -var res=';$locals_'+scope.id.replace(/\./g,'_')+ -'["$no_break'+this.loop_ctx.loop_num+'"] = false' -if(this.loop_ctx.type !='asyncfor'){res+=';break'}else{res+=';throw _b_.StopIteration.$factory('+ -this.loop_ctx.loop_num+')'} -return res} -var $CallArgCtx=$B.parser.$CallArgCtx=function(C){ -this.type='call_arg' -this.parent=C -this.start=$pos -this.tree=[] -C.tree.push(this) -this.expect='id'} -$CallArgCtx.prototype.toString=function(){return 'call_arg '+this.tree} -$CallArgCtx.prototype.transition=function(token,value){var C=this -switch(token){case 'await': -case 'id': -case 'imaginary': -case 'int': -case 'float': -case 'str': -case 'bytes': -case '[': -case '(': -case '{': -case '.': -case 'not': -case 'lambda': -if(C.expect=='id'){C.expect=',' -var expr=new $AbstractExprCtx(C,false) -return $transition(expr,token,value)} -break -case '=': -if(C.expect==','){return new $ExprCtx(new $KwArgCtx(C),'kw_value',false)} -break -case 'for': -if(this.parent.tree.length > 1){$_SyntaxError(C,"non-parenthesized generator expression")} -var lst=new $ListOrTupleCtx(C,'gen_expr') -lst.vars=C.vars -lst.locals=C.locals -lst.intervals=[C.start] -C.tree.pop() -lst.expression=C.tree -C.tree=[lst] -lst.tree=[] -var comp=new $ComprehensionCtx(lst) -return new $TargetListCtx(new $CompForCtx(comp)) -case 'op': -if(C.expect=='id'){var op=value -C.expect=',' -switch(op){case '+': -case '-': -case '~': -return $transition(new $AbstractExprCtx(C,false),token,op) -case '*': -return new $StarArgCtx(C) -case '**': -return new $DoubleStarArgCtx(C)}} -$_SyntaxError(C,'token '+token+' after '+C) -case ')': -if(C.parent.kwargs && -$B.last(C.parent.tree).tree[0]&& -['kwarg','star_arg','double_star_arg']. -indexOf($B.last(C.parent.tree).tree[0].type)==-1){$_SyntaxError(C,['non-keyword argument after keyword argument'])} -if(C.tree.length > 0){var son=C.tree[C.tree.length-1] -if(son.type=='list_or_tuple' && -son.real=='gen_expr'){son.intervals.push($pos)}} -return $transition(C.parent,token) -case ':': -if(C.expect==',' && -C.parent.parent.type=='lambda'){return $transition(C.parent.parent,token)} -break -case ',': -if(C.expect==','){if(C.parent.kwargs && -['kwarg','star_arg','double_star_arg']. -indexOf($B.last(C.parent.tree).tree[0].type)==-1){$_SyntaxError(C,['non-keyword argument after keyword argument'])} -return $transition(C.parent,token,value)}} -console.log('token ',token,' after ' ,C) -$_SyntaxError(C,'token '+token+' after '+C)} -$CallArgCtx.prototype.to_js=function(){this.js_processed=true -return $to_js(this.tree)} -var $CallCtx=$B.parser.$CallCtx=function(C){ -this.type='call' -this.func=C.tree[0] -if(this.func !==undefined){ -this.func.parent=this} -this.parent=C -if(C.type !='class'){C.tree.pop() -C.tree[C.tree.length]=this}else{ -C.args=this} -this.expect='id' -this.tree=[] -this.start=$pos -if(this.func && this.func.type=="attribute" && this.func.name=="wait" -&& this.func.value.type=="id" && this.func.value.value=="time"){console.log('call',this.func) -$get_node(this).blocking={'type':'wait','call':this}} -if(this.func && this.func.value=='input'){$get_node(this).blocking={'type':'input'}}} -$CallCtx.prototype.toString=function(){return '(call) '+this.func+'('+this.tree+')'} -$CallCtx.prototype.transition=function(token,value){var C=this -switch(token){case ',': -if(C.expect=='id'){$_SyntaxError(C,token)} -C.expect='id' -return C -case 'await': -case 'id': -case 'imaginary': -case 'int': -case 'float': -case 'str': -case 'bytes': -case '[': -case '(': -case '{': -case '.': -case 'not': -case 'lambda': -C.expect=',' -return $transition(new $CallArgCtx(C),token,value) -case ')': -C.end=$pos -return C.parent -case 'op': -C.expect=',' -switch(value){case '-': -case '~': -case '+': -C.expect=',' -return $transition(new $CallArgCtx(C),token,value) -case '*': -C.has_star=true -return new $StarArgCtx(C) -case '**': -C.has_dstar=true -return new $DoubleStarArgCtx(C)} -$_SyntaxError(C,token) -case 'yield': -$_SyntaxError(C,token)} -return $transition(C.parent,token,value)} -$CallCtx.prototype.to_js=function(){this.js_processed=true -if(this.tree.length > 0){if(this.tree[this.tree.length-1].tree.length==0){ -this.tree.pop()}} -var func_js=this.func.to_js() -if(this.func !==undefined){switch(this.func.value){case 'classmethod': -return '_b_.classmethod.$factory('+$to_js(this.tree)+')' -case '$$super': -if(this.tree.length==0){ -var scope=$get_scope(this) -if(scope.ntype=='def' ||scope.ntype=='generator'){var def_scope=$get_scope(scope.C.tree[0]) -if(def_scope.ntype=='class'){new $IdCtx(this,def_scope.C.tree[0].name)}}} -if(this.tree.length==1){ -var scope=$get_scope(this) -if(scope.ntype=='def' ||scope.ntype=='generator'){var args=scope.C.tree[0].args -if(args.length > 0){var missing_id=new $IdCtx(this,args[0]) -missing_id.to_js=function(){return "[$locals['"+args[0]+"']]"}}}} -break -default: -if(this.func.type=='unary'){ -var res='$B.$getattr('+$to_js(this.tree) -switch(this.func.op){case '+': -return res+',"__pos__")()' -case '-': -return res+',"__neg__")()' -case '~': -return res+',"__invert__")()'}}} -var _block=false -var positional=[],kw_args=[],star_args=false,dstar_args=[] -this.tree.forEach(function(arg){var type -switch(arg.type){case 'star_arg': -star_args=true -positional.push([arg.tree[0].tree[0].to_js(),'*']) -break -case 'double_star_arg': -dstar_args.push(arg.tree[0].tree[0].to_js()) -break -case 'id': -positional.push([arg.to_js(),'s']) -break -default: -type=arg.tree[0].type -switch(type){case 'expr': -positional.push([arg.to_js(),'s']) -break -case 'kwarg': -kw_args.push(arg.tree[0].tree[0].value+ -':'+arg.tree[0].tree[1].to_js()) -break -case 'list_or_tuple': -case 'op': -positional.push([arg.to_js(),'s']) -break -case 'star_arg': -star_args=true -positional.push([arg.tree[0].tree[0].to_js(),'*']) -break -case 'double_star_arg': -dstar_args.push(arg.tree[0].tree[0].to_js()) -break -default: -positional.push([arg.to_js(),'s']) -break} -break}}) -var args_str -if(star_args){ -var p=[] -for(var i=0,len=positional.length;i < len;i++){arg=positional[i] -if(arg[1]=='*'){ -p.push('_b_.list.$factory('+arg[0]+')')}else{var elt=[positional[i][0]] -i++ -while(i < len && positional[i][1]=='s'){elt.push(positional[i][0]) -i++} -i-- -p.push('['+elt.join(',')+']')}} -args_str=p[0] -for(var i=1;i < p.length;i++){args_str+='.concat('+p[i]+')'}}else{for(var i=0,len=positional.length;i < len;i++){positional[i]=positional[i][0]} -args_str=positional.join(', ')} -var kw_args_str='{'+kw_args.join(', ')+'}' -if(dstar_args.length){kw_args_str='{$nat:"kw",kw:['+kw_args_str+','+ -dstar_args.join(', ')+']}'}else if(kw_args_str !='{}'){kw_args_str='{$nat:"kw",kw:'+kw_args_str+'}'}else{kw_args_str=''} -if(star_args && kw_args_str){args_str+='.concat(['+kw_args_str+'])'}else{if(args_str && kw_args_str){args_str+=','+kw_args_str} -else if(!args_str){args_str=kw_args_str}} -if(star_args){ -args_str='.apply(null,'+args_str+')'}else{args_str='('+args_str+')'} -var default_res="$B.$call("+func_js+")"+args_str -if(this.tree.length >-1 && this.func.type=='id' && -this.func.is_builtin){ -var classes=["complex","bytes","bytearray","object","memoryview","int","float","str","list","tuple","dict","set","frozenset","range","slice","zip","bool","type","classmethod","staticmethod","enumerate","reversed","property","$$super","zip","map","filter"] -if($B.builtin_funcs[this.func.value]!==undefined){if(classes.indexOf(this.func.value)==-1){ -return func_js+args_str}else{ -return func_js+".$factory"+args_str}}} -return default_res}} -var $ClassCtx=$B.parser.$ClassCtx=function(C){ -this.type='class' -this.parent=C -this.tree=[] -C.tree[C.tree.length]=this -this.expect='id' -var scope=this.scope=$get_scope(this) -this.parent.node.parent_block=scope -this.parent.node.bound={} -this.parent.node.binding={__annotations__:true}} -$ClassCtx.prototype.toString=function(){return '(class) '+this.name+' '+this.tree+' args '+this.args} -$ClassCtx.prototype.transition=function(token,value){var C=this -switch(token){case 'id': -if(C.expect=='id'){C.set_name(value) -C.expect='(:' -return C} -break -case '(': -return new $CallCtx(C) -case ':': -return $BodyCtx(C)} -$_SyntaxError(C,'token '+token+' after '+C)} -$ClassCtx.prototype.set_name=function(name){var C=this.parent -this.random=$B.UUID() -this.name=name -this.id=C.node.module+'_'+name+'_'+this.random -this.binding={} -this.parent.node.id=this.id -var scope=this.scope,parent_block=scope -while(parent_block.C && -parent_block.C.tree[0].type=='class'){parent_block=parent_block.parent} -while(parent_block.C && -'def' !=parent_block.C.tree[0].type && -'generator' !=parent_block.C.tree[0].type){parent_block=parent_block.parent} -this.parent.node.parent_block=parent_block -$bind(name,scope,this) -if(scope.is_function){if(scope.C.tree[0].locals.indexOf(name)==-1){scope.C.tree[0].locals.push(name)}}} -$ClassCtx.prototype.transform=function(node,rank){ -this.doc_string=$get_docstring(node) -this.module=$get_module(this).module.replace(/\./g,'_') -var indent='\n'+' '.repeat(node.indent+12),instance_decl=new $Node(),local_ns='$locals_'+this.id.replace(/\./g,'_'),js='var '+local_ns+' = {'+ -'__annotations__: $B.empty_dict()}, '+ -indent+'$locals = '+local_ns -new $NodeJSCtx(instance_decl,js) -node.insert(0,instance_decl) -var global_scope=this.scope -while(global_scope.parent_block.id !=='__builtins__'){global_scope=global_scope.parent_block} -var global_ns='$locals_'+global_scope.id.replace(/\./g,'_') -var js=' '.repeat(node.indent+4)+ -'$locals.$name = "'+this.name+'"'+indent+ -'$locals.$line_info = "'+node.line_num+','+ -this.module+'";'+indent+ -'var $top_frame = ["'+local_ns+'", $locals,'+'"'+ -global_scope.id+'", '+global_ns+']'+ -indent+'$locals.$f_trace = $B.enter_frame($top_frame);'+ -indent+'if($locals.$f_trace !== _b_.None){'+ -'$locals.$f_trace = $B.trace_line()}' -node.insert(1,$NodeJS(js)) -node.add($NodeJS('if($locals.$f_trace !== _b_.None){'+ -'$B.trace_return(_b_.None)}')) -node.add($NodeJS('$B.leave_frame({$locals})')) -var ret_obj=new $Node() -new $NodeJSCtx(ret_obj,'return '+local_ns+';') -node.insert(node.children.length,ret_obj) -var run_func=new $Node() -new $NodeJSCtx(run_func,')();') -node.parent.insert(rank+1,run_func) -var module_name='$locals_'+ -this.module+'.__name__' -rank++ -node.parent.insert(rank+1,$NodeJS('$'+this.name+'_'+this.random+".__module__ = "+ -module_name)) -var scope=$get_scope(this) -var name_ref=';$locals_'+scope.id.replace(/\./g,'_') -name_ref+='["'+this.name+'"]' -var js=[name_ref+' = $B.$class_constructor("'+this.name],pos=1 -js[pos++]='", $'+this.name+'_'+this.random -if(this.args !==undefined){ -var arg_tree=this.args.tree,args=[],kw=[] -arg_tree.forEach(function(_tmp){if(_tmp.tree[0].type=='kwarg'){kw.push(_tmp.tree[0])} -else{args.push(_tmp.to_js())}}) -js[pos++]=', _b_.tuple.$factory(['+args.join(',')+']),[' -var _re=new RegExp('"','g'),_r=[],rpos=0 -args.forEach(function(arg){_r[rpos++]='"'+arg.replace(_re,'\\"')+'"'}) -js[pos++]=_r.join(',')+']' -_r=[] -rpos=0 -kw.forEach(function(_tmp){_r[rpos++]='["'+_tmp.tree[0].value+'",'+ -_tmp.tree[1].to_js()+']'}) -js[pos++]=',['+_r.join(',')+']'}else{ -js[pos++]=', _b_.tuple.$factory([]),[],[]'} -js[pos++]=')' -var cl_cons=new $Node() -new $NodeJSCtx(cl_cons,js.join('')) -rank++ -node.parent.insert(rank+1,cl_cons) -rank++ -var ds_node=new $Node() -js=name_ref+'.__doc__ = '+(this.doc_string ||'_b_.None')+';' -new $NodeJSCtx(ds_node,js) -node.parent.insert(rank+1,ds_node) -if(scope.ntype=='module'){var w_decl=new $Node() -new $NodeJSCtx(w_decl,'$locals["'+this.name+'"] = '+ -this.name)} -node.parent.insert(rank+2,$NodeJS("_b_.None;")) -this.transformed=true} -$ClassCtx.prototype.to_js=function(){this.js_processed=true -return 'var $'+this.name+'_'+this.random+' = (function()'} -var $CompIfCtx=$B.parser.$CompIfCtx=function(C){ -this.type='comp_if' -C.parent.intervals.push($pos) -this.parent=C -this.tree=[] -C.tree[C.tree.length]=this} -$CompIfCtx.prototype.toString=function(){return '(comp if) '+this.tree} -$CompIfCtx.prototype.transition=function(token,value){var C=this -return $transition(C.parent,token,value)} -$CompIfCtx.prototype.to_js=function(){this.js_processed=true -return $to_js(this.tree)} -var $ComprehensionCtx=$B.parser.$ComprehensionCtx=function(C){ -this.type='comprehension' -this.parent=C -this.tree=[] -C.tree[C.tree.length]=this} -$ComprehensionCtx.prototype.toString=function(){return '(comprehension) '+this.tree} -$ComprehensionCtx.prototype.transition=function(token,value){var C=this -switch(token){case 'if': -return new $AbstractExprCtx(new $CompIfCtx(C),false) -case 'for': -return new $TargetListCtx(new $CompForCtx(C))} -return $transition(C.parent,token,value)} -$ComprehensionCtx.prototype.to_js=function(){this.js_processed=true -var intervals=[] -this.tree.forEach(function(elt){intervals.push(elt.start)}) -return intervals} -var $CompForCtx=$B.parser.$CompForCtx=function(C){ -this.type='comp_for' -C.parent.intervals.push($pos) -this.parent=C -this.tree=[] -this.expect='in' -C.tree[C.tree.length]=this} -$CompForCtx.prototype.toString=function(){return '(comp for) '+this.tree} -$CompForCtx.prototype.transition=function(token,value){var C=this -if(token=='in' && C.expect=='in'){C.expect=null -return new $AbstractExprCtx(new $CompIterableCtx(C),true)} -if(C.expect===null){ -return $transition(C.parent,token,value)} -$_SyntaxError(C,'token '+token+' after '+C)} -$CompForCtx.prototype.to_js=function(){this.js_processed=true -return $to_js(this.tree)} -var $CompIterableCtx=$B.parser.$CompIterableCtx=function(C){ -this.type='comp_iterable' -this.parent=C -this.tree=[] -C.tree[C.tree.length]=this} -$CompIterableCtx.prototype.toString=function(){return '(comp iter) '+this.tree} -$CompIterableCtx.prototype.transition=function(token,value){var C=this -return $transition(C.parent,token,value)} -$CompIterableCtx.prototype.to_js=function(){this.js_processed=true -return $to_js(this.tree)} -var $ConditionCtx=$B.parser.$ConditionCtx=function(C,token){ -this.type='condition' -this.token=token -this.parent=C -this.tree=[] -this.scope=$get_scope(this) -if(token=='while'){this.loop_num=$loop_num++} -C.tree[C.tree.length]=this} -$ConditionCtx.prototype.toString=function(){return this.token+' '+this.tree} -$ConditionCtx.prototype.transition=function(token,value){var C=this -if(token==':'){if(C.tree[0].type=="abstract_expr" && -C.tree[0].tree.length==0){ -$_SyntaxError(C,'token '+token+' after '+C)} -return $BodyCtx(C)} -$_SyntaxError(C,'token '+token+' after '+C)} -$ConditionCtx.prototype.transform=function(node,rank){var scope=$get_scope(this) -if(this.token=="while"){node.parent.insert(rank,$NodeJS('$locals["$no_break'+this.loop_num+'"] = true')) -var module=$get_module(this).module -if($B.last(node.children).C.tree[0].type !="return"){var js='$locals.$line_info = "'+node.line_num+ -','+module+'";if($locals.$f_trace !== _b_.None){'+ -'$B.trace_line()};_b_.None;' -node.add($NodeJS(js))} -return 2}} -$ConditionCtx.prototype.to_js=function(){this.js_processed=true -var tok=this.token -if(tok=='elif'){tok='else if'} -var res=[tok+'($B.$bool('] -if(tok=='while'){res.push('$locals["$no_break'+this.loop_num+'"] && ')}else if(tok=='else if'){var line_info=$get_node(this).line_num+','+ -$get_scope(this).id -res.push('($B.set_line("'+line_info+'")) && ')} -if(this.tree.length==1){res.push($to_js(this.tree)+'))')}else{ -res.push(this.tree[0].to_js()+'))') -if(this.tree[1].tree.length > 0){res.push('{'+this.tree[1].to_js()+'}')}} -return res.join('')} -var $ContinueCtx=$B.parser.$ContinueCtx=function(C){ -this.type='continue' -this.parent=C -$get_node(this).is_continue=true -C.tree[C.tree.length]=this -set_loop_context.apply(this,[C,'continue'])} -$ContinueCtx.prototype.toString=function(){return '(continue)'} -$ContinueCtx.prototype.transition=function(token,value){var C=this -if(token=='eol'){return C.parent} -$_SyntaxError(C,'token '+token+' after '+C)} -$ContinueCtx.prototype.to_js=function(){this.js_processed=true -var js='continue' -if(this.loop_ctx.has_break){ -js=`$locals["$no_break${this.loop_ctx.loop_num}"]=true;${js}`} -return js} -var $DebuggerCtx=$B.parser.$DebuggerCtx=function(C){ -this.type='continue' -this.parent=C -C.tree[C.tree.length]=this} -$DebuggerCtx.prototype.toString=function(){return '(debugger)'} -$DebuggerCtx.prototype.transition=function(token,value){var C=this} -$DebuggerCtx.prototype.to_js=function(){this.js_processed=true -return 'debugger'} -var $DecoratorCtx=$B.parser.$DecoratorCtx=function(C){ -this.type='decorator' -this.parent=C -C.tree[C.tree.length]=this -this.tree=[]} -$DecoratorCtx.prototype.toString=function(){return '(decorator) '+this.tree} -$DecoratorCtx.prototype.transition=function(token,value){var C=this -if(token=='id' && C.tree.length==0){return $transition(new $DecoratorExprCtx(C),token,value)} -if(token=='eol'){return $transition(C.parent,token)} -$_SyntaxError(C,'token '+token+' after '+C)} -$DecoratorCtx.prototype.transform=function(node,rank){var func_rank=rank+1,children=node.parent.children,decorators=[this.tree] -while(1){if(func_rank >=children.length){$_SyntaxError(C,['decorator expects function'])} -else if(children[func_rank].C.type=='node_js'){func_rank++}else if(children[func_rank].C.tree[0].type== -'decorator'){decorators.push(children[func_rank].C.tree[0].tree) -children.splice(func_rank,1)}else{break}} -this.dec_ids=[] -var pos=0 -decorators.forEach(function(){this.dec_ids.push('$id'+$B.UUID())},this) -var obj=children[func_rank].C.tree[0] -if(obj.type=='def'){obj.decorated=true -obj.alias='$dec'+$B.UUID()} -var tail='',scope=$get_scope(this),ref='$locals["' -if(scope.globals && scope.globals.has(obj.name)){var module=$get_module(this) -ref='$locals_'+module.id+'["'} -ref+=obj.name+'"]' -var res=ref+' = ' -decorators.forEach(function(elt,i){res+='$B.$call('+this.dec_ids[i]+')(' -tail+=')'},this) -res+=(obj.decorated ? obj.alias :ref)+tail+';' -$bind(obj.name,scope,this) -node.parent.insert(func_rank+1,$NodeJS(res)) -this.decorators=decorators} -$DecoratorCtx.prototype.to_js=function(){this.js_processed=true -var res=[] -this.decorators.forEach(function(decorator,i){res.push('var '+this.dec_ids[i]+' = '+ -$to_js(decorator)+';')},this) -return res.join('')} -var $DecoratorExprCtx=$B.parser.$DecoratorExprCtx=function(C){ -this.type='decorator_expression' -this.parent=C -C.tree[C.tree.length]=this -this.names=[] -this.tree=[] -this.is_call=false} -$DecoratorExprCtx.prototype.toString=function(){return '(decorator expression)'} -$DecoratorExprCtx.prototype.transition=function(token,value){var C=this -if(C.expects===undefined){if(token=="id"){C.names.push(value) -C.expects="." -return C} -$_SyntaxError(C,'token '+token+' after '+C)}else if(C.is_call && token !=="eol"){$_SyntaxError(C,'token '+token+' after '+C)}else if(token=="id" && C.expects=="id"){C.names.push(value) -C.expects="." -return C}else if(token=="." && C.expects=="."){C.expects="id" -return C}else if(token=="(" && C.expects=="."){if(! C.is_call){C.is_call=true -return new $CallCtx(C)}}else if(token=='eol'){return $transition(C.parent,token)} -$_SyntaxError(C,'token '+token+' after '+C)} -$DecoratorExprCtx.prototype.to_js=function(){this.js_processed=true -var func=new $IdCtx(this,this.names[0]) -var obj=func.to_js() -this.names.slice(1).forEach(function(name){obj=`$B.$getattr(${obj},"${name}")`}) -if(this.tree.length > 1){ -this.tree[0].func={to_js:function(){return obj}} -return this.tree[0].to_js()} -return obj} -var $DefCtx=$B.parser.$DefCtx=function(C){this.type='def' -this.name=null -this.parent=C -this.tree=[] -this.async=C.async -this.locals=[] -C.tree[C.tree.length]=this -this.enclosing=[] -var scope=this.scope=$get_scope(this) -if(scope.C && scope.C.tree[0].type=="class"){this.class_name=scope.C.tree[0].name} -C.node.binding={} -var parent_block=scope -while(parent_block.C && -parent_block.C.tree[0].type=='class'){parent_block=parent_block.parent} -while(parent_block.C && -'def' !=parent_block.C.tree[0].type){parent_block=parent_block.parent} -this.parent.node.parent_block=parent_block -var pb=parent_block -this.is_comp=pb.is_comp -while(pb && pb.C){if(pb.C.tree[0].type=='def'){this.inside_function=true -break} -pb=pb.parent_block} -this.module=scope.module -this.root=$get_module(this) -this.num=$loop_num -$loop_num++ -this.positional_list=[] -this.default_list=[] -this.other_args=null -this.other_kw=null -this.after_star=[]} -$DefCtx.prototype.set_name=function(name){try{name=$mangle(name,this.parent.tree[0])}catch(err){console.log(err) -console.log('parent',this.parent) -throw err} -var id_ctx=new $IdCtx(this,name) -this.name=name -this.id=this.scope.id+'_'+name -this.id=this.id.replace(/\./g,'_') -this.id+='_'+$B.UUID() -this.parent.node.id=this.id -this.parent.node.module=this.module -this.binding={} -var scope=this.scope -if(scope.globals !==undefined && -scope.globals.has(name)){ -$bind(name,this.root,this)}else{$bind(name,scope,this)} -id_ctx.bound=true -if(scope.is_function){if(scope.C.tree[0].locals.indexOf(name)==-1){scope.C.tree[0].locals.push(name)}}} -$DefCtx.prototype.toString=function(){return 'def '+this.name+'('+this.tree+')'} -$DefCtx.prototype.transition=function(token,value){var C=this -switch(token){case 'id': -if(C.name){$_SyntaxError(C,'token '+token+' after '+C)} -C.set_name(value) -return C -case '(': -if(C.name==null){$_SyntaxError(C,"missing name in function definition")} -C.has_args=true; -return new $FuncArgs(C) -case 'annotation': -return new $AbstractExprCtx(new $AnnotationCtx(C),true) -case ':': -if(C.has_args){return $BodyCtx(C)}else{$_SyntaxError(C,"missing function parameters")} -case 'eol': -if(C.has_args){$_SyntaxError(C,"missing colon")}} -$_SyntaxError(C,'token '+token+' after '+C)} -$DefCtx.prototype.transform=function(node,rank){if(this.is_comp){$get_node(this).is_comp=true} -if(this.transformed !==undefined){return} -var scope=this.scope -this.doc_string=$get_docstring(node) -this.rank=rank -var indent=node.indent+12 -if(this.name.substr(0,15)=='lambda_'+$B.lambda_magic){var pblock=scope.parent_block -if(pblock.C && pblock.C.tree[0].type=="def"){this.enclosing.push(pblock)}} -var pnode=this.parent.node -while(pnode.parent && pnode.parent.is_def_func){this.enclosing.push(pnode.parent.parent) -pnode=pnode.parent.parent} -var defaults=[],defs1=[],has_end_pos=false -this.argcount=0 -this.kwonlyargcount=0 -this.kwonlyargsdefaults=[] -this.otherdefaults=[] -this.varnames={} -this.args=[] -this.__defaults__=[] -this.slots=[] -var slot_list=[],slot_init=[],annotations=[] -if(this.annotation){annotations.push('"return":'+this.annotation.to_js())} -this.func_name=this.tree[0].to_js() -var func_name1=this.func_name -if(this.decorated){this.func_name='var '+this.alias -func_name1=this.alias} -var func_args=this.tree[1].tree -func_args.forEach(function(arg){if(arg.type=='end_positional'){this.args.push("/") -slot_list.push('"/"') -has_end_pos=true}else{this.args.push(arg.name) -this.varnames[arg.name]=true} -if(arg.type=='func_arg_id'){if(this.star_arg){this.kwonlyargcount++ -if(arg.has_default){this.kwonlyargsdefaults.push(arg.name)}} -else{this.argcount++ -if(arg.has_default){this.otherdefaults.push(arg.name)}} -this.slots.push(arg.name+':null') -slot_list.push('"'+arg.name+'"') -slot_init.push(arg.name+':'+arg.name) -if(arg.tree.length > 0){defaults.push('"'+arg.name+'"') -defs1.push(arg.name+':'+$to_js(arg.tree)) -this.__defaults__.push($to_js(arg.tree))}}else if(arg.type=='func_star_arg'){if(arg.op=='*'){this.star_arg=arg.name} -else if(arg.op=='**'){this.kw_arg=arg.name}} -if(arg.annotation){var name=$mangle(arg.name,this) -annotations.push(name+': '+arg.annotation.to_js())}},this) -slot_init='{'+slot_init.join(", ")+'}' -var flags=67 -if(this.star_arg){flags |=4} -if(this.kw_arg){flags |=8} -if(this.type=='generator'){flags |=32} -if(this.async){flags |=128} -var nodes=[],js -var global_scope=scope -while(global_scope.parent_block && -global_scope.parent_block.id !=='__builtins__'){global_scope=global_scope.parent_block} -var global_ns='$locals_'+global_scope.id.replace(/\./g,'_') -var name=this.name+this.num -var local_ns='$locals_'+this.id,h='\n'+' '.repeat(indent) -js='var '+local_ns+' = {},'+ -h+'$locals = '+local_ns+';' -var new_node=new $Node() -new_node.locals_def=true -new_node.func_node=node -new $NodeJSCtx(new_node,js) -nodes.push(new_node) -var enter_frame_nodes=[$NodeJS('$locals.$line_info = "'+node.line_num+','+ -this.module+'"'),$NodeJS(`var $top_frame=["${this.id}",$locals,`+ -'"'+global_scope.id+'", '+global_ns+', '+ -(this.is_comp ? this.name :name)+']'),$NodeJS('$locals.$f_trace = $B.enter_frame($top_frame)'),$NodeJS('var $stack_length = $B.frames_stack.length;') -] -if(this.type=="generator"){enter_frame_nodes.push($NodeJS("$locals.$is_generator = true"))} -if(this.async){enter_frame_nodes.splice(1,0,$NodeJS(`$locals.$async="${this.id}"`))} -enter_frame_nodes.forEach(function(node){node.enter_frame=true}) -if(this.is_comp){nodes.push($NodeJS("var $defaults = {}"))} -this.env=[] -var make_args_nodes=[] -var js=local_ns+' = $locals = $B.args("'+this.name+'", '+ -this.argcount+', {'+this.slots.join(', ')+'}, '+ -'['+slot_list.join(', ')+'], arguments, $defaults, '+ -this.other_args+', '+this.other_kw+');' -var new_node=new $Node() -new $NodeJSCtx(new_node,js) -make_args_nodes.push(new_node) -var only_positional=false -if(this.other_args===null && this.other_kw===null && -this.after_star.length==0 && !has_end_pos){ -only_positional=true -nodes.push($NodeJS('var $len = arguments.length;')) -var new_node=new $Node() -var js='if($len > 0 && arguments[$len - 1].$nat !== undefined)' -new $NodeJSCtx(new_node,js) -nodes.push(new_node) -make_args_nodes.forEach(function(item){new_node.add(item)}) -var else_node=new $Node() -new $NodeJSCtx(else_node,'else') -nodes.push(else_node) -var pos_len=this.slots.length -var test_node=$NodeJS('if($len == '+pos_len+')') -else_node.add(test_node) -test_node.add($NodeJS(local_ns+' = $locals = '+slot_init)) -else_node.add($NodeJS('else if($len > '+pos_len+ -'){$B.wrong_nb_args("'+this.name+'", $len, '+ -pos_len+', ['+slot_list+'])}')) -if(pos_len > 0){ -else_node.add($NodeJS('else if($len + Object.keys($defaults).length < '+ -pos_len+'){$B.wrong_nb_args("'+this.name+ -'", $len, '+pos_len+', ['+slot_list+'])}')) -subelse_node=$NodeJS("else") -else_node.add(subelse_node) -subelse_node.add($NodeJS(local_ns+' = $locals = '+slot_init)) -subelse_node.add($NodeJS("var defparams = ["+slot_list+"]")) -subelse_node.add($NodeJS("for(var i = $len; i < defparams.length"+ -"; i++){$locals[defparams[i]] = $defaults[defparams[i]]}"))}}else{nodes.push(make_args_nodes[0]) -if(make_args_nodes.length > 1){nodes.push(make_args_nodes[1])}} -nodes=nodes.concat(enter_frame_nodes) -var is_method=scope.ntype=="class" -if(is_method){var class_name=scope.C.tree[0].name,class_block=scope.parent_block,class_ref="$locals_"+class_block.id.replace(/\./g,'_')+ -'["'+class_name+'"]' -this.parent.node.binding["__class__"]=true -nodes.push($NodeJS("$locals.__class__ = "+class_ref))} -nodes.push($NodeJS('$B.js_this = this;')) -for(var i=nodes.length-1;i >=0;i--){node.children.splice(0,0,nodes[i])} -var def_func_node=new $Node() -this.params='' -if(only_positional){this.params=Object.keys(this.varnames).join(', ')} -new $NodeJSCtx(def_func_node,'') -def_func_node.is_def_func=true -def_func_node.module=this.module -var last_node=node.children[node.children.length-1],indent=last_node.indent,last_instr=last_node.C.tree[0] -if(last_instr.type !='return'){ -js='if($locals.$f_trace !== _b_.None){\n'+ -' '.repeat(indent)+'$B.trace_return(_b_.None)\n'+ -' '.repeat(indent)+'}\n'+' '.repeat(indent) -js+='$B.leave_frame' -if(this.id.substr(0,5)=='$exec'){js+='_exec'} -js+='({$locals});return _b_.None' -node.add($NodeJS(js))} -var free_vars=[] -if(this.parent.node.referenced){for(var attr in this.parent.node.referenced){if(! this.parent.node.binding[attr]){free_vars.push('"'+attr+'"')}}} -node.add(def_func_node) -var offset=1,indent=node.indent -if(! this.is_comp){ -node.parent.insert(rank+offset++,$NodeJS(name+'.$is_func = true')) -if(this.$has_yield_in_cm){node.parent.insert(rank+offset++,$NodeJS(name+'.$has_yield_in_cm = true'))} -node.parent.insert(rank+offset++,$NodeJS(name+'.$infos = {')) -var __name__=this.name -if(this.name.substr(0,2)=="$$"){__name__=__name__.substr(2)} -if(__name__.substr(0,15)=='lambda_'+$B.lambda_magic){__name__=""} -js=' __name__:"'+__name__+'",' -node.parent.insert(rank+offset++,$NodeJS(js)) -var __qualname__=__name__ -if(this.class_name){__qualname__=this.class_name+'.'+__name__} -js=' __qualname__:"'+__qualname__+'",' -node.parent.insert(rank+offset++,$NodeJS(js)) -if(this.otherdefaults.length > 0){var def_names=[] -this.otherdefaults.forEach(function(_default){def_names.push('$defaults.'+_default)}) -node.parent.insert(rank+offset++,$NodeJS(' __defaults__ : '+ -'$B.fast_tuple(['+def_names.join(', ')+']),'))}else{node.parent.insert(rank+offset++,$NodeJS(' __defaults__ : '+ -'_b_.None,'))} -if(this.kwonlyargsdefaults.lengh > 0){var def_names=[] -this.kwonlyargsdefaults.forEach(function(_default){def_names.push('$defaults.'+_default)}) -node.parent.insert(rank+offset++,$NodeJS(' __kwdefaults__ : '+ -'$B.fast_tuple(['+def_names.join(', ')+']),'))}else{node.parent.insert(rank+offset++,$NodeJS(' __kwdefaults__ : '+ -'_b_.None,'))} -node.parent.insert(rank+offset++,$NodeJS(' __annotations__: {'+annotations.join(',')+'},')) -node.parent.insert(rank+offset++,$NodeJS(' __dict__: $B.empty_dict(),')) -node.parent.insert(rank+offset++,$NodeJS(' __doc__: '+(this.doc_string ||'_b_.None')+',')) -var root=$get_module(this) -node.parent.insert(rank+offset++,$NodeJS(' __module__ : "'+root.module+'",')) -for(var attr in this.binding){this.varnames[attr]=true} -var co_varnames=[] -for(var attr in this.varnames){co_varnames.push('"'+$B.from_alias(attr)+'"')} -var CODE_MARKER='___%%%-CODE-%%%___'+this.name+this.num; -var h='\n'+' '.repeat(indent+8) -js=' __code__:{'+h+' co_argcount:'+this.argcount -var h1=','+h+' '.repeat(4) -var module=$get_module(this).module -js+=h1+'co_filename:$locals_'+module.replace(/\./g,'_')+ -'["__file__"]'+ -h1+'co_firstlineno:'+node.line_num+ -h1+'co_flags:'+flags+ -h1+'co_freevars: ['+free_vars+']'+ -h1+'co_kwonlyargcount:'+this.kwonlyargcount+ -h1+'co_name: "'+this.name+'"'+ -h1+'co_nlocals: '+co_varnames.length+ -h1+'co_posonlyargcount: '+(this.pos_only ||0)+ -h1+'co_varnames: $B.fast_tuple(['+co_varnames.join(', ')+'])'+ -h+'}\n'+' '.repeat(indent+4)+'};' -js+='_b_.None;' -node.parent.insert(rank+offset++,$NodeJS(js))} -this.default_str='{'+defs1.join(', ')+'}' -if(! this.is_comp){var name1=name -if(this.type=="generator"){name1=`$B.generator.$factory(${name})`} -var res='return '+name1 -if(this.async){if(this.type=="generator"){res=`return $B.async_generator.$factory(${name})`}else{res='return $B.make_async('+name1+')'}} -node.parent.insert(rank+offset++,$NodeJS(res+'}')) -node.parent.insert(rank+offset++,$NodeJS( -this.func_name+" = "+this.name+'$'+this.num+ -'('+this.default_str+')')) -node.parent.insert(rank+offset++,$NodeJS( -func_name1+".$set_defaults = function(value){return "+ -func_name1+" = "+this.name+"$"+this.num+ -"(value)}")) -if(this.$has_yield_in_cm){node.parent.insert(rank+offset++,$NodeJS(`${func_name1}.$has_yield_in_cm=true`))}} -var parent=node -for(var pos=0;pos < parent.children.length && -parent.children[pos]!==$B.last(enter_frame_nodes);pos++){} -var try_node=$NodeJS('try'),children=parent.children.slice(pos+1) -parent.insert(pos+1,try_node) -children.forEach(function(child){if(child.is_def_func){child.children.forEach(function(grand_child){try_node.add(grand_child)})}else{try_node.add(child)}}) -parent.children.splice(pos+2,parent.children.length) -var except_node=$NodeJS('catch(err)') -except_node.add($NodeJS('$B.set_exc(err)')) -except_node.add($NodeJS('if($locals.$f_trace !== _b_.None){'+ -'$locals.$f_trace = $B.trace_exception()}')) -except_node.add($NodeJS('$B.leave_frame({$locals});throw err')) -parent.add(except_node) -this.transformed=true -return offset} -$DefCtx.prototype.to_js=function(func_name){this.js_processed=true -if(this.is_comp){return "var "+this.name+" = "+ -(this.async ? ' async ' :'')+ -"function* (expr)"} -func_name=func_name ||this.tree[0].to_js() -if(this.decorated){func_name='var '+this.alias} -return "var "+this.name+'$'+this.num+ -' = function($defaults){'+ -(this.async ? 'async ' :'')+'function'+ -(this.type=='generator' ? "* " :" ")+ -this.name+this.num+'('+this.params+')'} -var $DelCtx=$B.parser.$DelCtx=function(C){ -this.type='del' -this.parent=C -C.tree[C.tree.length]=this -this.tree=[]} -$DelCtx.prototype.toString=function(){return 'del '+this.tree} -$DelCtx.prototype.transition=function(token,value){var C=this -if(token=='eol'){return $transition(C.parent,token)} -$_SyntaxError(C,'token '+token+' after '+C)} -$DelCtx.prototype.to_js=function(){this.js_processed=true -var C=this.parent -if(this.tree[0].type=='list_or_tuple'){ -var res=[] -this.tree[0].tree.forEach(function(elt){var subdel=new $DelCtx(C) -subdel.tree=[elt] -res.push(subdel.to_js()) -C.tree.pop()}) -this.tree=[] -return res.join(';')}else if(this.tree[0].type=='expr' && -this.tree[0].tree[0].type=='list_or_tuple'){ -this.tree[0]=this.tree[0].tree[0] -return this.to_js()}else{var expr=this.tree[0].tree[0] -switch(expr.type){case 'id': -var scope=$get_scope(this),is_global=false -if((scope.ntype=="def" ||scope.ntype=="generator")&& -scope.globals && scope.globals.has(expr.value)){ -scope=scope.parent -while(scope.parent && -scope.parent.id !=="__builtins__"){scope=scope.parent} -is_global=true} -var res='$B.$delete("'+expr.value+'"'+ -(is_global ? ', "global"' :'')+');' -delete scope.binding[expr.value] -return res -case 'list_or_tuple': -var res=[] -expr.tree.forEach(function(elt){res.push('delete '+elt.to_js())}) -return res.join(';') -case 'sub': -expr.func='delitem' -js=expr.to_js() -expr.func='getitem' -return js -case 'op': -$_SyntaxError(this,["cannot delete operator"]) -case 'call': -$_SyntaxError(this,["cannot delete function call"]) -case 'attribute': -return '_b_.delattr('+expr.value.to_js()+',"'+ -expr.name+'")' -default: -$_SyntaxError(this,["cannot delete "+expr.type])}}} -var $DictOrSetCtx=$B.parser.$DictOrSetCtx=function(C){ -this.type='dict_or_set' -this.real='dict_or_set' -this.expect='id' -this.closed=false -this.start=$pos -this.parent=C -this.tree=[] -C.tree[C.tree.length]=this} -$DictOrSetCtx.prototype.toString=function(){switch(this.real){case 'dict': -return '(dict) {'+this.items+'}' -case 'set': -return '(set) {'+this.tree+'}'} -return '(dict_or_set) {'+this.tree+'}'} -$DictOrSetCtx.prototype.transition=function(token,value){var C=this -if(C.closed){switch(token){case '[': -return new $AbstractExprCtx(new $SubCtx(C.parent),false) -case '(': -return new $CallArgCtx(new $CallCtx(C.parent))} -return $transition(C.parent,token,value)}else{if(C.expect==','){switch(token){case '}': -switch(C.real){case 'dict_or_set': -if(C.tree.length !=1){break} -C.real='set' -case 'set': -case 'set_comp': -case 'dict_comp': -C.items=C.tree -C.tree=[] -C.closed=true -return C -case 'dict': -if(C.nb_dict_items()% 2==0){C.items=C.tree -C.tree=[] -C.closed=true -return C}} -$_SyntaxError(C,'token '+token+ -' after '+C) -case ',': -if(C.real=='dict_or_set'){C.real='set'} -if(C.real=='dict' && -C.nb_dict_items()% 2){$_SyntaxError(C,'token '+token+ -' after '+C)} -C.expect='id' -return C -case ':': -if(C.real=='dict_or_set'){C.real='dict'} -if(C.real=='dict'){C.expect=',' -return new $AbstractExprCtx(C,false)}else{$_SyntaxError(C,'token '+token+ -' after '+C)} -case 'for': -if(C.real=='dict_or_set'){C.real='set_comp'}else{C.real='dict_comp'} -var lst=new $ListOrTupleCtx(C,'dict_or_set_comp') -lst.intervals=[C.start+1] -lst.vars=C.vars -C.tree.pop() -lst.expression=C.tree -if(C.yields){lst.expression.yields=C.yields -delete C.yields} -C.tree=[lst] -lst.tree=[] -var comp=new $ComprehensionCtx(lst) -return new $TargetListCtx(new $CompForCtx(comp))} -$_SyntaxError(C,'token '+token+' after '+C)}else if(C.expect=='id'){switch(token){case '}': -if(C.tree.length==0){ -C.items=[] -C.real='dict'}else{ -C.items=C.tree} -C.tree=[] -C.closed=true -return C -case 'id': -case 'imaginary': -case 'int': -case 'float': -case 'str': -case 'bytes': -case '[': -case '(': -case '{': -case '.': -case 'not': -case 'lambda': -C.expect=',' -var expr=new $AbstractExprCtx(C,false) -return $transition(expr,token,value) -case 'op': -switch(value){case '*': -case '**': -C.expect="," -var expr=new $AbstractExprCtx(C,false) -expr.packed=value.length -if(C.real=="dict_or_set"){C.real=value=="*" ? "set" : -"dict"}else if( -(C.real=="set" && value=="**")|| -(C.real=="dict" && value=="*")){$_SyntaxError(C,'token '+token+ -' after '+C)} -return expr -case '+': -return C -case '-': -case '~': -C.expect=',' -var left=new $UnaryCtx(C,value) -if(value=='-'){var op_expr=new $OpCtx(left,'unary_neg')}else if(value=='+'){var op_expr=new $OpCtx(left,'unary_pos')}else{var op_expr=new $OpCtx(left,'unary_inv')} -return new $AbstractExprCtx(op_expr,false)} -$_SyntaxError(C,'token '+token+ -' after '+C)} -$_SyntaxError(C,'token '+token+' after '+C)} -return $transition(C.parent,token,value)}} -$DictOrSetCtx.prototype.nb_dict_items=function(){var nb=0 -this.tree.forEach(function(item){if(item.packed){nb+=2} -else{nb++}}) -return nb} -$DictOrSetCtx.prototype.packed_indices=function(){var ixs=[] -this.items.forEach(function(t,i){if(t.type=="expr" && t.packed){ixs.push(i)}}) -return ixs} -$DictOrSetCtx.prototype.unpack_dict=function(packed){var js="",res,first,i=0,item,elts=[] -while(i < this.items.length){item=this.items[i] -first=i==0 -if(item.type=="expr" && item.packed){res="_b_.list.$factory(_b_.dict.items("+item.to_js()+"))" -i++}else{res="[["+item.to_js()+","+ -this.items[i+1].to_js()+"]]" -i+=2} -if(! first){res=".concat("+res+")"} -js+=res} -return js} -$DictOrSetCtx.prototype.unpack_set=function(packed){var js="",res -this.items.forEach(function(t,i){if(packed.indexOf(i)>-1){res="_b_.list.$factory("+t.to_js()+")"}else{res="["+t.to_js()+"]"} -if(i > 0){res=".concat("+res+")"} -js+=res}) -return js} -$DictOrSetCtx.prototype.to_js=function(){this.js_processed=true -switch(this.real){case 'dict': -var packed=this.packed_indices() -if(packed.length > 0){return '_b_.dict.$factory('+this.unpack_dict(packed)+ -')'+$to_js(this.tree)} -var res=[] -for(var i=0;i < this.items.length;i+=2){res.push('['+this.items[i].to_js()+','+ -this.items[i+1].to_js()+']')} -return '_b_.dict.$factory(['+res.join(',')+'])'+ -$to_js(this.tree) -case 'set_comp': -return '_b_.set.$factory('+$to_js(this.items)+')'+ -$to_js(this.tree) -case 'dict_comp': -return '_b_.dict.$factory('+$to_js(this.items)+')'+ -$to_js(this.tree)} -var packed=this.packed_indices() -if(packed.length > 0){return '_b_.set.$factory('+this.unpack_set(packed)+')'} -return '_b_.set.$factory(['+$to_js(this.items)+'])'+$to_js(this.tree)} -var $DoubleStarArgCtx=$B.parser.$DoubleStarArgCtx=function(C){ -this.type='double_star_arg' -this.parent=C -this.tree=[] -C.tree[C.tree.length]=this} -$DoubleStarArgCtx.prototype.toString=function(){return '**'+this.tree} -$DoubleStarArgCtx.prototype.transition=function(token,value){var C=this -switch(token){case 'id': -case 'imaginary': -case 'int': -case 'float': -case 'str': -case 'bytes': -case '[': -case '(': -case '{': -case '.': -case 'not': -case 'lambda': -return $transition(new $AbstractExprCtx(C,false),token,value) -case ',': -case ')': -return $transition(C.parent,token) -case ':': -if(C.parent.parent.type=='lambda'){return $transition(C.parent.parent,token)}} -$_SyntaxError(C,'token '+token+' after '+C)} -$DoubleStarArgCtx.prototype.to_js=function(){this.js_processed=true -return '{$nat:"pdict",arg:'+$to_js(this.tree)+'}'} -var $EllipsisCtx=$B.parser.$EllipsisCtx=function(C){ -this.type='ellipsis' -this.parent=C -this.nbdots=1 -this.start=$pos -C.tree[C.tree.length]=this} -$EllipsisCtx.prototype.toString=function(){return 'ellipsis'} -$EllipsisCtx.prototype.transition=function(token,value){var C=this -if(token=='.'){C.nbdots++ -if(C.nbdots==3 && $pos-C.start==2){C.$complete=true} -return C}else{if(! C.$complete){$pos-- -$_SyntaxError(C,'token '+token+' after '+ -C)}else{return $transition(C.parent,token,value)}}} -$EllipsisCtx.prototype.to_js=function(){this.js_processed=true -return '$B.builtins["Ellipsis"]'} -var $EndOfPositionalCtx=$B.parser.$EndOfConditionalCtx=function(C){ -this.type="end_positional" -this.parent=C -C.has_end_positional=true -C.parent.pos_only=C.tree.length -C.tree.push(this)} -$EndOfPositionalCtx.prototype.transition=function(token,value){var C=this -if(token=="," ||token==")"){return $transition(C.parent,token,value)} -$_SyntaxError(C,'token '+token+' after '+C)} -$EndOfPositionalCtx.prototype.to_js=function(){return "/"} -var $ExceptCtx=$B.parser.$ExceptCtx=function(C){ -this.type='except' -this.parent=C -C.tree[C.tree.length]=this -this.tree=[] -this.expect='id' -this.scope=$get_scope(this)} -$ExceptCtx.prototype.toString=function(){return '(except) '} -$ExceptCtx.prototype.transition=function(token,value){var C=this -switch(token){case 'id': -case 'imaginary': -case 'int': -case 'float': -case 'str': -case 'bytes': -case '[': -case '(': -case '{': -case 'not': -case 'lambda': -if(C.expect=='id'){C.expect='as' -return $transition(new $AbstractExprCtx(C,false),token,value)} -case 'as': -if(C.expect=='as' && -C.has_alias===undefined){C.expect='alias' -C.has_alias=true -return C} -case 'id': -if(C.expect=='alias'){C.expect=':' -C.set_alias(value) -return C} -break -case ':': -var _ce=C.expect -if(_ce=='id' ||_ce=='as' ||_ce==':'){return $BodyCtx(C)} -break -case '(': -if(C.expect=='id' && C.tree.length==0){C.parenth=true -return C} -break -case ')': -if(C.expect==',' ||C.expect=='as'){C.expect='as' -return C} -case ',': -if(C.parenth !==undefined && -C.has_alias===undefined && -(C.expect=='as' ||C.expect==',')){C.expect='id' -return C}} -$_SyntaxError(C,'token '+token+' after '+C.expect)} -$ExceptCtx.prototype.set_alias=function(alias){this.tree[0].alias=$mangle(alias,this) -$bind(alias,this.scope,this)} -$ExceptCtx.prototype.transform=function(node,rank){ -var linenum_node=$NodeJS("void(0)") -linenum_node.line_num=node.line_num -node.insert(0,linenum_node) -var last_child=$B.last(node.children) -if(last_child.C.tree && last_child.C.tree[0]&& -last_child.C.tree[0].type=="return"){} -else{node.add($NodeJS("$B.del_exc()"))}} -$ExceptCtx.prototype.to_js=function(){ -this.js_processed=true -switch(this.tree.length){case 0: -return 'else' -case 1: -if(this.tree[0].name=='Exception'){return 'else if(1)'}} -var res=[] -this.tree.forEach(function(elt){res.push(elt.to_js())}) -var lnum='' -if($B.debug > 0){var module=$get_module(this) -lnum='($locals.$line_info = "'+$get_node(this).line_num+ -','+module.id+'") && '} -return 'else if('+lnum+'$B.is_exc('+this.error_name+ -',['+res.join(',')+']))'} -var $ExprCtx=$B.parser.$ExprCtx=function(C,name,with_commas){ -this.type='expr' -this.name=name -this.with_commas=with_commas -this.expect=',' -this.parent=C -if(C.packed){this.packed=C.packed} -if(C.is_await){var node=$get_node(this) -node.has_await=node.has_await ||[] -this.is_await=C.is_await -node.has_await.push(this)} -if(C.assign){ -this.assign=C.assign} -this.tree=[] -C.tree[C.tree.length]=this} -$ExprCtx.prototype.toString=function(){return '(expr '+this.with_commas+') '+this.tree} -$ExprCtx.prototype.transition=function(token,value){var C=this -switch(token){case 'bytes': -case 'float': -case 'id': -case 'imaginary': -case 'int': -case 'lambda': -case 'pass': -case 'str': -$_SyntaxError(C,'token '+token+' after '+ -C) -break -case '{': -if(C.tree[0].type !="id" || -["print","exec"].indexOf(C.tree[0].value)==-1){$_SyntaxError(C,'token '+token+' after '+ -C)} -return new $DictOrSetCtx(C) -case '[': -case '(': -case '.': -case 'not': -if(C.expect=='expr'){C.expect=',' -return $transition(new $AbstractExprCtx(C,false),token,value)}} -switch(token){case 'not': -if(C.expect==','){return new $ExprNot(C)} -break -case 'in': -if(C.parent.type=='target_list'){ -return $transition(C.parent,token)} -if(C.expect==','){return $transition(C,'op','in')} -break -case ',': -if(C.expect==','){if(C.with_commas || -["assign","return"].indexOf(C.parent.type)>-1){if($parent_match(C,{type:"yield","from":true})){$_SyntaxError(C,"no implicit tuple for yield from")} -C.parent.tree.pop() -var tuple=new $ListOrTupleCtx(C.parent,'tuple') -tuple.implicit=true -tuple.has_comma=true -tuple.tree=[C] -C.parent=tuple -return tuple}} -return $transition(C.parent,token) -case '.': -return new $AttrCtx(C) -case '[': -return new $AbstractExprCtx(new $SubCtx(C),true) -case '(': -return new $CallCtx(C) -case 'op': -var op_parent=C.parent,op=value -if(op_parent.type=='ternary' && op_parent.in_else){var new_op=new $OpCtx(C,op) -return new $AbstractExprCtx(new_op,false)} -var op1=C.parent,repl=null -while(1){if(op1.type=='expr'){op1=op1.parent} -else if(op1.type=='op' && -$op_weight[op1.op]>=$op_weight[op]&& -!(op1.op=='**' && op=='**')){ -repl=op1 -op1=op1.parent}else if(op1.type=="not" && -$op_weight['not']> $op_weight[op]){repl=op1 -op1=op1.parent}else{break}} -if(repl===null){while(1){if(C.parent !==op1){C=C.parent -op_parent=C.parent}else{break}} -C.parent.tree.pop() -var expr=new $ExprCtx(op_parent,'operand',C.with_commas) -expr.expect=',' -C.parent=expr -var new_op=new $OpCtx(C,op) -return new $AbstractExprCtx(new_op,false)}else{ -if(op==='and' ||op==='or'){while(repl.parent.type=='not'|| -(repl.parent.type=='expr' && -repl.parent.parent.type=='not')){ -repl=repl.parent -op_parent=repl.parent}}} -if(repl.type=='op'){var _flag=false -switch(repl.op){case '<': -case '<=': -case '==': -case '!=': -case 'is': -case '>=': -case '>': -_flag=true} -if(_flag){switch(op){case '<': -case '<=': -case '==': -case '!=': -case 'is': -case '>=': -case '>': -var c2=repl.tree[1], -c2js=c2.to_js() -var c2_clone=new Object() -for(var attr in c2){c2_clone[attr]=c2[attr]} -var vname="$c"+chained_comp_num -c2.to_js=function(){return vname} -c2_clone.to_js=function(){return vname} -chained_comp_num++ -while(repl.parent && repl.parent.type=='op'){if($op_weight[repl.parent.op]< -$op_weight[repl.op]){repl=repl.parent}else{break}} -repl.parent.tree.pop() -var and_expr=new $OpCtx(repl,'and') -and_expr.wrap={'name':vname,'js':c2js} -c2_clone.parent=and_expr -and_expr.tree.push('xxx') -var new_op=new $OpCtx(c2_clone,op) -return new $AbstractExprCtx(new_op,false)}}} -repl.parent.tree.pop() -var expr=new $ExprCtx(repl.parent,'operand',false) -expr.tree=[op1] -repl.parent=expr -var new_op=new $OpCtx(repl,op) -return new $AbstractExprCtx(new_op,false) -case 'augm_assign': -var parent=C.parent -while(parent){if(parent.type=="assign" ||parent.type=="augm_assign"){$_SyntaxError(C,"augmented assignment inside assignment")}else if(parent.type=="op"){$_SyntaxError(C,["cannot assign to operator"])} -parent=parent.parent} -if(C.expect==','){return new $AbstractExprCtx( -new $AugmentedAssignCtx(C,value),true)} -return $transition(C.parent,token,value) -case ":": -if(C.parent.type=="sub" || -(C.parent.type=="list_or_tuple" && -C.parent.parent.type=="sub")){return new $AbstractExprCtx(new $SliceCtx(C.parent),false)}else if(C.parent.type=="slice"){return $transition(C.parent,token,value)}else if(C.parent.type=="node"){ -if(C.tree.length==1){var child=C.tree[0] -if(["id","sub","attribute"].indexOf(child.type)>-1){return new $AbstractExprCtx(new $AnnotationCtx(C),false)}else if(child.real=="tuple" && child.expect=="," && -child.tree.length==1){return new $AbstractExprCtx(new $AnnotationCtx(child.tree[0]),false)}} -$_SyntaxError(C,"invalid target for annotation")} -break -case '=': -function has_parent(ctx,type){ -while(ctx.parent){if(ctx.parent.type==type){return ctx.parent} -ctx=ctx.parent} -return false} -var annotation -if(C.expect==','){if(C.parent.type=="call_arg"){ -if(C.tree[0].type !="id"){$_SyntaxError(C,['expression cannot contain'+ -' assignment, perhaps you meant "=="?'])} -return new $AbstractExprCtx(new $KwArgCtx(C),true)}else if(annotation=has_parent(C,"annotation")){return $transition(annotation,token,value)}else if(C.parent.type=="op"){ -$_SyntaxError(C,["cannot assign to operator"])}else if(C.parent.type=="list_or_tuple"){ -for(var i=0;i < C.parent.tree.length;i++){var item=C.parent.tree[i] -if(item.type=="expr" && item.name=="operand"){$_SyntaxError(C,["cannot assign to operator"])}}}else if(C.parent.type=="expr" && -C.parent.name=="target list"){$_SyntaxError(C,'token '+token+' after ' -+C)}else if(C.parent.type=="lambda"){if(C.parent.parent.parent.type !="node"){$_SyntaxError(C,['expression cannot contain'+ -' assignment, perhaps you meant "=="?'])}} -while(C.parent !==undefined){C=C.parent -if(C.type=="condition"){$_SyntaxError(C,'token '+token+' after ' -+C)}else if(C.type=="augm_assign"){$_SyntaxError(C,"assignment inside augmented assignment")}} -C=C.tree[0] -return new $AbstractExprCtx(new $AssignCtx(C),true)} -break -case ':=': -var ptype=C.parent.type -if(["node","assign","kwarg","annotation"]. -indexOf(ptype)>-1){$_SyntaxError(C,':= invalid, parent '+ptype)}else if(ptype=="func_arg_id" && -C.parent.tree.length > 0){ -$_SyntaxError(C,':= invalid, parent '+ptype)}else if(ptype=="call_arg" && -C.parent.parent.type=="call" && -C.parent.parent.parent.type=="lambda"){ -$_SyntaxError(C,':= invalid inside function arguments' )} -if(C.tree.length==1 && -C.tree[0].type=="id"){var scope=$get_scope(C),name=C.tree[0].value -while(scope.is_comp){scope=scope.parent_block} -$bind(name,scope,C) -var parent=C.parent -parent.tree.pop() -var assign_expr=new $AbstractExprCtx(parent,false) -assign_expr.assign=C.tree[0] -return assign_expr} -$_SyntaxError(C,'token '+token+' after '+C) -case 'if': -var in_comp=false,ctx=C.parent -while(true){if(ctx.type=="list_or_tuple"){ -break}else if(ctx.type=='comp_for' ||ctx.type=="comp_if"){in_comp=true -break}else if(ctx.type=='call_arg'){break} -if(ctx.parent !==undefined){ctx=ctx.parent} -else{break}} -if(in_comp){break} -var ctx=C -while(ctx.parent && -(ctx.parent.type=='op' || -(ctx.parent.type=="expr" && ctx.parent.name=="operand"))){ctx=ctx.parent} -return new $AbstractExprCtx(new $TernaryCtx(ctx),true) -case 'eol': -if(C.tree.length==2 && -C.tree[0].type=="id" && -["print","exec"].indexOf(C.tree[0].value)>-1){$_SyntaxError(C,["Missing parentheses in call "+ -"to '"+C.tree[0].value+"'."])} -if(["dict_or_set","list_or_tuple"].indexOf(C.parent.type)==-1){var t=C.tree[0] -if(t.type=="packed" || -(t.type=="call" && t.func.type=="packed")){$_SyntaxError(C,["can't use starred expression here"])}}} -return $transition(C.parent,token)} -$ExprCtx.prototype.to_js=function(arg){var res -this.js_processed=true -if(this.type=='list'){res='['+$to_js(this.tree)+']'}else if(this.tree.length==1){res=this.tree[0].to_js(arg)}else{res='_b_.tuple.$factory(['+$to_js(this.tree)+'])'} -if(this.is_await){res="await ($B.promise("+res+"))"} -if(this.assign){ -var scope=$get_scope(this) -while(scope.is_comp){scope=scope.parent_block} -if(scope.globals && scope.globals.has(this.assign.value)){ -while(scope.parent_block && -scope.parent_block.id !=="__builtins__"){scope=scope.parent_block}}else if(scope.nonlocals && -scope.nonlocals[this.assign.value]){ -scope=scope.parent_block} -res="($locals_"+scope.id.replace(/\./g,'_')+'["'+ -this.assign.value+'"] = '+res+')'} -return res} -var $ExprNot=$B.parser.$ExprNot=function(C){ -this.type='expr_not' -this.parent=C -this.tree=[] -C.tree[C.tree.length]=this} -$ExprNot.prototype.transition=function(token,value){var C=this -if(token=='in'){ -C.parent.tree.pop() -return new $AbstractExprCtx( -new $OpCtx(C.parent,'not_in'),false)} -$_SyntaxError(C,'token '+token+' after '+C)} -$ExprNot.prototype.toString=function(){return '(expr_not)'} -var $ForExpr=$B.parser.$ForExpr=function(C){ -if(C.node.parent.is_comp){ -C.node.parent.first_for=this} -this.type='for' -this.parent=C -this.tree=[] -C.tree[C.tree.length]=this -this.loop_num=$loop_num -this.scope=$get_scope(this) -if(this.scope.is_comp){} -this.module=this.scope.module -$loop_num++} -$ForExpr.prototype.toString=function(){return '(for) '+this.tree} -$ForExpr.prototype.transition=function(token,value){var C=this -switch(token){case 'in': -if(C.tree[0].tree.length==0){ -$_SyntaxError(C,"missing target between 'for' and 'in'")} -return new $AbstractExprCtx( -new $ExprCtx(C,'target list',true),false) -case ':': -if(C.tree.length < 2 -||C.tree[1].tree[0].type=="abstract_expr"){$_SyntaxError(C,'token '+token+' after '+ -C)} -return $BodyCtx(C)} -$_SyntaxError(C,'token '+token+' after '+C)} -$ForExpr.prototype.transform=function(node,rank){ -var pnode=this.parent.node.parent -while(pnode){if(pnode.is_comp){var module=$get_module(this) -if(module.outermost_expr===undefined){pnode.outermost_expr=this.tree[1] -module.outermost_expr=this.tree[1] -this.tree.pop() -new $RawJSCtx(this,"expr")} -break} -pnode=pnode.parent} -if(this.async){return this.transform_async(node,rank)} -var scope=$get_scope(this),target=this.tree[0],target_is_1_tuple=target.tree.length==1 && target.expect=='id',iterable=this.tree[1],num=this.loop_num,local_ns='$locals_'+scope.id.replace(/\./g,'_'),h='\n'+' '.repeat(node.indent+4) -var $range=false -if(target.tree.length==1 && -! scope.blurred && -target.expct !='id' && -iterable.type=='expr' && -iterable.tree[0].type=='expr' && -iterable.tree[0].tree[0].type=='call'){var call=iterable.tree[0].tree[0] -if(call.func.type=='id'){var func_name=call.func.value -if(func_name=='range' && call.tree.length < 3 && -call.tree.length > 0){ -$range=call}}} -var new_nodes=[],pos=0 -var children=node.children -var offset=1 -if($range){if(this.has_break){ -new_node=new $Node() -new $NodeJSCtx(new_node,local_ns+'["$no_break'+num+'"] = true') -new_nodes[pos++]=new_node} -var range_is_builtin=false,_scope=$get_scope(this),found=[] -while(1){if(_scope.binding["range"]){found.push(_scope.id)} -if(_scope.parent_block){_scope=_scope.parent_block} -else{break}} -range_is_builtin=found.length==1 && -found[0]=="__builtins__" -var test_range_node=new $Node() -test_range_node.module=node.parent.module -if(range_is_builtin){new $NodeJSCtx(test_range_node,'if(1)')}else{new $NodeJSCtx(test_range_node,'if('+call.func.to_js()+' === _b_.range)')} -new_nodes[pos++]=test_range_node -var idt=target.to_js(),shortcut=false -if($range.tree.length==1){var stop=$range.tree[0].tree[0] -if(stop.tree[0].type=="int"){stop=parseInt(stop.to_js()) -if(0 < stop < $B.max_int){shortcut=true -var varname="$i"+$B.UUID() -var for_node=$NodeJS("for (var "+varname+" = 0; "+ -varname+" < "+stop+"; "+varname+"++)") -for_node.add($NodeJS(idt+" = "+varname))}} -var start=0,stop=$range.tree[0].to_js()}else{var start=$range.tree[0].to_js(),stop=$range.tree[1].to_js()} -if(!shortcut){var js='var $stop_'+num+' = $B.int_or_bool('+stop+'),'+ -h+' $next'+num+" = "+start+','+ -h+' $safe'+num+' = typeof $next'+num+ -' == "number" && typeof '+'$stop_'+num+' == "number";'+ -h+' while(true)' -var for_node=new $Node() -new $NodeJSCtx(for_node,js) -for_node.add($NodeJS('if($safe'+num+' && $next'+num+ -'>= $stop_'+num+'){break}')) -for_node.add($NodeJS('else if(!$safe'+num+' && $B.ge($next'+ -num+', $stop_'+num+')){break}')) -for_node.add($NodeJS(idt+' = $next'+num)) -for_node.add($NodeJS('if($safe'+num+'){$next'+num+ -' += 1}')) -for_node.add($NodeJS('else{$next'+num+' = $B.add($next'+ -num+',1)}'))} -children.forEach(function(child){for_node.add(child.clone_tree())}) -if($B.last(node.children).C.tree[0].type !="return"){var js='$locals.$line_info = "'+node.line_num+ -','+this.module+'";if($locals.$f_trace !== _b_.None){'+ -'$B.trace_line()};_b_.None;' -for_node.add($NodeJS(js))} -var in_loop=false -if(scope.ntype=='module'){var pnode=node.parent -while(pnode){if(pnode.for_wrapper){in_loop=true;break} -pnode=pnode.parent}} -if(scope.ntype=='module' && !in_loop){var func_node=new $Node() -func_node.for_wrapper=true -js='function $f'+num+'(' -if(this.has_break){js+='$no_break'+num} -js+=')' -new $NodeJSCtx(func_node,js) -test_range_node.add(func_node) -func_node.add(for_node) -if(this.has_break){func_node.add($NodeJS('return $no_break'+num))} -test_range_node.add($NodeJS('var $res'+num+' = $f'+num+ -'();')) -if(this.has_break){test_range_node.add($NodeJS('var $no_break'+num+ -' = $res'+num))}}else{ -test_range_node.add(for_node)} -if(range_is_builtin){node.parent.children.splice(rank,1) -var k=0 -if(this.has_break){node.parent.insert(rank,new_nodes[0]) -k++} -new_nodes[k].children.forEach(function(child){node.parent.insert(rank+k,child)}) -node.parent.children[rank].line_num=node.line_num -node.parent.children[rank].bindings=node.bindings -node.children=[] -return 0} -var else_node=$NodeJS("else") -new_nodes[pos++]=else_node -for(var i=new_nodes.length-1;i >=0;i--){node.parent.insert(rank+1,new_nodes[i])} -this.test_range=true -new_nodes=[],pos=0} -var new_node=new $Node() -new_node.line_num=$get_node(this).line_num -var it_js=iterable.to_js(),iterable_name='$iter'+num,js='var '+iterable_name+' = '+it_js+';'+ -'$locals["$next'+num+'"]'+' = $B.$getattr($B.$iter('+ -iterable_name+'),"__next__")' -new $NodeJSCtx(new_node,js) -new_nodes[pos++]=new_node -if(this.has_break){ -new_nodes[pos++]=$NodeJS(local_ns+'["$no_break'+num+ -'"] = true;')} -var while_node=new $Node() -if(this.has_break){js='while('+local_ns+'["$no_break'+num+'"])'}else{js='while(true)'} -new $NodeJSCtx(while_node,js) -while_node.C.loop_num=num -while_node.C.type='for' -new_nodes[pos++]=while_node -node.parent.children.splice(rank,1) -if(this.test_range){for(var i=new_nodes.length-1;i >=0;i--){else_node.insert(0,new_nodes[i])}}else{for(var i=new_nodes.length-1;i >=0;i--){node.parent.insert(rank,new_nodes[i]) -offset+=new_nodes.length}} -var try_node=$NodeJS("try") -try_node.bindings=node.bindings -while_node.add(try_node) -var iter_node=new $Node() -iter_node.id=this.module -var C=new $NodeCtx(iter_node) -var target_expr=new $ExprCtx(C,'left',true) -if(target_is_1_tuple){ -var t=new $ListOrTupleCtx(target_expr) -t.real='tuple' -t.tree=target.tree}else{target_expr.tree=target.tree} -var assign=new $AssignCtx(target_expr) -assign.tree[1]=new $JSCode('$locals["$next'+num+'"]()') -try_node.add(iter_node) -while_node.add( -$NodeJS('catch($err){if($B.is_exc($err, [_b_.StopIteration]))'+ -'{break;}else{throw($err)}}')) -children.forEach(function(child){ -while_node.add(child.clone())}) -if(node.children.length==0){console.log("bizarre",this)} -if($B.last(node.children).C.tree[0].type !="return"){var js='$locals.$line_info = "'+node.line_num+ -','+this.module+'";if($locals.$f_trace !== _b_.None){'+ -'$B.trace_line()};_b_.None;' -while_node.add($NodeJS(js))} -node.children=[] -return 0} -$ForExpr.prototype.transform_async=function(node,rank){ -var scope=$get_scope(this),target=this.tree[0],target_is_1_tuple=target.tree.length==1 && target.expect=='id',iterable=this.tree[1],num=this.loop_num,local_ns='$locals_'+scope.id.replace(/\./g,'_'),h='\n'+' '.repeat(node.indent+4) -var new_nodes=[] -var it_js=iterable.to_js(),iterable_name='$iter'+num,type_name='$type'+num,running_name='$running'+num,anext_name='$anext'+num,target_name='$target'+num,js='var '+iterable_name+' = '+it_js -new_nodes.push($NodeJS(js)) -new_nodes.push($NodeJS('var '+type_name+' = _b_.type.$factory( '+ -iterable_name+')')) -js=iterable_name+' = $B.$call($B.$getattr('+type_name+ -', "__aiter__"))('+iterable_name+')' -new_nodes.push($NodeJS(js)) -new_nodes.push($NodeJS('var '+running_name+' = true')) -new_nodes.push($NodeJS('var '+anext_name+ -' = $B.$call($B.$getattr('+type_name+', "__anext__"))')) -var while_node=$NodeJS('while('+running_name+')') -new_nodes.push(while_node) -var try_node=$NodeJS('try') -while_node.add(try_node) -if(target.tree.length==1){var js=target.to_js()+' = await ($B.promise('+ -anext_name+'('+iterable_name+')))' -try_node.add($NodeJS(js))}else{var new_node=new $Node(),ctx=new $NodeCtx(new_node),expr=new $ExprCtx(ctx,"left",false) -expr.tree.push(target) -target.parent=expr -var assign=new $AssignCtx(expr) -new $RawJSCtx(assign,'await ($B.promise('+ -anext_name+'('+iterable_name+')))') -try_node.add(new_node)} -var catch_node=$NodeJS('catch(err)') -while_node.add(catch_node) -var js='if(err.__class__ === _b_.StopAsyncIteration)'+ -'{'+running_name+' = false; continue}else{throw err}' -catch_node.add($NodeJS(js)) -node.children.forEach(function(child){while_node.add(child)}) -node.parent.children.splice(rank,1) -for(var i=new_nodes.length-1;i >=0;i--){node.parent.insert(rank,new_nodes[i])} -node.children=[] -return 0} -$ForExpr.prototype.to_js=function(){this.js_processed=true -var iterable=this.tree.pop() -return 'for ('+$to_js(this.tree)+' in '+iterable.to_js()+')'} -var $FromCtx=$B.parser.$FromCtx=function(C){ -this.type='from' -this.parent=C -this.module='' -this.names=[] -C.tree[C.tree.length]=this -this.expect='module' -this.scope=$get_scope(this)} -$FromCtx.prototype.add_name=function(name){this.names[this.names.length]=name -if(name=='*'){this.scope.blurred=true}} -$FromCtx.prototype.bind_names=function(){ -var scope=$get_scope(this) -this.names.forEach(function(name){if(Array.isArray(name)){name=name[1]} -$bind(name,scope,this)},this)} -$FromCtx.prototype.transition=function(token,value){var C=this -switch(token){case 'id': -if(C.expect=='id'){C.add_name(value) -C.expect=',' -return C} -if(C.expect=='alias'){C.names[C.names.length-1]= -[$B.last(C.names),value] -C.expect=',' -return C} -case '.': -if(C.expect=='module'){if(token=='id'){C.module+=value} -else{C.module+='.'} -return C} -case 'import': -if(C.expect=='module'){C.expect='id' -return C} -case 'op': -if(value=='*' && C.expect=='id' -&& C.names.length==0){if($get_scope(C).ntype !=='module'){$_SyntaxError(C,["import * only allowed at module level"])} -C.add_name('*') -C.expect='eol' -return C} -case ',': -if(C.expect==','){C.expect='id' -return C} -case 'eol': -switch(C.expect){case ',': -case 'eol': -C.bind_names() -return $transition(C.parent,token) -case 'id': -$_SyntaxError(C,['trailing comma not allowed without '+ -'surrounding parentheses']) -default: -$_SyntaxError(C,['invalid syntax'])} -case 'as': -if(C.expect==',' ||C.expect=='eol'){C.expect='alias' -return C} -case '(': -if(C.expect=='id'){C.expect='id' -return C} -case ')': -if(C.expect==',' ||C.expect=='id'){C.expect='eol' -return C}} -$_SyntaxError(C,'token '+token+' after '+C)} -$FromCtx.prototype.toString=function(){return '(from) '+this.module+' (import) '+this.names} -$FromCtx.prototype.to_js=function(){this.js_processed=true -var scope=$get_scope(this),module=$get_module(this),mod=module.module,res=[],pos=0,indent=$get_node(this).indent,head=' '.repeat(indent) -if(mod.startsWith("$exec")){var frame=$B.last($B.frames_stack)[1] -if(frame.module && frame.module.__name__){mod=frame.module.__name__}} -var mod_elts=this.module.split(".") -for(var i=0;i < mod_elts.length;i++){module.imports[mod_elts.slice(0,i+1).join(".")]=true} -var _mod=this.module.replace(/\$/g,''),$package,packages=[] -while(_mod.length > 0){if(_mod.charAt(0)=='.'){if($package===undefined){if($B.imported[mod]!==undefined){$package=$B.imported[mod].__package__ -packages=$package.split('.')}}else{$package=$B.imported[$package] -packages.pop()} -if($package===undefined){return 'throw _b_.SystemError.$factory("Parent module \'\' '+ -'not loaded, cannot perform relative import")'}else if($package=='None'){console.log('package is None !')} -_mod=_mod.substr(1)}else{break}} -if(_mod){packages.push(_mod)} -this.module=packages.join('.') -var mod_name=this.module.replace(/\$/g,'') -res[pos++]='var module = $B.$import("' -res[pos++]=mod_name+'",["' -var names=[] -for(var i=0,len=this.names.length;i < len;i++){if(Array.isArray(this.names[i])){names.push(this.names[i][0])}else{names.push(this.names[i])}} -res[pos++]=names.join('","')+'"], {' -var sep='' -for(var attr in this.aliases){res[pos++]=sep+'"'+attr+'": "'+this.aliases[attr]+'"' -sep=','} -res[pos++]='}, {}, true);' -if(this.names[0]=='*'){ -scope.blurred=true -res[pos++]='\n'+head+'$B.import_all($locals, module);'}else{this.names.forEach(function(name){var alias=name -if(Array.isArray(name)){alias=name[1] -name=name[0]} -module.imports[this.module+'.'+name]=true -res[pos++]='\n'+head+'$locals["'+ -alias+'"] = $B.$getattr($B.imported["'+ -mod_name+'"], "'+name+'");'},this)} -res[pos++]='\n'+head+'_b_.None;' -return res.join('');} -var $FuncArgs=$B.parser.$FuncArgs=function(C){ -this.type='func_args' -this.parent=C -this.tree=[] -this.names=[] -C.tree[C.tree.length]=this -this.expect='id' -this.has_default=false -this.has_star_arg=false -this.has_kw_arg=false} -$FuncArgs.prototype.toString=function(){return 'func args '+this.tree} -$FuncArgs.prototype.transition=function(token,value){var C=this -switch(token){case 'id': -if(C.has_kw_arg){$_SyntaxError(C,'duplicate keyword argument')} -if(C.expect=='id'){C.expect=',' -if(C.names.indexOf(value)>-1){$_SyntaxError(C,['duplicate argument '+value+ -' in function definition'])}} -return new $FuncArgIdCtx(C,value) -case ',': -if(C.expect==','){C.expect='id' -return C} -$_SyntaxError(C,'token '+token+' after '+ -C) -case ')': -var last=$B.last(C.tree) -if(last && last.type=="func_star_arg"){if(last.name=="*"){if(C.op=='*'){ -$_SyntaxError(C,['named arguments must follow bare *'])}else{$_SyntaxError(C,'invalid syntax')}}} -return C.parent -case 'op': -if(C.has_kw_arg){$_SyntaxError(C,'duplicate keyword argument')} -var op=value -C.expect=',' -if(op=='*'){if(C.has_star_arg){$_SyntaxError(C,'duplicate star argument')} -return new $FuncStarArgCtx(C,'*')}else if(op=='**'){return new $FuncStarArgCtx(C,'**')}else if(op=='/'){ -if(C.has_end_positional){$_SyntaxError(C,['duplicate / in function parameters'])}else if(C.has_star_arg){$_SyntaxError(C,['/ after * in function parameters'])} -return new $EndOfPositionalCtx(C)} -$_SyntaxError(C,'token '+op+' after '+C) -case ':': -if(C.parent.type=="lambda"){return $transition(C.parent,token)}} -$_SyntaxError(C,'token '+token+' after '+C)} -$FuncArgs.prototype.to_js=function(){this.js_processed=true -return $to_js(this.tree)} -var $FuncArgIdCtx=$B.parser.$FuncArgIdCtx=function(C,name){ -this.type='func_arg_id' -this.name=name -this.parent=C -if(C.has_star_arg){C.parent.after_star.push(name)}else{C.parent.positional_list.push(name)} -var node=$get_node(this) -if(node.binding[name]){$_SyntaxError(C,["duplicate argument '"+name+"' in function definition"])} -$bind(name,node,this) -this.tree=[] -C.tree[C.tree.length]=this -var ctx=C -while(ctx.parent !==undefined){if(ctx.type=='def'){ctx.locals.push(name) -break} -ctx=ctx.parent} -this.expect='='} -$FuncArgIdCtx.prototype.toString=function(){return 'func arg id '+this.name+'='+this.tree} -$FuncArgIdCtx.prototype.transition=function(token,value){var C=this -switch(token){case '=': -if(C.expect=='='){C.has_default=true -var def_ctx=C.parent.parent -if(C.parent.has_star_arg){def_ctx.default_list.push(def_ctx.after_star.pop())}else{def_ctx.default_list.push(def_ctx.positional_list.pop())} -return new $AbstractExprCtx(C,false)} -break -case ',': -case ')': -if(C.parent.has_default && C.tree.length==0 && -C.parent.has_star_arg===undefined){$pos-=C.name.length -$_SyntaxError(C,['non-default argument follows default argument'])}else{return $transition(C.parent,token)} -case ':': -if(C.parent.parent.type=="lambda"){ -return $transition(C.parent.parent,":")} -if(C.has_default){ -$_SyntaxError(C,'token '+token+' after '+ -C)} -return new $AbstractExprCtx(new $AnnotationCtx(C),false)} -$_SyntaxError(C,'token '+token+' after '+C)} -$FuncArgIdCtx.prototype.to_js=function(){this.js_processed=true -return this.name+$to_js(this.tree)} -var $FuncStarArgCtx=$B.parser.$FuncStarArgCtx=function(C,op){ -this.type='func_star_arg' -this.op=op -this.parent=C -this.node=$get_node(this) -C.has_star_arg=op=='*' -C.has_kw_arg=op=='**' -C.tree[C.tree.length]=this} -$FuncStarArgCtx.prototype.toString=function(){return '(func star arg '+this.op+') '+this.name} -$FuncStarArgCtx.prototype.transition=function(token,value){var C=this -switch(token){case 'id': -if(C.name===undefined){if(C.parent.names.indexOf(value)>-1){$_SyntaxError(C,['duplicate argument '+value+ -' in function definition'])}} -C.set_name(value) -C.parent.names.push(value) -return C -case ',': -case ')': -if(C.name===undefined){ -C.set_name('*') -C.parent.names.push('*')} -return $transition(C.parent,token) -case ':': -if(C.parent.parent.type=="lambda"){ -return $transition(C.parent.parent,":")} -if(C.name===undefined){$_SyntaxError(C,'annotation on an unnamed parameter')} -return new $AbstractExprCtx( -new $AnnotationCtx(C),false)} -$_SyntaxError(C,'token '+token+' after '+C)} -$FuncStarArgCtx.prototype.set_name=function(name){this.name=name -if(this.node.binding[name]){$_SyntaxError(C,["duplicate argument '"+name+"' in function definition"])} -$bind(name,this.node,this) -var ctx=this.parent -while(ctx.parent !==undefined){if(ctx.type=='def'){ctx.locals.push(name) -break} -ctx=ctx.parent} -if(this.op=='*'){ctx.other_args='"'+name+'"'} -else{ctx.other_kw='"'+name+'"'}} -var $GlobalCtx=$B.parser.$GlobalCtx=function(C){ -this.type='global' -this.parent=C -this.tree=[] -C.tree[C.tree.length]=this -this.expect='id' -this.scope=$get_scope(this) -this.scope.globals=this.scope.globals ||new Set() -this.module=$get_module(this) -while(this.module.module !=this.module.id){this.module=this.module.parent_block} -this.module.binding=this.module.binding ||{}} -$GlobalCtx.prototype.toString=function(){return 'global '+this.tree} -$GlobalCtx.prototype.transition=function(token,value){var C=this -switch(token){case 'id': -if(C.expect=='id'){new $IdCtx(C,value) -C.add(value) -C.expect=',' -return C} -break -case ',': -if(C.expect==','){C.expect='id' -return C} -break -case 'eol': -if(C.expect==','){return $transition(C.parent,token)} -break} -$_SyntaxError(C,'token '+token+' after '+C)} -$GlobalCtx.prototype.add=function(name){if(this.scope.annotations && this.scope.annotations.has(name)){$_SyntaxError(C,["annotated name '"+name+ -"' can't be global"])} -this.scope.globals.add(name) -var mod=this.scope.parent_block -if(this.module.module.startsWith("$exec")){while(mod && mod.parent_block !==this.module){ -mod._globals=mod._globals ||{} -mod._globals[name]=this.module.id -delete mod.binding[name] -mod=mod.parent_block}} -this.module.binding[name]=true} -$GlobalCtx.prototype.to_js=function(){this.js_processed=true -return ''} -var $IdCtx=$B.parser.$IdCtx=function(C,value){ -this.type='id' -this.value=$mangle(value,C) -this.parent=C -this.tree=[] -C.tree[C.tree.length]=this -var scope=this.scope=$get_scope(this) -this.blurred_scope=this.scope.blurred -this.env=clone(this.scope.binding) -if(["def","generator"].indexOf(scope.ntype)>-1){scope.referenced=scope.referenced ||{} -if(! $B.builtins[this.value]){scope.referenced[this.value]=true}} -if(C.parent.type=='call_arg'){this.call_arg=true} -var ctx=C -while(ctx.parent !==undefined){switch(ctx.type){case 'ctx_manager_alias': -$bind(value,scope,this) -break -case 'list_or_tuple': -case 'dict_or_set': -case 'call_arg': -case 'def': -case 'lambda': -if(ctx.vars===undefined){ctx.vars=[value]} -else if(ctx.vars.indexOf(value)==-1){ctx.vars.push(value)} -if(this.call_arg&&ctx.type=='lambda'){if(ctx.locals===undefined){ctx.locals=[value]} -else{ctx.locals.push(value)}}} -ctx=ctx.parent} -if($parent_match(C,{type:'target_list'})){ -this.no_bindings=true -$bind(value,scope,this) -this.bound=true} -if(["def","generator"].indexOf(scope.ntype)>-1){ -var _ctx=this.parent -while(_ctx){if(_ctx.type=='list_or_tuple' && _ctx.is_comp()){this.in_comp=true -break} -_ctx=_ctx.parent} -if(C.type=='expr' && C.parent.type=='comp_if'){}else if(C.type=='global'){if(scope.globals===undefined){scope.globals=new Set([value])}else{scope.globals.add(value)}}}} -$IdCtx.prototype.toString=function(){return '(id) '+this.value+':'+(this.tree ||'')} -$IdCtx.prototype.transition=function(token,value){var C=this -switch(token){case '=': -if(C.parent.type=='expr' && -C.parent.parent !==undefined && -C.parent.parent.type=='call_arg'){return new $AbstractExprCtx( -new $KwArgCtx(C.parent),false)} -return $transition(C.parent,token,value) -case 'op': -return $transition(C.parent,token,value) -case 'id': -case 'str': -case 'int': -case 'float': -case 'imaginary': -if(["print","exec"].indexOf(C.value)>-1 ){$_SyntaxError(C,["missing parenthesis in call to '"+ -C.value+"'"])} -$_SyntaxError(C,'token '+token+' after '+ -C)} -if(this.parent.parent.type=="packed"){if(['.','[','('].indexOf(token)==-1){return this.parent.parent.transition(token,value)}} -return $transition(C.parent,token,value)} -$IdCtx.prototype.firstBindingScopeId=function(){ -var scope=this.scope,found=[],nb=0 -while(scope){if(scope.globals && scope.globals.has(this.value)){return $get_module(this).id} -if(scope.binding && scope.binding[this.value]){return scope.id} -scope=scope.parent}} -$IdCtx.prototype.boundBefore=function(scope){ -var node=$get_node(this),found=false -var $test=false -if($test){console.log(this.value,"bound before") -console.log("node",node)} -while(!found && node.parent){var pnode=node.parent -if(pnode.bindings && pnode.bindings[this.value]){if($test){console.log("bound in",pnode)} -return pnode.bindings[this.value]} -for(var i=0;i < pnode.children.length;i++){var child=pnode.children[i] -if(child===node){break} -if(child.bindings && child.bindings[this.value]){if($test){console.log("bound in child",child)} -return child.bindings[this.value]}} -if(pnode===scope){break} -node=pnode} -return found} -$IdCtx.prototype.bindingType=function(scope){ -var nb=0,node=$get_node(this),found=false,unknown,ix -while(!found && node.parent && nb++< 100){var pnode=node.parent -if(pnode.bindings && pnode.bindings[this.value]){return pnode.bindings[this.value]} -for(var i=0;i < pnode.children.length;i++){var child=pnode.children[i] -if(child===node){break} -if(child.bindings && child.bindings[this.value]){found=child.bindings[this.value] -ix=i}} -if(found){for(var j=ix+1;j < pnode.children.length;j++){child=pnode.children[j] -if(child.children.length > 0){unknown=true -break}else if(child===node){break}} -return unknown ||found} -if(pnode===scope){break} -node=pnode} -return found} -$IdCtx.prototype.to_js=function(arg){ -if(this.result !==undefined && this.scope.ntype=='generator'){return this.result} -var val=this.value -var $test=false -if($test){console.log("this",this)} -if(val=='__BRYTHON__' ||val=='$B'){return val} -if(val.startsWith("comp_result_"+$B.lambda_magic)){if(this.bound){return "var "+val} -return val} -this.js_processed=true -if(this.scope._globals && this.scope._globals[val]){this.global_module=this.scope._globals[val]} -if(this.global_module){return '$locals_'+this.global_module.replace(/\./g,"_")+ -'["'+val+'"]'} -var is_local=this.scope.binding[val]!==undefined,this_node=$get_node(this),bound_before=this_node.bound_before -this.nonlocal=this.scope.nonlocals && -this.scope.nonlocals[val]!==undefined -this.unbound=this.unbound ||(is_local && !this.bound && -bound_before && bound_before.indexOf(val)==-1) -if((!this.bound)&& this.scope.C -&& this.scope.ntype=='class' && -this.scope.C.tree[0].name==val){ -return '$B.$search("'+val+'")'} -if(this.unbound && !this.nonlocal){if(this.scope.ntype=='def' ||this.scope.ntype=='generator'){return '$B.$local_search("'+val+'")'}else{return '$B.$search("'+val+'")'}} -var innermost=$get_scope(this),scope=innermost,found=[] -var search_ids=['"'+innermost.id+'"'] -var gs=innermost -while(true){if($test){console.log(gs.id,gs)} -if(gs.parent_block){if(gs.parent_block==$B.builtins_scope){break} -else if(gs.parent_block.id===undefined){break} -gs=gs.parent_block} -search_ids.push('"'+gs.id+'"')} -search_ids="["+search_ids.join(", ")+"]" -if(innermost.globals && innermost.globals.has(val)){search_ids=['"'+gs.id+'"'] -innermost=gs} -if($test){console.log("search ids",search_ids)} -if(this.nonlocal ||this.bound){var bscope=this.firstBindingScopeId() -if($test){console.log("binding",bscope)} -if(bscope !==undefined){return "$locals_"+bscope.replace(/\./g,"_")+'["'+ -val+'"]'}else if(this.bound){return "$locals_"+innermost.id.replace(/\./g,"_")+ -'["'+val+'"]'}} -var global_ns='$locals_'+gs.id.replace(/\./g,'_') -while(1){if(scope.globals !==undefined && -scope.globals.has(val)){if($test){console.log("in globals of",scope.id)} -if(this.boundBefore(gs)){if($test){console.log("bound before in gs",gs)} -return global_ns+'["'+val+'"]'}else{if($test){console.log("use global search",this)} -if(this.augm_assign){return global_ns+'["'+val+'"]'}else{return '$B.$global_search("'+val+'", '+ -search_ids+')'}}} -if($test){console.log("scope",scope,"innermost",innermost,scope===innermost,"bound_before",bound_before,"found",found.slice())} -if(scope===innermost){ -if(bound_before){if(bound_before.indexOf(val)>-1){found.push(scope)} -else if(scope.C && -scope.C.tree[0].type=='def' && -scope.C.tree[0].env.indexOf(val)>-1){found.push(scope)}}else{if(scope.binding[val]){ -if(this_node.locals[val]===undefined){ -if(!scope.is_comp && -(!scope.parent_block || -!scope.parent_block.is_comp)){ -found.push(scope)}}else{found.push(scope) -break} -if($test){console.log(val,"found in",scope.id)}}}}else{if(scope.binding===undefined){console.log("scope",scope,val,"no binding",innermost)} -if(scope.binding[val]){found.push(scope)}} -if(scope.parent_block){scope=scope.parent_block} -else{break}} -this.found=found -if($test){console.log("found",found) -found.forEach(function(item){console.log(item.id)})} -if(this.nonlocal && found[0]===innermost){found.shift()} -if(found.length > 0){ -if(found[0].C && found[0]===innermost -&& val.charAt(0)!='$'){var locs=this_node.locals ||{},nonlocs=innermost.nonlocals -try{if(locs[val]===undefined && -! this.augm_assign && -((innermost.type !='def' || -innermost.type !='generator')&& -innermost.ntype !='class' && -innermost.C.tree[0].args && -innermost.C.tree[0].args.indexOf(val)==-1)&& -(nonlocs===undefined ||nonlocs[val]===undefined)){if($test){console.log("$local search",val,"found",found,"innermost",innermost,"this",this)} -this.result='$B.$local_search("'+val+'")' -return this.result}}catch(err){console.log("error",val,innermost) -throw err}} -if(found.length > 1 && found[0].C){if(found[0].C.tree[0].type=='class'){var ns0='$locals_'+found[0].id.replace(/\./g,'_'),ns1='$locals_'+found[1].id.replace(/\./g,'_'),res -if(bound_before){if(bound_before.indexOf(val)>-1){this.found=found[0].binding[val] -res=ns0}else{this.found=found[1].binding[val] -res=ns1} -this.result=res+'["'+val+'"]' -return this.result}else{this.found=false -var res=ns0+'["'+val+'"] !== undefined ? ' -res+=ns0+'["'+val+'"] : ' -this.result="("+res+ns1+'["'+val+'"])' -return this.result}}} -var scope=found[0] -this.found=scope.binding[val] -var scope_ns='$locals_'+scope.id.replace(/\./g,'_') -if(scope.C===undefined){if($test){console.log("module level",scope.id,scope.module)} -if(scope.id=='__builtins__'){if(gs.blurred){ -val='('+global_ns+'["'+val+'"] || _b_.'+val+')'}else{ -val='_b_.'+val -this.is_builtin=true}}else{ -if($test){console.log("name found at module level")} -if(this.bound ||this.augm_assign){ -val=scope_ns+'["'+val+'"]'}else{if(scope===innermost && this.env[val]===undefined){ -this.result='$B.$search("'+val+'")' -return this.result}else{if($test){console.log("boudn before ?",scope,this.boundBefore(scope))} -if(this.boundBefore(scope)){ -val=scope_ns+'["'+val+'"]'}else{ -if($test){console.log("use check def",scope)} -val='$B.$check_def("'+val+'",'+ -scope_ns+'["'+val+'"])'}}}}}else if(scope===innermost){if($test){console.log("scope is innermost",scope.id)} -if(scope.globals && scope.globals.has(val)){val=global_ns+'["'+val+'"]'}else if(!this.bound && !this.augm_assign){ -if(this.boundBefore(scope)){val='$locals["'+val+'"]'}else{val='$B.$check_def_local("'+val+'",$locals["'+ -val+'"])'}}else{val='$locals["'+val+'"]'}}else if(!this.augm_assign){ -val='$B.$check_def_free("'+val+'",'+scope_ns+ -'["'+val+'"])'}else{val=scope_ns+'["'+val+'"]'} -this.result=val+$to_js(this.tree,'') -return this.result}else{ -this.unknown_binding=true -this.result='$B.$global_search("'+val+'", '+search_ids+')' -return this.result}} -var $ImportCtx=$B.parser.$ImportCtx=function(C){ -this.type='import' -this.parent=C -this.tree=[] -C.tree[C.tree.length]=this -this.expect='id'} -$ImportCtx.prototype.toString=function(){return 'import '+this.tree} -$ImportCtx.prototype.transition=function(token,value){var C=this -switch(token){case 'id': -if(C.expect=='id'){new $ImportedModuleCtx(C,value) -C.expect=',' -return C} -if(C.expect=='qual'){C.expect=',' -C.tree[C.tree.length-1].name+= -'.'+value -C.tree[C.tree.length-1].alias+= -'.'+value -return C} -if(C.expect=='alias'){C.expect=',' -C.tree[C.tree.length-1].alias= -value -return C} -break -case '.': -if(C.expect==','){C.expect='qual' -return C} -break -case ',': -if(C.expect==','){C.expect='id' -return C} -break -case 'as': -if(C.expect==','){C.expect='alias' -return C} -break -case 'eol': -if(C.expect==','){C.bind_names() -return $transition(C.parent,token)} -break} -$_SyntaxError(C,'token '+token+' after '+C)} -$ImportCtx.prototype.bind_names=function(){ -var scope=$get_scope(this) -this.tree.forEach(function(item){if(item.name==item.alias){var name=item.name,parts=name.split('.'),bound=name -if(parts.length>1){bound=parts[0]}}else{bound=item.alias} -$bind(bound,scope,this)},this)} -$ImportCtx.prototype.to_js=function(){this.js_processed=true -var scope=$get_scope(this),res=[],module=$get_module(this) -this.tree.forEach(function(item){var mod_name=item.name,aliases=(item.name==item.alias)? -'{}' :('{"'+mod_name+'" : "'+ -item.alias+'"}'),localns='$locals_'+scope.id.replace(/\./g,'_'),mod_elts=item.name.split(".") -for(var i=0;i < mod_elts.length;i++){module.imports[mod_elts.slice(0,i+1).join(".")]=true} -var js='$B.$import("'+mod_name+'", [],'+aliases+ -','+localns+', true);' -res.push(js)}) -return res.join('')+'_b_.None;'} -var $ImportedModuleCtx=$B.parser.$ImportedModuleCtx=function(C,name){this.type='imported module' -this.parent=C -this.name=name -this.alias=name -C.tree[C.tree.length]=this} -$ImportedModuleCtx.prototype.toString=function(){return ' (imported module) '+this.name} -$ImportedModuleCtx.prototype.transition=function(token,value){var C=this} -$ImportedModuleCtx.prototype.to_js=function(){this.js_processed=true -return '"'+this.name+'"'} -var $JSCode=$B.parser.$JSCode=function(js){this.js=js} -$JSCode.prototype.toString=function(){return this.js} -$JSCode.prototype.transition=function(token,value){var C=this} -$JSCode.prototype.to_js=function(){this.js_processed=true -return this.js} -var $KwArgCtx=$B.parser.$KwArgCtx=function(C){ -this.type='kwarg' -this.parent=C.parent -this.tree=[C.tree[0]] -C.parent.tree.pop() -C.parent.tree.push(this) -C.parent.parent.has_kw=true -var value=this.tree[0].value -var ctx=C.parent.parent -if(ctx.kwargs===undefined){ctx.kwargs=[value]} -else if(ctx.kwargs.indexOf(value)==-1){ctx.kwargs.push(value)} -else{$_SyntaxError(C,['keyword argument repeated'])}} -$KwArgCtx.prototype.toString=function(){return 'kwarg '+this.tree[0]+'='+this.tree[1]} -$KwArgCtx.prototype.transition=function(token,value){var C=this -if(token==','){return new $CallArgCtx(C.parent.parent)} -return $transition(C.parent,token)} -$KwArgCtx.prototype.to_js=function(){this.js_processed=true -var key=this.tree[0].value -if(key.substr(0,2)=='$$'){key=key.substr(2)} -var res='{$nat:"kw",name:"'+key+'",' -return res+'value:'+ -$to_js(this.tree.slice(1,this.tree.length))+'}'} -var $LambdaCtx=$B.parser.$LambdaCtx=function(C){ -this.type='lambda' -this.parent=C -C.tree[C.tree.length]=this -this.tree=[] -this.args_start=$pos+6 -this.vars=[] -this.locals=[] -this.node=$get_node(this) -this.node.binding={} -this.positional_list=[] -this.default_list=[] -this.other_args=null -this.other_kw=null -this.after_star=[]} -$LambdaCtx.prototype.toString=function(){return '(lambda) '+this.args_start+' '+this.body_start} -$LambdaCtx.prototype.transition=function(token,value){var C=this -if(token==':' && C.args===undefined){C.args=C.tree -C.tree=[] -C.body_start=$pos -return new $AbstractExprCtx(C,false)}if(C.args !==undefined){ -C.body_end=$pos -return $transition(C.parent,token)} -if(C.args===undefined && token !="("){return $transition(new $FuncArgs(C),token,value)} -$_SyntaxError(C,'token '+token+' after '+C)} -$LambdaCtx.prototype.to_js=function(){this.js_processed=true -var C=this.parent,node=this.node,module=$get_module(this),src=$get_src(C),args=src.substring(this.args_start,this.body_start),body=src.substring(this.body_start+1,this.body_end) -body=body.replace(/\\\n/g,' ') -body=body.replace(/\n/g,' ') -var scope=$get_scope(this) -var rand=$B.UUID(),func_name='lambda_'+$B.lambda_magic+'_'+rand,py='def '+func_name+'('+args+'):' -py+=' return '+body -var lambda_name='lambda'+rand,module_name=module.id.replace(/\./g,'_') -var root=$B.py2js(py,module_name,lambda_name,scope,node.line_num) -var js=root.to_js() -var params=`$locals_${lambda_name}`,args="{}" -if(module.is_comp){ -params+=`,$locals_${module.id.replace(/\./g,'_')}` -args+=', {}'} -js=`(function(${params}){\n`+js+ -`\nreturn $locals.${func_name}})(${args})` -$B.clear_ns(lambda_name) -$B.$py_src[lambda_name]=null -delete $B.$py_src[lambda_name] -return js} -var $ListOrTupleCtx=$B.parser.$ListOrTupleCtx=function(C,real){ -this.type='list_or_tuple' -this.start=$pos -this.real=real -this.expect='id' -this.closed=false -this.parent=C -this.tree=[] -C.tree[C.tree.length]=this} -$ListOrTupleCtx.prototype.toString=function(){switch(this.real){case 'list': -return '(list) ['+this.tree+']' -case 'list_comp': -case 'gen_expr': -return '('+this.real+') ['+this.intervals+'-'+ -this.tree+']' -default: -return '(tuple) ('+this.tree+')'}} -$ListOrTupleCtx.prototype.transition=function(token,value){var C=this -if(C.closed){if(token=='['){return new $AbstractExprCtx( -new $SubCtx(C.parent),false)} -if(token=='('){return new $CallCtx(C.parent)} -return $transition(C.parent,token,value)}else{if(C.expect==','){switch(C.real){case 'tuple': -case 'gen_expr': -if(token==')'){var close=true -while(C.type=="list_or_tuple" && -C.real=="tuple" && -C.parent.type=="expr" && -C.parent.parent.type=="node" && -C.tree.length==1){ -close=false -var node=C.parent.parent,ix=node.tree.indexOf(C.parent),expr=C.tree[0] -expr.parent=node -expr.$in_parens=true -node.tree.splice(ix,1,expr) -C=expr.tree[0]} -if(close){C.close()} -if(C.real=='gen_expr'){ -if(C.expression.yields){for(const _yield of C.expression.yields){$pos=_yield[1] -$_SyntaxError(C,["'yield' inside generator expression"])}} -C.intervals.push($pos)} -if(C.parent.type=="packed"){return C.parent.parent} -return C.parent} -break -case 'list': -case 'list_comp': -if(token==']'){C.close() -if(C.real=='list_comp'){ -if(C.expression.yields){for(const _yield of C.expression.yields){$pos=_yield[1] -$_SyntaxError(C,["'yield' inside list comprehension"])}} -C.intervals.push($pos)} -if(C.parent.type=="packed"){if(C.parent.tree.length > 0){return C.parent.tree[0]}else{return C.parent.parent}} -return C.parent} -break -case 'dict_or_set_comp': -if(token=='}'){ -if(C.expression.yields){for(const _yield of C.expression.yields){$pos=_yield[1] -var comp_type=C.parent.real=="set_comp" ? -"set" :"dict" -$_SyntaxError(C,[`'yield' inside ${comp_type}comprehension`])}} -C.intervals.push($pos) -return $transition(C.parent,token)} -break} -switch(token){case ',': -if(C.real=='tuple'){C.has_comma=true} -C.expect='id' -return C -case 'for': -if(C.real=='list'){if(this.tree.length > 1){ -$_SyntaxError(C,"unparenthesized "+ -"expression before 'for'")} -C.real='list_comp'} -else{C.real='gen_expr'} -C.intervals=[C.start+1] -C.expression=C.tree -if(C.yields){C.expression.yields=C.yields -delete C.yields} -C.tree=[] -var comp=new $ComprehensionCtx(C) -return new $TargetListCtx(new $CompForCtx(comp))} -return $transition(C.parent,token,value)}else if(C.expect=='id'){switch(C.real){case 'tuple': -if(token==')'){C.close() -return C.parent} -if(token=='eol' && C.implicit===true){C.close() -return $transition(C.parent,token)} -break -case 'gen_expr': -if(token==')'){C.close() -return $transition(C.parent,token)} -break -case 'list': -if(token==']'){C.close() -return C} -break} -switch(token){case '=': -if(C.real=='tuple' && -C.implicit===true){C.close() -C.parent.tree.pop() -var expr=new $ExprCtx(C.parent,'tuple',false) -expr.tree=[C] -C.parent=expr -return $transition(C.parent,token)} -break -case ')': -break -case ']': -if(C.real=='tuple' && -C.implicit===true){ -return $transition(C.parent,token,value)}else{break} -case ',': -$_SyntaxError(C,'unexpected comma inside list') -default: -C.expect=',' -var expr=new $AbstractExprCtx(C,false) -return $transition(expr,token,value)}}else{return $transition(C.parent,token,value)}}} -$ListOrTupleCtx.prototype.close=function(){this.closed=true -for(var i=0,len=this.tree.length;i < len;i++){ -var elt=this.tree[i] -if(elt.type=="expr" && -elt.tree[0].type=="list_or_tuple" && -elt.tree[0].real=="tuple" && -elt.tree[0].tree.length==1 && -elt.tree[0].expect==","){this.tree[i]=elt.tree[0].tree[0] -this.tree[i].parent=this}}} -$ListOrTupleCtx.prototype.is_comp=function(){switch(this.real){case 'list_comp': -case 'gen_expr': -case 'dict_or_set_comp': -return true} -return false} -$ListOrTupleCtx.prototype.get_src=function(){ -var src=$get_module(this).src -var scope=$get_scope(this) -if(scope.comments===undefined){return src} -scope.comments.forEach(function(comment){var start=comment[0],len=comment[1] -src=src.substr(0,start)+' '.repeat(len+1)+ -src.substr(start+len+1)}) -return src} -$ListOrTupleCtx.prototype.bind_ids=function(scope){ -this.tree.forEach(function(item){if(item.type=='id'){$bind(item.value,scope,this) -item.bound=true}else if(item.type=='expr' && item.tree[0].type=="id"){$bind(item.tree[0].value,scope,this) -item.tree[0].bound=true}else if(item.type=='expr' && item.tree[0].type=="packed"){var ctx=item.tree[0].tree[0] -if(ctx.type=='expr' && ctx.tree[0].type=='id'){$bind(ctx.tree[0].value,scope,this) -ctx.tree[0].bound=true}}else if(item.type=='list_or_tuple' || -(item.type=="expr" && -item.tree[0].type=='list_or_tuple')){if(item.type=="expr"){item=item.tree[0]} -item.bind_ids(scope)}},this)} -$ListOrTupleCtx.prototype.packed_indices=function(){var ixs=[] -for(var i=0;i < this.tree.length;i++){var t=this.tree[i] -if(t.type=="expr"){t=t.tree[0] -if(t.type=="packed" || -(t.type=="call" && t.func.type=="packed")){ixs.push(i)}}} -return ixs} -$ListOrTupleCtx.prototype.unpack=function(packed){var js="",res -for(var i=0;i < this.tree.length;i++){if(packed.indexOf(i)>-1){res="_b_.list.$factory("+this.tree[i].to_js()+")"}else{res="["+this.tree[i].to_js()+"]"} -if(i > 0){res=".concat("+res+")"} -js+=res} -return js} -$ListOrTupleCtx.prototype.to_js=function(){this.js_processed=true -var scope=$get_scope(this),sc=scope,scope_id=scope.id.replace(/\//g, '_'), - pos = 0 - var root = $get_module(this), - module_name = root.module - switch(this.real) { - case 'list': - var packed = this.packed_indices() - if(packed.length > 0){ - return '$B.$list(' + this.unpack(packed) + ')' - } - return '$B.$list([' + $to_js(this.tree) + '])' - case 'list_comp': - case 'gen_expr': - case 'dict_or_set_comp': - var src = this.get_src() - var res1 = [], items = [] - var qesc = new RegExp('"', "g") //to escape double quotes in arguments -var comments=root.comments -for(var i=1;i < this.intervals.length;i++){var start=this.intervals[i-1],end=this.intervals[i],txt=src.substring(start,end) -for(var j=comments.length-1;j >=0;j--){var comment=comments[j] -if(comment[0]> start && comment[0]< end){ -var pos=comment[0]-start -txt=txt.substr(0,pos)+ -' '.repeat(comment[1])+ -txt.substr(pos+comment[1]+1)}} -txt=txt.replace(/\\\n/g," ") -items.push(txt) -var lines=txt.split('\n') -var res2=[] -lines.forEach(function(txt){ -if(txt.replace(/ /g,'').length !=0){txt=txt.replace(/\n/g,' ') -txt=txt.replace(/\\/g,'\\\\') -txt=txt.replace(qesc,'\\"') -res2.push('"'+txt+'"')}}) -res1.push('['+res2.join(',')+']')} -var line_num=$get_node(this).line_num -switch(this.real){case 'list_comp': -var lc=$B.$list_comp(items), -py=lc[0],ix=lc[1],listcomp_name='lc'+$B.lambda_magic+ix,save_pos=$pos,line_info=line_num+','+module_name -var root=$B.py2js( -{src:py,is_comp:true,line_info:line_info},module_name,listcomp_name,scope,1) -var outermost_expr=root.outermost_expr -if($get_node(this).has_yield){outermost_expr=this.tree[0].tree[0].tree[1]} -if(outermost_expr===undefined){outermost_expr=root.first_for.tree[1]} -var outer_most=outermost_expr.to_js() -$pos=save_pos -var js=root.to_js() -root=null -$B.clear_ns(listcomp_name) -delete $B.$py_src[listcomp_name] -js+='return $locals_'+listcomp_name+'["x'+ix+'"]' -js=`function(expr){${js}})(${outer_most})` -if(this.is_await){js='async '+js} -return '('+js -case 'dict_or_set_comp': -if(this.expression.length==1){return $B.$gen_expr(module_name,scope,items,line_num,true)} -return $B.$dict_comp(module_name,scope,items,line_num)} -return $B.$gen_expr(module_name,scope,items,line_num) -case 'tuple': -var packed=this.packed_indices() -if(packed.length > 0){return '$B.fast_tuple('+this.unpack(packed)+')'} -if(this.tree.length==1 && this.has_comma===undefined){return this.tree[0].to_js()} -return '$B.fast_tuple(['+$to_js(this.tree)+'])'}} -var $NodeCtx=$B.parser.$NodeCtx=function(node){ -this.node=node -node.C=this -this.tree=[] -this.type='node' -var scope=null -var tree_node=node -while(tree_node.parent && tree_node.parent.type !='module'){var ntype=tree_node.parent.C.tree[0].type,_break_flag=false -switch(ntype){case 'def': -case 'class': -case 'generator': -scope=tree_node.parent -_break_flag=true} -if(_break_flag){break} -tree_node=tree_node.parent} -if(scope===null){scope=tree_node.parent ||tree_node } -this.node.locals=clone(scope.binding) -this.scope=scope} -$NodeCtx.prototype.toString=function(){return 'node '+this.tree} -$NodeCtx.prototype.transition=function(token,value){var C=this -switch(token){case 'id': -case 'imaginary': -case 'int': -case 'float': -case 'str': -case 'bytes': -case '[': -case '(': -case '{': -case 'not': -case 'lambda': -case '.': -var expr=new $AbstractExprCtx(C,true) -return $transition(expr,token,value) -case 'op': -switch(value){case '*': -case '+': -case '-': -case '~': -var expr=new $AbstractExprCtx(C,true) -return $transition(expr,token,value)} -break -case 'async': -return new $AsyncCtx(C) -case 'await': -return new $AbstractExprCtx(new $AwaitCtx(C),true) -case 'class': -return new $ClassCtx(C) -case 'continue': -return new $ContinueCtx(C) -case '__debugger__': -return new $DebuggerCtx(C) -case 'break': -return new $BreakCtx(C) -case 'def': -return new $DefCtx(C) -case 'for': -return new $TargetListCtx(new $ForExpr(C)) -case 'if': -case 'while': -return new $AbstractExprCtx( -new $ConditionCtx(C,token),false) -case 'elif': -var previous=$previous(C) -if(['condition'].indexOf(previous.type)==-1 || -previous.token=='while'){$_SyntaxError(C,'elif after '+previous.type)} -return new $AbstractExprCtx( -new $ConditionCtx(C,token),false) -case 'else': -var previous=$previous(C) -if(['condition','except','for']. -indexOf(previous.type)==-1){$_SyntaxError(C,'else after '+previous.type)} -return new $SingleKwCtx(C,token) -case 'finally': -var previous=$previous(C) -if(['try','except'].indexOf(previous.type)==-1 && -(previous.type !='single_kw' || -previous.token !='else')){$_SyntaxError(C,'finally after '+previous.type)} -return new $SingleKwCtx(C,token) -case 'try': -return new $TryCtx(C) -case 'except': -var previous=$previous(C) -if(['try','except'].indexOf(previous.type)==-1){$_SyntaxError(C,'except after '+previous.type)} -return new $ExceptCtx(C) -case 'assert': -return new $AbstractExprCtx( -new $AssertCtx(C),'assert',true) -case 'from': -return new $FromCtx(C) -case 'import': -return new $ImportCtx(C) -case 'global': -return new $GlobalCtx(C) -case 'nonlocal': -return new $NonlocalCtx(C) -case 'lambda': -return new $LambdaCtx(C) -case 'pass': -return new $PassCtx(C) -case 'raise': -return new $AbstractExprCtx(new $RaiseCtx(C),true) -case 'return': -return new $AbstractExprCtx(new $ReturnCtx(C),true) -case 'with': -return new $AbstractExprCtx(new $WithCtx(C),false) -case 'yield': -return new $AbstractExprCtx(new $YieldCtx(C),true) -case 'del': -return new $AbstractExprCtx(new $DelCtx(C),true) -case '@': -return new $DecoratorCtx(C) -case ',': -if(C.tree && C.tree.length==0){$_SyntaxError(C,'token '+token+' after '+C)} -var first=C.tree[0] -C.tree=[] -var implicit_tuple=new $ListOrTupleCtx(C) -implicit_tuple.real="tuple" -implicit_tuple.implicit=0 -implicit_tuple.tree.push(first) -first.parent=implicit_tuple -return implicit_tuple -case 'eol': -if(C.tree.length==0){ -C.node.parent.children.pop() -return C.node.parent.C} -return C} -$_SyntaxError(C,'token '+token+' after '+C)} -$NodeCtx.prototype.to_js=function(){if(this.js !==undefined){return this.js} -this.js_processed=true -if(this.tree.length > 1){var new_node=new $Node() -var ctx=new $NodeCtx(new_node) -ctx.tree=[this.tree[1]] -new_node.indent=node.indent+4 -this.tree.pop() -node.add(new_node)} -this.js="" -if(this.tree[0]){var is_not_def=this.scope.ntype !="def" -if(this.tree[0].annotation){ -if(is_not_def){if(this.tree[0].type=="expr" && -! this.tree[0].$in_parens && -this.tree[0].tree[0].type=="id"){var js="" -if(this.create_annotations){js+="$locals.__annotations__ = $B.empty_dict();"} -return js+"_b_.dict.$setitem($locals.__annotations__, '"+ -this.tree[0].tree[0].value+"', "+ -this.tree[0].annotation.to_js()+");"}else if(this.tree[0].type=="def"){ -this.js=this.tree[0].annotation.to_js()+";"}else{ -this.js="" -this.tree=[]}}else if(this.tree[0].type !="def"){ -this.tree=[]}}else if(this.tree[0].type=="assign" && -! this.tree[0].tree[0].$in_parens && -this.tree[0].tree[0].annotation){ -var left=this.tree[0].tree[0],right=this.tree[0].tree[1] -if(this.create_annotations){this.js+="$locals.__annotations__ = $B.empty_dict();"} -this.js+="var $value = "+right.to_js()+";" -this.tree[0].tree.splice(1,1) -new $RawJSCtx(this.tree[0],"$value") -if(left.tree[0]&& left.tree[0].type=="id" && is_not_def){this.js+="_b_.dict.$setitem($locals.__annotations__, '"+ -left.tree[0].value+"', "+ -left.annotation.to_js()+");"}else{ -this.js+=$to_js(this.tree)+";" -if(is_not_def){this.js+=left.annotation.to_js()} -return this.js}}} -if(this.node.children.length==0){this.js+=$to_js(this.tree)+';'}else{this.js+=$to_js(this.tree)} -return this.js} -var $NodeJS=$B.parser.$NodeJS=function(js){var node=new $Node() -new $NodeJSCtx(node,js) -return node} -var $NodeJSCtx=$B.parser.$NodeJSCtx=function(node,js){ -this.node=node -node.C=this -this.type='node_js' -this.tree=[js]} -$NodeJSCtx.prototype.toString=function(){return 'js '+js} -$NodeJSCtx.prototype.to_js=function(){this.js_processed=true -return this.tree[0]} -var $NonlocalCtx=$B.parser.$NonlocalCtx=function(C){ -this.type='nonlocal' -this.parent=C -this.tree=[] -this.names={} -C.tree[C.tree.length]=this -this.expect='id' -this.scope=$get_scope(this) -this.scope.nonlocals=this.scope.nonlocals ||{} -if(this.scope.C===undefined){$_SyntaxError(C,["nonlocal declaration not allowed at module level"])}} -$NonlocalCtx.prototype.toString=function(){return 'nonlocal '+this.tree} -$NonlocalCtx.prototype.add=function(name){if(this.scope.binding[name]=="arg"){$_SyntaxError(C,["name '"+name+"' is parameter and nonlocal"])} -this.names[name]=[false,$pos] -this.scope.nonlocals[name]=true} -$NonlocalCtx.prototype.transition=function(token,value){var C=this -switch(token){case 'id': -if(C.expect=='id'){new $IdCtx(C,value) -C.add(value) -C.expect=',' -return C} -break -case ',': -if(C.expect==','){C.expect='id' -return C} -break -case 'eol': -if(C.expect==','){return $transition(C.parent,token)} -break} -$_SyntaxError(C,'token '+token+' after '+C)} -$NonlocalCtx.prototype.transform=function(node,rank){var C=this.parent,pscope=this.scope.parent_block -if(pscope.C===undefined){$_SyntaxError(C,["no binding for nonlocal '"+ -$B.last(Object.keys(this.names))+"' found"])}else{while(pscope !==undefined && pscope.C !==undefined){for(var name in this.names){if(pscope.binding[name]!==undefined){this.names[name]=[true]}} -pscope=pscope.parent_block} -for(var name in this.names){if(!this.names[name][0]){console.log('nonlocal error, C '+C) -$pos=this.names[name][1] -$_SyntaxError(C,["no binding for nonlocal '"+ -name+"' found"])}}}} -$NonlocalCtx.prototype.to_js=function(){this.js_processed=true -return ''} -var $NotCtx=$B.parser.$NotCtx=function(C){ -this.type='not' -this.parent=C -this.tree=[] -C.tree[C.tree.length]=this} -$NotCtx.prototype.toString=function(){return 'not ('+this.tree+')'} -$NotCtx.prototype.transition=function(token,value){var C=this -switch(token){case 'in': -C.parent.parent.tree.pop() -return new $ExprCtx(new $OpCtx(C.parent,'not_in'),'op',false) -case 'id': -case 'imaginary': -case 'int': -case 'float': -case 'str': -case 'bytes': -case '[': -case '(': -case '{': -case '.': -case 'not': -case 'lambda': -var expr=new $AbstractExprCtx(C,false) -return $transition(expr,token,value) -case 'op': -var a=value -if('+'==a ||'-'==a ||'~'==a){var expr=new $AbstractExprCtx(C,false) -return $transition(expr,token,value)}} -return $transition(C.parent,token)} -$NotCtx.prototype.to_js=function(){this.js_processed=true -return '!$B.$bool('+$to_js(this.tree)+')'} -var $NumberCtx=$B.parser.$NumberCtx=function(type,C,value){ -this.type=type -this.value=value -this.parent=C -this.tree=[] -C.tree[C.tree.length]=this} -$NumberCtx.prototype.toString=function(){return this.type+' '+this.value} -$NumberCtx.prototype.transition=function(token,value){var C=this -switch(token){case 'id': -case 'imaginary': -case 'int': -case 'float': -case 'str': -case 'bytes': -case '[': -case '(': -case '{': -case 'not': -case 'lambda': -$_SyntaxError(C,'token '+token+' after '+ -C)} -return $transition(C.parent,token,value)} -$NumberCtx.prototype.to_js=function(){this.js_processed=true -var type=this.type,value=this.value -if(type=='int'){var v=parseInt(value[1],value[0]) -if(v > $B.min_int && v < $B.max_int){return v} -else{return '$B.long_int.$factory("'+value[1]+'", '+value[0] -+')'}}else if(type=="float"){ -if(/^\d+$/.exec(value)||/^\d+\.\d*$/.exec(value)){return '(new Number('+this.value+'))'} -return '_b_.float.$factory('+value+')'}else if(type=="imaginary"){return '$B.make_complex(0,'+value+')'}} -var $OpCtx=$B.parser.$OpCtx=function(C,op){ -this.type='op' -this.op=op -this.parent=C.parent -this.tree=[C] -this.scope=$get_scope(this) -if(C.type=="expr"){if(['int','float','str'].indexOf(C.tree[0].type)>-1){this.left_type=C.tree[0].type}else if(C.tree[0].type=="id"){var binding=this.scope.binding[C.tree[0].value] -if(binding){this.left_type=binding.type}}} -C.parent.tree.pop() -C.parent.tree.push(this)} -$OpCtx.prototype.toString=function(){return '(op '+this.op+') ['+this.tree+']'} -$OpCtx.prototype.transition=function(token,value){var C=this -if(C.op===undefined){$_SyntaxError(C,['C op undefined '+C])} -if(C.op.substr(0,5)=='unary' && token !='eol'){if(C.parent.type=='assign' || -C.parent.type=='return'){ -C.parent.tree.pop() -var t=new $ListOrTupleCtx(C.parent,'tuple') -t.tree.push(C) -C.parent=t -return t}} -switch(token){case 'id': -case 'imaginary': -case 'int': -case 'float': -case 'str': -case 'bytes': -case '[': -case '(': -case '{': -case '.': -case 'not': -case 'lambda': -return $transition(new $AbstractExprCtx(C,false),token,value) -case 'op': -switch(value){case '+': -case '-': -case '~': -return new $UnaryCtx(C,value)} -default: -if(C.tree[C.tree.length-1].type== -'abstract_expr'){$_SyntaxError(C,'token '+token+' after '+ -C)}} -return $transition(C.parent,token)} -$OpCtx.prototype.to_js=function(){this.js_processed=true -var comps={'==':'eq','!=':'ne','>=':'ge','<=':'le','<':'lt','>':'gt'} -if(comps[this.op]!==undefined){var method=comps[this.op] -if(this.tree[0].type=='expr' && this.tree[1].type=='expr'){var t0=this.tree[0].tree[0],t1=this.tree[1].tree[0],js0=t0.to_js(),js1=t1.to_js() -switch(t1.type){case 'int': -switch(t0.type){case 'int': -if(Number.isSafeInteger(t0.value)&& -Number.isSafeInteger(t1.value)){return js0+this.op+js1}else{return '$B.$getattr('+ -this.tree[0].to_js()+',"__'+ -method+'__")('+ -this.tree[1].to_js()+')'} -case 'str': -switch(this.op){case "==": -return "false" -case "!=": -return "true" -default: -return '$B.$TypeError("unorderable types: '+ -" int() "+this.op+' str()")'} -case 'id': -return '(typeof '+js0+' == "number" ? '+ -js0+this.op+js1+' : $B.rich_comp("__'+ -method+'__",'+this.tree[0].to_js()+ -','+this.tree[1].to_js()+'))'} -break; -case 'str': -switch(t0.type){case 'str': -return js0+this.op+js1 -case 'int': -switch(this.op){case "==": -return "false" -case "!=": -return "true" -default: -return '$B.$TypeError("unorderable types: '+ -' str() '+this.op+' int()")'} -case 'id': -return '(typeof '+js0+' == "string" ? '+ -js0+this.op+js1+' : $B.rich_comp("__'+ -method+'__",'+this.tree[0].to_js()+ -','+this.tree[1].to_js()+'))'} -break; -case 'id': -if(t0.type=='id'){return 'typeof '+js0+'!="object" && typeof '+ -js0+'!="function" && typeof '+js0+ -' == typeof '+js1+' ? '+js0+this.op+js1+ -' : $B.rich_comp("__'+method+'__",'+ -this.tree[0].to_js()+','+this.tree[1].to_js()+ -')'} -break}}} -switch(this.op){case 'and': -var op0=this.tree[0].to_js(),op1=this.tree[1].to_js() -if(this.wrap !==undefined){ -return '(function(){var '+this.wrap.name+' = '+ -this.wrap.js+';return $B.$test_expr($B.$test_item('+ -op0+') && $B.$test_item('+op1+'))})()'}else{return '$B.$test_expr($B.$test_item('+op0+')&&'+ -'$B.$test_item('+op1+'))'} -case 'or': -var res='$B.$test_expr($B.$test_item('+ -this.tree[0].to_js()+')||' -return res+'$B.$test_item('+this.tree[1].to_js()+'))' -case 'in': -return '$B.$is_member('+$to_js(this.tree)+')' -case 'not_in': -return '!$B.$is_member('+$to_js(this.tree)+')' -case 'unary_neg': -case 'unary_pos': -case 'unary_inv': -var op,method -if(this.op=='unary_neg'){op='-';method='__neg__'} -else if(this.op=='unary_pos'){op='+';method='__pos__'} -else{op='~';method='__invert__'} -if(this.tree[1].type=="expr"){var x=this.tree[1].tree[0] -switch(x.type){case 'int': -var v=parseInt(x.value[1],x.value[0]) -if(Number.isSafeInteger(v)){return op+v} -return '$B.$getattr('+x.to_js()+', "'+ -method+'")()' -case 'float': -return '_b_.float.$factory('+op+x.value+')' -case 'imaginary': -return '$B.make_complex(0,'+op+x.value+')'}} -return '$B.$getattr('+this.tree[1].to_js()+',"'+ -method+'")()' -case 'is': -return '$B.$is('+this.tree[0].to_js()+', '+ -this.tree[1].to_js()+')' -case 'is_not': -return this.tree[0].to_js()+'!=='+this.tree[1].to_js() -case '+': -return '$B.add('+this.tree[0].to_js()+', '+ -this.tree[1].to_js()+')' -case '*': -case '-': -var op=this.op,vars=[],has_float_lit=false,scope=$get_scope(this) -function is_simple(elt){if(elt.type=='expr' && elt.tree[0].type=='int'){return true}else if(elt.type=='expr' && -elt.tree[0].type=='float'){has_float_lit=true -return true}else if(elt.type=='expr' && -elt.tree[0].type=='list_or_tuple' && -elt.tree[0].real=='tuple' && -elt.tree[0].tree.length==1 && -elt.tree[0].tree[0].type=='expr'){return is_simple(elt.tree[0].tree[0].tree[0])}else if(elt.type=='expr' && elt.tree[0].type=='id'){var _var=elt.tree[0].to_js() -if(vars.indexOf(_var)==-1){vars.push(_var)} -return true}else if(elt.type=='op' && -['*','+','-'].indexOf(elt.op)>-1){for(var i=0;i < elt.tree.length;i++){if(!is_simple(elt.tree[i])){return false}} -return true} -return false} -function get_type(ns,v){var t -if(['int','float','str'].indexOf(v.type)>-1){t=v.type}else if(v.type=='id' && ns[v.value]){t=ns[v.value].type} -return t} -var e0=this.tree[0],e1=this.tree[1] -if(is_simple(this)){var v0=this.tree[0].tree[0],v1=this.tree[1].tree[0] -if(vars.length==0 && !has_float_lit){ -return this.simple_js()}else if(vars.length==0){ -return 'new Number('+this.simple_js()+')'}else{ -var ns=scope.binding,t0=get_type(ns,v0),t1=get_type(ns,v1) -if((t0=='float' && t1=='float')|| -(this.op=='+' && t0=='str' && t1=='str')){this.result_type=t0 -return v0.to_js()+this.op+v1.to_js()}else if(['int','float'].indexOf(t0)>-1 && -['int','float'].indexOf(t1)>-1){if(t0=='int' && t1=='int'){this.result_type='int'}else{this.result_type='float'} -switch(this.op){case '-': -return '$B.sub('+v0.to_js()+','+ -v1.to_js()+')' -case '*': -return '$B.mul('+v0.to_js()+','+ -v1.to_js()+')'}} -var tests=[],tests1=[],pos=0 -vars.forEach(function(_var){ -tests.push('typeof '+_var+ -'.valueOf() == "number"') -tests1.push('typeof '+_var+' == "number"')}) -var res=[tests.join(' && ')+' ? '] -res.push('('+tests1.join(' && ')+' ? ') -res.push(this.simple_js()) -res.push(' : new Number('+this.simple_js()+')') -res.push(')') -var t0=this.tree[0].to_js(),t1=this.tree[1].to_js() -if(this.op=='+'){res.push(' : (typeof '+t0+ -' == "string" && typeof '+t1+ -' == "string") ? '+t0+'+'+t1)} -res.push(': $B.rich_op("'+$operators[this.op]+'",'+ -t0+','+t1+')') -return '('+res.join('')+')'}} -if(comps[this.op]!==undefined){return '$B.rich_comp("__'+$operators[this.op]+'__",'+ -e0.to_js()+','+e1.to_js()+')'}else{return '$B.rich_op("'+$operators[this.op]+'", '+ -e0.to_js()+', '+e1.to_js()+')'} -default: -if(comps[this.op]!==undefined){return '$B.rich_comp("__'+$operators[this.op]+'__",'+ -this.tree[0].to_js()+','+this.tree[1].to_js()+')'}else{return '$B.rich_op("'+$operators[this.op]+'", '+ -this.tree[0].to_js()+', '+this.tree[1].to_js()+ -')'}}} -$OpCtx.prototype.simple_js=function(){var op=this.op -function sjs(elt){if(elt.type=='op'){return elt.simple_js()} -else if(elt.type=='expr' && elt.tree[0].type=='list_or_tuple' -&& elt.tree[0].real=='tuple' -&& elt.tree[0].tree.length==1 -&& elt.tree[0].tree[0].type=='expr'){return '('+elt.tree[0].tree[0].tree[0].simple_js()+')'}else{return elt.tree[0].to_js()}} -if(op=='+'){return '$B.add('+sjs(this.tree[0])+','+ -sjs(this.tree[1])+')'}else if(op=='-'){return '$B.sub('+sjs(this.tree[0])+','+ -sjs(this.tree[1])+')'}else if(op=='*'){return '$B.mul('+sjs(this.tree[0])+','+ -sjs(this.tree[1])+')'}else if(op=='/'){return '$B.div('+sjs(this.tree[0])+','+ -sjs(this.tree[1])+')'}else{return sjs(this.tree[0])+op+sjs(this.tree[1])}} -var $PackedCtx=$B.parser.$PackedCtx=function(C){ -this.type='packed' -if(C.parent.type=='list_or_tuple' && -C.parent.parent.type=="node"){ -for(var i=0;i < C.parent.tree.length;i++){var child=C.parent.tree[i] -if(child.type=='expr' && child.tree.length > 0 -&& child.tree[0].type=='packed'){$_SyntaxError(C,["two starred expressions in assignment"])}}} -this.parent=C -this.tree=[] -C.tree[C.tree.length]=this} -$PackedCtx.prototype.toString=function(){return '(packed) '+this.tree} -$PackedCtx.prototype.transition=function(token,value){var C=this -if(C.tree.length > 0 && token=="["){ -return $transition(C.tree[0],token,value)} -if(token=='id'){var expr=new $AbstractExprCtx(C,false) -expr.packed=true -C.parent.expect=',' -var id=$transition(expr,token,value) -return id}else if(token=="["){C.parent.expect=',' -return new $ListOrTupleCtx(C,"list")}else if(token=="("){C.parent.expect=',' -return new $ListOrTupleCtx(C,"tuple")}else if(token=="]"){return $transition(C.parent,token,value)}else if(token=="{"){C.parent.expect=',' -return new $DictOrSetCtx(C)} -return C.parent.transition(token,C)} -$PackedCtx.prototype.to_js=function(){this.js_processed=true -return $to_js(this.tree)} -var $PassCtx=$B.parser.$PassCtx=function(C){ -this.type='pass' -this.parent=C -this.tree=[] -C.tree[C.tree.length]=this} -$PassCtx.prototype.toString=function(){return '(pass)'} -$PassCtx.prototype.transition=function(token,value){var C=this -if(token=='eol'){return C.parent} -$_SyntaxError(C,'token '+token+' after '+C)} -$PassCtx.prototype.to_js=function(){this.js_processed=true -return 'void(0)'} -var $RaiseCtx=$B.parser.$RaiseCtx=function(C){ -this.type='raise' -this.parent=C -this.tree=[] -C.tree[C.tree.length]=this -this.scope_type=$get_scope(this).ntype} -$RaiseCtx.prototype.toString=function(){return ' (raise) '+this.tree} -$RaiseCtx.prototype.transition=function(token,value){var C=this -switch(token){case 'id': -if(C.tree.length==0){return new $IdCtx(new $ExprCtx(C,'exc',false),value)} -break -case 'from': -if(C.tree.length > 0){return new $AbstractExprCtx(C,false)} -break -case 'eol': -return $transition(C.parent,token)} -$_SyntaxError(C,'token '+token+' after '+C)} -$RaiseCtx.prototype.to_js=function(){this.js_processed=true -var exc=this.tree.length==0 ? '' :this.tree[0].to_js() -return '$B.$raise('+exc+')'} -var $RawJSCtx=$B.parser.$RawJSCtx=function(C,js){this.type="raw_js" -C.tree[C.tree.length]=this -this.parent=C -this.js=js} -$RawJSCtx.prototype.toString=function(){return '(js) '+this.js} -$RawJSCtx.prototype.transition=function(token,value){var C=this} -$RawJSCtx.prototype.to_js=function(){this.js_processed=true -return this.js} -var $ReturnCtx=$B.parser.$ReturnCtx=function(C){ -this.type='return' -this.parent=C -this.tree=[] -C.tree[C.tree.length]=this -this.scope=$get_scope(this) -if(["def","generator"].indexOf(this.scope.ntype)==-1){$_SyntaxError(C,["'return' outside function"])} -var node=this.node=$get_node(this) -while(node.parent){if(node.parent.C){var elt=node.parent.C.tree[0] -if(elt.type=='for'){elt.has_return=true -break}else if(elt.type=='try'){elt.has_return=true}else if(elt.type=='single_kw' && elt.token=='finally'){elt.has_return=true}} -node=node.parent}} -$ReturnCtx.prototype.toString=function(){return 'return '+this.tree} -$ReturnCtx.prototype.transition=function(token,value){var C=this -return $transition(C.parent,token)} -$ReturnCtx.prototype.to_js=function(){this.js_processed=true -if(this.tree.length==1 && this.tree[0].type=='abstract_expr'){ -this.tree.pop() -new $IdCtx(new $ExprCtx(this,'rvalue',false),'None')} -var scope=this.scope -if(scope.ntype=='generator'){return 'var $res = '+$to_js(this.tree)+'; $B.leave_frame({$locals});'+ -'return $B.generator_return($res)'} -var indent=' '.repeat(this.node.indent-1) -var js='var $res = '+$to_js(this.tree)+';\n'+indent+ -'if($locals.$f_trace !== _b_.None){$B.trace_return($res)}\n'+indent+ -'$B.leave_frame' -if(scope.id.substr(0,6)=='$exec_'){js+='_exec'} -js+='({$locals});\n'+indent+'return $res' -return js} -var $SingleKwCtx=$B.parser.$SingleKwCtx=function(C,token){ -this.type='single_kw' -this.token=token -this.parent=C -this.tree=[] -C.tree[C.tree.length]=this -if(token=="else"){var node=C.node -var pnode=node.parent -for(var rank=0;rank < pnode.children.length;rank++){if(pnode.children[rank]===node){break}} -var pctx=pnode.children[rank-1].C -if(pctx.tree.length > 0){var elt=pctx.tree[0] -if(elt.type=='for' || -elt.type=='asyncfor' || -(elt.type=='condition' && elt.token=='while')){elt.has_break=true -elt.else_node=$get_node(this) -this.loop_num=elt.loop_num}}}} -$SingleKwCtx.prototype.toString=function(){return this.token} -$SingleKwCtx.prototype.transition=function(token,value){var C=this -if(token==':'){return $BodyCtx(C)} -$_SyntaxError(C,'token '+token+' after '+C)} -$SingleKwCtx.prototype.transform=function(node,rank){ -if(this.token=='finally'){var scope=$get_scope(this) -node.insert(0,$NodeJS('var $exit;'+ -'if($B.frames_stack.length < $stack_length){'+ -'$exit = true;'+ -'$B.frames_stack.push($top_frame)'+ -'}') -) -var scope_id=scope.id.replace(/\./g,'_') -var last_child=node.children[node.children.length-1] -if(last_child.C.tree[0].type !="return"){node.add($NodeJS('if($exit){$B.leave_frame({$locals})}'))}}} -$SingleKwCtx.prototype.to_js=function(){this.js_processed=true -if(this.token=='finally'){return this.token} -if(this.loop_num !==undefined){var scope=$get_scope(this) -var res='if($locals_'+scope.id.replace(/\./g,'_') -return res+'["$no_break'+this.loop_num+'"])'} -return this.token} -var $SliceCtx=$B.parser.$SliceCtx=function(C){ -this.type='slice' -this.parent=C -this.tree=C.tree.length > 0 ?[C.tree.pop()]:[] -C.tree.push(this)} -$SliceCtx.prototype.transition=function(token,value){var C=this -if(token==":"){return new $AbstractExprCtx(C,false)} -return $transition(C.parent,token,value)} -$SliceCtx.prototype.to_js=function(){for(var i=0;i < this.tree.length;i++){if(this.tree[i].type=="abstract_expr"){this.tree[i].to_js=function(){return "_b_.None"}}} -return "_b_.slice.$factory("+$to_js(this.tree)+")"} -var $StarArgCtx=$B.parser.$StarArgCtx=function(C){ -this.type='star_arg' -this.parent=C -this.tree=[] -C.tree[C.tree.length]=this} -$StarArgCtx.prototype.toString=function(){return '(star arg) '+this.tree} -$StarArgCtx.prototype.transition=function(token,value){var C=this -switch(token){case 'id': -if(C.parent.type=="target_list"){C.tree.push(value) -C.parent.expect=',' -return C.parent} -return $transition(new $AbstractExprCtx(C,false),token,value) -case 'imaginary': -case 'int': -case 'float': -case 'str': -case 'bytes': -case '[': -case '(': -case '{': -case 'not': -case 'lambda': -return $transition(new $AbstractExprCtx(C,false),token,value) -case ',': -case ')': -if(C.tree.length==0){$_SyntaxError(C,"unnamed star argument")} -return $transition(C.parent,token) -case ':': -if(C.parent.parent.type=='lambda'){return $transition(C.parent.parent,token)}} -$_SyntaxError(C,'token '+token+' after '+C)} -$StarArgCtx.prototype.to_js=function(){this.js_processed=true -return '{$nat:"ptuple",arg:'+$to_js(this.tree)+'}'} -var $StringCtx=$B.parser.$StringCtx=function(C,value){ -this.type='str' -this.parent=C -this.tree=[value] -C.tree[C.tree.length]=this -this.raw=false} -$StringCtx.prototype.toString=function(){return 'string '+(this.tree ||'')} -$StringCtx.prototype.transition=function(token,value){var C=this -switch(token){case '[': -return new $AbstractExprCtx(new $SubCtx(C.parent),false) -case '(': -C.parent.tree[0]=C -return new $CallCtx(C.parent) -case 'str': -C.tree.push(value) -return C} -return $transition(C.parent,token,value)} -$StringCtx.prototype.to_js=function(){this.js_processed=true -var res='',type=null,scope=$get_scope(this),has_surrogate=false -function _has_surrogate(s){for(var i=0;i < s.length;i++){try{code=s.charCodeAt(i)}catch(err){console.log("err for s",s) -throw err} -if(code >=0xD800 && code <=0xDBFF){return true}} -return false} -function fstring(parsed_fstring){ -var elts=[] -for(var i=0;i < parsed_fstring.length;i++){if(parsed_fstring[i].type=='expression'){var expr=parsed_fstring[i].expression -var pos=0,br_stack=[],parts=[expr] -while(pos < expr.length){var car=expr.charAt(pos) -if(car==":" && br_stack.length==0){parts=[expr.substr(0,pos),expr.substr(pos+1)] -break}else if("{[(".indexOf(car)>-1){br_stack.push(car)}else if(")]}".indexOf(car)>-1){br_stack.pop()} -pos++} -expr=parts[0] -var save_pos=$pos -var expr_node=$B.py2js(expr,scope.module,scope.id,scope) -expr_node.to_js() -$pos=save_pos -for(var j=0;j < expr_node.children.length;j++){var node=expr_node.children[j] -if(node.C.tree && node.C.tree.length==1 && -node.C.tree[0]=="try"){ -for(var k=0;k < node.children.length;k++){ -if(node.children[k].is_line_num){continue} -var expr1=node.children[k].js -while("\n;".indexOf(expr1.charAt(expr1.length-1))>-1){expr1=expr1.substr(0,expr1.length-1)} -break} -break}} -switch(parsed_fstring[i].conversion){case "a": -expr1='_b_.ascii('+expr1+')' -break -case "r": -expr1='_b_.repr('+expr1+')' -break -case "s": -expr1='_b_.str.$factory('+expr1+')' -break} -var fmt=parts[1] -if(fmt !==undefined){ -var parsed_fmt=$B.parse_fstring(fmt) -if(parsed_fmt.length > 1){fmt=fstring(parsed_fmt)}else{fmt="'"+fmt+"'"} -var res1="_b_.str.format('{0:' + "+ -fmt+" + '}', "+expr1+")" -elts.push(res1)}else{if(parsed_fstring[i].conversion===null){expr1='_b_.str.$factory('+expr1+')'} -elts.push(expr1)}}else{var re=new RegExp("'","g") -var elt=parsed_fstring[i].replace(re,"\\'") -.replace(/\n/g,"\\n") -has_surrogate=has_surrogate ||_has_surrogate(elt) -elts.push("'"+elt+"'")}} -return elts.join(' + ')} -function prepare(value){value=value.replace(/\n/g,'\\n\\\n') -value=value.replace(/\\U([A-Fa-f0-9]{8})/gm,function(mo){return String.fromCharCode("0x"+mo.slice(2))}) -return value} -for(var i=0;i < this.tree.length;i++){if(this.tree[i].type=="call"){ -var js='(function(){throw _b_.TypeError.$factory("'+"'str'"+ -' object is not callable")}())' -return js}else{var value=this.tree[i],is_fstring=Array.isArray(value),is_bytes=false -if(!is_fstring){is_bytes=value.charAt(0)=='b'} -if(type==null){type=is_bytes -if(is_bytes){res+='_b_.bytes.$new(_b_.bytes, '}}else if(type !=is_bytes){return '$B.$TypeError("can\'t concat bytes to str")'} -if(!is_bytes){if(is_fstring){res+=fstring(value)}else{has_surrogate=has_surrogate ||_has_surrogate(value) -res+=prepare(value)}}else{res+=prepare(value.substr(1))} -if(i < this.tree.length-1){res+='+'}}} -if(is_bytes){res+=',"ISO-8859-1")'} -if(res.length==0){res='""'} -if(has_surrogate){res="_b_.str.$surrogate.$factory("+res+")"} -return res} -var $SubCtx=$B.parser.$SubCtx=function(C){ -this.type='sub' -this.func='getitem' -this.value=C.tree[0] -C.tree.pop() -C.tree[C.tree.length]=this -this.parent=C -this.tree=[]} -$SubCtx.prototype.toString=function(){return '(sub) (value) '+this.value+' (tree) '+this.tree} -$SubCtx.prototype.transition=function(token,value){var C=this -switch(token){case 'id': -case 'imaginary': -case 'int': -case 'float': -case 'str': -case 'bytes': -case '[': -case '(': -case '{': -case '.': -case 'not': -case 'lambda': -var expr=new $AbstractExprCtx(C,false) -return $transition(expr,token,value) -case ']': -if(C.parent.packed){return C.parent.tree[0]} -if(C.tree[0].tree.length > 0){return C.parent} -break -case ':': -return new $AbstractExprCtx(new $SliceCtx(C),false) -case ',': -return new $AbstractExprCtx(C,false)} -$_SyntaxError(C,'token '+token+' after '+C)} -$SubCtx.prototype.to_js=function(){this.js_processed=true -if(this.func=='getitem' && this.value.type=='id'){var type=$get_node(this).locals[this.value.value],val=this.value.to_js() -if(type=='list' ||type=='tuple'){if(this.tree.length==1){return '$B.list_key('+val+ -', '+this.tree[0].to_js()+')'}else if(this.tree.length==2){return '$B.list_slice('+val+ -', '+(this.tree[0].to_js()||"null")+','+ -(this.tree[1].to_js()||"null")+')'}else if(this.tree.length==3){return '$B.list_slice_step('+val+ -', '+(this.tree[0].to_js()||"null")+','+ -(this.tree[1].to_js()||"null")+','+ -(this.tree[2].to_js()||"null")+')'}}} -if(this.func=='getitem' && this.tree.length==1){if(this.tree[0].type=="slice"){return `$B.getitem_slice(${this.value.to_js()},`+ -`${this.tree[0].to_js()})`} -return '$B.$getitem('+this.value.to_js()+','+ -this.tree[0].to_js()+')'} -var res='',shortcut=false -if(this.func !=='delitem' && -this.tree.length==1 && !this.in_sub){var expr='',x=this -shortcut=true -while(x.value.type=='sub'){expr+='['+x.tree[0].to_js()+']' -x.value.in_sub=true -x=x.value} -var subs=x.value.to_js()+'['+x.tree[0].to_js()+']'+ -'((Array.isArray('+x.value.to_js()+') || typeof '+ -x.value.to_js()+' == "string") && '+subs+ -' !== undefined ?'+subs+expr+' : '} -var val=this.value.to_js() -res+='$B.$getattr('+val+',"__'+this.func+'__")(' -if(this.tree.length==1){res+=this.tree[0].to_js()+')'}else{var res1=[] -this.tree.forEach(function(elt){if(elt.type=='abstract_expr'){res1.push('_b_.None')} -else{res1.push(elt.to_js())}}) -res+='_b_.tuple.$factory(['+res1.join(',')+']))'} -return shortcut ? res+')' :res} -var $TargetListCtx=$B.parser.$TargetListCtx=function(C){ -this.type='target_list' -this.parent=C -this.tree=[] -this.expect='id' -C.tree[C.tree.length]=this} -$TargetListCtx.prototype.toString=function(){return '(target list) '+this.tree} -$TargetListCtx.prototype.transition=function(token,value){var C=this -switch(token){case 'id': -if(C.expect=='id'){C.expect=',' -return new $IdCtx( -new $ExprCtx(C,'target',false),value)} -case 'op': -if(C.expect=='id' && value=='*'){ -return new $PackedCtx(C)} -case '(': -case '[': -if(C.expect=='id'){C.expect=',' -return new $ListOrTupleCtx(C,token=='(' ? 'tuple' :'list')} -case ')': -case ']': -if(C.expect==','){return C.parent} -case ',': -if(C.expect==','){C.expect='id' -return C}} -if(C.expect==','){return $transition(C.parent,token,value)}else if(token=='in'){ -return $transition(C.parent,token,value)} -$_SyntaxError(C,'token '+token+' after '+C)} -$TargetListCtx.prototype.to_js=function(){this.js_processed=true -return $to_js(this.tree)} -var $TernaryCtx=$B.parser.$TernaryCtx=function(C){ -this.type='ternary' -this.parent=C.parent -C.parent.tree.pop() -C.parent.tree.push(this) -C.parent=this -this.tree=[C]} -$TernaryCtx.prototype.toString=function(){return '(ternary) '+this.tree} -$TernaryCtx.prototype.transition=function(token,value){var C=this -if(token=='else'){C.in_else=true -return new $AbstractExprCtx(C,false)}else if(! C.in_else){$_SyntaxError(C,'token '+token+' after '+C)}else if(token==","){ -if(["assign","augm_assign","node","return"]. -indexOf(C.parent.type)>-1){C.parent.tree.pop() -var t=new $ListOrTupleCtx(C.parent,'tuple') -t.implicit=true -t.tree[0]=C -C.parent=t -t.expect="id" -return t}} -return $transition(C.parent,token,value)} -$TernaryCtx.prototype.to_js=function(){this.js_processed=true -var res='$B.$bool('+this.tree[1].to_js()+') ? ' -res+=this.tree[0].to_js()+' : ' -return res+this.tree[2].to_js()} -var $TryCtx=$B.parser.$TryCtx=function(C){ -this.type='try' -this.parent=C -C.tree[C.tree.length]=this} -$TryCtx.prototype.toString=function(){return '(try) '} -$TryCtx.prototype.transition=function(token,value){var C=this -if(token==':'){return $BodyCtx(C)} -$_SyntaxError(C,'token '+token+' after '+C)} -$TryCtx.prototype.transform=function(node,rank){if(node.parent.children.length==rank+1){$_SyntaxError(C,["unexpected EOF while parsing"])}else{var next_ctx=node.parent.children[rank+1].C.tree[0] -switch(next_ctx.type){case 'except': -case 'finally': -case 'single_kw': -break -default: -$_SyntaxError(C,"no clause after try")}} -var scope=$get_scope(this) -var error_name=create_temp_name('$err') -var failed_name="$locals."+create_temp_name('$failed') -var js=failed_name+' = false;\n'+ -' '.repeat(node.indent+4)+'try' -new $NodeJSCtx(node,js) -node.has_return=this.has_return -var catch_node=$NodeJS('catch('+error_name+')') -node.parent.insert(rank+1,catch_node) -catch_node.add($NodeJS("$B.set_exc("+error_name+")")) -catch_node.add($NodeJS("if($locals.$f_trace !== _b_.None)"+ -"{$locals.$f_trace = $B.trace_exception()}")) -catch_node.add( -$NodeJS(failed_name+' = true;'+ -'$B.pmframe = $B.last($B.frames_stack);'+ -'if(false){}') -) -var pos=rank+2,has_default=false, -has_else=false, -has_finally=false -while(1){if(pos==node.parent.children.length){break} -var ctx=node.parent.children[pos].C.tree[0] -if(ctx===undefined){ -break} -if(ctx.type=='except'){ -if(has_else){$_SyntaxError(C,"'except' or 'finally' after 'else'")} -if(has_finally){$_SyntaxError(C,"'except' after 'finally'")} -ctx.error_name=error_name -if(ctx.tree.length > 0 && ctx.tree[0].alias !==null -&& ctx.tree[0].alias !==undefined){ -var alias=ctx.tree[0].alias -node.parent.children[pos].insert(0,$NodeJS('$locals["'+alias+'"] = $B.exception('+ -error_name+')') -)} -catch_node.insert(catch_node.children.length,node.parent.children[pos]) -if(ctx.tree.length==0){if(has_default){$_SyntaxError(C,'more than one except: line')} -has_default=true} -node.parent.children.splice(pos,1)}else if(ctx.type=='single_kw' && ctx.token=='finally'){has_finally=true -var finally_node=node.parent.children[pos] -pos++}else if(ctx.type=='single_kw' && ctx.token=='else'){if(has_else){$_SyntaxError(C,"more than one 'else'")} -if(has_finally){$_SyntaxError(C,"'else' after 'finally'")} -has_else=true -var else_body=node.parent.children[pos] -node.parent.children.splice(pos,1)}else{break}} -if(!has_default){ -var new_node=new $Node(),ctx=new $NodeCtx(new_node) -catch_node.insert(catch_node.children.length,new_node) -new $SingleKwCtx(ctx,'else') -new_node.add($NodeJS('throw '+error_name))} -if(has_else){var else_node=new $Node() -else_node.module=scope.module -new $NodeJSCtx(else_node,'if(!'+failed_name+')') -else_body.children.forEach(function(elt){else_node.add(elt)}) -if(has_finally){finally_node.insert(0,else_node)}else{node.parent.insert(pos,else_node)} -pos++} -$loop_num++} -$TryCtx.prototype.to_js=function(){this.js_processed=true -return 'try'} -var $UnaryCtx=$B.parser.$UnaryCtx=function(C,op){ -this.type='unary' -this.op=op -this.parent=C -C.tree[C.tree.length]=this} -$UnaryCtx.prototype.toString=function(){return '(unary) '+this.op} -$UnaryCtx.prototype.transition=function(token,value){var C=this -switch(token){case 'int': -case 'float': -case 'imaginary': -var expr=C.parent -C.parent.parent.tree.pop() -if(C.op=='-'){value="-"+value} -else if(C.op=='~'){value=~value} -return $transition(C.parent.parent,token,value) -case 'id': -C.parent.parent.tree.pop() -var expr=new $ExprCtx(C.parent.parent,'call',false) -var expr1=new $ExprCtx(expr,'id',false) -new $IdCtx(expr1,value) -var repl=new $AttrCtx(expr) -if(C.op=='+'){repl.name='__pos__'} -else if(C.op=='-'){repl.name='__neg__'} -else{repl.name='__invert__'} -return expr1 -case 'op': -if('+'==value ||'-'==value){if(C.op===value){C.op='+'} -else{C.op='-'} -return C}} -return $transition(C.parent,token,value)} -this.to_js=function(){this.js_processed=true -return this.op} -var $WithCtx=$B.parser.$WithCtx=function(C){ -this.type='with' -this.parent=C -C.tree[C.tree.length]=this -this.tree=[] -this.expect='as' -this.scope=$get_scope(this)} -$WithCtx.prototype.toString=function(){return '(with) '+this.tree} -$WithCtx.prototype.transition=function(token,value){var C=this -switch(token){case 'id': -if(C.expect=='id'){C.expect='as' -return $transition( -new $AbstractExprCtx(C,false),token,value)} -$_SyntaxError(C,'token '+token+' after '+C) -case 'as': -return new $AbstractExprCtx(new $AliasCtx(C)) -case ':': -switch(C.expect){case 'id': -case 'as': -case ':': -return $BodyCtx(C)} -break -case '(': -if(C.expect=='id' && C.tree.length==0){C.parenth=true -return C}else if(C.expect=='alias'){C.expect=':' -return new $TargetListCtx(C,false)} -break -case ')': -if(C.expect==',' ||C.expect=='as'){C.expect=':' -return C} -break -case ',': -if(C.parenth !==undefined && -C.has_alias===undefined && -(C.expect==',' ||C.expect=='as')){C.expect='id' -return C}else if(C.expect=='as'){C.expect='id' -return C}else if(C.expect==':'){C.expect='id' -return C} -break} -$_SyntaxError(C,'token '+token+' after '+ -C.expect)} -$WithCtx.prototype.set_alias=function(ctx){var ids=[] -if(ctx.type=="id"){ids=[ctx]}else if(ctx.type=="list_or_tuple"){ -ctx.tree.forEach(function(expr){if(expr.type=="expr" && expr.tree[0].type=="id"){ids.push(expr.tree[0])}})} -for(var i=0,len=ids.length;i < len;i++){var id_ctx=ids[i] -$bind(id_ctx.value,this.scope,this) -id_ctx.bound=true -if(this.scope.ntype !=='module'){ -this.scope.C.tree[0].locals.push(id_ctx.value)}}} -$WithCtx.prototype.transform=function(node,rank){while(this.tree.length > 1){ -var suite=node.children,item=this.tree.pop(),new_node=new $Node(),ctx=new $NodeCtx(new_node),with_ctx=new $WithCtx(ctx) -item.parent=with_ctx -with_ctx.tree=[item] -with_ctx.async=this.async -suite.forEach(function(elt){new_node.add(elt)}) -node.children=[new_node]} -if(this.transformed){return} -this.prefix="" -if(this.tree.length > 1){var nw=new $Node(),ctx=new $NodeCtx(nw) -nw.parent=node -nw.module=node.module -nw.indent=node.indent+4 -var wc=new $WithCtx(ctx) -wc.async=this.async -wc.tree=this.tree.slice(1) -node.children.forEach(function(elt){nw.add(elt)}) -node.children=[nw] -this.transformed=true -return} -if(this.async){return this.transform_async(node,rank)} -var top_try_node=$NodeJS("try") -node.parent.insert(rank+1,top_try_node) -var num=this.num=$loop_num++ -top_try_node.ctx_manager_num=num -this.cm_name=this.prefix+'$ctx_manager'+num -this.cmexit_name=this.prefix+'$ctx_manager_exit'+num -this.exc_name=this.prefix+'$exc'+num -this.err_name='$err'+num -this.val_name='$value'+num -this.yield_name=this.prefix+'$yield'+num -if(this.tree[0].alias===null){this.tree[0].alias='$temp'} -if(this.tree[0].type=='expr' && -this.tree[0].tree[0].type=='list_or_tuple'){if(this.tree[1].type !='expr' || -this.tree[1].tree[0].type !='list_or_tuple'){$_SyntaxError(C)} -if(this.tree[0].tree[0].tree.length != -this.tree[1].tree[0].tree.length){$_SyntaxError(C,['wrong number of alias'])} -var ids=this.tree[0].tree[0].tree,alias=this.tree[1].tree[0].tree -this.tree.shift() -this.tree.shift() -for(var i=ids.length-1;i >=0;i--){ids[i].alias=alias[i].value -this.tree.splice(0,0,ids[i])}} -var block=node.children -node.children=[] -var try_node=new $Node() -new $NodeJSCtx(try_node,'try') -top_try_node.add(try_node) -if(this.tree[0].alias){var alias=this.tree[0].alias.tree[0].tree[0].value -try_node.add($NodeJS('$locals'+'["'+alias+'"] = '+ -this.val_name))} -block.forEach(function(elt){try_node.add(elt)}) -var catch_node=new $Node() -new $NodeJSCtx(catch_node,'catch('+this.err_name+')') -var js=this.exc_name+' = false;'+this.err_name+ -' = $B.exception('+this.err_name+', true)\n'+ -' '.repeat(node.indent+4)+ -'var $b = '+this.cmexit_name+'('+ -this.err_name+'.__class__,'+ -this.err_name+','+ -'$B.$getattr('+this.err_name+', "__traceback__"));' -if(this.scope.ntype=="generator"){js+='$B.set_cm_in_generator('+this.cmexit_name+');'} -js+='if(!$B.$bool($b)){throw '+this.err_name+'}' -catch_node.add($NodeJS(js)) -top_try_node.add(catch_node) -var finally_node=new $Node() -new $NodeJSCtx(finally_node,'finally') -finally_node.C.type='single_kw' -finally_node.C.token='finally' -finally_node.C.in_ctx_manager=true -finally_node.is_except=true -finally_node.in_ctx_manager=true -var js='if('+this.exc_name -js+='){'+this.cmexit_name+'(_b_.None, _b_.None, _b_.None);' -if(this.scope.ntype=="generator"){js+='delete '+this.cmexit_name} -js+='};' -finally_node.add($NodeJS(js)) -node.parent.insert(rank+2,finally_node) -this.transformed=true} -$WithCtx.prototype.transform_async=function(node,rank){ -var scope=$get_scope(this),expr=this.tree[0],alias=this.tree[0].alias -var new_nodes=[] -var num=this.num=$loop_num++ -this.cm_name='$ctx_manager'+num,this.cmexit_name='$ctx_manager_exit'+num -this.exc_name='$exc'+num -var cmtype_name='$ctx_mgr_type'+num,cmenter_name='$ctx_manager_enter'+num,err_name='$err'+num -var js='var '+this.cm_name+' = '+expr.to_js()+',' -new_nodes.push($NodeJS(js)) -new_nodes.push($NodeJS(' '+cmtype_name+ -' = _b_.type.$factory('+this.cm_name+'),')) -new_nodes.push($NodeJS(' '+this.cmexit_name+ -' = $B.$call($B.$getattr('+cmtype_name+', "__aexit__")),')) -new_nodes.push($NodeJS(' '+cmenter_name+ -' = $B.$call($B.$getattr('+cmtype_name+', "__aenter__"))'+ -'('+this.cm_name+'),')) -new_nodes.push($NodeJS(" "+this.exc_name+" = false")) -js="" -if(alias){if(alias.tree[0].tree[0].type !="list_or_tuple"){var js=alias.tree[0].to_js()+' = '+ -'await ($B.promise('+cmenter_name+'))' -new_nodes.push($NodeJS(js))}else{ -var new_node=new $Node(),ctx=new $NodeCtx(new_node),expr=new $ExprCtx(ctx,"left",false) -expr.tree.push(alias.tree[0].tree[0]) -alias.tree[0].tree[0].parent=expr -var assign=new $AssignCtx(expr) -new $RawJSCtx(assign,'await ($B.promise('+ -cmenter_name+'))') -new_nodes.push(new_node)}}else{new_nodes.push($NodeJS('await ($B.promise('+cmenter_name+'))'))} -var try_node=new $NodeJS('try') -node.children.forEach(function(child){try_node.add(child)}) -new_nodes.push(try_node) -var catch_node=new $NodeJS('catch(err)') -new_nodes.push(catch_node) -catch_node.add($NodeJS(this.exc_name+' = true')) -catch_node.add($NodeJS('var '+err_name+ -' = $B.imported["_sys"].exc_info()')) -var if_node=$NodeJS('if(! await ($B.promise('+ -this.cmexit_name+'('+this.cm_name+', '+err_name+'[0], '+ -err_name+'[1], '+err_name+'[2]))))') -catch_node.add(if_node) -if_node.add($NodeJS('$B.$raise()')) -var else_node=$NodeJS('if(! '+this.exc_name+')') -new_nodes.push(else_node) -else_node.add($NodeJS('await ($B.promise('+this.cmexit_name+'('+ -this.cm_name+', _b_.None, _b_.None, _b_.None)))')) -node.parent.children.splice(rank,1) -for(var i=new_nodes.length-1;i >=0;i--){node.parent.insert(rank,new_nodes[i])} -node.children=[] -return 0} -$WithCtx.prototype.to_js=function(){this.js_processed=true -var indent=$get_node(this).indent,h=' '.repeat(indent),num=this.num -var head=this.prefix=="" ? "var " :this.prefix,cm_name='$ctx_manager'+num,cme_name=head+'$ctx_manager_exit'+num,exc_name=head+'$exc'+num,val_name='$value'+num -return 'var '+cm_name+' = '+this.tree[0].to_js()+'\n'+ -h+cme_name+' = $B.$getattr('+cm_name+',"__exit__")\n'+ -h+'var '+val_name+' = $B.$getattr('+cm_name+',"__enter__")()\n'+ -h+exc_name+' = true\n'} -var $YieldCtx=$B.parser.$YieldCtx=function(C,is_await){ -this.type='yield' -this.parent=C -this.tree=[] -this.is_await=is_await -C.tree[C.tree.length]=this -if(C.type=="list_or_tuple" && C.tree.length > 1){$_SyntaxError(C,"non-parenthesized yield")} -if($parent_match(C,{type:"annotation"})){$_SyntaxError(C,["'yield' outside function"])} -var parent=this -while(true){var list_or_tuple=$parent_match(parent,{type:"list_or_tuple"}) -if(list_or_tuple){list_or_tuple.yields=list_or_tuple.yields ||[] -list_or_tuple.yields.push([this,$pos]) -parent=list_or_tuple}else{break}} -var parent=this -while(true){var set_or_dict=$parent_match(parent,{type:"dict_or_set"}) -if(set_or_dict){set_or_dict.yields=set_or_dict.yields ||[] -set_or_dict.yields.push([this,$pos]) -parent=set_or_dict}else{break}} -var root=$get_module(this) -root.yields_func_check=root.yields_func_check ||[] -root.yields_func_check.push([this,$pos]) -var scope=this.scope=$get_scope(this,true),node=$get_node(this) -node.has_yield=this -var in_comp=$parent_match(this,{type:"comprehension"}) -if($get_scope(this).id.startsWith("lc"+$B.lambda_magic)){delete node.has_yield} -if(in_comp){var outermost_expr=in_comp.tree[0].tree[1] -var parent=C -while(parent){if(parent===outermost_expr){break} -parent=parent.parent} -if(! parent){$_SyntaxError(C,["'yield' inside list comprehension"])}} -var in_lambda=false,parent=C -while(parent){if(parent.type=="lambda"){in_lambda=true -this.in_lambda=true -break} -parent=parent.parent} -var parent=node.parent -while(parent){if(parent.C && parent.C.tree.length > 0 && -parent.C.tree[0].type=="with"){scope.C.tree[0].$has_yield_in_cm=true -break} -parent=parent.parent} -if(! in_lambda){switch(C.type){case 'node': -break; -case 'assign': -case 'list_or_tuple': -break -default: -$_SyntaxError(C,'yield atom must be inside ()')}}} -$YieldCtx.prototype.toString=function(){return '(yield) '+(this.from ? '(from) ' :'')+this.tree} -$YieldCtx.prototype.transition=function(token,value){var C=this -if(token=='from'){ -if(C.tree[0].type !='abstract_expr'){ -$_SyntaxError(C,"'from' must follow 'yield'")} -C.from=true -C.from_num=$B.UUID() -return C.tree[0]} -return $transition(C.parent,token)} -$YieldCtx.prototype.transform=function(node,rank){ -var parent=node.parent -while(parent){if(parent.ctx_manager_num !==undefined){node.parent.insert(rank+1,$NodeJS("$top_frame[1].$has_yield_in_cm = true")) -break} -parent=parent.parent}} -$YieldCtx.prototype.to_js=function(){if(this.from){return `_r${this.from_num}`}else{return "yield "+$to_js(this.tree)}} -$YieldCtx.prototype.check_in_function=function(){if(this.in_lambda){return} -var scope=$get_scope(this),in_func=scope.is_function,func_scope=scope -if(! in_func && scope.is_comp){var parent=scope.parent_block -while(parent.is_comp){parent=parent_block} -in_func=parent.is_function -func_scope=parent} -if(! in_func){$_SyntaxError(this.parent,["'yield' outside function"])}else{var def=func_scope.C.tree[0] -if(! this.is_await){def.type='generator'}}} -var $add_line_num=$B.parser.$add_line_num=function(node,rank,line_info){if(node.type=='module'){var i=0 -while(i < node.children.length){i+=$add_line_num(node.children[i],i,line_info)}}else if(node.type !=='marker'){var elt=node.C.tree[0],offset=1,flag=true,pnode=node,_line_info -while(pnode.parent !==undefined){pnode=pnode.parent} -var mod_id=pnode.id -var line_num=node.line_num -if(line_num===undefined){flag=false} -if(elt.type=='condition' && elt.token=='elif'){flag=false} -else if(elt.type=='except'){flag=false} -else if(elt.type=='single_kw'){flag=false} -if(flag){_line_info=line_info===undefined ? line_num+','+mod_id : -line_info -var js=';$locals.$line_info = "'+_line_info+ -'";if($locals.$f_trace !== _b_.None){$B.trace_line()};'+ -'_b_.None;' -var new_node=new $Node() -new_node.is_line_num=true -new $NodeJSCtx(new_node,js) -node.parent.insert(rank,new_node) -offset=2} -var i=0 -while(i < node.children.length){i+=$add_line_num(node.children[i],i,line_info)} -return offset}else{return 1}} -var $bind=$B.parser.$bind=function(name,scope,C){ -if(scope.nonlocals && scope.nonlocals[name]){ -return} -if(scope.globals && scope.globals.has(name)){var module=$get_module(C) -module.binding[name]=true -return} -if(! C.no_bindings){var node=$get_node(C) -node.bindings=node.bindings ||{} -node.bindings[name]=true} -scope.binding=scope.binding ||{} -if(scope.binding[name]===undefined){scope.binding[name]=true}} -function $parent_match(ctx,obj){ -var flag -while(ctx.parent){flag=true -for(var attr in obj){if(ctx.parent[attr]!=obj[attr]){flag=false -break}} -if(flag){return ctx.parent} -ctx=ctx.parent} -return false} -var $previous=$B.parser.$previous=function(C){var previous=C.node.parent.children[C.node.parent.children.length-2] -if(!previous ||!previous.C){$_SyntaxError(C,'keyword not following correct keyword')} -return previous.C.tree[0]} -var $get_docstring=$B.parser.$get_docstring=function(node){var doc_string='' -if(node.children.length > 0){var firstchild=node.children[0] -if(firstchild.C.tree && firstchild.C.tree.length > 0 && -firstchild.C.tree[0].type=='expr'){var expr=firstchild.C.tree[0].tree[0] -if(expr.type=='str' && !Array.isArray(expr.tree[0])){doc_string=firstchild.C.tree[0].tree[0].to_js()}}} -return doc_string} -var $get_scope=$B.parser.$get_scope=function(C,flag){ -var ctx_node=C.parent -while(ctx_node.type !=='node'){ctx_node=ctx_node.parent} -var tree_node=ctx_node.node,scope=null -while(tree_node.parent && tree_node.parent.type !=='module'){var ntype=tree_node.parent.C.tree[0].type -switch(ntype){case 'def': -case 'class': -case 'generator': -var scope=tree_node.parent -scope.ntype=ntype -scope.is_function=ntype !='class' -return scope} -tree_node=tree_node.parent} -var scope=tree_node.parent ||tree_node -scope.ntype="module" -return scope} -var $get_line_num=$B.parser.$get_line_num=function(C){var ctx_node=$get_node(C),line_num=ctx_node.line_num -if(ctx_node.line_num===undefined){ctx_node=ctx_node.parent -while(ctx_node && ctx_node.line_num===undefined){ctx_node=ctx_node.parent} -if(ctx_node && ctx_node.line_num){line_num=ctx_node.line_num}} -return line_num} -var $get_module=$B.parser.$get_module=function(C){ -var ctx_node=C.parent -while(ctx_node.type !=='node'){ctx_node=ctx_node.parent} -var tree_node=ctx_node.node -if(tree_node.ntype=="module"){return tree_node} -var scope=null -while(tree_node.parent.type !='module'){tree_node=tree_node.parent} -scope=tree_node.parent -scope.ntype="module" -return scope} -var $get_src=$B.parser.$get_src=function(C){ -var node=$get_node(C) -while(node.parent !==undefined){node=node.parent} -return node.src} -var $get_node=$B.parser.$get_node=function(C){var ctx=C -while(ctx.parent){ctx=ctx.parent} -return ctx.node} -var $to_js_map=$B.parser.$to_js_map=function(tree_element){if(tree_element.to_js !==undefined){return tree_element.to_js()} -throw Error('no to_js() for '+tree_element)} -var $to_js=$B.parser.$to_js=function(tree,sep){if(sep===undefined){sep=','} -return tree.map($to_js_map).join(sep)} -var $mangle=$B.parser.$mangle=function(name,C){ -if(name.substr(0,2)=="__" && name.substr(name.length-2)!=="__"){var klass=null,scope=$get_scope(C) -while(true){if(scope.ntype=="module"){return name} -else if(scope.ntype=="class"){var class_name=scope.C.tree[0].name -while(class_name.charAt(0)=='_'){class_name=class_name.substr(1)} -return '_'+class_name+name}else{if(scope.parent && scope.parent.C){scope=$get_scope(scope.C.tree[0])}else{return name}}}}else{return name}} -var $transition=$B.parser.$transition=function(C,token,value){ -return C.transition(token,value)} -$B.forbidden=["alert","arguments","case","catch","const","constructor","Date","debugger","delete","default","do","document","enum","export","eval","extends","Error","history","function","instanceof","keys","length","location","Math","message","new","null","Number","RegExp","String","super","switch","this","throw","typeof","var","window","toLocaleString","toString","void"] -$B.aliased_names=$B.list2obj($B.forbidden) -var s_escaped='abfnrtvxuU"0123456789'+"'"+'\\',is_escaped={} -for(var i=0;i < s_escaped.length;i++){is_escaped[s_escaped.charAt(i)]=true} -var $tokenize=$B.parser.$tokenize=function(root,src){var br_close={")":"(","]":"[","}":"{"},br_stack="",br_pos=[] -var kwdict=["class","return","break","for","lambda","try","finally","raise","def","from","nonlocal","while","del","global","with","as","elif","else","if","yield","assert","import","except","raise","in","pass","with","continue","__debugger__","async","await" -] -var unsupported=[] -var $indented=["class","def","for","condition","single_kw","try","except","with" -] -var int_pattern=/^(\d[0-9_]*)(j|J)?/,float_pattern1=/^(\d[\d_]*)\.(\d+(_\d+)*)?([eE][+-]?\d+(_\d+)*)?(j|J)?/,float_pattern2=/^(\d[\d_]*)([eE][+-]?\d+(_\d+)*)(j|J)?/,hex_pattern=/^0[xX]([\da-fA-F_]+)/,octal_pattern=/^0[oO]([0-7_]+)/,binary_pattern=/^0[bB]([01_]+)/ -var C=null -var new_node=new $Node(),current=root,name="",_type=null,pos=0,indent=null,string_modifier=false -var module=root.module -var lnum=root.line_num ||1 -while(pos < src.length){var car=src.charAt(pos) -if(indent===null){var indent=0 -while(pos < src.length){var _s=src.charAt(pos) -if(_s==" "){indent++;pos++} -else if(_s=="\t"){ -indent++;pos++ -if(indent % 8 > 0){indent+=8-indent % 8}}else{break}} -var _s=src.charAt(pos) -if(_s=='\n'){pos++;lnum++;indent=null; -continue} -else if(_s=='#'){ -var offset=src.substr(pos).search(/\n/) -if(offset==-1){break} -pos+=offset+1 -lnum++ -indent=null -continue} -new_node.indent=indent -new_node.line_num=lnum -new_node.module=module -if(current.is_body_node){ -current.indent=indent} -if(indent > current.indent){ -if(C !==null){if($indented.indexOf(C.tree[0].type)==-1){$pos=pos -$_SyntaxError(C,'unexpected indent',pos)}} -current.add(new_node)}else if(indent <=current.indent && C && C.tree[0]&& -$indented.indexOf(C.tree[0].type)>-1 && -C.tree.length < 2){$pos=pos -$_SyntaxError(C,'expected an indented block',pos)}else{ -while(indent !==current.indent){current=current.parent -if(current===undefined ||indent > current.indent){$pos=pos -$_SyntaxError(C,'unexpected indent',pos)}} -current.parent.add(new_node)} -current=new_node -C=new $NodeCtx(new_node) -continue} -if(car=="#"){var end=src.substr(pos+1).search('\n') -if(end==-1){end=src.length-1} -root.comments.push([pos,end]) -pos+=end+1 -continue} -if(car=='"' ||car=="'"){var raw=C.type=='str' && C.raw,bytes=false,fstring=false,sm_length, -end=null; -if(string_modifier){switch(string_modifier){case 'r': -raw=true -break -case 'u': -break -case 'b': -bytes=true -break -case 'rb': -case 'br': -bytes=true;raw=true -break -case 'f': -fstring=true -sm_length=1 -break -case 'fr','rf': -fstring=true -sm_length=2 -raw=true -break} -string_modifier=false} -if(src.substr(pos,3)==car+car+car){_type="triple_string" -end=pos+3}else{_type="string" -end=pos+1} -var escaped=false,zone=car,found=false -while(end < src.length){if(escaped){if(src.charAt(end)=="a"){zone=zone.substr(0,zone.length-1)+"\u0007"}else{zone+=src.charAt(end) -if(raw && src.charAt(end)=='\\'){zone+='\\'}} -escaped=false -end++}else if(src.charAt(end)=="\\"){if(raw){if(end < src.length-1 && -src.charAt(end+1)==car){zone+='\\\\'+car -end+=2}else{zone+='\\\\' -end++} -escaped=true}else{if(src.charAt(end+1)=='\n'){ -end+=2 -lnum++}else if(src.substr(end+1,2)=='N{'){ -var end_lit=end+3,re=new RegExp("[-a-zA-Z0-9 ]+"),search=re.exec(src.substr(end_lit)) -if(search===null){$_SyntaxError(C,"(unicode error) "+ -"malformed \\N character escape",pos)} -var end_lit=end_lit+search[0].length -if(src.charAt(end_lit)!="}"){$_SyntaxError(C,"(unicode error) "+ -"malformed \\N character escape")} -var description=search[0].toUpperCase() -if($B.unicodedb===undefined){var xhr=new XMLHttpRequest -xhr.open("GET",$B.brython_path+"unicode.txt",false) -xhr.onreadystatechange=function(){if(this.readyState==4){if(this.status==200){$B.unicodedb=this.responseText}else{console.log("Warning - could not "+ -"load unicode.txt")}}} -xhr.send()} -if($B.unicodedb !==undefined){var re=new RegExp("^([0-9A-F]+);"+ -description+";.*$","m") -search=re.exec($B.unicodedb) -if(search===null){$_SyntaxError(C,"(unicode error) "+ -"unknown Unicode character name")} -var cp="0x"+search[1] -zone+=String.fromCodePoint(eval(cp)) -end=end_lit+1}else{end++}}else{if(end < src.length-1 && -is_escaped[src.charAt(end+1)]===undefined){zone+='\\'} -zone+='\\' -escaped=true -end++}}}else if(src.charAt(end)=='\n' && _type !='triple_string'){ -console.log(pos,end,src.substring(pos,end)) -$pos=end -$_SyntaxError(C,["EOL while scanning string literal"])}else if(src.charAt(end)==car){if(_type=="triple_string" && -src.substr(end,3)!=car+car+car){zone+=src.charAt(end) -end++}else{found=true -$pos=pos -var $string=zone.substr(1),string='' -for(var i=0;i < $string.length;i++){var $car=$string.charAt(i) -if($car==car && -(raw ||(i==0 || -$string.charAt(i-1)!='\\'))){string+='\\'} -string+=$car} -if(fstring){try{var re=new RegExp("\\\\"+car,"g"),string_no_bs=string.replace(re,car) -var elts=$B.parse_fstring(string_no_bs)}catch(err){$_SyntaxError(C,[err.toString()])}} -if(bytes){C=$transition(C,'str','b'+car+string+car)}else if(fstring){$pos-=sm_length -C=$transition(C,'str',elts) -$pos+=sm_length}else{C=$transition(C,'str',car+string+car)} -C.raw=raw; -pos=end+1 -if(_type=="triple_string"){pos=end+3} -break}}else{zone+=src.charAt(end) -if(src.charAt(end)=='\n'){lnum++} -end++}} -if(!found){if(_type==="triple_string"){$_SyntaxError(C,"Triple string end not found")}else{$_SyntaxError(C,"String end not found")}} -continue} -if(name=="" && car !='$'){ -if($B.unicode_tables.XID_Start[car.charCodeAt(0)]){name=car -var p0=pos -pos++ -while(pos < src.length && -$B.unicode_tables.XID_Continue[src.charCodeAt(pos)]){name+=src.charAt(pos) -pos++}} -if(name){if(kwdict.indexOf(name)>-1){$pos=pos-name.length -if(unsupported.indexOf(name)>-1){$_SyntaxError(C,"Unsupported Python keyword '"+name+"'")} -C=$transition(C,name)}else if(typeof $operators[name]=='string' && -['is_not','not_in'].indexOf(name)==-1){ -if(name=='is'){ -var re=/^\s+not\s+/ -var res=re.exec(src.substr(pos)) -if(res !==null){pos+=res[0].length -$pos=pos-name.length -C=$transition(C,'op','is_not')}else{$pos=pos-name.length -C=$transition(C,'op',name)}}else if(name=='not'){ -var re=/^\s+in\s+/ -var res=re.exec(src.substr(pos)) -if(res !==null){pos+=res[0].length -$pos=pos-name.length -C=$transition(C,'op','not_in')}else{$pos=pos-name.length -C=$transition(C,name)}}else{$pos=pos-name.length -C=$transition(C,'op',name)}}else if((src.charAt(pos)=='"' ||src.charAt(pos)=="'") -&&['r','b','u','rb','br','f','fr','rf']. -indexOf(name.toLowerCase())!==-1){string_modifier=name.toLowerCase() -name="" -continue}else{if($B.forbidden.indexOf(name)>-1){name='$$'+name} -$pos=pos-name.length -C=$transition(C,'id',name)} -name="" -continue}} -function rmuf(numeric_literal){ -if(numeric_literal.search("__")>-1){ -$_SyntaxError(C,"invalid literal")}else if(numeric_literal.endsWith("_")){ -$_SyntaxError(C,"invalid literal")} -return numeric_literal.replace(/_/g,"")} -function check_int(numeric_literal){ -rmuf(numeric_literal) -if(numeric_literal.startsWith("0")){if(numeric_literal.substr(1).search(/[^0_]/)>-1){ -$_SyntaxError(C,"invalid literal")}else{return "0"}}} -function rmu(numeric_literal){return numeric_literal.replace(/_/g,"")} -switch(car){case ' ': -case '\t': -pos++ -break -case '.': -if(pos < src.length-1 &&/^\d$/.test(src.charAt(pos+1))){ -var j=pos+1 -while(j < src.length && -src.charAt(j).search(/\d|e|E|_/)>-1){j++} -if(src.charAt(j)=="j"){C=$transition(C,'imaginary','0'+rmu(src.substr(pos,j-pos))) -j++}else{C=$transition(C,'float','0'+rmu(src.substr(pos,j-pos)))} -pos=j -break} -$pos=pos -C=$transition(C,'.') -pos++ -break -case '0': -var res=hex_pattern.exec(src.substr(pos)) -if(res){rmuf(res[1]) -C=$transition(C,'int',[16,rmu(res[1])]) -pos+=res[0].length -break} -var res=octal_pattern.exec(src.substr(pos)) -if(res){C=$transition(C,'int',[8,rmuf(res[1])]) -pos+=res[0].length -break} -var res=binary_pattern.exec(src.substr(pos)) -if(res){C=$transition(C,'int',[2,rmuf(res[1])]) -pos+=res[0].length -break} -if(src.charAt(pos+1).search(/\d/)>-1){ -if(parseInt(src.substr(pos))===0){res=int_pattern.exec(src.substr(pos)) -$pos=pos -check_int(res[0]) -C=$transition(C,'int',[10,rmu(res[0])]) -pos+=res[0].length -break}else{$_SyntaxError(C,'invalid literal starting with 0')}} -case '0': -case '1': -case '2': -case '3': -case '4': -case '5': -case '6': -case '7': -case '8': -case '9': -var res=float_pattern1.exec(src.substr(pos)) -if(res){check_int(res[1]) -if(res[2]){rmuf(res[2])} -$pos=pos -if($B.last(res)!==undefined){C=$transition(C,'imaginary',rmuf(res[0].substr(0,res[0].length-1)))}else{C=$transition(C,'float',rmuf(res[0]))}}else{res=float_pattern2.exec(src.substr(pos)) -if(res){check_int(res[1]) -$pos=pos -if($B.last(res)!==undefined){C=$transition(C,'imaginary',rmuf(res[0].substr(0,res[0].length-1)))}else{C=$transition(C,'float',rmuf(res[0]))}}else{res=int_pattern.exec(src.substr(pos)) -check_int(res[1]) -$pos=pos -if(res[2]!==undefined){C=$transition(C,'imaginary',rmu(res[1]))}else{C=$transition(C,'int',[10,rmu(res[0])])}}} -pos+=res[0].length -break -case '\n': -lnum++ -if(br_stack.length > 0){ -pos++}else{if(current.C.tree.length > 0 ||current.C.async){$pos=pos -C=$transition(C,'eol') -indent=null -new_node=new $Node()}else{new_node.line_num=lnum} -pos++} -break -case '(': -case '[': -case '{': -br_stack+=car -br_pos[br_stack.length-1]=[C,pos] -$pos=pos -C=$transition(C,car) -pos++ -break -case ')': -case ']': -case '}': -if(br_stack==""){$pos=pos -$_SyntaxError(C,"Unexpected closing bracket")}else if(br_close[car]!= -br_stack.charAt(br_stack.length-1)){$pos=pos -$_SyntaxError(C,"Unbalanced bracket")}else{br_stack=br_stack.substr(0,br_stack.length-1) -$pos=pos -C=$transition(C,car) -pos++} -break -case '=': -if(src.charAt(pos+1)!="="){$pos=pos -C=$transition(C,'=') -pos++}else{$pos=pos -C=$transition(C,'op','==') -pos+=2} -break -case ',': -case ':': -$pos=pos -if(src.substr(pos,2)==":="){ -C=$transition(C,":=") -pos++}else{C=$transition(C,car)} -pos++ -break -case ';': -$transition(C,'eol') -if(current.C.tree.length==0){ -$pos=pos -$_SyntaxError(C,'invalid syntax')} -var pos1=pos+1 -var ends_line=false -while(pos1 < src.length){var _s=src.charAt(pos1) -if(_s=='\n' ||_s=='#'){ends_line=true;break} -else if(_s==' '){pos1++} -else{break}} -if(ends_line){pos++;break} -new_node=new $Node() -new_node.indent=$get_node(C).indent -new_node.line_num=lnum -new_node.module=module -$get_node(C).parent.add(new_node) -current=new_node -C=new $NodeCtx(new_node) -pos++ -break -case '/': -case '%': -case '&': -case '>': -case '<': -case '-': -case '+': -case '*': -case '@': -case '/': -case '^': -case '=': -case '|': -case '~': -case '!': -if(car=='-' && src.charAt(pos+1)=='>'){C=$transition(C,'annotation') -pos+=2 -continue} -if(car=='@' && C.type=="node"){$pos=pos -C=$transition(C,car) -pos++ -break} -var op_match="" -for(var op_sign in $operators){if(op_sign==src.substr(pos,op_sign.length) -&& op_sign.length > op_match.length){op_match=op_sign}} -$pos=pos -if(op_match.length > 0){if(op_match in $augmented_assigns){C=$transition(C,'augm_assign',op_match)}else{C=$transition(C,'op',op_match)} -pos+=op_match.length}else{$_SyntaxError(C,'invalid character: '+car)} -break -case '\\': -if(src.charAt(pos+1)=='\n'){lnum++ -pos+=2 -if(pos==src.length){$_SyntaxError(C,["unexpected EOF while parsing"])}else if(C.type=="node"){$_SyntaxError(C,'nothing before \\')} -break}else{$pos=pos -$_SyntaxError(C,['unexpected character after line continuation character'])} -case String.fromCharCode(12): -pos+=1 -break -default: -$pos=pos -$_SyntaxError(C,'unknown token ['+car+']')}} -if(br_stack.length !=0){var br_err=br_pos[0] -$pos=br_err[1] -var lines=src.split("\n"),id=root.id,fname=id.startsWith("$")? '' :id -$_SyntaxError(br_err[0],["unexpected EOF while parsing ("+fname+", line "+ -(lines.length-1)+")"])} -if(C !==null){if(C.type=="async"){ -console.log("error with async",pos,src,src.substr(pos)) -$pos=pos-7 -throw $_SyntaxError(C,"car "+car+"after async",pos)}else if(C.tree[0]&& -$indented.indexOf(C.tree[0].type)>-1){$pos=pos-1 -$_SyntaxError(C,'expected an indented block',pos)}else{var parent=current.parent -if(parent.C && parent.C.tree && -parent.C.tree[0]&& -parent.C.tree[0].type=="try"){$pos=pos-1 -$_SyntaxError(C,["unexpected EOF while parsing"])} -if(root.yields_func_check){var save_pos=$pos -for(const _yield of root.yields_func_check){$pos=_yield[1] -_yield[0].check_in_function()} -$pos=save_pos}}}} -var $create_root_node=$B.parser.$create_root_node=function(src,module,locals_id,parent_block,line_num){var root=new $Node('module') -root.module=module -root.id=locals_id -root.binding={__doc__:true,__name__:true,__file__:true,__package__:true} -root.parent_block=parent_block -root.line_num=line_num -root.indent=-1 -root.comments=[] -root.imports={} -if(typeof src=="object"){root.is_comp=src.is_comp -if(src.has_annotations){root.binding.__annotations__=true} -src=src.src} -root.src=src -return root} -$B.py2js=function(src,module,locals_id,parent_scope,line_num){ -$pos=0 -if(typeof module=="object"){var __package__=module.__package__ -module=module.__name__}else{var __package__=""} -parent_scope=parent_scope ||$B.builtins_scope -var t0=new Date().getTime(),is_comp=false,has_annotations=true, -line_info, -ix -if(typeof src=='object'){var is_comp=src.is_comp,has_annotations=src.has_annotations,line_info=src.line_info,ix=src.ix -if(line_info !==undefined){line_num=parseInt(line_info.split(",")[0])} -src=src.src} -src=src.replace(/\r\n/gm,"\n") -if(src.endsWith("\\")&& !src.endsWith("\\\\")){src=src.substr(0,src.length-1)} -if(src.charAt(src.length-1)!="\n"){src+="\n"} -var locals_is_module=Array.isArray(locals_id) -if(locals_is_module){locals_id=locals_id[0]} -var internal=locals_id.charAt(0)=='$' -var local_ns='$locals_'+locals_id.replace(/\./g,'_') -var global_ns='$locals_'+module.replace(/\./g,'_') -var root=$create_root_node( -{src:src,is_comp:is_comp,has_annotations:has_annotations},module,locals_id,parent_scope,line_num) -$tokenize(root,src) -root.is_comp=is_comp -if(ix !=undefined){root.ix=ix} -root.transform() -var js=['var $B = __BRYTHON__;\n'],pos=1 -js[pos++]='var _b_ = __BRYTHON__.builtins;\n' -js[pos]='var $locals = '+local_ns -if(is_comp){js[pos]+=' = {}'} -var offset=0 -root.insert(0,$NodeJS(js.join(''))) -offset++ -root.insert(offset++,$NodeJS(local_ns+'.__package__ = "'+__package__+'"')) -if(root.binding.__annotations__){root.insert(offset++,$NodeJS('$locals.__annotations__ = $B.empty_dict()'))} -var enter_frame_pos=offset,js='var $top_frame = ["'+locals_id.replace(/\./g,'_')+'", '+ -local_ns+', "'+module.replace(/\./g,'_')+'", '+ -global_ns+']\n$locals.$f_trace = $B.enter_frame($top_frame)\n'+ -'var $stack_length = $B.frames_stack.length;' -root.insert(offset++,$NodeJS(js)) -var try_node=new $NodeJS('try'),children=root.children.slice(enter_frame_pos+1,root.children.length) -root.insert(enter_frame_pos+1,try_node) -if(children.length==0){children=[$NodeJS('')]} -children.forEach(function(child){try_node.add(child)}) -try_node.add($NodeJS('$B.leave_frame({$locals, value: _b_.None})')) -root.children.splice(enter_frame_pos+2,root.children.length) -var catch_node=$NodeJS('catch(err)') -catch_node.add($NodeJS('$B.leave_frame({$locals, value: _b_.None})')) -catch_node.add($NodeJS('throw err')) -root.add(catch_node) -$add_line_num(root,null,line_info) -var t1=new Date().getTime() -if($B.debug > 2){if(module==locals_id){console.log('module '+module+' translated in '+ -(t1-t0)+' ms')}} -$B.compile_time+=t1-t0 -return root} -$B.set_import_paths=function(){ -var meta_path=[],path_hooks=[] -if($B.use_VFS){meta_path.push($B.finders.VFS)} -if($B.$options.static_stdlib_import !==false && $B.protocol !="file"){ -meta_path.push($B.finders.stdlib_static) -if($B.path.length > 3){$B.path.shift() -$B.path.shift()}} -if($B.protocol !=="file"){meta_path.push($B.finders.path) -path_hooks.push($B.$path_hooks[0])} -if($B.$options.cpython_import){if($B.$options.cpython_import=="replace"){$B.path.pop()} -meta_path.push($B.finders.CPython)} -$B.meta_path=meta_path -$B.path_hooks=path_hooks} -var brython=$B.parser.brython=function(options){ -if(options===undefined){options={'debug':1}} -if(typeof options=='number'){options={'debug':options}} -if(options.debug===undefined){options.debug=1} -$B.debug=options.debug -_b_.__debug__=$B.debug > 0 -$B.compile_time=0 -if(options.profile===undefined){options.profile=0} -$B.profile=options.profile -if(options.indexedDB===undefined){options.indexedDB=true} -if(options.static_stdlib_import===undefined){options.static_stdlib_import=true} -$B.static_stdlib_import=options.static_stdlib_import -$B.$options=options -$B.set_import_paths() -var $href=$B.script_path=_window.location.href,$href_elts=$href.split('/') -$href_elts.pop() -if($B.isWebWorker ||$B.isNode){$href_elts.pop()} -$B.curdir=$href_elts.join('/') -if(options.pythonpath !==undefined){$B.path=options.pythonpath -$B.$options.static_stdlib_import=false} -if(options.python_paths){options.python_paths.forEach(function(path){var lang,prefetch -if(typeof path !=="string"){lang=path.lang -prefetch=path.prefetch -path=path.path} -$B.path.push(path) -if(path.slice(-7).toLowerCase()=='.vfs.js' && -(prefetch===undefined ||prefetch===true)){$B.path_importer_cache[path+'/']= -$B.imported['_importlib'].VFSPathFinder(path)} -if(lang){_importlib.optimize_import_for_path(path,lang)}})} -if(!($B.isWebWorker ||$B.isNode)){ -var path_links=document.querySelectorAll('head link[rel~=pythonpath]'),_importlib=$B.imported['_importlib'] -for(var i=0,e;e=path_links[i];++i){var href=e.href; -if((' '+e.rel+' ').indexOf(' prepend ')!=-1){$B.path.unshift(href);}else{$B.path.push(href);} -var filetype=e.hreflang -if(filetype){if(filetype.slice(0,2)=='x-'){filetype=filetype.slice(2)} -_importlib.optimize_import_for_path(e.href,filetype)}}} -if($B.$options.args){$B.__ARGV=$B.$options.args}else{$B.__ARGV=_b_.list.$factory([])} -if(!($B.isWebWorker ||$B.isNode)){_run_scripts(options)}} -$B.run_script=function(src,name,run_loop){ -$B.$py_module_path[name]=$B.script_path -try{var root=$B.py2js(src,name,name),js=root.to_js(),script={__doc__:root.__doc__,js:js,__name__:name,$src:src,__file__:$B.script_path+ -($B.script_path.endsWith("/")? "" :"/")+name} -$B.file_cache[script.__file__]=src -if($B.debug > 1){console.log(js)}}catch(err){$B.handle_error(err)} -if($B.hasOwnProperty("VFS")&& $B.has_indexedDB){ -var imports1=Object.keys(root.imports).slice(),imports=imports1.filter(function(item){return $B.VFS.hasOwnProperty(item)}) -Object.keys(imports).forEach(function(name){if($B.VFS.hasOwnProperty(name)){var submodule=$B.VFS[name],type=submodule[0] -if(type==".py"){var src=submodule[1],subimports=submodule[2],is_package=submodule.length==4 -if(type==".py"){ -required_stdlib_imports(subimports)} -subimports.forEach(function(mod){if(imports.indexOf(mod)==-1){imports.push(mod)}})}}}) -for(var j=0;j < imports.length;j++){$B.tasks.push([$B.inImported,imports[j]])} -root=null} -$B.tasks.push(["execute",script]) -if(run_loop){$B.loop()}} -var $log=$B.$log=function(js){js.split("\n").forEach(function(line,i){console.log(i+1,":",line)})} -var _run_scripts=$B.parser._run_scripts=function(options){ -var kk=Object.keys(_window) -var defined_ids={} -if(options.ipy_id !==undefined){var $elts=[] -options.ipy_id.forEach(function(elt){$elts.push(document.getElementById(elt))})}else{var scripts=document.getElementsByTagName('script'),$elts=[],webworkers=[] -for(var i=0;i < scripts.length;i++){var script=scripts[i] -if(script.type=="text/python" ||script.type=="text/python3"){if(script.className=="webworker"){if(script.id===undefined){throw _b_.AttributeError.$factory( -"webworker script has no attribute 'id'")} -webworkers.push(script)}else{$elts.push(script)}}}} -var first_script=true,module_name -if(options.ipy_id !==undefined){module_name='__main__' -var $src="",js,root -$B.$py_module_path[module_name]=$B.script_path -$elts.forEach(function(elt){$src+=(elt.innerHTML ||elt.textContent)}) -try{ -root=$B.py2js($src,module_name,module_name) -js=root.to_js() -if($B.debug > 1){$log(js)} -eval(js) -$B.clear_ns(module_name) -root=null -js=null}catch($err){root=null -js=null -console.log($err) -if($B.debug > 1){console.log($err) -for(var attr in $err){console.log(attr+' : ',$err[attr])}} -if($err.$py_error===undefined){console.log('Javascript error',$err) -$err=_b_.RuntimeError.$factory($err+'')} -var $trace=$B.$getattr($err,'info')+'\n'+$err.__name__+ -': '+$err.args -try{$B.$getattr($B.stderr,'write')($trace)}catch(print_exc_err){console.log($trace)} -throw $err}}else{if($elts.length > 0){if(options.indexedDB && $B.has_indexedDB && -$B.hasOwnProperty("VFS")){$B.tasks.push([$B.idb_open])}} -for(var i=0;i < $elts.length;i++){var elt=$elts[i] -if(elt.id){if(defined_ids[elt.id]){throw Error("Brython error : Found 2 scripts with the "+ -"same id '"+elt.id+"'")}else{defined_ids[elt.id]=true}}} -var src -for(var i=0,len=webworkers.length;i < len;i++){var worker=webworkers[i] -if(worker.src){ -$B.tasks.push([$B.ajax_load_script,{name:worker.id,url:worker.src,is_ww:true}])}else{ -src=(worker.innerHTML ||worker.textContent) -src=src.replace(/^\n/,'') -$B.webworkers[worker.id]=src}} -for(var i=0;i < $elts.length;i++){var elt=$elts[i] -if(elt.type=="text/python" ||elt.type=="text/python3"){ -if(elt.id){module_name=elt.id}else{ -if(first_script){module_name='__main__' -first_script=false}else{module_name='__main__'+$B.UUID()} -while(defined_ids[module_name]!==undefined){module_name='__main__'+$B.UUID()}} -if(elt.src){ -$B.tasks.push([$B.ajax_load_script,{name:module_name,url:elt.src}])}else{ -src=(elt.innerHTML ||elt.textContent) -src=src.replace(/^\n/,'') -$B.run_script(src,module_name)}}}} -if(options.ipy_id===undefined){$B.loop()}} -$B.$operators=$operators -$B.$Node=$Node -$B.$NodeJSCtx=$NodeJSCtx -$B.brython=brython})(__BRYTHON__) -var brython=__BRYTHON__.brython -if(__BRYTHON__.isNode){global.__BRYTHON__=__BRYTHON__ -module.exports={__BRYTHON__ }} -; - -(function($B){var _b_=$B.builtins -if($B.VFS_timestamp && $B.VFS_timestamp > $B.timestamp){ -$B.timestamp=$B.VFS_timestamp} -function idb_load(evt,module){ -var res=evt.target.result -var timestamp=$B.timestamp -if(res===undefined ||res.timestamp !=$B.timestamp || -($B.VFS[module]&& res.source_ts !==$B.VFS[module].timestamp)){ -if($B.VFS[module]!==undefined){var elts=$B.VFS[module],ext=elts[0],source=elts[1] -if(ext==".py"){var imports=elts[2],is_package=elts.length==4,source_ts=elts.timestamp,__package__ -if(is_package){__package__=module} -else{var parts=module.split(".") -parts.pop() -__package__=parts.join(".")} -$B.imported[module]=$B.module.$factory(module,"",__package__) -try{var root=$B.py2js(source,module,module),js=root.to_js()}catch(err){$B.handle_error(err)} -delete $B.imported[module] -if($B.debug > 1){console.log("precompile",module)} -var parts=module.split(".") -if(parts.length > 1){parts.pop()} -if($B.stdlib.hasOwnProperty(parts.join("."))){var imports=elts[2] -imports=imports.join(",") -$B.tasks.splice(0,0,[store_precompiled,module,js,source_ts,imports,is_package])}}else{console.log('bizarre',module,ext)}}else{}}else{ -if(res.is_package){$B.precompiled[module]=[res.content]}else{$B.precompiled[module]=res.content} -if(res.imports.length > 0){ -if($B.debug > 1){console.log(module,"imports",res.imports)} -var subimports=res.imports.split(",") -for(var i=0;i < subimports.length;i++){var subimport=subimports[i] -if(subimport.startsWith(".")){ -var url_elts=module.split("."),nb_dots=0 -while(subimport.startsWith(".")){nb_dots++ -subimport=subimport.substr(1)} -var elts=url_elts.slice(0,nb_dots) -if(subimport){elts=elts.concat([subimport])} -subimport=elts.join(".")} -if(!$B.imported.hasOwnProperty(subimport)&& -!$B.precompiled.hasOwnProperty(subimport)){ -if($B.VFS.hasOwnProperty(subimport)){var submodule=$B.VFS[subimport],ext=submodule[0],source=submodule[1] -if(submodule[0]==".py"){$B.tasks.splice(0,0,[idb_get,subimport])}else{add_jsmodule(subimport,source)}}}}}} -loop()} -function store_precompiled(module,js,source_ts,imports,is_package){ -var db=$B.idb_cx.result,tx=db.transaction("modules","readwrite"),store=tx.objectStore("modules"),cursor=store.openCursor(),data={"name":module,"content":js,"imports":imports,"origin":origin,"timestamp":__BRYTHON__.timestamp,"source_ts":source_ts,"is_package":is_package},request=store.put(data) -if($B.debug > 1){console.log("store precompiled",module,"package",is_package)} -document.dispatchEvent(new CustomEvent('precompile',{detail:'cache module '+module})) -var ix=$B.outdated.indexOf(module) -if(ix >-1){$B.outdated.splice(ix,1)} -request.onsuccess=function(evt){ -$B.tasks.splice(0,0,[idb_get,module]) -loop()}} -function idb_get(module){ -var db=$B.idb_cx.result,tx=db.transaction("modules","readonly") -try{var store=tx.objectStore("modules") -req=store.get(module) -req.onsuccess=function(evt){idb_load(evt,module)}}catch(err){console.info('error',err)}} -$B.idb_open=function(obj){$B.idb_name="brython-cache" -var idb_cx=$B.idb_cx=indexedDB.open($B.idb_name) -idb_cx.onsuccess=function(){var db=idb_cx.result -if(!db.objectStoreNames.contains("modules")){var version=db.version -db.close() -console.info('create object store',version) -idb_cx=indexedDB.open($B.idb_name,version+1) -idb_cx.onupgradeneeded=function(){console.info("upgrade needed") -var db=$B.idb_cx.result,store=db.createObjectStore("modules",{"keyPath":"name"}) -store.onsuccess=loop} -idb_cx.onversionchanged=function(){console.log("version changed")} -idb_cx.onsuccess=function(){console.info("db opened",idb_cx) -var db=idb_cx.result,store=db.createObjectStore("modules",{"keyPath":"name"}) -store.onsuccess=loop}}else{console.info("using indexedDB for stdlib modules cache") -var tx=db.transaction("modules","readwrite"),store=tx.objectStore("modules"),record,outdated=[] -var openCursor=store.openCursor() -openCursor.onerror=function(evt){console.log("open cursor error",evt)} -openCursor.onsuccess=function(evt){cursor=evt.target.result -if(cursor){record=cursor.value -if(record.timestamp==$B.timestamp){if(!$B.VFS ||!$B.VFS[record.name]|| -$B.VFS[record.name].timestamp==record.source_ts){ -if(record.is_package){$B.precompiled[record.name]=[record.content]}else{$B.precompiled[record.name]=record.content} -if($B.debug > 1){console.info("load from cache",record.name)}}else{ -outdated.push(record.name)}}else{outdated.push(record.name)} -cursor.continue()}else{if($B.debug > 1){console.log("done")} -$B.outdated=outdated -loop()}}}} -idb_cx.onupgradeneeded=function(){console.info("upgrade needed") -var db=idb_cx.result,store=db.createObjectStore("modules",{"keyPath":"name"}) -store.onsuccess=loop} -idb_cx.onerror=function(){console.info('could not open indexedDB database') -$B.idb_cx=null -$B.idb_name=null -$B.$options.indexedDB=false -loop()}} -$B.ajax_load_script=function(script){var url=script.url,name=script.name -if($B.files && $B.files.hasOwnProperty(name)){$B.tasks.splice(0,0,[$B.run_script,$B.files[name],name,true])}else if($B.protocol !="file"){var req=new XMLHttpRequest(),qs=$B.$options.cache ? '' : -(url.search(/\?/)>-1 ? '&' :'?')+Date.now() -req.open("GET",url+qs,true) -req.onreadystatechange=function(){if(this.readyState==4){if(this.status==200){var src=this.responseText -if(script.is_ww){$B.webworkers[name]=src}else{$B.tasks.splice(0,0,[$B.run_script,src,name,true])} -loop()}else if(this.status==404){throw Error(url+" not found")}}} -req.send()}else{throw _b_.IOError.$factory("can't load external script at "+ -script.url+" (Ajax calls not supported with protocol file:///)")}} -function add_jsmodule(module,source){ -source+="\nvar $locals_"+ -module.replace(/\./g,"_")+" = $module" -$B.precompiled[module]=source} -var inImported=$B.inImported=function(module){if($B.imported.hasOwnProperty(module)){}else if(__BRYTHON__.VFS && __BRYTHON__.VFS.hasOwnProperty(module)){var elts=__BRYTHON__.VFS[module] -if(elts===undefined){console.log('bizarre',module)} -var ext=elts[0],source=elts[1],is_package=elts.length==4 -if(ext==".py"){if($B.idb_cx && !$B.idb_cx.$closed){$B.tasks.splice(0,0,[idb_get,module])}}else{add_jsmodule(module,source)}}else{console.log("bizarre",module)} -loop()} -var loop=$B.loop=function(){if($B.tasks.length==0){ -if($B.idb_cx && ! $B.idb_cx.$closed){var db=$B.idb_cx.result,tx=db.transaction("modules","readwrite"),store=tx.objectStore("modules") -while($B.outdated.length > 0){var module=$B.outdated.pop(),req=store.delete(module) -req.onsuccess=function(event){if($B.debug > 1){console.info("delete outdated",module)} -document.dispatchEvent(new CustomEvent('precompile',{detail:'remove outdated '+module+ -' from cache'}))}} -document.dispatchEvent(new CustomEvent('precompile',{detail:"close"})) -$B.idb_cx.result.close() -$B.idb_cx.$closed=true} -return} -var task=$B.tasks.shift(),func=task[0],args=task.slice(1) -if(func=="execute"){try{var script=task[1],script_id=script.__name__.replace(/\./g,"_"),module=$B.module.$factory(script.__name__) -module.$src=script.$src -module.__file__=script.__file__ -$B.imported[script_id]=module -new Function("$locals_"+script_id,script.js)(module)}catch(err){ -if(err.__class__===undefined){console.log('Javascript error',err) -if($B.is_recursion_error(err)){err=_b_.RecursionError.$factory("too much recursion")}else{$B.print_stack() -err=_b_.RuntimeError.$factory(err+'')}} -if($B.debug > 1){console.log("handle error",err.__class__,err.args,err.$stack) -console.log($B.frames_stack.slice())} -$B.handle_error(err)} -loop()}else{ -try{func.apply(null,args)}catch(err){$B.handle_error(err)}}} -$B.tasks=[] -$B.has_indexedDB=self.indexedDB !==undefined -$B.handle_error=function(err){ -if($B.debug > 1){console.log("handle error",err.__class__,err.args)} -if(err.__class__ !==undefined){var name=$B.class_name(err),trace=$B.$getattr(err,'info') -if(name=='SyntaxError' ||name=='IndentationError'){var offset=err.args[3] -trace+='\n '+' '.repeat(offset)+'^'+ -'\n'+name+': '+err.args[0]}else{trace+='\n'+name -if(err.args[0]&& err.args[0]!==_b_.None){trace+=': '+_b_.str.$factory(err.args[0])}}}else{console.log(err) -trace=err+""} -try{$B.$getattr($B.stderr,'write')(trace) -try{$B.$getattr($B.stderr,'flush')()}catch(err){console.log(err)}}catch(print_exc_err){console.log(trace)} -throw err} -function required_stdlib_imports(imports,start){ -var nb_added=0 -start=start ||0 -for(var i=start;i < imports.length;i++){var module=imports[i] -if($B.imported.hasOwnProperty(module)){continue} -var mod_obj=$B.VFS[module] -if(mod_obj===undefined){console.log("undef",module)} -if(mod_obj[0]==".py"){var subimports=mod_obj[2] -subimports.forEach(function(subimport){if(!$B.imported.hasOwnProperty(subimport)&& -imports.indexOf(subimport)==-1){if($B.VFS.hasOwnProperty(subimport)){imports.push(subimport) -nb_added++}}})}} -if(nb_added){required_stdlib_imports(imports,imports.length-nb_added)} -return imports}})(__BRYTHON__) -; -__BRYTHON__.builtins.object=(function($B){var _b_=$B.builtins -var object={ -$infos:{__name__:"object"},$is_class:true,$native:true} -var opnames=["add","sub","mul","truediv","floordiv","mod","pow","lshift","rshift","and","xor","or"] -var opsigns=["+","-","*","/","//","%","**","<<",">>","&","^","|"] -object.__delattr__=function(self,attr){attr=$B.from_alias(attr) -if(self.__dict__ && self.__dict__.$string_dict && -self.__dict__.$string_dict[attr]!==undefined){delete self.__dict__.$string_dict[attr] -return _b_.None}else if(self.__dict__===undefined && self[attr]!==undefined){delete self[attr] -return _b_.None}else{ -var klass=self.__class__ -if(klass){var prop=$B.$getattr(klass,attr) -if(prop.__class__===_b_.property){if(prop.__delete__ !==undefined){prop.__delete__(self) -return _b_.None}}}} -throw _b_.AttributeError.$factory(attr)} -object.__dir__=function(self){var objects -if(self.$is_class){objects=[self].concat(self.__mro__)}else{var klass=self.__class__ ||$B.get_class(self) -objects=[self,klass].concat(klass.__mro__)} -var res=[] -for(var i=0,len=objects.length;i < len;i++){for(var attr in objects[i]){if(attr.charAt(0)=="$"){if(attr.charAt(1)=="$"){ -res.push(attr.substr(2))} -continue} -if(! isNaN(parseInt(attr.charAt(0)))){ -continue} -if(attr=="__mro__"){continue} -res.push(attr)}} -if(self.__dict__){for(var attr in self.__dict__.$string_dict){if(attr.substr(0,2)=="$$"){res.push(attr.substr(2))} -else if(attr.charAt(0)!="$"){res.push(attr)}}} -res=_b_.list.$factory(_b_.set.$factory(res)) -_b_.list.sort(res) -return res} -object.__eq__=function(self,other){ -if(self===other){return true} -return _b_.NotImplemented} -object.__format__=function(){var $=$B.args("__format__",2,{self:null,spec:null},["self","spec"],arguments,{},null,null) -if($.spec !==""){throw _b_.TypeError.$factory( -"non-empty format string passed to object.__format__")} -return _b_.getattr($.self,"__str__")()} -object.__ge__=function(){return _b_.NotImplemented} -object.__getattribute__=function(obj,attr){var klass=obj.__class__ ||$B.get_class(obj),is_own_class_instance_method=false -var $test=false -if($test){console.log("attr",attr,"de",obj,"klass",klass)} -if(attr==="__class__"){return klass} -var res=obj[attr] -if(Array.isArray(obj)&& Array.prototype[attr]!==undefined){ -res=undefined} -if(res===undefined && obj.__dict__){var dict=obj.__dict__ -if(dict.$string_dict.hasOwnProperty(attr)){return dict.$string_dict[attr][0]}} -if(res===undefined){ -function check(obj,kl,attr){var v=kl[attr] -if(v !==undefined){return v}} -res=check(obj,klass,attr) -if(res===undefined){var mro=klass.__mro__ -for(var i=0,len=mro.length;i < len;i++){res=check(obj,mro[i],attr) -if(res !==undefined){if($test){console.log("found in",mro[i])} -break}}}else{if(res.__class__ !==$B.method && res.__get__===undefined){ -is_own_class_instance_method=true}}}else{if(res.__set__===undefined){ -return res}} -if(res !==undefined){if($test){console.log(res)} -if(res.__class__===_b_.property){return res.__get__(res,obj,klass)} -if(res.__class__===$B.method){if($test){console.log("res is method")} -if(res.__get__===undefined){console.log("bizarre",obj,attr,res)} -return res.__get__(obj,klass)} -var get=res.__get__ -if(get===undefined && res.__class__){var get=res.__class__.__get__ -for(var i=0;i < res.__class__.__mro__.length && -get===undefined;i++){get=res.__class__.__mro__[i].__get__}} -if($test){console.log("get",get)} -var __get__=get===undefined ? null : -$B.$getattr(res,"__get__",null) -if($test){console.log("__get__",__get__)} -if(__get__ !==null){try{return __get__.apply(null,[obj,klass])} -catch(err){console.log('error in get.apply',err) -console.log("get attr",attr,"of",obj) -console.log(__get__+'') -throw err}} -if(typeof res=="object"){if(__get__ &&(typeof __get__=="function")){get_func=function(x,y){return __get__.apply(x,[y,klass.$factory])}}} -if(__get__===null &&(typeof res=="function")){__get__=function(x){return x}} -if(__get__ !==null){ -res.__name__=attr -if(attr=="__new__"){res.$type="staticmethod"} -var res1=__get__.apply(null,[res,obj,klass]) -if($test){console.log("res",res,"res1",res1)} -if(typeof res1=="function"){ -if(res1.__class__===$B.method){return res} -if(res.$type=="staticmethod"){return res} -else{var self=res.__class__===$B.method ? klass :obj,method=function(){var args=[self] -for(var i=0,len=arguments.length;i < len;i++){args.push(arguments[i])} -return res.apply(this,args)} -method.__class__=$B.method -method.__get__=function(obj,cls){var clmethod=res.bind(null,cls) -clmethod.__class__=$B.method -clmethod.$infos={__self__:cls,__func__:res,__name__:res.$infos.__name__,__qualname__:cls.$infos.__name__+"."+ -res.$infos.__name__} -return clmethod} -method.__get__.__class__=$B.method_wrapper -method.__get__.$infos=res.$infos -if(klass.$infos===undefined){console.log("no $infos",klass) -console.log($B.last($B.frames_stack))} -method.$infos={__self__:self,__func__:res,__name__:attr,__qualname__:klass.$infos.__name__+"."+attr} -if($test){console.log("return method",method)} -if(is_own_class_instance_method){obj.$method_cache=obj.$method_cache ||{} -obj.$method_cache[attr]=[method,res]} -return method}}else{ -return res1}} -return res}else{ -var _ga=obj["__getattr__"] -if(_ga===undefined){_ga=klass["__getattr__"] -if(_ga===undefined){var mro=klass.__mro__ -for(var i=0,len=mro.length;i < len;i++){_ga=mro[i]["__getattr__"] -if(_ga !==undefined){break}}}} -if(_ga !==undefined){if(klass===$B.module){return _ga(attr)} -return _ga(obj,attr)}}} -object.__gt__=function(){return _b_.NotImplemented} -object.__hash__=function(self){var hash=self.__hashvalue__ -if(hash !==undefined){return hash} -return self.__hashvalue__=$B.$py_next_hash--} -object.__init__=function(){if(arguments.length==0){throw _b_.TypeError.$factory("descriptor '__init__' of 'object' "+ -"object needs an argument")} -return _b_.None} -object.__init_subclass__=function(){ -var $=$B.args("__init_subclass__",0,{},[],arguments,{},null,null) -return _b_.None} -object.__init_subclass__.$type="staticmethod" -object.__le__=function(){return _b_.NotImplemented} -object.__lt__=function(){return _b_.NotImplemented} -object.__mro__=[] -object.__new__=function(cls,...args){if(cls===undefined){throw _b_.TypeError.$factory("object.__new__(): not enough arguments")} -var init_func=$B.$getattr(cls,"__init__") -if(init_func===object.__init__){if(args.length > 0){throw _b_.TypeError.$factory("object() takes no parameters")}} -return{ -__class__ :cls,__dict__:$B.empty_dict()}} -object.__ne__=function(self,other){ -if(self===other){return false} -var eq=$B.$getattr(self,"__eq__",null) -if(eq !==null){var res=$B.$call(eq)(other) -if(res===_b_.NotImplemented){return res} -return ! $B.$bool(res)} -return _b_.NotImplemented} -object.__reduce__=function(self){function _reconstructor(cls){return $B.$call(cls)()} -_reconstructor.$infos={__qualname__:"_reconstructor"} -var res=[_reconstructor] -res.push(_b_.tuple.$factory([self.__class__]. -concat(self.__class__.__mro__))) -var d=$B.empty_dict() -for(var attr in self.__dict__.$string_dict){_b_.dict.$setitem(d.$string_dict,attr,self.__dict__.$string_dict[attr][0])} -console.log("object.__reduce__, d",d) -res.push(d) -return _b_.tuple.$factory(res)} -function __newobj__(cls){return $B.$getattr(cls,"__new__").apply(null,arguments)} -__newobj__.$infos={__name__:"__newobj__",__qualname__:"__newobj__"} -_b_.__newobj__=__newobj__ -object.__reduce_ex__=function(self){var res=[__newobj__] -var arg2=_b_.tuple.$factory([self.__class__]) -if(Array.isArray(self)){self.forEach(function(item){arg2.push(item)})} -res.push(arg2) -var d=$B.empty_dict(),nb=0 -if(self.__dict__===undefined){throw _b_.TypeError.$factory("cannot pickle '"+ -$B.class_name(self)+"' object")} -for(var attr in self.__dict__.$string_dict){if(attr=="__class__" ||attr.startsWith("$")){continue} -_b_.dict.$setitem(d,attr,self.__dict__.$string_dict[attr][0]) -nb++} -if(nb==0){d=_b_.None} -res.push(d) -res.push(_b_.None) -return _b_.tuple.$factory(res)} -object.__repr__=function(self){if(self===object){return ""} -if(self.__class__===_b_.type){return ""} -var module=self.__class__.$infos.__module__ -if(module !==undefined && !module.startsWith("$")&& -module !=="builtins"){return "<"+self.__class__.$infos.__module__+"."+ -$B.class_name(self)+" object>"}else{return "<"+$B.class_name(self)+" object>"}} -object.__setattr__=function(self,attr,val){if(val===undefined){ -throw _b_.TypeError.$factory( -"can't set attributes of built-in/extension type 'object'")}else if(self.__class__===object){ -if(object[attr]===undefined){throw _b_.AttributeError.$factory( -"'object' object has no attribute '"+attr+"'")}else{throw _b_.AttributeError.$factory( -"'object' object attribute '"+attr+"' is read-only")}} -if($B.aliased_names[attr]){attr="$$"+attr} -if(self.__dict__){_b_.dict.$setitem(self.__dict__,attr,val)}else{ -self[attr]=val} -return _b_.None} -object.__setattr__.__get__=function(obj){return function(attr,val){object.__setattr__(obj,attr,val)}} -object.__setattr__.__str__=function(){return "method object.setattr"} -object.__str__=function(self){var repr_func=$B.$getattr(self,"__repr__") -return $B.$call(repr_func)()} -object.__subclasshook__=function(){return _b_.NotImplemented} -object.$factory=function(){var res={__class__:object},args=[res].concat(Array.prototype.slice.call(arguments)) -object.__init__.apply(null,args) -return res} -$B.set_func_names(object,"builtins") -$B.make_class=function(name,factory){ -var A={__class__:_b_.type,__mro__:[object],$infos:{__name__:name},$is_class:true} -A.$factory=factory -return A} -return object})(__BRYTHON__) -; -;(function($B){var _b_=$B.builtins -$B.$class_constructor=function(class_name,class_obj,bases,parents_names,kwargs){bases=bases ||[] -var metaclass -var module=class_obj.__module__ -if(module===undefined){ -module=class_obj.__module__=$B.last($B.frames_stack)[2]} -for(var i=0;i < bases.length;i++){if(bases[i]===undefined){ -$B.line_info=class_obj.$def_line -throw _b_.NameError.$factory("name '"+parents_names[i]+ -"' is not defined")}} -var extra_kwargs={},prepare_kwargs={} -if(kwargs){for(var i=0;i < kwargs.length;i++){var key=kwargs[i][0],val=kwargs[i][1] -if(key=="metaclass"){ -metaclass=val}else{ -extra_kwargs[key]=val} -prepare_kwargs[key]=val}} -var mro0=class_obj -if(class_obj.__eq__ !==undefined && class_obj.__hash__===undefined){class_obj.__hash__=_b_.None} -var orig_bases=bases.slice(),use_mro_entries=false -for(var i=0;i < bases.length;i++){if(bases[i]===undefined || -(bases[i].__mro__===undefined)){var mro_entries=$B.$getattr(bases[i],"__mro_entries__",_b_.None) -if(mro_entries !==_b_.None){var entries=_b_.list.$factory(mro_entries(bases)) -bases.splice(i,1,...entries) -use_mro_entries=true -i-- -continue}}} -if(metaclass===undefined){if(bases && bases.length > 0){metaclass=bases[0].__class__ -if(metaclass===undefined){ -if(typeof bases[0]=="function"){if(bases.length !=1){throw _b_.TypeError.$factory("A Brython class "+ -"can inherit at most 1 Javascript constructor")} -metaclass=bases[0].__class__=$B.JSMeta -$B.set_func_names(bases[0],module)}else{throw _b_.TypeError.$factory("Argument of "+class_name+ -"is not a class (type '"+$B.class_name(bases[0])+ -"')")}} -for(var i=1;i < bases.length;i++){var mc=bases[i].__class__ -if(mc===metaclass ||_b_.issubclass(metaclass,mc)){}else if(_b_.issubclass(mc,metaclass)){metaclass=mc}else if(metaclass.__bases__ && -metaclass.__bases__.indexOf(mc)==-1){throw _b_.TypeError.$factory("metaclass conflict: the "+ -"metaclass of a derived class must be a (non-"+ -"strict) subclass of the metaclasses of all its bases")}}}else{metaclass=_b_.type}} -var prepare=$B.$getattr(metaclass,"__prepare__",_b_.None),cl_dict=$B.$call(prepare)(class_name,bases) -if(cl_dict.__class__ !==_b_.dict){set_class_item=$B.$getattr(cl_dict,"__setitem__")}else{set_class_item=function(attr,value){cl_dict.$string_dict[attr]=[value,cl_dict.$order++]}} -for(var attr in class_obj){if(attr=="__annotations__"){if(cl_dict.$string_dict[attr]===undefined){cl_dict.$string_dict[attr]=[$B.empty_dict(),cl_dict.$order++]} -for(var key in class_obj[attr].$string_dict){$B.$setitem(cl_dict.$string_dict[attr][0],key,class_obj[attr].$string_dict[key][0])}}else{if(attr.charAt(0)!="$" ||attr.substr(0,2)=="$$"){set_class_item(attr,class_obj[attr])}}} -if(use_mro_entries){set_class_item("__orig_bases__",_b_.tuple.$factory(orig_bases))} -var class_dict={__bases__:bases,__class__:metaclass,__dict__:cl_dict} -if(cl_dict.__class__===_b_.dict){for(var key in cl_dict.$string_dict){class_dict[key]=cl_dict.$string_dict[key][0]}}else{var get_class_item=$B.$getattr(cl_dict,"__getitem__") -var it=_b_.iter(cl_dict) -while(true){try{var key=_b_.next(it) -class_dict[key]=get_class_item(key)}catch(err){break}}} -class_dict.__mro__=_b_.type.mro(class_dict).slice(1) -var is_instanciable=true,non_abstract_methods={},abstract_methods={},mro=[class_dict].concat(class_dict.__mro__) -for(var i=0;i < mro.length;i++){var kdict=i==0 ? mro0 :mro[i] -for(var attr in kdict){if(non_abstract_methods[attr]){continue} -var v=kdict[attr] -if(typeof v=="function"){if(v.__isabstractmethod__===true || -(v.$attrs && v.$attrs.__isabstractmethod__)){is_instanciable=false -abstract_methods[attr]=true}else{non_abstract_methods[attr]=true}}}} -var _slots=class_obj.__slots__ -if(_slots !==undefined){if(typeof _slots=="string"){_slots=[_slots]}else{_slots=_b_.list.$factory(_slots)} -cl_dict.__slots__=_slots} -for(var i=0;i < mro.length-1;i++){for(var attr in mro[i]){if(attr=="__setattr__"){cl_dict.$has_setattr=true -break}else if(mro[i][attr]){if(mro[i][attr].__get__ ||(mro[i][attr].__class__ && -mro[i][attr].__class__.__get__)){ -cl_dict.$has_setattr=true -break}}}} -var meta_new=_b_.type.__getattribute__(metaclass,"__new__") -var kls=meta_new(metaclass,class_name,bases,cl_dict) -kls.__module__=module -kls.$infos={__module__:module,__name__:$B.from_alias(class_name),__qualname__:class_name} -kls.$subclasses=[] -for(var attr in class_obj){if(attr.charAt(0)!="$" ||attr.substr(0,2)=="$$"){if(typeof class_obj[attr]=="function"){class_obj[attr].$infos.$class=kls}}} -if(kls.__class__===metaclass){ -var meta_init=_b_.type.__getattribute__(metaclass,"__init__") -meta_init(kls,class_name,bases,cl_dict)} -for(var i=0;i < bases.length;i++){bases[i].$subclasses=bases[i].$subclasses ||[] -bases[i].$subclasses.push(kls)} -var sup=_b_.$$super.$factory(kls,kls) -var init_subclass=_b_.$$super.__getattribute__(sup,"__init_subclass__") -init_subclass({$nat:"kw",kw:extra_kwargs}) -if(!is_instanciable){function nofactory(){throw _b_.TypeError.$factory("Can't instantiate abstract class "+ -"interface with abstract methods "+ -Object.keys(abstract_methods).join(", "))} -kls.$factory=nofactory} -kls.__qualname__=class_name.replace("$$","") -return kls} -var type=$B.make_class("type",function(obj,bases,cl_dict){if(arguments.length==1){if(obj===undefined){return $B.UndefinedClass} -return obj.__class__ ||$B.get_class(obj)} -return type.__new__(type,obj,bases,cl_dict)} -) -type.__call__=function(){var extra_args=[],klass=arguments[0] -for(var i=1,len=arguments.length;i < len;i++){extra_args.push(arguments[i])} -var new_func=_b_.type.__getattribute__(klass,"__new__") -var instance=new_func.apply(null,arguments) -if(instance.__class__===klass){ -var init_func=_b_.type.__getattribute__(klass,"__init__") -if(init_func !==_b_.object.__init__){ -var args=[instance].concat(extra_args) -init_func.apply(null,args)}} -return instance} -type.__class__=type -type.__format__=function(klass,fmt_spec){ -return _b_.str.$factory(klass)} -type.__getattribute__=function(klass,attr){switch(attr){case "__annotations__": -var mro=[klass].concat(klass.__mro__),res -for(var i=0,len=mro.length;i < len;i++){if(mro[i].__dict__){var ann=mro[i].__dict__.$string_dict.__annotations__[0] -if(ann){if(res===undefined){res=ann}else if(res.__class__===_b_.dict && -ann.__class__===_b_.dict){ -for(var key in ann.$string_dict){res.$string_dict[key]=ann.$string_dict[key]}}}}} -if(res===undefined){res=$B.empty_dict()} -return res -case "__bases__": -var res=klass.__bases__ ||_b_.tuple.$factory() -res.__class__=_b_.tuple -if(res.length==0){res.push(_b_.object)} -return res -case "__class__": -return klass.__class__ -case "__doc__": -return klass.__doc__ ||_b_.None -case "__setattr__": -if(klass["__setattr__"]!==undefined){var func=klass["__setattr__"]}else{var func=function(obj,key,value){obj[key]=value}} -return method_wrapper.$factory(attr,klass,func) -case "__delattr__": -if(klass["__delattr__"]!==undefined){return klass["__delattr__"]} -return method_wrapper.$factory(attr,klass,function(key){delete klass[key]})} -var res=klass[attr] -var $test=false -if($test){console.log("attr",attr,"of",klass,res,res+"")} -if(res===undefined && klass.__slots__ && -klass.__slots__.indexOf(attr)>-1){return member_descriptor.$factory(attr,klass)} -if(klass.__class__ && -klass.__class__[attr]&& -klass.__class__[attr].__get__ && -klass.__class__[attr].__set__){ -if($test){console.log("data descriptor")} -return klass.__class__[attr].__get__(klass)} -if(res===undefined){ -var v=klass[attr] -if(v===undefined){var mro=klass.__mro__ -if(mro===undefined){console.log("pas de mro pour",klass)} -for(var i=0;i < mro.length;i++){var v=mro[i][attr] -if(v !==undefined){res=v -break}}}else{res=v} -if(res===undefined){ -var meta=klass.__class__ ||$B.get_class(klass),res=meta[attr] -if($test){console.log("search in meta",meta,res)} -if(res===undefined){var meta_mro=meta.__mro__ -for(var i=0;i < meta_mro.length;i++){var res=meta_mro[i][attr] -if(res !==undefined){break}}} -if(res !==undefined){if($test){console.log("found in meta",res,typeof res)} -if(res.__class__===_b_.property){return res.fget(klass)} -if(typeof res=="function"){ -var meta_method=res.bind(null,klass) -meta_method.__class__=$B.method -meta_method.$infos={__self__:klass,__func__:res,__name__:attr,__qualname__:klass.$infos.__name__+"."+attr,__module__:res.$infos ? res.$infos.__module__ :""} -return meta_method}} -if(res===undefined){ -var getattr=meta.__getattr__ -if(getattr===undefined){for(var i=0;i < meta_mro.length;i++){if(meta_mro[i].__getattr__ !==undefined){getattr=meta_mro[i].__getattr__ -break}}} -if(getattr !==undefined){return getattr(klass,attr)}}}} -if(res !==undefined){if($test){console.log("res",res)} -if(res.__class__===_b_.property){return res} -if(res.__get__){if(res.__class__===method){var result=res.__get__(res.__func__,klass) -result.$infos={__func__:res,__name__:res.$infos.__name__,__qualname__:klass.$infos.__name__+"."+res.$infos.__name__,__self__:klass}}else{result=res.__get__(klass)} -return result}else if(res.__class__ && res.__class__.__get__){ -if(!(attr.startsWith("__")&& attr.endsWith("__"))){return res.__class__.__get__(res,_b_.None,klass)}} -if(typeof res=="function"){ -if(res.$infos===undefined && $B.debug > 1){console.log("warning: no attribute $infos for",res,"klass",klass,"attr",attr)} -if($test){console.log("res is function",res)} -if(attr=="__new__"){res.$type="staticmethod"} -if(attr=="__class_getitem__" && res.__class__ !==$B.method){res=_b_.classmethod.$factory(res)} -if(attr=="__init_subclass__"){res=_b_.classmethod.$factory(res)} -if(res.__class__===$B.method){return res.__get__(null,klass)}else{if($test){console.log("return res",res)} -return res}}else{return res}}} -type.__hash__=function(cls){return _b_.hash(cls)} -type.__init__=function(){} -type.__init_subclass__=function(){ -var $=$B.args("__init_subclass__",1,{},[],arguments,{},"args","kwargs") -if($.kwargs !==undefined){if($.kwargs.__class__ !==_b_.dict || -Object.keys($.kwargs.$string_dict).length > 0){throw _b_.TypeError.$factory( -"__init_subclass__() takes no keyword arguments")}} -return _b_.None} -type.__instancecheck__=function(cls,instance){var kl=instance.__class__ ||$B.get_class(instance) -if(kl===cls){return true} -else{for(var i=0;i < kl.__mro__.length;i++){if(kl.__mro__[i]===cls){return true}}} -return false} -type.__instancecheck__.$type="staticmethod" -type.__name__={__get__:function(self){return self.$infos.__name__},__set__:function(self,value){self.$infos.__name__=value},__str__:function(self){return "type"},__eq__:function(self,other){return self.$infos.__name__==other}} -type.__new__=function(meta,name,bases,cl_dict){ -var module=cl_dict.$string_dict.__module__ -if(module){module=module[0]} -var class_dict={__class__ :meta,__bases__ :bases,__dict__ :cl_dict,$infos:{__name__:name.replace("$$",""),__module__:module},$is_class:true,$has_setattr:cl_dict.$has_setattr} -class_dict.__mro__=type.mro(class_dict).slice(1) -var items=$B.dict_to_list(cl_dict) -for(var i=0;i < items.length;i++){var key=$B.to_alias(items[i][0]),v=items[i][1] -if(key==="__module__"){continue} -if(v===undefined){continue} -class_dict[key]=v -if(v.__class__){ -var set_name=$B.$getattr(v.__class__,"__set_name__",_b_.None) -if(set_name !==_b_.None){set_name(v,class_dict,key)}} -if(typeof v=="function"){if(v.$infos===undefined){console.log("type new",v,v+"") -console.log($B.frames_stack.slice())} -v.$infos.$class=class_dict -if(v.$infos.$defaults){ -var $defaults=v.$infos.$defaults -$B.Function.__setattr__(v,"__defaults__",$defaults)}}} -return class_dict} -type.__repr__=type.__str__=function(kls){if(kls.$infos===undefined){console.log("no $infos",kls)} -var qualname=kls.$infos.__name__ -if(kls.$infos.__module__ && -kls.$infos.__module__ !="builtins" && -!kls.$infos.__module__.startsWith("$")){qualname=kls.$infos.__module__+"."+qualname} -return ""} -type.__prepare__=function(){return $B.empty_dict()} -type.__qualname__={__get__:function(self){return self.$infos.__qualname__ ||self.$infos.__name__},__set__:function(self,value){self.$infos.__qualname__=value},__str__:function(self){console.log("type.__qualname__")},__eq__:function(self,other){return self.$infos.__qualname__==other}} -type.mro=function(cls){ -var bases=cls.__bases__,seqs=[],pos1=0 -for(var i=0;i < bases.length;i++){ -if(bases[i]===_b_.str){bases[i]=$B.StringSubclass} -var bmro=[],pos=0 -if(bases[i]===undefined || -bases[i].__mro__===undefined){if(bases[i].__class__===undefined){ -return[_b_.object]}else{throw _b_.TypeError.$factory( -"Object passed as base class is not a class")}} -bmro[pos++]=bases[i] -var _tmp=bases[i].__mro__ -if(_tmp[0]===bases[i]){_tmp.splice(0,1)} -for(var k=0;k < _tmp.length;k++){bmro[pos++]=_tmp[k]} -seqs[pos1++]=bmro} -if(bases.indexOf(_b_.object)==-1){bases=bases.concat(_b_.tuple.$factory([_b_.object]))} -seqs[pos1++]=bases.slice() -var mro=[cls],mpos=1 -while(1){var non_empty=[],pos=0 -for(var i=0;i < seqs.length;i++){if(seqs[i].length > 0){non_empty[pos++]=seqs[i]}} -if(non_empty.length==0){break} -for(var i=0;i < non_empty.length;i++){var seq=non_empty[i],candidate=seq[0],not_head=[],pos=0 -for(var j=0;j < non_empty.length;j++){var s=non_empty[j] -if(s.slice(1).indexOf(candidate)>-1){not_head[pos++]=s}} -if(not_head.length > 0){candidate=null} -else{break}} -if(candidate===null){throw _b_.TypeError.$factory( -"inconsistent hierarchy, no C3 MRO is possible")} -mro[mpos++]=candidate -for(var i=0;i < seqs.length;i++){var seq=seqs[i] -if(seq[0]===candidate){ -seqs[i].shift()}}} -if(mro[mro.length-1]!==_b_.object){mro[mpos++]=_b_.object} -return mro} -type.__subclasscheck__=function(self,subclass){ -var klass=self -if(klass===_b_.str){klass=$B.StringSubclass}else if(klass===_b_.float){klass=$B.FloatSubclass} -if(subclass.__bases__===undefined){return self===_b_.object} -return subclass.__bases__.indexOf(klass)>-1} -$B.set_func_names(type,"builtins") -_b_.type=type -var wrapper_descriptor=$B.make_class("wrapper_descriptor") -$B.set_func_names(wrapper_descriptor,"builtins") -type.__call__.__class__=wrapper_descriptor -var $instance_creator=$B.$instance_creator=function(klass){ -if(klass.$instanciable !==undefined){return function(){throw _b_.TypeError.$factory( -"Can't instantiate abstract class interface "+ -"with abstract methods")}} -var metaclass=klass.__class__,call_func,factory -if(metaclass===_b_.type &&(!klass.__bases__ ||klass.__bases__.length==0)){if(klass.hasOwnProperty("__new__")){if(klass.hasOwnProperty("__init__")){factory=function(){ -var obj=klass.__new__.bind(null,klass). -apply(null,arguments) -klass.__init__.bind(null,obj).apply(null,arguments) -return obj}}else{factory=function(){return klass.__new__.bind(null,klass). -apply(null,arguments)}}}else if(klass.hasOwnProperty("__init__")){factory=function(){var obj={__class__:klass,__dict__:$B.empty_dict()} -klass.__init__.bind(null,obj).apply(null,arguments) -return obj}}else{factory=function(){if(arguments.length > 0){if(arguments.length==1 && arguments[0].$nat && -Object.keys(arguments[0].kw).length==0){}else{throw _b_.TypeError.$factory("object() takes no parameters")}} -return{__class__:klass,__dict__:$B.empty_dict()}}}}else{call_func=_b_.type.__getattribute__(metaclass,"__call__") -var factory=function(){return call_func.bind(null,klass).apply(null,arguments)}} -factory.__class__=$B.Function -factory.$infos={__name__:klass.$infos.__name__,__module__:klass.$infos.__module__} -return factory} -var method_wrapper=$B.method_wrapper=$B.make_class("method_wrapper",function(attr,klass,method){var f=function(){return method.apply(null,arguments)} -f.$infos={__name__:attr,__module__:klass.__module__} -return f} -) -method_wrapper.__str__=method_wrapper.__repr__=function(self){return ""} -var member_descriptor=$B.make_class("member_descriptor",function(attr,cls){return{__class__:member_descriptor,cls:cls,attr:attr}} -) -member_descriptor.__str__=member_descriptor.__repr__=function(self){return ""} -$B.set_func_names(member_descriptor,"builtins") -var method=$B.method=$B.make_class("method",function(func,cls){var f=function(){return $B.$call(func).bind(null,cls).apply(null,arguments)} -f.__class__=method -f.$infos=func.$infos -return f} -) -method.__eq__=function(self,other){return self.$infos !==undefined && -other.$infos !==undefined && -self.$infos.__func__===other.$infos.__func__ && -self.$infos.__self__===other.$infos.__self__} -method.__ne__=function(self,other){return ! $B.method.__eq__(self,other)} -method.__get__=function(self){var f=function(){return self(arguments)} -f.__class__=$B.method_wrapper -f.$infos=method.$infos -return f} -method.__getattribute__=function(self,attr){ -var infos=self.$infos -if(infos && infos[attr]){if(attr=="__code__"){var res={__class__:$B.Code} -for(var attr in infos.__code__){res[attr]=infos.__code__[attr]} -return res}else{return infos[attr]}}else if(method.hasOwnProperty(attr)){return _b_.object.__getattribute__(self,attr)}else{ -return $B.Function.__getattribute__(self.$infos.__func__,attr)}} -method.__repr__=method.__str__=function(self){return ""} -method.__setattr__=function(self,key,value){ -if(key=="__class__"){throw _b_.TypeError.$factory("__class__ assignment only supported "+ -"for heap types or ModuleType subclasses")} -throw _b_.AttributeError.$factory("'method' object has no attribute '"+ -key+"'")} -$B.set_func_names(method,"builtins") -$B.method_descriptor=$B.make_class("method_descriptor") -$B.classmethod_descriptor=$B.make_class("classmethod_descriptor") -_b_.object.__class__=type})(__BRYTHON__) -; -;(function($B){var _b_=$B.builtins,_window=self,isWebWorker=('undefined' !==typeof WorkerGlobalScope)&& -("function"===typeof importScripts)&& -(navigator instanceof WorkerNavigator) -$B.args=function($fname,argcount,slots,var_names,args,$dobj,extra_pos_args,extra_kw_args){ -if($fname.startsWith("lambda_"+$B.lambda_magic)){$fname=""} -var has_kw_args=false,nb_pos=args.length,filled=0,extra_kw,only_positional -var end_positional=var_names.indexOf("/") -if(end_positional !=-1){var_names.splice(end_positional,1) -only_positional=var_names.slice(0,end_positional)} -if(nb_pos > 0 && args[nb_pos-1].$nat){nb_pos-- -if(Object.keys(args[nb_pos].kw).length > 0){has_kw_args=true -var kw_args=args[nb_pos].kw -if(Array.isArray(kw_args)){var kwa=kw_args[0] -for(var i=1,len=kw_args.length;i < len;i++){var kw_arg=kw_args[i] -if(kw_arg.__class__===_b_.dict){for(var k in kw_arg.$numeric_dict){throw _b_.TypeError.$factory($fname+ -"() keywords must be strings")} -for(var k in kw_arg.$object_dict){throw _b_.TypeError.$factory($fname+ -"() keywords must be strings")} -for(var k in kw_arg.$string_dict){if(kwa[k]!==undefined){throw _b_.TypeError.$factory($fname+ -"() got multiple values for argument '"+ -k+"'")} -kwa[k]=kw_arg.$string_dict[k][0]}}else{var it=_b_.iter(kw_arg),getitem=$B.$getattr(kw_arg,'__getitem__') -while(true){try{var k=_b_.next(it) -if(typeof k !=="string"){throw _b_.TypeError.$factory($fname+ -"() keywords must be strings")} -if(kwa[k]!==undefined){throw _b_.TypeError.$factory($fname+ -"() got multiple values for argument '"+ -k+"'")} -kwa[k]=getitem(k)}catch(err){if($B.is_exc(err,[_b_.StopIteration])){break} -throw err}}}} -kw_args=kwa}}} -if(extra_pos_args){slots[extra_pos_args]=[] -slots[extra_pos_args].__class__=_b_.tuple} -if(extra_kw_args){ -extra_kw=$B.empty_dict()} -if(nb_pos > argcount){ -if(extra_pos_args===null ||extra_pos_args=="*"){ -msg=$fname+"() takes "+argcount+" positional argument"+ -(argcount > 1 ? "s" :"")+" but more were given" -throw _b_.TypeError.$factory(msg)}else{ -for(var i=argcount;i < nb_pos;i++){slots[extra_pos_args].push(args[i])} -nb_pos=argcount}} -for(var i=0;i < nb_pos;i++){slots[var_names[i]]=args[i] -filled++} -if(filled==argcount && argcount===var_names.length && -! has_kw_args){if(extra_kw_args){slots[extra_kw_args]=extra_kw} -return slots} -if(has_kw_args){for(var key in kw_args){var value=kw_args[key],key1=$B.to_alias(key) -if(slots[key1]===undefined){ -if(extra_kw_args){ -if(key.substr(0,2)=="$$"){key=key.substr(2)} -extra_kw.$string_dict[key]=[value,extra_kw.$order++]}else{throw _b_.TypeError.$factory($fname+ -"() got an unexpected keyword argument '"+key+"'")}}else if(slots[key1]!==null){ -throw _b_.TypeError.$factory($fname+ -"() got multiple values for argument '"+key+"'")}else if(only_positional && only_positional.indexOf(key1)>-1){throw _b_.TypeError.$factory($fname+"() got an "+ -"unexpected keyword argument '"+key+"'")}else{ -slots[key1]=value}}} -var missing=[] -for(var attr in slots){if(slots[attr]===null){if($dobj[attr]!==undefined){slots[attr]=$dobj[attr]} -else{missing.push("'"+attr+"'")}}} -if(missing.length > 0){if(missing.length==1){throw _b_.TypeError.$factory($fname+ -" missing 1 positional argument: "+missing[0])}else{var msg=$fname+" missing "+missing.length+ -" positional arguments: " -msg+=missing.join(" and ") -throw _b_.TypeError.$factory(msg)}} -if(extra_kw_args){slots[extra_kw_args]=extra_kw} -return slots} -$B.wrong_nb_args=function(name,received,expected,positional){if(received < expected){var missing=expected-received -throw _b_.TypeError.$factory(name+"() missing "+missing+ -" positional argument"+(missing > 1 ? "s" :"")+": "+ -positional.slice(received))}else{throw _b_.TypeError.$factory(name+"() takes "+expected+ -" positional argument"+(expected > 1 ? "s" :"")+ -" but more were given")}} -$B.get_class=function(obj){ -if(obj===null){return $B.$NoneDict} -if(obj===undefined){return $B.UndefinedClass} -var klass=obj.__class__ -if(klass===undefined){switch(typeof obj){case "number": -if(obj % 1===0){ -return _b_.int} -return _b_.float -case "string": -return _b_.str -case "boolean": -return _b_.bool -case "function": -if(obj.$is_js_func){ -return $B.JSObj} -obj.__class__=$B.Function -return $B.Function -case "object": -if(Array.isArray(obj)){if(Object.getPrototypeOf(obj)===Array.prototype){obj.__class__=_b_.list -return _b_.list}}else if(obj.constructor===Number){return _b_.float}else if(typeof Node !=="undefined" -&& obj instanceof Node){return $B.DOMNode} -break}} -if(klass===undefined){return $B.JSObj} -return klass} -$B.class_name=function(obj){return $B.get_class(obj).$infos.__name__} -$B.$list_comp=function(items){ -var ix=$B.UUID(),py="x"+ix+" = []\n",indent=0 -for(var i=1,len=items.length;i < len;i++){var item=items[i].replace(/\s+$/,"").replace(/\n/g,"") -py+=" ".repeat(indent)+item+":\n" -indent+=4} -py+=" ".repeat(indent) -py+="x"+ix+".append("+items[0]+")\n" -return[py,ix]} -$B.$dict_comp=function(module_name,parent_scope,items,line_num){ -var ix=$B.UUID(),res="comp_result_"+$B.lambda_magic+ix,py=res+" = {}\n", -indent=0 -for(var i=1,len=items.length;i < len;i++){var item=items[i].replace(/\s+$/,"").replace(/\n/g,"") -py+=" ".repeat(indent)+item+":\n" -indent++} -py+=" ".repeat(indent)+res+".update({"+items[0]+"})" -var line_info=line_num+','+module_name -var dictcomp_name="dc"+ix,root=$B.py2js( -{src:py,is_comp:true,line_info:line_info},module_name,dictcomp_name,parent_scope,line_num),outer_expr=root.outermost_expr.to_js(),js=root.to_js() -js+='\nreturn '+res+'\n' -js="(function(expr){"+js+"})("+outer_expr+")" -$B.clear_ns(dictcomp_name) -delete $B.$py_src[dictcomp_name] -return js} -$B.$gen_expr=function(module_name,parent_scope,items,line_num,set_comp){ -var ix=$B.UUID(),genexpr_name=(set_comp ? "set_comp"+$B.lambda_magic :"__ge")+ix,py=`def ${genexpr_name}(expr):\n`, -indent=1 -for(var i=1,len=items.length;i < len;i++){var item=items[i].replace(/\s+$/,"").replace(/\n/g,"") -py+=" ".repeat(indent)+item+":\n" -indent+=4} -py+=" ".repeat(indent) -py+="yield ("+items[0]+")" -var line_info=line_num+','+module_name -var root=$B.py2js({src:py,is_comp:true,line_info:line_info,ix:ix},genexpr_name,genexpr_name,parent_scope,line_num),js=root.to_js(),lines=js.split("\n") -if(root.outermost_expr===undefined){console.log("no outermost",module_name,parent_scope)} -var outer_expr=root.outermost_expr.to_js() -js=lines.join("\n") -js+="\nvar $res = $B.generator.$factory("+genexpr_name+ -')('+outer_expr+');\nreturn $res\n' -js="(function($locals_"+genexpr_name+"){"+js+"})($locals)\n" -return js} -$B.copy_namespace=function(){var ns={} -for(const frame of $B.frames_stack){for(const kv of[frame[1],frame[3]]){for(var key in kv){if(key.startsWith('$$')||!key.startsWith('$')){ns[key]=kv[key]}}}} -return ns} -$B.clear_ns=function(name){ -if(name.startsWith("__ge")){console.log("clear ns",name)} -var len=name.length -for(var key in $B.$py_module_path){if(key.substr(0,len)==name){$B.$py_module_path[key]=null -delete $B.$py_module_path[key]}} -$B.$py_src[name]=null -delete $B.$py_src[name] -var alt_name=name.replace(/\./g,"_") -if(alt_name !=name){$B.clear_ns(alt_name)}} -$B.from_alias=function(attr){if(attr.substr(0,2)=="$$" && $B.aliased_names[attr.substr(2)]){return attr.substr(2)} -return attr} -$B.$search=function(name,global_ns){ -var frame=$B.last($B.frames_stack) -if(frame[1][name]!==undefined){return frame[1][name]} -else if(frame[3][name]!==undefined){return frame[3][name]} -else if(_b_[name]!==undefined){return _b_[name]} -else{if(frame[0]==frame[2]||frame[1].$type=="class" || -frame[1].$exec_locals){throw _b_.NameError.$factory( -"name '"+name+"' is not defined")} -else{throw _b_.UnboundLocalError.$factory("local variable '"+ -name+"' referenced before assignment")}}} -$B.$global_search=function(name,search_ids){ -var ns={} -for(var i=0;i< $B.frames_stack.length;i++){var frame=$B.frames_stack[i] -if(search_ids.indexOf(frame[0])>-1 && -frame[1][name]!==undefined){return frame[1][name]} -if(search_ids.indexOf(frame[2])>-1 && -frame[3][name]!==undefined){return frame[3][name]}} -for(var i=0;i < search_ids.length;i++){var search_id=search_ids[i] -if($B.imported[search_id]&& $B.imported[search_id][name]){return $B.imported[search_id][name]}} -throw _b_.NameError.$factory("name '"+$B.from_alias(name)+ -"' is not defined")} -$B.$local_search=function(name){ -var frame=$B.last($B.frames_stack) -if(frame[1][name]!==undefined){return frame[1][name]} -else{throw _b_.UnboundLocalError.$factory("local variable '"+ -$B.from_alias(name)+"' referenced before assignment")}} -$B.$check_def=function(name,value){ -if(value !==undefined){return value}else if(_b_[name]!==undefined){ -return _b_[name]} -throw _b_.NameError.$factory("name '"+$B.from_alias(name)+ -"' is not defined")} -$B.$check_def_local=function(name,value){ -if(value !==undefined){return value} -throw _b_.UnboundLocalError.$factory("local variable '"+ -$B.from_alias(name)+"' referenced before assignment")} -$B.$check_def_free=function(name,value){ -if(value !==undefined){return value} -var res -for(var i=$B.frames_stack.length-1;i >=0;i--){res=$B.frames_stack[i][1][name] -if(res !==undefined){return res} -res=$B.frames_stack[i][3][name] -if(res !==undefined){return res}} -throw _b_.NameError.$factory("free variable '"+$B.from_alias(name)+ -"' referenced before assignment in enclosing scope")} -$B.$check_def_free1=function(name,scope_id){ -var res -for(var i=$B.frames_stack.length-1;i >=0;i--){var frame=$B.frames_stack[i] -res=frame[1][name] -if(res !==undefined){return res} -if(frame[1].$parent){res=frame[1].$parent[name] -if(res !==undefined){return res}} -if(frame[2]==scope_id){res=frame[3][name] -if(res !==undefined){return res}}} -throw _b_.NameError.$factory("free variable '"+$B.from_alias(name)+ -"' referenced before assignment in enclosing scope")} -$B.$JS2Py=function(src){if(typeof src==="number"){if(src % 1===0){return src} -return _b_.float.$factory(src)} -if(src===null ||src===undefined){return _b_.None} -if(Array.isArray(src)&& -Object.getPrototypeOf(src)===Array.prototype){src.$brython_class="js" } -return src} -$B.list_key=function(obj,key){key=$B.$GetInt(key) -if(key < 0){key+=obj.length} -var res=obj[key] -if(res===undefined){throw _b_.IndexError.$factory("list index out of range")} -return res} -$B.list_slice=function(obj,start,stop){if(start===null){start=0} -else{start=$B.$GetInt(start) -if(start < 0){start=Math.max(0,start+obj.length)}} -if(stop===null){return obj.slice(start)} -stop=$B.$GetInt(stop) -if(stop < 0){stop=Math.max(0,stop+obj.length)} -return obj.slice(start,stop)} -$B.list_slice_step=function(obj,start,stop,step){if(step===null ||step==1){return $B.list_slice(obj,start,stop)} -if(step==0){throw _b_.ValueError.$factory("slice step cannot be zero")} -step=$B.$GetInt(step) -if(start===null){start=step >=0 ? 0 :obj.length-1} -else{start=$B.$GetInt(start) -if(start < 0){start=Math.min(0,start+obj.length)}} -if(stop===null){stop=step >=0 ? obj.length :-1} -else{stop=$B.$GetInt(stop) -if(stop < 0){stop=Math.max(0,stop+obj.length)}} -var res=[] -if(step > 0){for(var i=start;i < stop;i+=step){res.push(obj[i])}}else{for(var i=start;i > stop;i+=step){res.push(obj[i])}} -return res} -function index_error(obj){var type=typeof obj=="string" ? "string" :"list" -throw _b_.IndexError.$factory(type+" index out of range")} -$B.$getitem=function(obj,item){var is_list=Array.isArray(obj)&& obj.__class__===_b_.list -if(typeof item=="number"){if(is_list ||typeof obj=="string"){item=item >=0 ? item :obj.length+item -if(obj[item]!==undefined){return obj[item]} -else{index_error(obj)}}} -try{item=$B.$GetInt(item)}catch(err){} -if((is_list ||typeof obj=="string") -&& typeof item=="number"){item=item >=0 ? item :obj.length+item -if(obj[item]!==undefined){return obj[item]} -else{index_error(obj)}} -if(obj.$is_class){var class_gi=$B.$getattr(obj,"__class_getitem__",_b_.None) -if(class_gi !==_b_.None){return class_gi(item)}else if(obj.__class__){class_gi=$B.$getattr(obj.__class__,"__getitem__",_b_.None) -if(class_gi !==_b_.None){return class_gi(obj,item)}}} -if(is_list){return _b_.list.$getitem(obj,item)} -var gi=$B.$getattr(obj,"__getitem__",_b_.None) -if(gi !==_b_.None){return gi(item)} -throw _b_.TypeError.$factory("'"+$B.class_name(obj)+ -"' object is not subscriptable")} -$B.getitem_slice=function(obj,slice){var res -if(Array.isArray(obj)){if(slice.start===_b_.None && slice.stop===_b_.None){if(slice.step===_b_.None ||slice.step==1){res=obj.slice()}else if(slice.step==-1){res=obj.slice().reverse()}}else if(slice.step===_b_.None){if(slice.start===_b_.None){slice.start=0} -if(slice.stop===_b_.None){slice.stop=obj.length} -if(typeof slice.start=="number" && -typeof slice.stop=="number"){if(slice.start < 0){slice.start+=obj.length} -if(slice.stop < 0){slice.stop+=obj.length} -res=obj.slice(slice.start,slice.stop)}} -if(res){res.__class__=obj.__class__ -return res}else{return _b_.list.$getitem(obj,slice)}} -return $B.$getattr(obj,"__getitem__")(slice)} -$B.set_list_key=function(obj,key,value){try{key=$B.$GetInt(key)} -catch(err){if(_b_.isinstance(key,_b_.slice)){var s=_b_.slice.$conv_for_seq(key,obj.length) -return $B.set_list_slice_step(obj,s.start,s.stop,s.step,value)}} -if(key < 0){key+=obj.length} -if(obj[key]===undefined){console.log(obj,key) -throw _b_.IndexError.$factory("list assignment index out of range")} -obj[key]=value} -$B.set_list_slice=function(obj,start,stop,value){if(start===null){start=0} -else{start=$B.$GetInt(start) -if(start < 0){start=Math.max(0,start+obj.length)}} -if(stop===null){stop=obj.length} -stop=$B.$GetInt(stop) -if(stop < 0){stop=Math.max(0,stop+obj.length)} -var res=_b_.list.$factory(value) -obj.splice.apply(obj,[start,stop-start].concat(res))} -$B.set_list_slice_step=function(obj,start,stop,step,value){if(step===null ||step==1){return $B.set_list_slice(obj,start,stop,value)} -if(step==0){throw _b_.ValueError.$factory("slice step cannot be zero")} -step=$B.$GetInt(step) -if(start===null){start=step > 0 ? 0 :obj.length-1}else{start=$B.$GetInt(start)} -if(stop===null){stop=step > 0 ? obj.length :-1}else{stop=$B.$GetInt(stop)} -var repl=_b_.list.$factory(value),j=0,test,nb=0 -if(step > 0){test=function(i){return i < stop}} -else{test=function(i){return i > stop}} -for(var i=start;test(i);i+=step){nb++} -if(nb !=repl.length){throw _b_.ValueError.$factory( -"attempt to assign sequence of size "+repl.length+ -" to extended slice of size "+nb)} -for(var i=start;test(i);i+=step){obj[i]=repl[j] -j++}} -$B.$setitem=function(obj,item,value){if(Array.isArray(obj)&& obj.__class__===undefined && -typeof item=="number" && -!_b_.isinstance(obj,_b_.tuple)){if(item < 0){item+=obj.length} -if(obj[item]===undefined){throw _b_.IndexError.$factory("list assignment index out of range")} -obj[item]=value -return}else if(obj.__class__===_b_.dict){_b_.dict.$setitem(obj,item,value) -return}else if(obj.__class__===_b_.list){return _b_.list.$setitem(obj,item,value)} -$B.$getattr(obj,"__setitem__")(item,value)} -$B.augm_item_add=function(obj,item,incr){if(Array.isArray(obj)&& typeof item=="number" && -obj[item]!==undefined){if(Array.isArray(obj[item])&& Array.isArray(incr)){for(var i=0,len=incr.length;i < len;i++){obj[item].push(incr[i])} -return}else if(typeof obj[item]=="string" && typeof incr=="string"){obj[item]+=incr -return}} -var ga=$B.$getattr -try{var augm_func=ga(ga(obj,"__getitem__")(item),"__iadd__")}catch(err){ga(obj,"__setitem__")(item,ga(ga(obj,"__getitem__")(item),"__add__")(incr)) -return} -augm_func(incr)} -var augm_item_src=""+$B.augm_item_add -var augm_ops=[["-=","sub"],["*=","mul"]] -for(var i=0,len=augm_ops.length;i < len;i++){var augm_code=augm_item_src.replace(/add/g,augm_ops[i][1]) -augm_code=augm_code.replace(/\+=/g,augm_ops[i][0]) -eval("$B.augm_item_"+augm_ops[i][1]+"="+augm_code)} -$B.extend=function(fname,arg){ -for(var i=2;i < arguments.length;i++){var mapping=arguments[i] -var it=_b_.iter(mapping),getter=$B.$getattr(mapping,"__getitem__") -while(true){try{var key=_b_.next(it) -if(typeof key !=="string"){throw _b_.TypeError.$factory(fname+ -"() keywords must be strings")} -if(arg[key]!==undefined){throw _b_.TypeError.$factory(fname+ -"() got multiple values for argument '"+key+"'")} -arg[key]=getter(key)}catch(err){if(_b_.isinstance(err,[_b_.StopIteration])){break} -throw err}}} -return arg} -$B.extend_list=function(){ -var res=Array.prototype.slice.call(arguments,0,arguments.length-1),last=$B.last(arguments) -var it=_b_.iter(last) -while(true){try{res.push(_b_.next(it))}catch(err){if(_b_.isinstance(err,[_b_.StopIteration])){break} -throw err}} -return res} -$B.$test_item=function(expr){ -$B.$test_result=expr -return _b_.bool.$factory(expr)} -$B.$test_expr=function(){ -return $B.$test_result} -$B.$is=function(a,b){ -if(a instanceof Number && b instanceof Number){return a.valueOf()==b.valueOf()} -if((a===_b_.int && b==$B.long_int)|| -(a===$B.long_int && b===_b_.int)){return true} -return a===b} -$B.$is_member=function(item,_set){ -var f,_iter,method -try{method=$B.$getattr(_set.__class__ ||$B.get_class(_set),"__contains__")} -catch(err){} -if(method){return $B.$call(method)(_set,item)} -try{_iter=_b_.iter(_set)} -catch(err){} -if(_iter){while(1){try{var elt=_b_.next(_iter) -if($B.rich_comp("__eq__",elt,item)){return true}}catch(err){return false}}} -try{f=$B.$getattr(_set,"__getitem__")} -catch(err){throw _b_.TypeError.$factory("'"+$B.class_name(_set)+ -"' object is not iterable")} -if(f){var i=-1 -while(1){i++ -try{var elt=f(i) -if($B.rich_comp("__eq__",elt,item)){return true}}catch(err){if(err.__class__===_b_.IndexError){return false} -throw err}}}} -$B.$call=function(callable){if(callable.__class__===$B.method){return callable} -else if(callable.$is_func ||typeof callable=="function"){return callable}else if(callable.$factory){return callable.$factory}else if(callable.$is_class){ -return callable.$factory=$B.$instance_creator(callable)} -try{return $B.$getattr(callable,"__call__")}catch(err){throw _b_.TypeError.$factory("'"+$B.class_name(callable)+ -"' object is not callable")}} -var $io=$B.make_class("io",function(out){return{ -__class__:$io,out}} -) -$io.flush=function(){} -$io.write=function(self,msg){ -console[self.out](msg) -return _b_.None} -if(console.error !==undefined){$B.stderr=$io.$factory("error")}else{$B.stderr=$io.$factory("log")} -$B.stdout=$io.$factory("log") -$B.stdin={__class__:$io,__original__:true,closed:false,len:1,pos:0,read:function(){return ""},readline:function(){return ""}} -$B.make_iterator_class=function(name){ -var klass={__class__:_b_.type,__mro__:[_b_.object],$factory:function(items){return{ -__class__:klass,__dict__:$B.empty_dict(),counter:-1,items:items,len:items.length}},$infos:{__name__:name},$is_class:true,__iter__:function(self){self.counter=self.counter===undefined ?-1 :self.counter -self.len=self.items.length -return self},__len__:function(self){return self.items.length},__next__:function(self){if(typeof self.len_func=="function" && -self.len_func()!=self.len){throw _b_.RuntimeError.$factory( -"dictionary changed size during iteration")} -self.counter++ -if(self.counter < self.items.length){var item=self.items[self.counter] -if(self.items.$brython_class=="js"){ -item=$B.$JS2Py(item)} -return item} -throw _b_.StopIteration.$factory("StopIteration")},__reduce_ex__:function(self,protocol){return $B.fast_tuple([_b_.iter,_b_.tuple.$factory([self.items])])}} -$B.set_func_names(klass,"builtins") -return klass} -function $err(op,klass,other){var msg="unsupported operand type(s) for "+op+" : '"+ -klass.$infos.__name__+"' and '"+$B.class_name(other)+"'" -throw _b_.TypeError.$factory(msg)} -var ropnames=["add","sub","mul","truediv","floordiv","mod","pow","lshift","rshift","and","xor","or"] -var ropsigns=["+","-","*","/","//","%","**","<<",">>","&","^","|"] -$B.make_rmethods=function(klass){for(var j=0,_len_j=ropnames.length;j < _len_j;j++){if(klass["__"+ropnames[j]+"__"]===undefined){klass["__"+ropnames[j]+"__"]=(function(name,sign){return function(self,other){try{return $B.$getattr(other,"__r"+name+"__")(self)} -catch(err){$err(sign,klass,other)}}})(ropnames[j],ropsigns[j])}}} -$B.UUID=function(){return $B.$py_UUID++} -$B.InjectBuiltins=function(){var _str=["var _b_ = $B.builtins"],pos=1 -for(var $b in $B.builtins){_str[pos++]="var "+$b+'=_b_["'+$b+'"]'} -return _str.join(";")} -$B.$GetInt=function(value){ -if(typeof value=="number" ||value.constructor===Number){return value} -else if(typeof value==="boolean"){return value ? 1 :0} -else if(_b_.isinstance(value,_b_.int)){return value} -else if(_b_.isinstance(value,_b_.float)){return value.valueOf()} -if(! value.$is_class){try{var v=$B.$getattr(value,"__int__")();return v}catch(e){} -try{var v=$B.$getattr(value,"__index__")();return v}catch(e){}} -throw _b_.TypeError.$factory("'"+$B.class_name(value)+ -"' object cannot be interpreted as an integer")} -$B.to_num=function(obj,methods){ -var expected_class={"__complex__":_b_.complex,"__float__":_b_.float,"__index__":_b_.int,"__int__":_b_.int} -var klass=obj.__class__ ||$B.get_class(obj) -for(var i=0;i < methods.length;i++){var missing={},method=$B.$getattr(klass,methods[i],missing) -if(method !==missing){var res=method(obj) -if(!_b_.isinstance(res,expected_class[methods[i]])){console.log(res,methods[i],expected_class[methods[i]]) -throw _b_.TypeError.$factory(methods[i]+"returned non-"+ -expected_class[methods[i]].$infos.__name__+ -"(type "+$B.get_class(res)+")")} -return res}} -return null} -$B.PyNumber_Index=function(item){switch(typeof item){case "boolean": -return item ? 1 :0 -case "number": -return item -case "object": -if(item.__class__===$B.long_int){return item} -if(_b_.isinstance(item,_b_.int)){ -return item.$brython_value} -var method=$B.$getattr(item,"__index__",_b_.None) -if(method !==_b_.None){method=typeof method=="function" ? -method :$B.$getattr(method,"__call__") -return $B.int_or_bool(method())} -default: -throw _b_.TypeError.$factory("'"+$B.class_name(item)+ -"' object cannot be interpreted as an integer")}} -$B.int_or_bool=function(v){switch(typeof v){case "boolean": -return v ? 1 :0 -case "number": -return v -case "object": -if(v.__class__===$B.long_int){return v} -else{throw _b_.TypeError.$factory("'"+$B.class_name(v)+ -"' object cannot be interpreted as an integer")} -default: -throw _b_.TypeError.$factory("'"+$B.class_name(v)+ -"' object cannot be interpreted as an integer")}} -$B.enter_frame=function(frame){ -$B.frames_stack.push(frame) -if($B.tracefunc && $B.tracefunc !==_b_.None){if(frame[4]===$B.tracefunc || -($B.tracefunc.$infos && frame[4]&& -frame[4]===$B.tracefunc.$infos.__func__)){ -$B.tracefunc.$frame_id=frame[0] -return _b_.None}else{ -for(var i=$B.frames_stack.length-1;i >=0;i--){if($B.frames_stack[i][0]==$B.tracefunc.$frame_id){return _b_.None}} -return $B.tracefunc($B._frame.$factory($B.frames_stack,$B.frames_stack.length-1),'call',_b_.None)}} -return _b_.None} -$B.trace_exception=function(){var top_frame=$B.last($B.frames_stack) -if(top_frame[0]==$B.tracefunc.$current_frame_id){return _b_.None} -var trace_func=top_frame[1].$f_trace,exc=top_frame[1].$current_exception,frame_obj=$B._frame.$factory($B.frames_stack,$B.frames_stack.length-1) -return trace_func(frame_obj,'exception',$B.fast_tuple([exc.__class__,exc,$B.traceback.$factory(exc)]))} -$B.trace_line=function(){var top_frame=$B.last($B.frames_stack) -if(top_frame[0]==$B.tracefunc.$current_frame_id){return _b_.None} -var trace_func=top_frame[1].$f_trace,frame_obj=$B._frame.$factory($B.frames_stack,$B.frames_stack.length-1) -return trace_func(frame_obj,'line',_b_.None)} -$B.set_line=function(line_info){ -var top_frame=$B.last($B.frames_stack) -if($B.tracefunc && top_frame[0]==$B.tracefunc.$current_frame_id){return _b_.None} -top_frame[1].$line_info=line_info -var trace_func=top_frame[1].$f_trace -if(trace_func !==_b_.None){var frame_obj=$B._frame.$factory($B.frames_stack,$B.frames_stack.length-1) -top_frame[1].$ftrace=trace_func(frame_obj,'line',_b_.None)} -return true} -$B.trace_return=function(value){var top_frame=$B.last($B.frames_stack),trace_func=top_frame[1].$f_trace,frame_obj=$B._frame.$factory($B.frames_stack,$B.frames_stack.length-1) -if(top_frame[0]==$B.tracefunc.$current_frame_id){ -return _b_.None} -trace_func(frame_obj,'return',value)} -function exit_ctx_managers_in_generators(frame){ -for(key in frame[1]){if(frame[1][key]&& frame[1][key].__class__==$B.generator){ -var gen_obj=frame[1][key] -gen_obj.return()}}} -$B.set_cm_in_generator=function(cm_exit){if(cm_exit !==undefined){$B.frames_stack.forEach(function(frame){frame[1].$cm_in_gen=frame[1].$cm_in_gen ||new Set() -frame[1].$cm_in_gen.add(cm_exit)})}} -$B.leave_frame=function(arg){ -if($B.frames_stack.length==0){console.log("empty stack");return} -if(arg && arg.value !==undefined && $B.tracefunc){if($B.last($B.frames_stack)[1].$f_trace===undefined){$B.last($B.frames_stack)[1].$f_trace=$B.tracefunc} -if($B.last($B.frames_stack)[1].$f_trace !==_b_.None){$B.trace_return(arg.value)}} -var frame=$B.frames_stack.pop() -frame[1].$current_exception=undefined -if(frame[1].$close_generators){ -for(var i=0,len=frame[1].$close_generators.length;i < len;i++){var gen=frame[1].$close_generators[i] -if(gen.$has_run){gen.return()}}} -return _b_.None} -$B.leave_frame_exec=function(arg){ -if($B.profile > 0){$B.$profile.return()} -if($B.frames_stack.length==0){console.log("empty stack");return} -var frame=$B.frames_stack.pop() -exit_ctx_managers_in_generators(frame) -for(var i=$B.frames_stack.length-1;i >=0;i--){if($B.frames_stack[i][2]==frame[2]){$B.frames_stack[i][3]=frame[3]}}} -var min_int=Math.pow(-2,53),max_int=Math.pow(2,53)-1 -$B.is_safe_int=function(){for(var i=0;i < arguments.length;i++){var arg=arguments[i] -if(arg < min_int ||arg > max_int){return false}} -return true} -$B.add=function(x,y){if(typeof x.valueOf()=="number" && typeof y.valueOf()=="number"){if(typeof x=="number" && typeof y=="number"){ -var z=x+y -if(z < max_int){return z} -return $B.long_int.__add__($B.long_int.$factory(x),$B.long_int.$factory(y))}else{ -return new Number(x+y)}}else if(typeof x=="string" && typeof y=="string"){ -return x+y} -try{var method=$B.$getattr(x.__class__ ||$B.get_class(x),"__add__")}catch(err){if(err.__class__===_b_.AttributeError){throw _b_.TypeError.$factory("unsupported operand type(s) for "+ -"+: '"+$B.class_name(x)+"' and '"+$B.class_name(y)+"'")} -throw err} -var res=$B.$call(method)(x,y) -if(res===_b_.NotImplemented){ -return $B.rich_op("add",x,y)} -return res} -$B.div=function(x,y){var z=x/y -if(x > min_int && x < max_int && y > min_int && y < max_int -&& z > min_int && z < max_int){return z} -else{return $B.long_int.__truediv__($B.long_int.$factory(x),$B.long_int.$factory(y))}} -$B.eq=function(x,y){if(x > min_int && x < max_int && y > min_int && y < max_int){return x==y} -return $B.long_int.__eq__($B.long_int.$factory(x),$B.long_int.$factory(y))} -$B.floordiv=function(x,y){var z=x/y -if(x > min_int && x < max_int && y > min_int && y < max_int -&& z > min_int && z < max_int){return Math.floor(z)} -else{return $B.long_int.__floordiv__($B.long_int.$factory(x),$B.long_int.$factory(y))}} -$B.mul=function(x,y){var z=(typeof x !="number" ||typeof y !="number")? -new Number(x*y):x*y -if(x > min_int && x < max_int && y > min_int && y < max_int -&& z > min_int && z < max_int){return z} -else if((typeof x=="number" ||x.__class__===$B.long_int) -&&(typeof y=="number" ||y.__class__===$B.long_int)){if((typeof x=="number" && isNaN(x))|| -(typeof y=="number" && isNaN(y))){return _b_.float.$factory("nan")} -switch(x){case Infinity: -case-Infinity: -if(y==0){return _b_.float.$factory("nan")}else{return y > 0 ? x :-x}} -return $B.long_int.__mul__($B.long_int.$factory(x),$B.long_int.$factory(y))}else{return z}} -$B.sub=function(x,y){var z=(typeof x !="number" ||typeof y !="number")? -new Number(x-y):x-y -if(x > min_int && x < max_int && y > min_int && y < max_int -&& z > min_int && z < max_int){return z} -else if((typeof x=="number" ||x.__class__===$B.long_int) -&&(typeof y=="number" ||y.__class__===$B.long_int)){if((typeof x=="number" && isNaN(x))|| -(typeof y=="number" && isNaN(y))){return _b_.float.$factory("nan")} -return $B.long_int.__sub__($B.long_int.$factory(x),$B.long_int.$factory(y))}else{return z}} -$B.ge=function(x,y){if(typeof x=="number" && typeof y=="number"){return x >=y} -else if(typeof x=="number" && typeof y !="number"){return ! y.pos} -else if(typeof x !="number" && typeof y=="number"){return x.pos===true}else{return $B.long_int.__ge__(x,y)}} -$B.gt=function(x,y){if(typeof x=="number" && typeof y=="number"){return x > y} -else if(typeof x=="number" && typeof y !="number"){return ! y.pos} -else if(typeof x !="number" && typeof y=="number"){return x.pos===true}else{return $B.long_int.__gt__(x,y)}} -var reversed_op={"__lt__":"__gt__","__le__":"__ge__","__gt__":"__lt__","__ge__":"__le__"} -var method2comp={"__lt__":"<","__le__":"<=","__gt__":">","__ge__":">="} -$B.rich_comp=function(op,x,y){var x1=x.valueOf(),y1=y.valueOf() -if(typeof x1=="number" && typeof y1=="number" && -x.__class__===undefined && y.__class__===undefined){switch(op){case "__eq__": -return x1==y1 -case "__ne__": -return x1 !=y1 -case "__le__": -return x1 <=y1 -case "__lt__": -return x1 < y1 -case "__ge__": -return x1 >=y1 -case "__gt__": -return x1 > y1}} -var res,rev_op,compared=false -if(x.$is_class ||x.$factory){if(op=="__eq__"){return(x===y)}else if(op=="__ne__"){return !(x===y)}else{throw _b_.TypeError.$factory("'"+method2comp[op]+ -"' not supported between instances of '"+$B.class_name(x)+ -"' and '"+$B.class_name(y)+"'")}} -if(x.__class__ && y.__class__){ -if(y.__class__.__mro__.indexOf(x.__class__)>-1){rev_op=reversed_op[op]||op -var rev_func=$B.$getattr(y,rev_op) -res=$B.$call($B.$getattr(y,rev_op))(x) -if(res !==_b_.NotImplemented){return res} -compared=true}} -res=$B.$call($B.$getattr(x,op))(y) -if(res !==_b_.NotImplemented){return res} -if(compared){return false} -rev_op=reversed_op[op]||op -res=$B.$call($B.$getattr(y,rev_op))(x) -if(res !==_b_.NotImplemented ){return res} -if(op=="__eq__"){return _b_.False} -else if(op=="__ne__"){return _b_.True} -throw _b_.TypeError.$factory("'"+method2comp[op]+ -"' not supported between instances of '"+$B.class_name(x)+ -"' and '"+$B.class_name(y)+"'")} -var opname2opsign={sub:"-",xor:"^",mul:"*"} -$B.rich_op=function(op,x,y){var x_class=x.__class__ ||$B.get_class(x),y_class=y.__class__ ||$B.get_class(y),method -if(x_class===y_class){ -if(x_class===_b_.int){return _b_.int["__"+op+"__"](x,y)} -try{method=$B.$call($B.$getattr(x,"__"+op+"__"))}catch(err){if(err.__class__===_b_.AttributeError){var kl_name=$B.class_name(x) -throw _b_.TypeError.$factory("unsupported operand type(s) "+ -"for "+opname2opsign[op]+" : '"+kl_name+"' and '"+ -kl_name+"'")} -throw err} -return method(y)} -var res -try{method=$B.$call($B.$getattr(x,"__"+op+"__"))}catch(err){if(err.__class__ !==_b_.AttributeError){throw err} -res=$B.$call($B.$getattr(y,"__r"+op+"__"))(x) -if(res !==_b_.NotImplemented){return res} -throw _b_.TypeError.$factory("'"+(opname2opsign[op]||op)+ -"' not supported between instances of '"+$B.class_name(x)+ -"' and '"+$B.class_name(y)+"'")} -res=method(y) -if(res===_b_.NotImplemented){res=$B.$call($B.$getattr(y,"__r"+op+"__"))(x) -if(res !==_b_.NotImplemented){return res} -throw _b_.TypeError.$factory("'"+(opname2opsign[op]||op)+ -"' not supported between instances of '"+$B.class_name(x)+ -"' and '"+$B.class_name(y)+"'")}else{return res}} -$B.is_none=function(o){return o===undefined ||o===null ||o==_b_.None} -var repr_stack=new Set() -$B.repr={enter:function(obj){if(repr_stack.has(obj)){return true}else{repr_stack.add(obj)}},leave:function(obj){repr_stack.delete(obj)}}})(__BRYTHON__) -; - -;(function($B){var _b_=$B.builtins -_b_.__debug__=false -$B.$comps={'>':'gt','>=':'ge','<':'lt','<=':'le'} -$B.$inv_comps={'>':'lt','>=':'le','<':'gt','<=':'ge'} -var check_nb_args=$B.check_nb_args=function(name,expected,args){ -var len=args.length,last=args[len-1] -if(last && last.$nat=="kw"){var kw=last.kw -if(Array.isArray(kw)&& kw[1]&& kw[1].__class__===_b_.dict){if(Object.keys(kw[1].$string_dict).length==0){len--}}} -if(len !=expected){if(expected==0){throw _b_.TypeError.$factory(name+"() takes no argument"+ -" ("+len+" given)")}else{throw _b_.TypeError.$factory(name+"() takes exactly "+ -expected+" argument"+(expected < 2 ? '' :'s')+ -" ("+len+" given)")}}} -var check_no_kw=$B.check_no_kw=function(name,x,y){ -if(x===undefined){console.log("x undef",name,x,y)} -if((x.$nat && x.kw && x.kw[0]&& x.kw[0].length > 0)|| -(y !==undefined && y.$nat)){throw _b_.TypeError.$factory(name+"() takes no keyword arguments")}} -var NoneType={$factory:function(){return None},$infos:{__name__:"NoneType",__module__:"builtins"},__bool__:function(self){return False},__class__:_b_.type,__hash__:function(self){return 0},__mro__:[_b_.object],__repr__:function(self){return 'None'},__str__:function(self){return 'None'},$is_class:true} -NoneType.__setattr__=function(self,attr){return no_set_attr(NoneType,attr)} -var None={__class__:NoneType,} -for(var $op in $B.$comps){ -var key=$B.$comps[$op] -switch(key){case 'ge': -case 'gt': -case 'le': -case 'lt': -NoneType['__'+key+'__']=(function(op){return function(other){return _b_.NotImplemented}})($op)}} -for(var $func in None){if(typeof None[$func]=='function'){None[$func].__str__=(function(f){return function(){return ""}})($func)}} -$B.set_func_names(NoneType,"builtins") -function abs(obj){check_nb_args('abs',1,arguments) -check_no_kw('abs',obj) -if(isinstance(obj,_b_.int)){if(obj.__class__===$B.long_int){return{ -__class__:$B.long_int,value:obj.value,pos:true}}else{return _b_.int.$factory(Math.abs(obj))}} -if(isinstance(obj,_b_.float)){ -return _b_.float.$factory(Math.abs(_b_.float.numerator(obj)))} -var klass=obj.__class__ ||$B.get_class(obj) -try{var method=$B.$getattr(klass,"__abs__")}catch(err){if(err.__class__===_b_.AttributeError){throw _b_.TypeError.$factory("Bad operand type for abs(): '"+ -$B.class_name(obj)+"'")} -throw err} -return $B.$call(method)(obj)} -function all(obj){check_nb_args('all',1,arguments) -check_no_kw('all',obj) -var iterable=iter(obj) -while(1){try{var elt=next(iterable) -if(!$B.$bool(elt)){return false}}catch(err){return true}}} -function any(obj){check_nb_args('any',1,arguments) -check_no_kw('any',obj) -var iterable=iter(obj) -while(1){try{var elt=next(iterable) -if($B.$bool(elt)){return true}}catch(err){return false}}} -function ascii(obj){check_nb_args('ascii',1,arguments) -check_no_kw('ascii',obj) -var res=repr(obj),res1='',cp -for(var i=0;i < res.length;i++){cp=res.charCodeAt(i) -if(cp < 128){res1+=res.charAt(i)} -else if(cp < 256){res1+='\\x'+cp.toString(16)} -else{var s=cp.toString(16) -if(s.length % 2==1){s="0"+s} -res1+='\\u'+s}} -return res1} -function $builtin_base_convert_helper(obj,base){var prefix=""; -switch(base){case 2: -prefix='0b';break -case 8: -prefix='0o';break -case 16: -prefix='0x';break -default: -console.log('invalid base:'+base)} -if(obj.__class__===$B.long_int){var res=prefix+$B.long_int.to_base(obj,base) -if(! obj.pos){res="-"+res} -return res} -var value=$B.$GetInt(obj) -if(value===undefined){ -throw _b_.TypeError.$factory('Error, argument must be an integer or'+ -' contains an __index__ function')} -if(value >=0){return prefix+value.toString(base)} -return '-'+prefix+(-value).toString(base)} -function bin_hex_oct(base,obj){ -if(isinstance(obj,_b_.int)){return $builtin_base_convert_helper(obj,base)}else{try{var klass=obj.__class__ ||$B.get_class(obj),method=$B.$getattr(klass,'__index__')}catch(err){if(err.__class__===_b_.AttributeError){throw _b_.TypeError.$factory("'"+$B.class_name(obj)+ -"' object cannot be interpreted as an integer")} -throw err} -var res=$B.$call(method)(obj) -return $builtin_base_convert_helper(res,base)}} -function bin(obj){check_nb_args('bin',1,arguments) -check_no_kw('bin',obj) -return bin_hex_oct(2,obj)} -function breakpoint(){ -$B.$import('sys',[]) -var missing={},hook=$B.$getattr($B.imported.sys,'breakpointhook',missing) -if(hook===missing){throw _b_.RuntimeError.$factory('lost sys.breakpointhook')} -return $B.$call(hook).apply(null,arguments)} -function callable(obj){check_nb_args('callable',1,arguments) -check_no_kw('callable',obj) -return hasattr(obj,'__call__')} -function chr(i){check_nb_args('chr',1,arguments) -check_no_kw('chr',i) -if(i < 0 ||i > 1114111){throw _b_.ValueError.$factory('Outside valid range')} -return String.fromCodePoint(i)} -var classmethod=$B.make_class("classmethod",function(func){check_nb_args('classmethod',1,arguments) -check_no_kw('classmethod',func) -var f=function(){return func.apply(null,arguments)} -f.__class__=$B.method -if(func.$attrs){for(var key in func.$attrs){f[key]=func.$attrs[key]}} -f.$infos={__func__:func,__name__:func.$infos.__name__} -f.__get__=function(obj,cls){var method=function(){return f(cls,...arguments)} -method.__class__=$B.method -method.$infos={__self__:cls,__func__:f,__name__:func.$infos.__name__,__qualname__:cls.$infos.__name__+"."+func.$infos.__name__} -return method} -f.__get__.__class__=$B.method_wrapper -f.__get__.$infos=func.$infos -return f} -) -$B.set_func_names(classmethod,"builtins") -var code=$B.code=$B.make_class("code") -code.__repr__=code.__str__=function(self){return ''} -code.__getattr__=function(self,attr){if(attr=="co_code"){return 'co_code'} -return self[attr]} -$B.set_func_names(code,"builtins") -function compile(){var $=$B.args('compile',6,{source:null,filename:null,mode:null,flags:null,dont_inherit:null,optimize:null,_feature_version:null},['source','filename','mode','flags','dont_inherit','optimize','_feature_version'],arguments,{flags:0,dont_inherit:false,optimize:-1,_feature_version:0},null,null) -var module_name='$exec_'+$B.UUID() -$B.clear_ns(module_name) -$.__class__=code -$.co_flags=$.flags -$.name="" -var interactive=$.mode=="single" &&($.flags & 0x200) -if(interactive && ! $.source.endsWith("\n")){ -var lines=$.source.split("\n") -if($B.last(lines).startsWith(" ")){throw _b_.SyntaxError.$factory("unexpected EOF while parsing")}} -$B.py2js($.source,module_name,module_name) -return $} -var __debug__=$B.debug > 0 -function delattr(obj,attr){ -check_no_kw('delattr',obj,attr) -check_nb_args('delattr',2,arguments) -if(typeof attr !='string'){throw _b_.TypeError.$factory("attribute name must be string, not '"+ -$B.class_name(attr)+"'")} -return $B.$getattr(obj,'__delattr__')(attr)} -$B.$delete=function(name,is_global){ -function del(obj){if(obj.__class__===$B.generator){ -obj.return()}} -var found=false,frame=$B.last($B.frames_stack) -if(! is_global){if(frame[1][name]!==undefined){found=true -del(frame[1][name]) -delete frame[1][name]}}else{if(frame[2]!=frame[0]&& frame[3][name]!==undefined){found=true -del(frame[3][name]) -delete frame[3][name]}} -if(!found){throw _b_.NameError.$factory(name)}} -function dir(obj){if(obj===undefined){ -var frame=$B.last($B.frames_stack) -locals_obj=frame[1],res=_b_.list.$factory(),pos=0 -for(var attr in locals_obj){if(attr.charAt(0)=='$' && attr.charAt(1)!='$'){ -continue} -res[pos++]=attr} -_b_.list.sort(res) -return res} -check_nb_args('dir',1,arguments) -check_no_kw('dir',obj) -var klass=obj.__class__ ||$B.get_class(obj) -if(obj.$is_class){ -var dir_func=$B.$getattr(obj.__class__,"__dir__") -return $B.$call(dir_func)(obj)} -try{var res=$B.$call($B.$getattr(obj,'__dir__'))() -res=_b_.list.$factory(res) -return res}catch(err){} -var res=[],pos=0 -for(var attr in obj){if(attr.charAt(0)!=='$' && attr !=='__class__' && -obj[attr]!==undefined){res[pos++]=attr}} -res.sort() -return res} -function divmod(x,y){check_no_kw('divmod',x,y) -check_nb_args('divmod',2,arguments) -var klass=x.__class__ ||$B.get_class(x) -var dm=$B.$getattr(klass,"__divmod__",_b_.None) -if(dm !==_b_.None){return dm(x,y)} -return _b_.tuple.$factory([$B.$getattr(klass,'__floordiv__')(x,y),$B.$getattr(klass,'__mod__')(x,y)])} -var enumerate=$B.make_class("enumerate",function(){var $ns=$B.args("enumerate",2,{iterable:null,start:null},['iterable','start'],arguments,{start:0},null,null),_iter=iter($ns["iterable"]),start=$ns["start"] -return{ -__class__:enumerate,__name__:'enumerate iterator',counter:start-1,iter:_iter,start:start}} -) -enumerate.__iter__=function(self){self.counter=self.start-1 -return self} -enumerate.__next__=function(self){self.counter++ -return $B.fast_tuple([self.counter,next(self.iter)])} -$B.set_func_names(enumerate,"builtins") -$B.from_alias=function(attr){if(attr.substr(0,2)=='$$' && $B.aliased_names[attr.substr(2)]){return attr.substr(2)} -return attr} -$B.to_alias=function(attr){if($B.aliased_names[attr]){return '$$'+attr} -return attr} -function $$eval(src,_globals,_locals){var $=$B.args("eval",4,{src:null,globals:null,locals:null,mode:null},["src","globals","locals","mode"],arguments,{globals:_b_.None,locals:_b_.None,mode:"eval"},null,null),src=$.src,_globals=$.globals,_locals=$.locals,mode=$.mode -if($.src.mode && $.src.mode=="single" && -["",""].indexOf($.src.filename)>-1){ -_b_.print(">",$.src.source.trim())} -var current_frame=$B.frames_stack[$B.frames_stack.length-1] -if(current_frame !==undefined){var current_locals_id=current_frame[0].replace(/\./g,'_'),current_globals_id=current_frame[2].replace(/\./g,'_')} -var stack_len=$B.frames_stack.length -if(src.__class__===code){mode=src.mode -src=src.source}else if(typeof src !=='string'){throw _b_.TypeError.$factory("eval() arg 1 must be a string, bytes "+ -"or code object")} -var globals_id='$exec_'+$B.UUID(),globals_name=globals_id,locals_id='$exec_'+$B.UUID(),parent_scope -if(_globals===_b_.None){if(current_locals_id==current_globals_id){locals_id=globals_id} -var local_scope={module:globals_id,id:locals_id,binding:{},bindings:{}} -for(var attr in current_frame[1]){local_scope.binding[attr]=true -local_scope.bindings[attr]=true} -var global_scope={module:globals_id,id:globals_id,binding:{},bindings:{}} -for(var attr in current_frame[3]){global_scope.binding[attr]=true -global_scope.bindings[attr]=true} -local_scope.parent_block=global_scope -global_scope.parent_block=$B.builtins_scope -parent_scope=local_scope -eval("$locals_"+parent_scope.id+" = current_frame[1]")}else{ -if(_globals.__class__ !=_b_.dict){throw _b_.TypeError.$factory("exec() globals must be a dict, not "+ -$B.class_name(_globals))} -if(_globals.globals_id){globals_id=globals_name=_globals.globals_id} -_globals.globals_id=globals_id -if(_locals===_globals ||_locals===_b_.None){locals_id=globals_id -parent_scope=$B.builtins_scope}else{ -var grandparent_scope={id:globals_id,parent_block:$B.builtins_scope,binding:{}} -parent_scope={id:locals_id,parent_block:grandparent_scope,binding:{}} -for(var attr in _globals.$string_dict){grandparent_scope.binding[attr]=true} -for(var attr in _locals.$string_dict){parent_scope.binding[attr]=true}}} -$B.$py_module_path[globals_id]=$B.$py_module_path[current_globals_id] -eval('var $locals_'+globals_id+' = {}\nvar $locals_'+ -locals_id+' = {}') -if(_globals===_b_.None){var gobj=current_frame[3],ex='var $locals_'+globals_id+' = gobj;',obj={} -eval(ex) -for(var attr in gobj){if(attr.startsWith("$")&& !attr.startsWith("$$")){continue} -obj[attr]=gobj[attr]} -eval("$locals_"+globals_id+" = obj")}else{var globals_is_dict=false -if(_globals.$jsobj){var items=_globals.$jsobj}else{var items=_b_.dict.$to_obj(_globals) -_globals.$jsobj=items -globals_is_dict=true} -eval("$locals_"+globals_id+" = _globals.$jsobj") -for(var item in items){var item1=$B.to_alias(item) -try{eval('$locals_'+globals_id+'["'+item+'"] = items.'+item)}catch(err){console.log(err) -console.log('error setting',item) -break}}} -_globals.$is_namespace=true -if(_locals===_b_.None){if(_globals !==_b_.None){eval('var $locals_'+locals_id+' = $locals_'+globals_id)}else{var lobj=current_frame[1],ex='',obj={} -for(var attr in current_frame[1]){if(attr.startsWith("$")&& !attr.startsWith("$$")){continue} -obj[attr]=lobj[attr]} -eval('$locals_'+locals_id+" = obj")}}else{var locals_is_dict=false -if(_locals.$jsobj){var items=_locals.$jsobj}else{locals_id_dict=true -var items=_b_.dict.$to_obj(_locals) -_locals.$jsobj=items} -for(var item in items){var item1=$B.to_alias(item) -try{eval('$locals_'+locals_id+'["'+item+'"] = items.'+item)}catch(err){console.log(err) -console.log('error setting',item) -break}} -eval("$locals_"+locals_id+".$exec_locals = true")} -_locals.$is_namespace=true -if(_globals===_b_.None && _locals===_b_.None && -current_frame[0]==current_frame[2]){}else{eval("$locals_"+locals_id+".$src = src")} -var root=$B.py2js(src,globals_id,locals_id,parent_scope),js,gns,lns -if(_globals !==_b_.None && _locals==_b_.None){for(var attr in _globals.$string_dict){root.binding[attr]=true}} -try{ -var try_node=root.children[root.children.length-2],instr=try_node.children[try_node.children.length-2] -var type=instr.C.tree[0].type -switch(type){case 'expr': -case 'list_or_tuple': -case 'op': -case 'ternary': -var children=try_node.children -root.children.splice(root.children.length-2,2) -for(var i=0;i < children.length-1;i++){root.add(children[i])} -break -default: -if(mode=="eval"){throw _b_.SyntaxError.$factory( -"eval() argument must be an expression",'',1,1,src)}} -if(mode !="eval"){ -var last=$B.last(root.children),js=last.to_js() -if(["node_js"].indexOf(last.C.type)==-1){last.to_js=function(){while(js.endsWith("\n")){js=js.substr(0,js.length-1)} -while(js.endsWith(";")){js=js.substr(0,js.length-1)} -return "return ("+js+")"}} -js=root.to_js() -var locals_obj=eval("$locals_"+locals_id),globals_obj=eval("$locals_"+globals_id) -if(_globals===_b_.None){var res=new Function("$locals_"+globals_id,"$locals_"+locals_id,js)( -globals_obj,locals_obj)}else{current_globals_obj=current_frame[3] -current_locals_obj=current_frame[1] -var res=new Function("$locals_"+globals_id,"$locals_"+locals_id,"$locals_"+current_globals_id,"$locals_"+current_locals_id,js)(globals_obj,locals_obj,current_globals_obj,current_locals_obj)} -if($.src.mode && $.src.mode=="single" && -$.src.filename==""){if(res !==_b_.None && res !==undefined){_b_.print(_b_.repr(res))}}}else{js=root.to_js() -var res=eval(js)} -if($.src.filename=="" && $.src.mode=="single" && -res !==undefined && res !==_b_.None){_b_.print(res)} -gns=eval("$locals_"+globals_id) -if($B.frames_stack[$B.frames_stack.length-1][2]==globals_id){gns=$B.frames_stack[$B.frames_stack.length-1][3]} -if(_locals !==_b_.None){lns=eval("$locals_"+locals_id) -for(var attr in lns){var attr1=$B.from_alias(attr) -if(attr1.charAt(0)!='$'){if(_locals.$jsobj){_locals.$jsobj[attr]=lns[attr]}else{_b_.dict.$setitem(_locals,attr1,lns[attr])}}}}else{for(var attr in lns){if(attr !=="$src"){current_frame[1][attr]=lns[attr]}}} -if(_globals !==_b_.None){ -if(globals_is_dict){var jsobj=_globals.$jsobj -delete _globals.$jsobj} -for(var attr in gns){attr1=$B.from_alias(attr) -if(attr1.charAt(0)!='$'){if(globals_is_dict){_b_.dict.$setitem(_globals,attr,gns[attr])}else{_globals.$jsobj[attr1]=gns[attr]}}} -for(var attr in _globals.$string_dict){if(attr.startsWith("$")&& !attr.startsWith("$$")){delete _globals.$string_dict[attr]}}}else{for(var attr in gns){if(attr !=="$src"){current_frame[3][attr]=gns[attr]}}} -if(res===undefined){return _b_.None} -return res}catch(err){err.src=src -err.module=globals_id -if(err.$py_error===undefined){throw $B.exception(err)} -throw err}finally{ -if($B.frames_stack.length==stack_len+1){$B.frames_stack.pop()} -root=null -js=null -gns=null -lns=null -$B.clear_ns(globals_id) -$B.clear_ns(locals_id)}} -$$eval.$is_func=true -function exec(src,globals,locals){var missing={} -var $=$B.args("exec",3,{src:null,globals:null,locals:null},["src","globals","locals"],arguments,{globals:_b_.None,locals:_b_.None},null,null),src=$.src,globals=$.globals,locals=$.locals -return $$eval(src,globals,locals,"exec")||_b_.None} -exec.$is_func=true -function exit(){throw _b_.SystemExit} -exit.__repr__=exit.__str__=function(){return "Use exit() or Ctrl-Z plus Return to exit"} -var filter=$B.make_class("filter",function(func,iterable){check_no_kw('filter',func,iterable) -check_nb_args('filter',2,arguments) -iterable=iter(iterable) -if(func===_b_.None){func=$B.$bool} -return{ -__class__:filter,func:func,iterable:iterable}} -) -filter.__iter__=function(self){return self} -filter.__next__=function(self){while(true){var _item=next(self.iterable) -if(self.func(_item)){return _item}}} -$B.set_func_names(filter,"builtins") -function format(value,format_spec){var $=$B.args("format",2,{value:null,format_spec:null},["value","format_spec"],arguments,{format_spec:''},null,null) -var klass=value.__class__ ||$B.get_class(value) -try{var method=$B.$getattr(klass,'__format__')}catch(err){if(err.__class__===_b_.AttributeError){throw _b_.NotImplementedError("__format__ is not implemented "+ -"for object '"+_b_.str.$factory(value)+"'")} -throw err} -return $B.$call(method)(value,$.format_spec)} -function attr_error(attr,cname){var msg="bad operand type for unary #: '"+cname+"'" -switch(attr){case '__neg__': -throw _b_.TypeError.$factory(msg.replace('#','-')) -case '__pos__': -throw _b_.TypeError.$factory(msg.replace('#','+')) -case '__invert__': -throw _b_.TypeError.$factory(msg.replace('#','~')) -case '__call__': -throw _b_.TypeError.$factory("'"+cname+"'"+ -' object is not callable') -default: -while(attr.charAt(0)=='$'){attr=attr.substr(1)} -throw _b_.AttributeError.$factory("'"+cname+ -"' object has no attribute '"+attr+"'")}} -function getattr(){var missing={} -var $=$B.args("getattr",3,{obj:null,attr:null,_default:null},["obj","attr","_default"],arguments,{_default:missing},null,null) -return $B.$getattr($.obj,$.attr,$._default===missing ? undefined :$._default)} -function in_mro(klass,attr){if(klass===undefined){return false} -if(klass.hasOwnProperty(attr)){return klass[attr]} -var mro=klass.__mro__ -for(var i=0,len=mro.length;i < len;i++){if(mro[i].hasOwnProperty(attr)){return mro[i][attr]}} -return false} -$B.$getattr=function(obj,attr,_default){ -attr=$B.to_alias(attr) -if(obj.$method_cache && -obj.$method_cache[attr]&& -obj.__class__ && -obj.__class__[attr]==obj.$method_cache[attr][1]){ -return obj.$method_cache[attr][0]} -var rawname=attr -if(obj===undefined){console.log("get attr",attr,"of undefined")} -var is_class=obj.$is_class ||obj.$factory -var klass=obj.__class__ -var $test=false -if($test){console.log("$getattr",attr,obj,klass)} -if(klass !==undefined && klass.__bases__ && -(klass.__bases__.length==0 || -(klass.__bases__.length==1 && -klass.__bases__[0]===_b_.object))){if(obj.hasOwnProperty(attr)){return obj[attr]}else if(obj.__dict__ && -obj.__dict__.$string_dict.hasOwnProperty(attr)&& -!(klass.hasOwnProperty(attr)&& -klass[attr].__get__)){return obj.__dict__.$string_dict[attr][0]}else if(klass.hasOwnProperty(attr)){if(typeof klass[attr]!="function" && -attr !="__dict__" && -klass[attr].__get__===undefined){var kl=klass[attr].__class__ -if(! in_mro(kl,"__get__")){return klass[attr]}}}} -if($test){console.log("attr",attr,"of",obj,"class",klass,"isclass",is_class)} -if(klass===undefined){ -if(typeof obj=='string'){klass=_b_.str} -else if(typeof obj=='number'){klass=obj % 1==0 ? _b_.int :_b_.float}else if(obj instanceof Number){klass=_b_.float}else{klass=$B.get_class(obj) -if(klass===undefined){ -if($test){console.log("no class",attr,obj.hasOwnProperty(attr),obj[attr])} -var res=obj[attr] -if(res !==undefined){if(typeof res=="function"){var f=function(){ -return res.apply(obj,arguments)} -f.$infos={__name__:attr,__qualname__:attr} -return f}else{return $B.$JS2Py(res)}} -if(_default !==undefined){return _default} -throw _b_.AttributeError.$factory('object has no attribute '+rawname)}}} -switch(attr){case '__call__': -if(typeof obj=='function'){var res=function(){return obj.apply(null,arguments)} -res.__class__=method_wrapper -res.$infos={__name__:"__call__"} -return res} -break -case '__class__': -return klass -case '__dict__': -if(is_class){var proxy={} -for(var key in obj){var key1=$B.from_alias(key) -if(! key1.startsWith("$")){proxy[key1]=obj[key]}} -proxy.__dict__=$B.getset_descriptor.$factory(obj,"__dict__") -return $B.mappingproxy.$factory(proxy)}else{if(obj.hasOwnProperty(attr)){return obj[attr]}else if(obj.$infos){if(obj.$infos.hasOwnProperty("__dict__")){return obj.$infos.__dict__}else if(obj.$infos.hasOwnProperty("__func__")){return obj.$infos.__func__.$infos.__dict__}} -return $B.obj_dict(obj)} -case '__doc__': -for(var i=0;i < builtin_names.length;i++){if(obj===_b_[builtin_names[i]]){_get_builtins_doc() -return $B.builtins_doc[builtin_names[i]]}} -break -case '__mro__': -if(obj.$is_class){ -return _b_.tuple.$factory([obj].concat(obj.__mro__))}else if(obj.__dict__ && -obj.__dict__.$string_dict.__mro__ !==undefined){return obj.__dict__.$string_dict.__mro__} -throw _b_.AttributeError.$factory(attr) -case '__subclasses__': -if(klass.$factory ||klass.$is_class){var subclasses=obj.$subclasses ||[] -return function(){return subclasses}} -break} -if(typeof obj=='function'){var value=obj[attr] -if(value !==undefined){if(attr=='__module__'){return value}}} -if((! is_class)&& klass.$native){if(obj.$method_cache && obj.$method_cache[attr]){return obj.$method_cache[attr]} -if($test){console.log("native class",klass,klass[attr])} -if(attr=="__doc__" && klass[attr]===undefined && klass.$infos){_get_builtins_doc() -klass[attr]=$B.builtins_doc[klass.$infos.__name__]} -if(klass[attr]===undefined){var object_attr=_b_.object[attr] -if($test){console.log("object attr",object_attr)} -if(object_attr !==undefined){klass[attr]=object_attr}else{if($test){console.log("obj[attr]",obj[attr])} -var attrs=obj.__dict__ -if(attrs && -(object_attr=attrs.$string_dict[attr])!==undefined){return object_attr[0]} -if(_default===undefined){attr_error(attr,klass.$infos.__name__)} -return _default}} -if(klass.$descriptors && klass.$descriptors[attr]!==undefined){return klass[attr](obj)} -if(typeof klass[attr]=='function'){var func=klass[attr] -if(attr=='__new__'){func.$type="staticmethod"} -if(func.$type=="staticmethod"){return func} -var self=klass[attr].__class__==$B.method ? klass :obj,method=klass[attr].bind(null,self) -method.__class__=$B.method -method.$infos={__func__:func,__name__:attr,__self__:self,__qualname__:klass.$infos.__name__+"."+attr} -if(typeof obj=="object"){ -obj.__class__=klass -obj.$method_cache=obj.$method_cache ||{} -obj.$method_cache[attr]=method} -return method}else if(klass[attr]!==undefined){return klass[attr]} -attr_error(rawname,klass.$infos.__name__)} -var mro,attr_func -if(is_class){attr_func=_b_.type.__getattribute__ }else{attr_func=klass.__getattribute__ -if(attr_func===undefined){var mro=klass.__mro__ -if(mro===undefined){console.log(obj,attr,"no mro, klass",klass)} -for(var i=0,len=mro.length;i < len;i++){attr_func=mro[i]['__getattribute__'] -if(attr_func !==undefined){break}}}} -if(typeof attr_func !=='function'){console.log(attr+' is not a function '+attr_func,klass)} -var odga=_b_.object.__getattribute__ -if($test){console.log("attr_func is odga",attr_func,attr_func===odga,obj[attr])} -if(attr_func===odga){var res=obj[attr] -if(Array.isArray(obj)&& Array.prototype[attr]!==undefined){ -res=undefined} -if(res===null){return null} -else if(res===undefined && obj.hasOwnProperty(attr)){return res}else if(res !==undefined){if($test){console.log(obj,attr,obj[attr],res.__set__ ||res.$is_class)} -if(res.__set__===undefined ||res.$is_class){if($test){console.log("return",res,res+'',res.__set__,res.$is_class)} -return res}}} -try{var res=attr_func(obj,attr) -if($test){console.log("result of attr_func",res)}}catch(err){if(_default !==undefined){return _default} -throw err} -if(res !==undefined){return res} -if(_default !==undefined){return _default} -var cname=klass.$infos.__name__ -if(is_class){cname=obj.$infos.__name__} -attr_error(rawname,cname)} -function globals(){ -check_nb_args('globals',0,arguments) -var res=$B.obj_dict($B.last($B.frames_stack)[3]) -res.$jsobj.__BRYTHON__=$B.JSObj.$factory($B) -res.$is_namespace=true -return res} -function hasattr(obj,attr){check_no_kw('hasattr',obj,attr) -check_nb_args('hasattr',2,arguments) -try{$B.$getattr(obj,attr);return true} -catch(err){return false}} -var hash_cache={} -function hash(obj){check_no_kw('hash',obj) -check_nb_args('hash',1,arguments) -if(obj.__hashvalue__ !==undefined){return obj.__hashvalue__} -if(isinstance(obj,_b_.bool)){return _b_.int.$factory(obj)} -if(isinstance(obj,_b_.int)){if(obj.$brython_value===undefined){return obj.valueOf()}else{ -return obj.__hashvalue__=obj.$brython_value}} -if(obj.$is_class || -obj.__class__===_b_.type || -obj.__class__===$B.Function){return obj.__hashvalue__=$B.$py_next_hash--} -if(typeof obj=="string"){var cached=hash_cache[obj] -if(cached !==undefined){return cached} -else{return hash_cache[obj]=_b_.str.__hash__(obj)}} -var klass=obj.__class__ ||$B.get_class(obj) -if(klass===undefined){throw _b_.TypeError.$factory("unhashable type: '"+ -_b_.str.$factory($B.JSObj.$factory(obj))+"'")} -var hash_method=$B.$getattr(klass,'__hash__',_b_.None) -if(hash_method===_b_.None){throw _b_.TypeError.$factory("unhashable type: '"+ -$B.class_name(obj)+"'")} -if(hash_method.$infos.__func__===_b_.object.__hash__){if($B.$getattr(obj,'__eq__').$infos.__func__ !==_b_.object.__eq__){throw _b_.TypeError.$factory("unhashable type: '"+ -$B.class_name(obj)+"'",'hash')}else{return obj.__hashvalue__=_b_.object.__hash__(obj)}}else{return $B.$call(hash_method)(obj)}} -function _get_builtins_doc(){if($B.builtins_doc===undefined){ -var url=$B.brython_path -if(url.charAt(url.length-1)=='/'){url=url.substr(0,url.length-1)} -url+='/builtins_docstrings.js' -var f=_b_.open(url) -eval(f.$string) -$B.builtins_doc=docs}} -function help(obj){if(obj===undefined){obj='help'} -if(typeof obj=='string' && _b_[obj]!==undefined){_get_builtins_doc() -var _doc=$B.builtins_doc[obj] -if(_doc !==undefined && _doc !=''){_b_.print(_doc) -return}} -for(var i=0;i < builtin_names.length;i++){if(obj===_b_[builtin_names[i]]){_get_builtins_doc() -_b_.print(_doc=$B.builtins_doc[builtin_names[i]])}} -if(typeof obj=='string'){$B.$import("pydoc"); -var pydoc=$B.imported["pydoc"] -$B.$getattr($B.$getattr(pydoc,"help"),"__call__")(obj) -return} -try{return $B.$getattr(obj,'__doc__')} -catch(err){return ''}} -help.__repr__=help.__str__=function(){return "Type help() for interactive help, or help(object) "+ -"for help about object."} -function hex(obj){check_no_kw('hex',obj) -check_nb_args('hex',1,arguments) -return bin_hex_oct(16,obj)} -function id(obj){check_no_kw('id',obj) -check_nb_args('id',1,arguments) -if(isinstance(obj,[_b_.str,_b_.int,_b_.float])&& -!isinstance(obj,$B.long_int)){return $B.$getattr(_b_.str.$factory(obj),'__hash__')()}else if(obj.$id !==undefined){return obj.$id} -else{return obj.$id=$B.UUID()}} -function __import__(mod_name,globals,locals,fromlist,level){ -var $=$B.args('__import__',5,{name:null,globals:null,locals:null,fromlist:null,level:null},['name','globals','locals','fromlist','level'],arguments,{globals:None,locals:None,fromlist:_b_.tuple.$factory(),level:0},null,null) -return $B.$__import__($.name,$.globals,$.locals,$.fromlist)} -function input(msg){var res=prompt(msg ||'')||'' -if($B.imported["sys"]&& $B.imported["sys"].ps1){ -var ps1=$B.imported["sys"].ps1,ps2=$B.imported["sys"].ps2 -if(msg==ps1 ||msg==ps2){console.log(msg,res)}} -return res} -function isinstance(obj,cls){check_no_kw('isinstance',obj,cls) -check_nb_args('isinstance',2,arguments) -if(obj===null){return cls===None} -if(obj===undefined){return false} -if(cls.constructor===Array){for(var i=0;i < cls.length;i++){if(isinstance(obj,cls[i])){return true}} -return false} -if(!cls.__class__ || -!(cls.$factory !==undefined ||cls.$is_class !==undefined)){throw _b_.TypeError.$factory("isinstance() arg 2 must be a type "+ -"or tuple of types")} -if(cls===_b_.int &&(obj===True ||obj===False)){return True} -if(cls===_b_.bool){switch(typeof obj){case "string": -return false -case "number": -return false -case "boolean": -return true}} -var klass=obj.__class__ -if(klass==undefined){if(typeof obj=='string'){if(cls==_b_.str){return true} -else if($B.builtin_classes.indexOf(cls)>-1){return false}}else if(obj.contructor===Number && Number.isFinite(obj)){if(cls==_b_.float){return true}}else if(typeof obj=='number' && Number.isFinite(obj)){if(Number.isFinite(obj)&& cls==_b_.int){return true}} -klass=$B.get_class(obj)} -if(klass===undefined){return false} -function check(kl,cls){if(kl===cls){return true} -else if(cls===_b_.str && kl===$B.StringSubclass){return true} -else if(cls===_b_.int && kl===$B.IntSubclass){return true}} -if(check(klass,cls)){return true} -var mro=klass.__mro__ -for(var i=0;i < mro.length;i++){if(check(mro[i],cls)){return true}} -var instancecheck=$B.$getattr(cls.__class__ ||$B.get_class(cls),'__instancecheck__',_b_.None) -if(instancecheck !==_b_.None){return instancecheck(cls,obj)} -return false} -function issubclass(klass,classinfo){check_no_kw('issubclass',klass,classinfo) -check_nb_args('issubclass',2,arguments) -if(!klass.__class__ || -!(klass.$factory !==undefined ||klass.$is_class !==undefined)){throw _b_.TypeError.$factory("issubclass() arg 1 must be a class")} -if(isinstance(classinfo,_b_.tuple)){for(var i=0;i < classinfo.length;i++){if(issubclass(klass,classinfo[i])){return true}} -return false} -if(classinfo.$factory ||classinfo.$is_class){if(klass===classinfo || -klass.__mro__.indexOf(classinfo)>-1){return true}} -var sch=$B.$getattr(classinfo.__class__ ||$B.get_class(classinfo),'__subclasscheck__',_b_.None) -if(sch==_b_.None){return false} -return sch(classinfo,klass)} -var iterator_class=$B.make_class("iterator",function(getitem,len){return{ -__class__:iterator_class,getitem:getitem,len:len,counter:-1}} -) -iterator_class.__next__=function(self){self.counter++ -if(self.len !==null && self.counter==self.len){throw _b_.StopIteration.$factory('')} -try{return self.getitem(self.counter)} -catch(err){throw _b_.StopIteration.$factory('')}} -callable_iterator=$B.make_class("callable_iterator",function(func,sentinel){return{ -__class__:callable_iterator,func:func,sentinel:sentinel}} -) -callable_iterator.__iter__=function(self){return self} -callable_iterator.__next__=function(self){var res=self.func() -if($B.rich_comp("__eq__",res,self.sentinel)){throw _b_.StopIteration.$factory()} -return res} -$B.$iter=function(obj,sentinel){ -if(sentinel===undefined){var klass=obj.__class__ ||$B.get_class(obj) -try{var _iter=$B.$call($B.$getattr(klass,'__iter__'))}catch(err){if(err.__class__===_b_.AttributeError){try{var gi_method=$B.$call($B.$getattr(klass,'__getitem__')),gi=function(i){return gi_method(obj,i)},ln=len(obj) -return iterator_class.$factory(gi,len)}catch(err){throw _b_.TypeError.$factory("'"+$B.class_name(obj)+ -"' object is not iterable")}} -throw err} -var res=$B.$call(_iter)(obj) -try{$B.$getattr(res,'__next__')} -catch(err){if(isinstance(err,_b_.AttributeError)){throw _b_.TypeError.$factory( -"iter() returned non-iterator of type '"+ -$B.class_name(res)+"'")}} -return res}else{return callable_iterator.$factory(obj,sentinel)}} -function iter(){ -var $=$B.args('iter',1,{obj:null},['obj'],arguments,{},'args','kw'),sentinel -if($.args.length > 0){var sentinel=$.args[0]} -return $B.$iter($.obj,sentinel)} -function len(obj){check_no_kw('len',obj) -check_nb_args('len',1,arguments) -var klass=obj.__class__ ||$B.get_class(obj) -try{var method=$B.$getattr(klass,'__len__')}catch(err){throw _b_.TypeError.$factory("object of type '"+ -$B.class_name(obj)+"' has no len()")} -return $B.$call(method)(obj)} -function locals(){ -check_nb_args('locals',0,arguments) -var res=$B.obj_dict($B.last($B.frames_stack)[1]) -res.$is_namespace=true -delete res.$jsobj.__annotations__ -return res} -var map=$B.make_class("map",function(){var $=$B.args('map',2,{func:null,it1:null},['func','it1'],arguments,{},'args',null),func=$B.$call($.func) -var iter_args=[$B.$iter($.it1)] -$.args.forEach(function(item){iter_args.push($B.$iter(item))}) -var obj={__class__:map,args:iter_args,func:func} -return obj} -) -map.__iter__=function(self){return self} -map.__next__=function(self){var args=[] -for(var i=0;i < self.args.length;i++){args.push(next(self.args[i]))} -return self.func.apply(null,args)} -$B.set_func_names(map,"builtins") -function $extreme(args,op){ -var $op_name='min' -if(op==='__gt__'){$op_name="max"} -if(args.length==0){throw _b_.TypeError.$factory($op_name+ -" expected 1 arguments, got 0")} -var last_arg=args[args.length-1],nb_args=args.length,has_default=false,func=false -if(last_arg.$nat=='kw'){nb_args-- -last_arg=last_arg.kw -for(var attr in last_arg){switch(attr){case 'key': -func=last_arg[attr] -break -case '$$default': -var default_value=last_arg[attr] -has_default=true -break -default: -throw _b_.TypeError.$factory("'"+attr+ -"' is an invalid keyword argument for this function")}}} -if(!func){func=function(x){return x}} -if(nb_args==0){throw _b_.TypeError.$factory($op_name+" expected 1 argument, got 0")}else if(nb_args==1){ -var $iter=iter(args[0]),res=null -while(true){try{var x=next($iter) -if(res===null ||$B.$bool($B.$getattr(func(x),op)(func(res)))){res=x}}catch(err){if(err.__class__==_b_.StopIteration){if(res===null){if(has_default){return default_value} -else{throw _b_.ValueError.$factory($op_name+ -"() arg is an empty sequence")}}else{return res}} -throw err}}}else{if(has_default){throw _b_.TypeError.$factory("Cannot specify a default for "+ -$op_name+"() with multiple positional arguments")} -var res=null -for(var i=0;i < nb_args;i++){var x=args[i] -if(res===null ||$B.$bool($B.$getattr(func(x),op)(func(res)))){res=x}} -return res}} -function max(){return $extreme(arguments,'__gt__')} -var memoryview=$B.make_class('memoryview',function(obj){check_no_kw('memoryview',obj) -check_nb_args('memoryview',1,arguments) -if(obj.__class__===memoryview){return obj} -if($B.get_class(obj).$buffer_protocol){return{ -__class__:memoryview,obj:obj, -format:'B',itemsize:1,ndim:1,shape:_b_.tuple.$factory([_b_.len(obj)]),strides:_b_.tuple.$factory([1]),suboffsets:_b_.tuple.$factory([]),c_contiguous:true,f_contiguous:true,contiguous:true}}else{throw _b_.TypeError.$factory("memoryview: a bytes-like object "+ -"is required, not '"+$B.class_name(obj)+"'")}} -) -memoryview.__eq__=function(self,other){if(other.__class__ !==memoryview){return false} -return $B.$getattr(self.obj,'__eq__')(other.obj)} -memoryview.__getitem__=function(self,key){if(isinstance(key,_b_.int)){var start=key*self.itemsize -if(self.format=="I"){var res=self.obj.source[start],coef=256 -for(var i=1;i < 4;i++){res+=self.obj.source[start+i]*coef -coef*=256} -return res}else if("B".indexOf(self.format)>-1){if(key > self.obj.source.length-1){throw _b_.KeyError.$factory(key)} -return self.obj.source[key]}else{ -return self.obj.source[key]}} -var res=self.obj.__class__.__getitem__(self.obj,key) -if(key.__class__===_b_.slice){return memoryview.$factory(res)}} -memoryview.__len__=function(self){return len(self.obj)/self.itemsize} -memoryview.cast=function(self,format){switch(format){case "B": -return memoryview.$factory(self.obj) -case "I": -var res=memoryview.$factory(self.obj),objlen=len(self.obj) -res.itemsize=4 -res.format="I" -if(objlen % 4 !=0){throw _b_.TypeError.$factory("memoryview: length is not "+ -"a multiple of itemsize")} -return res}} -memoryview.hex=function(self){var res='',bytes=_b_.bytes.$factory(self) -bytes.source.forEach(function(item){res+=item.toString(16)}) -return res} -memoryview.tobytes=function(self){return _b_.bytes.$factory(self.obj)} -memoryview.tolist=function(self){if(self.itemsize==1){return _b_.list.$factory(_b_.bytes.$factory(self.obj))}else if(self.itemsize==4){if(self.format=="I"){var res=[] -for(var i=0;i < self.obj.source.length;i+=4){var item=self.obj.source[i],coef=256 -for(var j=1;j < 4;j++){item+=coef*self.obj.source[i+j] -coef*=256} -res.push(item)} -return res}}} -$B.set_func_names(memoryview,"builtins") -function min(){return $extreme(arguments,'__lt__')} -function next(obj){check_no_kw('next',obj) -var missing={},$=$B.args("next",2,{obj:null,def:null},['obj','def'],arguments,{def:missing},null,null) -var klass=obj.__class__ ||$B.get_class(obj),ga=$B.$call($B.$getattr(klass,"__next__")) -if(ga !==undefined){try{return $B.$call(ga)(obj)}catch(err){if(err.__class__===_b_.StopIteration && -$.def !==missing){return $.def} -throw err}} -throw _b_.TypeError.$factory("'"+$B.class_name(obj)+ -"' object is not an iterator")} -var NotImplementedType=$B.make_class("NotImplementedType",function(){return NotImplemented} -) -NotImplementedType.__repr__=NotImplementedType.__str__=function(self){return "NotImplemented"} -var NotImplemented={__class__:NotImplementedType} -function $not(obj){return !$B.$bool(obj)} -function oct(obj){check_no_kw('oct',obj) -check_nb_args('oct',1,arguments) -return bin_hex_oct(8,obj)} -function ord(c){check_no_kw('ord',c) -check_nb_args('ord',1,arguments) -if(typeof c=='string'){if(c.length==1){return c.charCodeAt(0)} -throw _b_.TypeError.$factory('ord() expected a character, but '+ -'string of length '+c.length+' found')} -switch($B.get_class(c)){case _b_.str: -if(c.length==1){return c.charCodeAt(0)} -throw _b_.TypeError.$factory('ord() expected a character, but '+ -'string of length '+c.length+' found') -case _b_.str.$surrogate: -if(c.items.length==1){return c.items[0].codePointAt(0)} -throw _b_.TypeError.$factory('ord() expected a character, but '+ -'string of length '+c.items.length+' found') -case _b_.bytes: -case _b_.bytearray: -if(c.source.length==1){return c.source[0]} -throw _b_.TypeError.$factory('ord() expected a character, but '+ -'string of length '+c.source.length+' found') -default: -throw _b_.TypeError.$factory('ord() expected a character, but '+ -$B.class_name(c)+' was found')}} -function pow(){var $=$B.args('pow',3,{x:null,y:null,mod:null},['x','y','mod'],arguments,{mod:None},null,null),x=$.x,y=$.y,z=$.mod -var klass=x.__class__ ||$B.get_class(x) -if(z===_b_.None){return $B.$call($B.$getattr(klass,'__pow__'))(x,y)}else{if(x !=_b_.int.$factory(x)||y !=_b_.int.$factory(y)){throw _b_.TypeError.$factory("pow() 3rd argument not allowed "+ -"unless all arguments are integers")} -return $B.$call($B.$getattr(klass,'__pow__'))(x,y,z)}} -function $print(){var $ns=$B.args('print',0,{},[],arguments,{},'args','kw') -var ks=$ns['kw'].$string_dict -var end=(ks['end']===undefined ||ks['end']===None)? '\n' :ks['end'][0],sep=(ks['sep']===undefined ||ks['sep']===None)? ' ' :ks['sep'][0],file=ks['file']===undefined ? $B.stdout :ks['file'][0],args=$ns['args'] -var items=[] -args.forEach(function(arg){items.push(_b_.str.$factory(arg))}) -var res=items.join(sep)+end -res=res.replace(new RegExp("\u0007","g"),""). -replace(new RegExp("(.)\b","g"),"") -$B.$getattr(file,'write')(res) -var flush=$B.$getattr(file,'flush',None) -if(flush !==None){flush()} -return None} -$print.__name__='print' -$print.is_func=true -var property=$B.make_class("property",function(fget,fset,fdel,doc){var res={__class__:property} -property.__init__(res,fget,fset,fdel,doc) -return res} -) -property.__init__=function(self,fget,fset,fdel,doc){self.__doc__=doc ||"" -self.$type=fget.$type -self.fget=fget -self.fset=fset -self.fdel=fdel -if(fget && fget.$attrs){for(var key in fget.$attrs){self[key]=fget.$attrs[key]}} -self.__get__=function(self,obj,objtype){if(obj===undefined){return self} -if(self.fget===undefined){throw _b_.AttributeError.$factory("unreadable attribute")} -return $B.$call(self.fget)(obj)} -if(fset !==undefined){self.__set__=function(self,obj,value){if(self.fset===undefined){throw _b_.AttributeError.$factory("can't set attribute")} -$B.$getattr(self.fset,'__call__')(obj,value)}} -self.__delete__=fdel; -self.getter=function(fget){return property.$factory(fget,self.fset,self.fdel,self.__doc__)} -self.setter=function(fset){return property.$factory(self.fget,fset,self.fdel,self.__doc__)} -self.deleter=function(fdel){return property.$factory(self.fget,self.fset,fdel,self.__doc__)}} -property.__repr__=function(self){return _b_.repr(self.fget(self))} -property.__str__=function(self){return _b_.str.$factory(self.fget(self))} -$B.set_func_names(property,"builtins") -function quit(){throw _b_.SystemExit} -quit.__repr__=quit.__str__=function(){return "Use quit() or Ctrl-Z plus Return to exit"} -function repr(obj){check_no_kw('repr',obj) -check_nb_args('repr',1,arguments) -var klass=obj.__class__ ||$B.get_class(obj) -return $B.$call($B.$getattr(klass,"__repr__"))(obj)} -var reversed=$B.make_class("reversed",function(seq){ -check_no_kw('reversed',seq) -check_nb_args('reversed',1,arguments) -var klass=seq.__class__ ||$B.get_class(seq),rev_method=$B.$getattr(klass,'__reversed__',null) -if(rev_method !==null){return $B.$call(rev_method)(seq)} -try{var method=$B.$getattr(klass,'__getitem__')}catch(err){throw _b_.TypeError.$factory("argument to reversed() must be a sequence")} -var res={__class__:reversed,$counter :_b_.len(seq),getter:function(i){return $B.$call(method)(seq,i)}} -return res} -) -reversed.__iter__=function(self){return self} -reversed.__next__=function(self){self.$counter-- -if(self.$counter < 0){throw _b_.StopIteration.$factory('')} -return self.getter(self.$counter)} -$B.set_func_names(reversed,"builtins") -function round(){var $=$B.args('round',2,{number:null,ndigits:null},['number','ndigits'],arguments,{ndigits:None},null,null),arg=$.number,n=$.ndigits===None ? 0 :$.ndigits -if(!isinstance(arg,[_b_.int,_b_.float])){var klass=arg.__class__ ||$B.get_class(arg) -try{return $B.$call($B.$getattr(klass,"__round__")).apply(null,arguments)}catch(err){if(err.__class__===_b_.AttributeError){throw _b_.TypeError.$factory("type "+$B.class_name(arg)+ -" doesn't define __round__ method")}else{throw err}}} -if(isinstance(arg,_b_.float)&& -(arg.value===Infinity ||arg.value===-Infinity)){throw _b_.OverflowError.$factory("cannot convert float infinity to integer")} -if(!isinstance(n,_b_.int)){throw _b_.TypeError.$factory( -"'"+$B.class_name(n)+"' object cannot be interpreted as an integer")} -var mult=Math.pow(10,n),x=arg*mult,floor=Math.floor(x),diff=Math.abs(x-floor),res -if(diff==0.5){if(floor % 2){floor+=1} -res=_b_.int.__truediv__(floor,mult)}else{res=_b_.int.__truediv__(Math.round(x),mult)} -if($.ndigits===None){ -return res.valueOf()}else if(arg instanceof Number){return new Number(res)}else{return res.valueOf()}} -function setattr(){var $=$B.args('setattr',3,{obj:null,attr:null,value:null},['obj','attr','value'],arguments,{},null,null),obj=$.obj,attr=$.attr,value=$.value -if(!(typeof attr=='string')){throw _b_.TypeError.$factory("setattr(): attribute name must be string")} -return $B.$setattr(obj,attr,value)} -$B.$setattr=function(obj,attr,value){ -var $test=false -if($B.aliased_names[attr]){attr='$$'+attr}else if(attr=='__dict__'){ -if(! isinstance(value,_b_.dict)){throw _b_.TypeError.$factory("__dict__ must be set to a dictionary, "+ -"not a '"+$B.class_name(value)+"'")} -if(obj.$infos){obj.$infos.__dict__=value -return None} -obj.__dict__=value -return None}else if(attr=="__class__"){ -function error(msg){throw _b_.TypeError.$factory(msg)} -if(value.__class__){if(value.__module__=="builtins"){error("__class__ assignement only "+ -"supported for heap types or ModuleType subclasses")}else if(Array.isArray(value.__bases__)){for(var i=0;i < value.__bases__.length;i++){if(value.__bases__[i].__module__=="builtins"){error("__class__ assignment: '"+$B.class_name(obj)+ -"' object layout differs from '"+ -$B.class_name(value)+"'")}}}} -obj.__class__=value -return None}else if(attr=="__doc__" && obj.__class__===_b_.property){obj[attr]=value} -if($test){console.log("set attr",attr,"to",obj)} -if(obj.$factory ||obj.$is_class){var metaclass=obj.__class__ -if($test){console.log("obj is class",metaclass,metaclass[attr])} -if(metaclass && metaclass[attr]&& metaclass[attr].__get__ && -metaclass[attr].__set__){metaclass[attr].__set__(obj,value) -return None} -obj[attr]=value -if(attr=="__init__" ||attr=="__new__"){ -obj.$factory=$B.$instance_creator(obj)}else if(attr=="__bases__"){ -obj.__mro__=_b_.type.mro(obj)} -if($test){console.log("after setattr",obj)} -return None} -var res=obj[attr],klass=obj.__class__ ||$B.get_class(obj) -if($test){console.log('set attr',attr,'of obj',obj,'class',klass,"obj[attr]",obj[attr])} -if(res===undefined && klass){res=klass[attr] -if(res===undefined){var mro=klass.__mro__,_len=mro.length -for(var i=0;i < _len;i++){res=mro[i][attr] -if(res !==undefined){break}}}} -if($test){console.log('set attr',attr,'klass',klass,'found in class',res)} -if(res !==undefined && res !==null){ -if(res.__set__ !==undefined){res.__set__(res,obj,value);return None} -var rcls=res.__class__,__set1__ -if(rcls !==undefined){var __set1__=rcls.__set__ -if(__set1__===undefined){var mro=rcls.__mro__ -for(var i=0,_len=mro.length;i < _len;i++){__set1__=mro[i].__set__ -if(__set1__){break}}}} -if(__set1__ !==undefined){var __set__=$B.$getattr(res,'__set__',null) -if(__set__ &&(typeof __set__=='function')){__set__.apply(res,[obj,value]) -return None}}else if(klass && klass.$descriptors !==undefined && -klass[attr]!==undefined){var setter=klass[attr].setter -if(typeof setter=='function'){setter(obj,value) -return None}else{throw _b_.AttributeError.$factory('readonly attribute')}}} -var _setattr=false -if(klass !==undefined){_setattr=klass.__setattr__ -if(_setattr===undefined){var mro=klass.__mro__ -for(var i=0,_len=mro.length-1;i < _len;i++){_setattr=mro[i].__setattr__ -if(_setattr){break}}}} -var special_attrs=["__module__"] -if(klass && klass.__slots__ && special_attrs.indexOf(attr)==-1 && -! _setattr){function mangled_slots(klass){if(klass.__slots__){if(Array.isArray(klass.__slots__)){return klass.__slots__.map(function(item){if(item.startsWith("__")&& ! item.endsWith("_")){return "_"+klass.$infos.__name__+item}else{return item}})}else{return klass.__slots__}} -return[]} -var has_slot=false -if(mangled_slots(klass).indexOf(attr)>-1){has_slot=true}else{for(var i=0;i < klass.__mro__.length;i++){var kl=klass.__mro__[i] -if(mangled_slots(kl).indexOf(attr)>-1){has_slot=true -break}}} -if(! has_slot){throw _b_.AttributeError.$factory("'"+klass.$infos.__name__+ -"' object has no attribute '"+attr+"'")}} -if($test){console.log("attr",attr,"use _setattr",_setattr)} -if(!_setattr){if(obj.__dict__===undefined){obj[attr]=value}else{_b_.dict.$setitem(obj.__dict__,attr,value)} -if($test){console.log("no setattr, obj",obj)}}else{_setattr(obj,attr,value)} -return None} -function sorted(){var $=$B.args('sorted',1,{iterable:null},['iterable'],arguments,{},null,'kw') -var _list=_b_.list.$factory(iter($.iterable)),args=[_list] -for(var i=1;i < arguments.length;i++){args.push(arguments[i])} -_b_.list.sort.apply(null,args) -return _list} -var staticmethod=$B.make_class("staticmethod",function(func){var f={$infos:func.$infos,__get__:function(){return func}} -f.__get__.__class__=$B.method_wrapper -f.__get__.$infos=func.$infos -return f} -) -$B.set_func_names(staticmethod,"builtins") -function sum(iterable,start){var $=$B.args('sum',2,{iterable:null,start:null},['iterable','start'],arguments,{start:0},null,null),iterable=$.iterable,start=$.start -if(_b_.isinstance(start,[_b_.str,_b_.bytes])){throw _b_.TypeError.$factory("TypeError: sum() can't sum bytes"+ -" [use b''.join(seq) instead]")} -var res=start,iterable=iter(iterable) -while(1){try{var _item=next(iterable) -res=$B.$getattr(res,'__add__')(_item)}catch(err){if(err.__class__===_b_.StopIteration){break}else{throw err}}} -return res} -$B.missing_super2=function(obj){obj.$missing=true -return obj} -var $$super=$B.make_class("super",function(_type1,_type2){var missing2=false -if(Array.isArray(_type2)){_type2=_type2[0] -missing2=true} -return{__class__:$$super,__thisclass__:_type1,__self_class__:_type2,$missing2:missing2}} -) -$$super.__getattribute__=function(self,attr){var mro=self.__thisclass__.__mro__,res -var sc=self.__self_class__ -if(sc !==undefined){if(!sc.$is_class){sc=sc.__class__} -var sc_mro=[sc].concat(sc.__mro__) -for(var i=0;i < sc_mro.length;i++){if(sc_mro[i]===self.__thisclass__){mro=sc_mro.slice(i+1) -break}}} -var $test=false -var f -for(var i=0,len=mro.length;i < len;i++){if(mro[i][attr]!==undefined){f=mro[i][attr] -break}} -if(f===undefined){if($test){console.log("no attr",attr,self,"mro",mro)} -throw _b_.AttributeError.$factory(attr)} -if($test){console.log("super",attr,self,"mro",mro,"found in mro[0]",mro[0],f,f+'')} -if(f.$type=="staticmethod" ||attr=="__new__"){return f} -else{if(f.__class__===$B.method){ -f=f.$infos.__func__} -var callable=$B.$call(f) -var method=function(){var res=callable(self.__self_class__,...arguments) -if($test){console.log("calling super",self.__self_class__,attr,f,"res",res)} -return res} -method.__class__=$B.method -var module -if(f.$infos !==undefined){module=f.$infos.__module__}else if(f.__class__===property){module=f.fget.$infos.__module}else if(f.$is_class){module=f.__module__} -method.$infos={__self__:self.__self_class__,__func__:f,__name__:attr,__module__:module,__qualname__:self.__thisclass__.$infos.__name__+"."+attr} -return method} -throw _b_.AttributeError.$factory("object 'super' has no attribute '"+ -attr+"'")} -$$super.__repr__=$$super.__str__=function(self){var res="" -if(self.__self_class__ !==undefined){res+=', <'+self.__self_class__.__class__.$infos.__name__+' object>'}else{res+=', NULL'} -return res+'>'} -$B.set_func_names($$super,"builtins") -function vars(){var def={},$=$B.args('vars',1,{obj:null},['obj'],arguments,{obj:def},null,null) -if($.obj===def){return _b_.locals()}else{try{return $B.$getattr($.obj,'__dict__')} -catch(err){if(err.__class__===_b_.AttributeError){throw _b_.TypeError.$factory("vars() argument must have __dict__ attribute")} -throw err}}} -var $Reader=$B.make_class("Reader") -$Reader.__enter__=function(self){return self} -$Reader.__exit__=function(self){return false} -$Reader.__iter__=function(self){ -return iter($Reader.readlines(self))} -$Reader.__len__=function(self){return self.lines.length} -$Reader.close=function(self){self.closed=true} -$Reader.flush=function(self){return None} -$Reader.read=function(){var $=$B.args("read",2,{self:null,size:null},["self","size"],arguments,{size:-1},null,null),self=$.self,size=$B.$GetInt($.size) -if(self.closed===true){throw _b_.ValueError.$factory('I/O operation on closed file')} -make_content(self) -var len=self.$binary ? self.$bytes.source.length :self.$string.length -if(size < 0){size=len-self.$counter} -if(self.$binary){res=_b_.bytes.$factory(self.$bytes.source.slice(self.$counter,self.$counter+size))}else{res=self.$string.substr(self.$counter,size)} -self.$counter+=size -return res} -$Reader.readable=function(self){return true} -function make_content(self){ -if(self.$binary && self.$bytes===undefined){self.$bytes=_b_.str.encode(self.$string,self.encoding)}else if((! self.$binary)&& self.$string===undefined){self.$string=_b_.bytes.decode(self.$bytes,self.encoding)}} -function make_lines(self){ -if(self.$lines===undefined){make_content(self) -if(! self.$binary){self.$lines=self.$string.split("\n")}else{console.log("make lines, binary") -var lines=[],pos=0,source=self.$bytes.source -while(true){var ix=source.indexOf(10) -if(ix==-1){lines.push({__class__:_b_.bytes,source:source}) -break}else{lines.push({__class__:_b_.bytes,source:source.slice(0,ix+1)}) -source=source.slice(ix+1)}} -self.$lines=lines}}} -$Reader.readline=function(self,size){var $=$B.args("readline",2,{self:null,size:null},["self","size"],arguments,{size:-1},null,null),self=$.self,size=$B.$GetInt($.size) -self.$lc=self.$lc===undefined ?-1 :self.$lc -if(self.closed===true){throw _b_.ValueError.$factory('I/O operation on closed file')} -make_content(self) -if(self.$binary){var ix=self.$bytes.source.indexOf(10,self.$counter) -if(ix==-1){return _b_.bytes.$factory()}else{var res={__class__:_b_.bytes,source :self.$bytes.source.slice(self.$counter,ix+1)} -self.$counter=ix+1 -return res}}else{var ix=self.$string.indexOf("\n",self.$counter) -if(ix==-1){return ''}else{var res=self.$string.substring(self.$counter,ix+1) -self.$counter=ix+1 -self.$lc+=1 -return res}}} -$Reader.readlines=function(){var $=$B.args("readlines",2,{self:null,hint:null},["self","hint"],arguments,{hint:-1},null,null),self=$.self,hint=$B.$GetInt($.hint) -var nb_read=0 -if(self.closed===true){throw _b_.ValueError.$factory('I/O operation on closed file')} -self.$lc=self.$lc===undefined ?-1 :self.$lc -make_lines(self) -if(hint < 0){var lines=self.$lines.slice(self.$lc+1)}else{var lines=[] -while(self.$lc < self.$lines.length && -nb_read < hint){self.$lc++ -lines.push(self.$lines[self.$lc])}} -while(lines[lines.length-1]==''){lines.pop()} -return lines} -$Reader.seek=function(self,offset,whence){if(self.closed===True){throw _b_.ValueError.$factory('I/O operation on closed file')} -if(whence===undefined){whence=0} -if(whence===0){self.$counter=offset} -else if(whence===1){self.$counter+=offset} -else if(whence===2){self.$counter=self.$content.length+offset}} -$Reader.seekable=function(self){return true} -$Reader.tell=function(self){return self.$counter} -$Reader.writable=function(self){return false} -$B.set_func_names($Reader,"builtins") -var $BufferedReader=$B.make_class('_io.BufferedReader') -$BufferedReader.__mro__=[$Reader,_b_.object] -var $TextIOWrapper=$B.make_class('_io.TextIOWrapper',function(){var $=$B.args("TextIOWrapper",6,{buffer:null,encoding:null,errors:null,newline:null,line_buffering:null,write_through:null},["buffer","encoding","errors","newline","line_buffering","write_through"],arguments,{encoding:"utf-8",errors:_b_.None,newline:_b_.None,line_buffering:_b_.False,write_through:_b_.False},null,null) -return{ -__class__:$TextIOWrapper,$bytes:$.buffer.$bytes,encoding:$.encoding,errors:$.errors,newline:$.newline}} -) -$TextIOWrapper.__mro__=[$Reader,_b_.object] -$B.set_func_names($TextIOWrapper,"builtins") -$B.Reader=$Reader -$B.TextIOWrapper=$TextIOWrapper -$B.BufferedReader=$BufferedReader -function $url_open(){ -var $ns=$B.args('open',3,{file:null,mode:null,encoding:null},['file','mode','encoding'],arguments,{mode:'r',encoding:'utf-8'},'args','kw'),$bytes,$string,$res -for(var attr in $ns){eval('var '+attr+'=$ns["'+attr+'"]')} -if(args.length > 0){var mode=args[0]} -if(args.length > 1){var encoding=args[1]} -if(mode.search('w')>-1){throw _b_.IOError.$factory("Browsers cannot write on disk")}else if(['r','rb'].indexOf(mode)==-1){throw _b_.ValueError.$factory("Invalid mode '"+mode+"'")} -if(isinstance(file,_b_.str)){ -var is_binary=mode.search('b')>-1 -if($B.file_cache.hasOwnProperty($ns.file)){$string=$B.file_cache[$ns.file]}else if($B.files && $B.files.hasOwnProperty($ns.file)){ -$res=atob($B.files[$ns.file].content) -var source=[] -for(const char of $res){source.push(char.charCodeAt(0))} -$bytes=_b_.bytes.$factory() -$bytes.source=source}else if($B.protocol !="file"){ -if(is_binary){throw _b_.IOError.$factory( -"open() in binary mode is not supported")} -var req=new XMLHttpRequest(); -req.onreadystatechange=function(){try{var status=this.status -if(status==404){$res=_b_.FileNotFoundError.$factory(file)}else if(status !=200){$res=_b_.IOError.$factory('Could not open file '+ -file+' : status '+status)}else{$res=this.responseText}}catch(err){$res=_b_.IOError.$factory('Could not open file '+ -file+' : error '+err)}} -var fake_qs=$B.$options.cache ? '' : -'?foo='+(new Date().getTime()) -req.open('GET',file+fake_qs,false) -req.overrideMimeType('text/plain; charset=utf-8') -req.send() -if($res.constructor===Error){throw $res} -$string=$res}else{throw _b_.FileNotFoundError.$factory( -"cannot use 'open()' with protocol 'file'")} -if($string===undefined && $bytes===undefined){throw _b_.FileNotFoundError.$factory($ns.file)} -var res={$binary:is_binary,$string:$string,$bytes:$bytes,$counter:0,closed:False,encoding:encoding,mode:mode,name:file} -res.__class__=is_binary ? $BufferedReader :$TextIOWrapper -return res}else{throw _b_.TypeError.$factory("invalid argument for open(): "+ -_b_.str.$factory(file))}} -var zip=$B.make_class("zip",function(){var res={__class__:zip,items:[]} -if(arguments.length==0)return res -var $ns=$B.args('zip',0,{},[],arguments,{},'args','kw') -var _args=$ns['args'] -var args=[] -for(var i=0;i < _args.length;i++){args.push(iter(_args[i]))} -var rank=0,items=[] -while(1){var line=[],flag=true -for(var i=0;i < args.length;i++){try{line.push(next(args[i]))}catch(err){if(err.__class__==_b_.StopIteration){flag=false -break}else{throw err}}} -if(!flag){break} -items[rank++]=_b_.tuple.$factory(line)} -res.items=items -return res} -) -var zip_iterator=$B.make_iterator_class('zip_iterator') -zip.__iter__=function(self){return zip_iterator.$factory(self.items)} -$B.set_func_names(zip,"builtins") -function no_set_attr(klass,attr){if(klass[attr]!==undefined){throw _b_.AttributeError.$factory("'"+klass.$infos.__name__+ -"' object attribute '"+attr+"' is read-only")}else{throw _b_.AttributeError.$factory("'"+klass.$infos.__name__+ -"' object has no attribute '"+attr+"'")}} -var True=true -var False=false -var ellipsis=$B.make_class("ellipsis",function(){return Ellipsis} -) -var Ellipsis={__class__:ellipsis,__bool__:function(){return True},} -for(var $key in $B.$comps){ -switch($B.$comps[$key]){case 'ge': -case 'gt': -case 'le': -case 'lt': -ellipsis['__'+$B.$comps[$key]+'__']=(function(k){return function(other){throw _b_.TypeError.$factory("unorderable types: ellipsis() "+ -k+" "+$B.class_name(other))}})($key)}} -for(var $func in Ellipsis){if(typeof Ellipsis[$func]=='function'){Ellipsis[$func].__str__=(function(f){return function(){return ""}})($func)}} -$B.set_func_names(ellipsis) -var FunctionCode=$B.make_class("function code") -var FunctionGlobals=$B.make_class("function globals") -$B.Function={__class__:_b_.type,__code__:{__class__:FunctionCode,__name__:'function code'},__globals__:{__class__:FunctionGlobals,__name__:'function globals'},__mro__:[_b_.object],$infos:{__name__:'function',__module__:"builtins"},$is_class:true} -$B.Function.__delattr__=function(self,attr){if(attr=="__dict__"){throw _b_.TypeError.$factory("can't deleted function __dict__")}} -$B.Function.__dir__=function(self){var infos=self.$infos ||{},attrs=self.$attrs ||{} -return Object.keys(infos).concat(Object.keys(attrs))} -$B.Function.__eq__=function(self,other){return self===other} -$B.Function.__get__=function(self,obj){if(obj===_b_.None){return self} -var method=function(){return self(obj,...arguments)} -method.__class__=$B.method -if(self.$infos===undefined){console.log("no $infos",self) -console.log($B.last($B.frames_stack))} -method.$infos={__name__:self.$infos.__name__,__qualname__:$B.class_name(obj)+"."+self.$infos.__name__,__self__:obj,__func__:self} -return method} -$B.Function.__getattribute__=function(self,attr){ -if(self.$infos && self.$infos[attr]!==undefined){if(attr=='__code__'){var res={__class__:code} -for(var attr in self.$infos.__code__){res[attr]=self.$infos.__code__[attr]} -res.name=self.$infos.__name__ -res.filename=self.$infos.__code__.co_filename -res.co_code=self+"" -return res}else if(attr=='__annotations__'){ -return $B.obj_dict(self.$infos[attr])}else if(self.$infos.hasOwnProperty(attr)){return self.$infos[attr]}}else if(self.$infos && self.$infos.__dict__ && -self.$infos.__dict__.$string_dict[attr]!==undefined){return self.$infos.__dict__.$string_dict[attr][0]}else if(attr=="__closure__"){var free_vars=self.$infos.__code__.co_freevars -if(free_vars.length==0){return None} -var cells=[] -for(var i=0;i < free_vars.length;i++){try{cells.push($B.cell.$factory($B.$check_def_free(free_vars[i])))}catch(err){ -cells.push($B.cell.$factory(None))}} -return _b_.tuple.$factory(cells)}else if(attr=="__globals__"){return $B.obj_dict($B.imported[self.$infos.__module__])}else if(self.$attrs && self.$attrs[attr]!==undefined){return self.$attrs[attr]}else{return _b_.object.__getattribute__(self,attr)}} -$B.Function.__repr__=$B.Function.__str__=function(self){if(self.$infos===undefined){return ''}else{return ''}} -$B.Function.__mro__=[_b_.object] -$B.Function.__setattr__=function(self,attr,value){if(attr=="__closure__"){throw _b_.AttributeError.$factory("readonly attribute")}else if(attr=="__defaults__"){ -if(value===_b_.None){value=[]}else if(! isinstance(value,_b_.tuple)){throw _b_.TypeError.$factory( -"__defaults__ must be set to a tuple object")} -var set_func=self.$set_defaults -if(set_func===undefined){throw _b_.AttributeError.$factory("cannot set attribute "+attr+ -" of "+_b_.str.$factory(self))} -if(self.$infos && self.$infos.__code__){ -var argcount=self.$infos.__code__.co_argcount,varnames=self.$infos.__code__.co_varnames,params=varnames.slice(0,argcount),$defaults={} -for(var i=value.length-1;i >=0;i--){var pos=params.length-value.length+i -if(pos < 0){break} -$defaults[params[pos]]=value[i]}}else{throw _b_.AttributeError.$factory("cannot set attribute "+attr+ -" of "+_b_.str.$factory(self))} -var klass=self.$infos.$class -var new_func=set_func($defaults) -new_func.$set_defaults=set_func -if(klass){klass[self.$infos.__name__]=new_func -new_func.$infos.$class=klass -new_func.$infos.__defaults__=value}else{ -self.$infos.$defaults=value -self.$infos.__defaults__=value} -return _b_.None} -if(self.$infos[attr]!==undefined){self.$infos[attr]=value} -else{self.$attrs=self.$attrs ||{};self.$attrs[attr]=value}} -$B.Function.$factory=function(){} -$B.set_func_names($B.Function,"builtins") -_b_.__BRYTHON__=__BRYTHON__ -$B.builtin_funcs=["abs","all","any","ascii","bin","breakpoint","callable","chr","compile","delattr","dir","divmod","eval","exec","exit","format","getattr","globals","hasattr","hash","help","hex","id","input","isinstance","issubclass","iter","len","locals","max","min","next","oct","open","ord","pow","print","quit","repr","round","setattr","sorted","sum","vars" -] -var builtin_function=$B.builtin_function=$B.make_class("builtin_function_or_method") -builtin_function.__getattribute__=$B.Function.__getattribute__ -builtin_function.__reduce_ex__=builtin_function.__reduce__=function(self){return self.$infos.__name__} -builtin_function.__repr__=builtin_function.__str__=function(self){return ''} -$B.set_func_names(builtin_function,"builtins") -var method_wrapper=$B.make_class("method_wrapper") -method_wrapper.__repr__=method_wrapper.__str__=function(self){return ""} -$B.set_func_names(method_wrapper,"builtins") -var wrapper_descriptor=$B.wrapper_descriptor= -$B.make_class("wrapper_descriptor") -wrapper_descriptor.__getattribute__=$B.Function.__getattribute__ -wrapper_descriptor.__repr__=wrapper_descriptor.__str__=function(self){return ""} -$B.set_func_names(wrapper_descriptor,"builtins") -$B.builtin_classes=["bool","bytearray","bytes","classmethod","complex","dict","enumerate","filter","float","frozenset","int","list","map","memoryview","object","property","range","reversed","set","slice","staticmethod","str","super","tuple","type","zip" -] -var other_builtins=['Ellipsis','False','None','True','__debug__','__import__','copyright','credits','license','NotImplemented' -] -var builtin_names=$B.builtin_funcs. -concat($B.builtin_classes). -concat(other_builtins) -for(var i=0;i < builtin_names.length;i++){var name=builtin_names[i],orig_name=name,name1=name -if(name=='open'){name1='$url_open'} -if(name=='super'){name=name1='$$super'} -if(name=='eval'){name=name1='$$eval'} -if(name=='print'){name1='$print'} -try{_b_[name]=eval(name1) -if($B.builtin_funcs.indexOf(orig_name)>-1){_b_[name].__class__=builtin_function -_b_[name].$infos={__module__:'builtins',__name__:orig_name,__qualname__:orig_name}}} -catch(err){}} -_b_['open']=$url_open -_b_['print']=$print -_b_['$$super']=$$super -_b_.object.__init__.__class__=wrapper_descriptor -_b_.object.__new__.__class__=builtin_function})(__BRYTHON__) -; -;(function($B){var bltns=$B.InjectBuiltins() -eval(bltns) -$B.del_exc=function(){var frame=$B.last($B.frames_stack) -frame[1].$current_exception=undefined} -$B.set_exc=function(exc){var frame=$B.last($B.frames_stack) -if(frame===undefined){console.log("no frame",exc)} -frame[1].$current_exception=$B.exception(exc)} -$B.get_exc=function(){var frame=$B.last($B.frames_stack) -return frame[1].$current_exception} -$B.$raise=function(arg){ -if(arg===undefined){var es=$B.get_exc() -if(es !==undefined){throw es} -throw _b_.RuntimeError.$factory("No active exception to reraise")}else if(isinstance(arg,BaseException)){if(arg.__class__===_b_.StopIteration && -$B.last($B.frames_stack)[1].$is_generator){ -arg=_b_.RuntimeError.$factory("generator raised StopIteration")} -throw arg}else if(arg.$is_class && issubclass(arg,BaseException)){if(arg===_b_.StopIteration){if($B.last($B.frames_stack)[1].$is_generator){ -throw _b_.RuntimeError.$factory("generator raised StopIteration")}} -throw $B.$call(arg)()}else{throw _b_.TypeError.$factory("exceptions must derive from BaseException")}} -$B.$syntax_err_line=function(exc,module,src,pos,line_num){ -var pos2line={},lnum=1,module=module.charAt(0)=="$" ? "" :module -if(src===undefined){exc.$line_info=line_num+','+module -exc.args=_b_.tuple.$factory([$B.$getitem(exc.args,0),module,line_num,0,0])}else{var line_pos={1:0} -for(var i=0,len=src.length;i < len;i++){pos2line[i]=lnum -if(src.charAt(i)=="\n"){line_pos[++lnum]=i}} -while(line_num===undefined){line_num=pos2line[pos] -pos--} -exc.$line_info=line_num+","+module -var lines=src.split("\n"),line=lines[line_num-1],lpos=pos-line_pos[line_num],len=line.length -exc.text=line -lpos-=len-line.length -if(lpos < 0){lpos=0} -while(line.charAt(0)==' '){line=line.substr(1) -if(lpos > 0){lpos--}} -exc.offset=lpos -exc.args=_b_.tuple.$factory([$B.$getitem(exc.args,0),module,line_num,lpos,line])} -exc.lineno=line_num -exc.msg=exc.args[0] -exc.filename=module} -$B.$SyntaxError=function(module,msg,src,pos,line_num,root){if(root !==undefined && root.line_info !==undefined){ -line_num=root.line_info} -var exc=_b_.SyntaxError.$factory(msg) -$B.$syntax_err_line(exc,module,src,pos,line_num) -throw exc} -$B.$IndentationError=function(module,msg,src,pos,line_num,root){$B.frames_stack.push([module,{$line_info:line_num+","+module},module,{$src:src}]) -if(root !==undefined && root.line_info !==undefined){ -line_num=root.line_info} -var exc=_b_.IndentationError.$factory(msg) -$B.$syntax_err_line(exc,module,src,pos,line_num) -throw exc} -$B.print_stack=function(stack){stack=stack ||$B.frames_stack -var trace=[] -stack.forEach(function(frame){var line_info=frame[1].$line_info -if(line_info !==undefined){var info=line_info.split(",") -if(info[1].startsWith("$exec")){info[1]=""} -trace.push(info[1]+" line "+info[0]) -var src=$B.file_cache[frame[3].__file__] -if(src){var lines=src.split("\n"),line=lines[parseInt(info[0])-1] -trace.push(" "+line.trim())}}}) -console.log("print stack ok",trace) -return trace.join("\n")} -var traceback=$B.traceback=$B.make_class("traceback",function(exc,stack){var frame=$B.last($B.frames_stack) -if(stack===undefined){stack=exc.$stack} -return{ -__class__ :traceback,$stack:stack,exc:exc}} -) -traceback.__getattribute__=function(self,attr){var line_info -if(attr==='tb_frame' || -attr==='tb_lineno' || -attr==='tb_lasti' || -attr==='tb_next'){if(self.$stack.length==0){console.log("no stack",attr)} -var first_frame=self.$stack[0] -line_info=self.exc.$line_infos[self.exc.$line_infos.length- -self.$stack.length]} -switch(attr){case "tb_frame": -return frame.$factory(self.$stack) -case "tb_lineno": -var lineno -if(line_info===undefined || -first_frame[0].startsWith($B.lambda_magic)){if(first_frame[4]&& first_frame[4].$infos && -first_frame[4].$infos.__code__){lineno=first_frame[4].$infos.__code__.co_firstlineno}else{lineno=-1}}else{lineno=parseInt(line_info.split(",")[0])} -return lineno -case "tb_lasti": -if(line_info===undefined){console.log("no line info",self.$stack) -return ""}else{var info=line_info.split(","),src,file -for(var i=self.$stack.length-1;i >=0;i--){var fr=self.$stack[i] -if(fr[2]==info[1].replace(/\./g,'_')){file=fr[3].__file__ -break}} -if(src===undefined){if($B.file_cache.hasOwnProperty(file)){src=$B.file_cache[file]}else if($B.imported[info[1]]&& $B.imported[info[1]].__file__ ){src=$B.file_cache[$B.imported[info[1]].__file__] -console.log("from filecache",line_info,$B.imported[info[1]].__file__)}} -if(src !==undefined){try{return src.split("\n")[parseInt(info[0]-1)].trim()}catch(err){console.log("error in attr tb_lasti of",self) -console.log(src,info) -throw err}}else{console.log(file) -console.log("no src for",info) -return ""}} -case "tb_next": -if(self.$stack.length <=1){return None} -else{return traceback.$factory(self.exc,self.$stack.slice(1))} -default: -return _b_.object.__getattribute__(self,attr)}} -$B.set_func_names(traceback,"builtins") -var frame=$B.make_class("frame",function(stack,pos){var fs=stack -var res={__class__:frame,f_builtins :{}, -$stack:stack.slice()} -if(pos===undefined){pos=0} -res.$pos=pos -if(fs.length){var _frame=fs[pos],locals_id=_frame[0],filename -try{res.f_locals=$B.obj_dict(_frame[1])}catch(err){console.log("err "+err) -throw err} -res.f_globals=$B.obj_dict(_frame[3]) -if(_frame[3].__file__ !==undefined){filename=_frame[3].__file__} -if(locals_id.startsWith("$exec")){filename=""} -if(_frame[1].$line_info===undefined){res.f_lineno=-1}else{var line_info=_frame[1].$line_info.split(",") -res.f_lineno=parseInt(line_info[0]) -var module_name=line_info[1] -if($B.imported.hasOwnProperty(module_name)){filename=$B.imported[module_name].__file__} -res.f_lineno=parseInt(_frame[1].$line_info.split(',')[0])} -var co_name=locals_id.startsWith("$exec")? "" : -locals_id -if(locals_id==_frame[2]){co_name=""}else if(locals_id.startsWith("lc"+$B.lambda_magic)){co_name=""}else{if(_frame[1].$name){co_name=_frame[1].$name}else if(_frame[1].$dict_comp){co_name=''}else if(_frame[1].$list_comp){co_name=''}else if(_frame.length > 4){if(_frame[4].$infos){co_name=_frame[4].$infos.__name__}else{co_name=_frame[4].name} -if(_frame[4].$infos===undefined){ -if(_frame[4].name.startsWith("__ge")){co_name=""}else if(_frame[4].name.startsWith("set_comp"+ -$B.lambda_magic)){co_name=""}else if(_frame[4].name.startsWith("lambda"+ -$B.lambda_magic)){co_name=""}}else if(filename===undefined && _frame[4].$infos.__code__){filename=_frame[4].$infos.__code__.co_filename -if(filename===undefined){filename=_frame[4].$infos.__module__} -res.f_lineno=_frame[4].$infos.__code__.co_firstlineno}}} -res.f_code={__class__:$B.code,co_code:None, -co_name:co_name,co_filename:filename} -if(filename===undefined){res.f_code.co_filename=""}} -return res} -) -frame.__delattr__=function(self,attr){if(attr=="f_trace"){$B.last(self.$stack)[1].$f_trace=_b_.None}} -frame.__getattr__=function(self,attr){ -if(attr=="f_back"){if(self.$pos > 0){return frame.$factory(self.$stack.slice(0,self.$stack.length-1),self.$pos-1)}else{return _b_.None}}else if(attr=="clear"){return function(){}}else if(attr=="f_trace"){var locals=$B.last(self.$stack)[1] -if(locals.$f_trace===undefined){return _b_.None} -return locals.$f_trace}} -frame.__setattr__=function(self,attr,value){if(attr=="f_trace"){ -$B.last(self.$stack)[1].$f_trace=value}} -frame.__str__=frame.__repr__=function(self){return ''} -$B.set_func_names(frame,"builtins") -$B._frame=frame -var BaseException=_b_.BaseException={__class__:_b_.type,__bases__ :[_b_.object],__mro__:[_b_.object],args:[],$infos:{__name__:"BaseException",__module__:"builtins"},$is_class:true} -BaseException.__init__=function(self){var args=arguments[1]===undefined ?[]:[arguments[1]] -self.args=_b_.tuple.$factory(args)} -BaseException.__repr__=function(self){var res=self.__class__.$infos.__name__ -if(self.args[0]){res+='('+repr(self.args[0])} -if(self.args.length > 1){res+=', '+repr($B.fast_tuple(self.args.slice(1)))} -return res+')'} -BaseException.__str__=function(self){if(self.args.length > 0){return _b_.str.$factory(self.args[0])} -return self.__class__.$infos.__name__} -BaseException.__new__=function(cls){var err=_b_.BaseException.$factory() -err.__class__=cls -err.__dict__=$B.empty_dict() -return err} -var getExceptionTrace=function(exc,includeInternal){if(exc.__class__===undefined){if($B.debug > 1){console.log("no class",exc)} -return exc+''} -var info='' -if(exc.$js_exc !==undefined && includeInternal){info+="\nJS stack:\n"+exc.$js_exc.stack+"\n"} -info+="Traceback (most recent call last):" -var line_info=exc.$line_info -for(var i=0;i < exc.$stack.length;i++){var frame=exc.$stack[i] -if(! frame[1]||! frame[1].$line_info){continue} -var $line_info=frame[1].$line_info -var line_info=$line_info.split(','),src -if(exc.module==line_info[1]){src=exc.src} -if(!includeInternal){var src=frame[3].$src -if(src===undefined){if($B.VFS && $B.VFS.hasOwnProperty(frame[2])){src=$B.VFS[frame[2]][1]}else if(src=$B.file_cache[frame[3].__file__]){}else{continue}}} -var file=frame[3].__file__ ||"",module=line_info[1],is_exec=module.charAt(0)=="$" -if(is_exec){module=""} -info+="\n File "+file+" line "+line_info[0] -if(frame.length > 4){if(frame[4].$infos){var name=frame[4].$infos.__name__ -if(name.startsWith("lc"+$B.lambda_magic)){info+=',in '}else{info+=', in '+name}}else if(frame[4].name.startsWith("__ge")){info+=', in '}else if(frame[4].name.startsWith("set_comp"+$B.lambda_magic)){info+=', in '}else if(frame[4].name.startsWith("lc"+$B.lambda_magic)){info+=', in '}else{console.log("frame[4]",frame[4])}}else if(frame[1].$list_comp){info+=', in '}else if(frame[1].$dict_comp){info+=', in '}else{info+=', in '} -if(src !==undefined && ! is_exec){var lines=src.split("\n"),line=lines[parseInt(line_info[0])-1] -if(line){line=line.replace(/^[ ]+/g,"")} -info+="\n "+line}} -if(exc.__class__===_b_.SyntaxError){info+="\n File "+exc.args[1]+", line "+exc.args[2]+ -"\n "+exc.args[4]} -return info} -BaseException.__getattr__=function(self,attr){if(attr=="info"){return getExceptionTrace(self,false);}else if(attr=="infoWithInternal"){return getExceptionTrace(self,true);}else if(attr=="__traceback__"){ -if(self.$traceback !==undefined){return self.$traceback} -return traceback.$factory(self)}else{throw _b_.AttributeError.$factory(self.__class__.$infos.__name__+ -" has no attribute '"+attr+"'")}} -BaseException.with_traceback=function(self,tb){self.$traceback=tb -return self} -$B.deep_copy=function(stack){var res=[] -for(const s of stack){var item=[s[0],{},s[2],{}] -if(s[4]!==undefined){item.push(s[4])} -for(const i of[1,3]){for(var key in s[i]){item[i][key]=s[i][key]}} -res.push(item)} -return res} -$B.save_stack=function(){return $B.deep_copy($B.frames_stack)} -$B.restore_stack=function(stack,locals){$B.frames_stack=stack -$B.frames_stack[$B.frames_stack.length-1][1]=locals} -$B.freeze=function(err){ -if(err.$stack===undefined){err.$line_infos=[] -for(var i=0,len=$B.frames_stack.length;i < len;i++){err.$line_infos.push($B.frames_stack[i][1].$line_info)} -err.$stack=$B.frames_stack.slice() -if($B.frames_stack.length){err.$line_info=$B.last($B.frames_stack)[1].$line_info}}} -var show_stack=$B.show_stack=function(stack){stack=stack ||$B.frames_stack -for(const frame of stack){console.log(frame[0],frame[1].$line_info)}} -BaseException.$factory=function(){var err=Error() -err.args=$B.fast_tuple(Array.prototype.slice.call(arguments)) -err.__class__=_b_.BaseException -err.$py_error=true -$B.freeze(err) -eval("//placeholder//") -err.__cause__=_b_.None -err.__context__=_b_.None -err.__suppress_context__=false -return err} -BaseException.$factory.$infos={__name__:"BaseException",__qualname__:"BaseException"} -$B.set_func_names(BaseException) -_b_.BaseException=BaseException -$B.exception=function(js_exc,in_ctx_manager){ -if(! js_exc.__class__){console.log("Javascript exception:",js_exc) -console.log($B.last($B.frames_stack)) -console.log("recursion error ?",$B.is_recursion_error(js_exc)) -var exc=Error() -exc.__name__="Internal Javascript error: "+ -(js_exc.__name__ ||js_exc.name) -exc.__class__=_b_.Exception -exc.$js_exc=js_exc -if($B.is_recursion_error(js_exc)){return _b_.RecursionError.$factory("too much recursion")}else if(js_exc.name=="ReferenceError"){exc.__name__="NameError" -exc.__class__=_b_.NameError -js_exc.message=js_exc.message.replace("$$","")}else if(js_exc.name=="InternalError"){exc.__name__="RuntimeError" -exc.__class__=_b_.RuntimeError} -exc.__cause__=_b_.None -exc.__context__=_b_.None -exc.__suppress_context__=false -var $message=": "+ -(js_exc.message ||"<"+js_exc+">") -exc.args=_b_.tuple.$factory([$message]) -exc.$py_error=true -$B.freeze(exc)}else{var exc=js_exc -$B.freeze(exc) -if(in_ctx_manager){ -var current_locals=$B.last($B.frames_stack)[0] -for(var i=0,len=exc.$stack.length;i < len;i++){if(exc.$stack[i][0]==current_locals){exc.$stack=exc.$stack.slice(i) -exc.$traceback=traceback.$factory(exc) -break}}}} -return exc} -$B.is_exc=function(exc,exc_list){ -if(exc.__class__===undefined){exc=$B.exception(exc)} -var this_exc_class=exc.$is_class ? exc :exc.__class__ -for(var i=0;i < exc_list.length;i++){var exc_class=exc_list[i] -if(this_exc_class===undefined){console.log("exc class undefined",exc)} -if(issubclass(this_exc_class,exc_class)){return true}} -return false} -$B.is_recursion_error=function(js_exc){ -console.log("test is js exc is recursion error",js_exc,js_exc+"") -var msg=js_exc+"",parts=msg.split(":"),err_type=parts[0].trim(),err_msg=parts[1].trim() -return(err_type=='InternalError' && err_msg=='too much recursion')|| -(err_type=='Error' && err_msg=='Out of stack space')|| -(err_type=='RangeError' && err_msg=='Maximum call stack size exceeded')} -function $make_exc(names,parent){ -var _str=[],pos=0 -for(var i=0;i < names.length;i++){var name=names[i],code="" -if(Array.isArray(name)){ -var code=name[1],name=name[0]} -$B.builtins_scope[name]=true -var $exc=(BaseException.$factory+"").replace(/BaseException/g,name) -$exc=$exc.replace("//placeholder//",code) -_str[pos++]="_b_."+name+' = {__class__:_b_.type, '+ -'__mro__: [_b_.'+parent.$infos.__name__+ -"].concat(parent.__mro__), $is_class: true,"+ -"$infos: {__name__:'"+name+"'}}" -_str[pos++]="_b_."+name+".$factory = "+$exc -_str[pos++]="_b_."+name+'.$factory.$infos = {__name__: "'+ -name+'", __qualname__: "'+name+'"}' -_str[pos++]="$B.set_func_names(_b_."+name+", 'builtins')"} -try{eval(_str.join(";"))}catch(err){console.log("--err"+err) -throw err}} -$make_exc(["SystemExit","KeyboardInterrupt","GeneratorExit","Exception"],BaseException) -$make_exc([["StopIteration","err.value = arguments[0]"],["StopAsyncIteration","err.value = arguments[0]"],"ArithmeticError","AssertionError","AttributeError","BufferError","EOFError",["ImportError","err.name = arguments[0]"],"LookupError","MemoryError","NameError","OSError","ReferenceError","RuntimeError",["SyntaxError","err.msg = arguments[0]"],"SystemError","TypeError","ValueError","Warning"],_b_.Exception) -$make_exc(["FloatingPointError","OverflowError","ZeroDivisionError"],_b_.ArithmeticError) -$make_exc([["ModuleNotFoundError","err.name = arguments[0]"]],_b_.ImportError) -$make_exc(["IndexError","KeyError"],_b_.LookupError) -$make_exc(["UnboundLocalError"],_b_.NameError) -$make_exc(["BlockingIOError","ChildProcessError","ConnectionError","FileExistsError","FileNotFoundError","InterruptedError","IsADirectoryError","NotADirectoryError","PermissionError","ProcessLookupError","TimeoutError"],_b_.OSError) -$make_exc(["BrokenPipeError","ConnectionAbortedError","ConnectionRefusedError","ConnectionResetError"],_b_.ConnectionError) -$make_exc(["NotImplementedError","RecursionError"],_b_.RuntimeError) -$make_exc(["IndentationError"],_b_.SyntaxError) -$make_exc(["TabError"],_b_.IndentationError) -$make_exc(["UnicodeError"],_b_.ValueError) -$make_exc(["UnicodeDecodeError","UnicodeEncodeError","UnicodeTranslateError"],_b_.UnicodeError) -$make_exc(["DeprecationWarning","PendingDeprecationWarning","RuntimeWarning","SyntaxWarning","UserWarning","FutureWarning","ImportWarning","UnicodeWarning","BytesWarning","ResourceWarning"],_b_.Warning) -$make_exc(["EnvironmentError","IOError","VMSError","WindowsError"],_b_.OSError) -$B.$TypeError=function(msg){throw _b_.TypeError.$factory(msg)} -var se=_b_.SyntaxError.$factory -_b_.SyntaxError.$factory=function(){var arg=arguments[0] -if(arg.__class__===_b_.SyntaxError){return arg} -var exc=se.apply(null,arguments),frame=$B.last($B.frames_stack) -if(frame){line_info=frame[1].$line_info -exc.filename=frame[3].__file__ -exc.lineno=parseInt(line_info.split(",")[0]) -var src=$B.file_cache[frame[3].__file__] -if(src){lines=src.split("\n") -exc.text=lines[exc.lineno-1]} -exc.offset=arg.offset} -return exc} -_b_.SyntaxError})(__BRYTHON__) -; - -;(function($B){var _b_=$B.builtins,None=_b_.None,range={__class__:_b_.type,__mro__:[_b_.object],$infos:{__module__:"builtins",__name__:"range"},$is_class:true,$native:true,$descriptors:{start:true,step:true,stop:true}} -range.__contains__=function(self,other){if(range.__len__(self)==0){return false} -try{other=$B.int_or_bool(other)} -catch(err){ -try{range.index(self,other);return true} -catch(err){return false}} -var sub=$B.sub(other,self.start),fl=$B.floordiv(sub,self.step),res=$B.mul(self.step,fl) -if($B.eq(res,sub)){if($B.gt(self.stop,self.start)){return $B.ge(other,self.start)&& $B.gt(self.stop,other)}else{return $B.ge(self.start,other)&& $B.gt(other,self.stop)}}else{return false}} -range.__delattr__=function(self,attr,value){throw _b_.AttributeError.$factory("readonly attribute")} -range.__eq__=function(self,other){if(_b_.isinstance(other,range)){var len=range.__len__(self) -if(! $B.eq(len,range.__len__(other))){return false} -if(len==0){return true} -if(! $B.eq(self.start,other.start)){return false} -if(len==1){return true} -return $B.eq(self.step,other.step)} -return false} -function compute_item(r,i){var len=range.__len__(r) -if(len==0){return r.start} -else if(i > len){return r.stop} -return $B.add(r.start,$B.mul(r.step,i))} -range.__getitem__=function(self,rank){if(_b_.isinstance(rank,_b_.slice)){var norm=_b_.slice.$conv_for_seq(rank,range.__len__(self)),substep=$B.mul(self.step,norm.step),substart=compute_item(self,norm.start),substop=compute_item(self,norm.stop) -return range.$factory(substart,substop,substep)} -if(typeof rank !="number"){rank=$B.$GetInt(rank)} -if($B.gt(0,rank)){rank=$B.add(rank,range.__len__(self))} -var res=$B.add(self.start,$B.mul(rank,self.step)) -if(($B.gt(self.step,0)&& -($B.ge(res,self.stop)||$B.gt(self.start,res)))|| -($B.gt(0,self.step)&& -($B.ge(self.stop,res)||$B.gt(res,self.start)))){throw _b_.IndexError.$factory("range object index out of range")} -return res} -range.__hash__=function(self){var len=range.__len__(self) -if(len==0){return _b_.hash(_b_.tuple.$factory([0,None,None]))} -if(len==1){return _b_.hash(_b_.tuple.$factory([1,self.start,None]))} -return _b_.hash(_b_.tuple.$factory([len,self.start,self.step]))} -var RangeIterator={__class__:_b_.type,__mro__:[_b_.object],__iter__:function(self){return self},__next__:function(self){return _b_.next(self.obj)},$infos:{__name__:"range_iterator",__module__:"builtins"},$is_class:true} -RangeIterator.$factory=function(obj){return{__class__:RangeIterator,obj:obj}} -$B.set_func_names(RangeIterator,"builtins") -range.__iter__=function(self){var res={__class__ :range,start:self.start,stop:self.stop,step:self.step} -if(self.$safe){res.$counter=self.start-self.step}else{res.$counter=$B.sub(self.start,self.step)} -return RangeIterator.$factory(res)} -range.__len__=function(self){var len -if($B.gt(self.step,0)){if($B.ge(self.start,self.stop)){return 0} -var n=$B.sub(self.stop,$B.add(1,self.start)),q=$B.floordiv(n,self.step) -len=$B.add(1,q)}else{if($B.ge(self.stop,self.start)){return 0} -var n=$B.sub(self.start,$B.add(1,self.stop)),q=$B.floordiv(n,$B.mul(-1,self.step)) -len=$B.add(1,q)} -if($B.maxsize===undefined){$B.maxsize=$B.long_int.__pow__($B.long_int.$factory(2),63) -$B.maxsize=$B.long_int.__sub__($B.maxsize,1)} -return len} -range.__next__=function(self){if(self.$safe){self.$counter+=self.step -if((self.step > 0 && self.$counter >=self.stop) -||(self.step < 0 && self.$counter <=self.stop)){throw _b_.StopIteration.$factory("")}}else{self.$counter=$B.add(self.$counter,self.step) -if(($B.gt(self.step,0)&& $B.ge(self.$counter,self.stop)) -||($B.gt(0,self.step)&& $B.ge(self.stop,self.$counter))){throw _b_.StopIteration.$factory("")}} -return self.$counter} -range.__reversed__=function(self){var n=$B.sub(range.__len__(self),1) -return range.$factory($B.add(self.start,$B.mul(n,self.step)),$B.sub(self.start,self.step),$B.mul(-1,self.step))} -range.__repr__=range.__str__=function(self){var res="range("+_b_.str.$factory(self.start)+", "+ -_b_.str.$factory(self.stop) -if(self.step !=1){res+=", "+_b_.str.$factory(self.step)} -return res+")"} -range.__setattr__=function(self,attr,value){throw _b_.AttributeError.$factory("readonly attribute")} -range.start=function(self){return self.start} -range.step=function(self){return self.step},range.stop=function(self){return self.stop} -range.count=function(self,ob){if(_b_.isinstance(ob,[_b_.int,_b_.float,_b_.bool])){return _b_.int.$factory(range.__contains__(self,ob))}else{var comp=function(other){return $B.rich_comp("__eq__",ob,other)},it=range.__iter__(self),_next=RangeIterator.__next__,nb=0 -while(true){try{if(comp(_next(it))){nb++}}catch(err){if(_b_.isinstance(err,_b_.StopIteration)){return nb} -throw err}}}} -range.index=function(self,other){var $=$B.args("index",2,{self:null,other:null},["self","other"],arguments,{},null,null),self=$.self,other=$.other -try{other=$B.int_or_bool(other)}catch(err){var comp=function(x){return $B.rich_comp("__eq__",other,x)},it=range.__iter__(self),_next=RangeIterator.__next__,nb=0 -while(true){try{if(comp(_next(it))){return nb} -nb++}catch(err){if(_b_.isinstance(err,_b_.StopIteration)){throw _b_.ValueError.$factory(_b_.str.$factory(other)+ -" not in range")} -throw err}}} -var sub=$B.sub(other,self.start),fl=$B.floordiv(sub,self.step),res=$B.mul(self.step,fl) -if($B.eq(res,sub)){if(($B.gt(self.stop,self.start)&& $B.ge(other,self.start) -&& $B.gt(self.stop,other))|| -($B.ge(self.start,self.stop)&& $B.ge(self.start,other) -&& $B.gt(other,self.stop))){return fl}else{throw _b_.ValueError.$factory(_b_.str.$factory(other)+ -' not in range')}}else{throw _b_.ValueError.$factory(_b_.str.$factory(other)+ -" not in range")}} -range.$factory=function(){var $=$B.args("range",3,{start:null,stop:null,step:null},["start","stop","step"],arguments,{start:null,stop:null,step:null},null,null),start=$.start,stop=$.stop,step=$.step,safe -if(stop===null && step===null){if(start==null){throw _b_.TypeError.$factory("range expected 1 arguments, got 0")} -stop=$B.PyNumber_Index(start) -safe=typeof stop==="number" -return{__class__:range,start:0,stop:stop,step:1,$is_range:true,$safe:safe}} -if(step===null){step=1} -start=$B.PyNumber_Index(start) -stop=$B.PyNumber_Index(stop) -step=$B.PyNumber_Index(step) -if(step==0){throw _b_.ValueError.$factory("range arg 3 must not be zero")} -safe=(typeof start=="number" && typeof stop=="number" && -typeof step=="number") -return{__class__:range,start:start,stop:stop,step:step,$is_range:true,$safe:safe}} -$B.set_func_names(range,"builtins") -var slice={__class__:_b_.type,__mro__:[_b_.object],$infos:{__module__:"builtins",__name__:"slice"},$is_class:true,$native:true,$descriptors:{start:true,step:true,stop:true}} -slice.__eq__=function(self,other){var conv1=conv_slice(self),conv2=conv_slice(other) -return conv1[0]==conv2[0]&& -conv1[1]==conv2[1]&& -conv1[2]==conv2[2]} -slice.__repr__=slice.__str__=function(self){return "slice("+_b_.str.$factory(self.start)+", "+ -_b_.str.$factory(self.stop)+", "+_b_.str.$factory(self.step)+")"} -slice.__setattr__=function(self,attr,value){throw _b_.AttributeError.$factory("readonly attribute")} -function conv_slice(self){ -var attrs=["start","stop","step"],res=[] -for(var i=0;i < attrs.length;i++){var val=self[attrs[i]] -if(val===_b_.None){res.push(val)}else{try{res.push($B.PyNumber_Index(val))}catch(err){throw _b_.TypeError.$factory("slice indices must be "+ -"integers or None or have an __index__ method")}}} -return res} -slice.$conv_for_seq=function(self,len){ -var step=self.step===None ? 1 :$B.PyNumber_Index(self.step),step_is_neg=$B.gt(0,step),len_1=$B.sub(len,1) -if(step==0){throw _b_.ValueError.$factory('slice step cannot be zero')} -var start -if(self.start===None){start=step_is_neg ? len_1 :0}else{start=$B.PyNumber_Index(self.start) -if($B.gt(0,start)){start=$B.add(start,len) -if($B.gt(0,start)){start=0}} -if($B.ge(start,len)){start=step < 0 ? len_1 :len}} -if(self.stop===None){stop=step_is_neg ?-1 :len}else{stop=$B.PyNumber_Index(self.stop) -if($B.gt(0,stop)){stop=$B.add(stop,len)} -if($B.ge(stop,len)){stop=step_is_neg ? len_1 :len}} -return{start:start,stop:stop,step:step}} -slice.start=function(self){return self.start} -slice.step=function(self){return self.step} -slice.stop=function(self){return self.stop} -slice.indices=function(self,length){ -var $=$B.args("indices",2,{self:null,length:null},["self","length"],arguments,{},null,null) -var len=$B.$GetInt($.length) -if(len < 0){_b_.ValueError.$factory("length should not be negative")} -var _step=(self.step==_b_.None)? 1 :self.step -if(_step < 0){var _start=self.start,_stop=self.stop -_start=(_start==_b_.None)? len-1 : -(_start < 0)? _b_.max(-1,_start+len):_b_.min(len-1,self.start) -_stop=(self.stop==_b_.None)?-1 : -(_stop < 0)? _b_.max(-1,_stop+len):_b_.min(len-1,self.stop)}else{var _start=(self.start==_b_.None)? 0 :_b_.min(len,self.start) -var _stop=(self.stop==_b_.None)? len :_b_.min(len,self.stop) -if(_start < 0){_start=_b_.max(0,_start+len)} -if(_stop < 0){_stop=_b_.max(0,_stop+len)}} -return _b_.tuple.$factory([_start,_stop,_step])} -slice.$factory=function(){var $=$B.args("slice",3,{start:null,stop:null,step:null},["start","stop","step"],arguments,{stop:null,step:null},null,null),start,stop,step -if($.stop===null && $.step===null){start=_b_.None -stop=$.start -step=_b_.None}else{start=$.start -stop=$.stop -step=$.step===null ? _b_.None :$.step} -var res={__class__ :slice,start:start,stop:stop,step:step} -conv_slice(res) -return res} -$B.set_func_names(slice,"builtins") -_b_.range=range -_b_.slice=slice})(__BRYTHON__) -; -;(function($B){var _b_=$B.builtins -var from_unicode={},to_unicode={} -$B.to_bytes=function(obj){var res -if(_b_.isinstance(obj,[bytes,bytearray])){res=obj.source}else{var ga=$B.$getattr(obj,"tobytes",null) -if(ga !==null){res=$B.$call(ga)().source} -else{throw _b_.TypeError.$factory("object doesn't support the buffer protocol")}} -return res} -function _strip(self,cars,lr){if(cars===undefined){cars=[] -var ws='\r\n \t' -for(var i=0,len=ws.length;i < len;i++){cars.push(ws.charCodeAt(i))}}else if(_b_.isinstance(cars,bytes)){cars=cars.source}else{throw _b_.TypeError.$factory("Type str doesn't support the buffer API")} -if(lr=='l'){for(var i=0,len=self.source.length;i < len;i++){if(cars.indexOf(self.source[i])==-1){break}} -return bytes.$factory(self.source.slice(i))} -for(var i=self.source.length-1;i >=0;i--){if(cars.indexOf(self.source[i])==-1){break}} -return bytes.$factory(self.source.slice(0,i+1))} -function invalid(other){return ! _b_.isinstance(other,[bytes,bytearray])} -var bytearray={__class__:_b_.type,__mro__:[_b_.object],$buffer_protocol:true,$infos:{__module__:"builtins",__name__:"bytearray"},$is_class:true} -var mutable_methods=["__delitem__","clear","copy","count","index","pop","remove","reverse","sort"] -mutable_methods.forEach(function(method){bytearray[method]=(function(m){return function(self){var args=[self.source],pos=1 -for(var i=1,len=arguments.length;i < len;i++){args[pos++]=arguments[i]} -return _b_.list[m].apply(null,args)}})(method)}) -var bytearray_iterator=$B.make_iterator_class('bytearray_iterator') -bytearray.__iter__=function(self){return bytearray_iterator.$factory(self.source)} -bytearray.__mro__=[_b_.object] -bytearray.__repr__=bytearray.__str__=function(self){return 'bytearray('+bytes.__repr__(self)+")"} -bytearray.__setitem__=function(self,arg,value){if(_b_.isinstance(arg,_b_.int)){if(! _b_.isinstance(value,_b_.int)){throw _b_.TypeError.$factory('an integer is required')}else if(value > 255){throw _b_.ValueError.$factory("byte must be in range(0, 256)")} -var pos=arg -if(arg < 0){pos=self.source.length+pos} -if(pos >=0 && pos < self.source.length){self.source[pos]=value} -else{throw _b_.IndexError.$factory('list index out of range')}}else if(_b_.isinstance(arg,_b_.slice)){var start=arg.start===_b_.None ? 0 :arg.start -var stop=arg.stop===_b_.None ? self.source.length :arg.stop -if(start < 0){start=self.source.length+start} -if(stop < 0){stop=self.source.length+stop} -self.source.splice(start,stop-start) -try{var $temp=_b_.list.$factory(value) -for(var i=$temp.length-1;i >=0;i--){if(! _b_.isinstance($temp[i],_b_.int)){throw _b_.TypeError.$factory('an integer is required')}else if($temp[i]> 255){throw ValueError.$factory("byte must be in range(0, 256)")} -self.source.splice(start,0,$temp[i])}}catch(err){throw _b_.TypeError.$factory("can only assign an iterable")}}else{throw _b_.TypeError.$factory('list indices must be integer, not '+ -$B.class_name(arg))}} -bytearray.append=function(self,b){if(arguments.length !=2){throw _b_.TypeError.$factory( -"append takes exactly one argument ("+(arguments.length-1)+ -" given)")} -if(! _b_.isinstance(b,_b_.int)){throw _b_.TypeError.$factory("an integer is required")} -if(b > 255){throw ValueError.$factory("byte must be in range(0, 256)")} -self.source[self.source.length]=b} -bytearray.extend=function(self,b){if(b.__class__===bytearray ||b.__class__===bytes){b.source.forEach(function(item){self.source.push(item)}) -return _b_.None} -var it=_b_.iter(b) -while(true){try{bytearray.__add__(self,_b_.next(it))}catch(err){if(err===_b_.StopIteration){break} -throw err}} -return _b_.None} -bytearray.insert=function(self,pos,b){if(arguments.length !=3){throw _b_.TypeError.$factory( -"insert takes exactly 2 arguments ("+(arguments.length-1)+ -" given)")} -if(! _b_.isinstance(b,_b_.int)){throw _b_.TypeError.$factory("an integer is required")} -if(b > 255){throw ValueError.$factory("byte must be in range(0, 256)")} -_b_.list.insert(self.source,pos,b)} -bytearray.$factory=function(){var args=[bytearray] -for(var i=0,len=arguments.length;i < len;i++){args.push(arguments[i])} -return bytearray.__new__.apply(null,args)} -var bytes={__class__ :_b_.type,__mro__:[_b_.object],$buffer_protocol:true,$infos:{__module__:"builtins",__name__:"bytes"},$is_class:true} -bytes.__add__=function(self,other){if(_b_.isinstance(other,bytes)){return self.__class__.$factory(self.source.concat(other.source))}else if(_b_.isinstance(other,bytearray)){return self.__class__.$factory(bytes.__add__(self,bytes.$factory(other)))}else if(_b_.isinstance(other,_b_.memoryview)){return self.__class__.$factory(bytes.__add__(self,_b_.memoryview.tobytes(other)))} -throw _b_.TypeError.$factory("can't concat bytes to "+ -_b_.str.$factory(other))} -bytes.__contains__=function(self,other){if(typeof other=="number"){return self.source.indexOf(other)>-1} -if(self.source.length < other.source.length){return false} -var len=other.source.length -for(var i=0;i < self.source.length-other.source.length+1;i++){var flag=true -for(var j=0;j < len;j++){if(other.source[i+j]!=self.source[j]){flag=false -break}} -if(flag){return true}} -return false} -var bytes_iterator=$B.make_iterator_class("bytes_iterator") -bytes.__iter__=function(self){return bytes_iterator.$factory(self.source)} -bytes.__eq__=function(self,other){if(invalid(other)){return false} -return $B.$getattr(self.source,'__eq__')(other.source)} -bytes.__ge__=function(self,other){if(invalid(other)){return _b_.NotImplemented} -return _b_.list.__ge__(self.source,other.source)} -bytes.__getitem__=function(self,arg){var i -if(_b_.isinstance(arg,_b_.int)){var pos=arg -if(arg < 0){pos=self.source.length+pos} -if(pos >=0 && pos < self.source.length){return self.source[pos]} -throw _b_.IndexError.$factory("index out of range")}else if(_b_.isinstance(arg,_b_.slice)){var s=_b_.slice.$conv_for_seq(arg,self.source.length),start=s.start,stop=s.stop,step=s.step -var res=[],i=null,pos=0 -if(step > 0){stop=Math.min(stop,self.source.length) -if(stop <=start){return bytes.$factory([])} -for(var i=start;i < stop;i+=step){res[pos++]=self.source[i]}}else{if(stop >=start){return bytes.$factory([])} -stop=Math.max(0,stop) -for(var i=start;i >=stop;i+=step){res[pos++]=self.source[i]}} -return bytes.$factory(res)}else if(_b_.isinstance(arg,_b_.bool)){return self.source.__getitem__(_b_.int.$factory(arg))}} -bytes.__gt__=function(self,other){if(invalid(other)){return _b_.NotImplemented} -return _b_.list.__gt__(self.source,other.source)} -bytes.__hash__=function(self){if(self===undefined){return bytes.__hashvalue__ ||$B.$py_next_hash--} -var hash=1 -for(var i=0,len=self.source.length;i < len;i++){hash=(101*hash+self.source[i])& 0xFFFFFFFF} -return hash} -bytes.__init__=function(){return _b_.None} -bytes.__le__=function(self,other){if(invalid(other)){return _b_.NotImplemented} -return _b_.list.__le__(self.source,other.source)} -bytes.__len__=function(self){return self.source.length} -bytes.__lt__=function(self,other){if(invalid(other)){return _b_.NotImplemented} -return _b_.list.__lt__(self.source,other.source)} -bytes.__mod__=function(self,args){ -var s=decode(self,"ascii","strict"),res=_b_.str.__mod__(s,args) -return _b_.str.encode(res,"ascii")} -bytes.__mul__=function(){var $=$B.args('__mul__',2,{self:null,other:null},['self','other'],arguments,{},null,null),other=$B.PyNumber_Index($.other) -var t=[],source=$.self.source,slen=source.length -for(var i=0;i < other;i++){for(var j=0;j < slen;j++){t.push(source[j])}} -var res=bytes.$factory() -res.source=t -return res} -bytes.__ne__=function(self,other){return ! bytes.__eq__(self,other)} -bytes.__new__=function(cls,source,encoding,errors){var $=$B.args("__new__",4,{cls:null,source:null,encoding:null,errors:null},["cls","source","encoding","errors"],arguments,{source:[],encoding:"utf-8",errors:"strict"},null,null) -return bytes.$new($.cls,$.source,$.encoding,$.errors)} -bytes.$new=function(cls,source,encoding,errors){ -var self={__class__:cls},int_list=[],pos=0 -if(source===undefined){}else if(typeof source=="number" ||_b_.isinstance(source,_b_.int)){var i=source -while(i--){int_list[pos++]=0}}else{if(typeof source=="string" ||_b_.isinstance(source,_b_.str)){if(encoding===undefined){throw _b_.TypeError.$factory("string argument without an encoding")} -int_list=encode(source,encoding ||"utf-8",errors ||"strict")}else{ -int_list=_b_.list.$factory(source) -for(var i=0;i < int_list.length;i++){try{var item=_b_.int.$factory(int_list[i])}catch(err){throw _b_.TypeError.$factory("'"+ -$B.class_name(int_list[i])+"' object "+ -"cannot be interpreted as an integer")} -if(item < 0 ||item > 255){throw _b_.ValueError.$factory("bytes must be in range"+ -"(0, 256)")}}}} -self.source=int_list -self.encoding=encoding -self.errors=errors -return self} -bytes.__repr__=bytes.__str__=function(self){var res="" -for(var i=0,len=self.source.length;i < len;i++){var s=self.source[i] -if(s==10){res+='\\n'}else if(s < 32 ||s >=128){var hx=s.toString(16) -hx=(hx.length==1 ? '0' :'')+hx -res+='\\x'+hx}else if(s=="\\".charCodeAt(0)){res+="\\\\"}else{res+=String.fromCharCode(s)}} -if(res.indexOf("'")>-1 && res.indexOf('"')==-1){return 'b"'+res+'"'}else{return "b'"+res.replace(new RegExp("'","g"),"\\'")+"'"}} -bytes.__reduce_ex__=function(self){return bytes.__repr__(self)} -bytes.capitalize=function(self){var src=self.source,len=src.length,buffer=src.slice() -if(buffer[0]> 96 && buffer[0]< 123){buffer[0]-=32} -for(var i=1;i < len;++i){if(buffer[i]> 64 && buffer[i]< 91){buffer[i]+=32}} -return bytes.$factory(buffer)} -bytes.center=function(){var $=$B.args('center',3,{self:null,width:null,fillbyte:null},['self','width','fillbyte'],arguments,{fillbyte:bytes.$factory([32])},null,null) -var diff=$.width-$.self.source.length -if(diff <=0){return bytes.$factory($.self.source)} -var ljust=bytes.ljust($.self,$.self.source.length+Math.floor(diff/2),$.fillbyte) -return bytes.rjust(ljust,$.width,$.fillbyte)} -bytes.count=function(){var $=$B.args('count',4,{self:null,sub:null,start:null,end:null},['self','sub','start','end'],arguments,{start:0,end:-1},null,null) -var n=0,index=-1,len=0 -if(typeof $.sub=="number"){if($.sub < 0 ||$.sub > 255) -throw _b_.ValueError.$factory("byte must be in range(0, 256)") -len=1}else if(!$.sub.__class__){throw _b_.TypeError.$factory("first argument must be a bytes-like "+ -"object, not '"+$B.class_name($.sub)+"'")}else if(!$.sub.__class__.$buffer_protocol){throw _b_.TypeError.$factory("first argument must be a bytes-like "+ -"object, not '"+$B.class_name($.sub)+"'")}else{len=$.sub.source.length} -do{index=bytes.find($.self,$.sub,Math.max(index+len,$.start),$.end) -if(index !=-1){n++}}while(index !=-1) -return n} -bytes.decode=function(self,encoding,errors){var $=$B.args("decode",3,{self:null,encoding:null,errors:null},["self","encoding","errors"],arguments,{encoding:"utf-8",errors:"strict"},null,null) -switch($.errors){case 'strict': -case 'ignore': -case 'replace': -case 'surrogateescape': -case 'surrogatepass': -case 'xmlcharrefreplace': -case 'backslashreplace': -return decode($.self,$.encoding,$.errors) -default:}} -bytes.endswith=function(){var $=$B.args('endswith',4,{self:null,suffix:null,start:null,end:null},['self','suffix','start','end'],arguments,{start:-1,end:-1},null,null) -if(_b_.isinstance($.suffix,bytes)){var start=$.start==-1 ? -$.self.source.length-$.suffix.source.length : -Math.min($.self.source.length-$.suffix.source.length,$.start) -var end=$.end==-1 ? -($.start==-1 ? $.self.source.length :start+$.suffix.source.length): -Math.min($.self.source.length-1,$.end) -var res=true -for(var i=$.suffix.source.length-1,len=$.suffix.source.length; -i >=0 && res;--i){res=$.self.source[end-len+i]==$.suffix.source[i]} -return res}else if(_b_.isinstance($.suffix,_b_.tuple)){for(var i=0;i < $.suffix.length;++i){if(_b_.isinstance($.suffix[i],bytes)){if(bytes.endswith($.self,$.suffix[i],$.start,$.end)){return true}}else{throw _b_.TypeError.$factory("endswith first arg must be "+ -"bytes or a tuple of bytes, not "+ -$B.class_name($.suffix))}} -return false}else{throw _b_.TypeError.$factory("endswith first arg must be bytes "+ -"or a tuple of bytes, not "+$B.class_name($.suffix))}} -bytes.expandtabs=function(){var $=$B.args('expandtabs',2,{self:null,tabsize:null},['self','tabsize'],arguments,{tabsize:8},null,null) -var tab_spaces=[] -for(let i=0;i < $.tabsize;++i){tab_spaces.push(32)} -var buffer=$.self.source.slice() -for(let i=0;i < buffer.length;++i){if(buffer[i]===9){buffer.splice.apply(buffer,[i,1].concat(tab_spaces))}} -return _b_.bytes.$factory(buffer)} -bytes.find=function(self,sub){if(arguments.length !=2){var $=$B.args('find',4,{self:null,sub:null,start:null,end:null},['self','sub','start','end'],arguments,{start:0,end:-1},null,null),sub=$.sub,start=$.start,end=$.end}else{var start=0,end=-1} -if(typeof sub=="number"){if(sub < 0 ||sub > 255){throw _b_.ValueError.$factory("byte must be in range(0, 256)")} -return self.source.slice(0,end==-1 ? undefined :end).indexOf(sub,start)}else if(! sub.__class__){throw _b_.TypeError.$factory("first argument must be a bytes-like "+ -"object, not '"+$B.class_name(sub)+"'")}else if(! sub.__class__.$buffer_protocol){throw _b_.TypeError.$factory("first argument must be a bytes-like "+ -"object, not '"+$B.class_name(sub)+"'")} -end=end==-1 ? self.source.length :Math.min(self.source.length,end) -var len=sub.source.length -for(var i=start;i <=end-len;i++){var chunk=self.source.slice(i,i+len),found=true -for(var j=0;j < len;j++){if(chunk[j]!=sub.source[j]){found=false -break}} -if(found){return i}} -return-1} -bytes.fromhex=function(){var $=$B.args('fromhex',2,{cls:null,string:null},['cls','string'],arguments,{},null,null),string=$.string.replace(/\s/g,''),source=[] -for(var i=0;i < string.length;i+=2){if(i+2 > string.length){throw _b_.ValueError.$factory("non-hexadecimal number found "+ -"in fromhex() arg")} -source.push(_b_.int.$factory(string.substr(i,2),16))} -return $.cls.$factory(source)} -bytes.hex=function(){ -var $=$B.args('hex',1,{self:null},['self'],arguments,{},null,null),self=$.self,res="" -for(var i=0,len=self.source.length;i < len;i++){var hexa=self.source[i].toString(16) -if(hexa.length < 2){hexa="0"+hexa} -res+=hexa} -return res} -bytes.index=function(){var $=$B.args('rfind',4,{self:null,sub:null,start:null,end:null},['self','sub','start','end'],arguments,{start:0,end:-1},null,null) -var index=bytes.find($.self,$.sub,$.start,$.end) -if(index==-1){throw _b_.ValueError.$factory("subsection not found")} -return index} -bytes.isalnum=function(self){var src=self.source,len=src.length,res=len > 0 -for(var i=0;i < len && res;++i){res=(src[i]> 96 && src[i]< 123)|| -(src[i]> 64 && src[i]< 91)|| -(src[i]> 47 && src[i]< 58)} -return res} -bytes.isalpha=function(self){var src=self.source,len=src.length,res=len > 0 -for(var i=0;i < len && res;++i){res=(src[i]> 96 && src[i]< 123)||(src[i]> 64 && src[i]< 91)} -return res} -bytes.isdigit=function(self){var src=self.source,len=src.length,res=len > 0 -for(let i=0;i < len && res;++i){res=src[i]> 47 && src[i]< 58} -return res} -bytes.islower=function(self){var src=self.source,len=src.length,res=false -for(let i=0;i < len;++i){ -res=res ||(src[i]> 96 && src[i]< 123) -if(src[i]> 64 && src[i]< 91){return false}} -return res} -bytes.isspace=function(self){var src=self.source,len=src.length -for(let i=0;i < len;++i){switch(src[i]){case 9: -case 10: -case 11: -case 12: -case 13: -case 32: -break -default: -return false}} -return true} -bytes.isupper=function(self){var src=self.source,len=src.length,res=false -for(let i=0;i < len;++i){ -res=res ||(src[i]> 64 && src[i]< 91) -if(src[i]> 96 && src[i]< 123){return false}} -return res} -bytes.istitle=function(self){var src=self.source,len=src.length,current_char_is_letter=false,prev_char_was_letter=false,is_uppercase=false,is_lowercase=false -for(var i=0;i < len;++i){is_lowercase=src[i]> 96 && src[i]< 123 -is_uppercase=src[i]> 64 && src[i]< 91 -current_char_is_letter=is_lowercase ||is_uppercase -if(current_char_is_letter && -(prev_char_was_letter && is_uppercase)|| -(! prev_char_was_letter && is_lowercase)){return false} -prev_char_was_letter=current_char_is_letter} -return true} -bytes.join=function(){var $ns=$B.args('join',2,{self:null,iterable:null},['self','iterable'],arguments,{}),self=$ns['self'],iterable=$ns['iterable'] -var next_func=$B.$getattr(_b_.iter(iterable),'__next__'),res=self.__class__.$factory(),empty=true -while(true){try{var item=next_func() -if(empty){empty=false} -else{res=bytes.__add__(res,self)} -res=bytes.__add__(res,item)}catch(err){if(_b_.isinstance(err,_b_.StopIteration)){break} -throw err}} -return res} -var _lower=function(char_code){if(char_code >=65 && char_code <=90){return char_code+32}else{return char_code}} -bytes.lower=function(self){var _res=[],pos=0 -for(var i=0,len=self.source.length;i < len;i++){if(self.source[i]){_res[pos++]=_lower(self.source[i])}} -return bytes.$factory(_res)} -bytes.ljust=function(){var $=$B.args('ljust',3,{self:null,width:null,fillbyte:null},['self','width','fillbyte'],arguments,{fillbyte:bytes.$factory([32])},null,null) -if(!$.fillbyte.__class__){throw _b_.TypeError.$factory("argument 2 must be a byte string of length 1, "+ -"not '"+$B.class_name($.fillbyte)+"'")}else if(!$.fillbyte.__class__.$buffer_protocol){throw _b_.TypeError.$factory("argument 2 must be a byte string of length 1, "+ -"not '"+$B.class_name($.fillbyte)+"'")} -var padding=[],count=$.width-$.self.source.length -for(var i=0;i < count;++i){padding.push($.fillbyte.source[0])} -return bytes.$factory($.self.source.concat(padding))} -bytes.lstrip=function(self,cars){return _strip(self,cars,'l')} -bytes.maketrans=function(from,to){var _t=[],to=$B.to_bytes(to) -for(var i=0;i < 256;i++){_t[i]=i} -for(var i=0,len=from.source.length;i < len;i++){var _ndx=from.source[i] -_t[_ndx]=to[i]} -return bytes.$factory(_t)} -bytes.partition=function(){var $=$B.args('partition',2,{self:null,sep:null},['self','sep'],arguments,{},null,null) -if(! $.sep.__class__){throw _b_.TypeError.$factory("a bytes-like object is required, "+ -"not '"+$B.class_name($.sep)+"'")}else if(! $.sep.__class__.$buffer_protocol){throw _b_.TypeError.$factory("a bytes-like object is required, "+ -"not '"+$B.class_name($.sep)+"'")} -var len=$.sep.source.length,src=$.self.source,i=bytes.find($.self,$.sep) -return _b_.tuple.$factory([bytes.$factory(src.slice(0,i)),bytes.$factory(src.slice(i,i+len)),bytes.$factory(src.slice(i+len)) -])} -bytes.removeprefix=function(){var $=$B.args("removeprefix",2,{self:null,prefix:null},["self","prefix"],arguments,{},null,null) -if(!_b_.isinstance($.prefix,[bytes,bytearray])){throw _b_.ValueError.$factory("prefix should be bytes, not "+ -`'${$B.class_name($.prefix)}'`)} -if(bytes.startswith($.self,$.prefix)){return bytes.__getitem__($.self,_b_.slice.$factory($.prefix.source.length,_b_.None))} -return bytes.__getitem__($.self,_b_.slice.$factory(0,_b_.None))} -bytes.removesuffix=function(){var $=$B.args("removesuffix",2,{self:null,prefix:null},["self","suffix"],arguments,{},null,null) -if(!_b_.isinstance($.suffix,[bytes,bytearray])){throw _b_.ValueError.$factory("suffix should be bytes, not "+ -`'${$B.class_name($.suffix)}'`)} -if(bytes.endswith($.self,$.suffix)){return bytes.__getitem__($.self,_b_.slice.$factory(0,$.suffix.source.length+1))} -return bytes.__getitem__($.self,_b_.slice.$factory(0,_b_.None))} -bytes.replace=function(){var $=$B.args('replace',4,{self:null,old:null,new:null,count:null},['self','old','new','count'],arguments,{count:-1},null,null),res=[] -var self=$.self,src=self.source,len=src.length,old=$.old,$new=$.new -var count=$.count >=0 ? $.count :src.length -if(! $.old.__class__){throw _b_.TypeError.$factory("first argument must be a bytes-like "+ -"object, not '"+$B.class_name($.old)+"'")}else if(! $.old.__class__.$buffer_protocol){throw _b_.TypeError.$factory("first argument must be a bytes-like "+ -"object, not '"+$B.class_name($.sep)+"'")} -if(! $.new.__class__){throw _b_.TypeError.$factory("second argument must be a bytes-like "+ -"object, not '"+$B.class_name($.old)+"'")}else if(! $.new.__class__.$buffer_protocol){throw _b_.TypeError.$factory("second argument must be a bytes-like "+ -"object, not '"+$B.class_name($.sep)+"'")} -for(var i=0;i < len;i++){if(bytes.startswith(self,old,i)&& count){for(var j=0;j < $new.source.length;j++){res.push($new.source[j])} -i+=(old.source.length-1) -count--}else{res.push(src[i])}} -return bytes.$factory(res)} -bytes.rfind=function(self,subbytes){if(arguments.length==2 && subbytes.__class__===bytes){var sub=subbytes,start=0,end=-1}else{var $=$B.args('rfind',4,{self:null,sub:null,start:null,end:null},['self','sub','start','end'],arguments,{start:0,end:-1},null,null),self=$.self,sub=$.sub,start=$.start,end=$.end} -if(typeof sub=="number"){if(sub < 0 ||sub > 255){throw _b_.ValueError.$factory("byte must be in range(0, 256)")} -return $.self.source.slice(start,$.end==-1 ? undefined :$.end). -lastIndexOf(sub)+start}else if(! sub.__class__){throw _b_.TypeError.$factory("first argument must be a bytes-like "+ -"object, not '"+$B.class_name($.sub)+"'")}else if(! sub.__class__.$buffer_protocol){throw _b_.TypeError.$factory("first argument must be a bytes-like "+ -"object, not '"+$B.class_name(sub)+"'")} -end=end==-1 ? self.source.length :Math.min(self.source.length,end) -var len=sub.source.length -for(var i=end-len;i >=start;--i){var chunk=self.source.slice(i,i+len),found=true -for(var j=0;j < len;j++){if(chunk[j]!=sub.source[j]){found=false -break}} -if(found){return i}} -return-1} -bytes.rindex=function(){var $=$B.args('rfind',4,{self:null,sub:null,start:null,end:null},['self','sub','start','end'],arguments,{start:0,end:-1},null,null) -var index=bytes.rfind($.self,$.sub,$.start,$.end) -if(index==-1){throw _b_.ValueError.$factory("subsection not found")} -return index} -bytes.rjust=function(){var $=$B.args('rjust',3,{self:null,width:null,fillbyte:null},['self','width','fillbyte'],arguments,{fillbyte:bytes.$factory([32])},null,null) -if(!$.fillbyte.__class__){throw _b_.TypeError.$factory("argument 2 must be a byte string of length 1, "+ -"not '"+$B.class_name($.fillbyte)+"'")}else if(!$.fillbyte.__class__.$buffer_protocol){throw _b_.TypeError.$factory("argument 2 must be a byte string of length 1, "+ -"not '"+$B.class_name($.fillbyte)+"'")} -var padding=[],count=$.width-$.self.source.length -for(var i=0;i < count;++i){padding.push($.fillbyte.source[0])} -return bytes.$factory(padding.concat($.self.source))} -bytes.rpartition=function(){var $=$B.args('rpartition',2,{self:null,sep:null},['self','sep'],arguments,{},null,null) -if(!$.sep.__class__){throw _b_.TypeError.$factory("a bytes-like object is required, "+ -"not '"+$B.class_name($.sep)+"'")}else if(!$.sep.__class__.$buffer_protocol){throw _b_.TypeError.$factory("a bytes-like object is required, "+ -"not '"+$B.class_name($.sep)+"'")} -var len=$.sep.source.length,src=$.self.source,i=bytes.rfind($.self,$.sep) -return _b_.tuple.$factory([bytes.$factory(src.slice(0,i)),bytes.$factory(src.slice(i,i+len)),bytes.$factory(src.slice(i+len)) -])} -bytes.rstrip=function(self,cars){return _strip(self,cars,'r')} -bytes.split=function(){var $=$B.args('split',2,{self:null,sep:null},['self','sep'],arguments,{},null,null),res=[],start=0,stop=0 -if(! $.sep.__class__ ){throw _b_.TypeError.$factory("a bytes-like object is required, "+ -"not '"+$B.class_name($.sep)+"'")}else if(! $.sep.__class__.$buffer_protocol){throw _b_.TypeError.$factory("a bytes-like object is required, "+ -"not '"+$B.class_name($.sep)+"'")} -var seps=$.sep.source,len=seps.length,src=$.self.source,blen=src.length -while(stop < blen){var match=true -for(var i=0;i < len && match;i++){if(src[stop+i]!=seps[i]){match=false}} -if(match){res.push(bytes.$factory(src.slice(start,stop))) -start=stop+len -stop=start}else{stop++}} -if(match ||(stop > start)){res.push(bytes.$factory(src.slice(start,stop)))} -return res} -bytes.splitlines=function(self){var $=$B.args('splitlines',2,{self:null,keepends:null},['self','keepends'],arguments,{keepends:false},null,null) -if(!_b_.isinstance($.keepends,[_b_.bool,_b_.int])){throw _b_.TypeError('integer argument expected, got '+ -$B.get_class($.keepends).__name)} -var keepends=_b_.int.$factory($.keepends),res=[],source=$.self.source,start=0,pos=0 -if(! source.length){return res} -while(pos < source.length){if(pos < source.length-1 && source[pos]==0x0d && -source[pos+1]==0x0a){res.push(bytes.$factory(source.slice(start,keepends ? pos+2 :pos))) -start=pos=pos+2}else if(source[pos]==0x0d ||source[pos]==0x0a){res.push(bytes.$factory(source.slice(start,keepends ? pos+1 :pos))) -start=pos=pos+1}else{pos++}} -if(start < source.length){res.push(bytes.$factory(source.slice(start)))} -return res} -bytes.startswith=function(){var $=$B.args('startswith',3,{self:null,prefix:null,start:null},['self','prefix','start'],arguments,{start:0},null,null),start=$.start -if(_b_.isinstance($.prefix,bytes)){var res=true -for(var i=0;i < $.prefix.source.length && res;i++){res=$.self.source[start+i]==$.prefix.source[i]} -return res}else if(_b_.isinstance($.prefix,_b_.tuple)){var items=[] -for(var i=0;i < $.prefix.length;i++){if(_b_.isinstance($.prefix[i],bytes)){items=items.concat($.prefix[i].source)}else{throw _b_.TypeError.$factory("startswith first arg must be "+ -"bytes or a tuple of bytes, not "+ -$B.class_name($.prefix))}} -var prefix=bytes.$factory(items) -return bytes.startswith($.self,prefix,start)}else{throw _b_.TypeError.$factory("startswith first arg must be bytes "+ -"or a tuple of bytes, not "+$B.class_name($.prefix))}} -bytes.strip=function(self,cars){var res=bytes.lstrip(self,cars) -return bytes.rstrip(res,cars)} -bytes.swapcase=function(self){var src=self.source,len=src.length,buffer=src.slice() -for(var i=0;i < len;++i){if(buffer[i]> 96 && buffer[i]< 123){buffer[i]-=32}else if(buffer[i]> 64 && buffer[i]< 91){buffer[i]+=32}} -return bytes.$factory(buffer)} -bytes.title=function(self){var src=self.source,len=src.length -buffer=src.slice(),current_char_is_letter=false,prev_char_was_letter=false,is_uppercase=false,is_lowercase=false -for(var i=0;i < len;++i){is_lowercase=buffer[i]> 96 && buffer[i]< 123 -is_uppercase=buffer[i]> 64 && buffer[i]< 91 -current_char_is_letter=is_lowercase ||is_uppercase -if(current_char_is_letter){if(prev_char_was_letter && is_uppercase){buffer[i]+=32}else if(! prev_char_was_letter && is_lowercase){buffer[i]-=32}} -prev_char_was_letter=current_char_is_letter} -return bytes.$factory(buffer)} -bytes.translate=function(self,table,_delete){if(_delete===undefined){_delete=[]}else if(_b_.isinstance(_delete,bytes)){_delete=_delete.source}else{throw _b_.TypeError.$factory("Type "+ -$B.get_class(_delete).__name+" doesn't support the buffer API")} -var res=[],pos=0 -if(_b_.isinstance(table,bytes)&& table.source.length==256){for(var i=0,len=self.source.length;i < len;i++){if(_delete.indexOf(self.source[i])>-1){continue} -res[pos++]=table.source[self.source[i]]}} -return bytes.$factory(res)} -var _upper=function(char_code){if(char_code >=97 && char_code <=122){return char_code-32}else{return char_code}} -bytes.upper=function(self){var _res=[],pos=0 -for(var i=0,len=self.source.length;i < len;i++){if(self.source[i]){_res[pos++]=_upper(self.source[i])}} -return bytes.$factory(_res)} -bytes.zfill=function(self,width){var buffer=self.source.slice(),prefix_offset=(buffer[0]==43 ||buffer[0]==45)? 1 :0 -var count=width-self.source.length -var padding=[] -for(var i=0;i < count;++i){padding.push(48)} -buffer.splice.apply(buffer,[prefix_offset,0].concat(padding)) -return bytes.$factory(buffer)} -function $UnicodeEncodeError(encoding,code_point,position){throw _b_.UnicodeEncodeError.$factory("'"+encoding+ -"' codec can't encode character "+_b_.hex(code_point)+ -" in position "+position)} -function $UnicodeDecodeError(encoding,position){throw _b_.UnicodeDecodeError.$factory("'"+encoding+ -"' codec can't decode bytes in position "+position)} -function _hex(_int){return _int.toString(16)} -function _int(hex){return parseInt(hex,16)} -function normalise(encoding){var enc=encoding.toLowerCase() -if(enc.substr(0,7)=="windows"){enc="cp"+enc.substr(7)} -if(enc.startsWith("cp")||enc.startsWith("iso")){enc=enc.replace("-","")} -enc=enc.replace(/-/g,"_") -return enc} -function load_decoder(enc){ -if(to_unicode[enc]===undefined){var mod=_b_.__import__("encodings."+enc) -if(mod[enc].getregentry){to_unicode[enc]=$B.$getattr(mod[enc].getregentry(),"decode")}}} -function load_encoder(enc){ -if(from_unicode[enc]===undefined){var mod=_b_.__import__("encodings."+enc) -if(mod[enc].getregentry){from_unicode[enc]=$B.$getattr(mod[enc].getregentry(),"encode")}}} -var decode=$B.decode=function(obj,encoding,errors){var s="",b=obj.source,enc=normalise(encoding),has_surrogate=false -switch(enc){case "utf_8": -case "utf-8": -case "utf8": -case "U8": -case "UTF": -var pos=0,s="",err_info -while(pos < b.length){var byte=b[pos] -err_info=null -if(!(byte & 0x80)){ -s+=String.fromCodePoint(byte) -pos++}else if((byte >> 5)==6){ -if(b[pos+1]===undefined){err_info=[byte,pos,"end"]}else if((b[pos+1]& 0xc0)!=0x80){err_info=[byte,pos,"continuation"]} -if(err_info !==null){if(errors=="ignore"){pos++}else{throw _b_.UnicodeDecodeError.$factory( -"'utf-8' codec can't decode byte 0x"+ -err_info[0].toString(16)+" in position "+ -err_info[1]+ -(err_info[2]=="end" ? ": unexpected end of data" : -": invalid continuation byte"))}}else{var cp=byte & 0x1f -cp <<=6 -cp+=b[pos+1]& 0x3f -s+=String.fromCodePoint(cp) -pos+=2}}else if((byte >> 4)==14){ -if(b[pos+1]===undefined){err_info=[byte,pos,"end",pos+1]}else if((b[pos+1]& 0xc0)!=0x80){err_info=[byte,pos,"continuation",pos+2]}else if(b[pos+2]===undefined){err_info=[byte,pos+'-'+(pos+1),"end",pos+2]}else if((b[pos+2]& 0xc0)!=0x80){err_info=[byte,pos,"continuation",pos+3]} -if(err_info !==null){if(errors=="ignore"){pos=err_info[3]}else if(errors=="surrogateescape"){for(var i=pos;i < err_info[3];i++){s+=String.fromCodePoint(0xdc80+b[i]-0x80)} -pos=err_info[3]}else{throw _b_.UnicodeDecodeError.$factory( -"'utf-8' codec can't decode byte 0x"+ -err_info[0].toString(16)+" in position "+ -err_info[1]+ -(err_info[2]=="end" ? ": unexpected end of data" : -": invalid continuation byte"))}}else{var cp=byte & 0xf -cp=cp << 12 -cp+=(b[pos+1]& 0x3f)<< 6 -cp+=b[pos+2]& 0x3f -s+=String.fromCodePoint(cp) -pos+=3}}else if((byte >> 3)==30){ -has_surrogate=true -if(b[pos+1]===undefined){err_info=[byte,pos,"end",pos+1]}else if((b[pos+1]& 0xc0)!=0x80){err_info=[byte,pos,"continuation",pos+2]}else if(b[pos+2]===undefined){err_info=[byte,pos+'-'+(pos+1),"end",pos+2]}else if((b[pos+2]& 0xc0)!=0x80){err_info=[byte,pos,"continuation",pos+3]}else if(b[pos+3]===undefined){err_info=[byte,pos+'-'+(pos+1)+'-'+(pos+2),"end",pos+3]}else if((b[pos+2]& 0xc0)!=0x80){err_info=[byte,pos,"continuation",pos+3]} -if(err_info !==null){if(errors=="ignore"){pos=err_info[3]}else if(errors=="surrogateescape"){for(var i=pos;i < err_info[3];i++){s+=String.fromCodePoint(0xdc80+b[i]-0x80)} -pos=err_info[3]}else{throw _b_.UnicodeDecodeError.$factory( -"'utf-8' codec can't decode byte 0x"+ -err_info[0].toString(16)+" in position "+ -err_info[1]+ -(err_info[2]=="end" ? ": unexpected end of data" : -": invalid continuation byte"))}}else{var cp=byte & 0xf -cp=cp << 18 -cp+=(b[pos+1]& 0x3f)<< 12 -cp+=(b[pos+2]& 0x3f)<< 6 -cp+=(b[pos+3]& 0x3f) -s+=String.fromCodePoint(cp) -pos+=4}}else{if(errors=="ignore"){pos++}else if(errors=="surrogateescape"){s+=String.fromCodePoint(0xdc80+b[pos]-0x80) -pos++}else{throw _b_.UnicodeDecodeError.$factory( -"'utf-8' codec can't decode byte 0x"+ -byte.toString(16)+" in position "+pos+ -": invalid start byte")}}} -if(has_surrogate){return _b_.str.$surrogate.$factory(s)} -return s -case "latin_1": -case "windows1252": -case "iso-8859-1": -case "iso8859-1": -case "8859": -case "cp819": -case "latin": -case "latin1": -case "L1": -b.forEach(function(item){s+=String.fromCharCode(item)}) -break -case "unicode_escape": -if(obj.__class__===bytes ||obj.__class__===bytearray){obj=decode(obj,"latin-1","strict")} -return obj.replace(/\\n/g,"\n"). -replace(/\\a/g,"\u0007"). -replace(/\\b/g,"\b"). -replace(/\\f/g,"\f"). -replace(/\\t/g,"\t"). -replace(/\\'/g,"'"). -replace(/\\"/g,'"') -case "raw_unicode_escape": -if(obj.__class__===bytes ||obj.__class__===bytearray){obj=decode(obj,"latin-1","strict")} -return obj.replace(/\\u([a-fA-F0-9]{4})/g,function(mo){var cp=parseInt(mo.substr(2),16) -return String.fromCharCode(cp)}) -case "ascii": -for(var i=0,len=b.length;i < len;i++){var cp=b[i] -if(cp <=127){s+=String.fromCharCode(cp)}else{if(errors=="ignore"){}else{var msg="'ascii' codec can't decode byte 0x"+ -cp.toString(16)+" in position "+i+ -": ordinal not in range(128)" -throw _b_.UnicodeDecodeError.$factory(msg)}}} -break -default: -try{load_decoder(enc)}catch(err){console.log(b,encoding,"error load_decoder",err) -throw _b_.LookupError.$factory("unknown encoding: "+enc)} -return to_unicode[enc](obj)[0]} -return s} -var encode=$B.encode=function(){var $=$B.args("encode",3,{s:null,encoding:null,errors:null},["s","encoding","errors"],arguments,{encoding:"utf-8",errors:"strict"},null,null),s=$.s,encoding=$.encoding,errors=$.errors -var t=[],pos=0,enc=normalise(encoding) -switch(enc){case "utf-8": -case "utf_8": -case "utf8": -var res=[] -for(var i=0,len=s.length;i < len;i++){var cp=s.charCodeAt(i) -if(cp < 0x7f){res.push(cp)}else if(cp < 0x7ff){res.push(0xc0+(cp >> 6),0x80+(cp & 0x3f))}else if(cp < 0xffff){res.push(0xe0+(cp >> 12),0x80+((cp & 0xfff)>> 6),0x80+(cp & 0x3f))}else{console.log("4 bytes")}} -return res -case "latin": -case "latin1": -case "latin-1": -case "latin_1": -case "L1": -case "iso8859_1": -case "iso_8859_1": -case "8859": -case "cp819": -case "windows1252": -for(var i=0,len=s.length;i < len;i++){var cp=s.charCodeAt(i) -if(cp <=255){t[pos++]=cp} -else if(errors !="ignore"){$UnicodeEncodeError(encoding,i)}} -break -case "ascii": -for(var i=0,len=s.length;i < len;i++){var cp=s.charCodeAt(i) -if(cp <=127){t[pos++]=cp} -else if(errors !="ignore"){$UnicodeEncodeError(encoding,i)}} -break -case "raw_unicode_escape": -for(var i=0,len=s.length;i < len;i++){var cp=s.charCodeAt(i) -if(cp < 256){t[pos++]=cp}else{var us=cp.toString(16) -if(us.length % 2){us="0"+us} -us="\\u"+us -for(var j=0;j < us.length;j++){t[pos++]=us.charCodeAt(j)}}} -break -default: -try{load_encoder(enc)}catch(err){throw _b_.LookupError.$factory("unknown encoding: "+encoding)} -t=from_unicode[enc](s)[0].source} -return t} -bytes.$factory=function(source,encoding,errors){var $=$B.args("bytes",3,{source:null,encoding:null,errors:null},["source","encoding","errors"],arguments,{source:[],encoding:"utf-8",errors:"strict"},null,null) -return bytes.$new(bytes,$.source,$.encoding,$.errors)} -bytes.__class__=_b_.type -bytes.$is_class=true -for(var attr in bytes){if(bytearray[attr]===undefined && typeof bytes[attr]=="function"){bytearray[attr]=(function(_attr){return function(){return bytes[_attr].apply(null,arguments)}})(attr)}} -$B.set_func_names(bytes,"builtins") -bytes.fromhex=_b_.classmethod.$factory(bytes.fromhex) -$B.set_func_names(bytearray,"builtins") -bytearray.fromhex=_b_.classmethod.$factory(bytearray.fromhex) -_b_.bytes=bytes -_b_.bytearray=bytearray})(__BRYTHON__) -; -;(function($B){var _b_=$B.builtins,object=_b_.object,$N=_b_.None -function create_type(obj){return $B.get_class(obj).$factory()} -function clone(obj){var res=create_type(obj) -res.$items=obj.$items.slice() -for(key in obj.$hashes){res.$hashes[key]=obj.$hashes[key]} -return res} -var set={__class__:_b_.type,$infos:{__module__:"builtins",__name__:"set"},$is_class:true,$native:true} -set.__add__=function(self,other){throw _b_.TypeError.$factory( -"unsupported operand type(s) for +: 'set' and "+typeof other)} -set.__and__=function(self,other,accept_iter){try{$test(accept_iter,other)} -catch(err){return _b_.NotImplemented} -var res=create_type(self) -for(var i=0,len=self.$items.length;i < len;i++){if(_b_.getattr(other,"__contains__")(self.$items[i])){set.add(res,self.$items[i])}} -return res} -set.__contains__=function(self,item){if(self.$simple){if(typeof item=="number" ||item instanceof Number){if(isNaN(item)){ -for(var i=self.$items.length-1;i >=0;i--){if(isNaN(self.$items[i])){return true}} -return false}else if(item instanceof Number){return self.$numbers.indexOf(item.valueOf())>-1}else{return self.$items.indexOf(item)>-1}}else if(typeof item=="string"){return self.$items.indexOf(item)>-1}} -if(! _b_.isinstance(item,set)){$B.$getattr(item,"__hash__")} -var hash=_b_.hash(item) -if(self.$hashes[hash]){for(var i=0,len=self.$hashes[hash].length;i < len;i++){if($B.rich_comp("__eq__",self.$hashes[hash][i],item)){return true}}} -return false} -set.__eq__=function(self,other){ -if(other===undefined){return self===set} -if(_b_.isinstance(other,[_b_.set,_b_.frozenset])){if(other.$items.length==self.$items.length){for(var i=0,len=self.$items.length;i < len;i++){if(set.__contains__(self,other.$items[i])===false){return false}} -return true} -return false} -return _b_.NotImplemented} -set.__format__=function(self,format_string){return set.__str__(self)} -set.__ge__=function(self,other){if(_b_.isinstance(other,[set,frozenset])){return set.__le__(other,self)} -return _b_.NotImplemented} -set.__gt__=function(self,other){if(_b_.isinstance(other,[set,frozenset])){return set.__lt__(other,self)} -return _b_.NotImplemented} -set.__hash__=_b_.None -set.__init__=function(self,iterable,second){if(second===undefined){if(Array.isArray(iterable)){for(var i=0,len=iterable.length;i < len;i++){$add(self,iterable[i])} -return $N}} -var $=$B.args("__init__",2,{self:null,iterable:null},["self","iterable"],arguments,{iterable:[]},null,null),self=$.self,iterable=$.iterable -if(_b_.isinstance(iterable,[set,frozenset])){self.$items=iterable.$items.slice() -self.$hashes={} -for(var key in iterable.$hashes){self.$hashes[key]=iterable.$hashes[key]} -return $N} -var it=$B.$iter(iterable) -while(1){try{var item=_b_.next(it) -$add(self,item)}catch(err){if(_b_.isinstance(err,_b_.StopIteration)){break} -throw err}} -return $N} -var set_iterator=$B.make_iterator_class("set iterator") -set.__iter__=function(self){self.$items.sort() -return set_iterator.$factory(self.$items)} -set.__le__=function(self,other){ -if(_b_.isinstance(other,[set,frozenset])){var cfunc=_b_.getattr(other,"__contains__") -for(var i=0,len=self.$items.length;i < len;i++){if(! cfunc(self.$items[i])){return false}} -return true}else{return _b_.NotImplemented}} -set.__len__=function(self){return self.$items.length} -set.__lt__=function(self,other){if(_b_.isinstance(other,[set,frozenset])){return set.__le__(self,other)&& -set.__len__(self)< _b_.getattr(other,"__len__")()}else{return _b_.NotImplemented}} -set.__mro__=[_b_.object] -set.__new__=function(cls){if(cls===undefined){throw _b_.TypeError.$factory("set.__new__(): not enough arguments")} -return{ -__class__:cls,$simple:true,$items:[],$numbers:[], -$hashes:{}}} -set.__or__=function(self,other,accept_iter){ -var res=clone(self),func=_b_.getattr($B.$iter(other),"__next__") -while(1){try{set.add(res,func())} -catch(err){if(_b_.isinstance(err,_b_.StopIteration)){break} -throw err}} -res.__class__=self.__class__ -return res} -set.__rand__=function(self,other){ -return set.__and__(self,other)} -set.__reduce__=function(self){return _b_.tuple.$factory([self.__class__,_b_.tuple.$factory([self.$items]),$N])} -set.__reduce_ex__=function(self,protocol){return set.__reduce__(self)} -set.__rsub__=function(self,other){ -return set.__sub__(self,other)} -set.__rxor__=function(self,other){ -return set.__xor__(self,other)} -set.__str__=set.__repr__=function(self){var klass_name=$B.class_name(self) -if(self.$items.length===0){return klass_name+"()"} -var head=klass_name+"({",tail="})" -if(head=="set({"){head="{";tail="}"} -var res=[] -if($B.repr.enter(self)){return klass_name+"(...)"} -self.$items.sort() -for(var i=0,len=self.$items.length;i < len;i++){var r=_b_.repr(self.$items[i]) -if(r===self ||r===self.$items[i]){res.push("{...}")} -else{res.push(r)}} -res=res.join(", ") -$B.repr.leave(self) -return head+res+tail} -set.__sub__=function(self,other,accept_iter){ -try{$test(accept_iter,other,"-")} -catch(err){return _b_.NotImplemented} -var res=create_type(self),cfunc=_b_.getattr(other,"__contains__"),items=[] -for(var i=0,len=self.$items.length;i < len;i++){if(! cfunc(self.$items[i])){items.push(self.$items[i])}} -set.__init__.call(null,res,items) -return res} -set.__xor__=function(self,other,accept_iter){ -try{$test(accept_iter,other,"^")} -catch(err){return _b_.NotImplemented} -var res=create_type(self),cfunc=_b_.getattr(other,"__contains__") -for(var i=0,len=self.$items.length;i < len;i++){if(! cfunc(self.$items[i])){set.add(res,self.$items[i])}} -for(var i=0,len=other.$items.length;i < len;i++){if(! set.__contains__(self,other.$items[i])){set.add(res,other.$items[i])}} -return res} -function $test(accept_iter,other,op){if(accept_iter===undefined && -! _b_.isinstance(other,[set,frozenset])){throw _b_.TypeError.$factory("unsupported operand type(s) for "+op+ -": 'set' and '"+$B.class_name(other)+"'")}} -$B.make_rmethods(set) -function $add(self,item){var $simple=false -if(typeof item==="string" ||typeof item==="number" || -item instanceof Number){$simple=true} -if($simple){var ix=self.$items.indexOf(item) -if(ix==-1){if(item instanceof Number && -self.$numbers.indexOf(item.valueOf())>-1){}else if(typeof item=="number" && -self.$numbers.indexOf(item)>-1){}else{self.$items.push(item) -var value=item.valueOf() -if(typeof value=="number"){self.$numbers.push(value)}}}else{ -if(item !==self.$items[ix]){self.$items.push(item)}}}else{ -var hashvalue=_b_.hash(item) -var items=self.$hashes[hashvalue] -if(items===undefined){self.$hashes[hashvalue]=[item] -self.$items.push(item)}else{var items=self.$hashes[hashvalue],cfunc=function(other){return $B.rich_comp("__eq__",item,other)} -for(var i=0,len=items.length;i < len;i++){if(cfunc(items[i])){ -return $N}} -self.$hashes[hashvalue].push(item) -self.$items.push(item)}} -return $N} -set.add=function(){var $=$B.args("add",2,{self:null,item:null},["self","item"],arguments,{},null,null),self=$.self,item=$.item -return $add(self,item)} -set.clear=function(){var $=$B.args("clear",1,{self:null},["self"],arguments,{},null,null) -$.self.$items=[] -$.self.$hashes={} -return $N} -set.copy=function(){var $=$B.args("copy",1,{self:null},["self"],arguments,{},null,null) -if(_b_.isinstance($.self,frozenset)){return $.self} -var res=set.$factory() -$.self.$items.forEach(function(item){res.$items.push(item)}) -$.self.$numbers.forEach(function(item){res.$numbers.push(item)}) -for(key in self.$hashes){res.$hashes[key]=self.$hashes[key]} -return res} -set.difference_update=function(self){var $=$B.args("difference_update",1,{self:null},["self"],arguments,{},"args",null) -for(var i=0;i < $.args.length;i++){var s=set.$factory($.args[i]),_next=_b_.getattr($B.$iter(s),"__next__"),item -while(true){try{item=_next() -var _type=typeof item -if(_type=="string" ||_type=="number"){var _index=self.$items.indexOf(item) -if(_index >-1){self.$items.splice(_index,1)}}else{for(var j=0;j < self.$items.length;j++){if($B.rich_comp("__eq__",self.$items[j],item)){self.$items.splice(j,1) -var hash=_b_.hash(item) -if(self.$hashes[hash]){for(var k=0;k < self.$hashes[hash].length;k++){if($B.rich_comp("__eq__",self.$hashes[hash][k],item)){self.$hashes[hash].splice(k,1) -break}}}}}}}catch(err){if(_b_.isinstance(err,_b_.StopIteration)){break} -throw err}}} -return $N} -set.discard=function(){var $=$B.args("discard",2,{self:null,item:null},["self","item"],arguments,{},null,null) -try{set.remove($.self,$.item)} -catch(err){if(!_b_.isinstance(err,[_b_.KeyError,_b_.LookupError])){throw err}} -return $N} -set.intersection_update=function(){ -var $=$B.args("intersection_update",1,{self:null},["self"],arguments,{},"args",null),self=$.self -for(var i=0;i < $.args.length;i++){var remove=[],s=set.$factory($.args[i]) -for(var j=0;j < self.$items.length;j++){var _item=self.$items[j],_type=typeof _item -if(_type=="string" ||_type=="number"){if(s.$items.indexOf(_item)==-1){remove.push(j)}}else{var found=false,hash=_b_.hash(_item) -if(s.$hashes[hash]){var hashes=s.$hashes[hash] -for(var k=0;! found && k < hashes.length;k++){if($B.rich_comp("__eq__",hashes[k],_item)){found=true}} -if(! found){remove.push(j) -hashes=self.$hashes[hash] -for(var k=0;! found && k < hashes.length;k++){if($B.rich_comp("__eq__",hashes[k],_item)){self.$hashes.splice(k,1)}}}}}} -remove.sort(function(x,y){return x-y}).reverse() -for(var j=0;j < remove.length;j++){self.$items.splice(remove[j],1)}} -return $N} -set.isdisjoint=function(){var $=$B.args("is_disjoint",2,{self:null,other:null},["self","other"],arguments,{},null,null) -for(var i=0,len=$.self.$items.length;i < len;i++){if(_b_.getattr($.other,"__contains__")($.self.$items[i])){return false}} -return true} -set.pop=function(self){if(self.$items.length===0){throw _b_.KeyError.$factory('pop from an empty set')} -var item=self.$items.pop() -if(typeof item !="string" && typeof item !="number"){ -var hash=_b_.hash(item),items=self.$hashes[hash] -for(var k=0;k < items.length;k++){if($B.rich_comp("__eq__",items[k],item)){self.$hashes[hash].splice(k,1) -break}}} -return item} -set.remove=function(self,item){ -var $=$B.args("remove",2,{self:null,item:null},["self","item"],arguments,{},null,null),self=$.self,item=$.item -if(! _b_.isinstance(item,set)){_b_.hash(item)} -if(typeof item=="string" ||typeof item=="number"){var _i=self.$items.indexOf(item) -if(_i==-1){throw _b_.KeyError.$factory(item)} -self.$items.splice(_i,1) -if(typeof item=="number"){self.$numbers.splice(self.$numbers.indexOf(item),1)} -return $N} -var hash=_b_.hash(item) -if(self.$hashes[hash]){ -for(var i=0,len=self.$items.length;i < len;i++){if($B.rich_comp("__eq__",self.$items[i],item)){self.$items.splice(i,1) -if(item instanceof Number){self.$numbers.splice(self.$numbers.indexOf(item.valueOf()),1)} -break}} -for(var i=0,len=self.$hashes[hash].length;i < len;i++){if($B.rich_comp("__eq__",self.$hashes[hash][i],item)){self.$hashes[hash].splice(i,1) -break}} -return $N} -throw _b_.KeyError.$factory(item)} -set.symmetric_difference_update=function(self,s){ -var $=$B.args("symmetric_difference_update",2,{self:null,s:null},["self","s"],arguments,{},null,null),self=$.self,s=$.s -var _next=_b_.getattr($B.$iter(s),"__next__"),item,remove=[],add=[] -while(true){try{item=_next() -var _type=typeof item -if(_type=="string" ||_type=="number"){var _index=self.$items.indexOf(item) -if(_index >-1){remove.push(_index)}else{add.push(item)}}else{var found=false -for(var j=0;! found && j < self.$items.length;j++){if($B.rich_comp("__eq__",self.$items[j],item)){remove.push(j) -found=true}} -if(! found){add.push(item)}}}catch(err){if(_b_.isinstance(err,_b_.StopIteration)){break} -throw err}} -remove.sort(function(x,y){return x-y}).reverse() -for(var i=0;i < remove.length;i++){if(remove[i]!=remove[i-1]){self.$items.splice(remove[i],1)}} -for(var i=0;i < add.length;i++){set.add(self,add[i])} -return $N} -set.update=function(self){ -var $=$B.args("update",1,{self:null},["self"],arguments,{},"args",null) -for(var i=0;i < $.args.length;i++){var other=set.$factory($.args[i]) -for(var j=0,_len=other.$items.length;j < _len;j++){$add(self,other.$items[j])}} -return $N} -set.difference=function(){var $=$B.args("difference",1,{self:null},["self"],arguments,{},"args",null) -if($.args.length==0){return set.copy($.self)} -var res=clone($.self) -for(var i=0;i < $.args.length;i++){res=set.__sub__(res,set.$factory($.args[i]),true)} -return res} -var fc=set.difference+"" -eval("set.intersection = "+ -fc.replace(/difference/g,"intersection").replace("__sub__","__and__")) -eval("set.symmetric_difference = "+ -fc.replace(/difference/g,"symmetric_difference").replace("__sub__","__xor__")) -eval("set.union = "+ -fc.replace(/difference/g,"union").replace("__sub__","__or__")) -set.issubset=function(){var $=$B.args("issubset",2,{self:null,other:null},["self","other"],arguments,{},"args",null),func=_b_.getattr($.other,"__contains__") -for(var i=0,len=$.self.$items.length;i < len;i++){if(! func($.self.$items[i])){return false}} -return true} -set.issuperset=function(){var $=$B.args("issuperset",2,{self:null,other:null},["self","other"],arguments,{},"args",null) -var func=_b_.getattr($.self,"__contains__"),it=$B.$iter($.other) -while(true){try{var item=_b_.next(it) -if(! func(item)){return false}}catch(err){if(_b_.isinstance(err,_b_.StopIteration)){return true} -throw err}} -return true} -function $accept_only_set(f,op){return function(self,other,accept_iter){$test(accept_iter,other,op) -f(self,other) -return self}} -set.__iand__=$accept_only_set(set.intersection_update,"&=") -set.__isub__=$accept_only_set(set.difference_update,"-=") -set.__ixor__=$accept_only_set(set.symmetric_difference_update,"^=") -set.__ior__=$accept_only_set(set.update,"|=") -set.$factory=function(){ -var res={__class__:set,$simple:true,$items:[],$numbers:[],$hashes:{}} -var args=[res].concat(Array.prototype.slice.call(arguments)) -set.__init__.apply(null,args) -return res} -$B.set_func_names(set,"builtins") -var frozenset={__class__:_b_.type,__mro__:[object],$infos:{__module__:"builtins",__name__:"frozenset"},$is_class:true,$native:true} -for(var attr in set){switch(attr){case "add": -case "clear": -case "discard": -case "pop": -case "remove": -case "update": -break -default: -if(frozenset[attr]==undefined){if(typeof set[attr]=="function"){frozenset[attr]=(function(x){return function(){return set[x].apply(null,arguments)}})(attr)}else{frozenset[attr]=set[attr]}}}} -frozenset.__hash__=function(self){if(self===undefined){return frozenset.__hashvalue__ ||$B.$py_next_hash--} -if(self.__hashvalue__ !==undefined){return self.__hashvalue__} -var _hash=1927868237 -_hash*=self.$items.length -for(var i=0,len=self.$items.length;i < len;i++){var _h=_b_.hash(self.$items[i]) -_hash ^=((_h ^ 89869747)^(_h << 16))*3644798167} -_hash=_hash*69069+907133923 -if(_hash==-1){_hash=590923713} -return self.__hashvalue__=_hash} -frozenset.__init__=function(){ -return $N} -frozenset.__new__=function(cls){if(cls===undefined){throw _b_.TypeError.$factory( -"frozenset.__new__(): not enough arguments")} -return{ -__class__:cls,$simple:true,$items:[],$numbers:[],$hashes:{}}} -var singleton_id=Math.floor(Math.random()*Math.pow(2,40)) -function empty_frozenset(){var res=frozenset.__new__(frozenset) -res.$id=singleton_id -return res} -frozenset.$factory=function(){var $=$B.args("frozenset",1,{iterable:null},["iterable"],arguments,{iterable:null},null,null) -if($.iterable===null){return empty_frozenset()} -else if($.iterable.__class__==frozenset){return $.iterable} -var res=set.$factory($.iterable) -if(res.$items.length==0){return empty_frozenset()} -res.__class__=frozenset -return res} -$B.set_func_names(frozenset,"builtins") -_b_.set=set -_b_.frozenset=frozenset})(__BRYTHON__) -; -;(function($B){var _b_=$B.builtins -var object=_b_.object -var _window=self; -function to_simple(value){switch(typeof value){case 'string': -case 'number': -return value -case 'boolean': -return value ? "true" :"false" -case 'object': -if(value===_b_.None){return 'null'}else if(value instanceof Number){return value.valueOf()} -default: -console.log("erreur",value) -throw _b_.TypeError.$factory("keys must be str, int, "+ -"float, bool or None, not "+$B.class_name(value))}} -$B.pyobj2structuredclone=function(obj,strict){ -strict=strict===undefined ? true :strict -if(typeof obj=="boolean" ||typeof obj=="number" || -typeof obj=="string"){return obj}else if(obj instanceof Number){return obj.valueOf()}else if(obj===_b_.None){return null }else if(Array.isArray(obj)||obj.__class__===_b_.list || -obj.__class__===_b_.tuple){var res=[] -for(var i=0,len=obj.length;i < len;i++){res.push($B.pyobj2structuredclone(obj[i]))} -return res}else if(_b_.isinstance(obj,_b_.dict)){if(strict){if(Object.keys(obj.$numeric_dict).length > 0 || -Object.keys(obj.$object_dict).length > 0){throw _b_.TypeError.$factory("a dictionary with non-string "+ -"keys does not support structured clone")}} -var items=$B.dict_to_list(obj),res={} -for(var i=0,len=items.length;i < len;i++){res[to_simple(items[i][0])]=$B.pyobj2structuredclone(items[i][1])} -return res}else{return obj}} -$B.structuredclone2pyobj=function(obj){if(obj===null){return _b_.None}else if(obj===undefined){return $B.Undefined}else if(typeof obj=="boolean" ||typeof obj=="number" || -typeof obj=="string"){return obj}else if(obj instanceof Number){return obj.valueOf()}else if(Array.isArray(obj)||obj.__class__===_b_.list || -obj.__class__===_b_.tuple){var res=_b_.list.$factory() -for(var i=0,len=obj.length;i < len;i++){res.push($B.structuredclone2pyobj(obj[i]))} -return res}else if(typeof obj=="object"){var res=$B.empty_dict() -for(var key in obj){_b_.dict.$setitem(res,key,$B.structuredclone2pyobj(obj[key]))} -return res}else{console.log(obj,Array.isArray(obj),obj.__class__,_b_.list,obj.__class__===_b_.list) -throw _b_.TypeError.$factory(_b_.str.$factory(obj)+ -" does not support the structured clone algorithm")}} -var JSConstructor={__class__:_b_.type,__mro__:[object],$infos:{__module__:"",__name__:'JSConstructor'},$is_class:true} -JSConstructor.__call__=function(self){ -return function(){var args=[null] -for(var i=0,len=arguments.length;i < len;i++){args.push(pyobj2jsobj(arguments[i]))} -var factory=self.func.bind.apply(self.func,args) -var res=new factory() -return $B.$JS2Py(res)}} -JSConstructor.__getattribute__=function(self,attr){ -if(attr=="__call__"){return function(){var args=[null] -for(var i=0,len=arguments.length;i < len;i++){args.push(pyobj2jsobj(arguments[i]))} -var factory=self.func.bind.apply(self.func,args) -var res=new factory() -return $B.$JS2Py(res)}} -return JSObject.__getattribute__(self,attr)} -JSConstructor.$factory=function(obj){return{ -__class__:JSConstructor,js:obj,func:obj.js_func}} -var jsobj2pyobj=$B.jsobj2pyobj=function(jsobj){switch(jsobj){case true: -case false: -return jsobj} -if(jsobj===undefined){return $B.Undefined} -else if(jsobj===null){return _b_.None} -if(Array.isArray(jsobj)){return _b_.list.$factory(jsobj.map(jsobj2pyobj))} -if(typeof jsobj==='number'){if(jsobj.toString().indexOf('.')==-1){return _b_.int.$factory(jsobj)} -return _b_.float.$factory(jsobj)} -if(jsobj.$nat==='kw'){return jsobj} -if($B.$isNode(jsobj)){return $B.DOMNode.$factory(jsobj)} -return JSObject.$factory(jsobj)} -var pyobj2jsobj=$B.pyobj2jsobj=function(pyobj){ -if(pyobj===true ||pyobj===false){return pyobj} -if(pyobj===_b_.None){return null} -if(pyobj===$B.Undefined){return undefined} -var klass=$B.get_class(pyobj) -if(klass===undefined){ -return pyobj;} -if(klass===JSObject ||klass===JSConstructor){ -if(pyobj.js_func !==undefined){return pyobj.js_func} -return pyobj.js}else if(klass===$B.DOMNode || -klass.__mro__.indexOf($B.DOMNode)>-1){ -return pyobj}else if([_b_.list,_b_.tuple].indexOf(klass)>-1){ -var res=[] -pyobj.forEach(function(item){res.push(pyobj2jsobj(item))}) -return res}else if(klass===_b_.dict ||_b_.issubclass(klass,_b_.dict)){ -var jsobj={} -var items=_b_.list.$factory(_b_.dict.items(pyobj)) -items.forEach(function(item){if(typeof item[1]=='function'){ -item[1].bind(jsobj)} -jsobj[item[0]]=pyobj2jsobj(item[1])}) -return jsobj}else if(klass===_b_.float){ -return pyobj.valueOf()}else if(klass===$B.Function ||klass===$B.method){ -return function(){try{var args=[] -for(var i=0;i < arguments.length;i++){if(arguments[i]===undefined){args.push(_b_.None)} -else{args.push(jsobj2pyobj(arguments[i]))}} -return pyobj2jsobj(pyobj.apply(this,args))}catch(err){console.log(err) -console.log($B.$getattr(err,'info')) -console.log($B.class_name(err)+':',err.args.length > 0 ? err.args[0]:'' ) -throw err}}}else{ -return pyobj}} -var JSObject={__class__:_b_.type,__mro__:[object],$infos:{__module__:"builtins",__name__:'JSObject'}} -JSObject.__bool__=function(self){if(self.js.length !==undefined){return self.js.length > 0} -return(new Boolean(self.js)).valueOf()} -JSObject.__delattr__=function(self,attr){$B.$getattr(self,attr) -delete self.js[attr] -return _b_.None} -JSObject.__dir__=function(self){return Object.keys(self.js)} -JSObject.__getattribute__=function(self,attr){var $test=false -if($test){console.log("get attr",attr,"of",self)} -if(attr.substr(0,2)=='$$'){attr=attr.substr(2)} -if(self.js===null){return object.__getattribute__(None,attr)} -if(attr=="__class__"){return JSObject} -if(attr=="__call__"){if(typeof self.js=="function"){return function(){ -var args=[] -for(var i=0;i < arguments.length;i++){args.push($B.pyobj2jsobj(arguments[i]))} -var res=self.js.apply(null,args) -if(res===undefined){return None} -return $B.JSObject.$factory(res)}}else{throw _b_.AttributeError.$factory("object is not callable")}} -if(self.__class__===JSObject && attr=="bind" && -self.js[attr]===undefined && -self.js['addEventListener']!==undefined){ -attr='addEventListener'} -if(attr=="data" && self.js instanceof MessageEvent){return $B.structuredclone2pyobj(self.js.data)} -var js_attr=self.js[attr] -if(self.js_func && self.js_func[attr]!==undefined){js_attr=self.js_func[attr]} -if(js_attr !==undefined){if($test){console.log("jsattr",js_attr)} -if(typeof js_attr=='function'){ -var res=function(){var args=[] -for(var i=0,len=arguments.length;i < len;i++){var arg=arguments[i] -if(arg !==undefined && arg !==null && -arg.$nat !==undefined){var kw=arg.kw -if(Array.isArray(kw)){kw=$B.extend(js_attr.name,...kw)} -if(Object.keys(kw).length > 0){ -throw _b_.TypeError.$factory( -"A Javascript function can't take "+ -"keyword arguments")}}else{args.push(pyobj2jsobj(arg))}} -if(attr==='replace' && self.js===location){location.replace(args[0]) -return} -var new_this=self.js -if(self.js_func){ -new_this=self.js_func;} -if(this !==null && this !==undefined && this !==_window){new_this=this} -var result=js_attr.apply(new_this,args) -if($test){console.log("result",result,jsobj2pyobj(result))} -return jsobj2pyobj(result)} -res.__repr__=function(){return ''} -res.__str__=function(){return ''} -res.prototype=js_attr.prototype -return{__class__:JSObject,js:res,js_func:js_attr}}else{if($test){console.log("use JS2Py",$B.$JS2Py(js_attr))} -return $B.$JS2Py(js_attr)}}else if(self.js===_window && attr==='$$location'){ -return $Location()} -var res=self.__class__[attr] -if(res===undefined){ -var mro=self.__class__.__mro__ -for(var i=0,len=mro.length;i < len;i++){var v=mro[i][attr] -if(v !==undefined){res=v -break}}} -if(res !==undefined){if($test){console.log("found in klass",res+"")} -if(typeof res==='function'){ -return function(){var args=[self] -for(var i=0,len=arguments.length;i < len;i++){var arg=arguments[i] -if(arg &&(arg.__class__===JSObject || -arg.__class__===JSConstructor)){args.push(arg.js)}else{args.push(arg)}} -return res.apply(self,args)}} -return $B.$JS2Py(res)}else{ -throw _b_.AttributeError.$factory("no attribute "+attr+' for '+ -self.js)}} -JSObject.__getitem__=function(self,rank){if(typeof self.js.length=='number'){if((typeof rank=="number" ||typeof rank=="boolean")&& -typeof self.js.item=='function'){var rank_to_int=_b_.int.$factory(rank) -if(rank_to_int < 0){rank_to_int+=self.js.length} -var res=self.js.item(rank_to_int) -if(res===null){throw _b_.IndexError.$factory(rank)} -return $B.$JS2Py(res)}else if(typeof rank=="string" && -typeof self.js.getNamedItem=='function'){var res=JSObject.$factory(self.js.getNamedItem(rank)) -if(res===undefined){throw _b_.KeyError.$factory(rank)} -return res}} -try{return $B.$call($B.$getattr(self.js,'__getitem__'))(rank)}catch(err){if(self.js[rank]!==undefined){return JSObject.$factory(self.js[rank])} -throw _b_.KeyError.$factory(rank)}} -var JSObject_iterator=$B.make_iterator_class('JS object iterator') -JSObject.__iter__=function(self){var items=[] -if(_window.Symbol && self.js[Symbol.iterator]!==undefined){ -var items=[] -if(self.js.next !==undefined){while(true){var nxt=self.js.next() -if(nxt.done){break} -items.push(jsobj2pyobj(nxt.value))}}else if(self.js.length !==undefined && self.js.item !==undefined){for(var i=0;i < self.js.length;i++){items.push(jsobj2pyobj(self.js.item(i)))}} -return JSObject_iterator.$factory(items)}else if(self.js.length !==undefined && self.js.item !==undefined){ -for(var i=0;i < self.js.length;i++){items.push(JSObject.$factory(self.js.item(i)))} -return JSObject_iterator.$factory(items)} -var _dict=JSObject.to_dict(self) -return _b_.dict.__iter__(_dict)} -JSObject.__le__=function(self,other){if(typeof self.js["appendChild"]=="function"){return $B.DOMNode.__le__($B.DOMNode.$factory(self.js),other)} -return _b_.NotImplemented} -JSObject.__len__=function(self){if(typeof self.js.length=='number'){return self.js.length} -try{return $B.$getattr(self.js,'__len__')()} -catch(err){throw _b_.AttributeError.$factory(self.js+' has no attribute __len__')}} -JSObject.__repr__=function(self){if(self.js instanceof Date){return self.js.toString()} -var proto=Object.getPrototypeOf(self.js) -if(proto){var name=proto.constructor.name -if(name===undefined){ -var proto_str=proto.constructor.toString() -name=proto_str.substring(8,proto_str.length-1)} -return "<"+name+" object>"} -return ""} -JSObject.__setattr__=function(self,attr,value){if(attr.substr && attr.substr(0,2)=='$$'){ -attr=attr.substr(2)} -if(_b_.isinstance(value,JSObject)){self.js[attr]=value.js} -else{self.js[attr]=value -if(typeof value=='function'){self.js[attr]=function(){var args=[] -for(var i=0,len=arguments.length;i < len;i++){args.push($B.$JS2Py(arguments[i]))} -try{return value.apply(null,args)} -catch(err){err=$B.exception(err) -var info=$B.$getattr(err,'info') -if(err.args.length > 0){err.toString=function(){return info+'\n'+$B.class_name(err)+ -': '+_b_.repr(err.args[0])}}else{err.toString=function(){return info+'\n'+$B.class_name(err)}} -console.log(err+'') -throw err}}}}} -JSObject.__setitem__=JSObject.__setattr__ -JSObject.__str__=JSObject.__repr__ -var no_dict={'string':true,'function':true,'number':true,'boolean':true} -JSObject.bind=function(self,evt,func){var js_func=function(ev){return func(jsobj2pyobj(ev))} -self.js.addEventListener(evt,js_func) -return _b_.None} -JSObject.to_dict=function(self){ -return $B.structuredclone2pyobj(self.js)} -JSObject.$factory=function(obj){if(obj===null){return _b_.None} -if(typeof obj=='function'){return{__class__:JSObject,js:obj,js_func:obj}} -var klass=$B.get_class(obj) -if(klass===_b_.float){return _b_.float.$factory(obj)} -if(klass===_b_.list){return $B.JSArray.$factory(obj)} -if(klass !==undefined){return obj} -return{ -__class__:JSObject,js:obj}} -$B.set_func_names(JSObject,"builtins") -$B.JSObject=JSObject -$B.JSConstructor=JSConstructor -function pyargs2jsargs(pyargs){var args=[] -for(var i=0,len=pyargs.length;i < len;i++){var arg=pyargs[i] -if(arg !==undefined && arg !==null && -arg.$nat !==undefined){var kw=arg.kw -if(Array.isArray(kw)){kw=$B.extend(js_attr.name,...kw)} -if(Object.keys(kw).length > 0){ -throw _b_.TypeError.$factory( -"A Javascript function can't take "+ -"keyword arguments")}}else{args.push($B.pyobj2jsobj(arg))}} -return args} -$B.JSObj=$B.make_class("JSObj",function(jsobj){if(Array.isArray(jsobj)){}else if(typeof jsobj=="function"){jsobj.$is_js_func=true} -return jsobj} -) -$B.JSObj.__getattribute__=function(self,attr){var test=false -if(test){console.log("__ga__",self,attr)} -if(attr=="$$new" && typeof self=="function"){ -if(self.$js_func){return function(){var args=pyargs2jsargs(arguments) -return $B.JSObj.$factory(new self.$js_func(...args))}}else{return function(){var args=pyargs2jsargs(arguments) -return $B.JSObj.$factory(new self(...args))}}} -if(typeof attr=="string"){attr=$B.from_alias(attr)} -var js_attr=self[attr] -if(js_attr==undefined && typeof self=="function" && self.$js_func){js_attr=self.$js_func[attr]} -if(js_attr===undefined){if(typeof self.getNamedItem=='function'){var res=self.getNamedItem(attr) -if(res !==undefined){return $B.JSObj.$factory(res)}} -var klass=$B.get_class(self) -if(klass && klass[attr]){var class_attr=klass[attr] -if(typeof class_attr=="function"){return function(){var args=[self] -for(var i=0,len=arguments.length;i < len;i++){args.push(arguments[i])} -return $B.JSObj.$factory(class_attr.apply(null,args))}}else{return class_attr}} -if(attr=="bind" && typeof self.addEventListener=="function"){return function(event,callback){return self.addEventListener(event,callback)}} -throw _b_.AttributeError.$factory(attr)} -if(typeof js_attr==='function'){var res=function(){var args=pyargs2jsargs(arguments),target=self.$js_func ||self -try{var result=js_attr.apply(target,args)}catch(err){console.log("error",err) -console.log(attr,js_attr,args,arguments) -throw err} -if(result===undefined){return $B.Undefined}else if(result===null){return _b_.None} -return $B.JSObj.$factory(result)} -res.prototype=js_attr.prototype -res.$js_func=js_attr -res.__mro__=[_b_.object] -return $B.JSObj.$factory(res)}else{return $B.JSObj.$factory(js_attr)}} -$B.JSObj.__setattr__=function(self,attr,value){if(typeof attr=="string"){attr=$B.from_alias(attr)} -self[attr]=$B.pyobj2structuredclone(value) -return _b_.None} -$B.JSObj.__getitem__=function(self,key){if(typeof key=="string"){return $B.JSObj.__getattribute__(self,key)}else if(typeof key=="number"){if(self[key]!==undefined){return $B.JSObj.$factory(self[key])} -if(typeof self.length=='number'){if((typeof key=="number" ||typeof key=="boolean")&& -typeof self.item=='function'){var rank=_b_.int.$factory(key) -if(rank < 0){rank+=self.length} -var res=self.item(rank) -if(res===null){throw _b_.IndexError.$factory(rank)} -return $B.JSObj.$factory(res)}}} -throw _b_.KeyError.$factory(rank)} -$B.JSObj.__setitem__=$B.JSObj.__setattr__ -$B.JSObj.__iter__=function(self){var items=[] -if(_window.Symbol && self[Symbol.iterator]!==undefined){ -var items=[] -if(self.next !==undefined){while(true){var nxt=self.next() -if(nxt.done){break} -items.push($B.JSObj.$factory(nxt.value))}}else if(self.length !==undefined && self.item !==undefined){for(var i=0;i < self.length;i++){items.push($B.JSObj.$factory(self.item(i)))}} -return JSObject_iterator.$factory(items)}else if(self.length !==undefined && self.item !==undefined){ -for(var i=0;i < self.length;i++){items.push($B.JSObj.$factory(self.js.item(i)))} -return JSObject_iterator.$factory(items)} -var _dict=$B.JSObj.to_dict(self) -return _b_.dict.__iter__(_dict)} -$B.JSObj.__len__=function(self){if(typeof self.length=='number'){return self.length} -throw _b_.AttributeError.$factory(self+' has no attribute __len__')} -$B.JSObj.__repr__=$B.JSObj.__str__=function(self){return ''} -$B.JSObj.bind=function(self,evt,func){ -var js_func=function(ev){return func(jsobj2pyobj(ev))} -self.addEventListener(evt,js_func) -return _b_.None} -$B.JSObj.to_dict=function(self){ -return $B.structuredclone2pyobj(self)} -$B.set_func_names($B.JSObj,"builtins") -$B.JSMeta=$B.make_class("JSMeta") -$B.JSMeta.__call__=function(cls){ -var args=[] -for(var i=1,len=arguments.length;i < len;i++){args.push(arguments[i])} -return new cls.__mro__[0].$js_func(...args)} -$B.JSMeta.__mro__=[_b_.type,_b_.object] -$B.JSMeta.__getattribute__=function(cls,attr){if(cls[attr]!==undefined){return cls[attr]}else if($B.JSMeta[attr]!==undefined){return $B.JSMeta[attr]}else{ -return _b_.type.__getattribute__(cls,attr)}} -$B.JSMeta.__init_subclass__=function(){} -$B.set_func_names($B.JSMeta,"builtins")})(__BRYTHON__) -; -;(function($B){$B.stdlib={} -var pylist=['VFS_import','__future__','_abcoll','_codecs','_collections','_collections_abc','_compat_pickle','_contextvars','_csv','_dummy_thread','_frozen_importlib','_functools','_imp','_io','_markupbase','_operator','_py_abc','_pydecimal','_queue','_random','_socket','_sre','_struct','_sysconfigdata','_sysconfigdata_0_brython_','_testcapi','_thread','_threading_local','_weakref','_weakrefset','abc','antigravity','argparse','atexit','base64','bdb','binascii','bisect','browser.aio','browser.ajax','browser.highlight','browser.html','browser.indexed_db','browser.local_storage','browser.markdown','browser.object_storage','browser.session_storage','browser.svg','browser.template','browser.timer','browser.webcomponent','browser.websocket','browser.webworker','browser.worker','calendar','cmath','cmd','code','codecs','codeop','colorsys','configparser','contextlib','contextvars','copy','copyreg','csv','dataclasses','datetime','decimal','difflib','doctest','enum','errno','external_import','faulthandler','fnmatch','formatter','fractions','functools','gc','genericpath','getopt','gettext','glob','heapq','hmac','imp','inspect','interpreter','io','ipaddress','itertools','json','keyword','linecache','locale','mimetypes','nntplib','ntpath','numbers','opcode','operator','optparse','os','pathlib','pdb','pickle','pkgutil','platform','posixpath','pprint','profile','pwd','py_compile','pydoc','queue','quopri','re','reprlib','select','selectors','shlex','shutil','signal','site','site-packages.__future__','site-packages.docs','site-packages.header','site-packages.test','site-packages.test_sp','socket','sre_compile','sre_constants','sre_parse','stat','string','stringprep','struct','subprocess','sys','sysconfig','tarfile','tb','tempfile','test.namespace_pkgs.module_and_namespace_package.a_test','textwrap','this','threading','time','timeit','token','tokenize','traceback','turtle','types','typing','uu','uuid','warnings','weakref','webbrowser','zipfile','zipimport','zlib'] -for(var i=0;i < pylist.length;i++){$B.stdlib[pylist[i]]=['py']} -var js=['_aio','_ajax','_base64','_binascii','_io_classes','_json','_jsre','_locale','_multiprocessing','_posixsubprocess','_profile','_sre_utils','_string','_strptime','_svg','_warnings','_webcomponent','_webworker','_zlib_utils','aes','array','builtins','dis','hashlib','hmac-md5','hmac-ripemd160','hmac-sha1','hmac-sha224','hmac-sha256','hmac-sha3','hmac-sha384','hmac-sha512','long_int','marshal','math','math1','md5','modulefinder','pbkdf2','posix','rabbit','rabbit-legacy','random','rc4','ripemd160','sha1','sha224','sha256','sha3','sha384','sha512','tripledes','unicodedata'] -for(var i=0;i < js.length;i++){$B.stdlib[js[i]]=['js']} -var pkglist=['browser.widgets','collections','concurrent','concurrent.futures','email','email.mime','encodings','html','http','importlib','logging','multiprocessing','multiprocessing.dummy','pydoc_data','site-packages.simpleaio','site-packages.simpy','site-packages.simpy.resources','site-packages.ui','test','test.encoded_modules','test.leakers','test.namespace_pkgs.not_a_namespace_pkg.foo','test.support','test.test_email','test.test_importlib','test.test_importlib.builtin','test.test_importlib.extension','test.test_importlib.frozen','test.test_importlib.import_','test.test_importlib.source','test.test_json','test.tracedmodules','unittest','unittest.test','unittest.test.testmock','urllib'] -for(var i=0;i < pkglist.length;i++){$B.stdlib[pkglist[i]]=['py',true]}})(__BRYTHON__) -; - -;(function($B){var _b_=$B.builtins,_window=self -var module=$B.module={__class__ :_b_.type,__mro__:[_b_.object],$infos:{__module__:"builtins",__name__:"module"},$is_class:true} -module.__init__=function(){} -module.__new__=function(cls,name,doc,$package){return{ -__class__:cls,__name__:name,__doc__:doc ||_b_.None,__package__:$package ||_b_.None}} -module.__repr__=module.__str__=function(self){var res=""} -module.__setattr__=function(self,attr,value){if(self.__name__=="__builtins__"){ -$B.builtins[attr]=value}else{self[attr]=value}} -module.$factory=function(name,doc,$package){return{ -__class__:module,__name__:name,__doc__:doc ||_b_.None,__package__:$package ||_b_.None}} -$B.set_func_names(module,"builtins") -function parent_package(mod_name){var parts=mod_name.split(".") -parts.pop() -return parts.join(".")} -function $download_module(mod,url,$package){var xhr=new XMLHttpRequest(),fake_qs="?v="+(new Date().getTime()),res=null,mod_name=mod.__name__ -var timer=_window.setTimeout(function(){xhr.abort()},5000) -if($B.$options.cache){xhr.open("GET",url,false)}else{xhr.open("GET",url+fake_qs,false)} -xhr.send() -if($B.$CORS){if(xhr.status==200 ||xhr.status==0){res=xhr.responseText}else{res=_b_.ModuleNotFoundError.$factory("No module named '"+ -mod_name+"'")}}else{if(xhr.readyState==4){if(xhr.status==200){res=xhr.responseText -mod.$last_modified= -xhr.getResponseHeader("Last-Modified")}else{ -console.info("Error "+xhr.status+ -" means that Python module "+mod_name+ -" was not found at url "+url) -res=_b_.ModuleNotFoundError.$factory("No module named '"+ -mod_name+"'")}}} -_window.clearTimeout(timer) -if(res==null){throw _b_.ModuleNotFoundError.$factory("No module named '"+ -mod_name+"' (res is null)")} -if(res.constructor===Error){throw res} -return res} -$B.$download_module=$download_module -function import_js(mod,path){try{var module_contents=$download_module(mod,path,undefined)}catch(err){return null} -run_js(module_contents,path,mod) -return true} -function run_js(module_contents,path,_module){ -try{var $module=new Function(module_contents+";\nreturn $module")() -if($B.$options.store){_module.$js=module_contents}}catch(err){console.log(err) -console.log(path,_module) -throw err} -try{$module} -catch(err){console.log("no $module") -throw _b_.ImportError.$factory("name '$module' not defined in module")} -$module.__name__=_module.__name__ -for(var attr in $module){if(typeof $module[attr]=="function"){$module[attr].$infos={__module__:_module.__name__,__name__:attr,__qualname__:attr}}} -if(_module !==undefined){ -for(var attr in $module){_module[attr]=$module[attr]} -$module=_module -$module.__class__=module }else{ -$module.__class__=module -$module.__name__=_module.__name__ -$module.__repr__=$module.__str__=function(){if($B.builtin_module_names.indexOf(_module.name)>-1){return ""} -return ""} -if(_module.name !="builtins"){ -$module.__file__=path}} -$B.imported[_module.__name__]=$module -return true} -function show_ns(){var kk=Object.keys(_window) -for(var i=0,len=kk.length;i < len;i++){console.log(kk[i]) -if(kk[i].charAt(0)=="$"){console.log(eval(kk[i]))}} -console.log("---")} -function import_py(mod,path,$package){ -var mod_name=mod.__name__,module_contents=$download_module(mod,path,$package) -mod.$src=module_contents -$B.imported[mod_name].$is_package=mod.$is_package -$B.imported[mod_name].$last_modified=mod.$last_modified -if(path.substr(path.length-12)=="/__init__.py"){$B.imported[mod_name].__package__=mod_name -$B.imported[mod_name].__path__=path -$B.imported[mod_name].$is_package=mod.$is_package=true}else if($package){$B.imported[mod_name].__package__=$package}else{var mod_elts=mod_name.split(".") -mod_elts.pop() -$B.imported[mod_name].__package__=mod_elts.join(".")} -$B.imported[mod_name].__file__=path -return run_py(module_contents,path,mod)} -function run_py(module_contents,path,module,compiled){ -$B.file_cache[path]=module_contents -var root,js,mod_name=module.__name__ -if(! compiled){var $Node=$B.$Node,$NodeJSCtx=$B.$NodeJSCtx -$B.$py_module_path[module.__name__]=path -var src={src:module_contents,has_annotations:false} -root=$B.py2js(src,module,module.__name__,$B.builtins_scope) -if(module.__package__ !==undefined){root.binding["__package__"]=true}} -try{js=compiled ? module_contents :root.to_js() -if($B.$options.debug==10){console.log("code for module "+module.__name__) -console.log(js)} -var src=js -js="var $module = (function(){\n"+js+"return $locals_"+ -module.__name__.replace(/\./g,"_")+"})(__BRYTHON__)\n"+ -"return $module" -var module_id="$locals_"+module.__name__.replace(/\./g,'_') -var $module=(new Function(module_id,js))(module)}catch(err){console.log(err+" for module "+module.__name__) -console.log("module",module) -console.log(root) -if($B.debug > 1){console.log(js)} -for(var attr in err){console.log(attr,err[attr])} -console.log(_b_.getattr(err,"info","[no info]")) -console.log("message: "+err.$message) -console.log("filename: "+err.fileName) -console.log("linenum: "+err.lineNumber) -if($B.debug > 0){console.log("line info "+$B.line_info)} -throw err}finally{$B.clear_ns(module.__name__)} -try{ -var mod=eval("$module") -for(var attr in mod){module[attr]=mod[attr]} -module.__initializing__=false -$B.imported[module.__name__]=module -return{ -content:src,name:mod_name,imports:Object.keys(root.imports).join(",")}}catch(err){console.log(""+err+" "+" for module "+module.__name__) -for(var attr in err){console.log(attr+" "+err[attr])} -if($B.debug > 0){console.log("line info "+__BRYTHON__.line_info)} -throw err}} -$B.run_py=run_py -function new_spec(fields){ -fields.__class__=module -return fields} -var finder_VFS={__class__:_b_.type,__mro__:[_b_.object],$infos:{__module__:"builtins",__name__:"VFSFinder"},create_module :function(cls,spec){ -return _b_.None},exec_module :function(cls,modobj){var stored=modobj.__spec__.loader_state.stored,timestamp=modobj.__spec__.loader_state.timestamp -delete modobj.__spec__["loader_state"] -var ext=stored[0],module_contents=stored[1],imports=stored[2] -modobj.$is_package=stored[3]||false -var path="VFS."+modobj.__name__ -path+=modobj.$is_package ? "/__init__.py" :ext -modobj.__file__=path -$B.file_cache[modobj.__file__]=$B.VFS[modobj.__name__][1] -if(ext=='.js'){run_js(module_contents,modobj.__path__,modobj)}else if($B.precompiled.hasOwnProperty(modobj.__name__)){if($B.debug > 1){console.info("load",modobj.__name__,"from precompiled")} -var parts=modobj.__name__.split(".") -for(var i=0;i < parts.length;i++){var parent=parts.slice(0,i+1).join(".") -if($B.imported.hasOwnProperty(parent)&& -$B.imported[parent].__initialized__){continue} -var mod_js=$B.precompiled[parent],is_package=modobj.$is_package -if(Array.isArray(mod_js)){mod_js=mod_js[0]} -var mod=$B.imported[parent]=module.$factory(parent,undefined,is_package) -mod.__initialized__=true -if(is_package){mod.__path__="" -mod.__package__=parent}else{var elts=parent.split(".") -elts.pop() -mod.__package__=elts.join(".")} -mod.__file__=path -try{var parent_id=parent.replace(/\./g,"_") -mod_js+="return $locals_"+parent_id -var $module=new Function("$locals_"+parent_id,mod_js)( -mod)}catch(err){if($B.debug > 1){console.log(err) -for(var k in err){console.log(k,err[k])} -console.log(Object.keys($B.imported)) -if($B.debug > 2){console.log(modobj,"mod_js",mod_js)}} -throw err} -for(var attr in $module){mod[attr]=$module[attr]} -$module.__file__=path -if(i > 0){ -$B.builtins.setattr( -$B.imported[parts.slice(0,i).join(".")],parts[i],$module)}} -return $module}else{var mod_name=modobj.__name__ -if($B.debug > 1){console.log("run Python code from VFS",mod_name)} -var record=run_py(module_contents,modobj.__path__,modobj) -record.is_package=modobj.$is_package -record.timestamp=$B.timestamp -record.source_ts=timestamp -$B.precompiled[mod_name]=record.is_package ?[record.content]: -record.content -var elts=mod_name.split(".") -if(elts.length > 1){elts.pop()} -if($B.$options.indexedDB && self.indexedDB && -$B.idb_name){ -var idb_cx=indexedDB.open($B.idb_name) -idb_cx.onsuccess=function(evt){var db=evt.target.result,tx=db.transaction("modules","readwrite"),store=tx.objectStore("modules"),cursor=store.openCursor(),request=store.put(record) -request.onsuccess=function(){if($B.debug > 1){console.info(modobj.__name__,"stored in db")}} -request.onerror=function(){console.info("could not store "+modobj.__name__)}}}}},find_module:function(cls,name,path){return{ -__class__:Loader,load_module:function(name,path){var spec=cls.find_spec(cls,name,path) -var mod=module.$factory(name) -$B.imported[name]=mod -mod.__spec__=spec -cls.exec_module(cls,mod)}}},find_spec :function(cls,fullname,path,prev_module){var stored,is_package,timestamp -if(!$B.use_VFS){return _b_.None} -stored=$B.VFS[fullname] -if(stored===undefined){return _b_.None} -is_package=stored[3]||false -timestamp=stored.timestamp -if(stored){var is_builtin=$B.builtin_module_names.indexOf(fullname)>-1 -return new_spec({name :fullname,loader:cls, -origin :is_builtin? "built-in" :"brython_stdlib", -submodule_search_locations:is_package?[]:_b_.None,loader_state:{stored:stored,timestamp:timestamp}, -cached:_b_.None,parent:is_package? fullname :parent_package(fullname),has_location:_b_.False})}}} -$B.set_func_names(finder_VFS,"") -for(var method in finder_VFS){if(typeof finder_VFS[method]=="function"){finder_VFS[method]=_b_.classmethod.$factory( -finder_VFS[method])}} -finder_VFS.$factory=function(){return{__class__:finder_VFS}} -var finder_cpython={__class__:_b_.type,__mro__:[_b_.object],$infos:{__module__:"builtins",__name__:"CPythonFinder"},create_module :function(cls,spec){ -return _b_.None},exec_module :function(cls,modobj){console.log("exec PYthon module",modobj) -var loader_state=modobj.__spec__.loader_state -var content=loader_state.content -delete modobj.__spec__["loader_state"] -modobj.$is_package=loader_state.is_package -modobj.__file__=loader_state.__file__ -$B.file_cache[modobj.__file__]=content -var mod_name=modobj.__name__ -if($B.debug > 1){console.log("run Python code from CPython",mod_name)} -run_py(content,modobj.__path__,modobj)},find_module:function(cls,name,path){return{ -__class__:Loader,load_module:function(name,path){var spec=cls.find_spec(cls,name,path) -var mod=module.$factory(name) -$B.imported[name]=mod -mod.__spec__=spec -cls.exec_module(cls,mod)}}},find_spec :function(cls,fullname,path,prev_module){console.log("finder cpython",fullname) -var xhr=new XMLHttpRequest(),url="/cpython_import?module="+fullname,result -xhr.open("GET",url,false) -xhr.onreadystatechange=function(){if(this.readyState==4 && this.status==200){var data=JSON.parse(this.responseText) -result=new_spec({name :fullname,loader:cls, -origin :"CPython", -submodule_search_locations:data.is_package?[]:_b_.None,loader_state:{content:data.content}, -cached:_b_.None,parent:data.is_package? fullname :parent_package(fullname),has_location:_b_.False})}} -xhr.send() -return result}} -$B.set_func_names(finder_cpython,"") -for(var method in finder_cpython){if(typeof finder_cpython[method]=="function"){finder_cpython[method]=_b_.classmethod.$factory( -finder_cpython[method])}} -finder_cpython.$factory=function(){return{__class__:finder_cpython}} -var finder_stdlib_static={$factory :finder_stdlib_static,__class__ :_b_.type,__mro__:[_b_.object],$infos:{__module__:"builtins",__name__:"StdlibStatic"},create_module :function(cls,spec){ -return _b_.None},exec_module :function(cls,module){var metadata=module.__spec__.loader_state -module.$is_package=metadata.is_package -if(metadata.ext=="py"){import_py(module,metadata.path,module.__package__)}else{import_js(module,metadata.path)} -delete module.__spec__["loader_state"]},find_module:function(cls,name,path){var spec=cls.find_spec(cls,name,path) -if(spec===_b_.None){return _b_.None} -return{ -__class__:Loader,load_module:function(name,path){var mod=module.$factory(name) -$B.imported[name]=mod -mod.__spec__=spec -mod.__package__=spec.parent -cls.exec_module(cls,mod)}}},find_spec:function(cls,fullname,path,prev_module){if($B.stdlib && $B.$options.static_stdlib_import){var address=$B.stdlib[fullname] -if(address===undefined){var elts=fullname.split(".") -if(elts.length > 1){elts.pop() -var $package=$B.stdlib[elts.join(".")] -if($package && $package[1]){address=["py"]}}} -if(address !==undefined){var ext=address[0],is_pkg=address[1]!==undefined,path=$B.brython_path+ -((ext=="py")? "Lib/" :"libs/")+ -fullname.replace(/\./g,"/"),metadata={ext:ext,is_package:is_pkg,path:path+(is_pkg? "/__init__.py" : -((ext=="py")? ".py" :".js")),address:address} -var res=new_spec({name :fullname,loader:cls, -origin :metadata.path,submodule_search_locations:is_pkg?[path]:_b_.None,loader_state:metadata, -cached:_b_.None,parent:is_pkg ? fullname :parent_package(fullname),has_location:_b_.True}) -return res}} -return _b_.None}} -$B.set_func_names(finder_stdlib_static,"") -for(var method in finder_stdlib_static){if(typeof finder_stdlib_static[method]=="function"){finder_stdlib_static[method]=_b_.classmethod.$factory( -finder_stdlib_static[method])}} -finder_stdlib_static.$factory=function(){return{__class__:finder_stdlib_static}} -var finder_path={__class__:_b_.type,__mro__:[_b_.object],$infos:{__module__:"builtins",__name__:"ImporterPath"},create_module :function(cls,spec){ -return _b_.None},exec_module :function(cls,_module){var _spec=$B.$getattr(_module,"__spec__"),code=_spec.loader_state.code; -_module.$is_package=_spec.loader_state.is_package,delete _spec.loader_state["code"] -var src_type=_spec.loader_state.type -if(src_type=="py" ||src_type=="pyc.js"){run_py(code,_spec.origin,_module,src_type=="pyc.js")} -else if(_spec.loader_state.type=="js"){run_js(code,_spec.origin,_module)}},find_module:function(cls,name,path){return finder_path.find_spec(cls,name,path)},find_spec :function(cls,fullname,path,prev_module){var current_module=$B.last($B.frames_stack)[2] -if($B.VFS && $B.VFS[current_module]){ -return _b_.None} -if($B.is_none(path)){ -path=$B.path} -for(var i=0,li=path.length;i < li;++i){var path_entry=path[i] -if(path_entry[path_entry.length-1]!="/"){path_entry+="/"} -var finder=$B.path_importer_cache[path_entry] -if(finder===undefined){var finder_notfound=true -for(var j=0,lj=$B.path_hooks.length; -j < lj && finder_notfound;++j){var hook=$B.path_hooks[j].$factory -try{finder=(typeof hook=="function" ? hook : -$B.$getattr(hook,"__call__"))(path_entry) -finder_notfound=false}catch(e){if(e.__class__ !==_b_.ImportError){throw e}}} -if(finder_notfound){$B.path_importer_cache[path_entry]=_b_.None}} -if($B.is_none(finder)){continue} -var find_spec=$B.$getattr(finder,"find_spec"),fs_func=typeof find_spec=="function" ? -find_spec : -$B.$getattr(find_spec,"__call__") -var spec=fs_func(fullname,prev_module) -if(!$B.is_none(spec)){return spec}} -return _b_.None}} -$B.set_func_names(finder_path,"") -for(var method in finder_path){if(typeof finder_path[method]=="function"){finder_path[method]=_b_.classmethod.$factory( -finder_path[method])}} -finder_path.$factory=function(){return{__class__:finder_path}} -var url_hook={__class__:_b_.type,__mro__:[_b_.object],__repr__:function(self){return "'},$infos:{__module__:"builtins",__name__:"UrlPathFinder"},find_spec :function(self,fullname,module){var loader_data={},notfound=true,hint=self.hint,base_path=self.path_entry+fullname.match(/[^.]+$/g)[0],modpaths=[] -var tryall=hint===undefined -if(tryall ||hint=='py'){ -modpaths=modpaths.concat([[base_path+".py","py",false],[base_path+"/__init__.py","py",true]])} -for(var j=0;notfound && j < modpaths.length;++j){try{var file_info=modpaths[j],module={__name__:fullname,$is_package:false} -loader_data.code=$download_module(module,file_info[0],undefined) -notfound=false -loader_data.type=file_info[1] -loader_data.is_package=file_info[2] -if(hint===undefined){self.hint=file_info[1] -$B.path_importer_cache[self.path_entry]=self} -if(loader_data.is_package){ -$B.path_importer_cache[base_path+'/']= -url_hook.$factory(base_path+'/',self.hint)} -loader_data.path=file_info[0]}catch(err){}} -if(!notfound){return new_spec({name :fullname,loader:finder_path,origin :loader_data.path, -submodule_search_locations:loader_data.is_package? -[base_path]:_b_.None,loader_state:loader_data, -cached:_b_.None,parent:loader_data.is_package? fullname : -parent_package(fullname),has_location:_b_.True})} -return _b_.None},invalidate_caches :function(self){}} -url_hook.$factory=function(path_entry,hint){return{ -__class__:url_hook,path_entry:path_entry.endsWith("/")? path_entry :path_entry+"/",hint:hint}} -$B.set_func_names(url_hook,"") -$B.path_importer_cache={}; -var _sys_paths=[[$B.script_dir+"/","py"],[$B.brython_path+"Lib/","py"],[$B.brython_path+"Lib/site-packages/","py"],[$B.brython_path+"libs/","js"]] -for(var i=0;i < _sys_paths.length;++i){var _path=_sys_paths[i],_type=_path[1] -_path=_path[0] -$B.path_importer_cache[_path]=url_hook.$factory(_path,_type)} -function import_error(mod_name){var exc=_b_.ImportError.$factory(mod_name) -exc.name=mod_name -throw exc} -$B.$__import__=function(mod_name,globals,locals,fromlist,level){ -var from_stdlib=false -if(globals.$jsobj && globals.$jsobj.__file__){var file=globals.$jsobj.__file__ -if((file.startsWith($B.brython_path+"Lib/")&& -! file.startsWith($B.brython_path+"Lib/site-packages/"))|| -file.startsWith($B.brython_path+"libs/")|| -file.startsWith("VFS.")){from_stdlib=true}} -var modobj=$B.imported[mod_name],parsed_name=mod_name.split('.'),has_from=fromlist.length > 0 -if(modobj==_b_.None){ -import_error(mod_name)} -if(modobj===undefined){ -if($B.is_none(fromlist)){fromlist=[]} -for(var i=0,modsep="",_mod_name="",len=parsed_name.length-1,__path__=_b_.None;i <=len;++i){var _parent_name=_mod_name; -_mod_name+=modsep+parsed_name[i] -modsep="." -var modobj=$B.imported[_mod_name] -if(modobj==_b_.None){ -import_error(_mod_name)}else if(modobj===undefined){try{$B.import_hooks(_mod_name,__path__,from_stdlib)}catch(err){delete $B.imported[_mod_name] -throw err} -if($B.is_none($B.imported[_mod_name])){import_error(_mod_name)}else{ -if(_parent_name){_b_.setattr($B.imported[_parent_name],parsed_name[i],$B.imported[_mod_name])}}} -if(i < len){try{__path__=$B.$getattr($B.imported[_mod_name],"__path__")}catch(e){ -if(i==len-1 && -$B.imported[_mod_name][parsed_name[len]]&& -$B.imported[_mod_name][parsed_name[len]].__class__=== -module){return $B.imported[_mod_name][parsed_name[len]]} -if(has_from){ -import_error(mod_name)}else{ -var exc=_b_.ModuleNotFoundError.$factory() -exc.msg="No module named '"+mod_name+"'; '"+ -_mod_name+"' is not a package" -exc.args=$B.fast_tuple([exc.msg]) -exc.name=mod_name -exc.path=_b_.None -throw exc}}}}}else{if($B.imported[parsed_name[0]]&& -parsed_name.length==2){try{$B.$setattr($B.imported[parsed_name[0]],parsed_name[1],modobj)}catch(err){console.log("error",parsed_name,modobj) -throw err}}} -if(fromlist.length > 0){ -return $B.imported[mod_name]}else{ -return $B.imported[parsed_name[0]]}} -$B.$import=function(mod_name,fromlist,aliases,locals){fromlist=fromlist===undefined ?[]:fromlist -aliases=aliases===undefined ?{}:aliases -locals=locals===undefined ?{}:locals -var parts=mod_name.split(".") -if(mod_name[mod_name.length-1]=="."){parts.pop()} -var norm_parts=[],prefix=true -for(var i=0,len=parts.length;i < len;i++){var p=parts[i] -if(prefix && p==""){ -elt=norm_parts.pop() -if(elt===undefined){throw _b_.ImportError.$factory("Parent module '' not loaded, "+ -"cannot perform relative import")}}else{prefix=false; -norm_parts.push(p.substr(0,2)=="$$" ? p.substr(2):p)}} -var mod_name=norm_parts.join(".") -if($B.$options.debug==10){console.log("$import "+mod_name) -console.log("use VFS ? "+$B.use_VFS) -console.log("use static stdlib paths ? "+$B.static_stdlib_import)} -var current_frame=$B.frames_stack[$B.frames_stack.length-1],_globals=current_frame[3],__import__=_globals["__import__"],globals=$B.obj_dict(_globals) -if(__import__===undefined){ -__import__=$B.$__import__} -var importer=typeof __import__=="function" ? -__import__ : -$B.$getattr(__import__,"__call__"),modobj=importer(mod_name,globals,undefined,fromlist,0) -if(! fromlist ||fromlist.length==0){ -var alias=aliases[mod_name] -if(alias){locals[alias]=$B.imported[mod_name]}else{locals[$B.to_alias(norm_parts[0])]=modobj}}else{var __all__=fromlist,thunk={} -if(fromlist && fromlist[0]=="*"){__all__=$B.$getattr(modobj,"__all__",thunk); -if(__all__ !==thunk){ -aliases={}}} -if(__all__===thunk){ -for(var attr in modobj){if(attr[0]!=="_"){locals[attr]=modobj[attr]}}}else{ -for(var i=0,l=__all__.length;i < l;++i){var name=__all__[i] -var alias=aliases[name]||name -try{ -locals[alias]=$B.$getattr(modobj,name)}catch($err1){ -try{var name1=$B.from_alias(name) -$B.$getattr(__import__,'__call__')(mod_name+'.'+name1,globals,undefined,[],0) -locals[alias]=$B.$getattr(modobj,name1)}catch($err3){ -if(mod_name==="__future__"){ -var frame=$B.last($B.frames_stack),line_info=frame[3].$line_info,line_elts=line_info.split(','),line_num=parseInt(line_elts[0]) -$B.$SyntaxError(frame[2],"future feature "+name+" is not defined",current_frame[3].src,undefined,line_num)} -if($err3.$py_error){var errname=$err3.__class__.$infos.__name__ -if($err3.__class__ !==_b_.ImportError && -$err3.__class__ !==_b_.ModuleNotFoundError){$B.handle_error($err3)} -throw _b_.ImportError.$factory( -"cannot import name '"+name+"'")} -if($B.debug > 1){console.log($err3) -console.log($B.last($B.frames_stack))} -throw _b_.ImportError.$factory( -"cannot import name '"+name+"'")}}}} -return locals}} -$B.import_all=function(locals,module){ -for(var attr in module){if(attr.startsWith("$$")){locals[attr]=module[attr]}else if('_$'.indexOf(attr.charAt(0))==-1){locals[attr]=module[attr]}}} -$B.$path_hooks=[url_hook] -$B.$meta_path=[finder_VFS,finder_stdlib_static,finder_path] -$B.finders={VFS:finder_VFS,stdlib_static:finder_stdlib_static,path:finder_path,CPython:finder_cpython} -function optimize_import_for_path(path,filetype){if(path.slice(-1)!="/"){path=path+"/" } -var value=(filetype=='none')? _b_.None : -url_hook.$factory(path,filetype) -$B.path_importer_cache[path]=value} -var Loader={__class__:$B.$type,__mro__:[_b_.object],__name__ :"Loader"} -var _importlib_module={__class__ :module,__name__ :"_importlib",Loader:Loader,VFSFinder:finder_VFS,StdlibStatic:finder_stdlib_static,ImporterPath:finder_path,UrlPathFinder:url_hook,optimize_import_for_path :optimize_import_for_path} -_importlib_module.__repr__=_importlib_module.__str__=function(){return ""} -$B.imported["_importlib"]=_importlib_module})(__BRYTHON__) -; -;(function($B){var bltns=$B.InjectBuiltins() -eval(bltns) -var object=_b_.object -function $err(op,other){var msg="unsupported operand type(s) for "+op+ -": 'float' and '"+$B.class_name(other)+"'" -throw _b_.TypeError.$factory(msg)} -function float_value(obj){ -return obj.$brython_value !==undefined ? obj.$brython_value :obj} -var float={__class__:_b_.type,__dir__:object.__dir__,$infos:{__module__:"builtins",__name__:"float"},$is_class:true,$native:true,$descriptors:{"numerator":true,"denominator":true,"imag":true,"real":true}} -float.numerator=function(self){return float_value(self)} -float.denominator=function(self){return _b_.int.$factory(1)} -float.imag=function(self){return _b_.int.$factory(0)} -float.real=function(self){return float_value(self)} -float.__float__=function(self){return float_value(self)} -float.as_integer_ratio=function(self){self=float_value(self) -if(self.valueOf()==Number.POSITIVE_INFINITY || -self.valueOf()==Number.NEGATIVE_INFINITY){throw _b_.OverflowError.$factory("Cannot pass infinity to "+ -"float.as_integer_ratio.")} -if(! Number.isFinite(self.valueOf())){throw _b_.ValueError.$factory("Cannot pass NaN to "+ -"float.as_integer_ratio.")} -var tmp=_b_.$frexp(self.valueOf()),fp=tmp[0],exponent=tmp[1] -for(var i=0;i < 300;i++){if(fp==Math.floor(fp)){break}else{fp*=2 -exponent--}} -numerator=float.$factory(fp) -py_exponent=abs(exponent) -denominator=1 -py_exponent=_b_.getattr(_b_.int.$factory(denominator),"__lshift__")(py_exponent) -if(exponent > 0){numerator=numerator*py_exponent}else{denominator=py_exponent} -return _b_.tuple.$factory([_b_.int.$factory(numerator),_b_.int.$factory(denominator)])} -float.__bool__=function(self){self=float_value(self) -return _b_.bool.$factory(self.valueOf())} -float.__eq__=function(self,other){self=float_value(self) -other=float_value(other) -if(isNaN(self)&& isNaN(other)){return false} -if(isinstance(other,_b_.int)){return self==other} -if(isinstance(other,float)){ -return self.valueOf()==other.valueOf()} -if(isinstance(other,_b_.complex)){if(other.$imag !=0){return false} -return self==other.$real} -return _b_.NotImplemented} -float.__floordiv__=function(self,other){self=float_value(self) -other=float_value(other) -if(isinstance(other,[_b_.int,float])){if(other.valueOf()==0){throw ZeroDivisionError.$factory('division by zero')} -return float.$factory(Math.floor(self/other))} -if(hasattr(other,"__rfloordiv__")){return getattr(other,"__rfloordiv__")(self)} -$err("//",other)} -float.fromhex=function(arg){ -if(! isinstance(arg,_b_.str)){throw _b_.ValueError.$factory("argument must be a string")} -var value=arg.trim() -switch(value.toLowerCase()){case "+inf": -case "inf": -case "+infinity": -case "infinity": -return $FloatClass(Infinity) -case "-inf": -case "-infinity": -return $FloatClass(-Infinity) -case "+nan": -case "nan": -return $FloatClass(Number.NaN) -case "-nan": -return $FloatClass(-Number.NaN) -case "": -throw _b_.ValueError.$factory("could not convert string to float")} -var _m=/^(\d*\.?\d*)$/.exec(value) -if(_m !==null){return $FloatClass(parseFloat(_m[1]))} -var _m=/^(\+|-)?(0x)?([0-9A-F]+\.?)?(\.[0-9A-F]+)?(p(\+|-)?\d+)?$/i.exec(value) -if(_m==null){throw _b_.ValueError.$factory("invalid hexadecimal floating-point string")} -var _sign=_m[1],_int=parseInt(_m[3]||'0',16),_fraction=_m[4]||'.0',_exponent=_m[5]||'p0' -if(_sign=="-"){_sign=-1}else{_sign=1} -var _sum=_int -for(var i=1,len=_fraction.length;i < len;i++){_sum+=parseInt(_fraction.charAt(i),16)/Math.pow(16,i)} -return new Number(_sign*_sum*Math.pow(2,parseInt(_exponent.substring(1))))} -float.__getformat__=function(arg){if(arg=="double" ||arg=="float"){return "IEEE, little-endian"} -throw _b_.ValueError.$factory("__getformat__() argument 1 must be "+ -"'double' or 'float'")} -function preformat(self,fmt){if(fmt.empty){return _b_.str.$factory(self)} -if(fmt.type && 'eEfFgGn%'.indexOf(fmt.type)==-1){throw _b_.ValueError.$factory("Unknown format code '"+fmt.type+ -"' for object of type 'float'")} -if(isNaN(self)){if(fmt.type=="f" ||fmt.type=="g"){return "nan"} -else{return "NAN"}} -if(self==Number.POSITIVE_INFINITY){if(fmt.type=="f" ||fmt.type=="g"){return "inf"} -else{return "INF"}} -if(fmt.precision===undefined && fmt.type !==undefined){fmt.precision=6} -if(fmt.type=="%"){self*=100} -if(fmt.type=="e"){var res=self.toExponential(fmt.precision),exp=parseInt(res.substr(res.search("e")+1)) -if(Math.abs(exp)< 10){res=res.substr(0,res.length-1)+"0"+ -res.charAt(res.length-1)} -return res} -if(fmt.precision !==undefined){ -var prec=fmt.precision -if(prec==0){return Math.round(self)+""} -var res=self.toFixed(prec),pt_pos=res.indexOf(".") -if(fmt.type !==undefined && -(fmt.type=="%" ||fmt.type.toLowerCase()=="f")){if(pt_pos==-1){res+="."+"0".repeat(fmt.precision)}else{var missing=fmt.precision-res.length+pt_pos+1 -if(missing > 0){res+="0".repeat(missing)}}}else if(fmt.type && fmt.type.toLowerCase()=="g"){var exp_fmt=preformat(self,{type:"e"}).split("e"),exp=parseInt(exp_fmt[1]) -if(-4 <=exp && exp < fmt.precision){res=preformat(self,{type:"f",precision:fmt.precision-1-exp})}else{res=preformat(self,{type:"e",precision:fmt.precision-1})} -var parts=res.split("e") -if(fmt.alternate){if(parts[0].search(/\./)==-1){parts[0]+='.'}}else{if(parts[1]){var signif=parts[0] -while(signif.endsWith("0")){signif=signif.substr(0,signif.length-1)} -if(signif.endsWith(".")){signif=signif.substr(0,signif.length-1)} -parts[0]=signif}} -res=parts.join("e") -if(fmt.type=="G"){res=res.toUpperCase()} -return res}else if(fmt.type===undefined){fmt.type="g" -res=preformat(self,fmt) -fmt.type=undefined}else{var res1=self.toExponential(fmt.precision-1),exp=parseInt(res1.substr(res1.search("e")+1)) -if(exp <-4 ||exp >=fmt.precision-1){var elts=res1.split("e") -while(elts[0].endsWith("0")){elts[0]=elts[0].substr(0,elts[0].length-1)} -res=elts.join("e")}}}else{var res=_b_.str.$factory(self)} -if(fmt.type===undefined ||"gGn".indexOf(fmt.type)!=-1){ -if(res.search("e")==-1){while(res.charAt(res.length-1)=="0"){res=res.substr(0,res.length-1)}} -if(res.charAt(res.length-1)=="."){if(fmt.type===undefined){res+="0"} -else{res=res.substr(0,res.length-1)}}} -if(fmt.sign !==undefined){if((fmt.sign==" " ||fmt.sign=="+" )&& self > 0){res=fmt.sign+res}} -if(fmt.type=="%"){res+="%"} -return res} -float.__format__=function(self,format_spec){self=float_value(self) -var fmt=new $B.parse_format_spec(format_spec) -fmt.align=fmt.align ||">" -var raw=preformat(self,fmt).split('.'),_int=raw[0] -if(fmt.comma){var len=_int.length,nb=Math.ceil(_int.length/3),chunks=[] -for(var i=0;i < nb;i++){chunks.push(_int.substring(len-3*i-3,len-3*i))} -chunks.reverse() -raw[0]=chunks.join(",")} -return $B.format_width(raw.join("."),fmt)} -float.__hash__=function(self){if(self===undefined){return float.__hashvalue__ ||$B.$py_next_hash--} -var _v=self.valueOf() -if(_v===Infinity){return 314159} -if(_v===-Infinity){return-271828} -if(isNaN(_v)){return 0} -if(_v==Math.round(_v)){return Math.round(_v)} -var r=_b_.$frexp(_v) -r[0]*=Math.pow(2,31) -var hipart=_b_.int.$factory(r[0]) -r[0]=(r[0]-hipart)*Math.pow(2,31) -var x=hipart+_b_.int.$factory(r[0])+(r[1]<< 15) -return x & 0xFFFFFFFF} -_b_.$isninf=function(x){var x1=x -if(isinstance(x,float)){x1=x.valueOf()} -return x1==-Infinity ||x1==Number.NEGATIVE_INFINITY} -_b_.$isinf=function(x){var x1=x -if(isinstance(x,float)){x1=x.valueOf()} -return x1==Infinity ||x1==-Infinity || -x1==Number.POSITIVE_INFINITY ||x1==Number.NEGATIVE_INFINITY} -_b_.$fabs=function(x){return x > 0 ? float.$factory(x):float.$factory(-x)} -_b_.$frexp=function(x){var x1=x -if(isinstance(x,float)){x1=x.valueOf()} -if(isNaN(x1)||_b_.$isinf(x1)){return[x1,-1]} -if(x1==0){return[0,0]} -var sign=1,ex=0,man=x1 -if(man < 0.){sign=-sign -man=-man} -while(man < 0.5){man*=2.0 -ex--} -while(man >=1.0){man*=0.5 -ex++} -man*=sign -return[man,ex]} -_b_.$ldexp=function(x,i){if(_b_.$isninf(x)){return float.$factory('-inf')} -if(_b_.$isinf(x)){return float.$factory('inf')} -var y=x -if(isinstance(x,float)){y=x.valueOf()} -if(y==0){return y} -var j=i -if(isinstance(i,float)){j=i.valueOf()} -return y*Math.pow(2,j)} -float.hex=function(self){ -self=float_value(self) -var DBL_MANT_DIG=53, -TOHEX_NBITS=DBL_MANT_DIG+3-(DBL_MANT_DIG+2)% 4 -switch(self.valueOf()){case Infinity: -case-Infinity: -case Number.NaN: -case-Number.NaN: -return self -case-0: -return "-0x0.0p0" -case 0: -return "0x0.0p0"} -var _a=_b_.$frexp(_b_.$fabs(self.valueOf())),_m=_a[0],_e=_a[1],_shift=1-Math.max(-1021-_e,0) -_m=_b_.$ldexp(_m,_shift) -_e-=_shift -var _int2hex="0123456789ABCDEF".split(""),_s=_int2hex[Math.floor(_m)] -_s+='.' -_m-=Math.floor(_m) -for(var i=0;i <(TOHEX_NBITS-1)/4;i++){_m*=16.0 -_s+=_int2hex[Math.floor(_m)] -_m-=Math.floor(_m)} -var _esign="+" -if(_e < 0){_esign="-" -_e=-_e} -if(self.value < 0){return "-0x"+_s+"p"+_esign+_e} -return "0x"+_s+"p"+_esign+_e} -float.__init__=function(self,value){return _b_.None} -float.__int__=function(self){return parseInt(self)} -float.is_integer=function(self){return _b_.int.$factory(self)==self} -float.__mod__=function(self,other){ -self=float_value(self) -other=float_value(other) -if(other==0){throw ZeroDivisionError.$factory("float modulo")} -if(isinstance(other,_b_.int)){return new Number((self % other+other)% other)} -if(isinstance(other,float)){ -var q=Math.floor(self/other),r=self-other*q -return new Number(r)} -if(isinstance(other,_b_.bool)){var bool_value=0 -if(other.valueOf()){bool_value=1} -return new Number((self % bool_value+bool_value)% bool_value)} -if(hasattr(other,"__rmod__")){return getattr(other,"__rmod__")(self)} -$err("%",other)} -float.__mro__=[object] -float.__mul__=function(self,other){self=float_value(self) -other=float_value(other) -if(isinstance(other,_b_.int)){if(other.__class__==$B.long_int){return new Number(self*parseFloat(other.value))} -return new Number(self*other)} -if(isinstance(other,float)){return new Number(self*float_value(other))} -if(isinstance(other,_b_.bool)){var bool_value=0 -if(other.valueOf()){bool_value=1} -return new Number(self*bool_value)} -if(isinstance(other,_b_.complex)){return $B.make_complex(float.$factory(self*other.$real),float.$factory(self*other.$imag))} -if(hasattr(other,"__rmul__")){return getattr(other,"__rmul__")(self)} -$err("*",other)} -float.__ne__=function(self,other){var res=float.__eq__(self,other) -return res===_b_.NotImplemented ? res :! res} -float.__neg__=function(self,other){return float.$factory(-float_value(self))} -float.__new__=function(cls,value){if(cls===undefined){throw _b_.TypeError.$factory("float.__new__(): not enough arguments")}else if(! _b_.isinstance(cls,_b_.type)){throw _b_.TypeError.$factory("float.__new__(X): X is not a type object")} -if(cls===float){return float.$factory(value)} -return{ -__class__:cls,__dict__:$B.empty_dict(),$brython_value:value ||0}} -float.__pos__=function(self){return float_value(self)} -float.__pow__=function(self,other){self=float_value(self) -other=float_value(other) -var other_int=isinstance(other,_b_.int) -if(other_int ||isinstance(other,float)){if(self==1){return self} -if(other==0){return new Number(1)} -if(self==-1 && -(! isFinite(other)||other.__class__===$B.long_int || -! $B.is_safe_int(other))&& -! isNaN(other)){return new Number(1)}else if(self==0 && isFinite(other)&& other < 0){throw _b_.ZeroDivisionError.$factory("0.0 cannot be raised "+ -"to a negative power")}else if(self==Number.NEGATIVE_INFINITY && ! isNaN(other)){if(other < 0 && other % 2==1){return new Number(-0.0)}else if(other < 0){return new Number(0)} -else if(other > 0 && other % 2==1){return Number.NEGATIVE_INFINITY}else{return Number.POSITIVE_INFINITY}}else if(self==Number.POSITIVE_INFINITY && ! isNaN(other)){return other > 0 ? self :new Number(0)} -if(other==Number.NEGATIVE_INFINITY && ! isNaN(self)){return Math.abs(self)< 1 ? Number.POSITIVE_INFINITY : -new Number(0)}else if(other==Number.POSITIVE_INFINITY && ! isNaN(self)){return Math.abs(self)< 1 ? new Number(0): -Number.POSITIVE_INFINITY} -if(self < 0 && -! _b_.getattr(other,"__eq__")(_b_.int.$factory(other))){ -return _b_.complex.__pow__($B.make_complex(self,0),other)} -return float.$factory(Math.pow(self,other))}else if(isinstance(other,_b_.complex)){var preal=Math.pow(self,other.$real),ln=Math.log(self) -return $B.make_complex(preal*Math.cos(ln),preal*Math.sin(ln))} -if(hasattr(other,"__rpow__")){return getattr(other,"__rpow__")(self)} -$err("** or pow()",other)} -float.__repr__=float.__str__=function(self){self=float_value(self) -if(self.valueOf()==Infinity){return 'inf'} -if(self.valueOf()==-Infinity){return '-inf'} -if(isNaN(self.valueOf())){return 'nan'} -var res=self.valueOf()+"" -if(res.indexOf(".")==-1){res+=".0"} -var x,y -[x,y]=res.split('.') -if(x.length > 16){var exp=x.length-1,int_part=x[0],dec_part=x.substr(1)+y -while(dec_part.endsWith("0")){dec_part=dec_part.substr(0,dec_part.length-1)} -var mant=int_part -if(dec_part.length > 0){mant+='.'+dec_part} -return mant+'e+'+exp}else if(x=="0"){var exp=0 -while(exp < y.length && y.charAt(exp)=="0"){exp++} -if(exp > 3){ -var rest=y.substr(exp),exp=(exp+1).toString() -while(rest.endsWith("0")){rest=rest.substr(0,res.length-1)} -var mant=rest[0] -if(rest.length > 1){mant+='.'+rest.substr(1)} -if(exp.length==1){exp='0'+exp} -return mant+'e-'+exp}} -return _b_.str.$factory(res)} -float.__setattr__=function(self,attr,value){if(self.constructor===Number){if(float[attr]===undefined){throw _b_.AttributeError.$factory("'float' object has no attribute '"+ -attr+"'")}else{throw _b_.AttributeError.$factory("'float' object attribute '"+ -attr+"' is read-only")}} -self[attr]=value -return _b_.None} -float.__truediv__=function(self,other){self=float_value(self) -other=float_value(other) -if(isinstance(other,[_b_.int,float])){if(other.valueOf()==0){throw ZeroDivisionError.$factory("division by zero")} -return float.$factory(self/other)} -if(isinstance(other,_b_.complex)){var cmod=other.$real*other.$real+other.$imag*other.$imag -if(cmod==0){throw ZeroDivisionError.$factory("division by zero")} -return $B.make_complex(float.$factory(self*other.$real/cmod),float.$factory(-self*other.$imag/cmod))} -if(hasattr(other,"__rtruediv__")){return getattr(other,"__rtruediv__")(self)} -$err("/",other)} -var $op_func=function(self,other){self=float_value(self) -other=float_value(other) -if(isinstance(other,_b_.int)){if(typeof other=="boolean"){return other ? self-1 :self}else if(other.__class__===$B.long_int){return float.$factory(self-parseInt(other.value))}else{return float.$factory(self-other)}} -if(isinstance(other,float)){return float.$factory(self-other)} -if(isinstance(other,_b_.bool)){var bool_value=0 -if(other.valueOf()){bool_value=1} -return float.$factory(self-bool_value)} -if(isinstance(other,_b_.complex)){return $B.make_complex(self-other.$real,-other.$imag)} -if(hasattr(other,"__rsub__")){return getattr(other,"__rsub__")(self)} -$err("-",other)} -$op_func+="" -var $ops={"+":"add","-":"sub"} -for(var $op in $ops){var $opf=$op_func.replace(/-/gm,$op) -$opf=$opf.replace(/__rsub__/gm,"__r"+$ops[$op]+"__") -eval("float.__"+$ops[$op]+"__ = "+$opf)} -var $comp_func=function(self,other){self=float_value(self) -other=float_value(other) -if(isinstance(other,_b_.int)){if(other.__class__===$B.long_int){return self > parseInt(other.value)} -return self > other.valueOf()} -if(isinstance(other,float)){return self > other} -if(isinstance(other,_b_.bool)){return self.valueOf()> _b_.bool.__hash__(other)} -if(hasattr(other,"__int__")||hasattr(other,"__index__")){return _b_.int.__gt__(self,$B.$GetInt(other))} -var inv_op=getattr(other,"__le__",None) -if(inv_op !==None){return inv_op(self)} -throw _b_.TypeError.$factory( -"unorderable types: float() > "+$B.class_name(other)+"()")} -$comp_func+="" -for(var $op in $B.$comps){eval("float.__"+$B.$comps[$op]+"__ = "+ -$comp_func.replace(/>/gm,$op). -replace(/__gt__/gm,"__"+$B.$comps[$op]+"__"). -replace(/__le__/,"__"+$B.$inv_comps[$op]+"__"))} -$B.make_rmethods(float) -var $notimplemented=function(self,other){throw _b_.TypeError.$factory( -"unsupported operand types for OPERATOR: 'float' and '"+ -$B.class_name(other)+"'")} -$notimplemented+="" -for(var $op in $B.$operators){ -if($B.augmented_assigns[$op]===undefined){var $opfunc="__"+$B.$operators[$op]+"__" -if(float[$opfunc]===undefined){eval("float."+$opfunc+"="+ -$notimplemented.replace(/OPERATOR/gm,$op))}}} -function $FloatClass(value){return new Number(value)} -function to_digits(s){ -var arabic_digits="\u0660\u0661\u0662\u0663\u0664\u0665\u0666\u0667\u0668\u0669",res="" -for(var i=0;i < s.length;i++){var x=arabic_digits.indexOf(s[i]) -if(x >-1){res+=x} -else{res+=s[i]}} -return res} -float.$factory=function(value){switch(value){case undefined: -return $FloatClass(0.0) -case Number.MAX_VALUE: -return $FloatClass(Infinity) -case-Number.MAX_VALUE: -return $FloatClass(-Infinity) -case true: -return new Number(1) -case false: -return new Number(0)} -if(typeof value=="number"){return new Number(value)} -if(isinstance(value,float)){return float_value(value)} -if(isinstance(value,bytes)){var s=getattr(value,"decode")("latin-1") -return float.$factory(getattr(value,"decode")("latin-1"))} -if(typeof value=="string"){value=value.trim() -switch(value.toLowerCase()){case "+inf": -case "inf": -case "+infinity": -case "infinity": -return Number.POSITIVE_INFINITY -case "-inf": -case "-infinity": -return Number.NEGATIVE_INFINITY -case "+nan": -case "nan": -return Number.NaN -case "-nan": -return-Number.NaN -case "": -throw _b_.ValueError.$factory("count not convert string to float") -default: -value=value.charAt(0)+value.substr(1).replace(/_/g,"") -value=to_digits(value) -if(isFinite(value))return $FloatClass(eval(value)) -else{ -_b_.str.encode(value,"latin-1") -throw _b_.ValueError.$factory( -"Could not convert to float(): '"+ -_b_.str.$factory(value)+"'")}}} -var klass=value.__class__ ||$B.get_class(value),num_value=$B.to_num(value,["__float__","__index__"]) -if(num_value !==null){return num_value} -throw _b_.TypeError.$factory("float() argument must be a string or a "+ -"number, not '"+$B.class_name(value)+"'")} -$B.$FloatClass=$FloatClass -$B.set_func_names(float,"builtins") -var FloatSubclass=$B.FloatSubclass={__class__:_b_.type,__mro__:[object],$infos:{__module__:"builtins",__name__:"float"},$is_class:true} -for(var $attr in float){if(typeof float[$attr]=="function"){FloatSubclass[$attr]=(function(attr){return function(){var args=[],pos=0 -if(arguments.length > 0){var args=[arguments[0].valueOf()],pos=1 -for(var i=1,len=arguments.length;i < len;i++){args[pos++]=arguments[i]}} -return float[attr].apply(null,args)}})($attr)}} -$B.set_func_names(FloatSubclass,"builtins") -_b_.float=float})(__BRYTHON__) -; -;(function($B){var _b_=$B.builtins -function $err(op,other){var msg="unsupported operand type(s) for "+op+ -" : 'int' and '"+$B.class_name(other)+"'" -throw _b_.TypeError.$factory(msg)} -function int_value(obj){ -return obj.$brython_value !==undefined ? obj.$brython_value :obj} -var int={__class__:_b_.type,__dir__:_b_.object.__dir__,$infos:{__module__:"builtins",__name__:"int"},$is_class:true,$native:true,$descriptors:{"numerator":true,"denominator":true,"imag":true,"real":true}} -int.as_integer_ratio=function(){var $=$B.args("as_integer_ratio",1,{self:null},["self"],arguments,{},null,null) -return $B.$list([$.self,1])} -int.from_bytes=function(){var $=$B.args("from_bytes",3,{bytes:null,byteorder:null,signed:null},["bytes","byteorder","signed"],arguments,{signed:false},null,null) -var x=$.bytes,byteorder=$.byteorder,signed=$.signed,_bytes,_len -if(_b_.isinstance(x,[_b_.bytes,_b_.bytearray])){_bytes=x.source -_len=x.source.length}else{_bytes=_b_.list.$factory(x) -_len=_bytes.length -for(var i=0;i < _len;i++){_b_.bytes.$factory([_bytes[i]])}} -switch(byteorder){case "big": -var num=_bytes[_len-1] -var _mult=256 -for(var i=_len-2;i >=0;i--){ -num=$B.add($B.mul(_mult,_bytes[i]),num) -_mult=$B.mul(_mult,256)} -if(! signed){return num} -if(_bytes[0]< 128){return num} -return $B.sub(num,_mult) -case "little": -var num=_bytes[0] -if(num >=128){num=num-256} -var _mult=256 -for(var i=1;i < _len;i++){num=$B.add($B.mul(_mult,_bytes[i]),num) -_mult=$B.mul(_mult,256)} -if(! signed){return num} -if(_bytes[_len-1]< 128){return num} -return $B.sub(num,_mult)} -throw _b_.ValueError.$factory("byteorder must be either 'little' or 'big'")} -int.to_bytes=function(){var $=$B.args("to_bytes",3,{self:null,len:null,byteorder:null},["self","len","byteorder"],arguments,{},"args","kw"),self=$.self,len=$.len,byteorder=$.byteorder,kwargs=$.kw -if(! _b_.isinstance(len,_b_.int)){throw _b_.TypeError.$factory("integer argument expected, got "+ -$B.class_name(len))} -if(["little","big"].indexOf(byteorder)==-1){throw _b_.ValueError.$factory("byteorder must be either 'little' or 'big'")} -var signed=kwargs.$string_dict["signed"]||false,res=[] -if(self < 0){if(! signed){throw _b_.OverflowError.$factory("can't convert negative int to unsigned")} -self=Math.pow(256,len)+self} -var value=self -while(true){var quotient=Math.floor(value/256),rest=value-256*quotient -res.push(rest) -if(quotient==0){break} -value=quotient} -if(res.length > len){throw _b_.OverflowError.$factory("int too big to convert")}else{while(res.length < len){res=res.concat([0])}} -if(byteorder=="big"){res=res.reverse()} -return{ -__class__:_b_.bytes,source:res}} -int.__abs__=function(self){return _b_.abs(self)} -int.__bool__=function(self){return int_value(self).valueOf()==0 ? false :true} -int.__ceil__=function(self){return Math.ceil(int_value(self))} -int.__divmod__=function(self,other){return $B.fast_tuple([int.__floordiv__(self,other),int.__mod__(self,other)])} -int.__eq__=function(self,other){ -if(other===undefined){return self===int} -if(_b_.isinstance(other,int)){return self.valueOf()==int_value(other).valueOf()} -if(_b_.isinstance(other,_b_.float)){return self.valueOf()==other.valueOf()} -if(_b_.isinstance(other,_b_.complex)){if(other.$imag !=0){return False} -return self.valueOf()==other.$real} -return _b_.NotImplemented} -int.__float__=function(self){return new Number(self)} -function preformat(self,fmt){if(fmt.empty){return _b_.str.$factory(self)} -if(fmt.type && 'bcdoxXn'.indexOf(fmt.type)==-1){throw _b_.ValueError.$factory("Unknown format code '"+fmt.type+ -"' for object of type 'int'")} -var res -switch(fmt.type){case undefined: -case "d": -res=self.toString() -break -case "b": -res=(fmt.alternate ? "0b" :"")+self.toString(2) -break -case "c": -res=_b_.chr(self) -break -case "o": -res=(fmt.alternate ? "0o" :"")+self.toString(8) -break -case "x": -res=(fmt.alternate ? "0x" :"")+self.toString(16) -break -case "X": -res=(fmt.alternate ? "0X" :"")+self.toString(16).toUpperCase() -break -case "n": -return self } -if(fmt.sign !==undefined){if((fmt.sign==" " ||fmt.sign=="+" )&& self >=0){res=fmt.sign+res}} -return res} -int.__format__=function(self,format_spec){var fmt=new $B.parse_format_spec(format_spec) -if(fmt.type && 'eEfFgG%'.indexOf(fmt.type)!=-1){ -return _b_.float.__format__(self,format_spec)} -fmt.align=fmt.align ||">" -var res=preformat(self,fmt) -if(fmt.comma){var sign=res[0]=="-" ? "-" :"",rest=res.substr(sign.length),len=rest.length,nb=Math.ceil(rest.length/3),chunks=[] -for(var i=0;i < nb;i++){chunks.push(rest.substring(len-3*i-3,len-3*i))} -chunks.reverse() -res=sign+chunks.join(",")} -return $B.format_width(res,fmt)} -int.__floordiv__=function(self,other){if(other.__class__===$B.long_int){return $B.long_int.__floordiv__($B.long_int.$factory(self),other)} -if(_b_.isinstance(other,int)){other=int_value(other) -if(other==0){throw _b_.ZeroDivisionError.$factory("division by zero")} -return Math.floor(self/other)} -if(_b_.isinstance(other,_b_.float)){if(!other.valueOf()){throw _b_.ZeroDivisionError.$factory("division by zero")} -return Math.floor(self/other)} -if(_b_.hasattr(other,"__rfloordiv__")){return $B.$getattr(other,"__rfloordiv__")(self)} -$err("//",other)} -int.__hash__=function(self){if(self===undefined){return int.__hashvalue__ ||$B.$py_next_hash--} -return self.valueOf()} -int.__index__=function(self){return int_value(self)} -int.__init__=function(self,value){if(value===undefined){value=0} -self.toString=function(){return value} -return _b_.None} -int.__int__=function(self){return self} -int.__invert__=function(self){return ~self} -int.__lshift__=function(self,other){if(_b_.isinstance(other,int)){other=int_value(other) -return int.$factory($B.long_int.__lshift__($B.long_int.$factory(self),$B.long_int.$factory(other)))} -var rlshift=$B.$getattr(other,"__rlshift__",_b_.None) -if(rlshift !==_b_.None){return rlshift(self)} -$err("<<",other)} -int.__mod__=function(self,other){ -if(_b_.isinstance(other,_b_.tuple)&& other.length==1){other=other[0]} -if(other.__class__===$B.long_int){return $B.long_int.__mod__($B.long_int.$factory(self),other)} -if(_b_.isinstance(other,[int,_b_.float,bool])){other=int_value(other) -if(other===false){other=0} -else if(other===true){other=1} -if(other==0){throw _b_.ZeroDivisionError.$factory( -"integer division or modulo by zero")} -return(self % other+other)% other} -if(_b_.hasattr(other,"__rmod__")){return $B.$getattr(other,"__rmod__")(self)} -$err("%",other)} -int.__mro__=[_b_.object] -int.__mul__=function(self,other){var val=self.valueOf() -if(typeof other==="string"){return other.repeat(val)} -if(_b_.isinstance(other,int)){other=int_value(other) -var res=self*other -if(res > $B.min_int && res < $B.max_int){return res} -else{return int.$factory($B.long_int.__mul__($B.long_int.$factory(self),$B.long_int.$factory(other)))}} -if(_b_.isinstance(other,_b_.float)){return new Number(self*other)} -if(_b_.isinstance(other,_b_.bool)){if(other.valueOf()){return self} -return int.$factory(0)} -if(_b_.isinstance(other,_b_.complex)){return $B.make_complex(int.__mul__(self,other.$real),int.__mul__(self,other.$imag))} -if(_b_.isinstance(other,[_b_.list,_b_.tuple])){var res=[] -var $temp=other.slice(0,other.length) -for(var i=0;i < val;i++){res=res.concat($temp)} -if(_b_.isinstance(other,_b_.tuple)){res=_b_.tuple.$factory(res)} -return res} -if(_b_.hasattr(other,"__rmul__")){return $B.$getattr(other,"__rmul__")(self)} -$err("*",other)} -int.__ne__=function(self,other){var res=int.__eq__(self,other) -return(res===_b_.NotImplemented)? res :!res} -int.__neg__=function(self){return-self} -int.__new__=function(cls,value){if(cls===undefined){throw _b_.TypeError.$factory("int.__new__(): not enough arguments")}else if(! _b_.isinstance(cls,_b_.type)){throw _b_.TypeError.$factory("int.__new__(X): X is not a type object")} -if(cls===int){return int.$factory(value)} -return{ -__class__:cls,__dict__:$B.empty_dict(),$brython_value:value ||0}} -int.__pos__=function(self){return self} -function extended_euclidean(a,b){var d,u,v -if(b==0){return[a,1,0]}else{[d,u,v]=extended_euclidean(b,a % b) -return[d,v,u-Math.floor(a/b)*v]}} -$B.use_bigint=0 -int.__pow__=function(self,other,z){if(typeof other=="number" ||_b_.isinstance(other,int)){other=int_value(other) -switch(other.valueOf()){case 0: -return int.$factory(1) -case 1: -return int.$factory(self.valueOf())} -if(z !==undefined && z !==_b_.None){ -if(z==1){return 0} -var result=1,base=self % z,exponent=other,long_int=$B.long_int -if(exponent < 0){var gcd,inv,_ -[gcd,inv,_]=extended_euclidean(self,z) -if(gcd !==1){throw _b_.ValueError.$factory("not relative primes: "+ -self+' and '+z)} -return int.__pow__(inv,-exponent,z)} -while(exponent > 0){if(exponent % 2==1){if(result*base > $B.max_int){result=long_int.__mul__( -long_int.$factory(result),long_int.$factory(base)) -result=long_int.__mod__(result,z)}else{result=(result*base)% z}} -exponent=exponent >> 1 -if(base*base > $B.max_int){base=long_int.__mul__(long_int.$factory(base),long_int.$factory(base)) -base=long_int.__mod__(base,z)}else{base=(base*base)% z}} -return result} -var res=Math.pow(self.valueOf(),other.valueOf()) -if(res > $B.min_int && res < $B.max_int){return res} -else if(res !==Infinity && !isFinite(res)){return res} -else{if($B.BigInt){$B.use_bigint++ -return{ -__class__:$B.long_int,value:($B.BigInt(self)**$B.BigInt(other)).toString(),pos:true}} -return $B.long_int.__pow__($B.long_int.$from_int(self),$B.long_int.$from_int(other))}} -if(_b_.isinstance(other,_b_.float)){if(self >=0){return new Number(Math.pow(self,other.valueOf()))} -else{ -return _b_.complex.__pow__($B.make_complex(self,0),other)}}else if(_b_.isinstance(other,_b_.complex)){var preal=Math.pow(self,other.$real),ln=Math.log(self) -return $B.make_complex(preal*Math.cos(ln),preal*Math.sin(ln))} -var rpow=$B.$getattr(other,"__rpow__",_b_.None) -if(rpow !==_b_.None){return rpow(self)} -$err("**",other)} -int.__repr__=function(self){if(self===int){return ""} -return self.toString()} -int.__rshift__=function(self,other){if(_b_.isinstance(other,int)){other=int_value(other) -return int.$factory($B.long_int.__rshift__($B.long_int.$factory(self),$B.long_int.$factory(other)))} -var rrshift=$B.$getattr(other,"__rrshift__",_b_.None) -if(rrshift !==_b_.None){return rrshift(self)} -$err('>>',other)} -int.__setattr__=function(self,attr,value){if(typeof self=="number"){if(int.$factory[attr]===undefined){throw _b_.AttributeError.$factory( -"'int' object has no attribute '"+attr+"'")}else{throw _b_.AttributeError.$factory( -"'int' object attribute '"+attr+"' is read-only")}} -_b_.dict.$setitem(self.__dict__,attr,value) -return _b_.None} -int.__str__=int.__repr__ -int.__truediv__=function(self,other){if(_b_.isinstance(other,int)){other=int_value(other) -if(other==0){throw _b_.ZeroDivisionError.$factory("division by zero")} -if(other.__class__===$B.long_int){return new Number(self/parseInt(other.value))} -return new Number(self/other)} -if(_b_.isinstance(other,_b_.float)){if(!other.valueOf()){throw _b_.ZeroDivisionError.$factory("division by zero")} -return new Number(self/other)} -if(_b_.isinstance(other,_b_.complex)){var cmod=other.$real*other.$real+other.$imag*other.$imag -if(cmod==0){throw _b_.ZeroDivisionError.$factory("division by zero")} -return $B.make_complex(self*other.$real/cmod,-self*other.$imag/cmod)} -if(_b_.hasattr(other,"__rtruediv__")){return $B.$getattr(other,"__rtruediv__")(self)} -$err("/",other)} -int.bit_length=function(self){s=_b_.bin(self) -s=$B.$getattr(s,"lstrip")("-0b") -return s.length } -int.numerator=function(self){return self} -int.denominator=function(self){return int.$factory(1)} -int.imag=function(self){return int.$factory(0)} -int.real=function(self){return self} -$B.max_int32=(1 << 30)*2-1 -$B.min_int32=-$B.max_int32 -var $op_func=function(self,other){if(_b_.isinstance(other,int)){if(other.__class__===$B.long_int){return $B.long_int.__sub__($B.long_int.$factory(self),$B.long_int.$factory(other))} -other=int_value(other) -if(self > $B.max_int32 ||self < $B.min_int32 || -other > $B.max_int32 ||other < $B.min_int32){return $B.long_int.__sub__($B.long_int.$factory(self),$B.long_int.$factory(other))} -return self-other} -if(_b_.isinstance(other,_b_.bool)){return self-other} -var rsub=$B.$getattr(other,"__rsub__",_b_.None) -if(rsub !==_b_.None){return rsub(self)} -$err("-",other)} -$op_func+="" -var $ops={"&":"and","|":"or","^":"xor"} -for(var $op in $ops){var opf=$op_func.replace(/-/gm,$op) -opf=opf.replace(new RegExp("sub","gm"),$ops[$op]) -eval("int.__"+$ops[$op]+"__ = "+opf)} -var $op_func=function(self,other){if(_b_.isinstance(other,int)){other=int_value(other) -if(typeof other=="number"){var res=self.valueOf()-other.valueOf() -if(res > $B.min_int && res < $B.max_int){return res} -else{return $B.long_int.__sub__($B.long_int.$factory(self),$B.long_int.$factory(other))}}else if(typeof other=="boolean"){return other ? self-1 :self}else{return $B.long_int.__sub__($B.long_int.$factory(self),$B.long_int.$factory(other))}} -if(_b_.isinstance(other,_b_.float)){return new Number(self-other)} -if(_b_.isinstance(other,_b_.complex)){return $B.make_complex(self-other.$real,-other.$imag)} -if(_b_.isinstance(other,_b_.bool)){var bool_value=0; -if(other.valueOf()){bool_value=1} -return self-bool_value} -if(_b_.isinstance(other,_b_.complex)){return $B.make_complex(self.valueOf()-other.$real,other.$imag)} -var rsub=$B.$getattr(other,"__rsub__",_b_.None) -if(rsub !==_b_.None){return rsub(self)} -console.log("err",self,other) -console.log($B.frames_stack.slice()) -throw $err("-",other)} -$op_func+="" -var $ops={"+":"add","-":"sub"} -for(var $op in $ops){var opf=$op_func.replace(/-/gm,$op) -opf=opf.replace(new RegExp("sub","gm"),$ops[$op]) -eval("int.__"+$ops[$op]+"__ = "+opf)} -var $comp_func=function(self,other){if(other.__class__===$B.long_int){return $B.long_int.__lt__(other,$B.long_int.$factory(self))} -if(_b_.isinstance(other,int)){other=int_value(other) -return self.valueOf()> other.valueOf()}else if(_b_.isinstance(other,_b_.float)){return self.valueOf()> other.valueOf()}else if(_b_.isinstance(other,_b_.bool)){return self.valueOf()> _b_.bool.__hash__(other)} -if(_b_.hasattr(other,"__int__")||_b_.hasattr(other,"__index__")){return int.__gt__(self,$B.$GetInt(other))} -return _b_.NotImplemented} -$comp_func+="" -for(var $op in $B.$comps){eval("int.__"+$B.$comps[$op]+"__ = "+ -$comp_func.replace(/>/gm,$op). -replace(/__gt__/gm,"__"+$B.$comps[$op]+"__"). -replace(/__lt__/,"__"+$B.$inv_comps[$op]+"__"))} -$B.make_rmethods(int) -var $valid_digits=function(base){var digits="" -if(base===0){return "0"} -if(base < 10){for(var i=0;i < base;i++){digits+=String.fromCharCode(i+48)} -return digits} -var digits="0123456789" -for(var i=10;i < base;i++){digits+=String.fromCharCode(i+55)} -return digits} -int.$factory=function(value,base){ -if(value===undefined){return 0} -if(typeof value=="number" && -(base===undefined ||base==10)){return parseInt(value)} -if(_b_.isinstance(value,_b_.complex)){throw _b_.TypeError.$factory("can't convert complex to int")} -var $ns=$B.args("int",2,{x:null,base:null},["x","base"],arguments,{"base":10},null,null),value=$ns["x"],base=$ns["base"] -if(_b_.isinstance(value,_b_.float)&& base==10){value=_b_.float.numerator(value) -if(value < $B.min_int ||value > $B.max_int){return $B.long_int.$from_float(value)} -else{return value > 0 ? Math.floor(value):Math.ceil(value)}} -if(!(base >=2 && base <=36)){ -if(base !=0){throw _b_.ValueError.$factory("invalid base")}} -if(typeof value=="number"){if(base==10){if(value < $B.min_int ||value > $B.max_int){return $B.long_int.$factory(value)} -return value}else if(value.toString().search("e")>-1){ -throw _b_.OverflowError.$factory("can't convert to base "+base)}else{var res=parseInt(value,base) -if(value < $B.min_int ||value > $B.max_int){return $B.long_int.$factory(value,base)} -return res}} -if(value===true){return Number(1)} -if(value===false){return Number(0)} -if(value.__class__===$B.long_int){var z=parseInt(value.value) -if(z > $B.min_int && z < $B.max_int){return z} -else{return value}} -base=$B.$GetInt(base) -function invalid(value,base){throw _b_.ValueError.$factory("invalid literal for int() with base "+ -base+": '"+_b_.str.$factory(value)+"'")} -if(_b_.isinstance(value,_b_.str)){value=value.valueOf()} -if(typeof value=="string"){var _value=value.trim() -if(_value.length==2 && base==0 && -(_value=="0b" ||_value=="0o" ||_value=="0x")){throw _b_.ValueError.$factory("invalid value")} -if(_value.length >2){var _pre=_value.substr(0,2).toUpperCase() -if(base==0){if(_pre=="0B"){base=2} -if(_pre=="0O"){base=8} -if(_pre=="0X"){base=16}}else if(_pre=="0X" && base !=16){invalid(_value,base)} -else if(_pre=="0O" && base !=8){invalid(_value,base)} -if((_pre=="0B" && base==2)||_pre=="0O" ||_pre=="0X"){_value=_value.substr(2) -while(_value.startsWith("_")){_value=_value.substr(1)}}}else if(base==0){ -base=10} -var _digits=$valid_digits(base),_re=new RegExp("^[+-]?["+_digits+"]"+ -"["+_digits+"_]*$","i"),match=_re.exec(_value) -if(match===null){invalid(value,base)}else{value=_value.replace(/_/g,"")} -if(base <=10 && ! isFinite(value)){invalid(_value,base)} -var res=parseInt(value,base) -if(res < $B.min_int ||res > $B.max_int){return $B.long_int.$factory(value,base)} -return res} -if(_b_.isinstance(value,[_b_.bytes,_b_.bytearray])){return int.$factory($B.$getattr(value,"decode")("latin-1"),base)} -var num_value=$B.to_num(value,["__int__","__index__","__trunc__"]) -if(num_value===null){throw _b_.TypeError.$factory( -"int() argument must be a string, a bytes-like "+ -"object or a number, not '"+$B.class_name(value)+"'")} -return num_value} -$B.set_func_names(int,"builtins") -_b_.int=int -$B.$bool=function(obj){ -if(obj===null ||obj===undefined ){return false} -switch(typeof obj){case "boolean": -return obj -case "number": -case "string": -if(obj){return true} -return false -default: -if(obj.$is_class){return true} -var klass=obj.__class__ ||$B.get_class(obj),missing={},bool_method=$B.$getattr(klass,"__bool__",missing) -if(bool_method===missing){try{return _b_.len(obj)> 0} -catch(err){return true}}else{var res=$B.$call(bool_method)(obj) -if(res !==true && res !==false){throw _b_.TypeError.$factory("__bool__ should return "+ -"bool, returned "+$B.class_name(res))} -return res}}} -var bool={__bases__:[int],__class__:_b_.type,__mro__:[int,_b_.object],$infos:{__name__:"bool",__module__:"builtins"},$is_class:true,$native:true} -var methods=$B.op2method.subset("operations","binary","comparisons","boolean") -for(var op in methods){var method="__"+methods[op]+"__" -bool[method]=(function(op){return function(self,other){var value=self ? 1 :0 -if(int[op]!==undefined){return int[op](value,other)}}})(method)} -bool.__and__=function(self,other){if(_b_.isinstance(other,bool)){return self && other}else if(_b_.isinstance(other,int)){return int.__and__(bool.__index__(self),int.__index__(other))} -return _b_.NotImplemented} -bool.__hash__=bool.__index__=bool.__int__=function(self){if(self.valueOf())return 1 -return 0} -bool.__neg__=function(self){return-$B.int_or_bool(self)} -bool.__or__=function(self,other){if(_b_.isinstance(other,bool)){return self ||other}else if(_b_.isinstance(other,int)){return int.__or__(bool.__index__(self),int.__index__(other))} -return _b_.NotImplemented} -bool.__pos__=$B.int_or_bool -bool.__repr__=bool.__str__=function(self){return self ? "True" :"False"} -bool.__setattr__=function(self,attr){if(_b_.dir(self).indexOf(attr)>-1){var msg="attribute '"+attr+"' of 'int' objects is not writable"}else{var msg="'bool' object has no attribute '"+attr+"'"} -throw _b_.AttributeError.$factory(msg)} -bool.__xor__=function(self,other){if(_b_.isinstance(other,bool)){return self ^ other ? true :false}else if(_b_.isinstance(other,int)){return int.__xor__(bool.__index__(self),int.__index__(other))} -return _b_.NotImplemented} -bool.$factory=function(){ -var $=$B.args("bool",1,{x:null},["x"],arguments,{x:false},null,null) -return $B.$bool($.x)} -_b_.bool=bool -$B.set_func_names(bool,"builtins")})(__BRYTHON__) -; -;(function($B){ -var bltns=$B.InjectBuiltins() -eval(bltns) -try{eval("window")}catch(err){window=self} -var long_int={__class__:_b_.type,__mro__:[int,object],$infos:{__module__:"builtins",__name__:"int"},$is_class:true,$native:true,$descriptors:{"numerator":true,"denominator":true,"imag":true,"real":true}} -function add_pos(v1,v2){ -if(window.BigInt){return{ -__class__:long_int,value:(BigInt(v1)+BigInt(v2)).toString(),pos:true}} -var res="",carry=0,iself=v1.length,sv=0,x -for(var i=v2.length-1;i >=0 ;i--){iself-- -if(iself < 0){sv=0}else{sv=parseInt(v1.charAt(iself))} -x=(carry+sv+parseInt(v2.charAt(i))).toString() -if(x.length==2){res=x.charAt(1)+res -carry=parseInt(x.charAt(0))} -else{res=x+res;carry=0}} -while(iself > 0){iself-- -x=(carry+parseInt(v1.charAt(iself))).toString() -if(x.length==2){res=x.charAt(1)+res -carry=parseInt(x.charAt(0))} -else{res=x+res;carry=0}} -if(carry){res=carry+res} -return{__class__:long_int,value:res,pos:true}} -var len=((Math.pow(2,53)-1)+'').length-1 -function binary_pos(t){var nb_chunks=Math.ceil(t.length/len),chunks=[],pos,start,nb,bin=[] -for(var i=0;i < nb_chunks;i++){pos=t.length-(i+1)*len -start=Math.max(0,pos) -nb=pos-start -chunks.push(t.substr(start,len+nb))} -chunks=chunks.reverse() -chunks.forEach(function(chunk,i){chunks[i]=parseInt(chunk)}) -var rest -var carry=Math.pow(10,15) -while(chunks[chunks.length-1]> 0){chunks.forEach(function(chunk,i){rest=chunk % 2 -chunks[i]=Math.floor(chunk/2) -if(rest && i < chunks.length-1){chunks[i+1]+=carry}}) -bin.push(rest) -if(chunks[0]==0){chunks.shift()}} -bin=bin.reverse().join('') -return bin} -function binary(obj){var bpos=binary_pos(obj.value) -if(obj.pos){return bpos} -var res='' -for(var i=0,len=bpos.length;i < len;i++){res+=bpos.charAt(i)=="0" ? "1":"0"} -var add1=add_pos(res,"1").value -add1=res.substr(0,res.length-add1.length)+add1 -return add1} -function check_shift(shift){ -if(! isinstance(shift,long_int)){throw TypeError.$factory("shift must be int, not '"+ -$B.class_name(shift)+"'")} -if(! shift.pos){throw ValueError.$factory("negative shift count")}} -function clone(obj){ -var obj1={} -for(var attr in obj){obj1[attr]=obj[attr]} -return obj1} -function comp_pos(v1,v2){ -if(v1.length > v2.length){return 1} -else if(v1.length < v2.length){return-1} -else{if(v1 > v2){return 1} -else if(v1 < v2){return-1}} -return 0} -function divmod_by_safe_int(t,n){ -if(n==1){return[t,0]} -var len=(Math.floor((Math.pow(2,53)-1)/n)+'').length-1,nb_chunks=Math.ceil(t.length/len), -chunks=[],pos,start,nb,in_base=[] -for(var i=0;i < nb_chunks;i++){pos=t.length-(i+1)*len -start=Math.max(0,pos) -nb=pos-start -chunks.push(t.substr(start,len+nb))} -chunks=chunks.reverse() -chunks.forEach(function(chunk,i){chunks[i]=parseInt(chunk)}) -var rest,carry=Math.pow(10,len),x -chunks.forEach(function(chunk,i){rest=chunk % n -chunks[i]=Math.floor(chunk/n) -if(i < chunks.length-1){ -chunks[i+1]+=carry*rest}}) -while(chunks[0]==0){chunks.shift() -if(chunks.length==0){return[0,rest]}} -x=chunks[0]+'' -chunks.forEach(function(chunk,i){if(i > 0){ -x+="0".repeat(len-chunk.toString().length)+chunk}}) -return[x,rest]} -function divmod_pos(v1,v2){ -if(window.BigInt){var a={__class__:long_int,value:(BigInt(v1)/BigInt(v2)).toString(),pos:true},b={__class__:long_int,value:(BigInt(v1)% BigInt(v2)).toString(),pos:true} -return[a,b]} -var iv1=parseInt(v1),iv2=parseInt(v2),res1 -if(iv1 < $B.max_int && iv2 < $B.max_int){var rest=iv1 % iv2,quot=Math.floor(iv1/iv2).toString() -var res1=[{__class__:long_int,value:quot.toString(),pos:true},{__class__:long_int,value:rest.toString(),pos:true} -] -return res1}else if(iv2 < $B.max_int){var res_safe=divmod_by_safe_int(v1,iv2) -return[long_int.$factory(res_safe[0]),long_int.$factory(res_safe[1])]} -var quotient,mod -if(comp_pos(v1,v2)==-1){ -quotient="0" -mod=long_int.$factory(v1)}else if(v2==v1){ -quotient="1" -mod=long_int.$factory("0")}else{var quotient="",left=v1.substr(0,v2.length) -if(v1 < v2){left=v1.substr(0,v2.length+1)} -var right=v1.substr(left.length) -var mv2={} -while(true){ -var candidate=Math.floor(parseInt(left)/parseInt(v2))+"" -if(candidate=="10"){ -candidate="9"} -if(mv2[candidate]===undefined){mv2[candidate]=mul_pos(v2,candidate).value} -if(comp_pos(left,mv2[candidate])==-1){ -candidate-- -if(mv2[candidate]===undefined){mv2[candidate]=mul_pos(v2,candidate).value}} -quotient+=candidate -left=sub_pos(left,mv2[candidate]).value -if(right.length==0){break} -left+=right.charAt(0) -right=right.substr(1)} -mod=sub_pos(v1,mul_pos(quotient,v2).value)} -return[long_int.$factory(quotient),mod]} -function split_chunks(s,size){var nb=Math.ceil(s.length/size),chunks=[],len=s.length -for(var i=0;i < nb;i++){var pos=len-size*(i+1) -if(pos < 0){size+=pos;pos=0} -chunks.push(parseInt(s.substr(pos,size)))} -return chunks} -function mul_pos(x,y){if(window.BigInt){return{__class__:long_int,value:(BigInt(x)*BigInt(y)).toString(),pos:true}} -var ix=parseInt(x),iy=parseInt(y),z=ix*iy -if(z < $B.max_int){return{ -__class__:long_int,value:z.toString(),pos:true}} -var chunk_size=6,cx=split_chunks(x,chunk_size),cy=split_chunks(y,chunk_size) -var products={},len=cx.length+cy.length -for(var i=0;i < len-1;i++){products[i]=0} -for(var i=0;i < cx.length;i++){for(var j=0;j < cy.length;j++){products[i+j]+=cx[i]*cy[j]}} -var nb=len-1,pos -for(var i=0;i < len-1;i++){var chunks=split_chunks(products[i].toString(),chunk_size) -for(var j=1;j < chunks.length;j++){pos=i+j -if(products[pos]===undefined){products[pos]=parseInt(chunks[j]) -nb=pos} -else{products[pos]+=parseInt(chunks[j])}} -products[i]=chunks[0]} -var result="",i=0,s -while(products[i]!==undefined){s=products[i].toString() -if(products[i+1]!==undefined){s="0".repeat(chunk_size-s.length)+s} -result=s+result -i++} -try{return long_int.$factory(result)}catch(err){console.log(x,y,products,result) -throw err}} -function sub_pos(v1,v2){ -if(window.BigInt){return{ -__class__:long_int,value:(BigInt(v1)-BigInt(v2)).toString(),pos:true}} -var res="",carry=0,i1=v1.length,sv=0,x -for(var i=v2.length-1;i >=0;i--){i1-- -sv=parseInt(v1.charAt(i1)) -x=(sv-carry-parseInt(v2.charAt(i))) -if(isNaN(x)){console.log("x is NaN",v1.length,v2.length,i,i1,sv,carry,i,v2.charAt(i))} -if(x < 0){res=(10+x)+res;carry=1} -else{res=x+res;carry=0}} -if(res.startsWith("NaN")){alert(res)} -while(i1 > 0){i1-- -x=(parseInt(v1.charAt(i1))-carry) -if(x < 0){res=(10+x)+res;carry=1} -else{res=x+res;carry=0}} -while(res.charAt(0)=="0" && res.length > 1){res=res.substr(1)} -if(res.startsWith("NaN")){console.log("hoho !!",v1,v2,v1 >=v2,res)} -return{__class__:long_int,value:res,pos:true}} -function to_BigInt(x){var res=$B.BigInt(x.value) -if(x.pos){return res} -return-res} -function from_BigInt(y){var pos=y >=0 -y=y.toString() -y=y.endsWith("n")? y.substr(0,y.length-1):y -y=y.startsWith('-')? y.substr(1):y -return intOrLong({__class__:long_int,value:y,pos:pos})} -long_int.$from_float=function(value){var s=Math.abs(value).toString(),v=s -if(s.search("e")>-1){var t=/-?(\d)(\.\d+)?e([+-])(\d*)/.exec(s),n1=t[1],n2=t[2],pos=t[3],exp=t[4] -if(pos=="+"){if(n2===undefined){v=n1+"0".repeat(exp-1)}else{v=n1+n2+"0".repeat(exp-1-n2.length)}}} -return{__class__:long_int,value:v,pos:value >=0}} -long_int.__abs__=function(self){return{__class__:long_int,value:self.value,pos:true}} -long_int.__add__=function(self,other){if(isinstance(other,_b_.float)){return _b_.float.$factory(parseInt(self.value)+other.value)} -if(typeof other=="number"){other=long_int.$factory(_b_.str.$factory(other))}else if(other.__class__ !==long_int){if(isinstance(other,_b_.bool)){other=long_int.$factory(other ? 1 :0)}else if(isinstance(other,int)){ -other=long_int.$factory(_b_.str.$factory(_b_.int.__index__(other)))}else{return _b_.NotImplemented}} -if($B.BigInt){} -var res -if(self.pos && other.pos){ -return add_pos(self.value,other.value)}else if(! self.pos && ! other.pos){ -res=add_pos(self.value,other.value) -res.pos=false -return intOrLong(res)}else if(self.pos && ! other.pos){ -switch(comp_pos(self.value,other.value)){case 1: -res=sub_pos(self.value,other.value) -break -case 0: -res={__class__:long_int,value:0,pos:true} -break -case-1: -res=sub_pos(other.value,self.value) -res.pos=false -break} -return intOrLong(res)}else{ -switch(comp_pos(self.value,other.value)){case 1: -res=sub_pos(self.value,other.value) -res.pos=false -break -case 0: -res={__class__:long_int,value:0,pos:true} -break -case-1: -res=sub_pos(other.value,self.value) -break} -return intOrLong(res)}} -long_int.__and__=function(self,other){if(typeof other=="number"){other=long_int.$factory(_b_.str.$factory(other))} -if($B.BigInt){return from_BigInt(to_BigInt(self)& to_BigInt(other))} -var v1=self.value,v2=other.value,temp1,temp2,res="" -var neg=(! self.pos)&&(! other.pos) -if(neg){self=long_int.__neg__(self) -other=long_int.__neg__(other)} -var b1=binary(self),len1=b1.length,b2=binary(other),len2=b2.length,i=1,res='',x1,x2 -while(true){if(i > len1 && i > len2){break} -if(i > len1){x1=self.pos ? "0" :"1"}else{x1=b1.charAt(len1-i)} -if(i > len2){x2=other.pos ? "0" :"1"}else{x2=b2.charAt(len2-i)} -if(x1=="1" && x2=="1"){res="1"+res}else{res="0"+res} -i++} -while(res.charAt(0)=="0"){res=res.substr(1)} -res=$B.long_int.$factory(res,2) -if(neg){res.pos=false} -return intOrLong(res)} -long_int.__divmod__=function(self,other){if(typeof other=="number"){other=long_int.$factory(_b_.str.$factory(other))} -var dm=divmod_pos(self.value,other.value) -if(self.pos !==other.pos){if(dm[0].value !="0"){dm[0].pos=false} -if(dm[1].value !="0"){ -dm[0]=long_int.__sub__(dm[0],long_int.$factory("1")) -dm[1]=long_int.__sub__(self,long_int.__mul__(other,long_int.$factory(dm[0])))}} -return $B.fast_tuple([intOrLong(dm[0]),intOrLong(dm[1])])} -long_int.__eq__=function(self,other){if(typeof other=="number"){other=long_int.$factory(_b_.str.$factory(other))} -return self.value==other.value && self.pos==other.pos} -long_int.__float__=function(self){return new Number(parseFloat(self.value))} -long_int.__floordiv__=function(self,other){if(isinstance(other,_b_.float)){return _b_.float.$factory(parseInt(self.value)/other)} -if(typeof other=="number"){var t=self.value,res=divmod_by_safe_int(t,other),pos=other > 0 ? self.pos :!self.pos -return{__class__:long_int,value:res[0],pos:pos}} -return intOrLong(long_int.__divmod__(self,other)[0])} -long_int.__ge__=function(self,other){if(typeof other=="number"){other=long_int.$factory(_b_.str.$factory(other))} -if(self.pos !=other.pos){return ! other.pos} -if(self.value.length > other.value.length){return self.pos} -else if(self.value.length < other.value.length){return ! self.pos} -else{return self.pos ? self.value >=other.value : -self.value <=other.value}} -long_int.__gt__=function(self,other){return ! long_int.__le__(self,other)} -long_int.__index__=function(self){ -var res='',temp=self.value,d -while(true){d=divmod_pos(temp,"2") -res=d[1].value+res -temp=d[0].value -if(temp=="0"){break}} -if(! self.pos){ -var nres="",flag=false -for(var len=res.length-1,i=len;i >=0 ;i--){var bit=res.charAt(i) -if(bit=="0"){if(flag){nres="1"+nres}else{nres="0"+nres}}else{if(flag){nres="0"+nres} -else{flag=true;nres="1"+nres}}} -nres="1"+nres -res=nres}else{res="0"+res} -return intOrLong(res)} -long_int.__invert__=function(self){return long_int.__sub__(long_int.$factory("-1"),self)} -long_int.__le__=function(self,other){if(typeof other=="number"){other=long_int.$factory(_b_.str.$factory(other))} -if(self.pos !==other.pos){return ! self.pos} -if(self.value.length > other.value.length){return ! self.pos} -else if(self.value.length < other.value.length){return self.pos} -else{return self.pos ? self.value <=other.value : -self.value >=other.value}} -long_int.__lt__=function(self,other){return !long_int.__ge__(self,other)} -long_int.__lshift__=function(self,shift){if(window.BigInt){if(shift.__class__==long_int){shift=shift.value} -return intOrLong({__class__:long_int,value:(BigInt(self.value)<< BigInt(shift)).toString(),pos:self.pos})} -var is_long=shift.__class__===long_int,shift_safe -if(is_long){var shift_value=parseInt(shift.value) -if(shift_value < 0){throw _b_.ValueError.$factory('negative shift count')} -if(shift_value < $B.max_int){shift_safe=true -shift=shift_value}} -if(shift_safe){if(shift_value==0){return self}}else{shift=long_int.$factory(shift) -if(shift.value=="0"){return self}} -var res=self.value -while(true){var x,carry=0,res1="" -for(var i=res.length-1;i >=0;i--){x=(carry+parseInt(res.charAt(i))*2).toString() -if(x.length==2){res1=x.charAt(1)+res1 -carry=parseInt(x.charAt(0))}else{res1=x+res1 -carry=0}} -if(carry){res1=carry+res1} -res=res1 -if(shift_safe){shift-- -if(shift==0){break}}else{shift=sub_pos(shift.value,"1") -if(shift.value=="0"){break}}} -return intOrLong({__class__:long_int,value:res,pos:self.pos})} -long_int.__mod__=function(self,other){return intOrLong(long_int.__divmod__(self,other)[1])} -long_int.__mro__=[_b_.int,_b_.object] -long_int.__mul__=function(self,other){switch(self){case Number.NEGATIVE_INFINITY: -case Number.POSITIVE_INFINITY: -if($B.rich_comp("__eq__",other,0)){return NaN} -else if(_b_.getattr(other,"__gt__")(0)){return self} -else{return-self}} -if(isinstance(other,_b_.float)){return _b_.float.$factory(parseInt(self.value)*other)} -if(typeof other=="number"){other=long_int.$factory(other)} -other_value=other.value -other_pos=other.pos -if(other.__class__ !==long_int && isinstance(other,int)){ -var value=int.__index__(other) -other_value=_b_.str.$factory(value) -other_pos=value > 0} -if($B.BigInt){return from_BigInt(to_BigInt(self)*to_BigInt(other))} -var res=mul_pos(self.value,other_value) -if(self.pos==other_pos){return intOrLong(res)} -res.pos=false -return intOrLong(res)} -long_int.__neg__=function(obj){return{__class__:long_int,value:obj.value,pos:! obj.pos}} -long_int.__or__=function(self,other){other=long_int.$factory(other) -var v1=long_int.__index__(self) -var v2=long_int.__index__(other) -if(v1.length < v2.length){var temp=v2;v2=v1;v1=temp} -var start=v1.length-v2.length -var res=v1.substr(0,start) -for(var i=0;i < v2.length;i++){if(v1.charAt(start+i)=="1" ||v2.charAt(i)=="1"){res+="1"} -else{res+="0"}} -return intOrLong(long_int.$factory(res,2))} -long_int.__pos__=function(self){return self} -long_int.__pow__=function(self,power,z){if(typeof power=="number"){power=long_int.$from_int(power)}else if(isinstance(power,int)){ -power=long_int.$factory(_b_.str.$factory(_b_.int.__index__(power)))}else if(! isinstance(power,long_int)){var msg="power must be an integer, not '" -throw TypeError.$factory(msg+$B.class_name(power)+"'")} -if(! power.pos){if(self.value=="1"){return self} -return long_int.$factory("0")}else if(power.value=="0"){return long_int.$factory("1")} -if($B.BigInt){var s=$B.BigInt(self.value),b=$B.BigInt(1),x=$B.BigInt(power.value),z=z===undefined ? z :typeof z=="number" ? $B.BigInt(z): -$B.BigInt(z.value) -if(z===undefined){return{ -__class__:long_int,value:(s**x).toString(),pos:true}} -while(x > 0){if(x % $B.BigInt(2)==1){b=b*s} -x=x/$B.BigInt(2) -if(x > 0){s=s*s} -if(z !==undefined){b=b % z}} -return{__class__:long_int,value:b.toString(),pos:true}} -var b={__class__:long_int,value:"1",pos:true},s=self,pow=power.value,temp -while(true){if(typeof pow=="string" && parseInt(pow)< $B.max_int){pow=parseInt(pow)} -if(pow==0){break}else if(typeof pow=="string"){if(parseInt(pow.charAt(pow.length-1))% 2==1){b=long_int.__mul__(b,s)} -pow=long_int.__floordiv__(pow,2)}else{if(pow % 2==1){if(typeof b=="number" && typeof s=="number" && -(temp=b*s)< $B.max_int){b=temp}else{b=long_int.__mul__(long_int.$factory(b),long_int.$factory(s))}} -pow=Math.floor(pow/2)} -if(pow > 0){if(typeof s=="number" &&(temp=s*s)< $B.max_int){s=temp}else{s=long_int.$factory(s) -s=long_int.__mul__(s,s)}} -if(z !==undefined){b=long_int.__mod__(b,z)}} -return intOrLong(b)} -long_int.__rshift__=function(self,shift){if(window.BigInt){if(shift.__class__===long_int){shift=shift.value} -return intOrLong( -{__class__:long_int,value:(BigInt(self.value)>> BigInt(shift)).toString(),pos:self.pos} -)} -if(typeof shift=="number"){var pow2=Math.pow(2,shift) -if(pow2 < $B.max_int){var res=divmod_by_safe_int(self.value,pow2) -return intOrLong({__class__:long_int,value:res[0],pos:self.pos})}} -shift=long_int.$factory(shift) -if(shift.value=="0"){return self} -var res=self.value -while(true){res=divmod_pos(res,"2")[0].value -if(res.value=="0"){break} -shift=sub_pos(shift.value,"1") -if(shift.value=="0"){break}} -return intOrLong({__class__:long_int,value:res,pos:self.pos})} -long_int.__str__=long_int.__repr__=function(self){var res="" -if(! self.pos){res+='-'} -return res+self.value} -long_int.__sub__=function(self,other){if(isinstance(other,_b_.float)){other=other instanceof Number ? other :other.$brython_value -return _b_.float.$factory(parseInt(self.value)-other)} -if(typeof other=="number"){other=long_int.$factory(_b_.str.$factory(other))} -if($B.BigInt){} -var res -if(self.pos && other.pos){switch(comp_pos(self.value,other.value)){case 1: -res=sub_pos(self.value,other.value) -break -case 0: -res={__class__:long_int,value:"0",pos:true} -break -case-1: -res=sub_pos(other.value,self.value) -res.pos=false -break} -return intOrLong(res)}else if(! self.pos && ! other.pos){switch(comp_pos(self.value,other.value)){case 1: -res=sub_pos(self.value,other.value) -res.pos=false -break -case 0: -res={__class__:long_int,value:"0",pos:true} -break -case-1: -res=sub_pos(other.value,self.value) -break} -return intOrLong(res)}else if(self.pos && ! other.pos){return intOrLong(add_pos(self.value,other.value))}else{res=add_pos(self.value,other.value) -res.pos=false -return intOrLong(res)}} -long_int.__truediv__=function(self,other){if(isinstance(other,long_int)){return _b_.float.$factory(parseInt(self.value)/parseInt(other.value))}else if(isinstance(other,_b_.int)){return _b_.float.$factory(parseInt(self.value)/other)}else if(isinstance(other,_b_.float)){return _b_.float.$factory(parseInt(self.value)/other)}else{throw TypeError.$factory( -"unsupported operand type(s) for /: 'int' and '"+ -$B.class_name(other)+"'")}} -long_int.__xor__=function(self,other){other=long_int.$factory(other) -var v1=long_int.__index__(self),v2=long_int.__index__(other) -if(v1.length < v2.length){var temp=v2;v2=v1;v1=temp} -var start=v1.length-v2.length -var res=v1.substr(0,start) -for(var i=0;i < v2.length;i++){if(v1.charAt(start+i)=="1" && v2.charAt(i)=="0"){res+="1"} -else if(v1.charAt(start+i)=="0" && v2.charAt(i)=="1"){res+="1"} -else{res+="0"}} -return intOrLong(long_int.$factory(res,2))} -long_int.numerator=function(self){return self} -long_int.denominator=function(self){return _b_.int.$factory(1)} -long_int.imag=function(self){return _b_.int.$factory(0)} -long_int.real=function(self){return self} -long_int.to_base=function(self,base){ -if(base==2){return binary_pos(self.value)} -var res="",v=self.value -while(v > 0){var dm=divmod_pos(v,base.toString()) -res=parseInt(dm[1].value).toString(base)+res -v=dm[0].value -if(v==0){break}} -return res} -function digits(base){ -var is_digits={} -for(var i=0;i < base;i++){if(i==10){break} -is_digits[i]=true} -if(base > 10){ -for(var i=0;i < base-10;i++){is_digits[String.fromCharCode(65+i)]=true -is_digits[String.fromCharCode(97+i)]=true}} -return is_digits} -var MAX_SAFE_INTEGER=Math.pow(2,53)-1 -var MIN_SAFE_INTEGER=-MAX_SAFE_INTEGER -function isSafeInteger(n){return(typeof n==="number" && -Math.round(n)===n && -MIN_SAFE_INTEGER <=n && -n <=MAX_SAFE_INTEGER)} -function intOrLong(long){ -var v=parseInt(long.value)*(long.pos ? 1 :-1) -if(v > MIN_SAFE_INTEGER && v < MAX_SAFE_INTEGER){return v} -return long} -long_int.$from_int=function(value){return{__class__:long_int,value:value.toString(),pos:value > 0}} -long_int.$factory=function(value,base){ -if(arguments.length > 2){throw _b_.TypeError.$factory("long_int takes at most 2 arguments ("+ -arguments.length+" given)")} -if(base===undefined){base=10} -else if(!isinstance(base,int)){throw TypeError.$factory("'"+$B.class_name(base)+ -"' object cannot be interpreted as an integer")} -if(base < 0 ||base==1 ||base > 36){throw ValueError.$factory( -"long_int.$factory() base must be >= 2 and <= 36")} -if(typeof value=="number"){if(isSafeInteger(value)){value=value.toString()} -else if(value.constructor==Number){value=value.toString()} -else{throw ValueError.$factory( -"argument of long_int is not a safe integer")}}else if(isinstance(value,_b_.float)){if(value===Number.POSITIVE_INFINITY || -value===Number.NEGATIVE_INFINITY){return value} -if(value >=0){value=new Number(Math.round(value.value))} -else{value=new Number(Math.ceil(value.value))}}else if(isinstance(value,_b_.bool)){if(value.valueOf()){return int.$factory(1)} -return int.$factory(0)}else if(value.__class__===long_int){return value}else if(isinstance(value,int)){ -value=value.$brython_value+""}else if(isinstance(value,_b_.bool)){value=_b_.bool.__int__(value)+""}else if(typeof value !="string"){throw ValueError.$factory( -"argument of long_int must be a string, not "+ -$B.class_name(value))} -var has_prefix=false,pos=true,start=0 -while(value.charAt(0)==" " && value.length){value=value.substr(1)} -while(value.charAt(value.length-1)==" " && value.length){value=value.substr(0,value.length-1)} -if(value.charAt(0)=="+"){has_prefix=true} -else if(value.charAt(0)=="-"){has_prefix=true;pos=false} -if(has_prefix){ -if(value.length==1){ -throw ValueError.$factory( -'long_int argument is not a valid number: "'+value+'"')}else{value=value.substr(1)}} -while(start < value.length-1 && value.charAt(start)=="0"){start++} -value=value.substr(start) -var is_digits=digits(base),point=-1 -for(var i=0;i < value.length;i++){if(value.charAt(i)=="." && point==-1){point=i}else if(value.charAt(i)=="e"){ -var mant=value.substr(0,i) -if(/^[+-]?\d+$/.exec(value.substr(i+1))){exp=parseInt(value.substr(i+1))}else{throw Error("wrong exp "+value.substr(i+1))} -if(point !=-1){mant=mant.substr(0,point)+mant.substr(point+1) -exp=exp+point-1} -point=-1 -value=mant+"0".repeat(exp-mant.length) -break} -else if(! is_digits[value.charAt(i)]){throw ValueError.$factory( -'long_int argument is not a valid number: "'+value+'"')}} -if(point !=-1){value=value.substr(0,point)} -if(base !=10){ -var coef="1",v10=long_int.$factory(0),ix=value.length -while(ix--){var digit_base10=parseInt(value.charAt(ix),base).toString(),digit_by_coef=mul_pos(coef,digit_base10).value -v10=add_pos(v10.value,digit_by_coef) -coef=mul_pos(coef,base.toString()).value} -return v10} -return{__class__:long_int,value:value,pos:pos}} -$B.set_func_names(long_int,"builtins") -$B.long_int=long_int})(__BRYTHON__) -; -;(function($B){var _b_=$B.builtins -function $UnsupportedOpType(op,class1,class2){throw _b_.TypeError.$factory("unsupported operand type(s) for "+ -op+": '"+class1+"' and '"+class2+"'")} -var complex={__class__:_b_.type,__dir__:_b_.object.__dir__,$infos:{__module__:"builtins",__name__:"complex"},$is_class:true,$native:true,$descriptors:{real:true,imag:true}} -complex.__abs__=function(self){var _rf=isFinite(self.$real),_if=isFinite(self.$imag) -if((_rf && isNaN(self.$imag))||(_if && isNaN(self.$real))|| -(isNaN(self.$imag)&& isNaN(self.$real))){return NaN} -if(! _rf ||! _if){return Infinity} -var mag=Math.sqrt(Math.pow(self.$real,2)+Math.pow(self.$imag,2)) -if(!isFinite(mag)&& _rf && _if){ -throw _b_.OverflowError.$factory("absolute value too large")} -return mag} -complex.__bool__=function(self){return(self.$real !=0 ||self.$imag !=0)} -complex.__eq__=function(self,other){if(_b_.isinstance(other,complex)){return self.$real.valueOf()==other.$real.valueOf()&& -self.$imag.valueOf()==other.$imag.valueOf()} -if(_b_.isinstance(other,_b_.int)){if(self.$imag !=0){return false} -return self.$real==other.valueOf()} -if(_b_.isinstance(other,_b_.float)){if(self.$imag !=0){return false} -return self.$real==other.valueOf()} -return _b_.NotImplemented} -complex.__floordiv__=function(self,other){$UnsupportedOpType("//","complex",$B.get_class(other))} -complex.__hash__=function(self){ -return self.$imag*1000003+self.$real} -complex.__init__=function(){return _b_.None} -complex.__invert__=function(self){return ~self} -complex.__mod__=function(self,other){throw _b_.TypeError.$factory("TypeError: can't mod complex numbers.")} -complex.__mro__=[_b_.object] -complex.__mul__=function(self,other){if(_b_.isinstance(other,complex)){return make_complex(self.$real*other.$real-self.$imag*other.$imag,self.$imag*other.$real+self.$real*other.$imag)}else if(_b_.isinstance(other,_b_.int)){return make_complex(self.$real*other.valueOf(),self.$imag*other.valueOf())}else if(_b_.isinstance(other,_b_.float)){return make_complex(self.$real*other,self.$imag*other)}else if(_b_.isinstance(other,_b_.bool)){if(other.valueOf()){return self} -return make_complex(0,0)} -$UnsupportedOpType("*",complex,other)} -complex.__ne__=function(self,other){var res=complex.__eq__(self,other) -return res===_b_.NotImplemented ? res :! res} -complex.__neg__=function(self){return make_complex(-self.$real,-self.$imag)} -complex.__new__=function(cls){if(cls===undefined){throw _b_.TypeError.$factory('complex.__new__(): not enough arguments')} -var res,missing={},args=$B.args("complex",3,{cls:null,real:null,imag:null},["cls","real","imag"],arguments,{real:0,imag:missing},null,null),$real=args.real,$imag=args.imag -if(typeof $real=="string"){if($imag !==missing){throw _b_.TypeError.$factory("complex() can't take second arg "+ -"if first is a string")}else{var arg=$real -$real=$real.trim() -if($real.startsWith("(")&& $real.endsWith(")")){$real=$real.substr(1) -$real=$real.substr(0,$real.length-1)} -var complex_re=/^\s*([\+\-]*[0-9_]*\.?[0-9_]*(e[\+\-]*[0-9_]*)?)([\+\-]?)([0-9_]*\.?[0-9_]*(e[\+\-]*[0-9_]*)?)(j?)\s*$/i -var parts=complex_re.exec($real) -function to_num(s){var res=parseFloat(s.charAt(0)+s.substr(1).replace(/_/g,"")) -if(isNaN(res)){throw _b_.ValueError.$factory("could not convert string "+ -"to complex: '"+arg+"'")} -return res} -if(parts===null){throw _b_.ValueError.$factory("complex() arg is a malformed string")}else if(parts[_real]=="." ||parts[_imag]=="." || -parts[_real]==".e" ||parts[_imag]==".e" || -parts[_real]=="e" ||parts[_imag]=="e"){throw _b_.ValueError.$factory("complex() arg is a malformed string")}else if(parts[_j]!=""){if(parts[_sign]==""){$real=0 -if(parts[_real]=="+" ||parts[_real]==""){$imag=1}else if(parts[_real]=='-'){$imag=-1}else{$imag=to_num(parts[_real])}}else{$real=to_num(parts[_real]) -$imag=parts[_imag]=="" ? 1 :to_num(parts[_imag]) -$imag=parts[_sign]=="-" ?-$imag :$imag}}else{$real=to_num(parts[_real]) -$imag=0} -res={__class__:complex,$real:$real ||0,$imag:$imag ||0} -return res}} -$imag=$imag===missing ? 0 :$imag -if(arguments.length==1 && $real.__class__===complex && $imag==0){return $real} -if(_b_.isinstance($real,[_b_.float,_b_.int])&& -_b_.isinstance($imag,[_b_.float,_b_.int])){res={__class__:complex,$real:$real,$imag:$imag} -return res} -var real_to_num=$B.to_num($real,["__complex__","__float__","__index__"]) -if(real_to_num===null){throw _b_.TypeError.$factory("complex() first argument must be a "+ -" string or a number, not '"+$B.class_name($real)+"'")} -$real=real_to_num -$imag=_convert($imag) -if(! _b_.isinstance($real,_b_.float)&& ! _b_.isinstance($real,_b_.int)&& -! _b_.isinstance($real,_b_.complex)){throw _b_.TypeError.$factory("complex() argument must be a string "+ -"or a number")} -if(typeof $imag=="string"){throw _b_.TypeError.$factory("complex() second arg can't be a string")} -if(! _b_.isinstance($imag,_b_.float)&& ! _b_.isinstance($imag,_b_.int)&& -! _b_.isinstance($imag,_b_.complex)&& $imag !==missing){throw _b_.TypeError.$factory("complex() argument must be a string "+ -"or a number")} -$imag=complex.__mul__(complex.$factory("1j"),$imag) -return complex.__add__($imag,$real)} -complex.__pos__=function(self){return self} -function complex2expo(cx){var norm=Math.sqrt((cx.$real*cx.$real)+(cx.$imag*cx.$imag)),sin=cx.$imag/norm,cos=cx.$real/norm,angle -if(cos==0){angle=sin==1 ? Math.PI/2 :3*Math.PI/2} -else if(sin==0){angle=cos==1 ? 0 :Math.PI} -else{angle=Math.atan(sin/cos)} -return{norm:norm,angle:angle}} -complex.__pow__=function(self,other){ -var exp=complex2expo(self),angle=exp.angle,res=Math.pow(exp.norm,other) -if(_b_.isinstance(other,[_b_.int,_b_.float])){return make_complex(res*Math.cos(angle*other),res*Math.sin(angle*other))}else if(_b_.isinstance(other,complex)){ -var x=other.$real,y=other.$imag -var pw=Math.pow(exp.norm,x)*Math.pow(Math.E,-y*angle),theta=y*Math.log(exp.norm)-x*angle -return make_complex(pw*Math.cos(theta),pw*Math.sin(theta))}else{throw _b_.TypeError.$factory("unsupported operand type(s) "+ -"for ** or pow(): 'complex' and '"+ -$B.class_name(other)+"'")}} -complex.__str__=complex.__repr__=function(self){if(self.$real==0){if(1/self.$real < 0){if(self.$imag < 0){return "(-0"+self.$imag+"j)"}else if(self.$imag==0 && 1/self.$imag < 0){return "(-0-"+self.$imag+"j)"}else return "(-0+"+self.$imag+"j)"}else{if(self.$imag==0 && 1/self.$imag < 0){return "-"+self.$imag+"j"}else{return self.$imag+"j"}}} -if(self.$imag > 0){return "("+self.$real+"+"+self.$imag+"j)"} -if(self.$imag==0){if(1/self.$imag < 0){return "("+self.$real+"-"+self.$imag+"j)"} -return "("+self.$real+"+"+self.$imag+"j)"} -return "("+self.$real+"-"+(-self.$imag)+"j)"} -complex.__sqrt__=function(self){if(self.$imag==0){return complex(Math.sqrt(self.$real))} -var r=self.$real,i=self.$imag,_a=Math.sqrt((r+sqrt)/2),_b=Number.sign(i)*Math.sqrt((-r+sqrt)/2) -return make_complex(_a,_b)} -complex.__truediv__=function(self,other){if(_b_.isinstance(other,complex)){if(other.$real==0 && other.$imag==0){throw _b_.ZeroDivisionError.$factory("division by zero")} -var _num=self.$real*other.$real+self.$imag*other.$imag,_div=other.$real*other.$real+other.$imag*other.$imag -var _num2=self.$imag*other.$real-self.$real*other.$imag -return make_complex(_num/_div,_num2/_div)} -if(_b_.isinstance(other,_b_.int)){if(! other.valueOf()){throw _b_.ZeroDivisionError.$factory('division by zero')} -return complex.__truediv__(self,complex.$factory(other.valueOf()))} -if(_b_.isinstance(other,_b_.float)){if(! other.valueOf()){throw _b_.ZeroDivisionError.$factory("division by zero")} -return complex.__truediv__(self,complex.$factory(other.valueOf()))} -$UnsupportedOpType("//","complex",other.__class__)} -complex.conjugate=function(self){return make_complex(self.$real,-self.$imag)} -var $op_func=function(self,other){throw _b_.TypeError.$factory("TypeError: unsupported operand type(s) "+ -"for -: 'complex' and '"+$B.class_name(other)+"'")} -$op_func+="" -var $ops={"&":"and","|":"ior","<<":"lshift",">>":"rshift","^":"xor"} -for(var $op in $ops){eval("complex.__"+$ops[$op]+"__ = "+$op_func.replace(/-/gm,$op))} -complex.__ior__=complex.__or__ -var $op_func=function(self,other){if(_b_.isinstance(other,complex)){return make_complex(self.$real-other.$real,self.$imag-other.$imag)} -if(_b_.isinstance(other,_b_.int)){return make_complex($B.sub(self.$real,other.valueOf()),self.$imag)} -if(_b_.isinstance(other,_b_.float)){return make_complex(self.$real-other.valueOf(),self.$imag)} -if(_b_.isinstance(other,_b_.bool)){var bool_value=0 -if(other.valueOf()){bool_value=1} -return make_complex(self.$real-bool_value,self.$imag)} -throw _b_.TypeError.$factory("unsupported operand type(s) for -: "+ -self.__repr__()+" and '"+$B.class_name(other)+"'")} -complex.__sub__=$op_func -$op_func+='' -$op_func=$op_func.replace(/-/gm,"+").replace(/sub/gm,"add") -eval("complex.__add__ = "+$op_func) -var $comp_func=function(self,other){if(other===undefined ||other==_b_.None){return _b_.NotImplemented} -throw _b_.TypeError.$factory("TypeError: no ordering relation "+ -"is defined for complex numbers")} -$comp_func+='' -for(var $op in $B.$comps){eval("complex.__"+$B.$comps[$op]+"__ = "+ -$comp_func.replace(/>/gm,$op))} -$B.make_rmethods(complex) -complex.real=function(self){return new Number(self.$real)} -complex.real.setter=function(){throw _b_.AttributeError.$factory("readonly attribute")} -complex.imag=function(self){return new Number(self.$imag)} -complex.imag.setter=function(){throw _b_.AttributeError.$factory("readonly attribute")} -var _real=1,_real_mantissa=2,_sign=3,_imag=4,_imag_mantissa=5,_j=6 -var type_conversions=["__complex__","__float__","__index__"] -var _convert=function(num){var klass=num.__class__ ||$B.get_class(num) -for(var i=0;i < type_conversions.length;i++){var missing={},method=$B.$getattr(klass,type_conversions[i],missing) -if(method !==missing){return method(num)}} -return null} -var make_complex=$B.make_complex=function(real,imag){return{ -__class__:complex,$real:real,$imag:imag}} -complex.$factory=function(){return complex.__new__(complex,...arguments)} -$B.set_func_names(complex,"builtins") -_b_.complex=complex})(__BRYTHON__) -; -;(function($B){ -var DEFAULT_MIN_MERGE=32 -var DEFAULT_MIN_GALLOPING=7 -var DEFAULT_TMP_STORAGE_LENGTH=256 -var POWERS_OF_TEN=[1e0,1e1,1e2,1e3,1e4,1e5,1e6,1e7,1e8,1e9] -function log10(x){if(x < 1e5){if(x < 1e2){return x < 1e1 ? 0 :1} -if(x < 1e4){return x < 1e3 ? 2 :3} -return 4} -if(x < 1e7){return x < 1e6 ? 5 :6} -if(x < 1e9){return x < 1e8 ? 7 :8} -return 9} -function alphabeticalCompare(a,b){if(a===b){return 0} -if(~~a===a && ~~b===b){if(a===0 ||b===0){return a < b ?-1 :1} -if(a < 0 ||b < 0){if(b >=0){return-1} -if(a >=0){return 1} -a=-a -b=-b} -al=log10(a) -bl=log10(b) -var t=0 -if(al < bl){a*=POWERS_OF_TEN[bl-al-1] -b/=10 -t=-1}else if(al > bl){b*=POWERS_OF_TEN[al-bl-1] -a/=10; -t=1;} -if(a===b){return t} -return a < b ?-1 :1} -var aStr=String(a) -var bStr=String(b) -if(aStr===bStr){return 0} -return aStr < bStr ?-1 :1} -function minRunLength(n){var r=0 -while(n >=DEFAULT_MIN_MERGE){r |=(n & 1) -n >>=1} -return n+r} -function makeAscendingRun(array,lo,hi,compare){var runHi=lo+1 -if(runHi===hi){return 1;} -if(compare(array[runHi++],array[lo])< 0){while(runHi < hi && compare(array[runHi],array[runHi-1])< 0){runHi++} -reverseRun(array,lo,runHi)}else{while(runHi < hi && compare(array[runHi],array[runHi-1])>=0){runHi++}} -return runHi-lo} -function reverseRun(array,lo,hi){hi-- -while(lo < hi){var t=array[lo] -array[lo++]=array[hi] -array[hi--]=t}} -function binaryInsertionSort(array,lo,hi,start,compare){if(start===lo){start++} -for(;start < hi;start++){var pivot=array[start] -var left=lo -var right=start -while(left < right){var mid=(left+right)>>> 1 -if(compare(pivot,array[mid])< 0){right=mid}else{left=mid+1}} -var n=start-left -switch(n){case 3: -array[left+3]=array[left+2] -case 2: -array[left+2]=array[left+1] -case 1: -array[left+1]=array[left] -break; -default: -while(n > 0){array[left+n]=array[left+n-1] -n--;}} -array[left]=pivot}} -function gallopLeft(value,array,start,length,hint,compare){var lastOffset=0,maxOffset=0,offset=1 -if(compare(value,array[start+hint])> 0){maxOffset=length-hint -while(offset < maxOffset && compare(value,array[start+hint+offset])> 0){lastOffset=offset -offset=(offset << 1)+1 -if(offset <=0){offset=maxOffset}} -if(offset > maxOffset){offset=maxOffset} -lastOffset+=hint -offset+=hint}else{maxOffset=hint+1 -while(offset < maxOffset && compare(value,array[start+hint-offset])<=0){lastOffset=offset -offset=(offset << 1)+1 -if(offset <=0){offset=maxOffset}} -if(offset > maxOffset){offset=maxOffset} -var tmp=lastOffset -lastOffset=hint-offset -offset=hint-tmp} -lastOffset++ -while(lastOffset < offset){var m=lastOffset+((offset-lastOffset)>>> 1) -if(compare(value,array[start+m])> 0){lastOffset=m+1}else{offset=m}} -return offset} -function gallopRight(value,array,start,length,hint,compare){var lastOffset=0,maxOffset=0,offset=1 -if(compare(value,array[start+hint])< 0){maxOffset=hint+1 -while(offset < maxOffset && compare(value,array[start+hint-offset])< 0){lastOffset=offset -offset=(offset << 1)+1 -if(offset <=0){offset=maxOffset}} -if(offset > maxOffset){offset=maxOffset} -var tmp=lastOffset -lastOffset=hint-offset -offset=hint-tmp}else{maxOffset=length-hint -while(offset < maxOffset && compare(value,array[start+hint+offset])>=0){lastOffset=offset -offset=(offset << 1)+1 -if(offset <=0){offset=maxOffset}} -if(offset > maxOffset){offset=maxOffset} -lastOffset+=hint -offset+=hint} -lastOffset++ -while(lastOffset < offset){var m=lastOffset+((offset-lastOffset)>>> 1) -if(compare(value,array[start+m])< 0){offset=m}else{lastOffset=m+1}} -return offset} -var TIM_SORT_ASSERTION="TimSortAssertion" -var TimSortAssertion=function(message){this.name=TIM_SORT_ASSERTION -this.message=message} -var TimSort=function(array,compare){var self={array:array,compare:compare,minGallop:DEFAULT_MIN_GALLOPING,length :array.length,tmpStorageLength:DEFAULT_TMP_STORAGE_LENGTH,stackLength:0,runStart:null,runLength:null,stackSize:0, -pushRun:function(runStart,runLength){this.runStart[this.stackSize]=runStart -this.runLength[this.stackSize]=runLength -this.stackSize+=1}, -mergeRuns:function(){while(this.stackSize > 1){var n=this.stackSize-2 -if((n >=1 && this.runLength[n-1]<= -this.runLength[n]+this.runLength[n+1])|| -(n >=2 && this.runLength[n-2]<= -this.runLength[n]+this.runLength[n-1])){if(this.runLength[n-1]< this.runLength[n+1]){n--}}else if(this.runLength[n]> this.runLength[n+1]){break} -this.mergeAt(n)}}, -forceMergeRuns:function(){while(this.stackSize > 1){var n=this.stackSize-2 -if(n > 0 && this.runLength[n-1]< this.runLength[n+1]){n--} -this.mergeAt(n)}}, -mergeAt:function(i){var compare=this.compare,array=this.array,start1=this.runStart[i],length1=this.runLength[i],start2=this.runStart[i+1],length2=this.runLength[i+1] -this.runLength[i]=length1+length2 -if(i===this.stackSize-3){this.runStart[i+1]=this.runStart[i+2] -this.runLength[i+1]=this.runLength[i+2]} -this.stackSize--; -var k=gallopRight(array[start2],array,start1,length1,0,compare) -start1+=k -length1-=k -if(length1===0){return} -length2=gallopLeft(array[start1+length1-1],array,start2,length2,length2-1,compare) -if(length2===0){return} -if(length1 <=length2){this.mergeLow(start1,length1,start2,length2)}else{this.mergeHigh(start1,length1,start2,length2)}}, -mergeLow:function(start1,length1,start2,length2){var compare=this.compare,array=this.array,tmp=this.tmp,i=0 -for(var i=0;i < length1;i++){tmp[i]=array[start1+i]} -var cursor1=0,cursor2=start2,dest=start1 -array[dest++]=array[cursor2++] -if(--length2===0){for(var i=0;i < length1;i++){array[dest+i]=tmp[cursor1+i]} -return} -if(length1===1){for(var i=0;i < length2;i++){array[dest+i]=array[cursor2+i]} -array[dest+length2]=tmp[cursor1] -return} -var minGallop=this.minGallop -while(true){var count1=0,count2=0,exit=false -do{if(compare(array[cursor2],tmp[cursor1])< 0){array[dest++]=array[cursor2++] -count2++ -count1=0 -if(--length2===0){exit=true -break}}else{array[dest++]=tmp[cursor1++] -count1++ -count2=0 -if(--length1===1){exit=true -break}}}while((count1 |count2)< minGallop) -if(exit){break} -do{ -count1=gallopRight(array[cursor2],tmp,cursor1,length1,0,compare) -if(count1 !==0){for(var i=0;i < count1;i++){array[dest+i]=tmp[cursor1+i]} -dest+=count1 -cursor1+=count1 -length1-=count1 -if(length1 <=1){exit=true -break}} -array[dest++]=array[cursor2++] -if(--length2===0){exit=true -break} -count2=gallopLeft(tmp[cursor1],array,cursor2,length2,0,compare) -if(count2 !==0){for(var i=0;i < count2;i++){array[dest+i]=array[cursor2+i]} -dest+=count2 -cursor2+=count2 -length2-=count2 -if(length2===0){exit=true -break}} -array[dest++]=tmp[cursor1++] -if(--length1===1){exit=true -break} -minGallop--;}while(count1 >=DEFAULT_MIN_GALLOPING || -count2 >=DEFAULT_MIN_GALLOPING); -if(exit){break} -if(minGallop < 0){minGallop=0} -minGallop+=2} -this.minGallop=minGallop -if(minGallop < 1){this.minGallop=1} -if(length1===1){for(var i=0;i < length2;i++){array[dest+i]=array[cursor2+i]} -array[dest+length2]=tmp[cursor1]}else if(length1===0){throw new TimSortAssertion('mergeLow preconditions were not respected')}else{for(var i=0;i < length1;i++){array[dest+i]=tmp[cursor1+i]}}}, -mergeHigh:function(start1,length1,start2,length2){var compare=this.compare,array=this.array,tmp=this.tmp,i=0 -for(var i=0;i < length2;i++){tmp[i]=array[start2+i]} -var cursor1=start1+length1-1,cursor2=length2-1,dest=start2+length2-1,customCursor=0,customDest=0 -array[dest--]=array[cursor1--] -if(--length1===0){customCursor=dest-(length2-1) -for(var i=0;i < length2;i++){array[customCursor+i]=tmp[i]} -return} -if(length2===1){dest-=length1 -cursor1-=length1 -customDest=dest+1 -customCursor=cursor1+1 -for(var i=length1-1;i >=0;i--){array[customDest+i]=array[customCursor+i]} -array[dest]=tmp[cursor2] -return} -var minGallop=this.minGallop -while(true){var count1=0,count2=0,exit=false -do{if(compare(tmp[cursor2],array[cursor1])< 0){array[dest--]=array[cursor1--] -count1++ -count2=0 -if(--length1===0){exit=true -break}}else{array[dest--]=tmp[cursor2--] -count2++ -count1=0 -if(--length2===1){exit=true -break}}}while((count1 |count2)< minGallop) -if(exit){break} -do{count1=length1-gallopRight(tmp[cursor2],array,start1,length1,length1-1,compare) -if(count1 !==0){dest-=count1 -cursor1-=count1 -length1-=count1 -customDest=dest+1 -customCursor=cursor1+1 -for(var i=count1-1;i >=0;i--){array[customDest+i]=array[customCursor+i]} -if(length1===0){exit=true -break}} -array[dest--]=tmp[cursor2--] -if(--length2===1){exit=true -break} -count2=length2-gallopLeft(array[cursor1],tmp,0,length2,length2-1,compare) -if(count2 !==0){dest-=count2 -cursor2-=count2 -length2-=count2 -customDest=dest+1 -customCursor=cursor2+1 -for(var i=0;i < count2;i++){array[customDest+i]=tmp[customCursor+i]} -if(length2 <=1){exit=true -break}} -array[dest--]=array[cursor1--] -if(--length1===0){exit=true -break} -minGallop--}while(count1 >=DEFAULT_MIN_GALLOPING || -count2 >=DEFAULT_MIN_GALLOPING) -if(exit){break} -if(minGallop < 0){minGallop=0} -minGallop+=2} -this.minGallop=minGallop -if(minGallop < 1){this.minGallop=1} -if(length2===1){dest-=length1 -cursor1-=length1 -customDest=dest+1 -customCursor=cursor1+1 -for(var i=length1-1;i >=0;i--){array[customDest+i]=array[customCursor+i]} -array[dest]=tmp[cursor2]}else if(length2==0){throw new TimSortAssertion("mergeHigh preconditions were not respected")}else{customCursor=dest-(length2-1) -for(var i=0;i < length2;i++){array[customCursor+i]=tmp[i]}}}} -if(self.length < 2*DEFAULT_TMP_STORAGE_LENGTH){self.tmpStorageLength=self.length >>> 1} -self.tmp=new Array(self.tmpStorageLength) -self.stackLength= -(self.length < 120 ? 5 : -self.length < 1542 ? 10 : -self.length < 119151 ? 19 :40) -self.runStart=new Array(self.stackLength) -self.runLength=new Array(self.stackLength) -return self} -function tim_sort(array,compare,lo,hi){if(!Array.isArray(array)){throw TypeError.$factory("Can only sort arrays")} -if(!compare){compare=alphabeticalCompare}else if(typeof compare !=="function"){hi=lo -lo=compare -compare=alphabeticalCompare} -if(!lo){lo=0} -if(!hi){hi=array.length} -var remaining=hi-lo -if(remaining < 2){return} -var runLength=0 -if(remaining < DEFAULT_MIN_MERGE){runLength=makeAscendingRun(array,lo,hi,compare) -binaryInsertionSort(array,lo,hi,lo+runLength,compare) -return} -var ts=new TimSort(array,compare) -var minRun=minRunLength(remaining) -do{runLength=makeAscendingRun(array,lo,hi,compare) -if(runLength < minRun){var force=remaining -if(force > minRun){force=minRun} -binaryInsertionSort(array,lo,lo+force,lo+runLength,compare) -runLength=force} -ts.pushRun(lo,runLength) -ts.mergeRuns() -remaining-=runLength -lo+=runLength}while(remaining !==0) -ts.forceMergeRuns()} -function tim_sort_safe(array,compare){ -try{ -tim_sort(array,compare,0,array.length)}catch(e){if(e.name==TIM_SORT_ASSERTION){array.sort(compare);}else{ -throw e;}}} -$B.$TimSort=tim_sort_safe -$B.$AlphabeticalCompare=alphabeticalCompare})(__BRYTHON__) -; -;(function($B){var _b_=$B.builtins,object=_b_.object,getattr=$B.$getattr,isinstance=_b_.isinstance,$N=_b_.None -function check_not_tuple(self,attr){if(self.__class__===tuple){throw _b_.AttributeError.$factory( -"'tuple' object has no attribute '"+attr+"'")}} -function $list(){ -return list.$factory.apply(null,arguments)} -var list={__class__:_b_.type,__mro__:[object],$infos:{__module__:"builtins",__name__:"list"},$is_class:true,$native:true,__dir__:object.__dir__} -list.__add__=function(self,other){if($B.get_class(self)!==$B.get_class(other)){var radd=getattr(other,"__radd__",_b_.NotImplemented) -if(radd !==_b_.NotImplemented){return radd(self)} -throw _b_.TypeError.$factory('can only concatenate list (not "'+ -$B.class_name(other)+'") to list')} -var res=self.slice(),is_js=other.$brython_class=="js" -for(const item of other){res.push(is_js ? $B.$JS2Py(item):item)} -res.__brython__=true -if(isinstance(self,tuple)){res=tuple.$factory(res)} -return res} -list.__contains__=function(self,item){var $=$B.args("__contains__",2,{self:null,item:null},["self","item"],arguments,{},null,null),self=$.self,item=$.item -var _eq=function(other){return $B.rich_comp("__eq__",item,other)} -var i=0 -while(i < self.length){if(_eq(self[i])){return true} -i++} -return false} -list.__delitem__=function(self,arg){if(isinstance(arg,_b_.int)){var pos=arg -if(arg < 0){pos=self.length+pos} -if(pos >=0 && pos < self.length){self.splice(pos,1) -return $N} -throw _b_.IndexError.$factory("list index out of range")} -if(isinstance(arg,_b_.slice)){var step=arg.step -if(step===$N){step=1} -var start=arg.start -if(start===$N){start=step > 0 ? 0 :self.length} -var stop=arg.stop -if(stop===$N){stop=step > 0 ? self.length :0} -if(start < 0){start=self.length+start} -if(stop < 0){stop=self.length+stop} -var res=[],i=null,pos=0 -if(step > 0){if(stop > start){for(var i=start;i < stop;i+=step){if(self[i]!==undefined){res[pos++]=i}}}}else{if(stop < start){for(var i=start;i > stop;i+=step){if(self[i]!==undefined){res[pos++]=i}} -res.reverse()}} -var i=res.length -while(i--){self.splice(res[i],1)} -return $N} -if(_b_.hasattr(arg,"__int__")||_b_.hasattr(arg,"__index__")){list.__delitem__(self,_b_.int.$factory(arg)) -return $N} -throw _b_.TypeError.$factory("list indices must be integer, not "+ -_b_.str.$factory(arg.__class__))} -list.__eq__=function(self,other){if(isinstance(self,list)){var klass=list}else{var klass=tuple} -if(isinstance(other,klass)){if(other.length==self.length){var i=self.length -while(i--){if(! $B.rich_comp("__eq__",self[i],other[i])){return false}} -return true}} -return _b_.NotImplemented} -list.__getitem__=function(self,key){ -$B.check_no_kw("__getitem__",self,key) -$B.check_nb_args("__getitem__",2,arguments) -return list.$getitem(self,key)} -list.$getitem=function(self,key){var factory=(self.__class__ ||$B.get_class(self)).$factory -if(isinstance(key,_b_.int)){var items=self.valueOf(),pos=key -if(key < 0){pos=items.length+pos} -if(pos >=0 && pos < items.length){return items[pos]} -throw _b_.IndexError.$factory("list index out of range")} -if(key.__class__===_b_.slice ||isinstance(key,_b_.slice)){ -if(key.start===_b_.None && key.stop===_b_.None && -key.step===_b_.None){return self.slice()} -var s=_b_.slice.$conv_for_seq(key,self.length) -var res=[],i=null,items=self.valueOf(),pos=0,start=s.start,stop=s.stop,step=s.step -if(step > 0){if(stop <=start){return factory(res)} -for(var i=start;i < stop;i+=step){res[pos++]=items[i]} -return factory(res)}else{if(stop > start){return factory(res)} -for(var i=start;i > stop;i+=step){res[pos++]=items[i]} -return factory(res)}} -if(_b_.hasattr(key,"__int__")||_b_.hasattr(key,"__index__")){return list.__getitem__(self,_b_.int.$factory(key))} -throw _b_.TypeError.$factory("list indices must be integer, not "+ -$B.class_name(key))} -list.__ge__=function(self,other){if(! isinstance(other,[list,_b_.tuple])){return _b_.NotImplemented} -var i=0 -while(i < self.length){if(i >=other.length){return true} -if($B.rich_comp("__eq__",self[i],other[i])){i++} -else{res=getattr(self[i],"__ge__")(other[i]) -if(res===_b_.NotImplemented){throw _b_.TypeError.$factory("unorderable types: "+ -$B.class_name(self[i])+"() >= "+ -$B.class_name(other[i])+"()")}else{return res}}} -return other.length==self.length} -list.__gt__=function(self,other){if(! isinstance(other,[list,_b_.tuple])){return _b_.NotImplemented} -var i=0 -while(i < self.length){if(i >=other.length){return true} -if($B.rich_comp("__eq__",self[i],other[i])){i++} -else{res=getattr(self[i],"__gt__")(other[i]) -if(res===_b_.NotImplemented){throw _b_.TypeError.$factory("unorderable types: "+ -$B.class_name(self[i])+"() > "+ -$B.class_name(other[i])+"()")}else return res}} -return false} -list.__hash__=$N -list.__iadd__=function(){var $=$B.args("__iadd__",2,{self:null,x:null},["self","x"],arguments,{},null,null) -var radd=getattr($.x,"__radd__",_b_.NotImplemented) -if(radd !==_b_.NotImplemented){return radd($.self)} -var x=list.$factory($B.$iter($.x)) -for(var i=0;i < x.length;i++){$.self.push(x[i])} -return $.self} -list.__imul__=function(){var $=$B.args("__imul__",2,{self:null,x:null},["self","x"],arguments,{},null,null),x=$B.$GetInt($.x),len=$.self.length,pos=len -if(x==0){list.clear($.self);return $.self} -for(var i=1;i < x;i++){for(j=0;j < len;j++){$.self[pos++]=$.self[j]}} -return $.self} -list.__init__=function(self,arg){var len_func=$B.$call(getattr(self,"__len__")),pop_func=getattr(self,"pop",$N) -if(pop_func !==$N){pop_func=$B.$call(pop_func) -while(len_func()){pop_func()}} -if(arg===undefined){return $N} -var arg=$B.$iter(arg),next_func=$B.$call(getattr(arg,"__next__")),pos=len_func() -while(1){try{var res=next_func() -self[pos++]=res}catch(err){if(err.__class__===_b_.StopIteration){break} -else{throw err}}} -return $N} -var list_iterator=$B.make_iterator_class("list_iterator") -list_iterator.__reduce__=list_iterator.__reduce_ex__=function(self){return $B.fast_tuple([_b_.iter,$B.fast_tuple([list.$factory(self)]),0])} -list.__iter__=function(self){return list_iterator.$factory(self)} -list.__le__=function(self,other){var res=list.__ge__(self,other) -if(res===_b_.NotImplemented){return res} -return ! res} -list.__len__=function(self){return self.length} -list.__lt__=function(self,other){if(! isinstance(other,[list,_b_.tuple])){return _b_.NotImplemented} -var i=0 -while(i < self.length){if(i >=other.length){return false} -if($B.rich_comp("__eq__",self[i],other[i])){i++}else{res=getattr(self[i],"__lt__")(other[i]) -if(res===_b_.NotImplemented){throw _b_.TypeError.$factory("unorderable types: "+ -$B.class_name(self[i])+"() >= "+ -$B.class_name(other[i])+"()")}else{return res}}} -return other.length > self.length} -list.__mul__=function(self,other){if(isinstance(other,_b_.int)){ -var res=[],$temp=self.slice(),len=$temp.length -for(var i=0;i < other;i++){for(var j=0;j < len;j++){res.push($temp[j])}} -res.__class__=self.__class__ -return res} -if(_b_.hasattr(other,"__int__")||_b_.hasattr(other,"__index__")){return list.__mul__(self,_b_.int.$factory(other))} -var rmul=$B.$getattr(other,"__rmul__",_b_.NotImplemented) -if(rmul !==_b_.NotImplemented){return rmul(self)} -throw _b_.TypeError.$factory( -"can't multiply sequence by non-int of type '"+ -$B.class_name(other)+"'")} -list.__new__=function(cls,...args){if(cls===undefined){throw _b_.TypeError.$factory("list.__new__(): not enough arguments")} -var res=[] -res.__class__=cls -res.__brython__=true -res.__dict__=$B.empty_dict() -return res} -list.__repr__=function(self){if($B.repr.enter(self)){ -return '[...]'} -var _r=[],res -for(var i=0;i < self.length;i++){_r.push(_b_.repr(self[i]))} -if(self.__class__===tuple){if(self.length==1){return "("+_r[0]+",)"} -res="("+_r.join(", ")+")"}else{res="["+_r.join(", ")+"]"} -$B.repr.leave(self) -return res} -list.__setattr__=function(self,attr,value){if(self.__class__===list){if(list.hasOwnProperty(attr)){throw _b_.AttributeError.$factory("'list' object attribute '"+ -attr+"' is read-only")}else{throw _b_.AttributeError.$factory( -"'list' object has no attribute '"+attr+"'")}} -_b_.dict.$setitem(self.__dict__,attr,value) -return $N} -list.__setitem__=function(){var $=$B.args("__setitem__",3,{self:null,key:null,value:null},["self","key","value"],arguments,{},null,null),self=$.self,arg=$.key,value=$.value -list.$setitem(self,arg,value)} -list.$setitem=function(self,arg,value){ -if(typeof arg=="number" ||isinstance(arg,_b_.int)){var pos=arg -if(arg < 0){pos=self.length+pos} -if(pos >=0 && pos < self.length){self[pos]=value} -else{throw _b_.IndexError.$factory("list index out of range")} -return $N} -if(isinstance(arg,_b_.slice)){var s=_b_.slice.$conv_for_seq(arg,self.length) -if(arg.step===null){$B.set_list_slice(self,s.start,s.stop,value)} -else{$B.set_list_slice_step(self,s.start,s.stop,s.step,value)} -return $N} -if(_b_.hasattr(arg,"__int__")||_b_.hasattr(arg,"__index__")){list.__setitem__(self,_b_.int.$factory(arg),value) -return $N} -throw _b_.TypeError.$factory("list indices must be integer, not "+ -$B.class_name(arg))} -$B.make_rmethods(list) -var _ops=["add","sub"] -list.append=function(self,x){$B.check_no_kw("append",self,x) -$B.check_nb_args("append",2,arguments) -self.push(x) -return $N} -list.clear=function(){var $=$B.args("clear",1,{self:null},["self"],arguments,{},null,null) -while($.self.length){$.self.pop()} -return $N} -list.copy=function(){var $=$B.args("copy",1,{self:null},["self"],arguments,{},null,null) -return $.self.slice()} -list.count=function(){var $=$B.args("count",2,{self:null,x:null},["self","x"],arguments,{},null,null) -var res=0,_eq=function(other){return $B.rich_comp("__eq__",$.x,other)},i=$.self.length -while(i--){if(_eq($.self[i])){res++}} -return res} -list.extend=function(){var $=$B.args("extend",2,{self:null,t:null},["self","t"],arguments,{},null,null) -var other=list.$factory($B.$iter($.t)) -for(var i=0;i < other.length;i++){$.self.push(other[i])} -return $N} -list.index=function(){var missing={},$=$B.args("index",4,{self:null,x:null,start:null,stop:null},["self","x","start" ,"stop"],arguments,{start:0,stop:missing},null,null),self=$.self,start=$.start,stop=$.stop -var _eq=function(other){return $B.rich_comp("__eq__",$.x,other)} -if(start.__class__===$B.long_int){start=parseInt(start.value)*(start.pos ? 1 :-1)} -if(start < 0){start=Math.max(0,start+self.length)} -if(stop===missing){stop=self.length} -else{if(stop.__class__===$B.long_int){stop=parseInt(stop.value)*(stop.pos ? 1 :-1)} -if(stop < 0){stop=Math.min(self.length,stop+self.length)} -stop=Math.min(stop,self.length)} -for(var i=start;i < stop;i++){if(_eq(self[i])){return i}} -throw _b_.ValueError.$factory(_b_.str.$factory($.x)+" is not in list")} -list.insert=function(){var $=$B.args("insert",3,{self:null,i:null,item:null},["self","i","item"],arguments,{},null,null) -$.self.splice($.i,0,$.item) -return $N} -list.pop=function(){var missing={} -var $=$B.args("pop",2,{self:null,pos:null},["self","pos"],arguments,{pos:missing},null,null),self=$.self,pos=$.pos -check_not_tuple(self,"pop") -if(pos===missing){pos=self.length-1} -pos=$B.$GetInt(pos) -if(pos < 0){pos+=self.length} -var res=self[pos] -if(res===undefined){throw _b_.IndexError.$factory("pop index out of range")} -self.splice(pos,1) -return res} -list.remove=function(){var $=$B.args("remove",2,{self:null,x:null},["self","x"],arguments,{},null,null) -for(var i=0,len=$.self.length;i < len;i++){if($B.rich_comp("__eq__",$.self[i],$.x)){$.self.splice(i,1) -return $N}} -throw _b_.ValueError.$factory(_b_.str.$factory($.x)+" is not in list")} -list.reverse=function(self){var $=$B.args("reverse",1,{self:null},["self"],arguments,{},null,null),_len=$.self.length-1,i=parseInt($.self.length/2) -while(i--){var buf=$.self[i] -$.self[i]=$.self[_len-i] -$.self[_len-i]=buf} -return $N} -function $partition(arg,array,begin,end,pivot) -{var piv=array[pivot] -array=swap(array,pivot,end-1) -var store=begin -if(arg===null){if(array.$cl !==false){ -var le_func=_b_.getattr(array.$cl,"__le__") -for(var ix=begin;ix < end-1;++ix){if(le_func(array[ix],piv)){array=swap(array,store,ix); -++store}}}else{for(var ix=begin;ix < end-1;++ix){if(getattr(array[ix],"__le__")(piv)){array=swap(array,store,ix) -++store}}}}else{var len=array.length -for(var ix=begin;ix < end-1;++ix){var x=arg(array[ix]) -if(array.length !==len){throw _b_.ValueError.$factory("list modified during sort")} -if(getattr(x,"__le__")(arg(piv))){array=swap(array,store,ix) -++store}}} -array=swap(array,end-1,store) -return store} -function swap(_array,a,b){var tmp=_array[a] -_array[a]=_array[b] -_array[b]=tmp -return _array} -function $qsort(arg,array,begin,end){if(end-1 > begin){var pivot=begin+Math.floor(Math.random()*(end-begin)) -pivot=$partition(arg,array,begin,end,pivot) -$qsort(arg,array,begin,pivot) -$qsort(arg,array,pivot+1,end)}} -function $elts_class(self){ -if(self.length==0){return null} -var cl=$B.get_class(self[0]),i=self.length -while(i--){if($B.get_class(self[i])!==cl){return false}} -return cl} -list.sort=function(self){var $=$B.args("sort",1,{self:null},["self"],arguments,{},null,"kw") -check_not_tuple(self,"sort") -var func=$N,reverse=false,kw_args=$.kw,keys=_b_.list.$factory(_b_.dict.$$keys(kw_args)) -for(var i=0;i < keys.length;i++){if(keys[i]=="key"){func=kw_args.$string_dict[keys[i]][0]}else if(keys[i]=="reverse"){reverse=kw_args.$string_dict[keys[i]][0]}else{throw _b_.TypeError.$factory("'"+keys[i]+ -"' is an invalid keyword argument for this function")}} -if(self.length==0){return} -if(func !==$N){func=$B.$call(func)} -self.$cl=$elts_class(self) -var cmp=null; -if(func===$N && self.$cl===_b_.str){if(reverse){cmp=function(b,a){return $B.$AlphabeticalCompare(a,b)}}else{cmp=function(a,b){return $B.$AlphabeticalCompare(a,b)}}}else if(func===$N && self.$cl===_b_.int){if(reverse){cmp=function(b,a){return a-b}}else{cmp=function(a,b){return a-b}}}else{if(func===$N){if(reverse){cmp=function(b,a){res=getattr(a,"__lt__")(b) -if(res===_b_.NotImplemented){throw _b_.TypeError.$factory("unorderable types: "+ -$B.class_name(b)+"() < "+ -$B.class_name(a)+"()")} -if(res){if(a==b){return 0} -return-1} -return 1}}else{cmp=function(a,b){res=getattr(a,"__lt__")(b) -if(res===_b_.NotImplemented){throw _b_.TypeError.$factory("unorderable types: "+ -$B.class_name(a)+"() < "+ -$B.class_name(b)+"()")} -if(res){if(a==b){return 0} -return-1} -return 1}}}else{if(reverse){cmp=function(b,a){var _a=func(a),_b=func(b) -res=getattr(_a,"__lt__")(_b) -if(res===_b_.NotImplemented){throw _b_.TypeError.$factory("unorderable types: "+ -$B.class_name(b)+"() < "+ -$B.class_name(a)+"()")} -if(res){if(_a==_b){return 0} -return-1} -return 1}}else{cmp=function(a,b){var _a=func(a),_b=func(b) -res=$B.$getattr(_a,"__lt__")(_b) -if(res===_b_.NotImplemented){throw _b_.TypeError.$factory("unorderable types: "+ -$B.class_name(a)+"() < "+ -$B.class_name(b)+"()")} -if(res){if(_a==_b){return 0} -return-1} -return 1}}}} -$B.$TimSort(self,cmp) -return(self.__brython__ ? $N :self)} -$B.$list=function(t){t.__brython__=true -return t} -list.$factory=function(){if(arguments.length==0){return[]} -var $=$B.args("list",1,{obj:null},["obj"],arguments,{},null,null),obj=$.obj -if(Array.isArray(obj)){ -obj=obj.slice() -obj.__brython__=true; -if(obj.__class__==tuple){var res=obj.slice() -res.__class__=list -return res} -return obj} -var res=[],pos=0,arg=$B.$iter(obj),next_func=$B.$call(getattr(arg,"__next__")) -while(1){try{res[pos++]=next_func()}catch(err){if(!isinstance(err,_b_.StopIteration)){throw err} -break}} -res.__brython__=true -return res} -$B.set_func_names(list,"builtins") -var JSArray=$B.JSArray=$B.make_class("JSArray",function(array){return{ -__class__:JSArray,js:array}} -) -JSArray.__repr__=JSArray.__str__=function(){return ""} -function make_args(args){var res=[args[0].js] -for(var i=1,len=args.length;i < len;i++){res.push(args[i])} -return res} -for(var attr in list){if($B.JSArray[attr]!==undefined){continue} -if(typeof list[attr]=="function"){$B.JSArray[attr]=(function(fname){return function(){return $B.$JS2Py(list[fname].apply(null,make_args(arguments)))}})(attr)}} -$B.set_func_names($B.JSArray,"builtins") -function $tuple(arg){return arg} -var tuple={__class__:_b_.type,__mro__:[object],$infos:{__module__:"builtins",__name__:"tuple"},$is_class:true,$native:true} -var tuple_iterator=$B.make_iterator_class("tuple_iterator") -tuple.__iter__=function(self){return tuple_iterator.$factory(self)} -tuple.$factory=function(){var obj=list.$factory(...arguments) -obj.__class__=tuple -return obj} -$B.fast_tuple=function(array){array.__class__=tuple -array.__brython__=true -array.__dict__=$B.empty_dict() -return array} -for(var attr in list){switch(attr){case "__delitem__": -case "__iadd__": -case "__imul__": -case "__setitem__": -case "append": -case "extend": -case "insert": -case "remove": -case "reverse": -break -default: -if(tuple[attr]===undefined){if(typeof list[attr]=="function"){tuple[attr]=(function(x){return function(){return list[x].apply(null,arguments)}})(attr)}else{}}}} -tuple.__eq__=function(self,other){ -if(other===undefined){return self===tuple} -return list.__eq__(self,other)} -function c_mul(a,b){s=((parseInt(a)*b)& 0xFFFFFFFF).toString(16) -return parseInt(s.substr(0,s.length-1),16)} -tuple.__hash__=function(self){ -var x=0x3456789 -for(var i=0,len=self.length;i < len;i++){var y=_b_.hash(self[i]) -x=c_mul(1000003,x)^ y & 0xFFFFFFFF} -return x} -tuple.__init__=function(){ -return $N} -tuple.__new__=function(cls,...args){if(cls===undefined){throw _b_.TypeError.$factory("list.__new__(): not enough arguments")} -var self=[] -self.__class__=cls -self.__brython__=true -self.__dict__=$B.empty_dict() -var arg=$B.$iter(args[0]),next_func=$B.$call(getattr(arg,"__next__")) -while(1){try{var item=next_func() -self.push(item)} -catch(err){if(err.__class__===_b_.StopIteration){break} -else{throw err}}} -return self} -$B.set_func_names(tuple,"builtins") -_b_.list=list -_b_.tuple=tuple -_b_.object.__bases__=tuple.$factory()})(__BRYTHON__) -; - -var $B=__BRYTHON__ -$B.unicode={"Cc":[[0,32],[127,33]],"Zs":[32,160,5760,6158,[8192,11],8239,8287,12288],"Po":[[33,3],[37,3],[42,3,2],47,58,59,63,64,92,161,183,191,894,903,[1370,6],1417,[1472,3,3],1523,1524,1545,1546,1548,1549,1563,1566,1567,[1642,4],1748,[1792,14],[2039,3],[2096,15],2404,2405,2416,3572,3663,3674,3675,[3844,15],3973,[4048,5],[4170,6],4347,[4961,8],5741,5742,[5867,3],5941,5942,[6100,3],[6104,3],[6144,6],[6151,4],6468,6469,6622,6623,6686,6687,[6816,7],[6824,6],[7002,7],[7227,5],7294,7295,7379,8214,8215,[8224,8],[8240,9],[8251,4],[8257,3],[8263,11],8275,[8277,10],[11513,4],11518,11519,11776,11777,[11782,3],11787,[11790,9],11800,11801,11803,11806,11807,[11818,5],11824,11825,[12289,3],12349,12539,42238,42239,[42509,3],42611,42622,[42738,6],[43124,4],43214,43215,[43256,3],43310,43311,43359,[43457,13],43486,43487,[43612,4],43742,43743,44011,[65040,7],65049,65072,65093,65094,[65097,4],[65104,3],[65108,4],[65119,3],65128,65130,65131,[65281,3],[65285,3],[65290,3,2],65295,65306,65307,65311,65312,65340,65377,65380,65381,65792,65793,66463,66512,67671,67871,67903,[68176,9],68223,[68409,7],69819,69820,[69822,4],[74864,4]],"Sc":[36,[162,4],1547,2546,2547,2555,2801,3065,3647,6107,[8352,25],43064,65020,65129,65284,65504,65505,65509,65510],"Ps":[40,91,123,3898,3900,5787,8218,8222,8261,8317,8333,9001,[10088,7,2],10181,[10214,5,2],[10627,11,2],10712,10714,10748,[11810,4,2],[12296,5,2],[12308,4,2],12317,64830,65047,[65077,8,2],65095,[65113,3,2],65288,65339,65371,65375,65378],"Pe":[41,93,125,3899,3901,5788,8262,8318,8334,9002,[10089,7,2],10182,[10215,5,2],[10628,11,2],10713,10715,10749,[11811,4,2],[12297,5,2],[12309,4,2],12318,12319,64831,65048,[65078,8,2],65096,[65114,3,2],65289,65341,[65373,3,3]],"Sm":[43,[60,3],124,126,172,177,215,247,1014,[1542,3],8260,8274,[8314,3],[8330,3],[8512,5],8523,[8592,5],8602,8603,[8608,3,3],8622,8654,8655,8658,8660,[8692,268],[8968,4],8992,8993,9084,[9115,25],[9180,6],9655,9665,[9720,8],9839,[10176,5],[10183,4],10188,[10192,22],[10224,16],[10496,131],[10649,63],[10716,32],[10750,258],[11056,21],[11079,6],64297,65122,[65124,3],65291,[65308,3],65372,65374,65506,[65513,4],120513,120539,120571,120597,120629,120655,120687,120713,120745,120771],"Pd":[45,1418,1470,5120,6150,[8208,6],11799,11802,12316,12336,12448,65073,65074,65112,65123,65293],"Nd":[[48,10],[1632,10],[1776,10],[1984,10],[2406,10],[2534,10],[2662,10],[2790,10],[2918,10],[3046,10],[3174,10],[3302,10],[3430,10],[3664,10],[3792,10],[3872,10],[4160,10],[4240,10],[6112,10],[6160,10],[6470,10],[6608,11],[6784,10],[6800,10],[6992,10],[7088,10],[7232,10],[7248,10],[42528,10],[43216,10],[43264,10],[43472,10],[43600,10],[44016,10],[65296,10],[66720,10],[120782,50]],"Lu":[[65,26],[192,23],[216,7],[256,28,2],[313,8,2],[330,24,2],[377,3,2],385,[386,3,2],391,[393,3],[398,4],403,404,[406,3],412,413,415,[416,4,2],423,425,428,430,431,[433,3],437,439,440,444,[452,4,3],[463,7,2],[478,9,2],497,500,[502,3],[506,29,2],570,571,573,574,577,[579,4],[584,4,2],880,882,886,902,[904,3],908,910,911,[913,17],[931,9],975,[978,3],[984,12,2],1012,1015,1017,1018,[1021,51],[1120,17,2],[1162,28,2],[1217,7,2],[1232,43,2],[1329,38],[4256,38],[7680,75,2],[7838,49,2],[7944,8],[7960,6],[7976,8],[7992,8],[8008,6],[8025,4,2],[8040,8],[8120,4],[8136,4],[8152,4],[8168,5],[8184,4],8450,8455,[8459,3],[8464,3],8469,[8473,5],[8484,4,2],[8491,3],[8496,4],8510,8511,8517,8579,[11264,47],11360,[11362,3],[11367,4,2],[11374,3],11378,11381,[11390,3],[11394,49,2],11499,11501,[42560,16,2],[42594,6,2],[42624,12,2],[42786,7,2],[42802,31,2],[42873,3,2],[42878,5,2],42891,[65313,26],[66560,40],[119808,26],[119860,26],[119912,26],119964,119966,[119967,3,3],119974,[119977,4],[119982,8],[120016,26],120068,120069,[120071,4],[120077,8],[120086,7],120120,120121,[120123,4],[120128,5],120134,[120138,7],[120172,26],[120224,26],[120276,26],[120328,26],[120380,26],[120432,26],[120488,25],[120546,25],[120604,25],[120662,25],[120720,25],120778],"Sk":[94,96,168,175,180,184,[706,4],[722,14],[741,7],749,[751,17],885,900,901,8125,[8127,3],[8141,3],[8157,3],[8173,3],8189,8190,12443,12444,[42752,23],42784,42785,42889,42890,65342,65344,65507],"Pc":[95,8255,8256,8276,65075,65076,[65101,3],65343],"Ll":[[97,26],170,181,186,[223,24],[248,8],[257,28,2],[312,9,2],[329,24,2],[378,3,2],383,384,387,389,392,396,397,402,405,[409,3],414,[417,3,2],424,426,427,429,432,436,438,441,442,[445,3],[454,3,3],[462,8,2],[477,10,2],496,499,501,[505,30,2],[564,6],572,575,576,578,[583,5,2],[592,68],[661,27],881,[883,3,4],892,893,912,[940,35],976,977,[981,3],[985,12,2],[1008,4],[1013,3,3],1020,[1072,48],[1121,17,2],[1163,27,2],[1218,7,2],[1231,44,2],[1377,39],[7424,44],[7522,22],[7545,34],[7681,75,2],[7830,8],[7839,49,2],[7936,8],[7952,6],[7968,8],[7984,8],[8000,6],[8016,8],[8032,8],[8048,14],[8064,8],[8080,8],[8096,8],[8112,5],8118,8119,8126,[8130,3],8134,8135,[8144,4],8150,8151,[8160,8],[8178,3],8182,8183,8458,8462,8463,8467,[8495,3,5],8508,8509,[8518,4],8526,8580,[11312,47],11361,11365,[11366,4,2],11377,11379,11380,[11382,7],[11393,50,2],11492,11500,11502,[11520,38],[42561,16,2],[42595,6,2],[42625,12,2],[42787,7,2],42800,[42801,33,2],[42866,7],42874,42876,[42879,5,2],42892,[64256,7],[64275,5],[65345,26],[66600,40],[119834,26],[119886,7],[119894,18],[119938,26],[119990,4],119995,[119997,7],[120005,11],[120042,26],[120094,26],[120146,26],[120198,26],[120250,26],[120302,26],[120354,26],[120406,26],[120458,28],[120514,25],[120540,6],[120572,25],[120598,6],[120630,25],[120656,6],[120688,25],[120714,6],[120746,25],[120772,6],120779],"So":[166,167,169,174,176,182,1154,1550,1551,1769,1789,1790,2038,2554,2928,[3059,6],3066,3199,3313,3314,3449,[3841,3],[3859,5],[3866,6],[3892,3,2],[4030,8],[4039,6],4046,4047,[4053,4],4254,4255,4960,[5008,10],6464,[6624,32],[7009,10],[7028,9],8448,8449,[8451,4],8456,8457,8468,[8470,3],[8478,6],[8485,3,2],8494,8506,8507,8522,8524,8525,8527,[8597,5],[8604,4],8609,8610,8612,8613,[8615,7],[8623,31],8656,[8657,3,2],[8662,30],[8960,8],[8972,20],[8994,7],[9003,81],[9085,30],[9140,40],[9186,7],[9216,39],[9280,11],[9372,78],[9472,183],[9656,9],[9666,54],[9728,111],[9840,94],[9935,19],9955,[9960,24],[9985,4],[9990,4],[9996,28],[10025,35],10061,[10063,4],[10070,9],[10081,7],10132,[10136,24],[10161,14],[10240,256],[11008,48],11077,11078,[11088,10],[11493,6],[11904,26],[11931,89],[12032,214],[12272,12],12292,12306,12307,12320,12342,12343,12350,12351,12688,12689,[12694,10],[12736,36],[12800,31],[12842,39],[12896,32],[12938,39],[12992,63],[13056,256],[19904,64],[42128,55],[43048,4],43062,43063,43065,[43639,3],65021,65508,65512,65517,65518,65532,65533,65794,[65847,9],[65913,17],[65936,12],[66000,45],[118784,246],[119040,39],[119081,60],[119146,3],119171,119172,[119180,30],[119214,48],[119296,66],119365,[119552,87],[126976,44],[127024,100],[127248,31],127281,127293,127295,[127298,3,4],[127307,4],127319,127327,127353,127355,127356,127359,[127370,4],127376,127488,[127504,34],[127552,9]],"Pi":[171,8216,8219,8220,8223,8249,11778,11780,11785,11788,11804,11808],"Cf":[173,[1536,4],1757,1807,6068,6069,[8203,5],[8234,5],[8288,5],[8298,6],65279,[65529,3],69821,[119155,8],917505,[917536,96]],"No":[178,179,185,[188,3],[2548,6],[3056,3],[3192,7],[3440,6],[3882,10],[4969,20],[6128,10],8304,[8308,6],[8320,10],[8528,16],8585,[9312,60],[9450,22],[10102,30],11517,[12690,4],[12832,10],[12881,15],[12928,10],[12977,15],[43056,6],[65799,45],[65909,4],65930,[66336,4],[67672,8],[67862,6],[68160,8],68221,68222,[68440,8],[68472,8],[69216,31],[119648,18],[127232,11]],"Pf":[187,8217,8221,8250,11779,11781,11786,11789,11805,11809],"Lo":[443,[448,4],660,[1488,27],[1520,3],[1569,31],[1601,10],1646,1647,[1649,99],1749,1774,1775,[1786,3],1791,1808,[1810,30],[1869,89],1969,[1994,33],[2048,22],[2308,54],2365,2384,[2392,10],2418,[2425,7],[2437,8],2447,2448,[2451,22],[2474,7],2482,[2486,4],2493,2510,2524,2525,[2527,3],2544,2545,[2565,6],2575,2576,[2579,22],[2602,7],2610,2611,2613,2614,2616,2617,[2649,4],2654,[2674,3],[2693,9],[2703,3],[2707,22],[2730,7],2738,2739,[2741,5],2749,2768,2784,2785,[2821,8],2831,2832,[2835,22],[2858,7],2866,2867,[2869,5],2877,2908,2909,[2911,3],2929,2947,[2949,6],[2958,3],[2962,4],2969,[2970,3,2],2975,2979,2980,[2984,3],[2990,12],3024,[3077,8],[3086,3],[3090,23],[3114,10],[3125,5],3133,3160,3161,3168,3169,[3205,8],[3214,3],[3218,23],[3242,10],[3253,5],3261,3294,3296,3297,[3333,8],[3342,3],[3346,23],[3370,16],3389,3424,3425,[3450,6],[3461,18],[3482,24],[3507,9],3517,[3520,7],[3585,48],3634,3635,[3648,6],3713,3714,3716,3719,3720,3722,3725,[3732,4],[3737,7],[3745,3],3749,3751,3754,3755,[3757,4],3762,3763,3773,[3776,5],3804,3805,3840,[3904,8],[3913,36],[3976,4],[4096,43],4159,[4176,6],[4186,4],4193,4197,4198,[4206,3],[4213,13],4238,[4304,43],[4352,329],[4682,4],[4688,7],4696,[4698,4],[4704,41],[4746,4],[4752,33],[4786,4],[4792,7],4800,[4802,4],[4808,15],[4824,57],[4882,4],[4888,67],[4992,16],[5024,85],[5121,620],[5743,17],[5761,26],[5792,75],[5888,13],[5902,4],[5920,18],[5952,18],[5984,13],[5998,3],[6016,52],6108,[6176,35],[6212,52],[6272,41],6314,[6320,70],[6400,29],[6480,30],[6512,5],[6528,44],[6593,7],[6656,23],[6688,53],[6917,47],[6981,7],[7043,30],7086,7087,[7168,36],[7245,3],[7258,30],[7401,4],[7406,4],[8501,4],[11568,54],[11648,23],[11680,7],[11688,7],[11696,7],[11704,7],[11712,7],[11720,7],[11728,7],[11736,7],12294,12348,[12353,86],12447,[12449,90],12543,[12549,41],[12593,94],[12704,24],[12784,16],13312,19893,19968,40907,[40960,21],[40982,1143],[42192,40],[42240,268],[42512,16],42538,42539,42606,[42656,70],[43003,7],[43011,3],[43015,4],[43020,23],[43072,52],[43138,50],[43250,6],43259,[43274,28],[43312,23],[43360,29],[43396,47],[43520,41],[43584,3],[43588,8],[43616,16],[43633,6],43642,[43648,48],43697,43701,43702,[43705,5],43712,43714,43739,43740,[43968,35],44032,55203,[55216,23],[55243,49],[63744,302],[64048,62],[64112,106],64285,[64287,10],[64298,13],[64312,5],64318,64320,64321,64323,64324,[64326,108],[64467,363],[64848,64],[64914,54],[65008,12],[65136,5],[65142,135],[65382,10],[65393,45],[65440,31],[65474,6],[65482,6],[65490,6],[65498,3],[65536,12],[65549,26],[65576,19],65596,65597,[65599,15],[65616,14],[65664,123],[66176,29],[66208,49],[66304,31],[66352,17],[66370,8],[66432,30],[66464,36],[66504,8],[66640,78],[67584,6],67592,[67594,44],67639,67640,67644,[67647,23],[67840,22],[67872,26],68096,[68112,4],[68117,3],[68121,27],[68192,29],[68352,54],[68416,22],[68448,19],[68608,73],[69763,45],[73728,879],[77824,1071],131072,173782,173824,177972,[194560,542]],"Lt":[[453,3,3],498,[8072,8],[8088,8],[8104,8],8124,8140,8188],"Lm":[[688,18],[710,12],[736,5],748,750,884,890,1369,1600,1765,1766,2036,2037,2042,2074,2084,2088,2417,3654,3782,4348,6103,6211,6823,[7288,6],[7468,54],7544,[7579,37],8305,8319,[8336,5],11389,11631,11823,12293,[12337,5],12347,12445,12446,[12540,3],40981,[42232,6],42508,42623,[42775,9],42864,42888,43471,43632,43741,65392,65438,65439],"Mn":[[768,112],[1155,5],[1425,45],1471,1473,1474,1476,1477,1479,[1552,11],[1611,20],1648,[1750,7],[1759,6],1767,1768,[1770,4],1809,[1840,27],[1958,11],[2027,9],[2070,4],[2075,9],[2085,3],[2089,5],[2304,3],2364,[2369,8],2381,[2385,5],2402,2403,2433,2492,[2497,4],2509,2530,2531,2561,2562,2620,2625,2626,2631,2632,[2635,3],2641,2672,2673,2677,2689,2690,2748,[2753,5],2759,2760,2765,2786,2787,2817,2876,2879,[2881,4],2893,2902,2914,2915,2946,3008,3021,[3134,3],[3142,3],[3146,4],3157,3158,3170,3171,3260,3263,3270,3276,3277,3298,3299,[3393,4],3405,3426,3427,3530,[3538,3],3542,3633,[3636,7],[3655,8],3761,[3764,6],3771,3772,[3784,6],3864,3865,[3893,3,2],[3953,14],[3968,5],3974,3975,[3984,8],[3993,36],4038,[4141,4],[4146,6],4153,4154,4157,4158,4184,4185,[4190,3],[4209,4],4226,4229,4230,4237,4253,4959,[5906,3],[5938,3],5970,5971,6002,6003,[6071,7],6086,[6089,11],6109,[6155,3],6313,[6432,3],6439,6440,6450,[6457,3],6679,6680,6742,[6744,7],6752,6754,[6757,8],[6771,10],6783,[6912,4],6964,[6966,5],6972,6978,[7019,9],7040,7041,[7074,4],7080,7081,[7212,8],7222,7223,[7376,3],[7380,13],[7394,7],7405,[7616,39],[7677,3],[8400,13],8417,[8421,12],[11503,3],[11744,32],[12330,6],12441,12442,42607,42620,42621,42736,42737,43010,43014,43019,43045,43046,43204,[43232,18],[43302,8],[43335,11],[43392,3],43443,[43446,4],43452,[43561,6],43569,43570,43573,43574,43587,43596,43696,[43698,3],43703,43704,43710,43711,43713,44005,44008,44013,64286,[65024,16],[65056,7],66045,[68097,3],68101,68102,[68108,4],[68152,3],68159,69760,69761,[69811,4],69817,69818,[119143,3],[119163,8],[119173,7],[119210,4],[119362,3],[917760,240]],"Me":[1160,1161,1758,[8413,4],[8418,3],[42608,3]],"Mc":[2307,[2366,3],[2377,4],2382,2434,2435,[2494,3],2503,2504,2507,2508,2519,2563,[2622,3],2691,[2750,3],2761,2763,2764,2818,2819,2878,2880,2887,2888,2891,2892,2903,3006,3007,3009,3010,[3014,3],[3018,3],3031,[3073,3],[3137,4],3202,3203,3262,[3264,5],3271,3272,3274,3275,3285,3286,3330,3331,[3390,3],[3398,3],[3402,3],3415,3458,3459,[3535,3],[3544,8],3570,3571,3902,3903,3967,4139,4140,4145,4152,4155,4156,4182,4183,[4194,3],[4199,7],4227,4228,[4231,6],4239,[4250,3],6070,[6078,8],6087,6088,[6435,4],[6441,3],6448,6449,[6451,6],[6576,17],6600,6601,[6681,3],6741,6743,6753,6755,6756,[6765,6],6916,6965,6971,[6973,5],6979,6980,7042,7073,7078,7079,7082,[7204,8],7220,7221,7393,7410,43043,43044,43047,43136,43137,[43188,16],43346,43347,43395,43444,43445,43450,43451,[43453,4],43567,43568,43571,43572,43597,43643,44003,44004,44006,44007,44009,44010,44012,69762,[69808,3],69815,69816,119141,119142,[119149,6]],"Nl":[[5870,3],[8544,35],[8581,4],12295,[12321,9],[12344,3],[42726,10],[65856,53],66369,66378,[66513,5],[74752,99]],"Zl":[8232],"Zp":[8233],"Cs":[55296,56191,56192,56319,56320,57343],"Co":[57344,63743,983040,1048573,1048576,1114109],"digits":[[48,10],178,179,185,[1632,10],[1776,10],[1984,10],[2406,10],[2534,10],[2662,10],[2790,10],[2918,10],[3046,10],[3174,10],[3302,10],[3430,10],[3558,10],[3664,10],[3792,10],[3872,10],[4160,10],[4240,10],[4969,9],[6112,10],[6160,10],[6470,10],[6608,11],[6784,10],[6800,10],[6992,10],[7088,10],[7232,10],[7248,10],8304,[8308,6],[8320,10],[9312,9],[9332,9],[9352,9],9450,[9461,9],9471,[10102,9],[10112,9],[10122,9],[42528,10],[43216,10],[43264,10],[43472,10],[43504,10],[43600,10],[44016,10],[65296,10],[66720,10],[68160,4],[68912,10],[69216,9],[69714,9],[69734,10],[69872,10],[69942,10],[70096,10],[70384,10],[70736,10],[70864,10],[71248,10],[71360,10],[71472,10],[71904,10],[72784,10],[73040,10],[73120,10],[92768,10],[93008,10],[120782,50],[123200,10],[123632,10],[125264,10],[127232,11]],"numeric":[[48,10],178,179,185,[188,3],[1632,10],[1776,10],[1984,10],[2406,10],[2534,10],[2548,6],[2662,10],[2790,10],[2918,10],[2930,6],[3046,13],[3174,10],[3192,7],[3302,10],[3416,7],[3430,19],[3558,10],[3664,10],[3792,10],[3872,20],[4160,10],[4240,10],[4969,20],[5870,3],[6112,10],[6128,10],[6160,10],[6470,10],[6608,11],[6784,10],[6800,10],[6992,10],[7088,10],[7232,10],[7248,10],8304,[8308,6],[8320,10],[8528,51],[8581,5],[9312,60],[9450,22],[10102,30],11517,12295,[12321,9],[12344,3],[12690,4],[12832,10],[12872,8],[12881,15],[12928,10],[12977,15],13317,13443,14378,15181,19968,19971,19975,19977,20061,20108,20116,20118,20159,20160,20191,20200,20237,20336,20740,20806,[20841,3,2],21313,[21315,3],21324,[21441,4],22235,22769,22777,24186,24318,24319,[24332,3],24336,25342,25420,26578,28422,29590,30334,32902,33836,36014,36019,36144,38433,38470,38476,38520,38646,[42528,10],[42726,10],[43056,6],[43216,10],[43264,10],[43472,10],[43504,10],[43600,10],[44016,10],63851,63859,63864,63922,63953,63955,63997,[65296,10],[65799,45],[65856,57],65930,65931,[66273,27],[66336,4],66369,66378,[66513,5],[66720,10],[67672,8],[67705,7],[67751,9],[67835,5],[67862,6],68028,68029,[68032,16],[68050,46],[68160,9],68221,68222,[68253,3],[68331,5],[68440,8],[68472,8],[68521,7],[68858,6],[68912,10],[69216,31],[69405,10],[69457,4],[69714,30],[69872,10],[69942,10],[70096,10],[70113,20],[70384,10],[70736,10],[70864,10],[71248,10],[71360,10],[71472,12],[71904,19],[72784,29],[73040,10],[73120,10],[73664,21],[74752,111],[92768,10],[93008,10],[93019,7],[93824,23],[119520,20],[119648,25],[120782,50],[123200,10],[123632,10],[125127,9],[125264,10],[126065,59],[126125,3],[126129,4],[126209,45],[126255,15],[127232,13],131073,131172,131298,131361,133418,133507,133516,133532,133866,133885,133913,140176,141720,146203,156269,194704],"Cn":[[888,2],[896,4],[907,1],[909,1],[930,1],[1328,1],[1367,2],[1419,2],[1424,1],[1480,8],[1515,4],[1525,11],[1565,1],[1806,1],[1867,2],[1970,14],[2043,2],[2094,2],[2111,1],[2140,2],[2143,1],[2155,53],[2229,1],[2238,21],[2436,1],[2445,2],[2449,2],[2473,1],[2481,1],[2483,3],[2490,2],[2501,2],[2505,2],[2511,8],[2520,4],[2526,1],[2532,2],[2559,2],[2564,1],[2571,4],[2577,2],[2601,1],[2609,1],[2612,1],[2615,1],[2618,2],[2621,1],[2627,4],[2633,2],[2638,3],[2642,7],[2653,1],[2655,7],[2679,10],[2692,1],[2702,1],[2706,1],[2729,1],[2737,1],[2740,1],[2746,2],[2758,1],[2762,1],[2766,2],[2769,15],[2788,2],[2802,7],[2816,1],[2820,1],[2829,2],[2833,2],[2857,1],[2865,1],[2868,1],[2874,2],[2885,2],[2889,2],[2894,8],[2904,4],[2910,1],[2916,2],[2936,10],[2948,1],[2955,3],[2961,1],[2966,3],[2971,1],[2973,1],[2976,3],[2981,3],[2987,3],[3002,4],[3011,3],[3017,1],[3022,2],[3025,6],[3032,14],[3067,5],[3085,1],[3089,1],[3113,1],[3130,3],[3141,1],[3145,1],[3150,7],[3159,1],[3163,5],[3172,2],[3184,7],[3213,1],[3217,1],[3241,1],[3252,1],[3258,2],[3269,1],[3273,1],[3278,7],[3287,7],[3295,1],[3300,2],[3312,1],[3315,13],[3332,1],[3341,1],[3345,1],[3397,1],[3401,1],[3408,4],[3428,2],[3456,2],[3460,1],[3479,3],[3506,1],[3516,1],[3518,2],[3527,3],[3531,4],[3541,1],[3543,1],[3552,6],[3568,2],[3573,12],[3643,4],[3676,37],[3715,1],[3717,1],[3723,1],[3748,1],[3750,1],[3774,2],[3781,1],[3783,1],[3790,2],[3802,2],[3808,32],[3912,1],[3949,4],[3992,1],[4029,1],[4045,1],[4059,37],[4294,1],[4296,5],[4302,2],[4681,1],[4686,2],[4695,1],[4697,1],[4702,2],[4745,1],[4750,2],[4785,1],[4790,2],[4799,1],[4801,1],[4806,2],[4823,1],[4881,1],[4886,2],[4955,2],[4989,3],[5018,6],[5110,2],[5118,2],[5789,3],[5881,7],[5901,1],[5909,11],[5943,9],[5972,12],[5997,1],[6001,1],[6004,12],[6110,2],[6122,6],[6138,6],[6159,1],[6170,6],[6265,7],[6315,5],[6390,10],[6431,1],[6444,4],[6460,4],[6465,3],[6510,2],[6517,11],[6572,4],[6602,6],[6619,3],[6684,2],[6751,1],[6781,2],[6794,6],[6810,6],[6830,2],[6847,65],[6988,4],[7037,3],[7156,8],[7224,3],[7242,3],[7305,7],[7355,2],[7368,8],[7419,5],[7674,1],[7958,2],[7966,2],[8006,2],[8014,2],[8024,1],[8026,1],[8028,1],[8030,1],[8062,2],[8117,1],[8133,1],[8148,2],[8156,1],[8176,2],[8181,1],[8191,1],[8293,1],[8306,2],[8335,1],[8349,3],[8384,16],[8433,15],[8588,4],[9255,25],[9291,21],[11124,2],[11158,2],[11311,1],[11359,1],[11508,5],[11558,1],[11560,5],[11566,2],[11624,7],[11633,14],[11671,9],[11687,1],[11695,1],[11703,1],[11711,1],[11719,1],[11727,1],[11735,1],[11743,1],[11856,48],[11930,1],[12020,12],[12246,26],[12284,4],[12352,1],[12439,2],[12544,5],[12592,1],[12687,1],[12731,5],[12772,12],[12831,1],[19894,10],[40944,16],[42125,3],[42183,9],[42540,20],[42744,8],[42944,2],[42951,48],[43052,4],[43066,6],[43128,8],[43206,8],[43226,6],[43348,11],[43389,3],[43470,1],[43482,4],[43519,1],[43575,9],[43598,2],[43610,2],[43715,24],[43767,10],[43783,2],[43791,2],[43799,9],[43815,1],[43823,1],[43880,8],[44014,2],[44026,6],[55204,12],[55239,4],[55292,4],[64110,2],[64218,38],[64263,12],[64280,5],[64311,1],[64317,1],[64319,1],[64322,1],[64325,1],[64450,17],[64832,16],[64912,2],[64968,40],[65022,2],[65050,6],[65107,1],[65127,1],[65132,4],[65141,1],[65277,2],[65280,1],[65471,3],[65480,2],[65488,2],[65496,2],[65501,3],[65511,1],[65519,10],[65534,2],[65548,1],[65575,1],[65595,1],[65598,1],[65614,2],[65630,34],[65787,5],[65795,4],[65844,3],[65935,1],[65948,4],[65953,47],[66046,130],[66205,3],[66257,15],[66300,4],[66340,9],[66379,5],[66427,5],[66462,1],[66500,4],[66518,42],[66718,2],[66730,6],[66772,4],[66812,4],[66856,8],[66916,11],[66928,144],[67383,9],[67414,10],[67432,152],[67590,2],[67593,1],[67638,1],[67641,3],[67645,2],[67670,1],[67743,8],[67760,48],[67827,1],[67830,5],[67868,3],[67898,5],[67904,64],[68024,4],[68048,2],[68100,1],[68103,5],[68116,1],[68120,1],[68150,2],[68155,4],[68169,7],[68185,7],[68256,32],[68327,4],[68343,9],[68406,3],[68438,2],[68467,5],[68498,7],[68509,12],[68528,80],[68681,55],[68787,13],[68851,7],[68904,8],[68922,294],[69247,129],[69416,8],[69466,134],[69623,9],[69710,4],[69744,15],[69826,11],[69838,2],[69865,7],[69882,6],[69941,1],[69959,9],[70007,9],[70094,2],[70112,1],[70133,11],[70162,1],[70207,65],[70279,1],[70281,1],[70286,1],[70302,1],[70314,6],[70379,5],[70394,6],[70404,1],[70413,2],[70417,2],[70441,1],[70449,1],[70452,1],[70458,1],[70469,2],[70473,2],[70478,2],[70481,6],[70488,5],[70500,2],[70509,3],[70517,139],[70746,1],[70748,1],[70752,32],[70856,8],[70874,166],[71094,2],[71134,34],[71237,11],[71258,6],[71277,19],[71353,7],[71370,54],[71451,2],[71468,4],[71488,192],[71740,100],[71923,12],[71936,160],[72104,2],[72152,2],[72165,27],[72264,8],[72355,29],[72441,263],[72713,1],[72759,1],[72774,10],[72813,3],[72848,2],[72872,1],[72887,73],[72967,1],[72970,1],[73015,3],[73019,1],[73022,1],[73032,8],[73050,6],[73062,1],[73065,1],[73103,1],[73106,1],[73113,7],[73130,310],[73465,199],[73714,13],[74650,102],[74863,1],[74869,11],[75076,2748],[78895,1],[78905,4039],[83527,8633],[92729,7],[92767,1],[92778,4],[92784,96],[92910,2],[92918,10],[92998,10],[93018,1],[93026,1],[93048,5],[93072,688],[93851,101],[94027,4],[94088,7],[94112,64],[94180,28],[100344,8],[101107,9485],[110879,49],[110931,17],[110952,8],[111356,2308],[113771,5],[113789,3],[113801,7],[113818,2],[113828,4956],[119030,10],[119079,2],[119273,23],[119366,154],[119540,12],[119639,9],[119673,135],[119893,1],[119965,1],[119968,2],[119971,2],[119975,2],[119981,1],[119994,1],[119996,1],[120004,1],[120070,1],[120075,2],[120085,1],[120093,1],[120122,1],[120127,1],[120133,1],[120135,3],[120145,1],[120486,2],[120780,2],[121484,15],[121504,1],[121520,1360],[122887,1],[122905,2],[122914,1],[122917,1],[122923,213],[123181,3],[123198,2],[123210,4],[123216,368],[123642,5],[123648,1280],[125125,2],[125143,41],[125260,4],[125274,4],[125280,785],[126133,76],[126270,194],[126468,1],[126496,1],[126499,1],[126501,2],[126504,1],[126515,1],[126520,1],[126522,1],[126524,6],[126531,4],[126536,1],[126538,1],[126540,1],[126544,1],[126547,1],[126549,2],[126552,1],[126554,1],[126556,1],[126558,1],[126560,1],[126563,1],[126565,2],[126571,1],[126579,1],[126584,1],[126589,1],[126591,1],[126602,1],[126620,5],[126628,1],[126634,1],[126652,52],[126706,270],[127020,4],[127124,12],[127151,2],[127168,1],[127184,1],[127222,10],[127245,3],[127341,3],[127405,57],[127491,13],[127548,4],[127561,7],[127570,14],[127590,154],[128726,10],[128749,3],[128763,5],[128884,12],[128985,7],[129004,20],[129036,4],[129096,8],[129114,6],[129160,8],[129198,82],[129292,1],[129394,1],[129399,3],[129443,2],[129451,3],[129483,2],[129620,12],[129646,2],[129652,4],[129659,5],[129667,13],[129686,1386],[173783,41],[177973,11],[178206,2],[183970,14],[191457,3103],[195102,722403],[917506,30],[917632,128],[918000,65040],[1048574,2]]} -$B.unicode_casefold={223:[115,115],304:[105,775],329:[700,110],496:[106,780],912:[953,776,769],944:[965,776,769],1415:[1381,1410],7830:[104,817],7831:[116,776],7832:[119,778],7833:[121,778],7834:[97,702],7838:[223],8016:[965,787],8018:[965,787,768],8020:[965,787,769],8022:[965,787,834],8064:[7936,953],8065:[7937,953],8066:[7938,953],8067:[7939,953],8068:[7940,953],8069:[7941,953],8070:[7942,953],8071:[7943,953],8072:[8064],8073:[8065],8074:[8066],8075:[8067],8076:[8068],8077:[8069],8078:[8070],8079:[8071],8080:[7968,953],8081:[7969,953],8082:[7970,953],8083:[7971,953],8084:[7972,953],8085:[7973,953],8086:[7974,953],8087:[7975,953],8088:[8080],8089:[8081],8090:[8082],8091:[8083],8092:[8084],8093:[8085],8094:[8086],8095:[8087],8096:[8032,953],8097:[8033,953],8098:[8034,953],8099:[8035,953],8100:[8036,953],8101:[8037,953],8102:[8038,953],8103:[8039,953],8104:[8096],8105:[8097],8106:[8098],8107:[8099],8108:[8100],8109:[8101],8110:[8102],8111:[8103],8114:[8048,953],8115:[945,953],8116:[940,953],8118:[945,834],8119:[945,834,953],8124:[8115],8130:[8052,953],8131:[951,953],8132:[942,953],8134:[951,834],8135:[951,834,953],8140:[8131],8146:[953,776,768],8147:[953,776,769],8150:[953,834],8151:[953,776,834],8162:[965,776,768],8163:[965,776,769],8164:[961,787],8166:[965,834],8167:[965,776,834],8178:[8060,953],8179:[969,953],8180:[974,953],8182:[969,834],8183:[969,834,953],8188:[8179],64256:[102,102],64257:[102,105],64258:[102,108],64259:[102,102,105],64260:[102,102,108],64261:[115,116],64262:[115,116],64275:[1396,1398],64276:[1396,1381],64277:[1396,1387],64278:[1406,1398],64279:[1396,1389]} -$B.unicode_bidi_whitespace=[9,10,11,12,13,28,29,30,31,32,133,5760,6158,8192,8193,8194,8195,8196,8197,8198,8199,8200,8201,8202,8232,8233,8287,12288] -$B.unicode_identifiers={"XID_Start":[95,[65,26],[97,26],170,181,186,[192,23],[216,31],[248,458],[710,12],[736,5],748,750,[880,5],[886,2],[891,3],902,[904,3],908,[910,20],[931,83],[1015,139],[1162,156],[1329,38],1369,[1377,39],[1488,27],[1520,3],[1569,42],[1646,2],[1649,99],1749,[1765,2],[1774,2],[1786,3],1791,1808,[1810,30],[1869,89],1969,[1994,33],[2036,2],2042,[2048,22],2074,2084,2088,[2308,54],2365,2384,[2392,10],2417,2418,[2425,7],[2437,8],[2447,2],[2451,22],[2474,7],2482,[2486,4],2493,2510,[2524,2],[2527,3],[2544,2],[2565,6],[2575,2],[2579,22],[2602,7],[2610,2],[2613,2],[2616,2],[2649,4],2654,[2674,3],[2693,9],[2703,3],[2707,22],[2730,7],[2738,2],[2741,5],2749,2768,[2784,2],[2821,8],[2831,2],[2835,22],[2858,7],[2866,2],[2869,5],2877,[2908,2],[2911,3],2929,2947,[2949,6],[2958,3],[2962,4],[2969,2],2972,[2974,2],[2979,2],[2984,3],[2990,12],3024,[3077,8],[3086,3],[3090,23],[3114,10],[3125,5],3133,[3160,2],[3168,2],[3205,8],[3214,3],[3218,23],[3242,10],[3253,5],3261,3294,[3296,2],[3333,8],[3342,3],[3346,23],[3370,16],3389,[3424,2],[3450,6],[3461,18],[3482,24],[3507,9],3517,[3520,7],[3585,48],3634,[3648,7],[3713,2],3716,[3719,2],3722,3725,[3732,4],[3737,7],[3745,3],3749,3751,[3754,2],[3757,4],3762,3773,[3776,5],3782,[3804,2],3840,[3904,8],[3913,36],[3976,4],[4096,43],4159,[4176,6],[4186,4],4193,[4197,2],[4206,3],[4213,13],4238,[4256,38],[4304,43],4348,[4352,329],[4682,4],[4688,7],4696,[4698,4],[4704,41],[4746,4],[4752,33],[4786,4],[4792,7],4800,[4802,4],[4808,15],[4824,57],[4882,4],[4888,67],[4992,16],[5024,85],[5121,620],[5743,17],[5761,26],[5792,75],[5870,3],[5888,13],[5902,4],[5920,18],[5952,18],[5984,13],[5998,3],[6016,52],6103,6108,[6176,88],[6272,41],6314,[6320,70],[6400,29],[6480,30],[6512,5],[6528,44],[6593,7],[6656,23],[6688,53],6823,[6917,47],[6981,7],[7043,30],[7086,2],[7168,36],[7245,3],[7258,36],[7401,4],[7406,4],[7424,192],[7680,278],[7960,6],[7968,38],[8008,6],[8016,8],8025,8027,8029,[8031,31],[8064,53],[8118,7],8126,[8130,3],[8134,7],[8144,4],[8150,6],[8160,13],[8178,3],[8182,7],8305,8319,[8336,5],8450,8455,[8458,10],8469,8472,[8473,5],8484,8486,8488,[8490,16],[8508,4],[8517,5],8526,[8544,41],[11264,47],[11312,47],[11360,133],[11499,4],[11520,38],[11568,54],11631,[11648,23],[11680,7],[11688,7],[11696,7],[11704,7],[11712,7],[11720,7],[11728,7],[11736,7],12293,12294,12295,[12321,9],[12337,5],[12344,5],[12353,86],[12445,3],[12449,90],[12540,4],[12549,41],[12593,94],[12704,24],[12784,16],[13312,6582],[19968,20940],[40960,1165],[42192,46],[42240,269],[42512,16],[42538,2],[42560,32],[42594,13],42623,[42624,24],[42656,80],[42775,9],[42786,103],[42891,2],[43003,7],[43011,3],[43015,4],[43020,23],[43072,52],[43138,50],[43250,6],43259,[43274,28],[43312,23],[43360,29],[43396,47],43471,[43520,41],[43584,3],[43588,8],[43616,23],43642,[43648,48],43697,[43701,2],[43705,5],43712,43714,[43739,3],[43968,35],[44032,11172],[55216,23],[55243,49],[63744,302],[64048,62],[64112,106],[64256,7],[64275,5],64285,[64287,10],[64298,13],[64312,5],64318,[64320,2],[64323,2],[64326,108],[64467,139],[64612,218],[64848,64],[64914,54],[65008,10],65137,65139,65143,65145,65147,65149,[65151,126],[65313,26],[65345,26],[65382,56],[65440,31],[65474,6],[65482,6],[65490,6],[65498,3],[65536,12],[65549,26],[65576,19],[65596,2],[65599,15],[65616,14],[65664,123],[65856,53],[66176,29],[66208,49],[66304,31],[66352,27],[66432,30],[66464,36],[66504,8],[66513,5],[66560,158],[67584,6],67592,[67594,44],[67639,2],67644,[67647,23],[67840,22],[67872,26],68096,[68112,4],[68117,3],[68121,27],[68192,29],[68352,54],[68416,22],[68448,19],[68608,73],[69763,45],[73728,879],[74752,99],[77824,1071],[119808,85],[119894,71],[119966,2],119970,[119973,2],[119977,4],[119982,12],119995,[119997,7],[120005,65],[120071,4],[120077,8],[120086,7],[120094,28],[120123,4],[120128,5],120134,[120138,7],[120146,340],[120488,25],[120514,25],[120540,31],[120572,25],[120598,31],[120630,25],[120656,31],[120688,25],[120714,31],[120746,25],[120772,8],[131072,42711],[173824,4149],[194560,542]],"XID_Continue":[[48,10],[65,26],95,[97,26],170,181,183,186,[192,23],[216,31],[248,458],[710,12],[736,5],748,750,[768,117],[886,2],[891,3],902,903,[904,3],908,[910,20],[931,83],[1015,139],[1155,5],[1162,156],[1329,38],1369,[1377,39],[1425,45],1471,[1473,2],[1476,2],1479,[1488,27],[1520,3],[1552,11],[1569,62],[1632,10],[1646,102],1749,[1750,7],[1759,10],[1770,19],1791,1808,1809,[1810,57],[1869,101],[1984,54],2042,[2048,46],[2304,58],2364,2365,[2366,17],2384,[2385,5],[2392,12],[2406,10],2417,2418,[2425,7],2433,[2434,2],[2437,8],[2447,2],[2451,22],[2474,7],2482,[2486,4],2492,2493,[2494,7],[2503,2],[2507,4],2519,[2524,2],[2527,5],[2534,12],[2561,3],[2565,6],[2575,2],[2579,22],[2602,7],[2610,2],[2613,2],[2616,2],2620,[2622,5],[2631,2],[2635,3],2641,[2649,4],2654,[2662,16],[2689,3],[2693,9],[2703,3],[2707,22],[2730,7],[2738,2],[2741,5],2748,2749,[2750,8],[2759,3],[2763,3],2768,[2784,4],[2790,10],2817,[2818,2],[2821,8],[2831,2],[2835,22],[2858,7],[2866,2],[2869,5],2876,2877,2878,2879,2880,[2881,4],[2887,2],[2891,3],2902,2903,[2908,2],[2911,5],[2918,10],2929,2946,2947,[2949,6],[2958,3],[2962,4],[2969,2],2972,[2974,2],[2979,2],[2984,3],[2990,12],[3006,5],[3014,3],[3018,4],3024,3031,[3046,10],[3073,3],[3077,8],[3086,3],[3090,23],[3114,10],[3125,5],3133,[3134,7],[3142,3],[3146,4],[3157,2],[3160,2],[3168,4],[3174,10],[3202,2],[3205,8],[3214,3],[3218,23],[3242,10],[3253,5],3260,3261,3262,3263,[3264,5],3270,[3271,2],[3274,4],[3285,2],3294,[3296,4],[3302,10],[3330,2],[3333,8],[3342,3],[3346,23],[3370,16],3389,[3390,7],[3398,3],[3402,4],3415,[3424,4],[3430,10],[3450,6],[3458,2],[3461,18],[3482,24],[3507,9],3517,[3520,7],3530,[3535,6],3542,[3544,8],[3570,2],[3585,58],[3648,15],[3664,10],[3713,2],3716,[3719,2],3722,3725,[3732,4],[3737,7],[3745,3],3749,3751,[3754,2],[3757,13],[3771,3],[3776,5],3782,[3784,6],[3792,10],[3804,2],3840,[3864,2],[3872,10],3893,3895,3897,[3902,10],[3913,36],[3953,20],[3974,6],[3984,8],[3993,36],4038,[4096,74],[4176,78],[4256,38],[4304,43],4348,[4352,329],[4682,4],[4688,7],4696,[4698,4],[4704,41],[4746,4],[4752,33],[4786,4],[4792,7],4800,[4802,4],[4808,15],[4824,57],[4882,4],[4888,67],4959,[4969,9],[4992,16],[5024,85],[5121,620],[5743,17],[5761,26],[5792,75],[5870,3],[5888,13],[5902,7],[5920,21],[5952,20],[5984,13],[5998,3],[6002,2],[6016,52],6070,[6071,29],6103,6108,6109,[6112,10],[6155,3],[6160,10],[6176,88],[6272,43],[6320,70],[6400,29],[6432,12],[6448,12],[6470,40],[6512,5],[6528,44],[6576,26],[6608,11],[6656,28],[6688,63],6752,6753,6754,[6755,26],6783,[6784,10],[6800,10],6823,[6912,76],[6992,10],[7019,9],[7040,43],[7086,12],[7168,56],[7232,10],[7245,49],[7376,3],[7380,31],[7424,231],[7677,281],[7960,6],[7968,38],[8008,6],[8016,8],8025,8027,8029,[8031,31],[8064,53],[8118,7],8126,[8130,3],[8134,7],[8144,4],[8150,6],[8160,13],[8178,3],[8182,7],[8255,2],8276,8305,8319,[8336,5],[8400,13],8417,[8421,12],8450,8455,[8458,10],8469,8472,[8473,5],8484,8486,8488,[8490,16],[8508,4],[8517,5],8526,[8544,41],[11264,47],[11312,47],[11360,133],[11499,7],[11520,38],[11568,54],11631,[11648,23],[11680,7],[11688,7],[11696,7],[11704,7],[11712,7],[11720,7],[11728,7],[11736,7],[11744,32],12293,12294,12295,[12321,15],[12337,5],[12344,5],[12353,86],[12441,2],[12445,3],[12449,90],[12540,4],[12549,41],[12593,94],[12704,24],[12784,16],[13312,6582],[19968,20940],[40960,1165],[42192,46],[42240,269],[42512,28],[42560,32],[42594,14],[42620,2],42623,[42624,24],[42656,82],[42775,9],[42786,103],[42891,2],[43003,45],[43072,52],[43136,69],[43216,10],[43232,24],43259,[43264,46],[43312,36],[43360,29],[43392,65],43471,[43472,10],[43520,55],[43584,14],[43600,10],[43616,23],43642,43643,[43648,67],[43739,3],[43968,43],44012,44013,[44016,10],[44032,11172],[55216,23],[55243,49],[63744,302],[64048,62],[64112,106],[64256,7],[64275,5],64285,64286,[64287,10],[64298,13],[64312,5],64318,[64320,2],[64323,2],[64326,108],[64467,139],[64612,218],[64848,64],[64914,54],[65008,10],[65024,16],[65056,7],[65075,2],[65101,3],65137,65139,65143,65145,65147,65149,[65151,126],[65296,10],[65313,26],65343,[65345,26],[65382,89],[65474,6],[65482,6],[65490,6],[65498,3],[65536,12],[65549,26],[65576,19],[65596,2],[65599,15],[65616,14],[65664,123],[65856,53],66045,[66176,29],[66208,49],[66304,31],[66352,27],[66432,30],[66464,36],[66504,8],[66513,5],[66560,158],[66720,10],[67584,6],67592,[67594,44],[67639,2],67644,[67647,23],[67840,22],[67872,26],68096,[68097,3],[68101,2],[68108,8],[68117,3],[68121,27],[68152,3],68159,[68192,29],[68352,54],[68416,22],[68448,19],[68608,73],[69760,59],[73728,879],[74752,99],[77824,1071],[119141,5],[119149,6],[119163,8],[119173,7],[119210,4],[119362,3],[119808,85],[119894,71],[119966,2],119970,[119973,2],[119977,4],[119982,12],119995,[119997,7],[120005,65],[120071,4],[120077,8],[120086,7],[120094,28],[120123,4],[120128,5],120134,[120138,7],[120146,340],[120488,25],[120514,25],[120540,31],[120572,25],[120598,31],[120630,25],[120656,31],[120688,25],[120714,31],[120746,25],[120772,8],[120782,50],[131072,42711],[173824,4149],[194560,542],[917760,240]]} -$B.unicode_tables={} -for(var gc in $B.unicode){$B.unicode_tables[gc]={} -$B.unicode[gc].forEach(function(item){if(Array.isArray(item)){var step=item[2]||1 -for(var i=0,nb=item[1];i < nb;i+=1){$B.unicode_tables[gc][item[0]+i*step]=true}}else{$B.unicode_tables[gc][item]=true}})} -for(var key in $B.unicode_identifiers){$B.unicode_tables[key]={} -for(const item of $B.unicode_identifiers[key]){if(Array.isArray(item)){for(var i=0;i < item[1];i++){$B.unicode_tables[key][item[0]+i]=true}}else{$B.unicode_tables[key][item]=true}}} -$B.is_unicode_cn=function(i){ -var cn=$B.unicode.Cn -for(var j=0,len=cn.length;j < len;j++){if(i >=cn[j][0]){if(i < cn[j][0]+cn[j][1]){return true}} -return false} -return false} -; -;(function($B){var bltns=$B.InjectBuiltins() -eval(bltns) -var unicode_tables=$B.unicode_tables -var str={__class__:_b_.type,__dir__:object.__dir__,$infos:{__module__:"builtins",__name__:"str"},$is_class:true,$native:true} -function normalize_start_end($){if($.start===null ||$.start===_b_.None){$.start=0} -else if($.start < 0){$.start+=$.self.length -$.start=Math.max(0,$.start)} -if($.end===null ||$.end===_b_.None){$.end=$.self.length} -else if($.end < 0){$.end+=$.self.length -$.end=Math.max(0,$.end)} -if(! isinstance($.start,_b_.int)||! isinstance($.end,_b_.int)){throw _b_.TypeError.$factory("slice indices must be integers "+ -"or None or have an __index__ method")}} -function reverse(s){ -return s.split("").reverse().join("")} -function check_str(obj){if(! _b_.isinstance(obj,str)){throw _b_.TypeError.$factory("can't convert '"+ -$B.class_name(obj)+"' object to str implicitly")}} -str.__add__=function(self,other){if(!(typeof other==="string")){try{return getattr(other,"__radd__")(self)} -catch(err){throw _b_.TypeError.$factory("Can't convert "+ -$B.class_name(other)+" to str implicitly")}} -return self+other} -str.__contains__=function(self,item){if(! _b_.isinstance(item,str)){throw _b_.TypeError.$factory("'in ' requires "+ -"string as left operand, not "+item.__class__)} -if(typeof item=="string"){var nbcar=item.length}else{var nbcar=_b_.len(item)} -if(nbcar==0){return true} -if(self.length==0){return nbcar==0} -for(var i=0,len=self.length;i < len;i++){if(self.substr(i,nbcar)==item){return true}} -return false} -str.__delitem__=function(){throw _b_.TypeError.$factory("'str' object doesn't support item deletion")} -str.__dir__=object.__dir__ -str.__eq__=function(self,other){if(other===undefined){ -return self===str} -if(_b_.isinstance(other,_b_.str)){return other.valueOf()==self.valueOf()} -return _b_.NotImplemented} -function preformat(self,fmt){if(fmt.empty){return _b_.str.$factory(self)} -if(fmt.type && fmt.type !="s"){throw _b_.ValueError.$factory("Unknown format code '"+fmt.type+ -"' for object of type 'str'")} -return self} -str.__format__=function(self,format_spec){var fmt=new $B.parse_format_spec(format_spec) -if(fmt.sign !==undefined){throw _b_.ValueError.$factory( -"Sign not allowed in string format specifier")} -if(fmt.precision){self=self.substr(0,fmt.precision)} -fmt.align=fmt.align ||"<" -return $B.format_width(preformat(self,fmt),fmt)} -str.__getitem__=function(self,arg){if(isinstance(arg,_b_.int)){var pos=arg -if(arg < 0){pos+=self.length} -if(pos >=0 && pos < self.length){return self.charAt(pos)} -throw _b_.IndexError.$factory("string index out of range")} -if(isinstance(arg,slice)){var s=_b_.slice.$conv_for_seq(arg,self.length),start=s.start,stop=s.stop,step=s.step -var res="",i=null -if(step > 0){if(stop <=start){return ""} -for(var i=start;i < stop;i+=step){res+=self.charAt(i)}}else{if(stop >=start){return ''} -for(var i=start;i > stop;i+=step){res+=self.charAt(i)}} -return res} -if(isinstance(arg,_b_.bool)){return self.__getitem__(_b_.int.$factory(arg))} -throw _b_.TypeError.$factory("string indices must be integers")} -var prefix=2,suffix=3,mask=(2**32-1),str_hash_cache={} -str.$nb_str_hash_cache=0 -function fnv(p){if(p.length==0){return 0} -var x=prefix -x=(x ^(p.charCodeAt(0)<< 7))& mask -for(var i=0,len=p.length;i < len;i++){x=((1000003*x)^ p.charCodeAt(i))& mask} -x=(x ^ p.length)& mask -x=(x ^ suffix)& mask -if(x==-1){x=-2} -return x} -str.__hash__=function(self){if(str_hash_cache[self]!==undefined){return str_hash_cache[self]} -str.$nb_str_hash_cache++ -if(str.$nb_str_hash_cache > 100000){ -str.$nb_str_hash_cache=0 -str_hash_cache={}} -return str_hash_cache[self]=fnv(self)} -str.__init__=function(self,arg){self.valueOf=function(){return arg} -self.toString=function(){return arg} -return _b_.None} -var str_iterator=$B.make_iterator_class("str_iterator") -str.__iter__=function(self){var items=self.split("") -return str_iterator.$factory(items)} -str.__len__=function(self){return self.length} -var kwarg_key=new RegExp("([^\\)]*)\\)") -var NotANumber=function(){this.name="NotANumber"} -var number_check=function(s){if(! isinstance(s,[_b_.int,_b_.float])){throw new NotANumber()}} -var get_char_array=function(size,char){if(size <=0){return ""} -return new Array(size+1).join(char)} -var format_padding=function(s,flags,minus_one){var padding=flags.padding -if(! padding){ -return s} -s=s.toString() -padding=parseInt(padding,10) -if(minus_one){ -padding-=1} -if(! flags.left){return get_char_array(padding-s.length,flags.pad_char)+s}else{ -return s+get_char_array(padding-s.length,flags.pad_char)}} -var format_int_precision=function(val,flags){var precision=flags.precision -if(!precision){return val.toString()} -precision=parseInt(precision,10) -var s -if(val.__class__===$B.long_int){s=$B.long_int.to_base(val,10)}else{s=val.toString()} -if(s[0]==="-"){return "-"+get_char_array(precision-s.length+1,"0")+s.slice(1)} -return get_char_array(precision-s.length,"0")+s} -var format_float_precision=function(val,upper,flags,modifier){var precision=flags.precision -if(isFinite(val)){return modifier(val,precision,flags,upper)} -if(val===Infinity){val="inf"}else if(val===-Infinity){val="-inf"}else{val="nan"} -if(upper){return val.toUpperCase()} -return val} -var format_sign=function(val,flags){if(flags.sign){if(val >=0){return "+"}}else if(flags.space){if(val >=0){return " "}} -return ""} -var str_format=function(val,flags){ -flags.pad_char=" " -return format_padding(str.$factory(val),flags)} -var num_format=function(val,flags){number_check(val) -if(val.__class__===$B.long_int){val=$B.long_int.to_base(val,10)}else{val=parseInt(val)} -var s=format_int_precision(val,flags) -if(flags.pad_char==="0"){if(val < 0){s=s.substring(1) -return "-"+format_padding(s,flags,true)} -var sign=format_sign(val,flags) -if(sign !==""){return sign+format_padding(s,flags,true)}} -return format_padding(format_sign(val,flags)+s,flags)} -var repr_format=function(val,flags){flags.pad_char=" " -return format_padding(repr(val),flags)} -var ascii_format=function(val,flags){flags.pad_char=" " -return format_padding(ascii(val),flags)} -var _float_helper=function(val,flags){number_check(val) -if(! flags.precision){if(! flags.decimal_point){flags.precision=6}else{flags.precision=0}}else{flags.precision=parseInt(flags.precision,10) -validate_precision(flags.precision)} -return parseFloat(val)} -var trailing_zeros=/(.*?)(0+)([eE].*)/,leading_zeros=/\.(0*)/,trailing_dot=/\.$/ -var validate_precision=function(precision){ -if(precision > 20){precision=20}} -var floating_point_format=function(val,upper,flags){val=_float_helper(val,flags),v=val.toString(),v_len=v.length,dot_idx=v.indexOf('.') -if(dot_idx < 0){dot_idx=v_len} -if(val < 1 && val >-1){var zeros=leading_zeros.exec(v),numzeros -if(zeros){numzeros=zeros[1].length}else{numzeros=0} -if(numzeros >=4){val=format_sign(val,flags)+format_float_precision(val,upper,flags,_floating_g_exp_helper) -if(!flags.alternate){var trl=trailing_zeros.exec(val) -if(trl){val=trl[1].replace(trailing_dot,"")+trl[3]}}else{if(flags.precision <=1){val=val[0]+"."+val.substring(1)}} -return format_padding(val,flags)} -flags.precision=(flags.precision ||0)+numzeros -return format_padding(format_sign(val,flags)+ -format_float_precision(val,upper,flags,function(val,precision){return val.toFixed(min(precision,v_len-dot_idx)+ -numzeros)}),flags -)} -if(dot_idx > flags.precision){val=format_sign(val,flags)+format_float_precision(val,upper,flags,_floating_g_exp_helper) -if(! flags.alternate){var trl=trailing_zeros.exec(val) -if(trl){val=trl[1].replace(trailing_dot,"")+trl[3]}}else{if(flags.precision <=1){val=val[0]+"."+val.substring(1)}} -return format_padding(val,flags)} -return format_padding(format_sign(val,flags)+ -format_float_precision(val,upper,flags,function(val,precision){if(!flags.decimal_point){precision=min(v_len-1,6)}else if(precision > v_len){if(! flags.alternate){precision=v_len}} -if(precision < dot_idx){precision=dot_idx} -return val.toFixed(precision-dot_idx)}),flags -)} -var _floating_g_exp_helper=function(val,precision,flags,upper){if(precision){--precision} -val=val.toExponential(precision) -var e_idx=val.lastIndexOf("e") -if(e_idx > val.length-4){val=val.substring(0,e_idx+2)+"0"+val.substring(e_idx+2)} -if(upper){return val.toUpperCase()} -return val} -var floating_point_decimal_format=function(val,upper,flags){val=_float_helper(val,flags) -return format_padding(format_sign(val,flags)+ -format_float_precision(val,upper,flags,function(val,precision,flags){val=val.toFixed(precision) -if(precision===0 && flags.alternate){val+='.'} -return val}),flags -)} -var _floating_exp_helper=function(val,precision,flags,upper){val=val.toExponential(precision) -var e_idx=val.lastIndexOf("e") -if(e_idx > val.length-4){val=val.substring(0,e_idx+2)+"0"+val.substring(e_idx+2)} -if(upper){return val.toUpperCase()} -return val} -var floating_point_exponential_format=function(val,upper,flags){val=_float_helper(val,flags) -return format_padding(format_sign(val,flags)+ -format_float_precision(val,upper,flags,_floating_exp_helper),flags)} -var signed_hex_format=function(val,upper,flags){var ret -number_check(val) -if(val.__class__===$B.long_int){ret=$B.long_int.to_base(val,16)}else{ret=parseInt(val) -ret=ret.toString(16)} -ret=format_int_precision(ret,flags) -if(upper){ret=ret.toUpperCase()} -if(flags.pad_char==="0"){if(val < 0){ret=ret.substring(1) -ret="-"+format_padding(ret,flags,true)} -var sign=format_sign(val,flags) -if(sign !==""){ret=sign+format_padding(ret,flags,true)}} -if(flags.alternate){if(ret.charAt(0)==="-"){if(upper){ret="-0X"+ret.slice(1)} -else{ret="-0x"+ret.slice(1)}}else{if(upper){ret="0X"+ret} -else{ret="0x"+ret}}} -return format_padding(format_sign(val,flags)+ret,flags)} -var octal_format=function(val,flags){number_check(val) -var ret -if(val.__class__===$B.long_int){ret=$B.long_int.to_base(8)}else{ret=parseInt(val) -ret=ret.toString(8)} -ret=format_int_precision(ret,flags) -if(flags.pad_char==="0"){if(val < 0){ret=ret.substring(1) -ret="-"+format_padding(ret,flags,true)} -var sign=format_sign(val,flags) -if(sign !==""){ret=sign+format_padding(ret,flags,true)}} -if(flags.alternate){if(ret.charAt(0)==="-"){ret="-0o"+ret.slice(1)} -else{ret="0o"+ret}} -return format_padding(ret,flags)} -function series_of_bytes(val,flags){if(val.__class__ && val.__class__.$buffer_protocol){var it=_b_.iter(val),ints=[] -while(true){try{ints.push(_b_.next(it))}catch(err){if(err.__class__===_b_.StopIteration){var b=_b_.bytes.$factory(ints) -return format_padding(_b_.bytes.decode(b,"ascii"),flags)} -throw err}}}else{try{bytes_obj=$B.$getattr(val,"__bytes__") -return format_padding(_b_.bytes.decode(bytes_obj),flags)}catch(err){if(err.__class__===_b_.AttributeError){throw _b_.TypeError.$factory("%b does not accept '"+ -$B.class_name(val)+"'")} -throw err}}} -var single_char_format=function(val,flags){if(isinstance(val,str)&& val.length==1){return val}else if(isinstance(val,bytes)&& val.source.length==1){val=val.source[0]}else{try{val=_b_.int.$factory(val)}catch(err){throw _b_.TypeError.$factory("%c requires int or char")}} -return format_padding(chr(val),flags)} -var num_flag=function(c,flags){if(c==="0" && ! flags.padding && ! flags.decimal_point && ! flags.left){flags.pad_char="0" -return} -if(!flags.decimal_point){flags.padding=(flags.padding ||"")+c}else{flags.precision=(flags.precision ||"")+c}} -var decimal_point_flag=function(val,flags){if(flags.decimal_point){ -throw new UnsupportedChar()} -flags.decimal_point=true} -var neg_flag=function(val,flags){flags.pad_char=" " -flags.left=true} -var space_flag=function(val,flags){flags.space=true} -var sign_flag=function(val,flags){flags.sign=true} -var alternate_flag=function(val,flags){flags.alternate=true} -var char_mapping={"b":series_of_bytes,"s":str_format,"d":num_format,"i":num_format,"u":num_format,"o":octal_format,"r":repr_format,"a":ascii_format,"g":function(val,flags){return floating_point_format(val,false,flags)},"G":function(val,flags){return floating_point_format(val,true,flags)},"f":function(val,flags){return floating_point_decimal_format(val,false,flags)},"F":function(val,flags){return floating_point_decimal_format(val,true,flags)},"e":function(val,flags){return floating_point_exponential_format(val,false,flags)},"E":function(val,flags){return floating_point_exponential_format(val,true,flags)},"x":function(val,flags){return signed_hex_format(val,false,flags)},"X":function(val,flags){return signed_hex_format(val,true,flags)},"c":single_char_format,"0":function(val,flags){return num_flag("0",flags)},"1":function(val,flags){return num_flag("1",flags)},"2":function(val,flags){return num_flag("2",flags)},"3":function(val,flags){return num_flag("3",flags)},"4":function(val,flags){return num_flag("4",flags)},"5":function(val,flags){return num_flag("5",flags)},"6":function(val,flags){return num_flag("6",flags)},"7":function(val,flags){return num_flag("7",flags)},"8":function(val,flags){return num_flag("8",flags)},"9":function(val,flags){return num_flag("9",flags)},"-":neg_flag," ":space_flag,"+":sign_flag,".":decimal_point_flag,"#":alternate_flag} -var UnsupportedChar=function(){this.name="UnsupportedChar"} -str.__mod__=function(self,args){var length=self.length,pos=0 |0,argpos=null,getitem -if(_b_.isinstance(args,_b_.tuple)){argpos=0 |0}else{getitem=_b_.getattr(args,"__getitem__",_b_.None)} -var ret='' -var $get_kwarg_string=function(s){ -++pos -var rslt=kwarg_key.exec(s.substring(newpos)) -if(! rslt){throw _b_.ValueError.$factory("incomplete format key")} -var key=rslt[1] -newpos+=rslt[0].length -try{var self=getitem(key)}catch(err){if(err.name==="KeyError"){throw err} -throw _b_.TypeError.$factory("format requires a mapping")} -return get_string_value(s,self)} -var $get_arg_string=function(s){ -var self -if(argpos===null){ -self=args}else{self=args[argpos++] -if(self===undefined){throw _b_.TypeError.$factory( -"not enough arguments for format string")}} -return get_string_value(s,self)} -var get_string_value=function(s,self){ -var flags={"pad_char":" "} -do{var func=char_mapping[s[newpos]] -try{if(func===undefined){throw new UnsupportedChar()}else{var ret=func(self,flags) -if(ret !==undefined){return ret} -++newpos}}catch(err){if(err.name=="UnsupportedChar"){invalid_char=s[newpos] -if(invalid_char===undefined){throw _b_.ValueError.$factory("incomplete format")} -throw _b_.ValueError.$factory( -"unsupported format character '"+invalid_char+ -"' (0x"+invalid_char.charCodeAt(0).toString(16)+ -") at index "+newpos)}else if(err.name==="NotANumber"){var try_char=s[newpos],cls=self.__class__ -if(!cls){if(typeof(self)==="string"){cls="str"}else{cls=typeof(self)}}else{cls=cls.$infos.__name__} -throw _b_.TypeError.$factory("%"+try_char+ -" format: a number is required, not "+cls)}else{throw err}}}while(true)} -var nbph=0 -do{var newpos=self.indexOf("%",pos) -if(newpos < 0){ret+=self.substring(pos) -break} -ret+=self.substring(pos,newpos) -++newpos -if(newpos < length){if(self[newpos]==="%"){ret+="%"}else{nbph++ -if(self[newpos]==="("){++newpos -ret+=$get_kwarg_string(self)}else{ret+=$get_arg_string(self)}}}else{ -throw _b_.ValueError.$factory("incomplete format")} -pos=newpos+1}while(pos < length) -if(argpos !==null){if(args.length > argpos){throw _b_.TypeError.$factory( -"not enough arguments for format string")}else if(args.length < argpos){throw _b_.TypeError.$factory( -"not all arguments converted during string formatting")}}else if(nbph==0){throw _b_.TypeError.$factory( -"not all arguments converted during string formatting")} -return ret} -str.__mro__=[object] -str.__mul__=function(){var $=$B.args("__mul__",2,{self:null,other:null},["self","other"],arguments,{},null,null) -if(! isinstance($.other,_b_.int)){throw _b_.TypeError.$factory( -"Can't multiply sequence by non-int of type '"+ -$B.class_name($.other)+"'")} -var $res="" -for(var i=0;i< $.other;i++){$res+=$.self.valueOf()} -return $res} -str.__ne__=function(self,other){return other !==self.valueOf()} -str.__repr__=function(self){var res=self -res=self.replace(/\\/g,"\\\\") -res=res.replace(new RegExp("\u0007","g"),"\\x07"). -replace(new RegExp("\b","g"),"\\x08"). -replace(new RegExp("\u000b","g"),"\\x0b"). -replace(new RegExp("\f","g"),"\\x0c"). -replace(new RegExp("\n","g"),"\\n"). -replace(new RegExp("\r","g"),"\\r"). -replace(new RegExp("\t","g"),"\\t") -res=res.replace(combining_re,"\u200B$1") -var repl='' -for(var i=0;i < res.length;i++){if($B.is_unicode_cn(res.codePointAt(i))){var s=res.codePointAt(i).toString(16) -while(s.length < 4){s='0'+s} -repl+='\\u'+s}else{repl+=res.charAt(i)}} -res=repl -if(res.search('"')==-1 && res.search("'")==-1){return "'"+res+"'"}else if(self.search('"')==-1){return '"'+res+'"'} -var qesc=new RegExp("'","g") -res="'"+res.replace(qesc,"\\'")+"'" -return res} -str.__setitem__=function(self,attr,value){throw _b_.TypeError.$factory( -"'str' object does not support item assignment")} -var combining=[] -for(var cp=0x300;cp <=0x36F;cp++){combining.push(String.fromCharCode(cp))} -var combining_re=new RegExp("("+combining.join("|")+")") -str.__str__=function(self){return self.replace(combining_re,"\u200B$1")} -str.toString=function(){return "string!"} -var $comp_func=function(self,other){if(typeof other !=="string"){return _b_.NotImplemented} -return self > other} -$comp_func+="" -var $comps={">":"gt",">=":"ge","<":"lt","<=":"le"} -for(var $op in $comps){eval("str.__"+$comps[$op]+'__ = '+$comp_func.replace(/>/gm,$op))} -$B.make_rmethods(str) -var $notimplemented=function(self,other){throw NotImplementedError.$factory( -"OPERATOR not implemented for class str")} -str.capitalize=function(self){var $=$B.args("capitalize",1,{self},["self"],arguments,{},null,null) -if(self.length==0){return ""} -return self.charAt(0).toUpperCase()+self.substr(1)} -str.casefold=function(self){var $=$B.args("casefold",1,{self},["self"],arguments,{},null,null),res="",char,cf -for(var i=0,len=self.length;i < len;i++){char=self.charCodeAt(i) -cf=$B.unicode_casefold[char] -if(cf){cf.forEach(function(cp){res+=String.fromCharCode(cp)})}else{res+=self.charAt(i).toLowerCase()}} -return res} -str.center=function(){var $=$B.args("center",3,{self:null,width:null,fillchar:null},["self","width","fillchar"],arguments,{fillchar:" "},null,null),self=$.self -if($.width <=self.length){return self} -var pad=parseInt(($.width-self.length)/2),res=$.fillchar.repeat(pad) -res+=self+res -if(res.length < $.width){res+=$.fillchar} -return res} -str.count=function(){var $=$B.args("count",4,{self:null,sub:null,start:null,stop:null},["self","sub","start","stop"],arguments,{start:null,stop:null},null,null) -if(!(typeof $.sub=="string")){throw _b_.TypeError.$factory( -"Can't convert '"+$B.class_name($.sub)+ -"' object to str implicitly")} -var substr=$.self -if($.start !==null){var _slice -if($.stop !==null){_slice=_b_.slice.$factory($.start,$.stop)} -else{_slice=_b_.slice.$factory($.start,$.self.length)} -substr=str.__getitem__.apply(null,[$.self].concat(_slice))}else{if($.self.length+$.sub.length==0){return 1}} -if($.sub.length==0){if($.start==$.self.length){return 1} -else if(substr.length==0){return 0} -return substr.length+1} -var n=0,pos=0 -while(pos < substr.length){pos=substr.indexOf($.sub,pos) -if(pos >=0){n++;pos+=$.sub.length} -else{break}} -return n} -str.encode=function(){var $=$B.args("encode",3,{self:null,encoding:null,errors:null},["self","encoding","errors"],arguments,{encoding:"utf-8",errors:"strict"},null,null) -if($.encoding=="rot13" ||$.encoding=="rot_13"){ -var res="" -for(var i=0,len=$.self.length;i < len ;i++){var char=$.self.charAt(i) -if(("a" <=char && char <="m")||("A" <=char && char <="M")){res+=String.fromCharCode(String.charCodeAt(char)+13)}else if(("m" < char && char <="z")|| -("M" < char && char <="Z")){res+=String.fromCharCode(String.charCodeAt(char)-13)}else{res+=char}} -return res} -return _b_.bytes.__new__(_b_.bytes,$.self,$.encoding,$.errors)} -str.endswith=function(){ -var $=$B.args("endswith",4,{self:null,suffix:null,start:null,end:null},["self","suffix","start","end"],arguments,{start:0,end:null},null,null) -normalize_start_end($) -var suffixes=$.suffix -if(! isinstance(suffixes,_b_.tuple)){suffixes=[suffixes]} -var s=$.self.substring($.start,$.end) -for(var i=0,len=suffixes.length;i < len;i++){var suffix=suffixes[i] -if(! _b_.isinstance(suffix,str)){throw _b_.TypeError.$factory( -"endswith first arg must be str or a tuple of str, not int")} -if(suffix.length <=s.length && -s.substr(s.length-suffix.length)==suffix){return true}} -return false} -str.expandtabs=function(self,tabsize){var $=$B.args("expandtabs",2,{self:null,tabsize:null},["self","tabsize"],arguments,{tabsize:8},null,null) -var s=$B.$GetInt($.tabsize),col=0,pos=0,res="" -if(s==1){return self.replace(/\t/g," ")} -while(pos < self.length){var car=self.charAt(pos) -switch(car){case "\t": -while(col % s > 0){res+=" ";col++} -break -case "\r": -case "\n": -res+=car -col=0 -break -default: -res+=car -col++ -break} -pos++} -return res} -str.find=function(){ -var $=$B.args("str.find",4,{self:null,sub:null,start:null,end:null},["self","sub","start","end"],arguments,{start:0,end:null},null,null) -check_str($.sub) -normalize_start_end($) -if(!isinstance($.start,_b_.int)||!isinstance($.end,_b_.int)){throw _b_.TypeError.$factory("slice indices must be "+ -"integers or None or have an __index__ method")} -var s="" -for(var i=$.start;i < $.end;i++){s+=$.self.charAt(i)} -if($.sub.length==0 && $.start==$.self.length){return $.self.length} -if(s.length+$.sub.length==0){return-1} -var last_search=s.length-$.sub.length -for(var i=0;i <=last_search;i++){if(s.substr(i,$.sub.length)==$.sub){return $.start+i}} -return-1} -$B.parse_format=function(fmt_string){ -var elts=fmt_string.split(":"),name,conv,spec,name_ext=[] -if(elts.length==1){ -name=fmt_string}else{ -name=elts[0] -spec=elts.splice(1).join(":")} -var elts=name.split("!") -if(elts.length > 1){name=elts[0] -conv=elts[1]} -if(name !==undefined){ -function name_repl(match){name_ext.push(match) -return ""} -var name_ext_re=/\.[_a-zA-Z][_a-zA-Z0-9]*|\[[_a-zA-Z][_a-zA-Z0-9]*\]|\[[0-9]+\]/g -name=name.replace(name_ext_re,name_repl)} -return{name:name,name_ext:name_ext,conv:conv,spec:spec ||"",string:fmt_string}} -$B.split_format=function(self){ -var pos=0,_len=self.length,car,text="",parts=[],rank=0 -while(pos < _len){car=self.charAt(pos) -if(car=="{" && self.charAt(pos+1)=="{"){ -text+="{" -pos+=2}else if(car=="}" && self.charAt(pos+1)=="}"){ -text+="}" -pos+=2}else if(car=="{"){ -parts.push(text) -var end=pos+1,nb=1 -while(end < _len){if(self.charAt(end)=="{"){nb++;end++} -else if(self.charAt(end)=="}"){nb--;end++ -if(nb==0){ -var fmt_string=self.substring(pos+1,end-1) -var fmt_obj=$B.parse_format(fmt_string) -fmt_obj.raw_name=fmt_obj.name -fmt_obj.raw_spec=fmt_obj.spec -if(!fmt_obj.name){fmt_obj.name=rank+"" -rank++} -if(fmt_obj.spec !==undefined){ -function replace_nested(name,key){if(key==""){ -return "{"+rank+++"}"} -return "{"+key+"}"} -fmt_obj.spec=fmt_obj.spec.replace(/\{(.*?)\}/g,replace_nested)} -parts.push(fmt_obj) -text="" -break}}else{end++}} -if(nb > 0){throw ValueError.$factory("wrong format "+self)} -pos=end}else{text+=car;pos++}} -if(text){parts.push(text)} -return parts} -str.format=function(self){var $=$B.args("format",1,{self:null},["self"],arguments,{},"$args","$kw") -var parts=$B.split_format($.self) -var res="",fmt -for(var i=0;i < parts.length;i++){ -if(typeof parts[i]=="string"){res+=parts[i];continue} -fmt=parts[i] -if(fmt.spec !==undefined){ -function replace_nested(name,key){if(/\d+/.exec(key)){ -return _b_.tuple.__getitem__($.$args,parseInt(key))}else{ -return _b_.dict.__getitem__($.$kw,key)}} -fmt.spec=fmt.spec.replace(/\{(.*?)\}/g,replace_nested)} -if(fmt.name.charAt(0).search(/\d/)>-1){ -var pos=parseInt(fmt.name),value=_b_.tuple.__getitem__($.$args,pos)}else{ -var value=_b_.dict.__getitem__($.$kw,fmt.name)} -for(var j=0;j < fmt.name_ext.length;j++){var ext=fmt.name_ext[j] -if(ext.charAt(0)=="."){ -value=_b_.getattr(value,ext.substr(1))}else{ -var key=ext.substr(1,ext.length-2) -if(key.charAt(0).search(/\d/)>-1){key=parseInt(key)} -value=_b_.getattr(value,"__getitem__")(key)}} -if(fmt.conv=="a"){value=_b_.ascii(value)} -else if(fmt.conv=="r"){value=_b_.repr(value)} -else if(fmt.conv=="s"){value=_b_.str.$factory(value)} -if(value.$is_class ||value.$factory){ -res+=value.__class__.__format__(value,fmt.spec)}else{res+=$B.$getattr(value,"__format__")(fmt.spec)}} -return res} -str.format_map=function(self){throw NotImplementedError.$factory( -"function format_map not implemented yet")} -str.index=function(self){ -var res=str.find.apply(null,arguments) -if(res===-1){throw _b_.ValueError.$factory("substring not found")} -return res} -str.isascii=function(self){ -for(var i=0,len=self.length;i < len;i++){if(self.charCodeAt(i)> 127){return false}} -return true} -str.isalnum=function(self){ -var $=$B.args("isalnum",1,{self:null},["self"],arguments,{},null,null),char -for(var i=0,len=self.length;i < len;i++){char=self.charCodeAt(i) -if(unicode_tables.Ll[char]|| -unicode_tables.Lu[char]|| -unicode_tables.Lm[char]|| -unicode_tables.Lt[char]|| -unicode_tables.Lo[char]|| -unicode_tables.Nd[char]|| -unicode_tables.digits[char]|| -unicode_tables.numeric[char]){continue} -return false} -return true} -str.isalpha=function(self){ -var $=$B.args("isalpha",1,{self:null},["self"],arguments,{},null,null),char -for(var i=0,len=self.length;i < len;i++){char=self.charCodeAt(i) -if(unicode_tables.Ll[char]|| -unicode_tables.Lu[char]|| -unicode_tables.Lm[char]|| -unicode_tables.Lt[char]|| -unicode_tables.Lo[char]){continue} -return false} -return true} -str.isdecimal=function(self){ -var $=$B.args("isdecimal",1,{self:null},["self"],arguments,{},null,null),char -for(var i=0,len=self.length;i < len;i++){char=self.charCodeAt(i) -if(! unicode_tables.Nd[char]){return false}} -return self.length > 0} -str.isdigit=function(self){ -var $=$B.args("isdigit",1,{self:null},["self"],arguments,{},null,null),char -for(var i=0,len=self.length;i < len;i++){char=self.charCodeAt(i) -if(! unicode_tables.digits[char]){return false}} -return self.length > 0} -str.isidentifier=function(self){ -var $=$B.args("isidentifier",1,{self:null},["self"],arguments,{},null,null),char -if(self.length==0){return false} -else if(unicode_tables.XID_Start[self.charCodeAt(0)]===undefined){return false}else{for(var i=1,len=self.length;i < len;i++){if(unicode_tables.XID_Continue[self.charCodeAt(i)]===undefined){return false}}} -return true} -str.islower=function(self){ -var $=$B.args("islower",1,{self:null},["self"],arguments,{},null,null),has_cased=false,char -for(var i=0,len=self.length;i < len;i++){char=self.charCodeAt(i) -if(unicode_tables.Ll[char]){has_cased=true;continue} -else if(unicode_tables.Lu[char]||unicode_tables.Lt[char]){return false}} -return has_cased} -str.isnumeric=function(self){ -var $=$B.args("isnumeric",1,{self:null},["self"],arguments,{},null,null) -for(var i=0,len=self.length;i < len;i++){if(! unicode_tables.numeric[self.charCodeAt(i)]){return false}} -return self.length > 0} -var printable,printable_gc=['Cc','Cf','Co','Cs','Zl','Zp','Zs'] -str.isprintable=function(self){ -if(printable===undefined){for(var i=0;i < printable_gc.length;i++){var table=unicode_tables[printable_gc[i]] -for(var cp in table){printable[cp]=true}} -printable[32]=true} -var $=$B.args("isprintable",1,{self:null},["self"],arguments,{},null,null),char,flag -for(var i=0,len=self.length;i < len;i++){char=self.charCodeAt(i) -if(! printable[char]){return false}} -return true} -str.isspace=function(self){ -var $=$B.args("isspace",1,{self:null},["self"],arguments,{},null,null),char -for(var i=0,len=self.length;i < len;i++){char=self.charCodeAt(i) -if(! unicode_tables.Zs[char]&& -$B.unicode_bidi_whitespace.indexOf(char)==-1){return false}} -return self.length > 0} -str.istitle=function(self){ -var $=$B.args("istitle",1,{self:null},["self"],arguments,{},null,null) -return self.length > 0 && str.title(self)==self} -str.isupper=function(self){ -var $=$B.args("islower",1,{self:null},["self"],arguments,{},null,null),has_cased=false,char -for(var i=0,len=self.length;i < len;i++){char=self.charCodeAt(i) -if(unicode_tables.Lu[char]){has_cased=true;continue} -else if(unicode_tables.Ll[char]||unicode_tables.Lt[char]){return false}} -return has_cased} -str.join=function(){var $=$B.args("join",2,{self:null,iterable:null},["self","iterable"],arguments,{},null,null) -var iterable=_b_.iter($.iterable),res=[],count=0 -while(1){try{var obj2=_b_.next(iterable) -if(! isinstance(obj2,str)){throw _b_.TypeError.$factory( -"sequence item "+count+": expected str instance, "+ -$B.class_name(obj2)+" found")} -res.push(obj2)}catch(err){if(_b_.isinstance(err,_b_.StopIteration)){break} -else{throw err}}} -return res.join($.self)} -str.ljust=function(self){var $=$B.args("ljust",3,{self:null,width:null,fillchar:null},["self","width","fillchar"],arguments,{fillchar:" "},null,null) -if($.width <=self.length){return self} -return self+$.fillchar.repeat($.width-self.length)} -str.lower=function(self){var $=$B.args("lower",1,{self:null},["self"],arguments,{},null,null) -return self.toLowerCase()} -str.lstrip=function(self,x){var $=$B.args("lstrip",2,{self:null,chars:null},["self","chars"],arguments,{chars:_b_.None},null,null) -if($.chars===_b_.None){return $.self.trimLeft()} -for(var i=0;i < $.self.length;i++){if($.chars.indexOf($.self.charAt(i))===-1){return $.self.substring(i)}} -return ""} -str.maketrans=function(){var $=$B.args("maketrans",3,{x:null,y:null,z:null},["x","y","z"],arguments,{y:null,z:null},null,null) -var _t=$B.empty_dict() -if($.y===null && $.z===null){ -if(! _b_.isinstance($.x,_b_.dict)){throw _b_.TypeError.$factory( -"maketrans only argument must be a dict")} -var items=_b_.list.$factory(_b_.dict.items($.x)) -for(var i=0,len=items.length;i < len;i++){var k=items[i][0],v=items[i][1] -if(! _b_.isinstance(k,_b_.int)){if(_b_.isinstance(k,_b_.str)&& k.length==1){k=_b_.ord(k)}else{throw _b_.TypeError.$factory("dictionary key "+k+ -" is not int or 1-char string")}} -if(v !==_b_.None && ! _b_.isinstance(v,[_b_.int,_b_.str])){throw _b_.TypeError.$factory("dictionary value "+v+ -" is not None, integer or string")} -_b_.dict.$setitem(_t,k,v)} -return _t}else{ -if(!(_b_.isinstance($.x,_b_.str)&& _b_.isinstance($.y,_b_.str))){throw _b_.TypeError.$factory("maketrans arguments must be strings")}else if($.x.length !==$.y.length){throw _b_.TypeError.$factory( -"maketrans arguments must be strings or same length")}else{var toNone={} -if($.z !==null){ -if(! _b_.isinstance($.z,_b_.str)){throw _b_.TypeError.$factory( -"maketrans third argument must be a string")} -for(var i=0,len=$.z.length;i < len;i++){toNone[_b_.ord($.z.charAt(i))]=true}} -for(var i=0,len=$.x.length;i < len;i++){var key=_b_.ord($.x.charAt(i)),value=$.y.charCodeAt(i) -_b_.dict.$setitem(_t,key,value)} -for(var k in toNone){_b_.dict.$setitem(_t,parseInt(k),_b_.None)} -return _t}}} -str.maketrans.$type="staticmethod" -str.partition=function(){var $=$B.args("partition",2,{self:null,sep:null},["self","sep"],arguments,{},null,null) -if($.sep==""){throw _b_.ValueError.$factory("empty separator")} -check_str($.sep) -var i=$.self.indexOf($.sep) -if(i==-1){return _b_.tuple.$factory([$.self,"",""])} -return _b_.tuple.$factory([$.self.substring(0,i),$.sep,$.self.substring(i+$.sep.length)])} -str.removeprefix=function(){var $=$B.args("removeprefix",2,{self:null,prefix:null},["self","prefix"],arguments,{},null,null) -if(!_b_.isinstance($.prefix,str)){throw _b_.ValueError.$factory("prefix should be str, not "+ -`'${$B.class_name($.prefix)}'`)} -if(str.startswith($.self,$.prefix)){return $.self.substr($.prefix.length)} -return $.self.substr(0)} -str.removesuffix=function(){var $=$B.args("removesuffix",2,{self:null,prefix:null},["self","suffix"],arguments,{},null,null) -if(!_b_.isinstance($.suffix,str)){throw _b_.ValueError.$factory("suffix should be str, not "+ -`'${$B.class_name($.prefix)}'`)} -if($.suffix.length > 0 && str.endswith($.self,$.suffix)){return $.self.substr(0,$.self.length-$.suffix.length)} -return $.self.substr(0)} -function $re_escape(str){var specials="[.*+?|()$^" -for(var i=0,len=specials.length;i < len;i++){var re=new RegExp("\\"+specials.charAt(i),"g") -str=str.replace(re,"\\"+specials.charAt(i))} -return str} -str.replace=function(self,old,_new,count){ -var $=$B.args("replace",4,{self:null,old:null,$$new:null,count:null},["self","old","$$new","count"],arguments,{count:-1},null,null),count=$.count,self=$.self,old=$.old,_new=$.$$new -check_str(old) -check_str(_new) -if(! isinstance(count,[_b_.int,_b_.float])){throw _b_.TypeError.$factory("'"+$B.class_name(count)+ -"' object cannot be interpreted as an integer")}else if(isinstance(count,_b_.float)){throw _b_.TypeError.$factory("integer argument expected, got float")} -if(count==0){return self} -if(count.__class__==$B.long_int){count=parseInt(count.value)} -if(old==""){if(_new==""){return self} -if(self==""){return _new} -var elts=self.split("") -if(count >-1 && elts.length >=count){var rest=elts.slice(count).join("") -return _new+elts.slice(0,count).join(_new)+rest}else{return _new+elts.join(_new)+_new}}else{var elts=str.split(self,old,count)} -var res=self,pos=-1 -if(old.length==0){var res=_new -for(var i=0;i < elts.length;i++){res+=elts[i]+_new} -return res+rest} -if(count < 0){count=res.length} -while(count > 0){pos=res.indexOf(old,pos) -if(pos < 0){break} -res=res.substr(0,pos)+_new+res.substr(pos+old.length) -pos=pos+_new.length -count--} -return res} -str.rfind=function(self,substr){ -if(arguments.length==2 && typeof substr=="string"){return self.lastIndexOf(substr)} -var $=$B.args("rfind",4,{self:null,sub:null,start:null,end:null},["self","sub","start","end"],arguments,{start:0,end:null},null,null) -normalize_start_end($) -check_str($.sub) -if($.sub.length==0){if($.start > $.self.length){return-1} -else{return $.self.length}} -var sublen=$.sub.length -for(var i=$.end-sublen;i >=$.start;i--){if($.self.substr(i,sublen)==$.sub){return i}} -return-1} -str.rindex=function(){ -var res=str.rfind.apply(null,arguments) -if(res==-1){throw _b_.ValueError.$factory("substring not found")} -return res} -str.rjust=function(self){var $=$B.args("rjust",3,{self:null,width:null,fillchar:null},["self","width","fillchar"],arguments,{fillchar:" "},null,null) -if($.width <=self.length){return self} -return $.fillchar.repeat($.width-self.length)+self} -str.rpartition=function(self,sep){var $=$B.args("rpartition",2,{self:null,sep:null},["self","sep"],arguments,{},null,null) -check_str($.sep) -var self=reverse($.self),sep=reverse($.sep) -var items=str.partition(self,sep).reverse() -for(var i=0;i < items.length;i++){items[i]=items[i].split("").reverse().join("")} -return items} -str.rsplit=function(self){var $=$B.args("rsplit",3,{self:null,sep:null,maxsplit:null},["self","sep","maxsplit"],arguments,{sep:_b_.None,maxsplit:-1},null,null),sep=$.sep -var rev_str=reverse($.self),rev_sep=sep===_b_.None ? sep :reverse($.sep),rev_res=str.split(rev_str,rev_sep,$.maxsplit) -rev_res.reverse() -for(var i=0;i < rev_res.length;i++){rev_res[i]=reverse(rev_res[i])} -return rev_res} -str.rstrip=function(self,x){var $=$B.args("rstrip",2,{self:null,chars:null},["self","chars"],arguments,{chars:_b_.None},null,null) -if($.chars===_b_.None){return $.self.trimRight()} -for(var j=$.self.length-1;j >=0;j--){if($.chars.indexOf($.self.charAt(j))==-1){return $.self.substring(0,j+1)}} -return ""} -str.split=function(){var $=$B.args("split",3,{self:null,sep:null,maxsplit:null},["self","sep","maxsplit"],arguments,{sep:_b_.None,maxsplit:-1},null,null),sep=$.sep,maxsplit=$.maxsplit,self=$.self,pos=0 -if(maxsplit.__class__===$B.long_int){maxsplit=parseInt(maxsplit.value)} -if(sep==""){throw _b_.ValueError.$factory("empty separator")} -if(sep===_b_.None){var res=[] -while(pos < self.length && self.charAt(pos).search(/\s/)>-1){pos++} -if(pos===self.length-1){return[self]} -var name="" -while(1){if(self.charAt(pos).search(/\s/)==-1){if(name==""){name=self.charAt(pos)} -else{name+=self.charAt(pos)}}else{if(name !==""){res.push(name) -if(maxsplit !==-1 && res.length==maxsplit+1){res.pop() -res.push(name+self.substr(pos)) -return res} -name=""}} -pos++ -if(pos > self.length-1){if(name){res.push(name)} -break}} -return res}else{var res=[],s="",seplen=sep.length -if(maxsplit==0){return[self]} -while(pos < self.length){if(self.substr(pos,seplen)==sep){res.push(s) -pos+=seplen -if(maxsplit >-1 && res.length >=maxsplit){res.push(self.substr(pos)) -return res} -s=""}else{s+=self.charAt(pos) -pos++}} -res.push(s) -return res}} -str.splitlines=function(self){var $=$B.args('splitlines',2,{self:null,keepends:null},['self','keepends'],arguments,{keepends:false},null,null) -if(!_b_.isinstance($.keepends,[_b_.bool,_b_.int])){throw _b_.TypeError('integer argument expected, got '+ -$B.get_class($.keepends).__name)} -var keepends=_b_.int.$factory($.keepends),res=[],self=$.self,start=0,pos=0 -if(!self.length){return res} -while(pos < self.length){if(self.substr(pos,2)=='\r\n'){res.push(self.slice(start,keepends ? pos+2 :pos)) -start=pos=pos+2}else if(self[pos]=='\r' ||self[pos]=='\n'){res.push(self.slice(start,keepends ? pos+1 :pos)) -start=pos=pos+1}else{pos++}} -if(start < self.length){res.push(self.slice(start))} -return res} -str.startswith=function(){ -var $=$B.args("startswith",4,{self:null,prefix:null,start:null,end:null},["self","prefix","start","end"],arguments,{start:0,end:null},null,null) -normalize_start_end($) -var prefixes=$.prefix -if(! isinstance(prefixes,_b_.tuple)){prefixes=[prefixes]} -var s=$.self.substring($.start,$.end) -for(var i=0,len=prefixes.length;i < len;i++){var prefix=prefixes[i] -if(! _b_.isinstance(prefix,str)){throw _b_.TypeError.$factory( -"endswith first arg must be str or a tuple of str, not int")} -if(s.substr(0,prefix.length)==prefix){return true}} -return false} -str.strip=function(){var $=$B.args("strip",2,{self:null,chars:null},["self","chars"],arguments,{chars:_b_.None},null,null) -if($.chars===_b_.None){return $.self.trim()} -for(var i=0;i < $.self.length;i++){if($.chars.indexOf($.self.charAt(i))==-1){break}} -for(var j=$.self.length-1;j >=i;j--){if($.chars.indexOf($.self.charAt(j))==-1){break}} -return $.self.substring(i,j+1)} -str.swapcase=function(self){var $=$B.args("swapcase",1,{self},["self"],arguments,{},null,null),res="",char -for(var i=0,len=self.length;i < len;i++){char=self.charCodeAt(i) -if(unicode_tables.Ll[char]){res+=self.charAt(i).toUpperCase()}else if(unicode_tables.Lu[char]){res+=self.charAt(i).toLowerCase()}else{res+=self.charAt(i)}} -return res} -str.title=function(self){var $=$B.args("title",1,{self},["self"],arguments,{},null,null),state,char,res="" -for(var i=0,len=self.length;i < len;i++){char=self.charCodeAt(i) -if(unicode_tables.Ll[char]){if(! state){res+=self.charAt(i).toUpperCase() -state="word"}else{res+=self.charAt(i)}}else if(unicode_tables.Lu[char]||unicode_tables.Lt[char]){res+=state ? self.charAt(i).toLowerCase():self.charAt(i) -state="word"}else{state=null -res+=self.charAt(i)}} -return res} -str.translate=function(self,table){var res=[],getitem=$B.$getattr(table,"__getitem__") -for(var i=0,len=self.length;i < len;i++){try{var repl=getitem(self.charCodeAt(i)) -if(repl !==_b_.None){if(typeof repl=="string"){res.push(repl)}else if(typeof repl=="number"){res.push(String.fromCharCode(repl))}}}catch(err){res.push(self.charAt(i))}} -return res.join("")} -str.upper=function(self){var $=$B.args("upper",1,{self:null},["self"],arguments,{},null,null) -return self.toUpperCase()} -str.zfill=function(self,width){var $=$B.args("zfill",2,{self:null,width:null},["self","width"],arguments,{},null,null) -if($.width <=self.length){return self} -switch(self.charAt(0)){case "+": -case "-": -return self.charAt(0)+ -"0".repeat($.width-self.length)+self.substr(1) -default: -return "0".repeat(width-self.length)+self}} -str.$factory=function(arg,encoding,errors){if(arguments.length==0){return ""} -if(arg===undefined){return $B.UndefinedClass.__str__()} -if(encoding !==undefined){ -var $=$B.args("str",3,{arg:null,encoding:null,errors:null},["arg","encoding","errors"],arguments,{encoding:"utf-8",errors:"strict"},null,null),encoding=$.encoding,errors=$.errors} -switch(typeof arg){case "string": -return str.__str__(arg) -case "number": -if(isFinite(arg)){return arg.toString()}} -try{if(arg.$is_class ||arg.$factory){ -var func=$B.$getattr(arg.__class__,"__str__") -return func(arg)} -if(arg.__class__ && arg.__class__===_b_.bytes && -encoding !==undefined){ -return _b_.bytes.decode(arg,$.encoding,$.errors)} -var klass=arg.__class__ ||$B.get_class(arg) -if(klass===undefined){return $B.JSObj.__str__($B.JSObj.$factory(arg))} -var method=$B.$getattr(klass ,"__str__",null) -if(method===null || -(arg.__class__ && arg.__class__ !==_b_.object && -method.$infos && method.$infos.__func__===_b_.object.__str__)){var method=$B.$getattr(klass,"__repr__")}} -catch(err){console.log("no __str__ for",arg) -console.log("err ",err) -if($B.debug > 1){console.log(err)} -console.log("Warning - no method __str__ or __repr__, "+ -"default to toString",arg) -throw err} -return $B.$call(method)(arg)} -str.__new__=function(cls){if(cls===undefined){throw _b_.TypeError.$factory("str.__new__(): not enough arguments")} -return{__class__:cls}} -$B.set_func_names(str,"builtins") -var StringSubclass=$B.StringSubclass={__class__:_b_.type,__mro__:[object],$infos:{__module__:"builtins",__name__:"str"},$is_class:true} -for(var $attr in str){if(typeof str[$attr]=="function"){StringSubclass[$attr]=(function(attr){return function(){var args=[],pos=0 -if(arguments.length > 0){var args=[arguments[0].valueOf()],pos=1 -for(var i=1,len=arguments.length;i < len;i++){args[pos++]=arguments[i]}} -return str[attr].apply(null,args)}})($attr)}} -StringSubclass.__new__=function(cls){return{__class__:cls}} -$B.set_func_names(StringSubclass,"builtins") -_b_.str=str -$B.parse_format_spec=function(spec){if(spec==""){this.empty=true} -else{var pos=0,aligns="<>=^",digits="0123456789",types="bcdeEfFgGnosxX%",align_pos=aligns.indexOf(spec.charAt(0)) -if(align_pos !=-1){if(spec.charAt(1)&& aligns.indexOf(spec.charAt(1))!=-1){ -this.fill=spec.charAt(0) -this.align=spec.charAt(1) -pos=2}else{ -this.align=aligns[align_pos] -this.fill=" " -pos++}}else{align_pos=aligns.indexOf(spec.charAt(1)) -if(spec.charAt(1)&& align_pos !=-1){ -this.align=aligns[align_pos] -this.fill=spec.charAt(0) -pos=2}} -var car=spec.charAt(pos) -if(car=="+" ||car=="-" ||car==" "){this.sign=car -pos++ -car=spec.charAt(pos)} -if(car=="#"){this.alternate=true;pos++;car=spec.charAt(pos)} -if(car=="0"){ -this.fill="0" -if(align_pos==-1){this.align="="} -pos++ -car=spec.charAt(pos)} -while(car && digits.indexOf(car)>-1){if(this.width===undefined){this.width=car} -else{this.width+=car} -pos++ -car=spec.charAt(pos)} -if(this.width !==undefined){this.width=parseInt(this.width)} -if(this.width===undefined && car=="{"){ -var end_param_pos=spec.substr(pos).search("}") -this.width=spec.substring(pos,end_param_pos) -console.log("width","["+this.width+"]") -pos+=end_param_pos+1} -if(car==","){this.comma=true;pos++;car=spec.charAt(pos)} -if(car=="."){if(digits.indexOf(spec.charAt(pos+1))==-1){throw _b_.ValueError.$factory( -"Missing precision in format spec")} -this.precision=spec.charAt(pos+1) -pos+=2 -car=spec.charAt(pos) -while(car && digits.indexOf(car)>-1){this.precision+=car -pos++ -car=spec.charAt(pos)} -this.precision=parseInt(this.precision)} -if(car && types.indexOf(car)>-1){this.type=car -pos++ -car=spec.charAt(pos)} -if(pos !==spec.length){throw _b_.ValueError.$factory("Invalid format specifier: "+spec)}} -this.toString=function(){return(this.fill===undefined ? "" :_b_.str.$factory(this.fill))+ -(this.align ||"")+ -(this.sign ||"")+ -(this.alternate ? "#" :"")+ -(this.sign_aware ? "0" :"")+ -(this.width ||"")+ -(this.comma ? "," :"")+ -(this.precision ? "."+this.precision :"")+ -(this.type ||"")}} -$B.format_width=function(s,fmt){if(fmt.width && s.length < fmt.width){var fill=fmt.fill ||" ",align=fmt.align ||"<",missing=fmt.width-s.length -switch(align){case "<": -return s+fill.repeat(missing) -case ">": -return fill.repeat(missing)+s -case "=": -if("+-".indexOf(s.charAt(0))>-1){return s.charAt(0)+fill.repeat(missing)+s.substr(1)}else{return fill.repeat(missing)+s} -case "^": -var left=parseInt(missing/2) -return fill.repeat(left)+s+fill.repeat(missing-left)}} -return s} -function fstring_expression(){this.type="expression" -this.expression="" -this.conversion=null -this.fmt=null} -$B.parse_fstring=function(string){ -var elts=[],pos=0,current="",ctype=null,nb_braces=0,car -while(pos < string.length){if(ctype===null){car=string.charAt(pos) -if(car=="{"){if(string.charAt(pos+1)=="{"){ctype="string" -current="{" -pos+=2}else{ctype="expression" -nb_braces=1 -pos++}}else if(car=="}"){if(string.charAt(pos+1)==car){ctype="string" -current="}" -pos+=2}else{throw Error(" f-string: single '}' is not allowed")}}else{ctype="string" -current=car -pos++}}else if(ctype=="string"){ -var i=pos -while(i < string.length){car=string.charAt(i) -if(car=="{"){if(string.charAt(i+1)=="{"){current+="{" -i+=2}else{elts.push(current) -ctype="expression" -pos=i+1 -break}}else if(car=="}"){if(string.charAt(i+1)==car){current+=car -i+=2}else{throw Error(" f-string: single '}' is not allowed")}}else{current+=car -i++}} -pos=i+1}else if(ctype=="debug"){ -while(string.charAt(i)==" "){i++} -if(string.charAt(i)=="}"){ -elts.push(current) -ctype=null -current="" -pos=i+1}}else{ -var i=pos,nb_braces=1,nb_paren=0,current=new fstring_expression() -while(i < string.length){car=string.charAt(i) -if(car=="{" && nb_paren==0){nb_braces++ -current.expression+=car -i++}else if(car=="}" && nb_paren==0){nb_braces-=1 -if(nb_braces==0){ -elts.push(current) -ctype=null -current="" -pos=i+1 -break} -current.expression+=car -i++}else if(car=="\\"){ -throw Error("f-string expression part cannot include a"+ -" backslash")}else if(nb_paren==0 && car=="!" && current.fmt===null && -":}".indexOf(string.charAt(i+2))>-1){if(current.expression.length==0){throw Error("f-string: empty expression not allowed")} -if("ars".indexOf(string.charAt(i+1))==-1){throw Error("f-string: invalid conversion character:"+ -" expected 's', 'r', or 'a'")}else{current.conversion=string.charAt(i+1) -i+=2}}else if(car=="("){nb_paren++ -current.expression+=car -i++}else if(car==")"){nb_paren-- -current.expression+=car -i++}else if(car=='"'){ -if(string.substr(i,3)=='"""'){var end=string.indexOf('"""',i+3) -if(end==-1){throw Error("f-string: unterminated string")}else{var trs=string.substring(i,end+3) -trs=trs.replace("\n","\\n\\") -current.expression+=trs -i=end+3}}else{var end=string.indexOf('"',i+1) -if(end==-1){throw Error("f-string: unterminated string")}else{current.expression+=string.substring(i,end+1) -i=end+1}}}else if(nb_paren==0 && car==":"){current.fmt=true -current.expression+=car -i++}else if(car=="="){ -var ce=current.expression,last_char=ce.charAt(ce.length-1),last_char_re=('()'.indexOf(last_char)>-1 ? "\\" :"")+last_char -if(ce.length==0 || -string.charAt(i+1)=="=" || -"=!<>:".search(last_char_re)>-1){current.expression+=car+string.charAt(i+1) -i+=2}else{ -tail=car -while(string.charAt(i+1).match(/\s/)){tail+=string.charAt(i+1) -i++} -elts.push(current.expression+tail) -while(ce.match(/\s$/)){ce=ce.substr(0,ce.length-1)} -current.expression=ce -ctype="debug" -i++}}else{current.expression+=car -i++}} -if(nb_braces > 0){throw Error("f-string: expected '}'")}}} -if(current.length > 0){elts.push(current)} -return elts} -var surrogate=str.$surrogate=$B.make_class("surrogate_string",function(s){ -var items=[] -for(var i=0,len=s.length;i < len;i++){var code=s.charCodeAt(i) -if(code >=0xD800 && code <=0xDBFF){i++ -var low=s.charCodeAt(i) -code=((code-0xD800)*0x400)+(low-0xDC00)+0x10000} -items.push(String.fromCodePoint(code))} -return{ -__class__:str.$surrogate,items:items}}) -surrogate.__mro__=[str,object] -surrogate.__contains__=function(self,other){return str.__contains__(self.items.join(''),other)} -surrogate.__getitem__=function(self,arg){if(isinstance(arg,_b_.int)){var pos=arg -if(arg < 0){pos+=self.items.length} -if(pos >=0 && pos < self.items.length){if(self.items[pos].length==2){return surrogate.$factory(self.items[pos])} -return self.items[pos]} -throw _b_.IndexError.$factory("string index out of range")} -if(isinstance(arg,slice)){var s=_b_.slice.$conv_for_seq(arg,self.items.length),start=s.start,stop=s.stop,step=s.step -var res="",i=null -if(step > 0){if(stop <=start){return ""} -for(var i=start;i < stop;i+=step){res+=self.items[i]}}else{if(stop >=start){return ''} -for(var i=start;i > stop;i+=step){res+=self.items[i]}} -return res} -if(isinstance(arg,_b_.bool)){return surrogate.__getitem__(self,_b_.int.$factory(arg))} -throw _b_.TypeError.$factory("string indices must be integers")} -surrogate.__hash__=function(self){return str.__hash__(self.items.join(''))} -surrogate.__iter__=function(self){return str_iterator.$factory(self.items)} -surrogate.__len__=function(self){return self.items.length} -surrogate.__repr__=function(self){return str.__repr__(self.items.join(''))} -surrogate.__str__=function(self){return str.__str__(self.items.join(''))} -$B.set_func_names(surrogate,"builtins")})(__BRYTHON__) -; -;(function($B){ -var bltns=$B.InjectBuiltins() -eval(bltns) -var str_hash=_b_.str.__hash__,$N=_b_.None -var set_ops=["eq","le","lt","ge","gt","sub","rsub","and","or","xor"] -function is_sublist(t1,t2){ -for(var i=0,ilen=t1.length;i < ilen;i++){var x=t1[i],flag=false -for(var j=0,jlen=t2.length;j < jlen;j++){if($B.rich_comp("__eq__",x,t2[j])){t2.splice(j,1) -flag=true -break}} -if(! flag){return false}} -return true} -dict_view_op={__eq__:function(t1,t2){return t1.length==t2.length && is_sublist(t1,t2)},__ne__:function(t1,t2){return ! dict_view_op.__eq__(t1,t2)},__lt__:function(t1,t2){return t1.length < t2.length && is_sublist(t1,t2)},__gt__:function(t1,t2){return dict_view_op.__lt__(t2,t1)},__le__:function(t1,t2){return t1.length <=t2.length && is_sublist(t1,t2)},__ge__:function(t1,t2){return dict_view_op.__le__(t2,t1)},__and__:function(t1,t2){var items=[] -for(var i=0,ilen=t1.length;i < ilen;i++){var x=t1[i] -flag=false -for(var j=0,jlen=t2.length;j < jlen;j++){if($B.rich_comp("__eq__",x,t2[j])){t2.splice(j,1) -items.push(x) -break}}} -return items},__or__:function(t1,t2){var items=t1 -for(var j=0,jlen=t2.length;j < jlen;j++){var y=t2[j],flag=false -for(var i=0,ilen=t1.length;i < ilen;i++){if($B.rich_comp("__eq__",y,t1[i])){t2.splice(j,1) -flag=true -break}} -if(! flag){items.push(y)}} -return items}} -$B.make_view=function(name){var klass=$B.make_class(name,function(items,set_like){return{ -__class__:klass,__dict__:$B.empty_dict(),counter:-1,items:items,len:items.length,set_like:set_like}}) -for(var i=0,len=set_ops.length;i < len;i++){var op="__"+set_ops[i]+"__" -klass[op]=(function(op){return function(self,other){ -if(self.set_like){return _b_.set[op](_b_.set.$factory(self),_b_.set.$factory(other))}else{ -if(other.__class__ !==klass){return false} -var other_items=_b_.list.$factory(other) -return dict_view_op[op](self.items,other_items)}}})(op)} -klass.__iter__=function(self){var it=klass.$iterator.$factory(self.items) -it.len_func=self.len_func -return it} -klass.__len__=function(self){return self.len} -klass.__repr__=function(self){return klass.$infos.__name__+'('+_b_.repr(self.items)+')'} -$B.set_func_names(klass,"builtins") -return klass} -function dict_iterator_next(self){if(self.len_func()!=self.len){throw _b_.RuntimeError.$factory("dictionary changed size during iteration")} -self.counter++ -if(self.counter < self.items.length){return self.items[self.counter]} -throw _b_.StopIteration.$factory("StopIteration")} -var dict={__class__:_b_.type,__mro__:[_b_.object],$infos:{__module__:"builtins",__name__:"dict"},$is_class:true,$native:true} -dict.$to_obj=function(d){ -var res={} -for(var key in d.$string_dict){res[key]=d.$string_dict[key][0]} -return res} -function to_list(d,ix){var items=[],item -if(d.$jsobj){items=[] -for(var attr in d.$jsobj){if(attr.charAt(0)!="$"){var val=d.$jsobj[attr] -if(val===undefined){val=_b_.NotImplemented} -else if(val===null){val=$N} -items.push([attr,val])}}}else if(_b_.isinstance(d,_b_.dict)){for(var k in d.$numeric_dict){items.push([parseFloat(k),d.$numeric_dict[k]])} -for(var k in d.$string_dict){items.push([k,d.$string_dict[k]])} -for(var k in d.$object_dict){d.$object_dict[k].forEach(function(item){items.push(item)})} -items.sort(function(a,b){return a[1][1]-b[1][1]}) -items=items.map(function(item){return[item[0],item[1][0]]})} -if(ix !==undefined){return items.map(function(item){return item[ix]})}else{items.__class__=_b_.tuple -return items.map(function(item){item.__class__=_b_.tuple;return item} -)}} -$B.dict_to_list=to_list -function dict_iterator_next(self){if(self.len_func()!=self.len){throw _b_.RuntimeError.$factory("dictionary changed size during iteration")} -self.counter++ -if(self.counter < self.items.length){return self.items[self.counter]} -throw _b_.StopIteration.$factory("StopIteration")} -var $copy_dict=function(left,right){var _l=to_list(right),si=dict.$setitem -right.$version=right.$version ||0 -var right_version=right.$version ||0 -for(var i=0,len=_l.length;i < len;i++){si(left,_l[i][0],_l[i][1]) -if(right.$version !=right_version){throw _b_.RuntimeError.$factory("dict mutated during update")}}} -function rank(self,hash,key){ -var pairs=self.$object_dict[hash] -if(pairs !==undefined){for(var i=0,len=pairs.length;i < len;i++){if($B.rich_comp("__eq__",key,pairs[i][0])){return i}}} -return-1} -dict.__bool__=function(){var $=$B.args("__bool__",1,{self:null},["self"],arguments,{},null,null) -return dict.__len__($.self)> 0} -dict.__contains__=function(){var $=$B.args("__contains__",2,{self:null,key:null},["self","key"],arguments,{},null,null),self=$.self,key=$.key -if(self.$is_namespace){key=$B.to_alias(key)} -if(self.$jsobj){return self.$jsobj[key]!==undefined} -switch(typeof key){case "string": -return self.$string_dict[key]!==undefined -case "number": -return self.$numeric_dict[key]!==undefined} -var hash=_b_.hash(key) -if(self.$str_hash[hash]!==undefined && -$B.rich_comp("__eq__",key,self.$str_hash[hash])){return true} -if(self.$numeric_dict[hash]!==undefined && -$B.rich_comp("__eq__",key,hash)){return true} -return rank(self,hash,key)>-1} -dict.__delitem__=function(){var $=$B.args("__eq__",2,{self:null,arg:null},["self","arg"],arguments,{},null,null),self=$.self,arg=$.arg -if(self.$jsobj){if(self.$jsobj[arg]===undefined){throw _b_.KeyError.$factory(arg)} -delete self.$jsobj[arg] -return $N} -switch(typeof arg){case "string": -if(self.$string_dict[arg]===undefined){throw _b_.KeyError.$factory(_b_.str.$factory(arg))} -delete self.$string_dict[arg] -delete self.$str_hash[str_hash(arg)] -self.$version++ -return $N -case "number": -if(self.$numeric_dict[arg]===undefined){throw _b_.KeyError.$factory(_b_.str.$factory(arg))} -delete self.$numeric_dict[arg] -self.$version++ -return $N} -var hash=_b_.hash(arg),ix -if((ix=rank(self,hash,arg))>-1){self.$object_dict[hash].splice(ix,1)}else{throw _b_.KeyError.$factory(_b_.str.$factory(arg))} -self.$version++ -return $N} -dict.__eq__=function(){var $=$B.args("__eq__",2,{self:null,other:null},["self","other"],arguments,{},null,null),self=$.self,other=$.other -if(! _b_.isinstance(other,dict)){return false} -if(self.$jsobj){self=jsobj2dict(self.$jsobj)} -if(other.$jsobj){other=jsobj2dict(other.$jsobj)} -if(dict.__len__(self)!=dict.__len__(other)){return false} -if(self.$string_dict.length !=other.$string_dict.length){return false} -for(var k in self.$numeric_dict){if(other.$numeric_dict.hasOwnProperty(k)){if(!$B.rich_comp("__eq__",other.$numeric_dict[k][0],self.$numeric_dict[k][0])){return false}}else if(other.$object_dict.hasOwnProperty(k)){var pairs=other.$object_dict[k],flag=false -for(var i=0,len=pairs.length;i < len;i++){if($B.rich_comp("__eq__",k,pairs[i][0])&& -$B.rich_comp("__eq__",self.$numeric_dict[k],pairs[i][1])){flag=true -break}} -if(! flag){return false}}else{return false}} -for(var k in self.$string_dict){if(!other.$string_dict.hasOwnProperty(k)|| -!$B.rich_comp("__eq__",other.$string_dict[k][0],self.$string_dict[k][0])){return false}} -for(var hash in self.$object_dict){var pairs=self.$object_dict[hash] -var other_pairs=[] -if(other.$numeric_dict[hash]!==undefined){other_pairs.push([hash,other.$numeric_dict[hash]])} -if(other.$object_dict[hash]!==undefined){other_pairs=other_pairs.concat(other.$object_dict[hash])} -if(other_pairs.length==0){return false} -for(var i=0,len_i=pairs.length;i < len_i;i++){var flag=false -var key=pairs[i][0],value=pairs[i][1][0] -for(var j=0,len_j=other_pairs.length;j < len_j;j++){if($B.rich_comp("__eq__",key,other_pairs[j][0])&& -$B.rich_comp("__eq__",value,other_pairs[j][1][0])){flag=true -break}} -if(! flag){return false}}} -return true} -dict.__getitem__=function(){var $=$B.args("__getitem__",2,{self:null,arg:null},["self","arg"],arguments,{},null,null),self=$.self,arg=$.arg -return dict.$getitem(self,arg)} -dict.$getitem=function(self,arg){if(self.$jsobj){if(self.$jsobj[arg]===undefined){if(self.$jsobj.hasOwnProperty(arg)){return $B.Undefined} -throw _b_.KeyError.$factory(arg)} -return self.$jsobj[arg]} -switch(typeof arg){case "string": -if(self.$string_dict[arg]!==undefined){return self.$string_dict[arg][0]} -break -case "number": -if(self.$numeric_dict[arg]!==undefined){return self.$numeric_dict[arg][0]} -break} -var hash=_b_.hash(arg),_eq=function(other){return $B.rich_comp("__eq__",arg,other)} -if(typeof arg=="object"){arg.$hash=hash } -var sk=self.$str_hash[hash] -if(sk !==undefined && _eq(sk)){return self.$string_dict[sk][0]} -if(self.$numeric_dict[hash]!==undefined && _eq(hash)){return self.$numeric_dict[hash][0]} -if(_b_.isinstance(arg,_b_.str)){ -var res=self.$string_dict[arg.valueOf()] -if(res !==undefined){return res[0]}} -var ix=rank(self,hash,arg) -if(ix >-1){return self.$object_dict[hash][ix][1][0]} -if(self.__class__ !==dict){try{var missing_method=getattr(self.__class__,"__missing__",_b_.None)}catch(err){console.log(err)} -if(missing_method !==_b_.None){return missing_method(self,arg)}} -throw _b_.KeyError.$factory(arg)} -dict.__hash__=_b_.None -function init_from_list(self,args){var i=-1,stop=args.length-1,si=dict.__setitem__ -while(i++< stop){var item=args[i] -switch(typeof item[0]){case 'string': -self.$string_dict[item[0]]=[item[1],self.$order++] -self.$str_hash[str_hash(item[0])]=item[0] -self.$version++ -break -case 'number': -if(item[0]!=0 && item[0]!=1){self.$numeric_dict[item[0]]=[item[1],self.$order++] -self.$version++ -break} -default: -si(self,item[0],item[1]) -break}}} -dict.__init__=function(self,first,second){var $ -if(first===undefined){return $N} -if(second===undefined){if(first.$nat !='kw' && $B.get_class(first)===$B.JSObj){for(var key in first){self.$string_dict[key]=[first[key],self.$order++]} -return _b_.None}else if(first.$jsobj){self.$jsobj={} -for(var attr in first.$jsobj){self.$jsobj[attr]=first.$jsobj[attr]} -return $N}else if(Array.isArray(first)){init_from_list(self,first) -return $N}} -$=$ ||$B.args("dict",1,{self:null},["self"],arguments,{},"first","second") -var args=$.first -if(args.length > 1){throw _b_.TypeError.$factory("dict expected at most 1 argument"+ -", got 2")}else if(args.length==1){args=args[0] -if(args.__class__===dict){['$string_dict','$str_hash','$numeric_dict','$object_dict']. -forEach(function(d){for(key in args[d]){self[d][key]=args[d][key]}})}else if(_b_.isinstance(args,dict)){$copy_dict(self,args)}else{var keys=$B.$getattr(args,"keys",null) -if(keys !==null){var gi=$B.$getattr(args,"__getitem__",null) -if(gi !==null){ -gi=$B.$call(gi) -var kiter=_b_.iter($B.$call(keys)()) -while(true){try{var key=_b_.next(kiter),value=gi(key) -dict.__setitem__(self,key,value)}catch(err){if(err.__class__===_b_.StopIteration){break} -throw err}} -return $N}} -if(! Array.isArray(args)){args=_b_.list.$factory(args)} -init_from_list(self,args)}} -var kw=$.second.$string_dict -for(var attr in kw){switch(typeof attr){case "string": -self.$string_dict[attr]=[kw[attr][0],self.$order++] -self.$str_hash[str_hash(attr)]=attr -break -case "number": -self.$numeric_dict[attr]=[kw[attr][0],self.$order++] -break -default: -si(self,attr,kw[attr][0]) -break}} -return $N} -dict.__iter__=function(self){return _b_.iter(dict.$$keys(self))} -dict.__ior__=function(self,other){ -dict.update(self,other) -return self} -dict.__len__=function(self){var _count=0 -if(self.$jsobj){for(var attr in self.$jsobj){if(attr.charAt(0)!="$"){_count++}} -return _count} -for(var k in self.$numeric_dict){_count++} -for(var k in self.$string_dict){_count++} -for(var hash in self.$object_dict){_count+=self.$object_dict[hash].length} -return _count} -dict.__ne__=function(self,other){return ! dict.__eq__(self,other)} -dict.__new__=function(cls){if(cls===undefined){throw _b_.TypeError.$factory("int.__new__(): not enough arguments")} -var instance={__class__:cls,$numeric_dict :{},$object_dict :{},$string_dict :{},$str_hash:{},$version:0,$order:0} -if(cls !==dict){instance.__dict__=$B.empty_dict()} -return instance} -dict.__or__=function(self,other){ -if(! _b_.isinstance(other,dict)){return _b_.NotImplemented} -var res=dict.copy(self) -dict.update(res,other) -return res} -dict.__repr__=function(self){if(self.$jsobj){ -return dict.__repr__(jsobj2dict(self.$jsobj))} -if($B.repr.enter(self)){return "{...}"} -var res=[],items=to_list(self) -items.forEach(function(item){try{res.push(repr(item[0])+": "+repr(item[1]))}catch(err){throw err}}) -$B.repr.leave(self) -return "{"+res.join(", ")+"}"} -dict.__ror__=function(self,other){ -if(! _b_.isinstance(other,dict)){return _b_.NotImplemented} -var res=dict.copy(other) -dict.update(res,self) -return res} -dict.__setitem__=function(self,key,value){var $=$B.args("__setitem__",3,{self:null,key:null,value:null},["self","key","value"],arguments,{},null,null) -return dict.$setitem($.self,$.key,$.value)} -dict.$setitem=function(self,key,value,$hash){ -if(self.$jsobj){if(self.$from_js){ -value=$B.pyobj2jsobj(value)} -if(self.$jsobj.__class__===_b_.type){self.$jsobj[key]=value -if(key=="__init__" ||key=="__new__"){ -self.$jsobj.$factory=$B.$instance_creator(self.$jsobj)}}else{self.$jsobj[key]=value} -return $N} -switch(typeof key){case "string": -if(self.$string_dict===undefined){console.log("pas de string dict",self,key,value)} -if(self.$string_dict[key]!==undefined){self.$string_dict[key][0]=value}else{self.$string_dict[key]=[value,self.$order++] -self.$str_hash[str_hash(key)]=key -self.$version++} -return $N -case "number": -if(self.$numeric_dict[key]!==undefined){ -self.$numeric_dict[key][0]=value}else{ -var done=false -if((key==0 ||key==1)&& -self.$object_dict[key]!==undefined){for(const item of self.$object_dict[key]){if((key==0 && item[0]===false)|| -(key==1 && item[0]===true)){ -item[1][0]=value -done=true}}} -if(! done){ -self.$numeric_dict[key]=[value,self.$order++]} -self.$version++} -return $N -case "boolean": -var num=key ? 1 :0 -if(self.$numeric_dict[num]!==undefined){var order=self.$numeric_dict[num][1] -self.$numeric_dict[num]=[value,order] -return} -if(self.$object_dict[num]!==undefined){self.$object_dict[num].push([key,[value,self.$order++]])}else{self.$object_dict[num]=[[key,[value,self.$order++]]]}} -var hash=$hash===undefined ? _b_.hash(key):$hash,_eq=function(other){return $B.rich_comp("__eq__",key,other)} -if(self.$numeric_dict[hash]!==undefined && _eq(hash)){self.$numeric_dict[hash]=[value,self.$numeric_dict[hash][1]] -self.$version++ -return $N} -var sk=self.$str_hash[hash] -if(sk !==undefined && _eq(sk)){self.$string_dict[sk]=[value,self.$string_dict[sk][1]] -self.$version++ -return $N} -if($hash){if(self.$object_dict[$hash]!==undefined){self.$object_dict[$hash].push([key,[value,self.$order++]])}else{self.$object_dict[$hash]=[[key,[value,self.$order++]]]} -self.$version++ -return $N} -var ix=rank(self,hash,key) -if(ix >-1){ -self.$object_dict[hash][ix][1]=[value,self.$object_dict[hash][ix][1][1]] -return $N}else if(self.$object_dict.hasOwnProperty(hash)){self.$object_dict[hash].push([key,[value,self.$order++]])}else{self.$object_dict[hash]=[[key,[value,self.$order++]]]} -self.$version++ -return $N} -dict.__str__=function(){return dict.__repr__.apply(null,arguments)} -$B.make_rmethods(dict) -dict.clear=function(){ -var $=$B.args("clear",1,{self:null},["self"],arguments,{},null,null),self=$.self -self.$numeric_dict={} -self.$string_dict={} -self.$str_hash={} -self.$object_dict={} -if(self.$jsobj){for(var attr in self.$jsobj){if(attr.charAt(0)!=="$" && attr !=="__class__"){delete self.$jsobj[attr]}}} -self.$version++ -self.$order=0 -return $N} -dict.copy=function(self){ -var $=$B.args("copy",1,{self:null},["self"],arguments,{},null,null),self=$.self,res=$B.empty_dict() -$copy_dict(res,self) -return res} -dict.fromkeys=function(){var $=$B.args("fromkeys",3,{cls:null,keys:null,value:null},["cls","keys","value"],arguments,{value:_b_.None},null,null),keys=$.keys,value=$.value -var klass=$.cls,res=$B.$call(klass)(),keys_iter=$B.$iter(keys) -while(1){try{var key=_b_.next(keys_iter) -if(klass===dict){dict.$setitem(res,key,value)} -else{$B.$getattr(res,"__setitem__")(key,value)}}catch(err){if($B.is_exc(err,[_b_.StopIteration])){return res} -throw err}}} -dict.get=function(){var $=$B.args("get",3,{self:null,key:null,_default:null},["self","key","_default"],arguments,{_default:$N},null,null) -try{return dict.__getitem__($.self,$.key)} -catch(err){if(_b_.isinstance(err,_b_.KeyError)){return $._default} -else{throw err}}} -var dict_items=$B.make_view("dict_items",true) -dict_items.$iterator=$B.make_iterator_class("dict_itemiterator") -dict.items=function(self){if(arguments.length > 1){var _len=arguments.length-1,_msg="items() takes no arguments ("+_len+" given)" -throw _b_.TypeError.$factory(_msg)} -var items=to_list(self),set_like=true -for(var i=0,len=items.length;i < len;i++){try{_b_.hash(items[i][1])}catch(err){set_like=false -break}} -var it=dict_items.$factory(to_list(self),set_like) -it.len_func=function(){return dict.__len__(self)} -return it} -var dict_keys=$B.make_view("dict_keys") -dict_keys.$iterator=$B.make_iterator_class("dict_keyiterator") -dict.$$keys=function(self){if(arguments.length > 1){var _len=arguments.length-1,_msg="keys() takes no arguments ("+_len+" given)" -throw _b_.TypeError.$factory(_msg)} -var it=dict_keys.$factory(to_list(self,0),true) -it.len_func=function(){return dict.__len__(self)} -return it} -dict.pop=function(){var missing={},$=$B.args("pop",3,{self:null,key:null,_default:null},["self","key","_default"],arguments,{_default:missing},null,null),self=$.self,key=$.key,_default=$._default -try{var res=dict.__getitem__(self,key) -dict.__delitem__(self,key) -return res}catch(err){if(err.__class__===_b_.KeyError){if(_default !==missing){return _default} -throw err} -throw err}} -dict.popitem=function(self){try{var itm=_b_.next(_b_.iter(dict.items(self))) -dict.__delitem__(self,itm[0]) -return _b_.tuple.$factory(itm)}catch(err){if(err.__class__==_b_.StopIteration){throw _b_.KeyError.$factory("'popitem(): dictionary is empty'")}}} -dict.setdefault=function(){var $=$B.args("setdefault",3,{self:null,key:null,_default:null},["self","key","_default"],arguments,{_default:$N},null,null),self=$.self,key=$.key,_default=$._default -try{return dict.__getitem__(self,key)} -catch(err){if(err.__class__ !==_b_.KeyError){throw err} -if(_default===undefined){_default=$N} -var hash=key.$hash -key.$hash=undefined -dict.$setitem(self,key,_default,hash) -return _default}} -dict.update=function(self){var $=$B.args("update",1,{"self":null},["self"],arguments,{},"args","kw"),self=$.self,args=$.args,kw=$.kw -if(args.length > 0){var o=args[0] -if(_b_.isinstance(o,dict)){if(o.$jsobj){o=jsobj2dict(o.$jsobj)} -$copy_dict(self,o)}else if(_b_.hasattr(o,"keys")){var _keys=_b_.list.$factory($B.$call($B.$getattr(o,"keys"))()) -for(var i=0,len=_keys.length;i < len;i++){var _value=getattr(o,"__getitem__")(_keys[i]) -dict.$setitem(self,_keys[i],_value)}}else{var it=_b_.iter(o),i=0 -while(true){try{var item=_b_.next(it)}catch(err){if(err.__class__===_b_.StopIteration){break} -throw err} -try{key_value=_b_.list.$factory(item)}catch(err){throw _b_.TypeError.$factory("cannot convert dictionary"+ -" update sequence element #"+i+" to a sequence")} -if(key_value.length !==2){throw _b_.ValueError.$factory("dictionary update "+ -"sequence element #"+i+" has length "+ -key_value.length+"; 2 is required")} -dict.$setitem(self,key_value[0],key_value[1]) -i++}}} -$copy_dict(self,kw) -self.$version++ -return $N} -var dict_values=$B.make_view("dict_values") -dict_values.$iterator=$B.make_iterator_class("dict_valueiterator") -dict.values=function(self){if(arguments.length > 1){var _len=arguments.length-1,_msg="values() takes no arguments ("+_len+" given)" -throw _b_.TypeError.$factory(_msg)} -var values=to_list(self,1) -var it=dict_values.$factory(to_list(self,1),false) -it.len_func=function(){return dict.__len__(self)} -return it} -dict.$factory=function(){var res=dict.__new__(dict) -var args=[res] -for(var i=0,len=arguments.length;i < len ;i++){args.push(arguments[i])} -dict.__init__.apply(null,args) -return res} -_b_.dict=dict -$B.set_func_names(dict,"builtins") -$B.empty_dict=function(){return{ -__class__:dict,$numeric_dict :{},$object_dict :{},$string_dict :{},$str_hash:{},$version:0,$order:0}} -dict.fromkeys=_b_.classmethod.$factory(dict.fromkeys) -$B.getset_descriptor=$B.make_class("getset_descriptor",function(klass,attr){return{ -__class__:$B.getset_descriptor,__doc__:_b_.None,cls:klass,attr:attr}} -) -$B.getset_descriptor.__repr__=$B.getset_descriptor.__str__=function(self){return ``} -$B.set_func_names($B.getset_descriptor,"builtins") -var mappingproxy=$B.mappingproxy=$B.make_class("mappingproxy",function(obj){if(_b_.isinstance(obj,dict)){ -var res=$B.obj_dict(dict.$to_obj(obj))}else{var res=$B.obj_dict(obj)} -res.__class__=mappingproxy -return res} -) -mappingproxy.__setitem__=function(){throw _b_.TypeError.$factory("'mappingproxy' object does not support "+ -"item assignment")} -for(var attr in dict){if(mappingproxy[attr]!==undefined || -["__class__","__mro__","__new__","__init__","__delitem__","clear","fromkeys","pop","popitem","setdefault","update"].indexOf(attr)>-1){continue} -if(typeof dict[attr]=="function"){mappingproxy[attr]=(function(key){return function(){return dict[key].apply(null,arguments)}})(attr)}else{mappingproxy[attr]=dict[attr]}} -$B.set_func_names(mappingproxy,"builtins") -function jsobj2dict(x){var d=$B.empty_dict() -for(var attr in x){if(attr.charAt(0)!="$" && attr !=="__class__"){if(x[attr]===null){d.$string_dict[attr]=[_b_.None,d.$order++]}else if(x[attr]===undefined){continue}else if(x[attr].$jsobj===x){d.$string_dict[attr]=[d,d.$order++]}else{d.$string_dict[attr]=[$B.$JS2Py(x[attr]),d.$order++]}}} -return d} -$B.obj_dict=function(obj,from_js){var klass=obj.__class__ ||$B.get_class(obj) -if(klass !==undefined && klass.$native){throw _b_.AttributeError.$factory(klass.__name__+ -" has no attribute '__dict__'")} -var res=$B.empty_dict() -res.$jsobj=obj -res.$from_js=from_js -return res}})(__BRYTHON__) -; -;(function($B){ -var _b_=$B.builtins; -var object=_b_.object -var JSObject=$B.JSObject -var _window=self; -function $getMouseOffset(target,ev){ev=ev ||_window.event; -var docPos=$getPosition(target); -var mousePos=$mouseCoords(ev); -return{x:mousePos.x-docPos.x,y:mousePos.y-docPos.y};} -function $getPosition(e){var left=0,top=0,width=e.width ||e.offsetWidth,height=e.height ||e.offsetHeight,scroll=document.scrollingElement.scrollTop -while(e.offsetParent){left+=e.offsetLeft -top+=e.offsetTop -e=e.offsetParent} -left+=e.offsetLeft ||0 -top+=e.offsetTop ||0 -if(e.parentElement){ -var parent_pos=$getPosition(e.parentElement) -left+=parent_pos.left -top+=parent_pos.top} -return{left:left,top:top,width:width,height:height}} -function trace(msg){var elt=document.getElementById("trace") -if(elt){elt.innerText+=msg}} -function $mouseCoords(ev){if(ev.type.startsWith("touch")){var res={} -res.x=_b_.int.$factory(ev.touches[0].screenX) -res.y=_b_.int.$factory(ev.touches[0].screenY) -res.__getattr__=function(attr){return this[attr]} -res.__class__="MouseCoords" -return res} -var posx=0,posy=0 -if(!ev){var ev=_window.event} -if(ev.pageX ||ev.pageY){posx=ev.pageX -posy=ev.pageY}else if(ev.clientX ||ev.clientY){posx=ev.clientX+document.body.scrollLeft+ -document.documentElement.scrollLeft -posy=ev.clientY+document.body.scrollTop+ -document.documentElement.scrollTop} -var res={} -res.x=_b_.int.$factory(posx) -res.y=_b_.int.$factory(posy) -res.__getattr__=function(attr){return this[attr]} -res.__class__="MouseCoords" -return res} -var $DOMNodeAttrs=["nodeName","nodeValue","nodeType","parentNode","childNodes","firstChild","lastChild","previousSibling","nextSibling","attributes","ownerDocument"] -$B.$isNode=function(o){ -return( -typeof Node==="object" ? o instanceof Node : -o && typeof o==="object" && typeof o.nodeType==="number" && -typeof o.nodeName==="string" -)} -$B.$isNodeList=function(nodes){ -try{var result=Object.prototype.toString.call(nodes) -var re=new RegExp("^\\[object (HTMLCollection|NodeList)\\]$") -return(typeof nodes==="object" && -re.exec(result)!==null && -nodes.length !==undefined && -(nodes.length==0 || -(typeof nodes[0]==="object" && nodes[0].nodeType > 0)) -)}catch(err){return false}} -var $DOMEventAttrs_W3C=["NONE","CAPTURING_PHASE","AT_TARGET","BUBBLING_PHASE","type","target","currentTarget","eventPhase","bubbles","cancelable","timeStamp","stopPropagation","preventDefault","initEvent"] -var $DOMEventAttrs_IE=["altKey","altLeft","button","cancelBubble","clientX","clientY","contentOverflow","ctrlKey","ctrlLeft","data","dataFld","dataTransfer","fromElement","keyCode","nextPage","offsetX","offsetY","origin","propertyName","reason","recordset","repeat","screenX","screenY","shiftKey","shiftLeft","source","srcElement","srcFilter","srcUrn","toElement","type","url","wheelDelta","x","y"] -$B.$isEvent=function(obj){var flag=true -for(var i=0;i < $DOMEventAttrs_W3C.length;i++){if(obj[$DOMEventAttrs_W3C[i]]===undefined){flag=false;break}} -if(flag){return true} -for(var i=0;i < $DOMEventAttrs_IE.length;i++){if(obj[$DOMEventAttrs_IE[i]]===undefined){return false}} -return true} -var $NodeTypes={1:"ELEMENT",2:"ATTRIBUTE",3:"TEXT",4:"CDATA_SECTION",5:"ENTITY_REFERENCE",6:"ENTITY",7:"PROCESSING_INSTRUCTION",8:"COMMENT",9:"DOCUMENT",10:"DOCUMENT_TYPE",11:"DOCUMENT_FRAGMENT",12:"NOTATION"} -var Attributes=$B.make_class("Attributes",function(elt){return{__class__:Attributes,elt:elt}} -) -Attributes.__contains__=function(){var $=$B.args("__getitem__",2,{self:null,key:null},["self","key"],arguments,{},null,null) -if($.self.elt instanceof SVGElement){return $.self.elt.hasAttributeNS(null,$.key)}else if(typeof $.self.elt.hasAttribute=="function"){return $.self.elt.hasAttribute($.key)} -return false} -Attributes.__delitem__=function(){var $=$B.args("__getitem__",2,{self:null,key:null},["self","key"],arguments,{},null,null) -if(!Attributes.__contains__($.self,$.key)){throw _b_.KeyError.$factory($.key)} -if($.self.elt instanceof SVGElement){$.self.elt.removeAttributeNS(null,$.key) -return _b_.None}else if(typeof $.self.elt.hasAttribute=="function"){$.self.elt.removeAttribute($.key) -return _b_.None}} -Attributes.__getitem__=function(){var $=$B.args("__getitem__",2,{self:null,key:null},["self","key"],arguments,{},null,null) -if($.self.elt instanceof SVGElement && -$.self.elt.hasAttributeNS(null,$.key)){return $.self.elt.getAttributeNS(null,$.key)}else if(typeof $.self.elt.hasAttribute=="function" && -$.self.elt.hasAttribute($.key)){return $.self.elt.getAttribute($.key)} -throw _b_.KeyError.$factory($.key)} -Attributes.__iter__=function(self){self.$counter=0 -var attrs=self.attributes,items=[] -for(var i=0;i < attrs.length;i++){items.push(attrs[i].name)} -self.$items=items -return self} -Attributes.__next__=function(){var $=$B.args("__next__",1,{self:null},["self"],arguments,{},null,null) -if($.self.$counter < $.self.$items.length){var res=$.self.$items[$.self.$counter] -$.self.$counter++ -return res}else{throw _b_.StopIteration.$factory("")}} -Attributes.__setitem__=function(){var $=$B.args("__setitem__",3,{self:null,key:null,value:null},["self","key","value"],arguments,{},null,null) -if($.self.elt instanceof SVGElement && -typeof $.self.elt.setAttributeNS=="function"){$.self.elt.setAttributeNS(null,$.key,$.value) -return _b_.None}else if(typeof $.self.elt.setAttribute=="function"){$.self.elt.setAttribute($.key,$.value) -return _b_.None} -throw _b_.TypeError.$factory("Can't set attributes on element")} -Attributes.get=function(){var $=$B.args("get",3,{self:null,key:null,deflt:null},["self","key","deflt"],arguments,{deflt:_b_.None},null,null) -try{return Attributes.__getitem__($.self,$.key)}catch(err){if(err.__class__===_b_.KeyError){return $.deflt}else{throw err}}} -Attributes.keys=function(){return Attributes.__iter__.apply(null,arguments)} -Attributes.items=function(){var $=$B.args("values",1,{self:null},["self"],arguments,{},null,null),attrs=$.self.attributes,values=[] -for(var i=0;i < attrs.length;i++){values.push([attrs[i].name,attrs[i].value])} -return _b_.list.__iter__(values)} -Attributes.values=function(){var $=$B.args("values",1,{self:null},["self"],arguments,{},null,null),attrs=$.self.attributes,values=[] -for(var i=0;i < attrs.length;i++){values.push(attrs[i].value)} -return _b_.list.__iter__(values)} -$B.set_func_names(Attributes,"") -var DOMEvent=$B.DOMEvent={__class__:_b_.type,__mro__:[object],$infos:{__name__:"DOMEvent"}} -DOMEvent.__new__=function(cls,evt_name){var ev=new Event(evt_name) -ev.__class__=DOMEvent -if(ev.preventDefault===undefined){ev.preventDefault=function(){ev.returnValue=false}} -if(ev.stopPropagation===undefined){ev.stopPropagation=function(){ev.cancelBubble=true}} -return ev} -function dom2svg(svg_elt,coords){ -var pt=svg_elt.createSVGPoint() -pt.x=coords.x -pt.y=coords.y -return pt.matrixTransform(svg_elt.getScreenCTM().inverse())} -DOMEvent.__getattribute__=function(self,attr){switch(attr){case '__repr__': -case '__str__': -return function(){return ''} -case 'x': -return $mouseCoords(self).x -case 'y': -return $mouseCoords(self).y -case 'data': -if(self.dataTransfer !==null){return Clipboard.$factory(self.dataTransfer)} -return $B.$JS2Py(self['data']) -case 'target': -if(self.target !==undefined){return DOMNode.$factory(self.target)} -case 'char': -return String.fromCharCode(self.which) -case 'svgX': -if(self.target instanceof SVGSVGElement){return Math.floor(dom2svg(self.target,$mouseCoords(self)).x)} -throw _b_.AttributeError.$factory("event target is not an SVG "+ -"element") -case 'svgY': -if(self.target instanceof SVGSVGElement){return Math.floor(dom2svg(self.target,$mouseCoords(self)).y)} -throw _b_.AttributeError.$factory("event target is not an SVG "+ -"element")} -var res=self[attr] -if(res !==undefined){if(typeof res=="function"){var func=function(){var args=[] -for(var i=0;i < arguments.length;i++){args.push($B.pyobj2jsobj(arguments[i]))} -return res.apply(self,arguments)} -func.$infos={__name__:res.name,__qualname__:res.name} -return func} -return $B.$JS2Py(res)} -throw _b_.AttributeError.$factory("object DOMEvent has no attribute '"+ -attr+"'")} -DOMEvent.$factory=function(evt_name){ -return DOMEvent.__new__(DOMEvent,evt_name)} -var $DOMEvent=$B.$DOMEvent=function(ev){ev.__class__=DOMEvent -ev.$no_dict=true -if(ev.preventDefault===undefined){ev.preventDefault=function(){ev.returnValue=false}} -if(ev.stopPropagation===undefined){ev.stopPropagation=function(){ev.cancelBubble=true}} -return ev} -$B.set_func_names(DOMEvent,"browser") -var Clipboard={__class__:_b_.type,$infos:{__module__:"browser",__name__:"Clipboard"}} -Clipboard.__getitem__=function(self,name){return self.data.getData(name)} -Clipboard.__mro__=[object] -Clipboard.__setitem__=function(self,name,value){self.data.setData(name,value)} -Clipboard.$factory=function(data){ -return{ -__class__ :Clipboard,__dict__:$B.empty_dict(),data :data}} -$B.set_func_names(Clipboard,"") -function $EventsList(elt,evt,arg){ -this.elt=elt -this.evt=evt -if(isintance(arg,list)){this.callbacks=arg} -else{this.callbacks=[arg]} -this.remove=function(callback){var found=false -for(var i=0;i < this.callbacks.length;i++){if(this.callbacks[i]===callback){found=true -this.callback.splice(i,1) -this.elt.removeEventListener(this.evt,callback,false) -break}} -if(! found){throw _b_.KeyError.$factory("not found")}}} -var OpenFile=$B.OpenFile={__class__:_b_.type, -__mro__:[object],$infos:{__module__:"",__name__:"OpenFile"}} -OpenFile.$factory=function(file,mode,encoding){var res={__class__:$OpenFileDict,file:file,reader:new FileReader()} -if(mode==="r"){res.reader.readAsText(file,encoding)}else if(mode==="rb"){res.reader.readAsBinaryString(file)} -return res} -OpenFile.__getattr__=function(self,attr){if(self["get_"+attr]!==undefined){return self["get_"+attr]} -return self.reader[attr]} -OpenFile.__setattr__=function(self,attr,value){var obj=self.reader -if(attr.substr(0,2)=="on"){ -var callback=function(ev){return value($DOMEvent(ev))} -obj.addEventListener(attr.substr(2),callback)}else if("set_"+attr in obj){return obj["set_"+attr](value)}else if(attr in obj){obj[attr]=value}else{setattr(obj,attr,value)}} -$B.set_func_names(OpenFile,"") -var dom={File :function(){},FileReader :function(){}} -dom.File.__class__=_b_.type -dom.File.__str__=function(){return ""} -dom.FileReader.__class__=_b_.type -dom.FileReader.__str__=function(){return ""} -var Options={__class__:_b_.type,__delitem__:function(self,arg){self.parent.options.remove(arg.elt)},__getitem__:function(self,key){return DOMNode.$factory(self.parent.options[key])},__len__:function(self){return self.parent.options.length},__mro__:[object],__setattr__:function(self,attr,value){self.parent.options[attr]=value},__setitem__:function(self,attr,value){self.parent.options[attr]=$B.$JS2Py(value)},__str__:function(self){return ""},append:function(self,element){self.parent.options.add(element.elt)},insert:function(self,index,element){if(index===undefined){self.parent.options.add(element.elt)} -else{self.parent.options.add(element.elt,index)}},item:function(self,index){return self.parent.options.item(index)},namedItem:function(self,name){return self.parent.options.namedItem(name)},remove:function(self,arg){self.parent.options.remove(arg.elt)},$infos:{__module__:"",__name__:"Options"}} -Options.$factory=function(parent){return{ -__class__:Options,parent:parent}} -$B.set_func_names(Options,"") -var DOMNode={__class__ :_b_.type,__mro__:[object],$infos:{__module__:"browser",__name__:"DOMNode"}} -DOMNode.$factory=function(elt,fromtag){if(elt.__class__===DOMNode){return elt} -if(typeof elt=="number" ||typeof elt=="boolean" || -typeof elt=="string"){return elt} -if(fromtag===undefined){if(DOMNode.tags !==undefined){ -var tdict=DOMNode.tags.$string_dict -if(tdict !==undefined && tdict.hasOwnProperty(elt.tagName)){try{var klass=tdict[elt.tagName][0]}catch(err){console.log("tdict",tdict,"tag name",elt.tagName) -throw err} -if(klass !==undefined){ -klass.$elt_wrap=elt -return klass.$factory()}}}} -if(elt["$brython_id"]===undefined ||elt.nodeType==9){ -elt.$brython_id="DOM-"+$B.UUID()} -return elt} -DOMNode.__add__=function(self,other){ -var res=TagSum.$factory() -res.children=[self],pos=1 -if(_b_.isinstance(other,TagSum)){res.children=res.children.concat(other.children)}else if(_b_.isinstance(other,[_b_.str,_b_.int,_b_.float,_b_.list,_b_.dict,_b_.set,_b_.tuple])){res.children[pos++]=DOMNode.$factory( -document.createTextNode(_b_.str.$factory(other)))}else if(_b_.isinstance(other,DOMNode)){res.children[pos++]=other}else{ -try{res.children=res.children.concat(_b_.list.$factory(other))} -catch(err){throw _b_.TypeError.$factory("can't add '"+ -$B.class_name(other)+"' object to DOMNode instance")}} -return res} -DOMNode.__bool__=function(self){return true} -DOMNode.__contains__=function(self,key){ -if(self.nodeType==9 && typeof key=="string"){return document.getElementById(key)!==null} -if(self.length !==undefined && typeof self.item=="function"){for(var i=0,len=self.length;i < len;i++){if(self.item(i)===key){return true}}} -return false} -DOMNode.__del__=function(self){ -if(!self.parentNode){throw _b_.ValueError.$factory("can't delete "+_b_.str.$factory(self))} -self.parentNode.removeChild(self)} -DOMNode.__delattr__=function(self,attr){if(self[attr]===undefined){throw _b_.AttributeError.$factory( -`cannot delete DOMNode attribute '${attr}'`)} -delete self[attr] -return _b_.None} -DOMNode.__delitem__=function(self,key){if(self.nodeType==9){ -var res=self.getElementById(key) -if(res){res.parentNode.removeChild(res)} -else{throw _b_.KeyError.$factory(key)}}else{ -self.parentNode.removeChild(self)}} -DOMNode.__dir__=function(self){var res=[] -for(var attr in self){if(attr.charAt(0)!="$"){res.push(attr)}} -res.sort() -return res} -DOMNode.__eq__=function(self,other){return self==other} -DOMNode.__getattribute__=function(self,attr){if(attr.substr(0,2)=="$$"){attr=attr.substr(2)} -switch(attr){case "attrs": -return Attributes.$factory(self) -case "class_name": -case "html": -case "id": -case "parent": -case "text": -return DOMNode[attr](self) -case "height": -case "left": -case "top": -case "width": -if(self.tagName=="CANVAS" && self[attr]){return self[attr]} -if(self instanceof SVGElement){return self[attr].baseVal.value} -if(self.style[attr]){return parseInt(self.style[attr])}else{var computed=window.getComputedStyle(self)[attr] -if(computed !==undefined){return Math.floor(parseFloat(computed)+0.5)} -throw _b_.AttributeError.$factory("style."+attr+ -" is not set for "+_b_.str.$factory(self))} -case "x": -case "y": -if(!(self instanceof SVGElement)){var pos=$getPosition(self) -return attr=="x" ? pos.left :pos.top} -case "clear": -case "closest": -return function(){return DOMNode[attr](self,arguments[0])} -case "headers": -if(self.nodeType==9){ -var req=new XMLHttpRequest(); -req.open("GET",document.location,false) -req.send(null); -var headers=req.getAllResponseHeaders() -headers=headers.split("\r\n") -var res=$B.empty_dict() -for(var i=0;i < headers.length;i++){var header=headers[i] -if(header.strip().length==0){continue} -var pos=header.search(":") -res.__setitem__(header.substr(0,pos),header.substr(pos+1).lstrip())} -return res} -break -case "$$location": -attr="location" -break} -if(attr=="select" && self.nodeType==1 && -["INPUT","TEXTAREA"].indexOf(self.tagName.toUpperCase())>-1){return function(selector){if(selector===undefined){self.select();return _b_.None} -return DOMNode.select(self,selector)}} -if(attr=="query" && self.nodeType==9){ -var res={__class__:Query,_keys :[],_values :{}} -var qs=location.search.substr(1).split('&') -if(location.search !=""){for(var i=0;i < qs.length;i++){var pos=qs[i].search("="),elts=[qs[i].substr(0,pos),qs[i].substr(pos+1)],key=decodeURIComponent(elts[0]),value=decodeURIComponent(elts[1]) -if(res._keys.indexOf(key)>-1){res._values[key].push(value)}else{res._keys.push(key) -res._values[key]=[value]}}} -return res} -var property=self[attr] -if(property===undefined && $B.aliased_names[attr]){property=self["$$"+attr]} -if(property===undefined){return object.__getattribute__(self,attr)} -var res=property -if(res !==undefined){if(res===null){return _b_.None} -if(typeof res==="function"){ -var func=(function(f,elt){return function(){var args=[],pos=0 -for(var i=0;i < arguments.length;i++){var arg=arguments[i] -if(typeof arg=="function"){ -if(arg.$cache){var f1=arg.$cache}else{var f1=function(dest_fn){return function(){try{return dest_fn.apply(null,arguments)}catch(err){$B.handle_error(err)}}}(arg) -arg.$cache=f1} -args[pos++]=f1}else if(_b_.isinstance(arg,DOMNode)){args[pos++]=arg}else if(arg===_b_.None){args[pos++]=null}else if(arg.__class__==_b_.dict){args[pos++]=_b_.dict.$to_obj(arg)}else{args[pos++]=arg}} -var result=f.apply(elt,args) -return $B.$JS2Py(result)}})(res,self) -func.$infos={__name__ :attr,__qualname__:attr} -func.$is_func=true -return func} -if(attr=='options'){return Options.$factory(self)} -if(attr=='style'){return $B.JSObj.$factory(self[attr])} -if(Array.isArray(res)){return res} -return $B.$JS2Py(res)} -return object.__getattribute__(self,attr)} -DOMNode.__getitem__=function(self,key){if(self.nodeType==9){ -if(typeof key=="string"){var res=self.getElementById(key) -if(res){return DOMNode.$factory(res)} -throw _b_.KeyError.$factory(key)}else{try{var elts=self.getElementsByTagName(key.$infos.__name__),res=[] -for(var i=0;i < elts.length;i++){res.push(DOMNode.$factory(elts[i]))} -return res}catch(err){throw _b_.KeyError.$factory(_b_.str.$factory(key))}}}else{if((typeof key=="number" ||typeof key=="boolean")&& -typeof self.item=="function"){var key_to_int=_b_.int.$factory(key) -if(key_to_int < 0){key_to_int+=self.length} -var res=DOMNode.$factory(self.item(key_to_int)) -if(res===undefined){throw _b_.KeyError.$factory(key)} -return res}else if(typeof key=="string" && -self.attributes && -typeof self.attributes.getNamedItem=="function"){var attr=self.attributes.getNamedItem(key) -if(!!attr){return attr.value} -throw _b_.KeyError.$factory(key)}}} -DOMNode.__hash__=function(self){return self.__hashvalue__===undefined ? -(self.__hashvalue__=$B.$py_next_hash--): -self.__hashvalue__} -DOMNode.__iter__=function(self){ -if(self.length !==undefined && typeof self.item=="function"){var items=[] -for(var i=0,len=self.length;i < len;i++){items.push(DOMNode.$factory(self.item(i)))}}else if(self.childNodes !==undefined){var items=[] -for(var i=0,len=self.childNodes.length;i < len;i++){items.push(DOMNode.$factory(self.childNodes[i]))}} -return $B.$iter(items)} -DOMNode.__le__=function(self,other){ -if(self.nodeType==9){self=self.body} -if(_b_.isinstance(other,TagSum)){for(var i=0;i < other.children.length;i++){self.appendChild(other.children[i])}}else if(typeof other=="string" ||typeof other=="number"){var $txt=document.createTextNode(other.toString()) -self.appendChild($txt)}else if(_b_.isinstance(other,DOMNode)){ -self.appendChild(other)}else{try{ -var items=_b_.list.$factory(other) -items.forEach(function(item){DOMNode.__le__(self,item)})}catch(err){throw _b_.TypeError.$factory("can't add '"+ -$B.class_name(other)+"' object to DOMNode instance")}} -return true } -DOMNode.__len__=function(self){return self.length} -DOMNode.__mul__=function(self,other){if(_b_.isinstance(other,_b_.int)&& other.valueOf()> 0){var res=TagSum.$factory() -var pos=res.children.length -for(var i=0;i < other.valueOf();i++){res.children[pos++]=DOMNode.clone(self)()} -return res} -throw _b_.ValueError.$factory("can't multiply "+self.__class__+ -"by "+other)} -DOMNode.__ne__=function(self,other){return ! DOMNode.__eq__(self,other)} -DOMNode.__next__=function(self){self.$counter++ -if(self.$counter < self.childNodes.length){return DOMNode.$factory(self.childNodes[self.$counter])} -throw _b_.StopIteration.$factory("StopIteration")} -DOMNode.__radd__=function(self,other){ -var res=TagSum.$factory() -var txt=DOMNode.$factory(document.createTextNode(other)) -res.children=[txt,self] -return res} -DOMNode.__str__=DOMNode.__repr__=function(self){var proto=Object.getPrototypeOf(self) -if(proto){var name=proto.constructor.name -if(name===undefined){ -var proto_str=proto.constructor.toString() -name=proto_str.substring(8,proto_str.length-1)} -return "<"+name+" object>"} -var res=""} -DOMNode.__setattr__=function(self,attr,value){ -if(attr.substr(0,2)=="on"){ -if(!$B.$bool(value)){ -DOMNode.unbind(self,attr.substr(2))}else{ -DOMNode.bind(self,attr.substr(2),value)}}else{switch(attr){case "left": -case "top": -case "width": -case "height": -if(_b_.isinstance(value,_b_.int)&& self.nodeType==1){self.style[attr]=value+"px" -return _b_.None}else{throw _b_.ValueError.$factory(attr+" value should be"+ -" an integer, not "+$B.class_name(value))} -break} -if(DOMNode["set_"+attr]!==undefined){return DOMNode["set_"+attr](self,value)} -function warn(msg){console.log(msg) -var frame=$B.last($B.frames_stack) -if($B.debug > 0){var info=frame[1].$line_info.split(",") -console.log("module",info[1],"line",info[0]) -if($B.$py_src.hasOwnProperty(info[1])){var src=$B.$py_src[info[1]] -console.log(src.split("\n")[parseInt(info[0])-1])}}else{console.log("module",frame[2])}} -var proto=Object.getPrototypeOf(self),nb=0 -while(!!proto && proto !==Object.prototype && nb++< 10){var descriptors=Object.getOwnPropertyDescriptors(proto) -if(!!descriptors && -typeof descriptors.hasOwnProperty=="function"){if(descriptors.hasOwnProperty(attr)){if(!descriptors[attr].writable && -descriptors[attr].set===undefined){warn("Warning: property '"+attr+ -"' is not writable. Use element.attrs['"+ -attr+"'] instead.")} -break}}else{break} -proto=Object.getPrototypeOf(proto)} -if(self.style && self.style[attr]!==undefined){warn("Warning: '"+attr+"' is a property of element.style")} -self[attr]=value -return _b_.None}} -DOMNode.__setitem__=function(self,key,value){if(typeof key=="number"){self.childNodes[key]=value}else if(typeof key=="string"){if(self.attributes){if(self instanceof SVGElement){self.setAttributeNS(null,key,value)}else if(typeof self.setAttribute=="function"){self.setAttribute(key,value)}}}} -DOMNode.abs_left={__get__:function(self){return $getPosition(self).left},__set__:function(){throw _b_.AttributeError.$factory("'DOMNode' objectattribute "+ -"'abs_left' is read-only")}} -DOMNode.abs_top={__get__:function(self){return $getPosition(self).top},__set__:function(){throw _b_.AttributeError.$factory("'DOMNode' objectattribute "+ -"'abs_top' is read-only")}} -DOMNode.attach=DOMNode.__le__ -DOMNode.bind=function(self,event){ -var $=$B.args("bind",4,{self:null,event:null,func:null,options:null},["self","event","func","options"],arguments,{options:_b_.None},null,null),self=$.self,event=$.event,func=$.func,options=$.options -var callback=(function(f){return function(ev){try{return f($DOMEvent(ev))}catch(err){if(err.__class__ !==undefined){$B.handle_error(err)}else{try{$B.$getattr($B.stderr,"write")(err)} -catch(err1){console.log(err)}}}}} -)(func) -callback.$infos=func.$infos -callback.$attrs=func.$attrs ||{} -callback.$func=func -if(typeof options=="boolean"){self.addEventListener(event,callback,options)}else if(options.__class__===_b_.dict){self.addEventListener(event,callback,_b_.dict.$to_obj(options))}else if(options===_b_.None){self.addEventListener(event,callback,false)} -self.$events=self.$events ||{} -self.$events[event]=self.$events[event]||[] -self.$events[event].push([func,callback]) -return self} -DOMNode.children=function(self){var res=[] -if(self.nodeType==9){self=self.body} -self.childNodes.forEach(function(child){res.push(DOMNode.$factory(child))}) -return res} -DOMNode.clear=function(self){ -if(self.nodeType==9){self=self.body} -while(self.firstChild){self.removeChild(self.firstChild)}} -DOMNode.Class=function(self){if(self.className !==undefined){return self.className} -return _b_.None} -DOMNode.class_name=function(self){return DOMNode.Class(self)} -DOMNode.clone=function(self){var res=DOMNode.$factory(self.cloneNode(true)) -var events=self.$events ||{} -for(var event in events){var evt_list=events[event] -evt_list.forEach(function(evt){var func=evt[0] -DOMNode.bind(res,event,func)})} -return res} -DOMNode.closest=function(self,selector){ -var res=self.closest(selector) -if(res===null){throw _b_.KeyError.$factory("no parent with selector "+selector)} -return DOMNode.$factory(res)} -DOMNode.events=function(self,event){self.$events=self.$events ||{} -var evt_list=self.$events[event]=self.$events[event]||[],callbacks=[] -evt_list.forEach(function(evt){callbacks.push(evt[1])}) -return callbacks} -DOMNode.focus=function(self){return(function(obj){return function(){ -setTimeout(function(){obj.focus()},10)}})(self)} -function make_list(node_list){var res=[] -for(var i=0;i < node_list.length;i++){res.push(DOMNode.$factory(node_list[i]))} -return res} -DOMNode.get=function(self){ -var args=[] -for(var i=1;i < arguments.length;i++){args.push(arguments[i])} -var $ns=$B.args("get",0,{},[],args,{},null,"kw"),$dict={},items=_b_.list.$factory(_b_.dict.items($ns["kw"])) -items.forEach(function(item){$dict[item[0]]=item[1]}) -if($dict["name"]!==undefined){if(self.getElementsByName===undefined){throw _b_.TypeError.$factory("DOMNode object doesn't support "+ -"selection by name")} -return make_list(self.getElementsByName($dict['name']))} -if($dict["tag"]!==undefined){if(self.getElementsByTagName===undefined){throw _b_.TypeError.$factory("DOMNode object doesn't support "+ -"selection by tag name")} -return make_list(self.getElementsByTagName($dict["tag"]))} -if($dict["classname"]!==undefined){if(self.getElementsByClassName===undefined){throw _b_.TypeError.$factory("DOMNode object doesn't support "+ -"selection by class name")} -return make_list(self.getElementsByClassName($dict['classname']))} -if($dict["id"]!==undefined){if(self.getElementById===undefined){throw _b_.TypeError.$factory("DOMNode object doesn't support "+ -"selection by id")} -var id_res=document.getElementById($dict['id']) -if(! id_res){return[]} -return[DOMNode.$factory(id_res)]} -if($dict["selector"]!==undefined){if(self.querySelectorAll===undefined){throw _b_.TypeError.$factory("DOMNode object doesn't support "+ -"selection by selector")} -return make_list(self.querySelectorAll($dict['selector']))} -return res} -DOMNode.getContext=function(self){ -if(!("getContext" in self)){throw _b_.AttributeError.$factory("object has no attribute 'getContext'")} -return function(ctx){return $B.JSObj.$factory(self.getContext(ctx))}} -DOMNode.getSelectionRange=function(self){ -if(self["getSelectionRange"]!==undefined){return self.getSelectionRange.apply(null,arguments)}} -DOMNode.html=function(self){var res=self.innerHTML -if(res===undefined){if(self.nodeType==9){res=self.body.innerHTML} -else{res=_b_.None}} -return res} -DOMNode.id=function(self){if(self.id !==undefined){return self.id} -return _b_.None} -DOMNode.index=function(self,selector){var items -if(selector===undefined){items=self.parentElement.childNodes}else{items=self.parentElement.querySelectorAll(selector)} -var rank=-1 -for(var i=0;i < items.length;i++){if(items[i]===self){rank=i;break}} -return rank} -DOMNode.inside=function(self,other){ -var elt=self -while(true){if(other===elt){return true} -elt=elt.parentElement -if(! elt){return false}}} -DOMNode.options=function(self){ -return new $OptionsClass(self)} -DOMNode.parent=function(self){if(self.parentElement){return DOMNode.$factory(self.parentElement)} -return _b_.None} -DOMNode.reset=function(self){ -return function(){self.reset()}} -DOMNode.scrolled_left={__get__:function(self){return $getPosition(self).left- -document.scrollingElement.scrollLeft},__set__:function(){throw _b_.AttributeError.$factory("'DOMNode' objectattribute "+ -"'scrolled_left' is read-only")}} -DOMNode.scrolled_top={__get__:function(self){return $getPosition(self).top- -document.scrollingElement.scrollTop},__set__:function(){throw _b_.AttributeError.$factory("'DOMNode' objectattribute "+ -"'scrolled_top' is read-only")}} -DOMNode.select=function(self,selector){ -if(self.querySelectorAll===undefined){throw _b_.TypeError.$factory("DOMNode object doesn't support "+ -"selection by selector")} -return make_list(self.querySelectorAll(selector))} -DOMNode.select_one=function(self,selector){ -if(self.querySelector===undefined){throw _b_.TypeError.$factory("DOMNode object doesn't support "+ -"selection by selector")} -var res=self.querySelector(selector) -if(res===null){return _b_.None} -return DOMNode.$factory(res)} -DOMNode.style=function(self){ -self.style.float=self.style.cssFloat ||self.styleFloat -return $B.JSObj.$factory(self.style)} -DOMNode.setSelectionRange=function(self){ -if(this["setSelectionRange"]!==undefined){return(function(obj){return function(){return obj.setSelectionRange.apply(obj,arguments)}})(this)}else if(this["createTextRange"]!==undefined){return(function(obj){return function(start_pos,end_pos){if(end_pos==undefined){end_pos=start_pos} -var range=obj.createTextRange() -range.collapse(true) -range.moveEnd("character",start_pos) -range.moveStart("character",end_pos) -range.select()}})(this)}} -DOMNode.set_class_name=function(self,arg){self.setAttribute("class",arg)} -DOMNode.set_html=function(self,value){if(self.nodeType==9){self=self.body} -self.innerHTML=_b_.str.$factory(value)} -DOMNode.set_style=function(self,style){ -if(!_b_.isinstance(style,_b_.dict)){throw _b_.TypeError.$factory("style must be dict, not "+ -$B.class_name(style))} -var items=_b_.list.$factory(_b_.dict.items(style)) -for(var i=0;i < items.length;i++){var key=items[i][0],value=items[i][1] -if(key.toLowerCase()=="float"){self.style.cssFloat=value -self.style.styleFloat=value}else{switch(key){case "top": -case "left": -case "width": -case "borderWidth": -if(_b_.isinstance(value,_b_.int)){value=value+"px"}} -self.style[key]=value}}} -DOMNode.set_text=function(self,value){if(self.nodeType==9){self=self.body} -self.innerText=_b_.str.$factory(value) -self.textContent=_b_.str.$factory(value)} -DOMNode.set_value=function(self,value){self.value=_b_.str.$factory(value)} -DOMNode.submit=function(self){ -return function(){self.submit()}} -DOMNode.text=function(self){if(self.nodeType==9){self=self.body} -var res=self.innerText ||self.textContent -if(res===null){res=_b_.None} -return res} -DOMNode.toString=function(self){if(self===undefined){return 'DOMNode'} -return self.nodeName} -DOMNode.trigger=function(self,etype){ -if(self.fireEvent){self.fireEvent("on"+etype)}else{var evObj=document.createEvent("Events") -evObj.initEvent(etype,true,false) -self.dispatchEvent(evObj)}} -DOMNode.unbind=function(self,event){ -self.$events=self.$events ||{} -if(self.$events==={}){return _b_.None} -if(event===undefined){for(var event in self.$events){DOMNode.unbind(self,event)} -return _b_.None} -if(self.$events[event]===undefined || -self.$events[event].length==0){return _b_.None} -var events=self.$events[event] -if(arguments.length==2){ -for(var i=0;i < events.length;i++){var callback=events[i][1] -self.removeEventListener(event,callback,false)} -self.$events[event]=[] -return _b_.None} -for(var i=2;i < arguments.length;i++){var callback=arguments[i],flag=false,func=callback.$func -if(func===undefined){ -var found=false -for(var j=0;j < events.length;j++){if(events[j][0]===callback){var func=callback,found=true -break}} -if(!found){throw _b_.TypeError.$factory("function is not an event callback")}} -for(var j=0;j < events.length;j++){if($B.$getattr(func,'__eq__')(events[j][0])){var callback=events[j][1] -self.removeEventListener(event,callback,false) -events.splice(j,1) -flag=true -break}} -if(!flag){throw _b_.KeyError.$factory('missing callback for event '+event)}}} -$B.set_func_names(DOMNode,"browser") -var Query={__class__:_b_.type,__mro__:[_b_.object],$infos:{__name__:"query"}} -Query.__contains__=function(self,key){return self._keys.indexOf(key)>-1} -Query.__getitem__=function(self,key){ -var result=self._values[key] -if(result===undefined){throw _b_.KeyError.$factory(key)}else if(result.length==1){return result[0]} -return result} -var Query_iterator=$B.make_iterator_class("query string iterator") -Query.__iter__=function(self){return Query_iterator.$factory(self._keys)} -Query.__setitem__=function(self,key,value){self._values[key]=[value] -return _b_.None} -Query.__str__=Query.__repr__=function(self){ -var elts=[] -for(var key in self._values){for(const val of self._values[key]){elts.push(encodeURIComponent(key)+"="+encodeURIComponent(val))}} -if(elts.length==0){return ""}else{return "?"+elts.join("&")}} -Query.getfirst=function(self,key,_default){ -var result=self._values[key] -if(result===undefined){if(_default===undefined){return _b_.None} -return _default} -return result[0]} -Query.getlist=function(self,key){ -var result=self._values[key] -if(result===undefined){return[]} -return result} -Query.getvalue=function(self,key,_default){try{return Query.__getitem__(self,key)} -catch(err){if(_default===undefined){return _b_.None} -return _default}} -Query.keys=function(self){return self._keys} -$B.set_func_names(Query,"") -var TagSum={__class__ :_b_.type,__mro__:[object],$infos:{__module__:"",__name__:"TagSum"}} -TagSum.appendChild=function(self,child){self.children.push(child)} -TagSum.__add__=function(self,other){if($B.get_class(other)===TagSum){self.children=self.children.concat(other.children)}else if(_b_.isinstance(other,[_b_.str,_b_.int,_b_.float,_b_.dict,_b_.set,_b_.list])){self.children=self.children.concat( -DOMNode.$factory(document.createTextNode(other)))}else{self.children.push(other)} -return self} -TagSum.__radd__=function(self,other){var res=TagSum.$factory() -res.children=self.children.concat( -DOMNode.$factory(document.createTextNode(other))) -return res} -TagSum.__repr__=function(self){var res=" " -for(var i=0;i < self.children.length;i++){res+=self.children[i] -if(self.children[i].toString()=="[object Text]"){res+=" ["+self.children[i].textContent+"]\n"}} -return res} -TagSum.__str__=TagSum.toString=TagSum.__repr__ -TagSum.clone=function(self){var res=TagSum.$factory() -for(var i=0;i < self.children.length;i++){res.children.push(self.children[i].cloneNode(true))} -return res} -TagSum.$factory=function(){return{ -__class__:TagSum,children:[],toString:function(){return "(TagSum)"}}} -$B.set_func_names(TagSum,"") -$B.TagSum=TagSum -var win=$B.JSObj.$factory(_window) -win.get_postMessage=function(msg,targetOrigin){if(_b_.isinstance(msg,dict)){var temp={__class__:"dict"},items=_b_.list.$factory(_b_.dict.items(msg)) -items.forEach(function(item){temp[item[0]]=item[1]}) -msg=temp} -return _window.postMessage(msg,targetOrigin)} -$B.DOMNode=DOMNode -$B.win=win})(__BRYTHON__) -; -;(function($B){ -var _b_=$B.builtins -var bltns=$B.InjectBuiltins() -eval(bltns) -var $GeneratorReturn={} -$B.generator_return=function(value){return{__class__:$GeneratorReturn,value:value}} -$B.generator=$B.make_class("generator",function(func){var res=function(){var gen=func.apply(null,arguments) -gen.$name=func.name -gen.$func=func -gen.$has_run=false -gen.__class__=$B.generator -if(func.$has_yield_in_cm){var locals=$B.last($B.frames_stack)[1] -locals.$close_generators=locals.$close_generators ||[] -locals.$close_generators.push(gen)} -return gen} -res.$infos=func.$infos -res.$is_genfunc=true -return res} -) -$B.generator.__iter__=function(self){return self} -$B.generator.__next__=function(self){return $B.generator.send(self,_b_.None)} -$B.generator.close=function(self){try{$B.generator.$$throw(self,_b_.GeneratorExit.$factory())}catch(err){if(! $B.is_exc(err,[_b_.GeneratorExit,_b_.StopIteration])){throw _b_.RuntimeError.$factory("generator ignored GeneratorExit")}}} -$B.generator.send=function(self,value){ -self.$has_run=true -if(self.$finished){throw _b_.StopIteration.$factory(value)} -if(self.gi_running===true){throw _b_.ValueError.$factory("generator already executing")} -self.gi_running=true -try{var res=self.next(value)}catch(err){self.$finished=true -throw err} -if(res.value && res.value.__class__===$GeneratorReturn){self.$finished=true -throw _b_.StopIteration.$factory(res.value.value)} -self.gi_running=false -if(res.done){throw _b_.StopIteration.$factory(res.value)} -return res.value} -$B.generator.$$throw=function(self,type,value,traceback){var exc=type -if(exc.$is_class){if(! _b_.issubclass(type,_b_.BaseException)){throw _b_.TypeError.$factory("exception value must be an "+ -"instance of BaseException")}else if(value===undefined){exc=$B.$call(exc)()}else if(_b_.isinstance(value,type)){exc=value}}else{if(value===undefined){value=exc}else{exc=$B.$call(exc)(value)}} -if(traceback !==undefined){exc.$traceback=traceback} -var res=self.throw(exc) -if(res.done){throw _b_.StopIteration.$factory("StopIteration")} -return res.value} -$B.set_func_names($B.generator,"builtins") -$B.async_generator=$B.make_class("async_generator",function(func){var f=function(){var res=func.apply(null,arguments) -res.__class__=$B.async_generator -return res} -return f} -) -var ag_closed={} -$B.async_generator.__aiter__=function(self){return self} -$B.async_generator.__anext__=function(self){return $B.async_generator.asend(self,_b_.None)} -$B.async_generator.aclose=function(self){self.$finished=true -return _b_.None} -$B.async_generator.asend=async function(self,value){if(self.$finished){throw _b_.StopAsyncIteration.$factory(value)} -if(self.ag_running===true){throw _b_.ValueError.$factory("generator already executing")} -self.ag_running=true -try{var res=await self.next(value)}catch(err){self.$finished=true -throw err} -if(res.done){throw _b_.StopAsyncIteration.$factory(value)} -if(res.value.__class__===$GeneratorReturn){self.$finished=true -throw _b_.StopAsyncIteration.$factory(res.value.value)} -self.ag_running=false -return res.value} -$B.async_generator.athrow=async function(self,type,value,traceback){var exc=type -if(exc.$is_class){if(! _b_.issubclass(type,_b_.BaseException)){throw _b_.TypeError.$factory("exception value must be an "+ -"instance of BaseException")}else if(value===undefined){value=$B.$call(exc)()}}else{if(value===undefined){value=exc}else{exc=$B.$call(exc)(value)}} -if(traceback !==undefined){exc.$traceback=traceback} -await self.throw(value)} -$B.set_func_names($B.async_generator,"builtins") -function rstrip(s,strip_chars){var _chars=strip_chars ||" \t\n"; -var nstrip=0,len=s.length; -while(nstrip < len && _chars.indexOf(s.charAt(len-1-nstrip))>-1)nstrip++; -return s.substr(0,len-nstrip)}})(__BRYTHON__) -; - ;(function($B){var _b_=$B.builtins -var update=function(mod,data){for(attr in data){mod[attr]=data[attr]}} -var _window=self; -var modules={} -var browser={$package:true,$is_package:true,__initialized__:true,__package__:'browser',__file__:$B.brython_path.replace(/\/*$/g,'')+ -'/Lib/browser/__init__.py',bind:function(){ -var $=$B.args("bind",3,{elt:null,evt:null,options:null},["elt","evt","options"],arguments,{options:_b_.None},null,null) -var options=$.options -if(typeof options=="boolean"){} -else if(options.__class__===_b_.dict){options=options.$string_dict}else{options==false} -return function(callback){if($B.get_class($.elt)===$B.JSObj){ -function f(ev){try{return callback($B.JSObj.$factory(ev))}catch(err){$B.handle_error(err)}} -$.elt.addEventListener($.evt,f,options) -return callback}else if(_b_.isinstance($.elt,$B.DOMNode)){ -$B.DOMNode.bind($.elt,$.evt,callback,options) -return callback}else if(_b_.isinstance($.elt,_b_.str)){ -var items=document.querySelectorAll($.elt) -for(var i=0;i < items.length;i++){$B.DOMNode.bind($B.DOMNode.$factory(items[i]),$.evt,callback,options)} -return callback} -try{var it=$B.$iter($.elt) -while(true){try{var elt=_b_.next(it) -$B.DOMNode.bind(elt,$.evt,callback)}catch(err){if(_b_.isinstance(err,_b_.StopIteration)){break} -throw err}}}catch(err){if(_b_.isinstance(err,_b_.AttributeError)){$B.DOMNode.bind($.elt,$.evt,callback)} -throw err} -return callback}},console:self.console && $B.JSObj.$factory(self.console),self:$B.win,win:$B.win,$$window:$B.win,} -browser.__path__=browser.__file__ -if($B.isNode){delete browser.$$window -delete browser.win}else if($B.isWebWorker){browser.is_webworker=true -delete browser.$$window -delete browser.win -browser.self.send=self.postMessage}else{ -browser.is_webworker=false -update(browser,{$$alert:function(message){window.alert($B.builtins.str.$factory(message ||""))},confirm:$B.JSObj.$factory(window.confirm),$$document:$B.DOMNode.$factory(document),doc:$B.DOMNode.$factory(document), -DOMEvent:$B.DOMEvent,DOMNode:$B.DOMNode,load:function(script_url){ -var file_obj=$B.builtins.open(script_url) -var content=$B.$getattr(file_obj,'read')() -eval(content)},mouseCoords:function(ev){return $B.JSObj.$factory($mouseCoords(ev))},prompt:function(message,default_value){return $B.JSObj.$factory(window.prompt(message,default_value||''))},reload:function(){ -var scripts=document.getElementsByTagName('script'),js_scripts=[] -scripts.forEach(function(script){if(script.type===undefined || -script.type=='text/javascript'){js_scripts.push(script) -if(script.src){console.log(script.src)}}}) -console.log(js_scripts) -for(var mod in $B.imported){if($B.imported[mod].$last_modified){console.log('check',mod,$B.imported[mod].__file__,$B.imported[mod].$last_modified)}else{console.log('no date for mod',mod)}}},run_script:function(){var $=$B.args("run_script",2,{src:null,name:null},["src","name"],arguments,{name:"script_"+$B.UUID()},null,null) -$B.run_script($.src,$.name,true)},URLParameter:function(name){name=name.replace(/[\[]/,"\\[").replace(/[\]]/,"\\]"); -var regex=new RegExp("[\\?&]"+name+"=([^]*)"),results=regex.exec(location.search); -results=results===null ? "" : -decodeURIComponent(results[1].replace(/\+/g," ")); -return $B.builtins.str.$factory(results);}}) -modules['browser.html']=(function($B){var _b_=$B.builtins -var TagSum=$B.TagSum -function makeTagDict(tagName){ -var dict={__class__:_b_.type,$infos:{__name__:tagName,__module__:"browser.html"}} -dict.__init__=function(){var $ns=$B.args('pow',1,{self:null},['self'],arguments,{},'args','kw'),self=$ns['self'],args=$ns['args'] -if(args.length==1){var first=args[0] -if(_b_.isinstance(first,[_b_.str,_b_.int,_b_.float])){ -self.innerHTML=_b_.str.$factory(first)}else if(first.__class__===TagSum){for(var i=0,len=first.children.length;i < len;i++){self.appendChild(first.children[i])}}else{if(_b_.isinstance(first,$B.DOMNode)){self.appendChild(first)}else{try{ -var items=_b_.list.$factory(first) -items.forEach(function(item){$B.DOMNode.__le__(self,item)})}catch(err){if($B.debug > 1){console.log(err,err.__class__,err.args) -console.log("first",first) -console.log(arguments)} -$B.handle_error(err)}}}} -var items=_b_.list.$factory(_b_.dict.items($ns['kw'])) -for(var i=0,len=items.length;i < len;i++){ -var arg=items[i][0],value=items[i][1] -if(arg.toLowerCase().substr(0,2)=="on"){ -var js='$B.DOMNode.bind(self,"'+ -arg.toLowerCase().substr(2) -eval(js+'",function(){'+value+'})')}else if(arg.toLowerCase()=="style"){$B.DOMNode.set_style(self,value)}else{if(value !==false){ -try{ -arg=$B.imported["browser.html"]. -attribute_mapper(arg) -self.setAttribute(arg,value)}catch(err){throw _b_.ValueError.$factory( -"can't set attribute "+arg)}}}}} -dict.__mro__=[$B.DOMNode,$B.builtins.object] -dict.__new__=function(cls){ -if(cls.$elt_wrap !==undefined){ -var elt=cls.$elt_wrap -cls.$elt_wrap=undefined -var res=$B.DOMNode.$factory(elt,true) -res._wrapped=true }else{var res=$B.DOMNode.$factory(document.createElement(tagName),true) -res._wrapped=false } -res.__class__=cls -res.__dict__=$B.empty_dict() -return res} -$B.set_func_names(dict,"browser.html") -return dict} -function makeFactory(klass){var factory=function(){if(klass.$elt_wrap !==undefined){ -var elt=klass.$elt_wrap -klass.$elt_wrap=undefined -var res=$B.DOMNode.$factory(elt,true) -res._wrapped=true }else{if(klass.$infos.__name__=='SVG'){var res=$B.DOMNode.$factory(document.createElementNS("http://www.w3.org/2000/svg","svg"),true)}else{var res=$B.DOMNode.$factory(document.createElement(klass.$infos.__name__),true)} -res._wrapped=false } -res.__class__=klass -klass.__init__(res,...arguments) -return res} -return factory} -var tags=['A','ABBR','ACRONYM','ADDRESS','APPLET','AREA','B','BASE','BASEFONT','BDO','BIG','BLOCKQUOTE','BODY','BR','BUTTON','CAPTION','CENTER','CITE','CODE','COL','COLGROUP','DD','DEL','DFN','DIR','DIV','DL','DT','EM','FIELDSET','FONT','FORM','FRAME','FRAMESET','H1','H2','H3','H4','H5','H6','HEAD','HR','HTML','I','IFRAME','IMG','INPUT','INS','ISINDEX','KBD','LABEL','LEGEND','LI','LINK','MAP','MENU','META','NOFRAMES','NOSCRIPT','OBJECT','OL','OPTGROUP','OPTION','P','PARAM','PRE','Q','S','SAMP','SCRIPT','SELECT','SMALL','SPAN','STRIKE','STRONG','STYLE','SUB','SUP','SVG','TABLE','TBODY','TD','TEXTAREA','TFOOT','TH','THEAD','TITLE','TR','TT','U','UL','VAR', -'ARTICLE','ASIDE','AUDIO','BDI','CANVAS','COMMAND','DATA','DATALIST','EMBED','FIGCAPTION','FIGURE','FOOTER','HEADER','KEYGEN','MAIN','MARK','MATH','METER','NAV','OUTPUT','PROGRESS','RB','RP','RT','RTC','RUBY','SECTION','SOURCE','TEMPLATE','TIME','TRACK','VIDEO','WBR', -'DETAILS','DIALOG','MENUITEM','PICTURE','SUMMARY'] -var obj={tags:$B.empty_dict()},dicts={} -$B.DOMNode.tags=obj.tags -function maketag(tag){if(!(typeof tag=='string')){throw _b_.TypeError.$factory("html.maketag expects a string as argument")} -var klass=dicts[tag]=makeTagDict(tag) -klass.$factory=makeFactory(klass) -_b_.dict.$setitem(obj.tags,tag,klass) -return klass} -tags.forEach(function(tag){obj[tag]=maketag(tag)}) -obj.maketag=maketag -obj.attribute_mapper=function(attr){return attr.replace(/_/g,'-')} -return obj})(__BRYTHON__)} -modules['browser']=browser -$B.UndefinedClass=$B.make_class("Undefined",function(){return $B.Undefined} -) -$B.UndefinedClass.__mro__=[_b_.object] -$B.UndefinedClass.__bool__=function(self){return false} -$B.UndefinedClass.__repr__=$B.UndefinedClass.__str__=function(self){return ""} -$B.Undefined={__class__:$B.UndefinedClass} -$B.set_func_names($B.UndefinedClass,"javascript") -modules['javascript']={$$this:function(){ -if($B.js_this===undefined){return $B.builtins.None} -return $B.JSObj.$factory($B.js_this)},$$Date:self.Date && $B.JSObj.$factory(self.Date),JSConstructor:{__get__:function(){console.warn('"javascript.JSConstructor" is deprecrated. '+ -'Use window..new() instead.') -return $B.JSConstructor},__set__:function(){throw _b_.AttributeError.$factory("read only")}},JSObject:{__get__:function(){console.warn('"javascript.JSObject" is deprecrated. To use '+ -'a Javascript object, use window. instead.') -return $B.JSObject},__set__:function(){throw _b_.AttributeError.$factory("read only")}},JSON:{__class__:$B.make_class("JSON"),parse:function(){return $B.structuredclone2pyobj( -JSON.parse.apply(this,arguments))},stringify:function(obj,replacer,space){return JSON.stringify($B.pyobj2structuredclone(obj,false),$B.JSObj.$factory(replacer),space)}},jsobj2pyobj:function(obj){return $B.jsobj2pyobj(obj)},load:function(script_url){console.log('"javascript.load" is deprecrated. '+ -'Use browser.load instead.') -var file_obj=$B.builtins.open(script_url) -var content=$B.$getattr(file_obj,'read')() -eval(content)},$$Math:self.Math && $B.JSObj.$factory(self.Math),NULL:null,$$Number:self.Number && $B.JSObj.$factory(self.Number),py2js:function(src,module_name){if(module_name===undefined){module_name='__main__'+$B.UUID()} -return $B.py2js(src,module_name,module_name,$B.builtins_scope).to_js()},pyobj2jsobj:function(obj){return $B.pyobj2jsobj(obj)},$$RegExp:self.RegExp && $B.JSObj.$factory(self.RegExp),$$String:self.String && $B.JSObj.$factory(self.String),UNDEFINED:$B.Undefined,UndefinedType:$B.UndefinedClass} -var arraybuffers=["Int8Array","Uint8Array","Uint8ClampedArray","Int16Array","Uint16Array","Int32Array","Uint32Array","Float32Array","Float64Array","BigInt64Array","BigUint64Array"] -arraybuffers.forEach(function(ab){if(self[ab]!==undefined){modules['javascript'][ab]=$B.JSObj.$factory(self[ab])}}) -var _b_=$B.builtins -modules['_sys']={ -Getframe :function(){var $=$B.args("_getframe",1,{depth:null},['depth'],arguments,{depth:0},null,null),depth=$.depth -return $B._frame.$factory($B.frames_stack,$B.frames_stack.length-depth-1)},breakpointhook:function(){var hookname=$B.$options.breakpoint,modname,dot,funcname,hook -if(hookname===undefined){hookname="pdb.set_trace"} -[modname,dot,funcname]=_b_.str.rpartition(hookname,'.') -if(dot==""){modname="builtins"} -try{$B.$import(modname) -hook=$B.$getattr($B.imported[modname],funcname)}catch(err){console.warn("cannot import breakpoint",hookname) -return _b_.None} -return $B.$call(hook).apply(null,arguments)},exc_info:function(){for(var i=$B.frames_stack.length-1;i >=0;i--){var frame=$B.frames_stack[i],exc=frame[1].$current_exception -if(exc){return _b_.tuple.$factory([exc.__class__,exc,$B.$getattr(exc,"__traceback__")])}} -return _b_.tuple.$factory([_b_.None,_b_.None,_b_.None])},excepthook:function(exc_class,exc_value,traceback){$B.handle_error(exc_value)},modules:_b_.property.$factory( -function(){return $B.obj_dict($B.imported)},function(self,obj,value){throw _b_.TypeError.$factory("Read only property 'sys.modules'")} -),path:_b_.property.$factory( -function(){return $B.path},function(self,obj,value){$B.path=value;} -),meta_path:_b_.property.$factory( -function(){return $B.meta_path},function(self,obj,value){$B.meta_path=value } -),path_hooks:_b_.property.$factory( -function(){return $B.path_hooks},function(self,obj,value){$B.path_hooks=value } -),path_importer_cache:_b_.property.$factory( -function(){return _b_.dict.$factory($B.JSObj.$factory($B.path_importer_cache))},function(self,obj,value){throw _b_.TypeError.$factory("Read only property"+ -" 'sys.path_importer_cache'")} -),settrace:function(){var $=$B.args("settrace",1,{tracefunc:null},['tracefunc'],arguments,{},null,null) -$B.tracefunc=$.tracefunc -$B.last($B.frames_stack)[1].$f_trace=$B.tracefunc -$B.tracefunc.$current_frame_id=$B.last($B.frames_stack)[0] -return _b_.None},stderr:_b_.property.$factory( -function(){return $B.stderr},function(self,value){$B.stderr=value} -),stdout:_b_.property.$factory( -function(){return $B.stdout},function(self,value){$B.stdout=value} -),stdin:_b_.property.$factory( -function(){return $B.stdin},function(self,value){$B.stdin=value} -),vfs:_b_.property.$factory( -function(){if($B.hasOwnProperty("VFS")){return $B.obj_dict($B.VFS)} -else{return _b_.None}},function(){throw _b_.TypeError.$factory("Read only property 'sys.vfs'")} -)} -modules._sys.__breakpointhook__=modules._sys.breakpointhook -modules._sys.stderr.write=function(data){return $B.$getattr(_sys.stderr.__get__(),"write")(data)} -modules._sys.stdout.write=function(data){return $B.$getattr(_sys.stdout.__get__(),"write")(data)} -function load(name,module_obj){ -module_obj.__class__=$B.module -module_obj.__name__=name -$B.imported[name]=module_obj -for(var attr in module_obj){if(typeof module_obj[attr]=='function'){var attr1=$B.from_alias(attr) -module_obj[attr].$infos={__module__:name,__name__:attr1,__qualname__:name+'.'+attr1}}}} -for(var attr in modules){load(attr,modules[attr])} -if(!($B.isWebWorker ||$B.isNode)){modules['browser'].html=modules['browser.html']} -var _b_=$B.builtins -_b_.__builtins__=$B.module.$factory('__builtins__','Python builtins') -for(var attr in _b_){_b_.__builtins__[attr]=_b_[attr] -$B.builtins_scope.binding[attr]=true} -_b_.__builtins__.__setattr__=function(attr,value){_b_[attr]=value} -$B.method_descriptor.__getattribute__=$B.Function.__getattribute__ -$B.wrapper_descriptor.__getattribute__=$B.Function.__getattribute__ -for(var name in _b_){if(_b_[name].__class__===_b_.type){$B.builtin_classes.push(_b_[name]) -for(var key in _b_[name]){var value=_b_[name][key] -if(value===undefined){continue} -else if(value.__class__){continue} -else if(typeof value !="function"){continue} -else if(key=="__new__"){value.__class__=$B.builtin_function}else if(key.startsWith("__")){value.__class__=$B.wrapper_descriptor}else{value.__class__=$B.method_descriptor} -value.__objclass__=_b_[name]}}} -for(var attr in $B){if(Array.isArray($B[attr])){$B[attr].__class__=_b_.list}} -$B.cell=$B.make_class("cell",function(value){return{ -__class__:$B.cell,$cell_contents:value}} -) -$B.cell.cell_contents=$B.$call(_b_.property)( -function(self){if(self.$cell_contents===null){throw _b_.ValueError.$factory("empty cell")} -return self.$cell_contents},function(self,value){self.$cell_contents=value} -) -var $comps=Object.values($B.$comps).concat(["eq","ne"]) -$comps.forEach(function(comp){var op="__"+comp+"__" -$B.cell[op]=(function(op){return function(self,other){if(! _b_.isinstance(other,$B.cell)){return NotImplemented} -if(self.$cell_contents===null){if(other.$cell_contents===null){return op=="__eq__"}else{return["__ne__","__lt__","__le__"].indexOf(op)>-1}}else if(other.$cell_contents===null){return["__ne__","__gt__","__ge__"].indexOf(op)>-1} -return $B.rich_comp(op,self.$cell_contents,other.$cell_contents)}})(op)}) -$B.set_func_names($B.cell,"builtins")})(__BRYTHON__) -; -var docs={ArithmeticError:"Base class for arithmetic errors.",AssertionError:"Assertion failed.",AttributeError:"Attribute not found.",BaseException:"Common base class for all exceptions",BlockingIOError:"I/O operation would block.",BrokenPipeError:"Broken pipe.",BufferError:"Buffer error.",BytesWarning:"Base class for warnings about bytes and buffer related problems, mostly\nrelated to conversion from str or comparing to str.",ChildProcessError:"Child process error.",ConnectionAbortedError:"Connection aborted.",ConnectionError:"Connection error.",ConnectionRefusedError:"Connection refused.",ConnectionResetError:"Connection reset.",DeprecationWarning:"Base class for warnings about deprecated features.",EOFError:"Read beyond end of file.",Ellipsis:"",EnvironmentError:"Base class for I/O related errors.",Exception:"Common base class for all non-exit exceptions.",False:"bool(x) -> bool\n\nReturns True when the argument x is true, False otherwise.\nThe builtins True and False are the only two instances of the class bool.\nThe class bool is a subclass of the class int, and cannot be subclassed.",FileExistsError:"File already exists.",FileNotFoundError:"File not found.",FloatingPointError:"Floating point operation failed.",FutureWarning:"Base class for warnings about constructs that will change semantically\nin the future.",GeneratorExit:"Request that a generator exit.",IOError:"Base class for I/O related errors.",ImportError:"Import can't find module, or can't find name in module.",ImportWarning:"Base class for warnings about probable mistakes in module imports",IndentationError:"Improper indentation.",IndexError:"Sequence index out of range.",InterruptedError:"Interrupted by signal.",IsADirectoryError:"Operation doesn't work on directories.",KeyError:"Mapping key not found.",KeyboardInterrupt:"Program interrupted by user.",LookupError:"Base class for lookup errors.",MemoryError:"Out of memory.",NameError:"Name not found globally.",None:"",NotADirectoryError:"Operation only works on directories.",NotImplemented:"",NotImplementedError:"Method or function hasn't been implemented yet.",OSError:"Base class for I/O related errors.",OverflowError:"Result too large to be represented.",PendingDeprecationWarning:"Base class for warnings about features which will be deprecated\nin the future.",PermissionError:"Not enough permissions.",ProcessLookupError:"Process not found.",ReferenceError:"Weak ref proxy used after referent went away.",ResourceWarning:"Base class for warnings about resource usage.",RuntimeError:"Unspecified run-time error.",RuntimeWarning:"Base class for warnings about dubious runtime behavior.",StopIteration:"Signal the end from iterator.__next__().",SyntaxError:"Invalid syntax.",SyntaxWarning:"Base class for warnings about dubious syntax.",SystemError:"Internal error in the Python interpreter.\n\nPlease report this to the Python maintainer, along with the traceback,\nthe Python version, and the hardware/OS platform and version.",SystemExit:"Request to exit from the interpreter.",TabError:"Improper mixture of spaces and tabs.",TimeoutError:"Timeout expired.",True:"bool(x) -> bool\n\nReturns True when the argument x is true, False otherwise.\nThe builtins True and False are the only two instances of the class bool.\nThe class bool is a subclass of the class int, and cannot be subclassed.",TypeError:"Inappropriate argument type.",UnboundLocalError:"Local name referenced but not bound to a value.",UnicodeDecodeError:"Unicode decoding error.",UnicodeEncodeError:"Unicode encoding error.",UnicodeError:"Unicode related error.",UnicodeTranslateError:"Unicode translation error.",UnicodeWarning:"Base class for warnings about Unicode related problems, mostly\nrelated to conversion problems.",UserWarning:"Base class for warnings generated by user code.",ValueError:"Inappropriate argument value (of correct type).",Warning:"Base class for warning categories.",WindowsError:"Base class for I/O related errors.",ZeroDivisionError:"Second argument to a division or modulo operation was zero.",__debug__:"bool(x) -> bool\n\nReturns True when the argument x is true, False otherwise.\nThe builtins True and False are the only two instances of the class bool.\nThe class bool is a subclass of the class int, and cannot be subclassed.",abs:"abs(number) -> number\n\nReturn the absolute value of the argument.",all:"all(iterable) -> bool\n\nReturn True if bool(x) is True for all values x in the iterable.\nIf the iterable is empty, return True.",any:"any(iterable) -> bool\n\nReturn True if bool(x) is True for any x in the iterable.\nIf the iterable is empty, return False.",ascii:"ascii(object) -> string\n\nAs repr(), return a string containing a printable representation of an\nobject, but escape the non-ASCII characters in the string returned by\nrepr() using \\x, \\u or \\U escapes. This generates a string similar\nto that returned by repr() in Python 2.",bin:"bin(number) -> string\n\nReturn the binary representation of an integer.\n\n >>> bin(2796202)\n '0b1010101010101010101010'\n",bool:"bool(x) -> bool\n\nReturns True when the argument x is true, False otherwise.\nThe builtins True and False are the only two instances of the class bool.\nThe class bool is a subclass of the class int, and cannot be subclassed.",bytearray:"bytearray(iterable_of_ints) -> bytearray\nbytearray(string, encoding[, errors]) -> bytearray\nbytearray(bytes_or_buffer) -> mutable copy of bytes_or_buffer\nbytearray(int) -> bytes array of size given by the parameter initialized with null bytes\nbytearray() -> empty bytes array\n\nConstruct an mutable bytearray object from:\n - an iterable yielding integers in range(256)\n - a text string encoded using the specified encoding\n - a bytes or a buffer object\n - any object implementing the buffer API.\n - an integer",bytes:"bytes(iterable_of_ints) -> bytes\nbytes(string, encoding[, errors]) -> bytes\nbytes(bytes_or_buffer) -> immutable copy of bytes_or_buffer\nbytes(int) -> bytes object of size given by the parameter initialized with null bytes\nbytes() -> empty bytes object\n\nConstruct an immutable array of bytes from:\n - an iterable yielding integers in range(256)\n - a text string encoded using the specified encoding\n - any object implementing the buffer API.\n - an integer",callable:"callable(object) -> bool\n\nReturn whether the object is callable (i.e., some kind of function).\nNote that classes are callable, as are instances of classes with a\n__call__() method.",chr:"chr(i) -> Unicode character\n\nReturn a Unicode string of one character with ordinal i; 0 <= i <= 0x10ffff.",classmethod:"classmethod(function) -> method\n\nConvert a function to be a class method.\n\nA class method receives the class as implicit first argument,\njust like an instance method receives the instance.\nTo declare a class method, use this idiom:\n\n class C:\n def f(cls, arg1, arg2, ...): ...\n f = classmethod(f)\n\nIt can be called either on the class (e.g. C.f()) or on an instance\n(e.g. C().f()). The instance is ignored except for its class.\nIf a class method is called for a derived class, the derived class\nobject is passed as the implied first argument.\n\nClass methods are different than C++ or Java static methods.\nIf you want those, see the staticmethod builtin.",compile:"compile(source, filename, mode[, flags[, dont_inherit]]) -> code object\n\nCompile the source (a Python module, statement or expression)\ninto a code object that can be executed by exec() or eval().\nThe filename will be used for run-time error messages.\nThe mode must be 'exec' to compile a module, 'single' to compile a\nsingle (interactive) statement, or 'eval' to compile an expression.\nThe flags argument, if present, controls which future statements influence\nthe compilation of the code.\nThe dont_inherit argument, if non-zero, stops the compilation inheriting\nthe effects of any future statements in effect in the code calling\ncompile; if absent or zero these statements do influence the compilation,\nin addition to any features explicitly specified.",complex:"complex(real[, imag]) -> complex number\n\nCreate a complex number from a real part and an optional imaginary part.\nThis is equivalent to (real + imag*1j) where imag defaults to 0.",copyright:"interactive prompt objects for printing the license text, a list of\n contributors and the copyright notice.",credits:"interactive prompt objects for printing the license text, a list of\n contributors and the copyright notice.",delattr:"delattr(object, name)\n\nDelete a named attribute on an object; delattr(x, 'y') is equivalent to\n``del x.y''.",dict:"dict() -> new empty dictionary\ndict(mapping) -> new dictionary initialized from a mapping object's\n (key, value) pairs\ndict(iterable) -> new dictionary initialized as if via:\n d = {}\n for k, v in iterable:\n d[k] = v\ndict(**kwargs) -> new dictionary initialized with the name=value pairs\n in the keyword argument list. For example: dict(one=1, two=2)",dir:"dir([object]) -> list of strings\n\nIf called without an argument, return the names in the current scope.\nElse, return an alphabetized list of names comprising (some of) the attributes\nof the given object, and of attributes reachable from it.\nIf the object supplies a method named __dir__, it will be used; otherwise\nthe default dir() logic is used and returns:\n for a module object: the module's attributes.\n for a class object: its attributes, and recursively the attributes\n of its bases.\n for any other object: its attributes, its class's attributes, and\n recursively the attributes of its class's base classes.",divmod:"divmod(x, y) -> (div, mod)\n\nReturn the tuple ((x-x%y)/y, x%y). Invariant: div*y + mod == x.",enumerate:"enumerate(iterable[, start]) -> iterator for index, value of iterable\n\nReturn an enumerate object. iterable must be another object that supports\niteration. The enumerate object yields pairs containing a count (from\nstart, which defaults to zero) and a value yielded by the iterable argument.\nenumerate is useful for obtaining an indexed list:\n (0, seq[0]), (1, seq[1]), (2, seq[2]), ...",eval:"eval(source[, globals[, locals]]) -> value\n\nEvaluate the source in the C of globals and locals.\nThe source may be a string representing a Python expression\nor a code object as returned by compile().\nThe globals must be a dictionary and locals can be any mapping,\ndefaulting to the current globals and locals.\nIf only globals is given, locals defaults to it.\n",exec:"exec(object[, globals[, locals]])\n\nRead and execute code from an object, which can be a string or a code\nobject.\nThe globals and locals are dictionaries, defaulting to the current\nglobals and locals. If only globals is given, locals defaults to it.",exit:"",filter:"filter(function or None, iterable) --> filter object\n\nReturn an iterator yielding those items of iterable for which function(item)\nis true. If function is None, return the items that are true.",float:"float(x) -> floating point number\n\nConvert a string or number to a floating point number, if possible.",format:"format(value[, format_spec]) -> string\n\nReturns value.__format__(format_spec)\nformat_spec defaults to \"\"", -frozenset:"frozenset()-> empty frozenset object\nfrozenset(iterable)-> frozenset object\n\nBuild an immutable unordered collection of unique elements.", -getattr:"getattr(object,name[,default])-> value\n\nGet a named attribute from an object;getattr(x,'y')is equivalent to x.y.\nWhen a default argument is given,it is returned when the attribute doesn't\nexist; without it, an exception is raised in that case.", -globals:"globals() -> dictionary\n\nReturn the dictionary containing the current scope's global variables.", -hasattr:"hasattr(object,name)-> bool\n\nReturn whether the object has an attribute with the given name.\n(This is done by calling getattr(object,name)and catching AttributeError.)", -hash:"hash(object)-> integer\n\nReturn a hash value for the object. Two objects with the same value have\nthe same hash value. The reverse is not necessarily true,but likely.", -help:"Define the builtin 'help'.\n\n This is a wrapper around pydoc.help that provides a helpful message\n when 'help' is typed at the Python interactive prompt.\n\n Calling help()at the Python prompt starts an interactive help session.\n Calling help(thing)prints help for the python object 'thing'.\n ", -hex:"hex(number)-> string\n\nReturn the hexadecimal representation of an integer.\n\n >>> hex(3735928559)\n '0xdeadbeef'\n", -id:"id(object)-> integer\n\nReturn the identity of an object. This is guaranteed to be unique among\nsimultaneously existing objects.(Hint:it's the object's memory address.)", -input:"input([prompt])-> string\n\nRead a string from standard input. The trailing newline is stripped.\nIf the user hits EOF(Unix:Ctl-D,Windows:Ctl-Z+Return),raise EOFError.\nOn Unix,GNU readline is used if enabled. The prompt string,if given,\nis printed without a trailing newline before reading.", -int:"int(x=0)-> integer\nint(x,base=10)-> integer\n\nConvert a number or string to an integer,or return 0 if no arguments\nare given. If x is a number,return x.__int__(). For floating point\nnumbers,this truncates towards zero.\n\nIf x is not a number or if base is given,then x must be a string,\nbytes,or bytearray instance representing an integer literal in the\ngiven base. The literal can be preceded by '+' or '-' and be surrounded\nby whitespace. The base defaults to 10. Valid bases are 0 and 2-36.\nBase 0 means to interpret the base from the string as an integer literal.\n>>> int('0b100',base=0)\n4", -isinstance:"isinstance(object,class-or-type-or-tuple)-> bool\n\nReturn whether an object is an instance of a class or of a subclass thereof.\nWith a type as second argument,return whether that is the object's type.\nThe form using a tuple, isinstance(x, (A, B, ...)), is a shortcut for\nisinstance(x, A) or isinstance(x, B) or ... (etc.).", -issubclass:"issubclass(C, B) -> bool\n\nReturn whether class C is a subclass (i.e., a derived class) of class B.\nWhen using a tuple as the second argument issubclass(X, (A, B, ...)),\nis a shortcut for issubclass(X, A) or issubclass(X, B) or ... (etc.).", -iter:"iter(iterable) -> iterator\niter(callable, sentinel) -> iterator\n\nGet an iterator from an object. In the first form, the argument must\nsupply its own iterator, or be a sequence.\nIn the second form, the callable is called until it returns the sentinel.", -len:"len(object)\n\nReturn the number of items of a sequence or collection.", -license:"interactive prompt objects for printing the license text, a list of\n contributors and the copyright notice.", -list:"list() -> new empty list\nlist(iterable) -> new list initialized from iterable's items", -locals:"locals()-> dictionary\n\nUpdate and return a dictionary containing the current scope's local variables.", -map:"map(func, *iterables) --> map object\n\nMake an iterator that computes the function using arguments from\neach of the iterables. Stops when the shortest iterable is exhausted.", -max:"max(iterable, *[, default=obj, key=func]) -> value\nmax(arg1, arg2, *args, *[, key=func]) -> value\n\nWith a single iterable argument, return its biggest item. The\ndefault keyword-only argument specifies an object to return if\nthe provided iterable is empty.\nWith two or more arguments, return the largest argument.", -memoryview:"memoryview(object)\n\nCreate a new memoryview object which references the given object.", -min:"min(iterable, *[, default=obj, key=func]) -> value\nmin(arg1, arg2, *args, *[, key=func]) -> value\n\nWith a single iterable argument, return its smallest item. The\ndefault keyword-only argument specifies an object to return if\nthe provided iterable is empty.\nWith two or more arguments, return the smallest argument.", -next:"next(iterator[, default])\n\nReturn the next item from the iterator. If default is given and the iterator\nis exhausted, it is returned instead of raising StopIteration.", -object:"The most base type", -oct:"oct(number) -> string\n\nReturn the octal representation of an integer.\n\n >>> oct(342391)\n '0o1234567'\n", -open:"open(file, mode='r', buffering=-1, encoding=None,\n errors=None, newline=None, closefd=True, opener=None) -> file object\n\nOpen file and return a stream. Raise IOError upon failure.\n\nfile is either a text or byte string giving the name (and the path\nif the file isn't in the current working directory)of the file to\nbe opened or an integer file descriptor of the file to be\nwrapped.(If a file descriptor is given,it is closed when the\nreturned I/O object is closed,unless closefd is set to False.)\n\nmode is an optional string that specifies the mode in which the file\nis opened. It defaults to 'r' which means open for reading in text\nmode. Other common values are 'w' for writing(truncating the file if\nit already exists),'x' for creating and writing to a new file,and\n'a' for appending(which on some Unix systems,means that all writes\nappend to the end of the file regardless of the current seek position).\nIn text mode,if encoding is not specified the encoding used is platform\ndependent:locale.getpreferredencoding(False)is called to get the\ncurrent locale encoding.(For reading and writing raw bytes use binary\nmode and leave encoding unspecified.)The available modes are:\n\n========================================================================\nCharacter Meaning\n------------------------------------------------------------------------\n'r' open for reading(default)\n'w' open for writing,truncating the file first\n'x' create a new file and open it for writing\n'a' open for writing,appending to the end of the file if it exists\n'b' binary mode\n't' text mode(default)\n'+' open a disk file for updating(reading and writing)\n'U' universal newline mode(deprecated)\n========================================================================\n\nThe default mode is 'rt'(open for reading text). For binary random\naccess,the mode 'w+b' opens and truncates the file to 0 bytes,while\n'r+b' opens the file without truncation. The 'x' mode implies 'w' and\nraises an `FileExistsError` if the file already exists.\n\nPython distinguishes between files opened in binary and text modes,\neven when the underlying operating system doesn't. Files opened in\nbinary mode (appending 'b' to the mode argument) return contents as\nbytes objects without any decoding. In text mode (the default, or when\n't' is appended to the mode argument), the contents of the file are\nreturned as strings, the bytes having been first decoded using a\nplatform-dependent encoding or using the specified encoding if given.\n\n'U' mode is deprecated and will raise an exception in future versions\nof Python. It has no effect in Python 3. Use newline to control\nuniversal newlines mode.\n\nbuffering is an optional integer used to set the buffering policy.\nPass 0 to switch buffering off (only allowed in binary mode), 1 to select\nline buffering (only usable in text mode), and an integer > 1 to indicate\nthe size of a fixed-size chunk buffer. When no buffering argument is\ngiven, the default buffering policy works as follows:\n\n* Binary files are buffered in fixed-size chunks; the size of the buffer\n is chosen using a heuristic trying to determine the underlying device's\n \"block size\" and falling back on `io.DEFAULT_BUFFER_SIZE`.\n On many systems, the buffer will typically be 4096 or 8192 bytes long.\n\n* \"Interactive\" text files (files for which isatty() returns True)\n use line buffering. Other text files use the policy described above\n for binary files.\n\nencoding is the name of the encoding used to decode or encode the\nfile. This should only be used in text mode. The default encoding is\nplatform dependent, but any encoding supported by Python can be\npassed. See the codecs module for the list of supported encodings.\n\nerrors is an optional string that specifies how encoding errors are to\nbe handled---this argument should not be used in binary mode. Pass\n'strict' to raise a ValueError exception if there is an encoding error\n(the default of None has the same effect), or pass 'ignore' to ignore\nerrors. (Note that ignoring encoding errors can lead to data loss.)\nSee the documentation for codecs.register or run 'help(codecs.Codec)'\nfor a list of the permitted encoding error strings.\n\nnewline controls how universal newlines works (it only applies to text\nmode). It can be None, '', '\\n', '\\r', and '\\r\\n'. It works as\nfollows:\n\n* On input, if newline is None, universal newlines mode is\n enabled. Lines in the input can end in '\\n', '\\r', or '\\r\\n', and\n these are translated into '\\n' before being returned to the\n caller. If it is '', universal newline mode is enabled, but line\n endings are returned to the caller untranslated. If it has any of\n the other legal values, input lines are only terminated by the given\n string, and the line ending is returned to the caller untranslated.\n\n* On output, if newline is None, any '\\n' characters written are\n translated to the system default line separator, os.linesep. If\n newline is '' or '\\n', no translation takes place. If newline is any\n of the other legal values, any '\\n' characters written are translated\n to the given string.\n\nIf closefd is False, the underlying file descriptor will be kept open\nwhen the file is closed. This does not work when a file name is given\nand must be True in that case.\n\nA custom opener can be used by passing a callable as *opener*. The\nunderlying file descriptor for the file object is then obtained by\ncalling *opener* with (*file*, *flags*). *opener* must return an open\nfile descriptor (passing os.open as *opener* results in functionality\nsimilar to passing None).\n\nopen() returns a file object whose type depends on the mode, and\nthrough which the standard file operations such as reading and writing\nare performed. When open() is used to open a file in a text mode ('w',\n'r', 'wt', 'rt', etc.), it returns a TextIOWrapper. When used to open\na file in a binary mode, the returned class varies: in read binary\nmode, it returns a BufferedReader; in write binary and append binary\nmodes, it returns a BufferedWriter, and in read/write mode, it returns\na BufferedRandom.\n\nIt is also possible to use a string or bytearray as a file for both\nreading and writing. For strings StringIO can be used like a file\nopened in a text mode, and for bytes a BytesIO can be used like a file\nopened in a binary mode.\n",ord:"ord(c) -> integer\n\nReturn the integer ordinal of a one-character string.",pow:"pow(x, y[, z]) -> number\n\nWith two arguments, equivalent to x**y. With three arguments,\nequivalent to (x**y) % z, but may be more efficient (e.g. for ints).",print:"print(value, ..., sep=' ', end='\\n', file=sys.stdout, flush=False)\n\nPrints the values to a stream, or to sys.stdout by default.\nOptional keyword arguments:\nfile: a file-like object (stream); defaults to the current sys.stdout.\nsep: string inserted between values, default a space.\nend: string appended after the last value, default a newline.\nflush: whether to forcibly flush the stream.",property:"property(fget=None, fset=None, fdel=None, doc=None) -> property attribute\n\nfget is a function to be used for getting an attribute value, and likewise\nfset is a function for setting, and fdel a function for del'ing, an\nattribute. Typical use is to define a managed attribute x:\n\nclass C(object):\n def getx(self): return self._x\n def setx(self, value): self._x = value\n def delx(self): del self._x\n x = property(getx, setx, delx, \"I'm the 'x' property.\")\n\nDecorators make defining new properties or modifying existing ones easy:\n\nclass C(object):\n @property\n def x(self):\n \"I am the 'x' property.\"\n return self._x\n @x.setter\n def x(self, value):\n self._x = value\n @x.deleter\n def x(self):\n del self._x\n",quit:"",range:"range(stop) -> range object\nrange(start, stop[, step]) -> range object\n\nReturn a virtual sequence of numbers from start to stop by step.",repr:"repr(object) -> string\n\nReturn the canonical string representation of the object.\nFor most object types, eval(repr(object)) == object.",reversed:"reversed(sequence) -> reverse iterator over values of the sequence\n\nReturn a reverse iterator",round:"round(number[, ndigits]) -> number\n\nRound a number to a given precision in decimal digits (default 0 digits).\nThis returns an int when called with one argument, otherwise the\nsame type as the number. ndigits may be negative.",set:"set() -> new empty set object\nset(iterable) -> new set object\n\nBuild an unordered collection of unique elements.",setattr:"setattr(object, name, value)\n\nSet a named attribute on an object; setattr(x, 'y', v) is equivalent to\n``x.y = v''.",slice:"slice(stop)\nslice(start, stop[, step])\n\nCreate a slice object. This is used for extended slicing (e.g. a[0:10:2]).",sorted:"sorted(iterable, key=None, reverse=False) --> new sorted list",staticmethod:"staticmethod(function) -> method\n\nConvert a function to be a static method.\n\nA static method does not receive an implicit first argument.\nTo declare a static method, use this idiom:\n\n class C:\n def f(arg1, arg2, ...): ...\n f = staticmethod(f)\n\nIt can be called either on the class (e.g. C.f()) or on an instance\n(e.g. C().f()). The instance is ignored except for its class.\n\nStatic methods in Python are similar to those found in Java or C++.\nFor a more advanced concept, see the classmethod builtin.",str:"str(object='') -> str\nstr(bytes_or_buffer[, encoding[, errors]]) -> str\n\nCreate a new string object from the given object. If encoding or\nerrors is specified, then the object must expose a data buffer\nthat will be decoded using the given encoding and error handler.\nOtherwise, returns the result of object.__str__() (if defined)\nor repr(object).\nencoding defaults to sys.getdefaultencoding().\nerrors defaults to 'strict'.",sum:"sum(iterable[, start]) -> value\n\nReturn the sum of an iterable of numbers (NOT strings) plus the value\nof parameter 'start' (which defaults to 0). When the iterable is\nempty, return start.",super:"super() -> same as super(__class__, )\nsuper(type) -> unbound super object\nsuper(type, obj) -> bound super object; requires isinstance(obj, type)\nsuper(type, type2) -> bound super object; requires issubclass(type2, type)\nTypical use to call a cooperative superclass method:\nclass C(B):\n def meth(self, arg):\n super().meth(arg)\nThis works for class methods too:\nclass C(B):\n @classmethod\n def cmeth(cls, arg):\n super().cmeth(arg)\n",tuple:"tuple() -> empty tuple\ntuple(iterable) -> tuple initialized from iterable's items\n\nIf the argument is a tuple, the return value is the same object.",type:"type(object_or_name, bases, dict)\ntype(object) -> the object's type\ntype(name, bases, dict) -> a new type",vars:"vars([object]) -> dictionary\n\nWithout arguments, equivalent to locals().\nWith an argument, equivalent to object.__dict__.",zip:"zip(iter1 [,iter2 [...]]) --> zip object\n\nReturn a zip object whose .__next__() method returns a tuple where\nthe i-th element comes from the i-th iterable argument. The .__next__()\nmethod continues until the shortest iterable in the argument sequence\nis exhausted and then it raises StopIteration.",} -__BRYTHON__.builtins_doc=docs -; -;(function($B){var _b_=$B.builtins -function import_hooks(mod_name,_path,from_stdlib){var meta_path=$B.meta_path.slice(),_sys_modules=$B.imported,_loader,spec -if(from_stdlib){ -var path_ix=meta_path.indexOf($B.finders["path"]) -if(path_ix >-1){meta_path.splice(path_ix,1)}} -for(var i=0,len=meta_path.length;i < len;i++){var _finder=meta_path[i],find_spec=$B.$getattr(_finder,"find_spec",_b_.None) -if(find_spec==_b_.None){ -var find_module=$B.$getattr(_finder,"find_module",_b_.None) -if(find_module !==_b_.None){_loader=find_module(mod_name,_path) -if(_loader !==_b_.None){ -var load_module=$B.$getattr(_loader,"load_module"),module=$B.$call(load_module)(mod_name) -_sys_modules[mod_name]=module -return module}}}else{spec=find_spec(mod_name,_path) -if(!$B.is_none(spec)){module=$B.imported[spec.name] -if(module !==undefined){ -return _sys_modules[spec.name]=module} -_loader=_b_.getattr(spec,"loader",_b_.None) -break}}} -if(_loader===undefined){ -message=mod_name -if($B.protocol=="file"){message+=" (warning: cannot import local files with protocol 'file')"} -var exc=_b_.ModuleNotFoundError.$factory(message) -exc.name=mod_name -throw exc} -if($B.is_none(module)){if(spec===_b_.None){throw _b_.ModuleNotFoundError.$factory(mod_name)} -var _spec_name=_b_.getattr(spec,"name") -if(!$B.is_none(_loader)){var create_module=_b_.getattr(_loader,"create_module",_b_.None) -if(!$B.is_none(create_module)){module=$B.$call(create_module)(spec)}} -if(module===undefined){throw _b_.ImportError.$factory(mod_name)} -if($B.is_none(module)){ -module=$B.module.$factory(mod_name) -var mod_desc=_b_.getattr(spec,"origin") -if(_b_.getattr(spec,"has_location")){mod_desc="from '"+mod_desc+"'"}else{mod_desc="("+mod_desc+")"}}} -module.__name__=_spec_name -module.__loader__=_loader -module.__package__=_b_.getattr(spec,"parent","") -module.__spec__=spec -var locs=_b_.getattr(spec,"submodule_search_locations") -if(module.$is_package=!$B.is_none(locs)){module.__path__=locs} -if(_b_.getattr(spec,"has_location")){module.__file__=_b_.getattr(spec,"origin") -$B.$py_module_path[module.__name__]=module.__file__} -var cached=_b_.getattr(spec,"cached") -if(! $B.is_none(cached)){module.__cached__=cached} -if($B.is_none(_loader)){if(!$B.is_none(locs)){_sys_modules[_spec_name]=module}else{throw _b_.ImportError.$factory(mod_name)}}else{var exec_module=_b_.getattr(_loader,"exec_module",_b_.None) -if($B.is_none(exec_module)){ -module=_b_.getattr(_loader,"load_module")(_spec_name)}else{_sys_modules[_spec_name]=module -try{exec_module(module)}catch(e){delete _sys_modules[_spec_name] -throw e}}} -return _sys_modules[_spec_name]} -$B.import_hooks=import_hooks})(__BRYTHON__) -; -;(function($B){var _b_=$B.builtins -var coroutine=$B.coroutine=$B.make_class("coroutine") -coroutine.close=function(self){} -coroutine.send=function(self){return self.$func.apply(null,self.$args)} -coroutine.__repr__=coroutine.__str__=function(self){if(self.$func.$infos){return ""}else{return ""}} -$B.set_func_names(coroutine,"builtins") -$B.make_async=func=>{ -if(func.$is_genfunc){return func} -var f=function(){var args=arguments,stack=$B.deep_copy($B.frames_stack) -return{ -__class__:coroutine,$args:args,$func:func,$stack:stack}} -f.$infos=func.$infos -return f} -$B.promise=function(obj){if(obj.__class__===$B.JSObject){return obj.js}else if(obj.__class__===coroutine){return coroutine.send(obj)} -if(typeof obj=="function"){return obj()} -return obj}})(__BRYTHON__) -; diff --git a/modules/frontend/src/main/frontend/public/assets/js/brython_stdlib.js b/modules/frontend/src/main/frontend/public/assets/js/brython_stdlib.js deleted file mode 100644 index 47f2e2b..0000000 --- a/modules/frontend/src/main/frontend/public/assets/js/brython_stdlib.js +++ /dev/null @@ -1,3 +0,0 @@ -__BRYTHON__.use_VFS = true; -var scripts = {"$timestamp": 1598683276697, "array": [".js", "var $module = (function($B){\n\nvar _b_ = $B.builtins,\n $s = [],\n i\nfor(var $b in _b_){$s.push('var ' + $b +' = _b_[\"'+$b+'\"]')}\neval($s.join(';'))\n\nvar typecodes = {\n 'b': Int8Array, // signed char, 1 byte\n 'B': Uint8Array, // unsigned char, 1\n 'u': null, // Py_UNICODE Unicode character, 2 (deprecated)\n 'h': Int16Array, // signed short, 2\n 'H': Uint16Array, // unsigned short, 2\n 'i': Int16Array, // signed int, 2\n 'I': Uint16Array, // unsigned int, 2\n 'l': Int32Array, // signed long, 4\n 'L': Uint32Array, // unsigned long, 4\n 'q': null, // signed long, 8 (not implemented)\n 'Q': null, // unsigned long, 8 (not implemented)\n 'f': Float32Array, // float, 4\n 'd': Float64Array // double float, 8\n}\n\nvar array = $B.make_class(\"array\",\n function(){\n var missing = {},\n $ = $B.args(\"array\", 2, {typecode: null, initializer: null},\n [\"typecode\", \"initializer\"], arguments, {initializer: missing},\n null, null),\n typecode = $.typecode,\n initializer = $.initializer\n if(! typecodes.hasOwnProperty(typecode)){\n throw _b_.ValueError.$factory(\"bad typecode (must be b, \" +\n \"B, u, h, H, i, I, l, L, q, Q, f or d)\")\n }\n if(typecodes[typecode] === null){\n throw _b_.NotImplementedError.$factory(\"type code \" +\n typecode + \"is not implemented\")\n }\n var res = {\n __class__: array,\n typecode: typecode,\n obj: null\n }\n if(initializer !== missing){\n if(Array.isArray(initializer)){\n array.fromlist(res, initializer)\n }else if(_b_.isinstance(initializer, _b_.bytes)){\n array.frombytes(res, initializer)\n }else{\n array.extend(res, initializer)\n }\n }\n return res\n }\n)\n\narray.$buffer_protocol = true\n\narray.__getitem__ = function(self, key){\n if(self.obj && self.obj[key] !== undefined){\n return self.obj[key]\n }\n throw _b_.IndexError(\"array index out of range\")\n}\n\nvar array_iterator = $B.make_iterator_class(\"array_iterator\")\narray.__iter__ = function(self){\n return array_iterator.$factory(self.obj)\n}\n\narray.__len__ = function(self){\n return self.obj.length\n}\n\narray.__str__ = function(self){\n $B.args(\"__str__\", 1, {self: null},\n [\"self\"], arguments, {}, null, null)\n var res = \"array('\" + self.typecode + \"'\"\n if(self.obj !== null){\n res += \", [\" + self.obj + \"]\"\n }\n return res + \")\"\n}\n\nfunction normalize_index(self, i){\n // return an index i between 0 and self.obj.length - 1\n if(i < 0){\n i = self.obj.length + i\n }\n if(i < 0){i = 0}\n else if(i > self.obj.length - 1){\n i = self.obj.length\n }\n return i\n}\n\narray.append = function(self, value){\n $B.args(\"append\", 2, {self: null, value: null},\n [\"self\", \"value\"], arguments, {}, null, null)\n var pos = self.obj === null ? 0 : self.obj.length\n return array.insert(self, pos, value)\n}\n\narray.count = function(self, x){\n $B.args(\"count\", 2, {self: null, x: null},\n [\"self\", \"x\"], arguments, {}, null, null)\n if(self.obj === null){return 0}\n return self.obj.filter(function(item){return item == x}).length\n}\n\narray.extend = function(self, iterable){\n $B.args(\"extend\", 2, {self: null, iterable: null},\n [\"self\", \"iterable\"], arguments, {}, null, null)\n if(iterable.__class__ === array){\n if(iterable.typecode !== self.typecode){\n throw _b_.TypeError.$factory(\"can only extend with array \" +\n \"of same kind\")\n }\n if(iterable.obj === null){return _b_.None}\n // create new object with length = sum of lengths\n var newobj = new typecodes[self.typecode](self.obj.length +\n iterable.obj.length)\n // copy self.obj\n newobj.set(self.obj)\n // copy iterable.obj\n newobj.set(iterable.obj, self.obj.length)\n self.obj = newobj\n }else{\n var it = _b_.iter(iterable)\n while(true){\n try{\n var item = _b_.next(it)\n array.append(self, item)\n }catch(err){\n if(err.__class__ !== _b_.StopIteration){\n throw err\n }\n break\n }\n }\n }\n return _b_.None\n}\n\narray.frombytes = function(self, s){\n $B.args(\"frombytes\", 2, {self: null, s: null},\n [\"self\", \"s\"], arguments, {}, null, null)\n if(! _b_.isinstance(s, _b_.bytes)){\n throw _b_.TypeError.$factory(\"a bytes-like object is required, \" +\n \"not '\" + $B.class_name(s) + \"'\")\n }\n self.obj = new typecodes[self.typecode](s.source)\n return None\n}\n\narray.fromlist = function(self, list){\n $B.args(\"fromlist\", 2, {self: null, list: null},\n [\"self\", \"list\"], arguments, {}, null, null)\n var it = _b_.iter(list)\n while(true){\n try{\n var item = _b_.next(it)\n try{\n array.append(self, item)\n }catch(err){\n console.log(err)\n return _b_.None\n }\n }catch(err){\n if(err.__class__ === _b_.StopIteration){\n return _b_.None\n }\n throw err\n }\n }\n}\n\narray.fromstring = array.frombytes\n\narray.index = function(self, x){\n $B.args(\"index\", 2, {self: null, x: null},\n [\"self\", \"x\"], arguments, {}, null, null)\n var res = self.obj.findIndex(function(item){return x == item})\n if(res == -1){\n throw _b_.ValueError.$factory(\"array.index(x): x not in array\")\n }\n return res\n}\n\narray.insert = function(self, i, value){\n $B.args(\"insert\", 3, {self: null, i: null, value: null},\n [\"self\", \"i\", \"value\"], arguments, {}, null, null)\n if(self.obj === null){\n self.obj = [value]\n }else{\n self.obj.splice(i, 0, value)\n }\n return _b_.None\n}\n\narray.itemsize = function(self){\n return typecodes[self.typecode].BYTES_PER_ELEMENT\n}\n\narray.pop = function(self, i){\n var $ = $B.args(\"count\", 2, {self: null, i: null},\n [\"self\", \"i\"], arguments, {i: -1}, null, null)\n i = $.i\n if(self.obj === null){\n throw _b_.IndexError.$factory(\"pop from empty array\")\n }else if(self.obj.length == 1){\n var res = self.obj[0]\n self.obj = null\n return res\n }\n i = normalize_index(self, i)\n // store value to return\n var res = self.obj[i]\n // create new array, size = previous size - 1\n var newobj = new typecodes[self.typecode](self.obj.length - 1)\n // fill new array with values until i excluded\n newobj.set(self.obj.slice(0, i))\n // fill with values after i\n newobj.set(self.obj.slice(i + 1), i)\n // set self.obj to new array\n self.obj = newobj\n // return stored value\n return res\n}\n\narray.remove = function(self, x){\n $B.args(\"remove\", 2, {self: null, x: null},\n [\"self\", \"x\"], arguments, {}, null, null)\n var res = self.obj.findIndex(function(item){return x == item})\n if(res == -1){\n throw _b_.ValueError.$factory(\"array.remove(x): x not in array\")\n }\n array.pop(self, res)\n return _b_.None\n}\n\narray.reverse = function(self){\n $B.args(\"reverse\", 1, {self: null},\n [\"self\"], arguments, {}, null, null)\n if(self.obj === null){return _b_.None}\n self.obj.reverse()\n return _b_.None\n}\n\narray.tobytes = function(self){\n $B.args(\"tobytes\", 1, {self: null},\n [\"self\"], arguments, {}, null, null)\n var items = Array.prototype.slice.call(self.obj),\n res = []\n items.forEach(function(item){\n while(item > 256){\n res.push(item % 256)\n item = Math.floor(item / 256)\n }\n res.push(item)\n })\n return _b_.bytes.$factory(res)\n}\n\narray.tolist = function(self){\n $B.args(\"tolist\", 1, {self: null},\n [\"self\"], arguments, {}, null, null)\n return Array.prototype.slice.call(self.obj)\n}\n\narray.tostring = array.tobytes\n\narray.typecode = function(self){\n return self.typecode\n}\n\n$B.set_func_names(array, \"array\")\n\nreturn {\n array: array,\n typecodes: Object.keys(typecodes).join('')\n}\n\n})(__BRYTHON__)\n"], "builtins": [".js", "var $module = (function(){\n var obj = {\n __class__: __BRYTHON__.module,\n __name__: 'builtins'\n },\n builtin_names = ['ArithmeticError', 'AssertionError', 'AttributeError',\n 'BaseException', 'BlockingIOError', 'BrokenPipeError', 'BufferError',\n 'BytesWarning', 'ChildProcessError', 'ConnectionAbortedError',\n 'ConnectionError', 'ConnectionRefusedError', 'ConnectionResetError',\n 'DeprecationWarning', 'EOFError', 'Ellipsis', 'EnvironmentError', 'Exception',\n 'False', 'FileExistsError', 'FileNotFoundError', 'FloatingPointError',\n 'FutureWarning', 'GeneratorExit', 'IOError', 'ImportError', 'ImportWarning',\n 'IndentationError', 'IndexError', 'InterruptedError', 'IsADirectoryError',\n 'KeyError', 'KeyboardInterrupt', 'LookupError', 'MemoryError', 'NameError',\n 'None', 'NotADirectoryError', 'NotImplemented', 'NotImplementedError',\n 'OSError', 'OverflowError', 'PendingDeprecationWarning', 'PermissionError',\n 'ProcessLookupError', 'ReferenceError', 'ResourceWarning', 'RuntimeError',\n 'RuntimeWarning', 'StopIteration', 'SyntaxError', 'SyntaxWarning',\n 'SystemError', 'SystemExit', 'TabError', 'TimeoutError', 'True', 'TypeError',\n 'UnboundLocalError', 'UnicodeDecodeError', 'UnicodeEncodeError',\n 'UnicodeError', 'UnicodeTranslateError', 'UnicodeWarning', 'UserWarning',\n 'ValueError', 'Warning', 'WindowsError', 'ZeroDivisionError', '_',\n '__build_class__', '__debug__', '__doc__', '__import__', '__name__',\n '__package__', 'abs', 'all', 'any', 'ascii', 'bin', 'bool', 'bytearray',\n 'bytes','callable', 'chr', 'classmethod', 'compile', 'complex', 'copyright',\n 'credits','delattr', 'dict', 'dir', 'divmod', 'enumerate', 'eval', 'exec',\n 'exit', 'filter', 'float', 'format', 'frozenset', 'getattr', 'globals',\n 'hasattr', 'hash', 'help', 'hex', 'id', 'input', 'int', 'isinstance',\n 'issubclass', 'iter', 'len', 'license', 'list', 'locals', 'map', 'max',\n 'memoryview', 'min', 'next', 'object', 'oct', 'open', 'ord', 'pow', 'print',\n 'property', 'quit', 'range', 'repr', 'reversed', 'round', 'set', 'setattr',\n 'slice', 'sorted', 'staticmethod', 'str', 'sum', 'super', 'tuple', 'type',\n 'vars', 'zip',\n '__newobj__' // defined in py_objects.js ; required for pickle\n ]\n for(var i = 0, len = builtin_names.length; i < len; i++){\n try{eval(\"obj['\" + builtin_names[i] + \"'] = __BRYTHON__.builtins.\" +\n builtin_names[i])}\n catch(err){if (__BRYTHON__.$debug) {console.log(err)}}\n }\n return obj\n})()\n"], "dis": [".js", "var $module=(function($B){\n\nvar dict = $B.builtins.dict\nvar mod = {\n dis:function(src){\n $B.$py_module_path['__main__'] = $B.brython_path\n return __BRYTHON__.py2js(src,'__main__','__main__',\n $B.builtins_scope).to_js()\n },\n OPTIMIZED: 1,\n NEWLOCALS: 2,\n VARARGS: 4,\n VARKEYWORDS: 8,\n NESTED: 16,\n GENERATOR: 32,\n NOFREE: 64,\n COROUTINE: 128,\n ITERABLE_COROUTINE: 256,\n ASYNC_GENERATOR: 512,\n COMPILER_FLAG_NAMES: $B.builtins.dict.$factory()\n}\nmod.COMPILER_FLAG_NAMES = dict.$factory([\n [1, \"OPTIMIZED\"],\n [2, \"NEWLOCALS\"],\n [4, \"VARARGS\"],\n [8, \"VARKEYWORDS\"],\n [16, \"NESTED\"],\n [32, \"GENERATOR\"],\n [64, \"NOFREE\"],\n [128, \"COROUTINE\"],\n [256, \"ITERABLE_COROUTINE\"],\n [512, \"ASYNC_GENERATOR\"]\n])\n\nreturn mod\n\n})(__BRYTHON__)"], "hashlib": [".js", "var $module=(function($B){\n\nvar _b_ = $B.builtins\n\nvar $s = []\nfor(var $b in _b_){$s.push('var ' + $b +' = _b_[\"'+$b+'\"]')}\neval($s.join(';'))\n\nvar $mod = {\n\n __getattr__ : function(attr){\n if(attr == 'new'){return hash.$factory}\n return this[attr]\n },\n md5: function(obj){return hash.$factory('md5', obj)},\n sha1: function(obj){return hash.$factory('sha1', obj)},\n sha224: function(obj){return hash.$factory('sha224', obj)},\n sha256: function(obj){return hash.$factory('sha256', obj)},\n sha384: function(obj){return hash.$factory('sha384', obj)},\n sha512: function(obj){return hash.$factory('sha512', obj)},\n\n algorithms_guaranteed: ['md5', 'sha1', 'sha224', 'sha256', 'sha384', 'sha512'],\n algorithms_available: ['md5', 'sha1', 'sha224', 'sha256', 'sha384', 'sha512']\n}\n\n//todo: eventually move this function to a \"utility\" file or use ajax module?\nfunction $get_CryptoJS_lib(alg){\n if($B.VFS !== undefined && $B.VFS.hashlib){\n // use file in brython_stdlib.js\n var lib = $B.VFS[\"crypto_js.rollups.\" + alg]\n if (lib === undefined){\n throw _b_.ImportError.$factory(\"can't import hashlib.\" + alg)\n }\n var res = lib[1]\n try{\n eval(res + \"; $B.CryptoJS = CryptoJS;\")\n return\n }catch(err){\n throw Error(\"JS Eval Error\",\n \"Cannot eval CryptoJS algorithm '\" + alg + \"' : error:\" + err)\n }\n }\n\n var module = {__name__: 'CryptoJS', $is_package: false}\n var res = $B.$download_module(module, $B.brython_path + 'libs/crypto_js/rollups/' + alg + '.js');\n\n try{\n eval(res + \"; $B.CryptoJS = CryptoJS;\")\n }catch(err){\n throw Error(\"JS Eval Error\",\n \"Cannot eval CryptoJS algorithm '\" + alg + \"' : error:\" + err)\n }\n}\n\nfunction bytes2WordArray(obj){\n // Transform a bytes object into an instance of class WordArray\n // defined in CryptoJS\n if(!_b_.isinstance(obj, _b_.bytes)){\n throw _b_.TypeError(\"expected bytes, got \" + $B.class_name(obj))\n }\n\n var words = []\n for(var i = 0; i < obj.source.length; i += 4){\n var word = obj.source.slice(i, i + 4)\n while(word.length < 4){word.push(0)}\n var w = word[3] + (word[2] << 8) + (word[1] << 16) + (word[0] << 24)\n words.push(w)\n }\n return {words: words, sigBytes: obj.source.length}\n}\n\nvar hash = {\n __class__: _b_.type,\n __mro__: [_b_.object],\n $infos:{\n __name__: 'hash'\n }\n}\n\nhash.update = function(self, msg){\n self.hash.update(bytes2WordArray(msg))\n}\n\nhash.copy = function(self){\n return self.hash.clone()\n}\n\nhash.digest = function(self){\n var obj = self.hash.clone().finalize().toString(),\n res = []\n for(var i = 0; i < obj.length; i += 2){\n res.push(parseInt(obj.substr(i, 2), 16))\n }\n return _b_.bytes.$factory(res)\n}\n\nhash.hexdigest = function(self) {\n return self.hash.clone().finalize().toString()\n}\n\nhash.$factory = function(alg, obj) {\n var res = {\n __class__: hash\n }\n\n switch(alg) {\n case 'md5':\n case 'sha1':\n case 'sha224':\n case 'sha256':\n case 'sha384':\n case 'sha512':\n var ALG = alg.toUpperCase()\n if($B.Crypto === undefined ||\n $B.CryptoJS.algo[ALG] === undefined){$get_CryptoJS_lib(alg)}\n\n res.hash = $B.CryptoJS.algo[ALG].create()\n if(obj !== undefined){\n res.hash.update(bytes2WordArray(obj))\n }\n break\n default:\n throw $B.builtins.AttributeError.$factory('Invalid hash algorithm: ' + alg)\n }\n\n return res\n}\n\nreturn $mod\n\n})(__BRYTHON__)\n"], "long_int": [".js", "/*\nModule to manipulate long integers\n*/\n\nvar $module=(function($B){\n\neval($B.InjectBuiltins())\n\nvar $LongIntDict = {__class__:$B.$type,__name__:'LongInt'}\n\nfunction add_pos(v1, v2){\n // Add two positive numbers\n // v1, v2 : strings\n // Return an instance of LongInt\n\n var res = '', carry = 0, iself=v1.length, sv=0\n for(var i=v2.length-1;i>=0;i--){\n iself--\n if(iself<0){sv=0}else{sv=parseInt(v1.charAt(iself))}\n x = (carry+sv+parseInt(v2.charAt(i))).toString()\n if(x.length==2){res=x.charAt(1)+res;carry=parseInt(x.charAt(0))}\n else{res=x+res;carry=0}\n }\n while(iself>0){\n iself--\n x = (carry+parseInt(v1.charAt(iself))).toString()\n if(x.length==2){res=x.charAt(1)+res;carry=parseInt(x.charAt(0))}\n else{res=x+res;carry=0}\n }\n if(carry){res=carry+res} \n return {__class__:$LongIntDict, value:res, pos:true}\n}\n\nfunction check_shift(shift){\n // Check the argument of >> and <<\n if(!isinstance(shift, LongInt)){\n throw TypeError(\"shift must be LongInt, not '\"+\n $B.get_class(shift).__name__+\"'\")\n }\n if(!shift.pos){throw ValueError(\"negative shift count\")}\n}\n\nfunction clone(obj){\n // Used for traces\n var obj1 = {}\n for(var attr in obj){obj1[attr]=obj[attr]}\n return obj1\n}\n\nfunction comp_pos(v1, v2){\n // Compare two positive numbers\n if(v1.length>v2.length){return 1}\n else if(v1.lengthv2){return 1}\n else if(v11){\n // If the value in cols[i] has more than one digit, only keep the\n // last one and report the others at the right index\n // For instance if cols[i] = 123, keep 3 in cols[i], add 2 to\n // cols[i-1] and 1 to cols[i-2]\n cols[i] = parseInt(col.charAt(col.length-1))\n j = col.length\n while(j-->1){\n var report = parseInt(col.charAt(j-1))\n var pos = i-col.length+j\n if(cols[pos]===undefined){cols[pos]=report}\n else{cols[pos] += report}\n }\n }\n }\n\n // Find minimum index in cols\n // The previous loop may have introduced negative indices\n var imin\n for(var attr in cols){\n i = parseInt(attr)\n if(imin===undefined){imin=i}\n else if(i=v2\n\n var res = '', carry = 0, i1=v1.length, sv=0\n \n // For all digits in v2, starting by the rightmost, substract it from\n // the matching digit in v1\n // This is the equivalent of the manual operation :\n // 12345678\n // - 98765\n //\n // We begin by the rightmost operation : 8-5 (3, no carry),\n // then 7-6 (1, no carry)\n // then 6-7 (9, carry 1) and so on\n for(var i=v2.length-1;i>=0;i--){\n i1--\n sv = parseInt(v1.charAt(i1))\n x = (sv-carry-parseInt(v2.charAt(i)))\n if(x<0){res=(10+x)+res;carry=1}\n else{res=x+res;carry=0}\n }\n \n // If there are remaining digits in v1, substract the carry, if any\n while(i1>0){\n i1--\n x = (parseInt(v1.charAt(i1))-carry)\n if(x<0){res=(10+x)+res;carry=1}\n else{res=x+res;carry=0}\n }\n\n // Remove leading zeros and return the result\n while(res.charAt(0)=='0' && res.length>1){res=res.substr(1)}\n return {__class__:$LongIntDict, value:res, pos:true}\n}\n\n// Special methods to implement operations on instances of LongInt\n\n$LongIntDict.__abs__ = function(self){\n return {__class__:$LongIntDict, value: self.value, pos:true}\n}\n\n$LongIntDict.__add__ = function(self, other){\n if (typeof other == 'number') other=LongInt(_b_.str.$factory(other))\n // Addition of \"self\" and \"other\"\n // If both have the same sign (+ or -) we add their absolute values\n // If they have different sign we use the substraction of their\n // absolute values\n var res\n if(self.pos&&other.pos){ // self > 0, other > 0\n return add_pos(self.value, other.value)\n }else if(!self.pos&&!other.pos){ // self < 0, other < 0\n res = add_pos(self.value, other.value)\n res.pos = false\n return res\n }else if(self.pos && !other.pos){ // self > 0, other < 0\n switch (comp_pos(self.value, other.value)){\n case 1:\n res = sub_pos(self.value, other.value)\n break\n case 0:\n res = {__class__:$LongIntDict, value:0, pos:true}\n break\n case -1:\n res = sub_pos(other.value, self.value)\n res.pos = false\n break\n }\n return res\n }else{ // self < 0, other > 0\n switch(comp_pos(self.value, other.value)){\n case 1:\n res = sub_pos(self.value, other.value)\n res.pos = false\n break\n case 0:\n res = {__class__:$LongIntDict, value:0, pos:true}\n break\n case -1:\n res = sub_pos(other.value, self.value)\n break\n }\n return res\n }\n}\n\n$LongIntDict.__and__ = function(self, other){\n if (typeof other == 'number') other=LongInt(_b_.str.$factory(other))\n // Bitwise \"and\" : build the binary representation of self and other\n var v1 = $LongIntDict.__index__(self)\n var v2 = $LongIntDict.__index__(other)\n // apply \"and\" on zeros and ones\n if(v1.lengthother.value.length){return true}\n else if(self.value.length= other.value}\n}\n\n$LongIntDict.__gt__ = function(self, other){\n return !$LongIntDict.__le__(self, other)\n}\n\n$LongIntDict.__index__ = function(self){\n // Used by bin()\n // returns a string with the binary value of self\n // The algorithm computes the result of the floor division of self by 2\n \n // XXX to do : negative integers\n \n var res = '', pos=self.value.length,\n temp = self.value, d\n while(true){\n d = divmod_pos(temp, '2')\n res = d[1].value + res\n temp = d[0].value\n if(temp=='0'){break}\n }\n return res\n}\n\n$LongIntDict.__invert__ = function(self){\n var bin = $LongIntDict.__index__(self)\n var res = ''\n for(var i=0;iother.value.length){return false}\n else if(self.value.length=0;i--){\n x = (carry+parseInt(res.charAt(i))*2).toString()\n if(x.length==2){res1=x.charAt(1)+res1;carry=parseInt(x.charAt(0))}\n else{res1=x+res1;carry=0}\n }\n if(carry){res1=carry+res1}\n res=res1\n shift = sub_pos(shift.value, '1')\n if(shift.value=='0'){break}\n }\n return {__class__:$LongIntDict, value:res, pos:self.pos}\n}\n\n$LongIntDict.__mod__ = function(self, other){\n return $LongIntDict.__divmod__(self, other)[1]\n}\n\n$LongIntDict.__mro__ = [_b_.object]\n\n$LongIntDict.__mul__ = function(self, other){\n if (typeof other == 'number') other=LongInt(_b_.str.$factory(other))\n var res = mul_pos(self.value, other.value)\n if(self.pos==other.pos){return res}\n res.pos = false\n return res\n}\n\n$LongIntDict.__neg__ = function(obj){\n return {__class__:$LongIntDict, value:obj.value, pos:!obj.pos}\n}\n\n$LongIntDict.__or__ = function(self, other){\n var v1 = $LongIntDict.__index__(self)\n var v2 = $LongIntDict.__index__(other)\n if(v1.length0){\n var dm = divmod_pos(v, base.toString())\n res = parseInt(dm[1].value).toString(base)+res\n v = dm[0].value\n if(v==0){break}\n }\n return res\n}\n\nfunction digits(base){\n // Return an object where keys are all the digits valid in specified base\n // and value is \"true\"\n // Used to test if the string passed as first argument to LongInt is valid\n var is_digits = {}\n // Number from 0 to base, or from 0 to 9 if base > 10\n for(var i=0;i10){\n // Additional letters\n // For instance in base 16, add \"abcdefABCDEF\" as keys\n for(var i=0;i2){\n throw _b_.TypeError(\"LongInt takes at most 2 arguments (\"+\n arguments.length+\" given)\")\n }\n // base defaults to 10\n if(base===undefined){base = 10}\n else if(!isinstance(base, int)){\n throw TypeError(\"'\"+$B.get_class(base).__name__+\"' object cannot be interpreted as an integer\")\n }\n if(base<0 || base==1 || base>36){\n throw ValueError(\"LongInt() base must be >= 2 and <= 36\")\n }\n if(isinstance(value, float)){\n if(value>=0){value=Math.round(value.value)}\n else{value=Math.ceil(value.value)}\n }\n if(typeof value=='number'){\n if(isSafeInteger(value)){value = value.toString()}\n else{throw ValueError(\"argument of long_int is not a safe integer\")}\n }else if(typeof value!='string'){\n throw ValueError(\"argument of long_int must be a string, not \"+\n $B.get_class(value).__name__)\n }\n var has_prefix = false, pos = true, start = 0\n // Strip leading and trailing whitespaces\n while(value.charAt(0)==' ' && value.length){value = value.substr(1)}\n while(value.charAt(value.length-1)==' ' && value.length){\n value = value.substr(0, value.length-1)\n }\n // Check if string starts with + or -\n if(value.charAt(0)=='+'){has_prefix=true}\n else if(value.charAt(0)=='-'){has_prefix=true;pos=false}\n if(has_prefix){\n // Remove prefix\n if(value.length==1){\n // \"+\" or \"-\" alone are not valid arguments\n throw ValueError('LongInt argument is not a valid number: \"'+value+'\"')\n }else{value=value.substr(1)}\n }\n // Ignore leading zeros\n while(start Math.pow(2, 32)}\n\n// Big number Library from jsfromhell.com\n// This library helps with producing \"correct\" results from\n// mathematic operations\n\n//+ Jonas Raoni Soares Silva\n//@ http://jsfromhell.com/classes/bignumber [rev. #4]\n\n\nvar BigNumber = function(n, p, r){\n var o = this, i\n if(n instanceof BigNumber){\n for(i in {precision: 0, roundType: 0, _s: 0, _f: 0}){o[i] = n[i]}\n o._d = n._d.slice()\n return\n }\n o.precision = isNaN(p = Math.abs(p)) ? BigNumber.defaultPrecision : p\n o.roundType = isNaN(r = Math.abs(r)) ? BigNumber.defaultRoundType : r\n o._s = (n += \"\").charAt(0) == \"-\"\n o._f = ((n = n.replace(/[^\\d.]/g, \"\").split(\".\", 2))[0] =\n n[0].replace(/^0+/, \"\") || \"0\").length\n for(i = (n = o._d = (n.join(\"\") || \"0\").split(\"\")).length; i;\n n[--i] = +n[i]){}\n o.round()\n}\nwith({$: BigNumber, o: BigNumber.prototype}){\n $.ROUND_HALF_EVEN = ($.ROUND_HALF_DOWN = ($.ROUND_HALF_UP =\n ($.ROUND_FLOOR = ($.ROUND_CEIL = ($.ROUND_DOWN = ($.ROUND_UP = 0) + 1) +\n 1) + 1) + 1) + 1) + 1\n $.defaultPrecision = 40\n $.defaultRoundType = $.ROUND_HALF_UP\n o.add = function(n){\n if(this._s != (n = new BigNumber(n))._s){\n return n._s ^= 1, this.subtract(n)\n }\n var o = new BigNumber(this),\n a = o._d,\n b = n._d,\n la = o._f,\n lb = n._f,\n n = Math.max(la, lb),\n i,\n r\n la != lb && ((lb = la - lb) > 0 ? o._zeroes(b, lb, 1) :\n o._zeroes(a, -lb, 1))\n i = (la = a.length) == (lb = b.length) ? a.length :\n ((lb = la - lb) > 0 ? o._zeroes(b, lb) : o._zeroes(a, -lb)).length\n for(r = 0; i; r = (a[--i] = a[i] + b[i] + r) / 10 >>> 0, a[i] %= 10){}\n return r && ++n && a.unshift(r), o._f = n, o.round()\n };\n o.subtract = function(n){\n if(this._s != (n = new BigNumber(n))._s)\n return n._s ^= 1, this.add(n);\n var o = new BigNumber(this),\n c = o.abs().compare(n.abs()) + 1,\n a = c ? o : n,\n b = c ? n : o,\n la = a._f,\n lb = b._f,\n d = la,\n i,\n j;\n a = a._d, b = b._d, la != lb && ((lb = la - lb) > 0 ? o._zeroes(b, lb, 1) : o._zeroes(a, -lb, 1));\n for(i = (la = a.length) == (lb = b.length) ? a.length : ((lb = la - lb) > 0 ? o._zeroes(b, lb) : o._zeroes(a, -lb)).length; i;){\n if(a[--i] < b[i]){\n for(j = i; j && !a[--j]; a[j] = 9);\n --a[j], a[i] += 10;\n }\n b[i] = a[i] - b[i];\n }\n return c || (o._s ^= 1), o._f = d, o._d = b, o.round();\n };\n o.multiply = function(n){\n var o = new BigNumber(this), r = o._d.length >= (n = new BigNumber(n))._d.length, a = (r ? o : n)._d,\n b = (r ? n : o)._d, la = a.length, lb = b.length, x = new BigNumber, i, j, s;\n for(i = lb; i; r && s.unshift(r), x.set(x.add(new BigNumber(s.join(\"\")))))\n for(s = (new Array(lb - --i)).join(\"0\").split(\"\"), r = 0, j = la; j; r += a[--j] * b[i], s.unshift(r % 10), r = (r / 10) >>> 0);\n return o._s = o._s != n._s, o._f = ((r = la + lb - o._f - n._f) >= (j = (o._d = x._d).length) ? this._zeroes(o._d, r - j + 1, 1).length : j) - r, o.round();\n };\n o.divide = function(n){\n if((n = new BigNumber(n)) == \"0\")\n throw new Error(\"Division by 0\");\n else if(this == \"0\")\n return new BigNumber;\n var o = new BigNumber(this), a = o._d, b = n._d, la = a.length - o._f,\n lb = b.length - n._f, r = new BigNumber, i = 0, j, s, l, f = 1, c = 0, e = 0;\n r._s = o._s != n._s, r.precision = Math.max(o.precision, n.precision),\n r._f = +r._d.pop(), la != lb && o._zeroes(la > lb ? b : a, Math.abs(la - lb));\n n._f = b.length, b = n, b._s = false, b = b.round();\n for(n = new BigNumber; a[0] == \"0\"; a.shift());\n out:\n do{\n for(l = c = 0, n == \"0\" && (n._d = [], n._f = 0); i < a.length && n.compare(b) == -1; ++i){\n (l = i + 1 == a.length, (!f && ++c > 1 || (e = l && n == \"0\" && a[i] == \"0\")))\n && (r._f == r._d.length && ++r._f, r._d.push(0));\n (a[i] == \"0\" && n == \"0\") || (n._d.push(a[i]), ++n._f);\n if(e)\n break out;\n if((l && n.compare(b) == -1 && (r._f == r._d.length && ++r._f, 1)) || (l = 0))\n while(r._d.push(0), n._d.push(0), ++n._f, n.compare(b) == -1);\n }\n if(f = 0, n.compare(b) == -1 && !(l = 0))\n while(l ? r._d.push(0) : l = 1, n._d.push(0), ++n._f, n.compare(b) == -1);\n for(s = new BigNumber, j = 0; n.compare(y = s.add(b)) + 1 && ++j; s.set(y));\n n.set(n.subtract(s)), !l && r._f == r._d.length && ++r._f, r._d.push(j);\n }\n while((i < a.length || n != \"0\") && (r._d.length - r._f) <= r.precision);\n return r.round();\n };\n o.mod = function(n){\n return this.subtract(this.divide(n).intPart().multiply(n));\n };\n o.pow = function(n){\n var o = new BigNumber(this), i;\n if((n = (new BigNumber(n)).intPart()) == 0) return o.set(1);\n for(i = Math.abs(n); --i; o.set(o.multiply(this)));\n return n < 0 ? o.set((new BigNumber(1)).divide(o)) : o;\n };\n o.set = function(n){\n return this.constructor(n), this;\n };\n o.compare = function(n){\n var a = this, la = this._f, b = new BigNumber(n), lb = b._f, r = [-1, 1], i, l;\n if(a._s != b._s)\n return a._s ? -1 : 1;\n if(la != lb)\n return r[(la > lb) ^ a._s];\n for(la = (a = a._d).length, lb = (b = b._d).length, i = -1, l = Math.min(la, lb); ++i < l;)\n if(a[i] != b[i])\n return r[(a[i] > b[i]) ^ a._s];\n return la != lb ? r[(la > lb) ^ a._s] : 0;\n };\n o.negate = function(){\n var n = new BigNumber(this); return n._s ^= 1, n;\n };\n o.abs = function(){\n var n = new BigNumber(this); return n._s = 0, n;\n };\n o.intPart = function(){\n return new BigNumber((this._s ? \"-\" : \"\") + (this._d.slice(0, this._f).join(\"\") || \"0\"));\n };\n o.valueOf = o.toString = function(){\n var o = this;\n return (o._s ? \"-\" : \"\") + (o._d.slice(0, o._f).join(\"\") || \"0\") + (o._f != o._d.length ? \".\" + o._d.slice(o._f).join(\"\") : \"\");\n };\n o._zeroes = function(n, l, t){\n var s = [\"push\", \"unshift\"][t || 0];\n for(++l; --l; n[s](0));\n return n;\n };\n o.round = function(){\n if(\"_rounding\" in this) return this;\n var $ = BigNumber, r = this.roundType, b = this._d, d, p, n, x;\n for(this._rounding = true; this._f > 1 && !b[0]; --this._f, b.shift());\n for(d = this._f, p = this.precision + d, n = b[p]; b.length > d && !b[b.length -1]; b.pop());\n x = (this._s ? \"-\" : \"\") + (p - d ? \"0.\" + this._zeroes([], p - d - 1).join(\"\") : \"\") + 1;\n if(b.length > p){\n n && (r == $.DOWN ? false : r == $.UP ? true : r == $.CEIL ? !this._s\n : r == $.FLOOR ? this._s : r == $.HALF_UP ? n >= 5 : r == $.HALF_DOWN ? n > 5\n : r == $.HALF_EVEN ? n >= 5 && b[p - 1] & 1 : false) && this.add(x);\n b.splice(p, b.length - p);\n }\n return delete this._rounding, this;\n };\n}\n\nvar isNegZero = function(x) {return x === 0 && Math.atan2(x,x) < 0}\n\nvar _mod = {\n __getattr__: function(attr){\n $B.check_nb_args('__getattr__ ', 1, arguments)\n $B.check_no_kw('__getattr__ ', attr)\n\n var res = this[attr]\n if(res === undefined){\n throw _b_.AttributeError.$factory(\n 'module math has no attribute ' + attr)\n }\n return res\n },\n acos: function(x){\n $B.check_nb_args('acos', 1, arguments)\n $B.check_no_kw('acos', x)\n return float.$factory(Math.acos(float_check(x)))\n },\n acosh: function(x){\n $B.check_nb_args('acosh', 1, arguments)\n $B.check_no_kw('acosh', x)\n\n if(_b_.$isinf(x)){return float.$factory('inf')}\n var y = float_check(x)\n return float.$factory(Math.log(y + Math.sqrt(y * y - 1)))\n },\n asin: function(x){\n $B.check_nb_args('asin', 1, arguments)\n $B.check_no_kw('asin', x)\n return float.$factory(Math.asin(float_check(x)))\n },\n asinh: function(x){\n $B.check_nb_args('asinh', 1, arguments)\n $B.check_no_kw('asinh', x)\n\n if(_b_.$isninf(x)){return float.$factory('-inf')}\n if(_b_.$isinf(x)){return float.$factory('inf')}\n var y = float_check(x)\n return float.$factory(Math.log(y + Math.sqrt(y * y + 1)))\n },\n atan: function(x){\n $B.check_nb_args('atan', 1, arguments)\n $B.check_no_kw('atan', x)\n\n if(_b_.$isninf(x)){return float.$factory(-Math.PI / 2)}\n if(_b_.$isinf(x)){return float.$factory(Math.PI / 2)}\n return float.$factory(Math.atan(float_check(x)))\n },\n atan2: function(y, x){\n $B.check_nb_args('atan2', 2, arguments)\n $B.check_no_kw('atan2', y, x)\n\n return float.$factory(Math.atan2(float_check(y), float_check(x)))\n },\n atanh: function(x){\n $B.check_nb_args('atanh', 1, arguments)\n $B.check_no_kw('atanh', x)\n\n var y = float_check(x)\n if(y == 0){return 0}\n return float.$factory(0.5 * Math.log((1 / y + 1)/(1 / y - 1)));\n },\n ceil: function(x){\n $B.check_nb_args('ceil', 1, arguments)\n $B.check_no_kw('ceil', x)\n\n try{return getattr(x, '__ceil__')()}catch(err){}\n\n if(_b_.$isninf(x)){return float.$factory('-inf')}\n if(_b_.$isinf(x)){return float.$factory('inf')}\n if(isNaN(x)){return float.$factory('nan')}\n\n var y = float_check(x)\n if(! isNaN(parseFloat(y)) && isFinite(y)){\n return int.$factory(Math.ceil(y))\n }\n\n throw _b_.ValueError.$factory(\n 'object is not a number and does not contain __ceil__')\n },\n comb: function(n, k){\n $B.check_nb_args('comb', 2, arguments)\n $B.check_no_kw('comb', n, k)\n\n // raise TypeError if n or k is not an integer\n check_int(n)\n check_int(k)\n\n if(k < 0){\n throw _b_.ValueError.$factory(\"k must be a non-negative integer\")\n }\n if(n < 0){\n throw _b_.ValueError.$factory(\"n must be a non-negative integer\")\n }\n\n if(k > n){\n return 0\n }\n // Evaluates to n! / (k! * (n - k)!)\n var fn = _mod.factorial(n),\n fk = _mod.factorial(k),\n fn_k = _mod.factorial(n - k)\n return $B.floordiv(fn, $B.mul(fk, fn_k))\n },\n copysign: function(x, y){\n $B.check_nb_args('copysign', 2, arguments)\n $B.check_no_kw('copysign', x,y)\n\n var x1 = Math.abs(float_check(x))\n var y1 = float_check(y)\n var sign = Math.sign(y1)\n sign = (sign == 1 || Object.is(sign, +0)) ? 1 : - 1\n return float.$factory(x1 * sign)\n },\n cos : function(x){\n $B.check_nb_args('cos ', 1, arguments)\n $B.check_no_kw('cos ', x)\n return float.$factory(Math.cos(float_check(x)))\n },\n cosh: function(x){\n $B.check_nb_args('cosh', 1, arguments)\n $B.check_no_kw('cosh', x)\n\n if(_b_.$isinf(x)) {return float.$factory('inf')}\n var y = float_check(x)\n if(Math.cosh !== undefined){return float.$factory(Math.cosh(y))}\n return float.$factory((Math.pow(Math.E, y) +\n Math.pow(Math.E, -y)) / 2)\n },\n degrees: function(x){\n $B.check_nb_args('degrees', 1, arguments)\n $B.check_no_kw('degrees', x)\n return float.$factory(float_check(x) * 180 / Math.PI)\n },\n dist: function(p, q){\n $B.check_nb_args('dist', 2, arguments)\n $B.check_no_kw('dist', p, q)\n var itp = _b_.iter(p),\n itq = _b_.iter(q),\n res = 0\n while(true){\n try{\n var next_p = _b_.next(itp)\n }catch(err){\n if(err.__class__ === _b_.StopIteration){\n // check that the other iterator is also exhausted\n try{\n var next_q = _b_.next(itq)\n throw _b_.ValueError.$factory(\"both points must have \" +\n \"the same number of dimensions\")\n }catch(err){\n if(err.__class__ === _b_.StopIteration){\n if(typeof res == \"number\" || res instanceof Number){\n return Math.sqrt(res)\n }else{\n return Math.sqrt(parseInt(res.value))\n }\n }\n throw err\n }\n }\n throw err\n }\n try{\n var next_q = _b_.next(itq),\n diff = $B.sub(next_p, next_q)\n res = $B.add(res, $B.mul(diff, diff))\n }catch(err){\n if(err.__class__ === _b_.StopIteration){\n throw _b_.ValueError.$factory(\"both points must have \" +\n \"the same number of dimensions\")\n }\n throw err\n }\n }\n },\n e: float.$factory(Math.E),\n erf: function(x){\n $B.check_nb_args('erf', 1, arguments)\n $B.check_no_kw('erf', x)\n\n // inspired from\n // http://stackoverflow.com/questions/457408/is-there-an-easily-available-implementation-of-erf-for-python\n var y = float_check(x)\n var t = 1.0 / (1.0 + 0.5 * Math.abs(y))\n var ans = 1 - t * Math.exp( -y * y - 1.26551223 +\n t * ( 1.00002368 +\n t * ( 0.37409196 +\n t * ( 0.09678418 +\n t * (-0.18628806 +\n t * ( 0.27886807 +\n t * (-1.13520398 +\n t * ( 1.48851587 +\n t * (-0.82215223 +\n t * 0.17087277)))))))))\n if(y >= 0.0){return ans}\n return -ans\n },\n erfc: function(x){\n\n $B.check_nb_args('erfc', 1, arguments)\n $B.check_no_kw('erfc', x)\n\n // inspired from\n // http://stackoverflow.com/questions/457408/is-there-an-easily-available-implementation-of-erf-for-python\n var y = float_check(x)\n var t = 1.0 / (1.0 + 0.5 * Math.abs(y))\n var ans = 1 - t * Math.exp( -y * y - 1.26551223 +\n t * ( 1.00002368 +\n t * ( 0.37409196 +\n t * ( 0.09678418 +\n t * (-0.18628806 +\n t * ( 0.27886807 +\n t * (-1.13520398 +\n t * ( 1.48851587 +\n t * (-0.82215223 +\n t * 0.17087277)))))))))\n if(y >= 0.0){return 1 - ans}\n return 1 + ans\n },\n exp: function(x){\n $B.check_nb_args('exp', 1, arguments)\n $B.check_no_kw('exp', x)\n\n if(_b_.$isninf(x)){return float.$factory(0)}\n if(_b_.$isinf(x)){return float.$factory('inf')}\n var _r = Math.exp(float_check(x))\n if(_b_.$isinf(_r)){throw OverflowError(\"math range error\")}\n return float.$factory(_r)\n },\n expm1: function(x){\n $B.check_nb_args('expm1', 1, arguments)\n $B.check_no_kw('expm1', x)\n\n if(_b_.$isninf(x)){return float.$factory(0)}\n if(_b_.$isinf(x)){return float.$factory('inf')}\n var _r = Math.expm1(float_check(x))\n if(_b_.$isinf(_r)){throw OverflowError(\"math range error\")}\n return float.$factory(_r)\n },\n //fabs: function(x){ return x>0?float.$factory(x):float.$factory(-x)},\n fabs: function(x){\n $B.check_nb_args('fabs', 1, arguments)\n $B.check_no_kw('fabs', x)\n return _b_.$fabs(x) // located in py_float.js\n },\n factorial: function(x){\n $B.check_nb_args('factorial', 1, arguments)\n $B.check_no_kw('factorial', x)\n\n //using code from http://stackoverflow.com/questions/3959211/fast-factorial-function-in-javascript\n if(! check_int_or_round_float(x)){\n throw _b_.ValueError.$factory(\"factorial() only accepts integral values\")\n }else if($B.rich_comp(\"__lt__\", x, 0)){\n throw _b_.ValueError.$factory(\"factorial() not defined for negative values\")\n }\n var r = 1\n for(var i = 2; i <= x; i++){\n r = $B.mul(r, i)\n }\n return r\n },\n floor: function(x){\n $B.check_nb_args('floor', 1, arguments)\n $B.check_no_kw('floor', x)\n return Math.floor(float_check(x))\n },\n fmod: function(x,y){\n $B.check_nb_args('fmod', 2, arguments)\n $B.check_no_kw('fmod', x,y)\n return float.$factory(float_check(x) % float_check(y))\n },\n frexp: function(x){\n $B.check_nb_args('frexp', 1, arguments)\n $B.check_no_kw('frexp', x)\n\n var _l = _b_.$frexp(x)\n return _b_.tuple.$factory([float.$factory(_l[0]), _l[1]])\n },\n fsum: function(x){\n $B.check_nb_args('fsum', 1, arguments)\n $B.check_no_kw('fsum', x)\n\n /* Translation into Javascript of the function msum in an Active\n State Cookbook recipe : https://code.activestate.com/recipes/393090/\n by Raymond Hettinger\n */\n var partials = [],\n res = new Number(),\n _it = _b_.iter(x)\n while(true){\n try{\n var x = _b_.next(_it),\n i = 0\n for(var j = 0, len = partials.length; j < len; j++){\n var y = partials[j]\n if(Math.abs(x) < Math.abs(y)){\n var z = x\n x = y\n y = z\n }\n var hi = x + y,\n lo = y - (hi - x)\n if(lo){\n partials[i] = lo\n i++\n }\n x = hi\n }\n partials = partials.slice(0, i).concat([x])\n }catch(err){\n if(_b_.isinstance(err, _b_.StopIteration)){break}\n throw err\n }\n }\n var res = new Number(0)\n for(var i = 0; i < partials.length; i++){\n res += new Number(partials[i])\n }\n return new Number(res)\n },\n gamma: function(x){\n $B.check_nb_args('gamma', 1, arguments)\n $B.check_no_kw('gamma', x)\n\n if(_b_.isinstance(x, int)){\n if(i < 1){\n throw _b_.ValueError.$factory(\"math domain error\")\n }\n var res = 1\n for(var i = 1; i < x; i++){res *= i}\n return new Number(res)\n }\n // Adapted from https://en.wikipedia.org/wiki/Lanczos_approximation\n var p = [676.5203681218851,\n -1259.1392167224028,\n 771.32342877765313,\n -176.61502916214059,\n 12.507343278686905,\n -0.13857109526572012,\n 9.9843695780195716e-6,\n 1.5056327351493116e-7\n ]\n\n var EPSILON = 1e-07\n function drop_imag(z){\n if(Math.abs(z.imag) <= EPSILON){\n z = z.real\n }\n return z\n }\n var z = x\n if(z < 0.5){\n var y = Math.PI / (Math.sin(Math.PI * z) * _mod.gamma(1-z)) // Reflection formula\n }else{\n z -= 1\n var x = 0.99999999999980993,\n i = 0\n for(var i = 0, len = p.length; i < len; i++){\n var pval = p[i]\n x += pval / (z + i + 1)\n }\n var t = z + p.length - 0.5,\n sq = Math.sqrt(2 * Math.PI),\n y = sq * Math.pow(t, (z + 0.5)) * Math.exp(-t) * x\n }\n return drop_imag(y)\n },\n gcd: function(){\n var $ = $B.args(\"gcd\", 2, {a: null, b: null}, ['a', 'b'],\n arguments, {}, null, null),\n a = $B.PyNumber_Index($.a),\n b = $B.PyNumber_Index($.b)\n if(a == 0 && b == 0){return 0}\n // https://stackoverflow.com/questions/17445231/js-how-to-find-the-greatest-common-divisor\n a = _b_.abs(a)\n b = _b_.abs(b)\n if($B.rich_comp(\"__gt__\", b, a)){\n var temp = a\n a = b\n b = temp\n }\n while(true){\n if(b == 0){\n return a\n }\n a = $B.rich_op(\"mod\", a, b)\n if(a == 0){\n return b\n }\n b = $B.rich_op(\"mod\", b, a)\n }\n },\n hypot: function(x, y){\n var $ = $B.args(\"hypot\", 2, {x: null, y:null}, ['x', 'y'],\n arguments, {}, \"args\", null),\n args = [x, y].concat($.args),\n res = 0\n for (var i = 0, len = args.length; i < len; i++){\n if(_b_.$isinf(args[i])){\n return float.$factory('inf')\n }\n float_check(args[i])\n res += args[i] * args[i]\n }\n return float.$factory(Math.sqrt(res))\n },\n inf: float.$factory('inf'),\n isclose: function(){\n var $ns = $B.args(\"isclose\",\n 4,\n {a: null, b: null, rel_tol: null, abs_tol: null},\n ['a', 'b', 'rel_tol', 'abs_tol'],\n arguments,\n {rel_tol: 1e-09, abs_tol: 0.0},\n null,\n null)\n var a = $ns['a'],\n b = $ns['b'],\n rel_tol = $ns['rel_tol'],\n abs_tol = $ns['abs_tol']\n if(rel_tol < 0.0 || abs_tol < 0.0){\n throw ValueError('tolerances must be non-negative')\n }\n if(a == b){return True}\n if(_b_.$isinf(a) || _b_.$isinf(b)){return false}\n var diff = _b_.$fabs(b - a)\n var result = (\n (diff <= _b_.$fabs(rel_tol * b)) ||\n (diff <= _b_.$fabs(rel_tol * a))\n ) || (diff <= _b_.$fabs(abs_tol)\n )\n return result\n },\n isfinite: function(x){\n $B.check_nb_args('isfinite', 1, arguments)\n $B.check_no_kw('isfinite', x)\n return isFinite(float_check(x))\n },\n isinf: function(x){\n $B.check_nb_args('isinf', 1, arguments)\n $B.check_no_kw('isinf', x)\n return _b_.$isinf(float_check(x))\n },\n isnan: function(x){\n $B.check_nb_args('isnan', 1, arguments)\n $B.check_no_kw('isnan', x)\n return isNaN(float_check(x))\n },\n isqrt: function(x){\n $B.check_nb_args('isqrt', 1, arguments)\n $B.check_no_kw('isqrt', x)\n\n x = $B.PyNumber_Index(x)\n if($B.rich_comp(\"__lt__\", x, 0)){\n throw _b_.ValueError.$factory(\n \"isqrt() argument must be nonnegative\")\n }\n if(typeof x == \"number\"){\n return Math.floor(Math.sqrt(x))\n }else{ // big integer\n var v = parseInt(x.value),\n candidate = Math.floor(Math.sqrt(v)),\n c1\n // Use successive approximations : sqr = (sqr + (x / sqr)) / 2\n // Limit to 100 iterations\n for(var i = 0; i < 100; i++){\n c1 = $B.floordiv($B.add(candidate,\n $B.floordiv(x, candidate)), 2)\n if(c1 === candidate || c1.value === candidate.value){\n break\n }\n candidate = c1\n }\n if($B.rich_comp(\"__gt__\", $B.mul(candidate, candidate), x)){\n // Result might be greater by 1\n candidate = $B.sub(candidate, 1)\n }\n return candidate\n }\n },\n ldexp: function(x, i){\n $B.check_nb_args('ldexp', 2, arguments)\n $B.check_no_kw('ldexp', x, i)\n return _b_.$ldexp(x, i) //located in py_float.js\n },\n lgamma: function(x){\n $B.check_nb_args('lgamma', 1, arguments)\n $B.check_no_kw('lgamma', x)\n\n return new Number(Math.log(Math.abs(_mod.gamma(x))))\n },\n log: function(x, base){\n var $ = $B.args(\"log\", 2, {x: null, base: null}, ['x', 'base'],\n arguments, {base: _b_.None}, null, null),\n x = $.x,\n base = $.base\n\n var x1 = float_check(x)\n if(base === _b_.None){return float.$factory(Math.log(x1))}\n return float.$factory(Math.log(x1) / Math.log(float_check(base)))\n },\n log1p: function(x){\n $B.check_nb_args('log1p', 1, arguments)\n $B.check_no_kw('log1p', x)\n return float.$factory(Math.log1p(float_check(x)))\n },\n log2: function(x){\n $B.check_nb_args('log2', 1, arguments)\n $B.check_no_kw('log2', x)\n\n if(isNaN(x)){return float.$factory('nan')}\n if(_b_.$isninf(x)) {throw ValueError('')}\n var x1 = float_check(x)\n if(x1 < 0.0){throw ValueError('')}\n return float.$factory(Math.log(x1) / Math.LN2)\n },\n log10: function(x){\n $B.check_nb_args('log10', 1, arguments)\n $B.check_no_kw('log10', x)\n\n return float.$factory(Math.log10(float_check(x)))\n },\n modf: function(x){\n $B.check_nb_args('modf', 1, arguments)\n $B.check_no_kw('modf', x)\n\n if(_b_.$isninf(x)){\n return _b_.tuple.$factory([0.0, float.$factory('-inf')])\n }\n if(_b_.$isinf(x)){\n return _b_.tuple.$factory([0.0, float.$factory('inf')])\n }\n if(isNaN(x)){\n return _b_.tuple.$factory([float.$factory('nan'),\n float.$factory('nan')])\n }\n\n var x1 = float_check(x)\n if(x1 > 0){\n var i = float.$factory(x1 - Math.floor(x1))\n return _b_.tuple.$factory([i, float.$factory(x1 - i)])\n }\n\n var x2 = Math.ceil(x1)\n var i = float.$factory(x1 - x2)\n return _b_.tuple.$factory([i, float.$factory(x2)])\n },\n nan: float.$factory('nan'),\n perm: function(n, k){\n var $ = $B.args(\"perm\", 2, {n: null, k: null}, ['n', 'k'],\n arguments, {k: _b_.None}, null, null),\n n = $.n,\n k = $.k\n\n if(k === _b_.None){\n check_int(n)\n return _mod.factorial(n)\n }\n // raise TypeError if n or k is not an integer\n check_int(n)\n check_int(k)\n\n if(k < 0){\n throw _b_.ValueError.$factory(\"k must be a non-negative integer\")\n }\n if(n < 0){\n throw _b_.ValueError.$factory(\"n must be a non-negative integer\")\n }\n\n if(k > n){\n return 0\n }\n // Evaluates to n! / (n - k)!\n var fn = _mod.factorial(n),\n fn_k = _mod.factorial(n - k)\n return $B.floordiv(fn, fn_k)\n },\n pi : float.$factory(Math.PI),\n pow: function(x, y){\n $B.check_nb_args('pow', 2, arguments)\n $B.check_no_kw('pow', x,y)\n\n var x1 = float_check(x)\n var y1 = float_check(y)\n if(y1 == 0){return float.$factory(1)}\n if(x1 == 0 && y1 < 0){throw _b_.ValueError('')}\n\n if(isNaN(y1)){\n if(x1 == 1){return float.$factory(1)}\n return float.$factory('nan')\n }\n if(x1 == 0){return float.$factory(0)}\n\n if(_b_.$isninf(y)){\n if(x1 == 1 || x1 == -1){return float.$factory(1)}\n if(x1 < 1 && x1 > -1){return float.$factory('inf')}\n return float.$factory(0)\n }\n if(_b_.$isinf(y)){\n if(x1 == 1 || x1 == -1){return float.$factory(1)}\n if(x1 < 1 && x1 > -1){return float.$factory(0)}\n return float.$factory('inf')\n }\n\n if(isNaN(x1)){return float.$factory('nan')}\n if(_b_.$isninf(x)){\n if(y1 > 0 && isOdd(y1)){return float.$factory('-inf')}\n if(y1 > 0){return float.$factory('inf')} // this is even or a float\n if(y1 < 0){return float.$factory(0)}\n return float.$factory(1)\n }\n\n if(_b_.$isinf(x)){\n if(y1 > 0){return float.$factory('inf')}\n if(y1 < 0){return float.$factory(0)}\n return float.$factory(1)\n }\n\n var r\n if(isLargeNumber(x1) || isLargeNumber(y1)){\n var x = new BigNumber(x1),\n y = new BigNumber(y1)\n r = x.pow(y)\n }else{\n r = Math.pow(x1,y1)\n }\n\n if(isNaN(r)){return float.$factory('nan')}\n if(_b_.$isninf(r)){return float.$factory('-inf')}\n if(_b_.$isinf(r)){return float.$factory('inf')}\n\n return r\n },\n prod: function(){\n var $ = $B.args(\"prod\", 1, {iterable:null, start:null},\n [\"iterable\", \"start\"], arguments, {start: 1}, \"*\",\n null),\n iterable = $.iterable,\n start = $.start\n var res = start,\n it = _b_.iter(iterable),\n x\n while(true){\n try{\n x = _b_.next(it)\n if(x == 0){\n return 0\n }\n res = $B.mul(res, x)\n }catch(err){\n if(err.__class__ === _b_.StopIteration){\n return res\n }\n throw err\n }\n }\n },\n radians: function(x){\n $B.check_nb_args('radians', 1, arguments)\n $B.check_no_kw('radians', x)\n\n return float.$factory(float_check(x) * Math.PI / 180)\n },\n sin : function(x){\n $B.check_nb_args('sin ', 1, arguments)\n $B.check_no_kw('sin ', x)\n return float.$factory(Math.sin(float_check(x)))},\n sinh: function(x) {\n $B.check_nb_args('sinh', 1, arguments)\n $B.check_no_kw('sinh', x)\n\n var y = float_check(x)\n if(Math.sinh !== undefined){return float.$factory(Math.sinh(y))}\n return float.$factory(\n (Math.pow(Math.E, y) - Math.pow(Math.E, -y)) / 2)\n },\n sqrt: function(x){\n $B.check_nb_args('sqrt ', 1, arguments)\n $B.check_no_kw('sqrt ', x)\n\n var y = float_check(x)\n if(y < 0){throw ValueError(\"math range error\")}\n if(_b_.$isinf(y)){return float.$factory('inf')}\n var _r = Math.sqrt(y)\n if(_b_.$isinf(_r)){throw OverflowError(\"math range error\")}\n return float.$factory(_r)\n },\n tan: function(x) {\n $B.check_nb_args('tan', 1, arguments)\n $B.check_no_kw('tan', x)\n\n var y = float_check(x)\n return float.$factory(Math.tan(y))\n },\n tanh: function(x) {\n $B.check_nb_args('tanh', 1, arguments)\n $B.check_no_kw('tanh', x)\n\n var y = float_check(x)\n if(Math.tanh !== undefined){return float.$factory(Math.tanh(y))}\n return float.$factory((Math.pow(Math.E, y) - Math.pow(Math.E, -y))/\n (Math.pow(Math.E, y) + Math.pow(Math.E, -y)))\n },\n trunc: function(x) {\n $B.check_nb_args('trunc', 1, arguments)\n $B.check_no_kw('trunc', x)\n\n try{return getattr(x, '__trunc__')()}catch(err){}\n var x1 = float_check(x)\n if(!isNaN(parseFloat(x1)) && isFinite(x1)){\n if(Math.trunc !== undefined){return int.$factory(Math.trunc(x1))}\n if(x1 > 0){return int.$factory(Math.floor(x1))}\n return int.$factory(Math.ceil(x1)) // x1 < 0\n }\n throw _b_.ValueError.$factory(\n 'object is not a number and does not contain __trunc__')\n }\n}\n\nfor(var $attr in _mod){\n if(typeof _mod[$attr] === 'function'){\n _mod[$attr].__repr__ = (function(func){\n return function(){return ''}\n })($attr)\n _mod[$attr].__str__ = (function(func){\n return function(){return ''}\n })($attr)\n }\n}\n\nreturn _mod\n\n})(__BRYTHON__)\n"], "modulefinder": [".js", "var $module=(function($B){\n\nvar _b_=$B.builtins\nvar _mod = {}\n\n$ModuleFinderDict = {__class__:_b_.type,__name__:'ModuleFinder'}\n$ModuleFinderDict.__mro__ = [_b_.object]\n\n$ModuleFinderDict.run_script = function(self, pathname){\n // pathname is the url of a Python script\n var py_src = _b_.$open(pathname).read()\n // transform into internal Brython tree structure\n var root = $B.py2js(py_src)\n // walk the tree to find occurences of imports\n function walk(node){\n var modules = []\n var ctx = node.context\n if(ctx && ctx.type=='node'){ctx = ctx.tree[0]}\n\n if(ctx && ctx.type==\"import\"){\n for(var i=0, _len_i = ctx.tree.length; i < _len_i;i++){\n if(modules.indexOf(ctx.tree[i].name)==-1){\n modules.push(ctx.tree[i].name)\n }\n }\n }else if(ctx && ctx.type==\"from\"){\n if(modules.indexOf(ctx.module)==-1){\n modules.push(ctx.module)\n }\n }\n \n for(var i=0, _len_i = node.children.length; i < _len_i;i++){\n mods = walk(node.children[i])\n for(var j=0, _len_j = mods.length; j < _len_j;j++){\n if(modules.indexOf(mods[j])==-1){modules.push(mods[j])}\n }\n }\n return modules\n }\n self.modules = walk(root)\n}\n\n_mod.ModuleFinder = function(){return {__class__:$ModuleFinderDict}\n}\n_mod.ModuleFinder.$dict = $ModuleFinderDict\n_mod.ModuleFinder.__class__ = $B.$factory\n$ModuleFinderDict.$factory = _mod.ModuleFinder\n\nreturn _mod\n})(__BRYTHON__)\n"], "posix": [".js", "/*\nThis module provides access to operating system functionality that is\nstandardized by the C Standard and the POSIX standard (a thinly\ndisguised Unix interface). Refer to the library manual and\ncorresponding Unix manual entries for more information on calls.\n*/\n\nvar $B = __BRYTHON__,\n _b_ = $B.builtins\n\nfunction _randint(a, b){\n return parseInt(Math.random() * (b - a + 1) + a)\n}\n\nvar stat_result = $B.make_class(\"stat_result\",\n function(filename){\n // Use $B.files, created by \"python -m brython --make_file_system\"\n if($B.files && $B.files.hasOwnProperty(filename)){\n var f = $B.files[filename],\n res = {\n __class__: stat_result,\n st_atime: new Date().getTime(),\n st_ctime: f.ctime,\n st_mtime: f.mtime,\n st_uid: -1,\n st_gid: -1,\n st_ino: -1,\n st_mode: 0,\n st_size: 1\n };\n [\"atime\", \"mtime\", \"ctime\"].\n forEach(function(item){\n res[\"st_\" + item + \"_ns\"] = res[\"st_\" + item] *\n 1000000\n });\n }else{\n var res = {\n __class__: stat_result,\n st_atime: new Date(),\n st_uid: -1,\n st_gid: -1,\n st_ino: -1,\n st_mode: 0,\n st_size: 1\n };\n [\"mtime\", \"ctime\", \"atime_ns\", \"mtime_ns\", \"ctime_ns\"].\n forEach(function(item){\n res[\"st_\" + item] = res.st_atime\n });\n }\n return res\n }\n)\n$B.set_func_names(stat_result, \"posix\")\n\nvar $module = {\n F_OK: 0,\n O_APPEND: 8,\n O_BINARY: 32768,\n O_CREAT: 256,\n O_EXCL: 1024,\n O_NOINHERIT: 128,\n O_RANDOM: 16,\n O_RDONLY: 0,\n O_RDWR: 2,\n O_SEQUENTIAL: 32,\n O_SHORT_LIVED: 4096,\n O_TEMPORARY: 64,\n O_TEXT: 16384,\n O_TRUNC: 512,\n O_WRONLY: 1,\n P_DETACH: 4,\n P_NOWAIT: 1,\n P_NOWAITO: 3,\n P_OVERLAY: 2,\n P_WAIT: 0,\n R_OK: 4,\n TMP_MAX: 32767,\n W_OK: 2,\n X_OK: 1,\n _have_functions: ['MS_WINDOWS'],\n environ: _b_.dict.$factory(\n [['PYTHONPATH', $B.brython_path],\n ['PYTHONUSERBASE', ' ']]),\n error: _b_.OSError,\n fspath: function(path){\n return path\n },\n getcwd: function(){return $B.brython_path},\n getpid: function(){return 0},\n lstat: function(){return stat_result.$factory()},\n open: function(path, flags){return _b_.open(path, flags)},\n stat: function(filename){return stat_result.$factory(filename)},\n stat_result: function(filename){return stat_result.$factory(filename)},\n urandom: function(n){\n var randbytes = []\n for(var i = 0; i < n; i++){\n randbytes.push(_randint(0, 255))\n }\n return _b_.bytes.$factory(randbytes)\n },\n WTERMSIG: function(){return 0},\n WNOHANG: function(){return _b_.tuple.$factory([0, 0])}\n};\n\n[\"WCOREDUMP\", \"WIFCONTINUED\", \"WIFSTOPPED\", \"WIFSIGNALED\", \"WIFEXITED\"].forEach(function(funcname){\n $module[funcname] = function(){return false}\n });\n\n[\"WEXITSTATUS\", \"WSTOPSIG\", \"WTERMSIG\"].\n forEach(function(funcname){\n $module[funcname] = function(){return _b_.None}\n });\n\n[\"_exit\", \"_getdiskusage\", \"_getfileinformation\", \"_getfinalpathname\",\n \"_getfullpathname\", \"_isdir\", \"abort\", \"access\", \"chdir\", \"chmod\",\n \"close\", \"closerange\", \"device_encoding\", \"dup\", \"dup2\",\n \"execv\", \"execve\", \"fsat\", \"fsync\", \"get_terminal_size\", \"getcwdb\",\n \"getlogin\", \"getppid\", \"isatty\", \"kill\", \"link\", \"listdir\", \"lseek\",\n \"mkdir\", \"pipe\", \"putenv\", \"read\", \"readlink\", \"remove\", \"rename\",\n \"replace\", \"rmdir\", \"spawnv\", \"spawnve\", \"startfile\", \"stat_float_times\",\n \"statvfs_result\", \"strerror\", \"symlink\", \"system\", \"terminal_size\",\n \"times\", \"times_result\", \"umask\", \"uname_result\", \"unlink\", \"utime\",\n \"waitpid\", \"write\"].forEach(function(funcname){\n $module[funcname] = function(){\n throw _b_.NotImplementedError.$factory(\"posix.\" + funcname +\n \" is not implemented\")\n }\n });\n"], "random": [".js", "// Javascript implementation of the random module\n// Based on Ian Bicking's implementation of the Mersenne twister\n\nvar $module = (function($B){\n\nvar _b_ = $B.builtins,\n i\n\nvar VERSION = 3\n\n// Code copied from https://github.com/ianb/whrandom/blob/master/mersenne.js\n// by Ian Bicking\n\n// this program is a JavaScript version of Mersenne Twister,\n// a straight conversion from the original program, mt19937ar.c,\n// translated by y. okada on july 17, 2006.\n// and modified a little at july 20, 2006, but there are not any substantial differences.\n// modularized by Ian Bicking, March 25, 2013 (found original version at http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/VERSIONS/JAVASCRIPT/java-script.html)\n// in this program, procedure descriptions and comments of original source code were not removed.\n// lines commented with //c// were originally descriptions of c procedure. and a few following lines are appropriate JavaScript descriptions.\n// lines commented with /* and */ are original comments.\n// lines commented with // are additional comments in this JavaScript version.\n/*\n A C-program for MT19937, with initialization improved 2002/1/26.\n Coded by Takuji Nishimura and Makoto Matsumoto.\n\n Before using, initialize the state by using init_genrand(seed)\n or init_by_array(init_key, key_length).\n\n Copyright (C) 1997 - 2002, Makoto Matsumoto and Takuji Nishimura,\n All rights reserved.\n\n Redistribution and use in source and binary forms, with or without\n modification, are permitted provided that the following conditions\n are met:\n\n 1. Redistributions of source code must retain the above copyright\n notice, this list of conditions and the following disclaimer.\n\n 2. Redistributions in binary form must reproduce the above copyright\n notice, this list of conditions and the following disclaimer in the\n documentation and/or other materials provided with the distribution.\n\n 3. The names of its contributors may not be used to endorse or promote\n products derived from this software without specific prior written\n permission.\n\n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR\n CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\n PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\n LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n\n Any feedback is very welcome.\n http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/emt.html\n email: m-mat @ math.sci.hiroshima-u.ac.jp (remove space)\n*/\n\nfunction RandomStream(seed) {\n /*jshint bitwise:false */\n /* Period parameters */\n //c//#define N 624\n //c//#define M 397\n //c//#define MATRIX_A 0x9908b0dfUL /* constant vector a */\n //c//#define UPPER_MASK 0x80000000UL /* most significant w-r bits */\n //c//#define LOWER_MASK 0x7fffffffUL /* least significant r bits */\n var N = 624\n var M = 397\n var MATRIX_A = 0x9908b0df /* constant vector a */\n var UPPER_MASK = 0x80000000 /* most significant w-r bits */\n var LOWER_MASK = 0x7fffffff /* least significant r bits */\n //c//static unsigned long mt[N]; /* the array for the state vector */\n //c//static int mti=N+1; /* mti==N+1 means mt[N] is not initialized */\n var mt = new Array(N) /* the array for the state vector */\n var mti = N + 1 /* mti==N+1 means mt[N] is not initialized */\n\n function unsigned32(n1){\n // returns a 32-bits unsiged integer from an operand to which applied a\n // bit operator.\n return n1 < 0 ? (n1 ^ UPPER_MASK) + UPPER_MASK : n1\n }\n\n function subtraction32(n1, n2){\n // emulates lowerflow of a c 32-bits unsiged integer variable, instead of\n // the operator -. these both arguments must be non-negative integers\n // expressible using unsigned 32 bits.\n return n1 < n2 ? unsigned32((0x100000000 - (n2 - n1)) & 0xffffffff) :\n n1 - n2\n }\n\n function addition32(n1, n2){\n // emulates overflow of a c 32-bits unsiged integer variable, instead of\n // the operator +. these both arguments must be non-negative integers\n // expressible using unsigned 32 bits.\n return unsigned32((n1 + n2) & 0xffffffff)\n }\n\n function multiplication32(n1, n2){\n // emulates overflow of a c 32-bits unsiged integer variable, instead of the\n // operator *. these both arguments must be non-negative integers\n // expressible using unsigned 32 bits.\n var sum = 0\n for (var i = 0; i < 32; ++i){\n if((n1 >>> i) & 0x1){\n sum = addition32(sum, unsigned32(n2 << i))\n }\n }\n return sum\n }\n\n /* initializes mt[N] with a seed */\n //c//void init_genrand(unsigned long s)\n function init_genrand(s) {\n //c//mt[0]= s & 0xffffffff;\n mt[0] = unsigned32(s & 0xffffffff)\n for(mti = 1; mti < N; mti++){\n mt[mti] =\n //c//(1812433253 * (mt[mti-1] ^ (mt[mti-1] >> 30)) + mti);\n addition32(multiplication32(1812433253,\n unsigned32(mt[mti - 1] ^ (mt[mti - 1] >>> 30))), mti)\n /* See Knuth TAOCP Vol2. 3rd Ed. P.106 for multiplier. */\n /* In the previous versions, MSBs of the seed affect */\n /* only MSBs of the array mt[]. */\n /* 2002/01/09 modified by Makoto Matsumoto */\n //c//mt[mti] &= 0xffffffff;\n mt[mti] = unsigned32(mt[mti] & 0xffffffff);\n /* for >32 bit machines */\n }\n }\n\n /* initialize by an array with array-length */\n /* init_key is the array for initializing keys */\n /* key_length is its length */\n /* slight change for C++, 2004/2/26 */\n //c//void init_by_array(unsigned long init_key[], int key_length)\n function init_by_array(init_key, key_length) {\n //c//int i, j, k;\n var i, j, k\n init_genrand(19650218)\n i = 1\n j = 0\n k = (N > key_length ? N : key_length)\n for(; k; k--){\n //c//mt[i] = (mt[i] ^ ((mt[i-1] ^ (mt[i-1] >> 30)) * 1664525))\n //c// + init_key[j] + j; /* non linear */\n mt[i] = addition32(\n addition32(unsigned32(mt[i] ^\n multiplication32(unsigned32(mt[i - 1] ^ (mt[i - 1] >>> 30)),\n 1664525)),\n init_key[j]), j)\n mt[i] =\n //c//mt[i] &= 0xffffffff; /* for WORDSIZE > 32 machines */\n unsigned32(mt[i] & 0xffffffff)\n i++\n j++\n if(i >= N){mt[0] = mt[N - 1]; i = 1}\n if(j >= key_length){j = 0}\n }\n for(k = N - 1; k; k--){\n //c//mt[i] = (mt[i] ^ ((mt[i-1] ^ (mt[i-1] >> 30)) * 1566083941))\n //c//- i; /* non linear */\n mt[i] = subtraction32(\n unsigned32(\n (mt[i]) ^\n multiplication32(\n unsigned32(mt[i - 1] ^ (mt[i - 1] >>> 30)),\n 1566083941)),\n i\n )\n //c//mt[i] &= 0xffffffff; /* for WORDSIZE > 32 machines */\n mt[i] = unsigned32(mt[i] & 0xffffffff)\n i++\n if(i >= N){mt[0] = mt[N - 1]; i = 1}\n }\n mt[0] = 0x80000000; /* MSB is 1; assuring non-zero initial array */\n }\n\n /* generates a random number on [0,0xffffffff]-interval */\n //c//unsigned long genrand_int32(void)\n function genrand_int32() {\n //c//unsigned long y;\n //c//static unsigned long mag01[2]={0x0UL, MATRIX_A};\n var y;\n var mag01 = [0x0, MATRIX_A];\n /* mag01[x] = x * MATRIX_A for x=0,1 */\n\n if(mti >= N){ /* generate N words at one time */\n //c//int kk;\n var kk\n\n if(mti == N + 1){ /* if init_genrand() has not been called, */\n init_genrand(Date.now()) /* a default initial seed is used */\n }\n\n for(kk = 0; kk < N - M; kk++){\n //c//y = (mt[kk]&UPPER_MASK)|(mt[kk+1]&LOWER_MASK);\n //c//mt[kk] = mt[kk+M] ^ (y >> 1) ^ mag01[y & 0x1];\n y = unsigned32((mt[kk]&UPPER_MASK) | (mt[kk + 1]&LOWER_MASK))\n mt[kk] = unsigned32(mt[kk + M] ^ (y >>> 1) ^ mag01[y & 0x1])\n }\n for(;kk < N - 1; kk++){\n //c//y = (mt[kk]&UPPER_MASK)|(mt[kk+1]&LOWER_MASK);\n //c//mt[kk] = mt[kk+(M-N)] ^ (y >> 1) ^ mag01[y & 0x1];\n y = unsigned32((mt[kk]&UPPER_MASK) | (mt[kk + 1]&LOWER_MASK))\n mt[kk] = unsigned32(mt[kk + (M - N)] ^ (y >>> 1) ^ mag01[y & 0x1])\n }\n //c//y = (mt[N-1]&UPPER_MASK)|(mt[0]&LOWER_MASK);\n //c//mt[N-1] = mt[M-1] ^ (y >> 1) ^ mag01[y & 0x1];\n y = unsigned32((mt[N - 1] & UPPER_MASK) | (mt[0] & LOWER_MASK))\n mt[N - 1] = unsigned32(mt[M - 1] ^ (y >>> 1) ^ mag01[y & 0x1])\n mti = 0\n }\n\n y = mt[mti++]\n\n /* Tempering */\n //c//y ^= (y >> 11);\n //c//y ^= (y << 7) & 0x9d2c5680;\n //c//y ^= (y << 15) & 0xefc60000;\n //c//y ^= (y >> 18);\n y = unsigned32(y ^ (y >>> 11))\n y = unsigned32(y ^ ((y << 7) & 0x9d2c5680))\n y = unsigned32(y ^ ((y << 15) & 0xefc60000))\n y = unsigned32(y ^ (y >>> 18))\n\n return y\n }\n\n /* generates a random number on [0,0x7fffffff]-interval */\n //c//long genrand_int31(void)\n function genrand_int31(){\n //c//return (genrand_int32()>>1);\n return (genrand_int32()>>>1)\n }\n\n /* generates a random number on [0,1]-real-interval */\n //c//double genrand_real1(void)\n function genrand_real1(){\n return genrand_int32()*(1.0/4294967295.0)\n /* divided by 2^32-1 */\n }\n\n /* generates a random number on [0,1)-real-interval */\n //c//double genrand_real2(void)\n function genrand_real2(){\n return genrand_int32() * (1.0 / 4294967296.0)\n /* divided by 2^32 */\n }\n\n /* generates a random number on (0,1)-real-interval */\n //c//double genrand_real3(void)\n function genrand_real3() {\n return ((genrand_int32()) + 0.5) * (1.0 / 4294967296.0)\n /* divided by 2^32 */\n }\n\n /* generates a random number on [0,1) with 53-bit resolution*/\n //c//double genrand_res53(void)\n function genrand_res53() {\n //c//unsigned long a=genrand_int32()>>5, b=genrand_int32()>>6;\n var a = genrand_int32() >>> 5,\n b = genrand_int32() >>> 6\n return (a * 67108864.0 + b) * (1.0 / 9007199254740992.0)\n }\n /* These real versions are due to Isaku Wada, 2002/01/09 added */\n\n var random = genrand_res53\n\n random.seed = function(seed){\n if(seed === undefined){seed = Date.now()}\n if(typeof seed != \"number\"){seed = parseInt(seed, 10)}\n if((seed !== 0 && ! seed) || isNaN(seed)){\n throw _b_.ValueError.$factory(\"Bad seed: \" + _b_.str.$factory(seed))\n }\n init_genrand(seed)\n }\n\n random.seed(seed)\n\n random.int31 = genrand_int31\n random.real1 = genrand_real1\n random.real2 = genrand_real2\n random.real3 = genrand_real3\n random.res53 = genrand_res53\n\n // Added for compatibility with Python\n random.getstate = function(){return [VERSION, mt, mti]}\n\n random.setstate = function(state){\n mt = state[1]\n mti = state[2]\n }\n\n return random\n\n}\n\n// magic constants\n\nvar NV_MAGICCONST = 4 * Math.exp(-0.5)/Math.sqrt(2),\n gauss_next = null,\n NV_MAGICCONST = 1.71552776992141,\n TWOPI = 6.28318530718,\n LOG4 = 1.38629436111989,\n SG_MAGICCONST = 2.50407739677627,\n VERSION = VERSION\n\nvar Random = $B.make_class(\"Random\",\n function(){\n return {\n __class__: Random,\n _random: RandomStream(Date.now())\n }\n }\n)\n\nRandom._randbelow = function(self, x){\n return Math.floor(x * self._random())\n}\n\nRandom._urandom = function(self, n){\n /*\n urandom(n) -> str\n Return n random bytes suitable for cryptographic use.\n */\n\n var randbytes = []\n for(i = 0; i < n; i++){randbytes.push(parseInt(self._random() * 256))}\n return _b_.bytes.$factory(randbytes)\n}\n\nRandom.betavariate = function(){\n /* Beta distribution.\n\n Conditions on the parameters are alpha > 0 and beta > 0.\n Returned values range between 0 and 1.\n\n\n # This version due to Janne Sinkkonen, and matches all the std\n # texts (e.g., Knuth Vol 2 Ed 3 pg 134 \"the beta distribution\").\n */\n\n var $ = $B.args('betavariate', 3, {self: null, alpha:null, beta:null},\n ['self', 'alpha', 'beta'], arguments, {}, null, null),\n self = $.self,\n alpha = $.alpha,\n beta = $.beta\n\n var y = Random.gammavariate(self, alpha, 1)\n if(y == 0){return _b_.float.$factory(0)}\n else{return y / (y + Random.gammavariate(self, beta, 1))}\n}\n\nRandom.choice = function(){\n var $ = $B.args(\"choice\", 2,\n {self: null, seq:null},[\"self\", \"seq\"],arguments, {}, null, null),\n self = $.self,\n seq = $.seq\n var len, rank\n if(Array.isArray(seq)){len = seq.length}\n else{len = _b_.getattr(seq,\"__len__\")()}\n if(len == 0){\n throw _b_.IndexError.$factory(\"Cannot choose from an empty sequence\")\n }\n rank = parseInt(self._random() * len)\n if(Array.isArray(seq)){return seq[rank]}\n else{return _b_.getattr(seq, \"__getitem__\")(rank)}\n}\n\nRandom.choices = function(){\n var $ = $B.args(\"choices\", 3,\n {self: null,population:null, weights:null, cum_weights:null, k:null},\n [\"self\", \"population\", \"weights\", \"cum_weights\", \"k\"], arguments,\n {weights: _b_.None, cum_weights: _b_.None, k: 1}, \"*\", null),\n self = $.self,\n population = $.population,\n weights = $.weights,\n cum_weights = $.cum_weights,\n k = $.k\n\n if(population.length == 0){\n throw _b_.ValueError.$factory(\"population is empty\")\n }\n population = _b_.list.$factory(population) // issue #1268\n if(weights === _b_.None){\n weights = []\n population.forEach(function(){\n weights.push(1)\n })\n }else if(cum_weights !== _b_.None){\n throw _b_.TypeError.$factory(\"Cannot specify both weights and \" +\n \"cumulative weights\")\n }else{\n if(weights.length != population.length){\n throw _b_.ValueError.$factory('The number of weights does not ' +\n 'match the population')\n }\n }\n if(cum_weights === _b_.None){\n var cum_weights = [weights[0]]\n weights.forEach(function(weight, rank){\n if(rank > 0){\n cum_weights.push(cum_weights[rank - 1] + weight)\n }\n })\n }else if(cum_weights.length != population.length){\n throw _b_.ValueError.$factory('The number of weights does not ' +\n 'match the population')\n }\n\n var result = []\n for(var i = 0; i < k; i++){\n var rand = self._random() * cum_weights[cum_weights.length - 1]\n for(var rank = 0, len = population.length; rank < len; rank++){\n if(cum_weights[rank] > rand){\n result.push(population[rank])\n break\n }\n }\n }\n return result\n}\n\nRandom.expovariate = function(self, lambd){\n /*\n Exponential distribution.\n\n lambd is 1.0 divided by the desired mean. It should be\n nonzero. (The parameter would be called \"lambda\", but that is\n a reserved word in Python.) Returned values range from 0 to\n positive infinity if lambd is positive, and from negative\n infinity to 0 if lambd is negative.\n\n */\n // lambd: rate lambd = 1/mean\n // ('lambda' is a Python reserved word)\n\n // we use 1-random() instead of random() to preclude the\n // possibility of taking the log of zero.\n return -Math.log(1.0 - self._random()) / lambd\n}\n\nRandom.gammavariate = function(self, alpha, beta){\n /* Gamma distribution. Not the gamma function!\n\n Conditions on the parameters are alpha > 0 and beta > 0.\n\n The probability distribution function is:\n\n x ** (alpha - 1) * math.exp(-x / beta)\n pdf(x) = --------------------------------------\n math.gamma(alpha) * beta ** alpha\n\n */\n\n // alpha > 0, beta > 0, mean is alpha*beta, variance is alpha*beta**2\n\n // Warning: a few older sources define the gamma distribution in terms\n // of alpha > -1.0\n\n var $ = $B.args('gammavariate', 3,\n {self: null, alpha:null, beta:null},\n ['self', 'alpha', 'beta'],\n arguments, {}, null, null),\n self = $.self,\n alpha = $.alpha,\n beta = $.beta,\n LOG4 = Math.log(4),\n SG_MAGICCONST = 1.0 + Math.log(4.5)\n\n if(alpha <= 0.0 || beta <= 0.0){\n throw _b_.ValueError.$factory('gammavariate: alpha and beta must be > 0.0')\n }\n\n if(alpha > 1.0){\n\n // Uses R.C.H. Cheng, \"The generation of Gamma\n // variables with non-integral shape parameters\",\n // Applied Statistics, (1977), 26, No. 1, p71-74\n\n var ainv = Math.sqrt(2.0 * alpha - 1.0),\n bbb = alpha - LOG4,\n ccc = alpha + ainv\n\n while(true){\n var u1 = self._random()\n if(!((1e-7 < u1) && (u1 < .9999999))){\n continue\n }\n var u2 = 1.0 - self._random(),\n v = Math.log(u1 / (1.0 - u1)) / ainv,\n x = alpha * Math.exp(v),\n z = u1 * u1 * u2,\n r = bbb + ccc * v - x\n if((r + SG_MAGICCONST - 4.5 * z >= 0.0) || r >= Math.log(z)){\n return x * beta\n }\n }\n }else if(alpha == 1.0){\n // expovariate(1)\n var u = self._random()\n while(u <= 1e-7){u = self._random()}\n return -Math.log(u) * beta\n }else{\n // alpha is between 0 and 1 (exclusive)\n\n // Uses ALGORITHM GS of Statistical Computing - Kennedy & Gentle\n\n while(true){\n var u = self._random(),\n b = (Math.E + alpha)/Math.E,\n p = b*u,\n x\n if(p <= 1.0){x = Math.pow(p, (1.0/alpha))}\n else{x = -Math.log((b-p)/alpha)}\n var u1 = self._random()\n if(p > 1.0){\n if(u1 <= Math.pow(x, alpha - 1.0)){\n break\n }\n }else if(u1 <= Math.exp(-x)){\n break\n }\n }\n return x * beta\n }\n}\n\nRandom.gauss = function(){\n\n /* Gaussian distribution.\n\n mu is the mean, and sigma is the standard deviation. This is\n slightly faster than the normalvariate() function.\n\n Not thread-safe without a lock around calls.\n\n # When x and y are two variables from [0, 1), uniformly\n # distributed, then\n #\n # cos(2*pi*x)*sqrt(-2*log(1-y))\n # sin(2*pi*x)*sqrt(-2*log(1-y))\n #\n # are two *independent* variables with normal distribution\n # (mu = 0, sigma = 1).\n # (Lambert Meertens)\n # (corrected version; bug discovered by Mike Miller, fixed by LM)\n\n # Multithreading note: When two threads call this function\n # simultaneously, it is possible that they will receive the\n # same return value. The window is very small though. To\n # avoid this, you have to use a lock around all calls. (I\n # didn't want to slow this down in the serial case by using a\n # lock here.)\n */\n\n var $ = $B.args('gauss', 3, {self: null, mu:null, sigma:null},\n ['self', 'mu', 'sigma'], arguments, {}, null, null),\n self = $.self,\n mu = $.mu,\n sigma = $.sigma\n\n var z = gauss_next\n gauss_next = null\n if(z === null){\n var x2pi = self._random() * Math.PI * 2,\n g2rad = Math.sqrt(-2.0 * Math.log(1.0 - self._random())),\n z = Math.cos(x2pi) * g2rad\n gauss_next = Math.sin(x2pi) * g2rad\n }\n return mu + z*sigma\n}\n\nRandom.getrandbits = function(){\n var $ = $B.args(\"getrandbits\", 2,\n {self: null, k:null},[\"self\", \"k\"],arguments, {}, null, null),\n self = $.self,\n k = $B.$GetInt($.k)\n // getrandbits(k) -> x. Generates a long int with k random bits.\n if(k <= 0){\n throw _b_.ValueError.$factory('number of bits must be greater than zero')\n }\n if(k != _b_.int.$factory(k)){\n throw _b_.TypeError.$factory('number of bits should be an integer')\n }\n var numbytes = (k + 7), // bits / 8 and rounded up\n x = _b_.int.from_bytes(Random._urandom(self, numbytes), 'big')\n return _b_.getattr(x, '__rshift__')(\n _b_.getattr(numbytes*8,'__sub__')(k))\n}\n\nRandom.getstate = function(){\n // Return internal state; can be passed to setstate() later.\n var $ = $B.args('getstate', 1, {self: null},\n [\"self\"], arguments, {}, null, null)\n return $.self._random.getstate()\n}\n\nRandom.lognormvariate = function(){\n /*\n Log normal distribution.\n\n If you take the natural logarithm of this distribution, you'll get a\n normal distribution with mean mu and standard deviation sigma.\n mu can have any value, and sigma must be greater than zero.\n\n */\n return Math.exp(Random.normalvariate.apply(null, arguments))\n}\n\nRandom.normalvariate = function(){\n /*\n Normal distribution.\n\n mu is the mean, and sigma is the standard deviation.\n\n */\n\n // mu = mean, sigma = standard deviation\n\n // Uses Kinderman and Monahan method. Reference: Kinderman,\n // A.J. and Monahan, J.F., \"Computer generation of random\n // variables using the ratio of uniform deviates\", ACM Trans\n // Math Software, 3, (1977), pp257-260.\n\n var $ = $B.args(\"normalvariate\", 3,\n {self: null, mu:null, sigma:null}, [\"self\", \"mu\", \"sigma\"],\n arguments, {}, null, null),\n self = $.self,\n mu = $.mu,\n sigma = $.sigma\n\n while(true){\n var u1 = self._random(),\n u2 = 1.0 - self._random(),\n z = NV_MAGICCONST * (u1 - 0.5) / u2,\n zz = z * z / 4.0\n if(zz <= -Math.log(u2)){break}\n }\n return mu + z * sigma\n}\n\nRandom.paretovariate = function(){\n /* Pareto distribution. alpha is the shape parameter.*/\n // Jain, pg. 495\n\n var $ = $B.args(\"paretovariate\", 2, {self: null, alpha:null},\n [\"self\", \"alpha\"], arguments, {}, null, null)\n\n var u = 1 - $.self._random()\n return 1 / Math.pow(u, 1 / $.alpha)\n}\n\nfunction is_integer(x){\n return _b_.isinstance(x, _b_.int) || (\n _b_.isinstance(x, _b_.float) &&\n x.valueOf() == Math.floor(x.valueOf()))\n}\n\nRandom.randint = function(self, a, b){\n var $ = $B.args('randint', 3,\n {self: null, a:null, b:null},\n ['self', 'a', 'b'],\n arguments, {}, null, null)\n if(! is_integer($.a)){\n throw _b_.ValueError.$factory(\"non-integer value for start\")\n }\n if(! is_integer($.b)){\n throw _b_.ValueError.$factory(\"non-integer value for stop\")\n }\n return Random.randrange($.self, $.a, $B.add($.b, 1))\n}\n\nRandom.random = function(self){\n var res = self._random()\n if(! Number.isInteger(res)){return new Number(res)}\n return res\n}\n\nRandom.randrange = function(){\n var $ = $B.args('randrange', 4,\n {self: null, x:null, stop:null, step:null},\n ['self', 'x', 'stop', 'step'],\n arguments, {stop:null, step:null}, null, null),\n self = $.self,\n _random = self._random\n\n if(! is_integer($.x)){\n throw _b_.ValueError.$factory(\"non-integer arg 1 for randrange()\")\n }\n if($.stop !== null && ! is_integer($.stop)){\n throw _b_.ValueError.$factory(\"non-integer arg 2 for randrange()\")\n }\n if($.step !== null && ! is_integer($.step)){\n throw _b_.ValueError.$factory(\"non-integer arg 3 for randrange()\")\n }\n\n if($.stop === null){\n var start = 0, stop = $.x.valueOf(), step = 1\n }else{\n var start = $.x.valueOf(), stop = $.stop.valueOf(),\n step = $.step === null ? 1 : $.step.valueOf()\n if(step == 0){throw _b_.ValueError.$factory('step cannot be 0')}\n }\n\n if((step > 0 && start >= stop) || (step < 0 && start <= stop)){\n throw _b_.ValueError.$factory(\"empty range for randrange() (\" +\n start + \", \" + stop + \", \" + step + \")\")\n }\n if(typeof start == 'number' && typeof stop == 'number' &&\n typeof step == 'number'){\n return start + step * Math.floor(_random() *\n Math.ceil((stop - start) / step))\n }else{\n var d = _b_.getattr(stop, '__sub__')(start)\n d = _b_.getattr(d, '__floordiv__')(step)\n // Force d to be a LongInt\n d = $B.long_int.$factory(d)\n // d is a long integer with n digits ; to choose a random number\n // between 0 and d the most simple is to take a random digit\n // at each position, except the first one\n var s = d.value,\n _len = s.length,\n res = Math.floor(_random() * (parseInt(s.charAt(0)) +\n (_len == 1 ? 0 : 1))) + ''\n var same_start = res.charAt(0) == s.charAt(0)\n for(var i = 1; i < _len; i++){\n if(same_start){\n // If it's the last digit, don't allow stop as valid\n if(i == _len - 1){\n res += Math.floor(_random() * parseInt(s.charAt(i))) + ''\n }else{\n res += Math.floor(_random() *\n (parseInt(s.charAt(i)) + 1)) + ''\n same_start = res.charAt(i) == s.charAt(i)\n }\n }else{\n res += Math.floor(_random() * 10) + ''\n }\n }\n var offset = {__class__: $B.long_int, value: res,\n pos: true}\n d = _b_.getattr(step, '__mul__')(offset)\n d = _b_.getattr(start, '__add__')(d)\n return _b_.int.$factory(d)\n }\n}\n\nRandom.sample = function(){\n /*\n Chooses k unique random elements from a population sequence or set.\n\n Returns a new list containing elements from the population while\n leaving the original population unchanged. The resulting list is\n in selection order so that all sub-slices will also be valid random\n samples. This allows raffle winners (the sample) to be partitioned\n into grand prize and second place winners (the subslices).\n\n Members of the population need not be hashable or unique. If the\n population contains repeats, then each occurrence is a possible\n selection in the sample.\n\n To choose a sample in a range of integers, use range as an argument.\n This is especially fast and space efficient for sampling from a\n large population: sample(range(10000000), 60)\n\n # Sampling without replacement entails tracking either potential\n # selections (the pool) in a list or previous selections in a set.\n\n # When the number of selections is small compared to the\n # population, then tracking selections is efficient, requiring\n # only a small set and an occasional reselection. For\n # a larger number of selections, the pool tracking method is\n # preferred since the list takes less space than the\n # set and it doesn't suffer from frequent reselections.'\n\n */\n var $ = $B.args('sample', 3, {self: null, population: null,k: null},\n ['self', 'population','k'], arguments, {}, null, null),\n self = $.self,\n population = $.population,\n k = $.k\n\n if(!_b_.hasattr(population, '__len__')){\n throw _b_.TypeError.$factory(\"Population must be a sequence or set. \" +\n \"For dicts, use list(d).\")\n }\n var n = _b_.getattr(population, '__len__')()\n\n if(k < 0 || k > n){\n throw _b_.ValueError.$factory(\"Sample larger than population\")\n }\n var result = [],\n setsize = 21 // size of a small set minus size of an empty list\n if(k > 5){\n setsize += Math.pow(4, Math.ceil(Math.log(k * 3, 4))) // table size for big sets\n }\n if(n <= setsize){\n // An n-length list is smaller than a k-length set\n if(Array.isArray(population)){\n var pool = population.slice()\n }else{var pool = _b_.list.$factory(population)}\n for(var i = 0; i < k; i++){ //invariant: non-selected at [0,n-i)\n var j = Random._randbelow(self, n - i)\n result[i] = pool[j]\n pool[j] = pool[n - i - 1] // move non-selected item into vacancy\n }\n }else{\n selected = {}\n for(var i = 0; i < k; i++){\n var j = Random._randbelow(self, n)\n while(selected[j] !== undefined){\n j = Random._randbelow(self, n)\n }\n selected[j] = true\n result[i] = Array.isArray(population) ? population[j] :\n _b_.getattr(population, '__getitem__')(j)\n }\n }\n return result\n}\n\nRandom.seed = function(){\n /*\n Initialize internal state from hashable object.\n\n None or no argument seeds from current time or from an operating\n system specific randomness source if available.\n\n If *a* is an int, all bits are used.\n */\n var $ = $B.args('seed', 3, {self: null, a: null, version: null},\n ['self', 'a', 'version'],\n arguments, {a: new Date(), version: 2}, null, null),\n self = $.self,\n a = $.a,\n version = $.version\n\n if(version == 1){a = _b_.hash(a)}\n else if(version == 2){\n if(_b_.isinstance(a, _b_.str)){\n a = _b_.int.from_bytes(_b_.bytes.$factory(a, 'utf-8'), 'big')\n }else if(_b_.isinstance(a, [_b_.bytes, _b_.bytearray])){\n a = _b_.int.from_bytes(a, 'big')\n }else if(!_b_.isinstance(a, _b_.int)){\n throw _b_.TypeError.$factory('wrong argument')\n }\n if(a.__class__ === $B.long_int){\n // In this implementation, seed() only accepts safe integers\n // Generate a random one from the underlying string value,\n // using an arbitrary seed (99) to always return the same\n // integer\n var numbers = a.value,\n res = '',\n pos\n self._random.seed(99)\n for(var i = 0; i < 17; i++){\n pos = parseInt(self._random() * numbers.length)\n res += numbers.charAt(pos)\n }\n a = parseInt(res)\n }\n }else{\n throw _b_.ValueError.$factory('version can only be 1 or 2')\n }\n\n self._random.seed(a)\n gauss_next = null\n}\n\nRandom.setstate = function(state){\n // Restore internal state from object returned by getstate().\n var $ = $B.args('setstate', 2, {self: null, state:null}, ['self', 'state'],\n arguments, {}, null, null),\n self = $.self\n var state = self._random.getstate()\n if(! Array.isArray($.state)){\n throw _b_.TypeError.$factory('state must be a list, not ' +\n $B.class_name($.state))\n }\n if($.state.length < state.length){\n throw _b_.ValueError.$factory(\"need more than \" + $.state.length +\n \" values to unpack\")\n }else if($.state.length > state.length){\n throw _b_.ValueError.$factory(\"too many values to unpack (expected \" +\n state.length + \")\")\n }\n if($.state[0] != 3){\n throw _b_.ValueError.$factory(\"ValueError: state with version \" +\n $.state[0] + \" passed to Random.setstate() of version 3\")\n }\n var second = _b_.list.$factory($.state[1])\n if(second.length !== state[1].length){\n throw _b_.ValueError.$factory('state vector is the wrong size')\n }\n for(var i = 0; i < second.length; i++){\n if(typeof second[i] != 'number'){\n throw _b_.ValueError.$factory('state vector items must be integers')\n }\n }\n self._random.setstate($.state)\n}\n\nRandom.shuffle = function(x, random){\n /*\n x, random = random.random -> shuffle list x in place; return None.\n\n Optional arg random is a 0-argument function returning a random\n float in [0.0, 1.0); by default, the standard random.random.\n */\n\n var $ = $B.args('shuffle', 3, {self: null, x: null, random: null},\n ['self', 'x','random'],\n arguments, {random: null}, null, null),\n self = $.self,\n x = $.x,\n random = $.random\n\n if(random === null){random = self._random}\n\n if(Array.isArray(x)){\n for(var i = x.length - 1; i >= 0;i--){\n var j = Math.floor(random() * (i + 1)),\n temp = x[j]\n x[j] = x[i]\n x[i] = temp\n }\n }else{\n var len = _b_.getattr(x, '__len__')(), temp,\n x_get = _b_.getattr(x, '__getitem__'),\n x_set = _b_.getattr(x, '__setitem__')\n\n for(i = len - 1; i >= 0; i--){\n var j = Math.floor(random() * (i + 1)),\n temp = x_get(j)\n x_set(j, x_get(i))\n x_set(i, temp)\n }\n }\n return _b_.None\n}\n\nRandom.triangular = function(){\n /*\n Triangular distribution.\n\n Continuous distribution bounded by given lower and upper limits,\n and having a given mode value in-between.\n\n http://en.wikipedia.org/wiki/Triangular_distribution\n */\n var $ = $B.args('triangular', 4,\n {self: null, low: null, high: null, mode: null},\n ['self', 'low', 'high', 'mode'],\n arguments, {low: 0, high: 1, mode: null}, null, null),\n low = $.low,\n high = $.high,\n mode = $.mode\n\n var u = $.self._random(),\n c = mode === null ? 0.5 : (mode - low) / (high - low)\n if(u > c){\n u = 1 - u\n c = 1 - c\n var temp = low\n low = high\n high = temp\n }\n return low + (high - low) * Math.pow(u * c, 0.5)\n}\n\nRandom.uniform = function(){\n var $ = $B.args('uniform', 3, {self: null, a: null, b: null},\n ['self', 'a', 'b'], arguments, {}, null, null),\n a = $B.$GetInt($.a),\n b = $B.$GetInt($.b)\n\n return a + (b - a) * $.self._random()\n}\n\nRandom.vonmisesvariate = function(){\n /* Circular data distribution.\n\n mu is the mean angle, expressed in radians between 0 and 2*pi, and\n kappa is the concentration parameter, which must be greater than or\n equal to zero. If kappa is equal to zero, this distribution reduces\n to a uniform random angle over the range 0 to 2*pi.\n\n */\n // mu: mean angle (in radians between 0 and 2*pi)\n // kappa: concentration parameter kappa (>= 0)\n // if kappa = 0 generate uniform random angle\n\n // Based upon an algorithm published in: Fisher, N.I.,\n // \"Statistical Analysis of Circular Data\", Cambridge\n // University Press, 1993.\n\n // Thanks to Magnus Kessler for a correction to the\n // implementation of step 4.\n\n var $ = $B.args('vonmisesvariate', 3,\n {self: null, mu: null, kappa:null}, ['self', 'mu', 'kappa'],\n arguments, {}, null, null),\n self = $.self,\n mu = $.mu,\n kappa = $.kappa,\n TWOPI = 2*Math.PI\n\n if(kappa <= 1e-6){return TWOPI * self._random()}\n\n var s = 0.5 / kappa,\n r = s + Math.sqrt(1.0 + s * s)\n\n while(true){\n var u1 = self._random(),\n z = Math.cos(Math.PI * u1),\n d = z / (r + z),\n u2 = self._random()\n if((u2 < 1.0 - d * d) ||\n (u2 <= (1.0 - d) * Math.exp(d))){\n break\n }\n }\n var q = 1.0 / r,\n f = (q + z) / (1.0 + q * z),\n u3 = self._random()\n if(u3 > 0.5){var theta = (mu + Math.acos(f)) % TWOPI}\n else{var theta = (mu - Math.acos(f)) % TWOPI}\n return theta\n}\n\nRandom.weibullvariate = function(){\n /*Weibull distribution.\n\n alpha is the scale parameter and beta is the shape parameter.\n\n */\n // Jain, pg. 499; bug fix courtesy Bill Arms\n var $ = $B.args(\"weibullvariate\", 3,\n {self: null, alpha: null, beta: null},\n [\"self\", \"alpha\", \"beta\"], arguments, {}, null, null)\n\n var u = 1 - $.self._random()\n return $.alpha * Math.pow(-Math.log(u), 1 / $.beta)\n}\n\n$B.set_func_names(Random, \"random\")\n\nvar $module = Random.$factory()\nfor(var attr in Random){\n $module[attr] = (function(x){\n return function(){return Random[x]($module, ...arguments)}\n })(attr)\n $module[attr].$infos = Random[attr].$infos\n}\n\n$module.Random = Random\n\nvar SystemRandom = $B.make_class(\"SystemRandom\",\n function(){\n return {__class__: SystemRandom}\n }\n)\nSystemRandom.__getattribute__ = function(){\n throw $B.builtins.NotImplementedError.$factory()\n}\n\n$module.SystemRandom = SystemRandom\n\nreturn $module\n\n})(__BRYTHON__)\n\n"], "unicodedata": [".js", "// Implementation of unicodedata\n\nvar $module = (function($B){\n\n var _b_ = $B.builtins\n\n // Load unicode table if not already loaded\n if($B.unicodedb === undefined){\n var xhr = new XMLHttpRequest\n xhr.open(\"GET\",\n $B.brython_path + \"unicode.txt\", false)\n xhr.onreadystatechange = function(){\n if(this.readyState == 4){\n if(this.status == 200){\n $B.unicodedb = this.responseText\n }else{\n console.log(\"Warning - could not \" +\n \"load unicode.txt\")\n }\n }\n }\n xhr.send()\n }\n\n function _info(chr){\n var ord = chr.codePointAt(0),\n hex = ord.toString(16).toUpperCase()\n while(hex.length < 4){hex = \"0\" + hex}\n var re = new RegExp(\"^\" + hex +\";(.+?);(.*?);(.*?);(.*?);(.*?);(.*);(.*);(.*)$\",\n \"m\"),\n search = re.exec($B.unicodedb)\n if(search === null){\n return null\n }else{\n return {\n name: search[1],\n category: search[2],\n combining: search[3],\n bidirectional: search[4],\n decomposition: search[5],\n decimal: search[6],\n digit: search[7],\n numeric: search[8]\n }\n }\n }\n\n function bidirectional(chr){\n var search = _info(chr)\n if(search === null){\n console.log(\"error\", chr, hex)\n throw _b_.KeyError.$factory(chr)\n }\n return search.bidirectional\n }\n\n function category(chr){\n // Returns the general category assigned to the character chr as\n // string.\n if($B.is_unicode_cn(chr.codePointAt(0))){ // in unicode_data.js\n return \"Cn\"\n }\n var search = _info(chr)\n if(search === null){\n console.log(\"error\", chr)\n throw _b_.KeyError.$factory(chr)\n }\n return search.category\n }\n\n function combining(chr){\n // Returns the general category assigned to the character chr as\n // string.\n var search = _info(chr)\n if(search === null){\n console.log(\"error\", chr)\n throw _b_.KeyError.$factory(chr)\n }\n return parseInt(search.combining)\n }\n\n function decimal(chr, _default){\n // Returns the decimal value assigned to the character chr as integer.\n // If no such value is defined, default is returned, or, if not given,\n // ValueError is raised.\n var search = _info(chr)\n if(search === null){\n console.log(\"error\", chr)\n throw _b_.KeyError.$factory(chr)\n }\n return parseInt(search.decimal)\n }\n\n function decomposition(chr, _default){\n // Returns the decimal value assigned to the character chr as integer.\n // If no such value is defined, default is returned, or, if not given,\n // ValueError is raised.\n var search = _info(chr)\n if(search === null){\n console.log(\"error\", chr)\n throw _b_.KeyError.$factory(chr)\n }\n return search.decomposition\n }\n\n function digit(chr, _default){\n // Returns the decimal value assigned to the character chr as integer.\n // If no such value is defined, default is returned, or, if not given,\n // ValueError is raised.\n var search = _info(chr)\n if(search === null){\n console.log(\"error\", chr)\n throw _b_.KeyError.$factory(chr)\n }\n return parseInt(search.digit)\n }\n\n function lookup(name){\n // Look up character by name. If a character with the given name is\n // found, return the corresponding character. If not found, KeyError\n // is raised.\n var re = new RegExp(\"^([0-9A-F]+);\" +\n name + \";(.*)$\", \"m\")\n search = re.exec($B.unicodedb)\n if(search === null){\n throw _b_.KeyError.$factory(\"undefined character name '\" +\n name + \"'\")\n }\n var res = parseInt(search[1], 16)\n return _b_.chr(res)\n }\n\n function name(chr, _default){\n // Returns the name assigned to the character chr as a string. If no\n // name is defined, default is returned, or, if not given, ValueError\n // is raised.\n var search = _info(chr)\n if(search === null){\n if(_default){return _default}\n throw _b_.KeyError.$factory(\"undefined character name '\" +\n chr + \"'\")\n }\n return search.name\n }\n\n function _norm(form, chr){\n var search = _info(chr)\n if(search === null){\n throw _b_.KeyError.$factory(chr)\n }\n switch(form){\n case \"NFC\":\n return chr\n case \"NFD\":\n var decomp = decomposition(chr),\n parts = decomp.split(\" \"),\n res = \"\"\n if(parts[0].startsWith(\"<\")){\n return chr\n }\n parts.forEach(function(part){\n if(! part.startsWith(\"<\")){\n res += _b_.chr(parseInt(part, 16))\n }\n })\n return res\n case \"NFKC\":\n var decomp = decomposition(chr),\n parts = decomp.split(\" \")\n if(parts[0] == \"\"){\n var res = \"\"\n parts.slice(1).forEach(function(part){\n res += _b_.chr(parseInt(part, 16))\n })\n return res\n }\n return chr\n case \"NFKD\":\n var decomp = decomposition(chr),\n parts = decomp.split(\" \")\n if(parts[0] == \"\"){\n var res = \"\"\n parts.slice(1).forEach(function(part){\n res += _b_.chr(parseInt(part, 16))\n })\n return res\n }\n return chr\n\n default:\n throw _b_.ValueError.$factory(\"invalid normalization form\")\n }\n }\n\n function normalize(form, unistr){\n var res = \"\"\n for(var i = 0, len = unistr.length; i < len; i++){\n res += _norm(form, unistr.charAt(i))\n }\n return res\n }\n\n function numeric(chr, _default){\n // Returns the decimal value assigned to the character chr as integer.\n // If no such value is defined, default is returned, or, if not given,\n // ValueError is raised.\n var search = _info(chr)\n if(search === null){\n if(_default){return _default}\n throw _b_.KeyError.$factory(chr)\n }\n return new Number(eval(search.numeric))\n }\n\n var module = {\n bidirectional: bidirectional,\n category: category,\n combining: combining,\n decimal: decimal,\n decomposition: decomposition,\n digit: digit,\n lookup: lookup,\n name: name,\n normalize: normalize,\n numeric: numeric,\n unidata_version: \"11.0.0\"\n }\n module.ucd_3_2_0 = {}\n for(var key in module){\n if(key == \"unidata_version\"){\n module.ucd_3_2_0[key] = '3.2.0'\n }else{\n module.ucd_3_2_0[key] = module[key] // approximation...\n }\n }\n return module\n\n})(__BRYTHON__)"], "_aio": [".js", "// Replacement for asyncio.\n//\n// CPython asyncio can't be implemented for Brython because it relies on\n// blocking function (eg run(), run_until_complete()), and such functions\n// can't be defined in Javascript. It also manages an event loop, and a\n// browser only has its own built-in event loop.\n//\n// This module exposes functions whose result can be \"await\"-ed inside\n// asynchrounous functions defined by \"async def\".\n\nvar $module = (function($B){\n\nvar _b_ = $B.builtins\n\nvar responseType = {\n \"text\": \"text\",\n \"binary\": \"arraybuffer\",\n \"dataURL\": \"arraybuffer\"\n}\n\nfunction handle_kwargs(kw, method){\n var data,\n cache = \"no-cache\",\n format = \"text\",\n headers = {},\n timeout = {}\n for(var key in kw.$string_dict){\n if(key == \"data\"){\n var params = kw.$string_dict[key][0]\n if(typeof params == \"string\"){\n data = params\n }else{\n if(params.__class__ !== _b_.dict){\n throw _b_.TypeError.$factory(\"wrong type for data, \" +\n \"expected dict or str, got \" + $B.class_name(params))\n }\n params = params.$string_dict\n var items = []\n for(var key in params){\n items.push(encodeURIComponent(key) + \"=\" +\n encodeURIComponent(params[key][0]))\n }\n data = items.join(\"&\")\n }\n }else if(key == \"headers\"){\n headers = _b_.dict.$to_obj(kw.$string_dict[key][0])\n }else if(key.startsWith(\"on\")){\n var event = key.substr(2)\n if(event == \"timeout\"){\n timeout.func = kw.$string_dict[key][0]\n }else{\n ajax.bind(self, event, kw.$string_dict[key][0])\n }\n }else if(key == \"timeout\"){\n timeout.seconds = kw.$string_dict[key][0]\n }else if(key == \"cache\"){\n cache = kw.$string_dict[key][0]\n }else if(key == \"format\"){\n format = kw.$string_dict[key][0]\n }\n }\n if(method == \"post\"){\n // For POST requests, set default header\n if(! headers.hasOwnProperty(\"Content-type\")){\n headers[\"Content-Type\"] = \"application/x-www-form-urlencoded\"\n }\n if(data && !headers.hasOwnProperty(\"Content-Length\")){\n headers[\"Content-Length\"] = data.length\n }\n }\n return {\n body: data,\n cache: cache,\n format: format,\n timeout: timeout,\n headers: headers\n }\n}\n\nfunction ajax(){\n var $ = $B.args(\"ajax\", 2, {method: null, url: null},\n [\"method\", \"url\"], arguments, {},\n null, \"kw\"),\n method = $.method.toUpperCase(),\n url = $.url,\n kw = $.kw\n var args = handle_kwargs(kw, \"get\")\n if(! args.cache){\n url = \"?ts\" + (new Date()).getTime() + \"=0\"\n }\n if(args.body && method == \"GET\"){\n url = url + (args.cache ? \"?\" : \"&\") + args.body\n }\n var func = function(){\n return new Promise(function(resolve, reject){\n var xhr = new XMLHttpRequest()\n xhr.open(method, url, true)\n for(key in args.headers){\n xhr.setRequestHeader(key, args.headers[key])\n }\n xhr.format = args.format\n xhr.responseType = responseType[args.format]\n xhr.onreadystatechange = function(){\n if(this.readyState == 4){\n this.__class__ = HTTPRequest\n resolve(this)\n }\n }\n if(method == \"POST\" && args.body){\n xhr.send(args.body)\n }else{\n xhr.send()\n }\n })\n }\n func.$infos = {\n __name__: \"ajax_\" + method\n }\n return {\n __class__: $B.coroutine,\n $args: [url, args],\n $func: func\n }\n}\n\nfunction event(){\n // event(element, *names) is a Promise on the events \"names\" happening on\n // the element. This promise always resolves (never rejects) with the\n // first triggered DOM event.\n var $ = $B.args(\"event\", 1, {element: null},\n [\"element\"], arguments, {}, \"names\", null),\n element = $.element,\n names = $.names\n return new Promise(function(resolve){\n var callbacks = []\n names.forEach(function(name){\n var callback = function(evt){\n // When one of the handled events is triggered, all bindings\n // are removed\n callbacks.forEach(function(items){\n $B.DOMNode.unbind(element, items[0], items[1])\n })\n resolve($B.$DOMEvent(evt))\n }\n callbacks.push([name, callback])\n $B.DOMNode.bind(element, name, callback)\n })\n })\n}\n\nvar HTTPRequest = $B.make_class(\"Request\")\n\nHTTPRequest.data = _b_.property.$factory(function(self){\n if(self.format == \"binary\"){\n var view = new Uint8Array(self.response)\n return _b_.bytes.$factory(Array.from(view))\n }else if(self.format == \"text\"){\n return self.responseText\n }else if(self.format == \"dataURL\"){\n var base64String = btoa(String.fromCharCode.apply(null,\n new Uint8Array(self.response)))\n return \"data:\" + self.getResponseHeader(\"Content-Type\") +\n \";base64,\" + base64String\n }\n})\n\nHTTPRequest.response_headers = _b_.property.$factory(function(self){\n var headers = self.getAllResponseHeaders()\n if(headers === null){return _b_.None}\n var res = $B.empty_dict()\n if(headers.length > 0){\n // Convert the header string into an array\n // of individual headers\n var lines = headers.trim().split(/[\\r\\n]+/)\n // Create a map of header names to values\n lines.forEach(function(line){\n var parts = line.split(': ')\n var header = parts.shift()\n var value = parts.join(': ')\n _b_.dict.$setitem(res, header, value)\n })\n }\n return res\n})\n\nfunction get(){\n return ajax.bind(null, \"GET\").apply(null, arguments)\n}\n\nfunction iscoroutine(f){\n return f.__class__ === $B.coroutine\n}\n\nfunction iscoroutinefunction(f){\n return (f.$infos.__code__.co_flags & 128) != 0\n}\n\nfunction post(){\n return ajax.bind(null, \"POST\").apply(null, arguments)\n}\n\nfunction run(coro){\n var handle_success = function(){\n $B.leave_frame()\n },\n handle_error = function(err){\n // coro.$stack is a snapshot of the frames stack when the async\n // function was called. Restore it to get the correct call tree\n console.log(\"Exception in asynchronous function\")\n err.$stack = coro.$stack.concat([$B.last(err.$stack)])\n $B.handle_error(err)\n }\n\n var $ = $B.args(\"run\", 3, {coro: null, onsuccess: null, onerror: null},\n [\"coro\", \"onsuccess\", \"onerror\"], arguments,\n {onsuccess: handle_success, onerror: handle_error},\n null, null),\n coro = $.coro,\n onsuccess = $.onsuccess,\n onerror = $.onerror\n\n if(onerror !== handle_error){\n function error_func(exc){\n try{\n onerror(exc)\n }catch(err){\n handle_error(err)\n }\n }\n }else{\n error_func = handle_error\n }\n var save_stack = $B.frames_stack.slice()\n $B.coroutine.send(coro).then(onsuccess).catch(error_func)\n $B.frames_stack = save_stack\n return _b_.None\n}\n\nfunction sleep(seconds){\n var func = function(){\n return new Promise(resolve => setTimeout(\n function(){resolve(_b_.None)}, 1000 * seconds))\n }\n func.$infos = {\n __name__: \"sleep\"\n }\n return {\n __class__: $B.coroutine,\n $args: [seconds],\n $func: func\n }\n}\n\nreturn {\n ajax: ajax,\n event: event,\n get: get,\n iscoroutine: iscoroutine,\n iscoroutinefunction: iscoroutinefunction,\n post: post,\n run: run,\n sleep: sleep\n}\n\n})(__BRYTHON__)\n"], "_ajax": [".js", "// ajax\nvar $module = (function($B){\n\neval($B.InjectBuiltins())\nvar $N = $B.builtins.None,\n _b_ = $B.builtins\n\nvar add_to_res = function(res, key, val) {\n if(isinstance(val, list)){\n for (j = 0; j < val.length; j++) {\n add_to_res(res, key, val[j])\n }\n }else if (val instanceof File || val instanceof Blob){\n res.append(key, val)\n }else{res.append(key,str.$factory(val))}\n}\n\nfunction set_timeout(self, timeout){\n if(timeout.seconds !== undefined){\n self.js.$requestTimer = setTimeout(\n function() {\n self.js.abort()\n if(timeout.func){\n timeout.func()\n }\n },\n timeout.seconds * 1000)\n }\n}\n\nfunction _read(req){\n var xhr = req.js,\n res\n if(xhr.responseType == \"json\"){\n return $B.structuredclone2pyobj(xhr.response)\n }\n var abuf = new Uint8Array(xhr.response)\n res = []\n for(var i = 0, len = abuf.length; i < len; i++){\n res.push(abuf[i])\n }\n var b = _b_.bytes.$factory(res)\n\n if(xhr.mode == \"binary\"){\n return b\n }else{\n var encoding = xhr.encoding || \"utf-8\"\n return _b_.bytes.decode(b, encoding)\n }\n}\n\nfunction handle_kwargs(self, kw, method){\n var data,\n encoding,\n headers,\n cache,\n mode = \"text\",\n timeout = {}\n for(var key in kw.$string_dict){\n if(key == \"data\"){\n var params = kw.$string_dict[key][0]\n if(typeof params == \"string\"){\n data = params\n }else if(params.__class__ === _b_.dict){\n params = params.$string_dict\n var items = []\n for(var key in params){\n items.push(encodeURIComponent(key) + \"=\" +\n encodeURIComponent(params[key][0]))\n }\n data = items.join(\"&\")\n }else{\n throw _b_.TypeError.$factory(\"wrong type for data: \" +\n $B.class_name(params))\n }\n }else if(key == \"encoding\"){\n encoding = kw.$string_dict[key][0]\n self.js.encoding = encoding\n }else if(key == \"headers\"){\n headers = kw.$string_dict[key].$string_dict\n for(var key in headers){\n self.js.setRequestHeader(key, headers[key][0])\n }\n }else if(key.startsWith(\"on\")){\n var event = key.substr(2)\n if(event == \"timeout\"){\n timeout.func = kw.$string_dict[key][0]\n }else{\n var f = kw.$string_dict[key][0]\n ajax.bind(self, event, f)\n }\n }else if(key == \"mode\"){\n var mode = kw.$string_dict[key][0]\n if(mode == \"json\"){\n self.js.responseType = \"json\"\n }else{\n self.js.responseType = \"arraybuffer\"\n if(mode != \"text\" && mode != \"binary\"){\n throw _b_.ValueError.$factory(\"invalid mode: \" + mode)\n }\n }\n self.js.mode = mode\n }else if(key == \"timeout\"){\n timeout.seconds = kw.$string_dict[key][0]\n }else if(key == \"cache\"){\n cache = kw.$string_dict[key][0]\n }\n }\n if(encoding && mode != \"text\"){\n throw _b_.ValueError.$factory(\"encoding not supported for mode \" +\n mode)\n }\n if((method == \"post\" || method == \"put\") && ! headers){\n // For POST requests, set default header\n self.js.setRequestHeader(\"Content-type\",\n \"application/x-www-form-urlencoded\")\n }\n return {\n cache: cache,\n data:data,\n encoding: encoding,\n mode: mode,\n timeout: timeout\n }\n}\n\nvar ajax = {\n __class__: _b_.type,\n __mro__: [_b_.object],\n\n __repr__ : function(self){return ''},\n __str__ : function(self){return ''},\n\n $infos: {\n __module__: \"builtins\",\n __name__: \"ajax\"\n },\n\n __getattribute__: function(self, attr){\n if(ajax[attr] !== undefined){\n return function(){\n return ajax[attr].call(null, self, ...arguments)\n }\n }else if(self.js[attr] !== undefined){\n if(typeof self.js[attr] == \"function\"){\n return function(){\n if(attr == \"setRequestHeader\"){\n self.$has_request_header = true\n }else if(attr == \"open\"){\n self.$method = arguments[0]\n }\n return self.js[attr](...arguments)\n }\n }else{\n return self.js[attr]\n }\n }else if(attr == \"text\"){\n return self.js.responseText\n }else if(attr == \"xml\"){\n return self.js.responseXML\n }\n },\n\n\n bind: function(self, evt, func){\n // req.bind(evt,func) is the same as req.onevt = func\n self.js['on' + evt] = function(){\n try{\n return func.apply(null, arguments)\n }catch(err){\n if(err.__class__ !== undefined){\n var msg = _b_.getattr(err, 'info') +\n '\\n' + err.__class__.$infos.__name__\n if(err.args){msg += ': ' + err.args[0]}\n try{getattr($B.stderr, \"write\")(msg)}\n catch(err){console.log(msg)}\n }else{\n try{getattr($B.stderr, \"write\")(err)}\n catch(err1){console.log(err)}\n }\n }\n }\n return $N\n },\n\n send: function(self, params){\n // params can be Python dictionary or string\n var res = ''\n if(!params){\n self.js.send()\n return $N\n }else if(isinstance(params, str)){\n res = params\n }else if(isinstance(params, dict)){\n if(self.headers['content-type'] == 'multipart/form-data'){\n // The FormData object serializes the data in the 'multipart/form-data'\n // content-type so we may as well override that header if it was set\n // by the user.\n res = new FormData()\n var items = _b_.list.$factory(_b_.dict.items(params))\n for(var i = 0, len = items.length; i < len; i++){\n add_to_res(res, str.$factory(items[i][0]), items[i][1])\n }\n }else{\n if(self.$method && self.$method.toUpperCase() == \"POST\" &&\n ! self.$has_request_header){\n self.js.setRequestHeader(\"Content-Type\",\n \"application/x-www-form-urlencoded\")\n }\n var items = _b_.list.$factory(_b_.dict.items(params))\n for(var i = 0, len = items.length; i < len; i++){\n var key = encodeURIComponent(str.$factory(items[i][0]));\n if(isinstance(items[i][1], list)){\n for (j = 0; j < items[i][1].length; j++) {\n res += key +'=' +\n encodeURIComponent(str.$factory(items[i][1][j])) + '&'\n }\n }else{\n res += key + '=' +\n encodeURIComponent(str.$factory(items[i][1])) + '&'\n }\n }\n res = res.substr(0, res.length - 1)\n }\n }else{\n throw _b_.TypeError.$factory(\n \"send() argument must be string or dictionary, not '\" +\n str.$factory(params.__class__) + \"'\")\n }\n self.js.send(res)\n return $N\n },\n\n set_header: function(self,key,value){\n self.js.setRequestHeader(key,value)\n self.headers[key.toLowerCase()] = value.toLowerCase()\n },\n\n set_timeout: function(self, seconds, func){\n self.js.$requestTimer = setTimeout(\n function() {self.js.abort();func()},\n seconds * 1000)\n }\n\n}\n\najax.$factory = function(){\n\n if(window.XMLHttpRequest){// code for IE7+, Firefox, Chrome, Opera, Safari\n var xmlhttp = new XMLHttpRequest()\n }else{// code for IE6, IE5\n var xmlhttp = new ActiveXObject(\"Microsoft.XMLHTTP\")\n }\n xmlhttp.onreadystatechange = function(){\n // here, \"this\" refers to xmlhttp\n var state = this.readyState\n if(this.responseType == \"\" || this.responseType == \"text\"){\n res.js.text = this.responseText\n }\n var timer = this.$requestTimer\n if(state == 0 && this.onuninitialized){this.onuninitialized(res)}\n else if(state == 1 && this.onloading){this.onloading(res)}\n else if(state == 2 && this.onloaded){this.onloaded(res)}\n else if(state == 3 && this.oninteractive){this.oninteractive(res)}\n else if(state == 4 && this.oncomplete){\n if(timer !== null){window.clearTimeout(timer)}\n this.oncomplete(res)\n }\n }\n var res = {\n __class__: ajax,\n js: xmlhttp,\n headers: {}\n }\n return res\n}\n\nfunction _request_without_body(method){\n var $ = $B.args(method, 3, {method: null, url: null, blocking: null},\n [\"method\", \"url\", \"blocking\"], arguments, {blocking: false},\n null, \"kw\"),\n method = $.method,\n url = $.url,\n async = !$.blocking,\n kw = $.kw\n var self = ajax.$factory(),\n items = handle_kwargs(self, kw, method),\n qs = items.data,\n timeout = items.timeout\n set_timeout(self, timeout)\n if(qs){\n url += \"?\" + qs\n }\n if(! (items.cache === true)){\n url += (qs ? \"&\" : \"?\") + (new Date()).getTime()\n }\n // Add function read() to return str or bytes according to mode\n self.js.read = function(){\n return _read(self)\n }\n self.js.open(method.toUpperCase(), url, async)\n self.js.send()\n}\n\nfunction _request_with_body(method){\n var $ = $B.args(method, 3, {method: null, url: null, blocking: null},\n [\"method\", \"url\", \"blocking\"], arguments, {blocking: false},\n null, \"kw\"),\n method = $.method,\n url = $.url,\n async = !$.blocking,\n kw = $.kw\n\n var self = ajax.$factory()\n self.js.open(method.toUpperCase(), url, async)\n var items = handle_kwargs(self, kw, method),\n data = items.data,\n timeout = items.timeout\n set_timeout(self, timeout)\n // Add function read() to return str or bytes according to mode\n self.js.read = function(){\n return _read(self)\n }\n self.js.send(data)\n}\n\nfunction _delete(){\n _request_without_body.call(null, \"delete\", ...arguments)\n}\n\nfunction get(){\n _request_without_body.call(null, \"get\", ...arguments)\n}\n\nfunction head(){\n _request_without_body.call(null, \"head\", ...arguments)\n}\n\nfunction options(){\n _request_without_body.call(null, \"options\", ...arguments)\n}\n\nfunction post(){\n _request_with_body.call(null, \"post\", ...arguments)\n}\n\nfunction put(){\n _request_with_body.call(null, \"put\", ...arguments)\n}\n\nfunction file_upload(){\n // ajax.file_upload(url, file, method=\"POST\", **callbacks)\n var $ = $B.args(\"file_upload\", 2, {url: null, \"file\": file},\n [\"url\", \"file\"], arguments, {}, null, \"kw\"),\n url = $.url,\n file = $.file,\n kw = $.kw\n\n var self = ajax.$factory(),\n method = 'POST',\n field_name = 'filetosave'\n\n if(kw.$string_dict.method !== undefined){\n method = kw.$string_dict.method[0]\n }\n\n if(kw.$string_dict.field_name !== undefined){\n field_name = kw.$string_dict.field_name[0]\n }\n\n var formdata = new FormData()\n formdata.append(field_name, file, file.name)\n\n self.js.open(method, url, True)\n self.js.send(formdata)\n\n for(key in kw.$string_dict){\n if(key.startsWith(\"on\")){\n ajax.bind(self, key.substr(2), kw.$string_dict[key][0])\n }\n }\n}\n\n$B.set_func_names(ajax)\n\nreturn {\n ajax: ajax,\n Ajax: ajax,\n delete: _delete,\n file_upload: file_upload,\n get: get,\n head: head,\n options: options,\n post: post,\n put: put\n}\n\n})(__BRYTHON__)\n"], "_base64": [".js", "var $module=(function($B){\n\nvar _b_ = $B.builtins,\n _keyStr = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\"\n\nfunction make_alphabet(altchars){\n var alphabet = _keyStr\n if(altchars !== undefined && altchars !== _b_.None){\n // altchars is an instance of Python bytes\n var source = altchars.source\n alphabet = alphabet.substr(0,alphabet.length-3) +\n _b_.chr(source[0]) + _b_.chr(source[1]) + '='\n }\n return alphabet\n}\n\nvar Base64 = {\n error: function(){return 'binascii_error'},\n\n encode: function(bytes, altchars){\n\n var input = bytes.source,\n output = \"\",\n chr1, chr2, chr3, enc1, enc2, enc3, enc4\n var i = 0\n\n var alphabet = make_alphabet(altchars)\n\n while(i < input.length){\n\n chr1 = input[i++]\n chr2 = input[i++]\n chr3 = input[i++]\n\n enc1 = chr1 >> 2\n enc2 = ((chr1 & 3) << 4) | (chr2 >> 4)\n enc3 = ((chr2 & 15) << 2) | (chr3 >> 6)\n enc4 = chr3 & 63\n\n if(isNaN(chr2)){\n enc3 = enc4 = 64\n }else if(isNaN(chr3)){\n enc4 = 64\n }\n\n output = output + alphabet.charAt(enc1) +\n alphabet.charAt(enc2) +\n alphabet.charAt(enc3) +\n alphabet.charAt(enc4)\n\n }\n return _b_.bytes.$factory(output, 'utf-8', 'strict')\n },\n\n\n decode: function(bytes, altchars, validate){\n var output = [],\n chr1, chr2, chr3,\n enc1, enc2, enc3, enc4\n\n var alphabet = make_alphabet(altchars)\n\n var input = bytes.source\n\n // If validate is set, check that all characters in input\n // are in the alphabet\n var _input = ''\n var padding = 0\n for(var i = 0, len = input.length; i < len; i++){\n var car = String.fromCharCode(input[i])\n var char_num = alphabet.indexOf(car)\n if(char_num == -1){\n if(validate){throw Base64.error(\"Non-base64 digit found: \" +\n car)}\n }else if(char_num == 64 && i < input.length - 2){\n if(validate){throw Base64.error(\"Non-base64 digit found: \" +\n car)}\n }else if(char_num == 64 && i >= input.length - 2){\n padding++\n _input += car\n }else{\n _input += car\n }\n }\n input = _input\n if(_input.length == padding){return _b_.bytes.$factory([])}\n if( _input.length % 4 > 0){throw Base64.error(\"Incorrect padding\")}\n\n var i = 0\n while(i < input.length){\n\n enc1 = alphabet.indexOf(input.charAt(i++))\n enc2 = alphabet.indexOf(input.charAt(i++))\n enc3 = alphabet.indexOf(input.charAt(i++))\n enc4 = alphabet.indexOf(input.charAt(i++))\n\n chr1 = (enc1 << 2) | (enc2 >> 4)\n chr2 = ((enc2 & 15) << 4) | (enc3 >> 2)\n chr3 = ((enc3 & 3) << 6) | enc4\n\n output.push(chr1)\n\n if(enc3 != 64){output.push(chr2)}\n if(enc4 != 64){output.push(chr3)}\n\n }\n // return Python bytes\n return _b_.bytes.$factory(output, 'utf-8', 'strict')\n\n },\n\n _utf8_encode: function(string) {\n string = string.replace(/\\r\\n/g, \"\\n\")\n var utftext = \"\";\n\n for(var n = 0; n < string.length; n++){\n\n var c = string.charCodeAt(n)\n\n if(c < 128){\n utftext += String.fromCharCode(c)\n }else if((c > 127) && (c < 2048)){\n utftext += String.fromCharCode((c >> 6) | 192)\n utftext += String.fromCharCode((c & 63) | 128)\n }else{\n utftext += String.fromCharCode((c >> 12) | 224)\n utftext += String.fromCharCode(((c >> 6) & 63) | 128)\n utftext += String.fromCharCode((c & 63) | 128)\n }\n\n }\n\n return utftext\n },\n\n _utf8_decode: function(utftext) {\n var string = \"\",\n i = 0,\n c = c1 = c2 = 0\n\n while(i < utftext.length){\n\n c = utftext.charCodeAt(i)\n\n if(c < 128){\n string += String.fromCharCode(c)\n i++\n }else if((c > 191) && (c < 224)){\n c2 = utftext.charCodeAt(i + 1)\n string += String.fromCharCode(((c & 31) << 6) | (c2 & 63))\n i += 2\n }else{\n c2 = utftext.charCodeAt(i + 1)\n c3 = utftext.charCodeAt(i + 2)\n string += String.fromCharCode(\n ((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63))\n i += 3\n }\n\n }\n\n return string\n }\n\n}\n\nreturn {Base64:Base64}\n}\n\n)(__BRYTHON__)"], "_binascii": [".js", "var $module=(function($B){\n\nvar _b_ = $B.builtins,\n _keyStr = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\"\n\nvar error = $B.make_class(\"error\", _b_.Exception.$factory)\nerror.__bases__ = [_b_.Exception]\n$B.set_func_names(error, \"binascii\")\n\nfunction decode(bytes, altchars, validate){\n var output = [],\n chr1, chr2, chr3,\n enc1, enc2, enc3, enc4\n\n var alphabet = make_alphabet(altchars)\n\n var input = bytes.source\n\n // If validate is set, check that all characters in input\n // are in the alphabet\n var _input = ''\n var padding = 0\n for(var i = 0, len = input.length; i < len; i++){\n var car = String.fromCharCode(input[i])\n var char_num = alphabet.indexOf(car)\n if(char_num == -1){\n if(validate){throw error.$factory(\"Non-base64 digit found: \" +\n car)}\n }else if(char_num == 64 && i < input.length - 2){\n if(validate){throw error.$factory(\"Non-base64 digit found: \" +\n car)}\n }else if(char_num == 64 && i >= input.length - 2){\n padding++\n _input += car\n }else{\n _input += car\n }\n }\n input = _input\n if(_input.length == padding){return _b_.bytes.$factory([])}\n if( _input.length % 4 > 0){throw error.$factory(\"Incorrect padding\")}\n\n var i = 0\n while(i < input.length){\n\n enc1 = alphabet.indexOf(input.charAt(i++))\n enc2 = alphabet.indexOf(input.charAt(i++))\n enc3 = alphabet.indexOf(input.charAt(i++))\n enc4 = alphabet.indexOf(input.charAt(i++))\n\n chr1 = (enc1 << 2) | (enc2 >> 4)\n chr2 = ((enc2 & 15) << 4) | (enc3 >> 2)\n chr3 = ((enc3 & 3) << 6) | enc4\n\n output.push(chr1)\n\n if(enc3 != 64){output.push(chr2)}\n if(enc4 != 64){output.push(chr3)}\n\n }\n // return Python bytes\n return _b_.bytes.$factory(output, 'utf-8', 'strict')\n}\n\n\nvar hex2int = {},\n hex = '0123456789abcdef'\nfor(var i = 0; i < hex.length; i++){\n hex2int[hex[i]] = i\n hex2int[hex[i].toUpperCase()] = i\n}\n\nfunction make_alphabet(altchars){\n var alphabet = _keyStr\n if(altchars !== undefined && altchars !== _b_.None){\n // altchars is an instance of Python bytes\n var source = altchars.source\n alphabet = alphabet.substr(0,alphabet.length-3) +\n _b_.chr(source[0]) + _b_.chr(source[1]) + '='\n }\n return alphabet\n}\n\nvar module = {\n a2b_base64: function(){\n var $ = $B.args(\"a2b_base64\", 1, {s: null}, ['s'],\n arguments, {}, null, null)\n return decode(_b_.str.encode($.s, 'ascii'))\n },\n a2b_hex: function(){\n var $ = $B.args(\"a2b_hex\", 1, {s: null}, ['s'],\n arguments, {}, null, null),\n s = $.s\n if(_b_.isinstance(s, _b_.bytes)){\n s = _b_.bytes.decode(s, 'ascii')\n }\n if(typeof s !== \"string\"){\n throw _b_.TypeError.$factory(\"argument should be bytes, \" +\n \"buffer or ASCII string, not '\" + $B.class_name(s) + \"'\")\n }\n \n var len = s.length\n if(len % 2 == 1){\n throw _b_.TypeError.$factory('Odd-length string')\n }\n \n var res = []\n for(var i = 0; i < len; i += 2){\n res.push((hex2int[s.charAt(i)] << 4) + hex2int[s.charAt(i + 1)])\n }\n return _b_.bytes.$factory(res)\n },\n b2a_base64: function(){\n var $ = $B.args(\"b2a_base64\", 1, {data: null}, ['data'],\n arguments, {}, null, \"kw\")\n var newline = false\n if($.kw && $.kw.$string_dict.newline){\n newline = $.kw.$string_dict.newline[0]\n }\n\n var string = $B.to_bytes($.data),\n res = btoa(String.fromCharCode.apply(null, string))\n if(newline){res += \"\\n\"}\n return _b_.bytes.$factory(res, \"ascii\")\n },\n b2a_hex: function(obj){\n var string = $B.to_bytes(obj),\n res = []\n function conv(c){\n if(c > 9){\n c = c + 'a'.charCodeAt(0) - 10\n }else{\n c = c + '0'.charCodeAt(0)\n }\n return c\n }\n string.forEach(function(char){\n res.push(conv((char >> 4) & 0xf))\n res.push(conv(char & 0xf))\n })\n return _b_.bytes.$factory(res, \"ascii\")\n },\n b2a_uu: function(obj){\n var string = $B.to_bytes(obj)\n var len = string.length,\n res = String.fromCharCode((0x20 + len) & 0x3F)\n while(string.length > 0){\n var s = string.slice(0, 3)\n while(s.length < 3){s.push(String.fromCharCode(0))}\n var A = s[0],\n B = s[1],\n C = s[2]\n var a = (A >> 2) & 0x3F,\n b = ((A << 4) | ((B >> 4) & 0xF)) & 0x3F,\n c = (((B << 2) | ((C >> 6) & 0x3)) & 0x3F),\n d = C & 0x3F\n res += String.fromCharCode(0x20 + a, 0x20 + b, 0x20 + c, 0x20 + d)\n string = string.slice(3)\n }\n return _b_.bytes.$factory(res + \"\\n\", \"ascii\")\n },\n error: error\n}\n\nmodule.hexlify = module.b2a_hex\nmodule.unhexlify = module.a2b_hex\n\nreturn module\n}\n)(__BRYTHON__)"], "_io_classes": [".js", "var _b_ = __BRYTHON__.builtins\n\nfunction get_self(name, args){\n return $B.args(name, 1, {self: null}, [\"self\"], args, {}, null, null).self\n}\n\nvar _IOBase = $B.make_class(\"_IOBase\")\n_IOBase.__mro__ = [_b_.object]\n\n_IOBase.close = function(){\n get_self(\"close\", arguments).__closed = true\n}\n\n_IOBase.flush = function(){\n get_self(\"flush\", arguments)\n return _b_.None\n}\n\n// Base class for binary streams that support some kind of buffering.\nvar _BufferedIOBase = $B.make_class(\"_BufferedIOBase\")\n_BufferedIOBase.__mro__ = [_IOBase, _b_.object]\n\n// Base class for raw binary I/O.\nvar _RawIOBase = $B.make_class(\"_RawIOBase\")\n\n_RawIOBase.__mro__ = [_IOBase, _b_.object]\n\n_RawIOBase.read = function(){\n var $ = $B.args(\"read\", 2, {self: null, size: null}, [\"self\", \"size\"],\n arguments, {size: -1}, null, null),\n self = $.self,\n size = $.size,\n res\n self.$pos = self.$pos || 0\n if(size == -1){\n if(self.$pos == 0){\n res = self.$content\n }else{\n res = _b_.bytes.$factory(self.$content.source.slice(self.$pos))\n }\n self.$pos = self.$content.source.length - 1\n }else{\n res = _b_.bytes.$factory(self.$content.source.slice(self.$pos, size))\n self.$pos += size\n }\n return res\n}\n\n_RawIOBase.readall = function(){\n return _RawIOBase.read(get_self(\"readall\", arguments))\n}\n\n// Base class for text streams.\n_TextIOBase = $B.make_class(\"_TextIOBase\")\n_TextIOBase.__mro__ = [_IOBase, _b_.object]\n\nvar StringIO = $B.make_class(\"StringIO\",\n function(){\n var $ = $B.args(\"StringIO\", 2, {value: null, newline: null},\n [\"value\", \"newline\"], arguments, {value: '', newline: \"\\n\"},\n null, null)\n return {\n __class__: StringIO,\n $counter: 0,\n $string: $.value\n }\n }\n)\nStringIO.__mro__ = [$B.Reader, _b_.object]\n\nStringIO.getvalue = function(){\n var $ = $B.args(\"getvalue\", 1, {self: null},\n [\"self\"], arguments, {}, null, null)\n return $.self.$string\n}\n\nStringIO.write = function(){\n var $ = $B.args(\"write\", 2, {self: null, data: null},\n [\"self\", \"data\"], arguments, {}, null, null)\n $.self.$string += $.data\n $.self.$counter += $.data.length\n return _b_.None\n}\n$B.set_func_names(StringIO, \"_io\")\n\nvar BytesIO = $B.make_class(\"BytesIO\",\n function(){\n var $ = $B.args(\"BytesIO\", 1, {value: null},\n [\"value\"], arguments, {value: _b_.bytes.$factory()},\n null, null)\n return {\n __class__: BytesIO,\n $binary: true,\n $bytes: $.value,\n $counter: 0\n }\n }\n)\nBytesIO.__mro__ = [$B.Reader, _b_.object]\n\nBytesIO.getbuffer = function(){\n var self = get_self(\"getbuffer\", arguments)\n return self.$bytes\n}\n\nBytesIO.getvalue = function(){\n var self = get_self(\"getvalue\", arguments)\n return self.$bytes\n}\n\nBytesIO.write = function(){\n var $ = $B.args(\"write\", 2, {self: null, data: null},\n [\"self\", \"data\"], arguments, {}, null, null)\n $.self.$bytes.source = $.self.$bytes.source.concat(\n $.data.source)\n $.self.$counter += $.data.source.length\n return _b_.None\n}\n$B.set_func_names(BytesIO, \"_io\")\n\nvar $module = (function($B){\n return {\n _BufferedIOBase: _BufferedIOBase,\n _IOBase: _IOBase,\n _RawIOBase: _RawIOBase,\n _TextIOBase: $B.make_class(\"_TextIOBase\",\n function(){\n return \"fileio\"\n }\n ),\n BytesIO: BytesIO,\n FileIO: $B.make_class(\"_TextIOBase\",\n function(){\n return \"fileio\"\n }\n ),\n StringIO: StringIO,\n BufferedReader: $B.BufferedReader,\n BufferedWriter: $B.make_class(\"_TextIOBase\",\n function(){\n return \"fileio\"\n }\n ),\n BufferedRWPair: $B.make_class(\"_TextIOBase\",\n function(){\n return \"fileio\"\n }\n ),\n BufferedRandom: $B.make_class(\"_TextIOBase\",\n function(){\n return \"fileio\"\n }\n ),\n IncrementalNewlineDecoder: $B.make_class(\"_TextIOBase\",\n function(){\n return \"fileio\"\n }\n ),\n TextIOWrapper: $B.TextIOWrapper\n }\n})(__BRYTHON__)\n$module._IOBase.__doc__ = \"_IOBase\""], "_json": [".js", "var $module=(function($B){\n\nvar _b_ = $B.builtins\n\nfunction simple(obj){\n switch(typeof obj){\n case 'string':\n case 'number':\n case 'boolean':\n return true\n }\n if(obj instanceof Number ||\n Array.isArray(obj) ||\n _b_.isinstance(obj, [_b_.list, _b_.tuple, _b_.dict])){\n return true\n }\n return false\n}\n\nfunction to_json(obj, level){\n var $defaults = {skipkeys:_b_.False, ensure_ascii:_b_.True,\n check_circular:_b_.True, allow_nan:_b_.True, cls:_b_.None,\n indent:_b_.None, separators:_b_.None, \"default\":_b_.None,\n sort_keys:_b_.False},\n $ = $B.args(\"to_json\", 2, {obj: null, level: null}, ['obj', 'level'],\n arguments, {level: 1}, null, \"kw\"),\n kw = $.kw.$string_dict\n\n for(key in $defaults){\n if(kw[key] === undefined){\n kw[key] = $defaults[key]\n }else{\n kw[key] = kw[key][0]\n }\n }\n\n var indent = kw.indent,\n ensure_ascii = kw.ensure_ascii,\n separators = kw.separators === _b_.None ?\n kw.indent === _b_.None ? [', ', ': '] : [',', ': '] :\n kw.separators,\n skipkeys = kw.skipkeys,\n $$default = kw.default,\n sort_keys = kw.sort_keys,\n allow_nan = kw.allow_nan,\n check_circular = kw.check_circular\n var item_separator = separators[0],\n key_separator = separators[1]\n if(indent !== _b_.None){\n var indent_str\n if(typeof indent == \"string\"){\n indent_str = indent\n }else if(typeof indent == \"number\" && indent >= 1){\n indent_str = \" \".repeat(indent)\n }else{\n throw _b_.ValueError.$factory(\"invalid indent: \" +\n _b_.str.$factory(indent))\n }\n }\n var kwarg = {$nat: \"kw\", kw: {}}\n for(var key in kw){\n kwarg.kw[key] = kw[key]\n }\n switch(typeof obj){\n case 'string':\n var res = JSON.stringify(obj)\n if(ensure_ascii){\n var escaped = ''\n for(var i = 0, len = res.length; i < len; i++){\n var u = res.codePointAt(i)\n if(u > 127){\n u = u.toString(16)\n while(u.length < 4){\n u = \"0\" + u\n }\n escaped += '\\\\u' + u\n }else{\n escaped += res.charAt(i)\n }\n }\n return escaped\n }\n return res\n case 'boolean':\n return obj.toString()\n case 'number':\n if([Infinity, -Infinity].indexOf(obj) > -1 ||\n isNaN(obj)){\n if(! allow_nan){\n throw _b_.ValueError.$factory(\n 'Out of range float values are not JSON compliant')\n }\n }\n return obj.toString()\n }\n if(_b_.isinstance(obj, _b_.list)){\n var res = []\n var sep = item_separator,\n first = '[',\n last = ']'\n if(indent !== _b_.None){\n sep += \"\\n\" + indent_str.repeat(level)\n first = '[' + '\\n' + indent_str.repeat(level)\n last = '\\n' + indent_str.repeat(level - 1) + ']'\n level++\n }\n for(var i = 0, len = obj.length; i < len; i++){\n res.push(to_json(obj[i], level, kwarg))\n }\n return first + res.join(sep) + last\n }else if(obj instanceof Number){\n return obj.valueOf()\n }else if(obj === _b_.None){\n return \"null\"\n }else if(_b_.isinstance(obj, _b_.dict)){\n var res = [],\n items = $B.dict_to_list(obj)\n if(sort_keys){\n // Sort keys by alphabetical order\n items.sort()\n }\n var sep = item_separator,\n first = '{',\n last = '}'\n if(indent !== _b_.None){\n sep += \"\\n\" + indent_str.repeat(level)\n first = '{' + '\\n' + indent_str.repeat(level)\n last = '\\n' + indent_str.repeat(level - 1) + '}'\n level++\n }\n for(var i = 0, len = items.length; i < len; i++){\n var item = items[i]\n if(! simple(item[0])){\n if(! skipkeys){\n throw _b_.TypeError.$factory(\"keys must be str, int, \" +\n \"float, bool or None, not \" + $B.class_name(obj))\n }\n }else{\n // In the result, key must be a string\n var key = _b_.str.$factory(item[0])\n // Check circular reference\n if(check_circular && $B.repr.enter(item[1])){\n throw _b_.ValueError.$factory(\"Circular reference detected\")\n }\n res.push(\n [to_json(key, level, kwarg), to_json(item[1], level, kwarg)].\n join(key_separator))\n if(check_circular){\n $B.repr.leave(item[1])\n }\n }\n }\n return first + res.join(sep) + last\n }\n // For other types, use function default if provided\n if($$default == _b_.None){\n throw _b_.TypeError.$factory(\"Object of type \" + $B.class_name(obj) +\n \" is not JSON serializable\")\n }else{\n return to_json($B.$call($$default)(obj), level, kwarg)\n }\n}\n\nfunction from_json(s){\n var $defaults = {cls: _b_.None, object_hook: _b_.None,\n parse_float: _b_.None, parse_int: _b_.None,\n parse_constant: _b_.None, object_pairs_hook: _b_.None},\n $ = $B.args(\"from_json\", 1, {s: null}, ['s'], arguments, {},\n null, \"kw\"),\n kw = $.kw.$string_dict\n if(Object.keys(kw).length == 0){\n // default\n return $B.structuredclone2pyobj(JSON.parse(s))\n }\n for(key in $defaults){\n if(kw[key] === undefined){\n kw[key] = $defaults[key]\n }else{\n kw[key] = kw[key][0]\n }\n }\n\n function reviver(key, value){\n if(typeof value == \"number\"){\n if(Number.isInteger(value) && kw.parse_int !== _b_.None){\n return $B.$call(kw.parse_int)(value.toString())\n }else if(! Number.isInteger(value) && kw.parse_float !== _b_.None){\n return $B.$call(kw.parse_float)(value.toString())\n }else if((value === Infinity || value === -Infinity) &&\n kw.parse_constant !== _b_.None){\n return $B.$call(kw.parse_constant)(value)\n }else{\n return value\n }\n }else if(isNaN(value) && kw.parse_constant !== _b_.None){\n return $B.$call(kw.parse_constant)(value)\n }else if(typeof value == \"object\" && !Array.isArray(value) &&\n (kw.object_hook !== _b_.None ||\n kw.object_pairs_hook !== _b_.None)){\n // Apply Python function object_hook to the Python dictionary\n // built from the Javascript object \"value\"\n var py_dict = $B.structuredclone2pyobj(value)\n if(kw.object_pairs_hook === _b_.None){\n var res = $B.$call(kw.object_hook)(py_dict)\n }else{\n var items = $B.dict_to_list(py_dict),\n res = $B.$call(kw.object_pairs_hook)(items)\n }\n // Transform the result of the Python function to a Javascript\n // object\n return $B.pyobj2structuredclone(res)\n }else{\n return value\n }\n }\n\n return $B.structuredclone2pyobj(JSON.parse(s, reviver))\n}\n\nreturn {\n dumps: function(){\n return _b_.str.$factory(to_json.apply(null, arguments))\n },\n loads: from_json\n}\n\n})(__BRYTHON__)"], "_jsre": [".js", "var $module = (function($B){\n\n var _b_ = $B.builtins\n var $s = []\n for(var $b in _b_) $s.push('var ' + $b +'=_b_[\"' + $b + '\"]')\n eval($s.join(';'))\n\n var MatchObject = $B.make_class(\"Match\",\n function(jsmatch, string, pattern){\n return {\n __class__: MatchObject,\n jsmatch: jsmatch,\n string: string\n }\n }\n )\n MatchObject.item = function(self, rank){\n return self.jsmatch[rank]\n }\n MatchObject.group = function(self){\n var res = []\n for(var i = 0, _len_i = arguments.length; i < _len_i; i++){\n if(self.jsmatch[arguments[i]] === undefined){res.push(None)}\n else{res.push(self.jsmatch[arguments[i]])}\n }\n if(arguments.length == 1){return res[0]}\n return tuple.$factory(res)\n }\n MatchObject.groups = function(self, _default){\n if(_default===undefined){_default=None}\n var res = []\n for(var i = 1, _len_i = self.length; i < _len_i; i++){\n if(self.jsmatch[i] === undefined){res.push(_default)}\n else{res.push(self.jsmatch[i])}\n }\n return tuple.$factory(res)\n }\n MatchObject.start = function(self){\n return self.index\n }\n MatchObject.end = function(self){\n return self.length - self.index\n }\n\n $B.set_func_names(MatchObject, '_jsre')\n\n var obj = {__class__: $module,\n __str__: function(){return \"\"}\n }\n obj.A = obj.ASCII = 256\n obj.I = obj.IGNORECASE = 2 // 'i'\n obj.L = obj.LOCALE = 4\n obj.M = obj.MULTILINE = 8 // 'm'\n obj.S = obj.DOTALL = 16\n obj.U = obj.UNICODE = 32\n obj.X = obj.VERBOSE = 64\n obj._is_valid = function(pattern) {\n if ($B.$options.re == 'pyre'){return false} //force use of python's re module\n if ($B.$options.re == 'jsre'){return true} //force use of brythons re module\n // FIXME: Improve\n\n if(! isinstance(pattern, str)){\n // this is probably a SRE_PATTERN, so return false, and let\n // python's re module handle this.\n return false\n }\n var is_valid = false\n try{\n new RegExp(pattern)\n is_valid = true\n }\n catch(e){}\n if(! is_valid){return false} //if js won't parse the pattern return false\n\n // using reference http://www.regular-expressions.info/\n // to compare python re and javascript regex libraries\n\n // look for things javascript does not support\n // check for name capturing group\n var mylist = ['?P=', '?P<', '(?#', '(?<=', '(? -1) return false\n }\n\n var re_list=['\\{,\\d+\\}']\n for(var i=0, _len_i = re_list.length; i < _len_i; i++) {\n var _re = new RegExp(re_list[i])\n if (_re.test(pattern)){return false}\n }\n\n // it looks like the pattern has passed all our tests so lets assume\n // javascript can handle this pattern.\n return true\n }\n var $SRE_PatternDict = {\n __class__:_b_.type,\n $infos:{\n __name__:'SRE_Pattern'\n }\n }\n $SRE_PatternDict.__mro__ = [object]\n $SRE_PatternDict.findall = function(self, string){\n return obj.findall(self.pattern, string, self.flags)\n }\n $SRE_PatternDict.finditer = function(self, string){\n return obj.finditer(self.pattern, string, self.flags)\n }\n $SRE_PatternDict.match = function(self, string){\n return obj.match(self.pattern, string, self.flags)\n }\n $SRE_PatternDict.search = function(self, string){\n return obj.search(self.pattern, string, self.flags)\n }\n $SRE_PatternDict.sub = function(self,repl,string){\n return obj.sub(self.pattern,repl,string,self.flags)\n }\n $B.set_func_names($SRE_PatternDict, \"_jsre\")\n // TODO: groups\n // TODO: groupindex\n function normflags(flags){\n return ((flags & obj.I)? 'i' : '') + ((flags & obj.M)? 'm' : '');\n }\n // TODO: fullmatch()\n // TODO: split()\n // TODO: subn()\n obj.compile = function(pattern, flags){\n return {\n __class__: $SRE_PatternDict,\n pattern: pattern,\n flags: normflags(flags)\n }\n }\n obj.escape = function(string){\n // Escape all the characters in pattern except ASCII letters, numbers\n // and '_'. This is useful if you want to match an arbitrary literal\n // string that may have regular expression metacharacters in it.\n var res = ''\n var ok = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_'\n for(var i = 0, _len_i = string.length; i < _len_i; i++){\n if(ok.search(string.charAt(i))>-1){res += string.charAt(i)}\n }\n return res\n }\n obj.findall = function(pattern, string, flags){\n var $ns=$B.args('re.findall', 2,\n {pattern:null, string:null}, ['pattern', 'string'],\n arguments,{}, 'args', 'kw') ,\n args = $ns['args'] ,\n _flags = 0;\n if(args.length>0){var flags = args[0]}\n else{var _flags = getattr($ns['kw'], 'get')('flags', 0)}\n\n var flags = normflags()\n flags += 'gm'\n var jsp = new RegExp(pattern,flags),\n jsmatch = string.match(jsp)\n if(jsmatch === null){return []}\n return jsmatch\n }\n obj.finditer = function(pattern, string, flags){\n var $ns=$B.args('re.finditer', 2,\n {pattern:null, string:null}, ['pattern', 'string'],\n arguments,{},'args','kw'),\n args = $ns['args'],\n _flags = 0;\n if(args.length>0){var flags=args[0]}\n else{var _flags = getattr($ns['kw'], 'get')('flags', 0)}\n\n var flags = normflags()\n flags += 'gm'\n var jsp = new RegExp(pattern, flags),\n jsmatch = string.match(jsp);\n if(jsmatch === null){return []}\n\n var _list = []\n for(var j = 0, _len_j = jsmatch.length; j < _len_j; j++) {\n var mo = {}\n mo._match=jsmatch[j]\n mo.group = function(){\n var res = []\n for(var i=0, _len_i = arguments.length; i < _len_i;i++){\n if(jsmatch[arguments[i]] === undefined){res.push(None)}\n else{res.push(jsmatch[arguments[i]])}\n }\n if(arguments.length == 1){return res[0]}\n return tuple.$factory(res)\n }\n mo.groups = function(_default){\n if(_default === undefined){_default=None}\n var res = []\n for(var i = 1, _len_i = jsmatch.length; i < _len_i; i++){\n if(jsmatch[i] === undefined){res.push(_default)}\n else{res.push(jsmatch[i])}\n }\n return tuple.$factory(res)\n }\n mo.start = function(){return mo._match.index}\n mo.end = function(){return mo._match.length - mo._match.index}\n mo.string = string\n _list.push(mo)\n }\n return _list\n }\n obj.search = function(pattern, string){\n var $ns = $B.args('re.search', 2,\n {pattern:null, string:null},['pattern', 'string'],\n arguments, {}, 'args', 'kw')\n var args = $ns['args']\n if(args.length>0){var flags = args[0]}\n else{var flags = getattr($ns['kw'], 'get')('flags', '')}\n flags = normflags(flags)\n var jsp = new RegExp(pattern, flags)\n var jsmatch = string.match(jsp)\n if(jsmatch === null){return None}\n return MatchObject.$factory(jsmatch, string, pattern)\n }\n obj.sub = function(pattern, repl, string){\n var $ns=$B.args('re.search', 3,\n {pattern: null, repl: null, string: null},\n ['pattern', 'repl', 'string'],\n arguments,{}, 'args', 'kw')\n for($var in $ns){eval(\"var \" + $var + \"=$ns[$var]\")}\n var args = $ns['args']\n var count = _b_.dict.get($ns['kw'], 'count', 0)\n var flags = _b_.dict.get($ns['kw'], 'flags', '')\n if(args.length > 0){var count = args[0]}\n if(args.length > 1){var flags = args[1]}\n flags = normflags(flags)\n if(typeof repl == \"string\"){\n // backreferences are \\1, \\2... in Python but $1,$2... in Javascript\n repl = repl.replace(/\\\\(\\d+)/g, '$$$1')\n }else if(typeof repl == \"function\"){\n // the argument passed to the Python function is the match object\n // the arguments passed to the Javascript function are :\n // - the matched substring\n // - the matched groups\n // - the offset of the matched substring inside the string\n // - the string being examined\n var $repl1 = function(){\n var mo = Object()\n mo.string = arguments[arguments.length - 1]\n var matched = arguments[0];\n var start = arguments[arguments.length - 2]\n var end = start + matched.length\n mo.start = function(){return start}\n mo.end = function(){return end}\n groups = []\n for(var i = 1, _len_i = arguments.length-2; i < _len_i; i++){\n groups.push(arguments[i])\n }\n mo.groups = function(_default){\n if(_default === undefined){_default = None}\n var res = []\n for(var i = 0, _len_i = groups.length; i < _len_i; i++){\n if(groups[i] === undefined){res.push(_default)}\n else{res.push(groups[i])}\n }\n return res\n }\n mo.group = function(i){\n if(i==0){return matched}\n return groups[i-1]\n }\n return repl(mo)\n }\n }\n if(count == 0){flags += 'g'}\n var jsp = new RegExp(pattern, flags)\n if(typeof repl == 'function'){return string.replace(jsp, $repl1)}\n else{return string.replace(jsp, repl)}\n }\n obj.match = (function(search_func){\n return function(){\n // match is like search but pattern must start with ^\n var pattern = arguments[0]\n if(pattern.charAt(0) != '^'){pattern = '^'+pattern}\n var args = [pattern]\n for(var i = 1, _len_i = arguments.length; i < _len_i; i++){\n args.push(arguments[i])\n }\n return search_func.apply(null, args)\n }\n })(obj.search)\n\n return obj\n}\n)(__BRYTHON__)\n"], "_locale": [".js", "var am = {\n \"C\": \"AM\",\n \"aa\": \"saaku\",\n \"ab\": \"AM\",\n \"ae\": \"AM\",\n \"af\": \"vm.\",\n \"ak\": \"AN\",\n \"am\": \"\\u1325\\u12cb\\u1275\",\n \"an\": \"AM\",\n \"ar\": \"\\u0635\",\n \"as\": \"\\u09f0\\u09be\\u09a4\\u09bf\\u09aa\\u09c1\",\n \"av\": \"AM\",\n \"ay\": \"AM\",\n \"az\": \"AM\",\n \"ba\": \"\",\n \"be\": \"\",\n \"bg\": \"\",\n \"bh\": \"AM\",\n \"bi\": \"AM\",\n \"bm\": \"AM\",\n \"bn\": \"AM\",\n \"bo\": \"\\u0f66\\u0f94\\u0f0b\\u0f51\\u0fb2\\u0f7c\",\n \"br\": \"A.M.\",\n \"bs\": \"prijepodne\",\n \"ca\": \"a. m.\",\n \"ce\": \"AM\",\n \"ch\": \"AM\",\n \"co\": \"\",\n \"cr\": \"AM\",\n \"cs\": \"dop.\",\n \"cu\": \"\\u0414\\u041f\",\n \"cv\": \"AM\",\n \"cy\": \"yb\",\n \"da\": \"\",\n \"de\": \"\",\n \"dv\": \"\\u0789\\u0786\",\n \"dz\": \"\\u0f66\\u0f94\\u0f0b\\u0f46\\u0f0b\",\n \"ee\": \"\\u014bdi\",\n \"el\": \"\\u03c0\\u03bc\",\n \"en\": \"AM\",\n \"eo\": \"atm\",\n \"es\": \"\",\n \"et\": \"AM\",\n \"eu\": \"AM\",\n \"fa\": \"\\u0642.\\u0638\",\n \"ff\": \"\",\n \"fi\": \"ap.\",\n \"fj\": \"AM\",\n \"fo\": \"um fyr.\",\n \"fr\": \"\",\n \"fy\": \"AM\",\n \"ga\": \"r.n.\",\n \"gd\": \"m\",\n \"gl\": \"a.m.\",\n \"gn\": \"a.m.\",\n \"gu\": \"\\u0aaa\\u0ac2\\u0ab0\\u0acd\\u0ab5\\u00a0\\u0aae\\u0aa7\\u0acd\\u0aaf\\u0abe\\u0ab9\\u0acd\\u0aa8\",\n \"gv\": \"a.m.\",\n \"ha\": \"AM\",\n \"he\": \"AM\",\n \"hi\": \"\\u092a\\u0942\\u0930\\u094d\\u0935\\u093e\\u0939\\u094d\\u0928\",\n \"ho\": \"AM\",\n \"hr\": \"\",\n \"ht\": \"AM\",\n \"hu\": \"de.\",\n \"hy\": \"\",\n \"hz\": \"AM\",\n \"ia\": \"a.m.\",\n \"id\": \"AM\",\n \"ie\": \"AM\",\n \"ig\": \"A.M.\",\n \"ii\": \"\\ua0b5\\ua1aa\\ua20c\\ua210\",\n \"ik\": \"AM\",\n \"io\": \"AM\",\n \"is\": \"f.h.\",\n \"it\": \"\",\n \"iu\": \"AM\",\n \"ja\": \"\\u5348\\u524d\",\n \"jv\": \"\",\n \"ka\": \"AM\",\n \"kg\": \"AM\",\n \"ki\": \"Kiroko\",\n \"kj\": \"AM\",\n \"kk\": \"AM\",\n \"kl\": \"\",\n \"km\": \"\\u1796\\u17d2\\u179a\\u17b9\\u1780\",\n \"kn\": \"\\u0caa\\u0cc2\\u0cb0\\u0ccd\\u0cb5\\u0cbe\\u0cb9\\u0ccd\\u0ca8\",\n \"ko\": \"\\uc624\\uc804\",\n \"kr\": \"AM\",\n \"ks\": \"AM\",\n \"ku\": \"\\u067e.\\u0646\",\n \"kv\": \"AM\",\n \"kw\": \"a.m.\",\n \"ky\": \"\",\n \"la\": \"\",\n \"lb\": \"\",\n \"lg\": \"AM\",\n \"li\": \"AM\",\n \"ln\": \"nt\\u0254\\u0301ng\\u0254\\u0301\",\n \"lo\": \"\\u0e81\\u0ec8\\u0ead\\u0e99\\u0e97\\u0ec8\\u0ebd\\u0e87\",\n \"lt\": \"prie\\u0161piet\",\n \"lu\": \"Dinda\",\n \"lv\": \"priek\\u0161p.\",\n \"mg\": \"AM\",\n \"mh\": \"AM\",\n \"mi\": \"a.m.\",\n \"mk\": \"\\u043f\\u0440\\u0435\\u0442\\u043f\\u043b.\",\n \"ml\": \"AM\",\n \"mn\": \"??\",\n \"mo\": \"AM\",\n \"mr\": \"\\u092e.\\u092a\\u0942.\",\n \"ms\": \"PG\",\n \"mt\": \"AM\",\n \"my\": \"\\u1014\\u1036\\u1014\\u1000\\u103a\",\n \"na\": \"AM\",\n \"nb\": \"a.m.\",\n \"nd\": \"AM\",\n \"ne\": \"\\u092a\\u0942\\u0930\\u094d\\u0935\\u093e\\u0939\\u094d\\u0928\",\n \"ng\": \"AM\",\n \"nl\": \"\",\n \"nn\": \"f.m.\",\n \"no\": \"a.m.\",\n \"nr\": \"AM\",\n \"nv\": \"AM\",\n \"ny\": \"AM\",\n \"oc\": \"AM\",\n \"oj\": \"AM\",\n \"om\": \"WD\",\n \"or\": \"AM\",\n \"os\": \"AM\",\n \"pa\": \"\\u0a38\\u0a35\\u0a47\\u0a30\",\n \"pi\": \"AM\",\n \"pl\": \"AM\",\n \"ps\": \"\\u063a.\\u0645.\",\n \"pt\": \"\",\n \"qu\": \"a.m.\",\n \"rc\": \"AM\",\n \"rm\": \"AM\",\n \"rn\": \"Z.MU.\",\n \"ro\": \"a.m.\",\n \"ru\": \"\",\n \"rw\": \"AM\",\n \"sa\": \"\\u092e\\u0927\\u094d\\u092f\\u093e\\u0928\\u092a\\u0942\\u0930\\u094d\\u0935\",\n \"sc\": \"AM\",\n \"sd\": \"AM\",\n \"se\": \"i.b.\",\n \"sg\": \"ND\",\n \"sh\": \"AM\",\n \"si\": \"\\u0db4\\u0dd9.\\u0dc0.\",\n \"sk\": \"AM\",\n \"sl\": \"dop.\",\n \"sm\": \"AM\",\n \"sn\": \"AM\",\n \"so\": \"sn.\",\n \"sq\": \"e paradites\",\n \"sr\": \"pre podne\",\n \"ss\": \"AM\",\n \"st\": \"AM\",\n \"su\": \"AM\",\n \"sv\": \"\",\n \"sw\": \"AM\",\n \"ta\": \"\\u0b95\\u0bbe\\u0bb2\\u0bc8\",\n \"te\": \"\\u0c2a\\u0c42\\u0c30\\u0c4d\\u0c35\\u0c3e\\u0c39\\u0c4d\\u0c28\",\n \"tg\": \"\",\n \"th\": \"AM\",\n \"ti\": \"\\u1295\\u1309\\u1206 \\u1230\\u12d3\\u1270\",\n \"tk\": \"\",\n \"tl\": \"AM\",\n \"tn\": \"AM\",\n \"to\": \"AM\",\n \"tr\": \"\\u00d6\\u00d6\",\n \"ts\": \"AM\",\n \"tt\": \"\",\n \"tw\": \"AM\",\n \"ty\": \"AM\",\n \"ug\": \"\\u0686?\\u0634\\u062a\\u0649\\u0646 \\u0628?\\u0631?\\u0646\",\n \"uk\": \"AM\",\n \"ur\": \"AM\",\n \"uz\": \"TO\",\n \"ve\": \"AM\",\n \"vi\": \"SA\",\n \"vo\": \"AM\",\n \"wa\": \"AM\",\n \"wo\": \"\",\n \"xh\": \"AM\",\n \"yi\": \"\\ua0b5\\ua1aa\\ua20c\\ua210\",\n \"yo\": \"\\u00c0\\u00e1r?`\",\n \"za\": \"AM\",\n \"zh\": \"\\u4e0a\\u5348\",\n \"zu\": \"AM\"\n}\nvar pm = {\n \"C\": \"PM\",\n \"aa\": \"carra\",\n \"ab\": \"PM\",\n \"ae\": \"PM\",\n \"af\": \"nm.\",\n \"ak\": \"EW\",\n \"am\": \"\\u12a8\\u1230\\u12d3\\u1275\",\n \"an\": \"PM\",\n \"ar\": \"\\u0645\",\n \"as\": \"\\u0986\\u09ac\\u09c7\\u09b2\\u09bf\",\n \"av\": \"PM\",\n \"ay\": \"PM\",\n \"az\": \"PM\",\n \"ba\": \"\",\n \"be\": \"\",\n \"bg\": \"\",\n \"bh\": \"PM\",\n \"bi\": \"PM\",\n \"bm\": \"PM\",\n \"bn\": \"PM\",\n \"bo\": \"\\u0f55\\u0fb1\\u0f72\\u0f0b\\u0f51\\u0fb2\\u0f7c\",\n \"br\": \"G.M.\",\n \"bs\": \"popodne\",\n \"ca\": \"p. m.\",\n \"ce\": \"PM\",\n \"ch\": \"PM\",\n \"co\": \"\",\n \"cr\": \"PM\",\n \"cs\": \"odp.\",\n \"cu\": \"\\u041f\\u041f\",\n \"cv\": \"PM\",\n \"cy\": \"yh\",\n \"da\": \"\",\n \"de\": \"\",\n \"dv\": \"\\u0789\\u078a\",\n \"dz\": \"\\u0f55\\u0fb1\\u0f72\\u0f0b\\u0f46\\u0f0b\",\n \"ee\": \"\\u0263etr\\u0254\",\n \"el\": \"\\u03bc\\u03bc\",\n \"en\": \"PM\",\n \"eo\": \"ptm\",\n \"es\": \"\",\n \"et\": \"PM\",\n \"eu\": \"PM\",\n \"fa\": \"\\u0628.\\u0638\",\n \"ff\": \"\",\n \"fi\": \"ip.\",\n \"fj\": \"PM\",\n \"fo\": \"um sein.\",\n \"fr\": \"\",\n \"fy\": \"PM\",\n \"ga\": \"i.n.\",\n \"gd\": \"f\",\n \"gl\": \"p.m.\",\n \"gn\": \"p.m.\",\n \"gu\": \"\\u0a89\\u0aa4\\u0acd\\u0aa4\\u0ab0\\u00a0\\u0aae\\u0aa7\\u0acd\\u0aaf\\u0abe\\u0ab9\\u0acd\\u0aa8\",\n \"gv\": \"p.m.\",\n \"ha\": \"PM\",\n \"he\": \"PM\",\n \"hi\": \"\\u0905\\u092a\\u0930\\u093e\\u0939\\u094d\\u0928\",\n \"ho\": \"PM\",\n \"hr\": \"\",\n \"ht\": \"PM\",\n \"hu\": \"du.\",\n \"hy\": \"\",\n \"hz\": \"PM\",\n \"ia\": \"p.m.\",\n \"id\": \"PM\",\n \"ie\": \"PM\",\n \"ig\": \"P.M.\",\n \"ii\": \"\\ua0b5\\ua1aa\\ua20c\\ua248\",\n \"ik\": \"PM\",\n \"io\": \"PM\",\n \"is\": \"e.h.\",\n \"it\": \"\",\n \"iu\": \"PM\",\n \"ja\": \"\\u5348\\u5f8c\",\n \"jv\": \"\",\n \"ka\": \"PM\",\n \"kg\": \"PM\",\n \"ki\": \"Hwa\\u0129-in\\u0129\",\n \"kj\": \"PM\",\n \"kk\": \"PM\",\n \"kl\": \"\",\n \"km\": \"\\u179b\\u17d2\\u1784\\u17b6\\u1785\",\n \"kn\": \"\\u0c85\\u0caa\\u0cb0\\u0cbe\\u0cb9\\u0ccd\\u0ca8\",\n \"ko\": \"\\uc624\\ud6c4\",\n \"kr\": \"PM\",\n \"ks\": \"PM\",\n \"ku\": \"\\u062f.\\u0646\",\n \"kv\": \"PM\",\n \"kw\": \"p.m.\",\n \"ky\": \"\",\n \"la\": \"\",\n \"lb\": \"\",\n \"lg\": \"PM\",\n \"li\": \"PM\",\n \"ln\": \"mp\\u00f3kwa\",\n \"lo\": \"\\u0eab\\u0ebc\\u0eb1\\u0e87\\u0e97\\u0ec8\\u0ebd\\u0e87\",\n \"lt\": \"popiet\",\n \"lu\": \"Dilolo\",\n \"lv\": \"p\\u0113cp.\",\n \"mg\": \"PM\",\n \"mh\": \"PM\",\n \"mi\": \"p.m.\",\n \"mk\": \"\\u043f\\u043e\\u043f\\u043b.\",\n \"ml\": \"PM\",\n \"mn\": \"?\\u0425\",\n \"mo\": \"PM\",\n \"mr\": \"\\u092e.\\u0928\\u0902.\",\n \"ms\": \"PTG\",\n \"mt\": \"PM\",\n \"my\": \"\\u100a\\u1014\\u1031\",\n \"na\": \"PM\",\n \"nb\": \"p.m.\",\n \"nd\": \"PM\",\n \"ne\": \"\\u0905\\u092a\\u0930\\u093e\\u0939\\u094d\\u0928\",\n \"ng\": \"PM\",\n \"nl\": \"\",\n \"nn\": \"e.m.\",\n \"no\": \"p.m.\",\n \"nr\": \"PM\",\n \"nv\": \"PM\",\n \"ny\": \"PM\",\n \"oc\": \"PM\",\n \"oj\": \"PM\",\n \"om\": \"WB\",\n \"or\": \"PM\",\n \"os\": \"PM\",\n \"pa\": \"\\u0a36\\u0a3e\\u0a2e\",\n \"pi\": \"PM\",\n \"pl\": \"PM\",\n \"ps\": \"\\u063a.\\u0648.\",\n \"pt\": \"\",\n \"qu\": \"p.m.\",\n \"rc\": \"PM\",\n \"rm\": \"PM\",\n \"rn\": \"Z.MW.\",\n \"ro\": \"p.m.\",\n \"ru\": \"\",\n \"rw\": \"PM\",\n \"sa\": \"\\u092e\\u0927\\u094d\\u092f\\u093e\\u0928\\u092a\\u091a\\u094d\\u092f\\u093e\\u0924\",\n \"sc\": \"PM\",\n \"sd\": \"PM\",\n \"se\": \"e.b.\",\n \"sg\": \"LK\",\n \"sh\": \"PM\",\n \"si\": \"\\u0db4.\\u0dc0.\",\n \"sk\": \"PM\",\n \"sl\": \"pop.\",\n \"sm\": \"PM\",\n \"sn\": \"PM\",\n \"so\": \"gn.\",\n \"sq\": \"e pasdites\",\n \"sr\": \"po podne\",\n \"ss\": \"PM\",\n \"st\": \"PM\",\n \"su\": \"PM\",\n \"sv\": \"\",\n \"sw\": \"PM\",\n \"ta\": \"\\u0bae\\u0bbe\\u0bb2\\u0bc8\",\n \"te\": \"\\u0c05\\u0c2a\\u0c30\\u0c3e\\u0c39\\u0c4d\\u0c28\",\n \"tg\": \"\",\n \"th\": \"PM\",\n \"ti\": \"\\u12f5\\u1215\\u122d \\u1230\\u12d3\\u1275\",\n \"tk\": \"\",\n \"tl\": \"PM\",\n \"tn\": \"PM\",\n \"to\": \"PM\",\n \"tr\": \"\\u00d6S\",\n \"ts\": \"PM\",\n \"tt\": \"\",\n \"tw\": \"PM\",\n \"ty\": \"PM\",\n \"ug\": \"\\u0686?\\u0634\\u062a\\u0649\\u0646 \\u0643?\\u064a\\u0649\\u0646\",\n \"uk\": \"PM\",\n \"ur\": \"PM\",\n \"uz\": \"TK\",\n \"ve\": \"PM\",\n \"vi\": \"CH\",\n \"vo\": \"PM\",\n \"wa\": \"PM\",\n \"wo\": \"\",\n \"xh\": \"PM\",\n \"yi\": \"\\ua0b5\\ua1aa\\ua20c\\ua248\",\n \"yo\": \"?`s\\u00e1n\",\n \"za\": \"PM\",\n \"zh\": \"\\u4e0b\\u5348\",\n \"zu\": \"PM\"\n}\n\nvar X_format = {\n \"%H:%M:%S\": [\n \"C\",\n \"ab\",\n \"ae\",\n \"af\",\n \"an\",\n \"av\",\n \"ay\",\n \"az\",\n \"ba\",\n \"be\",\n \"bg\",\n \"bh\",\n \"bi\",\n \"bm\",\n \"bo\",\n \"br\",\n \"bs\",\n \"ca\",\n \"ce\",\n \"ch\",\n \"co\",\n \"cr\",\n \"cs\",\n \"cu\",\n \"cv\",\n \"cy\",\n \"da\",\n \"de\",\n \"dv\",\n \"eo\",\n \"es\",\n \"et\",\n \"eu\",\n \"ff\",\n \"fj\",\n \"fo\",\n \"fr\",\n \"fy\",\n \"ga\",\n \"gd\",\n \"gl\",\n \"gn\",\n \"gu\",\n \"gv\",\n \"ha\",\n \"he\",\n \"hi\",\n \"ho\",\n \"hr\",\n \"ht\",\n \"hu\",\n \"hy\",\n \"hz\",\n \"ia\",\n \"ie\",\n \"ig\",\n \"ik\",\n \"io\",\n \"is\",\n \"it\",\n \"ja\",\n \"ka\",\n \"kg\",\n \"ki\",\n \"kj\",\n \"kk\",\n \"kl\",\n \"km\",\n \"kn\",\n \"kv\",\n \"kw\",\n \"ky\",\n \"la\",\n \"lb\",\n \"lg\",\n \"li\",\n \"ln\",\n \"lo\",\n \"lt\",\n \"lu\",\n \"lv\",\n \"mg\",\n \"mh\",\n \"mk\",\n \"mn\",\n \"mo\",\n \"mr\",\n \"mt\",\n \"my\",\n \"na\",\n \"nb\",\n \"nd\",\n \"ng\",\n \"nl\",\n \"nn\",\n \"no\",\n \"nr\",\n \"nv\",\n \"ny\",\n \"oj\",\n \"or\",\n \"os\",\n \"pi\",\n \"pl\",\n \"ps\",\n \"pt\",\n \"rc\",\n \"rm\",\n \"rn\",\n \"ro\",\n \"ru\",\n \"rw\",\n \"sa\",\n \"sc\",\n \"se\",\n \"sg\",\n \"sh\",\n \"sk\",\n \"sl\",\n \"sm\",\n \"sn\",\n \"sr\",\n \"ss\",\n \"st\",\n \"su\",\n \"sv\",\n \"sw\",\n \"ta\",\n \"te\",\n \"tg\",\n \"th\",\n \"tk\",\n \"tl\",\n \"tn\",\n \"tr\",\n \"ts\",\n \"tt\",\n \"tw\",\n \"ty\",\n \"ug\",\n \"uk\",\n \"uz\",\n \"ve\",\n \"vo\",\n \"wa\",\n \"wo\",\n \"xh\",\n \"yo\",\n \"za\",\n \"zh\",\n \"zu\"\n ],\n \"%i:%M:%S %p\": [\n \"aa\",\n \"ak\",\n \"am\",\n \"bn\",\n \"el\",\n \"en\",\n \"iu\",\n \"kr\",\n \"ks\",\n \"mi\",\n \"ml\",\n \"ms\",\n \"ne\",\n \"om\",\n \"sd\",\n \"so\",\n \"sq\",\n \"ti\",\n \"to\",\n \"ur\",\n \"vi\"\n ],\n \"%I:%M:%S %p\": [\n \"ar\",\n \"fa\",\n \"ku\",\n \"qu\"\n ],\n \"%p %i:%M:%S\": [\n \"as\",\n \"ii\",\n \"ko\",\n \"yi\"\n ],\n \"\\u0f46\\u0f74\\u0f0b\\u0f5a\\u0f7c\\u0f51\\u0f0b%i:%M:%S %p\": [\n \"dz\"\n ],\n \"%p ga %i:%M:%S\": [\n \"ee\"\n ],\n \"%H.%M.%S\": [\n \"fi\",\n \"id\",\n \"jv\",\n \"oc\",\n \"si\"\n ],\n \"%p %I:%M:%S\": [\n \"pa\"\n ]\n}\nvar x_format = {\n \"%m/%d/%y\": [\n \"C\"\n ],\n \"%d/%m/%Y\": [\n \"aa\",\n \"am\",\n \"bm\",\n \"bn\",\n \"ca\",\n \"co\",\n \"cy\",\n \"el\",\n \"es\",\n \"ff\",\n \"fr\",\n \"ga\",\n \"gd\",\n \"gl\",\n \"gn\",\n \"gv\",\n \"ha\",\n \"he\",\n \"id\",\n \"ig\",\n \"it\",\n \"iu\",\n \"jv\",\n \"ki\",\n \"kr\",\n \"kw\",\n \"la\",\n \"lg\",\n \"ln\",\n \"lo\",\n \"lu\",\n \"mi\",\n \"ml\",\n \"ms\",\n \"mt\",\n \"nd\",\n \"oc\",\n \"om\",\n \"pt\",\n \"qu\",\n \"rn\",\n \"sd\",\n \"sg\",\n \"so\",\n \"sw\",\n \"ti\",\n \"to\",\n \"uk\",\n \"ur\",\n \"uz\",\n \"vi\",\n \"wo\",\n \"yo\"\n ],\n \"%m/%d/%Y\": [\n \"ab\",\n \"ae\",\n \"an\",\n \"av\",\n \"ay\",\n \"bh\",\n \"bi\",\n \"ch\",\n \"cr\",\n \"cv\",\n \"ee\",\n \"en\",\n \"fj\",\n \"ho\",\n \"ht\",\n \"hz\",\n \"ie\",\n \"ik\",\n \"io\",\n \"kg\",\n \"kj\",\n \"ks\",\n \"kv\",\n \"li\",\n \"mh\",\n \"mo\",\n \"na\",\n \"ne\",\n \"ng\",\n \"nv\",\n \"ny\",\n \"oj\",\n \"pi\",\n \"rc\",\n \"sc\",\n \"sh\",\n \"sm\",\n \"su\",\n \"tl\",\n \"tw\",\n \"ty\",\n \"wa\",\n \"za\",\n \"zu\"\n ],\n \"%Y-%m-%d\": [\n \"af\",\n \"br\",\n \"ce\",\n \"dz\",\n \"eo\",\n \"ko\",\n \"lt\",\n \"mg\",\n \"nr\",\n \"rw\",\n \"se\",\n \"si\",\n \"sn\",\n \"ss\",\n \"st\",\n \"sv\",\n \"tn\",\n \"ts\",\n \"ug\",\n \"ve\",\n \"vo\",\n \"xh\"\n ],\n \"%Y/%m/%d\": [\n \"ak\",\n \"bo\",\n \"eu\",\n \"ia\",\n \"ii\",\n \"ja\",\n \"ku\",\n \"yi\",\n \"zh\"\n ],\n \"null\": [\n \"ar\",\n \"fa\",\n \"ps\",\n \"th\"\n ],\n \"%d-%m-%Y\": [\n \"as\",\n \"da\",\n \"fy\",\n \"hi\",\n \"kl\",\n \"mr\",\n \"my\",\n \"nl\",\n \"rm\",\n \"sa\",\n \"ta\"\n ],\n \"%d.%m.%Y\": [\n \"az\",\n \"cs\",\n \"de\",\n \"et\",\n \"fi\",\n \"fo\",\n \"hy\",\n \"is\",\n \"ka\",\n \"kk\",\n \"lv\",\n \"mk\",\n \"nb\",\n \"nn\",\n \"no\",\n \"os\",\n \"pl\",\n \"ro\",\n \"ru\",\n \"sq\",\n \"tg\",\n \"tr\",\n \"tt\"\n ],\n \"%d.%m.%y\": [\n \"ba\",\n \"be\",\n \"lb\"\n ],\n \"%d.%m.%Y \\u0433.\": [\n \"bg\"\n ],\n \"%d.%m.%Y.\": [\n \"bs\",\n \"hr\",\n \"sr\"\n ],\n \"%Y.%m.%d\": [\n \"cu\",\n \"mn\"\n ],\n \"%d/%m/%y\": [\n \"dv\",\n \"km\"\n ],\n \"%d-%m-%y\": [\n \"gu\",\n \"kn\",\n \"or\",\n \"pa\",\n \"te\"\n ],\n \"%Y. %m. %d.\": [\n \"hu\"\n ],\n \"%d-%b %y\": [\n \"ky\"\n ],\n \"%d. %m. %Y\": [\n \"sk\",\n \"sl\"\n ],\n \"%d.%m.%y \\u00fd.\": [\n \"tk\"\n ]\n}\n\n\nvar $module=(function($B){\n var _b_ = $B.builtins\n return {\n CHAR_MAX: 127,\n LC_ALL: 6,\n LC_COLLATE: 3,\n LC_CTYPE: 0,\n LC_MESSAGES: 5,\n LC_MONETARY: 4,\n LC_NUMERIC: 1,\n LC_TIME: 2,\n Error: _b_.ValueError,\n\n _date_format: function(spec, hour){\n var t,\n locale = __BRYTHON__.locale.substr(0, 2)\n\n if(spec == \"p\"){\n var res = hours < 12 ? am[locale] : pm[locale]\n if(res === undefined){\n throw _b_.ValueError.$factory(\"no format \" + spec + \" for locale \" +\n locale)\n }\n return res\n }\n else if(spec == \"x\"){\n t = x_format\n }else if(spec == \"X\"){\n t = X_format\n }else{\n throw _b_.ValueError.$factory(\"invalid format\", spec)\n }\n for(var key in t){\n if(t[key].indexOf(locale) > -1){\n return key\n }\n }\n throw _b_.ValueError.$factory(\"no format \" + spec + \" for locale \" +\n locale)\n },\n\n localeconv: function(){\n var conv = {'grouping': [127],\n 'currency_symbol': '',\n 'n_sign_posn': 127,\n 'p_cs_precedes': 127,\n 'n_cs_precedes': 127,\n 'mon_grouping': [],\n 'n_sep_by_space': 127,\n 'decimal_point': '.',\n 'negative_sign': '',\n 'positive_sign': '',\n 'p_sep_by_space': 127,\n 'int_curr_symbol': '',\n 'p_sign_posn': 127,\n 'thousands_sep': '',\n 'mon_thousands_sep': '',\n 'frac_digits': 127,\n 'mon_decimal_point': '',\n 'int_frac_digits': 127\n }\n var res = $B.empty_dict()\n for(var key in conv){\n res.$string_dict[key] = [conv, res.$order++]\n }\n return res\n },\n\n setlocale : function(){\n var $ = $B.args(\"setlocale\", 2, {category: null, locale: null},\n [\"category\", \"locale\"], arguments, {locale: _b_.None},\n null, null)\n /// XXX category is currently ignored\n if($.locale == \"\"){\n // use browser language setting, if it is set\n var LANG = ($B.language || \"\").substr(0, 2)\n if(am.hasOwnProperty(LANG)){\n $B.locale = LANG\n return LANG\n }else{\n console.log(\"Unknown locale: \" + LANG)\n }\n }else if($.locale === _b_.None){\n // return current locale\n return $B.locale\n }else{\n // Only use 2 first characters\n try{$.locale.substr(0, 2)}\n catch(err){\n throw $module.Error.$factory(\"Invalid locale: \" + $.locale)\n }\n if(am.hasOwnProperty($.locale.substr(0, 2))){\n $B.locale = $.locale\n return $.locale\n }else{\n throw $module.Error.$factory(\"Unknown locale: \" + $.locale)\n }\n }\n }\n }\n})(__BRYTHON__)\n"], "_multiprocessing": [".js", "// multiprocessing\nvar $module = (function($B){\n\nvar _b_ = $B.builtins\nvar $s=[]\nfor(var $b in _b_) $s.push('var ' + $b +'=_b_[\"'+$b+'\"]')\neval($s.join(';'))\n\n//for(var $py_builtin in _b_){eval(\"var \"+$py_builtin+\"=_b_[$py_builtin]\")}\n\nvar Process = {\n __class__:_b_.type,\n __mro__: [_b_.object],\n $infos:{\n __name__:'Process'\n },\n $is_class: true\n}\n\nvar $convert_args=function(args) {\n var _list=[]\n for(var i=0, _len_i = args.length; i < _len_i; i++) {\n var _a=args[i]\n if(isinstance(_a, str)){_list.push(\"'\"+_a+\"'\")} else {_list.push(_a)}\n }\n\n return _list.join(',')\n}\n\nProcess.is_alive = function(self){return self.$alive}\n\nProcess.join = function(self, timeout){\n // need to block until process is complete\n // could probably use a addEventListener to execute all existing code\n // after this join statement\n\n self.$worker.addEventListener('message', function (e) {\n var data=e.data\n if (data.stdout != '') { // output stdout from process\n $B.stdout.write(data.stdout)\n }\n }, false);\n}\n\nProcess.run = function(self){\n //fix me\n}\n\nProcess.start = function(self){\n self.$worker.postMessage({target: self.$target,\n args: $convert_args(self.$args),\n // kwargs: self.$kwargs\n })\n self.$worker.addEventListener('error', function(e) { throw e})\n self.$alive=true\n}\n\nProcess.terminate = function(self){\n self.$worker.terminate()\n self.$alive=false\n}\n\n// variables\n//name\n//daemon\n//pid\n//exitcode\n\nProcess. $factory = function(){\n //arguments group=None, target=None, name=None, args=(), kwargs=()\n\n var $ns=$B.args('Process',0,{},[],arguments,{},null,'kw')\n var kw=$ns['kw']\n\n var target=_b_.dict.get($ns['kw'],'target',None)\n var args=_b_.dict.get($ns['kw'],'args',tuple.$factory())\n\n var worker = new Worker('/src/web_workers/multiprocessing.js')\n\n var res = {\n __class__:Process,\n $worker: worker,\n name: $ns['name'] || None,\n $target: target+'',\n $args: args,\n //$kwargs: $ns['kw'],\n $alive: false\n }\n return res\n}\n\n$B.set_func_names(Process, \"multiprocessing\")\n\nvar Pool = $B.make_class(\"Pool\")\n\nPool.__enter__ = function(self){}\nPool.__exit__ = function(self){}\n\nPool.__str__ = Pool.toString = Pool.__repr__=function(self){\n return ''\n}\n\nPool.map = function(){\n\n var $ns=$B.args('Pool.map', 3,\n {self:null, func:null, fargs:null}, ['self', 'func', 'fargs'],\n arguments,{},'args','kw')\n var func=$ns['func']\n var fargs=$ns['fargs']\n\n var _results=[]\n\n fargs=iter(fargs)\n\n var _pos=0\n console.log(self.$processes)\n _workers=[]\n for(var i=0; i < self.$processes; i++) {\n _workers[i] = new Worker('/src/web_workers/multiprocessing.js')\n var arg\n\n try{arg=getattr(fargs, '__next__')()}\n catch(err) {\n if (err.__class__ !== _b_.StopIteration) throw err\n }\n console.log(arg)\n _workers[i].finished=false\n _workers[i].postMessage({target: func+'', pos: _pos,\n args: $convert_args([arg])})\n _pos++\n\n _workers[i].addEventListener('message', function(e) {\n _results[e.data.pos]=e.data.result\n if (_results.length == args.length) return _results\n\n try {\n arg=getattr(fargs, '__next__')()\n e.currentTarget.postMessage({target: func+'', pos: _pos,\n args: $convert_args([arg])})\n _pos++\n } catch(err) {\n if (err.__class__ !== _b_.StopIteration) throw err\n this.finished=true\n }\n }, false);\n }\n}\n\nPool.apply_async = function(){\n\n var $ns=$B.$MakeArgs('apply_async', 3,\n {self:null, func:null, fargs:null}, ['self', 'func', 'fargs'],\n arguments,{},'args','kw')\n var func=$ns['func']\n var fargs=$ns['fargs']\n\n fargs=iter(fargs)\n\n async_result = {}\n async_result.get=function(timeout){\n console.log(results)\n console.log(fargs)\n return this.results}\n async_result.results=[]\n\n var _pos=0\n\n _workers=[]\n for(var i=0; i < self.$processes; i++) {\n _workers[i] = new Worker('/src/web_workers/multiprocessing.js')\n var arg\n\n try{arg=getattr(fargs, '__next__')()}\n catch(err) {\n if (err.__class__ !== _b_.StopIteration) throw err\n }\n //console.log(arg)\n //_workers[i].finished=false\n _workers[i].postMessage({target: func+'', pos: _pos,\n args: $convert_args([arg])})\n _pos++\n\n _workers[i].addEventListener('message', function(e) {\n async_result.results[e.data.pos]=e.data.result\n //if (_results.length == args.length) return _results\n\n try {\n arg=getattr(fargs, '__next__')()\n e.currentTarget.postMessage({target: func+'', pos: _pos,\n args: $convert_args([arg])})\n _pos++\n } catch(err) {\n if (err.__class__ !== _b_.StopIteration) throw err\n this.finished=true\n }\n }, false);\n }\n\n console.log(\"return\", async_result)\n return async_result\n}\n\nPool.$factory = function(){\n console.log(\"pool\")\n console.log(arguments)\n var $ns=$B.args('Pool',1,\n {processes:null},['processes'],arguments,{},'args','kw')\n //var kw=$ns['kw']\n\n var processes=$ns['processes']\n\n if (processes == None) {\n // look to see if we have stored cpu_count in local storage\n // maybe we should create a brython config file with settings,etc..??\n\n // if not there use a tool such as Core Estimator to calculate number of cpu's\n // http://eligrey.com/blog/post/cpu-core-estimation-with-javascript\n }\n\n console.log(processes)\n var res = {\n __class__:Pool,\n $processes:processes\n }\n return res\n}\n\n$B.set_func_names(Pool, \"multiprocessing\")\n\nreturn {Process:Process, Pool:Pool}\n\n})(__BRYTHON__)\n"], "_posixsubprocess": [".js", "var $module=(function($B){\n\n return {\n cloexec_pipe: function() {} // fixme\n }\n})(__BRYTHON__)\n"], "_profile": [".js", "// Private interface to the profiling instrumentation implemented in py_utils.js.\n// Uses local a copy of the eval function from py_builtin_functions.js\n\nvar $module=(function($B) {\n eval($B.InjectBuiltins());\n return {\n brython:$B,\n data:$B.$profile_data,\n start:$B.$profile.start,\n stop:$B.$profile.stop,\n pause:$B.$profile.pause,\n status:$B.$profile.status,\n clear:$B.$profile.clear,\n elapsed:$B.$profile.elapsed,\n run:function(src,_globals,_locals,nruns) {\n var current_frame = $B.frames_stack[$B.frames_stack.length-1]\n if(current_frame!==undefined){\n var current_locals_id = current_frame[0].replace(/\\./,'_'),\n current_globals_id = current_frame[2].replace(/\\./,'_')\n }\n\n var is_exec = true,\n leave = false\n\n // code will be run in a specific block\n var globals_id = '$profile_'+$B.UUID(),\n locals_id\n\n if(_locals===_globals){\n locals_id = globals_id\n }else{\n locals_id = '$profile_'+$B.UUID()\n }\n // Initialise the object for block namespaces\n eval('var $locals_'+globals_id+' = {}\\nvar $locals_'+locals_id+' = {}')\n\n // Initialise block globals\n\n // A _globals dictionary is provided, set or reuse its attribute\n // globals_id\n _globals.globals_id = _globals.globals_id || globals_id\n globals_id = _globals.globals_id\n\n if(_locals === _globals || _locals === undefined){\n locals_id = globals_id\n parent_scope = $B.builtins_scope\n }else{\n // The parent block of locals must be set to globals\n parent_scope = {\n id: globals_id,\n parent_block: $B.builtins_scope,\n binding: {}\n }\n for(var attr in _globals.$string_dict){\n parent_scope.binding[attr] = true\n }\n }\n\n // Initialise block globals\n if(_globals.$jsobj){var items = _globals.$jsobj}\n else{var items = _globals.$string_dict}\n for(var item in items){\n item1 = to_alias(item)\n try{\n eval('$locals_' + globals_id + '[\"' + item1 +\n '\"] = items[item]')\n }catch(err){\n console.log(err)\n console.log('error setting', item)\n break\n }\n }\n\n // Initialise block locals\n var items = _b_.dict.items(_locals), item\n if(_locals.$jsobj){var items = _locals.$jsobj}\n else{var items = _locals.$string_dict}\n for(var item in items){\n item1 = to_alias(item)\n try{\n eval('$locals_' + locals_id + '[\"' + item[0] + '\"] = item[1]')\n }catch(err){\n console.log(err)\n console.log('error setting', item)\n break\n }\n }\n //var nb_modules = Object.keys(__BRYTHON__.modules).length\n //console.log('before exec', nb_modules)\n\n console.log(\"call py2js\", src, globals_id, locals_id, parent_scope)\n var root = $B.py2js(src, globals_id, locals_id, parent_scope),\n js, gns, lns\n\n try{\n\n var js = root.to_js()\n\n var i,res,gns;\n for(i=0;i 255){return false}\n return unicode_iscased(cp)\n }\n\n function unicode_tolower(cp){\n var letter = String.fromCodePoint(cp),\n lower = letter.toLowerCase()\n return lower.charCodeAt(0)\n }\n\n function ascii_tolower(cp){\n return unicode_tolower(cp)\n }\n\nreturn {\n unicode_iscased: unicode_iscased,\n ascii_iscased: ascii_iscased,\n unicode_tolower: unicode_tolower,\n ascii_tolower: ascii_tolower\n}\n\n}\n\n)(__BRYTHON__)"], "_string": [".js", "var $module=(function($B){\n\nvar _b_ = $B.builtins\n\nfunction parts(format_string){\n var result = [],\n _parts = $B.split_format(format_string) // defined in py_string.js\n for(var i = 0; i < _parts.length; i+= 2){\n result.push({pre: _parts[i], fmt: _parts[i + 1]})\n }\n return result\n}\n\nfunction Tuple(){\n var args = []\n for(var i=0, len=arguments.length; i < len; i++){\n args.push(arguments[i])\n }\n return _b_.tuple.$factory(args)\n}\n\nreturn{\n\n formatter_field_name_split: function(fieldname){\n // Split the argument as a field name\n var parsed = $B.parse_format(fieldname),\n first = parsed.name,\n rest = []\n if(first.match(/\\d+/)){first = parseInt(first)}\n parsed.name_ext.forEach(function(ext){\n if(ext.startsWith(\"[\")){\n var item = ext.substr(1, ext.length - 2)\n if(item.match(/\\d+/)){\n rest.push(Tuple(false, parseInt(item)))\n }else{\n rest.push(Tuple(false, item))\n }\n }else{\n rest.push(Tuple(true, ext.substr(1)))\n }\n })\n return Tuple(first, _b_.iter(rest))\n },\n formatter_parser: function(format_string){\n // Parse the argument as a format string\n\n if(! _b_.isinstance(format_string, _b_.str)){\n throw _b_.ValueError.$factory(\"Invalid format string type: \" +\n $B.class_name(format_string))\n }\n\n var result = []\n parts(format_string).forEach(function(item){\n var pre = item.pre === undefined ? \"\" : item.pre,\n fmt = item.fmt\n if(fmt === undefined){\n result.push(Tuple(pre, _b_.None, _b_.None, _b_.None))\n }else if(fmt.string == ''){\n result.push(Tuple(pre, '', '', _b_.None))\n }else{\n result.push(Tuple(pre,\n fmt.raw_name + fmt.name_ext.join(\"\"),\n fmt.raw_spec,\n fmt.conv || _b_.None))\n }\n })\n return result\n }\n}\n})(__BRYTHON__)"], "_strptime": [".js", "var _b_ = __BRYTHON__.builtins\n\nvar $module = (function($B){\n return {\n _strptime_datetime: function(cls, s, fmt){\n var pos_s = 0,\n pos_fmt = 0,\n dt = {}\n function error(){\n throw Error(\"no match \" + pos_s + \" \" + s.charAt(pos_s) + \" \"+\n pos_fmt + \" \" + fmt.charAt(pos_fmt))\n }\n\n var locale = __BRYTHON__.locale,\n shortdays = [],\n longdays = [],\n conv_func = locale == \"C\" ?\n function(d){return d.toDateString()} :\n function(d, options){\n return d.toLocaleDateString(locale, options)\n }\n\n for(var day = 16; day < 23; day++){\n var d = new Date(Date.UTC(2012, 11, day, 3, 0, 0))\n shortdays.push(conv_func(d, {weekday: 'short'}))\n longdays.push(conv_func(d, {weekday: 'long'}))\n }\n\n var shortmonths = [],\n longmonths = []\n\n for(var month = 0; month < 12; month++){\n var d = new Date(Date.UTC(2012, month, 1, 3, 0, 0))\n shortmonths.push(conv_func(d, {month: 'short'}))\n longmonths.push(conv_func(d, {month: 'long'}))\n }\n\n var shortdays_re = new RegExp(shortdays.join(\"|\").replace(\".\", \"\\\\.\")),\n longdays_re = new RegExp(longdays.join(\"|\")),\n shortmonths_re = new RegExp(shortmonths.join(\"|\").replace(\".\", \"\\\\.\")),\n longmonths_re = new RegExp(longmonths.join(\"|\"))\n\n var regexps = {\n d: [\"day\", new RegExp(\"0[1-9]|[123][0-9]\")],\n f: [\"microsecond\", new RegExp(\"(\\\\d{1,6})\")],\n H: [\"hour\", new RegExp(\"[01][0-9]|2[0-3]|\\\\d\")],\n I: [\"hour\", new RegExp(\"0[0-9]|1[0-2]\")],\n m: [\"month\", new RegExp(\"0[1-9]|1[012]\")],\n M: [\"minute\", new RegExp(\"[0-5][0-9]\")],\n S: [\"second\", new RegExp(\"([1-5]\\\\d)|(0?\\\\d)\")],\n y: [\"year\", new RegExp(\"0{0,2}\\\\d{2}\")],\n Y: [\"year\", new RegExp(\"\\\\d{4}\")],\n z: [\"tzinfo\", new RegExp(\"Z\")]\n }\n\n while(pos_fmt < fmt.length){\n var car = fmt.charAt(pos_fmt)\n if(car == \"%\"){\n var spec = fmt.charAt(pos_fmt + 1),\n regexp = regexps[spec]\n if(regexp !== undefined){\n var re = regexp[1],\n attr = regexp[0],\n res = re.exec(s.substr(pos_s))\n if(res === null){\n error()\n }else{\n if(dt[attr] !== undefined){\n throw Error(attr + \" is defined more than once\")\n }else{\n dt[attr] = parseInt(res[0])\n if(attr == \"microsecond\"){\n while(dt[attr] < 100000){\n dt[attr] *= 10\n }\n }else if(attr == \"tzinfo\"){\n // Only value supported for the moment : Z\n // (UTC)\n var dt_module = $B.imported[cls.__module__]\n dt.tzinfo = dt_module.timezone.utc\n }\n pos_fmt += 2\n pos_s += res[0].length\n }\n }\n }else if(spec == \"a\" || spec == \"A\"){\n // Locale's abbreviated (a) or full (A) weekday name\n var attr = \"weekday\",\n re = spec == \"a\" ? shortdays_re : longdays_re,\n t = spec == \"a\" ? shortdays : longdays\n res = re.exec(s.substr(pos_s))\n if(res === null){\n error()\n }else{\n var match = res[0],\n ix = t.indexOf(match)\n }\n if(dt.weekday !== undefined){\n throw Error(attr + \" is defined more than once\")\n }else{\n dt.weekday = ix\n }\n pos_fmt += 2\n pos_s += match.length\n }else if(spec == \"b\" || spec == \"B\"){\n // Locales's abbreviated (b) or full (B) month\n var attr = \"month\",\n re = spec == \"b\" ? shortmonths_re : longmonths_re,\n t = spec == \"b\" ? shortmonths : longmonths,\n res = re.exec(s.substr(pos_s))\n if(res === null){\n error()\n }else{\n var match = res[0],\n ix = t.indexOf(match)\n }\n if(dt.month !== undefined){\n throw Error(attr + \" is defined more than once\")\n }else{\n dt.month = ix + 1\n }\n pos_fmt += 2\n pos_s += match.length\n }else if(spec == \"c\"){\n // Locale's appropriate date and time representation\n var fmt1 = fmt.substr(0, pos_fmt - 1) + _locale_c_format() +\n fmt.substr(pos_fmt + 2)\n fmt = fmt1\n }else if(spec == \"%\"){\n if(s.charAt(pos_s) == \"%\"){\n pos_fmt++\n pos_s++\n }else{\n error()\n }\n }else{\n pos_fmt++\n }\n }else{\n if(car == s.charAt(pos_s)){\n pos_fmt++\n pos_s++\n }else{\n error()\n }\n }\n }\n return $B.$call(cls)(dt.year, dt.month, dt.day,\n dt.hour || 0, dt.minute || 0, dt.second || 0,\n dt.microsecond || 0, dt.tzinfo || _b_.None)\n }\n }\n})(__BRYTHON__)\n"], "_svg": [".js", "// creation of an HTML element\nvar $module = (function($B){\n\nvar _b_ = $B.builtins\nvar TagSum = $B.TagSum // defined in py_dom.js\n\nvar $s=[]\nfor(var $b in _b_) $s.push('var ' + $b +' = _b_[\"' + $b + '\"]')\neval($s.join(';'))\n\nvar $svgNS = \"http://www.w3.org/2000/svg\"\nvar $xlinkNS = \"http://www.w3.org/1999/xlink\"\n\nfunction makeTagDict(tagName){\n // return the dictionary for the class associated with tagName\n var dict = $B.make_class(tagName)\n\n dict.__init__ = function(){\n var $ns = $B.args('__init__', 1, {self: null}, ['self'],\n arguments, {}, 'args', 'kw'),\n self = $ns['self'],\n args = $ns['args']\n if(args.length == 1){\n var first = args[0]\n if(isinstance(first, [str, int, float])){\n self.appendChild(document.createTextNode(str.$factory(first)))\n }else if(first.__class__ === TagSum){\n for(var i = 0, len = first.children.length; i < len; i++){\n self.appendChild(first.children[i].elt)\n }\n }else{ // argument is another DOMNode instance\n try{self.appendChild(first.elt)}\n catch(err){throw ValueError.$factory('wrong element ' + first)}\n }\n }\n\n // attributes\n var items = _b_.list.$factory(_b_.dict.items($ns['kw']))\n for(var i = 0, len = items.length; i < len; i++){\n // keyword arguments\n var arg = items[i][0],\n value = items[i][1]\n if(arg.toLowerCase().substr(0,2) == \"on\"){\n // Event binding passed as argument \"onclick\", \"onfocus\"...\n // Better use method bind of DOMNode objects\n var js = '$B.DOMNode.bind(self,\"' +\n arg.toLowerCase().substr(2)\n eval(js+'\",function(){'+value+'})')\n }else if(arg.toLowerCase() == \"style\"){\n $B.DOMNode.set_style(self,value)\n }else if(arg.toLowerCase().indexOf(\"href\") !== -1){ // xlink:href\n self.setAttributeNS( \"http://www.w3.org/1999/xlink\",\n \"href\",value)\n }else{\n if(value !== false){\n // option.selected=false sets it to true :-)\n try{\n arg = arg.replace('_', '-')\n self.setAttributeNS(null, arg, value)\n }catch(err){\n throw ValueError.$factory(\"can't set attribute \" + arg)\n }\n }\n }\n }\n }\n\n dict.__mro__ = [$B.DOMNode, $B.builtins.object]\n\n dict.__new__ = function(cls){\n var res = $B.DOMNode.$factory(document.createElementNS($svgNS, tagName))\n res.__class__ = cls\n return res\n }\n\n dict.$factory = function(){\n var res = $B.DOMNode.$factory(\n document.createElementNS($svgNS, tagName))\n res.__class__ = dict\n // apply __init__\n dict.__init__(res, ...arguments)\n return res\n }\n\n $B.set_func_names(dict, \"browser.svg\")\n\n return dict\n}\n\n\n// SVG\nvar $svg_tags = ['a',\n'altGlyph',\n'altGlyphDef',\n'altGlyphItem',\n'animate',\n'animateColor',\n'animateMotion',\n'animateTransform',\n'circle',\n'clipPath',\n'color_profile', // instead of color-profile\n'cursor',\n'defs',\n'desc',\n'ellipse',\n'feBlend',\n'foreignObject', //patch to enable foreign objects\n'g',\n'image',\n'line',\n'linearGradient',\n'marker',\n'mask',\n'path',\n'pattern',\n'polygon',\n'polyline',\n'radialGradient',\n'rect',\n'set',\n'stop',\n'svg',\n'text',\n'tref',\n'tspan',\n'use']\n\n// create classes\nvar obj = new Object()\nvar dicts = {}\nfor(var i = 0, len = $svg_tags.length; i < len; i++){\n var tag = $svg_tags[i]\n obj[tag] = makeTagDict(tag)\n}\n\nreturn obj\n})(__BRYTHON__)\n"], "_warnings": [".js", "var $module = (function($B){\n\n_b_ = $B.builtins\n\nreturn {\n __doc__: \"_warnings provides basic warning filtering support.\\n \" +\n \"It is a helper module to speed up interpreter start-up.\",\n\n default_action: \"default\",\n\n filters: [\n ['ignore', _b_.None, _b_.DeprecationWarning, _b_.None, 0],\n ['ignore', _b_.None, _b_.PendingDeprecationWarning, _b_.None, 0],\n ['ignore', _b_.None, _b_.ImportWarning, _b_.None, 0],\n ['ignore', _b_.None, _b_.BytesWarning, _b_.None, 0]].map(\n function(x){return _b_.tuple.$factory(x)}),\n\n once_registry: $B.empty_dict(),\n\n warn: function(){},\n\n warn_explicit: function(){}\n\n}\n\n})(__BRYTHON__)\n"], "_webcomponent": [".js", "// module for Web Components\nvar $module = (function($B){\n\nvar _b_ = $B.builtins\n\nfunction define(tag_name, cls){\n var $ = $B.args(\"define\", 2, {tag_name: null, cls: null},\n [\"tag_name\", \"cls\"], arguments, {}, null, null),\n tag_name = $.tag_name,\n cls = $.cls\n if(typeof tag_name != \"string\"){\n throw _b_.TypeError.$factory(\"first argument of define() \" +\n \"must be a string, not '\" + $B.class_name(tag_name) + \"'\")\n }else if(tag_name.indexOf(\"-\") == -1){\n throw _b_.ValueError.$factory(\"custom tag name must \" +\n \"contain a hyphen (-)\")\n }\n if(!_b_.isinstance(cls, _b_.type)){\n throw _b_.TypeError.$factory(\"second argument of define() \" +\n \"must be a class, not '\" + $B.class_name(tag_name) + \"'\")\n }\n\n // Create the Javascript class used for the component. It must have\n // the same name as the Python class\n var src = String.raw`var WebComponent = class extends HTMLElement {\n constructor(){\n // Always call super first in constructor\n super()\n if(cls.__init__){\n try{\n var _self = $B.DOMNode.$factory(this)\n _self.__class__ = cls\n $B.$call(cls.__init__)(_self)\n }catch(err){\n $B.handle_error(err)\n }\n }\n }\n static get observedAttributes(){\n if(cls.observedAttributes){\n return cls.observedAttributes(cls)\n }else{\n return []\n }\n }\n }\n `\n var name = cls.$infos.__name__\n eval(src.replace(\"WebComponent\", name))\n var webcomp = eval(name) // JS class for component\n webcomp.$cls = cls\n\n for(key in cls){\n // Wrap other methods such as connectedCallback\n if(typeof cls[key] == \"function\"){\n webcomp.prototype[key] = (function(attr){\n return function(){\n return $B.pyobj2jsobj(cls[attr]).call(null,\n $B.DOMNode.$factory(this), ...arguments)\n }\n })(key)\n }\n }\n\n // Override __getattribute__ to handle DOMNode attributes such as\n // attachShadow\n cls.__getattribute__ = function(self, attr){\n try{\n return $B.DOMNode.__getattribute__(self, attr)\n }catch(err){\n if(err.__class__ === _b_.AttributeError){\n var ga = $B.$getattr(cls, \"__getattribute__\")\n return ga(self, attr)\n }else{\n throw err\n }\n }\n }\n\n // define WebComp as the class to use for the specified tag name\n customElements.define(tag_name, webcomp)\n}\n\nfunction get(name){\n var ce = customElements.get(name)\n if(ce && ce.$cls){return ce.$cls}\n return _b_.None\n}\n\nreturn {\n define: define,\n get: get\n}\n\n})(__BRYTHON__)"], "_webworker": [".js", "// Web Worker implementation\n\nvar $module = (function($B){\n\nvar _b_ = $B.builtins\n\nvar brython_scripts = ['brython', 'brython_stdlib']\n\nvar wclass = $B.make_class(\"Worker\",\n function(worker){\n var res = worker\n res.send = res.postMessage\n return res\n }\n)\nwclass.__mro__ = [$B.JSObj, _b_.object]\n\n$B.set_func_names(wclass, \"browser.worker\")\n\nvar _Worker = $B.make_class(\"Worker\", function(id, onmessage, onerror){\n var $ = $B.args(\"__init__\", 3, {id: null, onmessage: null, onerror: null},\n ['id', 'onmessage', 'onerror'], arguments,\n {onmessage: _b_.None, onerror: _b_.None}, null, null),\n id = $.id,\n src = $B.webworkers[id]\n if(src === undefined){\n throw _b_.KeyError.$factory(id)\n }\n var script_id = \"worker\" + $B.UUID(),\n js = __BRYTHON__.imported.javascript.py2js(src,\n script_id),\n header = 'var $locals_' + script_id +' = {}\\n';\n brython_scripts.forEach(function(script){\n var url = $B.brython_path + script + \".js?\" +\n (new Date()).getTime()\n header += 'importScripts(\"' + url + '\")\\n'\n })\n // restore brython_path\n header += '__BRYTHON__.brython_path = \"' + $B.brython_path +\n '\"\\n'\n // restore path for imports (cf. issue #1305)\n header += '__BRYTHON__.path = \"' + $B.path +'\".split(\",\")\\n'\n // Call brython() to initialize internal Brython values\n header += 'brython(1)\\n'\n js = header + js\n var blob = new Blob([js], {type: \"application/js\"}),\n url = URL.createObjectURL(blob),\n w = new Worker(url),\n res = wclass.$factory(w)\n return res\n})\n\nreturn {\n Worker: _Worker\n}\n\n})(__BRYTHON__)\n"], "_zlib_utils": [".js", "\nfunction rfind(buf, seq){\n var buflen = buf.length,\n len = seq.length\n for(var i = buflen - len; i >= 0; i--){\n var chunk = buf.slice(i, i + len),\n found = true\n for(var j = 0; j < len; j++){\n if(chunk[j] != seq[j]){\n found = false\n break\n }\n }\n if(found){return i}\n }\n return -1\n}\n\n\nvar c;\nvar crcTable = [];\nfor(var n =0; n < 256; n++){\n c = n;\n for(var k =0; k < 8; k++){\n c = ((c&1) ? (0xEDB88320 ^ (c >>> 1)) : (c >>> 1));\n }\n crcTable[n] = c;\n}\n\nvar $module = (function($B){\n\n return {\n crc32: function(str) {\n var crc = 0 ^ (-1);\n \n for (var i = 0; i < str.length; i++ ) {\n crc = (crc >>> 8) ^ crcTable[(crc ^ str.charCodeAt(i)) & 0xFF];\n }\n \n return (crc ^ (-1)) >>> 0;\n },\n\n lz_generator: function(text, size, min_len){\n /*\n Returns a list of items based on the LZ algorithm, using the\n specified window size and a minimum match length.\n The items are a tuple (length, distance) if a match has been\n found, and a byte otherwise.\n */\n // 'text' is an instance of Python 'bytes' class, the actual\n // bytes are in text.source\n text = text.source\n if(min_len === undefined){\n min_len = 3\n }\n var pos = 0, // position in text\n items = [] // returned items\n while(pos < text.length){\n sequence = text.slice(pos, pos + min_len)\n if(sequence.length < 3){\n for(var i = pos; i < text.length; i++){\n items.push(text[i])\n }\n break\n }\n // Search the sequence in the 'size' previous bytes\n buf = text.slice(pos - size, pos)\n buf_pos = rfind(buf, sequence)\n if(buf_pos > -1){\n // Match of length 3 found; search a longer one\n var len = 1\n while(len < 259 &&\n buf_pos + len < buf.length &&\n pos + len < text.length &&\n text[pos + len] == buf[buf_pos + len]){\n len += 1\n }\n match = text.slice(pos, pos + len)\n // \"Lazy matching\": search longer match starting at next\n // position\n longer_match = false\n if(pos + len < text.length - 2){\n match2 = text.slice(pos + 1, pos + len + 2)\n longer_buf_pos = rfind(buf, match2)\n if(longer_buf_pos > -1){\n // found longer match : emit current byte as\n // literal and move 1 byte forward\n longer_match = true\n char = text[pos]\n items.push(char)\n pos += 1\n }\n }\n if(! longer_match){\n distance = buf.length - buf_pos\n items.push($B.fast_tuple([len, distance]))\n if(pos + len == text.length){\n break\n }else{\n pos += len\n items.push(text[pos])\n pos += 1\n }\n }\n }else{\n char = text[pos]\n items.push(char)\n pos += 1\n }\n }\n return items\n }\n }\n})(__BRYTHON__)"], "crypto_js": [".py", "", [], 1], "crypto_js.rollups": [".py", "", [], 1], "crypto_js.rollups.md5": [".js", "/*\nCryptoJS v3.1.2\ncode.google.com/p/crypto-js\n(c) 2009-2013 by Jeff Mott. All rights reserved.\ncode.google.com/p/crypto-js/wiki/License\n*/\nvar CryptoJS=CryptoJS||function(s,p){var m={},l=m.lib={},n=function(){},r=l.Base={extend:function(b){n.prototype=this;var h=new n;b&&h.mixIn(b);h.hasOwnProperty(\"init\")||(h.init=function(){h.$super.init.apply(this,arguments)});h.init.prototype=h;h.$super=this;return h},create:function(){var b=this.extend();b.init.apply(b,arguments);return b},init:function(){},mixIn:function(b){for(var h in b)b.hasOwnProperty(h)&&(this[h]=b[h]);b.hasOwnProperty(\"toString\")&&(this.toString=b.toString)},clone:function(){return this.init.prototype.extend(this)}},\nq=l.WordArray=r.extend({init:function(b,h){b=this.words=b||[];this.sigBytes=h!=p?h:4*b.length},toString:function(b){return(b||t).stringify(this)},concat:function(b){var h=this.words,a=b.words,j=this.sigBytes;b=b.sigBytes;this.clamp();if(j%4)for(var g=0;g>>2]|=(a[g>>>2]>>>24-8*(g%4)&255)<<24-8*((j+g)%4);else if(65535>>2]=a[g>>>2];else h.push.apply(h,a);this.sigBytes+=b;return this},clamp:function(){var b=this.words,h=this.sigBytes;b[h>>>2]&=4294967295<<\n32-8*(h%4);b.length=s.ceil(h/4)},clone:function(){var b=r.clone.call(this);b.words=this.words.slice(0);return b},random:function(b){for(var h=[],a=0;a>>2]>>>24-8*(j%4)&255;g.push((k>>>4).toString(16));g.push((k&15).toString(16))}return g.join(\"\")},parse:function(b){for(var a=b.length,g=[],j=0;j>>3]|=parseInt(b.substr(j,\n2),16)<<24-4*(j%8);return new q.init(g,a/2)}},a=v.Latin1={stringify:function(b){var a=b.words;b=b.sigBytes;for(var g=[],j=0;j>>2]>>>24-8*(j%4)&255));return g.join(\"\")},parse:function(b){for(var a=b.length,g=[],j=0;j>>2]|=(b.charCodeAt(j)&255)<<24-8*(j%4);return new q.init(g,a)}},u=v.Utf8={stringify:function(b){try{return decodeURIComponent(escape(a.stringify(b)))}catch(g){throw Error(\"Malformed UTF-8 data\");}},parse:function(b){return a.parse(unescape(encodeURIComponent(b)))}},\ng=l.BufferedBlockAlgorithm=r.extend({reset:function(){this._data=new q.init;this._nDataBytes=0},_append:function(b){\"string\"==typeof b&&(b=u.parse(b));this._data.concat(b);this._nDataBytes+=b.sigBytes},_process:function(b){var a=this._data,g=a.words,j=a.sigBytes,k=this.blockSize,m=j/(4*k),m=b?s.ceil(m):s.max((m|0)-this._minBufferSize,0);b=m*k;j=s.min(4*b,j);if(b){for(var l=0;l>>32-j)+k}function m(a,k,b,h,l,j,m){a=a+(k&h|b&~h)+l+m;return(a<>>32-j)+k}function l(a,k,b,h,l,j,m){a=a+(k^b^h)+l+m;return(a<>>32-j)+k}function n(a,k,b,h,l,j,m){a=a+(b^(k|~h))+l+m;return(a<>>32-j)+k}for(var r=CryptoJS,q=r.lib,v=q.WordArray,t=q.Hasher,q=r.algo,a=[],u=0;64>u;u++)a[u]=4294967296*s.abs(s.sin(u+1))|0;q=q.MD5=t.extend({_doReset:function(){this._hash=new v.init([1732584193,4023233417,2562383102,271733878])},\n_doProcessBlock:function(g,k){for(var b=0;16>b;b++){var h=k+b,w=g[h];g[h]=(w<<8|w>>>24)&16711935|(w<<24|w>>>8)&4278255360}var b=this._hash.words,h=g[k+0],w=g[k+1],j=g[k+2],q=g[k+3],r=g[k+4],s=g[k+5],t=g[k+6],u=g[k+7],v=g[k+8],x=g[k+9],y=g[k+10],z=g[k+11],A=g[k+12],B=g[k+13],C=g[k+14],D=g[k+15],c=b[0],d=b[1],e=b[2],f=b[3],c=p(c,d,e,f,h,7,a[0]),f=p(f,c,d,e,w,12,a[1]),e=p(e,f,c,d,j,17,a[2]),d=p(d,e,f,c,q,22,a[3]),c=p(c,d,e,f,r,7,a[4]),f=p(f,c,d,e,s,12,a[5]),e=p(e,f,c,d,t,17,a[6]),d=p(d,e,f,c,u,22,a[7]),\nc=p(c,d,e,f,v,7,a[8]),f=p(f,c,d,e,x,12,a[9]),e=p(e,f,c,d,y,17,a[10]),d=p(d,e,f,c,z,22,a[11]),c=p(c,d,e,f,A,7,a[12]),f=p(f,c,d,e,B,12,a[13]),e=p(e,f,c,d,C,17,a[14]),d=p(d,e,f,c,D,22,a[15]),c=m(c,d,e,f,w,5,a[16]),f=m(f,c,d,e,t,9,a[17]),e=m(e,f,c,d,z,14,a[18]),d=m(d,e,f,c,h,20,a[19]),c=m(c,d,e,f,s,5,a[20]),f=m(f,c,d,e,y,9,a[21]),e=m(e,f,c,d,D,14,a[22]),d=m(d,e,f,c,r,20,a[23]),c=m(c,d,e,f,x,5,a[24]),f=m(f,c,d,e,C,9,a[25]),e=m(e,f,c,d,q,14,a[26]),d=m(d,e,f,c,v,20,a[27]),c=m(c,d,e,f,B,5,a[28]),f=m(f,c,\nd,e,j,9,a[29]),e=m(e,f,c,d,u,14,a[30]),d=m(d,e,f,c,A,20,a[31]),c=l(c,d,e,f,s,4,a[32]),f=l(f,c,d,e,v,11,a[33]),e=l(e,f,c,d,z,16,a[34]),d=l(d,e,f,c,C,23,a[35]),c=l(c,d,e,f,w,4,a[36]),f=l(f,c,d,e,r,11,a[37]),e=l(e,f,c,d,u,16,a[38]),d=l(d,e,f,c,y,23,a[39]),c=l(c,d,e,f,B,4,a[40]),f=l(f,c,d,e,h,11,a[41]),e=l(e,f,c,d,q,16,a[42]),d=l(d,e,f,c,t,23,a[43]),c=l(c,d,e,f,x,4,a[44]),f=l(f,c,d,e,A,11,a[45]),e=l(e,f,c,d,D,16,a[46]),d=l(d,e,f,c,j,23,a[47]),c=n(c,d,e,f,h,6,a[48]),f=n(f,c,d,e,u,10,a[49]),e=n(e,f,c,d,\nC,15,a[50]),d=n(d,e,f,c,s,21,a[51]),c=n(c,d,e,f,A,6,a[52]),f=n(f,c,d,e,q,10,a[53]),e=n(e,f,c,d,y,15,a[54]),d=n(d,e,f,c,w,21,a[55]),c=n(c,d,e,f,v,6,a[56]),f=n(f,c,d,e,D,10,a[57]),e=n(e,f,c,d,t,15,a[58]),d=n(d,e,f,c,B,21,a[59]),c=n(c,d,e,f,r,6,a[60]),f=n(f,c,d,e,z,10,a[61]),e=n(e,f,c,d,j,15,a[62]),d=n(d,e,f,c,x,21,a[63]);b[0]=b[0]+c|0;b[1]=b[1]+d|0;b[2]=b[2]+e|0;b[3]=b[3]+f|0},_doFinalize:function(){var a=this._data,k=a.words,b=8*this._nDataBytes,h=8*a.sigBytes;k[h>>>5]|=128<<24-h%32;var l=s.floor(b/\n4294967296);k[(h+64>>>9<<4)+15]=(l<<8|l>>>24)&16711935|(l<<24|l>>>8)&4278255360;k[(h+64>>>9<<4)+14]=(b<<8|b>>>24)&16711935|(b<<24|b>>>8)&4278255360;a.sigBytes=4*(k.length+1);this._process();a=this._hash;k=a.words;for(b=0;4>b;b++)h=k[b],k[b]=(h<<8|h>>>24)&16711935|(h<<24|h>>>8)&4278255360;return a},clone:function(){var a=t.clone.call(this);a._hash=this._hash.clone();return a}});r.MD5=t._createHelper(q);r.HmacMD5=t._createHmacHelper(q)})(Math);\n"], "crypto_js.rollups.sha1": [".js", "/*\nCryptoJS v3.1.2\ncode.google.com/p/crypto-js\n(c) 2009-2013 by Jeff Mott. All rights reserved.\ncode.google.com/p/crypto-js/wiki/License\n*/\nvar CryptoJS=CryptoJS||function(e,m){var p={},j=p.lib={},l=function(){},f=j.Base={extend:function(a){l.prototype=this;var c=new l;a&&c.mixIn(a);c.hasOwnProperty(\"init\")||(c.init=function(){c.$super.init.apply(this,arguments)});c.init.prototype=c;c.$super=this;return c},create:function(){var a=this.extend();a.init.apply(a,arguments);return a},init:function(){},mixIn:function(a){for(var c in a)a.hasOwnProperty(c)&&(this[c]=a[c]);a.hasOwnProperty(\"toString\")&&(this.toString=a.toString)},clone:function(){return this.init.prototype.extend(this)}},\nn=j.WordArray=f.extend({init:function(a,c){a=this.words=a||[];this.sigBytes=c!=m?c:4*a.length},toString:function(a){return(a||h).stringify(this)},concat:function(a){var c=this.words,q=a.words,d=this.sigBytes;a=a.sigBytes;this.clamp();if(d%4)for(var b=0;b>>2]|=(q[b>>>2]>>>24-8*(b%4)&255)<<24-8*((d+b)%4);else if(65535>>2]=q[b>>>2];else c.push.apply(c,q);this.sigBytes+=a;return this},clamp:function(){var a=this.words,c=this.sigBytes;a[c>>>2]&=4294967295<<\n32-8*(c%4);a.length=e.ceil(c/4)},clone:function(){var a=f.clone.call(this);a.words=this.words.slice(0);return a},random:function(a){for(var c=[],b=0;b>>2]>>>24-8*(d%4)&255;b.push((f>>>4).toString(16));b.push((f&15).toString(16))}return b.join(\"\")},parse:function(a){for(var c=a.length,b=[],d=0;d>>3]|=parseInt(a.substr(d,\n2),16)<<24-4*(d%8);return new n.init(b,c/2)}},g=b.Latin1={stringify:function(a){var c=a.words;a=a.sigBytes;for(var b=[],d=0;d>>2]>>>24-8*(d%4)&255));return b.join(\"\")},parse:function(a){for(var c=a.length,b=[],d=0;d>>2]|=(a.charCodeAt(d)&255)<<24-8*(d%4);return new n.init(b,c)}},r=b.Utf8={stringify:function(a){try{return decodeURIComponent(escape(g.stringify(a)))}catch(c){throw Error(\"Malformed UTF-8 data\");}},parse:function(a){return g.parse(unescape(encodeURIComponent(a)))}},\nk=j.BufferedBlockAlgorithm=f.extend({reset:function(){this._data=new n.init;this._nDataBytes=0},_append:function(a){\"string\"==typeof a&&(a=r.parse(a));this._data.concat(a);this._nDataBytes+=a.sigBytes},_process:function(a){var c=this._data,b=c.words,d=c.sigBytes,f=this.blockSize,h=d/(4*f),h=a?e.ceil(h):e.max((h|0)-this._minBufferSize,0);a=h*f;d=e.min(4*a,d);if(a){for(var g=0;ga;a++){if(16>a)l[a]=f[n+a]|0;else{var c=l[a-3]^l[a-8]^l[a-14]^l[a-16];l[a]=c<<1|c>>>31}c=(h<<5|h>>>27)+j+l[a];c=20>a?c+((g&e|~g&k)+1518500249):40>a?c+((g^e^k)+1859775393):60>a?c+((g&e|g&k|e&k)-1894007588):c+((g^e^\nk)-899497514);j=k;k=e;e=g<<30|g>>>2;g=h;h=c}b[0]=b[0]+h|0;b[1]=b[1]+g|0;b[2]=b[2]+e|0;b[3]=b[3]+k|0;b[4]=b[4]+j|0},_doFinalize:function(){var f=this._data,e=f.words,b=8*this._nDataBytes,h=8*f.sigBytes;e[h>>>5]|=128<<24-h%32;e[(h+64>>>9<<4)+14]=Math.floor(b/4294967296);e[(h+64>>>9<<4)+15]=b;f.sigBytes=4*e.length;this._process();return this._hash},clone:function(){var e=j.clone.call(this);e._hash=this._hash.clone();return e}});e.SHA1=j._createHelper(m);e.HmacSHA1=j._createHmacHelper(m)})();\n"], "crypto_js.rollups.sha224": [".js", "/*\nCryptoJS v3.1.2\ncode.google.com/p/crypto-js\n(c) 2009-2013 by Jeff Mott. All rights reserved.\ncode.google.com/p/crypto-js/wiki/License\n*/\nvar CryptoJS=CryptoJS||function(g,l){var f={},k=f.lib={},h=function(){},m=k.Base={extend:function(a){h.prototype=this;var c=new h;a&&c.mixIn(a);c.hasOwnProperty(\"init\")||(c.init=function(){c.$super.init.apply(this,arguments)});c.init.prototype=c;c.$super=this;return c},create:function(){var a=this.extend();a.init.apply(a,arguments);return a},init:function(){},mixIn:function(a){for(var c in a)a.hasOwnProperty(c)&&(this[c]=a[c]);a.hasOwnProperty(\"toString\")&&(this.toString=a.toString)},clone:function(){return this.init.prototype.extend(this)}},\nq=k.WordArray=m.extend({init:function(a,c){a=this.words=a||[];this.sigBytes=c!=l?c:4*a.length},toString:function(a){return(a||s).stringify(this)},concat:function(a){var c=this.words,d=a.words,b=this.sigBytes;a=a.sigBytes;this.clamp();if(b%4)for(var e=0;e>>2]|=(d[e>>>2]>>>24-8*(e%4)&255)<<24-8*((b+e)%4);else if(65535>>2]=d[e>>>2];else c.push.apply(c,d);this.sigBytes+=a;return this},clamp:function(){var a=this.words,c=this.sigBytes;a[c>>>2]&=4294967295<<\n32-8*(c%4);a.length=g.ceil(c/4)},clone:function(){var a=m.clone.call(this);a.words=this.words.slice(0);return a},random:function(a){for(var c=[],d=0;d>>2]>>>24-8*(b%4)&255;d.push((e>>>4).toString(16));d.push((e&15).toString(16))}return d.join(\"\")},parse:function(a){for(var c=a.length,d=[],b=0;b>>3]|=parseInt(a.substr(b,\n2),16)<<24-4*(b%8);return new q.init(d,c/2)}},n=t.Latin1={stringify:function(a){var c=a.words;a=a.sigBytes;for(var d=[],b=0;b>>2]>>>24-8*(b%4)&255));return d.join(\"\")},parse:function(a){for(var c=a.length,d=[],b=0;b>>2]|=(a.charCodeAt(b)&255)<<24-8*(b%4);return new q.init(d,c)}},j=t.Utf8={stringify:function(a){try{return decodeURIComponent(escape(n.stringify(a)))}catch(c){throw Error(\"Malformed UTF-8 data\");}},parse:function(a){return n.parse(unescape(encodeURIComponent(a)))}},\nw=k.BufferedBlockAlgorithm=m.extend({reset:function(){this._data=new q.init;this._nDataBytes=0},_append:function(a){\"string\"==typeof a&&(a=j.parse(a));this._data.concat(a);this._nDataBytes+=a.sigBytes},_process:function(a){var c=this._data,d=c.words,b=c.sigBytes,e=this.blockSize,f=b/(4*e),f=a?g.ceil(f):g.max((f|0)-this._minBufferSize,0);a=f*e;b=g.min(4*a,b);if(a){for(var u=0;un;){var j;a:{j=s;for(var w=g.sqrt(j),v=2;v<=w;v++)if(!(j%v)){j=!1;break a}j=!0}j&&(8>n&&(m[n]=t(g.pow(s,0.5))),q[n]=t(g.pow(s,1/3)),n++);s++}var a=[],f=f.SHA256=h.extend({_doReset:function(){this._hash=new k.init(m.slice(0))},_doProcessBlock:function(c,d){for(var b=this._hash.words,e=b[0],f=b[1],g=b[2],k=b[3],h=b[4],l=b[5],m=b[6],n=b[7],p=0;64>p;p++){if(16>p)a[p]=\nc[d+p]|0;else{var j=a[p-15],r=a[p-2];a[p]=((j<<25|j>>>7)^(j<<14|j>>>18)^j>>>3)+a[p-7]+((r<<15|r>>>17)^(r<<13|r>>>19)^r>>>10)+a[p-16]}j=n+((h<<26|h>>>6)^(h<<21|h>>>11)^(h<<7|h>>>25))+(h&l^~h&m)+q[p]+a[p];r=((e<<30|e>>>2)^(e<<19|e>>>13)^(e<<10|e>>>22))+(e&f^e&g^f&g);n=m;m=l;l=h;h=k+j|0;k=g;g=f;f=e;e=j+r|0}b[0]=b[0]+e|0;b[1]=b[1]+f|0;b[2]=b[2]+g|0;b[3]=b[3]+k|0;b[4]=b[4]+h|0;b[5]=b[5]+l|0;b[6]=b[6]+m|0;b[7]=b[7]+n|0},_doFinalize:function(){var a=this._data,d=a.words,b=8*this._nDataBytes,e=8*a.sigBytes;\nd[e>>>5]|=128<<24-e%32;d[(e+64>>>9<<4)+14]=g.floor(b/4294967296);d[(e+64>>>9<<4)+15]=b;a.sigBytes=4*d.length;this._process();return this._hash},clone:function(){var a=h.clone.call(this);a._hash=this._hash.clone();return a}});l.SHA256=h._createHelper(f);l.HmacSHA256=h._createHmacHelper(f)})(Math);\n(function(){var g=CryptoJS,l=g.lib.WordArray,f=g.algo,k=f.SHA256,f=f.SHA224=k.extend({_doReset:function(){this._hash=new l.init([3238371032,914150663,812702999,4144912697,4290775857,1750603025,1694076839,3204075428])},_doFinalize:function(){var f=k._doFinalize.call(this);f.sigBytes-=4;return f}});g.SHA224=k._createHelper(f);g.HmacSHA224=k._createHmacHelper(f)})();\n"], "crypto_js.rollups.sha256": [".js", "/*\nCryptoJS v3.1.2\ncode.google.com/p/crypto-js\n(c) 2009-2013 by Jeff Mott. All rights reserved.\ncode.google.com/p/crypto-js/wiki/License\n*/\nvar CryptoJS=CryptoJS||function(h,s){var f={},t=f.lib={},g=function(){},j=t.Base={extend:function(a){g.prototype=this;var c=new g;a&&c.mixIn(a);c.hasOwnProperty(\"init\")||(c.init=function(){c.$super.init.apply(this,arguments)});c.init.prototype=c;c.$super=this;return c},create:function(){var a=this.extend();a.init.apply(a,arguments);return a},init:function(){},mixIn:function(a){for(var c in a)a.hasOwnProperty(c)&&(this[c]=a[c]);a.hasOwnProperty(\"toString\")&&(this.toString=a.toString)},clone:function(){return this.init.prototype.extend(this)}},\nq=t.WordArray=j.extend({init:function(a,c){a=this.words=a||[];this.sigBytes=c!=s?c:4*a.length},toString:function(a){return(a||u).stringify(this)},concat:function(a){var c=this.words,d=a.words,b=this.sigBytes;a=a.sigBytes;this.clamp();if(b%4)for(var e=0;e>>2]|=(d[e>>>2]>>>24-8*(e%4)&255)<<24-8*((b+e)%4);else if(65535>>2]=d[e>>>2];else c.push.apply(c,d);this.sigBytes+=a;return this},clamp:function(){var a=this.words,c=this.sigBytes;a[c>>>2]&=4294967295<<\n32-8*(c%4);a.length=h.ceil(c/4)},clone:function(){var a=j.clone.call(this);a.words=this.words.slice(0);return a},random:function(a){for(var c=[],d=0;d>>2]>>>24-8*(b%4)&255;d.push((e>>>4).toString(16));d.push((e&15).toString(16))}return d.join(\"\")},parse:function(a){for(var c=a.length,d=[],b=0;b>>3]|=parseInt(a.substr(b,\n2),16)<<24-4*(b%8);return new q.init(d,c/2)}},k=v.Latin1={stringify:function(a){var c=a.words;a=a.sigBytes;for(var d=[],b=0;b>>2]>>>24-8*(b%4)&255));return d.join(\"\")},parse:function(a){for(var c=a.length,d=[],b=0;b>>2]|=(a.charCodeAt(b)&255)<<24-8*(b%4);return new q.init(d,c)}},l=v.Utf8={stringify:function(a){try{return decodeURIComponent(escape(k.stringify(a)))}catch(c){throw Error(\"Malformed UTF-8 data\");}},parse:function(a){return k.parse(unescape(encodeURIComponent(a)))}},\nx=t.BufferedBlockAlgorithm=j.extend({reset:function(){this._data=new q.init;this._nDataBytes=0},_append:function(a){\"string\"==typeof a&&(a=l.parse(a));this._data.concat(a);this._nDataBytes+=a.sigBytes},_process:function(a){var c=this._data,d=c.words,b=c.sigBytes,e=this.blockSize,f=b/(4*e),f=a?h.ceil(f):h.max((f|0)-this._minBufferSize,0);a=f*e;b=h.min(4*a,b);if(a){for(var m=0;mk;){var l;a:{l=u;for(var x=h.sqrt(l),w=2;w<=x;w++)if(!(l%w)){l=!1;break a}l=!0}l&&(8>k&&(j[k]=v(h.pow(u,0.5))),q[k]=v(h.pow(u,1/3)),k++);u++}var a=[],f=f.SHA256=g.extend({_doReset:function(){this._hash=new t.init(j.slice(0))},_doProcessBlock:function(c,d){for(var b=this._hash.words,e=b[0],f=b[1],m=b[2],h=b[3],p=b[4],j=b[5],k=b[6],l=b[7],n=0;64>n;n++){if(16>n)a[n]=\nc[d+n]|0;else{var r=a[n-15],g=a[n-2];a[n]=((r<<25|r>>>7)^(r<<14|r>>>18)^r>>>3)+a[n-7]+((g<<15|g>>>17)^(g<<13|g>>>19)^g>>>10)+a[n-16]}r=l+((p<<26|p>>>6)^(p<<21|p>>>11)^(p<<7|p>>>25))+(p&j^~p&k)+q[n]+a[n];g=((e<<30|e>>>2)^(e<<19|e>>>13)^(e<<10|e>>>22))+(e&f^e&m^f&m);l=k;k=j;j=p;p=h+r|0;h=m;m=f;f=e;e=r+g|0}b[0]=b[0]+e|0;b[1]=b[1]+f|0;b[2]=b[2]+m|0;b[3]=b[3]+h|0;b[4]=b[4]+p|0;b[5]=b[5]+j|0;b[6]=b[6]+k|0;b[7]=b[7]+l|0},_doFinalize:function(){var a=this._data,d=a.words,b=8*this._nDataBytes,e=8*a.sigBytes;\nd[e>>>5]|=128<<24-e%32;d[(e+64>>>9<<4)+14]=h.floor(b/4294967296);d[(e+64>>>9<<4)+15]=b;a.sigBytes=4*d.length;this._process();return this._hash},clone:function(){var a=g.clone.call(this);a._hash=this._hash.clone();return a}});s.SHA256=g._createHelper(f);s.HmacSHA256=g._createHmacHelper(f)})(Math);\n"], "crypto_js.rollups.sha3": [".js", "/*\nCryptoJS v3.1.2\ncode.google.com/p/crypto-js\n(c) 2009-2013 by Jeff Mott. All rights reserved.\ncode.google.com/p/crypto-js/wiki/License\n*/\nvar CryptoJS=CryptoJS||function(v,p){var d={},u=d.lib={},r=function(){},f=u.Base={extend:function(a){r.prototype=this;var b=new r;a&&b.mixIn(a);b.hasOwnProperty(\"init\")||(b.init=function(){b.$super.init.apply(this,arguments)});b.init.prototype=b;b.$super=this;return b},create:function(){var a=this.extend();a.init.apply(a,arguments);return a},init:function(){},mixIn:function(a){for(var b in a)a.hasOwnProperty(b)&&(this[b]=a[b]);a.hasOwnProperty(\"toString\")&&(this.toString=a.toString)},clone:function(){return this.init.prototype.extend(this)}},\ns=u.WordArray=f.extend({init:function(a,b){a=this.words=a||[];this.sigBytes=b!=p?b:4*a.length},toString:function(a){return(a||y).stringify(this)},concat:function(a){var b=this.words,c=a.words,j=this.sigBytes;a=a.sigBytes;this.clamp();if(j%4)for(var n=0;n>>2]|=(c[n>>>2]>>>24-8*(n%4)&255)<<24-8*((j+n)%4);else if(65535>>2]=c[n>>>2];else b.push.apply(b,c);this.sigBytes+=a;return this},clamp:function(){var a=this.words,b=this.sigBytes;a[b>>>2]&=4294967295<<\n32-8*(b%4);a.length=v.ceil(b/4)},clone:function(){var a=f.clone.call(this);a.words=this.words.slice(0);return a},random:function(a){for(var b=[],c=0;c>>2]>>>24-8*(j%4)&255;c.push((n>>>4).toString(16));c.push((n&15).toString(16))}return c.join(\"\")},parse:function(a){for(var b=a.length,c=[],j=0;j>>3]|=parseInt(a.substr(j,\n2),16)<<24-4*(j%8);return new s.init(c,b/2)}},e=x.Latin1={stringify:function(a){var b=a.words;a=a.sigBytes;for(var c=[],j=0;j>>2]>>>24-8*(j%4)&255));return c.join(\"\")},parse:function(a){for(var b=a.length,c=[],j=0;j>>2]|=(a.charCodeAt(j)&255)<<24-8*(j%4);return new s.init(c,b)}},q=x.Utf8={stringify:function(a){try{return decodeURIComponent(escape(e.stringify(a)))}catch(b){throw Error(\"Malformed UTF-8 data\");}},parse:function(a){return e.parse(unescape(encodeURIComponent(a)))}},\nt=u.BufferedBlockAlgorithm=f.extend({reset:function(){this._data=new s.init;this._nDataBytes=0},_append:function(a){\"string\"==typeof a&&(a=q.parse(a));this._data.concat(a);this._nDataBytes+=a.sigBytes},_process:function(a){var b=this._data,c=b.words,j=b.sigBytes,n=this.blockSize,e=j/(4*n),e=a?v.ceil(e):v.max((e|0)-this._minBufferSize,0);a=e*n;j=v.min(4*a,j);if(a){for(var f=0;ft;t++){s[e+5*q]=(t+1)*(t+2)/2%64;var w=(2*e+3*q)%5,e=q%5,q=w}for(e=0;5>e;e++)for(q=0;5>q;q++)x[e+5*q]=q+5*((2*e+3*q)%5);e=1;for(q=0;24>q;q++){for(var a=w=t=0;7>a;a++){if(e&1){var b=(1<b?w^=1<e;e++)c[e]=f.create();d=d.SHA3=r.extend({cfg:r.cfg.extend({outputLength:512}),_doReset:function(){for(var a=this._state=\n[],b=0;25>b;b++)a[b]=new f.init;this.blockSize=(1600-2*this.cfg.outputLength)/32},_doProcessBlock:function(a,b){for(var e=this._state,f=this.blockSize/2,h=0;h>>24)&16711935|(l<<24|l>>>8)&4278255360,m=(m<<8|m>>>24)&16711935|(m<<24|m>>>8)&4278255360,g=e[h];g.high^=m;g.low^=l}for(f=0;24>f;f++){for(h=0;5>h;h++){for(var d=l=0,k=0;5>k;k++)g=e[h+5*k],l^=g.high,d^=g.low;g=c[h];g.high=l;g.low=d}for(h=0;5>h;h++){g=c[(h+4)%5];l=c[(h+1)%5];m=l.high;k=l.low;l=g.high^\n(m<<1|k>>>31);d=g.low^(k<<1|m>>>31);for(k=0;5>k;k++)g=e[h+5*k],g.high^=l,g.low^=d}for(m=1;25>m;m++)g=e[m],h=g.high,g=g.low,k=s[m],32>k?(l=h<>>32-k,d=g<>>32-k):(l=g<>>64-k,d=h<>>64-k),g=c[x[m]],g.high=l,g.low=d;g=c[0];h=e[0];g.high=h.high;g.low=h.low;for(h=0;5>h;h++)for(k=0;5>k;k++)m=h+5*k,g=e[m],l=c[m],m=c[(h+1)%5+5*k],d=c[(h+2)%5+5*k],g.high=l.high^~m.high&d.high,g.low=l.low^~m.low&d.low;g=e[0];h=y[f];g.high^=h.high;g.low^=h.low}},_doFinalize:function(){var a=this._data,\nb=a.words,c=8*a.sigBytes,e=32*this.blockSize;b[c>>>5]|=1<<24-c%32;b[(v.ceil((c+1)/e)*e>>>5)-1]|=128;a.sigBytes=4*b.length;this._process();for(var a=this._state,b=this.cfg.outputLength/8,c=b/8,e=[],h=0;h>>24)&16711935|(f<<24|f>>>8)&4278255360,d=(d<<8|d>>>24)&16711935|(d<<24|d>>>8)&4278255360;e.push(d);e.push(f)}return new u.init(e,b)},clone:function(){for(var a=r.clone.call(this),b=a._state=this._state.slice(0),c=0;25>c;c++)b[c]=b[c].clone();return a}});\np.SHA3=r._createHelper(d);p.HmacSHA3=r._createHmacHelper(d)})(Math);\n"], "crypto_js.rollups.sha384": [".js", "/*\nCryptoJS v3.1.2\ncode.google.com/p/crypto-js\n(c) 2009-2013 by Jeff Mott. All rights reserved.\ncode.google.com/p/crypto-js/wiki/License\n*/\nvar CryptoJS=CryptoJS||function(a,c){var d={},j=d.lib={},f=function(){},m=j.Base={extend:function(a){f.prototype=this;var b=new f;a&&b.mixIn(a);b.hasOwnProperty(\"init\")||(b.init=function(){b.$super.init.apply(this,arguments)});b.init.prototype=b;b.$super=this;return b},create:function(){var a=this.extend();a.init.apply(a,arguments);return a},init:function(){},mixIn:function(a){for(var b in a)a.hasOwnProperty(b)&&(this[b]=a[b]);a.hasOwnProperty(\"toString\")&&(this.toString=a.toString)},clone:function(){return this.init.prototype.extend(this)}},\nB=j.WordArray=m.extend({init:function(a,b){a=this.words=a||[];this.sigBytes=b!=c?b:4*a.length},toString:function(a){return(a||y).stringify(this)},concat:function(a){var b=this.words,g=a.words,e=this.sigBytes;a=a.sigBytes;this.clamp();if(e%4)for(var k=0;k>>2]|=(g[k>>>2]>>>24-8*(k%4)&255)<<24-8*((e+k)%4);else if(65535>>2]=g[k>>>2];else b.push.apply(b,g);this.sigBytes+=a;return this},clamp:function(){var n=this.words,b=this.sigBytes;n[b>>>2]&=4294967295<<\n32-8*(b%4);n.length=a.ceil(b/4)},clone:function(){var a=m.clone.call(this);a.words=this.words.slice(0);return a},random:function(n){for(var b=[],g=0;g>>2]>>>24-8*(e%4)&255;g.push((k>>>4).toString(16));g.push((k&15).toString(16))}return g.join(\"\")},parse:function(a){for(var b=a.length,g=[],e=0;e>>3]|=parseInt(a.substr(e,\n2),16)<<24-4*(e%8);return new B.init(g,b/2)}},F=v.Latin1={stringify:function(a){var b=a.words;a=a.sigBytes;for(var g=[],e=0;e>>2]>>>24-8*(e%4)&255));return g.join(\"\")},parse:function(a){for(var b=a.length,g=[],e=0;e>>2]|=(a.charCodeAt(e)&255)<<24-8*(e%4);return new B.init(g,b)}},ha=v.Utf8={stringify:function(a){try{return decodeURIComponent(escape(F.stringify(a)))}catch(b){throw Error(\"Malformed UTF-8 data\");}},parse:function(a){return F.parse(unescape(encodeURIComponent(a)))}},\nZ=j.BufferedBlockAlgorithm=m.extend({reset:function(){this._data=new B.init;this._nDataBytes=0},_append:function(a){\"string\"==typeof a&&(a=ha.parse(a));this._data.concat(a);this._nDataBytes+=a.sigBytes},_process:function(n){var b=this._data,g=b.words,e=b.sigBytes,k=this.blockSize,m=e/(4*k),m=n?a.ceil(m):a.max((m|0)-this._minBufferSize,0);n=m*k;e=a.min(4*n,e);if(n){for(var c=0;cy;y++)v[y]=a();j=j.SHA512=d.extend({_doReset:function(){this._hash=new m.init([new f.init(1779033703,4089235720),new f.init(3144134277,2227873595),new f.init(1013904242,4271175723),new f.init(2773480762,1595750129),new f.init(1359893119,2917565137),new f.init(2600822924,725511199),new f.init(528734635,4215389547),new f.init(1541459225,327033209)])},_doProcessBlock:function(a,c){for(var d=this._hash.words,\nf=d[0],j=d[1],b=d[2],g=d[3],e=d[4],k=d[5],m=d[6],d=d[7],y=f.high,M=f.low,$=j.high,N=j.low,aa=b.high,O=b.low,ba=g.high,P=g.low,ca=e.high,Q=e.low,da=k.high,R=k.low,ea=m.high,S=m.low,fa=d.high,T=d.low,s=y,p=M,G=$,D=N,H=aa,E=O,W=ba,I=P,t=ca,q=Q,U=da,J=R,V=ea,K=S,X=fa,L=T,u=0;80>u;u++){var z=v[u];if(16>u)var r=z.high=a[c+2*u]|0,h=z.low=a[c+2*u+1]|0;else{var r=v[u-15],h=r.high,w=r.low,r=(h>>>1|w<<31)^(h>>>8|w<<24)^h>>>7,w=(w>>>1|h<<31)^(w>>>8|h<<24)^(w>>>7|h<<25),C=v[u-2],h=C.high,l=C.low,C=(h>>>19|l<<\n13)^(h<<3|l>>>29)^h>>>6,l=(l>>>19|h<<13)^(l<<3|h>>>29)^(l>>>6|h<<26),h=v[u-7],Y=h.high,A=v[u-16],x=A.high,A=A.low,h=w+h.low,r=r+Y+(h>>>0>>0?1:0),h=h+l,r=r+C+(h>>>0>>0?1:0),h=h+A,r=r+x+(h>>>0>>0?1:0);z.high=r;z.low=h}var Y=t&U^~t&V,A=q&J^~q&K,z=s&G^s&H^G&H,ja=p&D^p&E^D&E,w=(s>>>28|p<<4)^(s<<30|p>>>2)^(s<<25|p>>>7),C=(p>>>28|s<<4)^(p<<30|s>>>2)^(p<<25|s>>>7),l=B[u],ka=l.high,ga=l.low,l=L+((q>>>14|t<<18)^(q>>>18|t<<14)^(q<<23|t>>>9)),x=X+((t>>>14|q<<18)^(t>>>18|q<<14)^(t<<23|q>>>9))+(l>>>0<\nL>>>0?1:0),l=l+A,x=x+Y+(l>>>0>>0?1:0),l=l+ga,x=x+ka+(l>>>0>>0?1:0),l=l+h,x=x+r+(l>>>0>>0?1:0),h=C+ja,z=w+z+(h>>>0>>0?1:0),X=V,L=K,V=U,K=J,U=t,J=q,q=I+l|0,t=W+x+(q>>>0>>0?1:0)|0,W=H,I=E,H=G,E=D,G=s,D=p,p=l+h|0,s=x+z+(p>>>0>>0?1:0)|0}M=f.low=M+p;f.high=y+s+(M>>>0>>0?1:0);N=j.low=N+D;j.high=$+G+(N>>>0>>0?1:0);O=b.low=O+E;b.high=aa+H+(O>>>0>>0?1:0);P=g.low=P+I;g.high=ba+W+(P>>>0>>0?1:0);Q=e.low=Q+q;e.high=ca+t+(Q>>>0>>0?1:0);R=k.low=R+J;k.high=da+U+(R>>>0>>0?1:0);\nS=m.low=S+K;m.high=ea+V+(S>>>0>>0?1:0);T=d.low=T+L;d.high=fa+X+(T>>>0>>0?1:0)},_doFinalize:function(){var a=this._data,c=a.words,d=8*this._nDataBytes,f=8*a.sigBytes;c[f>>>5]|=128<<24-f%32;c[(f+128>>>10<<5)+30]=Math.floor(d/4294967296);c[(f+128>>>10<<5)+31]=d;a.sigBytes=4*c.length;this._process();return this._hash.toX32()},clone:function(){var a=d.clone.call(this);a._hash=this._hash.clone();return a},blockSize:32});c.SHA512=d._createHelper(j);c.HmacSHA512=d._createHmacHelper(j)})();\n(function(){var a=CryptoJS,c=a.x64,d=c.Word,j=c.WordArray,c=a.algo,f=c.SHA512,c=c.SHA384=f.extend({_doReset:function(){this._hash=new j.init([new d.init(3418070365,3238371032),new d.init(1654270250,914150663),new d.init(2438529370,812702999),new d.init(355462360,4144912697),new d.init(1731405415,4290775857),new d.init(2394180231,1750603025),new d.init(3675008525,1694076839),new d.init(1203062813,3204075428)])},_doFinalize:function(){var a=f._doFinalize.call(this);a.sigBytes-=16;return a}});a.SHA384=\nf._createHelper(c);a.HmacSHA384=f._createHmacHelper(c)})();\n"], "crypto_js.rollups.sha512": [".js", "/*\nCryptoJS v3.1.2\ncode.google.com/p/crypto-js\n(c) 2009-2013 by Jeff Mott. All rights reserved.\ncode.google.com/p/crypto-js/wiki/License\n*/\nvar CryptoJS=CryptoJS||function(a,m){var r={},f=r.lib={},g=function(){},l=f.Base={extend:function(a){g.prototype=this;var b=new g;a&&b.mixIn(a);b.hasOwnProperty(\"init\")||(b.init=function(){b.$super.init.apply(this,arguments)});b.init.prototype=b;b.$super=this;return b},create:function(){var a=this.extend();a.init.apply(a,arguments);return a},init:function(){},mixIn:function(a){for(var b in a)a.hasOwnProperty(b)&&(this[b]=a[b]);a.hasOwnProperty(\"toString\")&&(this.toString=a.toString)},clone:function(){return this.init.prototype.extend(this)}},\np=f.WordArray=l.extend({init:function(a,b){a=this.words=a||[];this.sigBytes=b!=m?b:4*a.length},toString:function(a){return(a||q).stringify(this)},concat:function(a){var b=this.words,d=a.words,c=this.sigBytes;a=a.sigBytes;this.clamp();if(c%4)for(var j=0;j>>2]|=(d[j>>>2]>>>24-8*(j%4)&255)<<24-8*((c+j)%4);else if(65535>>2]=d[j>>>2];else b.push.apply(b,d);this.sigBytes+=a;return this},clamp:function(){var n=this.words,b=this.sigBytes;n[b>>>2]&=4294967295<<\n32-8*(b%4);n.length=a.ceil(b/4)},clone:function(){var a=l.clone.call(this);a.words=this.words.slice(0);return a},random:function(n){for(var b=[],d=0;d>>2]>>>24-8*(c%4)&255;d.push((j>>>4).toString(16));d.push((j&15).toString(16))}return d.join(\"\")},parse:function(a){for(var b=a.length,d=[],c=0;c>>3]|=parseInt(a.substr(c,\n2),16)<<24-4*(c%8);return new p.init(d,b/2)}},G=y.Latin1={stringify:function(a){var b=a.words;a=a.sigBytes;for(var d=[],c=0;c>>2]>>>24-8*(c%4)&255));return d.join(\"\")},parse:function(a){for(var b=a.length,d=[],c=0;c>>2]|=(a.charCodeAt(c)&255)<<24-8*(c%4);return new p.init(d,b)}},fa=y.Utf8={stringify:function(a){try{return decodeURIComponent(escape(G.stringify(a)))}catch(b){throw Error(\"Malformed UTF-8 data\");}},parse:function(a){return G.parse(unescape(encodeURIComponent(a)))}},\nh=f.BufferedBlockAlgorithm=l.extend({reset:function(){this._data=new p.init;this._nDataBytes=0},_append:function(a){\"string\"==typeof a&&(a=fa.parse(a));this._data.concat(a);this._nDataBytes+=a.sigBytes},_process:function(n){var b=this._data,d=b.words,c=b.sigBytes,j=this.blockSize,l=c/(4*j),l=n?a.ceil(l):a.max((l|0)-this._minBufferSize,0);n=l*j;c=a.min(4*n,c);if(n){for(var h=0;hq;q++)y[q]=a();f=f.SHA512=r.extend({_doReset:function(){this._hash=new l.init([new g.init(1779033703,4089235720),new g.init(3144134277,2227873595),new g.init(1013904242,4271175723),new g.init(2773480762,1595750129),new g.init(1359893119,2917565137),new g.init(2600822924,725511199),new g.init(528734635,4215389547),new g.init(1541459225,327033209)])},_doProcessBlock:function(a,f){for(var h=this._hash.words,\ng=h[0],n=h[1],b=h[2],d=h[3],c=h[4],j=h[5],l=h[6],h=h[7],q=g.high,m=g.low,r=n.high,N=n.low,Z=b.high,O=b.low,$=d.high,P=d.low,aa=c.high,Q=c.low,ba=j.high,R=j.low,ca=l.high,S=l.low,da=h.high,T=h.low,v=q,s=m,H=r,E=N,I=Z,F=O,W=$,J=P,w=aa,t=Q,U=ba,K=R,V=ca,L=S,X=da,M=T,x=0;80>x;x++){var B=y[x];if(16>x)var u=B.high=a[f+2*x]|0,e=B.low=a[f+2*x+1]|0;else{var u=y[x-15],e=u.high,z=u.low,u=(e>>>1|z<<31)^(e>>>8|z<<24)^e>>>7,z=(z>>>1|e<<31)^(z>>>8|e<<24)^(z>>>7|e<<25),D=y[x-2],e=D.high,k=D.low,D=(e>>>19|k<<13)^\n(e<<3|k>>>29)^e>>>6,k=(k>>>19|e<<13)^(k<<3|e>>>29)^(k>>>6|e<<26),e=y[x-7],Y=e.high,C=y[x-16],A=C.high,C=C.low,e=z+e.low,u=u+Y+(e>>>0>>0?1:0),e=e+k,u=u+D+(e>>>0>>0?1:0),e=e+C,u=u+A+(e>>>0>>0?1:0);B.high=u;B.low=e}var Y=w&U^~w&V,C=t&K^~t&L,B=v&H^v&I^H&I,ha=s&E^s&F^E&F,z=(v>>>28|s<<4)^(v<<30|s>>>2)^(v<<25|s>>>7),D=(s>>>28|v<<4)^(s<<30|v>>>2)^(s<<25|v>>>7),k=p[x],ia=k.high,ea=k.low,k=M+((t>>>14|w<<18)^(t>>>18|w<<14)^(t<<23|w>>>9)),A=X+((w>>>14|t<<18)^(w>>>18|t<<14)^(w<<23|t>>>9))+(k>>>0>>\n0?1:0),k=k+C,A=A+Y+(k>>>0>>0?1:0),k=k+ea,A=A+ia+(k>>>0>>0?1:0),k=k+e,A=A+u+(k>>>0>>0?1:0),e=D+ha,B=z+B+(e>>>0>>0?1:0),X=V,M=L,V=U,L=K,U=w,K=t,t=J+k|0,w=W+A+(t>>>0>>0?1:0)|0,W=I,J=F,I=H,F=E,H=v,E=s,s=k+e|0,v=A+B+(s>>>0>>0?1:0)|0}m=g.low=m+s;g.high=q+v+(m>>>0>>0?1:0);N=n.low=N+E;n.high=r+H+(N>>>0>>0?1:0);O=b.low=O+F;b.high=Z+I+(O>>>0>>0?1:0);P=d.low=P+J;d.high=$+W+(P>>>0>>0?1:0);Q=c.low=Q+t;c.high=aa+w+(Q>>>0>>0?1:0);R=j.low=R+K;j.high=ba+U+(R>>>0>>0?1:0);S=l.low=\nS+L;l.high=ca+V+(S>>>0>>0?1:0);T=h.low=T+M;h.high=da+X+(T>>>0>>0?1:0)},_doFinalize:function(){var a=this._data,f=a.words,h=8*this._nDataBytes,g=8*a.sigBytes;f[g>>>5]|=128<<24-g%32;f[(g+128>>>10<<5)+30]=Math.floor(h/4294967296);f[(g+128>>>10<<5)+31]=h;a.sigBytes=4*f.length;this._process();return this._hash.toX32()},clone:function(){var a=r.clone.call(this);a._hash=this._hash.clone();return a},blockSize:32});m.SHA512=r._createHelper(f);m.HmacSHA512=r._createHmacHelper(f)})();\n"], "abc": [".py", "\n\n\n\"\"\"Abstract Base Classes (ABCs) according to PEP 3119.\"\"\"\n\n\ndef abstractmethod(funcobj):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n funcobj.__isabstractmethod__=True\n return funcobj\n \n \nclass abstractclassmethod(classmethod):\n ''\n\n\n \n \n __isabstractmethod__=True\n \n def __init__(self,callable):\n callable.__isabstractmethod__=True\n super().__init__(callable)\n \n \nclass abstractstaticmethod(staticmethod):\n ''\n\n\n \n \n __isabstractmethod__=True\n \n def __init__(self,callable):\n callable.__isabstractmethod__=True\n super().__init__(callable)\n \n \nclass abstractproperty(property):\n ''\n\n\n \n \n __isabstractmethod__=True\n \n \ntry :\n from _abc import (get_cache_token,_abc_init,_abc_register,\n _abc_instancecheck,_abc_subclasscheck,_get_dump,\n _reset_registry,_reset_caches)\nexcept ImportError:\n from _py_abc import ABCMeta,get_cache_token\n ABCMeta.__module__='abc'\nelse :\n class ABCMeta(type):\n ''\n\n\n\n\n\n\n\n\n\n\n \n def __new__(mcls,name,bases,namespace,**kwargs):\n cls=super().__new__(mcls,name,bases,namespace,**kwargs)\n _abc_init(cls)\n return cls\n \n def register(cls,subclass):\n ''\n\n\n \n return _abc_register(cls,subclass)\n \n def __instancecheck__(cls,instance):\n ''\n return _abc_instancecheck(cls,instance)\n \n def __subclasscheck__(cls,subclass):\n ''\n return _abc_subclasscheck(cls,subclass)\n \n def _dump_registry(cls,file=None ):\n ''\n print(f\"Class: {cls.__module__}.{cls.__qualname__}\",file=file)\n print(f\"Inv. counter: {get_cache_token()}\",file=file)\n (_abc_registry,_abc_cache,_abc_negative_cache,\n _abc_negative_cache_version)=_get_dump(cls)\n print(f\"_abc_registry: {_abc_registry!r}\",file=file)\n print(f\"_abc_cache: {_abc_cache!r}\",file=file)\n print(f\"_abc_negative_cache: {_abc_negative_cache!r}\",file=file)\n print(f\"_abc_negative_cache_version: {_abc_negative_cache_version!r}\",\n file=file)\n \n def _abc_registry_clear(cls):\n ''\n _reset_registry(cls)\n \n def _abc_caches_clear(cls):\n ''\n _reset_caches(cls)\n \n \nclass ABC(metaclass=ABCMeta):\n ''\n\n \n __slots__=()\n", ["_abc", "_py_abc"]], "antigravity": [".py", "\nimport webbrowser\nimport hashlib\n\nwebbrowser.open(\"https://xkcd.com/353/\")\n\ndef geohash(latitude,longitude,datedow):\n ''\n\n\n\n\n \n \n h=hashlib.md5(datedow).hexdigest()\n p,q=[('%f'%float.fromhex('0.'+x))for x in (h[:16],h[16:32])]\n print('%d%s %d%s'%(latitude,p[1:],longitude,q[1:]))\n", ["hashlib", "webbrowser"]], "argparse": [".py", "\n\n\n\"\"\"Command-line parsing library\n\nThis module is an optparse-inspired command-line parsing library that:\n\n - handles both optional and positional arguments\n - produces highly informative usage messages\n - supports parsers that dispatch to sub-parsers\n\nThe following is a simple usage example that sums integers from the\ncommand-line and writes the result to a file::\n\n parser = argparse.ArgumentParser(\n description='sum the integers at the command line')\n parser.add_argument(\n 'integers', metavar='int', nargs='+', type=int,\n help='an integer to be summed')\n parser.add_argument(\n '--log', default=sys.stdout, type=argparse.FileType('w'),\n help='the file where the sum should be written')\n args = parser.parse_args()\n args.log.write('%s' % sum(args.integers))\n args.log.close()\n\nThe module contains the following public classes:\n\n - ArgumentParser -- The main entry point for command-line parsing. As the\n example above shows, the add_argument() method is used to populate\n the parser with actions for optional and positional arguments. Then\n the parse_args() method is invoked to convert the args at the\n command-line into an object with attributes.\n\n - ArgumentError -- The exception raised by ArgumentParser objects when\n there are errors with the parser's actions. Errors raised while\n parsing the command-line are caught by ArgumentParser and emitted\n as command-line messages.\n\n - FileType -- A factory for defining types of files to be created. As the\n example above shows, instances of FileType are typically passed as\n the type= argument of add_argument() calls.\n\n - Action -- The base class for parser actions. Typically actions are\n selected by passing strings like 'store_true' or 'append_const' to\n the action= argument of add_argument(). However, for greater\n customization of ArgumentParser actions, subclasses of Action may\n be defined and passed as the action= argument.\n\n - HelpFormatter, RawDescriptionHelpFormatter, RawTextHelpFormatter,\n ArgumentDefaultsHelpFormatter -- Formatter classes which\n may be passed as the formatter_class= argument to the\n ArgumentParser constructor. HelpFormatter is the default,\n RawDescriptionHelpFormatter and RawTextHelpFormatter tell the parser\n not to change the formatting for help text, and\n ArgumentDefaultsHelpFormatter adds information about argument defaults\n to the help.\n\nAll other classes in this module are considered implementation details.\n(Also note that HelpFormatter and RawDescriptionHelpFormatter are only\nconsidered public as object names -- the API of the formatter objects is\nstill considered an implementation detail.)\n\"\"\"\n\n__version__='1.1'\n__all__=[\n'ArgumentParser',\n'ArgumentError',\n'ArgumentTypeError',\n'FileType',\n'HelpFormatter',\n'ArgumentDefaultsHelpFormatter',\n'RawDescriptionHelpFormatter',\n'RawTextHelpFormatter',\n'MetavarTypeHelpFormatter',\n'Namespace',\n'Action',\n'ONE_OR_MORE',\n'OPTIONAL',\n'PARSER',\n'REMAINDER',\n'SUPPRESS',\n'ZERO_OR_MORE',\n]\n\n\nimport os as _os\nimport re as _re\nimport shutil as _shutil\nimport sys as _sys\n\nfrom gettext import gettext as _,ngettext\n\nSUPPRESS='==SUPPRESS=='\n\nOPTIONAL='?'\nZERO_OR_MORE='*'\nONE_OR_MORE='+'\nPARSER='A...'\nREMAINDER='...'\n_UNRECOGNIZED_ARGS_ATTR='_unrecognized_args'\n\n\n\n\n\nclass _AttributeHolder(object):\n ''\n\n\n\n\n\n \n \n def __repr__(self):\n type_name=type(self).__name__\n arg_strings=[]\n star_args={}\n for arg in self._get_args():\n arg_strings.append(repr(arg))\n for name,value in self._get_kwargs():\n if name.isidentifier():\n arg_strings.append('%s=%r'%(name,value))\n else :\n star_args[name]=value\n if star_args:\n arg_strings.append('**%s'%repr(star_args))\n return '%s(%s)'%(type_name,', '.join(arg_strings))\n \n def _get_kwargs(self):\n return sorted(self.__dict__.items())\n \n def _get_args(self):\n return []\n \n \ndef _copy_items(items):\n if items is None :\n return []\n \n \n \n if type(items)is list:\n return items[:]\n import copy\n return copy.copy(items)\n \n \n \n \n \n \nclass HelpFormatter(object):\n ''\n\n\n\n \n \n def __init__(self,\n prog,\n indent_increment=2,\n max_help_position=24,\n width=None ):\n \n \n if width is None :\n width=_shutil.get_terminal_size().columns\n width -=2\n \n self._prog=prog\n self._indent_increment=indent_increment\n self._max_help_position=min(max_help_position,\n max(width -20,indent_increment *2))\n self._width=width\n \n self._current_indent=0\n self._level=0\n self._action_max_length=0\n \n self._root_section=self._Section(self,None )\n self._current_section=self._root_section\n \n self._whitespace_matcher=_re.compile(r'\\s+',_re.ASCII)\n self._long_break_matcher=_re.compile(r'\\n\\n\\n+')\n \n \n \n \n def _indent(self):\n self._current_indent +=self._indent_increment\n self._level +=1\n \n def _dedent(self):\n self._current_indent -=self._indent_increment\n assert self._current_indent >=0,'Indent decreased below 0.'\n self._level -=1\n \n class _Section(object):\n \n def __init__(self,formatter,parent,heading=None ):\n self.formatter=formatter\n self.parent=parent\n self.heading=heading\n self.items=[]\n \n def format_help(self):\n \n if self.parent is not None :\n self.formatter._indent()\n join=self.formatter._join_parts\n item_help=join([func(*args)for func,args in self.items])\n if self.parent is not None :\n self.formatter._dedent()\n \n \n if not item_help:\n return ''\n \n \n if self.heading is not SUPPRESS and self.heading is not None :\n current_indent=self.formatter._current_indent\n heading='%*s%s:\\n'%(current_indent,'',self.heading)\n else :\n heading=''\n \n \n return join(['\\n',heading,item_help,'\\n'])\n \n def _add_item(self,func,args):\n self._current_section.items.append((func,args))\n \n \n \n \n def start_section(self,heading):\n self._indent()\n section=self._Section(self,self._current_section,heading)\n self._add_item(section.format_help,[])\n self._current_section=section\n \n def end_section(self):\n self._current_section=self._current_section.parent\n self._dedent()\n \n def add_text(self,text):\n if text is not SUPPRESS and text is not None :\n self._add_item(self._format_text,[text])\n \n def add_usage(self,usage,actions,groups,prefix=None ):\n if usage is not SUPPRESS:\n args=usage,actions,groups,prefix\n self._add_item(self._format_usage,args)\n \n def add_argument(self,action):\n if action.help is not SUPPRESS:\n \n \n get_invocation=self._format_action_invocation\n invocations=[get_invocation(action)]\n for subaction in self._iter_indented_subactions(action):\n invocations.append(get_invocation(subaction))\n \n \n invocation_length=max([len(s)for s in invocations])\n action_length=invocation_length+self._current_indent\n self._action_max_length=max(self._action_max_length,\n action_length)\n \n \n self._add_item(self._format_action,[action])\n \n def add_arguments(self,actions):\n for action in actions:\n self.add_argument(action)\n \n \n \n \n def format_help(self):\n help=self._root_section.format_help()\n if help:\n help=self._long_break_matcher.sub('\\n\\n',help)\n help=help.strip('\\n')+'\\n'\n return help\n \n def _join_parts(self,part_strings):\n return ''.join([part\n for part in part_strings\n if part and part is not SUPPRESS])\n \n def _format_usage(self,usage,actions,groups,prefix):\n if prefix is None :\n prefix=_('usage: ')\n \n \n if usage is not None :\n usage=usage %dict(prog=self._prog)\n \n \n elif usage is None and not actions:\n usage='%(prog)s'%dict(prog=self._prog)\n \n \n elif usage is None :\n prog='%(prog)s'%dict(prog=self._prog)\n \n \n optionals=[]\n positionals=[]\n for action in actions:\n if action.option_strings:\n optionals.append(action)\n else :\n positionals.append(action)\n \n \n format=self._format_actions_usage\n action_usage=format(optionals+positionals,groups)\n usage=' '.join([s for s in [prog,action_usage]if s])\n \n \n text_width=self._width -self._current_indent\n if len(prefix)+len(usage)>text_width:\n \n \n part_regexp=(\n r'\\(.*?\\)+(?=\\s|$)|'\n r'\\[.*?\\]+(?=\\s|$)|'\n r'\\S+'\n )\n opt_usage=format(optionals,groups)\n pos_usage=format(positionals,groups)\n opt_parts=_re.findall(part_regexp,opt_usage)\n pos_parts=_re.findall(part_regexp,pos_usage)\n assert ' '.join(opt_parts)==opt_usage\n assert ' '.join(pos_parts)==pos_usage\n \n \n def get_lines(parts,indent,prefix=None ):\n lines=[]\n line=[]\n if prefix is not None :\n line_len=len(prefix)-1\n else :\n line_len=len(indent)-1\n for part in parts:\n if line_len+1+len(part)>text_width and line:\n lines.append(indent+' '.join(line))\n line=[]\n line_len=len(indent)-1\n line.append(part)\n line_len +=len(part)+1\n if line:\n lines.append(indent+' '.join(line))\n if prefix is not None :\n lines[0]=lines[0][len(indent):]\n return lines\n \n \n if len(prefix)+len(prog)<=0.75 *text_width:\n indent=' '*(len(prefix)+len(prog)+1)\n if opt_parts:\n lines=get_lines([prog]+opt_parts,indent,prefix)\n lines.extend(get_lines(pos_parts,indent))\n elif pos_parts:\n lines=get_lines([prog]+pos_parts,indent,prefix)\n else :\n lines=[prog]\n \n \n else :\n indent=' '*len(prefix)\n parts=opt_parts+pos_parts\n lines=get_lines(parts,indent)\n if len(lines)>1:\n lines=[]\n lines.extend(get_lines(opt_parts,indent))\n lines.extend(get_lines(pos_parts,indent))\n lines=[prog]+lines\n \n \n usage='\\n'.join(lines)\n \n \n return '%s%s\\n\\n'%(prefix,usage)\n \n def _format_actions_usage(self,actions,groups):\n \n group_actions=set()\n inserts={}\n for group in groups:\n try :\n start=actions.index(group._group_actions[0])\n except ValueError:\n continue\n else :\n end=start+len(group._group_actions)\n if actions[start:end]==group._group_actions:\n for action in group._group_actions:\n group_actions.add(action)\n if not group.required:\n if start in inserts:\n inserts[start]+=' ['\n else :\n inserts[start]='['\n if end in inserts:\n inserts[end]+=']'\n else :\n inserts[end]=']'\n else :\n if start in inserts:\n inserts[start]+=' ('\n else :\n inserts[start]='('\n if end in inserts:\n inserts[end]+=')'\n else :\n inserts[end]=')'\n for i in range(start+1,end):\n inserts[i]='|'\n \n \n parts=[]\n for i,action in enumerate(actions):\n \n \n \n if action.help is SUPPRESS:\n parts.append(None )\n if inserts.get(i)=='|':\n inserts.pop(i)\n elif inserts.get(i+1)=='|':\n inserts.pop(i+1)\n \n \n elif not action.option_strings:\n default=self._get_default_metavar_for_positional(action)\n part=self._format_args(action,default)\n \n \n if action in group_actions:\n if part[0]=='['and part[-1]==']':\n part=part[1:-1]\n \n \n parts.append(part)\n \n \n else :\n option_string=action.option_strings[0]\n \n \n \n if action.nargs ==0:\n part='%s'%option_string\n \n \n \n else :\n default=self._get_default_metavar_for_optional(action)\n args_string=self._format_args(action,default)\n part='%s %s'%(option_string,args_string)\n \n \n if not action.required and action not in group_actions:\n part='[%s]'%part\n \n \n parts.append(part)\n \n \n for i in sorted(inserts,reverse=True ):\n parts[i:i]=[inserts[i]]\n \n \n text=' '.join([item for item in parts if item is not None ])\n \n \n open=r'[\\[(]'\n close=r'[\\])]'\n text=_re.sub(r'(%s) '%open,r'\\1',text)\n text=_re.sub(r' (%s)'%close,r'\\1',text)\n text=_re.sub(r'%s *%s'%(open,close),r'',text)\n text=_re.sub(r'\\(([^|]*)\\)',r'\\1',text)\n text=text.strip()\n \n \n return text\n \n def _format_text(self,text):\n if '%(prog)'in text:\n text=text %dict(prog=self._prog)\n text_width=max(self._width -self._current_indent,11)\n indent=' '*self._current_indent\n return self._fill_text(text,text_width,indent)+'\\n\\n'\n \n def _format_action(self,action):\n \n help_position=min(self._action_max_length+2,\n self._max_help_position)\n help_width=max(self._width -help_position,11)\n action_width=help_position -self._current_indent -2\n action_header=self._format_action_invocation(action)\n \n \n if not action.help:\n tup=self._current_indent,'',action_header\n action_header='%*s%s\\n'%tup\n \n \n elif len(action_header)<=action_width:\n tup=self._current_indent,'',action_width,action_header\n action_header='%*s%-*s '%tup\n indent_first=0\n \n \n else :\n tup=self._current_indent,'',action_header\n action_header='%*s%s\\n'%tup\n indent_first=help_position\n \n \n parts=[action_header]\n \n \n if action.help:\n help_text=self._expand_help(action)\n help_lines=self._split_lines(help_text,help_width)\n parts.append('%*s%s\\n'%(indent_first,'',help_lines[0]))\n for line in help_lines[1:]:\n parts.append('%*s%s\\n'%(help_position,'',line))\n \n \n elif not action_header.endswith('\\n'):\n parts.append('\\n')\n \n \n for subaction in self._iter_indented_subactions(action):\n parts.append(self._format_action(subaction))\n \n \n return self._join_parts(parts)\n \n def _format_action_invocation(self,action):\n if not action.option_strings:\n default=self._get_default_metavar_for_positional(action)\n metavar,=self._metavar_formatter(action,default)(1)\n return metavar\n \n else :\n parts=[]\n \n \n \n if action.nargs ==0:\n parts.extend(action.option_strings)\n \n \n \n else :\n default=self._get_default_metavar_for_optional(action)\n args_string=self._format_args(action,default)\n for option_string in action.option_strings:\n parts.append('%s %s'%(option_string,args_string))\n \n return ', '.join(parts)\n \n def _metavar_formatter(self,action,default_metavar):\n if action.metavar is not None :\n result=action.metavar\n elif action.choices is not None :\n choice_strs=[str(choice)for choice in action.choices]\n result='{%s}'%','.join(choice_strs)\n else :\n result=default_metavar\n \n def format(tuple_size):\n if isinstance(result,tuple):\n return result\n else :\n return (result,)*tuple_size\n return format\n \n def _format_args(self,action,default_metavar):\n get_metavar=self._metavar_formatter(action,default_metavar)\n if action.nargs is None :\n result='%s'%get_metavar(1)\n elif action.nargs ==OPTIONAL:\n result='[%s]'%get_metavar(1)\n elif action.nargs ==ZERO_OR_MORE:\n result='[%s [%s ...]]'%get_metavar(2)\n elif action.nargs ==ONE_OR_MORE:\n result='%s [%s ...]'%get_metavar(2)\n elif action.nargs ==REMAINDER:\n result='...'\n elif action.nargs ==PARSER:\n result='%s ...'%get_metavar(1)\n elif action.nargs ==SUPPRESS:\n result=''\n else :\n try :\n formats=['%s'for _ in range(action.nargs)]\n except TypeError:\n raise ValueError(\"invalid nargs value\")from None\n result=' '.join(formats)%get_metavar(action.nargs)\n return result\n \n def _expand_help(self,action):\n params=dict(vars(action),prog=self._prog)\n for name in list(params):\n if params[name]is SUPPRESS:\n del params[name]\n for name in list(params):\n if hasattr(params[name],'__name__'):\n params[name]=params[name].__name__\n if params.get('choices')is not None :\n choices_str=', '.join([str(c)for c in params['choices']])\n params['choices']=choices_str\n return self._get_help_string(action)%params\n \n def _iter_indented_subactions(self,action):\n try :\n get_subactions=action._get_subactions\n except AttributeError:\n pass\n else :\n self._indent()\n yield from get_subactions()\n self._dedent()\n \n def _split_lines(self,text,width):\n text=self._whitespace_matcher.sub(' ',text).strip()\n \n \n import textwrap\n return textwrap.wrap(text,width)\n \n def _fill_text(self,text,width,indent):\n text=self._whitespace_matcher.sub(' ',text).strip()\n import textwrap\n return textwrap.fill(text,width,\n initial_indent=indent,\n subsequent_indent=indent)\n \n def _get_help_string(self,action):\n return action.help\n \n def _get_default_metavar_for_optional(self,action):\n return action.dest.upper()\n \n def _get_default_metavar_for_positional(self,action):\n return action.dest\n \n \nclass RawDescriptionHelpFormatter(HelpFormatter):\n ''\n\n\n\n \n \n def _fill_text(self,text,width,indent):\n return ''.join(indent+line for line in text.splitlines(keepends=True ))\n \n \nclass RawTextHelpFormatter(RawDescriptionHelpFormatter):\n ''\n\n\n\n \n \n def _split_lines(self,text,width):\n return text.splitlines()\n \n \nclass ArgumentDefaultsHelpFormatter(HelpFormatter):\n ''\n\n\n\n \n \n def _get_help_string(self,action):\n help=action.help\n if '%(default)'not in action.help:\n if action.default is not SUPPRESS:\n defaulting_nargs=[OPTIONAL,ZERO_OR_MORE]\n if action.option_strings or action.nargs in defaulting_nargs:\n help +=' (default: %(default)s)'\n return help\n \n \nclass MetavarTypeHelpFormatter(HelpFormatter):\n ''\n\n\n\n\n \n \n def _get_default_metavar_for_optional(self,action):\n return action.type.__name__\n \n def _get_default_metavar_for_positional(self,action):\n return action.type.__name__\n \n \n \n \n \n \n \ndef _get_action_name(argument):\n if argument is None :\n return None\n elif argument.option_strings:\n return '/'.join(argument.option_strings)\n elif argument.metavar not in (None ,SUPPRESS):\n return argument.metavar\n elif argument.dest not in (None ,SUPPRESS):\n return argument.dest\n else :\n return None\n \n \nclass ArgumentError(Exception):\n ''\n\n\n\n \n \n def __init__(self,argument,message):\n self.argument_name=_get_action_name(argument)\n self.message=message\n \n def __str__(self):\n if self.argument_name is None :\n format='%(message)s'\n else :\n format='argument %(argument_name)s: %(message)s'\n return format %dict(message=self.message,\n argument_name=self.argument_name)\n \n \nclass ArgumentTypeError(Exception):\n ''\n pass\n \n \n \n \n \n \nclass Action(_AttributeHolder):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n def __init__(self,\n option_strings,\n dest,\n nargs=None ,\n const=None ,\n default=None ,\n type=None ,\n choices=None ,\n required=False ,\n help=None ,\n metavar=None ):\n self.option_strings=option_strings\n self.dest=dest\n self.nargs=nargs\n self.const=const\n self.default=default\n self.type=type\n self.choices=choices\n self.required=required\n self.help=help\n self.metavar=metavar\n \n def _get_kwargs(self):\n names=[\n 'option_strings',\n 'dest',\n 'nargs',\n 'const',\n 'default',\n 'type',\n 'choices',\n 'help',\n 'metavar',\n ]\n return [(name,getattr(self,name))for name in names]\n \n def __call__(self,parser,namespace,values,option_string=None ):\n raise NotImplementedError(_('.__call__() not defined'))\n \n \nclass _StoreAction(Action):\n\n def __init__(self,\n option_strings,\n dest,\n nargs=None ,\n const=None ,\n default=None ,\n type=None ,\n choices=None ,\n required=False ,\n help=None ,\n metavar=None ):\n if nargs ==0:\n raise ValueError('nargs for store actions must be != 0; if you '\n 'have nothing to store, actions such as store '\n 'true or store const may be more appropriate')\n if const is not None and nargs !=OPTIONAL:\n raise ValueError('nargs must be %r to supply const'%OPTIONAL)\n super(_StoreAction,self).__init__(\n option_strings=option_strings,\n dest=dest,\n nargs=nargs,\n const=const,\n default=default,\n type=type,\n choices=choices,\n required=required,\n help=help,\n metavar=metavar)\n \n def __call__(self,parser,namespace,values,option_string=None ):\n setattr(namespace,self.dest,values)\n \n \nclass _StoreConstAction(Action):\n\n def __init__(self,\n option_strings,\n dest,\n const,\n default=None ,\n required=False ,\n help=None ,\n metavar=None ):\n super(_StoreConstAction,self).__init__(\n option_strings=option_strings,\n dest=dest,\n nargs=0,\n const=const,\n default=default,\n required=required,\n help=help)\n \n def __call__(self,parser,namespace,values,option_string=None ):\n setattr(namespace,self.dest,self.const)\n \n \nclass _StoreTrueAction(_StoreConstAction):\n\n def __init__(self,\n option_strings,\n dest,\n default=False ,\n required=False ,\n help=None ):\n super(_StoreTrueAction,self).__init__(\n option_strings=option_strings,\n dest=dest,\n const=True ,\n default=default,\n required=required,\n help=help)\n \n \nclass _StoreFalseAction(_StoreConstAction):\n\n def __init__(self,\n option_strings,\n dest,\n default=True ,\n required=False ,\n help=None ):\n super(_StoreFalseAction,self).__init__(\n option_strings=option_strings,\n dest=dest,\n const=False ,\n default=default,\n required=required,\n help=help)\n \n \nclass _AppendAction(Action):\n\n def __init__(self,\n option_strings,\n dest,\n nargs=None ,\n const=None ,\n default=None ,\n type=None ,\n choices=None ,\n required=False ,\n help=None ,\n metavar=None ):\n if nargs ==0:\n raise ValueError('nargs for append actions must be != 0; if arg '\n 'strings are not supplying the value to append, '\n 'the append const action may be more appropriate')\n if const is not None and nargs !=OPTIONAL:\n raise ValueError('nargs must be %r to supply const'%OPTIONAL)\n super(_AppendAction,self).__init__(\n option_strings=option_strings,\n dest=dest,\n nargs=nargs,\n const=const,\n default=default,\n type=type,\n choices=choices,\n required=required,\n help=help,\n metavar=metavar)\n \n def __call__(self,parser,namespace,values,option_string=None ):\n items=getattr(namespace,self.dest,None )\n items=_copy_items(items)\n items.append(values)\n setattr(namespace,self.dest,items)\n \n \nclass _AppendConstAction(Action):\n\n def __init__(self,\n option_strings,\n dest,\n const,\n default=None ,\n required=False ,\n help=None ,\n metavar=None ):\n super(_AppendConstAction,self).__init__(\n option_strings=option_strings,\n dest=dest,\n nargs=0,\n const=const,\n default=default,\n required=required,\n help=help,\n metavar=metavar)\n \n def __call__(self,parser,namespace,values,option_string=None ):\n items=getattr(namespace,self.dest,None )\n items=_copy_items(items)\n items.append(self.const)\n setattr(namespace,self.dest,items)\n \n \nclass _CountAction(Action):\n\n def __init__(self,\n option_strings,\n dest,\n default=None ,\n required=False ,\n help=None ):\n super(_CountAction,self).__init__(\n option_strings=option_strings,\n dest=dest,\n nargs=0,\n default=default,\n required=required,\n help=help)\n \n def __call__(self,parser,namespace,values,option_string=None ):\n count=getattr(namespace,self.dest,None )\n if count is None :\n count=0\n setattr(namespace,self.dest,count+1)\n \n \nclass _HelpAction(Action):\n\n def __init__(self,\n option_strings,\n dest=SUPPRESS,\n default=SUPPRESS,\n help=None ):\n super(_HelpAction,self).__init__(\n option_strings=option_strings,\n dest=dest,\n default=default,\n nargs=0,\n help=help)\n \n def __call__(self,parser,namespace,values,option_string=None ):\n parser.print_help()\n parser.exit()\n \n \nclass _VersionAction(Action):\n\n def __init__(self,\n option_strings,\n version=None ,\n dest=SUPPRESS,\n default=SUPPRESS,\n help=\"show program's version number and exit\"):\n super(_VersionAction,self).__init__(\n option_strings=option_strings,\n dest=dest,\n default=default,\n nargs=0,\n help=help)\n self.version=version\n \n def __call__(self,parser,namespace,values,option_string=None ):\n version=self.version\n if version is None :\n version=parser.version\n formatter=parser._get_formatter()\n formatter.add_text(version)\n parser._print_message(formatter.format_help(),_sys.stdout)\n parser.exit()\n \n \nclass _SubParsersAction(Action):\n\n class _ChoicesPseudoAction(Action):\n \n def __init__(self,name,aliases,help):\n metavar=dest=name\n if aliases:\n metavar +=' (%s)'%', '.join(aliases)\n sup=super(_SubParsersAction._ChoicesPseudoAction,self)\n sup.__init__(option_strings=[],dest=dest,help=help,\n metavar=metavar)\n \n def __init__(self,\n option_strings,\n prog,\n parser_class,\n dest=SUPPRESS,\n required=False ,\n help=None ,\n metavar=None ):\n \n self._prog_prefix=prog\n self._parser_class=parser_class\n self._name_parser_map={}\n self._choices_actions=[]\n \n super(_SubParsersAction,self).__init__(\n option_strings=option_strings,\n dest=dest,\n nargs=PARSER,\n choices=self._name_parser_map,\n required=required,\n help=help,\n metavar=metavar)\n \n def add_parser(self,name,**kwargs):\n \n if kwargs.get('prog')is None :\n kwargs['prog']='%s %s'%(self._prog_prefix,name)\n \n aliases=kwargs.pop('aliases',())\n \n \n if 'help'in kwargs:\n help=kwargs.pop('help')\n choice_action=self._ChoicesPseudoAction(name,aliases,help)\n self._choices_actions.append(choice_action)\n \n \n parser=self._parser_class(**kwargs)\n self._name_parser_map[name]=parser\n \n \n for alias in aliases:\n self._name_parser_map[alias]=parser\n \n return parser\n \n def _get_subactions(self):\n return self._choices_actions\n \n def __call__(self,parser,namespace,values,option_string=None ):\n parser_name=values[0]\n arg_strings=values[1:]\n \n \n if self.dest is not SUPPRESS:\n setattr(namespace,self.dest,parser_name)\n \n \n try :\n parser=self._name_parser_map[parser_name]\n except KeyError:\n args={'parser_name':parser_name,\n 'choices':', '.join(self._name_parser_map)}\n msg=_('unknown parser %(parser_name)r (choices: %(choices)s)')%args\n raise ArgumentError(self,msg)\n \n \n \n \n \n \n \n \n subnamespace,arg_strings=parser.parse_known_args(arg_strings,None )\n for key,value in vars(subnamespace).items():\n setattr(namespace,key,value)\n \n if arg_strings:\n vars(namespace).setdefault(_UNRECOGNIZED_ARGS_ATTR,[])\n getattr(namespace,_UNRECOGNIZED_ARGS_ATTR).extend(arg_strings)\n \nclass _ExtendAction(_AppendAction):\n def __call__(self,parser,namespace,values,option_string=None ):\n items=getattr(namespace,self.dest,None )\n items=_copy_items(items)\n items.extend(values)\n setattr(namespace,self.dest,items)\n \n \n \n \n \nclass FileType(object):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n def __init__(self,mode='r',bufsize=-1,encoding=None ,errors=None ):\n self._mode=mode\n self._bufsize=bufsize\n self._encoding=encoding\n self._errors=errors\n \n def __call__(self,string):\n \n if string =='-':\n if 'r'in self._mode:\n return _sys.stdin\n elif 'w'in self._mode:\n return _sys.stdout\n else :\n msg=_('argument \"-\" with mode %r')%self._mode\n raise ValueError(msg)\n \n \n try :\n return open(string,self._mode,self._bufsize,self._encoding,\n self._errors)\n except OSError as e:\n args={'filename':string,'error':e}\n message=_(\"can't open '%(filename)s': %(error)s\")\n raise ArgumentTypeError(message %args)\n \n def __repr__(self):\n args=self._mode,self._bufsize\n kwargs=[('encoding',self._encoding),('errors',self._errors)]\n args_str=', '.join([repr(arg)for arg in args if arg !=-1]+\n ['%s=%r'%(kw,arg)for kw,arg in kwargs\n if arg is not None ])\n return '%s(%s)'%(type(self).__name__,args_str)\n \n \n \n \n \nclass Namespace(_AttributeHolder):\n ''\n\n\n\n \n \n def __init__(self,**kwargs):\n for name in kwargs:\n setattr(self,name,kwargs[name])\n \n def __eq__(self,other):\n if not isinstance(other,Namespace):\n return NotImplemented\n return vars(self)==vars(other)\n \n def __contains__(self,key):\n return key in self.__dict__\n \n \nclass _ActionsContainer(object):\n\n def __init__(self,\n description,\n prefix_chars,\n argument_default,\n conflict_handler):\n super(_ActionsContainer,self).__init__()\n \n self.description=description\n self.argument_default=argument_default\n self.prefix_chars=prefix_chars\n self.conflict_handler=conflict_handler\n \n \n self._registries={}\n \n \n self.register('action',None ,_StoreAction)\n self.register('action','store',_StoreAction)\n self.register('action','store_const',_StoreConstAction)\n self.register('action','store_true',_StoreTrueAction)\n self.register('action','store_false',_StoreFalseAction)\n self.register('action','append',_AppendAction)\n self.register('action','append_const',_AppendConstAction)\n self.register('action','count',_CountAction)\n self.register('action','help',_HelpAction)\n self.register('action','version',_VersionAction)\n self.register('action','parsers',_SubParsersAction)\n self.register('action','extend',_ExtendAction)\n \n \n self._get_handler()\n \n \n self._actions=[]\n self._option_string_actions={}\n \n \n self._action_groups=[]\n self._mutually_exclusive_groups=[]\n \n \n self._defaults={}\n \n \n self._negative_number_matcher=_re.compile(r'^-\\d+$|^-\\d*\\.\\d+$')\n \n \n \n self._has_negative_number_optionals=[]\n \n \n \n \n def register(self,registry_name,value,object):\n registry=self._registries.setdefault(registry_name,{})\n registry[value]=object\n \n def _registry_get(self,registry_name,value,default=None ):\n return self._registries[registry_name].get(value,default)\n \n \n \n \n def set_defaults(self,**kwargs):\n self._defaults.update(kwargs)\n \n \n \n for action in self._actions:\n if action.dest in kwargs:\n action.default=kwargs[action.dest]\n \n def get_default(self,dest):\n for action in self._actions:\n if action.dest ==dest and action.default is not None :\n return action.default\n return self._defaults.get(dest,None )\n \n \n \n \n \n def add_argument(self,*args,**kwargs):\n ''\n\n\n \n \n \n \n \n chars=self.prefix_chars\n if not args or len(args)==1 and args[0][0]not in chars:\n if args and 'dest'in kwargs:\n raise ValueError('dest supplied twice for positional argument')\n kwargs=self._get_positional_kwargs(*args,**kwargs)\n \n \n else :\n kwargs=self._get_optional_kwargs(*args,**kwargs)\n \n \n if 'default'not in kwargs:\n dest=kwargs['dest']\n if dest in self._defaults:\n kwargs['default']=self._defaults[dest]\n elif self.argument_default is not None :\n kwargs['default']=self.argument_default\n \n \n action_class=self._pop_action_class(kwargs)\n if not callable(action_class):\n raise ValueError('unknown action \"%s\"'%(action_class,))\n action=action_class(**kwargs)\n \n \n type_func=self._registry_get('type',action.type,action.type)\n if not callable(type_func):\n raise ValueError('%r is not callable'%(type_func,))\n \n if type_func is FileType:\n raise ValueError('%r is a FileType class object, instance of it'\n ' must be passed'%(type_func,))\n \n \n if hasattr(self,\"_get_formatter\"):\n try :\n self._get_formatter()._format_args(action,None )\n except TypeError:\n raise ValueError(\"length of metavar tuple does not match nargs\")\n \n return self._add_action(action)\n \n def add_argument_group(self,*args,**kwargs):\n group=_ArgumentGroup(self,*args,**kwargs)\n self._action_groups.append(group)\n return group\n \n def add_mutually_exclusive_group(self,**kwargs):\n group=_MutuallyExclusiveGroup(self,**kwargs)\n self._mutually_exclusive_groups.append(group)\n return group\n \n def _add_action(self,action):\n \n self._check_conflict(action)\n \n \n self._actions.append(action)\n action.container=self\n \n \n for option_string in action.option_strings:\n self._option_string_actions[option_string]=action\n \n \n for option_string in action.option_strings:\n if self._negative_number_matcher.match(option_string):\n if not self._has_negative_number_optionals:\n self._has_negative_number_optionals.append(True )\n \n \n return action\n \n def _remove_action(self,action):\n self._actions.remove(action)\n \n def _add_container_actions(self,container):\n \n title_group_map={}\n for group in self._action_groups:\n if group.title in title_group_map:\n msg=_('cannot merge actions - two groups are named %r')\n raise ValueError(msg %(group.title))\n title_group_map[group.title]=group\n \n \n group_map={}\n for group in container._action_groups:\n \n \n \n if group.title not in title_group_map:\n title_group_map[group.title]=self.add_argument_group(\n title=group.title,\n description=group.description,\n conflict_handler=group.conflict_handler)\n \n \n for action in group._group_actions:\n group_map[action]=title_group_map[group.title]\n \n \n \n \n for group in container._mutually_exclusive_groups:\n mutex_group=self.add_mutually_exclusive_group(\n required=group.required)\n \n \n for action in group._group_actions:\n group_map[action]=mutex_group\n \n \n for action in container._actions:\n group_map.get(action,self)._add_action(action)\n \n def _get_positional_kwargs(self,dest,**kwargs):\n \n if 'required'in kwargs:\n msg=_(\"'required' is an invalid argument for positionals\")\n raise TypeError(msg)\n \n \n \n if kwargs.get('nargs')not in [OPTIONAL,ZERO_OR_MORE]:\n kwargs['required']=True\n if kwargs.get('nargs')==ZERO_OR_MORE and 'default'not in kwargs:\n kwargs['required']=True\n \n \n return dict(kwargs,dest=dest,option_strings=[])\n \n def _get_optional_kwargs(self,*args,**kwargs):\n \n option_strings=[]\n long_option_strings=[]\n for option_string in args:\n \n if not option_string[0]in self.prefix_chars:\n args={'option':option_string,\n 'prefix_chars':self.prefix_chars}\n msg=_('invalid option string %(option)r: '\n 'must start with a character %(prefix_chars)r')\n raise ValueError(msg %args)\n \n \n option_strings.append(option_string)\n if option_string[0]in self.prefix_chars:\n if len(option_string)>1:\n if option_string[1]in self.prefix_chars:\n long_option_strings.append(option_string)\n \n \n dest=kwargs.pop('dest',None )\n if dest is None :\n if long_option_strings:\n dest_option_string=long_option_strings[0]\n else :\n dest_option_string=option_strings[0]\n dest=dest_option_string.lstrip(self.prefix_chars)\n if not dest:\n msg=_('dest= is required for options like %r')\n raise ValueError(msg %option_string)\n dest=dest.replace('-','_')\n \n \n return dict(kwargs,dest=dest,option_strings=option_strings)\n \n def _pop_action_class(self,kwargs,default=None ):\n action=kwargs.pop('action',default)\n return self._registry_get('action',action,action)\n \n def _get_handler(self):\n \n handler_func_name='_handle_conflict_%s'%self.conflict_handler\n try :\n return getattr(self,handler_func_name)\n except AttributeError:\n msg=_('invalid conflict_resolution value: %r')\n raise ValueError(msg %self.conflict_handler)\n \n def _check_conflict(self,action):\n \n \n confl_optionals=[]\n for option_string in action.option_strings:\n if option_string in self._option_string_actions:\n confl_optional=self._option_string_actions[option_string]\n confl_optionals.append((option_string,confl_optional))\n \n \n if confl_optionals:\n conflict_handler=self._get_handler()\n conflict_handler(action,confl_optionals)\n \n def _handle_conflict_error(self,action,conflicting_actions):\n message=ngettext('conflicting option string: %s',\n 'conflicting option strings: %s',\n len(conflicting_actions))\n conflict_string=', '.join([option_string\n for option_string,action\n in conflicting_actions])\n raise ArgumentError(action,message %conflict_string)\n \n def _handle_conflict_resolve(self,action,conflicting_actions):\n \n \n for option_string,action in conflicting_actions:\n \n \n action.option_strings.remove(option_string)\n self._option_string_actions.pop(option_string,None )\n \n \n \n if not action.option_strings:\n action.container._remove_action(action)\n \n \nclass _ArgumentGroup(_ActionsContainer):\n\n def __init__(self,container,title=None ,description=None ,**kwargs):\n \n update=kwargs.setdefault\n update('conflict_handler',container.conflict_handler)\n update('prefix_chars',container.prefix_chars)\n update('argument_default',container.argument_default)\n super_init=super(_ArgumentGroup,self).__init__\n super_init(description=description,**kwargs)\n \n \n self.title=title\n self._group_actions=[]\n \n \n self._registries=container._registries\n self._actions=container._actions\n self._option_string_actions=container._option_string_actions\n self._defaults=container._defaults\n self._has_negative_number_optionals=\\\n container._has_negative_number_optionals\n self._mutually_exclusive_groups=container._mutually_exclusive_groups\n \n def _add_action(self,action):\n action=super(_ArgumentGroup,self)._add_action(action)\n self._group_actions.append(action)\n return action\n \n def _remove_action(self,action):\n super(_ArgumentGroup,self)._remove_action(action)\n self._group_actions.remove(action)\n \n \nclass _MutuallyExclusiveGroup(_ArgumentGroup):\n\n def __init__(self,container,required=False ):\n super(_MutuallyExclusiveGroup,self).__init__(container)\n self.required=required\n self._container=container\n \n def _add_action(self,action):\n if action.required:\n msg=_('mutually exclusive arguments must be optional')\n raise ValueError(msg)\n action=self._container._add_action(action)\n self._group_actions.append(action)\n return action\n \n def _remove_action(self,action):\n self._container._remove_action(action)\n self._group_actions.remove(action)\n \n \nclass ArgumentParser(_AttributeHolder,_ActionsContainer):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n def __init__(self,\n prog=None ,\n usage=None ,\n description=None ,\n epilog=None ,\n parents=[],\n formatter_class=HelpFormatter,\n prefix_chars='-',\n fromfile_prefix_chars=None ,\n argument_default=None ,\n conflict_handler='error',\n add_help=True ,\n allow_abbrev=True ):\n \n superinit=super(ArgumentParser,self).__init__\n superinit(description=description,\n prefix_chars=prefix_chars,\n argument_default=argument_default,\n conflict_handler=conflict_handler)\n \n \n if prog is None :\n prog=_os.path.basename(_sys.argv[0])\n \n self.prog=prog\n self.usage=usage\n self.epilog=epilog\n self.formatter_class=formatter_class\n self.fromfile_prefix_chars=fromfile_prefix_chars\n self.add_help=add_help\n self.allow_abbrev=allow_abbrev\n \n add_group=self.add_argument_group\n self._positionals=add_group(_('positional arguments'))\n self._optionals=add_group(_('optional arguments'))\n self._subparsers=None\n \n \n def identity(string):\n return string\n self.register('type',None ,identity)\n \n \n \n default_prefix='-'if '-'in prefix_chars else prefix_chars[0]\n if self.add_help:\n self.add_argument(\n default_prefix+'h',default_prefix *2+'help',\n action='help',default=SUPPRESS,\n help=_('show this help message and exit'))\n \n \n for parent in parents:\n self._add_container_actions(parent)\n try :\n defaults=parent._defaults\n except AttributeError:\n pass\n else :\n self._defaults.update(defaults)\n \n \n \n \n def _get_kwargs(self):\n names=[\n 'prog',\n 'usage',\n 'description',\n 'formatter_class',\n 'conflict_handler',\n 'add_help',\n ]\n return [(name,getattr(self,name))for name in names]\n \n \n \n \n def add_subparsers(self,**kwargs):\n if self._subparsers is not None :\n self.error(_('cannot have multiple subparser arguments'))\n \n \n kwargs.setdefault('parser_class',type(self))\n \n if 'title'in kwargs or 'description'in kwargs:\n title=_(kwargs.pop('title','subcommands'))\n description=_(kwargs.pop('description',None ))\n self._subparsers=self.add_argument_group(title,description)\n else :\n self._subparsers=self._positionals\n \n \n \n if kwargs.get('prog')is None :\n formatter=self._get_formatter()\n positionals=self._get_positional_actions()\n groups=self._mutually_exclusive_groups\n formatter.add_usage(self.usage,positionals,groups,'')\n kwargs['prog']=formatter.format_help().strip()\n \n \n parsers_class=self._pop_action_class(kwargs,'parsers')\n action=parsers_class(option_strings=[],**kwargs)\n self._subparsers._add_action(action)\n \n \n return action\n \n def _add_action(self,action):\n if action.option_strings:\n self._optionals._add_action(action)\n else :\n self._positionals._add_action(action)\n return action\n \n def _get_optional_actions(self):\n return [action\n for action in self._actions\n if action.option_strings]\n \n def _get_positional_actions(self):\n return [action\n for action in self._actions\n if not action.option_strings]\n \n \n \n \n def parse_args(self,args=None ,namespace=None ):\n args,argv=self.parse_known_args(args,namespace)\n if argv:\n msg=_('unrecognized arguments: %s')\n self.error(msg %' '.join(argv))\n return args\n \n def parse_known_args(self,args=None ,namespace=None ):\n if args is None :\n \n args=_sys.argv[1:]\n else :\n \n args=list(args)\n \n \n if namespace is None :\n namespace=Namespace()\n \n \n for action in self._actions:\n if action.dest is not SUPPRESS:\n if not hasattr(namespace,action.dest):\n if action.default is not SUPPRESS:\n setattr(namespace,action.dest,action.default)\n \n \n for dest in self._defaults:\n if not hasattr(namespace,dest):\n setattr(namespace,dest,self._defaults[dest])\n \n \n try :\n namespace,args=self._parse_known_args(args,namespace)\n if hasattr(namespace,_UNRECOGNIZED_ARGS_ATTR):\n args.extend(getattr(namespace,_UNRECOGNIZED_ARGS_ATTR))\n delattr(namespace,_UNRECOGNIZED_ARGS_ATTR)\n return namespace,args\n except ArgumentError:\n err=_sys.exc_info()[1]\n self.error(str(err))\n \n def _parse_known_args(self,arg_strings,namespace):\n \n if self.fromfile_prefix_chars is not None :\n arg_strings=self._read_args_from_files(arg_strings)\n \n \n \n action_conflicts={}\n for mutex_group in self._mutually_exclusive_groups:\n group_actions=mutex_group._group_actions\n for i,mutex_action in enumerate(mutex_group._group_actions):\n conflicts=action_conflicts.setdefault(mutex_action,[])\n conflicts.extend(group_actions[:i])\n conflicts.extend(group_actions[i+1:])\n \n \n \n \n option_string_indices={}\n arg_string_pattern_parts=[]\n arg_strings_iter=iter(arg_strings)\n for i,arg_string in enumerate(arg_strings_iter):\n \n \n if arg_string =='--':\n arg_string_pattern_parts.append('-')\n for arg_string in arg_strings_iter:\n arg_string_pattern_parts.append('A')\n \n \n \n else :\n option_tuple=self._parse_optional(arg_string)\n if option_tuple is None :\n pattern='A'\n else :\n option_string_indices[i]=option_tuple\n pattern='O'\n arg_string_pattern_parts.append(pattern)\n \n \n arg_strings_pattern=''.join(arg_string_pattern_parts)\n \n \n seen_actions=set()\n seen_non_default_actions=set()\n \n def take_action(action,argument_strings,option_string=None ):\n seen_actions.add(action)\n argument_values=self._get_values(action,argument_strings)\n \n \n \n \n if argument_values is not action.default:\n seen_non_default_actions.add(action)\n for conflict_action in action_conflicts.get(action,[]):\n if conflict_action in seen_non_default_actions:\n msg=_('not allowed with argument %s')\n action_name=_get_action_name(conflict_action)\n raise ArgumentError(action,msg %action_name)\n \n \n \n if argument_values is not SUPPRESS:\n action(self,namespace,argument_values,option_string)\n \n \n def consume_optional(start_index):\n \n \n option_tuple=option_string_indices[start_index]\n action,option_string,explicit_arg=option_tuple\n \n \n \n match_argument=self._match_argument\n action_tuples=[]\n while True :\n \n \n if action is None :\n extras.append(arg_strings[start_index])\n return start_index+1\n \n \n \n if explicit_arg is not None :\n arg_count=match_argument(action,'A')\n \n \n \n \n chars=self.prefix_chars\n if arg_count ==0 and option_string[1]not in chars:\n action_tuples.append((action,[],option_string))\n char=option_string[0]\n option_string=char+explicit_arg[0]\n new_explicit_arg=explicit_arg[1:]or None\n optionals_map=self._option_string_actions\n if option_string in optionals_map:\n action=optionals_map[option_string]\n explicit_arg=new_explicit_arg\n else :\n msg=_('ignored explicit argument %r')\n raise ArgumentError(action,msg %explicit_arg)\n \n \n \n elif arg_count ==1:\n stop=start_index+1\n args=[explicit_arg]\n action_tuples.append((action,args,option_string))\n break\n \n \n \n else :\n msg=_('ignored explicit argument %r')\n raise ArgumentError(action,msg %explicit_arg)\n \n \n \n \n else :\n start=start_index+1\n selected_patterns=arg_strings_pattern[start:]\n arg_count=match_argument(action,selected_patterns)\n stop=start+arg_count\n args=arg_strings[start:stop]\n action_tuples.append((action,args,option_string))\n break\n \n \n \n assert action_tuples\n for action,args,option_string in action_tuples:\n take_action(action,args,option_string)\n return stop\n \n \n \n positionals=self._get_positional_actions()\n \n \n def consume_positionals(start_index):\n \n match_partial=self._match_arguments_partial\n selected_pattern=arg_strings_pattern[start_index:]\n arg_counts=match_partial(positionals,selected_pattern)\n \n \n \n for action,arg_count in zip(positionals,arg_counts):\n args=arg_strings[start_index:start_index+arg_count]\n start_index +=arg_count\n take_action(action,args)\n \n \n \n positionals[:]=positionals[len(arg_counts):]\n return start_index\n \n \n \n extras=[]\n start_index=0\n if option_string_indices:\n max_option_string_index=max(option_string_indices)\n else :\n max_option_string_index=-1\n while start_index <=max_option_string_index:\n \n \n next_option_string_index=min([\n index\n for index in option_string_indices\n if index >=start_index])\n if start_index !=next_option_string_index:\n positionals_end_index=consume_positionals(start_index)\n \n \n \n if positionals_end_index >start_index:\n start_index=positionals_end_index\n continue\n else :\n start_index=positionals_end_index\n \n \n \n if start_index not in option_string_indices:\n strings=arg_strings[start_index:next_option_string_index]\n extras.extend(strings)\n start_index=next_option_string_index\n \n \n start_index=consume_optional(start_index)\n \n \n stop_index=consume_positionals(start_index)\n \n \n extras.extend(arg_strings[stop_index:])\n \n \n \n required_actions=[]\n for action in self._actions:\n if action not in seen_actions:\n if action.required:\n required_actions.append(_get_action_name(action))\n else :\n \n \n \n \n if (action.default is not None and\n isinstance(action.default,str)and\n hasattr(namespace,action.dest)and\n action.default is getattr(namespace,action.dest)):\n setattr(namespace,action.dest,\n self._get_value(action,action.default))\n \n if required_actions:\n self.error(_('the following arguments are required: %s')%\n ', '.join(required_actions))\n \n \n for group in self._mutually_exclusive_groups:\n if group.required:\n for action in group._group_actions:\n if action in seen_non_default_actions:\n break\n \n \n else :\n names=[_get_action_name(action)\n for action in group._group_actions\n if action.help is not SUPPRESS]\n msg=_('one of the arguments %s is required')\n self.error(msg %' '.join(names))\n \n \n return namespace,extras\n \n def _read_args_from_files(self,arg_strings):\n \n new_arg_strings=[]\n for arg_string in arg_strings:\n \n \n if not arg_string or arg_string[0]not in self.fromfile_prefix_chars:\n new_arg_strings.append(arg_string)\n \n \n else :\n try :\n with open(arg_string[1:])as args_file:\n arg_strings=[]\n for arg_line in args_file.read().splitlines():\n for arg in self.convert_arg_line_to_args(arg_line):\n arg_strings.append(arg)\n arg_strings=self._read_args_from_files(arg_strings)\n new_arg_strings.extend(arg_strings)\n except OSError:\n err=_sys.exc_info()[1]\n self.error(str(err))\n \n \n return new_arg_strings\n \n def convert_arg_line_to_args(self,arg_line):\n return [arg_line]\n \n def _match_argument(self,action,arg_strings_pattern):\n \n nargs_pattern=self._get_nargs_pattern(action)\n match=_re.match(nargs_pattern,arg_strings_pattern)\n \n \n if match is None :\n nargs_errors={\n None :_('expected one argument'),\n OPTIONAL:_('expected at most one argument'),\n ONE_OR_MORE:_('expected at least one argument'),\n }\n default=ngettext('expected %s argument',\n 'expected %s arguments',\n action.nargs)%action.nargs\n msg=nargs_errors.get(action.nargs,default)\n raise ArgumentError(action,msg)\n \n \n return len(match.group(1))\n \n def _match_arguments_partial(self,actions,arg_strings_pattern):\n \n \n result=[]\n for i in range(len(actions),0,-1):\n actions_slice=actions[:i]\n pattern=''.join([self._get_nargs_pattern(action)\n for action in actions_slice])\n match=_re.match(pattern,arg_strings_pattern)\n if match is not None :\n result.extend([len(string)for string in match.groups()])\n break\n \n \n return result\n \n def _parse_optional(self,arg_string):\n \n if not arg_string:\n return None\n \n \n if not arg_string[0]in self.prefix_chars:\n return None\n \n \n if arg_string in self._option_string_actions:\n action=self._option_string_actions[arg_string]\n return action,arg_string,None\n \n \n if len(arg_string)==1:\n return None\n \n \n if '='in arg_string:\n option_string,explicit_arg=arg_string.split('=',1)\n if option_string in self._option_string_actions:\n action=self._option_string_actions[option_string]\n return action,option_string,explicit_arg\n \n if self.allow_abbrev or not arg_string.startswith('--'):\n \n \n option_tuples=self._get_option_tuples(arg_string)\n \n \n if len(option_tuples)>1:\n options=', '.join([option_string\n for action,option_string,explicit_arg in option_tuples])\n args={'option':arg_string,'matches':options}\n msg=_('ambiguous option: %(option)s could match %(matches)s')\n self.error(msg %args)\n \n \n \n elif len(option_tuples)==1:\n option_tuple,=option_tuples\n return option_tuple\n \n \n \n \n if self._negative_number_matcher.match(arg_string):\n if not self._has_negative_number_optionals:\n return None\n \n \n if ' 'in arg_string:\n return None\n \n \n \n return None ,arg_string,None\n \n def _get_option_tuples(self,option_string):\n result=[]\n \n \n \n chars=self.prefix_chars\n if option_string[0]in chars and option_string[1]in chars:\n if '='in option_string:\n option_prefix,explicit_arg=option_string.split('=',1)\n else :\n option_prefix=option_string\n explicit_arg=None\n for option_string in self._option_string_actions:\n if option_string.startswith(option_prefix):\n action=self._option_string_actions[option_string]\n tup=action,option_string,explicit_arg\n result.append(tup)\n \n \n \n \n elif option_string[0]in chars and option_string[1]not in chars:\n option_prefix=option_string\n explicit_arg=None\n short_option_prefix=option_string[:2]\n short_explicit_arg=option_string[2:]\n \n for option_string in self._option_string_actions:\n if option_string ==short_option_prefix:\n action=self._option_string_actions[option_string]\n tup=action,option_string,short_explicit_arg\n result.append(tup)\n elif option_string.startswith(option_prefix):\n action=self._option_string_actions[option_string]\n tup=action,option_string,explicit_arg\n result.append(tup)\n \n \n else :\n self.error(_('unexpected option string: %s')%option_string)\n \n \n return result\n \n def _get_nargs_pattern(self,action):\n \n \n nargs=action.nargs\n \n \n if nargs is None :\n nargs_pattern='(-*A-*)'\n \n \n elif nargs ==OPTIONAL:\n nargs_pattern='(-*A?-*)'\n \n \n elif nargs ==ZERO_OR_MORE:\n nargs_pattern='(-*[A-]*)'\n \n \n elif nargs ==ONE_OR_MORE:\n nargs_pattern='(-*A[A-]*)'\n \n \n elif nargs ==REMAINDER:\n nargs_pattern='([-AO]*)'\n \n \n elif nargs ==PARSER:\n nargs_pattern='(-*A[-AO]*)'\n \n \n elif nargs ==SUPPRESS:\n nargs_pattern='(-*-*)'\n \n \n else :\n nargs_pattern='(-*%s-*)'%'-*'.join('A'*nargs)\n \n \n if action.option_strings:\n nargs_pattern=nargs_pattern.replace('-*','')\n nargs_pattern=nargs_pattern.replace('-','')\n \n \n return nargs_pattern\n \n \n \n \n \n def parse_intermixed_args(self,args=None ,namespace=None ):\n args,argv=self.parse_known_intermixed_args(args,namespace)\n if argv:\n msg=_('unrecognized arguments: %s')\n self.error(msg %' '.join(argv))\n return args\n \n def parse_known_intermixed_args(self,args=None ,namespace=None ):\n \n \n \n \n \n \n \n \n \n \n \n \n positionals=self._get_positional_actions()\n a=[action for action in positionals\n if action.nargs in [PARSER,REMAINDER]]\n if a:\n raise TypeError('parse_intermixed_args: positional arg'\n ' with nargs=%s'%a[0].nargs)\n \n if [action.dest for group in self._mutually_exclusive_groups\n for action in group._group_actions if action in positionals]:\n raise TypeError('parse_intermixed_args: positional in'\n ' mutuallyExclusiveGroup')\n \n try :\n save_usage=self.usage\n try :\n if self.usage is None :\n \n self.usage=self.format_usage()[7:]\n for action in positionals:\n \n action.save_nargs=action.nargs\n \n action.nargs=SUPPRESS\n action.save_default=action.default\n action.default=SUPPRESS\n namespace,remaining_args=self.parse_known_args(args,\n namespace)\n for action in positionals:\n \n if (hasattr(namespace,action.dest)\n and getattr(namespace,action.dest)==[]):\n from warnings import warn\n warn('Do not expect %s in %s'%(action.dest,namespace))\n delattr(namespace,action.dest)\n finally :\n \n for action in positionals:\n action.nargs=action.save_nargs\n action.default=action.save_default\n optionals=self._get_optional_actions()\n try :\n \n \n for action in optionals:\n action.save_required=action.required\n action.required=False\n for group in self._mutually_exclusive_groups:\n group.save_required=group.required\n group.required=False\n namespace,extras=self.parse_known_args(remaining_args,\n namespace)\n finally :\n \n for action in optionals:\n action.required=action.save_required\n for group in self._mutually_exclusive_groups:\n group.required=group.save_required\n finally :\n self.usage=save_usage\n return namespace,extras\n \n \n \n \n def _get_values(self,action,arg_strings):\n \n if action.nargs not in [PARSER,REMAINDER]:\n try :\n arg_strings.remove('--')\n except ValueError:\n pass\n \n \n if not arg_strings and action.nargs ==OPTIONAL:\n if action.option_strings:\n value=action.const\n else :\n value=action.default\n if isinstance(value,str):\n value=self._get_value(action,value)\n self._check_value(action,value)\n \n \n \n elif (not arg_strings and action.nargs ==ZERO_OR_MORE and\n not action.option_strings):\n if action.default is not None :\n value=action.default\n else :\n value=arg_strings\n self._check_value(action,value)\n \n \n elif len(arg_strings)==1 and action.nargs in [None ,OPTIONAL]:\n arg_string,=arg_strings\n value=self._get_value(action,arg_string)\n self._check_value(action,value)\n \n \n elif action.nargs ==REMAINDER:\n value=[self._get_value(action,v)for v in arg_strings]\n \n \n elif action.nargs ==PARSER:\n value=[self._get_value(action,v)for v in arg_strings]\n self._check_value(action,value[0])\n \n \n elif action.nargs ==SUPPRESS:\n value=SUPPRESS\n \n \n else :\n value=[self._get_value(action,v)for v in arg_strings]\n for v in value:\n self._check_value(action,v)\n \n \n return value\n \n def _get_value(self,action,arg_string):\n type_func=self._registry_get('type',action.type,action.type)\n if not callable(type_func):\n msg=_('%r is not callable')\n raise ArgumentError(action,msg %type_func)\n \n \n try :\n result=type_func(arg_string)\n \n \n except ArgumentTypeError:\n name=getattr(action.type,'__name__',repr(action.type))\n msg=str(_sys.exc_info()[1])\n raise ArgumentError(action,msg)\n \n \n except (TypeError,ValueError):\n name=getattr(action.type,'__name__',repr(action.type))\n args={'type':name,'value':arg_string}\n msg=_('invalid %(type)s value: %(value)r')\n raise ArgumentError(action,msg %args)\n \n \n return result\n \n def _check_value(self,action,value):\n \n if action.choices is not None and value not in action.choices:\n args={'value':value,\n 'choices':', '.join(map(repr,action.choices))}\n msg=_('invalid choice: %(value)r (choose from %(choices)s)')\n raise ArgumentError(action,msg %args)\n \n \n \n \n def format_usage(self):\n formatter=self._get_formatter()\n formatter.add_usage(self.usage,self._actions,\n self._mutually_exclusive_groups)\n return formatter.format_help()\n \n def format_help(self):\n formatter=self._get_formatter()\n \n \n formatter.add_usage(self.usage,self._actions,\n self._mutually_exclusive_groups)\n \n \n formatter.add_text(self.description)\n \n \n for action_group in self._action_groups:\n formatter.start_section(action_group.title)\n formatter.add_text(action_group.description)\n formatter.add_arguments(action_group._group_actions)\n formatter.end_section()\n \n \n formatter.add_text(self.epilog)\n \n \n return formatter.format_help()\n \n def _get_formatter(self):\n return self.formatter_class(prog=self.prog)\n \n \n \n \n def print_usage(self,file=None ):\n if file is None :\n file=_sys.stdout\n self._print_message(self.format_usage(),file)\n \n def print_help(self,file=None ):\n if file is None :\n file=_sys.stdout\n self._print_message(self.format_help(),file)\n \n def _print_message(self,message,file=None ):\n if message:\n if file is None :\n file=_sys.stderr\n file.write(message)\n \n \n \n \n def exit(self,status=0,message=None ):\n if message:\n self._print_message(message,_sys.stderr)\n _sys.exit(status)\n \n def error(self,message):\n ''\n\n\n\n\n\n\n \n self.print_usage(_sys.stderr)\n args={'prog':self.prog,'message':message}\n self.exit(2,_('%(prog)s: error: %(message)s\\n')%args)\n", ["copy", "gettext", "os", "re", "shutil", "sys", "textwrap", "warnings"]], "atexit": [".py", "''\n\n\n\n\n\nclass __loader__(object):\n pass\n \ndef _clear(*args,**kw):\n ''\n \n pass\n \ndef _run_exitfuncs(*args,**kw):\n ''\n \n pass\n \ndef register(*args,**kw):\n ''\n\n\n\n\n\n\n \n pass\n \ndef unregister(*args,**kw):\n ''\n\n\n\n \n pass\n", []], "base64": [".py", "#! /usr/bin/env python3\n\n\"\"\"Base16, Base32, Base64 (RFC 3548), Base85 and Ascii85 data encodings\"\"\"\n\n\n\n\n\nimport re\nimport struct\nimport binascii\n\n\n__all__=[\n\n'encode','decode','encodebytes','decodebytes',\n\n'b64encode','b64decode','b32encode','b32decode',\n'b16encode','b16decode',\n\n'b85encode','b85decode','a85encode','a85decode',\n\n'standard_b64encode','standard_b64decode',\n\n\n\n\n'urlsafe_b64encode','urlsafe_b64decode',\n]\n\n\nbytes_types=(bytes,bytearray)\n\ndef _bytes_from_decode_data(s):\n if isinstance(s,str):\n try :\n return s.encode('ascii')\n except UnicodeEncodeError:\n raise ValueError('string argument should contain only ASCII characters')\n if isinstance(s,bytes_types):\n return s\n try :\n return memoryview(s).tobytes()\n except TypeError:\n raise TypeError(\"argument should be a bytes-like object or ASCII \"\n \"string, not %r\"%s.__class__.__name__)from None\n \n \n \n \ndef b64encode(s,altchars=None ):\n ''\n\n\n\n\n \n encoded=binascii.b2a_base64(s,newline=False )\n if altchars is not None :\n assert len(altchars)==2,repr(altchars)\n return encoded.translate(bytes.maketrans(b'+/',altchars))\n return encoded\n \n \ndef b64decode(s,altchars=None ,validate=False ):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n \n s=_bytes_from_decode_data(s)\n if altchars is not None :\n altchars=_bytes_from_decode_data(altchars)\n assert len(altchars)==2,repr(altchars)\n s=s.translate(bytes.maketrans(altchars,b'+/'))\n if validate and not re.match(b'^[A-Za-z0-9+/]*={0,2}$',s):\n raise binascii.Error('Non-base64 digit found')\n return binascii.a2b_base64(s)\n \n \ndef standard_b64encode(s):\n ''\n\n\n \n return b64encode(s)\n \ndef standard_b64decode(s):\n ''\n\n\n\n\n\n \n return b64decode(s)\n \n \n_urlsafe_encode_translation=bytes.maketrans(b'+/',b'-_')\n_urlsafe_decode_translation=bytes.maketrans(b'-_',b'+/')\n\ndef urlsafe_b64encode(s):\n ''\n\n\n\n\n \n return b64encode(s).translate(_urlsafe_encode_translation)\n \ndef urlsafe_b64decode(s):\n ''\n\n\n\n\n\n\n\n\n \n s=_bytes_from_decode_data(s)\n s=s.translate(_urlsafe_decode_translation)\n return b64decode(s)\n \n \n \n \n_b32alphabet=b'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567'\n_b32tab2=None\n_b32rev=None\n\ndef b32encode(s):\n ''\n \n global _b32tab2\n \n \n if _b32tab2 is None :\n b32tab=[bytes((i,))for i in _b32alphabet]\n _b32tab2=[a+b for a in b32tab for b in b32tab]\n b32tab=None\n \n if not isinstance(s,bytes_types):\n s=memoryview(s).tobytes()\n leftover=len(s)%5\n \n if leftover:\n s=s+b'\\0'*(5 -leftover)\n encoded=bytearray()\n from_bytes=int.from_bytes\n b32tab2=_b32tab2\n for i in range(0,len(s),5):\n c=from_bytes(s[i:i+5],'big')\n encoded +=(b32tab2[c >>30]+\n b32tab2[(c >>20)&0x3ff]+\n b32tab2[(c >>10)&0x3ff]+\n b32tab2[c&0x3ff]\n )\n \n if leftover ==1:\n encoded[-6:]=b'======'\n elif leftover ==2:\n encoded[-4:]=b'===='\n elif leftover ==3:\n encoded[-3:]=b'==='\n elif leftover ==4:\n encoded[-1:]=b'='\n return bytes(encoded)\n \ndef b32decode(s,casefold=False ,map01=None ):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n global _b32rev\n \n \n if _b32rev is None :\n _b32rev={v:k for k,v in enumerate(_b32alphabet)}\n s=_bytes_from_decode_data(s)\n if len(s)%8:\n raise binascii.Error('Incorrect padding')\n \n \n \n if map01 is not None :\n map01=_bytes_from_decode_data(map01)\n assert len(map01)==1,repr(map01)\n s=s.translate(bytes.maketrans(b'01',b'O'+map01))\n if casefold:\n s=s.upper()\n \n \n \n l=len(s)\n s=s.rstrip(b'=')\n padchars=l -len(s)\n \n decoded=bytearray()\n b32rev=_b32rev\n for i in range(0,len(s),8):\n quanta=s[i:i+8]\n acc=0\n try :\n for c in quanta:\n acc=(acc <<5)+b32rev[c]\n except KeyError:\n raise binascii.Error('Non-base32 digit found')from None\n decoded +=acc.to_bytes(5,'big')\n \n if l %8 or padchars not in {0,1,3,4,6}:\n raise binascii.Error('Incorrect padding')\n if padchars and decoded:\n acc <<=5 *padchars\n last=acc.to_bytes(5,'big')\n leftover=(43 -5 *padchars)//8\n decoded[-5:]=last[:leftover]\n return bytes(decoded)\n \n \n \n \n \ndef b16encode(s):\n ''\n \n return binascii.hexlify(s).upper()\n \n \ndef b16decode(s,casefold=False ):\n ''\n\n\n\n\n\n\n\n \n s=_bytes_from_decode_data(s)\n if casefold:\n s=s.upper()\n if re.search(b'[^0-9A-F]',s):\n raise binascii.Error('Non-base16 digit found')\n return binascii.unhexlify(s)\n \n \n \n \n \n_a85chars=None\n_a85chars2=None\n_A85START=b\"<~\"\n_A85END=b\"~>\"\n\ndef _85encode(b,chars,chars2,pad=False ,foldnuls=False ,foldspaces=False ):\n\n if not isinstance(b,bytes_types):\n b=memoryview(b).tobytes()\n \n padding=(-len(b))%4\n if padding:\n b=b+b'\\0'*padding\n words=struct.Struct('!%dI'%(len(b)//4)).unpack(b)\n \n chunks=[b'z'if foldnuls and not word else\n b'y'if foldspaces and word ==0x20202020 else\n (chars2[word //614125]+\n chars2[word //85 %7225]+\n chars[word %85])\n for word in words]\n \n if padding and not pad:\n if chunks[-1]==b'z':\n chunks[-1]=chars[0]*5\n chunks[-1]=chunks[-1][:-padding]\n \n return b''.join(chunks)\n \ndef a85encode(b,*,foldspaces=False ,wrapcol=0,pad=False ,adobe=False ):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n global _a85chars,_a85chars2\n \n \n if _a85chars is None :\n _a85chars=[bytes((i,))for i in range(33,118)]\n _a85chars2=[(a+b)for a in _a85chars for b in _a85chars]\n \n result=_85encode(b,_a85chars,_a85chars2,pad,True ,foldspaces)\n \n if adobe:\n result=_A85START+result\n if wrapcol:\n wrapcol=max(2 if adobe else 1,wrapcol)\n chunks=[result[i:i+wrapcol]\n for i in range(0,len(result),wrapcol)]\n if adobe:\n if len(chunks[-1])+2 >wrapcol:\n chunks.append(b'')\n result=b'\\n'.join(chunks)\n if adobe:\n result +=_A85END\n \n return result\n \ndef a85decode(b,*,foldspaces=False ,adobe=False ,ignorechars=b' \\t\\n\\r\\v'):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n b=_bytes_from_decode_data(b)\n if adobe:\n if not b.endswith(_A85END):\n raise ValueError(\n \"Ascii85 encoded byte sequences must end \"\n \"with {!r}\".format(_A85END)\n )\n if b.startswith(_A85START):\n b=b[2:-2]\n else :\n b=b[:-2]\n \n \n \n \n packI=struct.Struct('!I').pack\n decoded=[]\n decoded_append=decoded.append\n curr=[]\n curr_append=curr.append\n curr_clear=curr.clear\n for x in b+b'u'*4:\n if b'!'[0]<=x <=b'u'[0]:\n curr_append(x)\n if len(curr)==5:\n acc=0\n for x in curr:\n acc=85 *acc+(x -33)\n try :\n decoded_append(packI(acc))\n except struct.error:\n raise ValueError('Ascii85 overflow')from None\n curr_clear()\n elif x ==b'z'[0]:\n if curr:\n raise ValueError('z inside Ascii85 5-tuple')\n decoded_append(b'\\0\\0\\0\\0')\n elif foldspaces and x ==b'y'[0]:\n if curr:\n raise ValueError('y inside Ascii85 5-tuple')\n decoded_append(b'\\x20\\x20\\x20\\x20')\n elif x in ignorechars:\n \n continue\n else :\n raise ValueError('Non-Ascii85 digit found: %c'%x)\n \n result=b''.join(decoded)\n padding=4 -len(curr)\n if padding:\n \n result=result[:-padding]\n return result\n \n \n \n_b85alphabet=(b\"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ\"\nb\"abcdefghijklmnopqrstuvwxyz!#$%&()*+-;<=>?@^_`{|}~\")\n_b85chars=None\n_b85chars2=None\n_b85dec=None\n\ndef b85encode(b,pad=False ):\n ''\n\n\n\n \n global _b85chars,_b85chars2\n \n \n if _b85chars is None :\n _b85chars=[bytes((i,))for i in _b85alphabet]\n _b85chars2=[(a+b)for a in _b85chars for b in _b85chars]\n return _85encode(b,_b85chars,_b85chars2,pad)\n \ndef b85decode(b):\n ''\n\n\n \n global _b85dec\n \n \n if _b85dec is None :\n _b85dec=[None ]*256\n for i,c in enumerate(_b85alphabet):\n _b85dec[c]=i\n \n b=_bytes_from_decode_data(b)\n padding=(-len(b))%5\n b=b+b'~'*padding\n out=[]\n packI=struct.Struct('!I').pack\n for i in range(0,len(b),5):\n chunk=b[i:i+5]\n acc=0\n try :\n for c in chunk:\n acc=acc *85+_b85dec[c]\n except TypeError:\n for j,c in enumerate(chunk):\n if _b85dec[c]is None :\n raise ValueError('bad base85 character at position %d'\n %(i+j))from None\n raise\n try :\n out.append(packI(acc))\n except struct.error:\n raise ValueError('base85 overflow in hunk starting at byte %d'\n %i)from None\n \n result=b''.join(out)\n if padding:\n result=result[:-padding]\n return result\n \n \n \n \n \nMAXLINESIZE=76\nMAXBINSIZE=(MAXLINESIZE //4)*3\n\ndef encode(input,output):\n ''\n while True :\n s=input.read(MAXBINSIZE)\n if not s:\n break\n while len(s)\":\n return filename\n canonic=self.fncache.get(filename)\n if not canonic:\n canonic=os.path.abspath(filename)\n canonic=os.path.normcase(canonic)\n self.fncache[filename]=canonic\n return canonic\n \n def reset(self):\n ''\n import linecache\n linecache.checkcache()\n self.botframe=None\n self._set_stopinfo(None ,None )\n \n def trace_dispatch(self,frame,event,arg):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n if self.quitting:\n return\n if event =='line':\n return self.dispatch_line(frame)\n if event =='call':\n return self.dispatch_call(frame,arg)\n if event =='return':\n return self.dispatch_return(frame,arg)\n if event =='exception':\n return self.dispatch_exception(frame,arg)\n if event =='c_call':\n return self.trace_dispatch\n if event =='c_exception':\n return self.trace_dispatch\n if event =='c_return':\n return self.trace_dispatch\n print('bdb.Bdb.dispatch: unknown debugging event:',repr(event))\n return self.trace_dispatch\n \n def dispatch_line(self,frame):\n ''\n\n\n\n\n \n if self.stop_here(frame)or self.break_here(frame):\n self.user_line(frame)\n if self.quitting:raise BdbQuit\n return self.trace_dispatch\n \n def dispatch_call(self,frame,arg):\n ''\n\n\n\n\n \n \n if self.botframe is None :\n \n self.botframe=frame.f_back\n return self.trace_dispatch\n if not (self.stop_here(frame)or self.break_anywhere(frame)):\n \n return\n \n if self.stopframe and frame.f_code.co_flags&GENERATOR_AND_COROUTINE_FLAGS:\n return self.trace_dispatch\n self.user_call(frame,arg)\n if self.quitting:raise BdbQuit\n return self.trace_dispatch\n \n def dispatch_return(self,frame,arg):\n ''\n\n\n\n\n \n if self.stop_here(frame)or frame ==self.returnframe:\n \n if self.stopframe and frame.f_code.co_flags&GENERATOR_AND_COROUTINE_FLAGS:\n return self.trace_dispatch\n try :\n self.frame_returning=frame\n self.user_return(frame,arg)\n finally :\n self.frame_returning=None\n if self.quitting:raise BdbQuit\n \n if self.stopframe is frame and self.stoplineno !=-1:\n self._set_stopinfo(None ,None )\n return self.trace_dispatch\n \n def dispatch_exception(self,frame,arg):\n ''\n\n\n\n\n \n if self.stop_here(frame):\n \n \n \n if not (frame.f_code.co_flags&GENERATOR_AND_COROUTINE_FLAGS\n and arg[0]is StopIteration and arg[2]is None ):\n self.user_exception(frame,arg)\n if self.quitting:raise BdbQuit\n \n \n \n \n elif (self.stopframe and frame is not self.stopframe\n and self.stopframe.f_code.co_flags&GENERATOR_AND_COROUTINE_FLAGS\n and arg[0]in (StopIteration,GeneratorExit)):\n self.user_exception(frame,arg)\n if self.quitting:raise BdbQuit\n \n return self.trace_dispatch\n \n \n \n \n \n def is_skipped_module(self,module_name):\n ''\n if module_name is None :\n return False\n for pattern in self.skip:\n if fnmatch.fnmatch(module_name,pattern):\n return True\n return False\n \n def stop_here(self,frame):\n ''\n \n \n if self.skip and\\\n self.is_skipped_module(frame.f_globals.get('__name__')):\n return False\n if frame is self.stopframe:\n if self.stoplineno ==-1:\n return False\n return frame.f_lineno >=self.stoplineno\n if not self.stopframe:\n return True\n return False\n \n def break_here(self,frame):\n ''\n\n\n\n \n filename=self.canonic(frame.f_code.co_filename)\n if filename not in self.breaks:\n return False\n lineno=frame.f_lineno\n if lineno not in self.breaks[filename]:\n \n \n lineno=frame.f_code.co_firstlineno\n if lineno not in self.breaks[filename]:\n return False\n \n \n (bp,flag)=effective(filename,lineno,frame)\n if bp:\n self.currentbp=bp.number\n if (flag and bp.temporary):\n self.do_clear(str(bp.number))\n return True\n else :\n return False\n \n def do_clear(self,arg):\n ''\n\n\n \n raise NotImplementedError(\"subclass of bdb must implement do_clear()\")\n \n def break_anywhere(self,frame):\n ''\n \n return self.canonic(frame.f_code.co_filename)in self.breaks\n \n \n \n \n def user_call(self,frame,argument_list):\n ''\n pass\n \n def user_line(self,frame):\n ''\n pass\n \n def user_return(self,frame,return_value):\n ''\n pass\n \n def user_exception(self,frame,exc_info):\n ''\n pass\n \n def _set_stopinfo(self,stopframe,returnframe,stoplineno=0):\n ''\n\n\n\n\n \n self.stopframe=stopframe\n self.returnframe=returnframe\n self.quitting=False\n \n \n self.stoplineno=stoplineno\n \n \n \n \n def set_until(self,frame,lineno=None ):\n ''\n \n \n if lineno is None :\n lineno=frame.f_lineno+1\n self._set_stopinfo(frame,frame,lineno)\n \n def set_step(self):\n ''\n \n \n \n \n if self.frame_returning:\n caller_frame=self.frame_returning.f_back\n if caller_frame and not caller_frame.f_trace:\n caller_frame.f_trace=self.trace_dispatch\n self._set_stopinfo(None ,None )\n \n def set_next(self,frame):\n ''\n self._set_stopinfo(frame,None )\n \n def set_return(self,frame):\n ''\n if frame.f_code.co_flags&GENERATOR_AND_COROUTINE_FLAGS:\n self._set_stopinfo(frame,None ,-1)\n else :\n self._set_stopinfo(frame.f_back,frame)\n \n def set_trace(self,frame=None ):\n ''\n\n\n \n if frame is None :\n frame=sys._getframe().f_back\n self.reset()\n while frame:\n frame.f_trace=self.trace_dispatch\n self.botframe=frame\n frame=frame.f_back\n self.set_step()\n sys.settrace(self.trace_dispatch)\n \n def set_continue(self):\n ''\n\n\n \n \n self._set_stopinfo(self.botframe,None ,-1)\n if not self.breaks:\n \n sys.settrace(None )\n frame=sys._getframe().f_back\n while frame and frame is not self.botframe:\n del frame.f_trace\n frame=frame.f_back\n \n def set_quit(self):\n ''\n\n\n \n self.stopframe=self.botframe\n self.returnframe=None\n self.quitting=True\n sys.settrace(None )\n \n \n \n \n \n \n \n \n def set_break(self,filename,lineno,temporary=False ,cond=None ,\n funcname=None ):\n ''\n\n\n\n \n filename=self.canonic(filename)\n import linecache\n line=linecache.getline(filename,lineno)\n if not line:\n return 'Line %s:%d does not exist'%(filename,lineno)\n list=self.breaks.setdefault(filename,[])\n if lineno not in list:\n list.append(lineno)\n bp=Breakpoint(filename,lineno,temporary,cond,funcname)\n return None\n \n def _prune_breaks(self,filename,lineno):\n ''\n\n\n\n\n\n \n if (filename,lineno)not in Breakpoint.bplist:\n self.breaks[filename].remove(lineno)\n if not self.breaks[filename]:\n del self.breaks[filename]\n \n def clear_break(self,filename,lineno):\n ''\n\n\n \n filename=self.canonic(filename)\n if filename not in self.breaks:\n return 'There are no breakpoints in %s'%filename\n if lineno not in self.breaks[filename]:\n return 'There is no breakpoint at %s:%d'%(filename,lineno)\n \n \n for bp in Breakpoint.bplist[filename,lineno][:]:\n bp.deleteMe()\n self._prune_breaks(filename,lineno)\n return None\n \n def clear_bpbynumber(self,arg):\n ''\n\n\n \n try :\n bp=self.get_bpbynumber(arg)\n except ValueError as err:\n return str(err)\n bp.deleteMe()\n self._prune_breaks(bp.file,bp.line)\n return None\n \n def clear_all_file_breaks(self,filename):\n ''\n\n\n \n filename=self.canonic(filename)\n if filename not in self.breaks:\n return 'There are no breakpoints in %s'%filename\n for line in self.breaks[filename]:\n blist=Breakpoint.bplist[filename,line]\n for bp in blist:\n bp.deleteMe()\n del self.breaks[filename]\n return None\n \n def clear_all_breaks(self):\n ''\n\n\n \n if not self.breaks:\n return 'There are no breakpoints'\n for bp in Breakpoint.bpbynumber:\n if bp:\n bp.deleteMe()\n self.breaks={}\n return None\n \n def get_bpbynumber(self,arg):\n ''\n\n\n\n \n if not arg:\n raise ValueError('Breakpoint number expected')\n try :\n number=int(arg)\n except ValueError:\n raise ValueError('Non-numeric breakpoint number %s'%arg)from None\n try :\n bp=Breakpoint.bpbynumber[number]\n except IndexError:\n raise ValueError('Breakpoint number %d out of range'%number)from None\n if bp is None :\n raise ValueError('Breakpoint %d already deleted'%number)\n return bp\n \n def get_break(self,filename,lineno):\n ''\n filename=self.canonic(filename)\n return filename in self.breaks and\\\n lineno in self.breaks[filename]\n \n def get_breaks(self,filename,lineno):\n ''\n\n\n \n filename=self.canonic(filename)\n return filename in self.breaks and\\\n lineno in self.breaks[filename]and\\\n Breakpoint.bplist[filename,lineno]or []\n \n def get_file_breaks(self,filename):\n ''\n\n\n \n filename=self.canonic(filename)\n if filename in self.breaks:\n return self.breaks[filename]\n else :\n return []\n \n def get_all_breaks(self):\n ''\n return self.breaks\n \n \n \n \n def get_stack(self,f,t):\n ''\n\n\n\n \n stack=[]\n if t and t.tb_frame is f:\n t=t.tb_next\n while f is not None :\n stack.append((f,f.f_lineno))\n if f is self.botframe:\n break\n f=f.f_back\n stack.reverse()\n i=max(0,len(stack)-1)\n while t is not None :\n stack.append((t.tb_frame,t.tb_lineno))\n t=t.tb_next\n if f is None :\n i=max(0,len(stack)-1)\n return stack,i\n \n def format_stack_entry(self,frame_lineno,lprefix=': '):\n ''\n\n\n\n\n\n\n \n import linecache,reprlib\n frame,lineno=frame_lineno\n filename=self.canonic(frame.f_code.co_filename)\n s='%s(%r)'%(filename,lineno)\n if frame.f_code.co_name:\n s +=frame.f_code.co_name\n else :\n s +=\"\"\n if '__args__'in frame.f_locals:\n args=frame.f_locals['__args__']\n else :\n args=None\n if args:\n s +=reprlib.repr(args)\n else :\n s +='()'\n if '__return__'in frame.f_locals:\n rv=frame.f_locals['__return__']\n s +='->'\n s +=reprlib.repr(rv)\n line=linecache.getline(filename,lineno,frame.f_globals)\n if line:\n s +=lprefix+line.strip()\n return s\n \n \n \n \n \n def run(self,cmd,globals=None ,locals=None ):\n ''\n\n\n \n if globals is None :\n import __main__\n globals=__main__.__dict__\n if locals is None :\n locals=globals\n self.reset()\n if isinstance(cmd,str):\n cmd=compile(cmd,\"\",\"exec\")\n sys.settrace(self.trace_dispatch)\n try :\n exec(cmd,globals,locals)\n except BdbQuit:\n pass\n finally :\n self.quitting=True\n sys.settrace(None )\n \n def runeval(self,expr,globals=None ,locals=None ):\n ''\n\n\n \n if globals is None :\n import __main__\n globals=__main__.__dict__\n if locals is None :\n locals=globals\n self.reset()\n sys.settrace(self.trace_dispatch)\n try :\n return eval(expr,globals,locals)\n except BdbQuit:\n pass\n finally :\n self.quitting=True\n sys.settrace(None )\n \n def runctx(self,cmd,globals,locals):\n ''\n \n self.run(cmd,globals,locals)\n \n \n \n def runcall(*args,**kwds):\n ''\n\n\n \n if len(args)>=2:\n self,func,*args=args\n elif not args:\n raise TypeError(\"descriptor 'runcall' of 'Bdb' object \"\n \"needs an argument\")\n elif 'func'in kwds:\n func=kwds.pop('func')\n self,*args=args\n import warnings\n warnings.warn(\"Passing 'func' as keyword argument is deprecated\",\n DeprecationWarning,stacklevel=2)\n else :\n raise TypeError('runcall expected at least 1 positional argument, '\n 'got %d'%(len(args)-1))\n \n self.reset()\n sys.settrace(self.trace_dispatch)\n res=None\n try :\n res=func(*args,**kwds)\n except BdbQuit:\n pass\n finally :\n self.quitting=True\n sys.settrace(None )\n return res\n runcall.__text_signature__='($self, func, /, *args, **kwds)'\n \n \ndef set_trace():\n ''\n Bdb().set_trace()\n \n \nclass Breakpoint:\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n \n \n \n next=1\n bplist={}\n bpbynumber=[None ]\n \n \n \n def __init__(self,file,line,temporary=False ,cond=None ,funcname=None ):\n self.funcname=funcname\n \n self.func_first_executable_line=None\n self.file=file\n self.line=line\n self.temporary=temporary\n self.cond=cond\n self.enabled=True\n self.ignore=0\n self.hits=0\n self.number=Breakpoint.next\n Breakpoint.next +=1\n \n self.bpbynumber.append(self)\n if (file,line)in self.bplist:\n self.bplist[file,line].append(self)\n else :\n self.bplist[file,line]=[self]\n \n def deleteMe(self):\n ''\n\n\n\n \n \n index=(self.file,self.line)\n self.bpbynumber[self.number]=None\n self.bplist[index].remove(self)\n if not self.bplist[index]:\n \n del self.bplist[index]\n \n def enable(self):\n ''\n self.enabled=True\n \n def disable(self):\n ''\n self.enabled=False\n \n def bpprint(self,out=None ):\n ''\n\n\n\n \n if out is None :\n out=sys.stdout\n print(self.bpformat(),file=out)\n \n def bpformat(self):\n ''\n\n\n\n\n\n \n if self.temporary:\n disp='del '\n else :\n disp='keep '\n if self.enabled:\n disp=disp+'yes '\n else :\n disp=disp+'no '\n ret='%-4dbreakpoint %s at %s:%d'%(self.number,disp,\n self.file,self.line)\n if self.cond:\n ret +='\\n\\tstop only if %s'%(self.cond,)\n if self.ignore:\n ret +='\\n\\tignore next %d hits'%(self.ignore,)\n if self.hits:\n if self.hits >1:\n ss='s'\n else :\n ss=''\n ret +='\\n\\tbreakpoint already hit %d time%s'%(self.hits,ss)\n return ret\n \n def __str__(self):\n ''\n return 'breakpoint %s at %s:%s'%(self.number,self.file,self.line)\n \n \n \n \ndef checkfuncname(b,frame):\n ''\n\n\n\n\n\n \n if not b.funcname:\n \n if b.line !=frame.f_lineno:\n \n \n return False\n return True\n \n \n if frame.f_code.co_name !=b.funcname:\n \n return False\n \n \n if not b.func_first_executable_line:\n \n b.func_first_executable_line=frame.f_lineno\n \n if b.func_first_executable_line !=frame.f_lineno:\n \n return False\n return True\n \n \n \n \ndef effective(file,line,frame):\n ''\n\n\n\n\n\n \n possibles=Breakpoint.bplist[file,line]\n for b in possibles:\n if not b.enabled:\n continue\n if not checkfuncname(b,frame):\n continue\n \n b.hits +=1\n if not b.cond:\n \n if b.ignore >0:\n b.ignore -=1\n continue\n else :\n \n return (b,True )\n else :\n \n \n \n try :\n val=eval(b.cond,frame.f_globals,frame.f_locals)\n if val:\n if b.ignore >0:\n b.ignore -=1\n \n else :\n return (b,True )\n \n \n except :\n \n \n \n return (b,False )\n return (None ,None )\n \n \n \n \nclass Tdb(Bdb):\n def user_call(self,frame,args):\n name=frame.f_code.co_name\n if not name:name='???'\n print('+++ call',name,args)\n def user_line(self,frame):\n import linecache\n name=frame.f_code.co_name\n if not name:name='???'\n fn=self.canonic(frame.f_code.co_filename)\n line=linecache.getline(fn,frame.f_lineno,frame.f_globals)\n print('+++',fn,frame.f_lineno,name,':',line.strip())\n def user_return(self,frame,retval):\n print('+++ return',retval)\n def user_exception(self,frame,exc_stuff):\n print('+++ exception',exc_stuff)\n self.set_continue()\n \ndef foo(n):\n print('foo(',n,')')\n x=bar(n *10)\n print('bar returned',x)\n \ndef bar(a):\n print('bar(',a,')')\n return a /2\n \ndef test():\n t=Tdb()\n t.run('import bdb; bdb.foo(10)')\n", ["__main__", "fnmatch", "inspect", "linecache", "os", "reprlib", "sys", "warnings"]], "binascii": [".py", "''\n\n\n\n\n\n\n\nimport _base64\n\nfrom _binascii import *\n\nclass Error(ValueError):\n def __init__(self,msg=''):\n self._msg=msg\n \n def __str__(self):\n return \" binascii.Error: \"+self._msg\n \n \nclass Done(Exception):\n pass\n \nclass Incomplete(Error):\n pass\n \ndef a2b_uu(s):\n if not s:\n return ''\n \n length=(ord(s[0])-0x20)%64\n \n def quadruplets_gen(s):\n while s:\n try :\n yield ord(s[0]),ord(s[1]),ord(s[2]),ord(s[3])\n except IndexError:\n s +=' '\n yield ord(s[0]),ord(s[1]),ord(s[2]),ord(s[3])\n return\n s=s[4:]\n \n try :\n result=[''.join(\n [chr((A -0x20)<<2 |(((B -0x20)>>4)&0x3)),\n chr(((B -0x20)&0xf)<<4 |(((C -0x20)>>2)&0xf)),\n chr(((C -0x20)&0x3)<<6 |((D -0x20)&0x3f))\n ])for A,B,C,D in quadruplets_gen(s[1:].rstrip())]\n except ValueError:\n raise Error('Illegal char')\n result=''.join(result)\n trailingdata=result[length:]\n if trailingdata.strip('\\x00'):\n raise Error('Trailing garbage')\n result=result[:length]\n if len(result)>2)&0x3F],\n table_b2a_base64[((A <<4)|((B >>4)&0xF))&0x3F],\n table_b2a_base64[((B <<2)|((C >>6)&0x3))&0x3F],\n table_b2a_base64[(C)&0x3F]])\n for A,B,C in a]\n \n final=s[length -final_length:]\n if final_length ==0:\n snippet=''\n elif final_length ==1:\n a=final[0]\n snippet=table_b2a_base64[(a >>2)&0x3F]+\\\n table_b2a_base64[(a <<4)&0x3F]+'=='\n else :\n a=final[0]\n b=final[1]\n snippet=table_b2a_base64[(a >>2)&0x3F]+\\\n table_b2a_base64[((a <<4)|(b >>4)&0xF)&0x3F]+\\\n table_b2a_base64[(b <<2)&0x3F]+'='\n \n result=''.join(result)+snippet\n if newline:\n result +='\\n'\n return bytes(result,__BRYTHON__.charset)\n \ndef a2b_qp(s,header=False ):\n inp=0\n odata=[]\n while inp =len(s):\n break\n \n if (s[inp]=='\\n')or (s[inp]=='\\r'):\n if s[inp]!='\\n':\n while inp 0 and data[lf -1]=='\\r'\n \n inp=0\n linelen=0\n odata=[]\n while inp '~'or\n c =='='or\n (header and c =='_')or\n (c =='.'and linelen ==0 and (inp+1 ==len(data)or\n data[inp+1]=='\\n'or\n data[inp+1]=='\\r'))or\n (not istext and (c =='\\r'or c =='\\n'))or\n ((c =='\\t'or c ==' ')and (inp+1 ==len(data)))or\n (c <=' 'and c !='\\r'and c !='\\n'and\n (quotetabs or (not quotetabs and (c !='\\t'and c !=' '))))):\n linelen +=3\n if linelen >=MAXLINESIZE:\n odata.append('=')\n if crlf:odata.append('\\r')\n odata.append('\\n')\n linelen=3\n odata.append('='+two_hex_digits(ord(c)))\n inp +=1\n else :\n if (istext and\n (c =='\\n'or (inp+1 0 and\n (odata[-1]==' 'or odata[-1]=='\\t')):\n ch=ord(odata[-1])\n odata[-1]='='\n odata.append(two_hex_digits(ch))\n \n if crlf:odata.append('\\r')\n odata.append('\\n')\n if c =='\\r':\n inp +=2\n else :\n inp +=1\n else :\n if (inp+1 =MAXLINESIZE):\n odata.append('=')\n if crlf:odata.append('\\r')\n odata.append('\\n')\n linelen=0\n \n linelen +=1\n if header and c ==' ':\n c='_'\n odata.append(c)\n inp +=1\n return ''.join(odata)\n \nhex_numbers='0123456789ABCDEF'\ndef hex(n):\n if n ==0:\n return '0'\n \n if n <0:\n n=-n\n sign='-'\n else :\n sign=''\n arr=[]\n \n def hex_gen(n):\n ''\n while n:\n yield n %0x10\n n=n /0x10\n \n for nibble in hex_gen(n):\n arr=[hex_numbers[nibble]]+arr\n return sign+''.join(arr)\n \ndef two_hex_digits(n):\n return hex_numbers[n /0x10]+hex_numbers[n %0x10]\n \n \ndef strhex_to_int(s):\n i=0\n for c in s:\n i=i *0x10+hex_numbers.index(c)\n return i\n \nhqx_encoding='!\"#$%&\\'()*+,-012345689@ABCDEFGHIJKLMNPQRSTUVXYZ[`abcdefhijklmpqr'\n\nDONE=0x7f\nSKIP=0x7e\nFAIL=0x7d\n\ntable_a2b_hqx=[\n\nFAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,\n\nFAIL,FAIL,SKIP,FAIL,FAIL,SKIP,FAIL,FAIL,\n\nFAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,\n\nFAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,\n\nFAIL,0x00,0x01,0x02,0x03,0x04,0x05,0x06,\n\n0x07,0x08,0x09,0x0A,0x0B,0x0C,FAIL,FAIL,\n\n0x0D,0x0E,0x0F,0x10,0x11,0x12,0x13,FAIL,\n\n0x14,0x15,DONE,FAIL,FAIL,FAIL,FAIL,FAIL,\n\n0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,\n\n0x1E,0x1F,0x20,0x21,0x22,0x23,0x24,FAIL,\n\n0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,FAIL,\n\n0x2C,0x2D,0x2E,0x2F,FAIL,FAIL,FAIL,FAIL,\n\n0x30,0x31,0x32,0x33,0x34,0x35,0x36,FAIL,\n\n0x37,0x38,0x39,0x3A,0x3B,0x3C,FAIL,FAIL,\n\n0x3D,0x3E,0x3F,FAIL,FAIL,FAIL,FAIL,FAIL,\n\nFAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,\nFAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,\nFAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,\nFAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,\nFAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,\nFAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,\nFAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,\nFAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,\nFAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,\nFAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,\nFAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,\nFAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,\nFAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,\nFAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,\nFAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,\nFAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,\nFAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,\n]\n\ndef a2b_hqx(s):\n result=[]\n \n def quadruples_gen(s):\n t=[]\n for c in s:\n res=table_a2b_hqx[ord(c)]\n if res ==SKIP:\n continue\n elif res ==FAIL:\n raise Error('Illegal character')\n elif res ==DONE:\n yield t\n raise Done\n else :\n t.append(res)\n if len(t)==4:\n yield t\n t=[]\n yield t\n \n done=0\n try :\n for snippet in quadruples_gen(s):\n length=len(snippet)\n if length ==4:\n result.append(chr(((snippet[0]&0x3f)<<2)|(snippet[1]>>4)))\n result.append(chr(((snippet[1]&0x0f)<<4)|(snippet[2]>>2)))\n result.append(chr(((snippet[2]&0x03)<<6)|(snippet[3])))\n elif length ==3:\n result.append(chr(((snippet[0]&0x3f)<<2)|(snippet[1]>>4)))\n result.append(chr(((snippet[1]&0x0f)<<4)|(snippet[2]>>2)))\n elif length ==2:\n result.append(chr(((snippet[0]&0x3f)<<2)|(snippet[1]>>4)))\n except Done:\n done=1\n except Error:\n raise\n return (''.join(result),done)\n \n \n \ndef b2a_hqx(s):\n result=[]\n \n def triples_gen(s):\n while s:\n try :\n yield ord(s[0]),ord(s[1]),ord(s[2])\n except IndexError:\n yield tuple([ord(c)for c in s])\n s=s[3:]\n \n for snippet in triples_gen(s):\n length=len(snippet)\n if length ==3:\n result.append(\n hqx_encoding[(snippet[0]&0xfc)>>2])\n result.append(hqx_encoding[\n ((snippet[0]&0x03)<<4)|((snippet[1]&0xf0)>>4)])\n result.append(hqx_encoding[\n (snippet[1]&0x0f)<<2 |((snippet[2]&0xc0)>>6)])\n result.append(hqx_encoding[snippet[2]&0x3f])\n elif length ==2:\n result.append(\n hqx_encoding[(snippet[0]&0xfc)>>2])\n result.append(hqx_encoding[\n ((snippet[0]&0x03)<<4)|((snippet[1]&0xf0)>>4)])\n result.append(hqx_encoding[\n (snippet[1]&0x0f)<<2])\n elif length ==1:\n result.append(\n hqx_encoding[(snippet[0]&0xfc)>>2])\n result.append(hqx_encoding[\n ((snippet[0]&0x03)<<4)])\n return ''.join(result)\n \ncrctab_hqx=[\n0x0000,0x1021,0x2042,0x3063,0x4084,0x50a5,0x60c6,0x70e7,\n0x8108,0x9129,0xa14a,0xb16b,0xc18c,0xd1ad,0xe1ce,0xf1ef,\n0x1231,0x0210,0x3273,0x2252,0x52b5,0x4294,0x72f7,0x62d6,\n0x9339,0x8318,0xb37b,0xa35a,0xd3bd,0xc39c,0xf3ff,0xe3de,\n0x2462,0x3443,0x0420,0x1401,0x64e6,0x74c7,0x44a4,0x5485,\n0xa56a,0xb54b,0x8528,0x9509,0xe5ee,0xf5cf,0xc5ac,0xd58d,\n0x3653,0x2672,0x1611,0x0630,0x76d7,0x66f6,0x5695,0x46b4,\n0xb75b,0xa77a,0x9719,0x8738,0xf7df,0xe7fe,0xd79d,0xc7bc,\n0x48c4,0x58e5,0x6886,0x78a7,0x0840,0x1861,0x2802,0x3823,\n0xc9cc,0xd9ed,0xe98e,0xf9af,0x8948,0x9969,0xa90a,0xb92b,\n0x5af5,0x4ad4,0x7ab7,0x6a96,0x1a71,0x0a50,0x3a33,0x2a12,\n0xdbfd,0xcbdc,0xfbbf,0xeb9e,0x9b79,0x8b58,0xbb3b,0xab1a,\n0x6ca6,0x7c87,0x4ce4,0x5cc5,0x2c22,0x3c03,0x0c60,0x1c41,\n0xedae,0xfd8f,0xcdec,0xddcd,0xad2a,0xbd0b,0x8d68,0x9d49,\n0x7e97,0x6eb6,0x5ed5,0x4ef4,0x3e13,0x2e32,0x1e51,0x0e70,\n0xff9f,0xefbe,0xdfdd,0xcffc,0xbf1b,0xaf3a,0x9f59,0x8f78,\n0x9188,0x81a9,0xb1ca,0xa1eb,0xd10c,0xc12d,0xf14e,0xe16f,\n0x1080,0x00a1,0x30c2,0x20e3,0x5004,0x4025,0x7046,0x6067,\n0x83b9,0x9398,0xa3fb,0xb3da,0xc33d,0xd31c,0xe37f,0xf35e,\n0x02b1,0x1290,0x22f3,0x32d2,0x4235,0x5214,0x6277,0x7256,\n0xb5ea,0xa5cb,0x95a8,0x8589,0xf56e,0xe54f,0xd52c,0xc50d,\n0x34e2,0x24c3,0x14a0,0x0481,0x7466,0x6447,0x5424,0x4405,\n0xa7db,0xb7fa,0x8799,0x97b8,0xe75f,0xf77e,0xc71d,0xd73c,\n0x26d3,0x36f2,0x0691,0x16b0,0x6657,0x7676,0x4615,0x5634,\n0xd94c,0xc96d,0xf90e,0xe92f,0x99c8,0x89e9,0xb98a,0xa9ab,\n0x5844,0x4865,0x7806,0x6827,0x18c0,0x08e1,0x3882,0x28a3,\n0xcb7d,0xdb5c,0xeb3f,0xfb1e,0x8bf9,0x9bd8,0xabbb,0xbb9a,\n0x4a75,0x5a54,0x6a37,0x7a16,0x0af1,0x1ad0,0x2ab3,0x3a92,\n0xfd2e,0xed0f,0xdd6c,0xcd4d,0xbdaa,0xad8b,0x9de8,0x8dc9,\n0x7c26,0x6c07,0x5c64,0x4c45,0x3ca2,0x2c83,0x1ce0,0x0cc1,\n0xef1f,0xff3e,0xcf5d,0xdf7c,0xaf9b,0xbfba,0x8fd9,0x9ff8,\n0x6e17,0x7e36,0x4e55,0x5e74,0x2e93,0x3eb2,0x0ed1,0x1ef0,\n]\n\ndef crc_hqx(s,crc):\n for c in s:\n crc=((crc <<8)&0xff00)^crctab_hqx[((crc >>8)&0xff)^ord(c)]\n \n return crc\n \ndef rlecode_hqx(s):\n ''\n\n\n\n \n if not s:\n return ''\n result=[]\n prev=s[0]\n count=1\n \n \n \n \n if s[-1]=='!':\n s=s[1:]+'?'\n else :\n s=s[1:]+'!'\n \n for c in s:\n if c ==prev and count <255:\n count +=1\n else :\n if count ==1:\n if prev !='\\x90':\n result.append(prev)\n else :\n result.extend(['\\x90','\\x00'])\n elif count <4:\n if prev !='\\x90':\n result.extend([prev]*count)\n else :\n result.extend(['\\x90','\\x00']*count)\n else :\n if prev !='\\x90':\n result.extend([prev,'\\x90',chr(count)])\n else :\n result.extend(['\\x90','\\x00','\\x90',chr(count)])\n count=1\n prev=c\n \n return ''.join(result)\n \ndef rledecode_hqx(s):\n s=s.split('\\x90')\n result=[s[0]]\n prev=s[0]\n for snippet in s[1:]:\n count=ord(snippet[0])\n if count >0:\n result.append(prev[-1]*(count -1))\n prev=snippet\n else :\n result.append('\\x90')\n prev='\\x90'\n result.append(snippet[1:])\n \n return ''.join(result)\n \ncrc_32_tab=[\n0x00000000,0x77073096,0xee0e612c,0x990951ba,0x076dc419,\n0x706af48f,0xe963a535,0x9e6495a3,0x0edb8832,0x79dcb8a4,\n0xe0d5e91e,0x97d2d988,0x09b64c2b,0x7eb17cbd,0xe7b82d07,\n0x90bf1d91,0x1db71064,0x6ab020f2,0xf3b97148,0x84be41de,\n0x1adad47d,0x6ddde4eb,0xf4d4b551,0x83d385c7,0x136c9856,\n0x646ba8c0,0xfd62f97a,0x8a65c9ec,0x14015c4f,0x63066cd9,\n0xfa0f3d63,0x8d080df5,0x3b6e20c8,0x4c69105e,0xd56041e4,\n0xa2677172,0x3c03e4d1,0x4b04d447,0xd20d85fd,0xa50ab56b,\n0x35b5a8fa,0x42b2986c,0xdbbbc9d6,0xacbcf940,0x32d86ce3,\n0x45df5c75,0xdcd60dcf,0xabd13d59,0x26d930ac,0x51de003a,\n0xc8d75180,0xbfd06116,0x21b4f4b5,0x56b3c423,0xcfba9599,\n0xb8bda50f,0x2802b89e,0x5f058808,0xc60cd9b2,0xb10be924,\n0x2f6f7c87,0x58684c11,0xc1611dab,0xb6662d3d,0x76dc4190,\n0x01db7106,0x98d220bc,0xefd5102a,0x71b18589,0x06b6b51f,\n0x9fbfe4a5,0xe8b8d433,0x7807c9a2,0x0f00f934,0x9609a88e,\n0xe10e9818,0x7f6a0dbb,0x086d3d2d,0x91646c97,0xe6635c01,\n0x6b6b51f4,0x1c6c6162,0x856530d8,0xf262004e,0x6c0695ed,\n0x1b01a57b,0x8208f4c1,0xf50fc457,0x65b0d9c6,0x12b7e950,\n0x8bbeb8ea,0xfcb9887c,0x62dd1ddf,0x15da2d49,0x8cd37cf3,\n0xfbd44c65,0x4db26158,0x3ab551ce,0xa3bc0074,0xd4bb30e2,\n0x4adfa541,0x3dd895d7,0xa4d1c46d,0xd3d6f4fb,0x4369e96a,\n0x346ed9fc,0xad678846,0xda60b8d0,0x44042d73,0x33031de5,\n0xaa0a4c5f,0xdd0d7cc9,0x5005713c,0x270241aa,0xbe0b1010,\n0xc90c2086,0x5768b525,0x206f85b3,0xb966d409,0xce61e49f,\n0x5edef90e,0x29d9c998,0xb0d09822,0xc7d7a8b4,0x59b33d17,\n0x2eb40d81,0xb7bd5c3b,0xc0ba6cad,0xedb88320,0x9abfb3b6,\n0x03b6e20c,0x74b1d29a,0xead54739,0x9dd277af,0x04db2615,\n0x73dc1683,0xe3630b12,0x94643b84,0x0d6d6a3e,0x7a6a5aa8,\n0xe40ecf0b,0x9309ff9d,0x0a00ae27,0x7d079eb1,0xf00f9344,\n0x8708a3d2,0x1e01f268,0x6906c2fe,0xf762575d,0x806567cb,\n0x196c3671,0x6e6b06e7,0xfed41b76,0x89d32be0,0x10da7a5a,\n0x67dd4acc,0xf9b9df6f,0x8ebeeff9,0x17b7be43,0x60b08ed5,\n0xd6d6a3e8,0xa1d1937e,0x38d8c2c4,0x4fdff252,0xd1bb67f1,\n0xa6bc5767,0x3fb506dd,0x48b2364b,0xd80d2bda,0xaf0a1b4c,\n0x36034af6,0x41047a60,0xdf60efc3,0xa867df55,0x316e8eef,\n0x4669be79,0xcb61b38c,0xbc66831a,0x256fd2a0,0x5268e236,\n0xcc0c7795,0xbb0b4703,0x220216b9,0x5505262f,0xc5ba3bbe,\n0xb2bd0b28,0x2bb45a92,0x5cb36a04,0xc2d7ffa7,0xb5d0cf31,\n0x2cd99e8b,0x5bdeae1d,0x9b64c2b0,0xec63f226,0x756aa39c,\n0x026d930a,0x9c0906a9,0xeb0e363f,0x72076785,0x05005713,\n0x95bf4a82,0xe2b87a14,0x7bb12bae,0x0cb61b38,0x92d28e9b,\n0xe5d5be0d,0x7cdcefb7,0x0bdbdf21,0x86d3d2d4,0xf1d4e242,\n0x68ddb3f8,0x1fda836e,0x81be16cd,0xf6b9265b,0x6fb077e1,\n0x18b74777,0x88085ae6,0xff0f6a70,0x66063bca,0x11010b5c,\n0x8f659eff,0xf862ae69,0x616bffd3,0x166ccf45,0xa00ae278,\n0xd70dd2ee,0x4e048354,0x3903b3c2,0xa7672661,0xd06016f7,\n0x4969474d,0x3e6e77db,0xaed16a4a,0xd9d65adc,0x40df0b66,\n0x37d83bf0,0xa9bcae53,0xdebb9ec5,0x47b2cf7f,0x30b5ffe9,\n0xbdbdf21c,0xcabac28a,0x53b39330,0x24b4a3a6,0xbad03605,\n0xcdd70693,0x54de5729,0x23d967bf,0xb3667a2e,0xc4614ab8,\n0x5d681b02,0x2a6f2b94,0xb40bbe37,0xc30c8ea1,0x5a05df1b,\n0x2d02ef8d\n]\n\ndef crc32(s,crc=0):\n result=0\n crc=~int(crc)&0xffffffff\n \n for c in s:\n crc=crc_32_tab[(crc ^int(ord(c)))&0xff]^(crc >>8)\n \n \n \n result=crc ^0xffffffff\n \n if result >2 **31:\n result=((result+2 **31)%2 **32)-2 **31\n \n return result\n", ["_base64", "_binascii"]], "bisect": [".py", "''\n\ndef insort_right(a,x,lo=0,hi=None ):\n ''\n\n\n\n\n\n \n \n lo=bisect_right(a,x,lo,hi)\n a.insert(lo,x)\n \ndef bisect_right(a,x,lo=0,hi=None ):\n ''\n\n\n\n\n\n\n\n \n \n if lo <0:\n raise ValueError('lo must be non-negative')\n if hi is None :\n hi=len(a)\n while lo =9:\n names=day_name\n else :\n names=day_abbr\n return names[day][:width].center(width)\n \n def formatweekheader(self,width):\n ''\n\n \n return ' '.join(self.formatweekday(i,width)for i in self.iterweekdays())\n \n def formatmonthname(self,theyear,themonth,width,withyear=True ):\n ''\n\n \n s=month_name[themonth]\n if withyear:\n s=\"%s %r\"%(s,theyear)\n return s.center(width)\n \n def prmonth(self,theyear,themonth,w=0,l=0):\n ''\n\n \n print(self.formatmonth(theyear,themonth,w,l),end='')\n \n def formatmonth(self,theyear,themonth,w=0,l=0):\n ''\n\n \n w=max(2,w)\n l=max(1,l)\n s=self.formatmonthname(theyear,themonth,7 *(w+1)-1)\n s=s.rstrip()\n s +='\\n'*l\n s +=self.formatweekheader(w).rstrip()\n s +='\\n'*l\n for week in self.monthdays2calendar(theyear,themonth):\n s +=self.formatweek(week,w).rstrip()\n s +='\\n'*l\n return s\n \n def formatyear(self,theyear,w=2,l=1,c=6,m=3):\n ''\n\n \n w=max(2,w)\n l=max(1,l)\n c=max(2,c)\n colwidth=(w+1)*7 -1\n v=[]\n a=v.append\n a(repr(theyear).center(colwidth *m+c *(m -1)).rstrip())\n a('\\n'*l)\n header=self.formatweekheader(w)\n for (i,row)in enumerate(self.yeardays2calendar(theyear,m)):\n \n months=range(m *i+1,min(m *(i+1)+1,13))\n a('\\n'*l)\n names=(self.formatmonthname(theyear,k,colwidth,False )\n for k in months)\n a(formatstring(names,colwidth,c).rstrip())\n a('\\n'*l)\n headers=(header for k in months)\n a(formatstring(headers,colwidth,c).rstrip())\n a('\\n'*l)\n \n height=max(len(cal)for cal in row)\n for j in range(height):\n weeks=[]\n for cal in row:\n if j >=len(cal):\n weeks.append('')\n else :\n weeks.append(self.formatweek(cal[j],w))\n a(formatstring(weeks,colwidth,c).rstrip())\n a('\\n'*l)\n return ''.join(v)\n \n def pryear(self,theyear,w=0,l=0,c=6,m=3):\n ''\n print(self.formatyear(theyear,w,l,c,m),end='')\n \n \nclass HTMLCalendar(Calendar):\n ''\n\n \n \n \n cssclasses=[\"mon\",\"tue\",\"wed\",\"thu\",\"fri\",\"sat\",\"sun\"]\n \n \n cssclasses_weekday_head=cssclasses\n \n \n cssclass_noday=\"noday\"\n \n \n cssclass_month_head=\"month\"\n \n \n cssclass_month=\"month\"\n \n \n cssclass_year_head=\"year\"\n \n \n cssclass_year=\"year\"\n \n def formatday(self,day,weekday):\n ''\n\n \n if day ==0:\n \n return ' '%self.cssclass_noday\n else :\n return '%d'%(self.cssclasses[weekday],day)\n \n def formatweek(self,theweek):\n ''\n\n \n s=''.join(self.formatday(d,wd)for (d,wd)in theweek)\n return '%s'%s\n \n def formatweekday(self,day):\n ''\n\n \n return '%s'%(\n self.cssclasses_weekday_head[day],day_abbr[day])\n \n def formatweekheader(self):\n ''\n\n \n s=''.join(self.formatweekday(i)for i in self.iterweekdays())\n return '%s'%s\n \n def formatmonthname(self,theyear,themonth,withyear=True ):\n ''\n\n \n if withyear:\n s='%s %s'%(month_name[themonth],theyear)\n else :\n s='%s'%month_name[themonth]\n return '%s'%(\n self.cssclass_month_head,s)\n \n def formatmonth(self,theyear,themonth,withyear=True ):\n ''\n\n \n v=[]\n a=v.append\n a(''%(\n self.cssclass_month))\n a('\\n')\n a(self.formatmonthname(theyear,themonth,withyear=withyear))\n a('\\n')\n a(self.formatweekheader())\n a('\\n')\n for week in self.monthdays2calendar(theyear,themonth):\n a(self.formatweek(week))\n a('\\n')\n a('')\n a('\\n')\n return ''.join(v)\n \n def formatyear(self,theyear,width=3):\n ''\n\n \n v=[]\n a=v.append\n width=max(width,1)\n a(''%\n self.cssclass_year)\n a('\\n')\n a('%s'%(\n width,self.cssclass_year_head,theyear))\n for i in range(January,January+12,width):\n \n months=range(i,min(i+width,13))\n a('')\n for m in months:\n a('')\n a(self.formatmonth(theyear,m,withyear=False ))\n a('')\n a('')\n a('')\n return ''.join(v)\n \n def formatyearpage(self,theyear,width=3,css='calendar.css',encoding=None ):\n ''\n\n \n if encoding is None :\n encoding=sys.getdefaultencoding()\n v=[]\n a=v.append\n a('\\n'%encoding)\n a('\\n')\n a('\\n')\n a('\\n')\n a('\\n'%encoding)\n if css is not None :\n a('\\n'%css)\n a('Calendar for %d\\n'%theyear)\n a('\\n')\n a('\\n')\n a(self.formatyear(theyear,width))\n a('\\n')\n a('\\n')\n return ''.join(v).encode(encoding,\"xmlcharrefreplace\")\n \n \nclass different_locale:\n def __init__(self,locale):\n self.locale=locale\n \n def __enter__(self):\n self.oldlocale=_locale.getlocale(_locale.LC_TIME)\n _locale.setlocale(_locale.LC_TIME,self.locale)\n \n def __exit__(self,*args):\n _locale.setlocale(_locale.LC_TIME,self.oldlocale)\n \n \nclass LocaleTextCalendar(TextCalendar):\n ''\n\n\n\n\n \n \n def __init__(self,firstweekday=0,locale=None ):\n TextCalendar.__init__(self,firstweekday)\n if locale is None :\n locale=_locale.getdefaultlocale()\n self.locale=locale\n \n def formatweekday(self,day,width):\n with different_locale(self.locale):\n if width >=9:\n names=day_name\n else :\n names=day_abbr\n name=names[day]\n return name[:width].center(width)\n \n def formatmonthname(self,theyear,themonth,width,withyear=True ):\n with different_locale(self.locale):\n s=month_name[themonth]\n if withyear:\n s=\"%s %r\"%(s,theyear)\n return s.center(width)\n \n \nclass LocaleHTMLCalendar(HTMLCalendar):\n ''\n\n\n\n\n \n def __init__(self,firstweekday=0,locale=None ):\n HTMLCalendar.__init__(self,firstweekday)\n if locale is None :\n locale=_locale.getdefaultlocale()\n self.locale=locale\n \n def formatweekday(self,day):\n with different_locale(self.locale):\n s=day_abbr[day]\n return '%s'%(self.cssclasses[day],s)\n \n def formatmonthname(self,theyear,themonth,withyear=True ):\n with different_locale(self.locale):\n s=month_name[themonth]\n if withyear:\n s='%s %s'%(s,theyear)\n return '%s'%s\n \n \n \nc=TextCalendar()\n\nfirstweekday=c.getfirstweekday\n\ndef setfirstweekday(firstweekday):\n if not MONDAY <=firstweekday <=SUNDAY:\n raise IllegalWeekdayError(firstweekday)\n c.firstweekday=firstweekday\n \nmonthcalendar=c.monthdayscalendar\nprweek=c.prweek\nweek=c.formatweek\nweekheader=c.formatweekheader\nprmonth=c.prmonth\nmonth=c.formatmonth\ncalendar=c.formatyear\nprcal=c.pryear\n\n\n\n_colwidth=7 *3 -1\n_spacing=6\n\n\ndef format(cols,colwidth=_colwidth,spacing=_spacing):\n ''\n print(formatstring(cols,colwidth,spacing))\n \n \ndef formatstring(cols,colwidth=_colwidth,spacing=_spacing):\n ''\n spacing *=' '\n return spacing.join(c.center(colwidth)for c in cols)\n \n \nEPOCH=1970\n_EPOCH_ORD=datetime.date(EPOCH,1,1).toordinal()\n\n\ndef timegm(tuple):\n ''\n year,month,day,hour,minute,second=tuple[:6]\n days=datetime.date(year,month,1).toordinal()-_EPOCH_ORD+day -1\n hours=days *24+hour\n minutes=hours *60+minute\n seconds=minutes *60+second\n return seconds\n \n \ndef main(args):\n import argparse\n parser=argparse.ArgumentParser()\n textgroup=parser.add_argument_group('text only arguments')\n htmlgroup=parser.add_argument_group('html only arguments')\n textgroup.add_argument(\n \"-w\",\"--width\",\n type=int,default=2,\n help=\"width of date column (default 2)\"\n )\n textgroup.add_argument(\n \"-l\",\"--lines\",\n type=int,default=1,\n help=\"number of lines for each week (default 1)\"\n )\n textgroup.add_argument(\n \"-s\",\"--spacing\",\n type=int,default=6,\n help=\"spacing between months (default 6)\"\n )\n textgroup.add_argument(\n \"-m\",\"--months\",\n type=int,default=3,\n help=\"months per row (default 3)\"\n )\n htmlgroup.add_argument(\n \"-c\",\"--css\",\n default=\"calendar.css\",\n help=\"CSS to use for page\"\n )\n parser.add_argument(\n \"-L\",\"--locale\",\n default=None ,\n help=\"locale to be used from month and weekday names\"\n )\n parser.add_argument(\n \"-e\",\"--encoding\",\n default=None ,\n help=\"encoding to use for output\"\n )\n parser.add_argument(\n \"-t\",\"--type\",\n default=\"text\",\n choices=(\"text\",\"html\"),\n help=\"output type (text or html)\"\n )\n parser.add_argument(\n \"year\",\n nargs='?',type=int,\n help=\"year number (1-9999)\"\n )\n parser.add_argument(\n \"month\",\n nargs='?',type=int,\n help=\"month number (1-12, text only)\"\n )\n \n options=parser.parse_args(args[1:])\n \n if options.locale and not options.encoding:\n parser.error(\"if --locale is specified --encoding is required\")\n sys.exit(1)\n \n locale=options.locale,options.encoding\n \n if options.type ==\"html\":\n if options.locale:\n cal=LocaleHTMLCalendar(locale=locale)\n else :\n cal=HTMLCalendar()\n encoding=options.encoding\n if encoding is None :\n encoding=sys.getdefaultencoding()\n optdict=dict(encoding=encoding,css=options.css)\n write=sys.stdout.buffer.write\n if options.year is None :\n write(cal.formatyearpage(datetime.date.today().year,**optdict))\n elif options.month is None :\n write(cal.formatyearpage(options.year,**optdict))\n else :\n parser.error(\"incorrect number of arguments\")\n sys.exit(1)\n else :\n if options.locale:\n cal=LocaleTextCalendar(locale=locale)\n else :\n cal=TextCalendar()\n optdict=dict(w=options.width,l=options.lines)\n if options.month is None :\n optdict[\"c\"]=options.spacing\n optdict[\"m\"]=options.months\n if options.year is None :\n result=cal.formatyear(datetime.date.today().year,**optdict)\n elif options.month is None :\n result=cal.formatyear(options.year,**optdict)\n else :\n result=cal.formatmonth(options.year,options.month,**optdict)\n write=sys.stdout.write\n if options.encoding:\n result=result.encode(options.encoding)\n write=sys.stdout.buffer.write\n write(result)\n \n \nif __name__ ==\"__main__\":\n main(sys.argv)\n", ["argparse", "datetime", "itertools", "locale", "sys"]], "cmath": [".py", "\n\n\n\n\n\n\n\n\n\nimport math\nimport sys\n\ndef takes_complex(func):\n def decorated(x):\n if isinstance(x,complex):\n return func(x)\n elif type(x)in [int,float]:\n return func(complex(x))\n elif hasattr(x,'__complex__'):\n c=x.__complex__()\n if not isinstance(c,complex):\n raise TypeError(\"A complex number is required\")\n else :\n return func(c)\n elif hasattr(x,'__float__'):\n try :\n c=complex(x.__float__(),0)\n except :\n raise TypeError(\"A complex number is required\")\n return func(c)\n else :\n raise TypeError(\"A complex number is required\")\n if hasattr(func,'__doc__'):\n decorated.__doc__=func.__doc__\n if hasattr(func,'__name__'):\n decorated.__name__=func.__name__\n return decorated\n \n@takes_complex\ndef isfinite(x):\n return math.isfinite(x.imag)and math.isfinite(x.real)\n \n@takes_complex\ndef phase(x):\n ''\n return math.atan2(x.imag,x.real)\n \n@takes_complex\ndef polar(x):\n ''\n\n\n\n\n \n phi=math.atan2(x.imag,x.real)\n r=math.sqrt(x.real **2+x.imag **2)\n return r,phi\n \ndef rect(r,phi):\n ''\n\n \n if math.isinf(r)or math.isinf(phi):\n \n \n if math.isinf(phi)and r !=.0 and not math.isnan(r):\n raise ValueError(\"math domain error\")\n \n \n \n \n if -_INF 0:\n _real=math.copysign(_INF,math.cos(phi))\n _imag=math.copysign(_INF,math.sin(phi))\n else :\n _real=-math.copysign(_INF,cos(phi));\n _imag=-math.copysign(_INF,sin(phi));\n return complex(_real,_imag)\n return _SPECIAL_VALUE(complex(r,phi),_rect_special_values)\n \n else :\n if phi ==.0:\n \n \n \n return complex(r,phi *r)\n else :\n return complex(r *math.cos(phi),r *math.sin(phi))\n \n@takes_complex\ndef sqrt(x):\n ''\n\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n s,d,ax,ay=.0,.0,math.fabs(x.real),math.fabs(x.imag)\n \n ret=_SPECIAL_VALUE(x,_sqrt_special_values)\n if ret is not None :\n return ret\n \n if x.real ==.0 and x.imag ==.0:\n _real=.0\n _imag=x.imag\n return complex(_real,_imag)\n \n if ax 0. or ay >0.):\n \n ax=math.ldexp(ax,_CM_SCALE_UP);\n s=math.ldexp(math.sqrt(ax+math.hypot(ax,math.ldexp(ay,_CM_SCALE_UP))),_CM_SCALE_DOWN)\n else :\n ax /=8.0 ;\n s=2.0 *math.sqrt(ax+math.hypot(ax,ay /8.0));\n \n d=ay /(2.0 *s)\n \n if x.real >=.0:\n _real=s ;\n _imag=math.copysign(d,x.imag)\n else :\n _real=d ;\n _imag=math.copysign(s,x.imag)\n \n return complex(_real,_imag)\n \n@takes_complex\ndef acos(x):\n ''\n\n\n\n\n \n \n ret=_SPECIAL_VALUE(x,_acos_special_values)\n if ret is not None :\n return ret\n \n if math.fabs(x.real)>_CM_LARGE_DOUBLE or math.fabs(x.imag)>_CM_LARGE_DOUBLE:\n \n \n _real=math.atan2(math.fabs(x.imag),x.real)\n \n \n \n if x.real <0:\n _imag=-math.copysign(math.log(math.hypot(x.real /2.,x.imag /2.))+_M_LN2 *2.,x.imag);\n else :\n _imag=math.copysign(math.log(math.hypot(x.real /2.,x.imag /2.))+_M_LN2 *2.,-x.imag);\n else :\n s1=complex(float(1 -x.real),-x.imag)\n s1=sqrt(s1)\n s2=complex(1.0+x.real,x.imag)\n s2=sqrt(s2)\n _real=2.0 *math.atan2(s1.real,s2.real);\n _imag=math.asinh(s2.real *s1.imag -s2.imag *s1.real)\n \n return complex(_real,_imag)\n \n@takes_complex\ndef acosh(x):\n ''\n\n\n\n \n ret=_SPECIAL_VALUE(x,_acosh_special_values)\n if ret is not None :\n return ret\n \n if math.fabs(x.real)>_CM_LARGE_DOUBLE or math.fabs(x.imag)>_CM_LARGE_DOUBLE:\n \n _real=math.log(math.hypot(x.real /2.0,x.imag /2.0))+_M_LN2 *2.0\n _imag=math.atan2(x.imag,x.real);\n else :\n s1=sqrt(complex(x.real -1.0,x.imag))\n s2=sqrt(complex(x.real+1.0,x.imag))\n _real=math.asinh(s1.real *s2.real+s1.imag *s2.imag)\n _imag=2. *math.atan2(s1.imag,s2.real)\n \n return complex(_real,_imag)\n \n@takes_complex\ndef asin(x):\n ''\n\n\n\n \n \n s=complex(-x.imag,x.real)\n s=asinh(s)\n return complex(s.imag,-s.real)\n \n@takes_complex\ndef asinh(x):\n ''\n\n\n\n\n \n ret=_SPECIAL_VALUE(x,_asinh_special_values)\n if ret is not None :\n return ret\n \n if math.fabs(x.real)>_CM_LARGE_DOUBLE or math.fabs(x.imag)>_CM_LARGE_DOUBLE:\n if x.imag >=.0:\n _real=math.copysign(math.log(math.hypot(x.real /2.,x.imag /2.))+_M_LN2 *2.,x.real)\n else :\n _real=-math.copysign(math.log(math.hypot(x.real /2.,x.imag /2.))+_M_LN2 *2.,-x.real)\n _imag=math.atan2(x.imag,math.fabs(x.real))\n else :\n s1=sqrt(complex(1.0+x.imag,-x.real))\n s2=sqrt(complex(1.0 -x.imag,x.real))\n _real=math.asinh(s1.real *s2.imag -s2.real *s1.imag)\n _imag=math.atan2(x.imag,s1.real *s2.real -s1.imag *s2.imag)\n return complex(_real,_imag)\n \n@takes_complex\ndef atan(x):\n ''\n\n\n\n\n \n s=atanh(complex(-x.imag,x.real))\n return complex(s.imag,-s.real)\n \n@takes_complex\ndef atanh(x):\n ''\n\n\n\n\n \n \n ret=_SPECIAL_VALUE(x,_atanh_special_values)\n if ret is not None :\n return ret\n \n \n if x.real <.0:\n return -(atanh(-x))\n \n ay=math.fabs(x.imag)\n \n if x.real >_CM_SQRT_LARGE_DOUBLE or ay >_CM_SQRT_LARGE_DOUBLE:\n \n \n \n \n \n h=math.hypot(x.real /2.,x.imag /2.)\n _real=x.real /4. /h /h\n \n \n \n \n \n \n _imag=-math.copysign(math.pi /2.,-x.imag)\n \n elif x.real ==1.0 and ay <_CM_SQRT_DBL_MIN:\n \n \n if (ay ==.0):\n raise ValueError(\"math domain error\")\n else :\n _real=-math.log(math.sqrt(ay)/math.sqrt(math.hypot(ay,2.)))\n _imag=math.copysign(math.atan2(2.0,-ay)/2,x.imag)\n \n else :\n \n _real=math.log1p(4. *x.real /((1 -x.real)*(1 -x.real)+ay *ay))/4.\n _imag=-math.atan2(-2. *x.imag,(1 -x.real)*(1+x.real)-ay *ay)/2.\n errno=0\n \n return complex(_real,_imag)\n \n@takes_complex\ndef cos(x):\n ''\n return cosh(complex(-x.imag,x.real))\n \n@takes_complex\ndef cosh(x):\n ''\n \n \n if isinf(x):\n if -_INF 0:\n _real=math.copysign(_INF,math.cos(x.imag))\n _imag=math.copysign(_INF,math.sin(x.imag))\n else :\n _real=math.copysign(_INF,math.cos(x.imag))\n _imag=-math.copysign(_INF,math.sin(x.imag))\n return complex(_real,_imag)\n else :\n \n if x.imag !=.0 and not math.isnan(x.real):\n raise ValueError(\"math domain error\")\n return _SPECIAL_VALUE(x,_cosh_special_values)\n \n if math.fabs(x.real)>_CM_LOG_LARGE_DOUBLE:\n \n \n x_minus_one=x.real -math.copysign(1.0,x.real)\n _real=cos(x.imag)*math.cosh(x_minus_one)*math.e\n _imag=sin(x.imag)*math.sinh(x_minus_one)*math.e\n else :\n _real=math.cos(x.imag)*math.cosh(x.real)\n _imag=math.sin(x.imag)*math.sinh(x.real)\n \n ret=complex(_real,_imag)\n \n if isinf(ret):\n raise OverflowError()\n return ret\n \n@takes_complex\ndef exp(x):\n ''\n if math.isinf(x.real)or math.isinf(x.imag):\n \n if math.isinf(x.imag)and (-_INF 0):\n raise ValueError(\"math domain error\")\n \n if math.isinf(x.real)and -_INF 0:\n _real=math.copysign(_INF,cos(x.imag))\n _imag=math.copysign(_INF,sin(x.imag))\n else :\n _real=math.copysign(.0,cos(x.imag))\n _imag=math.copysign(.0,sin(x.imag))\n return complex(_real,_imag)\n \n return _SPECIAL_VALUE(x,_exp_special_values)\n \n \n if x.real >_CM_LOG_LARGE_DOUBLE:\n l=math.exp(x.real -1.);\n _real=l *math.cos(x.imag)*math.e\n _imag=l *math.sin(x.imag)*math.e\n else :\n l=math.exp(x.real);\n _real=l *math.cos(x.imag)\n _imag=l *math.sin(x.imag)\n \n if math.isinf(_real)or math.isinf(_imag):\n raise OverflowError()\n \n return complex(_real,_imag)\n \ndef isclose(x,y,*,rel_tol=1e-09,abs_tol=0.0):\n rel_tol=float(rel_tol)\n abs_tol=float(abs_tol)\n return abs(x -y)<=max(rel_tol *max(abs(x),abs(y)),abs_tol)\n \n@takes_complex\ndef isinf(x):\n ''\n return math.isinf(x.real)or math.isinf(x.imag)\n \n@takes_complex\ndef isnan(x):\n ''\n return math.isnan(x.real)or math.isnan(x.imag)\n \n \n@takes_complex\ndef _to_complex(x):\n return x\n \ndef log(x,base=None ):\n ''\n\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n x=_to_complex(x)\n \n \n \n \n \n \n if base is not None :\n x=log(x)\n base=log(base)\n x=x /base\n \n ret=_SPECIAL_VALUE(x,_log_special_values)\n if ret is not None :\n return ret\n \n ax=math.fabs(x.real)\n ay=math.fabs(x.imag)\n \n if ax >_CM_LARGE_DOUBLE or ay >_CM_LARGE_DOUBLE:\n _real=math.log(math.hypot(ax /2.0,ay /2.0))+_M_LN2\n elif ax .0 or ay >.0:\n \n _real=math.log(math.hypot(math.ldexp(ax,sys.float_info.mant_dig),math.ldexp(ay,sys.float_info.mant_dig)))-sys.float_info.mant_dig *_M_LN2\n else :\n \n raise ValueError(\"math domain error\")\n _real=-_INF\n _imag=math.atan2(x.imag,x.real)\n else :\n h=math.hypot(ax,ay)\n if 0.71 <=h and h <=1.73:\n am=max(ax,ay)\n an=min(ax,ay)\n _real=math.log1p((am -1)*(am+1)+an *an)/2.\n else :\n _real=math.log(h)\n _imag=math.atan2(x.imag,x.real)\n return complex(_real,_imag)\n \n@takes_complex\ndef log10(x):\n ''\n\n\n\n \n ret=log(x);\n _real=ret.real /_M_LN10\n _imag=ret.imag /_M_LN10\n return complex(_real,_imag)\n \n@takes_complex\ndef sin(x):\n ''\n \n s=complex(-x.imag,x.real)\n s=sinh(s)\n return complex(s.imag,-s.real)\n \n@takes_complex\ndef sinh(x):\n ''\n \n if math.isinf(x.real)or math.isinf(x.imag):\n \n \n if math.isinf(x.imag)and not math.isnan(x.real):\n raise ValueError(\"math domain error\")\n \n if math.isinf(x.real)and -_INF 0:\n _real=math.copysign(_INF,cos(x.imag))\n _imag=math.copysign(_INF,sin(x.imag))\n else :\n _real=-math.copysign(_INF,cos(x.imag))\n _imag=math.copysign(_INF,sin(x.imag))\n return complex(_real,_imag)\n \n return _SPECIAL_VALUE(x,_sinh_special_values)\n \n if math.fabs(x.real)>_CM_LOG_LARGE_DOUBLE:\n x_minus_one=x.real -math.copysign(1.0,x.real)\n _real=math.cos(x.imag)*math.sinh(x.imag)*math.e\n _imag=math.sin(x.imag)*math.cosh(x.imag)*math.e\n else :\n _real=math.cos(x.imag)*math.sinh(x.real)\n _imag=math.sin(x.imag)*math.cosh(x.real)\n \n if math.isinf(_real)or math.isinf(_imag):\n raise OverflowError()\n \n return complex(_real,_imag)\n \n@takes_complex\ndef tan(x):\n ''\n s=atanh(complex(-x.imag,x.real))\n return complex(s.imag,-s.real)\n \n@takes_complex\ndef tanh(x):\n ''\n ''\n\n\n \n \n \n \n \n \n \n \n \n \n \n if isinf(x):\n if math.isinf(x.imag)and -_INF 0:\n _real=1.0\n _imag=math.copysign(.0,2.0 *math.sin(x.imag)*math.cos(x.imag))\n else :\n _real=-1.0\n _imag=math.copysign(.0,2. *math.sin(x.imag)*math.cos(x.imag))\n return complex(_real,_imag)\n return _SPECIAL_VALUE(x,_tanh_special_values)\n \n \n if math.fabs(x.real)>_CM_LOG_LARGE_DOUBLE:\n _real=math.copysign(1.,x.real)\n _imag=4. *math.sin(x.imag)*math.cos(x.imag)*math.exp(-2. *math.fabs(x.real))\n else :\n tx=math.tanh(x.real)\n ty=math.tan(x.imag)\n cx=1.0 /math.cosh(x.real)\n txty=tx *ty\n denom=1.+txty *txty\n _real=tx *(1.+ty *ty)/denom\n _imag=((ty /denom)*cx)*cx\n return complex(_real,_imag)\n \n \npi=math.pi\ne=math.e\n\n_CM_LARGE_DOUBLE=sys.float_info.max /4\n_CM_SQRT_LARGE_DOUBLE=math.sqrt(_CM_LARGE_DOUBLE)\n_CM_LOG_LARGE_DOUBLE=math.log(_CM_LARGE_DOUBLE)\n_CM_SQRT_DBL_MIN=math.sqrt(sys.float_info.min)\n_M_LN2=0.6931471805599453094\n_M_LN10=2.302585092994045684\n\nif sys.float_info.radix ==2:\n _CM_SCALE_UP=int((2 *(sys.float_info.mant_dig /2)+1))\nelif sys.float_info.radix ==16:\n _CM_SCALE_UP=int((4 *sys.float_info.mant_dig+1))\nelse :\n raise (\"cmath implementation expects the float base to be either 2 or 16, got \"+str(sys.float_info.radix)+\" instead.\")\n_CM_SCALE_DOWN=int((-(_CM_SCALE_UP+1)/2))\n\n_INF=float('inf')\n_NAN=float('nan')\n_PI=math.pi\n_P14=0.25 *math.pi\n_P12=0.5 *math.pi\n_P34=0.75 *math.pi\n_U=-9.5426319407711027e33\n\n\n_ST_NINF=0\n_ST_NEG=1\n_ST_NZERO=2\n_ST_PZERO=3\n_ST_POS=4\n_ST_PINF=5\n_ST_NAN=6\n\n\ndef _SPECIAL_VALUE(z,table):\n if not math.isfinite(z.real)or not math.isfinite(z.imag):\n return table[_special_type(z.real)][_special_type(z.imag)]\n else :\n return None\n \ndef _special_type(x):\n if -_INF ):\"\n misc_header=\"Miscellaneous help topics:\"\n undoc_header=\"Undocumented commands:\"\n nohelp=\"*** No help on %s\"\n use_rawinput=1\n \n def __init__(self,completekey='tab',stdin=None ,stdout=None ):\n ''\n\n\n\n\n\n\n\n\n \n if stdin is not None :\n self.stdin=stdin\n else :\n self.stdin=sys.stdin\n if stdout is not None :\n self.stdout=stdout\n else :\n self.stdout=sys.stdout\n self.cmdqueue=[]\n self.completekey=completekey\n \n def cmdloop(self,intro=None ):\n ''\n\n\n\n \n \n self.preloop()\n if self.use_rawinput and self.completekey:\n try :\n import readline\n self.old_completer=readline.get_completer()\n readline.set_completer(self.complete)\n readline.parse_and_bind(self.completekey+\": complete\")\n except ImportError:\n pass\n try :\n if intro is not None :\n self.intro=intro\n if self.intro:\n self.stdout.write(str(self.intro)+\"\\n\")\n stop=None\n while not stop:\n if self.cmdqueue:\n line=self.cmdqueue.pop(0)\n else :\n if self.use_rawinput:\n try :\n line=input(self.prompt)\n except EOFError:\n line='EOF'\n else :\n self.stdout.write(self.prompt)\n self.stdout.flush()\n line=self.stdin.readline()\n if not len(line):\n line='EOF'\n else :\n line=line.rstrip('\\r\\n')\n line=self.precmd(line)\n stop=self.onecmd(line)\n stop=self.postcmd(stop,line)\n self.postloop()\n finally :\n if self.use_rawinput and self.completekey:\n try :\n import readline\n readline.set_completer(self.old_completer)\n except ImportError:\n pass\n \n \n def precmd(self,line):\n ''\n\n\n \n return line\n \n def postcmd(self,stop,line):\n ''\n return stop\n \n def preloop(self):\n ''\n pass\n \n def postloop(self):\n ''\n\n\n \n pass\n \n def parseline(self,line):\n ''\n\n\n \n line=line.strip()\n if not line:\n return None ,None ,line\n elif line[0]=='?':\n line='help '+line[1:]\n elif line[0]=='!':\n if hasattr(self,'do_shell'):\n line='shell '+line[1:]\n else :\n return None ,None ,line\n i,n=0,len(line)\n while i 0:\n cmd,args,foo=self.parseline(line)\n if cmd =='':\n compfunc=self.completedefault\n else :\n try :\n compfunc=getattr(self,'complete_'+cmd)\n except AttributeError:\n compfunc=self.completedefault\n else :\n compfunc=self.completenames\n self.completion_matches=compfunc(text,line,begidx,endidx)\n try :\n return self.completion_matches[state]\n except IndexError:\n return None\n \n def get_names(self):\n \n \n return dir(self.__class__)\n \n def complete_help(self,*args):\n commands=set(self.completenames(*args))\n topics=set(a[5:]for a in self.get_names()\n if a.startswith('help_'+args[0]))\n return list(commands |topics)\n \n def do_help(self,arg):\n ''\n if arg:\n \n try :\n func=getattr(self,'help_'+arg)\n except AttributeError:\n try :\n doc=getattr(self,'do_'+arg).__doc__\n if doc:\n self.stdout.write(\"%s\\n\"%str(doc))\n return\n except AttributeError:\n pass\n self.stdout.write(\"%s\\n\"%str(self.nohelp %(arg,)))\n return\n func()\n else :\n names=self.get_names()\n cmds_doc=[]\n cmds_undoc=[]\n help={}\n for name in names:\n if name[:5]=='help_':\n help[name[5:]]=1\n names.sort()\n \n prevname=''\n for name in names:\n if name[:3]=='do_':\n if name ==prevname:\n continue\n prevname=name\n cmd=name[3:]\n if cmd in help:\n cmds_doc.append(cmd)\n del help[cmd]\n elif getattr(self,name).__doc__:\n cmds_doc.append(cmd)\n else :\n cmds_undoc.append(cmd)\n self.stdout.write(\"%s\\n\"%str(self.doc_leader))\n self.print_topics(self.doc_header,cmds_doc,15,80)\n self.print_topics(self.misc_header,list(help.keys()),15,80)\n self.print_topics(self.undoc_header,cmds_undoc,15,80)\n \n def print_topics(self,header,cmds,cmdlen,maxcol):\n if cmds:\n self.stdout.write(\"%s\\n\"%str(header))\n if self.ruler:\n self.stdout.write(\"%s\\n\"%str(self.ruler *len(header)))\n self.columnize(cmds,maxcol -1)\n self.stdout.write(\"\\n\")\n \n def columnize(self,list,displaywidth=80):\n ''\n\n\n\n \n if not list:\n self.stdout.write(\"\\n\")\n return\n \n nonstrings=[i for i in range(len(list))\n if not isinstance(list[i],str)]\n if nonstrings:\n raise TypeError(\"list[i] not a string for i in %s\"\n %\", \".join(map(str,nonstrings)))\n size=len(list)\n if size ==1:\n self.stdout.write('%s\\n'%str(list[0]))\n return\n \n for nrows in range(1,len(list)):\n ncols=(size+nrows -1)//nrows\n colwidths=[]\n totwidth=-2\n for col in range(ncols):\n colwidth=0\n for row in range(nrows):\n i=row+nrows *col\n if i >=size:\n break\n x=list[i]\n colwidth=max(colwidth,len(x))\n colwidths.append(colwidth)\n totwidth +=colwidth+2\n if totwidth >displaywidth:\n break\n if totwidth <=displaywidth:\n break\n else :\n nrows=len(list)\n ncols=1\n colwidths=[0]\n for row in range(nrows):\n texts=[]\n for col in range(ncols):\n i=row+nrows *col\n if i >=size:\n x=\"\"\n else :\n x=list[i]\n texts.append(x)\n while texts and not texts[-1]:\n del texts[-1]\n for col in range(len(texts)):\n texts[col]=texts[col].ljust(colwidths[col])\n self.stdout.write(\"%s\\n\"%str(\" \".join(texts)))\n", ["readline", "string", "sys"]], "code": [".py", "''\n\n\n\n\n\n\nimport sys\nimport traceback\nfrom codeop import CommandCompiler,compile_command\n\n__all__=[\"InteractiveInterpreter\",\"InteractiveConsole\",\"interact\",\n\"compile_command\"]\n\nclass InteractiveInterpreter:\n ''\n\n\n\n\n\n \n \n def __init__(self,locals=None ):\n ''\n\n\n\n\n\n\n \n if locals is None :\n locals={\"__name__\":\"__console__\",\"__doc__\":None }\n self.locals=locals\n self.compile=CommandCompiler()\n \n def runsource(self,source,filename=\"\",symbol=\"single\"):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n try :\n code=self.compile(source,filename,symbol)\n except (OverflowError,SyntaxError,ValueError):\n \n self.showsyntaxerror(filename)\n return False\n \n if code is None :\n \n return True\n \n \n self.runcode(code)\n return False\n \n def runcode(self,code):\n ''\n\n\n\n\n\n\n\n\n\n \n try :\n exec(code,self.locals)\n except SystemExit:\n raise\n except :\n self.showtraceback()\n \n def showsyntaxerror(self,filename=None ):\n ''\n\n\n\n\n\n\n\n\n\n \n type,value,tb=sys.exc_info()\n sys.last_type=type\n sys.last_value=value\n sys.last_traceback=tb\n if filename and type is SyntaxError:\n \n try :\n msg,(dummy_filename,lineno,offset,line)=value.args\n except ValueError:\n \n pass\n else :\n \n value=SyntaxError(msg,(filename,lineno,offset,line))\n sys.last_value=value\n if sys.excepthook is sys.__excepthook__:\n lines=traceback.format_exception_only(type,value)\n self.write(''.join(lines))\n else :\n \n \n sys.excepthook(type,value,tb)\n \n def showtraceback(self):\n ''\n\n\n\n\n\n \n sys.last_type,sys.last_value,last_tb=ei=sys.exc_info()\n sys.last_traceback=last_tb\n try :\n lines=traceback.format_exception(ei[0],ei[1],last_tb.tb_next)\n if sys.excepthook is sys.__excepthook__:\n self.write(''.join(lines))\n else :\n \n \n sys.excepthook(ei[0],ei[1],last_tb)\n finally :\n last_tb=ei=None\n \n def write(self,data):\n ''\n\n\n\n\n \n sys.stderr.write(data)\n \n \nclass InteractiveConsole(InteractiveInterpreter):\n ''\n\n\n\n\n \n \n def __init__(self,locals=None ,filename=\"\"):\n ''\n\n\n\n\n\n\n\n \n InteractiveInterpreter.__init__(self,locals)\n self.filename=filename\n self.resetbuffer()\n \n def resetbuffer(self):\n ''\n self.buffer=[]\n \n def interact(self,banner=None ,exitmsg=None ):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n try :\n sys.ps1\n except AttributeError:\n sys.ps1=\">>> \"\n try :\n sys.ps2\n except AttributeError:\n sys.ps2=\"... \"\n cprt='Type \"help\", \"copyright\", \"credits\" or \"license\" for more information.'\n if banner is None :\n self.write(\"Python %s on %s\\n%s\\n(%s)\\n\"%\n (sys.version,sys.platform,cprt,\n self.__class__.__name__))\n elif banner:\n self.write(\"%s\\n\"%str(banner))\n more=0\n while 1:\n try :\n if more:\n prompt=sys.ps2\n else :\n prompt=sys.ps1\n try :\n line=self.raw_input(prompt)\n except EOFError:\n self.write(\"\\n\")\n break\n else :\n more=self.push(line)\n except KeyboardInterrupt:\n self.write(\"\\nKeyboardInterrupt\\n\")\n self.resetbuffer()\n more=0\n if exitmsg is None :\n self.write('now exiting %s...\\n'%self.__class__.__name__)\n elif exitmsg !='':\n self.write('%s\\n'%exitmsg)\n \n def push(self,line):\n ''\n\n\n\n\n\n\n\n\n\n\n\n \n self.buffer.append(line)\n source=\"\\n\".join(self.buffer)\n more=self.runsource(source,self.filename)\n if not more:\n self.resetbuffer()\n return more\n \n def raw_input(self,prompt=\"\"):\n ''\n\n\n\n\n\n\n\n\n \n return input(prompt)\n \n \n \ndef interact(banner=None ,readfunc=None ,local=None ,exitmsg=None ):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n \n console=InteractiveConsole(local)\n if readfunc is not None :\n console.raw_input=readfunc\n else :\n try :\n import readline\n except ImportError:\n pass\n console.interact(banner,exitmsg)\n \n \nif __name__ ==\"__main__\":\n import argparse\n \n parser=argparse.ArgumentParser()\n parser.add_argument('-q',action='store_true',\n help=\"don't print version and copyright messages\")\n args=parser.parse_args()\n if args.q or sys.flags.quiet:\n banner=''\n else :\n banner=None\n interact(banner)\n", ["argparse", "codeop", "readline", "sys", "traceback"]], "codecs": [".py", "''\n\n\n\n\n\n\n\n\nimport builtins\nimport sys\n\n\n\ntry :\n from _codecs import *\nexcept ImportError as why:\n raise SystemError('Failed to load the builtin codecs: %s'%why)\n \n__all__=[\"register\",\"lookup\",\"open\",\"EncodedFile\",\"BOM\",\"BOM_BE\",\n\"BOM_LE\",\"BOM32_BE\",\"BOM32_LE\",\"BOM64_BE\",\"BOM64_LE\",\n\"BOM_UTF8\",\"BOM_UTF16\",\"BOM_UTF16_LE\",\"BOM_UTF16_BE\",\n\"BOM_UTF32\",\"BOM_UTF32_LE\",\"BOM_UTF32_BE\",\n\"CodecInfo\",\"Codec\",\"IncrementalEncoder\",\"IncrementalDecoder\",\n\"StreamReader\",\"StreamWriter\",\n\"StreamReaderWriter\",\"StreamRecoder\",\n\"getencoder\",\"getdecoder\",\"getincrementalencoder\",\n\"getincrementaldecoder\",\"getreader\",\"getwriter\",\n\"encode\",\"decode\",\"iterencode\",\"iterdecode\",\n\"strict_errors\",\"ignore_errors\",\"replace_errors\",\n\"xmlcharrefreplace_errors\",\n\"backslashreplace_errors\",\"namereplace_errors\",\n\"register_error\",\"lookup_error\"]\n\n\n\n\n\n\n\n\n\n\nBOM_UTF8=b'\\xef\\xbb\\xbf'\n\n\nBOM_LE=BOM_UTF16_LE=b'\\xff\\xfe'\n\n\nBOM_BE=BOM_UTF16_BE=b'\\xfe\\xff'\n\n\nBOM_UTF32_LE=b'\\xff\\xfe\\x00\\x00'\n\n\nBOM_UTF32_BE=b'\\x00\\x00\\xfe\\xff'\n\nif sys.byteorder =='little':\n\n\n BOM=BOM_UTF16=BOM_UTF16_LE\n \n \n BOM_UTF32=BOM_UTF32_LE\n \nelse :\n\n\n BOM=BOM_UTF16=BOM_UTF16_BE\n \n \n BOM_UTF32=BOM_UTF32_BE\n \n \nBOM32_LE=BOM_UTF16_LE\nBOM32_BE=BOM_UTF16_BE\nBOM64_LE=BOM_UTF32_LE\nBOM64_BE=BOM_UTF32_BE\n\n\n\n\nclass CodecInfo(tuple):\n ''\n \n \n \n \n \n \n \n _is_text_encoding=True\n \n def __new__(cls,encode,decode,streamreader=None ,streamwriter=None ,\n incrementalencoder=None ,incrementaldecoder=None ,name=None ,\n *,_is_text_encoding=None ):\n self=tuple.__new__(cls,(encode,decode,streamreader,streamwriter))\n self.name=name\n self.encode=encode\n self.decode=decode\n self.incrementalencoder=incrementalencoder\n self.incrementaldecoder=incrementaldecoder\n self.streamwriter=streamwriter\n self.streamreader=streamreader\n if _is_text_encoding is not None :\n self._is_text_encoding=_is_text_encoding\n return self\n \n def __repr__(self):\n return \"<%s.%s object for encoding %s at %#x>\"%\\\n (self.__class__.__module__,self.__class__.__qualname__,\n self.name,id(self))\n \nclass Codec:\n\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n def encode(self,input,errors='strict'):\n \n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n raise NotImplementedError\n \n def decode(self,input,errors='strict'):\n \n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n raise NotImplementedError\n \nclass IncrementalEncoder(object):\n ''\n\n\n\n \n def __init__(self,errors='strict'):\n ''\n\n\n\n\n\n \n self.errors=errors\n self.buffer=\"\"\n \n def encode(self,input,final=False ):\n ''\n\n \n raise NotImplementedError\n \n def reset(self):\n ''\n\n \n \n def getstate(self):\n ''\n\n \n return 0\n \n def setstate(self,state):\n ''\n\n\n \n \nclass BufferedIncrementalEncoder(IncrementalEncoder):\n ''\n\n\n\n \n def __init__(self,errors='strict'):\n IncrementalEncoder.__init__(self,errors)\n \n self.buffer=\"\"\n \n def _buffer_encode(self,input,errors,final):\n \n \n raise NotImplementedError\n \n def encode(self,input,final=False ):\n \n data=self.buffer+input\n (result,consumed)=self._buffer_encode(data,self.errors,final)\n \n self.buffer=data[consumed:]\n return result\n \n def reset(self):\n IncrementalEncoder.reset(self)\n self.buffer=\"\"\n \n def getstate(self):\n return self.buffer or 0\n \n def setstate(self,state):\n self.buffer=state or \"\"\n \nclass IncrementalDecoder(object):\n ''\n\n\n\n \n def __init__(self,errors='strict'):\n ''\n\n\n\n\n\n \n self.errors=errors\n \n def decode(self,input,final=False ):\n ''\n\n \n raise NotImplementedError\n \n def reset(self):\n ''\n\n \n \n def getstate(self):\n ''\n\n\n\n\n\n\n\n\n\n \n return (b\"\",0)\n \n def setstate(self,state):\n ''\n\n\n\n\n \n \nclass BufferedIncrementalDecoder(IncrementalDecoder):\n ''\n\n\n\n \n def __init__(self,errors='strict'):\n IncrementalDecoder.__init__(self,errors)\n \n self.buffer=b\"\"\n \n def _buffer_decode(self,input,errors,final):\n \n \n raise NotImplementedError\n \n def decode(self,input,final=False ):\n \n data=self.buffer+input\n (result,consumed)=self._buffer_decode(data,self.errors,final)\n \n self.buffer=data[consumed:]\n return result\n \n def reset(self):\n IncrementalDecoder.reset(self)\n self.buffer=b\"\"\n \n def getstate(self):\n \n return (self.buffer,0)\n \n def setstate(self,state):\n \n self.buffer=state[0]\n \n \n \n \n \n \n \n \nclass StreamWriter(Codec):\n\n def __init__(self,stream,errors='strict'):\n \n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n self.stream=stream\n self.errors=errors\n \n def write(self,object):\n \n ''\n \n data,consumed=self.encode(object,self.errors)\n self.stream.write(data)\n \n def writelines(self,list):\n \n ''\n\n \n self.write(''.join(list))\n \n def reset(self):\n \n ''\n\n\n\n\n\n\n \n pass\n \n def seek(self,offset,whence=0):\n self.stream.seek(offset,whence)\n if whence ==0 and offset ==0:\n self.reset()\n \n def __getattr__(self,name,\n getattr=getattr):\n \n ''\n \n return getattr(self.stream,name)\n \n def __enter__(self):\n return self\n \n def __exit__(self,type,value,tb):\n self.stream.close()\n \n \n \nclass StreamReader(Codec):\n\n charbuffertype=str\n \n def __init__(self,stream,errors='strict'):\n \n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n self.stream=stream\n self.errors=errors\n self.bytebuffer=b\"\"\n self._empty_charbuffer=self.charbuffertype()\n self.charbuffer=self._empty_charbuffer\n self.linebuffer=None\n \n def decode(self,input,errors='strict'):\n raise NotImplementedError\n \n def read(self,size=-1,chars=-1,firstline=False ):\n \n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n if self.linebuffer:\n self.charbuffer=self._empty_charbuffer.join(self.linebuffer)\n self.linebuffer=None\n \n if chars <0:\n \n \n chars=size\n \n \n while True :\n \n if chars >=0:\n if len(self.charbuffer)>=chars:\n break\n \n if size <0:\n newdata=self.stream.read()\n else :\n newdata=self.stream.read(size)\n \n data=self.bytebuffer+newdata\n if not data:\n break\n try :\n newchars,decodedbytes=self.decode(data,self.errors)\n except UnicodeDecodeError as exc:\n if firstline:\n newchars,decodedbytes=\\\n self.decode(data[:exc.start],self.errors)\n lines=newchars.splitlines(keepends=True )\n if len(lines)<=1:\n raise\n else :\n raise\n \n self.bytebuffer=data[decodedbytes:]\n \n self.charbuffer +=newchars\n \n if not newdata:\n break\n if chars <0:\n \n result=self.charbuffer\n self.charbuffer=self._empty_charbuffer\n else :\n \n result=self.charbuffer[:chars]\n self.charbuffer=self.charbuffer[chars:]\n return result\n \n def readline(self,size=None ,keepends=True ):\n \n ''\n\n\n\n\n\n \n \n \n if self.linebuffer:\n line=self.linebuffer[0]\n del self.linebuffer[0]\n if len(self.linebuffer)==1:\n \n \n self.charbuffer=self.linebuffer[0]\n self.linebuffer=None\n if not keepends:\n line=line.splitlines(keepends=False )[0]\n return line\n \n readsize=size or 72\n line=self._empty_charbuffer\n \n while True :\n data=self.read(readsize,firstline=True )\n if data:\n \n \n \n if (isinstance(data,str)and data.endswith(\"\\r\"))or\\\n (isinstance(data,bytes)and data.endswith(b\"\\r\")):\n data +=self.read(size=1,chars=1)\n \n line +=data\n lines=line.splitlines(keepends=True )\n if lines:\n if len(lines)>1:\n \n \n line=lines[0]\n del lines[0]\n if len(lines)>1:\n \n lines[-1]+=self.charbuffer\n self.linebuffer=lines\n self.charbuffer=None\n else :\n \n self.charbuffer=lines[0]+self.charbuffer\n if not keepends:\n line=line.splitlines(keepends=False )[0]\n break\n line0withend=lines[0]\n line0withoutend=lines[0].splitlines(keepends=False )[0]\n if line0withend !=line0withoutend:\n \n self.charbuffer=self._empty_charbuffer.join(lines[1:])+\\\n self.charbuffer\n if keepends:\n line=line0withend\n else :\n line=line0withoutend\n break\n \n if not data or size is not None :\n if line and not keepends:\n line=line.splitlines(keepends=False )[0]\n break\n if readsize <8000:\n readsize *=2\n return line\n \n def readlines(self,sizehint=None ,keepends=True ):\n \n ''\n\n\n\n\n\n\n\n\n \n data=self.read()\n return data.splitlines(keepends)\n \n def reset(self):\n \n ''\n\n\n\n\n\n \n self.bytebuffer=b\"\"\n self.charbuffer=self._empty_charbuffer\n self.linebuffer=None\n \n def seek(self,offset,whence=0):\n ''\n\n\n \n self.stream.seek(offset,whence)\n self.reset()\n \n def __next__(self):\n \n ''\n line=self.readline()\n if line:\n return line\n raise StopIteration\n \n def __iter__(self):\n return self\n \n def __getattr__(self,name,\n getattr=getattr):\n \n ''\n \n return getattr(self.stream,name)\n \n def __enter__(self):\n return self\n \n def __exit__(self,type,value,tb):\n self.stream.close()\n \n \n \nclass StreamReaderWriter:\n\n ''\n\n\n\n\n\n\n \n \n encoding='unknown'\n \n def __init__(self,stream,Reader,Writer,errors='strict'):\n \n ''\n\n\n\n\n\n\n\n\n\n \n self.stream=stream\n self.reader=Reader(stream,errors)\n self.writer=Writer(stream,errors)\n self.errors=errors\n \n def read(self,size=-1):\n \n return self.reader.read(size)\n \n def readline(self,size=None ):\n \n return self.reader.readline(size)\n \n def readlines(self,sizehint=None ):\n \n return self.reader.readlines(sizehint)\n \n def __next__(self):\n \n ''\n return next(self.reader)\n \n def __iter__(self):\n return self\n \n def write(self,data):\n \n return self.writer.write(data)\n \n def writelines(self,list):\n \n return self.writer.writelines(list)\n \n def reset(self):\n \n self.reader.reset()\n self.writer.reset()\n \n def seek(self,offset,whence=0):\n self.stream.seek(offset,whence)\n self.reader.reset()\n if whence ==0 and offset ==0:\n self.writer.reset()\n \n def __getattr__(self,name,\n getattr=getattr):\n \n ''\n \n return getattr(self.stream,name)\n \n \n \n def __enter__(self):\n return self\n \n def __exit__(self,type,value,tb):\n self.stream.close()\n \n \n \nclass StreamRecoder:\n\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n data_encoding='unknown'\n file_encoding='unknown'\n \n def __init__(self,stream,encode,decode,Reader,Writer,\n errors='strict'):\n \n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n self.stream=stream\n self.encode=encode\n self.decode=decode\n self.reader=Reader(stream,errors)\n self.writer=Writer(stream,errors)\n self.errors=errors\n \n def read(self,size=-1):\n \n data=self.reader.read(size)\n data,bytesencoded=self.encode(data,self.errors)\n return data\n \n def readline(self,size=None ):\n \n if size is None :\n data=self.reader.readline()\n else :\n data=self.reader.readline(size)\n data,bytesencoded=self.encode(data,self.errors)\n return data\n \n def readlines(self,sizehint=None ):\n \n data=self.reader.read()\n data,bytesencoded=self.encode(data,self.errors)\n return data.splitlines(keepends=True )\n \n def __next__(self):\n \n ''\n data=next(self.reader)\n data,bytesencoded=self.encode(data,self.errors)\n return data\n \n def __iter__(self):\n return self\n \n def write(self,data):\n \n data,bytesdecoded=self.decode(data,self.errors)\n return self.writer.write(data)\n \n def writelines(self,list):\n \n data=b''.join(list)\n data,bytesdecoded=self.decode(data,self.errors)\n return self.writer.write(data)\n \n def reset(self):\n \n self.reader.reset()\n self.writer.reset()\n \n def seek(self,offset,whence=0):\n \n \n self.reader.seek(offset,whence)\n self.writer.seek(offset,whence)\n \n def __getattr__(self,name,\n getattr=getattr):\n \n ''\n \n return getattr(self.stream,name)\n \n def __enter__(self):\n return self\n \n def __exit__(self,type,value,tb):\n self.stream.close()\n \n \n \ndef open(filename,mode='r',encoding=None ,errors='strict',buffering=-1):\n\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n if encoding is not None and\\\n 'b'not in mode:\n \n mode=mode+'b'\n file=builtins.open(filename,mode,buffering)\n if encoding is None :\n return file\n info=lookup(encoding)\n srw=StreamReaderWriter(file,info.streamreader,info.streamwriter,errors)\n \n srw.encoding=encoding\n return srw\n \ndef EncodedFile(file,data_encoding,file_encoding=None ,errors='strict'):\n\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n if file_encoding is None :\n file_encoding=data_encoding\n data_info=lookup(data_encoding)\n file_info=lookup(file_encoding)\n sr=StreamRecoder(file,data_info.encode,data_info.decode,\n file_info.streamreader,file_info.streamwriter,errors)\n \n sr.data_encoding=data_encoding\n sr.file_encoding=file_encoding\n return sr\n \n \n \ndef getencoder(encoding):\n\n ''\n\n\n\n\n \n return lookup(encoding).encode\n \ndef getdecoder(encoding):\n\n ''\n\n\n\n\n \n return lookup(encoding).decode\n \ndef getincrementalencoder(encoding):\n\n ''\n\n\n\n\n\n \n encoder=lookup(encoding).incrementalencoder\n if encoder is None :\n raise LookupError(encoding)\n return encoder\n \ndef getincrementaldecoder(encoding):\n\n ''\n\n\n\n\n\n \n decoder=lookup(encoding).incrementaldecoder\n if decoder is None :\n raise LookupError(encoding)\n return decoder\n \ndef getreader(encoding):\n\n ''\n\n\n\n\n \n return lookup(encoding).streamreader\n \ndef getwriter(encoding):\n\n ''\n\n\n\n\n \n return lookup(encoding).streamwriter\n \ndef iterencode(iterator,encoding,errors='strict',**kwargs):\n ''\n\n\n\n\n\n\n \n encoder=getincrementalencoder(encoding)(errors,**kwargs)\n for input in iterator:\n output=encoder.encode(input)\n if output:\n yield output\n output=encoder.encode(\"\",True )\n if output:\n yield output\n \ndef iterdecode(iterator,encoding,errors='strict',**kwargs):\n ''\n\n\n\n\n\n\n \n decoder=getincrementaldecoder(encoding)(errors,**kwargs)\n for input in iterator:\n output=decoder.decode(input)\n if output:\n yield output\n output=decoder.decode(b\"\",True )\n if output:\n yield output\n \n \n \ndef make_identity_dict(rng):\n\n ''\n\n\n\n\n \n return {i:i for i in rng}\n \ndef make_encoding_map(decoding_map):\n\n ''\n\n\n\n\n\n\n\n\n\n \n m={}\n for k,v in decoding_map.items():\n if not v in m:\n m[v]=k\n else :\n m[v]=None\n return m\n \n \n \ntry :\n strict_errors=lookup_error(\"strict\")\n ignore_errors=lookup_error(\"ignore\")\n replace_errors=lookup_error(\"replace\")\n xmlcharrefreplace_errors=lookup_error(\"xmlcharrefreplace\")\n backslashreplace_errors=lookup_error(\"backslashreplace\")\n namereplace_errors=lookup_error(\"namereplace\")\nexcept LookupError:\n\n strict_errors=None\n ignore_errors=None\n replace_errors=None\n xmlcharrefreplace_errors=None\n backslashreplace_errors=None\n namereplace_errors=None\n \n \n \n_false=0\nif _false:\n import encodings\n \n \n \nif __name__ =='__main__':\n\n\n sys.stdout=EncodedFile(sys.stdout,'latin-1','utf-8')\n \n \n sys.stdin=EncodedFile(sys.stdin,'utf-8','latin-1')\n", ["_codecs", "builtins", "encodings", "sys"]], "codeop": [".py", "''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport __future__\n\n_features=[getattr(__future__,fname)\nfor fname in __future__.all_feature_names]\n\n__all__=[\"compile_command\",\"Compile\",\"CommandCompiler\"]\n\nPyCF_DONT_IMPLY_DEDENT=0x200\n\ndef _maybe_compile(compiler,source,filename,symbol):\n\n for line in source.split(\"\\n\"):\n line=line.strip()\n if line and line[0]!='#':\n break\n else :\n if symbol !=\"eval\":\n source=\"pass\"\n \n err=err1=err2=None\n code=code1=code2=None\n \n try :\n code=compiler(source,filename,symbol)\n except SyntaxError as err:\n pass\n \n try :\n code1=compiler(source+\"\\n\",filename,symbol)\n except SyntaxError as e:\n err1=e\n \n try :\n code2=compiler(source+\"\\n\\n\",filename,symbol)\n except SyntaxError as e:\n err2=e\n \n if code:\n return code\n if not code1 and repr(err1)==repr(err2):\n raise err1\n \ndef _compile(source,filename,symbol):\n return compile(source,filename,symbol,PyCF_DONT_IMPLY_DEDENT)\n \ndef compile_command(source,filename=\"\",symbol=\"single\"):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n return _maybe_compile(_compile,source,filename,symbol)\n \nclass Compile:\n ''\n\n\n \n def __init__(self):\n self.flags=PyCF_DONT_IMPLY_DEDENT\n \n def __call__(self,source,filename,symbol):\n codeob=compile(source,filename,symbol,self.flags,1)\n for feature in _features:\n if codeob.co_flags&feature.compiler_flag:\n self.flags |=feature.compiler_flag\n return codeob\n \nclass CommandCompiler:\n ''\n\n\n\n \n \n def __init__(self,):\n self.compiler=Compile()\n \n def __call__(self,source,filename=\"\",symbol=\"single\"):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n return _maybe_compile(self.compiler,source,filename,symbol)\n", ["__future__"]], "colorsys": [".py", "''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n__all__=[\"rgb_to_yiq\",\"yiq_to_rgb\",\"rgb_to_hls\",\"hls_to_rgb\",\n\"rgb_to_hsv\",\"hsv_to_rgb\"]\n\n\n\nONE_THIRD=1.0 /3.0\nONE_SIXTH=1.0 /6.0\nTWO_THIRD=2.0 /3.0\n\n\n\n\n\n\n\n\ndef rgb_to_yiq(r,g,b):\n y=0.30 *r+0.59 *g+0.11 *b\n i=0.74 *(r -y)-0.27 *(b -y)\n q=0.48 *(r -y)+0.41 *(b -y)\n return (y,i,q)\n \ndef yiq_to_rgb(y,i,q):\n\n\n\n\n r=y+0.9468822170900693 *i+0.6235565819861433 *q\n g=y -0.27478764629897834 *i -0.6356910791873801 *q\n b=y -1.1085450346420322 *i+1.7090069284064666 *q\n \n if r <0.0:\n r=0.0\n if g <0.0:\n g=0.0\n if b <0.0:\n b=0.0\n if r >1.0:\n r=1.0\n if g >1.0:\n g=1.0\n if b >1.0:\n b=1.0\n return (r,g,b)\n \n \n \n \n \n \n \ndef rgb_to_hls(r,g,b):\n maxc=max(r,g,b)\n minc=min(r,g,b)\n \n l=(minc+maxc)/2.0\n if minc ==maxc:\n return 0.0,l,0.0\n if l <=0.5:\n s=(maxc -minc)/(maxc+minc)\n else :\n s=(maxc -minc)/(2.0 -maxc -minc)\n rc=(maxc -r)/(maxc -minc)\n gc=(maxc -g)/(maxc -minc)\n bc=(maxc -b)/(maxc -minc)\n if r ==maxc:\n h=bc -gc\n elif g ==maxc:\n h=2.0+rc -bc\n else :\n h=4.0+gc -rc\n h=(h /6.0)%1.0\n return h,l,s\n \ndef hls_to_rgb(h,l,s):\n if s ==0.0:\n return l,l,l\n if l <=0.5:\n m2=l *(1.0+s)\n else :\n m2=l+s -(l *s)\n m1=2.0 *l -m2\n return (_v(m1,m2,h+ONE_THIRD),_v(m1,m2,h),_v(m1,m2,h -ONE_THIRD))\n \ndef _v(m1,m2,hue):\n hue=hue %1.0\n if hue MAX_INTERPOLATION_DEPTH:\n raise InterpolationDepthError(option,section,rawval)\n while rest:\n p=rest.find(\"%\")\n if p <0:\n accum.append(rest)\n return\n if p >0:\n accum.append(rest[:p])\n rest=rest[p:]\n \n c=rest[1:2]\n if c ==\"%\":\n accum.append(\"%\")\n rest=rest[2:]\n elif c ==\"(\":\n m=self._KEYCRE.match(rest)\n if m is None :\n raise InterpolationSyntaxError(option,section,\n \"bad interpolation variable reference %r\"%rest)\n var=parser.optionxform(m.group(1))\n rest=rest[m.end():]\n try :\n v=map[var]\n except KeyError:\n raise InterpolationMissingOptionError(\n option,section,rawval,var)from None\n if \"%\"in v:\n self._interpolate_some(parser,option,accum,v,\n section,map,depth+1)\n else :\n accum.append(v)\n else :\n raise InterpolationSyntaxError(\n option,section,\n \"'%%' must be followed by '%%' or '(', \"\n \"found: %r\"%(rest,))\n \n \nclass ExtendedInterpolation(Interpolation):\n ''\n \n \n _KEYCRE=re.compile(r\"\\$\\{([^}]+)\\}\")\n \n def before_get(self,parser,section,option,value,defaults):\n L=[]\n self._interpolate_some(parser,option,L,value,section,defaults,1)\n return ''.join(L)\n \n def before_set(self,parser,section,option,value):\n tmp_value=value.replace('$$','')\n tmp_value=self._KEYCRE.sub('',tmp_value)\n if '$'in tmp_value:\n raise ValueError(\"invalid interpolation syntax in %r at \"\n \"position %d\"%(value,tmp_value.find('$')))\n return value\n \n def _interpolate_some(self,parser,option,accum,rest,section,map,\n depth):\n rawval=parser.get(section,option,raw=True ,fallback=rest)\n if depth >MAX_INTERPOLATION_DEPTH:\n raise InterpolationDepthError(option,section,rawval)\n while rest:\n p=rest.find(\"$\")\n if p <0:\n accum.append(rest)\n return\n if p >0:\n accum.append(rest[:p])\n rest=rest[p:]\n \n c=rest[1:2]\n if c ==\"$\":\n accum.append(\"$\")\n rest=rest[2:]\n elif c ==\"{\":\n m=self._KEYCRE.match(rest)\n if m is None :\n raise InterpolationSyntaxError(option,section,\n \"bad interpolation variable reference %r\"%rest)\n path=m.group(1).split(':')\n rest=rest[m.end():]\n sect=section\n opt=option\n try :\n if len(path)==1:\n opt=parser.optionxform(path[0])\n v=map[opt]\n elif len(path)==2:\n sect=path[0]\n opt=parser.optionxform(path[1])\n v=parser.get(sect,opt,raw=True )\n else :\n raise InterpolationSyntaxError(\n option,section,\n \"More than one ':' found: %r\"%(rest,))\n except (KeyError,NoSectionError,NoOptionError):\n raise InterpolationMissingOptionError(\n option,section,rawval,\":\".join(path))from None\n if \"$\"in v:\n self._interpolate_some(parser,opt,accum,v,sect,\n dict(parser.items(sect,raw=True )),\n depth+1)\n else :\n accum.append(v)\n else :\n raise InterpolationSyntaxError(\n option,section,\n \"'$' must be followed by '$' or '{', \"\n \"found: %r\"%(rest,))\n \n \nclass LegacyInterpolation(Interpolation):\n ''\n \n \n _KEYCRE=re.compile(r\"%\\(([^)]*)\\)s|.\")\n \n def before_get(self,parser,section,option,value,vars):\n rawval=value\n depth=MAX_INTERPOLATION_DEPTH\n while depth:\n depth -=1\n if value and \"%(\"in value:\n replace=functools.partial(self._interpolation_replace,\n parser=parser)\n value=self._KEYCRE.sub(replace,value)\n try :\n value=value %vars\n except KeyError as e:\n raise InterpolationMissingOptionError(\n option,section,rawval,e.args[0])from None\n else :\n break\n if value and \"%(\"in value:\n raise InterpolationDepthError(option,section,rawval)\n return value\n \n def before_set(self,parser,section,option,value):\n return value\n \n @staticmethod\n def _interpolation_replace(match,parser):\n s=match.group(1)\n if s is None :\n return match.group()\n else :\n return \"%%(%s)s\"%parser.optionxform(s)\n \n \nclass RawConfigParser(MutableMapping):\n ''\n \n \n _SECT_TMPL=r\"\"\"\n \\[ # [\n (?P[^]]+) # very permissive!\n \\] # ]\n \"\"\"\n _OPT_TMPL=r\"\"\"\n (?P.*?) # very permissive!\n \\s*(?P{delim})\\s* # any number of space/tab,\n # followed by any of the\n # allowed delimiters,\n # followed by any space/tab\n (?P.*)$ # everything up to eol\n \"\"\"\n _OPT_NV_TMPL=r\"\"\"\n (?P.*?) # very permissive!\n \\s*(?: # any number of space/tab,\n (?P{delim})\\s* # optionally followed by\n # any of the allowed\n # delimiters, followed by any\n # space/tab\n (?P.*))?$ # everything up to eol\n \"\"\"\n \n _DEFAULT_INTERPOLATION=Interpolation()\n \n SECTCRE=re.compile(_SECT_TMPL,re.VERBOSE)\n \n OPTCRE=re.compile(_OPT_TMPL.format(delim=\"=|:\"),re.VERBOSE)\n \n \n OPTCRE_NV=re.compile(_OPT_NV_TMPL.format(delim=\"=|:\"),re.VERBOSE)\n \n NONSPACECRE=re.compile(r\"\\S\")\n \n BOOLEAN_STATES={'1':True ,'yes':True ,'true':True ,'on':True ,\n '0':False ,'no':False ,'false':False ,'off':False }\n \n def __init__(self,defaults=None ,dict_type=_default_dict,\n allow_no_value=False ,*,delimiters=('=',':'),\n comment_prefixes=('#',';'),inline_comment_prefixes=None ,\n strict=True ,empty_lines_in_values=True ,\n default_section=DEFAULTSECT,\n interpolation=_UNSET,converters=_UNSET):\n \n self._dict=dict_type\n self._sections=self._dict()\n self._defaults=self._dict()\n self._converters=ConverterMapping(self)\n self._proxies=self._dict()\n self._proxies[default_section]=SectionProxy(self,default_section)\n self._delimiters=tuple(delimiters)\n if delimiters ==('=',':'):\n self._optcre=self.OPTCRE_NV if allow_no_value else self.OPTCRE\n else :\n d=\"|\".join(re.escape(d)for d in delimiters)\n if allow_no_value:\n self._optcre=re.compile(self._OPT_NV_TMPL.format(delim=d),\n re.VERBOSE)\n else :\n self._optcre=re.compile(self._OPT_TMPL.format(delim=d),\n re.VERBOSE)\n self._comment_prefixes=tuple(comment_prefixes or ())\n self._inline_comment_prefixes=tuple(inline_comment_prefixes or ())\n self._strict=strict\n self._allow_no_value=allow_no_value\n self._empty_lines_in_values=empty_lines_in_values\n self.default_section=default_section\n self._interpolation=interpolation\n if self._interpolation is _UNSET:\n self._interpolation=self._DEFAULT_INTERPOLATION\n if self._interpolation is None :\n self._interpolation=Interpolation()\n if converters is not _UNSET:\n self._converters.update(converters)\n if defaults:\n self._read_defaults(defaults)\n \n def defaults(self):\n return self._defaults\n \n def sections(self):\n ''\n \n return list(self._sections.keys())\n \n def add_section(self,section):\n ''\n\n\n\n \n if section ==self.default_section:\n raise ValueError('Invalid section name: %r'%section)\n \n if section in self._sections:\n raise DuplicateSectionError(section)\n self._sections[section]=self._dict()\n self._proxies[section]=SectionProxy(self,section)\n \n def has_section(self,section):\n ''\n\n\n \n return section in self._sections\n \n def options(self,section):\n ''\n try :\n opts=self._sections[section].copy()\n except KeyError:\n raise NoSectionError(section)from None\n opts.update(self._defaults)\n return list(opts.keys())\n \n def read(self,filenames,encoding=None ):\n ''\n\n\n\n\n\n\n\n\n\n \n if isinstance(filenames,(str,bytes,os.PathLike)):\n filenames=[filenames]\n read_ok=[]\n for filename in filenames:\n try :\n with open(filename,encoding=encoding)as fp:\n self._read(fp,filename)\n except OSError:\n continue\n if isinstance(filename,os.PathLike):\n filename=os.fspath(filename)\n read_ok.append(filename)\n return read_ok\n \n def read_file(self,f,source=None ):\n ''\n\n\n\n\n\n \n if source is None :\n try :\n source=f.name\n except AttributeError:\n source='??>'\n self._read(f,source)\n \n def read_string(self,string,source=''):\n ''\n sfile=io.StringIO(string)\n self.read_file(sfile,source)\n \n def read_dict(self,dictionary,source=''):\n ''\n\n\n\n\n\n\n\n\n\n\n \n elements_added=set()\n for section,keys in dictionary.items():\n section=str(section)\n try :\n self.add_section(section)\n except (DuplicateSectionError,ValueError):\n if self._strict and section in elements_added:\n raise\n elements_added.add(section)\n for key,value in keys.items():\n key=self.optionxform(str(key))\n if value is not None :\n value=str(value)\n if self._strict and (section,key)in elements_added:\n raise DuplicateOptionError(section,key,source)\n elements_added.add((section,key))\n self.set(section,key,value)\n \n def readfp(self,fp,filename=None ):\n ''\n warnings.warn(\n \"This method will be removed in future versions. \"\n \"Use 'parser.read_file()' instead.\",\n DeprecationWarning,stacklevel=2\n )\n self.read_file(fp,source=filename)\n \n def get(self,section,option,*,raw=False ,vars=None ,fallback=_UNSET):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n \n try :\n d=self._unify_values(section,vars)\n except NoSectionError:\n if fallback is _UNSET:\n raise\n else :\n return fallback\n option=self.optionxform(option)\n try :\n value=d[option]\n except KeyError:\n if fallback is _UNSET:\n raise NoOptionError(option,section)\n else :\n return fallback\n \n if raw or value is None :\n return value\n else :\n return self._interpolation.before_get(self,section,option,value,\n d)\n \n def _get(self,section,conv,option,**kwargs):\n return conv(self.get(section,option,**kwargs))\n \n def _get_conv(self,section,option,conv,*,raw=False ,vars=None ,\n fallback=_UNSET,**kwargs):\n try :\n return self._get(section,conv,option,raw=raw,vars=vars,\n **kwargs)\n except (NoSectionError,NoOptionError):\n if fallback is _UNSET:\n raise\n return fallback\n \n \n def getint(self,section,option,*,raw=False ,vars=None ,\n fallback=_UNSET,**kwargs):\n return self._get_conv(section,option,int,raw=raw,vars=vars,\n fallback=fallback,**kwargs)\n \n def getfloat(self,section,option,*,raw=False ,vars=None ,\n fallback=_UNSET,**kwargs):\n return self._get_conv(section,option,float,raw=raw,vars=vars,\n fallback=fallback,**kwargs)\n \n def getboolean(self,section,option,*,raw=False ,vars=None ,\n fallback=_UNSET,**kwargs):\n return self._get_conv(section,option,self._convert_to_boolean,\n raw=raw,vars=vars,fallback=fallback,**kwargs)\n \n def items(self,section=_UNSET,raw=False ,vars=None ):\n ''\n\n\n\n\n\n\n\n\n \n if section is _UNSET:\n return super().items()\n d=self._defaults.copy()\n try :\n d.update(self._sections[section])\n except KeyError:\n if section !=self.default_section:\n raise NoSectionError(section)\n orig_keys=list(d.keys())\n \n if vars:\n for key,value in vars.items():\n d[self.optionxform(key)]=value\n value_getter=lambda option:self._interpolation.before_get(self,\n section,option,d[option],d)\n if raw:\n value_getter=lambda option:d[option]\n return [(option,value_getter(option))for option in orig_keys]\n \n def popitem(self):\n ''\n\n\n\n\n \n for key in self.sections():\n value=self[key]\n del self[key]\n return key,value\n raise KeyError\n \n def optionxform(self,optionstr):\n return optionstr.lower()\n \n def has_option(self,section,option):\n ''\n\n \n if not section or section ==self.default_section:\n option=self.optionxform(option)\n return option in self._defaults\n elif section not in self._sections:\n return False\n else :\n option=self.optionxform(option)\n return (option in self._sections[section]\n or option in self._defaults)\n \n def set(self,section,option,value=None ):\n ''\n if value:\n value=self._interpolation.before_set(self,section,option,\n value)\n if not section or section ==self.default_section:\n sectdict=self._defaults\n else :\n try :\n sectdict=self._sections[section]\n except KeyError:\n raise NoSectionError(section)from None\n sectdict[self.optionxform(option)]=value\n \n def write(self,fp,space_around_delimiters=True ):\n ''\n\n\n\n \n if space_around_delimiters:\n d=\" {} \".format(self._delimiters[0])\n else :\n d=self._delimiters[0]\n if self._defaults:\n self._write_section(fp,self.default_section,\n self._defaults.items(),d)\n for section in self._sections:\n self._write_section(fp,section,\n self._sections[section].items(),d)\n \n def _write_section(self,fp,section_name,section_items,delimiter):\n ''\n fp.write(\"[{}]\\n\".format(section_name))\n for key,value in section_items:\n value=self._interpolation.before_write(self,section_name,key,\n value)\n if value is not None or not self._allow_no_value:\n value=delimiter+str(value).replace('\\n','\\n\\t')\n else :\n value=\"\"\n fp.write(\"{}{}\\n\".format(key,value))\n fp.write(\"\\n\")\n \n def remove_option(self,section,option):\n ''\n if not section or section ==self.default_section:\n sectdict=self._defaults\n else :\n try :\n sectdict=self._sections[section]\n except KeyError:\n raise NoSectionError(section)from None\n option=self.optionxform(option)\n existed=option in sectdict\n if existed:\n del sectdict[option]\n return existed\n \n def remove_section(self,section):\n ''\n existed=section in self._sections\n if existed:\n del self._sections[section]\n del self._proxies[section]\n return existed\n \n def __getitem__(self,key):\n if key !=self.default_section and not self.has_section(key):\n raise KeyError(key)\n return self._proxies[key]\n \n def __setitem__(self,key,value):\n \n \n if key in self and self[key]is value:\n return\n \n \n if key ==self.default_section:\n self._defaults.clear()\n elif key in self._sections:\n self._sections[key].clear()\n self.read_dict({key:value})\n \n def __delitem__(self,key):\n if key ==self.default_section:\n raise ValueError(\"Cannot remove the default section.\")\n if not self.has_section(key):\n raise KeyError(key)\n self.remove_section(key)\n \n def __contains__(self,key):\n return key ==self.default_section or self.has_section(key)\n \n def __len__(self):\n return len(self._sections)+1\n \n def __iter__(self):\n \n return itertools.chain((self.default_section,),self._sections.keys())\n \n def _read(self,fp,fpname):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n elements_added=set()\n cursect=None\n sectname=None\n optname=None\n lineno=0\n indent_level=0\n e=None\n for lineno,line in enumerate(fp,start=1):\n comment_start=sys.maxsize\n \n inline_prefixes={p:-1 for p in self._inline_comment_prefixes}\n while comment_start ==sys.maxsize and inline_prefixes:\n next_prefixes={}\n for prefix,index in inline_prefixes.items():\n index=line.find(prefix,index+1)\n if index ==-1:\n continue\n next_prefixes[prefix]=index\n if index ==0 or (index >0 and line[index -1].isspace()):\n comment_start=min(comment_start,index)\n inline_prefixes=next_prefixes\n \n for prefix in self._comment_prefixes:\n if line.strip().startswith(prefix):\n comment_start=0\n break\n if comment_start ==sys.maxsize:\n comment_start=None\n value=line[:comment_start].strip()\n if not value:\n if self._empty_lines_in_values:\n \n \n if (comment_start is None and\n cursect is not None and\n optname and\n cursect[optname]is not None ):\n cursect[optname].append('')\n else :\n \n indent_level=sys.maxsize\n continue\n \n first_nonspace=self.NONSPACECRE.search(line)\n cur_indent_level=first_nonspace.start()if first_nonspace else 0\n if (cursect is not None and optname and\n cur_indent_level >indent_level):\n cursect[optname].append(value)\n \n else :\n indent_level=cur_indent_level\n \n mo=self.SECTCRE.match(value)\n if mo:\n sectname=mo.group('header')\n if sectname in self._sections:\n if self._strict and sectname in elements_added:\n raise DuplicateSectionError(sectname,fpname,\n lineno)\n cursect=self._sections[sectname]\n elements_added.add(sectname)\n elif sectname ==self.default_section:\n cursect=self._defaults\n else :\n cursect=self._dict()\n self._sections[sectname]=cursect\n self._proxies[sectname]=SectionProxy(self,sectname)\n elements_added.add(sectname)\n \n optname=None\n \n elif cursect is None :\n raise MissingSectionHeaderError(fpname,lineno,line)\n \n else :\n mo=self._optcre.match(value)\n if mo:\n optname,vi,optval=mo.group('option','vi','value')\n if not optname:\n e=self._handle_error(e,fpname,lineno,line)\n optname=self.optionxform(optname.rstrip())\n if (self._strict and\n (sectname,optname)in elements_added):\n raise DuplicateOptionError(sectname,optname,\n fpname,lineno)\n elements_added.add((sectname,optname))\n \n \n if optval is not None :\n optval=optval.strip()\n cursect[optname]=[optval]\n else :\n \n cursect[optname]=None\n else :\n \n \n \n \n e=self._handle_error(e,fpname,lineno,line)\n self._join_multiline_values()\n \n if e:\n raise e\n \n def _join_multiline_values(self):\n defaults=self.default_section,self._defaults\n all_sections=itertools.chain((defaults,),\n self._sections.items())\n for section,options in all_sections:\n for name,val in options.items():\n if isinstance(val,list):\n val='\\n'.join(val).rstrip()\n options[name]=self._interpolation.before_read(self,\n section,\n name,val)\n \n def _read_defaults(self,defaults):\n ''\n \n for key,value in defaults.items():\n self._defaults[self.optionxform(key)]=value\n \n def _handle_error(self,exc,fpname,lineno,line):\n if not exc:\n exc=ParsingError(fpname)\n exc.append(lineno,repr(line))\n return exc\n \n def _unify_values(self,section,vars):\n ''\n\n\n \n sectiondict={}\n try :\n sectiondict=self._sections[section]\n except KeyError:\n if section !=self.default_section:\n raise NoSectionError(section)from None\n \n vardict={}\n if vars:\n for key,value in vars.items():\n if value is not None :\n value=str(value)\n vardict[self.optionxform(key)]=value\n return _ChainMap(vardict,sectiondict,self._defaults)\n \n def _convert_to_boolean(self,value):\n ''\n \n if value.lower()not in self.BOOLEAN_STATES:\n raise ValueError('Not a boolean: %s'%value)\n return self.BOOLEAN_STATES[value.lower()]\n \n def _validate_value_types(self,*,section=\"\",option=\"\",value=\"\"):\n ''\n\n\n\n\n\n\n\n\n\n\n \n if not isinstance(section,str):\n raise TypeError(\"section names must be strings\")\n if not isinstance(option,str):\n raise TypeError(\"option keys must be strings\")\n if not self._allow_no_value or value:\n if not isinstance(value,str):\n raise TypeError(\"option values must be strings\")\n \n @property\n def converters(self):\n return self._converters\n \n \nclass ConfigParser(RawConfigParser):\n ''\n \n _DEFAULT_INTERPOLATION=BasicInterpolation()\n \n def set(self,section,option,value=None ):\n ''\n \n self._validate_value_types(option=option,value=value)\n super().set(section,option,value)\n \n def add_section(self,section):\n ''\n\n \n self._validate_value_types(section=section)\n super().add_section(section)\n \n def _read_defaults(self,defaults):\n ''\n\n\n\n \n try :\n hold_interpolation=self._interpolation\n self._interpolation=Interpolation()\n self.read_dict({self.default_section:defaults})\n finally :\n self._interpolation=hold_interpolation\n \n \nclass SafeConfigParser(ConfigParser):\n ''\n \n def __init__(self,*args,**kwargs):\n super().__init__(*args,**kwargs)\n warnings.warn(\n \"The SafeConfigParser class has been renamed to ConfigParser \"\n \"in Python 3.2. This alias will be removed in future versions.\"\n \" Use ConfigParser directly instead.\",\n DeprecationWarning,stacklevel=2\n )\n \n \nclass SectionProxy(MutableMapping):\n ''\n \n def __init__(self,parser,name):\n ''\n self._parser=parser\n self._name=name\n for conv in parser.converters:\n key='get'+conv\n getter=functools.partial(self.get,_impl=getattr(parser,key))\n setattr(self,key,getter)\n \n def __repr__(self):\n return ''.format(self._name)\n \n def __getitem__(self,key):\n if not self._parser.has_option(self._name,key):\n raise KeyError(key)\n return self._parser.get(self._name,key)\n \n def __setitem__(self,key,value):\n self._parser._validate_value_types(option=key,value=value)\n return self._parser.set(self._name,key,value)\n \n def __delitem__(self,key):\n if not (self._parser.has_option(self._name,key)and\n self._parser.remove_option(self._name,key)):\n raise KeyError(key)\n \n def __contains__(self,key):\n return self._parser.has_option(self._name,key)\n \n def __len__(self):\n return len(self._options())\n \n def __iter__(self):\n return self._options().__iter__()\n \n def _options(self):\n if self._name !=self._parser.default_section:\n return self._parser.options(self._name)\n else :\n return self._parser.defaults()\n \n @property\n def parser(self):\n \n return self._parser\n \n @property\n def name(self):\n \n return self._name\n \n def get(self,option,fallback=None ,*,raw=False ,vars=None ,\n _impl=None ,**kwargs):\n ''\n\n\n\n\n \n \n \n if not _impl:\n _impl=self._parser.get\n return _impl(self._name,option,raw=raw,vars=vars,\n fallback=fallback,**kwargs)\n \n \nclass ConverterMapping(MutableMapping):\n ''\n\n\n\n\n \n \n GETTERCRE=re.compile(r\"^get(?P.+)$\")\n \n def __init__(self,parser):\n self._parser=parser\n self._data={}\n for getter in dir(self._parser):\n m=self.GETTERCRE.match(getter)\n if not m or not callable(getattr(self._parser,getter)):\n continue\n self._data[m.group('name')]=None\n \n def __getitem__(self,key):\n return self._data[key]\n \n def __setitem__(self,key,value):\n try :\n k='get'+key\n except TypeError:\n raise ValueError('Incompatible key: {} (type: {})'\n ''.format(key,type(key)))\n if k =='get':\n raise ValueError('Incompatible key: cannot use \"\" as a name')\n self._data[key]=value\n func=functools.partial(self._parser._get_conv,conv=value)\n func.converter=value\n setattr(self._parser,k,func)\n for proxy in self._parser.values():\n getter=functools.partial(proxy.get,_impl=func)\n setattr(proxy,k,getter)\n \n def __delitem__(self,key):\n try :\n k='get'+(key or None )\n except TypeError:\n raise KeyError(key)\n del self._data[key]\n for inst in itertools.chain((self._parser,),self._parser.values()):\n try :\n delattr(inst,k)\n except AttributeError:\n \n \n continue\n \n def __iter__(self):\n return iter(self._data)\n \n def __len__(self):\n return len(self._data)\n", ["collections", "collections.abc", "functools", "io", "itertools", "os", "re", "sys", "warnings"]], "contextlib": [".py", "''\nimport abc\nimport sys\nimport _collections_abc\nfrom collections import deque\nfrom functools import wraps\nfrom types import MethodType\n\n__all__=[\"asynccontextmanager\",\"contextmanager\",\"closing\",\"nullcontext\",\n\"AbstractContextManager\",\"AbstractAsyncContextManager\",\n\"AsyncExitStack\",\"ContextDecorator\",\"ExitStack\",\n\"redirect_stdout\",\"redirect_stderr\",\"suppress\"]\n\n\nclass AbstractContextManager(abc.ABC):\n\n ''\n \n def __enter__(self):\n ''\n return self\n \n @abc.abstractmethod\n def __exit__(self,exc_type,exc_value,traceback):\n ''\n return None\n \n @classmethod\n def __subclasshook__(cls,C):\n if cls is AbstractContextManager:\n return _collections_abc._check_methods(C,\"__enter__\",\"__exit__\")\n return NotImplemented\n \n \nclass AbstractAsyncContextManager(abc.ABC):\n\n ''\n \n async def __aenter__(self):\n ''\n return self\n \n @abc.abstractmethod\n async def __aexit__(self,exc_type,exc_value,traceback):\n ''\n return None\n \n @classmethod\n def __subclasshook__(cls,C):\n if cls is AbstractAsyncContextManager:\n return _collections_abc._check_methods(C,\"__aenter__\",\n \"__aexit__\")\n return NotImplemented\n \n \nclass ContextDecorator(object):\n ''\n \n def _recreate_cm(self):\n ''\n\n\n\n\n\n\n\n \n return self\n \n def __call__(self,func):\n @wraps(func)\n def inner(*args,**kwds):\n with self._recreate_cm():\n return func(*args,**kwds)\n return inner\n \n \nclass _GeneratorContextManagerBase:\n ''\n \n def __init__(self,func,args,kwds):\n self.gen=func(*args,**kwds)\n self.func,self.args,self.kwds=func,args,kwds\n \n doc=getattr(func,\"__doc__\",None )\n if doc is None :\n doc=type(self).__doc__\n self.__doc__=doc\n \n \n \n \n \n \n \nclass _GeneratorContextManager(_GeneratorContextManagerBase,\nAbstractContextManager,\nContextDecorator):\n ''\n \n def _recreate_cm(self):\n \n \n \n return self.__class__(self.func,self.args,self.kwds)\n \n def __enter__(self):\n \n \n del self.args,self.kwds,self.func\n try :\n return next(self.gen)\n except StopIteration:\n raise RuntimeError(\"generator didn't yield\")from None\n \n def __exit__(self,type,value,traceback):\n if type is None :\n try :\n next(self.gen)\n except StopIteration:\n return False\n else :\n raise RuntimeError(\"generator didn't stop\")\n else :\n if value is None :\n \n \n value=type()\n try :\n self.gen.throw(type,value,traceback)\n except StopIteration as exc:\n \n \n \n return exc is not value\n except RuntimeError as exc:\n \n if exc is value:\n return False\n \n \n \n if type is StopIteration and exc.__cause__ is value:\n return False\n raise\n except :\n \n \n \n \n \n \n \n \n \n \n \n if sys.exc_info()[1]is value:\n return False\n raise\n raise RuntimeError(\"generator didn't stop after throw()\")\n \n \nclass _AsyncGeneratorContextManager(_GeneratorContextManagerBase,\nAbstractAsyncContextManager):\n ''\n \n async def __aenter__(self):\n try :\n return await self.gen.__anext__()\n except StopAsyncIteration:\n raise RuntimeError(\"generator didn't yield\")from None\n \n async def __aexit__(self,typ,value,traceback):\n if typ is None :\n try :\n await self.gen.__anext__()\n except StopAsyncIteration:\n return\n else :\n raise RuntimeError(\"generator didn't stop\")\n else :\n if value is None :\n value=typ()\n \n \n try :\n await self.gen.athrow(typ,value,traceback)\n raise RuntimeError(\"generator didn't stop after athrow()\")\n except StopAsyncIteration as exc:\n return exc is not value\n except RuntimeError as exc:\n if exc is value:\n return False\n \n \n \n \n \n \n if isinstance(value,(StopIteration,StopAsyncIteration)):\n if exc.__cause__ is value:\n return False\n raise\n except BaseException as exc:\n if exc is not value:\n raise\n \n \ndef contextmanager(func):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n @wraps(func)\n def helper(*args,**kwds):\n return _GeneratorContextManager(func,args,kwds)\n return helper\n \n \ndef asynccontextmanager(func):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n @wraps(func)\n def helper(*args,**kwds):\n return _AsyncGeneratorContextManager(func,args,kwds)\n return helper\n \n \nclass closing(AbstractContextManager):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n def __init__(self,thing):\n self.thing=thing\n def __enter__(self):\n return self.thing\n def __exit__(self,*exc_info):\n self.thing.close()\n \n \nclass _RedirectStream(AbstractContextManager):\n\n _stream=None\n \n def __init__(self,new_target):\n self._new_target=new_target\n \n self._old_targets=[]\n \n def __enter__(self):\n self._old_targets.append(getattr(sys,self._stream))\n setattr(sys,self._stream,self._new_target)\n return self._new_target\n \n def __exit__(self,exctype,excinst,exctb):\n setattr(sys,self._stream,self._old_targets.pop())\n \n \nclass redirect_stdout(_RedirectStream):\n ''\n\n\n\n\n\n\n\n\n\n \n \n _stream=\"stdout\"\n \n \nclass redirect_stderr(_RedirectStream):\n ''\n \n _stream=\"stderr\"\n \n \nclass suppress(AbstractContextManager):\n ''\n\n\n\n\n\n\n\n \n \n def __init__(self,*exceptions):\n self._exceptions=exceptions\n \n def __enter__(self):\n pass\n \n def __exit__(self,exctype,excinst,exctb):\n \n \n \n \n \n \n \n \n \n return exctype is not None and issubclass(exctype,self._exceptions)\n \n \nclass _BaseExitStack:\n ''\n \n @staticmethod\n def _create_exit_wrapper(cm,cm_exit):\n return MethodType(cm_exit,cm)\n \n @staticmethod\n def _create_cb_wrapper(callback,/,*args,**kwds):\n def _exit_wrapper(exc_type,exc,tb):\n callback(*args,**kwds)\n return _exit_wrapper\n \n def __init__(self):\n self._exit_callbacks=deque()\n \n def pop_all(self):\n ''\n new_stack=type(self)()\n new_stack._exit_callbacks=self._exit_callbacks\n self._exit_callbacks=deque()\n return new_stack\n \n def push(self,exit):\n ''\n\n\n\n\n \n \n \n _cb_type=type(exit)\n \n try :\n exit_method=_cb_type.__exit__\n except AttributeError:\n \n self._push_exit_callback(exit)\n else :\n self._push_cm_exit(exit,exit_method)\n return exit\n \n def enter_context(self,cm):\n ''\n\n\n\n \n \n \n _cm_type=type(cm)\n _exit=_cm_type.__exit__\n result=_cm_type.__enter__(cm)\n self._push_cm_exit(cm,_exit)\n return result\n \n def callback(*args,**kwds):\n ''\n\n\n \n if len(args)>=2:\n self,callback,*args=args\n elif not args:\n raise TypeError(\"descriptor 'callback' of '_BaseExitStack' object \"\n \"needs an argument\")\n elif 'callback'in kwds:\n callback=kwds.pop('callback')\n self,*args=args\n import warnings\n warnings.warn(\"Passing 'callback' as keyword argument is deprecated\",\n DeprecationWarning,stacklevel=2)\n else :\n raise TypeError('callback expected at least 1 positional argument, '\n 'got %d'%(len(args)-1))\n \n _exit_wrapper=self._create_cb_wrapper(callback,*args,**kwds)\n \n \n \n _exit_wrapper.__wrapped__=callback\n self._push_exit_callback(_exit_wrapper)\n return callback\n callback.__text_signature__='($self, callback, /, *args, **kwds)'\n \n def _push_cm_exit(self,cm,cm_exit):\n ''\n _exit_wrapper=self._create_exit_wrapper(cm,cm_exit)\n self._push_exit_callback(_exit_wrapper,True )\n \n def _push_exit_callback(self,callback,is_sync=True ):\n self._exit_callbacks.append((is_sync,callback))\n \n \n \nclass ExitStack(_BaseExitStack,AbstractContextManager):\n ''\n\n\n\n\n\n\n\n \n \n def __enter__(self):\n return self\n \n def __exit__(self,*exc_details):\n received_exc=exc_details[0]is not None\n \n \n \n frame_exc=sys.exc_info()[1]\n def _fix_exception_context(new_exc,old_exc):\n \n while 1:\n exc_context=new_exc.__context__\n if exc_context is old_exc:\n \n return\n if exc_context is None or exc_context is frame_exc:\n break\n new_exc=exc_context\n \n \n new_exc.__context__=old_exc\n \n \n \n suppressed_exc=False\n pending_raise=False\n while self._exit_callbacks:\n is_sync,cb=self._exit_callbacks.pop()\n assert is_sync\n try :\n if cb(*exc_details):\n suppressed_exc=True\n pending_raise=False\n exc_details=(None ,None ,None )\n except :\n new_exc_details=sys.exc_info()\n \n _fix_exception_context(new_exc_details[1],exc_details[1])\n pending_raise=True\n exc_details=new_exc_details\n if pending_raise:\n try :\n \n \n fixed_ctx=exc_details[1].__context__\n raise exc_details[1]\n except BaseException:\n exc_details[1].__context__=fixed_ctx\n raise\n return received_exc and suppressed_exc\n \n def close(self):\n ''\n self.__exit__(None ,None ,None )\n \n \n \nclass AsyncExitStack(_BaseExitStack,AbstractAsyncContextManager):\n ''\n\n\n\n\n\n\n\n\n\n \n \n @staticmethod\n def _create_async_exit_wrapper(cm,cm_exit):\n return MethodType(cm_exit,cm)\n \n @staticmethod\n def _create_async_cb_wrapper(callback,/,*args,**kwds):\n async def _exit_wrapper(exc_type,exc,tb):\n await callback(*args,**kwds)\n return _exit_wrapper\n \n async def enter_async_context(self,cm):\n ''\n\n\n\n \n _cm_type=type(cm)\n _exit=_cm_type.__aexit__\n result=await _cm_type.__aenter__(cm)\n self._push_async_cm_exit(cm,_exit)\n return result\n \n def push_async_exit(self,exit):\n ''\n\n\n\n\n\n \n _cb_type=type(exit)\n try :\n exit_method=_cb_type.__aexit__\n except AttributeError:\n \n self._push_exit_callback(exit,False )\n else :\n self._push_async_cm_exit(exit,exit_method)\n return exit\n \n def push_async_callback(*args,**kwds):\n ''\n\n\n \n if len(args)>=2:\n self,callback,*args=args\n elif not args:\n raise TypeError(\"descriptor 'push_async_callback' of \"\n \"'AsyncExitStack' object needs an argument\")\n elif 'callback'in kwds:\n callback=kwds.pop('callback')\n self,*args=args\n import warnings\n warnings.warn(\"Passing 'callback' as keyword argument is deprecated\",\n DeprecationWarning,stacklevel=2)\n else :\n raise TypeError('push_async_callback expected at least 1 '\n 'positional argument, got %d'%(len(args)-1))\n \n _exit_wrapper=self._create_async_cb_wrapper(callback,*args,**kwds)\n \n \n \n _exit_wrapper.__wrapped__=callback\n self._push_exit_callback(_exit_wrapper,False )\n return callback\n push_async_callback.__text_signature__='($self, callback, /, *args, **kwds)'\n \n async def aclose(self):\n ''\n await self.__aexit__(None ,None ,None )\n \n def _push_async_cm_exit(self,cm,cm_exit):\n ''\n \n _exit_wrapper=self._create_async_exit_wrapper(cm,cm_exit)\n self._push_exit_callback(_exit_wrapper,False )\n \n async def __aenter__(self):\n return self\n \n async def __aexit__(self,*exc_details):\n received_exc=exc_details[0]is not None\n \n \n \n frame_exc=sys.exc_info()[1]\n def _fix_exception_context(new_exc,old_exc):\n \n while 1:\n exc_context=new_exc.__context__\n if exc_context is old_exc:\n \n return\n if exc_context is None or exc_context is frame_exc:\n break\n new_exc=exc_context\n \n \n new_exc.__context__=old_exc\n \n \n \n suppressed_exc=False\n pending_raise=False\n while self._exit_callbacks:\n is_sync,cb=self._exit_callbacks.pop()\n try :\n if is_sync:\n cb_suppress=cb(*exc_details)\n else :\n cb_suppress=await cb(*exc_details)\n \n if cb_suppress:\n suppressed_exc=True\n pending_raise=False\n exc_details=(None ,None ,None )\n except :\n new_exc_details=sys.exc_info()\n \n _fix_exception_context(new_exc_details[1],exc_details[1])\n pending_raise=True\n exc_details=new_exc_details\n if pending_raise:\n try :\n \n \n fixed_ctx=exc_details[1].__context__\n raise exc_details[1]\n except BaseException:\n exc_details[1].__context__=fixed_ctx\n raise\n return received_exc and suppressed_exc\n \n \nclass nullcontext(AbstractContextManager):\n ''\n\n\n\n\n\n\n\n \n \n def __init__(self,enter_result=None ):\n self.enter_result=enter_result\n \n def __enter__(self):\n return self.enter_result\n \n def __exit__(self,*excinfo):\n pass\n", ["_collections_abc", "abc", "collections", "functools", "sys", "types", "warnings"]], "contextvars": [".py", "from _contextvars import Context,ContextVar,Token,copy_context\n\n\n__all__=('Context','ContextVar','Token','copy_context')\n", ["_contextvars"]], "copy": [".py", "''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport types\nimport weakref\nfrom copyreg import dispatch_table\n\nclass Error(Exception):\n pass\nerror=Error\n\ntry :\n from org.python.core import PyStringMap\nexcept ImportError:\n PyStringMap=None\n \n__all__=[\"Error\",\"copy\",\"deepcopy\"]\n\ndef copy(x):\n ''\n\n\n \n \n cls=type(x)\n \n copier=_copy_dispatch.get(cls)\n if copier:\n return copier(x)\n \n if issubclass(cls,type):\n \n return _copy_immutable(x)\n \n copier=getattr(cls,\"__copy__\",None )\n if copier is not None :\n return copier(x)\n \n reductor=dispatch_table.get(cls)\n if reductor is not None :\n rv=reductor(x)\n else :\n reductor=getattr(x,\"__reduce_ex__\",None )\n if reductor is not None :\n rv=reductor(4)\n else :\n reductor=getattr(x,\"__reduce__\",None )\n if reductor:\n rv=reductor()\n else :\n raise Error(\"un(shallow)copyable object of type %s\"%cls)\n \n if isinstance(rv,str):\n return x\n return _reconstruct(x,None ,*rv)\n \n \n_copy_dispatch=d={}\n\ndef _copy_immutable(x):\n return x\nfor t in (type(None ),int,float,bool,complex,str,tuple,\nbytes,frozenset,type,range,slice,\ntypes.BuiltinFunctionType,type(Ellipsis),type(NotImplemented),\ntypes.FunctionType,weakref.ref):\n d[t]=_copy_immutable\nt=getattr(types,\"CodeType\",None )\nif t is not None :\n d[t]=_copy_immutable\n \nd[list]=list.copy\nd[dict]=dict.copy\nd[set]=set.copy\nd[bytearray]=bytearray.copy\n\nif PyStringMap is not None :\n d[PyStringMap]=PyStringMap.copy\n \ndel d,t\n\ndef deepcopy(x,memo=None ,_nil=[]):\n ''\n\n\n \n \n if memo is None :\n memo={}\n \n d=id(x)\n y=memo.get(d,_nil)\n if y is not _nil:\n return y\n \n cls=type(x)\n \n copier=_deepcopy_dispatch.get(cls)\n if copier is not None :\n y=copier(x,memo)\n else :\n if issubclass(cls,type):\n y=_deepcopy_atomic(x,memo)\n else :\n copier=getattr(x,\"__deepcopy__\",None )\n if copier is not None :\n y=copier(memo)\n else :\n reductor=dispatch_table.get(cls)\n if reductor:\n rv=reductor(x)\n else :\n reductor=getattr(x,\"__reduce_ex__\",None )\n if reductor is not None :\n rv=reductor(4)\n else :\n reductor=getattr(x,\"__reduce__\",None )\n if reductor:\n rv=reductor()\n else :\n raise Error(\n \"un(deep)copyable object of type %s\"%cls)\n if isinstance(rv,str):\n y=x\n else :\n y=_reconstruct(x,memo,*rv)\n \n \n if y is not x:\n memo[d]=y\n _keep_alive(x,memo)\n return y\n \n_deepcopy_dispatch=d={}\n\ndef _deepcopy_atomic(x,memo):\n return x\nd[type(None )]=_deepcopy_atomic\nd[type(Ellipsis)]=_deepcopy_atomic\nd[type(NotImplemented)]=_deepcopy_atomic\nd[int]=_deepcopy_atomic\nd[float]=_deepcopy_atomic\nd[bool]=_deepcopy_atomic\nd[complex]=_deepcopy_atomic\nd[bytes]=_deepcopy_atomic\nd[str]=_deepcopy_atomic\nd[types.CodeType]=_deepcopy_atomic\nd[type]=_deepcopy_atomic\nd[types.BuiltinFunctionType]=_deepcopy_atomic\nd[types.FunctionType]=_deepcopy_atomic\nd[weakref.ref]=_deepcopy_atomic\n\ndef _deepcopy_list(x,memo,deepcopy=deepcopy):\n y=[]\n memo[id(x)]=y\n append=y.append\n for a in x:\n append(deepcopy(a,memo))\n return y\nd[list]=_deepcopy_list\n\ndef _deepcopy_tuple(x,memo,deepcopy=deepcopy):\n y=[deepcopy(a,memo)for a in x]\n \n \n try :\n return memo[id(x)]\n except KeyError:\n pass\n for k,j in zip(x,y):\n if k is not j:\n y=tuple(y)\n break\n else :\n y=x\n return y\nd[tuple]=_deepcopy_tuple\n\ndef _deepcopy_dict(x,memo,deepcopy=deepcopy):\n y={}\n memo[id(x)]=y\n for key,value in x.items():\n y[deepcopy(key,memo)]=deepcopy(value,memo)\n return y\nd[dict]=_deepcopy_dict\nif PyStringMap is not None :\n d[PyStringMap]=_deepcopy_dict\n \ndef _deepcopy_method(x,memo):\n return type(x)(x.__func__,deepcopy(x.__self__,memo))\nd[types.MethodType]=_deepcopy_method\n\ndel d\n\ndef _keep_alive(x,memo):\n ''\n\n\n\n\n\n\n\n \n try :\n memo[id(memo)].append(x)\n except KeyError:\n \n memo[id(memo)]=[x]\n \ndef _reconstruct(x,memo,func,args,\nstate=None ,listiter=None ,dictiter=None ,\ndeepcopy=deepcopy):\n deep=memo is not None\n if deep and args:\n args=(deepcopy(arg,memo)for arg in args)\n y=func(*args)\n if deep:\n memo[id(x)]=y\n \n if state is not None :\n if deep:\n state=deepcopy(state,memo)\n if hasattr(y,'__setstate__'):\n y.__setstate__(state)\n else :\n if isinstance(state,tuple)and len(state)==2:\n state,slotstate=state\n else :\n slotstate=None\n if state is not None :\n y.__dict__.update(state)\n if slotstate is not None :\n for key,value in slotstate.items():\n setattr(y,key,value)\n \n if listiter is not None :\n if deep:\n for item in listiter:\n item=deepcopy(item,memo)\n y.append(item)\n else :\n for item in listiter:\n y.append(item)\n if dictiter is not None :\n if deep:\n for key,value in dictiter:\n key=deepcopy(key,memo)\n value=deepcopy(value,memo)\n y[key]=value\n else :\n for key,value in dictiter:\n y[key]=value\n return y\n \ndel types,weakref,PyStringMap\n", ["copyreg", "org.python.core", "types", "weakref"]], "copyreg": [".py", "''\n\n\n\n\n\n__all__=[\"pickle\",\"constructor\",\n\"add_extension\",\"remove_extension\",\"clear_extension_cache\"]\n\ndispatch_table={}\n\ndef pickle(ob_type,pickle_function,constructor_ob=None ):\n if not callable(pickle_function):\n raise TypeError(\"reduction functions must be callable\")\n dispatch_table[ob_type]=pickle_function\n \n \n \n if constructor_ob is not None :\n constructor(constructor_ob)\n \ndef constructor(object):\n if not callable(object):\n raise TypeError(\"constructors must be callable\")\n \n \n \ntry :\n complex\nexcept NameError:\n pass\nelse :\n\n def pickle_complex(c):\n return complex,(c.real,c.imag)\n \n pickle(complex,pickle_complex,complex)\n \n \n \ndef _reconstructor(cls,base,state):\n if base is object:\n obj=object.__new__(cls)\n else :\n obj=base.__new__(cls,state)\n if base.__init__ !=object.__init__:\n base.__init__(obj,state)\n return obj\n \n_HEAPTYPE=1 <<9\n\n\n\ndef _reduce_ex(self,proto):\n assert proto <2\n cls=self.__class__\n for base in cls.__mro__:\n if hasattr(base,'__flags__')and not base.__flags__&_HEAPTYPE:\n break\n else :\n base=object\n if base is object:\n state=None\n else :\n if base is cls:\n raise TypeError(f\"cannot pickle {cls.__name__!r} object\")\n state=base(self)\n args=(cls,base,state)\n try :\n getstate=self.__getstate__\n except AttributeError:\n if getattr(self,\"__slots__\",None ):\n raise TypeError(f\"cannot pickle {cls.__name__!r} object: \"\n f\"a class that defines __slots__ without \"\n f\"defining __getstate__ cannot be pickled \"\n f\"with protocol {proto}\")from None\n try :\n dict=self.__dict__\n except AttributeError:\n dict=None\n else :\n dict=getstate()\n if dict:\n return _reconstructor,args,dict\n else :\n return _reconstructor,args\n \n \n \ndef __newobj__(cls,*args):\n return cls.__new__(cls,*args)\n \ndef __newobj_ex__(cls,args,kwargs):\n ''\n\n \n return cls.__new__(cls,*args,**kwargs)\n \ndef _slotnames(cls):\n ''\n\n\n\n\n\n\n\n \n \n \n names=cls.__dict__.get(\"__slotnames__\")\n if names is not None :\n return names\n \n \n names=[]\n if not hasattr(cls,\"__slots__\"):\n \n pass\n else :\n \n for c in cls.__mro__:\n if \"__slots__\"in c.__dict__:\n slots=c.__dict__['__slots__']\n \n if isinstance(slots,str):\n slots=(slots,)\n for name in slots:\n \n if name in (\"__dict__\",\"__weakref__\"):\n continue\n \n elif name.startswith('__')and not name.endswith('__'):\n stripped=c.__name__.lstrip('_')\n if stripped:\n names.append('_%s%s'%(stripped,name))\n else :\n names.append(name)\n else :\n names.append(name)\n \n \n try :\n cls.__slotnames__=names\n except :\n pass\n \n return names\n \n \n \n \n \n \n \n \n \n \n_extension_registry={}\n_inverted_registry={}\n_extension_cache={}\n\n\n\ndef add_extension(module,name,code):\n ''\n code=int(code)\n if not 1 <=code <=0x7fffffff:\n raise ValueError(\"code out of range\")\n key=(module,name)\n if (_extension_registry.get(key)==code and\n _inverted_registry.get(code)==key):\n return\n if key in _extension_registry:\n raise ValueError(\"key %s is already registered with code %s\"%\n (key,_extension_registry[key]))\n if code in _inverted_registry:\n raise ValueError(\"code %s is already in use for key %s\"%\n (code,_inverted_registry[code]))\n _extension_registry[key]=code\n _inverted_registry[code]=key\n \ndef remove_extension(module,name,code):\n ''\n key=(module,name)\n if (_extension_registry.get(key)!=code or\n _inverted_registry.get(code)!=key):\n raise ValueError(\"key %s is not registered with code %s\"%\n (key,code))\n del _extension_registry[key]\n del _inverted_registry[code]\n if code in _extension_cache:\n del _extension_cache[code]\n \ndef clear_extension_cache():\n _extension_cache.clear()\n \n \n \n \n \n \n \n \n \n \n \n \n \n", []], "csv": [".py", "\n\"\"\"\ncsv.py - read/write/investigate CSV files\n\"\"\"\n\nimport re\nfrom _csv import Error,__version__,writer,reader,register_dialect,\\\nunregister_dialect,get_dialect,list_dialects,\\\nfield_size_limit,\\\nQUOTE_MINIMAL,QUOTE_ALL,QUOTE_NONNUMERIC,QUOTE_NONE,\\\n__doc__\nfrom _csv import Dialect as _Dialect\n\nfrom io import StringIO\n\n__all__=[\"QUOTE_MINIMAL\",\"QUOTE_ALL\",\"QUOTE_NONNUMERIC\",\"QUOTE_NONE\",\n\"Error\",\"Dialect\",\"__doc__\",\"excel\",\"excel_tab\",\n\"field_size_limit\",\"reader\",\"writer\",\n\"register_dialect\",\"get_dialect\",\"list_dialects\",\"Sniffer\",\n\"unregister_dialect\",\"__version__\",\"DictReader\",\"DictWriter\",\n\"unix_dialect\"]\n\nclass Dialect:\n ''\n\n\n\n\n\n \n _name=\"\"\n _valid=False\n \n delimiter=None\n quotechar=None\n escapechar=None\n doublequote=None\n skipinitialspace=None\n lineterminator=None\n quoting=None\n \n def __init__(self):\n if self.__class__ !=Dialect:\n self._valid=True\n self._validate()\n \n def _validate(self):\n try :\n _Dialect(self)\n except TypeError as e:\n \n raise Error(str(e))\n \nclass excel(Dialect):\n ''\n delimiter=','\n quotechar='\"'\n doublequote=True\n skipinitialspace=False\n lineterminator='\\r\\n'\n quoting=QUOTE_MINIMAL\nregister_dialect(\"excel\",excel)\n\nclass excel_tab(excel):\n ''\n delimiter='\\t'\nregister_dialect(\"excel-tab\",excel_tab)\n\nclass unix_dialect(Dialect):\n ''\n delimiter=','\n quotechar='\"'\n doublequote=True\n skipinitialspace=False\n lineterminator='\\n'\n quoting=QUOTE_ALL\nregister_dialect(\"unix\",unix_dialect)\n\n\nclass DictReader:\n def __init__(self,f,fieldnames=None ,restkey=None ,restval=None ,\n dialect=\"excel\",*args,**kwds):\n self._fieldnames=fieldnames\n self.restkey=restkey\n self.restval=restval\n self.reader=reader(f,dialect,*args,**kwds)\n self.dialect=dialect\n self.line_num=0\n \n def __iter__(self):\n return self\n \n @property\n def fieldnames(self):\n if self._fieldnames is None :\n try :\n self._fieldnames=next(self.reader)\n except StopIteration:\n pass\n self.line_num=self.reader.line_num\n return self._fieldnames\n \n @fieldnames.setter\n def fieldnames(self,value):\n self._fieldnames=value\n \n def __next__(self):\n if self.line_num ==0:\n \n self.fieldnames\n row=next(self.reader)\n self.line_num=self.reader.line_num\n \n \n \n \n while row ==[]:\n row=next(self.reader)\n d=dict(zip(self.fieldnames,row))\n lf=len(self.fieldnames)\n lr=len(row)\n if lf lr:\n for key in self.fieldnames[lr:]:\n d[key]=self.restval\n return d\n \n \nclass DictWriter:\n def __init__(self,f,fieldnames,restval=\"\",extrasaction=\"raise\",\n dialect=\"excel\",*args,**kwds):\n self.fieldnames=fieldnames\n self.restval=restval\n if extrasaction.lower()not in (\"raise\",\"ignore\"):\n raise ValueError(\"extrasaction (%s) must be 'raise' or 'ignore'\"\n %extrasaction)\n self.extrasaction=extrasaction\n self.writer=writer(f,dialect,*args,**kwds)\n \n def writeheader(self):\n header=dict(zip(self.fieldnames,self.fieldnames))\n return self.writerow(header)\n \n def _dict_to_list(self,rowdict):\n if self.extrasaction ==\"raise\":\n wrong_fields=rowdict.keys()-self.fieldnames\n if wrong_fields:\n raise ValueError(\"dict contains fields not in fieldnames: \"\n +\", \".join([repr(x)for x in wrong_fields]))\n return (rowdict.get(key,self.restval)for key in self.fieldnames)\n \n def writerow(self,rowdict):\n return self.writer.writerow(self._dict_to_list(rowdict))\n \n def writerows(self,rowdicts):\n return self.writer.writerows(map(self._dict_to_list,rowdicts))\n \n \ntry :\n complex\nexcept NameError:\n complex=float\n \nclass Sniffer:\n ''\n\n\n \n def __init__(self):\n \n self.preferred=[',','\\t',';',' ',':']\n \n \n def sniff(self,sample,delimiters=None ):\n ''\n\n \n \n quotechar,doublequote,delimiter,skipinitialspace=\\\n self._guess_quote_and_delimiter(sample,delimiters)\n if not delimiter:\n delimiter,skipinitialspace=self._guess_delimiter(sample,\n delimiters)\n \n if not delimiter:\n raise Error(\"Could not determine delimiter\")\n \n class dialect(Dialect):\n _name=\"sniffed\"\n lineterminator='\\r\\n'\n quoting=QUOTE_MINIMAL\n \n \n dialect.doublequote=doublequote\n dialect.delimiter=delimiter\n \n dialect.quotechar=quotechar or '\"'\n dialect.skipinitialspace=skipinitialspace\n \n return dialect\n \n \n def _guess_quote_and_delimiter(self,data,delimiters):\n ''\n\n\n\n\n\n\n\n\n \n \n matches=[]\n for restr in (r'(?P[^\\w\\n\"\\'])(?P ?)(?P[\"\\']).*?(?P=quote)(?P=delim)',\n r'(?:^|\\n)(?P[\"\\']).*?(?P=quote)(?P[^\\w\\n\"\\'])(?P ?)',\n r'(?P[^\\w\\n\"\\'])(?P ?)(?P[\"\\']).*?(?P=quote)(?:$|\\n)',\n r'(?:^|\\n)(?P[\"\\']).*?(?P=quote)(?:$|\\n)'):\n regexp=re.compile(restr,re.DOTALL |re.MULTILINE)\n matches=regexp.findall(data)\n if matches:\n break\n \n if not matches:\n \n return ('',False ,None ,0)\n quotes={}\n delims={}\n spaces=0\n groupindex=regexp.groupindex\n for m in matches:\n n=groupindex['quote']-1\n key=m[n]\n if key:\n quotes[key]=quotes.get(key,0)+1\n try :\n n=groupindex['delim']-1\n key=m[n]\n except KeyError:\n continue\n if key and (delimiters is None or key in delimiters):\n delims[key]=delims.get(key,0)+1\n try :\n n=groupindex['space']-1\n except KeyError:\n continue\n if m[n]:\n spaces +=1\n \n quotechar=max(quotes,key=quotes.get)\n \n if delims:\n delim=max(delims,key=delims.get)\n skipinitialspace=delims[delim]==spaces\n if delim =='\\n':\n delim=''\n else :\n \n delim=''\n skipinitialspace=0\n \n \n \n dq_regexp=re.compile(\n r\"((%(delim)s)|^)\\W*%(quote)s[^%(delim)s\\n]*%(quote)s[^%(delim)s\\n]*%(quote)s\\W*((%(delim)s)|$)\"%\\\n {'delim':re.escape(delim),'quote':quotechar},re.MULTILINE)\n \n \n \n if dq_regexp.search(data):\n doublequote=True\n else :\n doublequote=False\n \n return (quotechar,doublequote,delim,skipinitialspace)\n \n \n def _guess_delimiter(self,data,delimiters):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n data=list(filter(None ,data.split('\\n')))\n \n ascii=[chr(c)for c in range(127)]\n \n \n chunkLength=min(10,len(data))\n iteration=0\n charFrequency={}\n modes={}\n delims={}\n start,end=0,chunkLength\n while start 1:\n modes[char]=max(items,key=lambda x:x[1])\n \n \n items.remove(modes[char])\n modes[char]=(modes[char][0],modes[char][1]\n -sum(item[1]for item in items))\n else :\n modes[char]=items[0]\n \n \n modeList=modes.items()\n total=float(min(chunkLength *iteration,len(data)))\n \n consistency=1.0\n \n threshold=0.9\n while len(delims)==0 and consistency >=threshold:\n for k,v in modeList:\n if v[0]>0 and v[1]>0:\n if ((v[1]/total)>=consistency and\n (delimiters is None or k in delimiters)):\n delims[k]=v\n consistency -=0.01\n \n if len(delims)==1:\n delim=list(delims.keys())[0]\n skipinitialspace=(data[0].count(delim)==\n data[0].count(\"%c \"%delim))\n return (delim,skipinitialspace)\n \n \n start=end\n end +=chunkLength\n \n if not delims:\n return ('',0)\n \n \n if len(delims)>1:\n for d in self.preferred:\n if d in delims.keys():\n skipinitialspace=(data[0].count(d)==\n data[0].count(\"%c \"%d))\n return (d,skipinitialspace)\n \n \n \n items=[(v,k)for (k,v)in delims.items()]\n items.sort()\n delim=items[-1][1]\n \n skipinitialspace=(data[0].count(delim)==\n data[0].count(\"%c \"%delim))\n return (delim,skipinitialspace)\n \n \n def has_header(self,sample):\n \n \n \n \n \n \n \n \n \n rdr=reader(StringIO(sample),self.sniff(sample))\n \n header=next(rdr)\n \n columns=len(header)\n columnTypes={}\n for i in range(columns):columnTypes[i]=None\n \n checked=0\n for row in rdr:\n \n if checked >20:\n break\n checked +=1\n \n if len(row)!=columns:\n continue\n \n for col in list(columnTypes.keys()):\n \n for thisType in [int,float,complex]:\n try :\n thisType(row[col])\n break\n except (ValueError,OverflowError):\n pass\n else :\n \n thisType=len(row[col])\n \n if thisType !=columnTypes[col]:\n if columnTypes[col]is None :\n columnTypes[col]=thisType\n else :\n \n \n del columnTypes[col]\n \n \n \n hasHeader=0\n for col,colType in columnTypes.items():\n if type(colType)==type(0):\n if len(header[col])!=colType:\n hasHeader +=1\n else :\n hasHeader -=1\n else :\n try :\n colType(header[col])\n except (ValueError,TypeError):\n hasHeader +=1\n else :\n hasHeader -=1\n \n return hasHeader >0\n", ["_csv", "io", "re"]], "dataclasses": [".py", "import re\nimport sys\nimport copy\nimport types\nimport inspect\nimport keyword\nimport builtins\nimport functools\nimport _thread\n\n\n__all__=['dataclass',\n'field',\n'Field',\n'FrozenInstanceError',\n'InitVar',\n'MISSING',\n\n\n'fields',\n'asdict',\n'astuple',\n'make_dataclass',\n'replace',\n'is_dataclass',\n]\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nclass FrozenInstanceError(AttributeError):pass\n\n\n\n\nclass _HAS_DEFAULT_FACTORY_CLASS:\n def __repr__(self):\n return ''\n_HAS_DEFAULT_FACTORY=_HAS_DEFAULT_FACTORY_CLASS()\n\n\n\nclass _MISSING_TYPE:\n pass\nMISSING=_MISSING_TYPE()\n\n\n\n_EMPTY_METADATA=types.MappingProxyType({})\n\n\nclass _FIELD_BASE:\n def __init__(self,name):\n self.name=name\n def __repr__(self):\n return self.name\n_FIELD=_FIELD_BASE('_FIELD')\n_FIELD_CLASSVAR=_FIELD_BASE('_FIELD_CLASSVAR')\n_FIELD_INITVAR=_FIELD_BASE('_FIELD_INITVAR')\n\n\n\n_FIELDS='__dataclass_fields__'\n\n\n\n_PARAMS='__dataclass_params__'\n\n\n\n_POST_INIT_NAME='__post_init__'\n\n\n\n\n_MODULE_IDENTIFIER_RE=re.compile(r'^(?:\\s*(\\w+)\\s*\\.)?\\s*(\\w+)')\n\nclass _InitVarMeta(type):\n def __getitem__(self,params):\n return InitVar(params)\n \nclass InitVar(metaclass=_InitVarMeta):\n __slots__=('type',)\n \n def __init__(self,type):\n self.type=type\n \n def __repr__(self):\n return f'dataclasses.InitVar[{self.type.__name__}]'\n \n \n \n \n \n \n \n \n \n \n \n \nclass Field:\n __slots__=('name',\n 'type',\n 'default',\n 'default_factory',\n 'repr',\n 'hash',\n 'init',\n 'compare',\n 'metadata',\n '_field_type',\n )\n \n def __init__(self,default,default_factory,init,repr,hash,compare,\n metadata):\n self.name=None\n self.type=None\n self.default=default\n self.default_factory=default_factory\n self.init=init\n self.repr=repr\n self.hash=hash\n self.compare=compare\n self.metadata=(_EMPTY_METADATA\n if metadata is None else\n types.MappingProxyType(metadata))\n self._field_type=None\n \n def __repr__(self):\n return ('Field('\n f'name={self.name!r},'\n f'type={self.type!r},'\n f'default={self.default!r},'\n f'default_factory={self.default_factory!r},'\n f'init={self.init!r},'\n f'repr={self.repr!r},'\n f'hash={self.hash!r},'\n f'compare={self.compare!r},'\n f'metadata={self.metadata!r},'\n f'_field_type={self._field_type}'\n ')')\n \n \n \n \n \n \n \n \n \n def __set_name__(self,owner,name):\n func=getattr(type(self.default),'__set_name__',None )\n if func:\n \n \n func(self.default,owner,name)\n \n \nclass _DataclassParams:\n __slots__=('init',\n 'repr',\n 'eq',\n 'order',\n 'unsafe_hash',\n 'frozen',\n )\n \n def __init__(self,init,repr,eq,order,unsafe_hash,frozen):\n self.init=init\n self.repr=repr\n self.eq=eq\n self.order=order\n self.unsafe_hash=unsafe_hash\n self.frozen=frozen\n \n def __repr__(self):\n return ('_DataclassParams('\n f'init={self.init!r},'\n f'repr={self.repr!r},'\n f'eq={self.eq!r},'\n f'order={self.order!r},'\n f'unsafe_hash={self.unsafe_hash!r},'\n f'frozen={self.frozen!r}'\n ')')\n \n \n \n \n \ndef field(*,default=MISSING,default_factory=MISSING,init=True ,repr=True ,\nhash=None ,compare=True ,metadata=None ):\n ''\n\n\n\n\n\n\n\n\n\n\n\n \n \n if default is not MISSING and default_factory is not MISSING:\n raise ValueError('cannot specify both default and default_factory')\n return Field(default,default_factory,init,repr,hash,compare,\n metadata)\n \n \ndef _tuple_str(obj_name,fields):\n\n\n\n\n\n if not fields:\n return '()'\n \n return f'({\",\".join([f\"{obj_name}.{f.name}\" for f in fields])},)'\n \n \n \n \ndef _recursive_repr(user_function):\n\n\n repr_running=set()\n \n @functools.wraps(user_function)\n def wrapper(self):\n key=id(self),_thread.get_ident()\n if key in repr_running:\n return '...'\n repr_running.add(key)\n try :\n result=user_function(self)\n finally :\n repr_running.discard(key)\n return result\n return wrapper\n \n \ndef _create_fn(name,args,body,*,globals=None ,locals=None ,\nreturn_type=MISSING):\n\n\n\n if locals is None :\n locals={}\n \n \n \n if globals is not None and '__builtins__'not in globals:\n globals['__builtins__']=builtins\n return_annotation=''\n if return_type is not MISSING:\n locals['_return_type']=return_type\n return_annotation='->_return_type'\n args=','.join(args)\n body='\\n'.join(f' {b}'for b in body)\n \n \n txt=f'def {name}({args}){return_annotation}:\\n{body}'\n \n exec(txt,globals,locals)\n return locals[name]\n \n \ndef _field_assign(frozen,name,value,self_name):\n\n\n\n\n\n\n if frozen:\n return f'__builtins__.object.__setattr__({self_name},{name!r},{value})'\n return f'{self_name}.{name}={value}'\n \n \ndef _field_init(f,frozen,globals,self_name):\n\n\n\n default_name=f'_dflt_{f.name}'\n if f.default_factory is not MISSING:\n if f.init:\n \n \n globals[default_name]=f.default_factory\n value=(f'{default_name}() '\n f'if {f.name} is _HAS_DEFAULT_FACTORY '\n f'else {f.name}')\n else :\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n globals[default_name]=f.default_factory\n value=f'{default_name}()'\n else :\n \n if f.init:\n if f.default is MISSING:\n \n value=f.name\n elif f.default is not MISSING:\n globals[default_name]=f.default\n value=f.name\n else :\n \n \n return None\n \n \n \n \n if f._field_type is _FIELD_INITVAR:\n return None\n \n \n return _field_assign(frozen,f.name,value,self_name)\n \n \ndef _init_param(f):\n\n\n\n\n if f.default is MISSING and f.default_factory is MISSING:\n \n \n default=''\n elif f.default is not MISSING:\n \n \n default=f'=_dflt_{f.name}'\n elif f.default_factory is not MISSING:\n \n default='=_HAS_DEFAULT_FACTORY'\n return f'{f.name}:_type_{f.name}{default}'\n \n \ndef _init_fn(fields,frozen,has_post_init,self_name):\n\n\n\n\n\n\n\n seen_default=False\n for f in fields:\n \n if f.init:\n if not (f.default is MISSING and f.default_factory is MISSING):\n seen_default=True\n elif seen_default:\n raise TypeError(f'non-default argument {f.name!r} '\n 'follows default argument')\n \n globals={'MISSING':MISSING,\n '_HAS_DEFAULT_FACTORY':_HAS_DEFAULT_FACTORY}\n \n body_lines=[]\n for f in fields:\n line=_field_init(f,frozen,globals,self_name)\n \n \n if line:\n body_lines.append(line)\n \n \n if has_post_init:\n params_str=','.join(f.name for f in fields\n if f._field_type is _FIELD_INITVAR)\n body_lines.append(f'{self_name}.{_POST_INIT_NAME}({params_str})')\n \n \n if not body_lines:\n body_lines=['pass']\n \n locals={f'_type_{f.name}':f.type for f in fields}\n return _create_fn('__init__',\n [self_name]+[_init_param(f)for f in fields if f.init],\n body_lines,\n locals=locals,\n globals=globals,\n return_type=None )\n \n \ndef _repr_fn(fields):\n fn=_create_fn('__repr__',\n ('self',),\n ['return self.__class__.__qualname__ + f\"('+\n ', '.join([f\"{f.name}={{self.{f.name}!r}}\"\n for f in fields])+\n ')\"'])\n return _recursive_repr(fn)\n \n \ndef _frozen_get_del_attr(cls,fields):\n\n\n globals={'cls':cls,\n 'FrozenInstanceError':FrozenInstanceError}\n if fields:\n fields_str='('+','.join(repr(f.name)for f in fields)+',)'\n else :\n \n fields_str='()'\n return (_create_fn('__setattr__',\n ('self','name','value'),\n (f'if type(self) is cls or name in {fields_str}:',\n ' raise FrozenInstanceError(f\"cannot assign to field {name!r}\")',\n f'super(cls, self).__setattr__(name, value)'),\n globals=globals),\n _create_fn('__delattr__',\n ('self','name'),\n (f'if type(self) is cls or name in {fields_str}:',\n ' raise FrozenInstanceError(f\"cannot delete field {name!r}\")',\n f'super(cls, self).__delattr__(name)'),\n globals=globals),\n )\n \n \ndef _cmp_fn(name,op,self_tuple,other_tuple):\n\n\n\n\n\n return _create_fn(name,\n ('self','other'),\n ['if other.__class__ is self.__class__:',\n f' return {self_tuple}{op}{other_tuple}',\n 'return NotImplemented'])\n \n \ndef _hash_fn(fields):\n self_tuple=_tuple_str('self',fields)\n return _create_fn('__hash__',\n ('self',),\n [f'return hash({self_tuple})'])\n \n \ndef _is_classvar(a_type,typing):\n\n\n return (a_type is typing.ClassVar\n or (type(a_type)is typing._GenericAlias\n and a_type.__origin__ is typing.ClassVar))\n \n \ndef _is_initvar(a_type,dataclasses):\n\n\n return (a_type is dataclasses.InitVar\n or type(a_type)is dataclasses.InitVar)\n \n \ndef _is_type(annotation,cls,a_module,a_type,is_type_predicate):\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n match=_MODULE_IDENTIFIER_RE.match(annotation)\n if match:\n ns=None\n module_name=match.group(1)\n if not module_name:\n \n \n ns=sys.modules.get(cls.__module__).__dict__\n else :\n \n module=sys.modules.get(cls.__module__)\n if module and module.__dict__.get(module_name)is a_module:\n ns=sys.modules.get(a_type.__module__).__dict__\n if ns and is_type_predicate(ns.get(match.group(2)),a_module):\n return True\n return False\n \n \ndef _get_field(cls,a_name,a_type):\n\n\n\n\n\n\n default=getattr(cls,a_name,MISSING)\n if isinstance(default,Field):\n f=default\n else :\n if isinstance(default,types.MemberDescriptorType):\n \n default=MISSING\n f=field(default=default)\n \n \n f.name=a_name\n f.type=a_type\n \n \n \n \n f._field_type=_FIELD\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n typing=sys.modules.get('typing')\n if typing:\n if (_is_classvar(a_type,typing)\n or (isinstance(f.type,str)\n and _is_type(f.type,cls,typing,typing.ClassVar,\n _is_classvar))):\n f._field_type=_FIELD_CLASSVAR\n \n \n \n if f._field_type is _FIELD:\n \n \n dataclasses=sys.modules[__name__]\n if (_is_initvar(a_type,dataclasses)\n or (isinstance(f.type,str)\n and _is_type(f.type,cls,dataclasses,dataclasses.InitVar,\n _is_initvar))):\n f._field_type=_FIELD_INITVAR\n \n \n \n \n \n \n if f._field_type in (_FIELD_CLASSVAR,_FIELD_INITVAR):\n if f.default_factory is not MISSING:\n raise TypeError(f'field {f.name} cannot have a '\n 'default factory')\n \n \n \n \n \n \n \n if f._field_type is _FIELD and isinstance(f.default,(list,dict,set)):\n raise ValueError(f'mutable default {type(f.default)} for field '\n f'{f.name} is not allowed: use default_factory')\n \n return f\n \n \ndef _set_new_attribute(cls,name,value):\n\n\n if name in cls.__dict__:\n return True\n setattr(cls,name,value)\n return False\n \n \n \n \n \n \n \ndef _hash_set_none(cls,fields):\n return None\n \ndef _hash_add(cls,fields):\n flds=[f for f in fields if (f.compare if f.hash is None else f.hash)]\n return _hash_fn(flds)\n \ndef _hash_exception(cls,fields):\n\n raise TypeError(f'Cannot overwrite attribute __hash__ '\n f'in class {cls.__name__}')\n \n \n \n \n \n \n \n \n \n \n_hash_action={(False ,False ,False ,False ):None ,\n(False ,False ,False ,True ):None ,\n(False ,False ,True ,False ):None ,\n(False ,False ,True ,True ):None ,\n(False ,True ,False ,False ):_hash_set_none,\n(False ,True ,False ,True ):None ,\n(False ,True ,True ,False ):_hash_add,\n(False ,True ,True ,True ):None ,\n(True ,False ,False ,False ):_hash_add,\n(True ,False ,False ,True ):_hash_exception,\n(True ,False ,True ,False ):_hash_add,\n(True ,False ,True ,True ):_hash_exception,\n(True ,True ,False ,False ):_hash_add,\n(True ,True ,False ,True ):_hash_exception,\n(True ,True ,True ,False ):_hash_add,\n(True ,True ,True ,True ):_hash_exception,\n}\n\n\n\n\ndef _process_class(cls,init,repr,eq,order,unsafe_hash,frozen):\n\n\n\n\n fields={}\n \n setattr(cls,_PARAMS,_DataclassParams(init,repr,eq,order,\n unsafe_hash,frozen))\n \n \n \n \n \n any_frozen_base=False\n has_dataclass_bases=False\n for b in cls.__mro__[-1:0:-1]:\n \n \n base_fields=getattr(b,_FIELDS,None )\n if base_fields:\n has_dataclass_bases=True\n for f in base_fields.values():\n fields[f.name]=f\n if getattr(b,_PARAMS).frozen:\n any_frozen_base=True\n \n \n \n \n \n \n \n \n \n \n \n \n \n cls_annotations=cls.__dict__.get('__annotations__',{})\n \n \n \n \n cls_fields=[_get_field(cls,name,type)\n for name,type in cls_annotations.items()]\n for f in cls_fields:\n fields[f.name]=f\n \n \n \n \n \n if isinstance(getattr(cls,f.name,None ),Field):\n if f.default is MISSING:\n \n \n \n \n \n \n delattr(cls,f.name)\n else :\n setattr(cls,f.name,f.default)\n \n \n for name,value in cls.__dict__.items():\n if isinstance(value,Field)and not name in cls_annotations:\n raise TypeError(f'{name!r} is a field but has no type annotation')\n \n \n if has_dataclass_bases:\n \n if any_frozen_base and not frozen:\n raise TypeError('cannot inherit non-frozen dataclass from a '\n 'frozen one')\n \n \n if not any_frozen_base and frozen:\n raise TypeError('cannot inherit frozen dataclass from a '\n 'non-frozen one')\n \n \n \n setattr(cls,_FIELDS,fields)\n \n \n \n \n \n \n class_hash=cls.__dict__.get('__hash__',MISSING)\n has_explicit_hash=not (class_hash is MISSING or\n (class_hash is None and '__eq__'in cls.__dict__))\n \n \n \n if order and not eq:\n raise ValueError('eq must be true if order is true')\n \n if init:\n \n has_post_init=hasattr(cls,_POST_INIT_NAME)\n \n \n flds=[f for f in fields.values()\n if f._field_type in (_FIELD,_FIELD_INITVAR)]\n _set_new_attribute(cls,'__init__',\n _init_fn(flds,\n frozen,\n has_post_init,\n \n \n \n '__dataclass_self__'if 'self'in fields\n else 'self',\n ))\n \n \n \n field_list=[f for f in fields.values()if f._field_type is _FIELD]\n \n if repr:\n flds=[f for f in field_list if f.repr]\n _set_new_attribute(cls,'__repr__',_repr_fn(flds))\n \n if eq:\n \n \n flds=[f for f in field_list if f.compare]\n self_tuple=_tuple_str('self',flds)\n other_tuple=_tuple_str('other',flds)\n _set_new_attribute(cls,'__eq__',\n _cmp_fn('__eq__','==',\n self_tuple,other_tuple))\n \n if order:\n \n flds=[f for f in field_list if f.compare]\n self_tuple=_tuple_str('self',flds)\n other_tuple=_tuple_str('other',flds)\n for name,op in [('__lt__','<'),\n ('__le__','<='),\n ('__gt__','>'),\n ('__ge__','>='),\n ]:\n if _set_new_attribute(cls,name,\n _cmp_fn(name,op,self_tuple,other_tuple)):\n raise TypeError(f'Cannot overwrite attribute {name} '\n f'in class {cls.__name__}. Consider using '\n 'functools.total_ordering')\n \n if frozen:\n for fn in _frozen_get_del_attr(cls,field_list):\n if _set_new_attribute(cls,fn.__name__,fn):\n raise TypeError(f'Cannot overwrite attribute {fn.__name__} '\n f'in class {cls.__name__}')\n \n \n hash_action=_hash_action[bool(unsafe_hash),\n bool(eq),\n bool(frozen),\n has_explicit_hash]\n if hash_action:\n \n \n cls.__hash__=hash_action(cls,field_list)\n \n if not getattr(cls,'__doc__'):\n \n cls.__doc__=(cls.__name__+\n str(inspect.signature(cls)).replace(' -> None',''))\n \n return cls\n \n \ndef dataclass(cls=None ,/,*,init=True ,repr=True ,eq=True ,order=False ,\nunsafe_hash=False ,frozen=False ):\n ''\n\n\n\n\n\n\n\n\n\n \n \n def wrap(cls):\n return _process_class(cls,init,repr,eq,order,unsafe_hash,frozen)\n \n \n if cls is None :\n \n return wrap\n \n \n return wrap(cls)\n \n \ndef fields(class_or_instance):\n ''\n\n\n\n \n \n \n try :\n fields=getattr(class_or_instance,_FIELDS)\n except AttributeError:\n raise TypeError('must be called with a dataclass type or instance')\n \n \n \n return tuple(f for f in fields.values()if f._field_type is _FIELD)\n \n \ndef _is_dataclass_instance(obj):\n ''\n return hasattr(type(obj),_FIELDS)\n \n \ndef is_dataclass(obj):\n ''\n \n cls=obj if isinstance(obj,type)else type(obj)\n return hasattr(cls,_FIELDS)\n \n \ndef asdict(obj,*,dict_factory=dict):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n if not _is_dataclass_instance(obj):\n raise TypeError(\"asdict() should be called on dataclass instances\")\n return _asdict_inner(obj,dict_factory)\n \n \ndef _asdict_inner(obj,dict_factory):\n if _is_dataclass_instance(obj):\n result=[]\n for f in fields(obj):\n value=_asdict_inner(getattr(obj,f.name),dict_factory)\n result.append((f.name,value))\n return dict_factory(result)\n elif isinstance(obj,tuple)and hasattr(obj,'_fields'):\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n return type(obj)(*[_asdict_inner(v,dict_factory)for v in obj])\n elif isinstance(obj,(list,tuple)):\n \n \n \n return type(obj)(_asdict_inner(v,dict_factory)for v in obj)\n elif isinstance(obj,dict):\n return type(obj)((_asdict_inner(k,dict_factory),\n _asdict_inner(v,dict_factory))\n for k,v in obj.items())\n else :\n return copy.deepcopy(obj)\n \n \ndef astuple(obj,*,tuple_factory=tuple):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n if not _is_dataclass_instance(obj):\n raise TypeError(\"astuple() should be called on dataclass instances\")\n return _astuple_inner(obj,tuple_factory)\n \n \ndef _astuple_inner(obj,tuple_factory):\n if _is_dataclass_instance(obj):\n result=[]\n for f in fields(obj):\n value=_astuple_inner(getattr(obj,f.name),tuple_factory)\n result.append(value)\n return tuple_factory(result)\n elif isinstance(obj,tuple)and hasattr(obj,'_fields'):\n \n \n \n \n \n \n return type(obj)(*[_astuple_inner(v,tuple_factory)for v in obj])\n elif isinstance(obj,(list,tuple)):\n \n \n \n return type(obj)(_astuple_inner(v,tuple_factory)for v in obj)\n elif isinstance(obj,dict):\n return type(obj)((_astuple_inner(k,tuple_factory),_astuple_inner(v,tuple_factory))\n for k,v in obj.items())\n else :\n return copy.deepcopy(obj)\n \n \ndef make_dataclass(cls_name,fields,*,bases=(),namespace=None ,init=True ,\nrepr=True ,eq=True ,order=False ,unsafe_hash=False ,\nfrozen=False ):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n if namespace is None :\n namespace={}\n else :\n \n namespace=namespace.copy()\n \n \n \n seen=set()\n anns={}\n for item in fields:\n if isinstance(item,str):\n name=item\n tp='typing.Any'\n elif len(item)==2:\n name,tp,=item\n elif len(item)==3:\n name,tp,spec=item\n namespace[name]=spec\n else :\n raise TypeError(f'Invalid field: {item!r}')\n \n if not isinstance(name,str)or not name.isidentifier():\n raise TypeError(f'Field names must be valid identifiers: {name!r}')\n if keyword.iskeyword(name):\n raise TypeError(f'Field names must not be keywords: {name!r}')\n if name in seen:\n raise TypeError(f'Field name duplicated: {name!r}')\n \n seen.add(name)\n anns[name]=tp\n \n namespace['__annotations__']=anns\n \n \n cls=types.new_class(cls_name,bases,{},lambda ns:ns.update(namespace))\n return dataclass(cls,init=init,repr=repr,eq=eq,order=order,\n unsafe_hash=unsafe_hash,frozen=frozen)\n \n \ndef replace(*args,**changes):\n ''\n\n\n\n\n\n\n\n\n\n\n\n \n if len(args)>1:\n raise TypeError(f'replace() takes 1 positional argument but {len(args)} were given')\n if args:\n obj,=args\n elif 'obj'in changes:\n obj=changes.pop('obj')\n import warnings\n warnings.warn(\"Passing 'obj' as keyword argument is deprecated\",\n DeprecationWarning,stacklevel=2)\n else :\n raise TypeError(\"replace() missing 1 required positional argument: 'obj'\")\n \n \n \n \n if not _is_dataclass_instance(obj):\n raise TypeError(\"replace() should be called on dataclass instances\")\n \n \n \n \n for f in getattr(obj,_FIELDS).values():\n \n if f._field_type is _FIELD_CLASSVAR:\n continue\n \n if not f.init:\n \n if f.name in changes:\n raise ValueError(f'field {f.name} is declared with '\n 'init=False, it cannot be specified with '\n 'replace()')\n continue\n \n if f.name not in changes:\n if f._field_type is _FIELD_INITVAR:\n raise ValueError(f\"InitVar {f.name!r} \"\n 'must be specified with replace()')\n changes[f.name]=getattr(obj,f.name)\n \n \n \n \n \n \n return obj.__class__(**changes)\nreplace.__text_signature__='(obj, /, **kwargs)'\n", ["_thread", "builtins", "copy", "functools", "inspect", "keyword", "re", "sys", "types", "warnings"]], "datetime": [".py", "''\n\n\n\n\n\nimport time as _time\nimport math as _math\nimport sys\n\ndef _cmp(x,y):\n return 0 if x ==y else 1 if x >y else -1\n \nMINYEAR=1\nMAXYEAR=9999\n_MAXORDINAL=3652059\n\n\n\n\n\n\n\n\n\n\n\n_DAYS_IN_MONTH=[-1,31,28,31,30,31,30,31,31,30,31,30,31]\n\n_DAYS_BEFORE_MONTH=[-1]\ndbm=0\nfor dim in _DAYS_IN_MONTH[1:]:\n _DAYS_BEFORE_MONTH.append(dbm)\n dbm +=dim\ndel dbm,dim\n\ndef _is_leap(year):\n ''\n return year %4 ==0 and (year %100 !=0 or year %400 ==0)\n \ndef _days_before_year(year):\n ''\n y=year -1\n return y *365+y //4 -y //100+y //400\n \ndef _days_in_month(year,month):\n ''\n assert 1 <=month <=12,month\n if month ==2 and _is_leap(year):\n return 29\n return _DAYS_IN_MONTH[month]\n \ndef _days_before_month(year,month):\n ''\n assert 1 <=month <=12,'month must be in 1..12'\n return _DAYS_BEFORE_MONTH[month]+(month >2 and _is_leap(year))\n \ndef _ymd2ord(year,month,day):\n ''\n assert 1 <=month <=12,'month must be in 1..12'\n dim=_days_in_month(year,month)\n assert 1 <=day <=dim,('day must be in 1..%d'%dim)\n return (_days_before_year(year)+\n _days_before_month(year,month)+\n day)\n \n_DI400Y=_days_before_year(401)\n_DI100Y=_days_before_year(101)\n_DI4Y=_days_before_year(5)\n\n\n\nassert _DI4Y ==4 *365+1\n\n\n\nassert _DI400Y ==4 *_DI100Y+1\n\n\n\nassert _DI100Y ==25 *_DI4Y -1\n\ndef _ord2ymd(n):\n ''\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n n -=1\n n400,n=divmod(n,_DI400Y)\n year=n400 *400+1\n \n \n \n \n \n \n n100,n=divmod(n,_DI100Y)\n \n \n n4,n=divmod(n,_DI4Y)\n \n \n \n n1,n=divmod(n,365)\n \n year +=n100 *100+n4 *4+n1\n if n1 ==4 or n100 ==4:\n assert n ==0\n return year -1,12,31\n \n \n \n leapyear=n1 ==3 and (n4 !=24 or n100 ==3)\n assert leapyear ==_is_leap(year)\n month=(n+50)>>5\n preceding=_DAYS_BEFORE_MONTH[month]+(month >2 and leapyear)\n if preceding >n:\n month -=1\n preceding -=_DAYS_IN_MONTH[month]+(month ==2 and leapyear)\n n -=preceding\n assert 0 <=n <_days_in_month(year,month)\n \n \n \n return year,month,n+1\n \n \n_MONTHNAMES=[None ,\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\n\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"]\n_DAYNAMES=[None ,\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\",\"Sun\"]\n\n\ndef _build_struct_time(y,m,d,hh,mm,ss,dstflag):\n wday=(_ymd2ord(y,m,d)+6)%7\n dnum=_days_before_month(y,m)+d\n return _time.struct_time((y,m,d,hh,mm,ss,wday,dnum,dstflag))\n \ndef _format_time(hh,mm,ss,us,timespec='auto'):\n specs={\n 'hours':'{:02d}',\n 'minutes':'{:02d}:{:02d}',\n 'seconds':'{:02d}:{:02d}:{:02d}',\n 'milliseconds':'{:02d}:{:02d}:{:02d}.{:03d}',\n 'microseconds':'{:02d}:{:02d}:{:02d}.{:06d}'\n }\n \n if timespec =='auto':\n \n timespec='microseconds'if us else 'seconds'\n elif timespec =='milliseconds':\n us //=1000\n try :\n fmt=specs[timespec]\n except KeyError:\n raise ValueError('Unknown timespec value')\n else :\n return fmt.format(hh,mm,ss,us)\n \ndef _format_offset(off):\n s=''\n if off is not None :\n if off.days <0:\n sign=\"-\"\n off=-off\n else :\n sign=\"+\"\n hh,mm=divmod(off,timedelta(hours=1))\n mm,ss=divmod(mm,timedelta(minutes=1))\n s +=\"%s%02d:%02d\"%(sign,hh,mm)\n if ss or ss.microseconds:\n s +=\":%02d\"%ss.seconds\n \n if ss.microseconds:\n s +='.%06d'%ss.microseconds\n return s\n \n \ndef _wrap_strftime(object,format,timetuple):\n\n freplace=None\n zreplace=None\n Zreplace=None\n \n \n newformat=[]\n push=newformat.append\n i,n=0,len(format)\n while i =2:\n break\n \n if next_char !=':':\n raise ValueError('Invalid time separator: %c'%next_char)\n \n pos +=1\n \n if pos 0 else tstr\n \n time_comps=_parse_hh_mm_ss_ff(timestr)\n \n tzi=None\n if tz_pos >0:\n tzstr=tstr[tz_pos:]\n \n \n \n \n \n \n if len(tzstr)not in (5,8,15):\n raise ValueError('Malformed time zone string')\n \n tz_comps=_parse_hh_mm_ss_ff(tzstr)\n if all(x ==0 for x in tz_comps):\n tzi=timezone.utc\n else :\n tzsign=-1 if tstr[tz_pos -1]=='-'else 1\n \n td=timedelta(hours=tz_comps[0],minutes=tz_comps[1],\n seconds=tz_comps[2],microseconds=tz_comps[3])\n \n tzi=timezone(tzsign *td)\n \n time_comps.append(tzi)\n \n return time_comps\n \n \n \ndef _check_tzname(name):\n if name is not None and not isinstance(name,str):\n raise TypeError(\"tzinfo.tzname() must return None or string, \"\n \"not '%s'\"%type(name))\n \n \n \n \n \n \n \ndef _check_utc_offset(name,offset):\n assert name in (\"utcoffset\",\"dst\")\n if offset is None :\n return\n if not isinstance(offset,timedelta):\n raise TypeError(\"tzinfo.%s() must return None \"\n \"or timedelta, not '%s'\"%(name,type(offset)))\n if not -timedelta(1)b if b >0 else r 999999999:\n raise OverflowError(\"timedelta # of days is too large: %d\"%d)\n \n self=object.__new__(cls)\n self._days=d\n self._seconds=s\n self._microseconds=us\n self._hashcode=-1\n return self\n \n def __repr__(self):\n args=[]\n if self._days:\n args.append(\"days=%d\"%self._days)\n if self._seconds:\n args.append(\"seconds=%d\"%self._seconds)\n if self._microseconds:\n args.append(\"microseconds=%d\"%self._microseconds)\n if not args:\n args.append('0')\n return \"%s.%s(%s)\"%(self.__class__.__module__,\n self.__class__.__qualname__,\n ', '.join(args))\n \n def __str__(self):\n mm,ss=divmod(self._seconds,60)\n hh,mm=divmod(mm,60)\n s=\"%d:%02d:%02d\"%(hh,mm,ss)\n if self._days:\n def plural(n):\n return n,abs(n)!=1 and \"s\"or \"\"\n s=(\"%d day%s, \"%plural(self._days))+s\n if self._microseconds:\n s=s+\".%06d\"%self._microseconds\n return s\n \n def total_seconds(self):\n ''\n return ((self.days *86400+self.seconds)*10 **6+\n self.microseconds)/10 **6\n \n \n @property\n def days(self):\n ''\n return self._days\n \n @property\n def seconds(self):\n ''\n return self._seconds\n \n @property\n def microseconds(self):\n ''\n return self._microseconds\n \n def __add__(self,other):\n if isinstance(other,timedelta):\n \n \n return timedelta(self._days+other._days,\n self._seconds+other._seconds,\n self._microseconds+other._microseconds)\n return NotImplemented\n \n __radd__=__add__\n \n def __sub__(self,other):\n if isinstance(other,timedelta):\n \n \n return timedelta(self._days -other._days,\n self._seconds -other._seconds,\n self._microseconds -other._microseconds)\n return NotImplemented\n \n def __rsub__(self,other):\n if isinstance(other,timedelta):\n return -self+other\n return NotImplemented\n \n def __neg__(self):\n \n \n return timedelta(-self._days,\n -self._seconds,\n -self._microseconds)\n \n def __pos__(self):\n return self\n \n def __abs__(self):\n if self._days <0:\n return -self\n else :\n return self\n \n def __mul__(self,other):\n if isinstance(other,int):\n \n \n return timedelta(self._days *other,\n self._seconds *other,\n self._microseconds *other)\n if isinstance(other,float):\n usec=self._to_microseconds()\n a,b=other.as_integer_ratio()\n return timedelta(0,0,_divide_and_round(usec *a,b))\n return NotImplemented\n \n __rmul__=__mul__\n \n def _to_microseconds(self):\n return ((self._days *(24 *3600)+self._seconds)*1000000+\n self._microseconds)\n \n def __floordiv__(self,other):\n if not isinstance(other,(int,timedelta)):\n return NotImplemented\n usec=self._to_microseconds()\n if isinstance(other,timedelta):\n return usec //other._to_microseconds()\n if isinstance(other,int):\n return timedelta(0,0,usec //other)\n \n def __truediv__(self,other):\n if not isinstance(other,(int,float,timedelta)):\n return NotImplemented\n usec=self._to_microseconds()\n if isinstance(other,timedelta):\n return usec /other._to_microseconds()\n if isinstance(other,int):\n return timedelta(0,0,_divide_and_round(usec,other))\n if isinstance(other,float):\n a,b=other.as_integer_ratio()\n return timedelta(0,0,_divide_and_round(b *usec,a))\n \n def __mod__(self,other):\n if isinstance(other,timedelta):\n r=self._to_microseconds()%other._to_microseconds()\n return timedelta(0,0,r)\n return NotImplemented\n \n def __divmod__(self,other):\n if isinstance(other,timedelta):\n q,r=divmod(self._to_microseconds(),\n other._to_microseconds())\n return q,timedelta(0,0,r)\n return NotImplemented\n \n \n \n def __eq__(self,other):\n if isinstance(other,timedelta):\n return self._cmp(other)==0\n else :\n return NotImplemented\n \n def __le__(self,other):\n if isinstance(other,timedelta):\n return self._cmp(other)<=0\n else :\n return NotImplemented\n \n def __lt__(self,other):\n if isinstance(other,timedelta):\n return self._cmp(other)<0\n else :\n return NotImplemented\n \n def __ge__(self,other):\n if isinstance(other,timedelta):\n return self._cmp(other)>=0\n else :\n return NotImplemented\n \n def __gt__(self,other):\n if isinstance(other,timedelta):\n return self._cmp(other)>0\n else :\n return NotImplemented\n \n def _cmp(self,other):\n assert isinstance(other,timedelta)\n return _cmp(self._getstate(),other._getstate())\n \n def __hash__(self):\n if self._hashcode ==-1:\n self._hashcode=hash(self._getstate())\n return self._hashcode\n \n def __bool__(self):\n return (self._days !=0 or\n self._seconds !=0 or\n self._microseconds !=0)\n \n \n \n def _getstate(self):\n return (self._days,self._seconds,self._microseconds)\n \n def __reduce__(self):\n return (self.__class__,self._getstate())\n \ntimedelta.min=timedelta(-999999999)\ntimedelta.max=timedelta(days=999999999,hours=23,minutes=59,seconds=59,\nmicroseconds=999999)\ntimedelta.resolution=timedelta(microseconds=1)\n\nclass date:\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n __slots__='_year','_month','_day','_hashcode'\n \n def __new__(cls,year,month=None ,day=None ):\n ''\n\n\n\n\n \n if (month is None and\n isinstance(year,(bytes,str))and len(year)==4 and\n 1 <=ord(year[2:3])<=12):\n \n if isinstance(year,str):\n try :\n year=year.encode('latin1')\n except UnicodeEncodeError:\n \n raise ValueError(\n \"Failed to encode latin1 string when unpickling \"\n \"a date object. \"\n \"pickle.load(data, encoding='latin1') is assumed.\")\n self=object.__new__(cls)\n self.__setstate(year)\n self._hashcode=-1\n return self\n year,month,day=_check_date_fields(year,month,day)\n self=object.__new__(cls)\n self._year=year\n self._month=month\n self._day=day\n self._hashcode=-1\n return self\n \n \n \n @classmethod\n def fromtimestamp(cls,t):\n ''\n y,m,d,hh,mm,ss,weekday,jday,dst=_time.localtime(t)\n return cls(y,m,d)\n \n @classmethod\n def today(cls):\n ''\n t=_time.time()\n return cls.fromtimestamp(t)\n \n @classmethod\n def fromordinal(cls,n):\n ''\n\n\n\n \n y,m,d=_ord2ymd(n)\n return cls(y,m,d)\n \n @classmethod\n def fromisoformat(cls,date_string):\n ''\n if not isinstance(date_string,str):\n raise TypeError('fromisoformat: argument must be str')\n \n try :\n assert len(date_string)==10\n return cls(*_parse_isoformat_date(date_string))\n except Exception:\n raise ValueError(f'Invalid isoformat string: {date_string!r}')\n \n @classmethod\n def fromisocalendar(cls,year,week,day):\n ''\n\n \n \n if not MINYEAR <=year <=MAXYEAR:\n raise ValueError(f\"Year is out of range: {year}\")\n \n if not 0 =0\n return NotImplemented\n \n def __gt__(self,other):\n if isinstance(other,date):\n return self._cmp(other)>0\n return NotImplemented\n \n def _cmp(self,other):\n assert isinstance(other,date)\n y,m,d=self._year,self._month,self._day\n y2,m2,d2=other._year,other._month,other._day\n return _cmp((y,m,d),(y2,m2,d2))\n \n def __hash__(self):\n ''\n if self._hashcode ==-1:\n self._hashcode=hash(self._getstate())\n return self._hashcode\n \n \n \n def __add__(self,other):\n ''\n if isinstance(other,timedelta):\n o=self.toordinal()+other.days\n if 0 =52:\n if today >=_isoweek1monday(year+1):\n year +=1\n week=0\n return year,week+1,day+1\n \n \n \n def _getstate(self):\n yhi,ylo=divmod(self._year,256)\n return bytes([yhi,ylo,self._month,self._day]),\n \n def __setstate(self,string):\n yhi,ylo,self._month,self._day=string\n self._year=yhi *256+ylo\n \n def __reduce__(self):\n return (self.__class__,self._getstate())\n \n_date_class=date\n\ndate.min=date(1,1,1)\ndate.max=date(9999,12,31)\ndate.resolution=timedelta(days=1)\n\n\nclass tzinfo:\n ''\n\n\n \n __slots__=()\n \n def tzname(self,dt):\n ''\n raise NotImplementedError(\"tzinfo subclass must override tzname()\")\n \n def utcoffset(self,dt):\n ''\n raise NotImplementedError(\"tzinfo subclass must override utcoffset()\")\n \n def dst(self,dt):\n ''\n\n\n\n \n raise NotImplementedError(\"tzinfo subclass must override dst()\")\n \n def fromutc(self,dt):\n ''\n \n if not isinstance(dt,datetime):\n raise TypeError(\"fromutc() requires a datetime argument\")\n if dt.tzinfo is not self:\n raise ValueError(\"dt.tzinfo is not self\")\n \n dtoff=dt.utcoffset()\n if dtoff is None :\n raise ValueError(\"fromutc() requires a non-None utcoffset() \"\n \"result\")\n \n \n \n dtdst=dt.dst()\n if dtdst is None :\n raise ValueError(\"fromutc() requires a non-None dst() result\")\n delta=dtoff -dtdst\n if delta:\n dt +=delta\n dtdst=dt.dst()\n if dtdst is None :\n raise ValueError(\"fromutc(): dt.dst gave inconsistent \"\n \"results; cannot convert\")\n return dt+dtdst\n \n \n \n def __reduce__(self):\n getinitargs=getattr(self,\"__getinitargs__\",None )\n if getinitargs:\n args=getinitargs()\n else :\n args=()\n getstate=getattr(self,\"__getstate__\",None )\n if getstate:\n state=getstate()\n else :\n state=getattr(self,\"__dict__\",None )or None\n if state is None :\n return (self.__class__,args)\n else :\n return (self.__class__,args,state)\n \n_tzinfo_class=tzinfo\n\nclass time:\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n __slots__='_hour','_minute','_second','_microsecond','_tzinfo','_hashcode','_fold'\n \n def __new__(cls,hour=0,minute=0,second=0,microsecond=0,tzinfo=None ,*,fold=0):\n ''\n\n\n\n\n\n\n\n \n if (isinstance(hour,(bytes,str))and len(hour)==6 and\n ord(hour[0:1])&0x7F <24):\n \n if isinstance(hour,str):\n try :\n hour=hour.encode('latin1')\n except UnicodeEncodeError:\n \n raise ValueError(\n \"Failed to encode latin1 string when unpickling \"\n \"a time object. \"\n \"pickle.load(data, encoding='latin1') is assumed.\")\n self=object.__new__(cls)\n self.__setstate(hour,minute or None )\n self._hashcode=-1\n return self\n hour,minute,second,microsecond,fold=_check_time_fields(\n hour,minute,second,microsecond,fold)\n _check_tzinfo_arg(tzinfo)\n self=object.__new__(cls)\n self._hour=hour\n self._minute=minute\n self._second=second\n self._microsecond=microsecond\n self._tzinfo=tzinfo\n self._hashcode=-1\n self._fold=fold\n return self\n \n \n @property\n def hour(self):\n ''\n return self._hour\n \n @property\n def minute(self):\n ''\n return self._minute\n \n @property\n def second(self):\n ''\n return self._second\n \n @property\n def microsecond(self):\n ''\n return self._microsecond\n \n @property\n def tzinfo(self):\n ''\n return self._tzinfo\n \n @property\n def fold(self):\n return self._fold\n \n \n \n \n \n def __eq__(self,other):\n if isinstance(other,time):\n return self._cmp(other,allow_mixed=True )==0\n else :\n return NotImplemented\n \n def __le__(self,other):\n if isinstance(other,time):\n return self._cmp(other)<=0\n else :\n return NotImplemented\n \n def __lt__(self,other):\n if isinstance(other,time):\n return self._cmp(other)<0\n else :\n return NotImplemented\n \n def __ge__(self,other):\n if isinstance(other,time):\n return self._cmp(other)>=0\n else :\n return NotImplemented\n \n def __gt__(self,other):\n if isinstance(other,time):\n return self._cmp(other)>0\n else :\n return NotImplemented\n \n def _cmp(self,other,allow_mixed=False ):\n assert isinstance(other,time)\n mytz=self._tzinfo\n ottz=other._tzinfo\n myoff=otoff=None\n \n if mytz is ottz:\n base_compare=True\n else :\n myoff=self.utcoffset()\n otoff=other.utcoffset()\n base_compare=myoff ==otoff\n \n if base_compare:\n return _cmp((self._hour,self._minute,self._second,\n self._microsecond),\n (other._hour,other._minute,other._second,\n other._microsecond))\n if myoff is None or otoff is None :\n if allow_mixed:\n return 2\n else :\n raise TypeError(\"cannot compare naive and aware times\")\n myhhmm=self._hour *60+self._minute -myoff //timedelta(minutes=1)\n othhmm=other._hour *60+other._minute -otoff //timedelta(minutes=1)\n return _cmp((myhhmm,self._second,self._microsecond),\n (othhmm,other._second,other._microsecond))\n \n def __hash__(self):\n ''\n if self._hashcode ==-1:\n if self.fold:\n t=self.replace(fold=0)\n else :\n t=self\n tzoff=t.utcoffset()\n if not tzoff:\n self._hashcode=hash(t._getstate()[0])\n else :\n h,m=divmod(timedelta(hours=self.hour,minutes=self.minute)-tzoff,\n timedelta(hours=1))\n assert not m %timedelta(minutes=1),\"whole minute\"\n m //=timedelta(minutes=1)\n if 0 <=h <24:\n self._hashcode=hash(time(h,m,self.second,self.microsecond))\n else :\n self._hashcode=hash((h,m,self.second,self.microsecond))\n return self._hashcode\n \n \n \n def _tzstr(self):\n ''\n off=self.utcoffset()\n return _format_offset(off)\n \n def __repr__(self):\n ''\n if self._microsecond !=0:\n s=\", %d, %d\"%(self._second,self._microsecond)\n elif self._second !=0:\n s=\", %d\"%self._second\n else :\n s=\"\"\n s=\"%s.%s(%d, %d%s)\"%(self.__class__.__module__,\n self.__class__.__qualname__,\n self._hour,self._minute,s)\n if self._tzinfo is not None :\n assert s[-1:]==\")\"\n s=s[:-1]+\", tzinfo=%r\"%self._tzinfo+\")\"\n if self._fold:\n assert s[-1:]==\")\"\n s=s[:-1]+\", fold=1)\"\n return s\n \n def isoformat(self,timespec='auto'):\n ''\n\n\n\n\n\n\n \n s=_format_time(self._hour,self._minute,self._second,\n self._microsecond,timespec)\n tz=self._tzstr()\n if tz:\n s +=tz\n return s\n \n __str__=isoformat\n \n @classmethod\n def fromisoformat(cls,time_string):\n ''\n if not isinstance(time_string,str):\n raise TypeError('fromisoformat: argument must be str')\n \n try :\n return cls(*_parse_isoformat_time(time_string))\n except Exception:\n raise ValueError(f'Invalid isoformat string: {time_string!r}')\n \n \n def strftime(self,fmt):\n ''\n\n \n \n \n timetuple=(1900,1,1,\n self._hour,self._minute,self._second,\n 0,1,-1)\n return _wrap_strftime(self,fmt,timetuple)\n \n def __format__(self,fmt):\n if not isinstance(fmt,str):\n raise TypeError(\"must be str, not %s\"%type(fmt).__name__)\n if len(fmt)!=0:\n return self.strftime(fmt)\n return str(self)\n \n \n \n def utcoffset(self):\n ''\n \n if self._tzinfo is None :\n return None\n offset=self._tzinfo.utcoffset(None )\n _check_utc_offset(\"utcoffset\",offset)\n return offset\n \n def tzname(self):\n ''\n\n\n\n\n \n if self._tzinfo is None :\n return None\n name=self._tzinfo.tzname(None )\n _check_tzname(name)\n return name\n \n def dst(self):\n ''\n\n\n\n\n\n\n \n if self._tzinfo is None :\n return None\n offset=self._tzinfo.dst(None )\n _check_utc_offset(\"dst\",offset)\n return offset\n \n def replace(self,hour=None ,minute=None ,second=None ,microsecond=None ,\n tzinfo=True ,*,fold=None ):\n ''\n if hour is None :\n hour=self.hour\n if minute is None :\n minute=self.minute\n if second is None :\n second=self.second\n if microsecond is None :\n microsecond=self.microsecond\n if tzinfo is True :\n tzinfo=self.tzinfo\n if fold is None :\n fold=self._fold\n return type(self)(hour,minute,second,microsecond,tzinfo,fold=fold)\n \n \n \n def _getstate(self,protocol=3):\n us2,us3=divmod(self._microsecond,256)\n us1,us2=divmod(us2,256)\n h=self._hour\n if self._fold and protocol >3:\n h +=128\n basestate=bytes([h,self._minute,self._second,\n us1,us2,us3])\n if self._tzinfo is None :\n return (basestate,)\n else :\n return (basestate,self._tzinfo)\n \n def __setstate(self,string,tzinfo):\n if tzinfo is not None and not isinstance(tzinfo,_tzinfo_class):\n raise TypeError(\"bad tzinfo state arg\")\n h,self._minute,self._second,us1,us2,us3=string\n if h >127:\n self._fold=1\n self._hour=h -128\n else :\n self._fold=0\n self._hour=h\n self._microsecond=(((us1 <<8)|us2)<<8)|us3\n self._tzinfo=tzinfo\n \n def __reduce_ex__(self,protocol):\n return (time,self._getstate(protocol))\n \n def __reduce__(self):\n return self.__reduce_ex__(2)\n \n_time_class=time\n\ntime.min=time(0,0,0)\ntime.max=time(23,59,59,999999)\ntime.resolution=timedelta(microseconds=1)\n\nclass datetime(date):\n ''\n\n\n\n \n __slots__=date.__slots__+time.__slots__\n \n def __new__(cls,year,month=None ,day=None ,hour=0,minute=0,second=0,\n microsecond=0,tzinfo=None ,*,fold=0):\n if (isinstance(year,(bytes,str))and len(year)==10 and\n 1 <=ord(year[2:3])&0x7F <=12):\n \n if isinstance(year,str):\n try :\n year=bytes(year,'latin1')\n except UnicodeEncodeError:\n \n raise ValueError(\n \"Failed to encode latin1 string when unpickling \"\n \"a datetime object. \"\n \"pickle.load(data, encoding='latin1') is assumed.\")\n self=object.__new__(cls)\n self.__setstate(year,month)\n self._hashcode=-1\n return self\n year,month,day=_check_date_fields(year,month,day)\n hour,minute,second,microsecond,fold=_check_time_fields(\n hour,minute,second,microsecond,fold)\n _check_tzinfo_arg(tzinfo)\n self=object.__new__(cls)\n self._year=year\n self._month=month\n self._day=day\n self._hour=hour\n self._minute=minute\n self._second=second\n self._microsecond=microsecond\n self._tzinfo=tzinfo\n self._hashcode=-1\n self._fold=fold\n return self\n \n \n @property\n def hour(self):\n ''\n return self._hour\n \n @property\n def minute(self):\n ''\n return self._minute\n \n @property\n def second(self):\n ''\n return self._second\n \n @property\n def microsecond(self):\n ''\n return self._microsecond\n \n @property\n def tzinfo(self):\n ''\n return self._tzinfo\n \n @property\n def fold(self):\n return self._fold\n \n @classmethod\n def _fromtimestamp(cls,t,utc,tz):\n ''\n\n\n \n frac,t=_math.modf(t)\n us=round(frac *1e6)\n if us >=1000000:\n t +=1\n us -=1000000\n elif us <0:\n t -=1\n us +=1000000\n \n converter=_time.gmtime if utc else _time.localtime\n y,m,d,hh,mm,ss,weekday,jday,dst=converter(t)\n ss=min(ss,59)\n result=cls(y,m,d,hh,mm,ss,us,tz)\n if tz is None :\n \n \n \n max_fold_seconds=24 *3600\n \n \n \n \n \n if t =0\n elif not isinstance(other,date):\n return NotImplemented\n else :\n _cmperror(self,other)\n \n def __gt__(self,other):\n if isinstance(other,datetime):\n return self._cmp(other)>0\n elif not isinstance(other,date):\n return NotImplemented\n else :\n _cmperror(self,other)\n \n def _cmp(self,other,allow_mixed=False ):\n assert isinstance(other,datetime)\n mytz=self._tzinfo\n ottz=other._tzinfo\n myoff=otoff=None\n \n if mytz is ottz:\n base_compare=True\n else :\n myoff=self.utcoffset()\n otoff=other.utcoffset()\n \n if allow_mixed:\n if myoff !=self.replace(fold=not self.fold).utcoffset():\n return 2\n if otoff !=other.replace(fold=not other.fold).utcoffset():\n return 2\n base_compare=myoff ==otoff\n \n if base_compare:\n return _cmp((self._year,self._month,self._day,\n self._hour,self._minute,self._second,\n self._microsecond),\n (other._year,other._month,other._day,\n other._hour,other._minute,other._second,\n other._microsecond))\n if myoff is None or otoff is None :\n if allow_mixed:\n return 2\n else :\n raise TypeError(\"cannot compare naive and aware datetimes\")\n \n diff=self -other\n if diff.days <0:\n return -1\n return diff and 1 or 0\n \n def __add__(self,other):\n ''\n if not isinstance(other,timedelta):\n return NotImplemented\n delta=timedelta(self.toordinal(),\n hours=self._hour,\n minutes=self._minute,\n seconds=self._second,\n microseconds=self._microsecond)\n delta +=other\n hour,rem=divmod(delta.seconds,3600)\n minute,second=divmod(rem,60)\n if 0 3:\n m +=128\n basestate=bytes([yhi,ylo,m,self._day,\n self._hour,self._minute,self._second,\n us1,us2,us3])\n if self._tzinfo is None :\n return (basestate,)\n else :\n return (basestate,self._tzinfo)\n \n def __setstate(self,string,tzinfo):\n if tzinfo is not None and not isinstance(tzinfo,_tzinfo_class):\n raise TypeError(\"bad tzinfo state arg\")\n (yhi,ylo,m,self._day,self._hour,\n self._minute,self._second,us1,us2,us3)=string\n if m >127:\n self._fold=1\n self._month=m -128\n else :\n self._fold=0\n self._month=m\n self._year=yhi *256+ylo\n self._microsecond=(((us1 <<8)|us2)<<8)|us3\n self._tzinfo=tzinfo\n \n def __reduce_ex__(self,protocol):\n return (self.__class__,self._getstate(protocol))\n \n def __reduce__(self):\n return self.__reduce_ex__(2)\n \n \ndatetime.min=datetime(1,1,1)\ndatetime.max=datetime(9999,12,31,23,59,59,999999)\ndatetime.resolution=timedelta(microseconds=1)\n\n\ndef _isoweek1monday(year):\n\n\n THURSDAY=3\n firstday=_ymd2ord(year,1,1)\n firstweekday=(firstday+6)%7\n week1monday=firstday -firstweekday\n if firstweekday >THURSDAY:\n week1monday +=7\n return week1monday\n \n \nclass timezone(tzinfo):\n __slots__='_offset','_name'\n \n \n _Omitted=object()\n def __new__(cls,offset,name=_Omitted):\n if not isinstance(offset,timedelta):\n raise TypeError(\"offset must be a timedelta\")\n if name is cls._Omitted:\n if not offset:\n return cls.utc\n name=None\n elif not isinstance(name,str):\n raise TypeError(\"name must be a string\")\n if not cls._minoffset <=offset <=cls._maxoffset:\n raise ValueError(\"offset must be a timedelta \"\n \"strictly between -timedelta(hours=24) and \"\n \"timedelta(hours=24).\")\n return cls._create(offset,name)\n \n @classmethod\n def _create(cls,offset,name=None ):\n self=tzinfo.__new__(cls)\n self._offset=offset\n self._name=name\n return self\n \n def __getinitargs__(self):\n ''\n if self._name is None :\n return (self._offset,)\n return (self._offset,self._name)\n \n def __eq__(self,other):\n if isinstance(other,timezone):\n return self._offset ==other._offset\n return NotImplemented\n \n def __hash__(self):\n return hash(self._offset)\n \n def __repr__(self):\n ''\n\n\n\n\n\n\n\n \n if self is self.utc:\n return 'datetime.timezone.utc'\n if self._name is None :\n return \"%s.%s(%r)\"%(self.__class__.__module__,\n self.__class__.__qualname__,\n self._offset)\n return \"%s.%s(%r, %r)\"%(self.__class__.__module__,\n self.__class__.__qualname__,\n self._offset,self._name)\n \n def __str__(self):\n return self.tzname(None )\n \n def utcoffset(self,dt):\n if isinstance(dt,datetime)or dt is None :\n return self._offset\n raise TypeError(\"utcoffset() argument must be a datetime instance\"\n \" or None\")\n \n def tzname(self,dt):\n if isinstance(dt,datetime)or dt is None :\n if self._name is None :\n return self._name_from_offset(self._offset)\n return self._name\n raise TypeError(\"tzname() argument must be a datetime instance\"\n \" or None\")\n \n def dst(self,dt):\n if isinstance(dt,datetime)or dt is None :\n return None\n raise TypeError(\"dst() argument must be a datetime instance\"\n \" or None\")\n \n def fromutc(self,dt):\n if isinstance(dt,datetime):\n if dt.tzinfo is not self:\n raise ValueError(\"fromutc: dt.tzinfo \"\n \"is not self\")\n return dt+self._offset\n raise TypeError(\"fromutc() argument must be a datetime instance\"\n \" or None\")\n \n _maxoffset=timedelta(hours=24,microseconds=-1)\n _minoffset=-_maxoffset\n \n @staticmethod\n def _name_from_offset(delta):\n if not delta:\n return 'UTC'\n if delta
'} -code.__getattr__=function(self,attr){if(attr=="co_code"){return 'co_code'} -return self[attr]} -$B.set_func_names(code,"builtins") -function compile(){var $=$B.args('compile',6,{source:null,filename:null,mode:null,flags:null,dont_inherit:null,optimize:null,_feature_version:null},['source','filename','mode','flags','dont_inherit','optimize','_feature_version'],arguments,{flags:0,dont_inherit:false,optimize:-1,_feature_version:0},null,null) -var module_name='$exec_'+$B.UUID() -$B.clear_ns(module_name) -$.__class__=code -$.co_flags=$.flags -$.name="" -var interactive=$.mode=="single" &&($.flags & 0x200) -if(interactive && ! $.source.endsWith("\n")){ -var lines=$.source.split("\n") -if($B.last(lines).startsWith(" ")){throw _b_.SyntaxError.$factory("unexpected EOF while parsing")}} -$B.py2js($.source,module_name,module_name) -return $} -var __debug__=$B.debug > 0 -function delattr(obj,attr){ -check_no_kw('delattr',obj,attr) -check_nb_args('delattr',2,arguments) -if(typeof attr !='string'){throw _b_.TypeError.$factory("attribute name must be string, not '"+ -$B.class_name(attr)+"'")} -return $B.$getattr(obj,'__delattr__')(attr)} -$B.$delete=function(name,is_global){ -function del(obj){if(obj.__class__===$B.generator){ -obj.return()}} -var found=false,frame=$B.last($B.frames_stack) -if(! is_global){if(frame[1][name]!==undefined){found=true -del(frame[1][name]) -delete frame[1][name]}}else{if(frame[2]!=frame[0]&& frame[3][name]!==undefined){found=true -del(frame[3][name]) -delete frame[3][name]}} -if(!found){throw _b_.NameError.$factory(name)}} -function dir(obj){if(obj===undefined){ -var frame=$B.last($B.frames_stack) -locals_obj=frame[1],res=_b_.list.$factory(),pos=0 -for(var attr in locals_obj){if(attr.charAt(0)=='$' && attr.charAt(1)!='$'){ -continue} -res[pos++]=attr} -_b_.list.sort(res) -return res} -check_nb_args('dir',1,arguments) -check_no_kw('dir',obj) -var klass=obj.__class__ ||$B.get_class(obj) -if(obj.$is_class){ -var dir_func=$B.$getattr(obj.__class__,"__dir__") -return $B.$call(dir_func)(obj)} -try{var res=$B.$call($B.$getattr(obj,'__dir__'))() -res=_b_.list.$factory(res) -return res}catch(err){} -var res=[],pos=0 -for(var attr in obj){if(attr.charAt(0)!=='$' && attr !=='__class__' && -obj[attr]!==undefined){res[pos++]=attr}} -res.sort() -return res} -function divmod(x,y){check_no_kw('divmod',x,y) -check_nb_args('divmod',2,arguments) -var klass=x.__class__ ||$B.get_class(x) -var dm=$B.$getattr(klass,"__divmod__",_b_.None) -if(dm !==_b_.None){return dm(x,y)} -return _b_.tuple.$factory([$B.$getattr(klass,'__floordiv__')(x,y),$B.$getattr(klass,'__mod__')(x,y)])} -var enumerate=$B.make_class("enumerate",function(){var $ns=$B.args("enumerate",2,{iterable:null,start:null},['iterable','start'],arguments,{start:0},null,null),_iter=iter($ns["iterable"]),start=$ns["start"] -return{ -__class__:enumerate,__name__:'enumerate iterator',counter:start-1,iter:_iter,start:start}} -) -enumerate.__iter__=function(self){self.counter=self.start-1 -return self} -enumerate.__next__=function(self){self.counter++ -return $B.fast_tuple([self.counter,next(self.iter)])} -$B.set_func_names(enumerate,"builtins") -$B.from_alias=function(attr){if(attr.substr(0,2)=='$$' && $B.aliased_names[attr.substr(2)]){return attr.substr(2)} -return attr} -$B.to_alias=function(attr){if($B.aliased_names[attr]){return '$$'+attr} -return attr} -function $$eval(src,_globals,_locals){var $=$B.args("eval",4,{src:null,globals:null,locals:null,mode:null},["src","globals","locals","mode"],arguments,{globals:_b_.None,locals:_b_.None,mode:"eval"},null,null),src=$.src,_globals=$.globals,_locals=$.locals,mode=$.mode -if($.src.mode && $.src.mode=="single" && -["",""].indexOf($.src.filename)>-1){ -_b_.print(">",$.src.source.trim())} -var current_frame=$B.frames_stack[$B.frames_stack.length-1] -if(current_frame !==undefined){var current_locals_id=current_frame[0].replace(/\./g,'_'),current_globals_id=current_frame[2].replace(/\./g,'_')} -var stack_len=$B.frames_stack.length -if(src.__class__===code){mode=src.mode -src=src.source}else if(typeof src !=='string'){throw _b_.TypeError.$factory("eval() arg 1 must be a string, bytes "+ -"or code object")} -var globals_id='$exec_'+$B.UUID(),globals_name=globals_id,locals_id='$exec_'+$B.UUID(),parent_scope -if(_globals===_b_.None){if(current_locals_id==current_globals_id){locals_id=globals_id} -var local_scope={module:globals_id,id:locals_id,binding:{},bindings:{}} -for(var attr in current_frame[1]){local_scope.binding[attr]=true -local_scope.bindings[attr]=true} -var global_scope={module:globals_id,id:globals_id,binding:{},bindings:{}} -for(var attr in current_frame[3]){global_scope.binding[attr]=true -global_scope.bindings[attr]=true} -local_scope.parent_block=global_scope -global_scope.parent_block=$B.builtins_scope -parent_scope=local_scope -eval("$locals_"+parent_scope.id+" = current_frame[1]")}else{ -if(_globals.__class__ !=_b_.dict){throw _b_.TypeError.$factory("exec() globals must be a dict, not "+ -$B.class_name(_globals))} -if(_globals.globals_id){globals_id=globals_name=_globals.globals_id} -_globals.globals_id=globals_id -if(_locals===_globals ||_locals===_b_.None){locals_id=globals_id -parent_scope=$B.builtins_scope}else{ -var grandparent_scope={id:globals_id,parent_block:$B.builtins_scope,binding:{}} -parent_scope={id:locals_id,parent_block:grandparent_scope,binding:{}} -for(var attr in _globals.$string_dict){grandparent_scope.binding[attr]=true} -for(var attr in _locals.$string_dict){parent_scope.binding[attr]=true}}} -$B.$py_module_path[globals_id]=$B.$py_module_path[current_globals_id] -eval('var $locals_'+globals_id+' = {}\nvar $locals_'+ -locals_id+' = {}') -if(_globals===_b_.None){var gobj=current_frame[3],ex='var $locals_'+globals_id+' = gobj;',obj={} -eval(ex) -for(var attr in gobj){if(attr.startsWith("$")&& !attr.startsWith("$$")){continue} -obj[attr]=gobj[attr]} -eval("$locals_"+globals_id+" = obj")}else{var globals_is_dict=false -if(_globals.$jsobj){var items=_globals.$jsobj}else{var items=_b_.dict.$to_obj(_globals) -_globals.$jsobj=items -globals_is_dict=true} -eval("$locals_"+globals_id+" = _globals.$jsobj") -for(var item in items){var item1=$B.to_alias(item) -try{eval('$locals_'+globals_id+'["'+item+'"] = items.'+item)}catch(err){console.log(err) -console.log('error setting',item) -break}}} -_globals.$is_namespace=true -if(_locals===_b_.None){if(_globals !==_b_.None){eval('var $locals_'+locals_id+' = $locals_'+globals_id)}else{var lobj=current_frame[1],ex='',obj={} -for(var attr in current_frame[1]){if(attr.startsWith("$")&& !attr.startsWith("$$")){continue} -obj[attr]=lobj[attr]} -eval('$locals_'+locals_id+" = obj")}}else{var locals_is_dict=false -if(_locals.$jsobj){var items=_locals.$jsobj}else{locals_id_dict=true -var items=_b_.dict.$to_obj(_locals) -_locals.$jsobj=items} -for(var item in items){var item1=$B.to_alias(item) -try{eval('$locals_'+locals_id+'["'+item+'"] = items.'+item)}catch(err){console.log(err) -console.log('error setting',item) -break}} -eval("$locals_"+locals_id+".$exec_locals = true")} -_locals.$is_namespace=true -if(_globals===_b_.None && _locals===_b_.None && -current_frame[0]==current_frame[2]){}else{eval("$locals_"+locals_id+".$src = src")} -var root=$B.py2js(src,globals_id,locals_id,parent_scope),js,gns,lns -if(_globals !==_b_.None && _locals==_b_.None){for(var attr in _globals.$string_dict){root.binding[attr]=true}} -try{ -var try_node=root.children[root.children.length-2],instr=try_node.children[try_node.children.length-2] -var type=instr.C.tree[0].type -switch(type){case 'expr': -case 'list_or_tuple': -case 'op': -case 'ternary': -var children=try_node.children -root.children.splice(root.children.length-2,2) -for(var i=0;i < children.length-1;i++){root.add(children[i])} -break -default: -if(mode=="eval"){throw _b_.SyntaxError.$factory( -"eval() argument must be an expression",'',1,1,src)}} -if(mode !="eval"){ -var last=$B.last(root.children),js=last.to_js() -if(["node_js"].indexOf(last.C.type)==-1){last.to_js=function(){while(js.endsWith("\n")){js=js.substr(0,js.length-1)} -while(js.endsWith(";")){js=js.substr(0,js.length-1)} -return "return ("+js+")"}} -js=root.to_js() -var locals_obj=eval("$locals_"+locals_id),globals_obj=eval("$locals_"+globals_id) -if(_globals===_b_.None){var res=new Function("$locals_"+globals_id,"$locals_"+locals_id,js)( -globals_obj,locals_obj)}else{current_globals_obj=current_frame[3] -current_locals_obj=current_frame[1] -var res=new Function("$locals_"+globals_id,"$locals_"+locals_id,"$locals_"+current_globals_id,"$locals_"+current_locals_id,js)(globals_obj,locals_obj,current_globals_obj,current_locals_obj)} -if($.src.mode && $.src.mode=="single" && -$.src.filename==""){if(res !==_b_.None && res !==undefined){_b_.print(_b_.repr(res))}}}else{js=root.to_js() -var res=eval(js)} -if($.src.filename=="" && $.src.mode=="single" && -res !==undefined && res !==_b_.None){_b_.print(res)} -gns=eval("$locals_"+globals_id) -if($B.frames_stack[$B.frames_stack.length-1][2]==globals_id){gns=$B.frames_stack[$B.frames_stack.length-1][3]} -if(_locals !==_b_.None){lns=eval("$locals_"+locals_id) -for(var attr in lns){var attr1=$B.from_alias(attr) -if(attr1.charAt(0)!='$'){if(_locals.$jsobj){_locals.$jsobj[attr]=lns[attr]}else{_b_.dict.$setitem(_locals,attr1,lns[attr])}}}}else{for(var attr in lns){if(attr !=="$src"){current_frame[1][attr]=lns[attr]}}} -if(_globals !==_b_.None){ -if(globals_is_dict){var jsobj=_globals.$jsobj -delete _globals.$jsobj} -for(var attr in gns){attr1=$B.from_alias(attr) -if(attr1.charAt(0)!='$'){if(globals_is_dict){_b_.dict.$setitem(_globals,attr,gns[attr])}else{_globals.$jsobj[attr1]=gns[attr]}}} -for(var attr in _globals.$string_dict){if(attr.startsWith("$")&& !attr.startsWith("$$")){delete _globals.$string_dict[attr]}}}else{for(var attr in gns){if(attr !=="$src"){current_frame[3][attr]=gns[attr]}}} -if(res===undefined){return _b_.None} -return res}catch(err){err.src=src -err.module=globals_id -if(err.$py_error===undefined){throw $B.exception(err)} -throw err}finally{ -if($B.frames_stack.length==stack_len+1){$B.frames_stack.pop()} -root=null -js=null -gns=null -lns=null -$B.clear_ns(globals_id) -$B.clear_ns(locals_id)}} -$$eval.$is_func=true -function exec(src,globals,locals){var missing={} -var $=$B.args("exec",3,{src:null,globals:null,locals:null},["src","globals","locals"],arguments,{globals:_b_.None,locals:_b_.None},null,null),src=$.src,globals=$.globals,locals=$.locals -return $$eval(src,globals,locals,"exec")||_b_.None} -exec.$is_func=true -function exit(){throw _b_.SystemExit} -exit.__repr__=exit.__str__=function(){return "Use exit() or Ctrl-Z plus Return to exit"} -var filter=$B.make_class("filter",function(func,iterable){check_no_kw('filter',func,iterable) -check_nb_args('filter',2,arguments) -iterable=iter(iterable) -if(func===_b_.None){func=$B.$bool} -return{ -__class__:filter,func:func,iterable:iterable}} -) -filter.__iter__=function(self){return self} -filter.__next__=function(self){while(true){var _item=next(self.iterable) -if(self.func(_item)){return _item}}} -$B.set_func_names(filter,"builtins") -function format(value,format_spec){var $=$B.args("format",2,{value:null,format_spec:null},["value","format_spec"],arguments,{format_spec:''},null,null) -var klass=value.__class__ ||$B.get_class(value) -try{var method=$B.$getattr(klass,'__format__')}catch(err){if(err.__class__===_b_.AttributeError){throw _b_.NotImplementedError("__format__ is not implemented "+ -"for object '"+_b_.str.$factory(value)+"'")} -throw err} -return $B.$call(method)(value,$.format_spec)} -function attr_error(attr,cname){var msg="bad operand type for unary #: '"+cname+"'" -switch(attr){case '__neg__': -throw _b_.TypeError.$factory(msg.replace('#','-')) -case '__pos__': -throw _b_.TypeError.$factory(msg.replace('#','+')) -case '__invert__': -throw _b_.TypeError.$factory(msg.replace('#','~')) -case '__call__': -throw _b_.TypeError.$factory("'"+cname+"'"+ -' object is not callable') -default: -while(attr.charAt(0)=='$'){attr=attr.substr(1)} -throw _b_.AttributeError.$factory("'"+cname+ -"' object has no attribute '"+attr+"'")}} -function getattr(){var missing={} -var $=$B.args("getattr",3,{obj:null,attr:null,_default:null},["obj","attr","_default"],arguments,{_default:missing},null,null) -return $B.$getattr($.obj,$.attr,$._default===missing ? undefined :$._default)} -function in_mro(klass,attr){if(klass===undefined){return false} -if(klass.hasOwnProperty(attr)){return klass[attr]} -var mro=klass.__mro__ -for(var i=0,len=mro.length;i < len;i++){if(mro[i].hasOwnProperty(attr)){return mro[i][attr]}} -return false} -$B.$getattr=function(obj,attr,_default){ -attr=$B.to_alias(attr) -if(obj.$method_cache && -obj.$method_cache[attr]&& -obj.__class__ && -obj.__class__[attr]==obj.$method_cache[attr][1]){ -return obj.$method_cache[attr][0]} -var rawname=attr -if(obj===undefined){console.log("get attr",attr,"of undefined")} -var is_class=obj.$is_class ||obj.$factory -var klass=obj.__class__ -var $test=false -if($test){console.log("$getattr",attr,obj,klass)} -if(klass !==undefined && klass.__bases__ && -(klass.__bases__.length==0 || -(klass.__bases__.length==1 && -klass.__bases__[0]===_b_.object))){if(obj.hasOwnProperty(attr)){return obj[attr]}else if(obj.__dict__ && -obj.__dict__.$string_dict.hasOwnProperty(attr)&& -!(klass.hasOwnProperty(attr)&& -klass[attr].__get__)){return obj.__dict__.$string_dict[attr][0]}else if(klass.hasOwnProperty(attr)){if(typeof klass[attr]!="function" && -attr !="__dict__" && -klass[attr].__get__===undefined){var kl=klass[attr].__class__ -if(! in_mro(kl,"__get__")){return klass[attr]}}}} -if($test){console.log("attr",attr,"of",obj,"class",klass,"isclass",is_class)} -if(klass===undefined){ -if(typeof obj=='string'){klass=_b_.str} -else if(typeof obj=='number'){klass=obj % 1==0 ? _b_.int :_b_.float}else if(obj instanceof Number){klass=_b_.float}else{klass=$B.get_class(obj) -if(klass===undefined){ -if($test){console.log("no class",attr,obj.hasOwnProperty(attr),obj[attr])} -var res=obj[attr] -if(res !==undefined){if(typeof res=="function"){var f=function(){ -return res.apply(obj,arguments)} -f.$infos={__name__:attr,__qualname__:attr} -return f}else{return $B.$JS2Py(res)}} -if(_default !==undefined){return _default} -throw _b_.AttributeError.$factory('object has no attribute '+rawname)}}} -switch(attr){case '__call__': -if(typeof obj=='function'){var res=function(){return obj.apply(null,arguments)} -res.__class__=method_wrapper -res.$infos={__name__:"__call__"} -return res} -break -case '__class__': -return klass -case '__dict__': -if(is_class){var proxy={} -for(var key in obj){var key1=$B.from_alias(key) -if(! key1.startsWith("$")){proxy[key1]=obj[key]}} -proxy.__dict__=$B.getset_descriptor.$factory(obj,"__dict__") -return $B.mappingproxy.$factory(proxy)}else{if(obj.hasOwnProperty(attr)){return obj[attr]}else if(obj.$infos){if(obj.$infos.hasOwnProperty("__dict__")){return obj.$infos.__dict__}else if(obj.$infos.hasOwnProperty("__func__")){return obj.$infos.__func__.$infos.__dict__}} -return $B.obj_dict(obj)} -case '__doc__': -for(var i=0;i < builtin_names.length;i++){if(obj===_b_[builtin_names[i]]){_get_builtins_doc() -return $B.builtins_doc[builtin_names[i]]}} -break -case '__mro__': -if(obj.$is_class){ -return _b_.tuple.$factory([obj].concat(obj.__mro__))}else if(obj.__dict__ && -obj.__dict__.$string_dict.__mro__ !==undefined){return obj.__dict__.$string_dict.__mro__} -throw _b_.AttributeError.$factory(attr) -case '__subclasses__': -if(klass.$factory ||klass.$is_class){var subclasses=obj.$subclasses ||[] -return function(){return subclasses}} -break} -if(typeof obj=='function'){var value=obj[attr] -if(value !==undefined){if(attr=='__module__'){return value}}} -if((! is_class)&& klass.$native){if(obj.$method_cache && obj.$method_cache[attr]){return obj.$method_cache[attr]} -if($test){console.log("native class",klass,klass[attr])} -if(attr=="__doc__" && klass[attr]===undefined && klass.$infos){_get_builtins_doc() -klass[attr]=$B.builtins_doc[klass.$infos.__name__]} -if(klass[attr]===undefined){var object_attr=_b_.object[attr] -if($test){console.log("object attr",object_attr)} -if(object_attr !==undefined){klass[attr]=object_attr}else{if($test){console.log("obj[attr]",obj[attr])} -var attrs=obj.__dict__ -if(attrs && -(object_attr=attrs.$string_dict[attr])!==undefined){return object_attr[0]} -if(_default===undefined){attr_error(attr,klass.$infos.__name__)} -return _default}} -if(klass.$descriptors && klass.$descriptors[attr]!==undefined){return klass[attr](obj)} -if(typeof klass[attr]=='function'){var func=klass[attr] -if(attr=='__new__'){func.$type="staticmethod"} -if(func.$type=="staticmethod"){return func} -var self=klass[attr].__class__==$B.method ? klass :obj,method=klass[attr].bind(null,self) -method.__class__=$B.method -method.$infos={__func__:func,__name__:attr,__self__:self,__qualname__:klass.$infos.__name__+"."+attr} -if(typeof obj=="object"){ -obj.__class__=klass -obj.$method_cache=obj.$method_cache ||{} -obj.$method_cache[attr]=method} -return method}else if(klass[attr]!==undefined){return klass[attr]} -attr_error(rawname,klass.$infos.__name__)} -var mro,attr_func -if(is_class){attr_func=_b_.type.__getattribute__ }else{attr_func=klass.__getattribute__ -if(attr_func===undefined){var mro=klass.__mro__ -if(mro===undefined){console.log(obj,attr,"no mro, klass",klass)} -for(var i=0,len=mro.length;i < len;i++){attr_func=mro[i]['__getattribute__'] -if(attr_func !==undefined){break}}}} -if(typeof attr_func !=='function'){console.log(attr+' is not a function '+attr_func,klass)} -var odga=_b_.object.__getattribute__ -if($test){console.log("attr_func is odga",attr_func,attr_func===odga,obj[attr])} -if(attr_func===odga){var res=obj[attr] -if(Array.isArray(obj)&& Array.prototype[attr]!==undefined){ -res=undefined} -if(res===null){return null} -else if(res===undefined && obj.hasOwnProperty(attr)){return res}else if(res !==undefined){if($test){console.log(obj,attr,obj[attr],res.__set__ ||res.$is_class)} -if(res.__set__===undefined ||res.$is_class){if($test){console.log("return",res,res+'',res.__set__,res.$is_class)} -return res}}} -try{var res=attr_func(obj,attr) -if($test){console.log("result of attr_func",res)}}catch(err){if(_default !==undefined){return _default} -throw err} -if(res !==undefined){return res} -if(_default !==undefined){return _default} -var cname=klass.$infos.__name__ -if(is_class){cname=obj.$infos.__name__} -attr_error(rawname,cname)} -function globals(){ -check_nb_args('globals',0,arguments) -var res=$B.obj_dict($B.last($B.frames_stack)[3]) -res.$jsobj.__BRYTHON__=$B.JSObj.$factory($B) -res.$is_namespace=true -return res} -function hasattr(obj,attr){check_no_kw('hasattr',obj,attr) -check_nb_args('hasattr',2,arguments) -try{$B.$getattr(obj,attr);return true} -catch(err){return false}} -var hash_cache={} -function hash(obj){check_no_kw('hash',obj) -check_nb_args('hash',1,arguments) -if(obj.__hashvalue__ !==undefined){return obj.__hashvalue__} -if(isinstance(obj,_b_.bool)){return _b_.int.$factory(obj)} -if(isinstance(obj,_b_.int)){if(obj.$brython_value===undefined){return obj.valueOf()}else{ -return obj.__hashvalue__=obj.$brython_value}} -if(obj.$is_class || -obj.__class__===_b_.type || -obj.__class__===$B.Function){return obj.__hashvalue__=$B.$py_next_hash--} -if(typeof obj=="string"){var cached=hash_cache[obj] -if(cached !==undefined){return cached} -else{return hash_cache[obj]=_b_.str.__hash__(obj)}} -var klass=obj.__class__ ||$B.get_class(obj) -if(klass===undefined){throw _b_.TypeError.$factory("unhashable type: '"+ -_b_.str.$factory($B.JSObj.$factory(obj))+"'")} -var hash_method=$B.$getattr(klass,'__hash__',_b_.None) -if(hash_method===_b_.None){throw _b_.TypeError.$factory("unhashable type: '"+ -$B.class_name(obj)+"'")} -if(hash_method.$infos.__func__===_b_.object.__hash__){if($B.$getattr(obj,'__eq__').$infos.__func__ !==_b_.object.__eq__){throw _b_.TypeError.$factory("unhashable type: '"+ -$B.class_name(obj)+"'",'hash')}else{return obj.__hashvalue__=_b_.object.__hash__(obj)}}else{return $B.$call(hash_method)(obj)}} -function _get_builtins_doc(){if($B.builtins_doc===undefined){ -var url=$B.brython_path -if(url.charAt(url.length-1)=='/'){url=url.substr(0,url.length-1)} -url+='/builtins_docstrings.js' -var f=_b_.open(url) -eval(f.$string) -$B.builtins_doc=docs}} -function help(obj){if(obj===undefined){obj='help'} -if(typeof obj=='string' && _b_[obj]!==undefined){_get_builtins_doc() -var _doc=$B.builtins_doc[obj] -if(_doc !==undefined && _doc !=''){_b_.print(_doc) -return}} -for(var i=0;i < builtin_names.length;i++){if(obj===_b_[builtin_names[i]]){_get_builtins_doc() -_b_.print(_doc=$B.builtins_doc[builtin_names[i]])}} -if(typeof obj=='string'){$B.$import("pydoc"); -var pydoc=$B.imported["pydoc"] -$B.$getattr($B.$getattr(pydoc,"help"),"__call__")(obj) -return} -try{return $B.$getattr(obj,'__doc__')} -catch(err){return ''}} -help.__repr__=help.__str__=function(){return "Type help() for interactive help, or help(object) "+ -"for help about object."} -function hex(obj){check_no_kw('hex',obj) -check_nb_args('hex',1,arguments) -return bin_hex_oct(16,obj)} -function id(obj){check_no_kw('id',obj) -check_nb_args('id',1,arguments) -if(isinstance(obj,[_b_.str,_b_.int,_b_.float])&& -!isinstance(obj,$B.long_int)){return $B.$getattr(_b_.str.$factory(obj),'__hash__')()}else if(obj.$id !==undefined){return obj.$id} -else{return obj.$id=$B.UUID()}} -function __import__(mod_name,globals,locals,fromlist,level){ -var $=$B.args('__import__',5,{name:null,globals:null,locals:null,fromlist:null,level:null},['name','globals','locals','fromlist','level'],arguments,{globals:None,locals:None,fromlist:_b_.tuple.$factory(),level:0},null,null) -return $B.$__import__($.name,$.globals,$.locals,$.fromlist)} -function input(msg){var res=prompt(msg ||'')||'' -if($B.imported["sys"]&& $B.imported["sys"].ps1){ -var ps1=$B.imported["sys"].ps1,ps2=$B.imported["sys"].ps2 -if(msg==ps1 ||msg==ps2){console.log(msg,res)}} -return res} -function isinstance(obj,cls){check_no_kw('isinstance',obj,cls) -check_nb_args('isinstance',2,arguments) -if(obj===null){return cls===None} -if(obj===undefined){return false} -if(cls.constructor===Array){for(var i=0;i < cls.length;i++){if(isinstance(obj,cls[i])){return true}} -return false} -if(!cls.__class__ || -!(cls.$factory !==undefined ||cls.$is_class !==undefined)){throw _b_.TypeError.$factory("isinstance() arg 2 must be a type "+ -"or tuple of types")} -if(cls===_b_.int &&(obj===True ||obj===False)){return True} -if(cls===_b_.bool){switch(typeof obj){case "string": -return false -case "number": -return false -case "boolean": -return true}} -var klass=obj.__class__ -if(klass==undefined){if(typeof obj=='string'){if(cls==_b_.str){return true} -else if($B.builtin_classes.indexOf(cls)>-1){return false}}else if(obj.contructor===Number && Number.isFinite(obj)){if(cls==_b_.float){return true}}else if(typeof obj=='number' && Number.isFinite(obj)){if(Number.isFinite(obj)&& cls==_b_.int){return true}} -klass=$B.get_class(obj)} -if(klass===undefined){return false} -function check(kl,cls){if(kl===cls){return true} -else if(cls===_b_.str && kl===$B.StringSubclass){return true} -else if(cls===_b_.int && kl===$B.IntSubclass){return true}} -if(check(klass,cls)){return true} -var mro=klass.__mro__ -for(var i=0;i < mro.length;i++){if(check(mro[i],cls)){return true}} -var instancecheck=$B.$getattr(cls.__class__ ||$B.get_class(cls),'__instancecheck__',_b_.None) -if(instancecheck !==_b_.None){return instancecheck(cls,obj)} -return false} -function issubclass(klass,classinfo){check_no_kw('issubclass',klass,classinfo) -check_nb_args('issubclass',2,arguments) -if(!klass.__class__ || -!(klass.$factory !==undefined ||klass.$is_class !==undefined)){throw _b_.TypeError.$factory("issubclass() arg 1 must be a class")} -if(isinstance(classinfo,_b_.tuple)){for(var i=0;i < classinfo.length;i++){if(issubclass(klass,classinfo[i])){return true}} -return false} -if(classinfo.$factory ||classinfo.$is_class){if(klass===classinfo || -klass.__mro__.indexOf(classinfo)>-1){return true}} -var sch=$B.$getattr(classinfo.__class__ ||$B.get_class(classinfo),'__subclasscheck__',_b_.None) -if(sch==_b_.None){return false} -return sch(classinfo,klass)} -var iterator_class=$B.make_class("iterator",function(getitem,len){return{ -__class__:iterator_class,getitem:getitem,len:len,counter:-1}} -) -iterator_class.__next__=function(self){self.counter++ -if(self.len !==null && self.counter==self.len){throw _b_.StopIteration.$factory('')} -try{return self.getitem(self.counter)} -catch(err){throw _b_.StopIteration.$factory('')}} -callable_iterator=$B.make_class("callable_iterator",function(func,sentinel){return{ -__class__:callable_iterator,func:func,sentinel:sentinel}} -) -callable_iterator.__iter__=function(self){return self} -callable_iterator.__next__=function(self){var res=self.func() -if($B.rich_comp("__eq__",res,self.sentinel)){throw _b_.StopIteration.$factory()} -return res} -$B.$iter=function(obj,sentinel){ -if(sentinel===undefined){var klass=obj.__class__ ||$B.get_class(obj) -try{var _iter=$B.$call($B.$getattr(klass,'__iter__'))}catch(err){if(err.__class__===_b_.AttributeError){try{var gi_method=$B.$call($B.$getattr(klass,'__getitem__')),gi=function(i){return gi_method(obj,i)},ln=len(obj) -return iterator_class.$factory(gi,len)}catch(err){throw _b_.TypeError.$factory("'"+$B.class_name(obj)+ -"' object is not iterable")}} -throw err} -var res=$B.$call(_iter)(obj) -try{$B.$getattr(res,'__next__')} -catch(err){if(isinstance(err,_b_.AttributeError)){throw _b_.TypeError.$factory( -"iter() returned non-iterator of type '"+ -$B.class_name(res)+"'")}} -return res}else{return callable_iterator.$factory(obj,sentinel)}} -function iter(){ -var $=$B.args('iter',1,{obj:null},['obj'],arguments,{},'args','kw'),sentinel -if($.args.length > 0){var sentinel=$.args[0]} -return $B.$iter($.obj,sentinel)} -function len(obj){check_no_kw('len',obj) -check_nb_args('len',1,arguments) -var klass=obj.__class__ ||$B.get_class(obj) -try{var method=$B.$getattr(klass,'__len__')}catch(err){throw _b_.TypeError.$factory("object of type '"+ -$B.class_name(obj)+"' has no len()")} -return $B.$call(method)(obj)} -function locals(){ -check_nb_args('locals',0,arguments) -var res=$B.obj_dict($B.last($B.frames_stack)[1]) -res.$is_namespace=true -delete res.$jsobj.__annotations__ -return res} -var map=$B.make_class("map",function(){var $=$B.args('map',2,{func:null,it1:null},['func','it1'],arguments,{},'args',null),func=$B.$call($.func) -var iter_args=[$B.$iter($.it1)] -$.args.forEach(function(item){iter_args.push($B.$iter(item))}) -var obj={__class__:map,args:iter_args,func:func} -return obj} -) -map.__iter__=function(self){return self} -map.__next__=function(self){var args=[] -for(var i=0;i < self.args.length;i++){args.push(next(self.args[i]))} -return self.func.apply(null,args)} -$B.set_func_names(map,"builtins") -function $extreme(args,op){ -var $op_name='min' -if(op==='__gt__'){$op_name="max"} -if(args.length==0){throw _b_.TypeError.$factory($op_name+ -" expected 1 arguments, got 0")} -var last_arg=args[args.length-1],nb_args=args.length,has_default=false,func=false -if(last_arg.$nat=='kw'){nb_args-- -last_arg=last_arg.kw -for(var attr in last_arg){switch(attr){case 'key': -func=last_arg[attr] -break -case '$$default': -var default_value=last_arg[attr] -has_default=true -break -default: -throw _b_.TypeError.$factory("'"+attr+ -"' is an invalid keyword argument for this function")}}} -if(!func){func=function(x){return x}} -if(nb_args==0){throw _b_.TypeError.$factory($op_name+" expected 1 argument, got 0")}else if(nb_args==1){ -var $iter=iter(args[0]),res=null -while(true){try{var x=next($iter) -if(res===null ||$B.$bool($B.$getattr(func(x),op)(func(res)))){res=x}}catch(err){if(err.__class__==_b_.StopIteration){if(res===null){if(has_default){return default_value} -else{throw _b_.ValueError.$factory($op_name+ -"() arg is an empty sequence")}}else{return res}} -throw err}}}else{if(has_default){throw _b_.TypeError.$factory("Cannot specify a default for "+ -$op_name+"() with multiple positional arguments")} -var res=null -for(var i=0;i < nb_args;i++){var x=args[i] -if(res===null ||$B.$bool($B.$getattr(func(x),op)(func(res)))){res=x}} -return res}} -function max(){return $extreme(arguments,'__gt__')} -var memoryview=$B.make_class('memoryview',function(obj){check_no_kw('memoryview',obj) -check_nb_args('memoryview',1,arguments) -if(obj.__class__===memoryview){return obj} -if($B.get_class(obj).$buffer_protocol){return{ -__class__:memoryview,obj:obj, -format:'B',itemsize:1,ndim:1,shape:_b_.tuple.$factory([_b_.len(obj)]),strides:_b_.tuple.$factory([1]),suboffsets:_b_.tuple.$factory([]),c_contiguous:true,f_contiguous:true,contiguous:true}}else{throw _b_.TypeError.$factory("memoryview: a bytes-like object "+ -"is required, not '"+$B.class_name(obj)+"'")}} -) -memoryview.__eq__=function(self,other){if(other.__class__ !==memoryview){return false} -return $B.$getattr(self.obj,'__eq__')(other.obj)} -memoryview.__getitem__=function(self,key){if(isinstance(key,_b_.int)){var start=key*self.itemsize -if(self.format=="I"){var res=self.obj.source[start],coef=256 -for(var i=1;i < 4;i++){res+=self.obj.source[start+i]*coef -coef*=256} -return res}else if("B".indexOf(self.format)>-1){if(key > self.obj.source.length-1){throw _b_.KeyError.$factory(key)} -return self.obj.source[key]}else{ -return self.obj.source[key]}} -var res=self.obj.__class__.__getitem__(self.obj,key) -if(key.__class__===_b_.slice){return memoryview.$factory(res)}} -memoryview.__len__=function(self){return len(self.obj)/self.itemsize} -memoryview.cast=function(self,format){switch(format){case "B": -return memoryview.$factory(self.obj) -case "I": -var res=memoryview.$factory(self.obj),objlen=len(self.obj) -res.itemsize=4 -res.format="I" -if(objlen % 4 !=0){throw _b_.TypeError.$factory("memoryview: length is not "+ -"a multiple of itemsize")} -return res}} -memoryview.hex=function(self){var res='',bytes=_b_.bytes.$factory(self) -bytes.source.forEach(function(item){res+=item.toString(16)}) -return res} -memoryview.tobytes=function(self){return _b_.bytes.$factory(self.obj)} -memoryview.tolist=function(self){if(self.itemsize==1){return _b_.list.$factory(_b_.bytes.$factory(self.obj))}else if(self.itemsize==4){if(self.format=="I"){var res=[] -for(var i=0;i < self.obj.source.length;i+=4){var item=self.obj.source[i],coef=256 -for(var j=1;j < 4;j++){item+=coef*self.obj.source[i+j] -coef*=256} -res.push(item)} -return res}}} -$B.set_func_names(memoryview,"builtins") -function min(){return $extreme(arguments,'__lt__')} -function next(obj){check_no_kw('next',obj) -var missing={},$=$B.args("next",2,{obj:null,def:null},['obj','def'],arguments,{def:missing},null,null) -var klass=obj.__class__ ||$B.get_class(obj),ga=$B.$call($B.$getattr(klass,"__next__")) -if(ga !==undefined){try{return $B.$call(ga)(obj)}catch(err){if(err.__class__===_b_.StopIteration && -$.def !==missing){return $.def} -throw err}} -throw _b_.TypeError.$factory("'"+$B.class_name(obj)+ -"' object is not an iterator")} -var NotImplementedType=$B.make_class("NotImplementedType",function(){return NotImplemented} -) -NotImplementedType.__repr__=NotImplementedType.__str__=function(self){return "NotImplemented"} -var NotImplemented={__class__:NotImplementedType} -function $not(obj){return !$B.$bool(obj)} -function oct(obj){check_no_kw('oct',obj) -check_nb_args('oct',1,arguments) -return bin_hex_oct(8,obj)} -function ord(c){check_no_kw('ord',c) -check_nb_args('ord',1,arguments) -if(typeof c=='string'){if(c.length==1){return c.charCodeAt(0)} -throw _b_.TypeError.$factory('ord() expected a character, but '+ -'string of length '+c.length+' found')} -switch($B.get_class(c)){case _b_.str: -if(c.length==1){return c.charCodeAt(0)} -throw _b_.TypeError.$factory('ord() expected a character, but '+ -'string of length '+c.length+' found') -case _b_.str.$surrogate: -if(c.items.length==1){return c.items[0].codePointAt(0)} -throw _b_.TypeError.$factory('ord() expected a character, but '+ -'string of length '+c.items.length+' found') -case _b_.bytes: -case _b_.bytearray: -if(c.source.length==1){return c.source[0]} -throw _b_.TypeError.$factory('ord() expected a character, but '+ -'string of length '+c.source.length+' found') -default: -throw _b_.TypeError.$factory('ord() expected a character, but '+ -$B.class_name(c)+' was found')}} -function pow(){var $=$B.args('pow',3,{x:null,y:null,mod:null},['x','y','mod'],arguments,{mod:None},null,null),x=$.x,y=$.y,z=$.mod -var klass=x.__class__ ||$B.get_class(x) -if(z===_b_.None){return $B.$call($B.$getattr(klass,'__pow__'))(x,y)}else{if(x !=_b_.int.$factory(x)||y !=_b_.int.$factory(y)){throw _b_.TypeError.$factory("pow() 3rd argument not allowed "+ -"unless all arguments are integers")} -return $B.$call($B.$getattr(klass,'__pow__'))(x,y,z)}} -function $print(){var $ns=$B.args('print',0,{},[],arguments,{},'args','kw') -var ks=$ns['kw'].$string_dict -var end=(ks['end']===undefined ||ks['end']===None)? '\n' :ks['end'][0],sep=(ks['sep']===undefined ||ks['sep']===None)? ' ' :ks['sep'][0],file=ks['file']===undefined ? $B.stdout :ks['file'][0],args=$ns['args'] -var items=[] -args.forEach(function(arg){items.push(_b_.str.$factory(arg))}) -var res=items.join(sep)+end -res=res.replace(new RegExp("\u0007","g"),""). -replace(new RegExp("(.)\b","g"),"") -$B.$getattr(file,'write')(res) -var flush=$B.$getattr(file,'flush',None) -if(flush !==None){flush()} -return None} -$print.__name__='print' -$print.is_func=true -var property=$B.make_class("property",function(fget,fset,fdel,doc){var res={__class__:property} -property.__init__(res,fget,fset,fdel,doc) -return res} -) -property.__init__=function(self,fget,fset,fdel,doc){self.__doc__=doc ||"" -self.$type=fget.$type -self.fget=fget -self.fset=fset -self.fdel=fdel -if(fget && fget.$attrs){for(var key in fget.$attrs){self[key]=fget.$attrs[key]}} -self.__get__=function(self,obj,objtype){if(obj===undefined){return self} -if(self.fget===undefined){throw _b_.AttributeError.$factory("unreadable attribute")} -return $B.$call(self.fget)(obj)} -if(fset !==undefined){self.__set__=function(self,obj,value){if(self.fset===undefined){throw _b_.AttributeError.$factory("can't set attribute")} -$B.$getattr(self.fset,'__call__')(obj,value)}} -self.__delete__=fdel; -self.getter=function(fget){return property.$factory(fget,self.fset,self.fdel,self.__doc__)} -self.setter=function(fset){return property.$factory(self.fget,fset,self.fdel,self.__doc__)} -self.deleter=function(fdel){return property.$factory(self.fget,self.fset,fdel,self.__doc__)}} -property.__repr__=function(self){return _b_.repr(self.fget(self))} -property.__str__=function(self){return _b_.str.$factory(self.fget(self))} -$B.set_func_names(property,"builtins") -function quit(){throw _b_.SystemExit} -quit.__repr__=quit.__str__=function(){return "Use quit() or Ctrl-Z plus Return to exit"} -function repr(obj){check_no_kw('repr',obj) -check_nb_args('repr',1,arguments) -var klass=obj.__class__ ||$B.get_class(obj) -return $B.$call($B.$getattr(klass,"__repr__"))(obj)} -var reversed=$B.make_class("reversed",function(seq){ -check_no_kw('reversed',seq) -check_nb_args('reversed',1,arguments) -var klass=seq.__class__ ||$B.get_class(seq),rev_method=$B.$getattr(klass,'__reversed__',null) -if(rev_method !==null){return $B.$call(rev_method)(seq)} -try{var method=$B.$getattr(klass,'__getitem__')}catch(err){throw _b_.TypeError.$factory("argument to reversed() must be a sequence")} -var res={__class__:reversed,$counter :_b_.len(seq),getter:function(i){return $B.$call(method)(seq,i)}} -return res} -) -reversed.__iter__=function(self){return self} -reversed.__next__=function(self){self.$counter-- -if(self.$counter < 0){throw _b_.StopIteration.$factory('')} -return self.getter(self.$counter)} -$B.set_func_names(reversed,"builtins") -function round(){var $=$B.args('round',2,{number:null,ndigits:null},['number','ndigits'],arguments,{ndigits:None},null,null),arg=$.number,n=$.ndigits===None ? 0 :$.ndigits -if(!isinstance(arg,[_b_.int,_b_.float])){var klass=arg.__class__ ||$B.get_class(arg) -try{return $B.$call($B.$getattr(klass,"__round__")).apply(null,arguments)}catch(err){if(err.__class__===_b_.AttributeError){throw _b_.TypeError.$factory("type "+$B.class_name(arg)+ -" doesn't define __round__ method")}else{throw err}}} -if(isinstance(arg,_b_.float)&& -(arg.value===Infinity ||arg.value===-Infinity)){throw _b_.OverflowError.$factory("cannot convert float infinity to integer")} -if(!isinstance(n,_b_.int)){throw _b_.TypeError.$factory( -"'"+$B.class_name(n)+"' object cannot be interpreted as an integer")} -var mult=Math.pow(10,n),x=arg*mult,floor=Math.floor(x),diff=Math.abs(x-floor),res -if(diff==0.5){if(floor % 2){floor+=1} -res=_b_.int.__truediv__(floor,mult)}else{res=_b_.int.__truediv__(Math.round(x),mult)} -if($.ndigits===None){ -return res.valueOf()}else if(arg instanceof Number){return new Number(res)}else{return res.valueOf()}} -function setattr(){var $=$B.args('setattr',3,{obj:null,attr:null,value:null},['obj','attr','value'],arguments,{},null,null),obj=$.obj,attr=$.attr,value=$.value -if(!(typeof attr=='string')){throw _b_.TypeError.$factory("setattr(): attribute name must be string")} -return $B.$setattr(obj,attr,value)} -$B.$setattr=function(obj,attr,value){ -var $test=false -if($B.aliased_names[attr]){attr='$$'+attr}else if(attr=='__dict__'){ -if(! isinstance(value,_b_.dict)){throw _b_.TypeError.$factory("__dict__ must be set to a dictionary, "+ -"not a '"+$B.class_name(value)+"'")} -if(obj.$infos){obj.$infos.__dict__=value -return None} -obj.__dict__=value -return None}else if(attr=="__class__"){ -function error(msg){throw _b_.TypeError.$factory(msg)} -if(value.__class__){if(value.__module__=="builtins"){error("__class__ assignement only "+ -"supported for heap types or ModuleType subclasses")}else if(Array.isArray(value.__bases__)){for(var i=0;i < value.__bases__.length;i++){if(value.__bases__[i].__module__=="builtins"){error("__class__ assignment: '"+$B.class_name(obj)+ -"' object layout differs from '"+ -$B.class_name(value)+"'")}}}} -obj.__class__=value -return None}else if(attr=="__doc__" && obj.__class__===_b_.property){obj[attr]=value} -if($test){console.log("set attr",attr,"to",obj)} -if(obj.$factory ||obj.$is_class){var metaclass=obj.__class__ -if($test){console.log("obj is class",metaclass,metaclass[attr])} -if(metaclass && metaclass[attr]&& metaclass[attr].__get__ && -metaclass[attr].__set__){metaclass[attr].__set__(obj,value) -return None} -obj[attr]=value -if(attr=="__init__" ||attr=="__new__"){ -obj.$factory=$B.$instance_creator(obj)}else if(attr=="__bases__"){ -obj.__mro__=_b_.type.mro(obj)} -if($test){console.log("after setattr",obj)} -return None} -var res=obj[attr],klass=obj.__class__ ||$B.get_class(obj) -if($test){console.log('set attr',attr,'of obj',obj,'class',klass,"obj[attr]",obj[attr])} -if(res===undefined && klass){res=klass[attr] -if(res===undefined){var mro=klass.__mro__,_len=mro.length -for(var i=0;i < _len;i++){res=mro[i][attr] -if(res !==undefined){break}}}} -if($test){console.log('set attr',attr,'klass',klass,'found in class',res)} -if(res !==undefined && res !==null){ -if(res.__set__ !==undefined){res.__set__(res,obj,value);return None} -var rcls=res.__class__,__set1__ -if(rcls !==undefined){var __set1__=rcls.__set__ -if(__set1__===undefined){var mro=rcls.__mro__ -for(var i=0,_len=mro.length;i < _len;i++){__set1__=mro[i].__set__ -if(__set1__){break}}}} -if(__set1__ !==undefined){var __set__=$B.$getattr(res,'__set__',null) -if(__set__ &&(typeof __set__=='function')){__set__.apply(res,[obj,value]) -return None}}else if(klass && klass.$descriptors !==undefined && -klass[attr]!==undefined){var setter=klass[attr].setter -if(typeof setter=='function'){setter(obj,value) -return None}else{throw _b_.AttributeError.$factory('readonly attribute')}}} -var _setattr=false -if(klass !==undefined){_setattr=klass.__setattr__ -if(_setattr===undefined){var mro=klass.__mro__ -for(var i=0,_len=mro.length-1;i < _len;i++){_setattr=mro[i].__setattr__ -if(_setattr){break}}}} -var special_attrs=["__module__"] -if(klass && klass.__slots__ && special_attrs.indexOf(attr)==-1 && -! _setattr){function mangled_slots(klass){if(klass.__slots__){if(Array.isArray(klass.__slots__)){return klass.__slots__.map(function(item){if(item.startsWith("__")&& ! item.endsWith("_")){return "_"+klass.$infos.__name__+item}else{return item}})}else{return klass.__slots__}} -return[]} -var has_slot=false -if(mangled_slots(klass).indexOf(attr)>-1){has_slot=true}else{for(var i=0;i < klass.__mro__.length;i++){var kl=klass.__mro__[i] -if(mangled_slots(kl).indexOf(attr)>-1){has_slot=true -break}}} -if(! has_slot){throw _b_.AttributeError.$factory("'"+klass.$infos.__name__+ -"' object has no attribute '"+attr+"'")}} -if($test){console.log("attr",attr,"use _setattr",_setattr)} -if(!_setattr){if(obj.__dict__===undefined){obj[attr]=value}else{_b_.dict.$setitem(obj.__dict__,attr,value)} -if($test){console.log("no setattr, obj",obj)}}else{_setattr(obj,attr,value)} -return None} -function sorted(){var $=$B.args('sorted',1,{iterable:null},['iterable'],arguments,{},null,'kw') -var _list=_b_.list.$factory(iter($.iterable)),args=[_list] -for(var i=1;i < arguments.length;i++){args.push(arguments[i])} -_b_.list.sort.apply(null,args) -return _list} -var staticmethod=$B.make_class("staticmethod",function(func){var f={$infos:func.$infos,__get__:function(){return func}} -f.__get__.__class__=$B.method_wrapper -f.__get__.$infos=func.$infos -return f} -) -$B.set_func_names(staticmethod,"builtins") -function sum(iterable,start){var $=$B.args('sum',2,{iterable:null,start:null},['iterable','start'],arguments,{start:0},null,null),iterable=$.iterable,start=$.start -if(_b_.isinstance(start,[_b_.str,_b_.bytes])){throw _b_.TypeError.$factory("TypeError: sum() can't sum bytes"+ -" [use b''.join(seq) instead]")} -var res=start,iterable=iter(iterable) -while(1){try{var _item=next(iterable) -res=$B.$getattr(res,'__add__')(_item)}catch(err){if(err.__class__===_b_.StopIteration){break}else{throw err}}} -return res} -$B.missing_super2=function(obj){obj.$missing=true -return obj} -var $$super=$B.make_class("super",function(_type1,_type2){var missing2=false -if(Array.isArray(_type2)){_type2=_type2[0] -missing2=true} -return{__class__:$$super,__thisclass__:_type1,__self_class__:_type2,$missing2:missing2}} -) -$$super.__getattribute__=function(self,attr){var mro=self.__thisclass__.__mro__,res -var sc=self.__self_class__ -if(sc !==undefined){if(!sc.$is_class){sc=sc.__class__} -var sc_mro=[sc].concat(sc.__mro__) -for(var i=0;i < sc_mro.length;i++){if(sc_mro[i]===self.__thisclass__){mro=sc_mro.slice(i+1) -break}}} -var $test=false -var f -for(var i=0,len=mro.length;i < len;i++){if(mro[i][attr]!==undefined){f=mro[i][attr] -break}} -if(f===undefined){if($test){console.log("no attr",attr,self,"mro",mro)} -throw _b_.AttributeError.$factory(attr)} -if($test){console.log("super",attr,self,"mro",mro,"found in mro[0]",mro[0],f,f+'')} -if(f.$type=="staticmethod" ||attr=="__new__"){return f} -else{if(f.__class__===$B.method){ -f=f.$infos.__func__} -var callable=$B.$call(f) -var method=function(){var res=callable(self.__self_class__,...arguments) -if($test){console.log("calling super",self.__self_class__,attr,f,"res",res)} -return res} -method.__class__=$B.method -var module -if(f.$infos !==undefined){module=f.$infos.__module__}else if(f.__class__===property){module=f.fget.$infos.__module}else if(f.$is_class){module=f.__module__} -method.$infos={__self__:self.__self_class__,__func__:f,__name__:attr,__module__:module,__qualname__:self.__thisclass__.$infos.__name__+"."+attr} -return method} -throw _b_.AttributeError.$factory("object 'super' has no attribute '"+ -attr+"'")} -$$super.__repr__=$$super.__str__=function(self){var res="" -if(self.__self_class__ !==undefined){res+=', <'+self.__self_class__.__class__.$infos.__name__+' object>'}else{res+=', NULL'} -return res+'>'} -$B.set_func_names($$super,"builtins") -function vars(){var def={},$=$B.args('vars',1,{obj:null},['obj'],arguments,{obj:def},null,null) -if($.obj===def){return _b_.locals()}else{try{return $B.$getattr($.obj,'__dict__')} -catch(err){if(err.__class__===_b_.AttributeError){throw _b_.TypeError.$factory("vars() argument must have __dict__ attribute")} -throw err}}} -var $Reader=$B.make_class("Reader") -$Reader.__enter__=function(self){return self} -$Reader.__exit__=function(self){return false} -$Reader.__iter__=function(self){ -return iter($Reader.readlines(self))} -$Reader.__len__=function(self){return self.lines.length} -$Reader.close=function(self){self.closed=true} -$Reader.flush=function(self){return None} -$Reader.read=function(){var $=$B.args("read",2,{self:null,size:null},["self","size"],arguments,{size:-1},null,null),self=$.self,size=$B.$GetInt($.size) -if(self.closed===true){throw _b_.ValueError.$factory('I/O operation on closed file')} -make_content(self) -var len=self.$binary ? self.$bytes.source.length :self.$string.length -if(size < 0){size=len-self.$counter} -if(self.$binary){res=_b_.bytes.$factory(self.$bytes.source.slice(self.$counter,self.$counter+size))}else{res=self.$string.substr(self.$counter,size)} -self.$counter+=size -return res} -$Reader.readable=function(self){return true} -function make_content(self){ -if(self.$binary && self.$bytes===undefined){self.$bytes=_b_.str.encode(self.$string,self.encoding)}else if((! self.$binary)&& self.$string===undefined){self.$string=_b_.bytes.decode(self.$bytes,self.encoding)}} -function make_lines(self){ -if(self.$lines===undefined){make_content(self) -if(! self.$binary){self.$lines=self.$string.split("\n")}else{console.log("make lines, binary") -var lines=[],pos=0,source=self.$bytes.source -while(true){var ix=source.indexOf(10) -if(ix==-1){lines.push({__class__:_b_.bytes,source:source}) -break}else{lines.push({__class__:_b_.bytes,source:source.slice(0,ix+1)}) -source=source.slice(ix+1)}} -self.$lines=lines}}} -$Reader.readline=function(self,size){var $=$B.args("readline",2,{self:null,size:null},["self","size"],arguments,{size:-1},null,null),self=$.self,size=$B.$GetInt($.size) -self.$lc=self.$lc===undefined ?-1 :self.$lc -if(self.closed===true){throw _b_.ValueError.$factory('I/O operation on closed file')} -make_content(self) -if(self.$binary){var ix=self.$bytes.source.indexOf(10,self.$counter) -if(ix==-1){return _b_.bytes.$factory()}else{var res={__class__:_b_.bytes,source :self.$bytes.source.slice(self.$counter,ix+1)} -self.$counter=ix+1 -return res}}else{var ix=self.$string.indexOf("\n",self.$counter) -if(ix==-1){return ''}else{var res=self.$string.substring(self.$counter,ix+1) -self.$counter=ix+1 -self.$lc+=1 -return res}}} -$Reader.readlines=function(){var $=$B.args("readlines",2,{self:null,hint:null},["self","hint"],arguments,{hint:-1},null,null),self=$.self,hint=$B.$GetInt($.hint) -var nb_read=0 -if(self.closed===true){throw _b_.ValueError.$factory('I/O operation on closed file')} -self.$lc=self.$lc===undefined ?-1 :self.$lc -make_lines(self) -if(hint < 0){var lines=self.$lines.slice(self.$lc+1)}else{var lines=[] -while(self.$lc < self.$lines.length && -nb_read < hint){self.$lc++ -lines.push(self.$lines[self.$lc])}} -while(lines[lines.length-1]==''){lines.pop()} -return lines} -$Reader.seek=function(self,offset,whence){if(self.closed===True){throw _b_.ValueError.$factory('I/O operation on closed file')} -if(whence===undefined){whence=0} -if(whence===0){self.$counter=offset} -else if(whence===1){self.$counter+=offset} -else if(whence===2){self.$counter=self.$content.length+offset}} -$Reader.seekable=function(self){return true} -$Reader.tell=function(self){return self.$counter} -$Reader.writable=function(self){return false} -$B.set_func_names($Reader,"builtins") -var $BufferedReader=$B.make_class('_io.BufferedReader') -$BufferedReader.__mro__=[$Reader,_b_.object] -var $TextIOWrapper=$B.make_class('_io.TextIOWrapper',function(){var $=$B.args("TextIOWrapper",6,{buffer:null,encoding:null,errors:null,newline:null,line_buffering:null,write_through:null},["buffer","encoding","errors","newline","line_buffering","write_through"],arguments,{encoding:"utf-8",errors:_b_.None,newline:_b_.None,line_buffering:_b_.False,write_through:_b_.False},null,null) -return{ -__class__:$TextIOWrapper,$bytes:$.buffer.$bytes,encoding:$.encoding,errors:$.errors,newline:$.newline}} -) -$TextIOWrapper.__mro__=[$Reader,_b_.object] -$B.set_func_names($TextIOWrapper,"builtins") -$B.Reader=$Reader -$B.TextIOWrapper=$TextIOWrapper -$B.BufferedReader=$BufferedReader -function $url_open(){ -var $ns=$B.args('open',3,{file:null,mode:null,encoding:null},['file','mode','encoding'],arguments,{mode:'r',encoding:'utf-8'},'args','kw'),$bytes,$string,$res -for(var attr in $ns){eval('var '+attr+'=$ns["'+attr+'"]')} -if(args.length > 0){var mode=args[0]} -if(args.length > 1){var encoding=args[1]} -if(mode.search('w')>-1){throw _b_.IOError.$factory("Browsers cannot write on disk")}else if(['r','rb'].indexOf(mode)==-1){throw _b_.ValueError.$factory("Invalid mode '"+mode+"'")} -if(isinstance(file,_b_.str)){ -var is_binary=mode.search('b')>-1 -if($B.file_cache.hasOwnProperty($ns.file)){$string=$B.file_cache[$ns.file]}else if($B.files && $B.files.hasOwnProperty($ns.file)){ -$res=atob($B.files[$ns.file].content) -var source=[] -for(const char of $res){source.push(char.charCodeAt(0))} -$bytes=_b_.bytes.$factory() -$bytes.source=source}else if($B.protocol !="file"){ -if(is_binary){throw _b_.IOError.$factory( -"open() in binary mode is not supported")} -var req=new XMLHttpRequest(); -req.onreadystatechange=function(){try{var status=this.status -if(status==404){$res=_b_.FileNotFoundError.$factory(file)}else if(status !=200){$res=_b_.IOError.$factory('Could not open file '+ -file+' : status '+status)}else{$res=this.responseText}}catch(err){$res=_b_.IOError.$factory('Could not open file '+ -file+' : error '+err)}} -var fake_qs=$B.$options.cache ? '' : -'?foo='+(new Date().getTime()) -req.open('GET',file+fake_qs,false) -req.overrideMimeType('text/plain; charset=utf-8') -req.send() -if($res.constructor===Error){throw $res} -$string=$res}else{throw _b_.FileNotFoundError.$factory( -"cannot use 'open()' with protocol 'file'")} -if($string===undefined && $bytes===undefined){throw _b_.FileNotFoundError.$factory($ns.file)} -var res={$binary:is_binary,$string:$string,$bytes:$bytes,$counter:0,closed:False,encoding:encoding,mode:mode,name:file} -res.__class__=is_binary ? $BufferedReader :$TextIOWrapper -return res}else{throw _b_.TypeError.$factory("invalid argument for open(): "+ -_b_.str.$factory(file))}} -var zip=$B.make_class("zip",function(){var res={__class__:zip,items:[]} -if(arguments.length==0)return res -var $ns=$B.args('zip',0,{},[],arguments,{},'args','kw') -var _args=$ns['args'] -var args=[] -for(var i=0;i < _args.length;i++){args.push(iter(_args[i]))} -var rank=0,items=[] -while(1){var line=[],flag=true -for(var i=0;i < args.length;i++){try{line.push(next(args[i]))}catch(err){if(err.__class__==_b_.StopIteration){flag=false -break}else{throw err}}} -if(!flag){break} -items[rank++]=_b_.tuple.$factory(line)} -res.items=items -return res} -) -var zip_iterator=$B.make_iterator_class('zip_iterator') -zip.__iter__=function(self){return zip_iterator.$factory(self.items)} -$B.set_func_names(zip,"builtins") -function no_set_attr(klass,attr){if(klass[attr]!==undefined){throw _b_.AttributeError.$factory("'"+klass.$infos.__name__+ -"' object attribute '"+attr+"' is read-only")}else{throw _b_.AttributeError.$factory("'"+klass.$infos.__name__+ -"' object has no attribute '"+attr+"'")}} -var True=true -var False=false -var ellipsis=$B.make_class("ellipsis",function(){return Ellipsis} -) -var Ellipsis={__class__:ellipsis,__bool__:function(){return True},} -for(var $key in $B.$comps){ -switch($B.$comps[$key]){case 'ge': -case 'gt': -case 'le': -case 'lt': -ellipsis['__'+$B.$comps[$key]+'__']=(function(k){return function(other){throw _b_.TypeError.$factory("unorderable types: ellipsis() "+ -k+" "+$B.class_name(other))}})($key)}} -for(var $func in Ellipsis){if(typeof Ellipsis[$func]=='function'){Ellipsis[$func].__str__=(function(f){return function(){return ""}})($func)}} -$B.set_func_names(ellipsis) -var FunctionCode=$B.make_class("function code") -var FunctionGlobals=$B.make_class("function globals") -$B.Function={__class__:_b_.type,__code__:{__class__:FunctionCode,__name__:'function code'},__globals__:{__class__:FunctionGlobals,__name__:'function globals'},__mro__:[_b_.object],$infos:{__name__:'function',__module__:"builtins"},$is_class:true} -$B.Function.__delattr__=function(self,attr){if(attr=="__dict__"){throw _b_.TypeError.$factory("can't deleted function __dict__")}} -$B.Function.__dir__=function(self){var infos=self.$infos ||{},attrs=self.$attrs ||{} -return Object.keys(infos).concat(Object.keys(attrs))} -$B.Function.__eq__=function(self,other){return self===other} -$B.Function.__get__=function(self,obj){if(obj===_b_.None){return self} -var method=function(){return self(obj,...arguments)} -method.__class__=$B.method -if(self.$infos===undefined){console.log("no $infos",self) -console.log($B.last($B.frames_stack))} -method.$infos={__name__:self.$infos.__name__,__qualname__:$B.class_name(obj)+"."+self.$infos.__name__,__self__:obj,__func__:self} -return method} -$B.Function.__getattribute__=function(self,attr){ -if(self.$infos && self.$infos[attr]!==undefined){if(attr=='__code__'){var res={__class__:code} -for(var attr in self.$infos.__code__){res[attr]=self.$infos.__code__[attr]} -res.name=self.$infos.__name__ -res.filename=self.$infos.__code__.co_filename -res.co_code=self+"" -return res}else if(attr=='__annotations__'){ -return $B.obj_dict(self.$infos[attr])}else if(self.$infos.hasOwnProperty(attr)){return self.$infos[attr]}}else if(self.$infos && self.$infos.__dict__ && -self.$infos.__dict__.$string_dict[attr]!==undefined){return self.$infos.__dict__.$string_dict[attr][0]}else if(attr=="__closure__"){var free_vars=self.$infos.__code__.co_freevars -if(free_vars.length==0){return None} -var cells=[] -for(var i=0;i < free_vars.length;i++){try{cells.push($B.cell.$factory($B.$check_def_free(free_vars[i])))}catch(err){ -cells.push($B.cell.$factory(None))}} -return _b_.tuple.$factory(cells)}else if(attr=="__globals__"){return $B.obj_dict($B.imported[self.$infos.__module__])}else if(self.$attrs && self.$attrs[attr]!==undefined){return self.$attrs[attr]}else{return _b_.object.__getattribute__(self,attr)}} -$B.Function.__repr__=$B.Function.__str__=function(self){if(self.$infos===undefined){return ''}else{return ''}} -$B.Function.__mro__=[_b_.object] -$B.Function.__setattr__=function(self,attr,value){if(attr=="__closure__"){throw _b_.AttributeError.$factory("readonly attribute")}else if(attr=="__defaults__"){ -if(value===_b_.None){value=[]}else if(! isinstance(value,_b_.tuple)){throw _b_.TypeError.$factory( -"__defaults__ must be set to a tuple object")} -var set_func=self.$set_defaults -if(set_func===undefined){throw _b_.AttributeError.$factory("cannot set attribute "+attr+ -" of "+_b_.str.$factory(self))} -if(self.$infos && self.$infos.__code__){ -var argcount=self.$infos.__code__.co_argcount,varnames=self.$infos.__code__.co_varnames,params=varnames.slice(0,argcount),$defaults={} -for(var i=value.length-1;i >=0;i--){var pos=params.length-value.length+i -if(pos < 0){break} -$defaults[params[pos]]=value[i]}}else{throw _b_.AttributeError.$factory("cannot set attribute "+attr+ -" of "+_b_.str.$factory(self))} -var klass=self.$infos.$class -var new_func=set_func($defaults) -new_func.$set_defaults=set_func -if(klass){klass[self.$infos.__name__]=new_func -new_func.$infos.$class=klass -new_func.$infos.__defaults__=value}else{ -self.$infos.$defaults=value -self.$infos.__defaults__=value} -return _b_.None} -if(self.$infos[attr]!==undefined){self.$infos[attr]=value} -else{self.$attrs=self.$attrs ||{};self.$attrs[attr]=value}} -$B.Function.$factory=function(){} -$B.set_func_names($B.Function,"builtins") -_b_.__BRYTHON__=__BRYTHON__ -$B.builtin_funcs=["abs","all","any","ascii","bin","breakpoint","callable","chr","compile","delattr","dir","divmod","eval","exec","exit","format","getattr","globals","hasattr","hash","help","hex","id","input","isinstance","issubclass","iter","len","locals","max","min","next","oct","open","ord","pow","print","quit","repr","round","setattr","sorted","sum","vars" -] -var builtin_function=$B.builtin_function=$B.make_class("builtin_function_or_method") -builtin_function.__getattribute__=$B.Function.__getattribute__ -builtin_function.__reduce_ex__=builtin_function.__reduce__=function(self){return self.$infos.__name__} -builtin_function.__repr__=builtin_function.__str__=function(self){return ''} -$B.set_func_names(builtin_function,"builtins") -var method_wrapper=$B.make_class("method_wrapper") -method_wrapper.__repr__=method_wrapper.__str__=function(self){return ""} -$B.set_func_names(method_wrapper,"builtins") -var wrapper_descriptor=$B.wrapper_descriptor= -$B.make_class("wrapper_descriptor") -wrapper_descriptor.__getattribute__=$B.Function.__getattribute__ -wrapper_descriptor.__repr__=wrapper_descriptor.__str__=function(self){return ""} -$B.set_func_names(wrapper_descriptor,"builtins") -$B.builtin_classes=["bool","bytearray","bytes","classmethod","complex","dict","enumerate","filter","float","frozenset","int","list","map","memoryview","object","property","range","reversed","set","slice","staticmethod","str","super","tuple","type","zip" -] -var other_builtins=['Ellipsis','False','None','True','__debug__','__import__','copyright','credits','license','NotImplemented' -] -var builtin_names=$B.builtin_funcs. -concat($B.builtin_classes). -concat(other_builtins) -for(var i=0;i < builtin_names.length;i++){var name=builtin_names[i],orig_name=name,name1=name -if(name=='open'){name1='$url_open'} -if(name=='super'){name=name1='$$super'} -if(name=='eval'){name=name1='$$eval'} -if(name=='print'){name1='$print'} -try{_b_[name]=eval(name1) -if($B.builtin_funcs.indexOf(orig_name)>-1){_b_[name].__class__=builtin_function -_b_[name].$infos={__module__:'builtins',__name__:orig_name,__qualname__:orig_name}}} -catch(err){}} -_b_['open']=$url_open -_b_['print']=$print -_b_['$$super']=$$super -_b_.object.__init__.__class__=wrapper_descriptor -_b_.object.__new__.__class__=builtin_function})(__BRYTHON__) -; -;(function($B){var bltns=$B.InjectBuiltins() -eval(bltns) -$B.del_exc=function(){var frame=$B.last($B.frames_stack) -frame[1].$current_exception=undefined} -$B.set_exc=function(exc){var frame=$B.last($B.frames_stack) -if(frame===undefined){console.log("no frame",exc)} -frame[1].$current_exception=$B.exception(exc)} -$B.get_exc=function(){var frame=$B.last($B.frames_stack) -return frame[1].$current_exception} -$B.$raise=function(arg){ -if(arg===undefined){var es=$B.get_exc() -if(es !==undefined){throw es} -throw _b_.RuntimeError.$factory("No active exception to reraise")}else if(isinstance(arg,BaseException)){if(arg.__class__===_b_.StopIteration && -$B.last($B.frames_stack)[1].$is_generator){ -arg=_b_.RuntimeError.$factory("generator raised StopIteration")} -throw arg}else if(arg.$is_class && issubclass(arg,BaseException)){if(arg===_b_.StopIteration){if($B.last($B.frames_stack)[1].$is_generator){ -throw _b_.RuntimeError.$factory("generator raised StopIteration")}} -throw $B.$call(arg)()}else{throw _b_.TypeError.$factory("exceptions must derive from BaseException")}} -$B.$syntax_err_line=function(exc,module,src,pos,line_num){ -var pos2line={},lnum=1,module=module.charAt(0)=="$" ? "" :module -if(src===undefined){exc.$line_info=line_num+','+module -exc.args=_b_.tuple.$factory([$B.$getitem(exc.args,0),module,line_num,0,0])}else{var line_pos={1:0} -for(var i=0,len=src.length;i < len;i++){pos2line[i]=lnum -if(src.charAt(i)=="\n"){line_pos[++lnum]=i}} -while(line_num===undefined){line_num=pos2line[pos] -pos--} -exc.$line_info=line_num+","+module -var lines=src.split("\n"),line=lines[line_num-1],lpos=pos-line_pos[line_num],len=line.length -exc.text=line -lpos-=len-line.length -if(lpos < 0){lpos=0} -while(line.charAt(0)==' '){line=line.substr(1) -if(lpos > 0){lpos--}} -exc.offset=lpos -exc.args=_b_.tuple.$factory([$B.$getitem(exc.args,0),module,line_num,lpos,line])} -exc.lineno=line_num -exc.msg=exc.args[0] -exc.filename=module} -$B.$SyntaxError=function(module,msg,src,pos,line_num,root){if(root !==undefined && root.line_info !==undefined){ -line_num=root.line_info} -var exc=_b_.SyntaxError.$factory(msg) -$B.$syntax_err_line(exc,module,src,pos,line_num) -throw exc} -$B.$IndentationError=function(module,msg,src,pos,line_num,root){$B.frames_stack.push([module,{$line_info:line_num+","+module},module,{$src:src}]) -if(root !==undefined && root.line_info !==undefined){ -line_num=root.line_info} -var exc=_b_.IndentationError.$factory(msg) -$B.$syntax_err_line(exc,module,src,pos,line_num) -throw exc} -$B.print_stack=function(stack){stack=stack ||$B.frames_stack -var trace=[] -stack.forEach(function(frame){var line_info=frame[1].$line_info -if(line_info !==undefined){var info=line_info.split(",") -if(info[1].startsWith("$exec")){info[1]=""} -trace.push(info[1]+" line "+info[0]) -var src=$B.file_cache[frame[3].__file__] -if(src){var lines=src.split("\n"),line=lines[parseInt(info[0])-1] -trace.push(" "+line.trim())}}}) -console.log("print stack ok",trace) -return trace.join("\n")} -var traceback=$B.traceback=$B.make_class("traceback",function(exc,stack){var frame=$B.last($B.frames_stack) -if(stack===undefined){stack=exc.$stack} -return{ -__class__ :traceback,$stack:stack,exc:exc}} -) -traceback.__getattribute__=function(self,attr){var line_info -if(attr==='tb_frame' || -attr==='tb_lineno' || -attr==='tb_lasti' || -attr==='tb_next'){if(self.$stack.length==0){console.log("no stack",attr)} -var first_frame=self.$stack[0] -line_info=self.exc.$line_infos[self.exc.$line_infos.length- -self.$stack.length]} -switch(attr){case "tb_frame": -return frame.$factory(self.$stack) -case "tb_lineno": -var lineno -if(line_info===undefined || -first_frame[0].startsWith($B.lambda_magic)){if(first_frame[4]&& first_frame[4].$infos && -first_frame[4].$infos.__code__){lineno=first_frame[4].$infos.__code__.co_firstlineno}else{lineno=-1}}else{lineno=parseInt(line_info.split(",")[0])} -return lineno -case "tb_lasti": -if(line_info===undefined){console.log("no line info",self.$stack) -return ""}else{var info=line_info.split(","),src,file -for(var i=self.$stack.length-1;i >=0;i--){var fr=self.$stack[i] -if(fr[2]==info[1].replace(/\./g,'_')){file=fr[3].__file__ -break}} -if(src===undefined){if($B.file_cache.hasOwnProperty(file)){src=$B.file_cache[file]}else if($B.imported[info[1]]&& $B.imported[info[1]].__file__ ){src=$B.file_cache[$B.imported[info[1]].__file__] -console.log("from filecache",line_info,$B.imported[info[1]].__file__)}} -if(src !==undefined){try{return src.split("\n")[parseInt(info[0]-1)].trim()}catch(err){console.log("error in attr tb_lasti of",self) -console.log(src,info) -throw err}}else{console.log(file) -console.log("no src for",info) -return ""}} -case "tb_next": -if(self.$stack.length <=1){return None} -else{return traceback.$factory(self.exc,self.$stack.slice(1))} -default: -return _b_.object.__getattribute__(self,attr)}} -$B.set_func_names(traceback,"builtins") -var frame=$B.make_class("frame",function(stack,pos){var fs=stack -var res={__class__:frame,f_builtins :{}, -$stack:stack.slice()} -if(pos===undefined){pos=0} -res.$pos=pos -if(fs.length){var _frame=fs[pos],locals_id=_frame[0],filename -try{res.f_locals=$B.obj_dict(_frame[1])}catch(err){console.log("err "+err) -throw err} -res.f_globals=$B.obj_dict(_frame[3]) -if(_frame[3].__file__ !==undefined){filename=_frame[3].__file__} -if(locals_id.startsWith("$exec")){filename=""} -if(_frame[1].$line_info===undefined){res.f_lineno=-1}else{var line_info=_frame[1].$line_info.split(",") -res.f_lineno=parseInt(line_info[0]) -var module_name=line_info[1] -if($B.imported.hasOwnProperty(module_name)){filename=$B.imported[module_name].__file__} -res.f_lineno=parseInt(_frame[1].$line_info.split(',')[0])} -var co_name=locals_id.startsWith("$exec")? "" : -locals_id -if(locals_id==_frame[2]){co_name=""}else if(locals_id.startsWith("lc"+$B.lambda_magic)){co_name=""}else{if(_frame[1].$name){co_name=_frame[1].$name}else if(_frame[1].$dict_comp){co_name=''}else if(_frame[1].$list_comp){co_name=''}else if(_frame.length > 4){if(_frame[4].$infos){co_name=_frame[4].$infos.__name__}else{co_name=_frame[4].name} -if(_frame[4].$infos===undefined){ -if(_frame[4].name.startsWith("__ge")){co_name=""}else if(_frame[4].name.startsWith("set_comp"+ -$B.lambda_magic)){co_name=""}else if(_frame[4].name.startsWith("lambda"+ -$B.lambda_magic)){co_name=""}}else if(filename===undefined && _frame[4].$infos.__code__){filename=_frame[4].$infos.__code__.co_filename -if(filename===undefined){filename=_frame[4].$infos.__module__} -res.f_lineno=_frame[4].$infos.__code__.co_firstlineno}}} -res.f_code={__class__:$B.code,co_code:None, -co_name:co_name,co_filename:filename} -if(filename===undefined){res.f_code.co_filename=""}} -return res} -) -frame.__delattr__=function(self,attr){if(attr=="f_trace"){$B.last(self.$stack)[1].$f_trace=_b_.None}} -frame.__getattr__=function(self,attr){ -if(attr=="f_back"){if(self.$pos > 0){return frame.$factory(self.$stack.slice(0,self.$stack.length-1),self.$pos-1)}else{return _b_.None}}else if(attr=="clear"){return function(){}}else if(attr=="f_trace"){var locals=$B.last(self.$stack)[1] -if(locals.$f_trace===undefined){return _b_.None} -return locals.$f_trace}} -frame.__setattr__=function(self,attr,value){if(attr=="f_trace"){ -$B.last(self.$stack)[1].$f_trace=value}} -frame.__str__=frame.__repr__=function(self){return ''} -$B.set_func_names(frame,"builtins") -$B._frame=frame -var BaseException=_b_.BaseException={__class__:_b_.type,__bases__ :[_b_.object],__mro__:[_b_.object],args:[],$infos:{__name__:"BaseException",__module__:"builtins"},$is_class:true} -BaseException.__init__=function(self){var args=arguments[1]===undefined ?[]:[arguments[1]] -self.args=_b_.tuple.$factory(args)} -BaseException.__repr__=function(self){var res=self.__class__.$infos.__name__ -if(self.args[0]){res+='('+repr(self.args[0])} -if(self.args.length > 1){res+=', '+repr($B.fast_tuple(self.args.slice(1)))} -return res+')'} -BaseException.__str__=function(self){if(self.args.length > 0){return _b_.str.$factory(self.args[0])} -return self.__class__.$infos.__name__} -BaseException.__new__=function(cls){var err=_b_.BaseException.$factory() -err.__class__=cls -err.__dict__=$B.empty_dict() -return err} -var getExceptionTrace=function(exc,includeInternal){if(exc.__class__===undefined){if($B.debug > 1){console.log("no class",exc)} -return exc+''} -var info='' -if(exc.$js_exc !==undefined && includeInternal){info+="\nJS stack:\n"+exc.$js_exc.stack+"\n"} -info+="Traceback (most recent call last):" -var line_info=exc.$line_info -for(var i=0;i < exc.$stack.length;i++){var frame=exc.$stack[i] -if(! frame[1]||! frame[1].$line_info){continue} -var $line_info=frame[1].$line_info -var line_info=$line_info.split(','),src -if(exc.module==line_info[1]){src=exc.src} -if(!includeInternal){var src=frame[3].$src -if(src===undefined){if($B.VFS && $B.VFS.hasOwnProperty(frame[2])){src=$B.VFS[frame[2]][1]}else if(src=$B.file_cache[frame[3].__file__]){}else{continue}}} -var file=frame[3].__file__ ||"",module=line_info[1],is_exec=module.charAt(0)=="$" -if(is_exec){module=""} -info+="\n File "+file+" line "+line_info[0] -if(frame.length > 4){if(frame[4].$infos){var name=frame[4].$infos.__name__ -if(name.startsWith("lc"+$B.lambda_magic)){info+=',in '}else{info+=', in '+name}}else if(frame[4].name.startsWith("__ge")){info+=', in '}else if(frame[4].name.startsWith("set_comp"+$B.lambda_magic)){info+=', in '}else if(frame[4].name.startsWith("lc"+$B.lambda_magic)){info+=', in '}else{console.log("frame[4]",frame[4])}}else if(frame[1].$list_comp){info+=', in '}else if(frame[1].$dict_comp){info+=', in '}else{info+=', in '} -if(src !==undefined && ! is_exec){var lines=src.split("\n"),line=lines[parseInt(line_info[0])-1] -if(line){line=line.replace(/^[ ]+/g,"")} -info+="\n "+line}} -if(exc.__class__===_b_.SyntaxError){info+="\n File "+exc.args[1]+", line "+exc.args[2]+ -"\n "+exc.args[4]} -return info} -BaseException.__getattr__=function(self,attr){if(attr=="info"){return getExceptionTrace(self,false);}else if(attr=="infoWithInternal"){return getExceptionTrace(self,true);}else if(attr=="__traceback__"){ -if(self.$traceback !==undefined){return self.$traceback} -return traceback.$factory(self)}else{throw _b_.AttributeError.$factory(self.__class__.$infos.__name__+ -" has no attribute '"+attr+"'")}} -BaseException.with_traceback=function(self,tb){self.$traceback=tb -return self} -$B.deep_copy=function(stack){var res=[] -for(const s of stack){var item=[s[0],{},s[2],{}] -if(s[4]!==undefined){item.push(s[4])} -for(const i of[1,3]){for(var key in s[i]){item[i][key]=s[i][key]}} -res.push(item)} -return res} -$B.save_stack=function(){return $B.deep_copy($B.frames_stack)} -$B.restore_stack=function(stack,locals){$B.frames_stack=stack -$B.frames_stack[$B.frames_stack.length-1][1]=locals} -$B.freeze=function(err){ -if(err.$stack===undefined){err.$line_infos=[] -for(var i=0,len=$B.frames_stack.length;i < len;i++){err.$line_infos.push($B.frames_stack[i][1].$line_info)} -err.$stack=$B.frames_stack.slice() -if($B.frames_stack.length){err.$line_info=$B.last($B.frames_stack)[1].$line_info}}} -var show_stack=$B.show_stack=function(stack){stack=stack ||$B.frames_stack -for(const frame of stack){console.log(frame[0],frame[1].$line_info)}} -BaseException.$factory=function(){var err=Error() -err.args=$B.fast_tuple(Array.prototype.slice.call(arguments)) -err.__class__=_b_.BaseException -err.$py_error=true -$B.freeze(err) -eval("//placeholder//") -err.__cause__=_b_.None -err.__context__=_b_.None -err.__suppress_context__=false -return err} -BaseException.$factory.$infos={__name__:"BaseException",__qualname__:"BaseException"} -$B.set_func_names(BaseException) -_b_.BaseException=BaseException -$B.exception=function(js_exc,in_ctx_manager){ -if(! js_exc.__class__){console.log("Javascript exception:",js_exc) -console.log($B.last($B.frames_stack)) -console.log("recursion error ?",$B.is_recursion_error(js_exc)) -var exc=Error() -exc.__name__="Internal Javascript error: "+ -(js_exc.__name__ ||js_exc.name) -exc.__class__=_b_.Exception -exc.$js_exc=js_exc -if($B.is_recursion_error(js_exc)){return _b_.RecursionError.$factory("too much recursion")}else if(js_exc.name=="ReferenceError"){exc.__name__="NameError" -exc.__class__=_b_.NameError -js_exc.message=js_exc.message.replace("$$","")}else if(js_exc.name=="InternalError"){exc.__name__="RuntimeError" -exc.__class__=_b_.RuntimeError} -exc.__cause__=_b_.None -exc.__context__=_b_.None -exc.__suppress_context__=false -var $message=": "+ -(js_exc.message ||"<"+js_exc+">") -exc.args=_b_.tuple.$factory([$message]) -exc.$py_error=true -$B.freeze(exc)}else{var exc=js_exc -$B.freeze(exc) -if(in_ctx_manager){ -var current_locals=$B.last($B.frames_stack)[0] -for(var i=0,len=exc.$stack.length;i < len;i++){if(exc.$stack[i][0]==current_locals){exc.$stack=exc.$stack.slice(i) -exc.$traceback=traceback.$factory(exc) -break}}}} -return exc} -$B.is_exc=function(exc,exc_list){ -if(exc.__class__===undefined){exc=$B.exception(exc)} -var this_exc_class=exc.$is_class ? exc :exc.__class__ -for(var i=0;i < exc_list.length;i++){var exc_class=exc_list[i] -if(this_exc_class===undefined){console.log("exc class undefined",exc)} -if(issubclass(this_exc_class,exc_class)){return true}} -return false} -$B.is_recursion_error=function(js_exc){ -console.log("test is js exc is recursion error",js_exc,js_exc+"") -var msg=js_exc+"",parts=msg.split(":"),err_type=parts[0].trim(),err_msg=parts[1].trim() -return(err_type=='InternalError' && err_msg=='too much recursion')|| -(err_type=='Error' && err_msg=='Out of stack space')|| -(err_type=='RangeError' && err_msg=='Maximum call stack size exceeded')} -function $make_exc(names,parent){ -var _str=[],pos=0 -for(var i=0;i < names.length;i++){var name=names[i],code="" -if(Array.isArray(name)){ -var code=name[1],name=name[0]} -$B.builtins_scope[name]=true -var $exc=(BaseException.$factory+"").replace(/BaseException/g,name) -$exc=$exc.replace("//placeholder//",code) -_str[pos++]="_b_."+name+' = {__class__:_b_.type, '+ -'__mro__: [_b_.'+parent.$infos.__name__+ -"].concat(parent.__mro__), $is_class: true,"+ -"$infos: {__name__:'"+name+"'}}" -_str[pos++]="_b_."+name+".$factory = "+$exc -_str[pos++]="_b_."+name+'.$factory.$infos = {__name__: "'+ -name+'", __qualname__: "'+name+'"}' -_str[pos++]="$B.set_func_names(_b_."+name+", 'builtins')"} -try{eval(_str.join(";"))}catch(err){console.log("--err"+err) -throw err}} -$make_exc(["SystemExit","KeyboardInterrupt","GeneratorExit","Exception"],BaseException) -$make_exc([["StopIteration","err.value = arguments[0]"],["StopAsyncIteration","err.value = arguments[0]"],"ArithmeticError","AssertionError","AttributeError","BufferError","EOFError",["ImportError","err.name = arguments[0]"],"LookupError","MemoryError","NameError","OSError","ReferenceError","RuntimeError",["SyntaxError","err.msg = arguments[0]"],"SystemError","TypeError","ValueError","Warning"],_b_.Exception) -$make_exc(["FloatingPointError","OverflowError","ZeroDivisionError"],_b_.ArithmeticError) -$make_exc([["ModuleNotFoundError","err.name = arguments[0]"]],_b_.ImportError) -$make_exc(["IndexError","KeyError"],_b_.LookupError) -$make_exc(["UnboundLocalError"],_b_.NameError) -$make_exc(["BlockingIOError","ChildProcessError","ConnectionError","FileExistsError","FileNotFoundError","InterruptedError","IsADirectoryError","NotADirectoryError","PermissionError","ProcessLookupError","TimeoutError"],_b_.OSError) -$make_exc(["BrokenPipeError","ConnectionAbortedError","ConnectionRefusedError","ConnectionResetError"],_b_.ConnectionError) -$make_exc(["NotImplementedError","RecursionError"],_b_.RuntimeError) -$make_exc(["IndentationError"],_b_.SyntaxError) -$make_exc(["TabError"],_b_.IndentationError) -$make_exc(["UnicodeError"],_b_.ValueError) -$make_exc(["UnicodeDecodeError","UnicodeEncodeError","UnicodeTranslateError"],_b_.UnicodeError) -$make_exc(["DeprecationWarning","PendingDeprecationWarning","RuntimeWarning","SyntaxWarning","UserWarning","FutureWarning","ImportWarning","UnicodeWarning","BytesWarning","ResourceWarning"],_b_.Warning) -$make_exc(["EnvironmentError","IOError","VMSError","WindowsError"],_b_.OSError) -$B.$TypeError=function(msg){throw _b_.TypeError.$factory(msg)} -var se=_b_.SyntaxError.$factory -_b_.SyntaxError.$factory=function(){var arg=arguments[0] -if(arg.__class__===_b_.SyntaxError){return arg} -var exc=se.apply(null,arguments),frame=$B.last($B.frames_stack) -if(frame){line_info=frame[1].$line_info -exc.filename=frame[3].__file__ -exc.lineno=parseInt(line_info.split(",")[0]) -var src=$B.file_cache[frame[3].__file__] -if(src){lines=src.split("\n") -exc.text=lines[exc.lineno-1]} -exc.offset=arg.offset} -return exc} -_b_.SyntaxError})(__BRYTHON__) -; - -;(function($B){var _b_=$B.builtins,None=_b_.None,range={__class__:_b_.type,__mro__:[_b_.object],$infos:{__module__:"builtins",__name__:"range"},$is_class:true,$native:true,$descriptors:{start:true,step:true,stop:true}} -range.__contains__=function(self,other){if(range.__len__(self)==0){return false} -try{other=$B.int_or_bool(other)} -catch(err){ -try{range.index(self,other);return true} -catch(err){return false}} -var sub=$B.sub(other,self.start),fl=$B.floordiv(sub,self.step),res=$B.mul(self.step,fl) -if($B.eq(res,sub)){if($B.gt(self.stop,self.start)){return $B.ge(other,self.start)&& $B.gt(self.stop,other)}else{return $B.ge(self.start,other)&& $B.gt(other,self.stop)}}else{return false}} -range.__delattr__=function(self,attr,value){throw _b_.AttributeError.$factory("readonly attribute")} -range.__eq__=function(self,other){if(_b_.isinstance(other,range)){var len=range.__len__(self) -if(! $B.eq(len,range.__len__(other))){return false} -if(len==0){return true} -if(! $B.eq(self.start,other.start)){return false} -if(len==1){return true} -return $B.eq(self.step,other.step)} -return false} -function compute_item(r,i){var len=range.__len__(r) -if(len==0){return r.start} -else if(i > len){return r.stop} -return $B.add(r.start,$B.mul(r.step,i))} -range.__getitem__=function(self,rank){if(_b_.isinstance(rank,_b_.slice)){var norm=_b_.slice.$conv_for_seq(rank,range.__len__(self)),substep=$B.mul(self.step,norm.step),substart=compute_item(self,norm.start),substop=compute_item(self,norm.stop) -return range.$factory(substart,substop,substep)} -if(typeof rank !="number"){rank=$B.$GetInt(rank)} -if($B.gt(0,rank)){rank=$B.add(rank,range.__len__(self))} -var res=$B.add(self.start,$B.mul(rank,self.step)) -if(($B.gt(self.step,0)&& -($B.ge(res,self.stop)||$B.gt(self.start,res)))|| -($B.gt(0,self.step)&& -($B.ge(self.stop,res)||$B.gt(res,self.start)))){throw _b_.IndexError.$factory("range object index out of range")} -return res} -range.__hash__=function(self){var len=range.__len__(self) -if(len==0){return _b_.hash(_b_.tuple.$factory([0,None,None]))} -if(len==1){return _b_.hash(_b_.tuple.$factory([1,self.start,None]))} -return _b_.hash(_b_.tuple.$factory([len,self.start,self.step]))} -var RangeIterator={__class__:_b_.type,__mro__:[_b_.object],__iter__:function(self){return self},__next__:function(self){return _b_.next(self.obj)},$infos:{__name__:"range_iterator",__module__:"builtins"},$is_class:true} -RangeIterator.$factory=function(obj){return{__class__:RangeIterator,obj:obj}} -$B.set_func_names(RangeIterator,"builtins") -range.__iter__=function(self){var res={__class__ :range,start:self.start,stop:self.stop,step:self.step} -if(self.$safe){res.$counter=self.start-self.step}else{res.$counter=$B.sub(self.start,self.step)} -return RangeIterator.$factory(res)} -range.__len__=function(self){var len -if($B.gt(self.step,0)){if($B.ge(self.start,self.stop)){return 0} -var n=$B.sub(self.stop,$B.add(1,self.start)),q=$B.floordiv(n,self.step) -len=$B.add(1,q)}else{if($B.ge(self.stop,self.start)){return 0} -var n=$B.sub(self.start,$B.add(1,self.stop)),q=$B.floordiv(n,$B.mul(-1,self.step)) -len=$B.add(1,q)} -if($B.maxsize===undefined){$B.maxsize=$B.long_int.__pow__($B.long_int.$factory(2),63) -$B.maxsize=$B.long_int.__sub__($B.maxsize,1)} -return len} -range.__next__=function(self){if(self.$safe){self.$counter+=self.step -if((self.step > 0 && self.$counter >=self.stop) -||(self.step < 0 && self.$counter <=self.stop)){throw _b_.StopIteration.$factory("")}}else{self.$counter=$B.add(self.$counter,self.step) -if(($B.gt(self.step,0)&& $B.ge(self.$counter,self.stop)) -||($B.gt(0,self.step)&& $B.ge(self.stop,self.$counter))){throw _b_.StopIteration.$factory("")}} -return self.$counter} -range.__reversed__=function(self){var n=$B.sub(range.__len__(self),1) -return range.$factory($B.add(self.start,$B.mul(n,self.step)),$B.sub(self.start,self.step),$B.mul(-1,self.step))} -range.__repr__=range.__str__=function(self){var res="range("+_b_.str.$factory(self.start)+", "+ -_b_.str.$factory(self.stop) -if(self.step !=1){res+=", "+_b_.str.$factory(self.step)} -return res+")"} -range.__setattr__=function(self,attr,value){throw _b_.AttributeError.$factory("readonly attribute")} -range.start=function(self){return self.start} -range.step=function(self){return self.step},range.stop=function(self){return self.stop} -range.count=function(self,ob){if(_b_.isinstance(ob,[_b_.int,_b_.float,_b_.bool])){return _b_.int.$factory(range.__contains__(self,ob))}else{var comp=function(other){return $B.rich_comp("__eq__",ob,other)},it=range.__iter__(self),_next=RangeIterator.__next__,nb=0 -while(true){try{if(comp(_next(it))){nb++}}catch(err){if(_b_.isinstance(err,_b_.StopIteration)){return nb} -throw err}}}} -range.index=function(self,other){var $=$B.args("index",2,{self:null,other:null},["self","other"],arguments,{},null,null),self=$.self,other=$.other -try{other=$B.int_or_bool(other)}catch(err){var comp=function(x){return $B.rich_comp("__eq__",other,x)},it=range.__iter__(self),_next=RangeIterator.__next__,nb=0 -while(true){try{if(comp(_next(it))){return nb} -nb++}catch(err){if(_b_.isinstance(err,_b_.StopIteration)){throw _b_.ValueError.$factory(_b_.str.$factory(other)+ -" not in range")} -throw err}}} -var sub=$B.sub(other,self.start),fl=$B.floordiv(sub,self.step),res=$B.mul(self.step,fl) -if($B.eq(res,sub)){if(($B.gt(self.stop,self.start)&& $B.ge(other,self.start) -&& $B.gt(self.stop,other))|| -($B.ge(self.start,self.stop)&& $B.ge(self.start,other) -&& $B.gt(other,self.stop))){return fl}else{throw _b_.ValueError.$factory(_b_.str.$factory(other)+ -' not in range')}}else{throw _b_.ValueError.$factory(_b_.str.$factory(other)+ -" not in range")}} -range.$factory=function(){var $=$B.args("range",3,{start:null,stop:null,step:null},["start","stop","step"],arguments,{start:null,stop:null,step:null},null,null),start=$.start,stop=$.stop,step=$.step,safe -if(stop===null && step===null){if(start==null){throw _b_.TypeError.$factory("range expected 1 arguments, got 0")} -stop=$B.PyNumber_Index(start) -safe=typeof stop==="number" -return{__class__:range,start:0,stop:stop,step:1,$is_range:true,$safe:safe}} -if(step===null){step=1} -start=$B.PyNumber_Index(start) -stop=$B.PyNumber_Index(stop) -step=$B.PyNumber_Index(step) -if(step==0){throw _b_.ValueError.$factory("range arg 3 must not be zero")} -safe=(typeof start=="number" && typeof stop=="number" && -typeof step=="number") -return{__class__:range,start:start,stop:stop,step:step,$is_range:true,$safe:safe}} -$B.set_func_names(range,"builtins") -var slice={__class__:_b_.type,__mro__:[_b_.object],$infos:{__module__:"builtins",__name__:"slice"},$is_class:true,$native:true,$descriptors:{start:true,step:true,stop:true}} -slice.__eq__=function(self,other){var conv1=conv_slice(self),conv2=conv_slice(other) -return conv1[0]==conv2[0]&& -conv1[1]==conv2[1]&& -conv1[2]==conv2[2]} -slice.__repr__=slice.__str__=function(self){return "slice("+_b_.str.$factory(self.start)+", "+ -_b_.str.$factory(self.stop)+", "+_b_.str.$factory(self.step)+")"} -slice.__setattr__=function(self,attr,value){throw _b_.AttributeError.$factory("readonly attribute")} -function conv_slice(self){ -var attrs=["start","stop","step"],res=[] -for(var i=0;i < attrs.length;i++){var val=self[attrs[i]] -if(val===_b_.None){res.push(val)}else{try{res.push($B.PyNumber_Index(val))}catch(err){throw _b_.TypeError.$factory("slice indices must be "+ -"integers or None or have an __index__ method")}}} -return res} -slice.$conv_for_seq=function(self,len){ -var step=self.step===None ? 1 :$B.PyNumber_Index(self.step),step_is_neg=$B.gt(0,step),len_1=$B.sub(len,1) -if(step==0){throw _b_.ValueError.$factory('slice step cannot be zero')} -var start -if(self.start===None){start=step_is_neg ? len_1 :0}else{start=$B.PyNumber_Index(self.start) -if($B.gt(0,start)){start=$B.add(start,len) -if($B.gt(0,start)){start=0}} -if($B.ge(start,len)){start=step < 0 ? len_1 :len}} -if(self.stop===None){stop=step_is_neg ?-1 :len}else{stop=$B.PyNumber_Index(self.stop) -if($B.gt(0,stop)){stop=$B.add(stop,len)} -if($B.ge(stop,len)){stop=step_is_neg ? len_1 :len}} -return{start:start,stop:stop,step:step}} -slice.start=function(self){return self.start} -slice.step=function(self){return self.step} -slice.stop=function(self){return self.stop} -slice.indices=function(self,length){ -var $=$B.args("indices",2,{self:null,length:null},["self","length"],arguments,{},null,null) -var len=$B.$GetInt($.length) -if(len < 0){_b_.ValueError.$factory("length should not be negative")} -var _step=(self.step==_b_.None)? 1 :self.step -if(_step < 0){var _start=self.start,_stop=self.stop -_start=(_start==_b_.None)? len-1 : -(_start < 0)? _b_.max(-1,_start+len):_b_.min(len-1,self.start) -_stop=(self.stop==_b_.None)?-1 : -(_stop < 0)? _b_.max(-1,_stop+len):_b_.min(len-1,self.stop)}else{var _start=(self.start==_b_.None)? 0 :_b_.min(len,self.start) -var _stop=(self.stop==_b_.None)? len :_b_.min(len,self.stop) -if(_start < 0){_start=_b_.max(0,_start+len)} -if(_stop < 0){_stop=_b_.max(0,_stop+len)}} -return _b_.tuple.$factory([_start,_stop,_step])} -slice.$factory=function(){var $=$B.args("slice",3,{start:null,stop:null,step:null},["start","stop","step"],arguments,{stop:null,step:null},null,null),start,stop,step -if($.stop===null && $.step===null){start=_b_.None -stop=$.start -step=_b_.None}else{start=$.start -stop=$.stop -step=$.step===null ? _b_.None :$.step} -var res={__class__ :slice,start:start,stop:stop,step:step} -conv_slice(res) -return res} -$B.set_func_names(slice,"builtins") -_b_.range=range -_b_.slice=slice})(__BRYTHON__) -; -;(function($B){var _b_=$B.builtins -var from_unicode={},to_unicode={} -$B.to_bytes=function(obj){var res -if(_b_.isinstance(obj,[bytes,bytearray])){res=obj.source}else{var ga=$B.$getattr(obj,"tobytes",null) -if(ga !==null){res=$B.$call(ga)().source} -else{throw _b_.TypeError.$factory("object doesn't support the buffer protocol")}} -return res} -function _strip(self,cars,lr){if(cars===undefined){cars=[] -var ws='\r\n \t' -for(var i=0,len=ws.length;i < len;i++){cars.push(ws.charCodeAt(i))}}else if(_b_.isinstance(cars,bytes)){cars=cars.source}else{throw _b_.TypeError.$factory("Type str doesn't support the buffer API")} -if(lr=='l'){for(var i=0,len=self.source.length;i < len;i++){if(cars.indexOf(self.source[i])==-1){break}} -return bytes.$factory(self.source.slice(i))} -for(var i=self.source.length-1;i >=0;i--){if(cars.indexOf(self.source[i])==-1){break}} -return bytes.$factory(self.source.slice(0,i+1))} -function invalid(other){return ! _b_.isinstance(other,[bytes,bytearray])} -var bytearray={__class__:_b_.type,__mro__:[_b_.object],$buffer_protocol:true,$infos:{__module__:"builtins",__name__:"bytearray"},$is_class:true} -var mutable_methods=["__delitem__","clear","copy","count","index","pop","remove","reverse","sort"] -mutable_methods.forEach(function(method){bytearray[method]=(function(m){return function(self){var args=[self.source],pos=1 -for(var i=1,len=arguments.length;i < len;i++){args[pos++]=arguments[i]} -return _b_.list[m].apply(null,args)}})(method)}) -var bytearray_iterator=$B.make_iterator_class('bytearray_iterator') -bytearray.__iter__=function(self){return bytearray_iterator.$factory(self.source)} -bytearray.__mro__=[_b_.object] -bytearray.__repr__=bytearray.__str__=function(self){return 'bytearray('+bytes.__repr__(self)+")"} -bytearray.__setitem__=function(self,arg,value){if(_b_.isinstance(arg,_b_.int)){if(! _b_.isinstance(value,_b_.int)){throw _b_.TypeError.$factory('an integer is required')}else if(value > 255){throw _b_.ValueError.$factory("byte must be in range(0, 256)")} -var pos=arg -if(arg < 0){pos=self.source.length+pos} -if(pos >=0 && pos < self.source.length){self.source[pos]=value} -else{throw _b_.IndexError.$factory('list index out of range')}}else if(_b_.isinstance(arg,_b_.slice)){var start=arg.start===_b_.None ? 0 :arg.start -var stop=arg.stop===_b_.None ? self.source.length :arg.stop -if(start < 0){start=self.source.length+start} -if(stop < 0){stop=self.source.length+stop} -self.source.splice(start,stop-start) -try{var $temp=_b_.list.$factory(value) -for(var i=$temp.length-1;i >=0;i--){if(! _b_.isinstance($temp[i],_b_.int)){throw _b_.TypeError.$factory('an integer is required')}else if($temp[i]> 255){throw ValueError.$factory("byte must be in range(0, 256)")} -self.source.splice(start,0,$temp[i])}}catch(err){throw _b_.TypeError.$factory("can only assign an iterable")}}else{throw _b_.TypeError.$factory('list indices must be integer, not '+ -$B.class_name(arg))}} -bytearray.append=function(self,b){if(arguments.length !=2){throw _b_.TypeError.$factory( -"append takes exactly one argument ("+(arguments.length-1)+ -" given)")} -if(! _b_.isinstance(b,_b_.int)){throw _b_.TypeError.$factory("an integer is required")} -if(b > 255){throw ValueError.$factory("byte must be in range(0, 256)")} -self.source[self.source.length]=b} -bytearray.extend=function(self,b){if(b.__class__===bytearray ||b.__class__===bytes){b.source.forEach(function(item){self.source.push(item)}) -return _b_.None} -var it=_b_.iter(b) -while(true){try{bytearray.__add__(self,_b_.next(it))}catch(err){if(err===_b_.StopIteration){break} -throw err}} -return _b_.None} -bytearray.insert=function(self,pos,b){if(arguments.length !=3){throw _b_.TypeError.$factory( -"insert takes exactly 2 arguments ("+(arguments.length-1)+ -" given)")} -if(! _b_.isinstance(b,_b_.int)){throw _b_.TypeError.$factory("an integer is required")} -if(b > 255){throw ValueError.$factory("byte must be in range(0, 256)")} -_b_.list.insert(self.source,pos,b)} -bytearray.$factory=function(){var args=[bytearray] -for(var i=0,len=arguments.length;i < len;i++){args.push(arguments[i])} -return bytearray.__new__.apply(null,args)} -var bytes={__class__ :_b_.type,__mro__:[_b_.object],$buffer_protocol:true,$infos:{__module__:"builtins",__name__:"bytes"},$is_class:true} -bytes.__add__=function(self,other){if(_b_.isinstance(other,bytes)){return self.__class__.$factory(self.source.concat(other.source))}else if(_b_.isinstance(other,bytearray)){return self.__class__.$factory(bytes.__add__(self,bytes.$factory(other)))}else if(_b_.isinstance(other,_b_.memoryview)){return self.__class__.$factory(bytes.__add__(self,_b_.memoryview.tobytes(other)))} -throw _b_.TypeError.$factory("can't concat bytes to "+ -_b_.str.$factory(other))} -bytes.__contains__=function(self,other){if(typeof other=="number"){return self.source.indexOf(other)>-1} -if(self.source.length < other.source.length){return false} -var len=other.source.length -for(var i=0;i < self.source.length-other.source.length+1;i++){var flag=true -for(var j=0;j < len;j++){if(other.source[i+j]!=self.source[j]){flag=false -break}} -if(flag){return true}} -return false} -var bytes_iterator=$B.make_iterator_class("bytes_iterator") -bytes.__iter__=function(self){return bytes_iterator.$factory(self.source)} -bytes.__eq__=function(self,other){if(invalid(other)){return false} -return $B.$getattr(self.source,'__eq__')(other.source)} -bytes.__ge__=function(self,other){if(invalid(other)){return _b_.NotImplemented} -return _b_.list.__ge__(self.source,other.source)} -bytes.__getitem__=function(self,arg){var i -if(_b_.isinstance(arg,_b_.int)){var pos=arg -if(arg < 0){pos=self.source.length+pos} -if(pos >=0 && pos < self.source.length){return self.source[pos]} -throw _b_.IndexError.$factory("index out of range")}else if(_b_.isinstance(arg,_b_.slice)){var s=_b_.slice.$conv_for_seq(arg,self.source.length),start=s.start,stop=s.stop,step=s.step -var res=[],i=null,pos=0 -if(step > 0){stop=Math.min(stop,self.source.length) -if(stop <=start){return bytes.$factory([])} -for(var i=start;i < stop;i+=step){res[pos++]=self.source[i]}}else{if(stop >=start){return bytes.$factory([])} -stop=Math.max(0,stop) -for(var i=start;i >=stop;i+=step){res[pos++]=self.source[i]}} -return bytes.$factory(res)}else if(_b_.isinstance(arg,_b_.bool)){return self.source.__getitem__(_b_.int.$factory(arg))}} -bytes.__gt__=function(self,other){if(invalid(other)){return _b_.NotImplemented} -return _b_.list.__gt__(self.source,other.source)} -bytes.__hash__=function(self){if(self===undefined){return bytes.__hashvalue__ ||$B.$py_next_hash--} -var hash=1 -for(var i=0,len=self.source.length;i < len;i++){hash=(101*hash+self.source[i])& 0xFFFFFFFF} -return hash} -bytes.__init__=function(){return _b_.None} -bytes.__le__=function(self,other){if(invalid(other)){return _b_.NotImplemented} -return _b_.list.__le__(self.source,other.source)} -bytes.__len__=function(self){return self.source.length} -bytes.__lt__=function(self,other){if(invalid(other)){return _b_.NotImplemented} -return _b_.list.__lt__(self.source,other.source)} -bytes.__mod__=function(self,args){ -var s=decode(self,"ascii","strict"),res=_b_.str.__mod__(s,args) -return _b_.str.encode(res,"ascii")} -bytes.__mul__=function(){var $=$B.args('__mul__',2,{self:null,other:null},['self','other'],arguments,{},null,null),other=$B.PyNumber_Index($.other) -var t=[],source=$.self.source,slen=source.length -for(var i=0;i < other;i++){for(var j=0;j < slen;j++){t.push(source[j])}} -var res=bytes.$factory() -res.source=t -return res} -bytes.__ne__=function(self,other){return ! bytes.__eq__(self,other)} -bytes.__new__=function(cls,source,encoding,errors){var $=$B.args("__new__",4,{cls:null,source:null,encoding:null,errors:null},["cls","source","encoding","errors"],arguments,{source:[],encoding:"utf-8",errors:"strict"},null,null) -return bytes.$new($.cls,$.source,$.encoding,$.errors)} -bytes.$new=function(cls,source,encoding,errors){ -var self={__class__:cls},int_list=[],pos=0 -if(source===undefined){}else if(typeof source=="number" ||_b_.isinstance(source,_b_.int)){var i=source -while(i--){int_list[pos++]=0}}else{if(typeof source=="string" ||_b_.isinstance(source,_b_.str)){if(encoding===undefined){throw _b_.TypeError.$factory("string argument without an encoding")} -int_list=encode(source,encoding ||"utf-8",errors ||"strict")}else{ -int_list=_b_.list.$factory(source) -for(var i=0;i < int_list.length;i++){try{var item=_b_.int.$factory(int_list[i])}catch(err){throw _b_.TypeError.$factory("'"+ -$B.class_name(int_list[i])+"' object "+ -"cannot be interpreted as an integer")} -if(item < 0 ||item > 255){throw _b_.ValueError.$factory("bytes must be in range"+ -"(0, 256)")}}}} -self.source=int_list -self.encoding=encoding -self.errors=errors -return self} -bytes.__repr__=bytes.__str__=function(self){var res="" -for(var i=0,len=self.source.length;i < len;i++){var s=self.source[i] -if(s==10){res+='\\n'}else if(s < 32 ||s >=128){var hx=s.toString(16) -hx=(hx.length==1 ? '0' :'')+hx -res+='\\x'+hx}else if(s=="\\".charCodeAt(0)){res+="\\\\"}else{res+=String.fromCharCode(s)}} -if(res.indexOf("'")>-1 && res.indexOf('"')==-1){return 'b"'+res+'"'}else{return "b'"+res.replace(new RegExp("'","g"),"\\'")+"'"}} -bytes.__reduce_ex__=function(self){return bytes.__repr__(self)} -bytes.capitalize=function(self){var src=self.source,len=src.length,buffer=src.slice() -if(buffer[0]> 96 && buffer[0]< 123){buffer[0]-=32} -for(var i=1;i < len;++i){if(buffer[i]> 64 && buffer[i]< 91){buffer[i]+=32}} -return bytes.$factory(buffer)} -bytes.center=function(){var $=$B.args('center',3,{self:null,width:null,fillbyte:null},['self','width','fillbyte'],arguments,{fillbyte:bytes.$factory([32])},null,null) -var diff=$.width-$.self.source.length -if(diff <=0){return bytes.$factory($.self.source)} -var ljust=bytes.ljust($.self,$.self.source.length+Math.floor(diff/2),$.fillbyte) -return bytes.rjust(ljust,$.width,$.fillbyte)} -bytes.count=function(){var $=$B.args('count',4,{self:null,sub:null,start:null,end:null},['self','sub','start','end'],arguments,{start:0,end:-1},null,null) -var n=0,index=-1,len=0 -if(typeof $.sub=="number"){if($.sub < 0 ||$.sub > 255) -throw _b_.ValueError.$factory("byte must be in range(0, 256)") -len=1}else if(!$.sub.__class__){throw _b_.TypeError.$factory("first argument must be a bytes-like "+ -"object, not '"+$B.class_name($.sub)+"'")}else if(!$.sub.__class__.$buffer_protocol){throw _b_.TypeError.$factory("first argument must be a bytes-like "+ -"object, not '"+$B.class_name($.sub)+"'")}else{len=$.sub.source.length} -do{index=bytes.find($.self,$.sub,Math.max(index+len,$.start),$.end) -if(index !=-1){n++}}while(index !=-1) -return n} -bytes.decode=function(self,encoding,errors){var $=$B.args("decode",3,{self:null,encoding:null,errors:null},["self","encoding","errors"],arguments,{encoding:"utf-8",errors:"strict"},null,null) -switch($.errors){case 'strict': -case 'ignore': -case 'replace': -case 'surrogateescape': -case 'surrogatepass': -case 'xmlcharrefreplace': -case 'backslashreplace': -return decode($.self,$.encoding,$.errors) -default:}} -bytes.endswith=function(){var $=$B.args('endswith',4,{self:null,suffix:null,start:null,end:null},['self','suffix','start','end'],arguments,{start:-1,end:-1},null,null) -if(_b_.isinstance($.suffix,bytes)){var start=$.start==-1 ? -$.self.source.length-$.suffix.source.length : -Math.min($.self.source.length-$.suffix.source.length,$.start) -var end=$.end==-1 ? -($.start==-1 ? $.self.source.length :start+$.suffix.source.length): -Math.min($.self.source.length-1,$.end) -var res=true -for(var i=$.suffix.source.length-1,len=$.suffix.source.length; -i >=0 && res;--i){res=$.self.source[end-len+i]==$.suffix.source[i]} -return res}else if(_b_.isinstance($.suffix,_b_.tuple)){for(var i=0;i < $.suffix.length;++i){if(_b_.isinstance($.suffix[i],bytes)){if(bytes.endswith($.self,$.suffix[i],$.start,$.end)){return true}}else{throw _b_.TypeError.$factory("endswith first arg must be "+ -"bytes or a tuple of bytes, not "+ -$B.class_name($.suffix))}} -return false}else{throw _b_.TypeError.$factory("endswith first arg must be bytes "+ -"or a tuple of bytes, not "+$B.class_name($.suffix))}} -bytes.expandtabs=function(){var $=$B.args('expandtabs',2,{self:null,tabsize:null},['self','tabsize'],arguments,{tabsize:8},null,null) -var tab_spaces=[] -for(let i=0;i < $.tabsize;++i){tab_spaces.push(32)} -var buffer=$.self.source.slice() -for(let i=0;i < buffer.length;++i){if(buffer[i]===9){buffer.splice.apply(buffer,[i,1].concat(tab_spaces))}} -return _b_.bytes.$factory(buffer)} -bytes.find=function(self,sub){if(arguments.length !=2){var $=$B.args('find',4,{self:null,sub:null,start:null,end:null},['self','sub','start','end'],arguments,{start:0,end:-1},null,null),sub=$.sub,start=$.start,end=$.end}else{var start=0,end=-1} -if(typeof sub=="number"){if(sub < 0 ||sub > 255){throw _b_.ValueError.$factory("byte must be in range(0, 256)")} -return self.source.slice(0,end==-1 ? undefined :end).indexOf(sub,start)}else if(! sub.__class__){throw _b_.TypeError.$factory("first argument must be a bytes-like "+ -"object, not '"+$B.class_name(sub)+"'")}else if(! sub.__class__.$buffer_protocol){throw _b_.TypeError.$factory("first argument must be a bytes-like "+ -"object, not '"+$B.class_name(sub)+"'")} -end=end==-1 ? self.source.length :Math.min(self.source.length,end) -var len=sub.source.length -for(var i=start;i <=end-len;i++){var chunk=self.source.slice(i,i+len),found=true -for(var j=0;j < len;j++){if(chunk[j]!=sub.source[j]){found=false -break}} -if(found){return i}} -return-1} -bytes.fromhex=function(){var $=$B.args('fromhex',2,{cls:null,string:null},['cls','string'],arguments,{},null,null),string=$.string.replace(/\s/g,''),source=[] -for(var i=0;i < string.length;i+=2){if(i+2 > string.length){throw _b_.ValueError.$factory("non-hexadecimal number found "+ -"in fromhex() arg")} -source.push(_b_.int.$factory(string.substr(i,2),16))} -return $.cls.$factory(source)} -bytes.hex=function(){ -var $=$B.args('hex',1,{self:null},['self'],arguments,{},null,null),self=$.self,res="" -for(var i=0,len=self.source.length;i < len;i++){var hexa=self.source[i].toString(16) -if(hexa.length < 2){hexa="0"+hexa} -res+=hexa} -return res} -bytes.index=function(){var $=$B.args('rfind',4,{self:null,sub:null,start:null,end:null},['self','sub','start','end'],arguments,{start:0,end:-1},null,null) -var index=bytes.find($.self,$.sub,$.start,$.end) -if(index==-1){throw _b_.ValueError.$factory("subsection not found")} -return index} -bytes.isalnum=function(self){var src=self.source,len=src.length,res=len > 0 -for(var i=0;i < len && res;++i){res=(src[i]> 96 && src[i]< 123)|| -(src[i]> 64 && src[i]< 91)|| -(src[i]> 47 && src[i]< 58)} -return res} -bytes.isalpha=function(self){var src=self.source,len=src.length,res=len > 0 -for(var i=0;i < len && res;++i){res=(src[i]> 96 && src[i]< 123)||(src[i]> 64 && src[i]< 91)} -return res} -bytes.isdigit=function(self){var src=self.source,len=src.length,res=len > 0 -for(let i=0;i < len && res;++i){res=src[i]> 47 && src[i]< 58} -return res} -bytes.islower=function(self){var src=self.source,len=src.length,res=false -for(let i=0;i < len;++i){ -res=res ||(src[i]> 96 && src[i]< 123) -if(src[i]> 64 && src[i]< 91){return false}} -return res} -bytes.isspace=function(self){var src=self.source,len=src.length -for(let i=0;i < len;++i){switch(src[i]){case 9: -case 10: -case 11: -case 12: -case 13: -case 32: -break -default: -return false}} -return true} -bytes.isupper=function(self){var src=self.source,len=src.length,res=false -for(let i=0;i < len;++i){ -res=res ||(src[i]> 64 && src[i]< 91) -if(src[i]> 96 && src[i]< 123){return false}} -return res} -bytes.istitle=function(self){var src=self.source,len=src.length,current_char_is_letter=false,prev_char_was_letter=false,is_uppercase=false,is_lowercase=false -for(var i=0;i < len;++i){is_lowercase=src[i]> 96 && src[i]< 123 -is_uppercase=src[i]> 64 && src[i]< 91 -current_char_is_letter=is_lowercase ||is_uppercase -if(current_char_is_letter && -(prev_char_was_letter && is_uppercase)|| -(! prev_char_was_letter && is_lowercase)){return false} -prev_char_was_letter=current_char_is_letter} -return true} -bytes.join=function(){var $ns=$B.args('join',2,{self:null,iterable:null},['self','iterable'],arguments,{}),self=$ns['self'],iterable=$ns['iterable'] -var next_func=$B.$getattr(_b_.iter(iterable),'__next__'),res=self.__class__.$factory(),empty=true -while(true){try{var item=next_func() -if(empty){empty=false} -else{res=bytes.__add__(res,self)} -res=bytes.__add__(res,item)}catch(err){if(_b_.isinstance(err,_b_.StopIteration)){break} -throw err}} -return res} -var _lower=function(char_code){if(char_code >=65 && char_code <=90){return char_code+32}else{return char_code}} -bytes.lower=function(self){var _res=[],pos=0 -for(var i=0,len=self.source.length;i < len;i++){if(self.source[i]){_res[pos++]=_lower(self.source[i])}} -return bytes.$factory(_res)} -bytes.ljust=function(){var $=$B.args('ljust',3,{self:null,width:null,fillbyte:null},['self','width','fillbyte'],arguments,{fillbyte:bytes.$factory([32])},null,null) -if(!$.fillbyte.__class__){throw _b_.TypeError.$factory("argument 2 must be a byte string of length 1, "+ -"not '"+$B.class_name($.fillbyte)+"'")}else if(!$.fillbyte.__class__.$buffer_protocol){throw _b_.TypeError.$factory("argument 2 must be a byte string of length 1, "+ -"not '"+$B.class_name($.fillbyte)+"'")} -var padding=[],count=$.width-$.self.source.length -for(var i=0;i < count;++i){padding.push($.fillbyte.source[0])} -return bytes.$factory($.self.source.concat(padding))} -bytes.lstrip=function(self,cars){return _strip(self,cars,'l')} -bytes.maketrans=function(from,to){var _t=[],to=$B.to_bytes(to) -for(var i=0;i < 256;i++){_t[i]=i} -for(var i=0,len=from.source.length;i < len;i++){var _ndx=from.source[i] -_t[_ndx]=to[i]} -return bytes.$factory(_t)} -bytes.partition=function(){var $=$B.args('partition',2,{self:null,sep:null},['self','sep'],arguments,{},null,null) -if(! $.sep.__class__){throw _b_.TypeError.$factory("a bytes-like object is required, "+ -"not '"+$B.class_name($.sep)+"'")}else if(! $.sep.__class__.$buffer_protocol){throw _b_.TypeError.$factory("a bytes-like object is required, "+ -"not '"+$B.class_name($.sep)+"'")} -var len=$.sep.source.length,src=$.self.source,i=bytes.find($.self,$.sep) -return _b_.tuple.$factory([bytes.$factory(src.slice(0,i)),bytes.$factory(src.slice(i,i+len)),bytes.$factory(src.slice(i+len)) -])} -bytes.removeprefix=function(){var $=$B.args("removeprefix",2,{self:null,prefix:null},["self","prefix"],arguments,{},null,null) -if(!_b_.isinstance($.prefix,[bytes,bytearray])){throw _b_.ValueError.$factory("prefix should be bytes, not "+ -`'${$B.class_name($.prefix)}'`)} -if(bytes.startswith($.self,$.prefix)){return bytes.__getitem__($.self,_b_.slice.$factory($.prefix.source.length,_b_.None))} -return bytes.__getitem__($.self,_b_.slice.$factory(0,_b_.None))} -bytes.removesuffix=function(){var $=$B.args("removesuffix",2,{self:null,prefix:null},["self","suffix"],arguments,{},null,null) -if(!_b_.isinstance($.suffix,[bytes,bytearray])){throw _b_.ValueError.$factory("suffix should be bytes, not "+ -`'${$B.class_name($.suffix)}'`)} -if(bytes.endswith($.self,$.suffix)){return bytes.__getitem__($.self,_b_.slice.$factory(0,$.suffix.source.length+1))} -return bytes.__getitem__($.self,_b_.slice.$factory(0,_b_.None))} -bytes.replace=function(){var $=$B.args('replace',4,{self:null,old:null,new:null,count:null},['self','old','new','count'],arguments,{count:-1},null,null),res=[] -var self=$.self,src=self.source,len=src.length,old=$.old,$new=$.new -var count=$.count >=0 ? $.count :src.length -if(! $.old.__class__){throw _b_.TypeError.$factory("first argument must be a bytes-like "+ -"object, not '"+$B.class_name($.old)+"'")}else if(! $.old.__class__.$buffer_protocol){throw _b_.TypeError.$factory("first argument must be a bytes-like "+ -"object, not '"+$B.class_name($.sep)+"'")} -if(! $.new.__class__){throw _b_.TypeError.$factory("second argument must be a bytes-like "+ -"object, not '"+$B.class_name($.old)+"'")}else if(! $.new.__class__.$buffer_protocol){throw _b_.TypeError.$factory("second argument must be a bytes-like "+ -"object, not '"+$B.class_name($.sep)+"'")} -for(var i=0;i < len;i++){if(bytes.startswith(self,old,i)&& count){for(var j=0;j < $new.source.length;j++){res.push($new.source[j])} -i+=(old.source.length-1) -count--}else{res.push(src[i])}} -return bytes.$factory(res)} -bytes.rfind=function(self,subbytes){if(arguments.length==2 && subbytes.__class__===bytes){var sub=subbytes,start=0,end=-1}else{var $=$B.args('rfind',4,{self:null,sub:null,start:null,end:null},['self','sub','start','end'],arguments,{start:0,end:-1},null,null),self=$.self,sub=$.sub,start=$.start,end=$.end} -if(typeof sub=="number"){if(sub < 0 ||sub > 255){throw _b_.ValueError.$factory("byte must be in range(0, 256)")} -return $.self.source.slice(start,$.end==-1 ? undefined :$.end). -lastIndexOf(sub)+start}else if(! sub.__class__){throw _b_.TypeError.$factory("first argument must be a bytes-like "+ -"object, not '"+$B.class_name($.sub)+"'")}else if(! sub.__class__.$buffer_protocol){throw _b_.TypeError.$factory("first argument must be a bytes-like "+ -"object, not '"+$B.class_name(sub)+"'")} -end=end==-1 ? self.source.length :Math.min(self.source.length,end) -var len=sub.source.length -for(var i=end-len;i >=start;--i){var chunk=self.source.slice(i,i+len),found=true -for(var j=0;j < len;j++){if(chunk[j]!=sub.source[j]){found=false -break}} -if(found){return i}} -return-1} -bytes.rindex=function(){var $=$B.args('rfind',4,{self:null,sub:null,start:null,end:null},['self','sub','start','end'],arguments,{start:0,end:-1},null,null) -var index=bytes.rfind($.self,$.sub,$.start,$.end) -if(index==-1){throw _b_.ValueError.$factory("subsection not found")} -return index} -bytes.rjust=function(){var $=$B.args('rjust',3,{self:null,width:null,fillbyte:null},['self','width','fillbyte'],arguments,{fillbyte:bytes.$factory([32])},null,null) -if(!$.fillbyte.__class__){throw _b_.TypeError.$factory("argument 2 must be a byte string of length 1, "+ -"not '"+$B.class_name($.fillbyte)+"'")}else if(!$.fillbyte.__class__.$buffer_protocol){throw _b_.TypeError.$factory("argument 2 must be a byte string of length 1, "+ -"not '"+$B.class_name($.fillbyte)+"'")} -var padding=[],count=$.width-$.self.source.length -for(var i=0;i < count;++i){padding.push($.fillbyte.source[0])} -return bytes.$factory(padding.concat($.self.source))} -bytes.rpartition=function(){var $=$B.args('rpartition',2,{self:null,sep:null},['self','sep'],arguments,{},null,null) -if(!$.sep.__class__){throw _b_.TypeError.$factory("a bytes-like object is required, "+ -"not '"+$B.class_name($.sep)+"'")}else if(!$.sep.__class__.$buffer_protocol){throw _b_.TypeError.$factory("a bytes-like object is required, "+ -"not '"+$B.class_name($.sep)+"'")} -var len=$.sep.source.length,src=$.self.source,i=bytes.rfind($.self,$.sep) -return _b_.tuple.$factory([bytes.$factory(src.slice(0,i)),bytes.$factory(src.slice(i,i+len)),bytes.$factory(src.slice(i+len)) -])} -bytes.rstrip=function(self,cars){return _strip(self,cars,'r')} -bytes.split=function(){var $=$B.args('split',2,{self:null,sep:null},['self','sep'],arguments,{},null,null),res=[],start=0,stop=0 -if(! $.sep.__class__ ){throw _b_.TypeError.$factory("a bytes-like object is required, "+ -"not '"+$B.class_name($.sep)+"'")}else if(! $.sep.__class__.$buffer_protocol){throw _b_.TypeError.$factory("a bytes-like object is required, "+ -"not '"+$B.class_name($.sep)+"'")} -var seps=$.sep.source,len=seps.length,src=$.self.source,blen=src.length -while(stop < blen){var match=true -for(var i=0;i < len && match;i++){if(src[stop+i]!=seps[i]){match=false}} -if(match){res.push(bytes.$factory(src.slice(start,stop))) -start=stop+len -stop=start}else{stop++}} -if(match ||(stop > start)){res.push(bytes.$factory(src.slice(start,stop)))} -return res} -bytes.splitlines=function(self){var $=$B.args('splitlines',2,{self:null,keepends:null},['self','keepends'],arguments,{keepends:false},null,null) -if(!_b_.isinstance($.keepends,[_b_.bool,_b_.int])){throw _b_.TypeError('integer argument expected, got '+ -$B.get_class($.keepends).__name)} -var keepends=_b_.int.$factory($.keepends),res=[],source=$.self.source,start=0,pos=0 -if(! source.length){return res} -while(pos < source.length){if(pos < source.length-1 && source[pos]==0x0d && -source[pos+1]==0x0a){res.push(bytes.$factory(source.slice(start,keepends ? pos+2 :pos))) -start=pos=pos+2}else if(source[pos]==0x0d ||source[pos]==0x0a){res.push(bytes.$factory(source.slice(start,keepends ? pos+1 :pos))) -start=pos=pos+1}else{pos++}} -if(start < source.length){res.push(bytes.$factory(source.slice(start)))} -return res} -bytes.startswith=function(){var $=$B.args('startswith',3,{self:null,prefix:null,start:null},['self','prefix','start'],arguments,{start:0},null,null),start=$.start -if(_b_.isinstance($.prefix,bytes)){var res=true -for(var i=0;i < $.prefix.source.length && res;i++){res=$.self.source[start+i]==$.prefix.source[i]} -return res}else if(_b_.isinstance($.prefix,_b_.tuple)){var items=[] -for(var i=0;i < $.prefix.length;i++){if(_b_.isinstance($.prefix[i],bytes)){items=items.concat($.prefix[i].source)}else{throw _b_.TypeError.$factory("startswith first arg must be "+ -"bytes or a tuple of bytes, not "+ -$B.class_name($.prefix))}} -var prefix=bytes.$factory(items) -return bytes.startswith($.self,prefix,start)}else{throw _b_.TypeError.$factory("startswith first arg must be bytes "+ -"or a tuple of bytes, not "+$B.class_name($.prefix))}} -bytes.strip=function(self,cars){var res=bytes.lstrip(self,cars) -return bytes.rstrip(res,cars)} -bytes.swapcase=function(self){var src=self.source,len=src.length,buffer=src.slice() -for(var i=0;i < len;++i){if(buffer[i]> 96 && buffer[i]< 123){buffer[i]-=32}else if(buffer[i]> 64 && buffer[i]< 91){buffer[i]+=32}} -return bytes.$factory(buffer)} -bytes.title=function(self){var src=self.source,len=src.length -buffer=src.slice(),current_char_is_letter=false,prev_char_was_letter=false,is_uppercase=false,is_lowercase=false -for(var i=0;i < len;++i){is_lowercase=buffer[i]> 96 && buffer[i]< 123 -is_uppercase=buffer[i]> 64 && buffer[i]< 91 -current_char_is_letter=is_lowercase ||is_uppercase -if(current_char_is_letter){if(prev_char_was_letter && is_uppercase){buffer[i]+=32}else if(! prev_char_was_letter && is_lowercase){buffer[i]-=32}} -prev_char_was_letter=current_char_is_letter} -return bytes.$factory(buffer)} -bytes.translate=function(self,table,_delete){if(_delete===undefined){_delete=[]}else if(_b_.isinstance(_delete,bytes)){_delete=_delete.source}else{throw _b_.TypeError.$factory("Type "+ -$B.get_class(_delete).__name+" doesn't support the buffer API")} -var res=[],pos=0 -if(_b_.isinstance(table,bytes)&& table.source.length==256){for(var i=0,len=self.source.length;i < len;i++){if(_delete.indexOf(self.source[i])>-1){continue} -res[pos++]=table.source[self.source[i]]}} -return bytes.$factory(res)} -var _upper=function(char_code){if(char_code >=97 && char_code <=122){return char_code-32}else{return char_code}} -bytes.upper=function(self){var _res=[],pos=0 -for(var i=0,len=self.source.length;i < len;i++){if(self.source[i]){_res[pos++]=_upper(self.source[i])}} -return bytes.$factory(_res)} -bytes.zfill=function(self,width){var buffer=self.source.slice(),prefix_offset=(buffer[0]==43 ||buffer[0]==45)? 1 :0 -var count=width-self.source.length -var padding=[] -for(var i=0;i < count;++i){padding.push(48)} -buffer.splice.apply(buffer,[prefix_offset,0].concat(padding)) -return bytes.$factory(buffer)} -function $UnicodeEncodeError(encoding,code_point,position){throw _b_.UnicodeEncodeError.$factory("'"+encoding+ -"' codec can't encode character "+_b_.hex(code_point)+ -" in position "+position)} -function $UnicodeDecodeError(encoding,position){throw _b_.UnicodeDecodeError.$factory("'"+encoding+ -"' codec can't decode bytes in position "+position)} -function _hex(_int){return _int.toString(16)} -function _int(hex){return parseInt(hex,16)} -function normalise(encoding){var enc=encoding.toLowerCase() -if(enc.substr(0,7)=="windows"){enc="cp"+enc.substr(7)} -if(enc.startsWith("cp")||enc.startsWith("iso")){enc=enc.replace("-","")} -enc=enc.replace(/-/g,"_") -return enc} -function load_decoder(enc){ -if(to_unicode[enc]===undefined){var mod=_b_.__import__("encodings."+enc) -if(mod[enc].getregentry){to_unicode[enc]=$B.$getattr(mod[enc].getregentry(),"decode")}}} -function load_encoder(enc){ -if(from_unicode[enc]===undefined){var mod=_b_.__import__("encodings."+enc) -if(mod[enc].getregentry){from_unicode[enc]=$B.$getattr(mod[enc].getregentry(),"encode")}}} -var decode=$B.decode=function(obj,encoding,errors){var s="",b=obj.source,enc=normalise(encoding),has_surrogate=false -switch(enc){case "utf_8": -case "utf-8": -case "utf8": -case "U8": -case "UTF": -var pos=0,s="",err_info -while(pos < b.length){var byte=b[pos] -err_info=null -if(!(byte & 0x80)){ -s+=String.fromCodePoint(byte) -pos++}else if((byte >> 5)==6){ -if(b[pos+1]===undefined){err_info=[byte,pos,"end"]}else if((b[pos+1]& 0xc0)!=0x80){err_info=[byte,pos,"continuation"]} -if(err_info !==null){if(errors=="ignore"){pos++}else{throw _b_.UnicodeDecodeError.$factory( -"'utf-8' codec can't decode byte 0x"+ -err_info[0].toString(16)+" in position "+ -err_info[1]+ -(err_info[2]=="end" ? ": unexpected end of data" : -": invalid continuation byte"))}}else{var cp=byte & 0x1f -cp <<=6 -cp+=b[pos+1]& 0x3f -s+=String.fromCodePoint(cp) -pos+=2}}else if((byte >> 4)==14){ -if(b[pos+1]===undefined){err_info=[byte,pos,"end",pos+1]}else if((b[pos+1]& 0xc0)!=0x80){err_info=[byte,pos,"continuation",pos+2]}else if(b[pos+2]===undefined){err_info=[byte,pos+'-'+(pos+1),"end",pos+2]}else if((b[pos+2]& 0xc0)!=0x80){err_info=[byte,pos,"continuation",pos+3]} -if(err_info !==null){if(errors=="ignore"){pos=err_info[3]}else if(errors=="surrogateescape"){for(var i=pos;i < err_info[3];i++){s+=String.fromCodePoint(0xdc80+b[i]-0x80)} -pos=err_info[3]}else{throw _b_.UnicodeDecodeError.$factory( -"'utf-8' codec can't decode byte 0x"+ -err_info[0].toString(16)+" in position "+ -err_info[1]+ -(err_info[2]=="end" ? ": unexpected end of data" : -": invalid continuation byte"))}}else{var cp=byte & 0xf -cp=cp << 12 -cp+=(b[pos+1]& 0x3f)<< 6 -cp+=b[pos+2]& 0x3f -s+=String.fromCodePoint(cp) -pos+=3}}else if((byte >> 3)==30){ -has_surrogate=true -if(b[pos+1]===undefined){err_info=[byte,pos,"end",pos+1]}else if((b[pos+1]& 0xc0)!=0x80){err_info=[byte,pos,"continuation",pos+2]}else if(b[pos+2]===undefined){err_info=[byte,pos+'-'+(pos+1),"end",pos+2]}else if((b[pos+2]& 0xc0)!=0x80){err_info=[byte,pos,"continuation",pos+3]}else if(b[pos+3]===undefined){err_info=[byte,pos+'-'+(pos+1)+'-'+(pos+2),"end",pos+3]}else if((b[pos+2]& 0xc0)!=0x80){err_info=[byte,pos,"continuation",pos+3]} -if(err_info !==null){if(errors=="ignore"){pos=err_info[3]}else if(errors=="surrogateescape"){for(var i=pos;i < err_info[3];i++){s+=String.fromCodePoint(0xdc80+b[i]-0x80)} -pos=err_info[3]}else{throw _b_.UnicodeDecodeError.$factory( -"'utf-8' codec can't decode byte 0x"+ -err_info[0].toString(16)+" in position "+ -err_info[1]+ -(err_info[2]=="end" ? ": unexpected end of data" : -": invalid continuation byte"))}}else{var cp=byte & 0xf -cp=cp << 18 -cp+=(b[pos+1]& 0x3f)<< 12 -cp+=(b[pos+2]& 0x3f)<< 6 -cp+=(b[pos+3]& 0x3f) -s+=String.fromCodePoint(cp) -pos+=4}}else{if(errors=="ignore"){pos++}else if(errors=="surrogateescape"){s+=String.fromCodePoint(0xdc80+b[pos]-0x80) -pos++}else{throw _b_.UnicodeDecodeError.$factory( -"'utf-8' codec can't decode byte 0x"+ -byte.toString(16)+" in position "+pos+ -": invalid start byte")}}} -if(has_surrogate){return _b_.str.$surrogate.$factory(s)} -return s -case "latin_1": -case "windows1252": -case "iso-8859-1": -case "iso8859-1": -case "8859": -case "cp819": -case "latin": -case "latin1": -case "L1": -b.forEach(function(item){s+=String.fromCharCode(item)}) -break -case "unicode_escape": -if(obj.__class__===bytes ||obj.__class__===bytearray){obj=decode(obj,"latin-1","strict")} -return obj.replace(/\\n/g,"\n"). -replace(/\\a/g,"\u0007"). -replace(/\\b/g,"\b"). -replace(/\\f/g,"\f"). -replace(/\\t/g,"\t"). -replace(/\\'/g,"'"). -replace(/\\"/g,'"') -case "raw_unicode_escape": -if(obj.__class__===bytes ||obj.__class__===bytearray){obj=decode(obj,"latin-1","strict")} -return obj.replace(/\\u([a-fA-F0-9]{4})/g,function(mo){var cp=parseInt(mo.substr(2),16) -return String.fromCharCode(cp)}) -case "ascii": -for(var i=0,len=b.length;i < len;i++){var cp=b[i] -if(cp <=127){s+=String.fromCharCode(cp)}else{if(errors=="ignore"){}else{var msg="'ascii' codec can't decode byte 0x"+ -cp.toString(16)+" in position "+i+ -": ordinal not in range(128)" -throw _b_.UnicodeDecodeError.$factory(msg)}}} -break -default: -try{load_decoder(enc)}catch(err){console.log(b,encoding,"error load_decoder",err) -throw _b_.LookupError.$factory("unknown encoding: "+enc)} -return to_unicode[enc](obj)[0]} -return s} -var encode=$B.encode=function(){var $=$B.args("encode",3,{s:null,encoding:null,errors:null},["s","encoding","errors"],arguments,{encoding:"utf-8",errors:"strict"},null,null),s=$.s,encoding=$.encoding,errors=$.errors -var t=[],pos=0,enc=normalise(encoding) -switch(enc){case "utf-8": -case "utf_8": -case "utf8": -var res=[] -for(var i=0,len=s.length;i < len;i++){var cp=s.charCodeAt(i) -if(cp < 0x7f){res.push(cp)}else if(cp < 0x7ff){res.push(0xc0+(cp >> 6),0x80+(cp & 0x3f))}else if(cp < 0xffff){res.push(0xe0+(cp >> 12),0x80+((cp & 0xfff)>> 6),0x80+(cp & 0x3f))}else{console.log("4 bytes")}} -return res -case "latin": -case "latin1": -case "latin-1": -case "latin_1": -case "L1": -case "iso8859_1": -case "iso_8859_1": -case "8859": -case "cp819": -case "windows1252": -for(var i=0,len=s.length;i < len;i++){var cp=s.charCodeAt(i) -if(cp <=255){t[pos++]=cp} -else if(errors !="ignore"){$UnicodeEncodeError(encoding,i)}} -break -case "ascii": -for(var i=0,len=s.length;i < len;i++){var cp=s.charCodeAt(i) -if(cp <=127){t[pos++]=cp} -else if(errors !="ignore"){$UnicodeEncodeError(encoding,i)}} -break -case "raw_unicode_escape": -for(var i=0,len=s.length;i < len;i++){var cp=s.charCodeAt(i) -if(cp < 256){t[pos++]=cp}else{var us=cp.toString(16) -if(us.length % 2){us="0"+us} -us="\\u"+us -for(var j=0;j < us.length;j++){t[pos++]=us.charCodeAt(j)}}} -break -default: -try{load_encoder(enc)}catch(err){throw _b_.LookupError.$factory("unknown encoding: "+encoding)} -t=from_unicode[enc](s)[0].source} -return t} -bytes.$factory=function(source,encoding,errors){var $=$B.args("bytes",3,{source:null,encoding:null,errors:null},["source","encoding","errors"],arguments,{source:[],encoding:"utf-8",errors:"strict"},null,null) -return bytes.$new(bytes,$.source,$.encoding,$.errors)} -bytes.__class__=_b_.type -bytes.$is_class=true -for(var attr in bytes){if(bytearray[attr]===undefined && typeof bytes[attr]=="function"){bytearray[attr]=(function(_attr){return function(){return bytes[_attr].apply(null,arguments)}})(attr)}} -$B.set_func_names(bytes,"builtins") -bytes.fromhex=_b_.classmethod.$factory(bytes.fromhex) -$B.set_func_names(bytearray,"builtins") -bytearray.fromhex=_b_.classmethod.$factory(bytearray.fromhex) -_b_.bytes=bytes -_b_.bytearray=bytearray})(__BRYTHON__) -; -;(function($B){var _b_=$B.builtins,object=_b_.object,$N=_b_.None -function create_type(obj){return $B.get_class(obj).$factory()} -function clone(obj){var res=create_type(obj) -res.$items=obj.$items.slice() -for(key in obj.$hashes){res.$hashes[key]=obj.$hashes[key]} -return res} -var set={__class__:_b_.type,$infos:{__module__:"builtins",__name__:"set"},$is_class:true,$native:true} -set.__add__=function(self,other){throw _b_.TypeError.$factory( -"unsupported operand type(s) for +: 'set' and "+typeof other)} -set.__and__=function(self,other,accept_iter){try{$test(accept_iter,other)} -catch(err){return _b_.NotImplemented} -var res=create_type(self) -for(var i=0,len=self.$items.length;i < len;i++){if(_b_.getattr(other,"__contains__")(self.$items[i])){set.add(res,self.$items[i])}} -return res} -set.__contains__=function(self,item){if(self.$simple){if(typeof item=="number" ||item instanceof Number){if(isNaN(item)){ -for(var i=self.$items.length-1;i >=0;i--){if(isNaN(self.$items[i])){return true}} -return false}else if(item instanceof Number){return self.$numbers.indexOf(item.valueOf())>-1}else{return self.$items.indexOf(item)>-1}}else if(typeof item=="string"){return self.$items.indexOf(item)>-1}} -if(! _b_.isinstance(item,set)){$B.$getattr(item,"__hash__")} -var hash=_b_.hash(item) -if(self.$hashes[hash]){for(var i=0,len=self.$hashes[hash].length;i < len;i++){if($B.rich_comp("__eq__",self.$hashes[hash][i],item)){return true}}} -return false} -set.__eq__=function(self,other){ -if(other===undefined){return self===set} -if(_b_.isinstance(other,[_b_.set,_b_.frozenset])){if(other.$items.length==self.$items.length){for(var i=0,len=self.$items.length;i < len;i++){if(set.__contains__(self,other.$items[i])===false){return false}} -return true} -return false} -return _b_.NotImplemented} -set.__format__=function(self,format_string){return set.__str__(self)} -set.__ge__=function(self,other){if(_b_.isinstance(other,[set,frozenset])){return set.__le__(other,self)} -return _b_.NotImplemented} -set.__gt__=function(self,other){if(_b_.isinstance(other,[set,frozenset])){return set.__lt__(other,self)} -return _b_.NotImplemented} -set.__hash__=_b_.None -set.__init__=function(self,iterable,second){if(second===undefined){if(Array.isArray(iterable)){for(var i=0,len=iterable.length;i < len;i++){$add(self,iterable[i])} -return $N}} -var $=$B.args("__init__",2,{self:null,iterable:null},["self","iterable"],arguments,{iterable:[]},null,null),self=$.self,iterable=$.iterable -if(_b_.isinstance(iterable,[set,frozenset])){self.$items=iterable.$items.slice() -self.$hashes={} -for(var key in iterable.$hashes){self.$hashes[key]=iterable.$hashes[key]} -return $N} -var it=$B.$iter(iterable) -while(1){try{var item=_b_.next(it) -$add(self,item)}catch(err){if(_b_.isinstance(err,_b_.StopIteration)){break} -throw err}} -return $N} -var set_iterator=$B.make_iterator_class("set iterator") -set.__iter__=function(self){self.$items.sort() -return set_iterator.$factory(self.$items)} -set.__le__=function(self,other){ -if(_b_.isinstance(other,[set,frozenset])){var cfunc=_b_.getattr(other,"__contains__") -for(var i=0,len=self.$items.length;i < len;i++){if(! cfunc(self.$items[i])){return false}} -return true}else{return _b_.NotImplemented}} -set.__len__=function(self){return self.$items.length} -set.__lt__=function(self,other){if(_b_.isinstance(other,[set,frozenset])){return set.__le__(self,other)&& -set.__len__(self)< _b_.getattr(other,"__len__")()}else{return _b_.NotImplemented}} -set.__mro__=[_b_.object] -set.__new__=function(cls){if(cls===undefined){throw _b_.TypeError.$factory("set.__new__(): not enough arguments")} -return{ -__class__:cls,$simple:true,$items:[],$numbers:[], -$hashes:{}}} -set.__or__=function(self,other,accept_iter){ -var res=clone(self),func=_b_.getattr($B.$iter(other),"__next__") -while(1){try{set.add(res,func())} -catch(err){if(_b_.isinstance(err,_b_.StopIteration)){break} -throw err}} -res.__class__=self.__class__ -return res} -set.__rand__=function(self,other){ -return set.__and__(self,other)} -set.__reduce__=function(self){return _b_.tuple.$factory([self.__class__,_b_.tuple.$factory([self.$items]),$N])} -set.__reduce_ex__=function(self,protocol){return set.__reduce__(self)} -set.__rsub__=function(self,other){ -return set.__sub__(self,other)} -set.__rxor__=function(self,other){ -return set.__xor__(self,other)} -set.__str__=set.__repr__=function(self){var klass_name=$B.class_name(self) -if(self.$items.length===0){return klass_name+"()"} -var head=klass_name+"({",tail="})" -if(head=="set({"){head="{";tail="}"} -var res=[] -if($B.repr.enter(self)){return klass_name+"(...)"} -self.$items.sort() -for(var i=0,len=self.$items.length;i < len;i++){var r=_b_.repr(self.$items[i]) -if(r===self ||r===self.$items[i]){res.push("{...}")} -else{res.push(r)}} -res=res.join(", ") -$B.repr.leave(self) -return head+res+tail} -set.__sub__=function(self,other,accept_iter){ -try{$test(accept_iter,other,"-")} -catch(err){return _b_.NotImplemented} -var res=create_type(self),cfunc=_b_.getattr(other,"__contains__"),items=[] -for(var i=0,len=self.$items.length;i < len;i++){if(! cfunc(self.$items[i])){items.push(self.$items[i])}} -set.__init__.call(null,res,items) -return res} -set.__xor__=function(self,other,accept_iter){ -try{$test(accept_iter,other,"^")} -catch(err){return _b_.NotImplemented} -var res=create_type(self),cfunc=_b_.getattr(other,"__contains__") -for(var i=0,len=self.$items.length;i < len;i++){if(! cfunc(self.$items[i])){set.add(res,self.$items[i])}} -for(var i=0,len=other.$items.length;i < len;i++){if(! set.__contains__(self,other.$items[i])){set.add(res,other.$items[i])}} -return res} -function $test(accept_iter,other,op){if(accept_iter===undefined && -! _b_.isinstance(other,[set,frozenset])){throw _b_.TypeError.$factory("unsupported operand type(s) for "+op+ -": 'set' and '"+$B.class_name(other)+"'")}} -$B.make_rmethods(set) -function $add(self,item){var $simple=false -if(typeof item==="string" ||typeof item==="number" || -item instanceof Number){$simple=true} -if($simple){var ix=self.$items.indexOf(item) -if(ix==-1){if(item instanceof Number && -self.$numbers.indexOf(item.valueOf())>-1){}else if(typeof item=="number" && -self.$numbers.indexOf(item)>-1){}else{self.$items.push(item) -var value=item.valueOf() -if(typeof value=="number"){self.$numbers.push(value)}}}else{ -if(item !==self.$items[ix]){self.$items.push(item)}}}else{ -var hashvalue=_b_.hash(item) -var items=self.$hashes[hashvalue] -if(items===undefined){self.$hashes[hashvalue]=[item] -self.$items.push(item)}else{var items=self.$hashes[hashvalue],cfunc=function(other){return $B.rich_comp("__eq__",item,other)} -for(var i=0,len=items.length;i < len;i++){if(cfunc(items[i])){ -return $N}} -self.$hashes[hashvalue].push(item) -self.$items.push(item)}} -return $N} -set.add=function(){var $=$B.args("add",2,{self:null,item:null},["self","item"],arguments,{},null,null),self=$.self,item=$.item -return $add(self,item)} -set.clear=function(){var $=$B.args("clear",1,{self:null},["self"],arguments,{},null,null) -$.self.$items=[] -$.self.$hashes={} -return $N} -set.copy=function(){var $=$B.args("copy",1,{self:null},["self"],arguments,{},null,null) -if(_b_.isinstance($.self,frozenset)){return $.self} -var res=set.$factory() -$.self.$items.forEach(function(item){res.$items.push(item)}) -$.self.$numbers.forEach(function(item){res.$numbers.push(item)}) -for(key in self.$hashes){res.$hashes[key]=self.$hashes[key]} -return res} -set.difference_update=function(self){var $=$B.args("difference_update",1,{self:null},["self"],arguments,{},"args",null) -for(var i=0;i < $.args.length;i++){var s=set.$factory($.args[i]),_next=_b_.getattr($B.$iter(s),"__next__"),item -while(true){try{item=_next() -var _type=typeof item -if(_type=="string" ||_type=="number"){var _index=self.$items.indexOf(item) -if(_index >-1){self.$items.splice(_index,1)}}else{for(var j=0;j < self.$items.length;j++){if($B.rich_comp("__eq__",self.$items[j],item)){self.$items.splice(j,1) -var hash=_b_.hash(item) -if(self.$hashes[hash]){for(var k=0;k < self.$hashes[hash].length;k++){if($B.rich_comp("__eq__",self.$hashes[hash][k],item)){self.$hashes[hash].splice(k,1) -break}}}}}}}catch(err){if(_b_.isinstance(err,_b_.StopIteration)){break} -throw err}}} -return $N} -set.discard=function(){var $=$B.args("discard",2,{self:null,item:null},["self","item"],arguments,{},null,null) -try{set.remove($.self,$.item)} -catch(err){if(!_b_.isinstance(err,[_b_.KeyError,_b_.LookupError])){throw err}} -return $N} -set.intersection_update=function(){ -var $=$B.args("intersection_update",1,{self:null},["self"],arguments,{},"args",null),self=$.self -for(var i=0;i < $.args.length;i++){var remove=[],s=set.$factory($.args[i]) -for(var j=0;j < self.$items.length;j++){var _item=self.$items[j],_type=typeof _item -if(_type=="string" ||_type=="number"){if(s.$items.indexOf(_item)==-1){remove.push(j)}}else{var found=false,hash=_b_.hash(_item) -if(s.$hashes[hash]){var hashes=s.$hashes[hash] -for(var k=0;! found && k < hashes.length;k++){if($B.rich_comp("__eq__",hashes[k],_item)){found=true}} -if(! found){remove.push(j) -hashes=self.$hashes[hash] -for(var k=0;! found && k < hashes.length;k++){if($B.rich_comp("__eq__",hashes[k],_item)){self.$hashes.splice(k,1)}}}}}} -remove.sort(function(x,y){return x-y}).reverse() -for(var j=0;j < remove.length;j++){self.$items.splice(remove[j],1)}} -return $N} -set.isdisjoint=function(){var $=$B.args("is_disjoint",2,{self:null,other:null},["self","other"],arguments,{},null,null) -for(var i=0,len=$.self.$items.length;i < len;i++){if(_b_.getattr($.other,"__contains__")($.self.$items[i])){return false}} -return true} -set.pop=function(self){if(self.$items.length===0){throw _b_.KeyError.$factory('pop from an empty set')} -var item=self.$items.pop() -if(typeof item !="string" && typeof item !="number"){ -var hash=_b_.hash(item),items=self.$hashes[hash] -for(var k=0;k < items.length;k++){if($B.rich_comp("__eq__",items[k],item)){self.$hashes[hash].splice(k,1) -break}}} -return item} -set.remove=function(self,item){ -var $=$B.args("remove",2,{self:null,item:null},["self","item"],arguments,{},null,null),self=$.self,item=$.item -if(! _b_.isinstance(item,set)){_b_.hash(item)} -if(typeof item=="string" ||typeof item=="number"){var _i=self.$items.indexOf(item) -if(_i==-1){throw _b_.KeyError.$factory(item)} -self.$items.splice(_i,1) -if(typeof item=="number"){self.$numbers.splice(self.$numbers.indexOf(item),1)} -return $N} -var hash=_b_.hash(item) -if(self.$hashes[hash]){ -for(var i=0,len=self.$items.length;i < len;i++){if($B.rich_comp("__eq__",self.$items[i],item)){self.$items.splice(i,1) -if(item instanceof Number){self.$numbers.splice(self.$numbers.indexOf(item.valueOf()),1)} -break}} -for(var i=0,len=self.$hashes[hash].length;i < len;i++){if($B.rich_comp("__eq__",self.$hashes[hash][i],item)){self.$hashes[hash].splice(i,1) -break}} -return $N} -throw _b_.KeyError.$factory(item)} -set.symmetric_difference_update=function(self,s){ -var $=$B.args("symmetric_difference_update",2,{self:null,s:null},["self","s"],arguments,{},null,null),self=$.self,s=$.s -var _next=_b_.getattr($B.$iter(s),"__next__"),item,remove=[],add=[] -while(true){try{item=_next() -var _type=typeof item -if(_type=="string" ||_type=="number"){var _index=self.$items.indexOf(item) -if(_index >-1){remove.push(_index)}else{add.push(item)}}else{var found=false -for(var j=0;! found && j < self.$items.length;j++){if($B.rich_comp("__eq__",self.$items[j],item)){remove.push(j) -found=true}} -if(! found){add.push(item)}}}catch(err){if(_b_.isinstance(err,_b_.StopIteration)){break} -throw err}} -remove.sort(function(x,y){return x-y}).reverse() -for(var i=0;i < remove.length;i++){if(remove[i]!=remove[i-1]){self.$items.splice(remove[i],1)}} -for(var i=0;i < add.length;i++){set.add(self,add[i])} -return $N} -set.update=function(self){ -var $=$B.args("update",1,{self:null},["self"],arguments,{},"args",null) -for(var i=0;i < $.args.length;i++){var other=set.$factory($.args[i]) -for(var j=0,_len=other.$items.length;j < _len;j++){$add(self,other.$items[j])}} -return $N} -set.difference=function(){var $=$B.args("difference",1,{self:null},["self"],arguments,{},"args",null) -if($.args.length==0){return set.copy($.self)} -var res=clone($.self) -for(var i=0;i < $.args.length;i++){res=set.__sub__(res,set.$factory($.args[i]),true)} -return res} -var fc=set.difference+"" -eval("set.intersection = "+ -fc.replace(/difference/g,"intersection").replace("__sub__","__and__")) -eval("set.symmetric_difference = "+ -fc.replace(/difference/g,"symmetric_difference").replace("__sub__","__xor__")) -eval("set.union = "+ -fc.replace(/difference/g,"union").replace("__sub__","__or__")) -set.issubset=function(){var $=$B.args("issubset",2,{self:null,other:null},["self","other"],arguments,{},"args",null),func=_b_.getattr($.other,"__contains__") -for(var i=0,len=$.self.$items.length;i < len;i++){if(! func($.self.$items[i])){return false}} -return true} -set.issuperset=function(){var $=$B.args("issuperset",2,{self:null,other:null},["self","other"],arguments,{},"args",null) -var func=_b_.getattr($.self,"__contains__"),it=$B.$iter($.other) -while(true){try{var item=_b_.next(it) -if(! func(item)){return false}}catch(err){if(_b_.isinstance(err,_b_.StopIteration)){return true} -throw err}} -return true} -function $accept_only_set(f,op){return function(self,other,accept_iter){$test(accept_iter,other,op) -f(self,other) -return self}} -set.__iand__=$accept_only_set(set.intersection_update,"&=") -set.__isub__=$accept_only_set(set.difference_update,"-=") -set.__ixor__=$accept_only_set(set.symmetric_difference_update,"^=") -set.__ior__=$accept_only_set(set.update,"|=") -set.$factory=function(){ -var res={__class__:set,$simple:true,$items:[],$numbers:[],$hashes:{}} -var args=[res].concat(Array.prototype.slice.call(arguments)) -set.__init__.apply(null,args) -return res} -$B.set_func_names(set,"builtins") -var frozenset={__class__:_b_.type,__mro__:[object],$infos:{__module__:"builtins",__name__:"frozenset"},$is_class:true,$native:true} -for(var attr in set){switch(attr){case "add": -case "clear": -case "discard": -case "pop": -case "remove": -case "update": -break -default: -if(frozenset[attr]==undefined){if(typeof set[attr]=="function"){frozenset[attr]=(function(x){return function(){return set[x].apply(null,arguments)}})(attr)}else{frozenset[attr]=set[attr]}}}} -frozenset.__hash__=function(self){if(self===undefined){return frozenset.__hashvalue__ ||$B.$py_next_hash--} -if(self.__hashvalue__ !==undefined){return self.__hashvalue__} -var _hash=1927868237 -_hash*=self.$items.length -for(var i=0,len=self.$items.length;i < len;i++){var _h=_b_.hash(self.$items[i]) -_hash ^=((_h ^ 89869747)^(_h << 16))*3644798167} -_hash=_hash*69069+907133923 -if(_hash==-1){_hash=590923713} -return self.__hashvalue__=_hash} -frozenset.__init__=function(){ -return $N} -frozenset.__new__=function(cls){if(cls===undefined){throw _b_.TypeError.$factory( -"frozenset.__new__(): not enough arguments")} -return{ -__class__:cls,$simple:true,$items:[],$numbers:[],$hashes:{}}} -var singleton_id=Math.floor(Math.random()*Math.pow(2,40)) -function empty_frozenset(){var res=frozenset.__new__(frozenset) -res.$id=singleton_id -return res} -frozenset.$factory=function(){var $=$B.args("frozenset",1,{iterable:null},["iterable"],arguments,{iterable:null},null,null) -if($.iterable===null){return empty_frozenset()} -else if($.iterable.__class__==frozenset){return $.iterable} -var res=set.$factory($.iterable) -if(res.$items.length==0){return empty_frozenset()} -res.__class__=frozenset -return res} -$B.set_func_names(frozenset,"builtins") -_b_.set=set -_b_.frozenset=frozenset})(__BRYTHON__) -; -;(function($B){var _b_=$B.builtins -var object=_b_.object -var _window=self; -function to_simple(value){switch(typeof value){case 'string': -case 'number': -return value -case 'boolean': -return value ? "true" :"false" -case 'object': -if(value===_b_.None){return 'null'}else if(value instanceof Number){return value.valueOf()} -default: -console.log("erreur",value) -throw _b_.TypeError.$factory("keys must be str, int, "+ -"float, bool or None, not "+$B.class_name(value))}} -$B.pyobj2structuredclone=function(obj,strict){ -strict=strict===undefined ? true :strict -if(typeof obj=="boolean" ||typeof obj=="number" || -typeof obj=="string"){return obj}else if(obj instanceof Number){return obj.valueOf()}else if(obj===_b_.None){return null }else if(Array.isArray(obj)||obj.__class__===_b_.list || -obj.__class__===_b_.tuple){var res=[] -for(var i=0,len=obj.length;i < len;i++){res.push($B.pyobj2structuredclone(obj[i]))} -return res}else if(_b_.isinstance(obj,_b_.dict)){if(strict){if(Object.keys(obj.$numeric_dict).length > 0 || -Object.keys(obj.$object_dict).length > 0){throw _b_.TypeError.$factory("a dictionary with non-string "+ -"keys does not support structured clone")}} -var items=$B.dict_to_list(obj),res={} -for(var i=0,len=items.length;i < len;i++){res[to_simple(items[i][0])]=$B.pyobj2structuredclone(items[i][1])} -return res}else{return obj}} -$B.structuredclone2pyobj=function(obj){if(obj===null){return _b_.None}else if(obj===undefined){return $B.Undefined}else if(typeof obj=="boolean" ||typeof obj=="number" || -typeof obj=="string"){return obj}else if(obj instanceof Number){return obj.valueOf()}else if(Array.isArray(obj)||obj.__class__===_b_.list || -obj.__class__===_b_.tuple){var res=_b_.list.$factory() -for(var i=0,len=obj.length;i < len;i++){res.push($B.structuredclone2pyobj(obj[i]))} -return res}else if(typeof obj=="object"){var res=$B.empty_dict() -for(var key in obj){_b_.dict.$setitem(res,key,$B.structuredclone2pyobj(obj[key]))} -return res}else{console.log(obj,Array.isArray(obj),obj.__class__,_b_.list,obj.__class__===_b_.list) -throw _b_.TypeError.$factory(_b_.str.$factory(obj)+ -" does not support the structured clone algorithm")}} -var JSConstructor={__class__:_b_.type,__mro__:[object],$infos:{__module__:"",__name__:'JSConstructor'},$is_class:true} -JSConstructor.__call__=function(self){ -return function(){var args=[null] -for(var i=0,len=arguments.length;i < len;i++){args.push(pyobj2jsobj(arguments[i]))} -var factory=self.func.bind.apply(self.func,args) -var res=new factory() -return $B.$JS2Py(res)}} -JSConstructor.__getattribute__=function(self,attr){ -if(attr=="__call__"){return function(){var args=[null] -for(var i=0,len=arguments.length;i < len;i++){args.push(pyobj2jsobj(arguments[i]))} -var factory=self.func.bind.apply(self.func,args) -var res=new factory() -return $B.$JS2Py(res)}} -return JSObject.__getattribute__(self,attr)} -JSConstructor.$factory=function(obj){return{ -__class__:JSConstructor,js:obj,func:obj.js_func}} -var jsobj2pyobj=$B.jsobj2pyobj=function(jsobj){switch(jsobj){case true: -case false: -return jsobj} -if(jsobj===undefined){return $B.Undefined} -else if(jsobj===null){return _b_.None} -if(Array.isArray(jsobj)){return _b_.list.$factory(jsobj.map(jsobj2pyobj))} -if(typeof jsobj==='number'){if(jsobj.toString().indexOf('.')==-1){return _b_.int.$factory(jsobj)} -return _b_.float.$factory(jsobj)} -if(jsobj.$nat==='kw'){return jsobj} -if($B.$isNode(jsobj)){return $B.DOMNode.$factory(jsobj)} -return JSObject.$factory(jsobj)} -var pyobj2jsobj=$B.pyobj2jsobj=function(pyobj){ -if(pyobj===true ||pyobj===false){return pyobj} -if(pyobj===_b_.None){return null} -if(pyobj===$B.Undefined){return undefined} -var klass=$B.get_class(pyobj) -if(klass===undefined){ -return pyobj;} -if(klass===JSObject ||klass===JSConstructor){ -if(pyobj.js_func !==undefined){return pyobj.js_func} -return pyobj.js}else if(klass===$B.DOMNode || -klass.__mro__.indexOf($B.DOMNode)>-1){ -return pyobj}else if([_b_.list,_b_.tuple].indexOf(klass)>-1){ -var res=[] -pyobj.forEach(function(item){res.push(pyobj2jsobj(item))}) -return res}else if(klass===_b_.dict ||_b_.issubclass(klass,_b_.dict)){ -var jsobj={} -var items=_b_.list.$factory(_b_.dict.items(pyobj)) -items.forEach(function(item){if(typeof item[1]=='function'){ -item[1].bind(jsobj)} -jsobj[item[0]]=pyobj2jsobj(item[1])}) -return jsobj}else if(klass===_b_.float){ -return pyobj.valueOf()}else if(klass===$B.Function ||klass===$B.method){ -return function(){try{var args=[] -for(var i=0;i < arguments.length;i++){if(arguments[i]===undefined){args.push(_b_.None)} -else{args.push(jsobj2pyobj(arguments[i]))}} -return pyobj2jsobj(pyobj.apply(this,args))}catch(err){console.log(err) -console.log($B.$getattr(err,'info')) -console.log($B.class_name(err)+':',err.args.length > 0 ? err.args[0]:'' ) -throw err}}}else{ -return pyobj}} -var JSObject={__class__:_b_.type,__mro__:[object],$infos:{__module__:"builtins",__name__:'JSObject'}} -JSObject.__bool__=function(self){if(self.js.length !==undefined){return self.js.length > 0} -return(new Boolean(self.js)).valueOf()} -JSObject.__delattr__=function(self,attr){$B.$getattr(self,attr) -delete self.js[attr] -return _b_.None} -JSObject.__dir__=function(self){return Object.keys(self.js)} -JSObject.__getattribute__=function(self,attr){var $test=false -if($test){console.log("get attr",attr,"of",self)} -if(attr.substr(0,2)=='$$'){attr=attr.substr(2)} -if(self.js===null){return object.__getattribute__(None,attr)} -if(attr=="__class__"){return JSObject} -if(attr=="__call__"){if(typeof self.js=="function"){return function(){ -var args=[] -for(var i=0;i < arguments.length;i++){args.push($B.pyobj2jsobj(arguments[i]))} -var res=self.js.apply(null,args) -if(res===undefined){return None} -return $B.JSObject.$factory(res)}}else{throw _b_.AttributeError.$factory("object is not callable")}} -if(self.__class__===JSObject && attr=="bind" && -self.js[attr]===undefined && -self.js['addEventListener']!==undefined){ -attr='addEventListener'} -if(attr=="data" && self.js instanceof MessageEvent){return $B.structuredclone2pyobj(self.js.data)} -var js_attr=self.js[attr] -if(self.js_func && self.js_func[attr]!==undefined){js_attr=self.js_func[attr]} -if(js_attr !==undefined){if($test){console.log("jsattr",js_attr)} -if(typeof js_attr=='function'){ -var res=function(){var args=[] -for(var i=0,len=arguments.length;i < len;i++){var arg=arguments[i] -if(arg !==undefined && arg !==null && -arg.$nat !==undefined){var kw=arg.kw -if(Array.isArray(kw)){kw=$B.extend(js_attr.name,...kw)} -if(Object.keys(kw).length > 0){ -throw _b_.TypeError.$factory( -"A Javascript function can't take "+ -"keyword arguments")}}else{args.push(pyobj2jsobj(arg))}} -if(attr==='replace' && self.js===location){location.replace(args[0]) -return} -var new_this=self.js -if(self.js_func){ -new_this=self.js_func;} -if(this !==null && this !==undefined && this !==_window){new_this=this} -var result=js_attr.apply(new_this,args) -if($test){console.log("result",result,jsobj2pyobj(result))} -return jsobj2pyobj(result)} -res.__repr__=function(){return ''} -res.__str__=function(){return ''} -res.prototype=js_attr.prototype -return{__class__:JSObject,js:res,js_func:js_attr}}else{if($test){console.log("use JS2Py",$B.$JS2Py(js_attr))} -return $B.$JS2Py(js_attr)}}else if(self.js===_window && attr==='$$location'){ -return $Location()} -var res=self.__class__[attr] -if(res===undefined){ -var mro=self.__class__.__mro__ -for(var i=0,len=mro.length;i < len;i++){var v=mro[i][attr] -if(v !==undefined){res=v -break}}} -if(res !==undefined){if($test){console.log("found in klass",res+"")} -if(typeof res==='function'){ -return function(){var args=[self] -for(var i=0,len=arguments.length;i < len;i++){var arg=arguments[i] -if(arg &&(arg.__class__===JSObject || -arg.__class__===JSConstructor)){args.push(arg.js)}else{args.push(arg)}} -return res.apply(self,args)}} -return $B.$JS2Py(res)}else{ -throw _b_.AttributeError.$factory("no attribute "+attr+' for '+ -self.js)}} -JSObject.__getitem__=function(self,rank){if(typeof self.js.length=='number'){if((typeof rank=="number" ||typeof rank=="boolean")&& -typeof self.js.item=='function'){var rank_to_int=_b_.int.$factory(rank) -if(rank_to_int < 0){rank_to_int+=self.js.length} -var res=self.js.item(rank_to_int) -if(res===null){throw _b_.IndexError.$factory(rank)} -return $B.$JS2Py(res)}else if(typeof rank=="string" && -typeof self.js.getNamedItem=='function'){var res=JSObject.$factory(self.js.getNamedItem(rank)) -if(res===undefined){throw _b_.KeyError.$factory(rank)} -return res}} -try{return $B.$call($B.$getattr(self.js,'__getitem__'))(rank)}catch(err){if(self.js[rank]!==undefined){return JSObject.$factory(self.js[rank])} -throw _b_.KeyError.$factory(rank)}} -var JSObject_iterator=$B.make_iterator_class('JS object iterator') -JSObject.__iter__=function(self){var items=[] -if(_window.Symbol && self.js[Symbol.iterator]!==undefined){ -var items=[] -if(self.js.next !==undefined){while(true){var nxt=self.js.next() -if(nxt.done){break} -items.push(jsobj2pyobj(nxt.value))}}else if(self.js.length !==undefined && self.js.item !==undefined){for(var i=0;i < self.js.length;i++){items.push(jsobj2pyobj(self.js.item(i)))}} -return JSObject_iterator.$factory(items)}else if(self.js.length !==undefined && self.js.item !==undefined){ -for(var i=0;i < self.js.length;i++){items.push(JSObject.$factory(self.js.item(i)))} -return JSObject_iterator.$factory(items)} -var _dict=JSObject.to_dict(self) -return _b_.dict.__iter__(_dict)} -JSObject.__le__=function(self,other){if(typeof self.js["appendChild"]=="function"){return $B.DOMNode.__le__($B.DOMNode.$factory(self.js),other)} -return _b_.NotImplemented} -JSObject.__len__=function(self){if(typeof self.js.length=='number'){return self.js.length} -try{return $B.$getattr(self.js,'__len__')()} -catch(err){throw _b_.AttributeError.$factory(self.js+' has no attribute __len__')}} -JSObject.__repr__=function(self){if(self.js instanceof Date){return self.js.toString()} -var proto=Object.getPrototypeOf(self.js) -if(proto){var name=proto.constructor.name -if(name===undefined){ -var proto_str=proto.constructor.toString() -name=proto_str.substring(8,proto_str.length-1)} -return "<"+name+" object>"} -return ""} -JSObject.__setattr__=function(self,attr,value){if(attr.substr && attr.substr(0,2)=='$$'){ -attr=attr.substr(2)} -if(_b_.isinstance(value,JSObject)){self.js[attr]=value.js} -else{self.js[attr]=value -if(typeof value=='function'){self.js[attr]=function(){var args=[] -for(var i=0,len=arguments.length;i < len;i++){args.push($B.$JS2Py(arguments[i]))} -try{return value.apply(null,args)} -catch(err){err=$B.exception(err) -var info=$B.$getattr(err,'info') -if(err.args.length > 0){err.toString=function(){return info+'\n'+$B.class_name(err)+ -': '+_b_.repr(err.args[0])}}else{err.toString=function(){return info+'\n'+$B.class_name(err)}} -console.log(err+'') -throw err}}}}} -JSObject.__setitem__=JSObject.__setattr__ -JSObject.__str__=JSObject.__repr__ -var no_dict={'string':true,'function':true,'number':true,'boolean':true} -JSObject.bind=function(self,evt,func){var js_func=function(ev){return func(jsobj2pyobj(ev))} -self.js.addEventListener(evt,js_func) -return _b_.None} -JSObject.to_dict=function(self){ -return $B.structuredclone2pyobj(self.js)} -JSObject.$factory=function(obj){if(obj===null){return _b_.None} -if(typeof obj=='function'){return{__class__:JSObject,js:obj,js_func:obj}} -var klass=$B.get_class(obj) -if(klass===_b_.float){return _b_.float.$factory(obj)} -if(klass===_b_.list){return $B.JSArray.$factory(obj)} -if(klass !==undefined){return obj} -return{ -__class__:JSObject,js:obj}} -$B.set_func_names(JSObject,"builtins") -$B.JSObject=JSObject -$B.JSConstructor=JSConstructor -function pyargs2jsargs(pyargs){var args=[] -for(var i=0,len=pyargs.length;i < len;i++){var arg=pyargs[i] -if(arg !==undefined && arg !==null && -arg.$nat !==undefined){var kw=arg.kw -if(Array.isArray(kw)){kw=$B.extend(js_attr.name,...kw)} -if(Object.keys(kw).length > 0){ -throw _b_.TypeError.$factory( -"A Javascript function can't take "+ -"keyword arguments")}}else{args.push($B.pyobj2jsobj(arg))}} -return args} -$B.JSObj=$B.make_class("JSObj",function(jsobj){if(Array.isArray(jsobj)){}else if(typeof jsobj=="function"){jsobj.$is_js_func=true} -return jsobj} -) -$B.JSObj.__getattribute__=function(self,attr){var test=false -if(test){console.log("__ga__",self,attr)} -if(attr=="$$new" && typeof self=="function"){ -if(self.$js_func){return function(){var args=pyargs2jsargs(arguments) -return $B.JSObj.$factory(new self.$js_func(...args))}}else{return function(){var args=pyargs2jsargs(arguments) -return $B.JSObj.$factory(new self(...args))}}} -if(typeof attr=="string"){attr=$B.from_alias(attr)} -var js_attr=self[attr] -if(js_attr==undefined && typeof self=="function" && self.$js_func){js_attr=self.$js_func[attr]} -if(js_attr===undefined){if(typeof self.getNamedItem=='function'){var res=self.getNamedItem(attr) -if(res !==undefined){return $B.JSObj.$factory(res)}} -var klass=$B.get_class(self) -if(klass && klass[attr]){var class_attr=klass[attr] -if(typeof class_attr=="function"){return function(){var args=[self] -for(var i=0,len=arguments.length;i < len;i++){args.push(arguments[i])} -return $B.JSObj.$factory(class_attr.apply(null,args))}}else{return class_attr}} -if(attr=="bind" && typeof self.addEventListener=="function"){return function(event,callback){return self.addEventListener(event,callback)}} -throw _b_.AttributeError.$factory(attr)} -if(typeof js_attr==='function'){var res=function(){var args=pyargs2jsargs(arguments),target=self.$js_func ||self -try{var result=js_attr.apply(target,args)}catch(err){console.log("error",err) -console.log(attr,js_attr,args,arguments) -throw err} -if(result===undefined){return $B.Undefined}else if(result===null){return _b_.None} -return $B.JSObj.$factory(result)} -res.prototype=js_attr.prototype -res.$js_func=js_attr -res.__mro__=[_b_.object] -return $B.JSObj.$factory(res)}else{return $B.JSObj.$factory(js_attr)}} -$B.JSObj.__setattr__=function(self,attr,value){if(typeof attr=="string"){attr=$B.from_alias(attr)} -self[attr]=$B.pyobj2structuredclone(value) -return _b_.None} -$B.JSObj.__getitem__=function(self,key){if(typeof key=="string"){return $B.JSObj.__getattribute__(self,key)}else if(typeof key=="number"){if(self[key]!==undefined){return $B.JSObj.$factory(self[key])} -if(typeof self.length=='number'){if((typeof key=="number" ||typeof key=="boolean")&& -typeof self.item=='function'){var rank=_b_.int.$factory(key) -if(rank < 0){rank+=self.length} -var res=self.item(rank) -if(res===null){throw _b_.IndexError.$factory(rank)} -return $B.JSObj.$factory(res)}}} -throw _b_.KeyError.$factory(rank)} -$B.JSObj.__setitem__=$B.JSObj.__setattr__ -$B.JSObj.__iter__=function(self){var items=[] -if(_window.Symbol && self[Symbol.iterator]!==undefined){ -var items=[] -if(self.next !==undefined){while(true){var nxt=self.next() -if(nxt.done){break} -items.push($B.JSObj.$factory(nxt.value))}}else if(self.length !==undefined && self.item !==undefined){for(var i=0;i < self.length;i++){items.push($B.JSObj.$factory(self.item(i)))}} -return JSObject_iterator.$factory(items)}else if(self.length !==undefined && self.item !==undefined){ -for(var i=0;i < self.length;i++){items.push($B.JSObj.$factory(self.js.item(i)))} -return JSObject_iterator.$factory(items)} -var _dict=$B.JSObj.to_dict(self) -return _b_.dict.__iter__(_dict)} -$B.JSObj.__len__=function(self){if(typeof self.length=='number'){return self.length} -throw _b_.AttributeError.$factory(self+' has no attribute __len__')} -$B.JSObj.__repr__=$B.JSObj.__str__=function(self){return ''} -$B.JSObj.bind=function(self,evt,func){ -var js_func=function(ev){return func(jsobj2pyobj(ev))} -self.addEventListener(evt,js_func) -return _b_.None} -$B.JSObj.to_dict=function(self){ -return $B.structuredclone2pyobj(self)} -$B.set_func_names($B.JSObj,"builtins") -$B.JSMeta=$B.make_class("JSMeta") -$B.JSMeta.__call__=function(cls){ -var args=[] -for(var i=1,len=arguments.length;i < len;i++){args.push(arguments[i])} -return new cls.__mro__[0].$js_func(...args)} -$B.JSMeta.__mro__=[_b_.type,_b_.object] -$B.JSMeta.__getattribute__=function(cls,attr){if(cls[attr]!==undefined){return cls[attr]}else if($B.JSMeta[attr]!==undefined){return $B.JSMeta[attr]}else{ -return _b_.type.__getattribute__(cls,attr)}} -$B.JSMeta.__init_subclass__=function(){} -$B.set_func_names($B.JSMeta,"builtins")})(__BRYTHON__) -; -;(function($B){$B.stdlib={} -var pylist=['VFS_import','__future__','_abcoll','_codecs','_collections','_collections_abc','_compat_pickle','_contextvars','_csv','_dummy_thread','_frozen_importlib','_functools','_imp','_io','_markupbase','_operator','_py_abc','_pydecimal','_queue','_random','_socket','_sre','_struct','_sysconfigdata','_sysconfigdata_0_brython_','_testcapi','_thread','_threading_local','_weakref','_weakrefset','abc','antigravity','argparse','atexit','base64','bdb','binascii','bisect','browser.aio','browser.ajax','browser.highlight','browser.html','browser.indexed_db','browser.local_storage','browser.markdown','browser.object_storage','browser.session_storage','browser.svg','browser.template','browser.timer','browser.webcomponent','browser.websocket','browser.webworker','browser.worker','calendar','cmath','cmd','code','codecs','codeop','colorsys','configparser','contextlib','contextvars','copy','copyreg','csv','dataclasses','datetime','decimal','difflib','doctest','enum','errno','external_import','faulthandler','fnmatch','formatter','fractions','functools','gc','genericpath','getopt','gettext','glob','heapq','hmac','imp','inspect','interpreter','io','ipaddress','itertools','json','keyword','linecache','locale','mimetypes','nntplib','ntpath','numbers','opcode','operator','optparse','os','pathlib','pdb','pickle','pkgutil','platform','posixpath','pprint','profile','pwd','py_compile','pydoc','queue','quopri','re','reprlib','select','selectors','shlex','shutil','signal','site','site-packages.__future__','site-packages.docs','site-packages.header','site-packages.test','site-packages.test_sp','socket','sre_compile','sre_constants','sre_parse','stat','string','stringprep','struct','subprocess','sys','sysconfig','tarfile','tb','tempfile','test.namespace_pkgs.module_and_namespace_package.a_test','textwrap','this','threading','time','timeit','token','tokenize','traceback','turtle','types','typing','uu','uuid','warnings','weakref','webbrowser','zipfile','zipimport','zlib'] -for(var i=0;i < pylist.length;i++){$B.stdlib[pylist[i]]=['py']} -var js=['_aio','_ajax','_base64','_binascii','_io_classes','_json','_jsre','_locale','_multiprocessing','_posixsubprocess','_profile','_sre_utils','_string','_strptime','_svg','_warnings','_webcomponent','_webworker','_zlib_utils','aes','array','builtins','dis','hashlib','hmac-md5','hmac-ripemd160','hmac-sha1','hmac-sha224','hmac-sha256','hmac-sha3','hmac-sha384','hmac-sha512','long_int','marshal','math','math1','md5','modulefinder','pbkdf2','posix','rabbit','rabbit-legacy','random','rc4','ripemd160','sha1','sha224','sha256','sha3','sha384','sha512','tripledes','unicodedata'] -for(var i=0;i < js.length;i++){$B.stdlib[js[i]]=['js']} -var pkglist=['browser.widgets','collections','concurrent','concurrent.futures','email','email.mime','encodings','html','http','importlib','logging','multiprocessing','multiprocessing.dummy','pydoc_data','site-packages.simpleaio','site-packages.simpy','site-packages.simpy.resources','site-packages.ui','test','test.encoded_modules','test.leakers','test.namespace_pkgs.not_a_namespace_pkg.foo','test.support','test.test_email','test.test_importlib','test.test_importlib.builtin','test.test_importlib.extension','test.test_importlib.frozen','test.test_importlib.import_','test.test_importlib.source','test.test_json','test.tracedmodules','unittest','unittest.test','unittest.test.testmock','urllib'] -for(var i=0;i < pkglist.length;i++){$B.stdlib[pkglist[i]]=['py',true]}})(__BRYTHON__) -; - -;(function($B){var _b_=$B.builtins,_window=self -var module=$B.module={__class__ :_b_.type,__mro__:[_b_.object],$infos:{__module__:"builtins",__name__:"module"},$is_class:true} -module.__init__=function(){} -module.__new__=function(cls,name,doc,$package){return{ -__class__:cls,__name__:name,__doc__:doc ||_b_.None,__package__:$package ||_b_.None}} -module.__repr__=module.__str__=function(self){var res=""} -module.__setattr__=function(self,attr,value){if(self.__name__=="__builtins__"){ -$B.builtins[attr]=value}else{self[attr]=value}} -module.$factory=function(name,doc,$package){return{ -__class__:module,__name__:name,__doc__:doc ||_b_.None,__package__:$package ||_b_.None}} -$B.set_func_names(module,"builtins") -function parent_package(mod_name){var parts=mod_name.split(".") -parts.pop() -return parts.join(".")} -function $download_module(mod,url,$package){var xhr=new XMLHttpRequest(),fake_qs="?v="+(new Date().getTime()),res=null,mod_name=mod.__name__ -var timer=_window.setTimeout(function(){xhr.abort()},5000) -if($B.$options.cache){xhr.open("GET",url,false)}else{xhr.open("GET",url+fake_qs,false)} -xhr.send() -if($B.$CORS){if(xhr.status==200 ||xhr.status==0){res=xhr.responseText}else{res=_b_.ModuleNotFoundError.$factory("No module named '"+ -mod_name+"'")}}else{if(xhr.readyState==4){if(xhr.status==200){res=xhr.responseText -mod.$last_modified= -xhr.getResponseHeader("Last-Modified")}else{ -console.info("Error "+xhr.status+ -" means that Python module "+mod_name+ -" was not found at url "+url) -res=_b_.ModuleNotFoundError.$factory("No module named '"+ -mod_name+"'")}}} -_window.clearTimeout(timer) -if(res==null){throw _b_.ModuleNotFoundError.$factory("No module named '"+ -mod_name+"' (res is null)")} -if(res.constructor===Error){throw res} -return res} -$B.$download_module=$download_module -function import_js(mod,path){try{var module_contents=$download_module(mod,path,undefined)}catch(err){return null} -run_js(module_contents,path,mod) -return true} -function run_js(module_contents,path,_module){ -try{var $module=new Function(module_contents+";\nreturn $module")() -if($B.$options.store){_module.$js=module_contents}}catch(err){console.log(err) -console.log(path,_module) -throw err} -try{$module} -catch(err){console.log("no $module") -throw _b_.ImportError.$factory("name '$module' not defined in module")} -$module.__name__=_module.__name__ -for(var attr in $module){if(typeof $module[attr]=="function"){$module[attr].$infos={__module__:_module.__name__,__name__:attr,__qualname__:attr}}} -if(_module !==undefined){ -for(var attr in $module){_module[attr]=$module[attr]} -$module=_module -$module.__class__=module }else{ -$module.__class__=module -$module.__name__=_module.__name__ -$module.__repr__=$module.__str__=function(){if($B.builtin_module_names.indexOf(_module.name)>-1){return ""} -return ""} -if(_module.name !="builtins"){ -$module.__file__=path}} -$B.imported[_module.__name__]=$module -return true} -function show_ns(){var kk=Object.keys(_window) -for(var i=0,len=kk.length;i < len;i++){console.log(kk[i]) -if(kk[i].charAt(0)=="$"){console.log(eval(kk[i]))}} -console.log("---")} -function import_py(mod,path,$package){ -var mod_name=mod.__name__,module_contents=$download_module(mod,path,$package) -mod.$src=module_contents -$B.imported[mod_name].$is_package=mod.$is_package -$B.imported[mod_name].$last_modified=mod.$last_modified -if(path.substr(path.length-12)=="/__init__.py"){$B.imported[mod_name].__package__=mod_name -$B.imported[mod_name].__path__=path -$B.imported[mod_name].$is_package=mod.$is_package=true}else if($package){$B.imported[mod_name].__package__=$package}else{var mod_elts=mod_name.split(".") -mod_elts.pop() -$B.imported[mod_name].__package__=mod_elts.join(".")} -$B.imported[mod_name].__file__=path -return run_py(module_contents,path,mod)} -function run_py(module_contents,path,module,compiled){ -$B.file_cache[path]=module_contents -var root,js,mod_name=module.__name__ -if(! compiled){var $Node=$B.$Node,$NodeJSCtx=$B.$NodeJSCtx -$B.$py_module_path[module.__name__]=path -var src={src:module_contents,has_annotations:false} -root=$B.py2js(src,module,module.__name__,$B.builtins_scope) -if(module.__package__ !==undefined){root.binding["__package__"]=true}} -try{js=compiled ? module_contents :root.to_js() -if($B.$options.debug==10){console.log("code for module "+module.__name__) -console.log(js)} -var src=js -js="var $module = (function(){\n"+js+"return $locals_"+ -module.__name__.replace(/\./g,"_")+"})(__BRYTHON__)\n"+ -"return $module" -var module_id="$locals_"+module.__name__.replace(/\./g,'_') -var $module=(new Function(module_id,js))(module)}catch(err){console.log(err+" for module "+module.__name__) -console.log("module",module) -console.log(root) -if($B.debug > 1){console.log(js)} -for(var attr in err){console.log(attr,err[attr])} -console.log(_b_.getattr(err,"info","[no info]")) -console.log("message: "+err.$message) -console.log("filename: "+err.fileName) -console.log("linenum: "+err.lineNumber) -if($B.debug > 0){console.log("line info "+$B.line_info)} -throw err}finally{$B.clear_ns(module.__name__)} -try{ -var mod=eval("$module") -for(var attr in mod){module[attr]=mod[attr]} -module.__initializing__=false -$B.imported[module.__name__]=module -return{ -content:src,name:mod_name,imports:Object.keys(root.imports).join(",")}}catch(err){console.log(""+err+" "+" for module "+module.__name__) -for(var attr in err){console.log(attr+" "+err[attr])} -if($B.debug > 0){console.log("line info "+__BRYTHON__.line_info)} -throw err}} -$B.run_py=run_py -function new_spec(fields){ -fields.__class__=module -return fields} -var finder_VFS={__class__:_b_.type,__mro__:[_b_.object],$infos:{__module__:"builtins",__name__:"VFSFinder"},create_module :function(cls,spec){ -return _b_.None},exec_module :function(cls,modobj){var stored=modobj.__spec__.loader_state.stored,timestamp=modobj.__spec__.loader_state.timestamp -delete modobj.__spec__["loader_state"] -var ext=stored[0],module_contents=stored[1],imports=stored[2] -modobj.$is_package=stored[3]||false -var path="VFS."+modobj.__name__ -path+=modobj.$is_package ? "/__init__.py" :ext -modobj.__file__=path -$B.file_cache[modobj.__file__]=$B.VFS[modobj.__name__][1] -if(ext=='.js'){run_js(module_contents,modobj.__path__,modobj)}else if($B.precompiled.hasOwnProperty(modobj.__name__)){if($B.debug > 1){console.info("load",modobj.__name__,"from precompiled")} -var parts=modobj.__name__.split(".") -for(var i=0;i < parts.length;i++){var parent=parts.slice(0,i+1).join(".") -if($B.imported.hasOwnProperty(parent)&& -$B.imported[parent].__initialized__){continue} -var mod_js=$B.precompiled[parent],is_package=modobj.$is_package -if(Array.isArray(mod_js)){mod_js=mod_js[0]} -var mod=$B.imported[parent]=module.$factory(parent,undefined,is_package) -mod.__initialized__=true -if(is_package){mod.__path__="" -mod.__package__=parent}else{var elts=parent.split(".") -elts.pop() -mod.__package__=elts.join(".")} -mod.__file__=path -try{var parent_id=parent.replace(/\./g,"_") -mod_js+="return $locals_"+parent_id -var $module=new Function("$locals_"+parent_id,mod_js)( -mod)}catch(err){if($B.debug > 1){console.log(err) -for(var k in err){console.log(k,err[k])} -console.log(Object.keys($B.imported)) -if($B.debug > 2){console.log(modobj,"mod_js",mod_js)}} -throw err} -for(var attr in $module){mod[attr]=$module[attr]} -$module.__file__=path -if(i > 0){ -$B.builtins.setattr( -$B.imported[parts.slice(0,i).join(".")],parts[i],$module)}} -return $module}else{var mod_name=modobj.__name__ -if($B.debug > 1){console.log("run Python code from VFS",mod_name)} -var record=run_py(module_contents,modobj.__path__,modobj) -record.is_package=modobj.$is_package -record.timestamp=$B.timestamp -record.source_ts=timestamp -$B.precompiled[mod_name]=record.is_package ?[record.content]: -record.content -var elts=mod_name.split(".") -if(elts.length > 1){elts.pop()} -if($B.$options.indexedDB && self.indexedDB && -$B.idb_name){ -var idb_cx=indexedDB.open($B.idb_name) -idb_cx.onsuccess=function(evt){var db=evt.target.result,tx=db.transaction("modules","readwrite"),store=tx.objectStore("modules"),cursor=store.openCursor(),request=store.put(record) -request.onsuccess=function(){if($B.debug > 1){console.info(modobj.__name__,"stored in db")}} -request.onerror=function(){console.info("could not store "+modobj.__name__)}}}}},find_module:function(cls,name,path){return{ -__class__:Loader,load_module:function(name,path){var spec=cls.find_spec(cls,name,path) -var mod=module.$factory(name) -$B.imported[name]=mod -mod.__spec__=spec -cls.exec_module(cls,mod)}}},find_spec :function(cls,fullname,path,prev_module){var stored,is_package,timestamp -if(!$B.use_VFS){return _b_.None} -stored=$B.VFS[fullname] -if(stored===undefined){return _b_.None} -is_package=stored[3]||false -timestamp=stored.timestamp -if(stored){var is_builtin=$B.builtin_module_names.indexOf(fullname)>-1 -return new_spec({name :fullname,loader:cls, -origin :is_builtin? "built-in" :"brython_stdlib", -submodule_search_locations:is_package?[]:_b_.None,loader_state:{stored:stored,timestamp:timestamp}, -cached:_b_.None,parent:is_package? fullname :parent_package(fullname),has_location:_b_.False})}}} -$B.set_func_names(finder_VFS,"") -for(var method in finder_VFS){if(typeof finder_VFS[method]=="function"){finder_VFS[method]=_b_.classmethod.$factory( -finder_VFS[method])}} -finder_VFS.$factory=function(){return{__class__:finder_VFS}} -var finder_cpython={__class__:_b_.type,__mro__:[_b_.object],$infos:{__module__:"builtins",__name__:"CPythonFinder"},create_module :function(cls,spec){ -return _b_.None},exec_module :function(cls,modobj){console.log("exec PYthon module",modobj) -var loader_state=modobj.__spec__.loader_state -var content=loader_state.content -delete modobj.__spec__["loader_state"] -modobj.$is_package=loader_state.is_package -modobj.__file__=loader_state.__file__ -$B.file_cache[modobj.__file__]=content -var mod_name=modobj.__name__ -if($B.debug > 1){console.log("run Python code from CPython",mod_name)} -run_py(content,modobj.__path__,modobj)},find_module:function(cls,name,path){return{ -__class__:Loader,load_module:function(name,path){var spec=cls.find_spec(cls,name,path) -var mod=module.$factory(name) -$B.imported[name]=mod -mod.__spec__=spec -cls.exec_module(cls,mod)}}},find_spec :function(cls,fullname,path,prev_module){console.log("finder cpython",fullname) -var xhr=new XMLHttpRequest(),url="/cpython_import?module="+fullname,result -xhr.open("GET",url,false) -xhr.onreadystatechange=function(){if(this.readyState==4 && this.status==200){var data=JSON.parse(this.responseText) -result=new_spec({name :fullname,loader:cls, -origin :"CPython", -submodule_search_locations:data.is_package?[]:_b_.None,loader_state:{content:data.content}, -cached:_b_.None,parent:data.is_package? fullname :parent_package(fullname),has_location:_b_.False})}} -xhr.send() -return result}} -$B.set_func_names(finder_cpython,"") -for(var method in finder_cpython){if(typeof finder_cpython[method]=="function"){finder_cpython[method]=_b_.classmethod.$factory( -finder_cpython[method])}} -finder_cpython.$factory=function(){return{__class__:finder_cpython}} -var finder_stdlib_static={$factory :finder_stdlib_static,__class__ :_b_.type,__mro__:[_b_.object],$infos:{__module__:"builtins",__name__:"StdlibStatic"},create_module :function(cls,spec){ -return _b_.None},exec_module :function(cls,module){var metadata=module.__spec__.loader_state -module.$is_package=metadata.is_package -if(metadata.ext=="py"){import_py(module,metadata.path,module.__package__)}else{import_js(module,metadata.path)} -delete module.__spec__["loader_state"]},find_module:function(cls,name,path){var spec=cls.find_spec(cls,name,path) -if(spec===_b_.None){return _b_.None} -return{ -__class__:Loader,load_module:function(name,path){var mod=module.$factory(name) -$B.imported[name]=mod -mod.__spec__=spec -mod.__package__=spec.parent -cls.exec_module(cls,mod)}}},find_spec:function(cls,fullname,path,prev_module){if($B.stdlib && $B.$options.static_stdlib_import){var address=$B.stdlib[fullname] -if(address===undefined){var elts=fullname.split(".") -if(elts.length > 1){elts.pop() -var $package=$B.stdlib[elts.join(".")] -if($package && $package[1]){address=["py"]}}} -if(address !==undefined){var ext=address[0],is_pkg=address[1]!==undefined,path=$B.brython_path+ -((ext=="py")? "Lib/" :"libs/")+ -fullname.replace(/\./g,"/"),metadata={ext:ext,is_package:is_pkg,path:path+(is_pkg? "/__init__.py" : -((ext=="py")? ".py" :".js")),address:address} -var res=new_spec({name :fullname,loader:cls, -origin :metadata.path,submodule_search_locations:is_pkg?[path]:_b_.None,loader_state:metadata, -cached:_b_.None,parent:is_pkg ? fullname :parent_package(fullname),has_location:_b_.True}) -return res}} -return _b_.None}} -$B.set_func_names(finder_stdlib_static,"") -for(var method in finder_stdlib_static){if(typeof finder_stdlib_static[method]=="function"){finder_stdlib_static[method]=_b_.classmethod.$factory( -finder_stdlib_static[method])}} -finder_stdlib_static.$factory=function(){return{__class__:finder_stdlib_static}} -var finder_path={__class__:_b_.type,__mro__:[_b_.object],$infos:{__module__:"builtins",__name__:"ImporterPath"},create_module :function(cls,spec){ -return _b_.None},exec_module :function(cls,_module){var _spec=$B.$getattr(_module,"__spec__"),code=_spec.loader_state.code; -_module.$is_package=_spec.loader_state.is_package,delete _spec.loader_state["code"] -var src_type=_spec.loader_state.type -if(src_type=="py" ||src_type=="pyc.js"){run_py(code,_spec.origin,_module,src_type=="pyc.js")} -else if(_spec.loader_state.type=="js"){run_js(code,_spec.origin,_module)}},find_module:function(cls,name,path){return finder_path.find_spec(cls,name,path)},find_spec :function(cls,fullname,path,prev_module){var current_module=$B.last($B.frames_stack)[2] -if($B.VFS && $B.VFS[current_module]){ -return _b_.None} -if($B.is_none(path)){ -path=$B.path} -for(var i=0,li=path.length;i < li;++i){var path_entry=path[i] -if(path_entry[path_entry.length-1]!="/"){path_entry+="/"} -var finder=$B.path_importer_cache[path_entry] -if(finder===undefined){var finder_notfound=true -for(var j=0,lj=$B.path_hooks.length; -j < lj && finder_notfound;++j){var hook=$B.path_hooks[j].$factory -try{finder=(typeof hook=="function" ? hook : -$B.$getattr(hook,"__call__"))(path_entry) -finder_notfound=false}catch(e){if(e.__class__ !==_b_.ImportError){throw e}}} -if(finder_notfound){$B.path_importer_cache[path_entry]=_b_.None}} -if($B.is_none(finder)){continue} -var find_spec=$B.$getattr(finder,"find_spec"),fs_func=typeof find_spec=="function" ? -find_spec : -$B.$getattr(find_spec,"__call__") -var spec=fs_func(fullname,prev_module) -if(!$B.is_none(spec)){return spec}} -return _b_.None}} -$B.set_func_names(finder_path,"") -for(var method in finder_path){if(typeof finder_path[method]=="function"){finder_path[method]=_b_.classmethod.$factory( -finder_path[method])}} -finder_path.$factory=function(){return{__class__:finder_path}} -var url_hook={__class__:_b_.type,__mro__:[_b_.object],__repr__:function(self){return "'},$infos:{__module__:"builtins",__name__:"UrlPathFinder"},find_spec :function(self,fullname,module){var loader_data={},notfound=true,hint=self.hint,base_path=self.path_entry+fullname.match(/[^.]+$/g)[0],modpaths=[] -var tryall=hint===undefined -if(tryall ||hint=='py'){ -modpaths=modpaths.concat([[base_path+".py","py",false],[base_path+"/__init__.py","py",true]])} -for(var j=0;notfound && j < modpaths.length;++j){try{var file_info=modpaths[j],module={__name__:fullname,$is_package:false} -loader_data.code=$download_module(module,file_info[0],undefined) -notfound=false -loader_data.type=file_info[1] -loader_data.is_package=file_info[2] -if(hint===undefined){self.hint=file_info[1] -$B.path_importer_cache[self.path_entry]=self} -if(loader_data.is_package){ -$B.path_importer_cache[base_path+'/']= -url_hook.$factory(base_path+'/',self.hint)} -loader_data.path=file_info[0]}catch(err){}} -if(!notfound){return new_spec({name :fullname,loader:finder_path,origin :loader_data.path, -submodule_search_locations:loader_data.is_package? -[base_path]:_b_.None,loader_state:loader_data, -cached:_b_.None,parent:loader_data.is_package? fullname : -parent_package(fullname),has_location:_b_.True})} -return _b_.None},invalidate_caches :function(self){}} -url_hook.$factory=function(path_entry,hint){return{ -__class__:url_hook,path_entry:path_entry.endsWith("/")? path_entry :path_entry+"/",hint:hint}} -$B.set_func_names(url_hook,"") -$B.path_importer_cache={}; -var _sys_paths=[[$B.script_dir+"/","py"],[$B.brython_path+"Lib/","py"],[$B.brython_path+"Lib/site-packages/","py"],[$B.brython_path+"libs/","js"]] -for(var i=0;i < _sys_paths.length;++i){var _path=_sys_paths[i],_type=_path[1] -_path=_path[0] -$B.path_importer_cache[_path]=url_hook.$factory(_path,_type)} -function import_error(mod_name){var exc=_b_.ImportError.$factory(mod_name) -exc.name=mod_name -throw exc} -$B.$__import__=function(mod_name,globals,locals,fromlist,level){ -var from_stdlib=false -if(globals.$jsobj && globals.$jsobj.__file__){var file=globals.$jsobj.__file__ -if((file.startsWith($B.brython_path+"Lib/")&& -! file.startsWith($B.brython_path+"Lib/site-packages/"))|| -file.startsWith($B.brython_path+"libs/")|| -file.startsWith("VFS.")){from_stdlib=true}} -var modobj=$B.imported[mod_name],parsed_name=mod_name.split('.'),has_from=fromlist.length > 0 -if(modobj==_b_.None){ -import_error(mod_name)} -if(modobj===undefined){ -if($B.is_none(fromlist)){fromlist=[]} -for(var i=0,modsep="",_mod_name="",len=parsed_name.length-1,__path__=_b_.None;i <=len;++i){var _parent_name=_mod_name; -_mod_name+=modsep+parsed_name[i] -modsep="." -var modobj=$B.imported[_mod_name] -if(modobj==_b_.None){ -import_error(_mod_name)}else if(modobj===undefined){try{$B.import_hooks(_mod_name,__path__,from_stdlib)}catch(err){delete $B.imported[_mod_name] -throw err} -if($B.is_none($B.imported[_mod_name])){import_error(_mod_name)}else{ -if(_parent_name){_b_.setattr($B.imported[_parent_name],parsed_name[i],$B.imported[_mod_name])}}} -if(i < len){try{__path__=$B.$getattr($B.imported[_mod_name],"__path__")}catch(e){ -if(i==len-1 && -$B.imported[_mod_name][parsed_name[len]]&& -$B.imported[_mod_name][parsed_name[len]].__class__=== -module){return $B.imported[_mod_name][parsed_name[len]]} -if(has_from){ -import_error(mod_name)}else{ -var exc=_b_.ModuleNotFoundError.$factory() -exc.msg="No module named '"+mod_name+"'; '"+ -_mod_name+"' is not a package" -exc.args=$B.fast_tuple([exc.msg]) -exc.name=mod_name -exc.path=_b_.None -throw exc}}}}}else{if($B.imported[parsed_name[0]]&& -parsed_name.length==2){try{$B.$setattr($B.imported[parsed_name[0]],parsed_name[1],modobj)}catch(err){console.log("error",parsed_name,modobj) -throw err}}} -if(fromlist.length > 0){ -return $B.imported[mod_name]}else{ -return $B.imported[parsed_name[0]]}} -$B.$import=function(mod_name,fromlist,aliases,locals){fromlist=fromlist===undefined ?[]:fromlist -aliases=aliases===undefined ?{}:aliases -locals=locals===undefined ?{}:locals -var parts=mod_name.split(".") -if(mod_name[mod_name.length-1]=="."){parts.pop()} -var norm_parts=[],prefix=true -for(var i=0,len=parts.length;i < len;i++){var p=parts[i] -if(prefix && p==""){ -elt=norm_parts.pop() -if(elt===undefined){throw _b_.ImportError.$factory("Parent module '' not loaded, "+ -"cannot perform relative import")}}else{prefix=false; -norm_parts.push(p.substr(0,2)=="$$" ? p.substr(2):p)}} -var mod_name=norm_parts.join(".") -if($B.$options.debug==10){console.log("$import "+mod_name) -console.log("use VFS ? "+$B.use_VFS) -console.log("use static stdlib paths ? "+$B.static_stdlib_import)} -var current_frame=$B.frames_stack[$B.frames_stack.length-1],_globals=current_frame[3],__import__=_globals["__import__"],globals=$B.obj_dict(_globals) -if(__import__===undefined){ -__import__=$B.$__import__} -var importer=typeof __import__=="function" ? -__import__ : -$B.$getattr(__import__,"__call__"),modobj=importer(mod_name,globals,undefined,fromlist,0) -if(! fromlist ||fromlist.length==0){ -var alias=aliases[mod_name] -if(alias){locals[alias]=$B.imported[mod_name]}else{locals[$B.to_alias(norm_parts[0])]=modobj}}else{var __all__=fromlist,thunk={} -if(fromlist && fromlist[0]=="*"){__all__=$B.$getattr(modobj,"__all__",thunk); -if(__all__ !==thunk){ -aliases={}}} -if(__all__===thunk){ -for(var attr in modobj){if(attr[0]!=="_"){locals[attr]=modobj[attr]}}}else{ -for(var i=0,l=__all__.length;i < l;++i){var name=__all__[i] -var alias=aliases[name]||name -try{ -locals[alias]=$B.$getattr(modobj,name)}catch($err1){ -try{var name1=$B.from_alias(name) -$B.$getattr(__import__,'__call__')(mod_name+'.'+name1,globals,undefined,[],0) -locals[alias]=$B.$getattr(modobj,name1)}catch($err3){ -if(mod_name==="__future__"){ -var frame=$B.last($B.frames_stack),line_info=frame[3].$line_info,line_elts=line_info.split(','),line_num=parseInt(line_elts[0]) -$B.$SyntaxError(frame[2],"future feature "+name+" is not defined",current_frame[3].src,undefined,line_num)} -if($err3.$py_error){var errname=$err3.__class__.$infos.__name__ -if($err3.__class__ !==_b_.ImportError && -$err3.__class__ !==_b_.ModuleNotFoundError){$B.handle_error($err3)} -throw _b_.ImportError.$factory( -"cannot import name '"+name+"'")} -if($B.debug > 1){console.log($err3) -console.log($B.last($B.frames_stack))} -throw _b_.ImportError.$factory( -"cannot import name '"+name+"'")}}}} -return locals}} -$B.import_all=function(locals,module){ -for(var attr in module){if(attr.startsWith("$$")){locals[attr]=module[attr]}else if('_$'.indexOf(attr.charAt(0))==-1){locals[attr]=module[attr]}}} -$B.$path_hooks=[url_hook] -$B.$meta_path=[finder_VFS,finder_stdlib_static,finder_path] -$B.finders={VFS:finder_VFS,stdlib_static:finder_stdlib_static,path:finder_path,CPython:finder_cpython} -function optimize_import_for_path(path,filetype){if(path.slice(-1)!="/"){path=path+"/" } -var value=(filetype=='none')? _b_.None : -url_hook.$factory(path,filetype) -$B.path_importer_cache[path]=value} -var Loader={__class__:$B.$type,__mro__:[_b_.object],__name__ :"Loader"} -var _importlib_module={__class__ :module,__name__ :"_importlib",Loader:Loader,VFSFinder:finder_VFS,StdlibStatic:finder_stdlib_static,ImporterPath:finder_path,UrlPathFinder:url_hook,optimize_import_for_path :optimize_import_for_path} -_importlib_module.__repr__=_importlib_module.__str__=function(){return ""} -$B.imported["_importlib"]=_importlib_module})(__BRYTHON__) -; -;(function($B){var bltns=$B.InjectBuiltins() -eval(bltns) -var object=_b_.object -function $err(op,other){var msg="unsupported operand type(s) for "+op+ -": 'float' and '"+$B.class_name(other)+"'" -throw _b_.TypeError.$factory(msg)} -function float_value(obj){ -return obj.$brython_value !==undefined ? obj.$brython_value :obj} -var float={__class__:_b_.type,__dir__:object.__dir__,$infos:{__module__:"builtins",__name__:"float"},$is_class:true,$native:true,$descriptors:{"numerator":true,"denominator":true,"imag":true,"real":true}} -float.numerator=function(self){return float_value(self)} -float.denominator=function(self){return _b_.int.$factory(1)} -float.imag=function(self){return _b_.int.$factory(0)} -float.real=function(self){return float_value(self)} -float.__float__=function(self){return float_value(self)} -float.as_integer_ratio=function(self){self=float_value(self) -if(self.valueOf()==Number.POSITIVE_INFINITY || -self.valueOf()==Number.NEGATIVE_INFINITY){throw _b_.OverflowError.$factory("Cannot pass infinity to "+ -"float.as_integer_ratio.")} -if(! Number.isFinite(self.valueOf())){throw _b_.ValueError.$factory("Cannot pass NaN to "+ -"float.as_integer_ratio.")} -var tmp=_b_.$frexp(self.valueOf()),fp=tmp[0],exponent=tmp[1] -for(var i=0;i < 300;i++){if(fp==Math.floor(fp)){break}else{fp*=2 -exponent--}} -numerator=float.$factory(fp) -py_exponent=abs(exponent) -denominator=1 -py_exponent=_b_.getattr(_b_.int.$factory(denominator),"__lshift__")(py_exponent) -if(exponent > 0){numerator=numerator*py_exponent}else{denominator=py_exponent} -return _b_.tuple.$factory([_b_.int.$factory(numerator),_b_.int.$factory(denominator)])} -float.__bool__=function(self){self=float_value(self) -return _b_.bool.$factory(self.valueOf())} -float.__eq__=function(self,other){self=float_value(self) -other=float_value(other) -if(isNaN(self)&& isNaN(other)){return false} -if(isinstance(other,_b_.int)){return self==other} -if(isinstance(other,float)){ -return self.valueOf()==other.valueOf()} -if(isinstance(other,_b_.complex)){if(other.$imag !=0){return false} -return self==other.$real} -return _b_.NotImplemented} -float.__floordiv__=function(self,other){self=float_value(self) -other=float_value(other) -if(isinstance(other,[_b_.int,float])){if(other.valueOf()==0){throw ZeroDivisionError.$factory('division by zero')} -return float.$factory(Math.floor(self/other))} -if(hasattr(other,"__rfloordiv__")){return getattr(other,"__rfloordiv__")(self)} -$err("//",other)} -float.fromhex=function(arg){ -if(! isinstance(arg,_b_.str)){throw _b_.ValueError.$factory("argument must be a string")} -var value=arg.trim() -switch(value.toLowerCase()){case "+inf": -case "inf": -case "+infinity": -case "infinity": -return $FloatClass(Infinity) -case "-inf": -case "-infinity": -return $FloatClass(-Infinity) -case "+nan": -case "nan": -return $FloatClass(Number.NaN) -case "-nan": -return $FloatClass(-Number.NaN) -case "": -throw _b_.ValueError.$factory("could not convert string to float")} -var _m=/^(\d*\.?\d*)$/.exec(value) -if(_m !==null){return $FloatClass(parseFloat(_m[1]))} -var _m=/^(\+|-)?(0x)?([0-9A-F]+\.?)?(\.[0-9A-F]+)?(p(\+|-)?\d+)?$/i.exec(value) -if(_m==null){throw _b_.ValueError.$factory("invalid hexadecimal floating-point string")} -var _sign=_m[1],_int=parseInt(_m[3]||'0',16),_fraction=_m[4]||'.0',_exponent=_m[5]||'p0' -if(_sign=="-"){_sign=-1}else{_sign=1} -var _sum=_int -for(var i=1,len=_fraction.length;i < len;i++){_sum+=parseInt(_fraction.charAt(i),16)/Math.pow(16,i)} -return new Number(_sign*_sum*Math.pow(2,parseInt(_exponent.substring(1))))} -float.__getformat__=function(arg){if(arg=="double" ||arg=="float"){return "IEEE, little-endian"} -throw _b_.ValueError.$factory("__getformat__() argument 1 must be "+ -"'double' or 'float'")} -function preformat(self,fmt){if(fmt.empty){return _b_.str.$factory(self)} -if(fmt.type && 'eEfFgGn%'.indexOf(fmt.type)==-1){throw _b_.ValueError.$factory("Unknown format code '"+fmt.type+ -"' for object of type 'float'")} -if(isNaN(self)){if(fmt.type=="f" ||fmt.type=="g"){return "nan"} -else{return "NAN"}} -if(self==Number.POSITIVE_INFINITY){if(fmt.type=="f" ||fmt.type=="g"){return "inf"} -else{return "INF"}} -if(fmt.precision===undefined && fmt.type !==undefined){fmt.precision=6} -if(fmt.type=="%"){self*=100} -if(fmt.type=="e"){var res=self.toExponential(fmt.precision),exp=parseInt(res.substr(res.search("e")+1)) -if(Math.abs(exp)< 10){res=res.substr(0,res.length-1)+"0"+ -res.charAt(res.length-1)} -return res} -if(fmt.precision !==undefined){ -var prec=fmt.precision -if(prec==0){return Math.round(self)+""} -var res=self.toFixed(prec),pt_pos=res.indexOf(".") -if(fmt.type !==undefined && -(fmt.type=="%" ||fmt.type.toLowerCase()=="f")){if(pt_pos==-1){res+="."+"0".repeat(fmt.precision)}else{var missing=fmt.precision-res.length+pt_pos+1 -if(missing > 0){res+="0".repeat(missing)}}}else if(fmt.type && fmt.type.toLowerCase()=="g"){var exp_fmt=preformat(self,{type:"e"}).split("e"),exp=parseInt(exp_fmt[1]) -if(-4 <=exp && exp < fmt.precision){res=preformat(self,{type:"f",precision:fmt.precision-1-exp})}else{res=preformat(self,{type:"e",precision:fmt.precision-1})} -var parts=res.split("e") -if(fmt.alternate){if(parts[0].search(/\./)==-1){parts[0]+='.'}}else{if(parts[1]){var signif=parts[0] -while(signif.endsWith("0")){signif=signif.substr(0,signif.length-1)} -if(signif.endsWith(".")){signif=signif.substr(0,signif.length-1)} -parts[0]=signif}} -res=parts.join("e") -if(fmt.type=="G"){res=res.toUpperCase()} -return res}else if(fmt.type===undefined){fmt.type="g" -res=preformat(self,fmt) -fmt.type=undefined}else{var res1=self.toExponential(fmt.precision-1),exp=parseInt(res1.substr(res1.search("e")+1)) -if(exp <-4 ||exp >=fmt.precision-1){var elts=res1.split("e") -while(elts[0].endsWith("0")){elts[0]=elts[0].substr(0,elts[0].length-1)} -res=elts.join("e")}}}else{var res=_b_.str.$factory(self)} -if(fmt.type===undefined ||"gGn".indexOf(fmt.type)!=-1){ -if(res.search("e")==-1){while(res.charAt(res.length-1)=="0"){res=res.substr(0,res.length-1)}} -if(res.charAt(res.length-1)=="."){if(fmt.type===undefined){res+="0"} -else{res=res.substr(0,res.length-1)}}} -if(fmt.sign !==undefined){if((fmt.sign==" " ||fmt.sign=="+" )&& self > 0){res=fmt.sign+res}} -if(fmt.type=="%"){res+="%"} -return res} -float.__format__=function(self,format_spec){self=float_value(self) -var fmt=new $B.parse_format_spec(format_spec) -fmt.align=fmt.align ||">" -var raw=preformat(self,fmt).split('.'),_int=raw[0] -if(fmt.comma){var len=_int.length,nb=Math.ceil(_int.length/3),chunks=[] -for(var i=0;i < nb;i++){chunks.push(_int.substring(len-3*i-3,len-3*i))} -chunks.reverse() -raw[0]=chunks.join(",")} -return $B.format_width(raw.join("."),fmt)} -float.__hash__=function(self){if(self===undefined){return float.__hashvalue__ ||$B.$py_next_hash--} -var _v=self.valueOf() -if(_v===Infinity){return 314159} -if(_v===-Infinity){return-271828} -if(isNaN(_v)){return 0} -if(_v==Math.round(_v)){return Math.round(_v)} -var r=_b_.$frexp(_v) -r[0]*=Math.pow(2,31) -var hipart=_b_.int.$factory(r[0]) -r[0]=(r[0]-hipart)*Math.pow(2,31) -var x=hipart+_b_.int.$factory(r[0])+(r[1]<< 15) -return x & 0xFFFFFFFF} -_b_.$isninf=function(x){var x1=x -if(isinstance(x,float)){x1=x.valueOf()} -return x1==-Infinity ||x1==Number.NEGATIVE_INFINITY} -_b_.$isinf=function(x){var x1=x -if(isinstance(x,float)){x1=x.valueOf()} -return x1==Infinity ||x1==-Infinity || -x1==Number.POSITIVE_INFINITY ||x1==Number.NEGATIVE_INFINITY} -_b_.$fabs=function(x){return x > 0 ? float.$factory(x):float.$factory(-x)} -_b_.$frexp=function(x){var x1=x -if(isinstance(x,float)){x1=x.valueOf()} -if(isNaN(x1)||_b_.$isinf(x1)){return[x1,-1]} -if(x1==0){return[0,0]} -var sign=1,ex=0,man=x1 -if(man < 0.){sign=-sign -man=-man} -while(man < 0.5){man*=2.0 -ex--} -while(man >=1.0){man*=0.5 -ex++} -man*=sign -return[man,ex]} -_b_.$ldexp=function(x,i){if(_b_.$isninf(x)){return float.$factory('-inf')} -if(_b_.$isinf(x)){return float.$factory('inf')} -var y=x -if(isinstance(x,float)){y=x.valueOf()} -if(y==0){return y} -var j=i -if(isinstance(i,float)){j=i.valueOf()} -return y*Math.pow(2,j)} -float.hex=function(self){ -self=float_value(self) -var DBL_MANT_DIG=53, -TOHEX_NBITS=DBL_MANT_DIG+3-(DBL_MANT_DIG+2)% 4 -switch(self.valueOf()){case Infinity: -case-Infinity: -case Number.NaN: -case-Number.NaN: -return self -case-0: -return "-0x0.0p0" -case 0: -return "0x0.0p0"} -var _a=_b_.$frexp(_b_.$fabs(self.valueOf())),_m=_a[0],_e=_a[1],_shift=1-Math.max(-1021-_e,0) -_m=_b_.$ldexp(_m,_shift) -_e-=_shift -var _int2hex="0123456789ABCDEF".split(""),_s=_int2hex[Math.floor(_m)] -_s+='.' -_m-=Math.floor(_m) -for(var i=0;i <(TOHEX_NBITS-1)/4;i++){_m*=16.0 -_s+=_int2hex[Math.floor(_m)] -_m-=Math.floor(_m)} -var _esign="+" -if(_e < 0){_esign="-" -_e=-_e} -if(self.value < 0){return "-0x"+_s+"p"+_esign+_e} -return "0x"+_s+"p"+_esign+_e} -float.__init__=function(self,value){return _b_.None} -float.__int__=function(self){return parseInt(self)} -float.is_integer=function(self){return _b_.int.$factory(self)==self} -float.__mod__=function(self,other){ -self=float_value(self) -other=float_value(other) -if(other==0){throw ZeroDivisionError.$factory("float modulo")} -if(isinstance(other,_b_.int)){return new Number((self % other+other)% other)} -if(isinstance(other,float)){ -var q=Math.floor(self/other),r=self-other*q -return new Number(r)} -if(isinstance(other,_b_.bool)){var bool_value=0 -if(other.valueOf()){bool_value=1} -return new Number((self % bool_value+bool_value)% bool_value)} -if(hasattr(other,"__rmod__")){return getattr(other,"__rmod__")(self)} -$err("%",other)} -float.__mro__=[object] -float.__mul__=function(self,other){self=float_value(self) -other=float_value(other) -if(isinstance(other,_b_.int)){if(other.__class__==$B.long_int){return new Number(self*parseFloat(other.value))} -return new Number(self*other)} -if(isinstance(other,float)){return new Number(self*float_value(other))} -if(isinstance(other,_b_.bool)){var bool_value=0 -if(other.valueOf()){bool_value=1} -return new Number(self*bool_value)} -if(isinstance(other,_b_.complex)){return $B.make_complex(float.$factory(self*other.$real),float.$factory(self*other.$imag))} -if(hasattr(other,"__rmul__")){return getattr(other,"__rmul__")(self)} -$err("*",other)} -float.__ne__=function(self,other){var res=float.__eq__(self,other) -return res===_b_.NotImplemented ? res :! res} -float.__neg__=function(self,other){return float.$factory(-float_value(self))} -float.__new__=function(cls,value){if(cls===undefined){throw _b_.TypeError.$factory("float.__new__(): not enough arguments")}else if(! _b_.isinstance(cls,_b_.type)){throw _b_.TypeError.$factory("float.__new__(X): X is not a type object")} -if(cls===float){return float.$factory(value)} -return{ -__class__:cls,__dict__:$B.empty_dict(),$brython_value:value ||0}} -float.__pos__=function(self){return float_value(self)} -float.__pow__=function(self,other){self=float_value(self) -other=float_value(other) -var other_int=isinstance(other,_b_.int) -if(other_int ||isinstance(other,float)){if(self==1){return self} -if(other==0){return new Number(1)} -if(self==-1 && -(! isFinite(other)||other.__class__===$B.long_int || -! $B.is_safe_int(other))&& -! isNaN(other)){return new Number(1)}else if(self==0 && isFinite(other)&& other < 0){throw _b_.ZeroDivisionError.$factory("0.0 cannot be raised "+ -"to a negative power")}else if(self==Number.NEGATIVE_INFINITY && ! isNaN(other)){if(other < 0 && other % 2==1){return new Number(-0.0)}else if(other < 0){return new Number(0)} -else if(other > 0 && other % 2==1){return Number.NEGATIVE_INFINITY}else{return Number.POSITIVE_INFINITY}}else if(self==Number.POSITIVE_INFINITY && ! isNaN(other)){return other > 0 ? self :new Number(0)} -if(other==Number.NEGATIVE_INFINITY && ! isNaN(self)){return Math.abs(self)< 1 ? Number.POSITIVE_INFINITY : -new Number(0)}else if(other==Number.POSITIVE_INFINITY && ! isNaN(self)){return Math.abs(self)< 1 ? new Number(0): -Number.POSITIVE_INFINITY} -if(self < 0 && -! _b_.getattr(other,"__eq__")(_b_.int.$factory(other))){ -return _b_.complex.__pow__($B.make_complex(self,0),other)} -return float.$factory(Math.pow(self,other))}else if(isinstance(other,_b_.complex)){var preal=Math.pow(self,other.$real),ln=Math.log(self) -return $B.make_complex(preal*Math.cos(ln),preal*Math.sin(ln))} -if(hasattr(other,"__rpow__")){return getattr(other,"__rpow__")(self)} -$err("** or pow()",other)} -float.__repr__=float.__str__=function(self){self=float_value(self) -if(self.valueOf()==Infinity){return 'inf'} -if(self.valueOf()==-Infinity){return '-inf'} -if(isNaN(self.valueOf())){return 'nan'} -var res=self.valueOf()+"" -if(res.indexOf(".")==-1){res+=".0"} -var x,y -[x,y]=res.split('.') -if(x.length > 16){var exp=x.length-1,int_part=x[0],dec_part=x.substr(1)+y -while(dec_part.endsWith("0")){dec_part=dec_part.substr(0,dec_part.length-1)} -var mant=int_part -if(dec_part.length > 0){mant+='.'+dec_part} -return mant+'e+'+exp}else if(x=="0"){var exp=0 -while(exp < y.length && y.charAt(exp)=="0"){exp++} -if(exp > 3){ -var rest=y.substr(exp),exp=(exp+1).toString() -while(rest.endsWith("0")){rest=rest.substr(0,res.length-1)} -var mant=rest[0] -if(rest.length > 1){mant+='.'+rest.substr(1)} -if(exp.length==1){exp='0'+exp} -return mant+'e-'+exp}} -return _b_.str.$factory(res)} -float.__setattr__=function(self,attr,value){if(self.constructor===Number){if(float[attr]===undefined){throw _b_.AttributeError.$factory("'float' object has no attribute '"+ -attr+"'")}else{throw _b_.AttributeError.$factory("'float' object attribute '"+ -attr+"' is read-only")}} -self[attr]=value -return _b_.None} -float.__truediv__=function(self,other){self=float_value(self) -other=float_value(other) -if(isinstance(other,[_b_.int,float])){if(other.valueOf()==0){throw ZeroDivisionError.$factory("division by zero")} -return float.$factory(self/other)} -if(isinstance(other,_b_.complex)){var cmod=other.$real*other.$real+other.$imag*other.$imag -if(cmod==0){throw ZeroDivisionError.$factory("division by zero")} -return $B.make_complex(float.$factory(self*other.$real/cmod),float.$factory(-self*other.$imag/cmod))} -if(hasattr(other,"__rtruediv__")){return getattr(other,"__rtruediv__")(self)} -$err("/",other)} -var $op_func=function(self,other){self=float_value(self) -other=float_value(other) -if(isinstance(other,_b_.int)){if(typeof other=="boolean"){return other ? self-1 :self}else if(other.__class__===$B.long_int){return float.$factory(self-parseInt(other.value))}else{return float.$factory(self-other)}} -if(isinstance(other,float)){return float.$factory(self-other)} -if(isinstance(other,_b_.bool)){var bool_value=0 -if(other.valueOf()){bool_value=1} -return float.$factory(self-bool_value)} -if(isinstance(other,_b_.complex)){return $B.make_complex(self-other.$real,-other.$imag)} -if(hasattr(other,"__rsub__")){return getattr(other,"__rsub__")(self)} -$err("-",other)} -$op_func+="" -var $ops={"+":"add","-":"sub"} -for(var $op in $ops){var $opf=$op_func.replace(/-/gm,$op) -$opf=$opf.replace(/__rsub__/gm,"__r"+$ops[$op]+"__") -eval("float.__"+$ops[$op]+"__ = "+$opf)} -var $comp_func=function(self,other){self=float_value(self) -other=float_value(other) -if(isinstance(other,_b_.int)){if(other.__class__===$B.long_int){return self > parseInt(other.value)} -return self > other.valueOf()} -if(isinstance(other,float)){return self > other} -if(isinstance(other,_b_.bool)){return self.valueOf()> _b_.bool.__hash__(other)} -if(hasattr(other,"__int__")||hasattr(other,"__index__")){return _b_.int.__gt__(self,$B.$GetInt(other))} -var inv_op=getattr(other,"__le__",None) -if(inv_op !==None){return inv_op(self)} -throw _b_.TypeError.$factory( -"unorderable types: float() > "+$B.class_name(other)+"()")} -$comp_func+="" -for(var $op in $B.$comps){eval("float.__"+$B.$comps[$op]+"__ = "+ -$comp_func.replace(/>/gm,$op). -replace(/__gt__/gm,"__"+$B.$comps[$op]+"__"). -replace(/__le__/,"__"+$B.$inv_comps[$op]+"__"))} -$B.make_rmethods(float) -var $notimplemented=function(self,other){throw _b_.TypeError.$factory( -"unsupported operand types for OPERATOR: 'float' and '"+ -$B.class_name(other)+"'")} -$notimplemented+="" -for(var $op in $B.$operators){ -if($B.augmented_assigns[$op]===undefined){var $opfunc="__"+$B.$operators[$op]+"__" -if(float[$opfunc]===undefined){eval("float."+$opfunc+"="+ -$notimplemented.replace(/OPERATOR/gm,$op))}}} -function $FloatClass(value){return new Number(value)} -function to_digits(s){ -var arabic_digits="\u0660\u0661\u0662\u0663\u0664\u0665\u0666\u0667\u0668\u0669",res="" -for(var i=0;i < s.length;i++){var x=arabic_digits.indexOf(s[i]) -if(x >-1){res+=x} -else{res+=s[i]}} -return res} -float.$factory=function(value){switch(value){case undefined: -return $FloatClass(0.0) -case Number.MAX_VALUE: -return $FloatClass(Infinity) -case-Number.MAX_VALUE: -return $FloatClass(-Infinity) -case true: -return new Number(1) -case false: -return new Number(0)} -if(typeof value=="number"){return new Number(value)} -if(isinstance(value,float)){return float_value(value)} -if(isinstance(value,bytes)){var s=getattr(value,"decode")("latin-1") -return float.$factory(getattr(value,"decode")("latin-1"))} -if(typeof value=="string"){value=value.trim() -switch(value.toLowerCase()){case "+inf": -case "inf": -case "+infinity": -case "infinity": -return Number.POSITIVE_INFINITY -case "-inf": -case "-infinity": -return Number.NEGATIVE_INFINITY -case "+nan": -case "nan": -return Number.NaN -case "-nan": -return-Number.NaN -case "": -throw _b_.ValueError.$factory("count not convert string to float") -default: -value=value.charAt(0)+value.substr(1).replace(/_/g,"") -value=to_digits(value) -if(isFinite(value))return $FloatClass(eval(value)) -else{ -_b_.str.encode(value,"latin-1") -throw _b_.ValueError.$factory( -"Could not convert to float(): '"+ -_b_.str.$factory(value)+"'")}}} -var klass=value.__class__ ||$B.get_class(value),num_value=$B.to_num(value,["__float__","__index__"]) -if(num_value !==null){return num_value} -throw _b_.TypeError.$factory("float() argument must be a string or a "+ -"number, not '"+$B.class_name(value)+"'")} -$B.$FloatClass=$FloatClass -$B.set_func_names(float,"builtins") -var FloatSubclass=$B.FloatSubclass={__class__:_b_.type,__mro__:[object],$infos:{__module__:"builtins",__name__:"float"},$is_class:true} -for(var $attr in float){if(typeof float[$attr]=="function"){FloatSubclass[$attr]=(function(attr){return function(){var args=[],pos=0 -if(arguments.length > 0){var args=[arguments[0].valueOf()],pos=1 -for(var i=1,len=arguments.length;i < len;i++){args[pos++]=arguments[i]}} -return float[attr].apply(null,args)}})($attr)}} -$B.set_func_names(FloatSubclass,"builtins") -_b_.float=float})(__BRYTHON__) -; -;(function($B){var _b_=$B.builtins -function $err(op,other){var msg="unsupported operand type(s) for "+op+ -" : 'int' and '"+$B.class_name(other)+"'" -throw _b_.TypeError.$factory(msg)} -function int_value(obj){ -return obj.$brython_value !==undefined ? obj.$brython_value :obj} -var int={__class__:_b_.type,__dir__:_b_.object.__dir__,$infos:{__module__:"builtins",__name__:"int"},$is_class:true,$native:true,$descriptors:{"numerator":true,"denominator":true,"imag":true,"real":true}} -int.as_integer_ratio=function(){var $=$B.args("as_integer_ratio",1,{self:null},["self"],arguments,{},null,null) -return $B.$list([$.self,1])} -int.from_bytes=function(){var $=$B.args("from_bytes",3,{bytes:null,byteorder:null,signed:null},["bytes","byteorder","signed"],arguments,{signed:false},null,null) -var x=$.bytes,byteorder=$.byteorder,signed=$.signed,_bytes,_len -if(_b_.isinstance(x,[_b_.bytes,_b_.bytearray])){_bytes=x.source -_len=x.source.length}else{_bytes=_b_.list.$factory(x) -_len=_bytes.length -for(var i=0;i < _len;i++){_b_.bytes.$factory([_bytes[i]])}} -switch(byteorder){case "big": -var num=_bytes[_len-1] -var _mult=256 -for(var i=_len-2;i >=0;i--){ -num=$B.add($B.mul(_mult,_bytes[i]),num) -_mult=$B.mul(_mult,256)} -if(! signed){return num} -if(_bytes[0]< 128){return num} -return $B.sub(num,_mult) -case "little": -var num=_bytes[0] -if(num >=128){num=num-256} -var _mult=256 -for(var i=1;i < _len;i++){num=$B.add($B.mul(_mult,_bytes[i]),num) -_mult=$B.mul(_mult,256)} -if(! signed){return num} -if(_bytes[_len-1]< 128){return num} -return $B.sub(num,_mult)} -throw _b_.ValueError.$factory("byteorder must be either 'little' or 'big'")} -int.to_bytes=function(){var $=$B.args("to_bytes",3,{self:null,len:null,byteorder:null},["self","len","byteorder"],arguments,{},"args","kw"),self=$.self,len=$.len,byteorder=$.byteorder,kwargs=$.kw -if(! _b_.isinstance(len,_b_.int)){throw _b_.TypeError.$factory("integer argument expected, got "+ -$B.class_name(len))} -if(["little","big"].indexOf(byteorder)==-1){throw _b_.ValueError.$factory("byteorder must be either 'little' or 'big'")} -var signed=kwargs.$string_dict["signed"]||false,res=[] -if(self < 0){if(! signed){throw _b_.OverflowError.$factory("can't convert negative int to unsigned")} -self=Math.pow(256,len)+self} -var value=self -while(true){var quotient=Math.floor(value/256),rest=value-256*quotient -res.push(rest) -if(quotient==0){break} -value=quotient} -if(res.length > len){throw _b_.OverflowError.$factory("int too big to convert")}else{while(res.length < len){res=res.concat([0])}} -if(byteorder=="big"){res=res.reverse()} -return{ -__class__:_b_.bytes,source:res}} -int.__abs__=function(self){return _b_.abs(self)} -int.__bool__=function(self){return int_value(self).valueOf()==0 ? false :true} -int.__ceil__=function(self){return Math.ceil(int_value(self))} -int.__divmod__=function(self,other){return $B.fast_tuple([int.__floordiv__(self,other),int.__mod__(self,other)])} -int.__eq__=function(self,other){ -if(other===undefined){return self===int} -if(_b_.isinstance(other,int)){return self.valueOf()==int_value(other).valueOf()} -if(_b_.isinstance(other,_b_.float)){return self.valueOf()==other.valueOf()} -if(_b_.isinstance(other,_b_.complex)){if(other.$imag !=0){return False} -return self.valueOf()==other.$real} -return _b_.NotImplemented} -int.__float__=function(self){return new Number(self)} -function preformat(self,fmt){if(fmt.empty){return _b_.str.$factory(self)} -if(fmt.type && 'bcdoxXn'.indexOf(fmt.type)==-1){throw _b_.ValueError.$factory("Unknown format code '"+fmt.type+ -"' for object of type 'int'")} -var res -switch(fmt.type){case undefined: -case "d": -res=self.toString() -break -case "b": -res=(fmt.alternate ? "0b" :"")+self.toString(2) -break -case "c": -res=_b_.chr(self) -break -case "o": -res=(fmt.alternate ? "0o" :"")+self.toString(8) -break -case "x": -res=(fmt.alternate ? "0x" :"")+self.toString(16) -break -case "X": -res=(fmt.alternate ? "0X" :"")+self.toString(16).toUpperCase() -break -case "n": -return self } -if(fmt.sign !==undefined){if((fmt.sign==" " ||fmt.sign=="+" )&& self >=0){res=fmt.sign+res}} -return res} -int.__format__=function(self,format_spec){var fmt=new $B.parse_format_spec(format_spec) -if(fmt.type && 'eEfFgG%'.indexOf(fmt.type)!=-1){ -return _b_.float.__format__(self,format_spec)} -fmt.align=fmt.align ||">" -var res=preformat(self,fmt) -if(fmt.comma){var sign=res[0]=="-" ? "-" :"",rest=res.substr(sign.length),len=rest.length,nb=Math.ceil(rest.length/3),chunks=[] -for(var i=0;i < nb;i++){chunks.push(rest.substring(len-3*i-3,len-3*i))} -chunks.reverse() -res=sign+chunks.join(",")} -return $B.format_width(res,fmt)} -int.__floordiv__=function(self,other){if(other.__class__===$B.long_int){return $B.long_int.__floordiv__($B.long_int.$factory(self),other)} -if(_b_.isinstance(other,int)){other=int_value(other) -if(other==0){throw _b_.ZeroDivisionError.$factory("division by zero")} -return Math.floor(self/other)} -if(_b_.isinstance(other,_b_.float)){if(!other.valueOf()){throw _b_.ZeroDivisionError.$factory("division by zero")} -return Math.floor(self/other)} -if(_b_.hasattr(other,"__rfloordiv__")){return $B.$getattr(other,"__rfloordiv__")(self)} -$err("//",other)} -int.__hash__=function(self){if(self===undefined){return int.__hashvalue__ ||$B.$py_next_hash--} -return self.valueOf()} -int.__index__=function(self){return int_value(self)} -int.__init__=function(self,value){if(value===undefined){value=0} -self.toString=function(){return value} -return _b_.None} -int.__int__=function(self){return self} -int.__invert__=function(self){return ~self} -int.__lshift__=function(self,other){if(_b_.isinstance(other,int)){other=int_value(other) -return int.$factory($B.long_int.__lshift__($B.long_int.$factory(self),$B.long_int.$factory(other)))} -var rlshift=$B.$getattr(other,"__rlshift__",_b_.None) -if(rlshift !==_b_.None){return rlshift(self)} -$err("<<",other)} -int.__mod__=function(self,other){ -if(_b_.isinstance(other,_b_.tuple)&& other.length==1){other=other[0]} -if(other.__class__===$B.long_int){return $B.long_int.__mod__($B.long_int.$factory(self),other)} -if(_b_.isinstance(other,[int,_b_.float,bool])){other=int_value(other) -if(other===false){other=0} -else if(other===true){other=1} -if(other==0){throw _b_.ZeroDivisionError.$factory( -"integer division or modulo by zero")} -return(self % other+other)% other} -if(_b_.hasattr(other,"__rmod__")){return $B.$getattr(other,"__rmod__")(self)} -$err("%",other)} -int.__mro__=[_b_.object] -int.__mul__=function(self,other){var val=self.valueOf() -if(typeof other==="string"){return other.repeat(val)} -if(_b_.isinstance(other,int)){other=int_value(other) -var res=self*other -if(res > $B.min_int && res < $B.max_int){return res} -else{return int.$factory($B.long_int.__mul__($B.long_int.$factory(self),$B.long_int.$factory(other)))}} -if(_b_.isinstance(other,_b_.float)){return new Number(self*other)} -if(_b_.isinstance(other,_b_.bool)){if(other.valueOf()){return self} -return int.$factory(0)} -if(_b_.isinstance(other,_b_.complex)){return $B.make_complex(int.__mul__(self,other.$real),int.__mul__(self,other.$imag))} -if(_b_.isinstance(other,[_b_.list,_b_.tuple])){var res=[] -var $temp=other.slice(0,other.length) -for(var i=0;i < val;i++){res=res.concat($temp)} -if(_b_.isinstance(other,_b_.tuple)){res=_b_.tuple.$factory(res)} -return res} -if(_b_.hasattr(other,"__rmul__")){return $B.$getattr(other,"__rmul__")(self)} -$err("*",other)} -int.__ne__=function(self,other){var res=int.__eq__(self,other) -return(res===_b_.NotImplemented)? res :!res} -int.__neg__=function(self){return-self} -int.__new__=function(cls,value){if(cls===undefined){throw _b_.TypeError.$factory("int.__new__(): not enough arguments")}else if(! _b_.isinstance(cls,_b_.type)){throw _b_.TypeError.$factory("int.__new__(X): X is not a type object")} -if(cls===int){return int.$factory(value)} -return{ -__class__:cls,__dict__:$B.empty_dict(),$brython_value:value ||0}} -int.__pos__=function(self){return self} -function extended_euclidean(a,b){var d,u,v -if(b==0){return[a,1,0]}else{[d,u,v]=extended_euclidean(b,a % b) -return[d,v,u-Math.floor(a/b)*v]}} -$B.use_bigint=0 -int.__pow__=function(self,other,z){if(typeof other=="number" ||_b_.isinstance(other,int)){other=int_value(other) -switch(other.valueOf()){case 0: -return int.$factory(1) -case 1: -return int.$factory(self.valueOf())} -if(z !==undefined && z !==_b_.None){ -if(z==1){return 0} -var result=1,base=self % z,exponent=other,long_int=$B.long_int -if(exponent < 0){var gcd,inv,_ -[gcd,inv,_]=extended_euclidean(self,z) -if(gcd !==1){throw _b_.ValueError.$factory("not relative primes: "+ -self+' and '+z)} -return int.__pow__(inv,-exponent,z)} -while(exponent > 0){if(exponent % 2==1){if(result*base > $B.max_int){result=long_int.__mul__( -long_int.$factory(result),long_int.$factory(base)) -result=long_int.__mod__(result,z)}else{result=(result*base)% z}} -exponent=exponent >> 1 -if(base*base > $B.max_int){base=long_int.__mul__(long_int.$factory(base),long_int.$factory(base)) -base=long_int.__mod__(base,z)}else{base=(base*base)% z}} -return result} -var res=Math.pow(self.valueOf(),other.valueOf()) -if(res > $B.min_int && res < $B.max_int){return res} -else if(res !==Infinity && !isFinite(res)){return res} -else{if($B.BigInt){$B.use_bigint++ -return{ -__class__:$B.long_int,value:($B.BigInt(self)**$B.BigInt(other)).toString(),pos:true}} -return $B.long_int.__pow__($B.long_int.$from_int(self),$B.long_int.$from_int(other))}} -if(_b_.isinstance(other,_b_.float)){if(self >=0){return new Number(Math.pow(self,other.valueOf()))} -else{ -return _b_.complex.__pow__($B.make_complex(self,0),other)}}else if(_b_.isinstance(other,_b_.complex)){var preal=Math.pow(self,other.$real),ln=Math.log(self) -return $B.make_complex(preal*Math.cos(ln),preal*Math.sin(ln))} -var rpow=$B.$getattr(other,"__rpow__",_b_.None) -if(rpow !==_b_.None){return rpow(self)} -$err("**",other)} -int.__repr__=function(self){if(self===int){return ""} -return self.toString()} -int.__rshift__=function(self,other){if(_b_.isinstance(other,int)){other=int_value(other) -return int.$factory($B.long_int.__rshift__($B.long_int.$factory(self),$B.long_int.$factory(other)))} -var rrshift=$B.$getattr(other,"__rrshift__",_b_.None) -if(rrshift !==_b_.None){return rrshift(self)} -$err('>>',other)} -int.__setattr__=function(self,attr,value){if(typeof self=="number"){if(int.$factory[attr]===undefined){throw _b_.AttributeError.$factory( -"'int' object has no attribute '"+attr+"'")}else{throw _b_.AttributeError.$factory( -"'int' object attribute '"+attr+"' is read-only")}} -_b_.dict.$setitem(self.__dict__,attr,value) -return _b_.None} -int.__str__=int.__repr__ -int.__truediv__=function(self,other){if(_b_.isinstance(other,int)){other=int_value(other) -if(other==0){throw _b_.ZeroDivisionError.$factory("division by zero")} -if(other.__class__===$B.long_int){return new Number(self/parseInt(other.value))} -return new Number(self/other)} -if(_b_.isinstance(other,_b_.float)){if(!other.valueOf()){throw _b_.ZeroDivisionError.$factory("division by zero")} -return new Number(self/other)} -if(_b_.isinstance(other,_b_.complex)){var cmod=other.$real*other.$real+other.$imag*other.$imag -if(cmod==0){throw _b_.ZeroDivisionError.$factory("division by zero")} -return $B.make_complex(self*other.$real/cmod,-self*other.$imag/cmod)} -if(_b_.hasattr(other,"__rtruediv__")){return $B.$getattr(other,"__rtruediv__")(self)} -$err("/",other)} -int.bit_length=function(self){s=_b_.bin(self) -s=$B.$getattr(s,"lstrip")("-0b") -return s.length } -int.numerator=function(self){return self} -int.denominator=function(self){return int.$factory(1)} -int.imag=function(self){return int.$factory(0)} -int.real=function(self){return self} -$B.max_int32=(1 << 30)*2-1 -$B.min_int32=-$B.max_int32 -var $op_func=function(self,other){if(_b_.isinstance(other,int)){if(other.__class__===$B.long_int){return $B.long_int.__sub__($B.long_int.$factory(self),$B.long_int.$factory(other))} -other=int_value(other) -if(self > $B.max_int32 ||self < $B.min_int32 || -other > $B.max_int32 ||other < $B.min_int32){return $B.long_int.__sub__($B.long_int.$factory(self),$B.long_int.$factory(other))} -return self-other} -if(_b_.isinstance(other,_b_.bool)){return self-other} -var rsub=$B.$getattr(other,"__rsub__",_b_.None) -if(rsub !==_b_.None){return rsub(self)} -$err("-",other)} -$op_func+="" -var $ops={"&":"and","|":"or","^":"xor"} -for(var $op in $ops){var opf=$op_func.replace(/-/gm,$op) -opf=opf.replace(new RegExp("sub","gm"),$ops[$op]) -eval("int.__"+$ops[$op]+"__ = "+opf)} -var $op_func=function(self,other){if(_b_.isinstance(other,int)){other=int_value(other) -if(typeof other=="number"){var res=self.valueOf()-other.valueOf() -if(res > $B.min_int && res < $B.max_int){return res} -else{return $B.long_int.__sub__($B.long_int.$factory(self),$B.long_int.$factory(other))}}else if(typeof other=="boolean"){return other ? self-1 :self}else{return $B.long_int.__sub__($B.long_int.$factory(self),$B.long_int.$factory(other))}} -if(_b_.isinstance(other,_b_.float)){return new Number(self-other)} -if(_b_.isinstance(other,_b_.complex)){return $B.make_complex(self-other.$real,-other.$imag)} -if(_b_.isinstance(other,_b_.bool)){var bool_value=0; -if(other.valueOf()){bool_value=1} -return self-bool_value} -if(_b_.isinstance(other,_b_.complex)){return $B.make_complex(self.valueOf()-other.$real,other.$imag)} -var rsub=$B.$getattr(other,"__rsub__",_b_.None) -if(rsub !==_b_.None){return rsub(self)} -console.log("err",self,other) -console.log($B.frames_stack.slice()) -throw $err("-",other)} -$op_func+="" -var $ops={"+":"add","-":"sub"} -for(var $op in $ops){var opf=$op_func.replace(/-/gm,$op) -opf=opf.replace(new RegExp("sub","gm"),$ops[$op]) -eval("int.__"+$ops[$op]+"__ = "+opf)} -var $comp_func=function(self,other){if(other.__class__===$B.long_int){return $B.long_int.__lt__(other,$B.long_int.$factory(self))} -if(_b_.isinstance(other,int)){other=int_value(other) -return self.valueOf()> other.valueOf()}else if(_b_.isinstance(other,_b_.float)){return self.valueOf()> other.valueOf()}else if(_b_.isinstance(other,_b_.bool)){return self.valueOf()> _b_.bool.__hash__(other)} -if(_b_.hasattr(other,"__int__")||_b_.hasattr(other,"__index__")){return int.__gt__(self,$B.$GetInt(other))} -return _b_.NotImplemented} -$comp_func+="" -for(var $op in $B.$comps){eval("int.__"+$B.$comps[$op]+"__ = "+ -$comp_func.replace(/>/gm,$op). -replace(/__gt__/gm,"__"+$B.$comps[$op]+"__"). -replace(/__lt__/,"__"+$B.$inv_comps[$op]+"__"))} -$B.make_rmethods(int) -var $valid_digits=function(base){var digits="" -if(base===0){return "0"} -if(base < 10){for(var i=0;i < base;i++){digits+=String.fromCharCode(i+48)} -return digits} -var digits="0123456789" -for(var i=10;i < base;i++){digits+=String.fromCharCode(i+55)} -return digits} -int.$factory=function(value,base){ -if(value===undefined){return 0} -if(typeof value=="number" && -(base===undefined ||base==10)){return parseInt(value)} -if(_b_.isinstance(value,_b_.complex)){throw _b_.TypeError.$factory("can't convert complex to int")} -var $ns=$B.args("int",2,{x:null,base:null},["x","base"],arguments,{"base":10},null,null),value=$ns["x"],base=$ns["base"] -if(_b_.isinstance(value,_b_.float)&& base==10){value=_b_.float.numerator(value) -if(value < $B.min_int ||value > $B.max_int){return $B.long_int.$from_float(value)} -else{return value > 0 ? Math.floor(value):Math.ceil(value)}} -if(!(base >=2 && base <=36)){ -if(base !=0){throw _b_.ValueError.$factory("invalid base")}} -if(typeof value=="number"){if(base==10){if(value < $B.min_int ||value > $B.max_int){return $B.long_int.$factory(value)} -return value}else if(value.toString().search("e")>-1){ -throw _b_.OverflowError.$factory("can't convert to base "+base)}else{var res=parseInt(value,base) -if(value < $B.min_int ||value > $B.max_int){return $B.long_int.$factory(value,base)} -return res}} -if(value===true){return Number(1)} -if(value===false){return Number(0)} -if(value.__class__===$B.long_int){var z=parseInt(value.value) -if(z > $B.min_int && z < $B.max_int){return z} -else{return value}} -base=$B.$GetInt(base) -function invalid(value,base){throw _b_.ValueError.$factory("invalid literal for int() with base "+ -base+": '"+_b_.str.$factory(value)+"'")} -if(_b_.isinstance(value,_b_.str)){value=value.valueOf()} -if(typeof value=="string"){var _value=value.trim() -if(_value.length==2 && base==0 && -(_value=="0b" ||_value=="0o" ||_value=="0x")){throw _b_.ValueError.$factory("invalid value")} -if(_value.length >2){var _pre=_value.substr(0,2).toUpperCase() -if(base==0){if(_pre=="0B"){base=2} -if(_pre=="0O"){base=8} -if(_pre=="0X"){base=16}}else if(_pre=="0X" && base !=16){invalid(_value,base)} -else if(_pre=="0O" && base !=8){invalid(_value,base)} -if((_pre=="0B" && base==2)||_pre=="0O" ||_pre=="0X"){_value=_value.substr(2) -while(_value.startsWith("_")){_value=_value.substr(1)}}}else if(base==0){ -base=10} -var _digits=$valid_digits(base),_re=new RegExp("^[+-]?["+_digits+"]"+ -"["+_digits+"_]*$","i"),match=_re.exec(_value) -if(match===null){invalid(value,base)}else{value=_value.replace(/_/g,"")} -if(base <=10 && ! isFinite(value)){invalid(_value,base)} -var res=parseInt(value,base) -if(res < $B.min_int ||res > $B.max_int){return $B.long_int.$factory(value,base)} -return res} -if(_b_.isinstance(value,[_b_.bytes,_b_.bytearray])){return int.$factory($B.$getattr(value,"decode")("latin-1"),base)} -var num_value=$B.to_num(value,["__int__","__index__","__trunc__"]) -if(num_value===null){throw _b_.TypeError.$factory( -"int() argument must be a string, a bytes-like "+ -"object or a number, not '"+$B.class_name(value)+"'")} -return num_value} -$B.set_func_names(int,"builtins") -_b_.int=int -$B.$bool=function(obj){ -if(obj===null ||obj===undefined ){return false} -switch(typeof obj){case "boolean": -return obj -case "number": -case "string": -if(obj){return true} -return false -default: -if(obj.$is_class){return true} -var klass=obj.__class__ ||$B.get_class(obj),missing={},bool_method=$B.$getattr(klass,"__bool__",missing) -if(bool_method===missing){try{return _b_.len(obj)> 0} -catch(err){return true}}else{var res=$B.$call(bool_method)(obj) -if(res !==true && res !==false){throw _b_.TypeError.$factory("__bool__ should return "+ -"bool, returned "+$B.class_name(res))} -return res}}} -var bool={__bases__:[int],__class__:_b_.type,__mro__:[int,_b_.object],$infos:{__name__:"bool",__module__:"builtins"},$is_class:true,$native:true} -var methods=$B.op2method.subset("operations","binary","comparisons","boolean") -for(var op in methods){var method="__"+methods[op]+"__" -bool[method]=(function(op){return function(self,other){var value=self ? 1 :0 -if(int[op]!==undefined){return int[op](value,other)}}})(method)} -bool.__and__=function(self,other){if(_b_.isinstance(other,bool)){return self && other}else if(_b_.isinstance(other,int)){return int.__and__(bool.__index__(self),int.__index__(other))} -return _b_.NotImplemented} -bool.__hash__=bool.__index__=bool.__int__=function(self){if(self.valueOf())return 1 -return 0} -bool.__neg__=function(self){return-$B.int_or_bool(self)} -bool.__or__=function(self,other){if(_b_.isinstance(other,bool)){return self ||other}else if(_b_.isinstance(other,int)){return int.__or__(bool.__index__(self),int.__index__(other))} -return _b_.NotImplemented} -bool.__pos__=$B.int_or_bool -bool.__repr__=bool.__str__=function(self){return self ? "True" :"False"} -bool.__setattr__=function(self,attr){if(_b_.dir(self).indexOf(attr)>-1){var msg="attribute '"+attr+"' of 'int' objects is not writable"}else{var msg="'bool' object has no attribute '"+attr+"'"} -throw _b_.AttributeError.$factory(msg)} -bool.__xor__=function(self,other){if(_b_.isinstance(other,bool)){return self ^ other ? true :false}else if(_b_.isinstance(other,int)){return int.__xor__(bool.__index__(self),int.__index__(other))} -return _b_.NotImplemented} -bool.$factory=function(){ -var $=$B.args("bool",1,{x:null},["x"],arguments,{x:false},null,null) -return $B.$bool($.x)} -_b_.bool=bool -$B.set_func_names(bool,"builtins")})(__BRYTHON__) -; -;(function($B){ -var bltns=$B.InjectBuiltins() -eval(bltns) -try{eval("window")}catch(err){window=self} -var long_int={__class__:_b_.type,__mro__:[int,object],$infos:{__module__:"builtins",__name__:"int"},$is_class:true,$native:true,$descriptors:{"numerator":true,"denominator":true,"imag":true,"real":true}} -function add_pos(v1,v2){ -if(window.BigInt){return{ -__class__:long_int,value:(BigInt(v1)+BigInt(v2)).toString(),pos:true}} -var res="",carry=0,iself=v1.length,sv=0,x -for(var i=v2.length-1;i >=0 ;i--){iself-- -if(iself < 0){sv=0}else{sv=parseInt(v1.charAt(iself))} -x=(carry+sv+parseInt(v2.charAt(i))).toString() -if(x.length==2){res=x.charAt(1)+res -carry=parseInt(x.charAt(0))} -else{res=x+res;carry=0}} -while(iself > 0){iself-- -x=(carry+parseInt(v1.charAt(iself))).toString() -if(x.length==2){res=x.charAt(1)+res -carry=parseInt(x.charAt(0))} -else{res=x+res;carry=0}} -if(carry){res=carry+res} -return{__class__:long_int,value:res,pos:true}} -var len=((Math.pow(2,53)-1)+'').length-1 -function binary_pos(t){var nb_chunks=Math.ceil(t.length/len),chunks=[],pos,start,nb,bin=[] -for(var i=0;i < nb_chunks;i++){pos=t.length-(i+1)*len -start=Math.max(0,pos) -nb=pos-start -chunks.push(t.substr(start,len+nb))} -chunks=chunks.reverse() -chunks.forEach(function(chunk,i){chunks[i]=parseInt(chunk)}) -var rest -var carry=Math.pow(10,15) -while(chunks[chunks.length-1]> 0){chunks.forEach(function(chunk,i){rest=chunk % 2 -chunks[i]=Math.floor(chunk/2) -if(rest && i < chunks.length-1){chunks[i+1]+=carry}}) -bin.push(rest) -if(chunks[0]==0){chunks.shift()}} -bin=bin.reverse().join('') -return bin} -function binary(obj){var bpos=binary_pos(obj.value) -if(obj.pos){return bpos} -var res='' -for(var i=0,len=bpos.length;i < len;i++){res+=bpos.charAt(i)=="0" ? "1":"0"} -var add1=add_pos(res,"1").value -add1=res.substr(0,res.length-add1.length)+add1 -return add1} -function check_shift(shift){ -if(! isinstance(shift,long_int)){throw TypeError.$factory("shift must be int, not '"+ -$B.class_name(shift)+"'")} -if(! shift.pos){throw ValueError.$factory("negative shift count")}} -function clone(obj){ -var obj1={} -for(var attr in obj){obj1[attr]=obj[attr]} -return obj1} -function comp_pos(v1,v2){ -if(v1.length > v2.length){return 1} -else if(v1.length < v2.length){return-1} -else{if(v1 > v2){return 1} -else if(v1 < v2){return-1}} -return 0} -function divmod_by_safe_int(t,n){ -if(n==1){return[t,0]} -var len=(Math.floor((Math.pow(2,53)-1)/n)+'').length-1,nb_chunks=Math.ceil(t.length/len), -chunks=[],pos,start,nb,in_base=[] -for(var i=0;i < nb_chunks;i++){pos=t.length-(i+1)*len -start=Math.max(0,pos) -nb=pos-start -chunks.push(t.substr(start,len+nb))} -chunks=chunks.reverse() -chunks.forEach(function(chunk,i){chunks[i]=parseInt(chunk)}) -var rest,carry=Math.pow(10,len),x -chunks.forEach(function(chunk,i){rest=chunk % n -chunks[i]=Math.floor(chunk/n) -if(i < chunks.length-1){ -chunks[i+1]+=carry*rest}}) -while(chunks[0]==0){chunks.shift() -if(chunks.length==0){return[0,rest]}} -x=chunks[0]+'' -chunks.forEach(function(chunk,i){if(i > 0){ -x+="0".repeat(len-chunk.toString().length)+chunk}}) -return[x,rest]} -function divmod_pos(v1,v2){ -if(window.BigInt){var a={__class__:long_int,value:(BigInt(v1)/BigInt(v2)).toString(),pos:true},b={__class__:long_int,value:(BigInt(v1)% BigInt(v2)).toString(),pos:true} -return[a,b]} -var iv1=parseInt(v1),iv2=parseInt(v2),res1 -if(iv1 < $B.max_int && iv2 < $B.max_int){var rest=iv1 % iv2,quot=Math.floor(iv1/iv2).toString() -var res1=[{__class__:long_int,value:quot.toString(),pos:true},{__class__:long_int,value:rest.toString(),pos:true} -] -return res1}else if(iv2 < $B.max_int){var res_safe=divmod_by_safe_int(v1,iv2) -return[long_int.$factory(res_safe[0]),long_int.$factory(res_safe[1])]} -var quotient,mod -if(comp_pos(v1,v2)==-1){ -quotient="0" -mod=long_int.$factory(v1)}else if(v2==v1){ -quotient="1" -mod=long_int.$factory("0")}else{var quotient="",left=v1.substr(0,v2.length) -if(v1 < v2){left=v1.substr(0,v2.length+1)} -var right=v1.substr(left.length) -var mv2={} -while(true){ -var candidate=Math.floor(parseInt(left)/parseInt(v2))+"" -if(candidate=="10"){ -candidate="9"} -if(mv2[candidate]===undefined){mv2[candidate]=mul_pos(v2,candidate).value} -if(comp_pos(left,mv2[candidate])==-1){ -candidate-- -if(mv2[candidate]===undefined){mv2[candidate]=mul_pos(v2,candidate).value}} -quotient+=candidate -left=sub_pos(left,mv2[candidate]).value -if(right.length==0){break} -left+=right.charAt(0) -right=right.substr(1)} -mod=sub_pos(v1,mul_pos(quotient,v2).value)} -return[long_int.$factory(quotient),mod]} -function split_chunks(s,size){var nb=Math.ceil(s.length/size),chunks=[],len=s.length -for(var i=0;i < nb;i++){var pos=len-size*(i+1) -if(pos < 0){size+=pos;pos=0} -chunks.push(parseInt(s.substr(pos,size)))} -return chunks} -function mul_pos(x,y){if(window.BigInt){return{__class__:long_int,value:(BigInt(x)*BigInt(y)).toString(),pos:true}} -var ix=parseInt(x),iy=parseInt(y),z=ix*iy -if(z < $B.max_int){return{ -__class__:long_int,value:z.toString(),pos:true}} -var chunk_size=6,cx=split_chunks(x,chunk_size),cy=split_chunks(y,chunk_size) -var products={},len=cx.length+cy.length -for(var i=0;i < len-1;i++){products[i]=0} -for(var i=0;i < cx.length;i++){for(var j=0;j < cy.length;j++){products[i+j]+=cx[i]*cy[j]}} -var nb=len-1,pos -for(var i=0;i < len-1;i++){var chunks=split_chunks(products[i].toString(),chunk_size) -for(var j=1;j < chunks.length;j++){pos=i+j -if(products[pos]===undefined){products[pos]=parseInt(chunks[j]) -nb=pos} -else{products[pos]+=parseInt(chunks[j])}} -products[i]=chunks[0]} -var result="",i=0,s -while(products[i]!==undefined){s=products[i].toString() -if(products[i+1]!==undefined){s="0".repeat(chunk_size-s.length)+s} -result=s+result -i++} -try{return long_int.$factory(result)}catch(err){console.log(x,y,products,result) -throw err}} -function sub_pos(v1,v2){ -if(window.BigInt){return{ -__class__:long_int,value:(BigInt(v1)-BigInt(v2)).toString(),pos:true}} -var res="",carry=0,i1=v1.length,sv=0,x -for(var i=v2.length-1;i >=0;i--){i1-- -sv=parseInt(v1.charAt(i1)) -x=(sv-carry-parseInt(v2.charAt(i))) -if(isNaN(x)){console.log("x is NaN",v1.length,v2.length,i,i1,sv,carry,i,v2.charAt(i))} -if(x < 0){res=(10+x)+res;carry=1} -else{res=x+res;carry=0}} -if(res.startsWith("NaN")){alert(res)} -while(i1 > 0){i1-- -x=(parseInt(v1.charAt(i1))-carry) -if(x < 0){res=(10+x)+res;carry=1} -else{res=x+res;carry=0}} -while(res.charAt(0)=="0" && res.length > 1){res=res.substr(1)} -if(res.startsWith("NaN")){console.log("hoho !!",v1,v2,v1 >=v2,res)} -return{__class__:long_int,value:res,pos:true}} -function to_BigInt(x){var res=$B.BigInt(x.value) -if(x.pos){return res} -return-res} -function from_BigInt(y){var pos=y >=0 -y=y.toString() -y=y.endsWith("n")? y.substr(0,y.length-1):y -y=y.startsWith('-')? y.substr(1):y -return intOrLong({__class__:long_int,value:y,pos:pos})} -long_int.$from_float=function(value){var s=Math.abs(value).toString(),v=s -if(s.search("e")>-1){var t=/-?(\d)(\.\d+)?e([+-])(\d*)/.exec(s),n1=t[1],n2=t[2],pos=t[3],exp=t[4] -if(pos=="+"){if(n2===undefined){v=n1+"0".repeat(exp-1)}else{v=n1+n2+"0".repeat(exp-1-n2.length)}}} -return{__class__:long_int,value:v,pos:value >=0}} -long_int.__abs__=function(self){return{__class__:long_int,value:self.value,pos:true}} -long_int.__add__=function(self,other){if(isinstance(other,_b_.float)){return _b_.float.$factory(parseInt(self.value)+other.value)} -if(typeof other=="number"){other=long_int.$factory(_b_.str.$factory(other))}else if(other.__class__ !==long_int){if(isinstance(other,_b_.bool)){other=long_int.$factory(other ? 1 :0)}else if(isinstance(other,int)){ -other=long_int.$factory(_b_.str.$factory(_b_.int.__index__(other)))}else{return _b_.NotImplemented}} -if($B.BigInt){} -var res -if(self.pos && other.pos){ -return add_pos(self.value,other.value)}else if(! self.pos && ! other.pos){ -res=add_pos(self.value,other.value) -res.pos=false -return intOrLong(res)}else if(self.pos && ! other.pos){ -switch(comp_pos(self.value,other.value)){case 1: -res=sub_pos(self.value,other.value) -break -case 0: -res={__class__:long_int,value:0,pos:true} -break -case-1: -res=sub_pos(other.value,self.value) -res.pos=false -break} -return intOrLong(res)}else{ -switch(comp_pos(self.value,other.value)){case 1: -res=sub_pos(self.value,other.value) -res.pos=false -break -case 0: -res={__class__:long_int,value:0,pos:true} -break -case-1: -res=sub_pos(other.value,self.value) -break} -return intOrLong(res)}} -long_int.__and__=function(self,other){if(typeof other=="number"){other=long_int.$factory(_b_.str.$factory(other))} -if($B.BigInt){return from_BigInt(to_BigInt(self)& to_BigInt(other))} -var v1=self.value,v2=other.value,temp1,temp2,res="" -var neg=(! self.pos)&&(! other.pos) -if(neg){self=long_int.__neg__(self) -other=long_int.__neg__(other)} -var b1=binary(self),len1=b1.length,b2=binary(other),len2=b2.length,i=1,res='',x1,x2 -while(true){if(i > len1 && i > len2){break} -if(i > len1){x1=self.pos ? "0" :"1"}else{x1=b1.charAt(len1-i)} -if(i > len2){x2=other.pos ? "0" :"1"}else{x2=b2.charAt(len2-i)} -if(x1=="1" && x2=="1"){res="1"+res}else{res="0"+res} -i++} -while(res.charAt(0)=="0"){res=res.substr(1)} -res=$B.long_int.$factory(res,2) -if(neg){res.pos=false} -return intOrLong(res)} -long_int.__divmod__=function(self,other){if(typeof other=="number"){other=long_int.$factory(_b_.str.$factory(other))} -var dm=divmod_pos(self.value,other.value) -if(self.pos !==other.pos){if(dm[0].value !="0"){dm[0].pos=false} -if(dm[1].value !="0"){ -dm[0]=long_int.__sub__(dm[0],long_int.$factory("1")) -dm[1]=long_int.__sub__(self,long_int.__mul__(other,long_int.$factory(dm[0])))}} -return $B.fast_tuple([intOrLong(dm[0]),intOrLong(dm[1])])} -long_int.__eq__=function(self,other){if(typeof other=="number"){other=long_int.$factory(_b_.str.$factory(other))} -return self.value==other.value && self.pos==other.pos} -long_int.__float__=function(self){return new Number(parseFloat(self.value))} -long_int.__floordiv__=function(self,other){if(isinstance(other,_b_.float)){return _b_.float.$factory(parseInt(self.value)/other)} -if(typeof other=="number"){var t=self.value,res=divmod_by_safe_int(t,other),pos=other > 0 ? self.pos :!self.pos -return{__class__:long_int,value:res[0],pos:pos}} -return intOrLong(long_int.__divmod__(self,other)[0])} -long_int.__ge__=function(self,other){if(typeof other=="number"){other=long_int.$factory(_b_.str.$factory(other))} -if(self.pos !=other.pos){return ! other.pos} -if(self.value.length > other.value.length){return self.pos} -else if(self.value.length < other.value.length){return ! self.pos} -else{return self.pos ? self.value >=other.value : -self.value <=other.value}} -long_int.__gt__=function(self,other){return ! long_int.__le__(self,other)} -long_int.__index__=function(self){ -var res='',temp=self.value,d -while(true){d=divmod_pos(temp,"2") -res=d[1].value+res -temp=d[0].value -if(temp=="0"){break}} -if(! self.pos){ -var nres="",flag=false -for(var len=res.length-1,i=len;i >=0 ;i--){var bit=res.charAt(i) -if(bit=="0"){if(flag){nres="1"+nres}else{nres="0"+nres}}else{if(flag){nres="0"+nres} -else{flag=true;nres="1"+nres}}} -nres="1"+nres -res=nres}else{res="0"+res} -return intOrLong(res)} -long_int.__invert__=function(self){return long_int.__sub__(long_int.$factory("-1"),self)} -long_int.__le__=function(self,other){if(typeof other=="number"){other=long_int.$factory(_b_.str.$factory(other))} -if(self.pos !==other.pos){return ! self.pos} -if(self.value.length > other.value.length){return ! self.pos} -else if(self.value.length < other.value.length){return self.pos} -else{return self.pos ? self.value <=other.value : -self.value >=other.value}} -long_int.__lt__=function(self,other){return !long_int.__ge__(self,other)} -long_int.__lshift__=function(self,shift){if(window.BigInt){if(shift.__class__==long_int){shift=shift.value} -return intOrLong({__class__:long_int,value:(BigInt(self.value)<< BigInt(shift)).toString(),pos:self.pos})} -var is_long=shift.__class__===long_int,shift_safe -if(is_long){var shift_value=parseInt(shift.value) -if(shift_value < 0){throw _b_.ValueError.$factory('negative shift count')} -if(shift_value < $B.max_int){shift_safe=true -shift=shift_value}} -if(shift_safe){if(shift_value==0){return self}}else{shift=long_int.$factory(shift) -if(shift.value=="0"){return self}} -var res=self.value -while(true){var x,carry=0,res1="" -for(var i=res.length-1;i >=0;i--){x=(carry+parseInt(res.charAt(i))*2).toString() -if(x.length==2){res1=x.charAt(1)+res1 -carry=parseInt(x.charAt(0))}else{res1=x+res1 -carry=0}} -if(carry){res1=carry+res1} -res=res1 -if(shift_safe){shift-- -if(shift==0){break}}else{shift=sub_pos(shift.value,"1") -if(shift.value=="0"){break}}} -return intOrLong({__class__:long_int,value:res,pos:self.pos})} -long_int.__mod__=function(self,other){return intOrLong(long_int.__divmod__(self,other)[1])} -long_int.__mro__=[_b_.int,_b_.object] -long_int.__mul__=function(self,other){switch(self){case Number.NEGATIVE_INFINITY: -case Number.POSITIVE_INFINITY: -if($B.rich_comp("__eq__",other,0)){return NaN} -else if(_b_.getattr(other,"__gt__")(0)){return self} -else{return-self}} -if(isinstance(other,_b_.float)){return _b_.float.$factory(parseInt(self.value)*other)} -if(typeof other=="number"){other=long_int.$factory(other)} -other_value=other.value -other_pos=other.pos -if(other.__class__ !==long_int && isinstance(other,int)){ -var value=int.__index__(other) -other_value=_b_.str.$factory(value) -other_pos=value > 0} -if($B.BigInt){return from_BigInt(to_BigInt(self)*to_BigInt(other))} -var res=mul_pos(self.value,other_value) -if(self.pos==other_pos){return intOrLong(res)} -res.pos=false -return intOrLong(res)} -long_int.__neg__=function(obj){return{__class__:long_int,value:obj.value,pos:! obj.pos}} -long_int.__or__=function(self,other){other=long_int.$factory(other) -var v1=long_int.__index__(self) -var v2=long_int.__index__(other) -if(v1.length < v2.length){var temp=v2;v2=v1;v1=temp} -var start=v1.length-v2.length -var res=v1.substr(0,start) -for(var i=0;i < v2.length;i++){if(v1.charAt(start+i)=="1" ||v2.charAt(i)=="1"){res+="1"} -else{res+="0"}} -return intOrLong(long_int.$factory(res,2))} -long_int.__pos__=function(self){return self} -long_int.__pow__=function(self,power,z){if(typeof power=="number"){power=long_int.$from_int(power)}else if(isinstance(power,int)){ -power=long_int.$factory(_b_.str.$factory(_b_.int.__index__(power)))}else if(! isinstance(power,long_int)){var msg="power must be an integer, not '" -throw TypeError.$factory(msg+$B.class_name(power)+"'")} -if(! power.pos){if(self.value=="1"){return self} -return long_int.$factory("0")}else if(power.value=="0"){return long_int.$factory("1")} -if($B.BigInt){var s=$B.BigInt(self.value),b=$B.BigInt(1),x=$B.BigInt(power.value),z=z===undefined ? z :typeof z=="number" ? $B.BigInt(z): -$B.BigInt(z.value) -if(z===undefined){return{ -__class__:long_int,value:(s**x).toString(),pos:true}} -while(x > 0){if(x % $B.BigInt(2)==1){b=b*s} -x=x/$B.BigInt(2) -if(x > 0){s=s*s} -if(z !==undefined){b=b % z}} -return{__class__:long_int,value:b.toString(),pos:true}} -var b={__class__:long_int,value:"1",pos:true},s=self,pow=power.value,temp -while(true){if(typeof pow=="string" && parseInt(pow)< $B.max_int){pow=parseInt(pow)} -if(pow==0){break}else if(typeof pow=="string"){if(parseInt(pow.charAt(pow.length-1))% 2==1){b=long_int.__mul__(b,s)} -pow=long_int.__floordiv__(pow,2)}else{if(pow % 2==1){if(typeof b=="number" && typeof s=="number" && -(temp=b*s)< $B.max_int){b=temp}else{b=long_int.__mul__(long_int.$factory(b),long_int.$factory(s))}} -pow=Math.floor(pow/2)} -if(pow > 0){if(typeof s=="number" &&(temp=s*s)< $B.max_int){s=temp}else{s=long_int.$factory(s) -s=long_int.__mul__(s,s)}} -if(z !==undefined){b=long_int.__mod__(b,z)}} -return intOrLong(b)} -long_int.__rshift__=function(self,shift){if(window.BigInt){if(shift.__class__===long_int){shift=shift.value} -return intOrLong( -{__class__:long_int,value:(BigInt(self.value)>> BigInt(shift)).toString(),pos:self.pos} -)} -if(typeof shift=="number"){var pow2=Math.pow(2,shift) -if(pow2 < $B.max_int){var res=divmod_by_safe_int(self.value,pow2) -return intOrLong({__class__:long_int,value:res[0],pos:self.pos})}} -shift=long_int.$factory(shift) -if(shift.value=="0"){return self} -var res=self.value -while(true){res=divmod_pos(res,"2")[0].value -if(res.value=="0"){break} -shift=sub_pos(shift.value,"1") -if(shift.value=="0"){break}} -return intOrLong({__class__:long_int,value:res,pos:self.pos})} -long_int.__str__=long_int.__repr__=function(self){var res="" -if(! self.pos){res+='-'} -return res+self.value} -long_int.__sub__=function(self,other){if(isinstance(other,_b_.float)){other=other instanceof Number ? other :other.$brython_value -return _b_.float.$factory(parseInt(self.value)-other)} -if(typeof other=="number"){other=long_int.$factory(_b_.str.$factory(other))} -if($B.BigInt){} -var res -if(self.pos && other.pos){switch(comp_pos(self.value,other.value)){case 1: -res=sub_pos(self.value,other.value) -break -case 0: -res={__class__:long_int,value:"0",pos:true} -break -case-1: -res=sub_pos(other.value,self.value) -res.pos=false -break} -return intOrLong(res)}else if(! self.pos && ! other.pos){switch(comp_pos(self.value,other.value)){case 1: -res=sub_pos(self.value,other.value) -res.pos=false -break -case 0: -res={__class__:long_int,value:"0",pos:true} -break -case-1: -res=sub_pos(other.value,self.value) -break} -return intOrLong(res)}else if(self.pos && ! other.pos){return intOrLong(add_pos(self.value,other.value))}else{res=add_pos(self.value,other.value) -res.pos=false -return intOrLong(res)}} -long_int.__truediv__=function(self,other){if(isinstance(other,long_int)){return _b_.float.$factory(parseInt(self.value)/parseInt(other.value))}else if(isinstance(other,_b_.int)){return _b_.float.$factory(parseInt(self.value)/other)}else if(isinstance(other,_b_.float)){return _b_.float.$factory(parseInt(self.value)/other)}else{throw TypeError.$factory( -"unsupported operand type(s) for /: 'int' and '"+ -$B.class_name(other)+"'")}} -long_int.__xor__=function(self,other){other=long_int.$factory(other) -var v1=long_int.__index__(self),v2=long_int.__index__(other) -if(v1.length < v2.length){var temp=v2;v2=v1;v1=temp} -var start=v1.length-v2.length -var res=v1.substr(0,start) -for(var i=0;i < v2.length;i++){if(v1.charAt(start+i)=="1" && v2.charAt(i)=="0"){res+="1"} -else if(v1.charAt(start+i)=="0" && v2.charAt(i)=="1"){res+="1"} -else{res+="0"}} -return intOrLong(long_int.$factory(res,2))} -long_int.numerator=function(self){return self} -long_int.denominator=function(self){return _b_.int.$factory(1)} -long_int.imag=function(self){return _b_.int.$factory(0)} -long_int.real=function(self){return self} -long_int.to_base=function(self,base){ -if(base==2){return binary_pos(self.value)} -var res="",v=self.value -while(v > 0){var dm=divmod_pos(v,base.toString()) -res=parseInt(dm[1].value).toString(base)+res -v=dm[0].value -if(v==0){break}} -return res} -function digits(base){ -var is_digits={} -for(var i=0;i < base;i++){if(i==10){break} -is_digits[i]=true} -if(base > 10){ -for(var i=0;i < base-10;i++){is_digits[String.fromCharCode(65+i)]=true -is_digits[String.fromCharCode(97+i)]=true}} -return is_digits} -var MAX_SAFE_INTEGER=Math.pow(2,53)-1 -var MIN_SAFE_INTEGER=-MAX_SAFE_INTEGER -function isSafeInteger(n){return(typeof n==="number" && -Math.round(n)===n && -MIN_SAFE_INTEGER <=n && -n <=MAX_SAFE_INTEGER)} -function intOrLong(long){ -var v=parseInt(long.value)*(long.pos ? 1 :-1) -if(v > MIN_SAFE_INTEGER && v < MAX_SAFE_INTEGER){return v} -return long} -long_int.$from_int=function(value){return{__class__:long_int,value:value.toString(),pos:value > 0}} -long_int.$factory=function(value,base){ -if(arguments.length > 2){throw _b_.TypeError.$factory("long_int takes at most 2 arguments ("+ -arguments.length+" given)")} -if(base===undefined){base=10} -else if(!isinstance(base,int)){throw TypeError.$factory("'"+$B.class_name(base)+ -"' object cannot be interpreted as an integer")} -if(base < 0 ||base==1 ||base > 36){throw ValueError.$factory( -"long_int.$factory() base must be >= 2 and <= 36")} -if(typeof value=="number"){if(isSafeInteger(value)){value=value.toString()} -else if(value.constructor==Number){value=value.toString()} -else{throw ValueError.$factory( -"argument of long_int is not a safe integer")}}else if(isinstance(value,_b_.float)){if(value===Number.POSITIVE_INFINITY || -value===Number.NEGATIVE_INFINITY){return value} -if(value >=0){value=new Number(Math.round(value.value))} -else{value=new Number(Math.ceil(value.value))}}else if(isinstance(value,_b_.bool)){if(value.valueOf()){return int.$factory(1)} -return int.$factory(0)}else if(value.__class__===long_int){return value}else if(isinstance(value,int)){ -value=value.$brython_value+""}else if(isinstance(value,_b_.bool)){value=_b_.bool.__int__(value)+""}else if(typeof value !="string"){throw ValueError.$factory( -"argument of long_int must be a string, not "+ -$B.class_name(value))} -var has_prefix=false,pos=true,start=0 -while(value.charAt(0)==" " && value.length){value=value.substr(1)} -while(value.charAt(value.length-1)==" " && value.length){value=value.substr(0,value.length-1)} -if(value.charAt(0)=="+"){has_prefix=true} -else if(value.charAt(0)=="-"){has_prefix=true;pos=false} -if(has_prefix){ -if(value.length==1){ -throw ValueError.$factory( -'long_int argument is not a valid number: "'+value+'"')}else{value=value.substr(1)}} -while(start < value.length-1 && value.charAt(start)=="0"){start++} -value=value.substr(start) -var is_digits=digits(base),point=-1 -for(var i=0;i < value.length;i++){if(value.charAt(i)=="." && point==-1){point=i}else if(value.charAt(i)=="e"){ -var mant=value.substr(0,i) -if(/^[+-]?\d+$/.exec(value.substr(i+1))){exp=parseInt(value.substr(i+1))}else{throw Error("wrong exp "+value.substr(i+1))} -if(point !=-1){mant=mant.substr(0,point)+mant.substr(point+1) -exp=exp+point-1} -point=-1 -value=mant+"0".repeat(exp-mant.length) -break} -else if(! is_digits[value.charAt(i)]){throw ValueError.$factory( -'long_int argument is not a valid number: "'+value+'"')}} -if(point !=-1){value=value.substr(0,point)} -if(base !=10){ -var coef="1",v10=long_int.$factory(0),ix=value.length -while(ix--){var digit_base10=parseInt(value.charAt(ix),base).toString(),digit_by_coef=mul_pos(coef,digit_base10).value -v10=add_pos(v10.value,digit_by_coef) -coef=mul_pos(coef,base.toString()).value} -return v10} -return{__class__:long_int,value:value,pos:pos}} -$B.set_func_names(long_int,"builtins") -$B.long_int=long_int})(__BRYTHON__) -; -;(function($B){var _b_=$B.builtins -function $UnsupportedOpType(op,class1,class2){throw _b_.TypeError.$factory("unsupported operand type(s) for "+ -op+": '"+class1+"' and '"+class2+"'")} -var complex={__class__:_b_.type,__dir__:_b_.object.__dir__,$infos:{__module__:"builtins",__name__:"complex"},$is_class:true,$native:true,$descriptors:{real:true,imag:true}} -complex.__abs__=function(self){var _rf=isFinite(self.$real),_if=isFinite(self.$imag) -if((_rf && isNaN(self.$imag))||(_if && isNaN(self.$real))|| -(isNaN(self.$imag)&& isNaN(self.$real))){return NaN} -if(! _rf ||! _if){return Infinity} -var mag=Math.sqrt(Math.pow(self.$real,2)+Math.pow(self.$imag,2)) -if(!isFinite(mag)&& _rf && _if){ -throw _b_.OverflowError.$factory("absolute value too large")} -return mag} -complex.__bool__=function(self){return(self.$real !=0 ||self.$imag !=0)} -complex.__eq__=function(self,other){if(_b_.isinstance(other,complex)){return self.$real.valueOf()==other.$real.valueOf()&& -self.$imag.valueOf()==other.$imag.valueOf()} -if(_b_.isinstance(other,_b_.int)){if(self.$imag !=0){return false} -return self.$real==other.valueOf()} -if(_b_.isinstance(other,_b_.float)){if(self.$imag !=0){return false} -return self.$real==other.valueOf()} -return _b_.NotImplemented} -complex.__floordiv__=function(self,other){$UnsupportedOpType("//","complex",$B.get_class(other))} -complex.__hash__=function(self){ -return self.$imag*1000003+self.$real} -complex.__init__=function(){return _b_.None} -complex.__invert__=function(self){return ~self} -complex.__mod__=function(self,other){throw _b_.TypeError.$factory("TypeError: can't mod complex numbers.")} -complex.__mro__=[_b_.object] -complex.__mul__=function(self,other){if(_b_.isinstance(other,complex)){return make_complex(self.$real*other.$real-self.$imag*other.$imag,self.$imag*other.$real+self.$real*other.$imag)}else if(_b_.isinstance(other,_b_.int)){return make_complex(self.$real*other.valueOf(),self.$imag*other.valueOf())}else if(_b_.isinstance(other,_b_.float)){return make_complex(self.$real*other,self.$imag*other)}else if(_b_.isinstance(other,_b_.bool)){if(other.valueOf()){return self} -return make_complex(0,0)} -$UnsupportedOpType("*",complex,other)} -complex.__ne__=function(self,other){var res=complex.__eq__(self,other) -return res===_b_.NotImplemented ? res :! res} -complex.__neg__=function(self){return make_complex(-self.$real,-self.$imag)} -complex.__new__=function(cls){if(cls===undefined){throw _b_.TypeError.$factory('complex.__new__(): not enough arguments')} -var res,missing={},args=$B.args("complex",3,{cls:null,real:null,imag:null},["cls","real","imag"],arguments,{real:0,imag:missing},null,null),$real=args.real,$imag=args.imag -if(typeof $real=="string"){if($imag !==missing){throw _b_.TypeError.$factory("complex() can't take second arg "+ -"if first is a string")}else{var arg=$real -$real=$real.trim() -if($real.startsWith("(")&& $real.endsWith(")")){$real=$real.substr(1) -$real=$real.substr(0,$real.length-1)} -var complex_re=/^\s*([\+\-]*[0-9_]*\.?[0-9_]*(e[\+\-]*[0-9_]*)?)([\+\-]?)([0-9_]*\.?[0-9_]*(e[\+\-]*[0-9_]*)?)(j?)\s*$/i -var parts=complex_re.exec($real) -function to_num(s){var res=parseFloat(s.charAt(0)+s.substr(1).replace(/_/g,"")) -if(isNaN(res)){throw _b_.ValueError.$factory("could not convert string "+ -"to complex: '"+arg+"'")} -return res} -if(parts===null){throw _b_.ValueError.$factory("complex() arg is a malformed string")}else if(parts[_real]=="." ||parts[_imag]=="." || -parts[_real]==".e" ||parts[_imag]==".e" || -parts[_real]=="e" ||parts[_imag]=="e"){throw _b_.ValueError.$factory("complex() arg is a malformed string")}else if(parts[_j]!=""){if(parts[_sign]==""){$real=0 -if(parts[_real]=="+" ||parts[_real]==""){$imag=1}else if(parts[_real]=='-'){$imag=-1}else{$imag=to_num(parts[_real])}}else{$real=to_num(parts[_real]) -$imag=parts[_imag]=="" ? 1 :to_num(parts[_imag]) -$imag=parts[_sign]=="-" ?-$imag :$imag}}else{$real=to_num(parts[_real]) -$imag=0} -res={__class__:complex,$real:$real ||0,$imag:$imag ||0} -return res}} -$imag=$imag===missing ? 0 :$imag -if(arguments.length==1 && $real.__class__===complex && $imag==0){return $real} -if(_b_.isinstance($real,[_b_.float,_b_.int])&& -_b_.isinstance($imag,[_b_.float,_b_.int])){res={__class__:complex,$real:$real,$imag:$imag} -return res} -var real_to_num=$B.to_num($real,["__complex__","__float__","__index__"]) -if(real_to_num===null){throw _b_.TypeError.$factory("complex() first argument must be a "+ -" string or a number, not '"+$B.class_name($real)+"'")} -$real=real_to_num -$imag=_convert($imag) -if(! _b_.isinstance($real,_b_.float)&& ! _b_.isinstance($real,_b_.int)&& -! _b_.isinstance($real,_b_.complex)){throw _b_.TypeError.$factory("complex() argument must be a string "+ -"or a number")} -if(typeof $imag=="string"){throw _b_.TypeError.$factory("complex() second arg can't be a string")} -if(! _b_.isinstance($imag,_b_.float)&& ! _b_.isinstance($imag,_b_.int)&& -! _b_.isinstance($imag,_b_.complex)&& $imag !==missing){throw _b_.TypeError.$factory("complex() argument must be a string "+ -"or a number")} -$imag=complex.__mul__(complex.$factory("1j"),$imag) -return complex.__add__($imag,$real)} -complex.__pos__=function(self){return self} -function complex2expo(cx){var norm=Math.sqrt((cx.$real*cx.$real)+(cx.$imag*cx.$imag)),sin=cx.$imag/norm,cos=cx.$real/norm,angle -if(cos==0){angle=sin==1 ? Math.PI/2 :3*Math.PI/2} -else if(sin==0){angle=cos==1 ? 0 :Math.PI} -else{angle=Math.atan(sin/cos)} -return{norm:norm,angle:angle}} -complex.__pow__=function(self,other){ -var exp=complex2expo(self),angle=exp.angle,res=Math.pow(exp.norm,other) -if(_b_.isinstance(other,[_b_.int,_b_.float])){return make_complex(res*Math.cos(angle*other),res*Math.sin(angle*other))}else if(_b_.isinstance(other,complex)){ -var x=other.$real,y=other.$imag -var pw=Math.pow(exp.norm,x)*Math.pow(Math.E,-y*angle),theta=y*Math.log(exp.norm)-x*angle -return make_complex(pw*Math.cos(theta),pw*Math.sin(theta))}else{throw _b_.TypeError.$factory("unsupported operand type(s) "+ -"for ** or pow(): 'complex' and '"+ -$B.class_name(other)+"'")}} -complex.__str__=complex.__repr__=function(self){if(self.$real==0){if(1/self.$real < 0){if(self.$imag < 0){return "(-0"+self.$imag+"j)"}else if(self.$imag==0 && 1/self.$imag < 0){return "(-0-"+self.$imag+"j)"}else return "(-0+"+self.$imag+"j)"}else{if(self.$imag==0 && 1/self.$imag < 0){return "-"+self.$imag+"j"}else{return self.$imag+"j"}}} -if(self.$imag > 0){return "("+self.$real+"+"+self.$imag+"j)"} -if(self.$imag==0){if(1/self.$imag < 0){return "("+self.$real+"-"+self.$imag+"j)"} -return "("+self.$real+"+"+self.$imag+"j)"} -return "("+self.$real+"-"+(-self.$imag)+"j)"} -complex.__sqrt__=function(self){if(self.$imag==0){return complex(Math.sqrt(self.$real))} -var r=self.$real,i=self.$imag,_a=Math.sqrt((r+sqrt)/2),_b=Number.sign(i)*Math.sqrt((-r+sqrt)/2) -return make_complex(_a,_b)} -complex.__truediv__=function(self,other){if(_b_.isinstance(other,complex)){if(other.$real==0 && other.$imag==0){throw _b_.ZeroDivisionError.$factory("division by zero")} -var _num=self.$real*other.$real+self.$imag*other.$imag,_div=other.$real*other.$real+other.$imag*other.$imag -var _num2=self.$imag*other.$real-self.$real*other.$imag -return make_complex(_num/_div,_num2/_div)} -if(_b_.isinstance(other,_b_.int)){if(! other.valueOf()){throw _b_.ZeroDivisionError.$factory('division by zero')} -return complex.__truediv__(self,complex.$factory(other.valueOf()))} -if(_b_.isinstance(other,_b_.float)){if(! other.valueOf()){throw _b_.ZeroDivisionError.$factory("division by zero")} -return complex.__truediv__(self,complex.$factory(other.valueOf()))} -$UnsupportedOpType("//","complex",other.__class__)} -complex.conjugate=function(self){return make_complex(self.$real,-self.$imag)} -var $op_func=function(self,other){throw _b_.TypeError.$factory("TypeError: unsupported operand type(s) "+ -"for -: 'complex' and '"+$B.class_name(other)+"'")} -$op_func+="" -var $ops={"&":"and","|":"ior","<<":"lshift",">>":"rshift","^":"xor"} -for(var $op in $ops){eval("complex.__"+$ops[$op]+"__ = "+$op_func.replace(/-/gm,$op))} -complex.__ior__=complex.__or__ -var $op_func=function(self,other){if(_b_.isinstance(other,complex)){return make_complex(self.$real-other.$real,self.$imag-other.$imag)} -if(_b_.isinstance(other,_b_.int)){return make_complex($B.sub(self.$real,other.valueOf()),self.$imag)} -if(_b_.isinstance(other,_b_.float)){return make_complex(self.$real-other.valueOf(),self.$imag)} -if(_b_.isinstance(other,_b_.bool)){var bool_value=0 -if(other.valueOf()){bool_value=1} -return make_complex(self.$real-bool_value,self.$imag)} -throw _b_.TypeError.$factory("unsupported operand type(s) for -: "+ -self.__repr__()+" and '"+$B.class_name(other)+"'")} -complex.__sub__=$op_func -$op_func+='' -$op_func=$op_func.replace(/-/gm,"+").replace(/sub/gm,"add") -eval("complex.__add__ = "+$op_func) -var $comp_func=function(self,other){if(other===undefined ||other==_b_.None){return _b_.NotImplemented} -throw _b_.TypeError.$factory("TypeError: no ordering relation "+ -"is defined for complex numbers")} -$comp_func+='' -for(var $op in $B.$comps){eval("complex.__"+$B.$comps[$op]+"__ = "+ -$comp_func.replace(/>/gm,$op))} -$B.make_rmethods(complex) -complex.real=function(self){return new Number(self.$real)} -complex.real.setter=function(){throw _b_.AttributeError.$factory("readonly attribute")} -complex.imag=function(self){return new Number(self.$imag)} -complex.imag.setter=function(){throw _b_.AttributeError.$factory("readonly attribute")} -var _real=1,_real_mantissa=2,_sign=3,_imag=4,_imag_mantissa=5,_j=6 -var type_conversions=["__complex__","__float__","__index__"] -var _convert=function(num){var klass=num.__class__ ||$B.get_class(num) -for(var i=0;i < type_conversions.length;i++){var missing={},method=$B.$getattr(klass,type_conversions[i],missing) -if(method !==missing){return method(num)}} -return null} -var make_complex=$B.make_complex=function(real,imag){return{ -__class__:complex,$real:real,$imag:imag}} -complex.$factory=function(){return complex.__new__(complex,...arguments)} -$B.set_func_names(complex,"builtins") -_b_.complex=complex})(__BRYTHON__) -; -;(function($B){ -var DEFAULT_MIN_MERGE=32 -var DEFAULT_MIN_GALLOPING=7 -var DEFAULT_TMP_STORAGE_LENGTH=256 -var POWERS_OF_TEN=[1e0,1e1,1e2,1e3,1e4,1e5,1e6,1e7,1e8,1e9] -function log10(x){if(x < 1e5){if(x < 1e2){return x < 1e1 ? 0 :1} -if(x < 1e4){return x < 1e3 ? 2 :3} -return 4} -if(x < 1e7){return x < 1e6 ? 5 :6} -if(x < 1e9){return x < 1e8 ? 7 :8} -return 9} -function alphabeticalCompare(a,b){if(a===b){return 0} -if(~~a===a && ~~b===b){if(a===0 ||b===0){return a < b ?-1 :1} -if(a < 0 ||b < 0){if(b >=0){return-1} -if(a >=0){return 1} -a=-a -b=-b} -al=log10(a) -bl=log10(b) -var t=0 -if(al < bl){a*=POWERS_OF_TEN[bl-al-1] -b/=10 -t=-1}else if(al > bl){b*=POWERS_OF_TEN[al-bl-1] -a/=10; -t=1;} -if(a===b){return t} -return a < b ?-1 :1} -var aStr=String(a) -var bStr=String(b) -if(aStr===bStr){return 0} -return aStr < bStr ?-1 :1} -function minRunLength(n){var r=0 -while(n >=DEFAULT_MIN_MERGE){r |=(n & 1) -n >>=1} -return n+r} -function makeAscendingRun(array,lo,hi,compare){var runHi=lo+1 -if(runHi===hi){return 1;} -if(compare(array[runHi++],array[lo])< 0){while(runHi < hi && compare(array[runHi],array[runHi-1])< 0){runHi++} -reverseRun(array,lo,runHi)}else{while(runHi < hi && compare(array[runHi],array[runHi-1])>=0){runHi++}} -return runHi-lo} -function reverseRun(array,lo,hi){hi-- -while(lo < hi){var t=array[lo] -array[lo++]=array[hi] -array[hi--]=t}} -function binaryInsertionSort(array,lo,hi,start,compare){if(start===lo){start++} -for(;start < hi;start++){var pivot=array[start] -var left=lo -var right=start -while(left < right){var mid=(left+right)>>> 1 -if(compare(pivot,array[mid])< 0){right=mid}else{left=mid+1}} -var n=start-left -switch(n){case 3: -array[left+3]=array[left+2] -case 2: -array[left+2]=array[left+1] -case 1: -array[left+1]=array[left] -break; -default: -while(n > 0){array[left+n]=array[left+n-1] -n--;}} -array[left]=pivot}} -function gallopLeft(value,array,start,length,hint,compare){var lastOffset=0,maxOffset=0,offset=1 -if(compare(value,array[start+hint])> 0){maxOffset=length-hint -while(offset < maxOffset && compare(value,array[start+hint+offset])> 0){lastOffset=offset -offset=(offset << 1)+1 -if(offset <=0){offset=maxOffset}} -if(offset > maxOffset){offset=maxOffset} -lastOffset+=hint -offset+=hint}else{maxOffset=hint+1 -while(offset < maxOffset && compare(value,array[start+hint-offset])<=0){lastOffset=offset -offset=(offset << 1)+1 -if(offset <=0){offset=maxOffset}} -if(offset > maxOffset){offset=maxOffset} -var tmp=lastOffset -lastOffset=hint-offset -offset=hint-tmp} -lastOffset++ -while(lastOffset < offset){var m=lastOffset+((offset-lastOffset)>>> 1) -if(compare(value,array[start+m])> 0){lastOffset=m+1}else{offset=m}} -return offset} -function gallopRight(value,array,start,length,hint,compare){var lastOffset=0,maxOffset=0,offset=1 -if(compare(value,array[start+hint])< 0){maxOffset=hint+1 -while(offset < maxOffset && compare(value,array[start+hint-offset])< 0){lastOffset=offset -offset=(offset << 1)+1 -if(offset <=0){offset=maxOffset}} -if(offset > maxOffset){offset=maxOffset} -var tmp=lastOffset -lastOffset=hint-offset -offset=hint-tmp}else{maxOffset=length-hint -while(offset < maxOffset && compare(value,array[start+hint+offset])>=0){lastOffset=offset -offset=(offset << 1)+1 -if(offset <=0){offset=maxOffset}} -if(offset > maxOffset){offset=maxOffset} -lastOffset+=hint -offset+=hint} -lastOffset++ -while(lastOffset < offset){var m=lastOffset+((offset-lastOffset)>>> 1) -if(compare(value,array[start+m])< 0){offset=m}else{lastOffset=m+1}} -return offset} -var TIM_SORT_ASSERTION="TimSortAssertion" -var TimSortAssertion=function(message){this.name=TIM_SORT_ASSERTION -this.message=message} -var TimSort=function(array,compare){var self={array:array,compare:compare,minGallop:DEFAULT_MIN_GALLOPING,length :array.length,tmpStorageLength:DEFAULT_TMP_STORAGE_LENGTH,stackLength:0,runStart:null,runLength:null,stackSize:0, -pushRun:function(runStart,runLength){this.runStart[this.stackSize]=runStart -this.runLength[this.stackSize]=runLength -this.stackSize+=1}, -mergeRuns:function(){while(this.stackSize > 1){var n=this.stackSize-2 -if((n >=1 && this.runLength[n-1]<= -this.runLength[n]+this.runLength[n+1])|| -(n >=2 && this.runLength[n-2]<= -this.runLength[n]+this.runLength[n-1])){if(this.runLength[n-1]< this.runLength[n+1]){n--}}else if(this.runLength[n]> this.runLength[n+1]){break} -this.mergeAt(n)}}, -forceMergeRuns:function(){while(this.stackSize > 1){var n=this.stackSize-2 -if(n > 0 && this.runLength[n-1]< this.runLength[n+1]){n--} -this.mergeAt(n)}}, -mergeAt:function(i){var compare=this.compare,array=this.array,start1=this.runStart[i],length1=this.runLength[i],start2=this.runStart[i+1],length2=this.runLength[i+1] -this.runLength[i]=length1+length2 -if(i===this.stackSize-3){this.runStart[i+1]=this.runStart[i+2] -this.runLength[i+1]=this.runLength[i+2]} -this.stackSize--; -var k=gallopRight(array[start2],array,start1,length1,0,compare) -start1+=k -length1-=k -if(length1===0){return} -length2=gallopLeft(array[start1+length1-1],array,start2,length2,length2-1,compare) -if(length2===0){return} -if(length1 <=length2){this.mergeLow(start1,length1,start2,length2)}else{this.mergeHigh(start1,length1,start2,length2)}}, -mergeLow:function(start1,length1,start2,length2){var compare=this.compare,array=this.array,tmp=this.tmp,i=0 -for(var i=0;i < length1;i++){tmp[i]=array[start1+i]} -var cursor1=0,cursor2=start2,dest=start1 -array[dest++]=array[cursor2++] -if(--length2===0){for(var i=0;i < length1;i++){array[dest+i]=tmp[cursor1+i]} -return} -if(length1===1){for(var i=0;i < length2;i++){array[dest+i]=array[cursor2+i]} -array[dest+length2]=tmp[cursor1] -return} -var minGallop=this.minGallop -while(true){var count1=0,count2=0,exit=false -do{if(compare(array[cursor2],tmp[cursor1])< 0){array[dest++]=array[cursor2++] -count2++ -count1=0 -if(--length2===0){exit=true -break}}else{array[dest++]=tmp[cursor1++] -count1++ -count2=0 -if(--length1===1){exit=true -break}}}while((count1 |count2)< minGallop) -if(exit){break} -do{ -count1=gallopRight(array[cursor2],tmp,cursor1,length1,0,compare) -if(count1 !==0){for(var i=0;i < count1;i++){array[dest+i]=tmp[cursor1+i]} -dest+=count1 -cursor1+=count1 -length1-=count1 -if(length1 <=1){exit=true -break}} -array[dest++]=array[cursor2++] -if(--length2===0){exit=true -break} -count2=gallopLeft(tmp[cursor1],array,cursor2,length2,0,compare) -if(count2 !==0){for(var i=0;i < count2;i++){array[dest+i]=array[cursor2+i]} -dest+=count2 -cursor2+=count2 -length2-=count2 -if(length2===0){exit=true -break}} -array[dest++]=tmp[cursor1++] -if(--length1===1){exit=true -break} -minGallop--;}while(count1 >=DEFAULT_MIN_GALLOPING || -count2 >=DEFAULT_MIN_GALLOPING); -if(exit){break} -if(minGallop < 0){minGallop=0} -minGallop+=2} -this.minGallop=minGallop -if(minGallop < 1){this.minGallop=1} -if(length1===1){for(var i=0;i < length2;i++){array[dest+i]=array[cursor2+i]} -array[dest+length2]=tmp[cursor1]}else if(length1===0){throw new TimSortAssertion('mergeLow preconditions were not respected')}else{for(var i=0;i < length1;i++){array[dest+i]=tmp[cursor1+i]}}}, -mergeHigh:function(start1,length1,start2,length2){var compare=this.compare,array=this.array,tmp=this.tmp,i=0 -for(var i=0;i < length2;i++){tmp[i]=array[start2+i]} -var cursor1=start1+length1-1,cursor2=length2-1,dest=start2+length2-1,customCursor=0,customDest=0 -array[dest--]=array[cursor1--] -if(--length1===0){customCursor=dest-(length2-1) -for(var i=0;i < length2;i++){array[customCursor+i]=tmp[i]} -return} -if(length2===1){dest-=length1 -cursor1-=length1 -customDest=dest+1 -customCursor=cursor1+1 -for(var i=length1-1;i >=0;i--){array[customDest+i]=array[customCursor+i]} -array[dest]=tmp[cursor2] -return} -var minGallop=this.minGallop -while(true){var count1=0,count2=0,exit=false -do{if(compare(tmp[cursor2],array[cursor1])< 0){array[dest--]=array[cursor1--] -count1++ -count2=0 -if(--length1===0){exit=true -break}}else{array[dest--]=tmp[cursor2--] -count2++ -count1=0 -if(--length2===1){exit=true -break}}}while((count1 |count2)< minGallop) -if(exit){break} -do{count1=length1-gallopRight(tmp[cursor2],array,start1,length1,length1-1,compare) -if(count1 !==0){dest-=count1 -cursor1-=count1 -length1-=count1 -customDest=dest+1 -customCursor=cursor1+1 -for(var i=count1-1;i >=0;i--){array[customDest+i]=array[customCursor+i]} -if(length1===0){exit=true -break}} -array[dest--]=tmp[cursor2--] -if(--length2===1){exit=true -break} -count2=length2-gallopLeft(array[cursor1],tmp,0,length2,length2-1,compare) -if(count2 !==0){dest-=count2 -cursor2-=count2 -length2-=count2 -customDest=dest+1 -customCursor=cursor2+1 -for(var i=0;i < count2;i++){array[customDest+i]=tmp[customCursor+i]} -if(length2 <=1){exit=true -break}} -array[dest--]=array[cursor1--] -if(--length1===0){exit=true -break} -minGallop--}while(count1 >=DEFAULT_MIN_GALLOPING || -count2 >=DEFAULT_MIN_GALLOPING) -if(exit){break} -if(minGallop < 0){minGallop=0} -minGallop+=2} -this.minGallop=minGallop -if(minGallop < 1){this.minGallop=1} -if(length2===1){dest-=length1 -cursor1-=length1 -customDest=dest+1 -customCursor=cursor1+1 -for(var i=length1-1;i >=0;i--){array[customDest+i]=array[customCursor+i]} -array[dest]=tmp[cursor2]}else if(length2==0){throw new TimSortAssertion("mergeHigh preconditions were not respected")}else{customCursor=dest-(length2-1) -for(var i=0;i < length2;i++){array[customCursor+i]=tmp[i]}}}} -if(self.length < 2*DEFAULT_TMP_STORAGE_LENGTH){self.tmpStorageLength=self.length >>> 1} -self.tmp=new Array(self.tmpStorageLength) -self.stackLength= -(self.length < 120 ? 5 : -self.length < 1542 ? 10 : -self.length < 119151 ? 19 :40) -self.runStart=new Array(self.stackLength) -self.runLength=new Array(self.stackLength) -return self} -function tim_sort(array,compare,lo,hi){if(!Array.isArray(array)){throw TypeError.$factory("Can only sort arrays")} -if(!compare){compare=alphabeticalCompare}else if(typeof compare !=="function"){hi=lo -lo=compare -compare=alphabeticalCompare} -if(!lo){lo=0} -if(!hi){hi=array.length} -var remaining=hi-lo -if(remaining < 2){return} -var runLength=0 -if(remaining < DEFAULT_MIN_MERGE){runLength=makeAscendingRun(array,lo,hi,compare) -binaryInsertionSort(array,lo,hi,lo+runLength,compare) -return} -var ts=new TimSort(array,compare) -var minRun=minRunLength(remaining) -do{runLength=makeAscendingRun(array,lo,hi,compare) -if(runLength < minRun){var force=remaining -if(force > minRun){force=minRun} -binaryInsertionSort(array,lo,lo+force,lo+runLength,compare) -runLength=force} -ts.pushRun(lo,runLength) -ts.mergeRuns() -remaining-=runLength -lo+=runLength}while(remaining !==0) -ts.forceMergeRuns()} -function tim_sort_safe(array,compare){ -try{ -tim_sort(array,compare,0,array.length)}catch(e){if(e.name==TIM_SORT_ASSERTION){array.sort(compare);}else{ -throw e;}}} -$B.$TimSort=tim_sort_safe -$B.$AlphabeticalCompare=alphabeticalCompare})(__BRYTHON__) -; -;(function($B){var _b_=$B.builtins,object=_b_.object,getattr=$B.$getattr,isinstance=_b_.isinstance,$N=_b_.None -function check_not_tuple(self,attr){if(self.__class__===tuple){throw _b_.AttributeError.$factory( -"'tuple' object has no attribute '"+attr+"'")}} -function $list(){ -return list.$factory.apply(null,arguments)} -var list={__class__:_b_.type,__mro__:[object],$infos:{__module__:"builtins",__name__:"list"},$is_class:true,$native:true,__dir__:object.__dir__} -list.__add__=function(self,other){if($B.get_class(self)!==$B.get_class(other)){var radd=getattr(other,"__radd__",_b_.NotImplemented) -if(radd !==_b_.NotImplemented){return radd(self)} -throw _b_.TypeError.$factory('can only concatenate list (not "'+ -$B.class_name(other)+'") to list')} -var res=self.slice(),is_js=other.$brython_class=="js" -for(const item of other){res.push(is_js ? $B.$JS2Py(item):item)} -res.__brython__=true -if(isinstance(self,tuple)){res=tuple.$factory(res)} -return res} -list.__contains__=function(self,item){var $=$B.args("__contains__",2,{self:null,item:null},["self","item"],arguments,{},null,null),self=$.self,item=$.item -var _eq=function(other){return $B.rich_comp("__eq__",item,other)} -var i=0 -while(i < self.length){if(_eq(self[i])){return true} -i++} -return false} -list.__delitem__=function(self,arg){if(isinstance(arg,_b_.int)){var pos=arg -if(arg < 0){pos=self.length+pos} -if(pos >=0 && pos < self.length){self.splice(pos,1) -return $N} -throw _b_.IndexError.$factory("list index out of range")} -if(isinstance(arg,_b_.slice)){var step=arg.step -if(step===$N){step=1} -var start=arg.start -if(start===$N){start=step > 0 ? 0 :self.length} -var stop=arg.stop -if(stop===$N){stop=step > 0 ? self.length :0} -if(start < 0){start=self.length+start} -if(stop < 0){stop=self.length+stop} -var res=[],i=null,pos=0 -if(step > 0){if(stop > start){for(var i=start;i < stop;i+=step){if(self[i]!==undefined){res[pos++]=i}}}}else{if(stop < start){for(var i=start;i > stop;i+=step){if(self[i]!==undefined){res[pos++]=i}} -res.reverse()}} -var i=res.length -while(i--){self.splice(res[i],1)} -return $N} -if(_b_.hasattr(arg,"__int__")||_b_.hasattr(arg,"__index__")){list.__delitem__(self,_b_.int.$factory(arg)) -return $N} -throw _b_.TypeError.$factory("list indices must be integer, not "+ -_b_.str.$factory(arg.__class__))} -list.__eq__=function(self,other){if(isinstance(self,list)){var klass=list}else{var klass=tuple} -if(isinstance(other,klass)){if(other.length==self.length){var i=self.length -while(i--){if(! $B.rich_comp("__eq__",self[i],other[i])){return false}} -return true}} -return _b_.NotImplemented} -list.__getitem__=function(self,key){ -$B.check_no_kw("__getitem__",self,key) -$B.check_nb_args("__getitem__",2,arguments) -return list.$getitem(self,key)} -list.$getitem=function(self,key){var factory=(self.__class__ ||$B.get_class(self)).$factory -if(isinstance(key,_b_.int)){var items=self.valueOf(),pos=key -if(key < 0){pos=items.length+pos} -if(pos >=0 && pos < items.length){return items[pos]} -throw _b_.IndexError.$factory("list index out of range")} -if(key.__class__===_b_.slice ||isinstance(key,_b_.slice)){ -if(key.start===_b_.None && key.stop===_b_.None && -key.step===_b_.None){return self.slice()} -var s=_b_.slice.$conv_for_seq(key,self.length) -var res=[],i=null,items=self.valueOf(),pos=0,start=s.start,stop=s.stop,step=s.step -if(step > 0){if(stop <=start){return factory(res)} -for(var i=start;i < stop;i+=step){res[pos++]=items[i]} -return factory(res)}else{if(stop > start){return factory(res)} -for(var i=start;i > stop;i+=step){res[pos++]=items[i]} -return factory(res)}} -if(_b_.hasattr(key,"__int__")||_b_.hasattr(key,"__index__")){return list.__getitem__(self,_b_.int.$factory(key))} -throw _b_.TypeError.$factory("list indices must be integer, not "+ -$B.class_name(key))} -list.__ge__=function(self,other){if(! isinstance(other,[list,_b_.tuple])){return _b_.NotImplemented} -var i=0 -while(i < self.length){if(i >=other.length){return true} -if($B.rich_comp("__eq__",self[i],other[i])){i++} -else{res=getattr(self[i],"__ge__")(other[i]) -if(res===_b_.NotImplemented){throw _b_.TypeError.$factory("unorderable types: "+ -$B.class_name(self[i])+"() >= "+ -$B.class_name(other[i])+"()")}else{return res}}} -return other.length==self.length} -list.__gt__=function(self,other){if(! isinstance(other,[list,_b_.tuple])){return _b_.NotImplemented} -var i=0 -while(i < self.length){if(i >=other.length){return true} -if($B.rich_comp("__eq__",self[i],other[i])){i++} -else{res=getattr(self[i],"__gt__")(other[i]) -if(res===_b_.NotImplemented){throw _b_.TypeError.$factory("unorderable types: "+ -$B.class_name(self[i])+"() > "+ -$B.class_name(other[i])+"()")}else return res}} -return false} -list.__hash__=$N -list.__iadd__=function(){var $=$B.args("__iadd__",2,{self:null,x:null},["self","x"],arguments,{},null,null) -var radd=getattr($.x,"__radd__",_b_.NotImplemented) -if(radd !==_b_.NotImplemented){return radd($.self)} -var x=list.$factory($B.$iter($.x)) -for(var i=0;i < x.length;i++){$.self.push(x[i])} -return $.self} -list.__imul__=function(){var $=$B.args("__imul__",2,{self:null,x:null},["self","x"],arguments,{},null,null),x=$B.$GetInt($.x),len=$.self.length,pos=len -if(x==0){list.clear($.self);return $.self} -for(var i=1;i < x;i++){for(j=0;j < len;j++){$.self[pos++]=$.self[j]}} -return $.self} -list.__init__=function(self,arg){var len_func=$B.$call(getattr(self,"__len__")),pop_func=getattr(self,"pop",$N) -if(pop_func !==$N){pop_func=$B.$call(pop_func) -while(len_func()){pop_func()}} -if(arg===undefined){return $N} -var arg=$B.$iter(arg),next_func=$B.$call(getattr(arg,"__next__")),pos=len_func() -while(1){try{var res=next_func() -self[pos++]=res}catch(err){if(err.__class__===_b_.StopIteration){break} -else{throw err}}} -return $N} -var list_iterator=$B.make_iterator_class("list_iterator") -list_iterator.__reduce__=list_iterator.__reduce_ex__=function(self){return $B.fast_tuple([_b_.iter,$B.fast_tuple([list.$factory(self)]),0])} -list.__iter__=function(self){return list_iterator.$factory(self)} -list.__le__=function(self,other){var res=list.__ge__(self,other) -if(res===_b_.NotImplemented){return res} -return ! res} -list.__len__=function(self){return self.length} -list.__lt__=function(self,other){if(! isinstance(other,[list,_b_.tuple])){return _b_.NotImplemented} -var i=0 -while(i < self.length){if(i >=other.length){return false} -if($B.rich_comp("__eq__",self[i],other[i])){i++}else{res=getattr(self[i],"__lt__")(other[i]) -if(res===_b_.NotImplemented){throw _b_.TypeError.$factory("unorderable types: "+ -$B.class_name(self[i])+"() >= "+ -$B.class_name(other[i])+"()")}else{return res}}} -return other.length > self.length} -list.__mul__=function(self,other){if(isinstance(other,_b_.int)){ -var res=[],$temp=self.slice(),len=$temp.length -for(var i=0;i < other;i++){for(var j=0;j < len;j++){res.push($temp[j])}} -res.__class__=self.__class__ -return res} -if(_b_.hasattr(other,"__int__")||_b_.hasattr(other,"__index__")){return list.__mul__(self,_b_.int.$factory(other))} -var rmul=$B.$getattr(other,"__rmul__",_b_.NotImplemented) -if(rmul !==_b_.NotImplemented){return rmul(self)} -throw _b_.TypeError.$factory( -"can't multiply sequence by non-int of type '"+ -$B.class_name(other)+"'")} -list.__new__=function(cls,...args){if(cls===undefined){throw _b_.TypeError.$factory("list.__new__(): not enough arguments")} -var res=[] -res.__class__=cls -res.__brython__=true -res.__dict__=$B.empty_dict() -return res} -list.__repr__=function(self){if($B.repr.enter(self)){ -return '[...]'} -var _r=[],res -for(var i=0;i < self.length;i++){_r.push(_b_.repr(self[i]))} -if(self.__class__===tuple){if(self.length==1){return "("+_r[0]+",)"} -res="("+_r.join(", ")+")"}else{res="["+_r.join(", ")+"]"} -$B.repr.leave(self) -return res} -list.__setattr__=function(self,attr,value){if(self.__class__===list){if(list.hasOwnProperty(attr)){throw _b_.AttributeError.$factory("'list' object attribute '"+ -attr+"' is read-only")}else{throw _b_.AttributeError.$factory( -"'list' object has no attribute '"+attr+"'")}} -_b_.dict.$setitem(self.__dict__,attr,value) -return $N} -list.__setitem__=function(){var $=$B.args("__setitem__",3,{self:null,key:null,value:null},["self","key","value"],arguments,{},null,null),self=$.self,arg=$.key,value=$.value -list.$setitem(self,arg,value)} -list.$setitem=function(self,arg,value){ -if(typeof arg=="number" ||isinstance(arg,_b_.int)){var pos=arg -if(arg < 0){pos=self.length+pos} -if(pos >=0 && pos < self.length){self[pos]=value} -else{throw _b_.IndexError.$factory("list index out of range")} -return $N} -if(isinstance(arg,_b_.slice)){var s=_b_.slice.$conv_for_seq(arg,self.length) -if(arg.step===null){$B.set_list_slice(self,s.start,s.stop,value)} -else{$B.set_list_slice_step(self,s.start,s.stop,s.step,value)} -return $N} -if(_b_.hasattr(arg,"__int__")||_b_.hasattr(arg,"__index__")){list.__setitem__(self,_b_.int.$factory(arg),value) -return $N} -throw _b_.TypeError.$factory("list indices must be integer, not "+ -$B.class_name(arg))} -$B.make_rmethods(list) -var _ops=["add","sub"] -list.append=function(self,x){$B.check_no_kw("append",self,x) -$B.check_nb_args("append",2,arguments) -self.push(x) -return $N} -list.clear=function(){var $=$B.args("clear",1,{self:null},["self"],arguments,{},null,null) -while($.self.length){$.self.pop()} -return $N} -list.copy=function(){var $=$B.args("copy",1,{self:null},["self"],arguments,{},null,null) -return $.self.slice()} -list.count=function(){var $=$B.args("count",2,{self:null,x:null},["self","x"],arguments,{},null,null) -var res=0,_eq=function(other){return $B.rich_comp("__eq__",$.x,other)},i=$.self.length -while(i--){if(_eq($.self[i])){res++}} -return res} -list.extend=function(){var $=$B.args("extend",2,{self:null,t:null},["self","t"],arguments,{},null,null) -var other=list.$factory($B.$iter($.t)) -for(var i=0;i < other.length;i++){$.self.push(other[i])} -return $N} -list.index=function(){var missing={},$=$B.args("index",4,{self:null,x:null,start:null,stop:null},["self","x","start" ,"stop"],arguments,{start:0,stop:missing},null,null),self=$.self,start=$.start,stop=$.stop -var _eq=function(other){return $B.rich_comp("__eq__",$.x,other)} -if(start.__class__===$B.long_int){start=parseInt(start.value)*(start.pos ? 1 :-1)} -if(start < 0){start=Math.max(0,start+self.length)} -if(stop===missing){stop=self.length} -else{if(stop.__class__===$B.long_int){stop=parseInt(stop.value)*(stop.pos ? 1 :-1)} -if(stop < 0){stop=Math.min(self.length,stop+self.length)} -stop=Math.min(stop,self.length)} -for(var i=start;i < stop;i++){if(_eq(self[i])){return i}} -throw _b_.ValueError.$factory(_b_.str.$factory($.x)+" is not in list")} -list.insert=function(){var $=$B.args("insert",3,{self:null,i:null,item:null},["self","i","item"],arguments,{},null,null) -$.self.splice($.i,0,$.item) -return $N} -list.pop=function(){var missing={} -var $=$B.args("pop",2,{self:null,pos:null},["self","pos"],arguments,{pos:missing},null,null),self=$.self,pos=$.pos -check_not_tuple(self,"pop") -if(pos===missing){pos=self.length-1} -pos=$B.$GetInt(pos) -if(pos < 0){pos+=self.length} -var res=self[pos] -if(res===undefined){throw _b_.IndexError.$factory("pop index out of range")} -self.splice(pos,1) -return res} -list.remove=function(){var $=$B.args("remove",2,{self:null,x:null},["self","x"],arguments,{},null,null) -for(var i=0,len=$.self.length;i < len;i++){if($B.rich_comp("__eq__",$.self[i],$.x)){$.self.splice(i,1) -return $N}} -throw _b_.ValueError.$factory(_b_.str.$factory($.x)+" is not in list")} -list.reverse=function(self){var $=$B.args("reverse",1,{self:null},["self"],arguments,{},null,null),_len=$.self.length-1,i=parseInt($.self.length/2) -while(i--){var buf=$.self[i] -$.self[i]=$.self[_len-i] -$.self[_len-i]=buf} -return $N} -function $partition(arg,array,begin,end,pivot) -{var piv=array[pivot] -array=swap(array,pivot,end-1) -var store=begin -if(arg===null){if(array.$cl !==false){ -var le_func=_b_.getattr(array.$cl,"__le__") -for(var ix=begin;ix < end-1;++ix){if(le_func(array[ix],piv)){array=swap(array,store,ix); -++store}}}else{for(var ix=begin;ix < end-1;++ix){if(getattr(array[ix],"__le__")(piv)){array=swap(array,store,ix) -++store}}}}else{var len=array.length -for(var ix=begin;ix < end-1;++ix){var x=arg(array[ix]) -if(array.length !==len){throw _b_.ValueError.$factory("list modified during sort")} -if(getattr(x,"__le__")(arg(piv))){array=swap(array,store,ix) -++store}}} -array=swap(array,end-1,store) -return store} -function swap(_array,a,b){var tmp=_array[a] -_array[a]=_array[b] -_array[b]=tmp -return _array} -function $qsort(arg,array,begin,end){if(end-1 > begin){var pivot=begin+Math.floor(Math.random()*(end-begin)) -pivot=$partition(arg,array,begin,end,pivot) -$qsort(arg,array,begin,pivot) -$qsort(arg,array,pivot+1,end)}} -function $elts_class(self){ -if(self.length==0){return null} -var cl=$B.get_class(self[0]),i=self.length -while(i--){if($B.get_class(self[i])!==cl){return false}} -return cl} -list.sort=function(self){var $=$B.args("sort",1,{self:null},["self"],arguments,{},null,"kw") -check_not_tuple(self,"sort") -var func=$N,reverse=false,kw_args=$.kw,keys=_b_.list.$factory(_b_.dict.$$keys(kw_args)) -for(var i=0;i < keys.length;i++){if(keys[i]=="key"){func=kw_args.$string_dict[keys[i]][0]}else if(keys[i]=="reverse"){reverse=kw_args.$string_dict[keys[i]][0]}else{throw _b_.TypeError.$factory("'"+keys[i]+ -"' is an invalid keyword argument for this function")}} -if(self.length==0){return} -if(func !==$N){func=$B.$call(func)} -self.$cl=$elts_class(self) -var cmp=null; -if(func===$N && self.$cl===_b_.str){if(reverse){cmp=function(b,a){return $B.$AlphabeticalCompare(a,b)}}else{cmp=function(a,b){return $B.$AlphabeticalCompare(a,b)}}}else if(func===$N && self.$cl===_b_.int){if(reverse){cmp=function(b,a){return a-b}}else{cmp=function(a,b){return a-b}}}else{if(func===$N){if(reverse){cmp=function(b,a){res=getattr(a,"__lt__")(b) -if(res===_b_.NotImplemented){throw _b_.TypeError.$factory("unorderable types: "+ -$B.class_name(b)+"() < "+ -$B.class_name(a)+"()")} -if(res){if(a==b){return 0} -return-1} -return 1}}else{cmp=function(a,b){res=getattr(a,"__lt__")(b) -if(res===_b_.NotImplemented){throw _b_.TypeError.$factory("unorderable types: "+ -$B.class_name(a)+"() < "+ -$B.class_name(b)+"()")} -if(res){if(a==b){return 0} -return-1} -return 1}}}else{if(reverse){cmp=function(b,a){var _a=func(a),_b=func(b) -res=getattr(_a,"__lt__")(_b) -if(res===_b_.NotImplemented){throw _b_.TypeError.$factory("unorderable types: "+ -$B.class_name(b)+"() < "+ -$B.class_name(a)+"()")} -if(res){if(_a==_b){return 0} -return-1} -return 1}}else{cmp=function(a,b){var _a=func(a),_b=func(b) -res=$B.$getattr(_a,"__lt__")(_b) -if(res===_b_.NotImplemented){throw _b_.TypeError.$factory("unorderable types: "+ -$B.class_name(a)+"() < "+ -$B.class_name(b)+"()")} -if(res){if(_a==_b){return 0} -return-1} -return 1}}}} -$B.$TimSort(self,cmp) -return(self.__brython__ ? $N :self)} -$B.$list=function(t){t.__brython__=true -return t} -list.$factory=function(){if(arguments.length==0){return[]} -var $=$B.args("list",1,{obj:null},["obj"],arguments,{},null,null),obj=$.obj -if(Array.isArray(obj)){ -obj=obj.slice() -obj.__brython__=true; -if(obj.__class__==tuple){var res=obj.slice() -res.__class__=list -return res} -return obj} -var res=[],pos=0,arg=$B.$iter(obj),next_func=$B.$call(getattr(arg,"__next__")) -while(1){try{res[pos++]=next_func()}catch(err){if(!isinstance(err,_b_.StopIteration)){throw err} -break}} -res.__brython__=true -return res} -$B.set_func_names(list,"builtins") -var JSArray=$B.JSArray=$B.make_class("JSArray",function(array){return{ -__class__:JSArray,js:array}} -) -JSArray.__repr__=JSArray.__str__=function(){return ""} -function make_args(args){var res=[args[0].js] -for(var i=1,len=args.length;i < len;i++){res.push(args[i])} -return res} -for(var attr in list){if($B.JSArray[attr]!==undefined){continue} -if(typeof list[attr]=="function"){$B.JSArray[attr]=(function(fname){return function(){return $B.$JS2Py(list[fname].apply(null,make_args(arguments)))}})(attr)}} -$B.set_func_names($B.JSArray,"builtins") -function $tuple(arg){return arg} -var tuple={__class__:_b_.type,__mro__:[object],$infos:{__module__:"builtins",__name__:"tuple"},$is_class:true,$native:true} -var tuple_iterator=$B.make_iterator_class("tuple_iterator") -tuple.__iter__=function(self){return tuple_iterator.$factory(self)} -tuple.$factory=function(){var obj=list.$factory(...arguments) -obj.__class__=tuple -return obj} -$B.fast_tuple=function(array){array.__class__=tuple -array.__brython__=true -array.__dict__=$B.empty_dict() -return array} -for(var attr in list){switch(attr){case "__delitem__": -case "__iadd__": -case "__imul__": -case "__setitem__": -case "append": -case "extend": -case "insert": -case "remove": -case "reverse": -break -default: -if(tuple[attr]===undefined){if(typeof list[attr]=="function"){tuple[attr]=(function(x){return function(){return list[x].apply(null,arguments)}})(attr)}else{}}}} -tuple.__eq__=function(self,other){ -if(other===undefined){return self===tuple} -return list.__eq__(self,other)} -function c_mul(a,b){s=((parseInt(a)*b)& 0xFFFFFFFF).toString(16) -return parseInt(s.substr(0,s.length-1),16)} -tuple.__hash__=function(self){ -var x=0x3456789 -for(var i=0,len=self.length;i < len;i++){var y=_b_.hash(self[i]) -x=c_mul(1000003,x)^ y & 0xFFFFFFFF} -return x} -tuple.__init__=function(){ -return $N} -tuple.__new__=function(cls,...args){if(cls===undefined){throw _b_.TypeError.$factory("list.__new__(): not enough arguments")} -var self=[] -self.__class__=cls -self.__brython__=true -self.__dict__=$B.empty_dict() -var arg=$B.$iter(args[0]),next_func=$B.$call(getattr(arg,"__next__")) -while(1){try{var item=next_func() -self.push(item)} -catch(err){if(err.__class__===_b_.StopIteration){break} -else{throw err}}} -return self} -$B.set_func_names(tuple,"builtins") -_b_.list=list -_b_.tuple=tuple -_b_.object.__bases__=tuple.$factory()})(__BRYTHON__) -; - -var $B=__BRYTHON__ -$B.unicode={"Cc":[[0,32],[127,33]],"Zs":[32,160,5760,6158,[8192,11],8239,8287,12288],"Po":[[33,3],[37,3],[42,3,2],47,58,59,63,64,92,161,183,191,894,903,[1370,6],1417,[1472,3,3],1523,1524,1545,1546,1548,1549,1563,1566,1567,[1642,4],1748,[1792,14],[2039,3],[2096,15],2404,2405,2416,3572,3663,3674,3675,[3844,15],3973,[4048,5],[4170,6],4347,[4961,8],5741,5742,[5867,3],5941,5942,[6100,3],[6104,3],[6144,6],[6151,4],6468,6469,6622,6623,6686,6687,[6816,7],[6824,6],[7002,7],[7227,5],7294,7295,7379,8214,8215,[8224,8],[8240,9],[8251,4],[8257,3],[8263,11],8275,[8277,10],[11513,4],11518,11519,11776,11777,[11782,3],11787,[11790,9],11800,11801,11803,11806,11807,[11818,5],11824,11825,[12289,3],12349,12539,42238,42239,[42509,3],42611,42622,[42738,6],[43124,4],43214,43215,[43256,3],43310,43311,43359,[43457,13],43486,43487,[43612,4],43742,43743,44011,[65040,7],65049,65072,65093,65094,[65097,4],[65104,3],[65108,4],[65119,3],65128,65130,65131,[65281,3],[65285,3],[65290,3,2],65295,65306,65307,65311,65312,65340,65377,65380,65381,65792,65793,66463,66512,67671,67871,67903,[68176,9],68223,[68409,7],69819,69820,[69822,4],[74864,4]],"Sc":[36,[162,4],1547,2546,2547,2555,2801,3065,3647,6107,[8352,25],43064,65020,65129,65284,65504,65505,65509,65510],"Ps":[40,91,123,3898,3900,5787,8218,8222,8261,8317,8333,9001,[10088,7,2],10181,[10214,5,2],[10627,11,2],10712,10714,10748,[11810,4,2],[12296,5,2],[12308,4,2],12317,64830,65047,[65077,8,2],65095,[65113,3,2],65288,65339,65371,65375,65378],"Pe":[41,93,125,3899,3901,5788,8262,8318,8334,9002,[10089,7,2],10182,[10215,5,2],[10628,11,2],10713,10715,10749,[11811,4,2],[12297,5,2],[12309,4,2],12318,12319,64831,65048,[65078,8,2],65096,[65114,3,2],65289,65341,[65373,3,3]],"Sm":[43,[60,3],124,126,172,177,215,247,1014,[1542,3],8260,8274,[8314,3],[8330,3],[8512,5],8523,[8592,5],8602,8603,[8608,3,3],8622,8654,8655,8658,8660,[8692,268],[8968,4],8992,8993,9084,[9115,25],[9180,6],9655,9665,[9720,8],9839,[10176,5],[10183,4],10188,[10192,22],[10224,16],[10496,131],[10649,63],[10716,32],[10750,258],[11056,21],[11079,6],64297,65122,[65124,3],65291,[65308,3],65372,65374,65506,[65513,4],120513,120539,120571,120597,120629,120655,120687,120713,120745,120771],"Pd":[45,1418,1470,5120,6150,[8208,6],11799,11802,12316,12336,12448,65073,65074,65112,65123,65293],"Nd":[[48,10],[1632,10],[1776,10],[1984,10],[2406,10],[2534,10],[2662,10],[2790,10],[2918,10],[3046,10],[3174,10],[3302,10],[3430,10],[3664,10],[3792,10],[3872,10],[4160,10],[4240,10],[6112,10],[6160,10],[6470,10],[6608,11],[6784,10],[6800,10],[6992,10],[7088,10],[7232,10],[7248,10],[42528,10],[43216,10],[43264,10],[43472,10],[43600,10],[44016,10],[65296,10],[66720,10],[120782,50]],"Lu":[[65,26],[192,23],[216,7],[256,28,2],[313,8,2],[330,24,2],[377,3,2],385,[386,3,2],391,[393,3],[398,4],403,404,[406,3],412,413,415,[416,4,2],423,425,428,430,431,[433,3],437,439,440,444,[452,4,3],[463,7,2],[478,9,2],497,500,[502,3],[506,29,2],570,571,573,574,577,[579,4],[584,4,2],880,882,886,902,[904,3],908,910,911,[913,17],[931,9],975,[978,3],[984,12,2],1012,1015,1017,1018,[1021,51],[1120,17,2],[1162,28,2],[1217,7,2],[1232,43,2],[1329,38],[4256,38],[7680,75,2],[7838,49,2],[7944,8],[7960,6],[7976,8],[7992,8],[8008,6],[8025,4,2],[8040,8],[8120,4],[8136,4],[8152,4],[8168,5],[8184,4],8450,8455,[8459,3],[8464,3],8469,[8473,5],[8484,4,2],[8491,3],[8496,4],8510,8511,8517,8579,[11264,47],11360,[11362,3],[11367,4,2],[11374,3],11378,11381,[11390,3],[11394,49,2],11499,11501,[42560,16,2],[42594,6,2],[42624,12,2],[42786,7,2],[42802,31,2],[42873,3,2],[42878,5,2],42891,[65313,26],[66560,40],[119808,26],[119860,26],[119912,26],119964,119966,[119967,3,3],119974,[119977,4],[119982,8],[120016,26],120068,120069,[120071,4],[120077,8],[120086,7],120120,120121,[120123,4],[120128,5],120134,[120138,7],[120172,26],[120224,26],[120276,26],[120328,26],[120380,26],[120432,26],[120488,25],[120546,25],[120604,25],[120662,25],[120720,25],120778],"Sk":[94,96,168,175,180,184,[706,4],[722,14],[741,7],749,[751,17],885,900,901,8125,[8127,3],[8141,3],[8157,3],[8173,3],8189,8190,12443,12444,[42752,23],42784,42785,42889,42890,65342,65344,65507],"Pc":[95,8255,8256,8276,65075,65076,[65101,3],65343],"Ll":[[97,26],170,181,186,[223,24],[248,8],[257,28,2],[312,9,2],[329,24,2],[378,3,2],383,384,387,389,392,396,397,402,405,[409,3],414,[417,3,2],424,426,427,429,432,436,438,441,442,[445,3],[454,3,3],[462,8,2],[477,10,2],496,499,501,[505,30,2],[564,6],572,575,576,578,[583,5,2],[592,68],[661,27],881,[883,3,4],892,893,912,[940,35],976,977,[981,3],[985,12,2],[1008,4],[1013,3,3],1020,[1072,48],[1121,17,2],[1163,27,2],[1218,7,2],[1231,44,2],[1377,39],[7424,44],[7522,22],[7545,34],[7681,75,2],[7830,8],[7839,49,2],[7936,8],[7952,6],[7968,8],[7984,8],[8000,6],[8016,8],[8032,8],[8048,14],[8064,8],[8080,8],[8096,8],[8112,5],8118,8119,8126,[8130,3],8134,8135,[8144,4],8150,8151,[8160,8],[8178,3],8182,8183,8458,8462,8463,8467,[8495,3,5],8508,8509,[8518,4],8526,8580,[11312,47],11361,11365,[11366,4,2],11377,11379,11380,[11382,7],[11393,50,2],11492,11500,11502,[11520,38],[42561,16,2],[42595,6,2],[42625,12,2],[42787,7,2],42800,[42801,33,2],[42866,7],42874,42876,[42879,5,2],42892,[64256,7],[64275,5],[65345,26],[66600,40],[119834,26],[119886,7],[119894,18],[119938,26],[119990,4],119995,[119997,7],[120005,11],[120042,26],[120094,26],[120146,26],[120198,26],[120250,26],[120302,26],[120354,26],[120406,26],[120458,28],[120514,25],[120540,6],[120572,25],[120598,6],[120630,25],[120656,6],[120688,25],[120714,6],[120746,25],[120772,6],120779],"So":[166,167,169,174,176,182,1154,1550,1551,1769,1789,1790,2038,2554,2928,[3059,6],3066,3199,3313,3314,3449,[3841,3],[3859,5],[3866,6],[3892,3,2],[4030,8],[4039,6],4046,4047,[4053,4],4254,4255,4960,[5008,10],6464,[6624,32],[7009,10],[7028,9],8448,8449,[8451,4],8456,8457,8468,[8470,3],[8478,6],[8485,3,2],8494,8506,8507,8522,8524,8525,8527,[8597,5],[8604,4],8609,8610,8612,8613,[8615,7],[8623,31],8656,[8657,3,2],[8662,30],[8960,8],[8972,20],[8994,7],[9003,81],[9085,30],[9140,40],[9186,7],[9216,39],[9280,11],[9372,78],[9472,183],[9656,9],[9666,54],[9728,111],[9840,94],[9935,19],9955,[9960,24],[9985,4],[9990,4],[9996,28],[10025,35],10061,[10063,4],[10070,9],[10081,7],10132,[10136,24],[10161,14],[10240,256],[11008,48],11077,11078,[11088,10],[11493,6],[11904,26],[11931,89],[12032,214],[12272,12],12292,12306,12307,12320,12342,12343,12350,12351,12688,12689,[12694,10],[12736,36],[12800,31],[12842,39],[12896,32],[12938,39],[12992,63],[13056,256],[19904,64],[42128,55],[43048,4],43062,43063,43065,[43639,3],65021,65508,65512,65517,65518,65532,65533,65794,[65847,9],[65913,17],[65936,12],[66000,45],[118784,246],[119040,39],[119081,60],[119146,3],119171,119172,[119180,30],[119214,48],[119296,66],119365,[119552,87],[126976,44],[127024,100],[127248,31],127281,127293,127295,[127298,3,4],[127307,4],127319,127327,127353,127355,127356,127359,[127370,4],127376,127488,[127504,34],[127552,9]],"Pi":[171,8216,8219,8220,8223,8249,11778,11780,11785,11788,11804,11808],"Cf":[173,[1536,4],1757,1807,6068,6069,[8203,5],[8234,5],[8288,5],[8298,6],65279,[65529,3],69821,[119155,8],917505,[917536,96]],"No":[178,179,185,[188,3],[2548,6],[3056,3],[3192,7],[3440,6],[3882,10],[4969,20],[6128,10],8304,[8308,6],[8320,10],[8528,16],8585,[9312,60],[9450,22],[10102,30],11517,[12690,4],[12832,10],[12881,15],[12928,10],[12977,15],[43056,6],[65799,45],[65909,4],65930,[66336,4],[67672,8],[67862,6],[68160,8],68221,68222,[68440,8],[68472,8],[69216,31],[119648,18],[127232,11]],"Pf":[187,8217,8221,8250,11779,11781,11786,11789,11805,11809],"Lo":[443,[448,4],660,[1488,27],[1520,3],[1569,31],[1601,10],1646,1647,[1649,99],1749,1774,1775,[1786,3],1791,1808,[1810,30],[1869,89],1969,[1994,33],[2048,22],[2308,54],2365,2384,[2392,10],2418,[2425,7],[2437,8],2447,2448,[2451,22],[2474,7],2482,[2486,4],2493,2510,2524,2525,[2527,3],2544,2545,[2565,6],2575,2576,[2579,22],[2602,7],2610,2611,2613,2614,2616,2617,[2649,4],2654,[2674,3],[2693,9],[2703,3],[2707,22],[2730,7],2738,2739,[2741,5],2749,2768,2784,2785,[2821,8],2831,2832,[2835,22],[2858,7],2866,2867,[2869,5],2877,2908,2909,[2911,3],2929,2947,[2949,6],[2958,3],[2962,4],2969,[2970,3,2],2975,2979,2980,[2984,3],[2990,12],3024,[3077,8],[3086,3],[3090,23],[3114,10],[3125,5],3133,3160,3161,3168,3169,[3205,8],[3214,3],[3218,23],[3242,10],[3253,5],3261,3294,3296,3297,[3333,8],[3342,3],[3346,23],[3370,16],3389,3424,3425,[3450,6],[3461,18],[3482,24],[3507,9],3517,[3520,7],[3585,48],3634,3635,[3648,6],3713,3714,3716,3719,3720,3722,3725,[3732,4],[3737,7],[3745,3],3749,3751,3754,3755,[3757,4],3762,3763,3773,[3776,5],3804,3805,3840,[3904,8],[3913,36],[3976,4],[4096,43],4159,[4176,6],[4186,4],4193,4197,4198,[4206,3],[4213,13],4238,[4304,43],[4352,329],[4682,4],[4688,7],4696,[4698,4],[4704,41],[4746,4],[4752,33],[4786,4],[4792,7],4800,[4802,4],[4808,15],[4824,57],[4882,4],[4888,67],[4992,16],[5024,85],[5121,620],[5743,17],[5761,26],[5792,75],[5888,13],[5902,4],[5920,18],[5952,18],[5984,13],[5998,3],[6016,52],6108,[6176,35],[6212,52],[6272,41],6314,[6320,70],[6400,29],[6480,30],[6512,5],[6528,44],[6593,7],[6656,23],[6688,53],[6917,47],[6981,7],[7043,30],7086,7087,[7168,36],[7245,3],[7258,30],[7401,4],[7406,4],[8501,4],[11568,54],[11648,23],[11680,7],[11688,7],[11696,7],[11704,7],[11712,7],[11720,7],[11728,7],[11736,7],12294,12348,[12353,86],12447,[12449,90],12543,[12549,41],[12593,94],[12704,24],[12784,16],13312,19893,19968,40907,[40960,21],[40982,1143],[42192,40],[42240,268],[42512,16],42538,42539,42606,[42656,70],[43003,7],[43011,3],[43015,4],[43020,23],[43072,52],[43138,50],[43250,6],43259,[43274,28],[43312,23],[43360,29],[43396,47],[43520,41],[43584,3],[43588,8],[43616,16],[43633,6],43642,[43648,48],43697,43701,43702,[43705,5],43712,43714,43739,43740,[43968,35],44032,55203,[55216,23],[55243,49],[63744,302],[64048,62],[64112,106],64285,[64287,10],[64298,13],[64312,5],64318,64320,64321,64323,64324,[64326,108],[64467,363],[64848,64],[64914,54],[65008,12],[65136,5],[65142,135],[65382,10],[65393,45],[65440,31],[65474,6],[65482,6],[65490,6],[65498,3],[65536,12],[65549,26],[65576,19],65596,65597,[65599,15],[65616,14],[65664,123],[66176,29],[66208,49],[66304,31],[66352,17],[66370,8],[66432,30],[66464,36],[66504,8],[66640,78],[67584,6],67592,[67594,44],67639,67640,67644,[67647,23],[67840,22],[67872,26],68096,[68112,4],[68117,3],[68121,27],[68192,29],[68352,54],[68416,22],[68448,19],[68608,73],[69763,45],[73728,879],[77824,1071],131072,173782,173824,177972,[194560,542]],"Lt":[[453,3,3],498,[8072,8],[8088,8],[8104,8],8124,8140,8188],"Lm":[[688,18],[710,12],[736,5],748,750,884,890,1369,1600,1765,1766,2036,2037,2042,2074,2084,2088,2417,3654,3782,4348,6103,6211,6823,[7288,6],[7468,54],7544,[7579,37],8305,8319,[8336,5],11389,11631,11823,12293,[12337,5],12347,12445,12446,[12540,3],40981,[42232,6],42508,42623,[42775,9],42864,42888,43471,43632,43741,65392,65438,65439],"Mn":[[768,112],[1155,5],[1425,45],1471,1473,1474,1476,1477,1479,[1552,11],[1611,20],1648,[1750,7],[1759,6],1767,1768,[1770,4],1809,[1840,27],[1958,11],[2027,9],[2070,4],[2075,9],[2085,3],[2089,5],[2304,3],2364,[2369,8],2381,[2385,5],2402,2403,2433,2492,[2497,4],2509,2530,2531,2561,2562,2620,2625,2626,2631,2632,[2635,3],2641,2672,2673,2677,2689,2690,2748,[2753,5],2759,2760,2765,2786,2787,2817,2876,2879,[2881,4],2893,2902,2914,2915,2946,3008,3021,[3134,3],[3142,3],[3146,4],3157,3158,3170,3171,3260,3263,3270,3276,3277,3298,3299,[3393,4],3405,3426,3427,3530,[3538,3],3542,3633,[3636,7],[3655,8],3761,[3764,6],3771,3772,[3784,6],3864,3865,[3893,3,2],[3953,14],[3968,5],3974,3975,[3984,8],[3993,36],4038,[4141,4],[4146,6],4153,4154,4157,4158,4184,4185,[4190,3],[4209,4],4226,4229,4230,4237,4253,4959,[5906,3],[5938,3],5970,5971,6002,6003,[6071,7],6086,[6089,11],6109,[6155,3],6313,[6432,3],6439,6440,6450,[6457,3],6679,6680,6742,[6744,7],6752,6754,[6757,8],[6771,10],6783,[6912,4],6964,[6966,5],6972,6978,[7019,9],7040,7041,[7074,4],7080,7081,[7212,8],7222,7223,[7376,3],[7380,13],[7394,7],7405,[7616,39],[7677,3],[8400,13],8417,[8421,12],[11503,3],[11744,32],[12330,6],12441,12442,42607,42620,42621,42736,42737,43010,43014,43019,43045,43046,43204,[43232,18],[43302,8],[43335,11],[43392,3],43443,[43446,4],43452,[43561,6],43569,43570,43573,43574,43587,43596,43696,[43698,3],43703,43704,43710,43711,43713,44005,44008,44013,64286,[65024,16],[65056,7],66045,[68097,3],68101,68102,[68108,4],[68152,3],68159,69760,69761,[69811,4],69817,69818,[119143,3],[119163,8],[119173,7],[119210,4],[119362,3],[917760,240]],"Me":[1160,1161,1758,[8413,4],[8418,3],[42608,3]],"Mc":[2307,[2366,3],[2377,4],2382,2434,2435,[2494,3],2503,2504,2507,2508,2519,2563,[2622,3],2691,[2750,3],2761,2763,2764,2818,2819,2878,2880,2887,2888,2891,2892,2903,3006,3007,3009,3010,[3014,3],[3018,3],3031,[3073,3],[3137,4],3202,3203,3262,[3264,5],3271,3272,3274,3275,3285,3286,3330,3331,[3390,3],[3398,3],[3402,3],3415,3458,3459,[3535,3],[3544,8],3570,3571,3902,3903,3967,4139,4140,4145,4152,4155,4156,4182,4183,[4194,3],[4199,7],4227,4228,[4231,6],4239,[4250,3],6070,[6078,8],6087,6088,[6435,4],[6441,3],6448,6449,[6451,6],[6576,17],6600,6601,[6681,3],6741,6743,6753,6755,6756,[6765,6],6916,6965,6971,[6973,5],6979,6980,7042,7073,7078,7079,7082,[7204,8],7220,7221,7393,7410,43043,43044,43047,43136,43137,[43188,16],43346,43347,43395,43444,43445,43450,43451,[43453,4],43567,43568,43571,43572,43597,43643,44003,44004,44006,44007,44009,44010,44012,69762,[69808,3],69815,69816,119141,119142,[119149,6]],"Nl":[[5870,3],[8544,35],[8581,4],12295,[12321,9],[12344,3],[42726,10],[65856,53],66369,66378,[66513,5],[74752,99]],"Zl":[8232],"Zp":[8233],"Cs":[55296,56191,56192,56319,56320,57343],"Co":[57344,63743,983040,1048573,1048576,1114109],"digits":[[48,10],178,179,185,[1632,10],[1776,10],[1984,10],[2406,10],[2534,10],[2662,10],[2790,10],[2918,10],[3046,10],[3174,10],[3302,10],[3430,10],[3558,10],[3664,10],[3792,10],[3872,10],[4160,10],[4240,10],[4969,9],[6112,10],[6160,10],[6470,10],[6608,11],[6784,10],[6800,10],[6992,10],[7088,10],[7232,10],[7248,10],8304,[8308,6],[8320,10],[9312,9],[9332,9],[9352,9],9450,[9461,9],9471,[10102,9],[10112,9],[10122,9],[42528,10],[43216,10],[43264,10],[43472,10],[43504,10],[43600,10],[44016,10],[65296,10],[66720,10],[68160,4],[68912,10],[69216,9],[69714,9],[69734,10],[69872,10],[69942,10],[70096,10],[70384,10],[70736,10],[70864,10],[71248,10],[71360,10],[71472,10],[71904,10],[72784,10],[73040,10],[73120,10],[92768,10],[93008,10],[120782,50],[123200,10],[123632,10],[125264,10],[127232,11]],"numeric":[[48,10],178,179,185,[188,3],[1632,10],[1776,10],[1984,10],[2406,10],[2534,10],[2548,6],[2662,10],[2790,10],[2918,10],[2930,6],[3046,13],[3174,10],[3192,7],[3302,10],[3416,7],[3430,19],[3558,10],[3664,10],[3792,10],[3872,20],[4160,10],[4240,10],[4969,20],[5870,3],[6112,10],[6128,10],[6160,10],[6470,10],[6608,11],[6784,10],[6800,10],[6992,10],[7088,10],[7232,10],[7248,10],8304,[8308,6],[8320,10],[8528,51],[8581,5],[9312,60],[9450,22],[10102,30],11517,12295,[12321,9],[12344,3],[12690,4],[12832,10],[12872,8],[12881,15],[12928,10],[12977,15],13317,13443,14378,15181,19968,19971,19975,19977,20061,20108,20116,20118,20159,20160,20191,20200,20237,20336,20740,20806,[20841,3,2],21313,[21315,3],21324,[21441,4],22235,22769,22777,24186,24318,24319,[24332,3],24336,25342,25420,26578,28422,29590,30334,32902,33836,36014,36019,36144,38433,38470,38476,38520,38646,[42528,10],[42726,10],[43056,6],[43216,10],[43264,10],[43472,10],[43504,10],[43600,10],[44016,10],63851,63859,63864,63922,63953,63955,63997,[65296,10],[65799,45],[65856,57],65930,65931,[66273,27],[66336,4],66369,66378,[66513,5],[66720,10],[67672,8],[67705,7],[67751,9],[67835,5],[67862,6],68028,68029,[68032,16],[68050,46],[68160,9],68221,68222,[68253,3],[68331,5],[68440,8],[68472,8],[68521,7],[68858,6],[68912,10],[69216,31],[69405,10],[69457,4],[69714,30],[69872,10],[69942,10],[70096,10],[70113,20],[70384,10],[70736,10],[70864,10],[71248,10],[71360,10],[71472,12],[71904,19],[72784,29],[73040,10],[73120,10],[73664,21],[74752,111],[92768,10],[93008,10],[93019,7],[93824,23],[119520,20],[119648,25],[120782,50],[123200,10],[123632,10],[125127,9],[125264,10],[126065,59],[126125,3],[126129,4],[126209,45],[126255,15],[127232,13],131073,131172,131298,131361,133418,133507,133516,133532,133866,133885,133913,140176,141720,146203,156269,194704],"Cn":[[888,2],[896,4],[907,1],[909,1],[930,1],[1328,1],[1367,2],[1419,2],[1424,1],[1480,8],[1515,4],[1525,11],[1565,1],[1806,1],[1867,2],[1970,14],[2043,2],[2094,2],[2111,1],[2140,2],[2143,1],[2155,53],[2229,1],[2238,21],[2436,1],[2445,2],[2449,2],[2473,1],[2481,1],[2483,3],[2490,2],[2501,2],[2505,2],[2511,8],[2520,4],[2526,1],[2532,2],[2559,2],[2564,1],[2571,4],[2577,2],[2601,1],[2609,1],[2612,1],[2615,1],[2618,2],[2621,1],[2627,4],[2633,2],[2638,3],[2642,7],[2653,1],[2655,7],[2679,10],[2692,1],[2702,1],[2706,1],[2729,1],[2737,1],[2740,1],[2746,2],[2758,1],[2762,1],[2766,2],[2769,15],[2788,2],[2802,7],[2816,1],[2820,1],[2829,2],[2833,2],[2857,1],[2865,1],[2868,1],[2874,2],[2885,2],[2889,2],[2894,8],[2904,4],[2910,1],[2916,2],[2936,10],[2948,1],[2955,3],[2961,1],[2966,3],[2971,1],[2973,1],[2976,3],[2981,3],[2987,3],[3002,4],[3011,3],[3017,1],[3022,2],[3025,6],[3032,14],[3067,5],[3085,1],[3089,1],[3113,1],[3130,3],[3141,1],[3145,1],[3150,7],[3159,1],[3163,5],[3172,2],[3184,7],[3213,1],[3217,1],[3241,1],[3252,1],[3258,2],[3269,1],[3273,1],[3278,7],[3287,7],[3295,1],[3300,2],[3312,1],[3315,13],[3332,1],[3341,1],[3345,1],[3397,1],[3401,1],[3408,4],[3428,2],[3456,2],[3460,1],[3479,3],[3506,1],[3516,1],[3518,2],[3527,3],[3531,4],[3541,1],[3543,1],[3552,6],[3568,2],[3573,12],[3643,4],[3676,37],[3715,1],[3717,1],[3723,1],[3748,1],[3750,1],[3774,2],[3781,1],[3783,1],[3790,2],[3802,2],[3808,32],[3912,1],[3949,4],[3992,1],[4029,1],[4045,1],[4059,37],[4294,1],[4296,5],[4302,2],[4681,1],[4686,2],[4695,1],[4697,1],[4702,2],[4745,1],[4750,2],[4785,1],[4790,2],[4799,1],[4801,1],[4806,2],[4823,1],[4881,1],[4886,2],[4955,2],[4989,3],[5018,6],[5110,2],[5118,2],[5789,3],[5881,7],[5901,1],[5909,11],[5943,9],[5972,12],[5997,1],[6001,1],[6004,12],[6110,2],[6122,6],[6138,6],[6159,1],[6170,6],[6265,7],[6315,5],[6390,10],[6431,1],[6444,4],[6460,4],[6465,3],[6510,2],[6517,11],[6572,4],[6602,6],[6619,3],[6684,2],[6751,1],[6781,2],[6794,6],[6810,6],[6830,2],[6847,65],[6988,4],[7037,3],[7156,8],[7224,3],[7242,3],[7305,7],[7355,2],[7368,8],[7419,5],[7674,1],[7958,2],[7966,2],[8006,2],[8014,2],[8024,1],[8026,1],[8028,1],[8030,1],[8062,2],[8117,1],[8133,1],[8148,2],[8156,1],[8176,2],[8181,1],[8191,1],[8293,1],[8306,2],[8335,1],[8349,3],[8384,16],[8433,15],[8588,4],[9255,25],[9291,21],[11124,2],[11158,2],[11311,1],[11359,1],[11508,5],[11558,1],[11560,5],[11566,2],[11624,7],[11633,14],[11671,9],[11687,1],[11695,1],[11703,1],[11711,1],[11719,1],[11727,1],[11735,1],[11743,1],[11856,48],[11930,1],[12020,12],[12246,26],[12284,4],[12352,1],[12439,2],[12544,5],[12592,1],[12687,1],[12731,5],[12772,12],[12831,1],[19894,10],[40944,16],[42125,3],[42183,9],[42540,20],[42744,8],[42944,2],[42951,48],[43052,4],[43066,6],[43128,8],[43206,8],[43226,6],[43348,11],[43389,3],[43470,1],[43482,4],[43519,1],[43575,9],[43598,2],[43610,2],[43715,24],[43767,10],[43783,2],[43791,2],[43799,9],[43815,1],[43823,1],[43880,8],[44014,2],[44026,6],[55204,12],[55239,4],[55292,4],[64110,2],[64218,38],[64263,12],[64280,5],[64311,1],[64317,1],[64319,1],[64322,1],[64325,1],[64450,17],[64832,16],[64912,2],[64968,40],[65022,2],[65050,6],[65107,1],[65127,1],[65132,4],[65141,1],[65277,2],[65280,1],[65471,3],[65480,2],[65488,2],[65496,2],[65501,3],[65511,1],[65519,10],[65534,2],[65548,1],[65575,1],[65595,1],[65598,1],[65614,2],[65630,34],[65787,5],[65795,4],[65844,3],[65935,1],[65948,4],[65953,47],[66046,130],[66205,3],[66257,15],[66300,4],[66340,9],[66379,5],[66427,5],[66462,1],[66500,4],[66518,42],[66718,2],[66730,6],[66772,4],[66812,4],[66856,8],[66916,11],[66928,144],[67383,9],[67414,10],[67432,152],[67590,2],[67593,1],[67638,1],[67641,3],[67645,2],[67670,1],[67743,8],[67760,48],[67827,1],[67830,5],[67868,3],[67898,5],[67904,64],[68024,4],[68048,2],[68100,1],[68103,5],[68116,1],[68120,1],[68150,2],[68155,4],[68169,7],[68185,7],[68256,32],[68327,4],[68343,9],[68406,3],[68438,2],[68467,5],[68498,7],[68509,12],[68528,80],[68681,55],[68787,13],[68851,7],[68904,8],[68922,294],[69247,129],[69416,8],[69466,134],[69623,9],[69710,4],[69744,15],[69826,11],[69838,2],[69865,7],[69882,6],[69941,1],[69959,9],[70007,9],[70094,2],[70112,1],[70133,11],[70162,1],[70207,65],[70279,1],[70281,1],[70286,1],[70302,1],[70314,6],[70379,5],[70394,6],[70404,1],[70413,2],[70417,2],[70441,1],[70449,1],[70452,1],[70458,1],[70469,2],[70473,2],[70478,2],[70481,6],[70488,5],[70500,2],[70509,3],[70517,139],[70746,1],[70748,1],[70752,32],[70856,8],[70874,166],[71094,2],[71134,34],[71237,11],[71258,6],[71277,19],[71353,7],[71370,54],[71451,2],[71468,4],[71488,192],[71740,100],[71923,12],[71936,160],[72104,2],[72152,2],[72165,27],[72264,8],[72355,29],[72441,263],[72713,1],[72759,1],[72774,10],[72813,3],[72848,2],[72872,1],[72887,73],[72967,1],[72970,1],[73015,3],[73019,1],[73022,1],[73032,8],[73050,6],[73062,1],[73065,1],[73103,1],[73106,1],[73113,7],[73130,310],[73465,199],[73714,13],[74650,102],[74863,1],[74869,11],[75076,2748],[78895,1],[78905,4039],[83527,8633],[92729,7],[92767,1],[92778,4],[92784,96],[92910,2],[92918,10],[92998,10],[93018,1],[93026,1],[93048,5],[93072,688],[93851,101],[94027,4],[94088,7],[94112,64],[94180,28],[100344,8],[101107,9485],[110879,49],[110931,17],[110952,8],[111356,2308],[113771,5],[113789,3],[113801,7],[113818,2],[113828,4956],[119030,10],[119079,2],[119273,23],[119366,154],[119540,12],[119639,9],[119673,135],[119893,1],[119965,1],[119968,2],[119971,2],[119975,2],[119981,1],[119994,1],[119996,1],[120004,1],[120070,1],[120075,2],[120085,1],[120093,1],[120122,1],[120127,1],[120133,1],[120135,3],[120145,1],[120486,2],[120780,2],[121484,15],[121504,1],[121520,1360],[122887,1],[122905,2],[122914,1],[122917,1],[122923,213],[123181,3],[123198,2],[123210,4],[123216,368],[123642,5],[123648,1280],[125125,2],[125143,41],[125260,4],[125274,4],[125280,785],[126133,76],[126270,194],[126468,1],[126496,1],[126499,1],[126501,2],[126504,1],[126515,1],[126520,1],[126522,1],[126524,6],[126531,4],[126536,1],[126538,1],[126540,1],[126544,1],[126547,1],[126549,2],[126552,1],[126554,1],[126556,1],[126558,1],[126560,1],[126563,1],[126565,2],[126571,1],[126579,1],[126584,1],[126589,1],[126591,1],[126602,1],[126620,5],[126628,1],[126634,1],[126652,52],[126706,270],[127020,4],[127124,12],[127151,2],[127168,1],[127184,1],[127222,10],[127245,3],[127341,3],[127405,57],[127491,13],[127548,4],[127561,7],[127570,14],[127590,154],[128726,10],[128749,3],[128763,5],[128884,12],[128985,7],[129004,20],[129036,4],[129096,8],[129114,6],[129160,8],[129198,82],[129292,1],[129394,1],[129399,3],[129443,2],[129451,3],[129483,2],[129620,12],[129646,2],[129652,4],[129659,5],[129667,13],[129686,1386],[173783,41],[177973,11],[178206,2],[183970,14],[191457,3103],[195102,722403],[917506,30],[917632,128],[918000,65040],[1048574,2]]} -$B.unicode_casefold={223:[115,115],304:[105,775],329:[700,110],496:[106,780],912:[953,776,769],944:[965,776,769],1415:[1381,1410],7830:[104,817],7831:[116,776],7832:[119,778],7833:[121,778],7834:[97,702],7838:[223],8016:[965,787],8018:[965,787,768],8020:[965,787,769],8022:[965,787,834],8064:[7936,953],8065:[7937,953],8066:[7938,953],8067:[7939,953],8068:[7940,953],8069:[7941,953],8070:[7942,953],8071:[7943,953],8072:[8064],8073:[8065],8074:[8066],8075:[8067],8076:[8068],8077:[8069],8078:[8070],8079:[8071],8080:[7968,953],8081:[7969,953],8082:[7970,953],8083:[7971,953],8084:[7972,953],8085:[7973,953],8086:[7974,953],8087:[7975,953],8088:[8080],8089:[8081],8090:[8082],8091:[8083],8092:[8084],8093:[8085],8094:[8086],8095:[8087],8096:[8032,953],8097:[8033,953],8098:[8034,953],8099:[8035,953],8100:[8036,953],8101:[8037,953],8102:[8038,953],8103:[8039,953],8104:[8096],8105:[8097],8106:[8098],8107:[8099],8108:[8100],8109:[8101],8110:[8102],8111:[8103],8114:[8048,953],8115:[945,953],8116:[940,953],8118:[945,834],8119:[945,834,953],8124:[8115],8130:[8052,953],8131:[951,953],8132:[942,953],8134:[951,834],8135:[951,834,953],8140:[8131],8146:[953,776,768],8147:[953,776,769],8150:[953,834],8151:[953,776,834],8162:[965,776,768],8163:[965,776,769],8164:[961,787],8166:[965,834],8167:[965,776,834],8178:[8060,953],8179:[969,953],8180:[974,953],8182:[969,834],8183:[969,834,953],8188:[8179],64256:[102,102],64257:[102,105],64258:[102,108],64259:[102,102,105],64260:[102,102,108],64261:[115,116],64262:[115,116],64275:[1396,1398],64276:[1396,1381],64277:[1396,1387],64278:[1406,1398],64279:[1396,1389]} -$B.unicode_bidi_whitespace=[9,10,11,12,13,28,29,30,31,32,133,5760,6158,8192,8193,8194,8195,8196,8197,8198,8199,8200,8201,8202,8232,8233,8287,12288] -$B.unicode_identifiers={"XID_Start":[95,[65,26],[97,26],170,181,186,[192,23],[216,31],[248,458],[710,12],[736,5],748,750,[880,5],[886,2],[891,3],902,[904,3],908,[910,20],[931,83],[1015,139],[1162,156],[1329,38],1369,[1377,39],[1488,27],[1520,3],[1569,42],[1646,2],[1649,99],1749,[1765,2],[1774,2],[1786,3],1791,1808,[1810,30],[1869,89],1969,[1994,33],[2036,2],2042,[2048,22],2074,2084,2088,[2308,54],2365,2384,[2392,10],2417,2418,[2425,7],[2437,8],[2447,2],[2451,22],[2474,7],2482,[2486,4],2493,2510,[2524,2],[2527,3],[2544,2],[2565,6],[2575,2],[2579,22],[2602,7],[2610,2],[2613,2],[2616,2],[2649,4],2654,[2674,3],[2693,9],[2703,3],[2707,22],[2730,7],[2738,2],[2741,5],2749,2768,[2784,2],[2821,8],[2831,2],[2835,22],[2858,7],[2866,2],[2869,5],2877,[2908,2],[2911,3],2929,2947,[2949,6],[2958,3],[2962,4],[2969,2],2972,[2974,2],[2979,2],[2984,3],[2990,12],3024,[3077,8],[3086,3],[3090,23],[3114,10],[3125,5],3133,[3160,2],[3168,2],[3205,8],[3214,3],[3218,23],[3242,10],[3253,5],3261,3294,[3296,2],[3333,8],[3342,3],[3346,23],[3370,16],3389,[3424,2],[3450,6],[3461,18],[3482,24],[3507,9],3517,[3520,7],[3585,48],3634,[3648,7],[3713,2],3716,[3719,2],3722,3725,[3732,4],[3737,7],[3745,3],3749,3751,[3754,2],[3757,4],3762,3773,[3776,5],3782,[3804,2],3840,[3904,8],[3913,36],[3976,4],[4096,43],4159,[4176,6],[4186,4],4193,[4197,2],[4206,3],[4213,13],4238,[4256,38],[4304,43],4348,[4352,329],[4682,4],[4688,7],4696,[4698,4],[4704,41],[4746,4],[4752,33],[4786,4],[4792,7],4800,[4802,4],[4808,15],[4824,57],[4882,4],[4888,67],[4992,16],[5024,85],[5121,620],[5743,17],[5761,26],[5792,75],[5870,3],[5888,13],[5902,4],[5920,18],[5952,18],[5984,13],[5998,3],[6016,52],6103,6108,[6176,88],[6272,41],6314,[6320,70],[6400,29],[6480,30],[6512,5],[6528,44],[6593,7],[6656,23],[6688,53],6823,[6917,47],[6981,7],[7043,30],[7086,2],[7168,36],[7245,3],[7258,36],[7401,4],[7406,4],[7424,192],[7680,278],[7960,6],[7968,38],[8008,6],[8016,8],8025,8027,8029,[8031,31],[8064,53],[8118,7],8126,[8130,3],[8134,7],[8144,4],[8150,6],[8160,13],[8178,3],[8182,7],8305,8319,[8336,5],8450,8455,[8458,10],8469,8472,[8473,5],8484,8486,8488,[8490,16],[8508,4],[8517,5],8526,[8544,41],[11264,47],[11312,47],[11360,133],[11499,4],[11520,38],[11568,54],11631,[11648,23],[11680,7],[11688,7],[11696,7],[11704,7],[11712,7],[11720,7],[11728,7],[11736,7],12293,12294,12295,[12321,9],[12337,5],[12344,5],[12353,86],[12445,3],[12449,90],[12540,4],[12549,41],[12593,94],[12704,24],[12784,16],[13312,6582],[19968,20940],[40960,1165],[42192,46],[42240,269],[42512,16],[42538,2],[42560,32],[42594,13],42623,[42624,24],[42656,80],[42775,9],[42786,103],[42891,2],[43003,7],[43011,3],[43015,4],[43020,23],[43072,52],[43138,50],[43250,6],43259,[43274,28],[43312,23],[43360,29],[43396,47],43471,[43520,41],[43584,3],[43588,8],[43616,23],43642,[43648,48],43697,[43701,2],[43705,5],43712,43714,[43739,3],[43968,35],[44032,11172],[55216,23],[55243,49],[63744,302],[64048,62],[64112,106],[64256,7],[64275,5],64285,[64287,10],[64298,13],[64312,5],64318,[64320,2],[64323,2],[64326,108],[64467,139],[64612,218],[64848,64],[64914,54],[65008,10],65137,65139,65143,65145,65147,65149,[65151,126],[65313,26],[65345,26],[65382,56],[65440,31],[65474,6],[65482,6],[65490,6],[65498,3],[65536,12],[65549,26],[65576,19],[65596,2],[65599,15],[65616,14],[65664,123],[65856,53],[66176,29],[66208,49],[66304,31],[66352,27],[66432,30],[66464,36],[66504,8],[66513,5],[66560,158],[67584,6],67592,[67594,44],[67639,2],67644,[67647,23],[67840,22],[67872,26],68096,[68112,4],[68117,3],[68121,27],[68192,29],[68352,54],[68416,22],[68448,19],[68608,73],[69763,45],[73728,879],[74752,99],[77824,1071],[119808,85],[119894,71],[119966,2],119970,[119973,2],[119977,4],[119982,12],119995,[119997,7],[120005,65],[120071,4],[120077,8],[120086,7],[120094,28],[120123,4],[120128,5],120134,[120138,7],[120146,340],[120488,25],[120514,25],[120540,31],[120572,25],[120598,31],[120630,25],[120656,31],[120688,25],[120714,31],[120746,25],[120772,8],[131072,42711],[173824,4149],[194560,542]],"XID_Continue":[[48,10],[65,26],95,[97,26],170,181,183,186,[192,23],[216,31],[248,458],[710,12],[736,5],748,750,[768,117],[886,2],[891,3],902,903,[904,3],908,[910,20],[931,83],[1015,139],[1155,5],[1162,156],[1329,38],1369,[1377,39],[1425,45],1471,[1473,2],[1476,2],1479,[1488,27],[1520,3],[1552,11],[1569,62],[1632,10],[1646,102],1749,[1750,7],[1759,10],[1770,19],1791,1808,1809,[1810,57],[1869,101],[1984,54],2042,[2048,46],[2304,58],2364,2365,[2366,17],2384,[2385,5],[2392,12],[2406,10],2417,2418,[2425,7],2433,[2434,2],[2437,8],[2447,2],[2451,22],[2474,7],2482,[2486,4],2492,2493,[2494,7],[2503,2],[2507,4],2519,[2524,2],[2527,5],[2534,12],[2561,3],[2565,6],[2575,2],[2579,22],[2602,7],[2610,2],[2613,2],[2616,2],2620,[2622,5],[2631,2],[2635,3],2641,[2649,4],2654,[2662,16],[2689,3],[2693,9],[2703,3],[2707,22],[2730,7],[2738,2],[2741,5],2748,2749,[2750,8],[2759,3],[2763,3],2768,[2784,4],[2790,10],2817,[2818,2],[2821,8],[2831,2],[2835,22],[2858,7],[2866,2],[2869,5],2876,2877,2878,2879,2880,[2881,4],[2887,2],[2891,3],2902,2903,[2908,2],[2911,5],[2918,10],2929,2946,2947,[2949,6],[2958,3],[2962,4],[2969,2],2972,[2974,2],[2979,2],[2984,3],[2990,12],[3006,5],[3014,3],[3018,4],3024,3031,[3046,10],[3073,3],[3077,8],[3086,3],[3090,23],[3114,10],[3125,5],3133,[3134,7],[3142,3],[3146,4],[3157,2],[3160,2],[3168,4],[3174,10],[3202,2],[3205,8],[3214,3],[3218,23],[3242,10],[3253,5],3260,3261,3262,3263,[3264,5],3270,[3271,2],[3274,4],[3285,2],3294,[3296,4],[3302,10],[3330,2],[3333,8],[3342,3],[3346,23],[3370,16],3389,[3390,7],[3398,3],[3402,4],3415,[3424,4],[3430,10],[3450,6],[3458,2],[3461,18],[3482,24],[3507,9],3517,[3520,7],3530,[3535,6],3542,[3544,8],[3570,2],[3585,58],[3648,15],[3664,10],[3713,2],3716,[3719,2],3722,3725,[3732,4],[3737,7],[3745,3],3749,3751,[3754,2],[3757,13],[3771,3],[3776,5],3782,[3784,6],[3792,10],[3804,2],3840,[3864,2],[3872,10],3893,3895,3897,[3902,10],[3913,36],[3953,20],[3974,6],[3984,8],[3993,36],4038,[4096,74],[4176,78],[4256,38],[4304,43],4348,[4352,329],[4682,4],[4688,7],4696,[4698,4],[4704,41],[4746,4],[4752,33],[4786,4],[4792,7],4800,[4802,4],[4808,15],[4824,57],[4882,4],[4888,67],4959,[4969,9],[4992,16],[5024,85],[5121,620],[5743,17],[5761,26],[5792,75],[5870,3],[5888,13],[5902,7],[5920,21],[5952,20],[5984,13],[5998,3],[6002,2],[6016,52],6070,[6071,29],6103,6108,6109,[6112,10],[6155,3],[6160,10],[6176,88],[6272,43],[6320,70],[6400,29],[6432,12],[6448,12],[6470,40],[6512,5],[6528,44],[6576,26],[6608,11],[6656,28],[6688,63],6752,6753,6754,[6755,26],6783,[6784,10],[6800,10],6823,[6912,76],[6992,10],[7019,9],[7040,43],[7086,12],[7168,56],[7232,10],[7245,49],[7376,3],[7380,31],[7424,231],[7677,281],[7960,6],[7968,38],[8008,6],[8016,8],8025,8027,8029,[8031,31],[8064,53],[8118,7],8126,[8130,3],[8134,7],[8144,4],[8150,6],[8160,13],[8178,3],[8182,7],[8255,2],8276,8305,8319,[8336,5],[8400,13],8417,[8421,12],8450,8455,[8458,10],8469,8472,[8473,5],8484,8486,8488,[8490,16],[8508,4],[8517,5],8526,[8544,41],[11264,47],[11312,47],[11360,133],[11499,7],[11520,38],[11568,54],11631,[11648,23],[11680,7],[11688,7],[11696,7],[11704,7],[11712,7],[11720,7],[11728,7],[11736,7],[11744,32],12293,12294,12295,[12321,15],[12337,5],[12344,5],[12353,86],[12441,2],[12445,3],[12449,90],[12540,4],[12549,41],[12593,94],[12704,24],[12784,16],[13312,6582],[19968,20940],[40960,1165],[42192,46],[42240,269],[42512,28],[42560,32],[42594,14],[42620,2],42623,[42624,24],[42656,82],[42775,9],[42786,103],[42891,2],[43003,45],[43072,52],[43136,69],[43216,10],[43232,24],43259,[43264,46],[43312,36],[43360,29],[43392,65],43471,[43472,10],[43520,55],[43584,14],[43600,10],[43616,23],43642,43643,[43648,67],[43739,3],[43968,43],44012,44013,[44016,10],[44032,11172],[55216,23],[55243,49],[63744,302],[64048,62],[64112,106],[64256,7],[64275,5],64285,64286,[64287,10],[64298,13],[64312,5],64318,[64320,2],[64323,2],[64326,108],[64467,139],[64612,218],[64848,64],[64914,54],[65008,10],[65024,16],[65056,7],[65075,2],[65101,3],65137,65139,65143,65145,65147,65149,[65151,126],[65296,10],[65313,26],65343,[65345,26],[65382,89],[65474,6],[65482,6],[65490,6],[65498,3],[65536,12],[65549,26],[65576,19],[65596,2],[65599,15],[65616,14],[65664,123],[65856,53],66045,[66176,29],[66208,49],[66304,31],[66352,27],[66432,30],[66464,36],[66504,8],[66513,5],[66560,158],[66720,10],[67584,6],67592,[67594,44],[67639,2],67644,[67647,23],[67840,22],[67872,26],68096,[68097,3],[68101,2],[68108,8],[68117,3],[68121,27],[68152,3],68159,[68192,29],[68352,54],[68416,22],[68448,19],[68608,73],[69760,59],[73728,879],[74752,99],[77824,1071],[119141,5],[119149,6],[119163,8],[119173,7],[119210,4],[119362,3],[119808,85],[119894,71],[119966,2],119970,[119973,2],[119977,4],[119982,12],119995,[119997,7],[120005,65],[120071,4],[120077,8],[120086,7],[120094,28],[120123,4],[120128,5],120134,[120138,7],[120146,340],[120488,25],[120514,25],[120540,31],[120572,25],[120598,31],[120630,25],[120656,31],[120688,25],[120714,31],[120746,25],[120772,8],[120782,50],[131072,42711],[173824,4149],[194560,542],[917760,240]]} -$B.unicode_tables={} -for(var gc in $B.unicode){$B.unicode_tables[gc]={} -$B.unicode[gc].forEach(function(item){if(Array.isArray(item)){var step=item[2]||1 -for(var i=0,nb=item[1];i < nb;i+=1){$B.unicode_tables[gc][item[0]+i*step]=true}}else{$B.unicode_tables[gc][item]=true}})} -for(var key in $B.unicode_identifiers){$B.unicode_tables[key]={} -for(const item of $B.unicode_identifiers[key]){if(Array.isArray(item)){for(var i=0;i < item[1];i++){$B.unicode_tables[key][item[0]+i]=true}}else{$B.unicode_tables[key][item]=true}}} -$B.is_unicode_cn=function(i){ -var cn=$B.unicode.Cn -for(var j=0,len=cn.length;j < len;j++){if(i >=cn[j][0]){if(i < cn[j][0]+cn[j][1]){return true}} -return false} -return false} -; -;(function($B){var bltns=$B.InjectBuiltins() -eval(bltns) -var unicode_tables=$B.unicode_tables -var str={__class__:_b_.type,__dir__:object.__dir__,$infos:{__module__:"builtins",__name__:"str"},$is_class:true,$native:true} -function normalize_start_end($){if($.start===null ||$.start===_b_.None){$.start=0} -else if($.start < 0){$.start+=$.self.length -$.start=Math.max(0,$.start)} -if($.end===null ||$.end===_b_.None){$.end=$.self.length} -else if($.end < 0){$.end+=$.self.length -$.end=Math.max(0,$.end)} -if(! isinstance($.start,_b_.int)||! isinstance($.end,_b_.int)){throw _b_.TypeError.$factory("slice indices must be integers "+ -"or None or have an __index__ method")}} -function reverse(s){ -return s.split("").reverse().join("")} -function check_str(obj){if(! _b_.isinstance(obj,str)){throw _b_.TypeError.$factory("can't convert '"+ -$B.class_name(obj)+"' object to str implicitly")}} -str.__add__=function(self,other){if(!(typeof other==="string")){try{return getattr(other,"__radd__")(self)} -catch(err){throw _b_.TypeError.$factory("Can't convert "+ -$B.class_name(other)+" to str implicitly")}} -return self+other} -str.__contains__=function(self,item){if(! _b_.isinstance(item,str)){throw _b_.TypeError.$factory("'in ' requires "+ -"string as left operand, not "+item.__class__)} -if(typeof item=="string"){var nbcar=item.length}else{var nbcar=_b_.len(item)} -if(nbcar==0){return true} -if(self.length==0){return nbcar==0} -for(var i=0,len=self.length;i < len;i++){if(self.substr(i,nbcar)==item){return true}} -return false} -str.__delitem__=function(){throw _b_.TypeError.$factory("'str' object doesn't support item deletion")} -str.__dir__=object.__dir__ -str.__eq__=function(self,other){if(other===undefined){ -return self===str} -if(_b_.isinstance(other,_b_.str)){return other.valueOf()==self.valueOf()} -return _b_.NotImplemented} -function preformat(self,fmt){if(fmt.empty){return _b_.str.$factory(self)} -if(fmt.type && fmt.type !="s"){throw _b_.ValueError.$factory("Unknown format code '"+fmt.type+ -"' for object of type 'str'")} -return self} -str.__format__=function(self,format_spec){var fmt=new $B.parse_format_spec(format_spec) -if(fmt.sign !==undefined){throw _b_.ValueError.$factory( -"Sign not allowed in string format specifier")} -if(fmt.precision){self=self.substr(0,fmt.precision)} -fmt.align=fmt.align ||"<" -return $B.format_width(preformat(self,fmt),fmt)} -str.__getitem__=function(self,arg){if(isinstance(arg,_b_.int)){var pos=arg -if(arg < 0){pos+=self.length} -if(pos >=0 && pos < self.length){return self.charAt(pos)} -throw _b_.IndexError.$factory("string index out of range")} -if(isinstance(arg,slice)){var s=_b_.slice.$conv_for_seq(arg,self.length),start=s.start,stop=s.stop,step=s.step -var res="",i=null -if(step > 0){if(stop <=start){return ""} -for(var i=start;i < stop;i+=step){res+=self.charAt(i)}}else{if(stop >=start){return ''} -for(var i=start;i > stop;i+=step){res+=self.charAt(i)}} -return res} -if(isinstance(arg,_b_.bool)){return self.__getitem__(_b_.int.$factory(arg))} -throw _b_.TypeError.$factory("string indices must be integers")} -var prefix=2,suffix=3,mask=(2**32-1),str_hash_cache={} -str.$nb_str_hash_cache=0 -function fnv(p){if(p.length==0){return 0} -var x=prefix -x=(x ^(p.charCodeAt(0)<< 7))& mask -for(var i=0,len=p.length;i < len;i++){x=((1000003*x)^ p.charCodeAt(i))& mask} -x=(x ^ p.length)& mask -x=(x ^ suffix)& mask -if(x==-1){x=-2} -return x} -str.__hash__=function(self){if(str_hash_cache[self]!==undefined){return str_hash_cache[self]} -str.$nb_str_hash_cache++ -if(str.$nb_str_hash_cache > 100000){ -str.$nb_str_hash_cache=0 -str_hash_cache={}} -return str_hash_cache[self]=fnv(self)} -str.__init__=function(self,arg){self.valueOf=function(){return arg} -self.toString=function(){return arg} -return _b_.None} -var str_iterator=$B.make_iterator_class("str_iterator") -str.__iter__=function(self){var items=self.split("") -return str_iterator.$factory(items)} -str.__len__=function(self){return self.length} -var kwarg_key=new RegExp("([^\\)]*)\\)") -var NotANumber=function(){this.name="NotANumber"} -var number_check=function(s){if(! isinstance(s,[_b_.int,_b_.float])){throw new NotANumber()}} -var get_char_array=function(size,char){if(size <=0){return ""} -return new Array(size+1).join(char)} -var format_padding=function(s,flags,minus_one){var padding=flags.padding -if(! padding){ -return s} -s=s.toString() -padding=parseInt(padding,10) -if(minus_one){ -padding-=1} -if(! flags.left){return get_char_array(padding-s.length,flags.pad_char)+s}else{ -return s+get_char_array(padding-s.length,flags.pad_char)}} -var format_int_precision=function(val,flags){var precision=flags.precision -if(!precision){return val.toString()} -precision=parseInt(precision,10) -var s -if(val.__class__===$B.long_int){s=$B.long_int.to_base(val,10)}else{s=val.toString()} -if(s[0]==="-"){return "-"+get_char_array(precision-s.length+1,"0")+s.slice(1)} -return get_char_array(precision-s.length,"0")+s} -var format_float_precision=function(val,upper,flags,modifier){var precision=flags.precision -if(isFinite(val)){return modifier(val,precision,flags,upper)} -if(val===Infinity){val="inf"}else if(val===-Infinity){val="-inf"}else{val="nan"} -if(upper){return val.toUpperCase()} -return val} -var format_sign=function(val,flags){if(flags.sign){if(val >=0){return "+"}}else if(flags.space){if(val >=0){return " "}} -return ""} -var str_format=function(val,flags){ -flags.pad_char=" " -return format_padding(str.$factory(val),flags)} -var num_format=function(val,flags){number_check(val) -if(val.__class__===$B.long_int){val=$B.long_int.to_base(val,10)}else{val=parseInt(val)} -var s=format_int_precision(val,flags) -if(flags.pad_char==="0"){if(val < 0){s=s.substring(1) -return "-"+format_padding(s,flags,true)} -var sign=format_sign(val,flags) -if(sign !==""){return sign+format_padding(s,flags,true)}} -return format_padding(format_sign(val,flags)+s,flags)} -var repr_format=function(val,flags){flags.pad_char=" " -return format_padding(repr(val),flags)} -var ascii_format=function(val,flags){flags.pad_char=" " -return format_padding(ascii(val),flags)} -var _float_helper=function(val,flags){number_check(val) -if(! flags.precision){if(! flags.decimal_point){flags.precision=6}else{flags.precision=0}}else{flags.precision=parseInt(flags.precision,10) -validate_precision(flags.precision)} -return parseFloat(val)} -var trailing_zeros=/(.*?)(0+)([eE].*)/,leading_zeros=/\.(0*)/,trailing_dot=/\.$/ -var validate_precision=function(precision){ -if(precision > 20){precision=20}} -var floating_point_format=function(val,upper,flags){val=_float_helper(val,flags),v=val.toString(),v_len=v.length,dot_idx=v.indexOf('.') -if(dot_idx < 0){dot_idx=v_len} -if(val < 1 && val >-1){var zeros=leading_zeros.exec(v),numzeros -if(zeros){numzeros=zeros[1].length}else{numzeros=0} -if(numzeros >=4){val=format_sign(val,flags)+format_float_precision(val,upper,flags,_floating_g_exp_helper) -if(!flags.alternate){var trl=trailing_zeros.exec(val) -if(trl){val=trl[1].replace(trailing_dot,"")+trl[3]}}else{if(flags.precision <=1){val=val[0]+"."+val.substring(1)}} -return format_padding(val,flags)} -flags.precision=(flags.precision ||0)+numzeros -return format_padding(format_sign(val,flags)+ -format_float_precision(val,upper,flags,function(val,precision){return val.toFixed(min(precision,v_len-dot_idx)+ -numzeros)}),flags -)} -if(dot_idx > flags.precision){val=format_sign(val,flags)+format_float_precision(val,upper,flags,_floating_g_exp_helper) -if(! flags.alternate){var trl=trailing_zeros.exec(val) -if(trl){val=trl[1].replace(trailing_dot,"")+trl[3]}}else{if(flags.precision <=1){val=val[0]+"."+val.substring(1)}} -return format_padding(val,flags)} -return format_padding(format_sign(val,flags)+ -format_float_precision(val,upper,flags,function(val,precision){if(!flags.decimal_point){precision=min(v_len-1,6)}else if(precision > v_len){if(! flags.alternate){precision=v_len}} -if(precision < dot_idx){precision=dot_idx} -return val.toFixed(precision-dot_idx)}),flags -)} -var _floating_g_exp_helper=function(val,precision,flags,upper){if(precision){--precision} -val=val.toExponential(precision) -var e_idx=val.lastIndexOf("e") -if(e_idx > val.length-4){val=val.substring(0,e_idx+2)+"0"+val.substring(e_idx+2)} -if(upper){return val.toUpperCase()} -return val} -var floating_point_decimal_format=function(val,upper,flags){val=_float_helper(val,flags) -return format_padding(format_sign(val,flags)+ -format_float_precision(val,upper,flags,function(val,precision,flags){val=val.toFixed(precision) -if(precision===0 && flags.alternate){val+='.'} -return val}),flags -)} -var _floating_exp_helper=function(val,precision,flags,upper){val=val.toExponential(precision) -var e_idx=val.lastIndexOf("e") -if(e_idx > val.length-4){val=val.substring(0,e_idx+2)+"0"+val.substring(e_idx+2)} -if(upper){return val.toUpperCase()} -return val} -var floating_point_exponential_format=function(val,upper,flags){val=_float_helper(val,flags) -return format_padding(format_sign(val,flags)+ -format_float_precision(val,upper,flags,_floating_exp_helper),flags)} -var signed_hex_format=function(val,upper,flags){var ret -number_check(val) -if(val.__class__===$B.long_int){ret=$B.long_int.to_base(val,16)}else{ret=parseInt(val) -ret=ret.toString(16)} -ret=format_int_precision(ret,flags) -if(upper){ret=ret.toUpperCase()} -if(flags.pad_char==="0"){if(val < 0){ret=ret.substring(1) -ret="-"+format_padding(ret,flags,true)} -var sign=format_sign(val,flags) -if(sign !==""){ret=sign+format_padding(ret,flags,true)}} -if(flags.alternate){if(ret.charAt(0)==="-"){if(upper){ret="-0X"+ret.slice(1)} -else{ret="-0x"+ret.slice(1)}}else{if(upper){ret="0X"+ret} -else{ret="0x"+ret}}} -return format_padding(format_sign(val,flags)+ret,flags)} -var octal_format=function(val,flags){number_check(val) -var ret -if(val.__class__===$B.long_int){ret=$B.long_int.to_base(8)}else{ret=parseInt(val) -ret=ret.toString(8)} -ret=format_int_precision(ret,flags) -if(flags.pad_char==="0"){if(val < 0){ret=ret.substring(1) -ret="-"+format_padding(ret,flags,true)} -var sign=format_sign(val,flags) -if(sign !==""){ret=sign+format_padding(ret,flags,true)}} -if(flags.alternate){if(ret.charAt(0)==="-"){ret="-0o"+ret.slice(1)} -else{ret="0o"+ret}} -return format_padding(ret,flags)} -function series_of_bytes(val,flags){if(val.__class__ && val.__class__.$buffer_protocol){var it=_b_.iter(val),ints=[] -while(true){try{ints.push(_b_.next(it))}catch(err){if(err.__class__===_b_.StopIteration){var b=_b_.bytes.$factory(ints) -return format_padding(_b_.bytes.decode(b,"ascii"),flags)} -throw err}}}else{try{bytes_obj=$B.$getattr(val,"__bytes__") -return format_padding(_b_.bytes.decode(bytes_obj),flags)}catch(err){if(err.__class__===_b_.AttributeError){throw _b_.TypeError.$factory("%b does not accept '"+ -$B.class_name(val)+"'")} -throw err}}} -var single_char_format=function(val,flags){if(isinstance(val,str)&& val.length==1){return val}else if(isinstance(val,bytes)&& val.source.length==1){val=val.source[0]}else{try{val=_b_.int.$factory(val)}catch(err){throw _b_.TypeError.$factory("%c requires int or char")}} -return format_padding(chr(val),flags)} -var num_flag=function(c,flags){if(c==="0" && ! flags.padding && ! flags.decimal_point && ! flags.left){flags.pad_char="0" -return} -if(!flags.decimal_point){flags.padding=(flags.padding ||"")+c}else{flags.precision=(flags.precision ||"")+c}} -var decimal_point_flag=function(val,flags){if(flags.decimal_point){ -throw new UnsupportedChar()} -flags.decimal_point=true} -var neg_flag=function(val,flags){flags.pad_char=" " -flags.left=true} -var space_flag=function(val,flags){flags.space=true} -var sign_flag=function(val,flags){flags.sign=true} -var alternate_flag=function(val,flags){flags.alternate=true} -var char_mapping={"b":series_of_bytes,"s":str_format,"d":num_format,"i":num_format,"u":num_format,"o":octal_format,"r":repr_format,"a":ascii_format,"g":function(val,flags){return floating_point_format(val,false,flags)},"G":function(val,flags){return floating_point_format(val,true,flags)},"f":function(val,flags){return floating_point_decimal_format(val,false,flags)},"F":function(val,flags){return floating_point_decimal_format(val,true,flags)},"e":function(val,flags){return floating_point_exponential_format(val,false,flags)},"E":function(val,flags){return floating_point_exponential_format(val,true,flags)},"x":function(val,flags){return signed_hex_format(val,false,flags)},"X":function(val,flags){return signed_hex_format(val,true,flags)},"c":single_char_format,"0":function(val,flags){return num_flag("0",flags)},"1":function(val,flags){return num_flag("1",flags)},"2":function(val,flags){return num_flag("2",flags)},"3":function(val,flags){return num_flag("3",flags)},"4":function(val,flags){return num_flag("4",flags)},"5":function(val,flags){return num_flag("5",flags)},"6":function(val,flags){return num_flag("6",flags)},"7":function(val,flags){return num_flag("7",flags)},"8":function(val,flags){return num_flag("8",flags)},"9":function(val,flags){return num_flag("9",flags)},"-":neg_flag," ":space_flag,"+":sign_flag,".":decimal_point_flag,"#":alternate_flag} -var UnsupportedChar=function(){this.name="UnsupportedChar"} -str.__mod__=function(self,args){var length=self.length,pos=0 |0,argpos=null,getitem -if(_b_.isinstance(args,_b_.tuple)){argpos=0 |0}else{getitem=_b_.getattr(args,"__getitem__",_b_.None)} -var ret='' -var $get_kwarg_string=function(s){ -++pos -var rslt=kwarg_key.exec(s.substring(newpos)) -if(! rslt){throw _b_.ValueError.$factory("incomplete format key")} -var key=rslt[1] -newpos+=rslt[0].length -try{var self=getitem(key)}catch(err){if(err.name==="KeyError"){throw err} -throw _b_.TypeError.$factory("format requires a mapping")} -return get_string_value(s,self)} -var $get_arg_string=function(s){ -var self -if(argpos===null){ -self=args}else{self=args[argpos++] -if(self===undefined){throw _b_.TypeError.$factory( -"not enough arguments for format string")}} -return get_string_value(s,self)} -var get_string_value=function(s,self){ -var flags={"pad_char":" "} -do{var func=char_mapping[s[newpos]] -try{if(func===undefined){throw new UnsupportedChar()}else{var ret=func(self,flags) -if(ret !==undefined){return ret} -++newpos}}catch(err){if(err.name=="UnsupportedChar"){invalid_char=s[newpos] -if(invalid_char===undefined){throw _b_.ValueError.$factory("incomplete format")} -throw _b_.ValueError.$factory( -"unsupported format character '"+invalid_char+ -"' (0x"+invalid_char.charCodeAt(0).toString(16)+ -") at index "+newpos)}else if(err.name==="NotANumber"){var try_char=s[newpos],cls=self.__class__ -if(!cls){if(typeof(self)==="string"){cls="str"}else{cls=typeof(self)}}else{cls=cls.$infos.__name__} -throw _b_.TypeError.$factory("%"+try_char+ -" format: a number is required, not "+cls)}else{throw err}}}while(true)} -var nbph=0 -do{var newpos=self.indexOf("%",pos) -if(newpos < 0){ret+=self.substring(pos) -break} -ret+=self.substring(pos,newpos) -++newpos -if(newpos < length){if(self[newpos]==="%"){ret+="%"}else{nbph++ -if(self[newpos]==="("){++newpos -ret+=$get_kwarg_string(self)}else{ret+=$get_arg_string(self)}}}else{ -throw _b_.ValueError.$factory("incomplete format")} -pos=newpos+1}while(pos < length) -if(argpos !==null){if(args.length > argpos){throw _b_.TypeError.$factory( -"not enough arguments for format string")}else if(args.length < argpos){throw _b_.TypeError.$factory( -"not all arguments converted during string formatting")}}else if(nbph==0){throw _b_.TypeError.$factory( -"not all arguments converted during string formatting")} -return ret} -str.__mro__=[object] -str.__mul__=function(){var $=$B.args("__mul__",2,{self:null,other:null},["self","other"],arguments,{},null,null) -if(! isinstance($.other,_b_.int)){throw _b_.TypeError.$factory( -"Can't multiply sequence by non-int of type '"+ -$B.class_name($.other)+"'")} -var $res="" -for(var i=0;i< $.other;i++){$res+=$.self.valueOf()} -return $res} -str.__ne__=function(self,other){return other !==self.valueOf()} -str.__repr__=function(self){var res=self -res=self.replace(/\\/g,"\\\\") -res=res.replace(new RegExp("\u0007","g"),"\\x07"). -replace(new RegExp("\b","g"),"\\x08"). -replace(new RegExp("\u000b","g"),"\\x0b"). -replace(new RegExp("\f","g"),"\\x0c"). -replace(new RegExp("\n","g"),"\\n"). -replace(new RegExp("\r","g"),"\\r"). -replace(new RegExp("\t","g"),"\\t") -res=res.replace(combining_re,"\u200B$1") -var repl='' -for(var i=0;i < res.length;i++){if($B.is_unicode_cn(res.codePointAt(i))){var s=res.codePointAt(i).toString(16) -while(s.length < 4){s='0'+s} -repl+='\\u'+s}else{repl+=res.charAt(i)}} -res=repl -if(res.search('"')==-1 && res.search("'")==-1){return "'"+res+"'"}else if(self.search('"')==-1){return '"'+res+'"'} -var qesc=new RegExp("'","g") -res="'"+res.replace(qesc,"\\'")+"'" -return res} -str.__setitem__=function(self,attr,value){throw _b_.TypeError.$factory( -"'str' object does not support item assignment")} -var combining=[] -for(var cp=0x300;cp <=0x36F;cp++){combining.push(String.fromCharCode(cp))} -var combining_re=new RegExp("("+combining.join("|")+")") -str.__str__=function(self){return self.replace(combining_re,"\u200B$1")} -str.toString=function(){return "string!"} -var $comp_func=function(self,other){if(typeof other !=="string"){return _b_.NotImplemented} -return self > other} -$comp_func+="" -var $comps={">":"gt",">=":"ge","<":"lt","<=":"le"} -for(var $op in $comps){eval("str.__"+$comps[$op]+'__ = '+$comp_func.replace(/>/gm,$op))} -$B.make_rmethods(str) -var $notimplemented=function(self,other){throw NotImplementedError.$factory( -"OPERATOR not implemented for class str")} -str.capitalize=function(self){var $=$B.args("capitalize",1,{self},["self"],arguments,{},null,null) -if(self.length==0){return ""} -return self.charAt(0).toUpperCase()+self.substr(1)} -str.casefold=function(self){var $=$B.args("casefold",1,{self},["self"],arguments,{},null,null),res="",char,cf -for(var i=0,len=self.length;i < len;i++){char=self.charCodeAt(i) -cf=$B.unicode_casefold[char] -if(cf){cf.forEach(function(cp){res+=String.fromCharCode(cp)})}else{res+=self.charAt(i).toLowerCase()}} -return res} -str.center=function(){var $=$B.args("center",3,{self:null,width:null,fillchar:null},["self","width","fillchar"],arguments,{fillchar:" "},null,null),self=$.self -if($.width <=self.length){return self} -var pad=parseInt(($.width-self.length)/2),res=$.fillchar.repeat(pad) -res+=self+res -if(res.length < $.width){res+=$.fillchar} -return res} -str.count=function(){var $=$B.args("count",4,{self:null,sub:null,start:null,stop:null},["self","sub","start","stop"],arguments,{start:null,stop:null},null,null) -if(!(typeof $.sub=="string")){throw _b_.TypeError.$factory( -"Can't convert '"+$B.class_name($.sub)+ -"' object to str implicitly")} -var substr=$.self -if($.start !==null){var _slice -if($.stop !==null){_slice=_b_.slice.$factory($.start,$.stop)} -else{_slice=_b_.slice.$factory($.start,$.self.length)} -substr=str.__getitem__.apply(null,[$.self].concat(_slice))}else{if($.self.length+$.sub.length==0){return 1}} -if($.sub.length==0){if($.start==$.self.length){return 1} -else if(substr.length==0){return 0} -return substr.length+1} -var n=0,pos=0 -while(pos < substr.length){pos=substr.indexOf($.sub,pos) -if(pos >=0){n++;pos+=$.sub.length} -else{break}} -return n} -str.encode=function(){var $=$B.args("encode",3,{self:null,encoding:null,errors:null},["self","encoding","errors"],arguments,{encoding:"utf-8",errors:"strict"},null,null) -if($.encoding=="rot13" ||$.encoding=="rot_13"){ -var res="" -for(var i=0,len=$.self.length;i < len ;i++){var char=$.self.charAt(i) -if(("a" <=char && char <="m")||("A" <=char && char <="M")){res+=String.fromCharCode(String.charCodeAt(char)+13)}else if(("m" < char && char <="z")|| -("M" < char && char <="Z")){res+=String.fromCharCode(String.charCodeAt(char)-13)}else{res+=char}} -return res} -return _b_.bytes.__new__(_b_.bytes,$.self,$.encoding,$.errors)} -str.endswith=function(){ -var $=$B.args("endswith",4,{self:null,suffix:null,start:null,end:null},["self","suffix","start","end"],arguments,{start:0,end:null},null,null) -normalize_start_end($) -var suffixes=$.suffix -if(! isinstance(suffixes,_b_.tuple)){suffixes=[suffixes]} -var s=$.self.substring($.start,$.end) -for(var i=0,len=suffixes.length;i < len;i++){var suffix=suffixes[i] -if(! _b_.isinstance(suffix,str)){throw _b_.TypeError.$factory( -"endswith first arg must be str or a tuple of str, not int")} -if(suffix.length <=s.length && -s.substr(s.length-suffix.length)==suffix){return true}} -return false} -str.expandtabs=function(self,tabsize){var $=$B.args("expandtabs",2,{self:null,tabsize:null},["self","tabsize"],arguments,{tabsize:8},null,null) -var s=$B.$GetInt($.tabsize),col=0,pos=0,res="" -if(s==1){return self.replace(/\t/g," ")} -while(pos < self.length){var car=self.charAt(pos) -switch(car){case "\t": -while(col % s > 0){res+=" ";col++} -break -case "\r": -case "\n": -res+=car -col=0 -break -default: -res+=car -col++ -break} -pos++} -return res} -str.find=function(){ -var $=$B.args("str.find",4,{self:null,sub:null,start:null,end:null},["self","sub","start","end"],arguments,{start:0,end:null},null,null) -check_str($.sub) -normalize_start_end($) -if(!isinstance($.start,_b_.int)||!isinstance($.end,_b_.int)){throw _b_.TypeError.$factory("slice indices must be "+ -"integers or None or have an __index__ method")} -var s="" -for(var i=$.start;i < $.end;i++){s+=$.self.charAt(i)} -if($.sub.length==0 && $.start==$.self.length){return $.self.length} -if(s.length+$.sub.length==0){return-1} -var last_search=s.length-$.sub.length -for(var i=0;i <=last_search;i++){if(s.substr(i,$.sub.length)==$.sub){return $.start+i}} -return-1} -$B.parse_format=function(fmt_string){ -var elts=fmt_string.split(":"),name,conv,spec,name_ext=[] -if(elts.length==1){ -name=fmt_string}else{ -name=elts[0] -spec=elts.splice(1).join(":")} -var elts=name.split("!") -if(elts.length > 1){name=elts[0] -conv=elts[1]} -if(name !==undefined){ -function name_repl(match){name_ext.push(match) -return ""} -var name_ext_re=/\.[_a-zA-Z][_a-zA-Z0-9]*|\[[_a-zA-Z][_a-zA-Z0-9]*\]|\[[0-9]+\]/g -name=name.replace(name_ext_re,name_repl)} -return{name:name,name_ext:name_ext,conv:conv,spec:spec ||"",string:fmt_string}} -$B.split_format=function(self){ -var pos=0,_len=self.length,car,text="",parts=[],rank=0 -while(pos < _len){car=self.charAt(pos) -if(car=="{" && self.charAt(pos+1)=="{"){ -text+="{" -pos+=2}else if(car=="}" && self.charAt(pos+1)=="}"){ -text+="}" -pos+=2}else if(car=="{"){ -parts.push(text) -var end=pos+1,nb=1 -while(end < _len){if(self.charAt(end)=="{"){nb++;end++} -else if(self.charAt(end)=="}"){nb--;end++ -if(nb==0){ -var fmt_string=self.substring(pos+1,end-1) -var fmt_obj=$B.parse_format(fmt_string) -fmt_obj.raw_name=fmt_obj.name -fmt_obj.raw_spec=fmt_obj.spec -if(!fmt_obj.name){fmt_obj.name=rank+"" -rank++} -if(fmt_obj.spec !==undefined){ -function replace_nested(name,key){if(key==""){ -return "{"+rank+++"}"} -return "{"+key+"}"} -fmt_obj.spec=fmt_obj.spec.replace(/\{(.*?)\}/g,replace_nested)} -parts.push(fmt_obj) -text="" -break}}else{end++}} -if(nb > 0){throw ValueError.$factory("wrong format "+self)} -pos=end}else{text+=car;pos++}} -if(text){parts.push(text)} -return parts} -str.format=function(self){var $=$B.args("format",1,{self:null},["self"],arguments,{},"$args","$kw") -var parts=$B.split_format($.self) -var res="",fmt -for(var i=0;i < parts.length;i++){ -if(typeof parts[i]=="string"){res+=parts[i];continue} -fmt=parts[i] -if(fmt.spec !==undefined){ -function replace_nested(name,key){if(/\d+/.exec(key)){ -return _b_.tuple.__getitem__($.$args,parseInt(key))}else{ -return _b_.dict.__getitem__($.$kw,key)}} -fmt.spec=fmt.spec.replace(/\{(.*?)\}/g,replace_nested)} -if(fmt.name.charAt(0).search(/\d/)>-1){ -var pos=parseInt(fmt.name),value=_b_.tuple.__getitem__($.$args,pos)}else{ -var value=_b_.dict.__getitem__($.$kw,fmt.name)} -for(var j=0;j < fmt.name_ext.length;j++){var ext=fmt.name_ext[j] -if(ext.charAt(0)=="."){ -value=_b_.getattr(value,ext.substr(1))}else{ -var key=ext.substr(1,ext.length-2) -if(key.charAt(0).search(/\d/)>-1){key=parseInt(key)} -value=_b_.getattr(value,"__getitem__")(key)}} -if(fmt.conv=="a"){value=_b_.ascii(value)} -else if(fmt.conv=="r"){value=_b_.repr(value)} -else if(fmt.conv=="s"){value=_b_.str.$factory(value)} -if(value.$is_class ||value.$factory){ -res+=value.__class__.__format__(value,fmt.spec)}else{res+=$B.$getattr(value,"__format__")(fmt.spec)}} -return res} -str.format_map=function(self){throw NotImplementedError.$factory( -"function format_map not implemented yet")} -str.index=function(self){ -var res=str.find.apply(null,arguments) -if(res===-1){throw _b_.ValueError.$factory("substring not found")} -return res} -str.isascii=function(self){ -for(var i=0,len=self.length;i < len;i++){if(self.charCodeAt(i)> 127){return false}} -return true} -str.isalnum=function(self){ -var $=$B.args("isalnum",1,{self:null},["self"],arguments,{},null,null),char -for(var i=0,len=self.length;i < len;i++){char=self.charCodeAt(i) -if(unicode_tables.Ll[char]|| -unicode_tables.Lu[char]|| -unicode_tables.Lm[char]|| -unicode_tables.Lt[char]|| -unicode_tables.Lo[char]|| -unicode_tables.Nd[char]|| -unicode_tables.digits[char]|| -unicode_tables.numeric[char]){continue} -return false} -return true} -str.isalpha=function(self){ -var $=$B.args("isalpha",1,{self:null},["self"],arguments,{},null,null),char -for(var i=0,len=self.length;i < len;i++){char=self.charCodeAt(i) -if(unicode_tables.Ll[char]|| -unicode_tables.Lu[char]|| -unicode_tables.Lm[char]|| -unicode_tables.Lt[char]|| -unicode_tables.Lo[char]){continue} -return false} -return true} -str.isdecimal=function(self){ -var $=$B.args("isdecimal",1,{self:null},["self"],arguments,{},null,null),char -for(var i=0,len=self.length;i < len;i++){char=self.charCodeAt(i) -if(! unicode_tables.Nd[char]){return false}} -return self.length > 0} -str.isdigit=function(self){ -var $=$B.args("isdigit",1,{self:null},["self"],arguments,{},null,null),char -for(var i=0,len=self.length;i < len;i++){char=self.charCodeAt(i) -if(! unicode_tables.digits[char]){return false}} -return self.length > 0} -str.isidentifier=function(self){ -var $=$B.args("isidentifier",1,{self:null},["self"],arguments,{},null,null),char -if(self.length==0){return false} -else if(unicode_tables.XID_Start[self.charCodeAt(0)]===undefined){return false}else{for(var i=1,len=self.length;i < len;i++){if(unicode_tables.XID_Continue[self.charCodeAt(i)]===undefined){return false}}} -return true} -str.islower=function(self){ -var $=$B.args("islower",1,{self:null},["self"],arguments,{},null,null),has_cased=false,char -for(var i=0,len=self.length;i < len;i++){char=self.charCodeAt(i) -if(unicode_tables.Ll[char]){has_cased=true;continue} -else if(unicode_tables.Lu[char]||unicode_tables.Lt[char]){return false}} -return has_cased} -str.isnumeric=function(self){ -var $=$B.args("isnumeric",1,{self:null},["self"],arguments,{},null,null) -for(var i=0,len=self.length;i < len;i++){if(! unicode_tables.numeric[self.charCodeAt(i)]){return false}} -return self.length > 0} -var printable,printable_gc=['Cc','Cf','Co','Cs','Zl','Zp','Zs'] -str.isprintable=function(self){ -if(printable===undefined){for(var i=0;i < printable_gc.length;i++){var table=unicode_tables[printable_gc[i]] -for(var cp in table){printable[cp]=true}} -printable[32]=true} -var $=$B.args("isprintable",1,{self:null},["self"],arguments,{},null,null),char,flag -for(var i=0,len=self.length;i < len;i++){char=self.charCodeAt(i) -if(! printable[char]){return false}} -return true} -str.isspace=function(self){ -var $=$B.args("isspace",1,{self:null},["self"],arguments,{},null,null),char -for(var i=0,len=self.length;i < len;i++){char=self.charCodeAt(i) -if(! unicode_tables.Zs[char]&& -$B.unicode_bidi_whitespace.indexOf(char)==-1){return false}} -return self.length > 0} -str.istitle=function(self){ -var $=$B.args("istitle",1,{self:null},["self"],arguments,{},null,null) -return self.length > 0 && str.title(self)==self} -str.isupper=function(self){ -var $=$B.args("islower",1,{self:null},["self"],arguments,{},null,null),has_cased=false,char -for(var i=0,len=self.length;i < len;i++){char=self.charCodeAt(i) -if(unicode_tables.Lu[char]){has_cased=true;continue} -else if(unicode_tables.Ll[char]||unicode_tables.Lt[char]){return false}} -return has_cased} -str.join=function(){var $=$B.args("join",2,{self:null,iterable:null},["self","iterable"],arguments,{},null,null) -var iterable=_b_.iter($.iterable),res=[],count=0 -while(1){try{var obj2=_b_.next(iterable) -if(! isinstance(obj2,str)){throw _b_.TypeError.$factory( -"sequence item "+count+": expected str instance, "+ -$B.class_name(obj2)+" found")} -res.push(obj2)}catch(err){if(_b_.isinstance(err,_b_.StopIteration)){break} -else{throw err}}} -return res.join($.self)} -str.ljust=function(self){var $=$B.args("ljust",3,{self:null,width:null,fillchar:null},["self","width","fillchar"],arguments,{fillchar:" "},null,null) -if($.width <=self.length){return self} -return self+$.fillchar.repeat($.width-self.length)} -str.lower=function(self){var $=$B.args("lower",1,{self:null},["self"],arguments,{},null,null) -return self.toLowerCase()} -str.lstrip=function(self,x){var $=$B.args("lstrip",2,{self:null,chars:null},["self","chars"],arguments,{chars:_b_.None},null,null) -if($.chars===_b_.None){return $.self.trimLeft()} -for(var i=0;i < $.self.length;i++){if($.chars.indexOf($.self.charAt(i))===-1){return $.self.substring(i)}} -return ""} -str.maketrans=function(){var $=$B.args("maketrans",3,{x:null,y:null,z:null},["x","y","z"],arguments,{y:null,z:null},null,null) -var _t=$B.empty_dict() -if($.y===null && $.z===null){ -if(! _b_.isinstance($.x,_b_.dict)){throw _b_.TypeError.$factory( -"maketrans only argument must be a dict")} -var items=_b_.list.$factory(_b_.dict.items($.x)) -for(var i=0,len=items.length;i < len;i++){var k=items[i][0],v=items[i][1] -if(! _b_.isinstance(k,_b_.int)){if(_b_.isinstance(k,_b_.str)&& k.length==1){k=_b_.ord(k)}else{throw _b_.TypeError.$factory("dictionary key "+k+ -" is not int or 1-char string")}} -if(v !==_b_.None && ! _b_.isinstance(v,[_b_.int,_b_.str])){throw _b_.TypeError.$factory("dictionary value "+v+ -" is not None, integer or string")} -_b_.dict.$setitem(_t,k,v)} -return _t}else{ -if(!(_b_.isinstance($.x,_b_.str)&& _b_.isinstance($.y,_b_.str))){throw _b_.TypeError.$factory("maketrans arguments must be strings")}else if($.x.length !==$.y.length){throw _b_.TypeError.$factory( -"maketrans arguments must be strings or same length")}else{var toNone={} -if($.z !==null){ -if(! _b_.isinstance($.z,_b_.str)){throw _b_.TypeError.$factory( -"maketrans third argument must be a string")} -for(var i=0,len=$.z.length;i < len;i++){toNone[_b_.ord($.z.charAt(i))]=true}} -for(var i=0,len=$.x.length;i < len;i++){var key=_b_.ord($.x.charAt(i)),value=$.y.charCodeAt(i) -_b_.dict.$setitem(_t,key,value)} -for(var k in toNone){_b_.dict.$setitem(_t,parseInt(k),_b_.None)} -return _t}}} -str.maketrans.$type="staticmethod" -str.partition=function(){var $=$B.args("partition",2,{self:null,sep:null},["self","sep"],arguments,{},null,null) -if($.sep==""){throw _b_.ValueError.$factory("empty separator")} -check_str($.sep) -var i=$.self.indexOf($.sep) -if(i==-1){return _b_.tuple.$factory([$.self,"",""])} -return _b_.tuple.$factory([$.self.substring(0,i),$.sep,$.self.substring(i+$.sep.length)])} -str.removeprefix=function(){var $=$B.args("removeprefix",2,{self:null,prefix:null},["self","prefix"],arguments,{},null,null) -if(!_b_.isinstance($.prefix,str)){throw _b_.ValueError.$factory("prefix should be str, not "+ -`'${$B.class_name($.prefix)}'`)} -if(str.startswith($.self,$.prefix)){return $.self.substr($.prefix.length)} -return $.self.substr(0)} -str.removesuffix=function(){var $=$B.args("removesuffix",2,{self:null,prefix:null},["self","suffix"],arguments,{},null,null) -if(!_b_.isinstance($.suffix,str)){throw _b_.ValueError.$factory("suffix should be str, not "+ -`'${$B.class_name($.prefix)}'`)} -if($.suffix.length > 0 && str.endswith($.self,$.suffix)){return $.self.substr(0,$.self.length-$.suffix.length)} -return $.self.substr(0)} -function $re_escape(str){var specials="[.*+?|()$^" -for(var i=0,len=specials.length;i < len;i++){var re=new RegExp("\\"+specials.charAt(i),"g") -str=str.replace(re,"\\"+specials.charAt(i))} -return str} -str.replace=function(self,old,_new,count){ -var $=$B.args("replace",4,{self:null,old:null,$$new:null,count:null},["self","old","$$new","count"],arguments,{count:-1},null,null),count=$.count,self=$.self,old=$.old,_new=$.$$new -check_str(old) -check_str(_new) -if(! isinstance(count,[_b_.int,_b_.float])){throw _b_.TypeError.$factory("'"+$B.class_name(count)+ -"' object cannot be interpreted as an integer")}else if(isinstance(count,_b_.float)){throw _b_.TypeError.$factory("integer argument expected, got float")} -if(count==0){return self} -if(count.__class__==$B.long_int){count=parseInt(count.value)} -if(old==""){if(_new==""){return self} -if(self==""){return _new} -var elts=self.split("") -if(count >-1 && elts.length >=count){var rest=elts.slice(count).join("") -return _new+elts.slice(0,count).join(_new)+rest}else{return _new+elts.join(_new)+_new}}else{var elts=str.split(self,old,count)} -var res=self,pos=-1 -if(old.length==0){var res=_new -for(var i=0;i < elts.length;i++){res+=elts[i]+_new} -return res+rest} -if(count < 0){count=res.length} -while(count > 0){pos=res.indexOf(old,pos) -if(pos < 0){break} -res=res.substr(0,pos)+_new+res.substr(pos+old.length) -pos=pos+_new.length -count--} -return res} -str.rfind=function(self,substr){ -if(arguments.length==2 && typeof substr=="string"){return self.lastIndexOf(substr)} -var $=$B.args("rfind",4,{self:null,sub:null,start:null,end:null},["self","sub","start","end"],arguments,{start:0,end:null},null,null) -normalize_start_end($) -check_str($.sub) -if($.sub.length==0){if($.start > $.self.length){return-1} -else{return $.self.length}} -var sublen=$.sub.length -for(var i=$.end-sublen;i >=$.start;i--){if($.self.substr(i,sublen)==$.sub){return i}} -return-1} -str.rindex=function(){ -var res=str.rfind.apply(null,arguments) -if(res==-1){throw _b_.ValueError.$factory("substring not found")} -return res} -str.rjust=function(self){var $=$B.args("rjust",3,{self:null,width:null,fillchar:null},["self","width","fillchar"],arguments,{fillchar:" "},null,null) -if($.width <=self.length){return self} -return $.fillchar.repeat($.width-self.length)+self} -str.rpartition=function(self,sep){var $=$B.args("rpartition",2,{self:null,sep:null},["self","sep"],arguments,{},null,null) -check_str($.sep) -var self=reverse($.self),sep=reverse($.sep) -var items=str.partition(self,sep).reverse() -for(var i=0;i < items.length;i++){items[i]=items[i].split("").reverse().join("")} -return items} -str.rsplit=function(self){var $=$B.args("rsplit",3,{self:null,sep:null,maxsplit:null},["self","sep","maxsplit"],arguments,{sep:_b_.None,maxsplit:-1},null,null),sep=$.sep -var rev_str=reverse($.self),rev_sep=sep===_b_.None ? sep :reverse($.sep),rev_res=str.split(rev_str,rev_sep,$.maxsplit) -rev_res.reverse() -for(var i=0;i < rev_res.length;i++){rev_res[i]=reverse(rev_res[i])} -return rev_res} -str.rstrip=function(self,x){var $=$B.args("rstrip",2,{self:null,chars:null},["self","chars"],arguments,{chars:_b_.None},null,null) -if($.chars===_b_.None){return $.self.trimRight()} -for(var j=$.self.length-1;j >=0;j--){if($.chars.indexOf($.self.charAt(j))==-1){return $.self.substring(0,j+1)}} -return ""} -str.split=function(){var $=$B.args("split",3,{self:null,sep:null,maxsplit:null},["self","sep","maxsplit"],arguments,{sep:_b_.None,maxsplit:-1},null,null),sep=$.sep,maxsplit=$.maxsplit,self=$.self,pos=0 -if(maxsplit.__class__===$B.long_int){maxsplit=parseInt(maxsplit.value)} -if(sep==""){throw _b_.ValueError.$factory("empty separator")} -if(sep===_b_.None){var res=[] -while(pos < self.length && self.charAt(pos).search(/\s/)>-1){pos++} -if(pos===self.length-1){return[self]} -var name="" -while(1){if(self.charAt(pos).search(/\s/)==-1){if(name==""){name=self.charAt(pos)} -else{name+=self.charAt(pos)}}else{if(name !==""){res.push(name) -if(maxsplit !==-1 && res.length==maxsplit+1){res.pop() -res.push(name+self.substr(pos)) -return res} -name=""}} -pos++ -if(pos > self.length-1){if(name){res.push(name)} -break}} -return res}else{var res=[],s="",seplen=sep.length -if(maxsplit==0){return[self]} -while(pos < self.length){if(self.substr(pos,seplen)==sep){res.push(s) -pos+=seplen -if(maxsplit >-1 && res.length >=maxsplit){res.push(self.substr(pos)) -return res} -s=""}else{s+=self.charAt(pos) -pos++}} -res.push(s) -return res}} -str.splitlines=function(self){var $=$B.args('splitlines',2,{self:null,keepends:null},['self','keepends'],arguments,{keepends:false},null,null) -if(!_b_.isinstance($.keepends,[_b_.bool,_b_.int])){throw _b_.TypeError('integer argument expected, got '+ -$B.get_class($.keepends).__name)} -var keepends=_b_.int.$factory($.keepends),res=[],self=$.self,start=0,pos=0 -if(!self.length){return res} -while(pos < self.length){if(self.substr(pos,2)=='\r\n'){res.push(self.slice(start,keepends ? pos+2 :pos)) -start=pos=pos+2}else if(self[pos]=='\r' ||self[pos]=='\n'){res.push(self.slice(start,keepends ? pos+1 :pos)) -start=pos=pos+1}else{pos++}} -if(start < self.length){res.push(self.slice(start))} -return res} -str.startswith=function(){ -var $=$B.args("startswith",4,{self:null,prefix:null,start:null,end:null},["self","prefix","start","end"],arguments,{start:0,end:null},null,null) -normalize_start_end($) -var prefixes=$.prefix -if(! isinstance(prefixes,_b_.tuple)){prefixes=[prefixes]} -var s=$.self.substring($.start,$.end) -for(var i=0,len=prefixes.length;i < len;i++){var prefix=prefixes[i] -if(! _b_.isinstance(prefix,str)){throw _b_.TypeError.$factory( -"endswith first arg must be str or a tuple of str, not int")} -if(s.substr(0,prefix.length)==prefix){return true}} -return false} -str.strip=function(){var $=$B.args("strip",2,{self:null,chars:null},["self","chars"],arguments,{chars:_b_.None},null,null) -if($.chars===_b_.None){return $.self.trim()} -for(var i=0;i < $.self.length;i++){if($.chars.indexOf($.self.charAt(i))==-1){break}} -for(var j=$.self.length-1;j >=i;j--){if($.chars.indexOf($.self.charAt(j))==-1){break}} -return $.self.substring(i,j+1)} -str.swapcase=function(self){var $=$B.args("swapcase",1,{self},["self"],arguments,{},null,null),res="",char -for(var i=0,len=self.length;i < len;i++){char=self.charCodeAt(i) -if(unicode_tables.Ll[char]){res+=self.charAt(i).toUpperCase()}else if(unicode_tables.Lu[char]){res+=self.charAt(i).toLowerCase()}else{res+=self.charAt(i)}} -return res} -str.title=function(self){var $=$B.args("title",1,{self},["self"],arguments,{},null,null),state,char,res="" -for(var i=0,len=self.length;i < len;i++){char=self.charCodeAt(i) -if(unicode_tables.Ll[char]){if(! state){res+=self.charAt(i).toUpperCase() -state="word"}else{res+=self.charAt(i)}}else if(unicode_tables.Lu[char]||unicode_tables.Lt[char]){res+=state ? self.charAt(i).toLowerCase():self.charAt(i) -state="word"}else{state=null -res+=self.charAt(i)}} -return res} -str.translate=function(self,table){var res=[],getitem=$B.$getattr(table,"__getitem__") -for(var i=0,len=self.length;i < len;i++){try{var repl=getitem(self.charCodeAt(i)) -if(repl !==_b_.None){if(typeof repl=="string"){res.push(repl)}else if(typeof repl=="number"){res.push(String.fromCharCode(repl))}}}catch(err){res.push(self.charAt(i))}} -return res.join("")} -str.upper=function(self){var $=$B.args("upper",1,{self:null},["self"],arguments,{},null,null) -return self.toUpperCase()} -str.zfill=function(self,width){var $=$B.args("zfill",2,{self:null,width:null},["self","width"],arguments,{},null,null) -if($.width <=self.length){return self} -switch(self.charAt(0)){case "+": -case "-": -return self.charAt(0)+ -"0".repeat($.width-self.length)+self.substr(1) -default: -return "0".repeat(width-self.length)+self}} -str.$factory=function(arg,encoding,errors){if(arguments.length==0){return ""} -if(arg===undefined){return $B.UndefinedClass.__str__()} -if(encoding !==undefined){ -var $=$B.args("str",3,{arg:null,encoding:null,errors:null},["arg","encoding","errors"],arguments,{encoding:"utf-8",errors:"strict"},null,null),encoding=$.encoding,errors=$.errors} -switch(typeof arg){case "string": -return str.__str__(arg) -case "number": -if(isFinite(arg)){return arg.toString()}} -try{if(arg.$is_class ||arg.$factory){ -var func=$B.$getattr(arg.__class__,"__str__") -return func(arg)} -if(arg.__class__ && arg.__class__===_b_.bytes && -encoding !==undefined){ -return _b_.bytes.decode(arg,$.encoding,$.errors)} -var klass=arg.__class__ ||$B.get_class(arg) -if(klass===undefined){return $B.JSObj.__str__($B.JSObj.$factory(arg))} -var method=$B.$getattr(klass ,"__str__",null) -if(method===null || -(arg.__class__ && arg.__class__ !==_b_.object && -method.$infos && method.$infos.__func__===_b_.object.__str__)){var method=$B.$getattr(klass,"__repr__")}} -catch(err){console.log("no __str__ for",arg) -console.log("err ",err) -if($B.debug > 1){console.log(err)} -console.log("Warning - no method __str__ or __repr__, "+ -"default to toString",arg) -throw err} -return $B.$call(method)(arg)} -str.__new__=function(cls){if(cls===undefined){throw _b_.TypeError.$factory("str.__new__(): not enough arguments")} -return{__class__:cls}} -$B.set_func_names(str,"builtins") -var StringSubclass=$B.StringSubclass={__class__:_b_.type,__mro__:[object],$infos:{__module__:"builtins",__name__:"str"},$is_class:true} -for(var $attr in str){if(typeof str[$attr]=="function"){StringSubclass[$attr]=(function(attr){return function(){var args=[],pos=0 -if(arguments.length > 0){var args=[arguments[0].valueOf()],pos=1 -for(var i=1,len=arguments.length;i < len;i++){args[pos++]=arguments[i]}} -return str[attr].apply(null,args)}})($attr)}} -StringSubclass.__new__=function(cls){return{__class__:cls}} -$B.set_func_names(StringSubclass,"builtins") -_b_.str=str -$B.parse_format_spec=function(spec){if(spec==""){this.empty=true} -else{var pos=0,aligns="<>=^",digits="0123456789",types="bcdeEfFgGnosxX%",align_pos=aligns.indexOf(spec.charAt(0)) -if(align_pos !=-1){if(spec.charAt(1)&& aligns.indexOf(spec.charAt(1))!=-1){ -this.fill=spec.charAt(0) -this.align=spec.charAt(1) -pos=2}else{ -this.align=aligns[align_pos] -this.fill=" " -pos++}}else{align_pos=aligns.indexOf(spec.charAt(1)) -if(spec.charAt(1)&& align_pos !=-1){ -this.align=aligns[align_pos] -this.fill=spec.charAt(0) -pos=2}} -var car=spec.charAt(pos) -if(car=="+" ||car=="-" ||car==" "){this.sign=car -pos++ -car=spec.charAt(pos)} -if(car=="#"){this.alternate=true;pos++;car=spec.charAt(pos)} -if(car=="0"){ -this.fill="0" -if(align_pos==-1){this.align="="} -pos++ -car=spec.charAt(pos)} -while(car && digits.indexOf(car)>-1){if(this.width===undefined){this.width=car} -else{this.width+=car} -pos++ -car=spec.charAt(pos)} -if(this.width !==undefined){this.width=parseInt(this.width)} -if(this.width===undefined && car=="{"){ -var end_param_pos=spec.substr(pos).search("}") -this.width=spec.substring(pos,end_param_pos) -console.log("width","["+this.width+"]") -pos+=end_param_pos+1} -if(car==","){this.comma=true;pos++;car=spec.charAt(pos)} -if(car=="."){if(digits.indexOf(spec.charAt(pos+1))==-1){throw _b_.ValueError.$factory( -"Missing precision in format spec")} -this.precision=spec.charAt(pos+1) -pos+=2 -car=spec.charAt(pos) -while(car && digits.indexOf(car)>-1){this.precision+=car -pos++ -car=spec.charAt(pos)} -this.precision=parseInt(this.precision)} -if(car && types.indexOf(car)>-1){this.type=car -pos++ -car=spec.charAt(pos)} -if(pos !==spec.length){throw _b_.ValueError.$factory("Invalid format specifier: "+spec)}} -this.toString=function(){return(this.fill===undefined ? "" :_b_.str.$factory(this.fill))+ -(this.align ||"")+ -(this.sign ||"")+ -(this.alternate ? "#" :"")+ -(this.sign_aware ? "0" :"")+ -(this.width ||"")+ -(this.comma ? "," :"")+ -(this.precision ? "."+this.precision :"")+ -(this.type ||"")}} -$B.format_width=function(s,fmt){if(fmt.width && s.length < fmt.width){var fill=fmt.fill ||" ",align=fmt.align ||"<",missing=fmt.width-s.length -switch(align){case "<": -return s+fill.repeat(missing) -case ">": -return fill.repeat(missing)+s -case "=": -if("+-".indexOf(s.charAt(0))>-1){return s.charAt(0)+fill.repeat(missing)+s.substr(1)}else{return fill.repeat(missing)+s} -case "^": -var left=parseInt(missing/2) -return fill.repeat(left)+s+fill.repeat(missing-left)}} -return s} -function fstring_expression(){this.type="expression" -this.expression="" -this.conversion=null -this.fmt=null} -$B.parse_fstring=function(string){ -var elts=[],pos=0,current="",ctype=null,nb_braces=0,car -while(pos < string.length){if(ctype===null){car=string.charAt(pos) -if(car=="{"){if(string.charAt(pos+1)=="{"){ctype="string" -current="{" -pos+=2}else{ctype="expression" -nb_braces=1 -pos++}}else if(car=="}"){if(string.charAt(pos+1)==car){ctype="string" -current="}" -pos+=2}else{throw Error(" f-string: single '}' is not allowed")}}else{ctype="string" -current=car -pos++}}else if(ctype=="string"){ -var i=pos -while(i < string.length){car=string.charAt(i) -if(car=="{"){if(string.charAt(i+1)=="{"){current+="{" -i+=2}else{elts.push(current) -ctype="expression" -pos=i+1 -break}}else if(car=="}"){if(string.charAt(i+1)==car){current+=car -i+=2}else{throw Error(" f-string: single '}' is not allowed")}}else{current+=car -i++}} -pos=i+1}else if(ctype=="debug"){ -while(string.charAt(i)==" "){i++} -if(string.charAt(i)=="}"){ -elts.push(current) -ctype=null -current="" -pos=i+1}}else{ -var i=pos,nb_braces=1,nb_paren=0,current=new fstring_expression() -while(i < string.length){car=string.charAt(i) -if(car=="{" && nb_paren==0){nb_braces++ -current.expression+=car -i++}else if(car=="}" && nb_paren==0){nb_braces-=1 -if(nb_braces==0){ -elts.push(current) -ctype=null -current="" -pos=i+1 -break} -current.expression+=car -i++}else if(car=="\\"){ -throw Error("f-string expression part cannot include a"+ -" backslash")}else if(nb_paren==0 && car=="!" && current.fmt===null && -":}".indexOf(string.charAt(i+2))>-1){if(current.expression.length==0){throw Error("f-string: empty expression not allowed")} -if("ars".indexOf(string.charAt(i+1))==-1){throw Error("f-string: invalid conversion character:"+ -" expected 's', 'r', or 'a'")}else{current.conversion=string.charAt(i+1) -i+=2}}else if(car=="("){nb_paren++ -current.expression+=car -i++}else if(car==")"){nb_paren-- -current.expression+=car -i++}else if(car=='"'){ -if(string.substr(i,3)=='"""'){var end=string.indexOf('"""',i+3) -if(end==-1){throw Error("f-string: unterminated string")}else{var trs=string.substring(i,end+3) -trs=trs.replace("\n","\\n\\") -current.expression+=trs -i=end+3}}else{var end=string.indexOf('"',i+1) -if(end==-1){throw Error("f-string: unterminated string")}else{current.expression+=string.substring(i,end+1) -i=end+1}}}else if(nb_paren==0 && car==":"){current.fmt=true -current.expression+=car -i++}else if(car=="="){ -var ce=current.expression,last_char=ce.charAt(ce.length-1),last_char_re=('()'.indexOf(last_char)>-1 ? "\\" :"")+last_char -if(ce.length==0 || -string.charAt(i+1)=="=" || -"=!<>:".search(last_char_re)>-1){current.expression+=car+string.charAt(i+1) -i+=2}else{ -tail=car -while(string.charAt(i+1).match(/\s/)){tail+=string.charAt(i+1) -i++} -elts.push(current.expression+tail) -while(ce.match(/\s$/)){ce=ce.substr(0,ce.length-1)} -current.expression=ce -ctype="debug" -i++}}else{current.expression+=car -i++}} -if(nb_braces > 0){throw Error("f-string: expected '}'")}}} -if(current.length > 0){elts.push(current)} -return elts} -var surrogate=str.$surrogate=$B.make_class("surrogate_string",function(s){ -var items=[] -for(var i=0,len=s.length;i < len;i++){var code=s.charCodeAt(i) -if(code >=0xD800 && code <=0xDBFF){i++ -var low=s.charCodeAt(i) -code=((code-0xD800)*0x400)+(low-0xDC00)+0x10000} -items.push(String.fromCodePoint(code))} -return{ -__class__:str.$surrogate,items:items}}) -surrogate.__mro__=[str,object] -surrogate.__contains__=function(self,other){return str.__contains__(self.items.join(''),other)} -surrogate.__getitem__=function(self,arg){if(isinstance(arg,_b_.int)){var pos=arg -if(arg < 0){pos+=self.items.length} -if(pos >=0 && pos < self.items.length){if(self.items[pos].length==2){return surrogate.$factory(self.items[pos])} -return self.items[pos]} -throw _b_.IndexError.$factory("string index out of range")} -if(isinstance(arg,slice)){var s=_b_.slice.$conv_for_seq(arg,self.items.length),start=s.start,stop=s.stop,step=s.step -var res="",i=null -if(step > 0){if(stop <=start){return ""} -for(var i=start;i < stop;i+=step){res+=self.items[i]}}else{if(stop >=start){return ''} -for(var i=start;i > stop;i+=step){res+=self.items[i]}} -return res} -if(isinstance(arg,_b_.bool)){return surrogate.__getitem__(self,_b_.int.$factory(arg))} -throw _b_.TypeError.$factory("string indices must be integers")} -surrogate.__hash__=function(self){return str.__hash__(self.items.join(''))} -surrogate.__iter__=function(self){return str_iterator.$factory(self.items)} -surrogate.__len__=function(self){return self.items.length} -surrogate.__repr__=function(self){return str.__repr__(self.items.join(''))} -surrogate.__str__=function(self){return str.__str__(self.items.join(''))} -$B.set_func_names(surrogate,"builtins")})(__BRYTHON__) -; -;(function($B){ -var bltns=$B.InjectBuiltins() -eval(bltns) -var str_hash=_b_.str.__hash__,$N=_b_.None -var set_ops=["eq","le","lt","ge","gt","sub","rsub","and","or","xor"] -function is_sublist(t1,t2){ -for(var i=0,ilen=t1.length;i < ilen;i++){var x=t1[i],flag=false -for(var j=0,jlen=t2.length;j < jlen;j++){if($B.rich_comp("__eq__",x,t2[j])){t2.splice(j,1) -flag=true -break}} -if(! flag){return false}} -return true} -dict_view_op={__eq__:function(t1,t2){return t1.length==t2.length && is_sublist(t1,t2)},__ne__:function(t1,t2){return ! dict_view_op.__eq__(t1,t2)},__lt__:function(t1,t2){return t1.length < t2.length && is_sublist(t1,t2)},__gt__:function(t1,t2){return dict_view_op.__lt__(t2,t1)},__le__:function(t1,t2){return t1.length <=t2.length && is_sublist(t1,t2)},__ge__:function(t1,t2){return dict_view_op.__le__(t2,t1)},__and__:function(t1,t2){var items=[] -for(var i=0,ilen=t1.length;i < ilen;i++){var x=t1[i] -flag=false -for(var j=0,jlen=t2.length;j < jlen;j++){if($B.rich_comp("__eq__",x,t2[j])){t2.splice(j,1) -items.push(x) -break}}} -return items},__or__:function(t1,t2){var items=t1 -for(var j=0,jlen=t2.length;j < jlen;j++){var y=t2[j],flag=false -for(var i=0,ilen=t1.length;i < ilen;i++){if($B.rich_comp("__eq__",y,t1[i])){t2.splice(j,1) -flag=true -break}} -if(! flag){items.push(y)}} -return items}} -$B.make_view=function(name){var klass=$B.make_class(name,function(items,set_like){return{ -__class__:klass,__dict__:$B.empty_dict(),counter:-1,items:items,len:items.length,set_like:set_like}}) -for(var i=0,len=set_ops.length;i < len;i++){var op="__"+set_ops[i]+"__" -klass[op]=(function(op){return function(self,other){ -if(self.set_like){return _b_.set[op](_b_.set.$factory(self),_b_.set.$factory(other))}else{ -if(other.__class__ !==klass){return false} -var other_items=_b_.list.$factory(other) -return dict_view_op[op](self.items,other_items)}}})(op)} -klass.__iter__=function(self){var it=klass.$iterator.$factory(self.items) -it.len_func=self.len_func -return it} -klass.__len__=function(self){return self.len} -klass.__repr__=function(self){return klass.$infos.__name__+'('+_b_.repr(self.items)+')'} -$B.set_func_names(klass,"builtins") -return klass} -function dict_iterator_next(self){if(self.len_func()!=self.len){throw _b_.RuntimeError.$factory("dictionary changed size during iteration")} -self.counter++ -if(self.counter < self.items.length){return self.items[self.counter]} -throw _b_.StopIteration.$factory("StopIteration")} -var dict={__class__:_b_.type,__mro__:[_b_.object],$infos:{__module__:"builtins",__name__:"dict"},$is_class:true,$native:true} -dict.$to_obj=function(d){ -var res={} -for(var key in d.$string_dict){res[key]=d.$string_dict[key][0]} -return res} -function to_list(d,ix){var items=[],item -if(d.$jsobj){items=[] -for(var attr in d.$jsobj){if(attr.charAt(0)!="$"){var val=d.$jsobj[attr] -if(val===undefined){val=_b_.NotImplemented} -else if(val===null){val=$N} -items.push([attr,val])}}}else if(_b_.isinstance(d,_b_.dict)){for(var k in d.$numeric_dict){items.push([parseFloat(k),d.$numeric_dict[k]])} -for(var k in d.$string_dict){items.push([k,d.$string_dict[k]])} -for(var k in d.$object_dict){d.$object_dict[k].forEach(function(item){items.push(item)})} -items.sort(function(a,b){return a[1][1]-b[1][1]}) -items=items.map(function(item){return[item[0],item[1][0]]})} -if(ix !==undefined){return items.map(function(item){return item[ix]})}else{items.__class__=_b_.tuple -return items.map(function(item){item.__class__=_b_.tuple;return item} -)}} -$B.dict_to_list=to_list -function dict_iterator_next(self){if(self.len_func()!=self.len){throw _b_.RuntimeError.$factory("dictionary changed size during iteration")} -self.counter++ -if(self.counter < self.items.length){return self.items[self.counter]} -throw _b_.StopIteration.$factory("StopIteration")} -var $copy_dict=function(left,right){var _l=to_list(right),si=dict.$setitem -right.$version=right.$version ||0 -var right_version=right.$version ||0 -for(var i=0,len=_l.length;i < len;i++){si(left,_l[i][0],_l[i][1]) -if(right.$version !=right_version){throw _b_.RuntimeError.$factory("dict mutated during update")}}} -function rank(self,hash,key){ -var pairs=self.$object_dict[hash] -if(pairs !==undefined){for(var i=0,len=pairs.length;i < len;i++){if($B.rich_comp("__eq__",key,pairs[i][0])){return i}}} -return-1} -dict.__bool__=function(){var $=$B.args("__bool__",1,{self:null},["self"],arguments,{},null,null) -return dict.__len__($.self)> 0} -dict.__contains__=function(){var $=$B.args("__contains__",2,{self:null,key:null},["self","key"],arguments,{},null,null),self=$.self,key=$.key -if(self.$is_namespace){key=$B.to_alias(key)} -if(self.$jsobj){return self.$jsobj[key]!==undefined} -switch(typeof key){case "string": -return self.$string_dict[key]!==undefined -case "number": -return self.$numeric_dict[key]!==undefined} -var hash=_b_.hash(key) -if(self.$str_hash[hash]!==undefined && -$B.rich_comp("__eq__",key,self.$str_hash[hash])){return true} -if(self.$numeric_dict[hash]!==undefined && -$B.rich_comp("__eq__",key,hash)){return true} -return rank(self,hash,key)>-1} -dict.__delitem__=function(){var $=$B.args("__eq__",2,{self:null,arg:null},["self","arg"],arguments,{},null,null),self=$.self,arg=$.arg -if(self.$jsobj){if(self.$jsobj[arg]===undefined){throw _b_.KeyError.$factory(arg)} -delete self.$jsobj[arg] -return $N} -switch(typeof arg){case "string": -if(self.$string_dict[arg]===undefined){throw _b_.KeyError.$factory(_b_.str.$factory(arg))} -delete self.$string_dict[arg] -delete self.$str_hash[str_hash(arg)] -self.$version++ -return $N -case "number": -if(self.$numeric_dict[arg]===undefined){throw _b_.KeyError.$factory(_b_.str.$factory(arg))} -delete self.$numeric_dict[arg] -self.$version++ -return $N} -var hash=_b_.hash(arg),ix -if((ix=rank(self,hash,arg))>-1){self.$object_dict[hash].splice(ix,1)}else{throw _b_.KeyError.$factory(_b_.str.$factory(arg))} -self.$version++ -return $N} -dict.__eq__=function(){var $=$B.args("__eq__",2,{self:null,other:null},["self","other"],arguments,{},null,null),self=$.self,other=$.other -if(! _b_.isinstance(other,dict)){return false} -if(self.$jsobj){self=jsobj2dict(self.$jsobj)} -if(other.$jsobj){other=jsobj2dict(other.$jsobj)} -if(dict.__len__(self)!=dict.__len__(other)){return false} -if(self.$string_dict.length !=other.$string_dict.length){return false} -for(var k in self.$numeric_dict){if(other.$numeric_dict.hasOwnProperty(k)){if(!$B.rich_comp("__eq__",other.$numeric_dict[k][0],self.$numeric_dict[k][0])){return false}}else if(other.$object_dict.hasOwnProperty(k)){var pairs=other.$object_dict[k],flag=false -for(var i=0,len=pairs.length;i < len;i++){if($B.rich_comp("__eq__",k,pairs[i][0])&& -$B.rich_comp("__eq__",self.$numeric_dict[k],pairs[i][1])){flag=true -break}} -if(! flag){return false}}else{return false}} -for(var k in self.$string_dict){if(!other.$string_dict.hasOwnProperty(k)|| -!$B.rich_comp("__eq__",other.$string_dict[k][0],self.$string_dict[k][0])){return false}} -for(var hash in self.$object_dict){var pairs=self.$object_dict[hash] -var other_pairs=[] -if(other.$numeric_dict[hash]!==undefined){other_pairs.push([hash,other.$numeric_dict[hash]])} -if(other.$object_dict[hash]!==undefined){other_pairs=other_pairs.concat(other.$object_dict[hash])} -if(other_pairs.length==0){return false} -for(var i=0,len_i=pairs.length;i < len_i;i++){var flag=false -var key=pairs[i][0],value=pairs[i][1][0] -for(var j=0,len_j=other_pairs.length;j < len_j;j++){if($B.rich_comp("__eq__",key,other_pairs[j][0])&& -$B.rich_comp("__eq__",value,other_pairs[j][1][0])){flag=true -break}} -if(! flag){return false}}} -return true} -dict.__getitem__=function(){var $=$B.args("__getitem__",2,{self:null,arg:null},["self","arg"],arguments,{},null,null),self=$.self,arg=$.arg -return dict.$getitem(self,arg)} -dict.$getitem=function(self,arg){if(self.$jsobj){if(self.$jsobj[arg]===undefined){if(self.$jsobj.hasOwnProperty(arg)){return $B.Undefined} -throw _b_.KeyError.$factory(arg)} -return self.$jsobj[arg]} -switch(typeof arg){case "string": -if(self.$string_dict[arg]!==undefined){return self.$string_dict[arg][0]} -break -case "number": -if(self.$numeric_dict[arg]!==undefined){return self.$numeric_dict[arg][0]} -break} -var hash=_b_.hash(arg),_eq=function(other){return $B.rich_comp("__eq__",arg,other)} -if(typeof arg=="object"){arg.$hash=hash } -var sk=self.$str_hash[hash] -if(sk !==undefined && _eq(sk)){return self.$string_dict[sk][0]} -if(self.$numeric_dict[hash]!==undefined && _eq(hash)){return self.$numeric_dict[hash][0]} -if(_b_.isinstance(arg,_b_.str)){ -var res=self.$string_dict[arg.valueOf()] -if(res !==undefined){return res[0]}} -var ix=rank(self,hash,arg) -if(ix >-1){return self.$object_dict[hash][ix][1][0]} -if(self.__class__ !==dict){try{var missing_method=getattr(self.__class__,"__missing__",_b_.None)}catch(err){console.log(err)} -if(missing_method !==_b_.None){return missing_method(self,arg)}} -throw _b_.KeyError.$factory(arg)} -dict.__hash__=_b_.None -function init_from_list(self,args){var i=-1,stop=args.length-1,si=dict.__setitem__ -while(i++< stop){var item=args[i] -switch(typeof item[0]){case 'string': -self.$string_dict[item[0]]=[item[1],self.$order++] -self.$str_hash[str_hash(item[0])]=item[0] -self.$version++ -break -case 'number': -if(item[0]!=0 && item[0]!=1){self.$numeric_dict[item[0]]=[item[1],self.$order++] -self.$version++ -break} -default: -si(self,item[0],item[1]) -break}}} -dict.__init__=function(self,first,second){var $ -if(first===undefined){return $N} -if(second===undefined){if(first.$nat !='kw' && $B.get_class(first)===$B.JSObj){for(var key in first){self.$string_dict[key]=[first[key],self.$order++]} -return _b_.None}else if(first.$jsobj){self.$jsobj={} -for(var attr in first.$jsobj){self.$jsobj[attr]=first.$jsobj[attr]} -return $N}else if(Array.isArray(first)){init_from_list(self,first) -return $N}} -$=$ ||$B.args("dict",1,{self:null},["self"],arguments,{},"first","second") -var args=$.first -if(args.length > 1){throw _b_.TypeError.$factory("dict expected at most 1 argument"+ -", got 2")}else if(args.length==1){args=args[0] -if(args.__class__===dict){['$string_dict','$str_hash','$numeric_dict','$object_dict']. -forEach(function(d){for(key in args[d]){self[d][key]=args[d][key]}})}else if(_b_.isinstance(args,dict)){$copy_dict(self,args)}else{var keys=$B.$getattr(args,"keys",null) -if(keys !==null){var gi=$B.$getattr(args,"__getitem__",null) -if(gi !==null){ -gi=$B.$call(gi) -var kiter=_b_.iter($B.$call(keys)()) -while(true){try{var key=_b_.next(kiter),value=gi(key) -dict.__setitem__(self,key,value)}catch(err){if(err.__class__===_b_.StopIteration){break} -throw err}} -return $N}} -if(! Array.isArray(args)){args=_b_.list.$factory(args)} -init_from_list(self,args)}} -var kw=$.second.$string_dict -for(var attr in kw){switch(typeof attr){case "string": -self.$string_dict[attr]=[kw[attr][0],self.$order++] -self.$str_hash[str_hash(attr)]=attr -break -case "number": -self.$numeric_dict[attr]=[kw[attr][0],self.$order++] -break -default: -si(self,attr,kw[attr][0]) -break}} -return $N} -dict.__iter__=function(self){return _b_.iter(dict.$$keys(self))} -dict.__ior__=function(self,other){ -dict.update(self,other) -return self} -dict.__len__=function(self){var _count=0 -if(self.$jsobj){for(var attr in self.$jsobj){if(attr.charAt(0)!="$"){_count++}} -return _count} -for(var k in self.$numeric_dict){_count++} -for(var k in self.$string_dict){_count++} -for(var hash in self.$object_dict){_count+=self.$object_dict[hash].length} -return _count} -dict.__ne__=function(self,other){return ! dict.__eq__(self,other)} -dict.__new__=function(cls){if(cls===undefined){throw _b_.TypeError.$factory("int.__new__(): not enough arguments")} -var instance={__class__:cls,$numeric_dict :{},$object_dict :{},$string_dict :{},$str_hash:{},$version:0,$order:0} -if(cls !==dict){instance.__dict__=$B.empty_dict()} -return instance} -dict.__or__=function(self,other){ -if(! _b_.isinstance(other,dict)){return _b_.NotImplemented} -var res=dict.copy(self) -dict.update(res,other) -return res} -dict.__repr__=function(self){if(self.$jsobj){ -return dict.__repr__(jsobj2dict(self.$jsobj))} -if($B.repr.enter(self)){return "{...}"} -var res=[],items=to_list(self) -items.forEach(function(item){try{res.push(repr(item[0])+": "+repr(item[1]))}catch(err){throw err}}) -$B.repr.leave(self) -return "{"+res.join(", ")+"}"} -dict.__ror__=function(self,other){ -if(! _b_.isinstance(other,dict)){return _b_.NotImplemented} -var res=dict.copy(other) -dict.update(res,self) -return res} -dict.__setitem__=function(self,key,value){var $=$B.args("__setitem__",3,{self:null,key:null,value:null},["self","key","value"],arguments,{},null,null) -return dict.$setitem($.self,$.key,$.value)} -dict.$setitem=function(self,key,value,$hash){ -if(self.$jsobj){if(self.$from_js){ -value=$B.pyobj2jsobj(value)} -if(self.$jsobj.__class__===_b_.type){self.$jsobj[key]=value -if(key=="__init__" ||key=="__new__"){ -self.$jsobj.$factory=$B.$instance_creator(self.$jsobj)}}else{self.$jsobj[key]=value} -return $N} -switch(typeof key){case "string": -if(self.$string_dict===undefined){console.log("pas de string dict",self,key,value)} -if(self.$string_dict[key]!==undefined){self.$string_dict[key][0]=value}else{self.$string_dict[key]=[value,self.$order++] -self.$str_hash[str_hash(key)]=key -self.$version++} -return $N -case "number": -if(self.$numeric_dict[key]!==undefined){ -self.$numeric_dict[key][0]=value}else{ -var done=false -if((key==0 ||key==1)&& -self.$object_dict[key]!==undefined){for(const item of self.$object_dict[key]){if((key==0 && item[0]===false)|| -(key==1 && item[0]===true)){ -item[1][0]=value -done=true}}} -if(! done){ -self.$numeric_dict[key]=[value,self.$order++]} -self.$version++} -return $N -case "boolean": -var num=key ? 1 :0 -if(self.$numeric_dict[num]!==undefined){var order=self.$numeric_dict[num][1] -self.$numeric_dict[num]=[value,order] -return} -if(self.$object_dict[num]!==undefined){self.$object_dict[num].push([key,[value,self.$order++]])}else{self.$object_dict[num]=[[key,[value,self.$order++]]]}} -var hash=$hash===undefined ? _b_.hash(key):$hash,_eq=function(other){return $B.rich_comp("__eq__",key,other)} -if(self.$numeric_dict[hash]!==undefined && _eq(hash)){self.$numeric_dict[hash]=[value,self.$numeric_dict[hash][1]] -self.$version++ -return $N} -var sk=self.$str_hash[hash] -if(sk !==undefined && _eq(sk)){self.$string_dict[sk]=[value,self.$string_dict[sk][1]] -self.$version++ -return $N} -if($hash){if(self.$object_dict[$hash]!==undefined){self.$object_dict[$hash].push([key,[value,self.$order++]])}else{self.$object_dict[$hash]=[[key,[value,self.$order++]]]} -self.$version++ -return $N} -var ix=rank(self,hash,key) -if(ix >-1){ -self.$object_dict[hash][ix][1]=[value,self.$object_dict[hash][ix][1][1]] -return $N}else if(self.$object_dict.hasOwnProperty(hash)){self.$object_dict[hash].push([key,[value,self.$order++]])}else{self.$object_dict[hash]=[[key,[value,self.$order++]]]} -self.$version++ -return $N} -dict.__str__=function(){return dict.__repr__.apply(null,arguments)} -$B.make_rmethods(dict) -dict.clear=function(){ -var $=$B.args("clear",1,{self:null},["self"],arguments,{},null,null),self=$.self -self.$numeric_dict={} -self.$string_dict={} -self.$str_hash={} -self.$object_dict={} -if(self.$jsobj){for(var attr in self.$jsobj){if(attr.charAt(0)!=="$" && attr !=="__class__"){delete self.$jsobj[attr]}}} -self.$version++ -self.$order=0 -return $N} -dict.copy=function(self){ -var $=$B.args("copy",1,{self:null},["self"],arguments,{},null,null),self=$.self,res=$B.empty_dict() -$copy_dict(res,self) -return res} -dict.fromkeys=function(){var $=$B.args("fromkeys",3,{cls:null,keys:null,value:null},["cls","keys","value"],arguments,{value:_b_.None},null,null),keys=$.keys,value=$.value -var klass=$.cls,res=$B.$call(klass)(),keys_iter=$B.$iter(keys) -while(1){try{var key=_b_.next(keys_iter) -if(klass===dict){dict.$setitem(res,key,value)} -else{$B.$getattr(res,"__setitem__")(key,value)}}catch(err){if($B.is_exc(err,[_b_.StopIteration])){return res} -throw err}}} -dict.get=function(){var $=$B.args("get",3,{self:null,key:null,_default:null},["self","key","_default"],arguments,{_default:$N},null,null) -try{return dict.__getitem__($.self,$.key)} -catch(err){if(_b_.isinstance(err,_b_.KeyError)){return $._default} -else{throw err}}} -var dict_items=$B.make_view("dict_items",true) -dict_items.$iterator=$B.make_iterator_class("dict_itemiterator") -dict.items=function(self){if(arguments.length > 1){var _len=arguments.length-1,_msg="items() takes no arguments ("+_len+" given)" -throw _b_.TypeError.$factory(_msg)} -var items=to_list(self),set_like=true -for(var i=0,len=items.length;i < len;i++){try{_b_.hash(items[i][1])}catch(err){set_like=false -break}} -var it=dict_items.$factory(to_list(self),set_like) -it.len_func=function(){return dict.__len__(self)} -return it} -var dict_keys=$B.make_view("dict_keys") -dict_keys.$iterator=$B.make_iterator_class("dict_keyiterator") -dict.$$keys=function(self){if(arguments.length > 1){var _len=arguments.length-1,_msg="keys() takes no arguments ("+_len+" given)" -throw _b_.TypeError.$factory(_msg)} -var it=dict_keys.$factory(to_list(self,0),true) -it.len_func=function(){return dict.__len__(self)} -return it} -dict.pop=function(){var missing={},$=$B.args("pop",3,{self:null,key:null,_default:null},["self","key","_default"],arguments,{_default:missing},null,null),self=$.self,key=$.key,_default=$._default -try{var res=dict.__getitem__(self,key) -dict.__delitem__(self,key) -return res}catch(err){if(err.__class__===_b_.KeyError){if(_default !==missing){return _default} -throw err} -throw err}} -dict.popitem=function(self){try{var itm=_b_.next(_b_.iter(dict.items(self))) -dict.__delitem__(self,itm[0]) -return _b_.tuple.$factory(itm)}catch(err){if(err.__class__==_b_.StopIteration){throw _b_.KeyError.$factory("'popitem(): dictionary is empty'")}}} -dict.setdefault=function(){var $=$B.args("setdefault",3,{self:null,key:null,_default:null},["self","key","_default"],arguments,{_default:$N},null,null),self=$.self,key=$.key,_default=$._default -try{return dict.__getitem__(self,key)} -catch(err){if(err.__class__ !==_b_.KeyError){throw err} -if(_default===undefined){_default=$N} -var hash=key.$hash -key.$hash=undefined -dict.$setitem(self,key,_default,hash) -return _default}} -dict.update=function(self){var $=$B.args("update",1,{"self":null},["self"],arguments,{},"args","kw"),self=$.self,args=$.args,kw=$.kw -if(args.length > 0){var o=args[0] -if(_b_.isinstance(o,dict)){if(o.$jsobj){o=jsobj2dict(o.$jsobj)} -$copy_dict(self,o)}else if(_b_.hasattr(o,"keys")){var _keys=_b_.list.$factory($B.$call($B.$getattr(o,"keys"))()) -for(var i=0,len=_keys.length;i < len;i++){var _value=getattr(o,"__getitem__")(_keys[i]) -dict.$setitem(self,_keys[i],_value)}}else{var it=_b_.iter(o),i=0 -while(true){try{var item=_b_.next(it)}catch(err){if(err.__class__===_b_.StopIteration){break} -throw err} -try{key_value=_b_.list.$factory(item)}catch(err){throw _b_.TypeError.$factory("cannot convert dictionary"+ -" update sequence element #"+i+" to a sequence")} -if(key_value.length !==2){throw _b_.ValueError.$factory("dictionary update "+ -"sequence element #"+i+" has length "+ -key_value.length+"; 2 is required")} -dict.$setitem(self,key_value[0],key_value[1]) -i++}}} -$copy_dict(self,kw) -self.$version++ -return $N} -var dict_values=$B.make_view("dict_values") -dict_values.$iterator=$B.make_iterator_class("dict_valueiterator") -dict.values=function(self){if(arguments.length > 1){var _len=arguments.length-1,_msg="values() takes no arguments ("+_len+" given)" -throw _b_.TypeError.$factory(_msg)} -var values=to_list(self,1) -var it=dict_values.$factory(to_list(self,1),false) -it.len_func=function(){return dict.__len__(self)} -return it} -dict.$factory=function(){var res=dict.__new__(dict) -var args=[res] -for(var i=0,len=arguments.length;i < len ;i++){args.push(arguments[i])} -dict.__init__.apply(null,args) -return res} -_b_.dict=dict -$B.set_func_names(dict,"builtins") -$B.empty_dict=function(){return{ -__class__:dict,$numeric_dict :{},$object_dict :{},$string_dict :{},$str_hash:{},$version:0,$order:0}} -dict.fromkeys=_b_.classmethod.$factory(dict.fromkeys) -$B.getset_descriptor=$B.make_class("getset_descriptor",function(klass,attr){return{ -__class__:$B.getset_descriptor,__doc__:_b_.None,cls:klass,attr:attr}} -) -$B.getset_descriptor.__repr__=$B.getset_descriptor.__str__=function(self){return ``} -$B.set_func_names($B.getset_descriptor,"builtins") -var mappingproxy=$B.mappingproxy=$B.make_class("mappingproxy",function(obj){if(_b_.isinstance(obj,dict)){ -var res=$B.obj_dict(dict.$to_obj(obj))}else{var res=$B.obj_dict(obj)} -res.__class__=mappingproxy -return res} -) -mappingproxy.__setitem__=function(){throw _b_.TypeError.$factory("'mappingproxy' object does not support "+ -"item assignment")} -for(var attr in dict){if(mappingproxy[attr]!==undefined || -["__class__","__mro__","__new__","__init__","__delitem__","clear","fromkeys","pop","popitem","setdefault","update"].indexOf(attr)>-1){continue} -if(typeof dict[attr]=="function"){mappingproxy[attr]=(function(key){return function(){return dict[key].apply(null,arguments)}})(attr)}else{mappingproxy[attr]=dict[attr]}} -$B.set_func_names(mappingproxy,"builtins") -function jsobj2dict(x){var d=$B.empty_dict() -for(var attr in x){if(attr.charAt(0)!="$" && attr !=="__class__"){if(x[attr]===null){d.$string_dict[attr]=[_b_.None,d.$order++]}else if(x[attr]===undefined){continue}else if(x[attr].$jsobj===x){d.$string_dict[attr]=[d,d.$order++]}else{d.$string_dict[attr]=[$B.$JS2Py(x[attr]),d.$order++]}}} -return d} -$B.obj_dict=function(obj,from_js){var klass=obj.__class__ ||$B.get_class(obj) -if(klass !==undefined && klass.$native){throw _b_.AttributeError.$factory(klass.__name__+ -" has no attribute '__dict__'")} -var res=$B.empty_dict() -res.$jsobj=obj -res.$from_js=from_js -return res}})(__BRYTHON__) -; -;(function($B){ -var _b_=$B.builtins; -var object=_b_.object -var JSObject=$B.JSObject -var _window=self; -function $getMouseOffset(target,ev){ev=ev ||_window.event; -var docPos=$getPosition(target); -var mousePos=$mouseCoords(ev); -return{x:mousePos.x-docPos.x,y:mousePos.y-docPos.y};} -function $getPosition(e){var left=0,top=0,width=e.width ||e.offsetWidth,height=e.height ||e.offsetHeight,scroll=document.scrollingElement.scrollTop -while(e.offsetParent){left+=e.offsetLeft -top+=e.offsetTop -e=e.offsetParent} -left+=e.offsetLeft ||0 -top+=e.offsetTop ||0 -if(e.parentElement){ -var parent_pos=$getPosition(e.parentElement) -left+=parent_pos.left -top+=parent_pos.top} -return{left:left,top:top,width:width,height:height}} -function trace(msg){var elt=document.getElementById("trace") -if(elt){elt.innerText+=msg}} -function $mouseCoords(ev){if(ev.type.startsWith("touch")){var res={} -res.x=_b_.int.$factory(ev.touches[0].screenX) -res.y=_b_.int.$factory(ev.touches[0].screenY) -res.__getattr__=function(attr){return this[attr]} -res.__class__="MouseCoords" -return res} -var posx=0,posy=0 -if(!ev){var ev=_window.event} -if(ev.pageX ||ev.pageY){posx=ev.pageX -posy=ev.pageY}else if(ev.clientX ||ev.clientY){posx=ev.clientX+document.body.scrollLeft+ -document.documentElement.scrollLeft -posy=ev.clientY+document.body.scrollTop+ -document.documentElement.scrollTop} -var res={} -res.x=_b_.int.$factory(posx) -res.y=_b_.int.$factory(posy) -res.__getattr__=function(attr){return this[attr]} -res.__class__="MouseCoords" -return res} -var $DOMNodeAttrs=["nodeName","nodeValue","nodeType","parentNode","childNodes","firstChild","lastChild","previousSibling","nextSibling","attributes","ownerDocument"] -$B.$isNode=function(o){ -return( -typeof Node==="object" ? o instanceof Node : -o && typeof o==="object" && typeof o.nodeType==="number" && -typeof o.nodeName==="string" -)} -$B.$isNodeList=function(nodes){ -try{var result=Object.prototype.toString.call(nodes) -var re=new RegExp("^\\[object (HTMLCollection|NodeList)\\]$") -return(typeof nodes==="object" && -re.exec(result)!==null && -nodes.length !==undefined && -(nodes.length==0 || -(typeof nodes[0]==="object" && nodes[0].nodeType > 0)) -)}catch(err){return false}} -var $DOMEventAttrs_W3C=["NONE","CAPTURING_PHASE","AT_TARGET","BUBBLING_PHASE","type","target","currentTarget","eventPhase","bubbles","cancelable","timeStamp","stopPropagation","preventDefault","initEvent"] -var $DOMEventAttrs_IE=["altKey","altLeft","button","cancelBubble","clientX","clientY","contentOverflow","ctrlKey","ctrlLeft","data","dataFld","dataTransfer","fromElement","keyCode","nextPage","offsetX","offsetY","origin","propertyName","reason","recordset","repeat","screenX","screenY","shiftKey","shiftLeft","source","srcElement","srcFilter","srcUrn","toElement","type","url","wheelDelta","x","y"] -$B.$isEvent=function(obj){var flag=true -for(var i=0;i < $DOMEventAttrs_W3C.length;i++){if(obj[$DOMEventAttrs_W3C[i]]===undefined){flag=false;break}} -if(flag){return true} -for(var i=0;i < $DOMEventAttrs_IE.length;i++){if(obj[$DOMEventAttrs_IE[i]]===undefined){return false}} -return true} -var $NodeTypes={1:"ELEMENT",2:"ATTRIBUTE",3:"TEXT",4:"CDATA_SECTION",5:"ENTITY_REFERENCE",6:"ENTITY",7:"PROCESSING_INSTRUCTION",8:"COMMENT",9:"DOCUMENT",10:"DOCUMENT_TYPE",11:"DOCUMENT_FRAGMENT",12:"NOTATION"} -var Attributes=$B.make_class("Attributes",function(elt){return{__class__:Attributes,elt:elt}} -) -Attributes.__contains__=function(){var $=$B.args("__getitem__",2,{self:null,key:null},["self","key"],arguments,{},null,null) -if($.self.elt instanceof SVGElement){return $.self.elt.hasAttributeNS(null,$.key)}else if(typeof $.self.elt.hasAttribute=="function"){return $.self.elt.hasAttribute($.key)} -return false} -Attributes.__delitem__=function(){var $=$B.args("__getitem__",2,{self:null,key:null},["self","key"],arguments,{},null,null) -if(!Attributes.__contains__($.self,$.key)){throw _b_.KeyError.$factory($.key)} -if($.self.elt instanceof SVGElement){$.self.elt.removeAttributeNS(null,$.key) -return _b_.None}else if(typeof $.self.elt.hasAttribute=="function"){$.self.elt.removeAttribute($.key) -return _b_.None}} -Attributes.__getitem__=function(){var $=$B.args("__getitem__",2,{self:null,key:null},["self","key"],arguments,{},null,null) -if($.self.elt instanceof SVGElement && -$.self.elt.hasAttributeNS(null,$.key)){return $.self.elt.getAttributeNS(null,$.key)}else if(typeof $.self.elt.hasAttribute=="function" && -$.self.elt.hasAttribute($.key)){return $.self.elt.getAttribute($.key)} -throw _b_.KeyError.$factory($.key)} -Attributes.__iter__=function(self){self.$counter=0 -var attrs=self.attributes,items=[] -for(var i=0;i < attrs.length;i++){items.push(attrs[i].name)} -self.$items=items -return self} -Attributes.__next__=function(){var $=$B.args("__next__",1,{self:null},["self"],arguments,{},null,null) -if($.self.$counter < $.self.$items.length){var res=$.self.$items[$.self.$counter] -$.self.$counter++ -return res}else{throw _b_.StopIteration.$factory("")}} -Attributes.__setitem__=function(){var $=$B.args("__setitem__",3,{self:null,key:null,value:null},["self","key","value"],arguments,{},null,null) -if($.self.elt instanceof SVGElement && -typeof $.self.elt.setAttributeNS=="function"){$.self.elt.setAttributeNS(null,$.key,$.value) -return _b_.None}else if(typeof $.self.elt.setAttribute=="function"){$.self.elt.setAttribute($.key,$.value) -return _b_.None} -throw _b_.TypeError.$factory("Can't set attributes on element")} -Attributes.get=function(){var $=$B.args("get",3,{self:null,key:null,deflt:null},["self","key","deflt"],arguments,{deflt:_b_.None},null,null) -try{return Attributes.__getitem__($.self,$.key)}catch(err){if(err.__class__===_b_.KeyError){return $.deflt}else{throw err}}} -Attributes.keys=function(){return Attributes.__iter__.apply(null,arguments)} -Attributes.items=function(){var $=$B.args("values",1,{self:null},["self"],arguments,{},null,null),attrs=$.self.attributes,values=[] -for(var i=0;i < attrs.length;i++){values.push([attrs[i].name,attrs[i].value])} -return _b_.list.__iter__(values)} -Attributes.values=function(){var $=$B.args("values",1,{self:null},["self"],arguments,{},null,null),attrs=$.self.attributes,values=[] -for(var i=0;i < attrs.length;i++){values.push(attrs[i].value)} -return _b_.list.__iter__(values)} -$B.set_func_names(Attributes,"") -var DOMEvent=$B.DOMEvent={__class__:_b_.type,__mro__:[object],$infos:{__name__:"DOMEvent"}} -DOMEvent.__new__=function(cls,evt_name){var ev=new Event(evt_name) -ev.__class__=DOMEvent -if(ev.preventDefault===undefined){ev.preventDefault=function(){ev.returnValue=false}} -if(ev.stopPropagation===undefined){ev.stopPropagation=function(){ev.cancelBubble=true}} -return ev} -function dom2svg(svg_elt,coords){ -var pt=svg_elt.createSVGPoint() -pt.x=coords.x -pt.y=coords.y -return pt.matrixTransform(svg_elt.getScreenCTM().inverse())} -DOMEvent.__getattribute__=function(self,attr){switch(attr){case '__repr__': -case '__str__': -return function(){return ''} -case 'x': -return $mouseCoords(self).x -case 'y': -return $mouseCoords(self).y -case 'data': -if(self.dataTransfer !==null){return Clipboard.$factory(self.dataTransfer)} -return $B.$JS2Py(self['data']) -case 'target': -if(self.target !==undefined){return DOMNode.$factory(self.target)} -case 'char': -return String.fromCharCode(self.which) -case 'svgX': -if(self.target instanceof SVGSVGElement){return Math.floor(dom2svg(self.target,$mouseCoords(self)).x)} -throw _b_.AttributeError.$factory("event target is not an SVG "+ -"element") -case 'svgY': -if(self.target instanceof SVGSVGElement){return Math.floor(dom2svg(self.target,$mouseCoords(self)).y)} -throw _b_.AttributeError.$factory("event target is not an SVG "+ -"element")} -var res=self[attr] -if(res !==undefined){if(typeof res=="function"){var func=function(){var args=[] -for(var i=0;i < arguments.length;i++){args.push($B.pyobj2jsobj(arguments[i]))} -return res.apply(self,arguments)} -func.$infos={__name__:res.name,__qualname__:res.name} -return func} -return $B.$JS2Py(res)} -throw _b_.AttributeError.$factory("object DOMEvent has no attribute '"+ -attr+"'")} -DOMEvent.$factory=function(evt_name){ -return DOMEvent.__new__(DOMEvent,evt_name)} -var $DOMEvent=$B.$DOMEvent=function(ev){ev.__class__=DOMEvent -ev.$no_dict=true -if(ev.preventDefault===undefined){ev.preventDefault=function(){ev.returnValue=false}} -if(ev.stopPropagation===undefined){ev.stopPropagation=function(){ev.cancelBubble=true}} -return ev} -$B.set_func_names(DOMEvent,"browser") -var Clipboard={__class__:_b_.type,$infos:{__module__:"browser",__name__:"Clipboard"}} -Clipboard.__getitem__=function(self,name){return self.data.getData(name)} -Clipboard.__mro__=[object] -Clipboard.__setitem__=function(self,name,value){self.data.setData(name,value)} -Clipboard.$factory=function(data){ -return{ -__class__ :Clipboard,__dict__:$B.empty_dict(),data :data}} -$B.set_func_names(Clipboard,"") -function $EventsList(elt,evt,arg){ -this.elt=elt -this.evt=evt -if(isintance(arg,list)){this.callbacks=arg} -else{this.callbacks=[arg]} -this.remove=function(callback){var found=false -for(var i=0;i < this.callbacks.length;i++){if(this.callbacks[i]===callback){found=true -this.callback.splice(i,1) -this.elt.removeEventListener(this.evt,callback,false) -break}} -if(! found){throw _b_.KeyError.$factory("not found")}}} -var OpenFile=$B.OpenFile={__class__:_b_.type, -__mro__:[object],$infos:{__module__:"",__name__:"OpenFile"}} -OpenFile.$factory=function(file,mode,encoding){var res={__class__:$OpenFileDict,file:file,reader:new FileReader()} -if(mode==="r"){res.reader.readAsText(file,encoding)}else if(mode==="rb"){res.reader.readAsBinaryString(file)} -return res} -OpenFile.__getattr__=function(self,attr){if(self["get_"+attr]!==undefined){return self["get_"+attr]} -return self.reader[attr]} -OpenFile.__setattr__=function(self,attr,value){var obj=self.reader -if(attr.substr(0,2)=="on"){ -var callback=function(ev){return value($DOMEvent(ev))} -obj.addEventListener(attr.substr(2),callback)}else if("set_"+attr in obj){return obj["set_"+attr](value)}else if(attr in obj){obj[attr]=value}else{setattr(obj,attr,value)}} -$B.set_func_names(OpenFile,"") -var dom={File :function(){},FileReader :function(){}} -dom.File.__class__=_b_.type -dom.File.__str__=function(){return ""} -dom.FileReader.__class__=_b_.type -dom.FileReader.__str__=function(){return ""} -var Options={__class__:_b_.type,__delitem__:function(self,arg){self.parent.options.remove(arg.elt)},__getitem__:function(self,key){return DOMNode.$factory(self.parent.options[key])},__len__:function(self){return self.parent.options.length},__mro__:[object],__setattr__:function(self,attr,value){self.parent.options[attr]=value},__setitem__:function(self,attr,value){self.parent.options[attr]=$B.$JS2Py(value)},__str__:function(self){return ""},append:function(self,element){self.parent.options.add(element.elt)},insert:function(self,index,element){if(index===undefined){self.parent.options.add(element.elt)} -else{self.parent.options.add(element.elt,index)}},item:function(self,index){return self.parent.options.item(index)},namedItem:function(self,name){return self.parent.options.namedItem(name)},remove:function(self,arg){self.parent.options.remove(arg.elt)},$infos:{__module__:"",__name__:"Options"}} -Options.$factory=function(parent){return{ -__class__:Options,parent:parent}} -$B.set_func_names(Options,"") -var DOMNode={__class__ :_b_.type,__mro__:[object],$infos:{__module__:"browser",__name__:"DOMNode"}} -DOMNode.$factory=function(elt,fromtag){if(elt.__class__===DOMNode){return elt} -if(typeof elt=="number" ||typeof elt=="boolean" || -typeof elt=="string"){return elt} -if(fromtag===undefined){if(DOMNode.tags !==undefined){ -var tdict=DOMNode.tags.$string_dict -if(tdict !==undefined && tdict.hasOwnProperty(elt.tagName)){try{var klass=tdict[elt.tagName][0]}catch(err){console.log("tdict",tdict,"tag name",elt.tagName) -throw err} -if(klass !==undefined){ -klass.$elt_wrap=elt -return klass.$factory()}}}} -if(elt["$brython_id"]===undefined ||elt.nodeType==9){ -elt.$brython_id="DOM-"+$B.UUID()} -return elt} -DOMNode.__add__=function(self,other){ -var res=TagSum.$factory() -res.children=[self],pos=1 -if(_b_.isinstance(other,TagSum)){res.children=res.children.concat(other.children)}else if(_b_.isinstance(other,[_b_.str,_b_.int,_b_.float,_b_.list,_b_.dict,_b_.set,_b_.tuple])){res.children[pos++]=DOMNode.$factory( -document.createTextNode(_b_.str.$factory(other)))}else if(_b_.isinstance(other,DOMNode)){res.children[pos++]=other}else{ -try{res.children=res.children.concat(_b_.list.$factory(other))} -catch(err){throw _b_.TypeError.$factory("can't add '"+ -$B.class_name(other)+"' object to DOMNode instance")}} -return res} -DOMNode.__bool__=function(self){return true} -DOMNode.__contains__=function(self,key){ -if(self.nodeType==9 && typeof key=="string"){return document.getElementById(key)!==null} -if(self.length !==undefined && typeof self.item=="function"){for(var i=0,len=self.length;i < len;i++){if(self.item(i)===key){return true}}} -return false} -DOMNode.__del__=function(self){ -if(!self.parentNode){throw _b_.ValueError.$factory("can't delete "+_b_.str.$factory(self))} -self.parentNode.removeChild(self)} -DOMNode.__delattr__=function(self,attr){if(self[attr]===undefined){throw _b_.AttributeError.$factory( -`cannot delete DOMNode attribute '${attr}'`)} -delete self[attr] -return _b_.None} -DOMNode.__delitem__=function(self,key){if(self.nodeType==9){ -var res=self.getElementById(key) -if(res){res.parentNode.removeChild(res)} -else{throw _b_.KeyError.$factory(key)}}else{ -self.parentNode.removeChild(self)}} -DOMNode.__dir__=function(self){var res=[] -for(var attr in self){if(attr.charAt(0)!="$"){res.push(attr)}} -res.sort() -return res} -DOMNode.__eq__=function(self,other){return self==other} -DOMNode.__getattribute__=function(self,attr){if(attr.substr(0,2)=="$$"){attr=attr.substr(2)} -switch(attr){case "attrs": -return Attributes.$factory(self) -case "class_name": -case "html": -case "id": -case "parent": -case "text": -return DOMNode[attr](self) -case "height": -case "left": -case "top": -case "width": -if(self.tagName=="CANVAS" && self[attr]){return self[attr]} -if(self instanceof SVGElement){return self[attr].baseVal.value} -if(self.style[attr]){return parseInt(self.style[attr])}else{var computed=window.getComputedStyle(self)[attr] -if(computed !==undefined){return Math.floor(parseFloat(computed)+0.5)} -throw _b_.AttributeError.$factory("style."+attr+ -" is not set for "+_b_.str.$factory(self))} -case "x": -case "y": -if(!(self instanceof SVGElement)){var pos=$getPosition(self) -return attr=="x" ? pos.left :pos.top} -case "clear": -case "closest": -return function(){return DOMNode[attr](self,arguments[0])} -case "headers": -if(self.nodeType==9){ -var req=new XMLHttpRequest(); -req.open("GET",document.location,false) -req.send(null); -var headers=req.getAllResponseHeaders() -headers=headers.split("\r\n") -var res=$B.empty_dict() -for(var i=0;i < headers.length;i++){var header=headers[i] -if(header.strip().length==0){continue} -var pos=header.search(":") -res.__setitem__(header.substr(0,pos),header.substr(pos+1).lstrip())} -return res} -break -case "$$location": -attr="location" -break} -if(attr=="select" && self.nodeType==1 && -["INPUT","TEXTAREA"].indexOf(self.tagName.toUpperCase())>-1){return function(selector){if(selector===undefined){self.select();return _b_.None} -return DOMNode.select(self,selector)}} -if(attr=="query" && self.nodeType==9){ -var res={__class__:Query,_keys :[],_values :{}} -var qs=location.search.substr(1).split('&') -if(location.search !=""){for(var i=0;i < qs.length;i++){var pos=qs[i].search("="),elts=[qs[i].substr(0,pos),qs[i].substr(pos+1)],key=decodeURIComponent(elts[0]),value=decodeURIComponent(elts[1]) -if(res._keys.indexOf(key)>-1){res._values[key].push(value)}else{res._keys.push(key) -res._values[key]=[value]}}} -return res} -var property=self[attr] -if(property===undefined && $B.aliased_names[attr]){property=self["$$"+attr]} -if(property===undefined){return object.__getattribute__(self,attr)} -var res=property -if(res !==undefined){if(res===null){return _b_.None} -if(typeof res==="function"){ -var func=(function(f,elt){return function(){var args=[],pos=0 -for(var i=0;i < arguments.length;i++){var arg=arguments[i] -if(typeof arg=="function"){ -if(arg.$cache){var f1=arg.$cache}else{var f1=function(dest_fn){return function(){try{return dest_fn.apply(null,arguments)}catch(err){$B.handle_error(err)}}}(arg) -arg.$cache=f1} -args[pos++]=f1}else if(_b_.isinstance(arg,DOMNode)){args[pos++]=arg}else if(arg===_b_.None){args[pos++]=null}else if(arg.__class__==_b_.dict){args[pos++]=_b_.dict.$to_obj(arg)}else{args[pos++]=arg}} -var result=f.apply(elt,args) -return $B.$JS2Py(result)}})(res,self) -func.$infos={__name__ :attr,__qualname__:attr} -func.$is_func=true -return func} -if(attr=='options'){return Options.$factory(self)} -if(attr=='style'){return $B.JSObj.$factory(self[attr])} -if(Array.isArray(res)){return res} -return $B.$JS2Py(res)} -return object.__getattribute__(self,attr)} -DOMNode.__getitem__=function(self,key){if(self.nodeType==9){ -if(typeof key=="string"){var res=self.getElementById(key) -if(res){return DOMNode.$factory(res)} -throw _b_.KeyError.$factory(key)}else{try{var elts=self.getElementsByTagName(key.$infos.__name__),res=[] -for(var i=0;i < elts.length;i++){res.push(DOMNode.$factory(elts[i]))} -return res}catch(err){throw _b_.KeyError.$factory(_b_.str.$factory(key))}}}else{if((typeof key=="number" ||typeof key=="boolean")&& -typeof self.item=="function"){var key_to_int=_b_.int.$factory(key) -if(key_to_int < 0){key_to_int+=self.length} -var res=DOMNode.$factory(self.item(key_to_int)) -if(res===undefined){throw _b_.KeyError.$factory(key)} -return res}else if(typeof key=="string" && -self.attributes && -typeof self.attributes.getNamedItem=="function"){var attr=self.attributes.getNamedItem(key) -if(!!attr){return attr.value} -throw _b_.KeyError.$factory(key)}}} -DOMNode.__hash__=function(self){return self.__hashvalue__===undefined ? -(self.__hashvalue__=$B.$py_next_hash--): -self.__hashvalue__} -DOMNode.__iter__=function(self){ -if(self.length !==undefined && typeof self.item=="function"){var items=[] -for(var i=0,len=self.length;i < len;i++){items.push(DOMNode.$factory(self.item(i)))}}else if(self.childNodes !==undefined){var items=[] -for(var i=0,len=self.childNodes.length;i < len;i++){items.push(DOMNode.$factory(self.childNodes[i]))}} -return $B.$iter(items)} -DOMNode.__le__=function(self,other){ -if(self.nodeType==9){self=self.body} -if(_b_.isinstance(other,TagSum)){for(var i=0;i < other.children.length;i++){self.appendChild(other.children[i])}}else if(typeof other=="string" ||typeof other=="number"){var $txt=document.createTextNode(other.toString()) -self.appendChild($txt)}else if(_b_.isinstance(other,DOMNode)){ -self.appendChild(other)}else{try{ -var items=_b_.list.$factory(other) -items.forEach(function(item){DOMNode.__le__(self,item)})}catch(err){throw _b_.TypeError.$factory("can't add '"+ -$B.class_name(other)+"' object to DOMNode instance")}} -return true } -DOMNode.__len__=function(self){return self.length} -DOMNode.__mul__=function(self,other){if(_b_.isinstance(other,_b_.int)&& other.valueOf()> 0){var res=TagSum.$factory() -var pos=res.children.length -for(var i=0;i < other.valueOf();i++){res.children[pos++]=DOMNode.clone(self)()} -return res} -throw _b_.ValueError.$factory("can't multiply "+self.__class__+ -"by "+other)} -DOMNode.__ne__=function(self,other){return ! DOMNode.__eq__(self,other)} -DOMNode.__next__=function(self){self.$counter++ -if(self.$counter < self.childNodes.length){return DOMNode.$factory(self.childNodes[self.$counter])} -throw _b_.StopIteration.$factory("StopIteration")} -DOMNode.__radd__=function(self,other){ -var res=TagSum.$factory() -var txt=DOMNode.$factory(document.createTextNode(other)) -res.children=[txt,self] -return res} -DOMNode.__str__=DOMNode.__repr__=function(self){var proto=Object.getPrototypeOf(self) -if(proto){var name=proto.constructor.name -if(name===undefined){ -var proto_str=proto.constructor.toString() -name=proto_str.substring(8,proto_str.length-1)} -return "<"+name+" object>"} -var res=""} -DOMNode.__setattr__=function(self,attr,value){ -if(attr.substr(0,2)=="on"){ -if(!$B.$bool(value)){ -DOMNode.unbind(self,attr.substr(2))}else{ -DOMNode.bind(self,attr.substr(2),value)}}else{switch(attr){case "left": -case "top": -case "width": -case "height": -if(_b_.isinstance(value,_b_.int)&& self.nodeType==1){self.style[attr]=value+"px" -return _b_.None}else{throw _b_.ValueError.$factory(attr+" value should be"+ -" an integer, not "+$B.class_name(value))} -break} -if(DOMNode["set_"+attr]!==undefined){return DOMNode["set_"+attr](self,value)} -function warn(msg){console.log(msg) -var frame=$B.last($B.frames_stack) -if($B.debug > 0){var info=frame[1].$line_info.split(",") -console.log("module",info[1],"line",info[0]) -if($B.$py_src.hasOwnProperty(info[1])){var src=$B.$py_src[info[1]] -console.log(src.split("\n")[parseInt(info[0])-1])}}else{console.log("module",frame[2])}} -var proto=Object.getPrototypeOf(self),nb=0 -while(!!proto && proto !==Object.prototype && nb++< 10){var descriptors=Object.getOwnPropertyDescriptors(proto) -if(!!descriptors && -typeof descriptors.hasOwnProperty=="function"){if(descriptors.hasOwnProperty(attr)){if(!descriptors[attr].writable && -descriptors[attr].set===undefined){warn("Warning: property '"+attr+ -"' is not writable. Use element.attrs['"+ -attr+"'] instead.")} -break}}else{break} -proto=Object.getPrototypeOf(proto)} -if(self.style && self.style[attr]!==undefined){warn("Warning: '"+attr+"' is a property of element.style")} -self[attr]=value -return _b_.None}} -DOMNode.__setitem__=function(self,key,value){if(typeof key=="number"){self.childNodes[key]=value}else if(typeof key=="string"){if(self.attributes){if(self instanceof SVGElement){self.setAttributeNS(null,key,value)}else if(typeof self.setAttribute=="function"){self.setAttribute(key,value)}}}} -DOMNode.abs_left={__get__:function(self){return $getPosition(self).left},__set__:function(){throw _b_.AttributeError.$factory("'DOMNode' objectattribute "+ -"'abs_left' is read-only")}} -DOMNode.abs_top={__get__:function(self){return $getPosition(self).top},__set__:function(){throw _b_.AttributeError.$factory("'DOMNode' objectattribute "+ -"'abs_top' is read-only")}} -DOMNode.attach=DOMNode.__le__ -DOMNode.bind=function(self,event){ -var $=$B.args("bind",4,{self:null,event:null,func:null,options:null},["self","event","func","options"],arguments,{options:_b_.None},null,null),self=$.self,event=$.event,func=$.func,options=$.options -var callback=(function(f){return function(ev){try{return f($DOMEvent(ev))}catch(err){if(err.__class__ !==undefined){$B.handle_error(err)}else{try{$B.$getattr($B.stderr,"write")(err)} -catch(err1){console.log(err)}}}}} -)(func) -callback.$infos=func.$infos -callback.$attrs=func.$attrs ||{} -callback.$func=func -if(typeof options=="boolean"){self.addEventListener(event,callback,options)}else if(options.__class__===_b_.dict){self.addEventListener(event,callback,_b_.dict.$to_obj(options))}else if(options===_b_.None){self.addEventListener(event,callback,false)} -self.$events=self.$events ||{} -self.$events[event]=self.$events[event]||[] -self.$events[event].push([func,callback]) -return self} -DOMNode.children=function(self){var res=[] -if(self.nodeType==9){self=self.body} -self.childNodes.forEach(function(child){res.push(DOMNode.$factory(child))}) -return res} -DOMNode.clear=function(self){ -if(self.nodeType==9){self=self.body} -while(self.firstChild){self.removeChild(self.firstChild)}} -DOMNode.Class=function(self){if(self.className !==undefined){return self.className} -return _b_.None} -DOMNode.class_name=function(self){return DOMNode.Class(self)} -DOMNode.clone=function(self){var res=DOMNode.$factory(self.cloneNode(true)) -var events=self.$events ||{} -for(var event in events){var evt_list=events[event] -evt_list.forEach(function(evt){var func=evt[0] -DOMNode.bind(res,event,func)})} -return res} -DOMNode.closest=function(self,selector){ -var res=self.closest(selector) -if(res===null){throw _b_.KeyError.$factory("no parent with selector "+selector)} -return DOMNode.$factory(res)} -DOMNode.events=function(self,event){self.$events=self.$events ||{} -var evt_list=self.$events[event]=self.$events[event]||[],callbacks=[] -evt_list.forEach(function(evt){callbacks.push(evt[1])}) -return callbacks} -DOMNode.focus=function(self){return(function(obj){return function(){ -setTimeout(function(){obj.focus()},10)}})(self)} -function make_list(node_list){var res=[] -for(var i=0;i < node_list.length;i++){res.push(DOMNode.$factory(node_list[i]))} -return res} -DOMNode.get=function(self){ -var args=[] -for(var i=1;i < arguments.length;i++){args.push(arguments[i])} -var $ns=$B.args("get",0,{},[],args,{},null,"kw"),$dict={},items=_b_.list.$factory(_b_.dict.items($ns["kw"])) -items.forEach(function(item){$dict[item[0]]=item[1]}) -if($dict["name"]!==undefined){if(self.getElementsByName===undefined){throw _b_.TypeError.$factory("DOMNode object doesn't support "+ -"selection by name")} -return make_list(self.getElementsByName($dict['name']))} -if($dict["tag"]!==undefined){if(self.getElementsByTagName===undefined){throw _b_.TypeError.$factory("DOMNode object doesn't support "+ -"selection by tag name")} -return make_list(self.getElementsByTagName($dict["tag"]))} -if($dict["classname"]!==undefined){if(self.getElementsByClassName===undefined){throw _b_.TypeError.$factory("DOMNode object doesn't support "+ -"selection by class name")} -return make_list(self.getElementsByClassName($dict['classname']))} -if($dict["id"]!==undefined){if(self.getElementById===undefined){throw _b_.TypeError.$factory("DOMNode object doesn't support "+ -"selection by id")} -var id_res=document.getElementById($dict['id']) -if(! id_res){return[]} -return[DOMNode.$factory(id_res)]} -if($dict["selector"]!==undefined){if(self.querySelectorAll===undefined){throw _b_.TypeError.$factory("DOMNode object doesn't support "+ -"selection by selector")} -return make_list(self.querySelectorAll($dict['selector']))} -return res} -DOMNode.getContext=function(self){ -if(!("getContext" in self)){throw _b_.AttributeError.$factory("object has no attribute 'getContext'")} -return function(ctx){return $B.JSObj.$factory(self.getContext(ctx))}} -DOMNode.getSelectionRange=function(self){ -if(self["getSelectionRange"]!==undefined){return self.getSelectionRange.apply(null,arguments)}} -DOMNode.html=function(self){var res=self.innerHTML -if(res===undefined){if(self.nodeType==9){res=self.body.innerHTML} -else{res=_b_.None}} -return res} -DOMNode.id=function(self){if(self.id !==undefined){return self.id} -return _b_.None} -DOMNode.index=function(self,selector){var items -if(selector===undefined){items=self.parentElement.childNodes}else{items=self.parentElement.querySelectorAll(selector)} -var rank=-1 -for(var i=0;i < items.length;i++){if(items[i]===self){rank=i;break}} -return rank} -DOMNode.inside=function(self,other){ -var elt=self -while(true){if(other===elt){return true} -elt=elt.parentElement -if(! elt){return false}}} -DOMNode.options=function(self){ -return new $OptionsClass(self)} -DOMNode.parent=function(self){if(self.parentElement){return DOMNode.$factory(self.parentElement)} -return _b_.None} -DOMNode.reset=function(self){ -return function(){self.reset()}} -DOMNode.scrolled_left={__get__:function(self){return $getPosition(self).left- -document.scrollingElement.scrollLeft},__set__:function(){throw _b_.AttributeError.$factory("'DOMNode' objectattribute "+ -"'scrolled_left' is read-only")}} -DOMNode.scrolled_top={__get__:function(self){return $getPosition(self).top- -document.scrollingElement.scrollTop},__set__:function(){throw _b_.AttributeError.$factory("'DOMNode' objectattribute "+ -"'scrolled_top' is read-only")}} -DOMNode.select=function(self,selector){ -if(self.querySelectorAll===undefined){throw _b_.TypeError.$factory("DOMNode object doesn't support "+ -"selection by selector")} -return make_list(self.querySelectorAll(selector))} -DOMNode.select_one=function(self,selector){ -if(self.querySelector===undefined){throw _b_.TypeError.$factory("DOMNode object doesn't support "+ -"selection by selector")} -var res=self.querySelector(selector) -if(res===null){return _b_.None} -return DOMNode.$factory(res)} -DOMNode.style=function(self){ -self.style.float=self.style.cssFloat ||self.styleFloat -return $B.JSObj.$factory(self.style)} -DOMNode.setSelectionRange=function(self){ -if(this["setSelectionRange"]!==undefined){return(function(obj){return function(){return obj.setSelectionRange.apply(obj,arguments)}})(this)}else if(this["createTextRange"]!==undefined){return(function(obj){return function(start_pos,end_pos){if(end_pos==undefined){end_pos=start_pos} -var range=obj.createTextRange() -range.collapse(true) -range.moveEnd("character",start_pos) -range.moveStart("character",end_pos) -range.select()}})(this)}} -DOMNode.set_class_name=function(self,arg){self.setAttribute("class",arg)} -DOMNode.set_html=function(self,value){if(self.nodeType==9){self=self.body} -self.innerHTML=_b_.str.$factory(value)} -DOMNode.set_style=function(self,style){ -if(!_b_.isinstance(style,_b_.dict)){throw _b_.TypeError.$factory("style must be dict, not "+ -$B.class_name(style))} -var items=_b_.list.$factory(_b_.dict.items(style)) -for(var i=0;i < items.length;i++){var key=items[i][0],value=items[i][1] -if(key.toLowerCase()=="float"){self.style.cssFloat=value -self.style.styleFloat=value}else{switch(key){case "top": -case "left": -case "width": -case "borderWidth": -if(_b_.isinstance(value,_b_.int)){value=value+"px"}} -self.style[key]=value}}} -DOMNode.set_text=function(self,value){if(self.nodeType==9){self=self.body} -self.innerText=_b_.str.$factory(value) -self.textContent=_b_.str.$factory(value)} -DOMNode.set_value=function(self,value){self.value=_b_.str.$factory(value)} -DOMNode.submit=function(self){ -return function(){self.submit()}} -DOMNode.text=function(self){if(self.nodeType==9){self=self.body} -var res=self.innerText ||self.textContent -if(res===null){res=_b_.None} -return res} -DOMNode.toString=function(self){if(self===undefined){return 'DOMNode'} -return self.nodeName} -DOMNode.trigger=function(self,etype){ -if(self.fireEvent){self.fireEvent("on"+etype)}else{var evObj=document.createEvent("Events") -evObj.initEvent(etype,true,false) -self.dispatchEvent(evObj)}} -DOMNode.unbind=function(self,event){ -self.$events=self.$events ||{} -if(self.$events==={}){return _b_.None} -if(event===undefined){for(var event in self.$events){DOMNode.unbind(self,event)} -return _b_.None} -if(self.$events[event]===undefined || -self.$events[event].length==0){return _b_.None} -var events=self.$events[event] -if(arguments.length==2){ -for(var i=0;i < events.length;i++){var callback=events[i][1] -self.removeEventListener(event,callback,false)} -self.$events[event]=[] -return _b_.None} -for(var i=2;i < arguments.length;i++){var callback=arguments[i],flag=false,func=callback.$func -if(func===undefined){ -var found=false -for(var j=0;j < events.length;j++){if(events[j][0]===callback){var func=callback,found=true -break}} -if(!found){throw _b_.TypeError.$factory("function is not an event callback")}} -for(var j=0;j < events.length;j++){if($B.$getattr(func,'__eq__')(events[j][0])){var callback=events[j][1] -self.removeEventListener(event,callback,false) -events.splice(j,1) -flag=true -break}} -if(!flag){throw _b_.KeyError.$factory('missing callback for event '+event)}}} -$B.set_func_names(DOMNode,"browser") -var Query={__class__:_b_.type,__mro__:[_b_.object],$infos:{__name__:"query"}} -Query.__contains__=function(self,key){return self._keys.indexOf(key)>-1} -Query.__getitem__=function(self,key){ -var result=self._values[key] -if(result===undefined){throw _b_.KeyError.$factory(key)}else if(result.length==1){return result[0]} -return result} -var Query_iterator=$B.make_iterator_class("query string iterator") -Query.__iter__=function(self){return Query_iterator.$factory(self._keys)} -Query.__setitem__=function(self,key,value){self._values[key]=[value] -return _b_.None} -Query.__str__=Query.__repr__=function(self){ -var elts=[] -for(var key in self._values){for(const val of self._values[key]){elts.push(encodeURIComponent(key)+"="+encodeURIComponent(val))}} -if(elts.length==0){return ""}else{return "?"+elts.join("&")}} -Query.getfirst=function(self,key,_default){ -var result=self._values[key] -if(result===undefined){if(_default===undefined){return _b_.None} -return _default} -return result[0]} -Query.getlist=function(self,key){ -var result=self._values[key] -if(result===undefined){return[]} -return result} -Query.getvalue=function(self,key,_default){try{return Query.__getitem__(self,key)} -catch(err){if(_default===undefined){return _b_.None} -return _default}} -Query.keys=function(self){return self._keys} -$B.set_func_names(Query,"") -var TagSum={__class__ :_b_.type,__mro__:[object],$infos:{__module__:"",__name__:"TagSum"}} -TagSum.appendChild=function(self,child){self.children.push(child)} -TagSum.__add__=function(self,other){if($B.get_class(other)===TagSum){self.children=self.children.concat(other.children)}else if(_b_.isinstance(other,[_b_.str,_b_.int,_b_.float,_b_.dict,_b_.set,_b_.list])){self.children=self.children.concat( -DOMNode.$factory(document.createTextNode(other)))}else{self.children.push(other)} -return self} -TagSum.__radd__=function(self,other){var res=TagSum.$factory() -res.children=self.children.concat( -DOMNode.$factory(document.createTextNode(other))) -return res} -TagSum.__repr__=function(self){var res=" " -for(var i=0;i < self.children.length;i++){res+=self.children[i] -if(self.children[i].toString()=="[object Text]"){res+=" ["+self.children[i].textContent+"]\n"}} -return res} -TagSum.__str__=TagSum.toString=TagSum.__repr__ -TagSum.clone=function(self){var res=TagSum.$factory() -for(var i=0;i < self.children.length;i++){res.children.push(self.children[i].cloneNode(true))} -return res} -TagSum.$factory=function(){return{ -__class__:TagSum,children:[],toString:function(){return "(TagSum)"}}} -$B.set_func_names(TagSum,"") -$B.TagSum=TagSum -var win=$B.JSObj.$factory(_window) -win.get_postMessage=function(msg,targetOrigin){if(_b_.isinstance(msg,dict)){var temp={__class__:"dict"},items=_b_.list.$factory(_b_.dict.items(msg)) -items.forEach(function(item){temp[item[0]]=item[1]}) -msg=temp} -return _window.postMessage(msg,targetOrigin)} -$B.DOMNode=DOMNode -$B.win=win})(__BRYTHON__) -; -;(function($B){ -var _b_=$B.builtins -var bltns=$B.InjectBuiltins() -eval(bltns) -var $GeneratorReturn={} -$B.generator_return=function(value){return{__class__:$GeneratorReturn,value:value}} -$B.generator=$B.make_class("generator",function(func){var res=function(){var gen=func.apply(null,arguments) -gen.$name=func.name -gen.$func=func -gen.$has_run=false -gen.__class__=$B.generator -if(func.$has_yield_in_cm){var locals=$B.last($B.frames_stack)[1] -locals.$close_generators=locals.$close_generators ||[] -locals.$close_generators.push(gen)} -return gen} -res.$infos=func.$infos -res.$is_genfunc=true -return res} -) -$B.generator.__iter__=function(self){return self} -$B.generator.__next__=function(self){return $B.generator.send(self,_b_.None)} -$B.generator.close=function(self){try{$B.generator.$$throw(self,_b_.GeneratorExit.$factory())}catch(err){if(! $B.is_exc(err,[_b_.GeneratorExit,_b_.StopIteration])){throw _b_.RuntimeError.$factory("generator ignored GeneratorExit")}}} -$B.generator.send=function(self,value){ -self.$has_run=true -if(self.$finished){throw _b_.StopIteration.$factory(value)} -if(self.gi_running===true){throw _b_.ValueError.$factory("generator already executing")} -self.gi_running=true -try{var res=self.next(value)}catch(err){self.$finished=true -throw err} -if(res.value && res.value.__class__===$GeneratorReturn){self.$finished=true -throw _b_.StopIteration.$factory(res.value.value)} -self.gi_running=false -if(res.done){throw _b_.StopIteration.$factory(res.value)} -return res.value} -$B.generator.$$throw=function(self,type,value,traceback){var exc=type -if(exc.$is_class){if(! _b_.issubclass(type,_b_.BaseException)){throw _b_.TypeError.$factory("exception value must be an "+ -"instance of BaseException")}else if(value===undefined){exc=$B.$call(exc)()}else if(_b_.isinstance(value,type)){exc=value}}else{if(value===undefined){value=exc}else{exc=$B.$call(exc)(value)}} -if(traceback !==undefined){exc.$traceback=traceback} -var res=self.throw(exc) -if(res.done){throw _b_.StopIteration.$factory("StopIteration")} -return res.value} -$B.set_func_names($B.generator,"builtins") -$B.async_generator=$B.make_class("async_generator",function(func){var f=function(){var res=func.apply(null,arguments) -res.__class__=$B.async_generator -return res} -return f} -) -var ag_closed={} -$B.async_generator.__aiter__=function(self){return self} -$B.async_generator.__anext__=function(self){return $B.async_generator.asend(self,_b_.None)} -$B.async_generator.aclose=function(self){self.$finished=true -return _b_.None} -$B.async_generator.asend=async function(self,value){if(self.$finished){throw _b_.StopAsyncIteration.$factory(value)} -if(self.ag_running===true){throw _b_.ValueError.$factory("generator already executing")} -self.ag_running=true -try{var res=await self.next(value)}catch(err){self.$finished=true -throw err} -if(res.done){throw _b_.StopAsyncIteration.$factory(value)} -if(res.value.__class__===$GeneratorReturn){self.$finished=true -throw _b_.StopAsyncIteration.$factory(res.value.value)} -self.ag_running=false -return res.value} -$B.async_generator.athrow=async function(self,type,value,traceback){var exc=type -if(exc.$is_class){if(! _b_.issubclass(type,_b_.BaseException)){throw _b_.TypeError.$factory("exception value must be an "+ -"instance of BaseException")}else if(value===undefined){value=$B.$call(exc)()}}else{if(value===undefined){value=exc}else{exc=$B.$call(exc)(value)}} -if(traceback !==undefined){exc.$traceback=traceback} -await self.throw(value)} -$B.set_func_names($B.async_generator,"builtins") -function rstrip(s,strip_chars){var _chars=strip_chars ||" \t\n"; -var nstrip=0,len=s.length; -while(nstrip < len && _chars.indexOf(s.charAt(len-1-nstrip))>-1)nstrip++; -return s.substr(0,len-nstrip)}})(__BRYTHON__) -; - ;(function($B){var _b_=$B.builtins -var update=function(mod,data){for(attr in data){mod[attr]=data[attr]}} -var _window=self; -var modules={} -var browser={$package:true,$is_package:true,__initialized__:true,__package__:'browser',__file__:$B.brython_path.replace(/\/*$/g,'')+ -'/Lib/browser/__init__.py',bind:function(){ -var $=$B.args("bind",3,{elt:null,evt:null,options:null},["elt","evt","options"],arguments,{options:_b_.None},null,null) -var options=$.options -if(typeof options=="boolean"){} -else if(options.__class__===_b_.dict){options=options.$string_dict}else{options==false} -return function(callback){if($B.get_class($.elt)===$B.JSObj){ -function f(ev){try{return callback($B.JSObj.$factory(ev))}catch(err){$B.handle_error(err)}} -$.elt.addEventListener($.evt,f,options) -return callback}else if(_b_.isinstance($.elt,$B.DOMNode)){ -$B.DOMNode.bind($.elt,$.evt,callback,options) -return callback}else if(_b_.isinstance($.elt,_b_.str)){ -var items=document.querySelectorAll($.elt) -for(var i=0;i < items.length;i++){$B.DOMNode.bind($B.DOMNode.$factory(items[i]),$.evt,callback,options)} -return callback} -try{var it=$B.$iter($.elt) -while(true){try{var elt=_b_.next(it) -$B.DOMNode.bind(elt,$.evt,callback)}catch(err){if(_b_.isinstance(err,_b_.StopIteration)){break} -throw err}}}catch(err){if(_b_.isinstance(err,_b_.AttributeError)){$B.DOMNode.bind($.elt,$.evt,callback)} -throw err} -return callback}},console:self.console && $B.JSObj.$factory(self.console),self:$B.win,win:$B.win,$$window:$B.win,} -browser.__path__=browser.__file__ -if($B.isNode){delete browser.$$window -delete browser.win}else if($B.isWebWorker){browser.is_webworker=true -delete browser.$$window -delete browser.win -browser.self.send=self.postMessage}else{ -browser.is_webworker=false -update(browser,{$$alert:function(message){window.alert($B.builtins.str.$factory(message ||""))},confirm:$B.JSObj.$factory(window.confirm),$$document:$B.DOMNode.$factory(document),doc:$B.DOMNode.$factory(document), -DOMEvent:$B.DOMEvent,DOMNode:$B.DOMNode,load:function(script_url){ -var file_obj=$B.builtins.open(script_url) -var content=$B.$getattr(file_obj,'read')() -eval(content)},mouseCoords:function(ev){return $B.JSObj.$factory($mouseCoords(ev))},prompt:function(message,default_value){return $B.JSObj.$factory(window.prompt(message,default_value||''))},reload:function(){ -var scripts=document.getElementsByTagName('script'),js_scripts=[] -scripts.forEach(function(script){if(script.type===undefined || -script.type=='text/javascript'){js_scripts.push(script) -if(script.src){console.log(script.src)}}}) -console.log(js_scripts) -for(var mod in $B.imported){if($B.imported[mod].$last_modified){console.log('check',mod,$B.imported[mod].__file__,$B.imported[mod].$last_modified)}else{console.log('no date for mod',mod)}}},run_script:function(){var $=$B.args("run_script",2,{src:null,name:null},["src","name"],arguments,{name:"script_"+$B.UUID()},null,null) -$B.run_script($.src,$.name,true)},URLParameter:function(name){name=name.replace(/[\[]/,"\\[").replace(/[\]]/,"\\]"); -var regex=new RegExp("[\\?&]"+name+"=([^]*)"),results=regex.exec(location.search); -results=results===null ? "" : -decodeURIComponent(results[1].replace(/\+/g," ")); -return $B.builtins.str.$factory(results);}}) -modules['browser.html']=(function($B){var _b_=$B.builtins -var TagSum=$B.TagSum -function makeTagDict(tagName){ -var dict={__class__:_b_.type,$infos:{__name__:tagName,__module__:"browser.html"}} -dict.__init__=function(){var $ns=$B.args('pow',1,{self:null},['self'],arguments,{},'args','kw'),self=$ns['self'],args=$ns['args'] -if(args.length==1){var first=args[0] -if(_b_.isinstance(first,[_b_.str,_b_.int,_b_.float])){ -self.innerHTML=_b_.str.$factory(first)}else if(first.__class__===TagSum){for(var i=0,len=first.children.length;i < len;i++){self.appendChild(first.children[i])}}else{if(_b_.isinstance(first,$B.DOMNode)){self.appendChild(first)}else{try{ -var items=_b_.list.$factory(first) -items.forEach(function(item){$B.DOMNode.__le__(self,item)})}catch(err){if($B.debug > 1){console.log(err,err.__class__,err.args) -console.log("first",first) -console.log(arguments)} -$B.handle_error(err)}}}} -var items=_b_.list.$factory(_b_.dict.items($ns['kw'])) -for(var i=0,len=items.length;i < len;i++){ -var arg=items[i][0],value=items[i][1] -if(arg.toLowerCase().substr(0,2)=="on"){ -var js='$B.DOMNode.bind(self,"'+ -arg.toLowerCase().substr(2) -eval(js+'",function(){'+value+'})')}else if(arg.toLowerCase()=="style"){$B.DOMNode.set_style(self,value)}else{if(value !==false){ -try{ -arg=$B.imported["browser.html"]. -attribute_mapper(arg) -self.setAttribute(arg,value)}catch(err){throw _b_.ValueError.$factory( -"can't set attribute "+arg)}}}}} -dict.__mro__=[$B.DOMNode,$B.builtins.object] -dict.__new__=function(cls){ -if(cls.$elt_wrap !==undefined){ -var elt=cls.$elt_wrap -cls.$elt_wrap=undefined -var res=$B.DOMNode.$factory(elt,true) -res._wrapped=true }else{var res=$B.DOMNode.$factory(document.createElement(tagName),true) -res._wrapped=false } -res.__class__=cls -res.__dict__=$B.empty_dict() -return res} -$B.set_func_names(dict,"browser.html") -return dict} -function makeFactory(klass){var factory=function(){if(klass.$elt_wrap !==undefined){ -var elt=klass.$elt_wrap -klass.$elt_wrap=undefined -var res=$B.DOMNode.$factory(elt,true) -res._wrapped=true }else{if(klass.$infos.__name__=='SVG'){var res=$B.DOMNode.$factory(document.createElementNS("http://www.w3.org/2000/svg","svg"),true)}else{var res=$B.DOMNode.$factory(document.createElement(klass.$infos.__name__),true)} -res._wrapped=false } -res.__class__=klass -klass.__init__(res,...arguments) -return res} -return factory} -var tags=['A','ABBR','ACRONYM','ADDRESS','APPLET','AREA','B','BASE','BASEFONT','BDO','BIG','BLOCKQUOTE','BODY','BR','BUTTON','CAPTION','CENTER','CITE','CODE','COL','COLGROUP','DD','DEL','DFN','DIR','DIV','DL','DT','EM','FIELDSET','FONT','FORM','FRAME','FRAMESET','H1','H2','H3','H4','H5','H6','HEAD','HR','HTML','I','IFRAME','IMG','INPUT','INS','ISINDEX','KBD','LABEL','LEGEND','LI','LINK','MAP','MENU','META','NOFRAMES','NOSCRIPT','OBJECT','OL','OPTGROUP','OPTION','P','PARAM','PRE','Q','S','SAMP','SCRIPT','SELECT','SMALL','SPAN','STRIKE','STRONG','STYLE','SUB','SUP','SVG','TABLE','TBODY','TD','TEXTAREA','TFOOT','TH','THEAD','TITLE','TR','TT','U','UL','VAR', -'ARTICLE','ASIDE','AUDIO','BDI','CANVAS','COMMAND','DATA','DATALIST','EMBED','FIGCAPTION','FIGURE','FOOTER','HEADER','KEYGEN','MAIN','MARK','MATH','METER','NAV','OUTPUT','PROGRESS','RB','RP','RT','RTC','RUBY','SECTION','SOURCE','TEMPLATE','TIME','TRACK','VIDEO','WBR', -'DETAILS','DIALOG','MENUITEM','PICTURE','SUMMARY'] -var obj={tags:$B.empty_dict()},dicts={} -$B.DOMNode.tags=obj.tags -function maketag(tag){if(!(typeof tag=='string')){throw _b_.TypeError.$factory("html.maketag expects a string as argument")} -var klass=dicts[tag]=makeTagDict(tag) -klass.$factory=makeFactory(klass) -_b_.dict.$setitem(obj.tags,tag,klass) -return klass} -tags.forEach(function(tag){obj[tag]=maketag(tag)}) -obj.maketag=maketag -obj.attribute_mapper=function(attr){return attr.replace(/_/g,'-')} -return obj})(__BRYTHON__)} -modules['browser']=browser -$B.UndefinedClass=$B.make_class("Undefined",function(){return $B.Undefined} -) -$B.UndefinedClass.__mro__=[_b_.object] -$B.UndefinedClass.__bool__=function(self){return false} -$B.UndefinedClass.__repr__=$B.UndefinedClass.__str__=function(self){return ""} -$B.Undefined={__class__:$B.UndefinedClass} -$B.set_func_names($B.UndefinedClass,"javascript") -modules['javascript']={$$this:function(){ -if($B.js_this===undefined){return $B.builtins.None} -return $B.JSObj.$factory($B.js_this)},$$Date:self.Date && $B.JSObj.$factory(self.Date),JSConstructor:{__get__:function(){console.warn('"javascript.JSConstructor" is deprecrated. '+ -'Use window..new() instead.') -return $B.JSConstructor},__set__:function(){throw _b_.AttributeError.$factory("read only")}},JSObject:{__get__:function(){console.warn('"javascript.JSObject" is deprecrated. To use '+ -'a Javascript object, use window. instead.') -return $B.JSObject},__set__:function(){throw _b_.AttributeError.$factory("read only")}},JSON:{__class__:$B.make_class("JSON"),parse:function(){return $B.structuredclone2pyobj( -JSON.parse.apply(this,arguments))},stringify:function(obj,replacer,space){return JSON.stringify($B.pyobj2structuredclone(obj,false),$B.JSObj.$factory(replacer),space)}},jsobj2pyobj:function(obj){return $B.jsobj2pyobj(obj)},load:function(script_url){console.log('"javascript.load" is deprecrated. '+ -'Use browser.load instead.') -var file_obj=$B.builtins.open(script_url) -var content=$B.$getattr(file_obj,'read')() -eval(content)},$$Math:self.Math && $B.JSObj.$factory(self.Math),NULL:null,$$Number:self.Number && $B.JSObj.$factory(self.Number),py2js:function(src,module_name){if(module_name===undefined){module_name='__main__'+$B.UUID()} -return $B.py2js(src,module_name,module_name,$B.builtins_scope).to_js()},pyobj2jsobj:function(obj){return $B.pyobj2jsobj(obj)},$$RegExp:self.RegExp && $B.JSObj.$factory(self.RegExp),$$String:self.String && $B.JSObj.$factory(self.String),UNDEFINED:$B.Undefined,UndefinedType:$B.UndefinedClass} -var arraybuffers=["Int8Array","Uint8Array","Uint8ClampedArray","Int16Array","Uint16Array","Int32Array","Uint32Array","Float32Array","Float64Array","BigInt64Array","BigUint64Array"] -arraybuffers.forEach(function(ab){if(self[ab]!==undefined){modules['javascript'][ab]=$B.JSObj.$factory(self[ab])}}) -var _b_=$B.builtins -modules['_sys']={ -Getframe :function(){var $=$B.args("_getframe",1,{depth:null},['depth'],arguments,{depth:0},null,null),depth=$.depth -return $B._frame.$factory($B.frames_stack,$B.frames_stack.length-depth-1)},breakpointhook:function(){var hookname=$B.$options.breakpoint,modname,dot,funcname,hook -if(hookname===undefined){hookname="pdb.set_trace"} -[modname,dot,funcname]=_b_.str.rpartition(hookname,'.') -if(dot==""){modname="builtins"} -try{$B.$import(modname) -hook=$B.$getattr($B.imported[modname],funcname)}catch(err){console.warn("cannot import breakpoint",hookname) -return _b_.None} -return $B.$call(hook).apply(null,arguments)},exc_info:function(){for(var i=$B.frames_stack.length-1;i >=0;i--){var frame=$B.frames_stack[i],exc=frame[1].$current_exception -if(exc){return _b_.tuple.$factory([exc.__class__,exc,$B.$getattr(exc,"__traceback__")])}} -return _b_.tuple.$factory([_b_.None,_b_.None,_b_.None])},excepthook:function(exc_class,exc_value,traceback){$B.handle_error(exc_value)},modules:_b_.property.$factory( -function(){return $B.obj_dict($B.imported)},function(self,obj,value){throw _b_.TypeError.$factory("Read only property 'sys.modules'")} -),path:_b_.property.$factory( -function(){return $B.path},function(self,obj,value){$B.path=value;} -),meta_path:_b_.property.$factory( -function(){return $B.meta_path},function(self,obj,value){$B.meta_path=value } -),path_hooks:_b_.property.$factory( -function(){return $B.path_hooks},function(self,obj,value){$B.path_hooks=value } -),path_importer_cache:_b_.property.$factory( -function(){return _b_.dict.$factory($B.JSObj.$factory($B.path_importer_cache))},function(self,obj,value){throw _b_.TypeError.$factory("Read only property"+ -" 'sys.path_importer_cache'")} -),settrace:function(){var $=$B.args("settrace",1,{tracefunc:null},['tracefunc'],arguments,{},null,null) -$B.tracefunc=$.tracefunc -$B.last($B.frames_stack)[1].$f_trace=$B.tracefunc -$B.tracefunc.$current_frame_id=$B.last($B.frames_stack)[0] -return _b_.None},stderr:_b_.property.$factory( -function(){return $B.stderr},function(self,value){$B.stderr=value} -),stdout:_b_.property.$factory( -function(){return $B.stdout},function(self,value){$B.stdout=value} -),stdin:_b_.property.$factory( -function(){return $B.stdin},function(self,value){$B.stdin=value} -),vfs:_b_.property.$factory( -function(){if($B.hasOwnProperty("VFS")){return $B.obj_dict($B.VFS)} -else{return _b_.None}},function(){throw _b_.TypeError.$factory("Read only property 'sys.vfs'")} -)} -modules._sys.__breakpointhook__=modules._sys.breakpointhook -modules._sys.stderr.write=function(data){return $B.$getattr(_sys.stderr.__get__(),"write")(data)} -modules._sys.stdout.write=function(data){return $B.$getattr(_sys.stdout.__get__(),"write")(data)} -function load(name,module_obj){ -module_obj.__class__=$B.module -module_obj.__name__=name -$B.imported[name]=module_obj -for(var attr in module_obj){if(typeof module_obj[attr]=='function'){var attr1=$B.from_alias(attr) -module_obj[attr].$infos={__module__:name,__name__:attr1,__qualname__:name+'.'+attr1}}}} -for(var attr in modules){load(attr,modules[attr])} -if(!($B.isWebWorker ||$B.isNode)){modules['browser'].html=modules['browser.html']} -var _b_=$B.builtins -_b_.__builtins__=$B.module.$factory('__builtins__','Python builtins') -for(var attr in _b_){_b_.__builtins__[attr]=_b_[attr] -$B.builtins_scope.binding[attr]=true} -_b_.__builtins__.__setattr__=function(attr,value){_b_[attr]=value} -$B.method_descriptor.__getattribute__=$B.Function.__getattribute__ -$B.wrapper_descriptor.__getattribute__=$B.Function.__getattribute__ -for(var name in _b_){if(_b_[name].__class__===_b_.type){$B.builtin_classes.push(_b_[name]) -for(var key in _b_[name]){var value=_b_[name][key] -if(value===undefined){continue} -else if(value.__class__){continue} -else if(typeof value !="function"){continue} -else if(key=="__new__"){value.__class__=$B.builtin_function}else if(key.startsWith("__")){value.__class__=$B.wrapper_descriptor}else{value.__class__=$B.method_descriptor} -value.__objclass__=_b_[name]}}} -for(var attr in $B){if(Array.isArray($B[attr])){$B[attr].__class__=_b_.list}} -$B.cell=$B.make_class("cell",function(value){return{ -__class__:$B.cell,$cell_contents:value}} -) -$B.cell.cell_contents=$B.$call(_b_.property)( -function(self){if(self.$cell_contents===null){throw _b_.ValueError.$factory("empty cell")} -return self.$cell_contents},function(self,value){self.$cell_contents=value} -) -var $comps=Object.values($B.$comps).concat(["eq","ne"]) -$comps.forEach(function(comp){var op="__"+comp+"__" -$B.cell[op]=(function(op){return function(self,other){if(! _b_.isinstance(other,$B.cell)){return NotImplemented} -if(self.$cell_contents===null){if(other.$cell_contents===null){return op=="__eq__"}else{return["__ne__","__lt__","__le__"].indexOf(op)>-1}}else if(other.$cell_contents===null){return["__ne__","__gt__","__ge__"].indexOf(op)>-1} -return $B.rich_comp(op,self.$cell_contents,other.$cell_contents)}})(op)}) -$B.set_func_names($B.cell,"builtins")})(__BRYTHON__) -; -var docs={ArithmeticError:"Base class for arithmetic errors.",AssertionError:"Assertion failed.",AttributeError:"Attribute not found.",BaseException:"Common base class for all exceptions",BlockingIOError:"I/O operation would block.",BrokenPipeError:"Broken pipe.",BufferError:"Buffer error.",BytesWarning:"Base class for warnings about bytes and buffer related problems, mostly\nrelated to conversion from str or comparing to str.",ChildProcessError:"Child process error.",ConnectionAbortedError:"Connection aborted.",ConnectionError:"Connection error.",ConnectionRefusedError:"Connection refused.",ConnectionResetError:"Connection reset.",DeprecationWarning:"Base class for warnings about deprecated features.",EOFError:"Read beyond end of file.",Ellipsis:"",EnvironmentError:"Base class for I/O related errors.",Exception:"Common base class for all non-exit exceptions.",False:"bool(x) -> bool\n\nReturns True when the argument x is true, False otherwise.\nThe builtins True and False are the only two instances of the class bool.\nThe class bool is a subclass of the class int, and cannot be subclassed.",FileExistsError:"File already exists.",FileNotFoundError:"File not found.",FloatingPointError:"Floating point operation failed.",FutureWarning:"Base class for warnings about constructs that will change semantically\nin the future.",GeneratorExit:"Request that a generator exit.",IOError:"Base class for I/O related errors.",ImportError:"Import can't find module, or can't find name in module.",ImportWarning:"Base class for warnings about probable mistakes in module imports",IndentationError:"Improper indentation.",IndexError:"Sequence index out of range.",InterruptedError:"Interrupted by signal.",IsADirectoryError:"Operation doesn't work on directories.",KeyError:"Mapping key not found.",KeyboardInterrupt:"Program interrupted by user.",LookupError:"Base class for lookup errors.",MemoryError:"Out of memory.",NameError:"Name not found globally.",None:"",NotADirectoryError:"Operation only works on directories.",NotImplemented:"",NotImplementedError:"Method or function hasn't been implemented yet.",OSError:"Base class for I/O related errors.",OverflowError:"Result too large to be represented.",PendingDeprecationWarning:"Base class for warnings about features which will be deprecated\nin the future.",PermissionError:"Not enough permissions.",ProcessLookupError:"Process not found.",ReferenceError:"Weak ref proxy used after referent went away.",ResourceWarning:"Base class for warnings about resource usage.",RuntimeError:"Unspecified run-time error.",RuntimeWarning:"Base class for warnings about dubious runtime behavior.",StopIteration:"Signal the end from iterator.__next__().",SyntaxError:"Invalid syntax.",SyntaxWarning:"Base class for warnings about dubious syntax.",SystemError:"Internal error in the Python interpreter.\n\nPlease report this to the Python maintainer, along with the traceback,\nthe Python version, and the hardware/OS platform and version.",SystemExit:"Request to exit from the interpreter.",TabError:"Improper mixture of spaces and tabs.",TimeoutError:"Timeout expired.",True:"bool(x) -> bool\n\nReturns True when the argument x is true, False otherwise.\nThe builtins True and False are the only two instances of the class bool.\nThe class bool is a subclass of the class int, and cannot be subclassed.",TypeError:"Inappropriate argument type.",UnboundLocalError:"Local name referenced but not bound to a value.",UnicodeDecodeError:"Unicode decoding error.",UnicodeEncodeError:"Unicode encoding error.",UnicodeError:"Unicode related error.",UnicodeTranslateError:"Unicode translation error.",UnicodeWarning:"Base class for warnings about Unicode related problems, mostly\nrelated to conversion problems.",UserWarning:"Base class for warnings generated by user code.",ValueError:"Inappropriate argument value (of correct type).",Warning:"Base class for warning categories.",WindowsError:"Base class for I/O related errors.",ZeroDivisionError:"Second argument to a division or modulo operation was zero.",__debug__:"bool(x) -> bool\n\nReturns True when the argument x is true, False otherwise.\nThe builtins True and False are the only two instances of the class bool.\nThe class bool is a subclass of the class int, and cannot be subclassed.",abs:"abs(number) -> number\n\nReturn the absolute value of the argument.",all:"all(iterable) -> bool\n\nReturn True if bool(x) is True for all values x in the iterable.\nIf the iterable is empty, return True.",any:"any(iterable) -> bool\n\nReturn True if bool(x) is True for any x in the iterable.\nIf the iterable is empty, return False.",ascii:"ascii(object) -> string\n\nAs repr(), return a string containing a printable representation of an\nobject, but escape the non-ASCII characters in the string returned by\nrepr() using \\x, \\u or \\U escapes. This generates a string similar\nto that returned by repr() in Python 2.",bin:"bin(number) -> string\n\nReturn the binary representation of an integer.\n\n >>> bin(2796202)\n '0b1010101010101010101010'\n",bool:"bool(x) -> bool\n\nReturns True when the argument x is true, False otherwise.\nThe builtins True and False are the only two instances of the class bool.\nThe class bool is a subclass of the class int, and cannot be subclassed.",bytearray:"bytearray(iterable_of_ints) -> bytearray\nbytearray(string, encoding[, errors]) -> bytearray\nbytearray(bytes_or_buffer) -> mutable copy of bytes_or_buffer\nbytearray(int) -> bytes array of size given by the parameter initialized with null bytes\nbytearray() -> empty bytes array\n\nConstruct an mutable bytearray object from:\n - an iterable yielding integers in range(256)\n - a text string encoded using the specified encoding\n - a bytes or a buffer object\n - any object implementing the buffer API.\n - an integer",bytes:"bytes(iterable_of_ints) -> bytes\nbytes(string, encoding[, errors]) -> bytes\nbytes(bytes_or_buffer) -> immutable copy of bytes_or_buffer\nbytes(int) -> bytes object of size given by the parameter initialized with null bytes\nbytes() -> empty bytes object\n\nConstruct an immutable array of bytes from:\n - an iterable yielding integers in range(256)\n - a text string encoded using the specified encoding\n - any object implementing the buffer API.\n - an integer",callable:"callable(object) -> bool\n\nReturn whether the object is callable (i.e., some kind of function).\nNote that classes are callable, as are instances of classes with a\n__call__() method.",chr:"chr(i) -> Unicode character\n\nReturn a Unicode string of one character with ordinal i; 0 <= i <= 0x10ffff.",classmethod:"classmethod(function) -> method\n\nConvert a function to be a class method.\n\nA class method receives the class as implicit first argument,\njust like an instance method receives the instance.\nTo declare a class method, use this idiom:\n\n class C:\n def f(cls, arg1, arg2, ...): ...\n f = classmethod(f)\n\nIt can be called either on the class (e.g. C.f()) or on an instance\n(e.g. C().f()). The instance is ignored except for its class.\nIf a class method is called for a derived class, the derived class\nobject is passed as the implied first argument.\n\nClass methods are different than C++ or Java static methods.\nIf you want those, see the staticmethod builtin.",compile:"compile(source, filename, mode[, flags[, dont_inherit]]) -> code object\n\nCompile the source (a Python module, statement or expression)\ninto a code object that can be executed by exec() or eval().\nThe filename will be used for run-time error messages.\nThe mode must be 'exec' to compile a module, 'single' to compile a\nsingle (interactive) statement, or 'eval' to compile an expression.\nThe flags argument, if present, controls which future statements influence\nthe compilation of the code.\nThe dont_inherit argument, if non-zero, stops the compilation inheriting\nthe effects of any future statements in effect in the code calling\ncompile; if absent or zero these statements do influence the compilation,\nin addition to any features explicitly specified.",complex:"complex(real[, imag]) -> complex number\n\nCreate a complex number from a real part and an optional imaginary part.\nThis is equivalent to (real + imag*1j) where imag defaults to 0.",copyright:"interactive prompt objects for printing the license text, a list of\n contributors and the copyright notice.",credits:"interactive prompt objects for printing the license text, a list of\n contributors and the copyright notice.",delattr:"delattr(object, name)\n\nDelete a named attribute on an object; delattr(x, 'y') is equivalent to\n``del x.y''.",dict:"dict() -> new empty dictionary\ndict(mapping) -> new dictionary initialized from a mapping object's\n (key, value) pairs\ndict(iterable) -> new dictionary initialized as if via:\n d = {}\n for k, v in iterable:\n d[k] = v\ndict(**kwargs) -> new dictionary initialized with the name=value pairs\n in the keyword argument list. For example: dict(one=1, two=2)",dir:"dir([object]) -> list of strings\n\nIf called without an argument, return the names in the current scope.\nElse, return an alphabetized list of names comprising (some of) the attributes\nof the given object, and of attributes reachable from it.\nIf the object supplies a method named __dir__, it will be used; otherwise\nthe default dir() logic is used and returns:\n for a module object: the module's attributes.\n for a class object: its attributes, and recursively the attributes\n of its bases.\n for any other object: its attributes, its class's attributes, and\n recursively the attributes of its class's base classes.",divmod:"divmod(x, y) -> (div, mod)\n\nReturn the tuple ((x-x%y)/y, x%y). Invariant: div*y + mod == x.",enumerate:"enumerate(iterable[, start]) -> iterator for index, value of iterable\n\nReturn an enumerate object. iterable must be another object that supports\niteration. The enumerate object yields pairs containing a count (from\nstart, which defaults to zero) and a value yielded by the iterable argument.\nenumerate is useful for obtaining an indexed list:\n (0, seq[0]), (1, seq[1]), (2, seq[2]), ...",eval:"eval(source[, globals[, locals]]) -> value\n\nEvaluate the source in the C of globals and locals.\nThe source may be a string representing a Python expression\nor a code object as returned by compile().\nThe globals must be a dictionary and locals can be any mapping,\ndefaulting to the current globals and locals.\nIf only globals is given, locals defaults to it.\n",exec:"exec(object[, globals[, locals]])\n\nRead and execute code from an object, which can be a string or a code\nobject.\nThe globals and locals are dictionaries, defaulting to the current\nglobals and locals. If only globals is given, locals defaults to it.",exit:"",filter:"filter(function or None, iterable) --> filter object\n\nReturn an iterator yielding those items of iterable for which function(item)\nis true. If function is None, return the items that are true.",float:"float(x) -> floating point number\n\nConvert a string or number to a floating point number, if possible.",format:"format(value[, format_spec]) -> string\n\nReturns value.__format__(format_spec)\nformat_spec defaults to \"\"", -frozenset:"frozenset()-> empty frozenset object\nfrozenset(iterable)-> frozenset object\n\nBuild an immutable unordered collection of unique elements.", -getattr:"getattr(object,name[,default])-> value\n\nGet a named attribute from an object;getattr(x,'y')is equivalent to x.y.\nWhen a default argument is given,it is returned when the attribute doesn't\nexist; without it, an exception is raised in that case.", -globals:"globals() -> dictionary\n\nReturn the dictionary containing the current scope's global variables.", -hasattr:"hasattr(object,name)-> bool\n\nReturn whether the object has an attribute with the given name.\n(This is done by calling getattr(object,name)and catching AttributeError.)", -hash:"hash(object)-> integer\n\nReturn a hash value for the object. Two objects with the same value have\nthe same hash value. The reverse is not necessarily true,but likely.", -help:"Define the builtin 'help'.\n\n This is a wrapper around pydoc.help that provides a helpful message\n when 'help' is typed at the Python interactive prompt.\n\n Calling help()at the Python prompt starts an interactive help session.\n Calling help(thing)prints help for the python object 'thing'.\n ", -hex:"hex(number)-> string\n\nReturn the hexadecimal representation of an integer.\n\n >>> hex(3735928559)\n '0xdeadbeef'\n", -id:"id(object)-> integer\n\nReturn the identity of an object. This is guaranteed to be unique among\nsimultaneously existing objects.(Hint:it's the object's memory address.)", -input:"input([prompt])-> string\n\nRead a string from standard input. The trailing newline is stripped.\nIf the user hits EOF(Unix:Ctl-D,Windows:Ctl-Z+Return),raise EOFError.\nOn Unix,GNU readline is used if enabled. The prompt string,if given,\nis printed without a trailing newline before reading.", -int:"int(x=0)-> integer\nint(x,base=10)-> integer\n\nConvert a number or string to an integer,or return 0 if no arguments\nare given. If x is a number,return x.__int__(). For floating point\nnumbers,this truncates towards zero.\n\nIf x is not a number or if base is given,then x must be a string,\nbytes,or bytearray instance representing an integer literal in the\ngiven base. The literal can be preceded by '+' or '-' and be surrounded\nby whitespace. The base defaults to 10. Valid bases are 0 and 2-36.\nBase 0 means to interpret the base from the string as an integer literal.\n>>> int('0b100',base=0)\n4", -isinstance:"isinstance(object,class-or-type-or-tuple)-> bool\n\nReturn whether an object is an instance of a class or of a subclass thereof.\nWith a type as second argument,return whether that is the object's type.\nThe form using a tuple, isinstance(x, (A, B, ...)), is a shortcut for\nisinstance(x, A) or isinstance(x, B) or ... (etc.).", -issubclass:"issubclass(C, B) -> bool\n\nReturn whether class C is a subclass (i.e., a derived class) of class B.\nWhen using a tuple as the second argument issubclass(X, (A, B, ...)),\nis a shortcut for issubclass(X, A) or issubclass(X, B) or ... (etc.).", -iter:"iter(iterable) -> iterator\niter(callable, sentinel) -> iterator\n\nGet an iterator from an object. In the first form, the argument must\nsupply its own iterator, or be a sequence.\nIn the second form, the callable is called until it returns the sentinel.", -len:"len(object)\n\nReturn the number of items of a sequence or collection.", -license:"interactive prompt objects for printing the license text, a list of\n contributors and the copyright notice.", -list:"list() -> new empty list\nlist(iterable) -> new list initialized from iterable's items", -locals:"locals()-> dictionary\n\nUpdate and return a dictionary containing the current scope's local variables.", -map:"map(func, *iterables) --> map object\n\nMake an iterator that computes the function using arguments from\neach of the iterables. Stops when the shortest iterable is exhausted.", -max:"max(iterable, *[, default=obj, key=func]) -> value\nmax(arg1, arg2, *args, *[, key=func]) -> value\n\nWith a single iterable argument, return its biggest item. The\ndefault keyword-only argument specifies an object to return if\nthe provided iterable is empty.\nWith two or more arguments, return the largest argument.", -memoryview:"memoryview(object)\n\nCreate a new memoryview object which references the given object.", -min:"min(iterable, *[, default=obj, key=func]) -> value\nmin(arg1, arg2, *args, *[, key=func]) -> value\n\nWith a single iterable argument, return its smallest item. The\ndefault keyword-only argument specifies an object to return if\nthe provided iterable is empty.\nWith two or more arguments, return the smallest argument.", -next:"next(iterator[, default])\n\nReturn the next item from the iterator. If default is given and the iterator\nis exhausted, it is returned instead of raising StopIteration.", -object:"The most base type", -oct:"oct(number) -> string\n\nReturn the octal representation of an integer.\n\n >>> oct(342391)\n '0o1234567'\n", -open:"open(file, mode='r', buffering=-1, encoding=None,\n errors=None, newline=None, closefd=True, opener=None) -> file object\n\nOpen file and return a stream. Raise IOError upon failure.\n\nfile is either a text or byte string giving the name (and the path\nif the file isn't in the current working directory)of the file to\nbe opened or an integer file descriptor of the file to be\nwrapped.(If a file descriptor is given,it is closed when the\nreturned I/O object is closed,unless closefd is set to False.)\n\nmode is an optional string that specifies the mode in which the file\nis opened. It defaults to 'r' which means open for reading in text\nmode. Other common values are 'w' for writing(truncating the file if\nit already exists),'x' for creating and writing to a new file,and\n'a' for appending(which on some Unix systems,means that all writes\nappend to the end of the file regardless of the current seek position).\nIn text mode,if encoding is not specified the encoding used is platform\ndependent:locale.getpreferredencoding(False)is called to get the\ncurrent locale encoding.(For reading and writing raw bytes use binary\nmode and leave encoding unspecified.)The available modes are:\n\n========================================================================\nCharacter Meaning\n------------------------------------------------------------------------\n'r' open for reading(default)\n'w' open for writing,truncating the file first\n'x' create a new file and open it for writing\n'a' open for writing,appending to the end of the file if it exists\n'b' binary mode\n't' text mode(default)\n'+' open a disk file for updating(reading and writing)\n'U' universal newline mode(deprecated)\n========================================================================\n\nThe default mode is 'rt'(open for reading text). For binary random\naccess,the mode 'w+b' opens and truncates the file to 0 bytes,while\n'r+b' opens the file without truncation. The 'x' mode implies 'w' and\nraises an `FileExistsError` if the file already exists.\n\nPython distinguishes between files opened in binary and text modes,\neven when the underlying operating system doesn't. Files opened in\nbinary mode (appending 'b' to the mode argument) return contents as\nbytes objects without any decoding. In text mode (the default, or when\n't' is appended to the mode argument), the contents of the file are\nreturned as strings, the bytes having been first decoded using a\nplatform-dependent encoding or using the specified encoding if given.\n\n'U' mode is deprecated and will raise an exception in future versions\nof Python. It has no effect in Python 3. Use newline to control\nuniversal newlines mode.\n\nbuffering is an optional integer used to set the buffering policy.\nPass 0 to switch buffering off (only allowed in binary mode), 1 to select\nline buffering (only usable in text mode), and an integer > 1 to indicate\nthe size of a fixed-size chunk buffer. When no buffering argument is\ngiven, the default buffering policy works as follows:\n\n* Binary files are buffered in fixed-size chunks; the size of the buffer\n is chosen using a heuristic trying to determine the underlying device's\n \"block size\" and falling back on `io.DEFAULT_BUFFER_SIZE`.\n On many systems, the buffer will typically be 4096 or 8192 bytes long.\n\n* \"Interactive\" text files (files for which isatty() returns True)\n use line buffering. Other text files use the policy described above\n for binary files.\n\nencoding is the name of the encoding used to decode or encode the\nfile. This should only be used in text mode. The default encoding is\nplatform dependent, but any encoding supported by Python can be\npassed. See the codecs module for the list of supported encodings.\n\nerrors is an optional string that specifies how encoding errors are to\nbe handled---this argument should not be used in binary mode. Pass\n'strict' to raise a ValueError exception if there is an encoding error\n(the default of None has the same effect), or pass 'ignore' to ignore\nerrors. (Note that ignoring encoding errors can lead to data loss.)\nSee the documentation for codecs.register or run 'help(codecs.Codec)'\nfor a list of the permitted encoding error strings.\n\nnewline controls how universal newlines works (it only applies to text\nmode). It can be None, '', '\\n', '\\r', and '\\r\\n'. It works as\nfollows:\n\n* On input, if newline is None, universal newlines mode is\n enabled. Lines in the input can end in '\\n', '\\r', or '\\r\\n', and\n these are translated into '\\n' before being returned to the\n caller. If it is '', universal newline mode is enabled, but line\n endings are returned to the caller untranslated. If it has any of\n the other legal values, input lines are only terminated by the given\n string, and the line ending is returned to the caller untranslated.\n\n* On output, if newline is None, any '\\n' characters written are\n translated to the system default line separator, os.linesep. If\n newline is '' or '\\n', no translation takes place. If newline is any\n of the other legal values, any '\\n' characters written are translated\n to the given string.\n\nIf closefd is False, the underlying file descriptor will be kept open\nwhen the file is closed. This does not work when a file name is given\nand must be True in that case.\n\nA custom opener can be used by passing a callable as *opener*. The\nunderlying file descriptor for the file object is then obtained by\ncalling *opener* with (*file*, *flags*). *opener* must return an open\nfile descriptor (passing os.open as *opener* results in functionality\nsimilar to passing None).\n\nopen() returns a file object whose type depends on the mode, and\nthrough which the standard file operations such as reading and writing\nare performed. When open() is used to open a file in a text mode ('w',\n'r', 'wt', 'rt', etc.), it returns a TextIOWrapper. When used to open\na file in a binary mode, the returned class varies: in read binary\nmode, it returns a BufferedReader; in write binary and append binary\nmodes, it returns a BufferedWriter, and in read/write mode, it returns\na BufferedRandom.\n\nIt is also possible to use a string or bytearray as a file for both\nreading and writing. For strings StringIO can be used like a file\nopened in a text mode, and for bytes a BytesIO can be used like a file\nopened in a binary mode.\n",ord:"ord(c) -> integer\n\nReturn the integer ordinal of a one-character string.",pow:"pow(x, y[, z]) -> number\n\nWith two arguments, equivalent to x**y. With three arguments,\nequivalent to (x**y) % z, but may be more efficient (e.g. for ints).",print:"print(value, ..., sep=' ', end='\\n', file=sys.stdout, flush=False)\n\nPrints the values to a stream, or to sys.stdout by default.\nOptional keyword arguments:\nfile: a file-like object (stream); defaults to the current sys.stdout.\nsep: string inserted between values, default a space.\nend: string appended after the last value, default a newline.\nflush: whether to forcibly flush the stream.",property:"property(fget=None, fset=None, fdel=None, doc=None) -> property attribute\n\nfget is a function to be used for getting an attribute value, and likewise\nfset is a function for setting, and fdel a function for del'ing, an\nattribute. Typical use is to define a managed attribute x:\n\nclass C(object):\n def getx(self): return self._x\n def setx(self, value): self._x = value\n def delx(self): del self._x\n x = property(getx, setx, delx, \"I'm the 'x' property.\")\n\nDecorators make defining new properties or modifying existing ones easy:\n\nclass C(object):\n @property\n def x(self):\n \"I am the 'x' property.\"\n return self._x\n @x.setter\n def x(self, value):\n self._x = value\n @x.deleter\n def x(self):\n del self._x\n",quit:"",range:"range(stop) -> range object\nrange(start, stop[, step]) -> range object\n\nReturn a virtual sequence of numbers from start to stop by step.",repr:"repr(object) -> string\n\nReturn the canonical string representation of the object.\nFor most object types, eval(repr(object)) == object.",reversed:"reversed(sequence) -> reverse iterator over values of the sequence\n\nReturn a reverse iterator",round:"round(number[, ndigits]) -> number\n\nRound a number to a given precision in decimal digits (default 0 digits).\nThis returns an int when called with one argument, otherwise the\nsame type as the number. ndigits may be negative.",set:"set() -> new empty set object\nset(iterable) -> new set object\n\nBuild an unordered collection of unique elements.",setattr:"setattr(object, name, value)\n\nSet a named attribute on an object; setattr(x, 'y', v) is equivalent to\n``x.y = v''.",slice:"slice(stop)\nslice(start, stop[, step])\n\nCreate a slice object. This is used for extended slicing (e.g. a[0:10:2]).",sorted:"sorted(iterable, key=None, reverse=False) --> new sorted list",staticmethod:"staticmethod(function) -> method\n\nConvert a function to be a static method.\n\nA static method does not receive an implicit first argument.\nTo declare a static method, use this idiom:\n\n class C:\n def f(arg1, arg2, ...): ...\n f = staticmethod(f)\n\nIt can be called either on the class (e.g. C.f()) or on an instance\n(e.g. C().f()). The instance is ignored except for its class.\n\nStatic methods in Python are similar to those found in Java or C++.\nFor a more advanced concept, see the classmethod builtin.",str:"str(object='') -> str\nstr(bytes_or_buffer[, encoding[, errors]]) -> str\n\nCreate a new string object from the given object. If encoding or\nerrors is specified, then the object must expose a data buffer\nthat will be decoded using the given encoding and error handler.\nOtherwise, returns the result of object.__str__() (if defined)\nor repr(object).\nencoding defaults to sys.getdefaultencoding().\nerrors defaults to 'strict'.",sum:"sum(iterable[, start]) -> value\n\nReturn the sum of an iterable of numbers (NOT strings) plus the value\nof parameter 'start' (which defaults to 0). When the iterable is\nempty, return start.",super:"super() -> same as super(__class__, )\nsuper(type) -> unbound super object\nsuper(type, obj) -> bound super object; requires isinstance(obj, type)\nsuper(type, type2) -> bound super object; requires issubclass(type2, type)\nTypical use to call a cooperative superclass method:\nclass C(B):\n def meth(self, arg):\n super().meth(arg)\nThis works for class methods too:\nclass C(B):\n @classmethod\n def cmeth(cls, arg):\n super().cmeth(arg)\n",tuple:"tuple() -> empty tuple\ntuple(iterable) -> tuple initialized from iterable's items\n\nIf the argument is a tuple, the return value is the same object.",type:"type(object_or_name, bases, dict)\ntype(object) -> the object's type\ntype(name, bases, dict) -> a new type",vars:"vars([object]) -> dictionary\n\nWithout arguments, equivalent to locals().\nWith an argument, equivalent to object.__dict__.",zip:"zip(iter1 [,iter2 [...]]) --> zip object\n\nReturn a zip object whose .__next__() method returns a tuple where\nthe i-th element comes from the i-th iterable argument. The .__next__()\nmethod continues until the shortest iterable in the argument sequence\nis exhausted and then it raises StopIteration.",} -__BRYTHON__.builtins_doc=docs -; -;(function($B){var _b_=$B.builtins -function import_hooks(mod_name,_path,from_stdlib){var meta_path=$B.meta_path.slice(),_sys_modules=$B.imported,_loader,spec -if(from_stdlib){ -var path_ix=meta_path.indexOf($B.finders["path"]) -if(path_ix >-1){meta_path.splice(path_ix,1)}} -for(var i=0,len=meta_path.length;i < len;i++){var _finder=meta_path[i],find_spec=$B.$getattr(_finder,"find_spec",_b_.None) -if(find_spec==_b_.None){ -var find_module=$B.$getattr(_finder,"find_module",_b_.None) -if(find_module !==_b_.None){_loader=find_module(mod_name,_path) -if(_loader !==_b_.None){ -var load_module=$B.$getattr(_loader,"load_module"),module=$B.$call(load_module)(mod_name) -_sys_modules[mod_name]=module -return module}}}else{spec=find_spec(mod_name,_path) -if(!$B.is_none(spec)){module=$B.imported[spec.name] -if(module !==undefined){ -return _sys_modules[spec.name]=module} -_loader=_b_.getattr(spec,"loader",_b_.None) -break}}} -if(_loader===undefined){ -message=mod_name -if($B.protocol=="file"){message+=" (warning: cannot import local files with protocol 'file')"} -var exc=_b_.ModuleNotFoundError.$factory(message) -exc.name=mod_name -throw exc} -if($B.is_none(module)){if(spec===_b_.None){throw _b_.ModuleNotFoundError.$factory(mod_name)} -var _spec_name=_b_.getattr(spec,"name") -if(!$B.is_none(_loader)){var create_module=_b_.getattr(_loader,"create_module",_b_.None) -if(!$B.is_none(create_module)){module=$B.$call(create_module)(spec)}} -if(module===undefined){throw _b_.ImportError.$factory(mod_name)} -if($B.is_none(module)){ -module=$B.module.$factory(mod_name) -var mod_desc=_b_.getattr(spec,"origin") -if(_b_.getattr(spec,"has_location")){mod_desc="from '"+mod_desc+"'"}else{mod_desc="("+mod_desc+")"}}} -module.__name__=_spec_name -module.__loader__=_loader -module.__package__=_b_.getattr(spec,"parent","") -module.__spec__=spec -var locs=_b_.getattr(spec,"submodule_search_locations") -if(module.$is_package=!$B.is_none(locs)){module.__path__=locs} -if(_b_.getattr(spec,"has_location")){module.__file__=_b_.getattr(spec,"origin") -$B.$py_module_path[module.__name__]=module.__file__} -var cached=_b_.getattr(spec,"cached") -if(! $B.is_none(cached)){module.__cached__=cached} -if($B.is_none(_loader)){if(!$B.is_none(locs)){_sys_modules[_spec_name]=module}else{throw _b_.ImportError.$factory(mod_name)}}else{var exec_module=_b_.getattr(_loader,"exec_module",_b_.None) -if($B.is_none(exec_module)){ -module=_b_.getattr(_loader,"load_module")(_spec_name)}else{_sys_modules[_spec_name]=module -try{exec_module(module)}catch(e){delete _sys_modules[_spec_name] -throw e}}} -return _sys_modules[_spec_name]} -$B.import_hooks=import_hooks})(__BRYTHON__) -; -;(function($B){var _b_=$B.builtins -var coroutine=$B.coroutine=$B.make_class("coroutine") -coroutine.close=function(self){} -coroutine.send=function(self){return self.$func.apply(null,self.$args)} -coroutine.__repr__=coroutine.__str__=function(self){if(self.$func.$infos){return ""}else{return ""}} -$B.set_func_names(coroutine,"builtins") -$B.make_async=func=>{ -if(func.$is_genfunc){return func} -var f=function(){var args=arguments,stack=$B.deep_copy($B.frames_stack) -return{ -__class__:coroutine,$args:args,$func:func,$stack:stack}} -f.$infos=func.$infos -return f} -$B.promise=function(obj){if(obj.__class__===$B.JSObject){return obj.js}else if(obj.__class__===coroutine){return coroutine.send(obj)} -if(typeof obj=="function"){return obj()} -return obj}})(__BRYTHON__) -; diff --git a/modules/frontend/src/main/frontend/public/assets/js/brython_stdlib.js b/modules/frontend/src/main/frontend/public/assets/js/brython_stdlib.js deleted file mode 100644 index 47f2e2b..0000000 --- a/modules/frontend/src/main/frontend/public/assets/js/brython_stdlib.js +++ /dev/null @@ -1,3 +0,0 @@ -__BRYTHON__.use_VFS = true; -var scripts = {"$timestamp": 1598683276697, "array": [".js", "var $module = (function($B){\n\nvar _b_ = $B.builtins,\n $s = [],\n i\nfor(var $b in _b_){$s.push('var ' + $b +' = _b_[\"'+$b+'\"]')}\neval($s.join(';'))\n\nvar typecodes = {\n 'b': Int8Array, // signed char, 1 byte\n 'B': Uint8Array, // unsigned char, 1\n 'u': null, // Py_UNICODE Unicode character, 2 (deprecated)\n 'h': Int16Array, // signed short, 2\n 'H': Uint16Array, // unsigned short, 2\n 'i': Int16Array, // signed int, 2\n 'I': Uint16Array, // unsigned int, 2\n 'l': Int32Array, // signed long, 4\n 'L': Uint32Array, // unsigned long, 4\n 'q': null, // signed long, 8 (not implemented)\n 'Q': null, // unsigned long, 8 (not implemented)\n 'f': Float32Array, // float, 4\n 'd': Float64Array // double float, 8\n}\n\nvar array = $B.make_class(\"array\",\n function(){\n var missing = {},\n $ = $B.args(\"array\", 2, {typecode: null, initializer: null},\n [\"typecode\", \"initializer\"], arguments, {initializer: missing},\n null, null),\n typecode = $.typecode,\n initializer = $.initializer\n if(! typecodes.hasOwnProperty(typecode)){\n throw _b_.ValueError.$factory(\"bad typecode (must be b, \" +\n \"B, u, h, H, i, I, l, L, q, Q, f or d)\")\n }\n if(typecodes[typecode] === null){\n throw _b_.NotImplementedError.$factory(\"type code \" +\n typecode + \"is not implemented\")\n }\n var res = {\n __class__: array,\n typecode: typecode,\n obj: null\n }\n if(initializer !== missing){\n if(Array.isArray(initializer)){\n array.fromlist(res, initializer)\n }else if(_b_.isinstance(initializer, _b_.bytes)){\n array.frombytes(res, initializer)\n }else{\n array.extend(res, initializer)\n }\n }\n return res\n }\n)\n\narray.$buffer_protocol = true\n\narray.__getitem__ = function(self, key){\n if(self.obj && self.obj[key] !== undefined){\n return self.obj[key]\n }\n throw _b_.IndexError(\"array index out of range\")\n}\n\nvar array_iterator = $B.make_iterator_class(\"array_iterator\")\narray.__iter__ = function(self){\n return array_iterator.$factory(self.obj)\n}\n\narray.__len__ = function(self){\n return self.obj.length\n}\n\narray.__str__ = function(self){\n $B.args(\"__str__\", 1, {self: null},\n [\"self\"], arguments, {}, null, null)\n var res = \"array('\" + self.typecode + \"'\"\n if(self.obj !== null){\n res += \", [\" + self.obj + \"]\"\n }\n return res + \")\"\n}\n\nfunction normalize_index(self, i){\n // return an index i between 0 and self.obj.length - 1\n if(i < 0){\n i = self.obj.length + i\n }\n if(i < 0){i = 0}\n else if(i > self.obj.length - 1){\n i = self.obj.length\n }\n return i\n}\n\narray.append = function(self, value){\n $B.args(\"append\", 2, {self: null, value: null},\n [\"self\", \"value\"], arguments, {}, null, null)\n var pos = self.obj === null ? 0 : self.obj.length\n return array.insert(self, pos, value)\n}\n\narray.count = function(self, x){\n $B.args(\"count\", 2, {self: null, x: null},\n [\"self\", \"x\"], arguments, {}, null, null)\n if(self.obj === null){return 0}\n return self.obj.filter(function(item){return item == x}).length\n}\n\narray.extend = function(self, iterable){\n $B.args(\"extend\", 2, {self: null, iterable: null},\n [\"self\", \"iterable\"], arguments, {}, null, null)\n if(iterable.__class__ === array){\n if(iterable.typecode !== self.typecode){\n throw _b_.TypeError.$factory(\"can only extend with array \" +\n \"of same kind\")\n }\n if(iterable.obj === null){return _b_.None}\n // create new object with length = sum of lengths\n var newobj = new typecodes[self.typecode](self.obj.length +\n iterable.obj.length)\n // copy self.obj\n newobj.set(self.obj)\n // copy iterable.obj\n newobj.set(iterable.obj, self.obj.length)\n self.obj = newobj\n }else{\n var it = _b_.iter(iterable)\n while(true){\n try{\n var item = _b_.next(it)\n array.append(self, item)\n }catch(err){\n if(err.__class__ !== _b_.StopIteration){\n throw err\n }\n break\n }\n }\n }\n return _b_.None\n}\n\narray.frombytes = function(self, s){\n $B.args(\"frombytes\", 2, {self: null, s: null},\n [\"self\", \"s\"], arguments, {}, null, null)\n if(! _b_.isinstance(s, _b_.bytes)){\n throw _b_.TypeError.$factory(\"a bytes-like object is required, \" +\n \"not '\" + $B.class_name(s) + \"'\")\n }\n self.obj = new typecodes[self.typecode](s.source)\n return None\n}\n\narray.fromlist = function(self, list){\n $B.args(\"fromlist\", 2, {self: null, list: null},\n [\"self\", \"list\"], arguments, {}, null, null)\n var it = _b_.iter(list)\n while(true){\n try{\n var item = _b_.next(it)\n try{\n array.append(self, item)\n }catch(err){\n console.log(err)\n return _b_.None\n }\n }catch(err){\n if(err.__class__ === _b_.StopIteration){\n return _b_.None\n }\n throw err\n }\n }\n}\n\narray.fromstring = array.frombytes\n\narray.index = function(self, x){\n $B.args(\"index\", 2, {self: null, x: null},\n [\"self\", \"x\"], arguments, {}, null, null)\n var res = self.obj.findIndex(function(item){return x == item})\n if(res == -1){\n throw _b_.ValueError.$factory(\"array.index(x): x not in array\")\n }\n return res\n}\n\narray.insert = function(self, i, value){\n $B.args(\"insert\", 3, {self: null, i: null, value: null},\n [\"self\", \"i\", \"value\"], arguments, {}, null, null)\n if(self.obj === null){\n self.obj = [value]\n }else{\n self.obj.splice(i, 0, value)\n }\n return _b_.None\n}\n\narray.itemsize = function(self){\n return typecodes[self.typecode].BYTES_PER_ELEMENT\n}\n\narray.pop = function(self, i){\n var $ = $B.args(\"count\", 2, {self: null, i: null},\n [\"self\", \"i\"], arguments, {i: -1}, null, null)\n i = $.i\n if(self.obj === null){\n throw _b_.IndexError.$factory(\"pop from empty array\")\n }else if(self.obj.length == 1){\n var res = self.obj[0]\n self.obj = null\n return res\n }\n i = normalize_index(self, i)\n // store value to return\n var res = self.obj[i]\n // create new array, size = previous size - 1\n var newobj = new typecodes[self.typecode](self.obj.length - 1)\n // fill new array with values until i excluded\n newobj.set(self.obj.slice(0, i))\n // fill with values after i\n newobj.set(self.obj.slice(i + 1), i)\n // set self.obj to new array\n self.obj = newobj\n // return stored value\n return res\n}\n\narray.remove = function(self, x){\n $B.args(\"remove\", 2, {self: null, x: null},\n [\"self\", \"x\"], arguments, {}, null, null)\n var res = self.obj.findIndex(function(item){return x == item})\n if(res == -1){\n throw _b_.ValueError.$factory(\"array.remove(x): x not in array\")\n }\n array.pop(self, res)\n return _b_.None\n}\n\narray.reverse = function(self){\n $B.args(\"reverse\", 1, {self: null},\n [\"self\"], arguments, {}, null, null)\n if(self.obj === null){return _b_.None}\n self.obj.reverse()\n return _b_.None\n}\n\narray.tobytes = function(self){\n $B.args(\"tobytes\", 1, {self: null},\n [\"self\"], arguments, {}, null, null)\n var items = Array.prototype.slice.call(self.obj),\n res = []\n items.forEach(function(item){\n while(item > 256){\n res.push(item % 256)\n item = Math.floor(item / 256)\n }\n res.push(item)\n })\n return _b_.bytes.$factory(res)\n}\n\narray.tolist = function(self){\n $B.args(\"tolist\", 1, {self: null},\n [\"self\"], arguments, {}, null, null)\n return Array.prototype.slice.call(self.obj)\n}\n\narray.tostring = array.tobytes\n\narray.typecode = function(self){\n return self.typecode\n}\n\n$B.set_func_names(array, \"array\")\n\nreturn {\n array: array,\n typecodes: Object.keys(typecodes).join('')\n}\n\n})(__BRYTHON__)\n"], "builtins": [".js", "var $module = (function(){\n var obj = {\n __class__: __BRYTHON__.module,\n __name__: 'builtins'\n },\n builtin_names = ['ArithmeticError', 'AssertionError', 'AttributeError',\n 'BaseException', 'BlockingIOError', 'BrokenPipeError', 'BufferError',\n 'BytesWarning', 'ChildProcessError', 'ConnectionAbortedError',\n 'ConnectionError', 'ConnectionRefusedError', 'ConnectionResetError',\n 'DeprecationWarning', 'EOFError', 'Ellipsis', 'EnvironmentError', 'Exception',\n 'False', 'FileExistsError', 'FileNotFoundError', 'FloatingPointError',\n 'FutureWarning', 'GeneratorExit', 'IOError', 'ImportError', 'ImportWarning',\n 'IndentationError', 'IndexError', 'InterruptedError', 'IsADirectoryError',\n 'KeyError', 'KeyboardInterrupt', 'LookupError', 'MemoryError', 'NameError',\n 'None', 'NotADirectoryError', 'NotImplemented', 'NotImplementedError',\n 'OSError', 'OverflowError', 'PendingDeprecationWarning', 'PermissionError',\n 'ProcessLookupError', 'ReferenceError', 'ResourceWarning', 'RuntimeError',\n 'RuntimeWarning', 'StopIteration', 'SyntaxError', 'SyntaxWarning',\n 'SystemError', 'SystemExit', 'TabError', 'TimeoutError', 'True', 'TypeError',\n 'UnboundLocalError', 'UnicodeDecodeError', 'UnicodeEncodeError',\n 'UnicodeError', 'UnicodeTranslateError', 'UnicodeWarning', 'UserWarning',\n 'ValueError', 'Warning', 'WindowsError', 'ZeroDivisionError', '_',\n '__build_class__', '__debug__', '__doc__', '__import__', '__name__',\n '__package__', 'abs', 'all', 'any', 'ascii', 'bin', 'bool', 'bytearray',\n 'bytes','callable', 'chr', 'classmethod', 'compile', 'complex', 'copyright',\n 'credits','delattr', 'dict', 'dir', 'divmod', 'enumerate', 'eval', 'exec',\n 'exit', 'filter', 'float', 'format', 'frozenset', 'getattr', 'globals',\n 'hasattr', 'hash', 'help', 'hex', 'id', 'input', 'int', 'isinstance',\n 'issubclass', 'iter', 'len', 'license', 'list', 'locals', 'map', 'max',\n 'memoryview', 'min', 'next', 'object', 'oct', 'open', 'ord', 'pow', 'print',\n 'property', 'quit', 'range', 'repr', 'reversed', 'round', 'set', 'setattr',\n 'slice', 'sorted', 'staticmethod', 'str', 'sum', 'super', 'tuple', 'type',\n 'vars', 'zip',\n '__newobj__' // defined in py_objects.js ; required for pickle\n ]\n for(var i = 0, len = builtin_names.length; i < len; i++){\n try{eval(\"obj['\" + builtin_names[i] + \"'] = __BRYTHON__.builtins.\" +\n builtin_names[i])}\n catch(err){if (__BRYTHON__.$debug) {console.log(err)}}\n }\n return obj\n})()\n"], "dis": [".js", "var $module=(function($B){\n\nvar dict = $B.builtins.dict\nvar mod = {\n dis:function(src){\n $B.$py_module_path['__main__'] = $B.brython_path\n return __BRYTHON__.py2js(src,'__main__','__main__',\n $B.builtins_scope).to_js()\n },\n OPTIMIZED: 1,\n NEWLOCALS: 2,\n VARARGS: 4,\n VARKEYWORDS: 8,\n NESTED: 16,\n GENERATOR: 32,\n NOFREE: 64,\n COROUTINE: 128,\n ITERABLE_COROUTINE: 256,\n ASYNC_GENERATOR: 512,\n COMPILER_FLAG_NAMES: $B.builtins.dict.$factory()\n}\nmod.COMPILER_FLAG_NAMES = dict.$factory([\n [1, \"OPTIMIZED\"],\n [2, \"NEWLOCALS\"],\n [4, \"VARARGS\"],\n [8, \"VARKEYWORDS\"],\n [16, \"NESTED\"],\n [32, \"GENERATOR\"],\n [64, \"NOFREE\"],\n [128, \"COROUTINE\"],\n [256, \"ITERABLE_COROUTINE\"],\n [512, \"ASYNC_GENERATOR\"]\n])\n\nreturn mod\n\n})(__BRYTHON__)"], "hashlib": [".js", "var $module=(function($B){\n\nvar _b_ = $B.builtins\n\nvar $s = []\nfor(var $b in _b_){$s.push('var ' + $b +' = _b_[\"'+$b+'\"]')}\neval($s.join(';'))\n\nvar $mod = {\n\n __getattr__ : function(attr){\n if(attr == 'new'){return hash.$factory}\n return this[attr]\n },\n md5: function(obj){return hash.$factory('md5', obj)},\n sha1: function(obj){return hash.$factory('sha1', obj)},\n sha224: function(obj){return hash.$factory('sha224', obj)},\n sha256: function(obj){return hash.$factory('sha256', obj)},\n sha384: function(obj){return hash.$factory('sha384', obj)},\n sha512: function(obj){return hash.$factory('sha512', obj)},\n\n algorithms_guaranteed: ['md5', 'sha1', 'sha224', 'sha256', 'sha384', 'sha512'],\n algorithms_available: ['md5', 'sha1', 'sha224', 'sha256', 'sha384', 'sha512']\n}\n\n//todo: eventually move this function to a \"utility\" file or use ajax module?\nfunction $get_CryptoJS_lib(alg){\n if($B.VFS !== undefined && $B.VFS.hashlib){\n // use file in brython_stdlib.js\n var lib = $B.VFS[\"crypto_js.rollups.\" + alg]\n if (lib === undefined){\n throw _b_.ImportError.$factory(\"can't import hashlib.\" + alg)\n }\n var res = lib[1]\n try{\n eval(res + \"; $B.CryptoJS = CryptoJS;\")\n return\n }catch(err){\n throw Error(\"JS Eval Error\",\n \"Cannot eval CryptoJS algorithm '\" + alg + \"' : error:\" + err)\n }\n }\n\n var module = {__name__: 'CryptoJS', $is_package: false}\n var res = $B.$download_module(module, $B.brython_path + 'libs/crypto_js/rollups/' + alg + '.js');\n\n try{\n eval(res + \"; $B.CryptoJS = CryptoJS;\")\n }catch(err){\n throw Error(\"JS Eval Error\",\n \"Cannot eval CryptoJS algorithm '\" + alg + \"' : error:\" + err)\n }\n}\n\nfunction bytes2WordArray(obj){\n // Transform a bytes object into an instance of class WordArray\n // defined in CryptoJS\n if(!_b_.isinstance(obj, _b_.bytes)){\n throw _b_.TypeError(\"expected bytes, got \" + $B.class_name(obj))\n }\n\n var words = []\n for(var i = 0; i < obj.source.length; i += 4){\n var word = obj.source.slice(i, i + 4)\n while(word.length < 4){word.push(0)}\n var w = word[3] + (word[2] << 8) + (word[1] << 16) + (word[0] << 24)\n words.push(w)\n }\n return {words: words, sigBytes: obj.source.length}\n}\n\nvar hash = {\n __class__: _b_.type,\n __mro__: [_b_.object],\n $infos:{\n __name__: 'hash'\n }\n}\n\nhash.update = function(self, msg){\n self.hash.update(bytes2WordArray(msg))\n}\n\nhash.copy = function(self){\n return self.hash.clone()\n}\n\nhash.digest = function(self){\n var obj = self.hash.clone().finalize().toString(),\n res = []\n for(var i = 0; i < obj.length; i += 2){\n res.push(parseInt(obj.substr(i, 2), 16))\n }\n return _b_.bytes.$factory(res)\n}\n\nhash.hexdigest = function(self) {\n return self.hash.clone().finalize().toString()\n}\n\nhash.$factory = function(alg, obj) {\n var res = {\n __class__: hash\n }\n\n switch(alg) {\n case 'md5':\n case 'sha1':\n case 'sha224':\n case 'sha256':\n case 'sha384':\n case 'sha512':\n var ALG = alg.toUpperCase()\n if($B.Crypto === undefined ||\n $B.CryptoJS.algo[ALG] === undefined){$get_CryptoJS_lib(alg)}\n\n res.hash = $B.CryptoJS.algo[ALG].create()\n if(obj !== undefined){\n res.hash.update(bytes2WordArray(obj))\n }\n break\n default:\n throw $B.builtins.AttributeError.$factory('Invalid hash algorithm: ' + alg)\n }\n\n return res\n}\n\nreturn $mod\n\n})(__BRYTHON__)\n"], "long_int": [".js", "/*\nModule to manipulate long integers\n*/\n\nvar $module=(function($B){\n\neval($B.InjectBuiltins())\n\nvar $LongIntDict = {__class__:$B.$type,__name__:'LongInt'}\n\nfunction add_pos(v1, v2){\n // Add two positive numbers\n // v1, v2 : strings\n // Return an instance of LongInt\n\n var res = '', carry = 0, iself=v1.length, sv=0\n for(var i=v2.length-1;i>=0;i--){\n iself--\n if(iself<0){sv=0}else{sv=parseInt(v1.charAt(iself))}\n x = (carry+sv+parseInt(v2.charAt(i))).toString()\n if(x.length==2){res=x.charAt(1)+res;carry=parseInt(x.charAt(0))}\n else{res=x+res;carry=0}\n }\n while(iself>0){\n iself--\n x = (carry+parseInt(v1.charAt(iself))).toString()\n if(x.length==2){res=x.charAt(1)+res;carry=parseInt(x.charAt(0))}\n else{res=x+res;carry=0}\n }\n if(carry){res=carry+res} \n return {__class__:$LongIntDict, value:res, pos:true}\n}\n\nfunction check_shift(shift){\n // Check the argument of >> and <<\n if(!isinstance(shift, LongInt)){\n throw TypeError(\"shift must be LongInt, not '\"+\n $B.get_class(shift).__name__+\"'\")\n }\n if(!shift.pos){throw ValueError(\"negative shift count\")}\n}\n\nfunction clone(obj){\n // Used for traces\n var obj1 = {}\n for(var attr in obj){obj1[attr]=obj[attr]}\n return obj1\n}\n\nfunction comp_pos(v1, v2){\n // Compare two positive numbers\n if(v1.length>v2.length){return 1}\n else if(v1.lengthv2){return 1}\n else if(v11){\n // If the value in cols[i] has more than one digit, only keep the\n // last one and report the others at the right index\n // For instance if cols[i] = 123, keep 3 in cols[i], add 2 to\n // cols[i-1] and 1 to cols[i-2]\n cols[i] = parseInt(col.charAt(col.length-1))\n j = col.length\n while(j-->1){\n var report = parseInt(col.charAt(j-1))\n var pos = i-col.length+j\n if(cols[pos]===undefined){cols[pos]=report}\n else{cols[pos] += report}\n }\n }\n }\n\n // Find minimum index in cols\n // The previous loop may have introduced negative indices\n var imin\n for(var attr in cols){\n i = parseInt(attr)\n if(imin===undefined){imin=i}\n else if(i=v2\n\n var res = '', carry = 0, i1=v1.length, sv=0\n \n // For all digits in v2, starting by the rightmost, substract it from\n // the matching digit in v1\n // This is the equivalent of the manual operation :\n // 12345678\n // - 98765\n //\n // We begin by the rightmost operation : 8-5 (3, no carry),\n // then 7-6 (1, no carry)\n // then 6-7 (9, carry 1) and so on\n for(var i=v2.length-1;i>=0;i--){\n i1--\n sv = parseInt(v1.charAt(i1))\n x = (sv-carry-parseInt(v2.charAt(i)))\n if(x<0){res=(10+x)+res;carry=1}\n else{res=x+res;carry=0}\n }\n \n // If there are remaining digits in v1, substract the carry, if any\n while(i1>0){\n i1--\n x = (parseInt(v1.charAt(i1))-carry)\n if(x<0){res=(10+x)+res;carry=1}\n else{res=x+res;carry=0}\n }\n\n // Remove leading zeros and return the result\n while(res.charAt(0)=='0' && res.length>1){res=res.substr(1)}\n return {__class__:$LongIntDict, value:res, pos:true}\n}\n\n// Special methods to implement operations on instances of LongInt\n\n$LongIntDict.__abs__ = function(self){\n return {__class__:$LongIntDict, value: self.value, pos:true}\n}\n\n$LongIntDict.__add__ = function(self, other){\n if (typeof other == 'number') other=LongInt(_b_.str.$factory(other))\n // Addition of \"self\" and \"other\"\n // If both have the same sign (+ or -) we add their absolute values\n // If they have different sign we use the substraction of their\n // absolute values\n var res\n if(self.pos&&other.pos){ // self > 0, other > 0\n return add_pos(self.value, other.value)\n }else if(!self.pos&&!other.pos){ // self < 0, other < 0\n res = add_pos(self.value, other.value)\n res.pos = false\n return res\n }else if(self.pos && !other.pos){ // self > 0, other < 0\n switch (comp_pos(self.value, other.value)){\n case 1:\n res = sub_pos(self.value, other.value)\n break\n case 0:\n res = {__class__:$LongIntDict, value:0, pos:true}\n break\n case -1:\n res = sub_pos(other.value, self.value)\n res.pos = false\n break\n }\n return res\n }else{ // self < 0, other > 0\n switch(comp_pos(self.value, other.value)){\n case 1:\n res = sub_pos(self.value, other.value)\n res.pos = false\n break\n case 0:\n res = {__class__:$LongIntDict, value:0, pos:true}\n break\n case -1:\n res = sub_pos(other.value, self.value)\n break\n }\n return res\n }\n}\n\n$LongIntDict.__and__ = function(self, other){\n if (typeof other == 'number') other=LongInt(_b_.str.$factory(other))\n // Bitwise \"and\" : build the binary representation of self and other\n var v1 = $LongIntDict.__index__(self)\n var v2 = $LongIntDict.__index__(other)\n // apply \"and\" on zeros and ones\n if(v1.lengthother.value.length){return true}\n else if(self.value.length= other.value}\n}\n\n$LongIntDict.__gt__ = function(self, other){\n return !$LongIntDict.__le__(self, other)\n}\n\n$LongIntDict.__index__ = function(self){\n // Used by bin()\n // returns a string with the binary value of self\n // The algorithm computes the result of the floor division of self by 2\n \n // XXX to do : negative integers\n \n var res = '', pos=self.value.length,\n temp = self.value, d\n while(true){\n d = divmod_pos(temp, '2')\n res = d[1].value + res\n temp = d[0].value\n if(temp=='0'){break}\n }\n return res\n}\n\n$LongIntDict.__invert__ = function(self){\n var bin = $LongIntDict.__index__(self)\n var res = ''\n for(var i=0;iother.value.length){return false}\n else if(self.value.length=0;i--){\n x = (carry+parseInt(res.charAt(i))*2).toString()\n if(x.length==2){res1=x.charAt(1)+res1;carry=parseInt(x.charAt(0))}\n else{res1=x+res1;carry=0}\n }\n if(carry){res1=carry+res1}\n res=res1\n shift = sub_pos(shift.value, '1')\n if(shift.value=='0'){break}\n }\n return {__class__:$LongIntDict, value:res, pos:self.pos}\n}\n\n$LongIntDict.__mod__ = function(self, other){\n return $LongIntDict.__divmod__(self, other)[1]\n}\n\n$LongIntDict.__mro__ = [_b_.object]\n\n$LongIntDict.__mul__ = function(self, other){\n if (typeof other == 'number') other=LongInt(_b_.str.$factory(other))\n var res = mul_pos(self.value, other.value)\n if(self.pos==other.pos){return res}\n res.pos = false\n return res\n}\n\n$LongIntDict.__neg__ = function(obj){\n return {__class__:$LongIntDict, value:obj.value, pos:!obj.pos}\n}\n\n$LongIntDict.__or__ = function(self, other){\n var v1 = $LongIntDict.__index__(self)\n var v2 = $LongIntDict.__index__(other)\n if(v1.length0){\n var dm = divmod_pos(v, base.toString())\n res = parseInt(dm[1].value).toString(base)+res\n v = dm[0].value\n if(v==0){break}\n }\n return res\n}\n\nfunction digits(base){\n // Return an object where keys are all the digits valid in specified base\n // and value is \"true\"\n // Used to test if the string passed as first argument to LongInt is valid\n var is_digits = {}\n // Number from 0 to base, or from 0 to 9 if base > 10\n for(var i=0;i10){\n // Additional letters\n // For instance in base 16, add \"abcdefABCDEF\" as keys\n for(var i=0;i2){\n throw _b_.TypeError(\"LongInt takes at most 2 arguments (\"+\n arguments.length+\" given)\")\n }\n // base defaults to 10\n if(base===undefined){base = 10}\n else if(!isinstance(base, int)){\n throw TypeError(\"'\"+$B.get_class(base).__name__+\"' object cannot be interpreted as an integer\")\n }\n if(base<0 || base==1 || base>36){\n throw ValueError(\"LongInt() base must be >= 2 and <= 36\")\n }\n if(isinstance(value, float)){\n if(value>=0){value=Math.round(value.value)}\n else{value=Math.ceil(value.value)}\n }\n if(typeof value=='number'){\n if(isSafeInteger(value)){value = value.toString()}\n else{throw ValueError(\"argument of long_int is not a safe integer\")}\n }else if(typeof value!='string'){\n throw ValueError(\"argument of long_int must be a string, not \"+\n $B.get_class(value).__name__)\n }\n var has_prefix = false, pos = true, start = 0\n // Strip leading and trailing whitespaces\n while(value.charAt(0)==' ' && value.length){value = value.substr(1)}\n while(value.charAt(value.length-1)==' ' && value.length){\n value = value.substr(0, value.length-1)\n }\n // Check if string starts with + or -\n if(value.charAt(0)=='+'){has_prefix=true}\n else if(value.charAt(0)=='-'){has_prefix=true;pos=false}\n if(has_prefix){\n // Remove prefix\n if(value.length==1){\n // \"+\" or \"-\" alone are not valid arguments\n throw ValueError('LongInt argument is not a valid number: \"'+value+'\"')\n }else{value=value.substr(1)}\n }\n // Ignore leading zeros\n while(start Math.pow(2, 32)}\n\n// Big number Library from jsfromhell.com\n// This library helps with producing \"correct\" results from\n// mathematic operations\n\n//+ Jonas Raoni Soares Silva\n//@ http://jsfromhell.com/classes/bignumber [rev. #4]\n\n\nvar BigNumber = function(n, p, r){\n var o = this, i\n if(n instanceof BigNumber){\n for(i in {precision: 0, roundType: 0, _s: 0, _f: 0}){o[i] = n[i]}\n o._d = n._d.slice()\n return\n }\n o.precision = isNaN(p = Math.abs(p)) ? BigNumber.defaultPrecision : p\n o.roundType = isNaN(r = Math.abs(r)) ? BigNumber.defaultRoundType : r\n o._s = (n += \"\").charAt(0) == \"-\"\n o._f = ((n = n.replace(/[^\\d.]/g, \"\").split(\".\", 2))[0] =\n n[0].replace(/^0+/, \"\") || \"0\").length\n for(i = (n = o._d = (n.join(\"\") || \"0\").split(\"\")).length; i;\n n[--i] = +n[i]){}\n o.round()\n}\nwith({$: BigNumber, o: BigNumber.prototype}){\n $.ROUND_HALF_EVEN = ($.ROUND_HALF_DOWN = ($.ROUND_HALF_UP =\n ($.ROUND_FLOOR = ($.ROUND_CEIL = ($.ROUND_DOWN = ($.ROUND_UP = 0) + 1) +\n 1) + 1) + 1) + 1) + 1\n $.defaultPrecision = 40\n $.defaultRoundType = $.ROUND_HALF_UP\n o.add = function(n){\n if(this._s != (n = new BigNumber(n))._s){\n return n._s ^= 1, this.subtract(n)\n }\n var o = new BigNumber(this),\n a = o._d,\n b = n._d,\n la = o._f,\n lb = n._f,\n n = Math.max(la, lb),\n i,\n r\n la != lb && ((lb = la - lb) > 0 ? o._zeroes(b, lb, 1) :\n o._zeroes(a, -lb, 1))\n i = (la = a.length) == (lb = b.length) ? a.length :\n ((lb = la - lb) > 0 ? o._zeroes(b, lb) : o._zeroes(a, -lb)).length\n for(r = 0; i; r = (a[--i] = a[i] + b[i] + r) / 10 >>> 0, a[i] %= 10){}\n return r && ++n && a.unshift(r), o._f = n, o.round()\n };\n o.subtract = function(n){\n if(this._s != (n = new BigNumber(n))._s)\n return n._s ^= 1, this.add(n);\n var o = new BigNumber(this),\n c = o.abs().compare(n.abs()) + 1,\n a = c ? o : n,\n b = c ? n : o,\n la = a._f,\n lb = b._f,\n d = la,\n i,\n j;\n a = a._d, b = b._d, la != lb && ((lb = la - lb) > 0 ? o._zeroes(b, lb, 1) : o._zeroes(a, -lb, 1));\n for(i = (la = a.length) == (lb = b.length) ? a.length : ((lb = la - lb) > 0 ? o._zeroes(b, lb) : o._zeroes(a, -lb)).length; i;){\n if(a[--i] < b[i]){\n for(j = i; j && !a[--j]; a[j] = 9);\n --a[j], a[i] += 10;\n }\n b[i] = a[i] - b[i];\n }\n return c || (o._s ^= 1), o._f = d, o._d = b, o.round();\n };\n o.multiply = function(n){\n var o = new BigNumber(this), r = o._d.length >= (n = new BigNumber(n))._d.length, a = (r ? o : n)._d,\n b = (r ? n : o)._d, la = a.length, lb = b.length, x = new BigNumber, i, j, s;\n for(i = lb; i; r && s.unshift(r), x.set(x.add(new BigNumber(s.join(\"\")))))\n for(s = (new Array(lb - --i)).join(\"0\").split(\"\"), r = 0, j = la; j; r += a[--j] * b[i], s.unshift(r % 10), r = (r / 10) >>> 0);\n return o._s = o._s != n._s, o._f = ((r = la + lb - o._f - n._f) >= (j = (o._d = x._d).length) ? this._zeroes(o._d, r - j + 1, 1).length : j) - r, o.round();\n };\n o.divide = function(n){\n if((n = new BigNumber(n)) == \"0\")\n throw new Error(\"Division by 0\");\n else if(this == \"0\")\n return new BigNumber;\n var o = new BigNumber(this), a = o._d, b = n._d, la = a.length - o._f,\n lb = b.length - n._f, r = new BigNumber, i = 0, j, s, l, f = 1, c = 0, e = 0;\n r._s = o._s != n._s, r.precision = Math.max(o.precision, n.precision),\n r._f = +r._d.pop(), la != lb && o._zeroes(la > lb ? b : a, Math.abs(la - lb));\n n._f = b.length, b = n, b._s = false, b = b.round();\n for(n = new BigNumber; a[0] == \"0\"; a.shift());\n out:\n do{\n for(l = c = 0, n == \"0\" && (n._d = [], n._f = 0); i < a.length && n.compare(b) == -1; ++i){\n (l = i + 1 == a.length, (!f && ++c > 1 || (e = l && n == \"0\" && a[i] == \"0\")))\n && (r._f == r._d.length && ++r._f, r._d.push(0));\n (a[i] == \"0\" && n == \"0\") || (n._d.push(a[i]), ++n._f);\n if(e)\n break out;\n if((l && n.compare(b) == -1 && (r._f == r._d.length && ++r._f, 1)) || (l = 0))\n while(r._d.push(0), n._d.push(0), ++n._f, n.compare(b) == -1);\n }\n if(f = 0, n.compare(b) == -1 && !(l = 0))\n while(l ? r._d.push(0) : l = 1, n._d.push(0), ++n._f, n.compare(b) == -1);\n for(s = new BigNumber, j = 0; n.compare(y = s.add(b)) + 1 && ++j; s.set(y));\n n.set(n.subtract(s)), !l && r._f == r._d.length && ++r._f, r._d.push(j);\n }\n while((i < a.length || n != \"0\") && (r._d.length - r._f) <= r.precision);\n return r.round();\n };\n o.mod = function(n){\n return this.subtract(this.divide(n).intPart().multiply(n));\n };\n o.pow = function(n){\n var o = new BigNumber(this), i;\n if((n = (new BigNumber(n)).intPart()) == 0) return o.set(1);\n for(i = Math.abs(n); --i; o.set(o.multiply(this)));\n return n < 0 ? o.set((new BigNumber(1)).divide(o)) : o;\n };\n o.set = function(n){\n return this.constructor(n), this;\n };\n o.compare = function(n){\n var a = this, la = this._f, b = new BigNumber(n), lb = b._f, r = [-1, 1], i, l;\n if(a._s != b._s)\n return a._s ? -1 : 1;\n if(la != lb)\n return r[(la > lb) ^ a._s];\n for(la = (a = a._d).length, lb = (b = b._d).length, i = -1, l = Math.min(la, lb); ++i < l;)\n if(a[i] != b[i])\n return r[(a[i] > b[i]) ^ a._s];\n return la != lb ? r[(la > lb) ^ a._s] : 0;\n };\n o.negate = function(){\n var n = new BigNumber(this); return n._s ^= 1, n;\n };\n o.abs = function(){\n var n = new BigNumber(this); return n._s = 0, n;\n };\n o.intPart = function(){\n return new BigNumber((this._s ? \"-\" : \"\") + (this._d.slice(0, this._f).join(\"\") || \"0\"));\n };\n o.valueOf = o.toString = function(){\n var o = this;\n return (o._s ? \"-\" : \"\") + (o._d.slice(0, o._f).join(\"\") || \"0\") + (o._f != o._d.length ? \".\" + o._d.slice(o._f).join(\"\") : \"\");\n };\n o._zeroes = function(n, l, t){\n var s = [\"push\", \"unshift\"][t || 0];\n for(++l; --l; n[s](0));\n return n;\n };\n o.round = function(){\n if(\"_rounding\" in this) return this;\n var $ = BigNumber, r = this.roundType, b = this._d, d, p, n, x;\n for(this._rounding = true; this._f > 1 && !b[0]; --this._f, b.shift());\n for(d = this._f, p = this.precision + d, n = b[p]; b.length > d && !b[b.length -1]; b.pop());\n x = (this._s ? \"-\" : \"\") + (p - d ? \"0.\" + this._zeroes([], p - d - 1).join(\"\") : \"\") + 1;\n if(b.length > p){\n n && (r == $.DOWN ? false : r == $.UP ? true : r == $.CEIL ? !this._s\n : r == $.FLOOR ? this._s : r == $.HALF_UP ? n >= 5 : r == $.HALF_DOWN ? n > 5\n : r == $.HALF_EVEN ? n >= 5 && b[p - 1] & 1 : false) && this.add(x);\n b.splice(p, b.length - p);\n }\n return delete this._rounding, this;\n };\n}\n\nvar isNegZero = function(x) {return x === 0 && Math.atan2(x,x) < 0}\n\nvar _mod = {\n __getattr__: function(attr){\n $B.check_nb_args('__getattr__ ', 1, arguments)\n $B.check_no_kw('__getattr__ ', attr)\n\n var res = this[attr]\n if(res === undefined){\n throw _b_.AttributeError.$factory(\n 'module math has no attribute ' + attr)\n }\n return res\n },\n acos: function(x){\n $B.check_nb_args('acos', 1, arguments)\n $B.check_no_kw('acos', x)\n return float.$factory(Math.acos(float_check(x)))\n },\n acosh: function(x){\n $B.check_nb_args('acosh', 1, arguments)\n $B.check_no_kw('acosh', x)\n\n if(_b_.$isinf(x)){return float.$factory('inf')}\n var y = float_check(x)\n return float.$factory(Math.log(y + Math.sqrt(y * y - 1)))\n },\n asin: function(x){\n $B.check_nb_args('asin', 1, arguments)\n $B.check_no_kw('asin', x)\n return float.$factory(Math.asin(float_check(x)))\n },\n asinh: function(x){\n $B.check_nb_args('asinh', 1, arguments)\n $B.check_no_kw('asinh', x)\n\n if(_b_.$isninf(x)){return float.$factory('-inf')}\n if(_b_.$isinf(x)){return float.$factory('inf')}\n var y = float_check(x)\n return float.$factory(Math.log(y + Math.sqrt(y * y + 1)))\n },\n atan: function(x){\n $B.check_nb_args('atan', 1, arguments)\n $B.check_no_kw('atan', x)\n\n if(_b_.$isninf(x)){return float.$factory(-Math.PI / 2)}\n if(_b_.$isinf(x)){return float.$factory(Math.PI / 2)}\n return float.$factory(Math.atan(float_check(x)))\n },\n atan2: function(y, x){\n $B.check_nb_args('atan2', 2, arguments)\n $B.check_no_kw('atan2', y, x)\n\n return float.$factory(Math.atan2(float_check(y), float_check(x)))\n },\n atanh: function(x){\n $B.check_nb_args('atanh', 1, arguments)\n $B.check_no_kw('atanh', x)\n\n var y = float_check(x)\n if(y == 0){return 0}\n return float.$factory(0.5 * Math.log((1 / y + 1)/(1 / y - 1)));\n },\n ceil: function(x){\n $B.check_nb_args('ceil', 1, arguments)\n $B.check_no_kw('ceil', x)\n\n try{return getattr(x, '__ceil__')()}catch(err){}\n\n if(_b_.$isninf(x)){return float.$factory('-inf')}\n if(_b_.$isinf(x)){return float.$factory('inf')}\n if(isNaN(x)){return float.$factory('nan')}\n\n var y = float_check(x)\n if(! isNaN(parseFloat(y)) && isFinite(y)){\n return int.$factory(Math.ceil(y))\n }\n\n throw _b_.ValueError.$factory(\n 'object is not a number and does not contain __ceil__')\n },\n comb: function(n, k){\n $B.check_nb_args('comb', 2, arguments)\n $B.check_no_kw('comb', n, k)\n\n // raise TypeError if n or k is not an integer\n check_int(n)\n check_int(k)\n\n if(k < 0){\n throw _b_.ValueError.$factory(\"k must be a non-negative integer\")\n }\n if(n < 0){\n throw _b_.ValueError.$factory(\"n must be a non-negative integer\")\n }\n\n if(k > n){\n return 0\n }\n // Evaluates to n! / (k! * (n - k)!)\n var fn = _mod.factorial(n),\n fk = _mod.factorial(k),\n fn_k = _mod.factorial(n - k)\n return $B.floordiv(fn, $B.mul(fk, fn_k))\n },\n copysign: function(x, y){\n $B.check_nb_args('copysign', 2, arguments)\n $B.check_no_kw('copysign', x,y)\n\n var x1 = Math.abs(float_check(x))\n var y1 = float_check(y)\n var sign = Math.sign(y1)\n sign = (sign == 1 || Object.is(sign, +0)) ? 1 : - 1\n return float.$factory(x1 * sign)\n },\n cos : function(x){\n $B.check_nb_args('cos ', 1, arguments)\n $B.check_no_kw('cos ', x)\n return float.$factory(Math.cos(float_check(x)))\n },\n cosh: function(x){\n $B.check_nb_args('cosh', 1, arguments)\n $B.check_no_kw('cosh', x)\n\n if(_b_.$isinf(x)) {return float.$factory('inf')}\n var y = float_check(x)\n if(Math.cosh !== undefined){return float.$factory(Math.cosh(y))}\n return float.$factory((Math.pow(Math.E, y) +\n Math.pow(Math.E, -y)) / 2)\n },\n degrees: function(x){\n $B.check_nb_args('degrees', 1, arguments)\n $B.check_no_kw('degrees', x)\n return float.$factory(float_check(x) * 180 / Math.PI)\n },\n dist: function(p, q){\n $B.check_nb_args('dist', 2, arguments)\n $B.check_no_kw('dist', p, q)\n var itp = _b_.iter(p),\n itq = _b_.iter(q),\n res = 0\n while(true){\n try{\n var next_p = _b_.next(itp)\n }catch(err){\n if(err.__class__ === _b_.StopIteration){\n // check that the other iterator is also exhausted\n try{\n var next_q = _b_.next(itq)\n throw _b_.ValueError.$factory(\"both points must have \" +\n \"the same number of dimensions\")\n }catch(err){\n if(err.__class__ === _b_.StopIteration){\n if(typeof res == \"number\" || res instanceof Number){\n return Math.sqrt(res)\n }else{\n return Math.sqrt(parseInt(res.value))\n }\n }\n throw err\n }\n }\n throw err\n }\n try{\n var next_q = _b_.next(itq),\n diff = $B.sub(next_p, next_q)\n res = $B.add(res, $B.mul(diff, diff))\n }catch(err){\n if(err.__class__ === _b_.StopIteration){\n throw _b_.ValueError.$factory(\"both points must have \" +\n \"the same number of dimensions\")\n }\n throw err\n }\n }\n },\n e: float.$factory(Math.E),\n erf: function(x){\n $B.check_nb_args('erf', 1, arguments)\n $B.check_no_kw('erf', x)\n\n // inspired from\n // http://stackoverflow.com/questions/457408/is-there-an-easily-available-implementation-of-erf-for-python\n var y = float_check(x)\n var t = 1.0 / (1.0 + 0.5 * Math.abs(y))\n var ans = 1 - t * Math.exp( -y * y - 1.26551223 +\n t * ( 1.00002368 +\n t * ( 0.37409196 +\n t * ( 0.09678418 +\n t * (-0.18628806 +\n t * ( 0.27886807 +\n t * (-1.13520398 +\n t * ( 1.48851587 +\n t * (-0.82215223 +\n t * 0.17087277)))))))))\n if(y >= 0.0){return ans}\n return -ans\n },\n erfc: function(x){\n\n $B.check_nb_args('erfc', 1, arguments)\n $B.check_no_kw('erfc', x)\n\n // inspired from\n // http://stackoverflow.com/questions/457408/is-there-an-easily-available-implementation-of-erf-for-python\n var y = float_check(x)\n var t = 1.0 / (1.0 + 0.5 * Math.abs(y))\n var ans = 1 - t * Math.exp( -y * y - 1.26551223 +\n t * ( 1.00002368 +\n t * ( 0.37409196 +\n t * ( 0.09678418 +\n t * (-0.18628806 +\n t * ( 0.27886807 +\n t * (-1.13520398 +\n t * ( 1.48851587 +\n t * (-0.82215223 +\n t * 0.17087277)))))))))\n if(y >= 0.0){return 1 - ans}\n return 1 + ans\n },\n exp: function(x){\n $B.check_nb_args('exp', 1, arguments)\n $B.check_no_kw('exp', x)\n\n if(_b_.$isninf(x)){return float.$factory(0)}\n if(_b_.$isinf(x)){return float.$factory('inf')}\n var _r = Math.exp(float_check(x))\n if(_b_.$isinf(_r)){throw OverflowError(\"math range error\")}\n return float.$factory(_r)\n },\n expm1: function(x){\n $B.check_nb_args('expm1', 1, arguments)\n $B.check_no_kw('expm1', x)\n\n if(_b_.$isninf(x)){return float.$factory(0)}\n if(_b_.$isinf(x)){return float.$factory('inf')}\n var _r = Math.expm1(float_check(x))\n if(_b_.$isinf(_r)){throw OverflowError(\"math range error\")}\n return float.$factory(_r)\n },\n //fabs: function(x){ return x>0?float.$factory(x):float.$factory(-x)},\n fabs: function(x){\n $B.check_nb_args('fabs', 1, arguments)\n $B.check_no_kw('fabs', x)\n return _b_.$fabs(x) // located in py_float.js\n },\n factorial: function(x){\n $B.check_nb_args('factorial', 1, arguments)\n $B.check_no_kw('factorial', x)\n\n //using code from http://stackoverflow.com/questions/3959211/fast-factorial-function-in-javascript\n if(! check_int_or_round_float(x)){\n throw _b_.ValueError.$factory(\"factorial() only accepts integral values\")\n }else if($B.rich_comp(\"__lt__\", x, 0)){\n throw _b_.ValueError.$factory(\"factorial() not defined for negative values\")\n }\n var r = 1\n for(var i = 2; i <= x; i++){\n r = $B.mul(r, i)\n }\n return r\n },\n floor: function(x){\n $B.check_nb_args('floor', 1, arguments)\n $B.check_no_kw('floor', x)\n return Math.floor(float_check(x))\n },\n fmod: function(x,y){\n $B.check_nb_args('fmod', 2, arguments)\n $B.check_no_kw('fmod', x,y)\n return float.$factory(float_check(x) % float_check(y))\n },\n frexp: function(x){\n $B.check_nb_args('frexp', 1, arguments)\n $B.check_no_kw('frexp', x)\n\n var _l = _b_.$frexp(x)\n return _b_.tuple.$factory([float.$factory(_l[0]), _l[1]])\n },\n fsum: function(x){\n $B.check_nb_args('fsum', 1, arguments)\n $B.check_no_kw('fsum', x)\n\n /* Translation into Javascript of the function msum in an Active\n State Cookbook recipe : https://code.activestate.com/recipes/393090/\n by Raymond Hettinger\n */\n var partials = [],\n res = new Number(),\n _it = _b_.iter(x)\n while(true){\n try{\n var x = _b_.next(_it),\n i = 0\n for(var j = 0, len = partials.length; j < len; j++){\n var y = partials[j]\n if(Math.abs(x) < Math.abs(y)){\n var z = x\n x = y\n y = z\n }\n var hi = x + y,\n lo = y - (hi - x)\n if(lo){\n partials[i] = lo\n i++\n }\n x = hi\n }\n partials = partials.slice(0, i).concat([x])\n }catch(err){\n if(_b_.isinstance(err, _b_.StopIteration)){break}\n throw err\n }\n }\n var res = new Number(0)\n for(var i = 0; i < partials.length; i++){\n res += new Number(partials[i])\n }\n return new Number(res)\n },\n gamma: function(x){\n $B.check_nb_args('gamma', 1, arguments)\n $B.check_no_kw('gamma', x)\n\n if(_b_.isinstance(x, int)){\n if(i < 1){\n throw _b_.ValueError.$factory(\"math domain error\")\n }\n var res = 1\n for(var i = 1; i < x; i++){res *= i}\n return new Number(res)\n }\n // Adapted from https://en.wikipedia.org/wiki/Lanczos_approximation\n var p = [676.5203681218851,\n -1259.1392167224028,\n 771.32342877765313,\n -176.61502916214059,\n 12.507343278686905,\n -0.13857109526572012,\n 9.9843695780195716e-6,\n 1.5056327351493116e-7\n ]\n\n var EPSILON = 1e-07\n function drop_imag(z){\n if(Math.abs(z.imag) <= EPSILON){\n z = z.real\n }\n return z\n }\n var z = x\n if(z < 0.5){\n var y = Math.PI / (Math.sin(Math.PI * z) * _mod.gamma(1-z)) // Reflection formula\n }else{\n z -= 1\n var x = 0.99999999999980993,\n i = 0\n for(var i = 0, len = p.length; i < len; i++){\n var pval = p[i]\n x += pval / (z + i + 1)\n }\n var t = z + p.length - 0.5,\n sq = Math.sqrt(2 * Math.PI),\n y = sq * Math.pow(t, (z + 0.5)) * Math.exp(-t) * x\n }\n return drop_imag(y)\n },\n gcd: function(){\n var $ = $B.args(\"gcd\", 2, {a: null, b: null}, ['a', 'b'],\n arguments, {}, null, null),\n a = $B.PyNumber_Index($.a),\n b = $B.PyNumber_Index($.b)\n if(a == 0 && b == 0){return 0}\n // https://stackoverflow.com/questions/17445231/js-how-to-find-the-greatest-common-divisor\n a = _b_.abs(a)\n b = _b_.abs(b)\n if($B.rich_comp(\"__gt__\", b, a)){\n var temp = a\n a = b\n b = temp\n }\n while(true){\n if(b == 0){\n return a\n }\n a = $B.rich_op(\"mod\", a, b)\n if(a == 0){\n return b\n }\n b = $B.rich_op(\"mod\", b, a)\n }\n },\n hypot: function(x, y){\n var $ = $B.args(\"hypot\", 2, {x: null, y:null}, ['x', 'y'],\n arguments, {}, \"args\", null),\n args = [x, y].concat($.args),\n res = 0\n for (var i = 0, len = args.length; i < len; i++){\n if(_b_.$isinf(args[i])){\n return float.$factory('inf')\n }\n float_check(args[i])\n res += args[i] * args[i]\n }\n return float.$factory(Math.sqrt(res))\n },\n inf: float.$factory('inf'),\n isclose: function(){\n var $ns = $B.args(\"isclose\",\n 4,\n {a: null, b: null, rel_tol: null, abs_tol: null},\n ['a', 'b', 'rel_tol', 'abs_tol'],\n arguments,\n {rel_tol: 1e-09, abs_tol: 0.0},\n null,\n null)\n var a = $ns['a'],\n b = $ns['b'],\n rel_tol = $ns['rel_tol'],\n abs_tol = $ns['abs_tol']\n if(rel_tol < 0.0 || abs_tol < 0.0){\n throw ValueError('tolerances must be non-negative')\n }\n if(a == b){return True}\n if(_b_.$isinf(a) || _b_.$isinf(b)){return false}\n var diff = _b_.$fabs(b - a)\n var result = (\n (diff <= _b_.$fabs(rel_tol * b)) ||\n (diff <= _b_.$fabs(rel_tol * a))\n ) || (diff <= _b_.$fabs(abs_tol)\n )\n return result\n },\n isfinite: function(x){\n $B.check_nb_args('isfinite', 1, arguments)\n $B.check_no_kw('isfinite', x)\n return isFinite(float_check(x))\n },\n isinf: function(x){\n $B.check_nb_args('isinf', 1, arguments)\n $B.check_no_kw('isinf', x)\n return _b_.$isinf(float_check(x))\n },\n isnan: function(x){\n $B.check_nb_args('isnan', 1, arguments)\n $B.check_no_kw('isnan', x)\n return isNaN(float_check(x))\n },\n isqrt: function(x){\n $B.check_nb_args('isqrt', 1, arguments)\n $B.check_no_kw('isqrt', x)\n\n x = $B.PyNumber_Index(x)\n if($B.rich_comp(\"__lt__\", x, 0)){\n throw _b_.ValueError.$factory(\n \"isqrt() argument must be nonnegative\")\n }\n if(typeof x == \"number\"){\n return Math.floor(Math.sqrt(x))\n }else{ // big integer\n var v = parseInt(x.value),\n candidate = Math.floor(Math.sqrt(v)),\n c1\n // Use successive approximations : sqr = (sqr + (x / sqr)) / 2\n // Limit to 100 iterations\n for(var i = 0; i < 100; i++){\n c1 = $B.floordiv($B.add(candidate,\n $B.floordiv(x, candidate)), 2)\n if(c1 === candidate || c1.value === candidate.value){\n break\n }\n candidate = c1\n }\n if($B.rich_comp(\"__gt__\", $B.mul(candidate, candidate), x)){\n // Result might be greater by 1\n candidate = $B.sub(candidate, 1)\n }\n return candidate\n }\n },\n ldexp: function(x, i){\n $B.check_nb_args('ldexp', 2, arguments)\n $B.check_no_kw('ldexp', x, i)\n return _b_.$ldexp(x, i) //located in py_float.js\n },\n lgamma: function(x){\n $B.check_nb_args('lgamma', 1, arguments)\n $B.check_no_kw('lgamma', x)\n\n return new Number(Math.log(Math.abs(_mod.gamma(x))))\n },\n log: function(x, base){\n var $ = $B.args(\"log\", 2, {x: null, base: null}, ['x', 'base'],\n arguments, {base: _b_.None}, null, null),\n x = $.x,\n base = $.base\n\n var x1 = float_check(x)\n if(base === _b_.None){return float.$factory(Math.log(x1))}\n return float.$factory(Math.log(x1) / Math.log(float_check(base)))\n },\n log1p: function(x){\n $B.check_nb_args('log1p', 1, arguments)\n $B.check_no_kw('log1p', x)\n return float.$factory(Math.log1p(float_check(x)))\n },\n log2: function(x){\n $B.check_nb_args('log2', 1, arguments)\n $B.check_no_kw('log2', x)\n\n if(isNaN(x)){return float.$factory('nan')}\n if(_b_.$isninf(x)) {throw ValueError('')}\n var x1 = float_check(x)\n if(x1 < 0.0){throw ValueError('')}\n return float.$factory(Math.log(x1) / Math.LN2)\n },\n log10: function(x){\n $B.check_nb_args('log10', 1, arguments)\n $B.check_no_kw('log10', x)\n\n return float.$factory(Math.log10(float_check(x)))\n },\n modf: function(x){\n $B.check_nb_args('modf', 1, arguments)\n $B.check_no_kw('modf', x)\n\n if(_b_.$isninf(x)){\n return _b_.tuple.$factory([0.0, float.$factory('-inf')])\n }\n if(_b_.$isinf(x)){\n return _b_.tuple.$factory([0.0, float.$factory('inf')])\n }\n if(isNaN(x)){\n return _b_.tuple.$factory([float.$factory('nan'),\n float.$factory('nan')])\n }\n\n var x1 = float_check(x)\n if(x1 > 0){\n var i = float.$factory(x1 - Math.floor(x1))\n return _b_.tuple.$factory([i, float.$factory(x1 - i)])\n }\n\n var x2 = Math.ceil(x1)\n var i = float.$factory(x1 - x2)\n return _b_.tuple.$factory([i, float.$factory(x2)])\n },\n nan: float.$factory('nan'),\n perm: function(n, k){\n var $ = $B.args(\"perm\", 2, {n: null, k: null}, ['n', 'k'],\n arguments, {k: _b_.None}, null, null),\n n = $.n,\n k = $.k\n\n if(k === _b_.None){\n check_int(n)\n return _mod.factorial(n)\n }\n // raise TypeError if n or k is not an integer\n check_int(n)\n check_int(k)\n\n if(k < 0){\n throw _b_.ValueError.$factory(\"k must be a non-negative integer\")\n }\n if(n < 0){\n throw _b_.ValueError.$factory(\"n must be a non-negative integer\")\n }\n\n if(k > n){\n return 0\n }\n // Evaluates to n! / (n - k)!\n var fn = _mod.factorial(n),\n fn_k = _mod.factorial(n - k)\n return $B.floordiv(fn, fn_k)\n },\n pi : float.$factory(Math.PI),\n pow: function(x, y){\n $B.check_nb_args('pow', 2, arguments)\n $B.check_no_kw('pow', x,y)\n\n var x1 = float_check(x)\n var y1 = float_check(y)\n if(y1 == 0){return float.$factory(1)}\n if(x1 == 0 && y1 < 0){throw _b_.ValueError('')}\n\n if(isNaN(y1)){\n if(x1 == 1){return float.$factory(1)}\n return float.$factory('nan')\n }\n if(x1 == 0){return float.$factory(0)}\n\n if(_b_.$isninf(y)){\n if(x1 == 1 || x1 == -1){return float.$factory(1)}\n if(x1 < 1 && x1 > -1){return float.$factory('inf')}\n return float.$factory(0)\n }\n if(_b_.$isinf(y)){\n if(x1 == 1 || x1 == -1){return float.$factory(1)}\n if(x1 < 1 && x1 > -1){return float.$factory(0)}\n return float.$factory('inf')\n }\n\n if(isNaN(x1)){return float.$factory('nan')}\n if(_b_.$isninf(x)){\n if(y1 > 0 && isOdd(y1)){return float.$factory('-inf')}\n if(y1 > 0){return float.$factory('inf')} // this is even or a float\n if(y1 < 0){return float.$factory(0)}\n return float.$factory(1)\n }\n\n if(_b_.$isinf(x)){\n if(y1 > 0){return float.$factory('inf')}\n if(y1 < 0){return float.$factory(0)}\n return float.$factory(1)\n }\n\n var r\n if(isLargeNumber(x1) || isLargeNumber(y1)){\n var x = new BigNumber(x1),\n y = new BigNumber(y1)\n r = x.pow(y)\n }else{\n r = Math.pow(x1,y1)\n }\n\n if(isNaN(r)){return float.$factory('nan')}\n if(_b_.$isninf(r)){return float.$factory('-inf')}\n if(_b_.$isinf(r)){return float.$factory('inf')}\n\n return r\n },\n prod: function(){\n var $ = $B.args(\"prod\", 1, {iterable:null, start:null},\n [\"iterable\", \"start\"], arguments, {start: 1}, \"*\",\n null),\n iterable = $.iterable,\n start = $.start\n var res = start,\n it = _b_.iter(iterable),\n x\n while(true){\n try{\n x = _b_.next(it)\n if(x == 0){\n return 0\n }\n res = $B.mul(res, x)\n }catch(err){\n if(err.__class__ === _b_.StopIteration){\n return res\n }\n throw err\n }\n }\n },\n radians: function(x){\n $B.check_nb_args('radians', 1, arguments)\n $B.check_no_kw('radians', x)\n\n return float.$factory(float_check(x) * Math.PI / 180)\n },\n sin : function(x){\n $B.check_nb_args('sin ', 1, arguments)\n $B.check_no_kw('sin ', x)\n return float.$factory(Math.sin(float_check(x)))},\n sinh: function(x) {\n $B.check_nb_args('sinh', 1, arguments)\n $B.check_no_kw('sinh', x)\n\n var y = float_check(x)\n if(Math.sinh !== undefined){return float.$factory(Math.sinh(y))}\n return float.$factory(\n (Math.pow(Math.E, y) - Math.pow(Math.E, -y)) / 2)\n },\n sqrt: function(x){\n $B.check_nb_args('sqrt ', 1, arguments)\n $B.check_no_kw('sqrt ', x)\n\n var y = float_check(x)\n if(y < 0){throw ValueError(\"math range error\")}\n if(_b_.$isinf(y)){return float.$factory('inf')}\n var _r = Math.sqrt(y)\n if(_b_.$isinf(_r)){throw OverflowError(\"math range error\")}\n return float.$factory(_r)\n },\n tan: function(x) {\n $B.check_nb_args('tan', 1, arguments)\n $B.check_no_kw('tan', x)\n\n var y = float_check(x)\n return float.$factory(Math.tan(y))\n },\n tanh: function(x) {\n $B.check_nb_args('tanh', 1, arguments)\n $B.check_no_kw('tanh', x)\n\n var y = float_check(x)\n if(Math.tanh !== undefined){return float.$factory(Math.tanh(y))}\n return float.$factory((Math.pow(Math.E, y) - Math.pow(Math.E, -y))/\n (Math.pow(Math.E, y) + Math.pow(Math.E, -y)))\n },\n trunc: function(x) {\n $B.check_nb_args('trunc', 1, arguments)\n $B.check_no_kw('trunc', x)\n\n try{return getattr(x, '__trunc__')()}catch(err){}\n var x1 = float_check(x)\n if(!isNaN(parseFloat(x1)) && isFinite(x1)){\n if(Math.trunc !== undefined){return int.$factory(Math.trunc(x1))}\n if(x1 > 0){return int.$factory(Math.floor(x1))}\n return int.$factory(Math.ceil(x1)) // x1 < 0\n }\n throw _b_.ValueError.$factory(\n 'object is not a number and does not contain __trunc__')\n }\n}\n\nfor(var $attr in _mod){\n if(typeof _mod[$attr] === 'function'){\n _mod[$attr].__repr__ = (function(func){\n return function(){return ''}\n })($attr)\n _mod[$attr].__str__ = (function(func){\n return function(){return ''}\n })($attr)\n }\n}\n\nreturn _mod\n\n})(__BRYTHON__)\n"], "modulefinder": [".js", "var $module=(function($B){\n\nvar _b_=$B.builtins\nvar _mod = {}\n\n$ModuleFinderDict = {__class__:_b_.type,__name__:'ModuleFinder'}\n$ModuleFinderDict.__mro__ = [_b_.object]\n\n$ModuleFinderDict.run_script = function(self, pathname){\n // pathname is the url of a Python script\n var py_src = _b_.$open(pathname).read()\n // transform into internal Brython tree structure\n var root = $B.py2js(py_src)\n // walk the tree to find occurences of imports\n function walk(node){\n var modules = []\n var ctx = node.context\n if(ctx && ctx.type=='node'){ctx = ctx.tree[0]}\n\n if(ctx && ctx.type==\"import\"){\n for(var i=0, _len_i = ctx.tree.length; i < _len_i;i++){\n if(modules.indexOf(ctx.tree[i].name)==-1){\n modules.push(ctx.tree[i].name)\n }\n }\n }else if(ctx && ctx.type==\"from\"){\n if(modules.indexOf(ctx.module)==-1){\n modules.push(ctx.module)\n }\n }\n \n for(var i=0, _len_i = node.children.length; i < _len_i;i++){\n mods = walk(node.children[i])\n for(var j=0, _len_j = mods.length; j < _len_j;j++){\n if(modules.indexOf(mods[j])==-1){modules.push(mods[j])}\n }\n }\n return modules\n }\n self.modules = walk(root)\n}\n\n_mod.ModuleFinder = function(){return {__class__:$ModuleFinderDict}\n}\n_mod.ModuleFinder.$dict = $ModuleFinderDict\n_mod.ModuleFinder.__class__ = $B.$factory\n$ModuleFinderDict.$factory = _mod.ModuleFinder\n\nreturn _mod\n})(__BRYTHON__)\n"], "posix": [".js", "/*\nThis module provides access to operating system functionality that is\nstandardized by the C Standard and the POSIX standard (a thinly\ndisguised Unix interface). Refer to the library manual and\ncorresponding Unix manual entries for more information on calls.\n*/\n\nvar $B = __BRYTHON__,\n _b_ = $B.builtins\n\nfunction _randint(a, b){\n return parseInt(Math.random() * (b - a + 1) + a)\n}\n\nvar stat_result = $B.make_class(\"stat_result\",\n function(filename){\n // Use $B.files, created by \"python -m brython --make_file_system\"\n if($B.files && $B.files.hasOwnProperty(filename)){\n var f = $B.files[filename],\n res = {\n __class__: stat_result,\n st_atime: new Date().getTime(),\n st_ctime: f.ctime,\n st_mtime: f.mtime,\n st_uid: -1,\n st_gid: -1,\n st_ino: -1,\n st_mode: 0,\n st_size: 1\n };\n [\"atime\", \"mtime\", \"ctime\"].\n forEach(function(item){\n res[\"st_\" + item + \"_ns\"] = res[\"st_\" + item] *\n 1000000\n });\n }else{\n var res = {\n __class__: stat_result,\n st_atime: new Date(),\n st_uid: -1,\n st_gid: -1,\n st_ino: -1,\n st_mode: 0,\n st_size: 1\n };\n [\"mtime\", \"ctime\", \"atime_ns\", \"mtime_ns\", \"ctime_ns\"].\n forEach(function(item){\n res[\"st_\" + item] = res.st_atime\n });\n }\n return res\n }\n)\n$B.set_func_names(stat_result, \"posix\")\n\nvar $module = {\n F_OK: 0,\n O_APPEND: 8,\n O_BINARY: 32768,\n O_CREAT: 256,\n O_EXCL: 1024,\n O_NOINHERIT: 128,\n O_RANDOM: 16,\n O_RDONLY: 0,\n O_RDWR: 2,\n O_SEQUENTIAL: 32,\n O_SHORT_LIVED: 4096,\n O_TEMPORARY: 64,\n O_TEXT: 16384,\n O_TRUNC: 512,\n O_WRONLY: 1,\n P_DETACH: 4,\n P_NOWAIT: 1,\n P_NOWAITO: 3,\n P_OVERLAY: 2,\n P_WAIT: 0,\n R_OK: 4,\n TMP_MAX: 32767,\n W_OK: 2,\n X_OK: 1,\n _have_functions: ['MS_WINDOWS'],\n environ: _b_.dict.$factory(\n [['PYTHONPATH', $B.brython_path],\n ['PYTHONUSERBASE', ' ']]),\n error: _b_.OSError,\n fspath: function(path){\n return path\n },\n getcwd: function(){return $B.brython_path},\n getpid: function(){return 0},\n lstat: function(){return stat_result.$factory()},\n open: function(path, flags){return _b_.open(path, flags)},\n stat: function(filename){return stat_result.$factory(filename)},\n stat_result: function(filename){return stat_result.$factory(filename)},\n urandom: function(n){\n var randbytes = []\n for(var i = 0; i < n; i++){\n randbytes.push(_randint(0, 255))\n }\n return _b_.bytes.$factory(randbytes)\n },\n WTERMSIG: function(){return 0},\n WNOHANG: function(){return _b_.tuple.$factory([0, 0])}\n};\n\n[\"WCOREDUMP\", \"WIFCONTINUED\", \"WIFSTOPPED\", \"WIFSIGNALED\", \"WIFEXITED\"].forEach(function(funcname){\n $module[funcname] = function(){return false}\n });\n\n[\"WEXITSTATUS\", \"WSTOPSIG\", \"WTERMSIG\"].\n forEach(function(funcname){\n $module[funcname] = function(){return _b_.None}\n });\n\n[\"_exit\", \"_getdiskusage\", \"_getfileinformation\", \"_getfinalpathname\",\n \"_getfullpathname\", \"_isdir\", \"abort\", \"access\", \"chdir\", \"chmod\",\n \"close\", \"closerange\", \"device_encoding\", \"dup\", \"dup2\",\n \"execv\", \"execve\", \"fsat\", \"fsync\", \"get_terminal_size\", \"getcwdb\",\n \"getlogin\", \"getppid\", \"isatty\", \"kill\", \"link\", \"listdir\", \"lseek\",\n \"mkdir\", \"pipe\", \"putenv\", \"read\", \"readlink\", \"remove\", \"rename\",\n \"replace\", \"rmdir\", \"spawnv\", \"spawnve\", \"startfile\", \"stat_float_times\",\n \"statvfs_result\", \"strerror\", \"symlink\", \"system\", \"terminal_size\",\n \"times\", \"times_result\", \"umask\", \"uname_result\", \"unlink\", \"utime\",\n \"waitpid\", \"write\"].forEach(function(funcname){\n $module[funcname] = function(){\n throw _b_.NotImplementedError.$factory(\"posix.\" + funcname +\n \" is not implemented\")\n }\n });\n"], "random": [".js", "// Javascript implementation of the random module\n// Based on Ian Bicking's implementation of the Mersenne twister\n\nvar $module = (function($B){\n\nvar _b_ = $B.builtins,\n i\n\nvar VERSION = 3\n\n// Code copied from https://github.com/ianb/whrandom/blob/master/mersenne.js\n// by Ian Bicking\n\n// this program is a JavaScript version of Mersenne Twister,\n// a straight conversion from the original program, mt19937ar.c,\n// translated by y. okada on july 17, 2006.\n// and modified a little at july 20, 2006, but there are not any substantial differences.\n// modularized by Ian Bicking, March 25, 2013 (found original version at http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/VERSIONS/JAVASCRIPT/java-script.html)\n// in this program, procedure descriptions and comments of original source code were not removed.\n// lines commented with //c// were originally descriptions of c procedure. and a few following lines are appropriate JavaScript descriptions.\n// lines commented with /* and */ are original comments.\n// lines commented with // are additional comments in this JavaScript version.\n/*\n A C-program for MT19937, with initialization improved 2002/1/26.\n Coded by Takuji Nishimura and Makoto Matsumoto.\n\n Before using, initialize the state by using init_genrand(seed)\n or init_by_array(init_key, key_length).\n\n Copyright (C) 1997 - 2002, Makoto Matsumoto and Takuji Nishimura,\n All rights reserved.\n\n Redistribution and use in source and binary forms, with or without\n modification, are permitted provided that the following conditions\n are met:\n\n 1. Redistributions of source code must retain the above copyright\n notice, this list of conditions and the following disclaimer.\n\n 2. Redistributions in binary form must reproduce the above copyright\n notice, this list of conditions and the following disclaimer in the\n documentation and/or other materials provided with the distribution.\n\n 3. The names of its contributors may not be used to endorse or promote\n products derived from this software without specific prior written\n permission.\n\n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR\n CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\n PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\n LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n\n Any feedback is very welcome.\n http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/emt.html\n email: m-mat @ math.sci.hiroshima-u.ac.jp (remove space)\n*/\n\nfunction RandomStream(seed) {\n /*jshint bitwise:false */\n /* Period parameters */\n //c//#define N 624\n //c//#define M 397\n //c//#define MATRIX_A 0x9908b0dfUL /* constant vector a */\n //c//#define UPPER_MASK 0x80000000UL /* most significant w-r bits */\n //c//#define LOWER_MASK 0x7fffffffUL /* least significant r bits */\n var N = 624\n var M = 397\n var MATRIX_A = 0x9908b0df /* constant vector a */\n var UPPER_MASK = 0x80000000 /* most significant w-r bits */\n var LOWER_MASK = 0x7fffffff /* least significant r bits */\n //c//static unsigned long mt[N]; /* the array for the state vector */\n //c//static int mti=N+1; /* mti==N+1 means mt[N] is not initialized */\n var mt = new Array(N) /* the array for the state vector */\n var mti = N + 1 /* mti==N+1 means mt[N] is not initialized */\n\n function unsigned32(n1){\n // returns a 32-bits unsiged integer from an operand to which applied a\n // bit operator.\n return n1 < 0 ? (n1 ^ UPPER_MASK) + UPPER_MASK : n1\n }\n\n function subtraction32(n1, n2){\n // emulates lowerflow of a c 32-bits unsiged integer variable, instead of\n // the operator -. these both arguments must be non-negative integers\n // expressible using unsigned 32 bits.\n return n1 < n2 ? unsigned32((0x100000000 - (n2 - n1)) & 0xffffffff) :\n n1 - n2\n }\n\n function addition32(n1, n2){\n // emulates overflow of a c 32-bits unsiged integer variable, instead of\n // the operator +. these both arguments must be non-negative integers\n // expressible using unsigned 32 bits.\n return unsigned32((n1 + n2) & 0xffffffff)\n }\n\n function multiplication32(n1, n2){\n // emulates overflow of a c 32-bits unsiged integer variable, instead of the\n // operator *. these both arguments must be non-negative integers\n // expressible using unsigned 32 bits.\n var sum = 0\n for (var i = 0; i < 32; ++i){\n if((n1 >>> i) & 0x1){\n sum = addition32(sum, unsigned32(n2 << i))\n }\n }\n return sum\n }\n\n /* initializes mt[N] with a seed */\n //c//void init_genrand(unsigned long s)\n function init_genrand(s) {\n //c//mt[0]= s & 0xffffffff;\n mt[0] = unsigned32(s & 0xffffffff)\n for(mti = 1; mti < N; mti++){\n mt[mti] =\n //c//(1812433253 * (mt[mti-1] ^ (mt[mti-1] >> 30)) + mti);\n addition32(multiplication32(1812433253,\n unsigned32(mt[mti - 1] ^ (mt[mti - 1] >>> 30))), mti)\n /* See Knuth TAOCP Vol2. 3rd Ed. P.106 for multiplier. */\n /* In the previous versions, MSBs of the seed affect */\n /* only MSBs of the array mt[]. */\n /* 2002/01/09 modified by Makoto Matsumoto */\n //c//mt[mti] &= 0xffffffff;\n mt[mti] = unsigned32(mt[mti] & 0xffffffff);\n /* for >32 bit machines */\n }\n }\n\n /* initialize by an array with array-length */\n /* init_key is the array for initializing keys */\n /* key_length is its length */\n /* slight change for C++, 2004/2/26 */\n //c//void init_by_array(unsigned long init_key[], int key_length)\n function init_by_array(init_key, key_length) {\n //c//int i, j, k;\n var i, j, k\n init_genrand(19650218)\n i = 1\n j = 0\n k = (N > key_length ? N : key_length)\n for(; k; k--){\n //c//mt[i] = (mt[i] ^ ((mt[i-1] ^ (mt[i-1] >> 30)) * 1664525))\n //c// + init_key[j] + j; /* non linear */\n mt[i] = addition32(\n addition32(unsigned32(mt[i] ^\n multiplication32(unsigned32(mt[i - 1] ^ (mt[i - 1] >>> 30)),\n 1664525)),\n init_key[j]), j)\n mt[i] =\n //c//mt[i] &= 0xffffffff; /* for WORDSIZE > 32 machines */\n unsigned32(mt[i] & 0xffffffff)\n i++\n j++\n if(i >= N){mt[0] = mt[N - 1]; i = 1}\n if(j >= key_length){j = 0}\n }\n for(k = N - 1; k; k--){\n //c//mt[i] = (mt[i] ^ ((mt[i-1] ^ (mt[i-1] >> 30)) * 1566083941))\n //c//- i; /* non linear */\n mt[i] = subtraction32(\n unsigned32(\n (mt[i]) ^\n multiplication32(\n unsigned32(mt[i - 1] ^ (mt[i - 1] >>> 30)),\n 1566083941)),\n i\n )\n //c//mt[i] &= 0xffffffff; /* for WORDSIZE > 32 machines */\n mt[i] = unsigned32(mt[i] & 0xffffffff)\n i++\n if(i >= N){mt[0] = mt[N - 1]; i = 1}\n }\n mt[0] = 0x80000000; /* MSB is 1; assuring non-zero initial array */\n }\n\n /* generates a random number on [0,0xffffffff]-interval */\n //c//unsigned long genrand_int32(void)\n function genrand_int32() {\n //c//unsigned long y;\n //c//static unsigned long mag01[2]={0x0UL, MATRIX_A};\n var y;\n var mag01 = [0x0, MATRIX_A];\n /* mag01[x] = x * MATRIX_A for x=0,1 */\n\n if(mti >= N){ /* generate N words at one time */\n //c//int kk;\n var kk\n\n if(mti == N + 1){ /* if init_genrand() has not been called, */\n init_genrand(Date.now()) /* a default initial seed is used */\n }\n\n for(kk = 0; kk < N - M; kk++){\n //c//y = (mt[kk]&UPPER_MASK)|(mt[kk+1]&LOWER_MASK);\n //c//mt[kk] = mt[kk+M] ^ (y >> 1) ^ mag01[y & 0x1];\n y = unsigned32((mt[kk]&UPPER_MASK) | (mt[kk + 1]&LOWER_MASK))\n mt[kk] = unsigned32(mt[kk + M] ^ (y >>> 1) ^ mag01[y & 0x1])\n }\n for(;kk < N - 1; kk++){\n //c//y = (mt[kk]&UPPER_MASK)|(mt[kk+1]&LOWER_MASK);\n //c//mt[kk] = mt[kk+(M-N)] ^ (y >> 1) ^ mag01[y & 0x1];\n y = unsigned32((mt[kk]&UPPER_MASK) | (mt[kk + 1]&LOWER_MASK))\n mt[kk] = unsigned32(mt[kk + (M - N)] ^ (y >>> 1) ^ mag01[y & 0x1])\n }\n //c//y = (mt[N-1]&UPPER_MASK)|(mt[0]&LOWER_MASK);\n //c//mt[N-1] = mt[M-1] ^ (y >> 1) ^ mag01[y & 0x1];\n y = unsigned32((mt[N - 1] & UPPER_MASK) | (mt[0] & LOWER_MASK))\n mt[N - 1] = unsigned32(mt[M - 1] ^ (y >>> 1) ^ mag01[y & 0x1])\n mti = 0\n }\n\n y = mt[mti++]\n\n /* Tempering */\n //c//y ^= (y >> 11);\n //c//y ^= (y << 7) & 0x9d2c5680;\n //c//y ^= (y << 15) & 0xefc60000;\n //c//y ^= (y >> 18);\n y = unsigned32(y ^ (y >>> 11))\n y = unsigned32(y ^ ((y << 7) & 0x9d2c5680))\n y = unsigned32(y ^ ((y << 15) & 0xefc60000))\n y = unsigned32(y ^ (y >>> 18))\n\n return y\n }\n\n /* generates a random number on [0,0x7fffffff]-interval */\n //c//long genrand_int31(void)\n function genrand_int31(){\n //c//return (genrand_int32()>>1);\n return (genrand_int32()>>>1)\n }\n\n /* generates a random number on [0,1]-real-interval */\n //c//double genrand_real1(void)\n function genrand_real1(){\n return genrand_int32()*(1.0/4294967295.0)\n /* divided by 2^32-1 */\n }\n\n /* generates a random number on [0,1)-real-interval */\n //c//double genrand_real2(void)\n function genrand_real2(){\n return genrand_int32() * (1.0 / 4294967296.0)\n /* divided by 2^32 */\n }\n\n /* generates a random number on (0,1)-real-interval */\n //c//double genrand_real3(void)\n function genrand_real3() {\n return ((genrand_int32()) + 0.5) * (1.0 / 4294967296.0)\n /* divided by 2^32 */\n }\n\n /* generates a random number on [0,1) with 53-bit resolution*/\n //c//double genrand_res53(void)\n function genrand_res53() {\n //c//unsigned long a=genrand_int32()>>5, b=genrand_int32()>>6;\n var a = genrand_int32() >>> 5,\n b = genrand_int32() >>> 6\n return (a * 67108864.0 + b) * (1.0 / 9007199254740992.0)\n }\n /* These real versions are due to Isaku Wada, 2002/01/09 added */\n\n var random = genrand_res53\n\n random.seed = function(seed){\n if(seed === undefined){seed = Date.now()}\n if(typeof seed != \"number\"){seed = parseInt(seed, 10)}\n if((seed !== 0 && ! seed) || isNaN(seed)){\n throw _b_.ValueError.$factory(\"Bad seed: \" + _b_.str.$factory(seed))\n }\n init_genrand(seed)\n }\n\n random.seed(seed)\n\n random.int31 = genrand_int31\n random.real1 = genrand_real1\n random.real2 = genrand_real2\n random.real3 = genrand_real3\n random.res53 = genrand_res53\n\n // Added for compatibility with Python\n random.getstate = function(){return [VERSION, mt, mti]}\n\n random.setstate = function(state){\n mt = state[1]\n mti = state[2]\n }\n\n return random\n\n}\n\n// magic constants\n\nvar NV_MAGICCONST = 4 * Math.exp(-0.5)/Math.sqrt(2),\n gauss_next = null,\n NV_MAGICCONST = 1.71552776992141,\n TWOPI = 6.28318530718,\n LOG4 = 1.38629436111989,\n SG_MAGICCONST = 2.50407739677627,\n VERSION = VERSION\n\nvar Random = $B.make_class(\"Random\",\n function(){\n return {\n __class__: Random,\n _random: RandomStream(Date.now())\n }\n }\n)\n\nRandom._randbelow = function(self, x){\n return Math.floor(x * self._random())\n}\n\nRandom._urandom = function(self, n){\n /*\n urandom(n) -> str\n Return n random bytes suitable for cryptographic use.\n */\n\n var randbytes = []\n for(i = 0; i < n; i++){randbytes.push(parseInt(self._random() * 256))}\n return _b_.bytes.$factory(randbytes)\n}\n\nRandom.betavariate = function(){\n /* Beta distribution.\n\n Conditions on the parameters are alpha > 0 and beta > 0.\n Returned values range between 0 and 1.\n\n\n # This version due to Janne Sinkkonen, and matches all the std\n # texts (e.g., Knuth Vol 2 Ed 3 pg 134 \"the beta distribution\").\n */\n\n var $ = $B.args('betavariate', 3, {self: null, alpha:null, beta:null},\n ['self', 'alpha', 'beta'], arguments, {}, null, null),\n self = $.self,\n alpha = $.alpha,\n beta = $.beta\n\n var y = Random.gammavariate(self, alpha, 1)\n if(y == 0){return _b_.float.$factory(0)}\n else{return y / (y + Random.gammavariate(self, beta, 1))}\n}\n\nRandom.choice = function(){\n var $ = $B.args(\"choice\", 2,\n {self: null, seq:null},[\"self\", \"seq\"],arguments, {}, null, null),\n self = $.self,\n seq = $.seq\n var len, rank\n if(Array.isArray(seq)){len = seq.length}\n else{len = _b_.getattr(seq,\"__len__\")()}\n if(len == 0){\n throw _b_.IndexError.$factory(\"Cannot choose from an empty sequence\")\n }\n rank = parseInt(self._random() * len)\n if(Array.isArray(seq)){return seq[rank]}\n else{return _b_.getattr(seq, \"__getitem__\")(rank)}\n}\n\nRandom.choices = function(){\n var $ = $B.args(\"choices\", 3,\n {self: null,population:null, weights:null, cum_weights:null, k:null},\n [\"self\", \"population\", \"weights\", \"cum_weights\", \"k\"], arguments,\n {weights: _b_.None, cum_weights: _b_.None, k: 1}, \"*\", null),\n self = $.self,\n population = $.population,\n weights = $.weights,\n cum_weights = $.cum_weights,\n k = $.k\n\n if(population.length == 0){\n throw _b_.ValueError.$factory(\"population is empty\")\n }\n population = _b_.list.$factory(population) // issue #1268\n if(weights === _b_.None){\n weights = []\n population.forEach(function(){\n weights.push(1)\n })\n }else if(cum_weights !== _b_.None){\n throw _b_.TypeError.$factory(\"Cannot specify both weights and \" +\n \"cumulative weights\")\n }else{\n if(weights.length != population.length){\n throw _b_.ValueError.$factory('The number of weights does not ' +\n 'match the population')\n }\n }\n if(cum_weights === _b_.None){\n var cum_weights = [weights[0]]\n weights.forEach(function(weight, rank){\n if(rank > 0){\n cum_weights.push(cum_weights[rank - 1] + weight)\n }\n })\n }else if(cum_weights.length != population.length){\n throw _b_.ValueError.$factory('The number of weights does not ' +\n 'match the population')\n }\n\n var result = []\n for(var i = 0; i < k; i++){\n var rand = self._random() * cum_weights[cum_weights.length - 1]\n for(var rank = 0, len = population.length; rank < len; rank++){\n if(cum_weights[rank] > rand){\n result.push(population[rank])\n break\n }\n }\n }\n return result\n}\n\nRandom.expovariate = function(self, lambd){\n /*\n Exponential distribution.\n\n lambd is 1.0 divided by the desired mean. It should be\n nonzero. (The parameter would be called \"lambda\", but that is\n a reserved word in Python.) Returned values range from 0 to\n positive infinity if lambd is positive, and from negative\n infinity to 0 if lambd is negative.\n\n */\n // lambd: rate lambd = 1/mean\n // ('lambda' is a Python reserved word)\n\n // we use 1-random() instead of random() to preclude the\n // possibility of taking the log of zero.\n return -Math.log(1.0 - self._random()) / lambd\n}\n\nRandom.gammavariate = function(self, alpha, beta){\n /* Gamma distribution. Not the gamma function!\n\n Conditions on the parameters are alpha > 0 and beta > 0.\n\n The probability distribution function is:\n\n x ** (alpha - 1) * math.exp(-x / beta)\n pdf(x) = --------------------------------------\n math.gamma(alpha) * beta ** alpha\n\n */\n\n // alpha > 0, beta > 0, mean is alpha*beta, variance is alpha*beta**2\n\n // Warning: a few older sources define the gamma distribution in terms\n // of alpha > -1.0\n\n var $ = $B.args('gammavariate', 3,\n {self: null, alpha:null, beta:null},\n ['self', 'alpha', 'beta'],\n arguments, {}, null, null),\n self = $.self,\n alpha = $.alpha,\n beta = $.beta,\n LOG4 = Math.log(4),\n SG_MAGICCONST = 1.0 + Math.log(4.5)\n\n if(alpha <= 0.0 || beta <= 0.0){\n throw _b_.ValueError.$factory('gammavariate: alpha and beta must be > 0.0')\n }\n\n if(alpha > 1.0){\n\n // Uses R.C.H. Cheng, \"The generation of Gamma\n // variables with non-integral shape parameters\",\n // Applied Statistics, (1977), 26, No. 1, p71-74\n\n var ainv = Math.sqrt(2.0 * alpha - 1.0),\n bbb = alpha - LOG4,\n ccc = alpha + ainv\n\n while(true){\n var u1 = self._random()\n if(!((1e-7 < u1) && (u1 < .9999999))){\n continue\n }\n var u2 = 1.0 - self._random(),\n v = Math.log(u1 / (1.0 - u1)) / ainv,\n x = alpha * Math.exp(v),\n z = u1 * u1 * u2,\n r = bbb + ccc * v - x\n if((r + SG_MAGICCONST - 4.5 * z >= 0.0) || r >= Math.log(z)){\n return x * beta\n }\n }\n }else if(alpha == 1.0){\n // expovariate(1)\n var u = self._random()\n while(u <= 1e-7){u = self._random()}\n return -Math.log(u) * beta\n }else{\n // alpha is between 0 and 1 (exclusive)\n\n // Uses ALGORITHM GS of Statistical Computing - Kennedy & Gentle\n\n while(true){\n var u = self._random(),\n b = (Math.E + alpha)/Math.E,\n p = b*u,\n x\n if(p <= 1.0){x = Math.pow(p, (1.0/alpha))}\n else{x = -Math.log((b-p)/alpha)}\n var u1 = self._random()\n if(p > 1.0){\n if(u1 <= Math.pow(x, alpha - 1.0)){\n break\n }\n }else if(u1 <= Math.exp(-x)){\n break\n }\n }\n return x * beta\n }\n}\n\nRandom.gauss = function(){\n\n /* Gaussian distribution.\n\n mu is the mean, and sigma is the standard deviation. This is\n slightly faster than the normalvariate() function.\n\n Not thread-safe without a lock around calls.\n\n # When x and y are two variables from [0, 1), uniformly\n # distributed, then\n #\n # cos(2*pi*x)*sqrt(-2*log(1-y))\n # sin(2*pi*x)*sqrt(-2*log(1-y))\n #\n # are two *independent* variables with normal distribution\n # (mu = 0, sigma = 1).\n # (Lambert Meertens)\n # (corrected version; bug discovered by Mike Miller, fixed by LM)\n\n # Multithreading note: When two threads call this function\n # simultaneously, it is possible that they will receive the\n # same return value. The window is very small though. To\n # avoid this, you have to use a lock around all calls. (I\n # didn't want to slow this down in the serial case by using a\n # lock here.)\n */\n\n var $ = $B.args('gauss', 3, {self: null, mu:null, sigma:null},\n ['self', 'mu', 'sigma'], arguments, {}, null, null),\n self = $.self,\n mu = $.mu,\n sigma = $.sigma\n\n var z = gauss_next\n gauss_next = null\n if(z === null){\n var x2pi = self._random() * Math.PI * 2,\n g2rad = Math.sqrt(-2.0 * Math.log(1.0 - self._random())),\n z = Math.cos(x2pi) * g2rad\n gauss_next = Math.sin(x2pi) * g2rad\n }\n return mu + z*sigma\n}\n\nRandom.getrandbits = function(){\n var $ = $B.args(\"getrandbits\", 2,\n {self: null, k:null},[\"self\", \"k\"],arguments, {}, null, null),\n self = $.self,\n k = $B.$GetInt($.k)\n // getrandbits(k) -> x. Generates a long int with k random bits.\n if(k <= 0){\n throw _b_.ValueError.$factory('number of bits must be greater than zero')\n }\n if(k != _b_.int.$factory(k)){\n throw _b_.TypeError.$factory('number of bits should be an integer')\n }\n var numbytes = (k + 7), // bits / 8 and rounded up\n x = _b_.int.from_bytes(Random._urandom(self, numbytes), 'big')\n return _b_.getattr(x, '__rshift__')(\n _b_.getattr(numbytes*8,'__sub__')(k))\n}\n\nRandom.getstate = function(){\n // Return internal state; can be passed to setstate() later.\n var $ = $B.args('getstate', 1, {self: null},\n [\"self\"], arguments, {}, null, null)\n return $.self._random.getstate()\n}\n\nRandom.lognormvariate = function(){\n /*\n Log normal distribution.\n\n If you take the natural logarithm of this distribution, you'll get a\n normal distribution with mean mu and standard deviation sigma.\n mu can have any value, and sigma must be greater than zero.\n\n */\n return Math.exp(Random.normalvariate.apply(null, arguments))\n}\n\nRandom.normalvariate = function(){\n /*\n Normal distribution.\n\n mu is the mean, and sigma is the standard deviation.\n\n */\n\n // mu = mean, sigma = standard deviation\n\n // Uses Kinderman and Monahan method. Reference: Kinderman,\n // A.J. and Monahan, J.F., \"Computer generation of random\n // variables using the ratio of uniform deviates\", ACM Trans\n // Math Software, 3, (1977), pp257-260.\n\n var $ = $B.args(\"normalvariate\", 3,\n {self: null, mu:null, sigma:null}, [\"self\", \"mu\", \"sigma\"],\n arguments, {}, null, null),\n self = $.self,\n mu = $.mu,\n sigma = $.sigma\n\n while(true){\n var u1 = self._random(),\n u2 = 1.0 - self._random(),\n z = NV_MAGICCONST * (u1 - 0.5) / u2,\n zz = z * z / 4.0\n if(zz <= -Math.log(u2)){break}\n }\n return mu + z * sigma\n}\n\nRandom.paretovariate = function(){\n /* Pareto distribution. alpha is the shape parameter.*/\n // Jain, pg. 495\n\n var $ = $B.args(\"paretovariate\", 2, {self: null, alpha:null},\n [\"self\", \"alpha\"], arguments, {}, null, null)\n\n var u = 1 - $.self._random()\n return 1 / Math.pow(u, 1 / $.alpha)\n}\n\nfunction is_integer(x){\n return _b_.isinstance(x, _b_.int) || (\n _b_.isinstance(x, _b_.float) &&\n x.valueOf() == Math.floor(x.valueOf()))\n}\n\nRandom.randint = function(self, a, b){\n var $ = $B.args('randint', 3,\n {self: null, a:null, b:null},\n ['self', 'a', 'b'],\n arguments, {}, null, null)\n if(! is_integer($.a)){\n throw _b_.ValueError.$factory(\"non-integer value for start\")\n }\n if(! is_integer($.b)){\n throw _b_.ValueError.$factory(\"non-integer value for stop\")\n }\n return Random.randrange($.self, $.a, $B.add($.b, 1))\n}\n\nRandom.random = function(self){\n var res = self._random()\n if(! Number.isInteger(res)){return new Number(res)}\n return res\n}\n\nRandom.randrange = function(){\n var $ = $B.args('randrange', 4,\n {self: null, x:null, stop:null, step:null},\n ['self', 'x', 'stop', 'step'],\n arguments, {stop:null, step:null}, null, null),\n self = $.self,\n _random = self._random\n\n if(! is_integer($.x)){\n throw _b_.ValueError.$factory(\"non-integer arg 1 for randrange()\")\n }\n if($.stop !== null && ! is_integer($.stop)){\n throw _b_.ValueError.$factory(\"non-integer arg 2 for randrange()\")\n }\n if($.step !== null && ! is_integer($.step)){\n throw _b_.ValueError.$factory(\"non-integer arg 3 for randrange()\")\n }\n\n if($.stop === null){\n var start = 0, stop = $.x.valueOf(), step = 1\n }else{\n var start = $.x.valueOf(), stop = $.stop.valueOf(),\n step = $.step === null ? 1 : $.step.valueOf()\n if(step == 0){throw _b_.ValueError.$factory('step cannot be 0')}\n }\n\n if((step > 0 && start >= stop) || (step < 0 && start <= stop)){\n throw _b_.ValueError.$factory(\"empty range for randrange() (\" +\n start + \", \" + stop + \", \" + step + \")\")\n }\n if(typeof start == 'number' && typeof stop == 'number' &&\n typeof step == 'number'){\n return start + step * Math.floor(_random() *\n Math.ceil((stop - start) / step))\n }else{\n var d = _b_.getattr(stop, '__sub__')(start)\n d = _b_.getattr(d, '__floordiv__')(step)\n // Force d to be a LongInt\n d = $B.long_int.$factory(d)\n // d is a long integer with n digits ; to choose a random number\n // between 0 and d the most simple is to take a random digit\n // at each position, except the first one\n var s = d.value,\n _len = s.length,\n res = Math.floor(_random() * (parseInt(s.charAt(0)) +\n (_len == 1 ? 0 : 1))) + ''\n var same_start = res.charAt(0) == s.charAt(0)\n for(var i = 1; i < _len; i++){\n if(same_start){\n // If it's the last digit, don't allow stop as valid\n if(i == _len - 1){\n res += Math.floor(_random() * parseInt(s.charAt(i))) + ''\n }else{\n res += Math.floor(_random() *\n (parseInt(s.charAt(i)) + 1)) + ''\n same_start = res.charAt(i) == s.charAt(i)\n }\n }else{\n res += Math.floor(_random() * 10) + ''\n }\n }\n var offset = {__class__: $B.long_int, value: res,\n pos: true}\n d = _b_.getattr(step, '__mul__')(offset)\n d = _b_.getattr(start, '__add__')(d)\n return _b_.int.$factory(d)\n }\n}\n\nRandom.sample = function(){\n /*\n Chooses k unique random elements from a population sequence or set.\n\n Returns a new list containing elements from the population while\n leaving the original population unchanged. The resulting list is\n in selection order so that all sub-slices will also be valid random\n samples. This allows raffle winners (the sample) to be partitioned\n into grand prize and second place winners (the subslices).\n\n Members of the population need not be hashable or unique. If the\n population contains repeats, then each occurrence is a possible\n selection in the sample.\n\n To choose a sample in a range of integers, use range as an argument.\n This is especially fast and space efficient for sampling from a\n large population: sample(range(10000000), 60)\n\n # Sampling without replacement entails tracking either potential\n # selections (the pool) in a list or previous selections in a set.\n\n # When the number of selections is small compared to the\n # population, then tracking selections is efficient, requiring\n # only a small set and an occasional reselection. For\n # a larger number of selections, the pool tracking method is\n # preferred since the list takes less space than the\n # set and it doesn't suffer from frequent reselections.'\n\n */\n var $ = $B.args('sample', 3, {self: null, population: null,k: null},\n ['self', 'population','k'], arguments, {}, null, null),\n self = $.self,\n population = $.population,\n k = $.k\n\n if(!_b_.hasattr(population, '__len__')){\n throw _b_.TypeError.$factory(\"Population must be a sequence or set. \" +\n \"For dicts, use list(d).\")\n }\n var n = _b_.getattr(population, '__len__')()\n\n if(k < 0 || k > n){\n throw _b_.ValueError.$factory(\"Sample larger than population\")\n }\n var result = [],\n setsize = 21 // size of a small set minus size of an empty list\n if(k > 5){\n setsize += Math.pow(4, Math.ceil(Math.log(k * 3, 4))) // table size for big sets\n }\n if(n <= setsize){\n // An n-length list is smaller than a k-length set\n if(Array.isArray(population)){\n var pool = population.slice()\n }else{var pool = _b_.list.$factory(population)}\n for(var i = 0; i < k; i++){ //invariant: non-selected at [0,n-i)\n var j = Random._randbelow(self, n - i)\n result[i] = pool[j]\n pool[j] = pool[n - i - 1] // move non-selected item into vacancy\n }\n }else{\n selected = {}\n for(var i = 0; i < k; i++){\n var j = Random._randbelow(self, n)\n while(selected[j] !== undefined){\n j = Random._randbelow(self, n)\n }\n selected[j] = true\n result[i] = Array.isArray(population) ? population[j] :\n _b_.getattr(population, '__getitem__')(j)\n }\n }\n return result\n}\n\nRandom.seed = function(){\n /*\n Initialize internal state from hashable object.\n\n None or no argument seeds from current time or from an operating\n system specific randomness source if available.\n\n If *a* is an int, all bits are used.\n */\n var $ = $B.args('seed', 3, {self: null, a: null, version: null},\n ['self', 'a', 'version'],\n arguments, {a: new Date(), version: 2}, null, null),\n self = $.self,\n a = $.a,\n version = $.version\n\n if(version == 1){a = _b_.hash(a)}\n else if(version == 2){\n if(_b_.isinstance(a, _b_.str)){\n a = _b_.int.from_bytes(_b_.bytes.$factory(a, 'utf-8'), 'big')\n }else if(_b_.isinstance(a, [_b_.bytes, _b_.bytearray])){\n a = _b_.int.from_bytes(a, 'big')\n }else if(!_b_.isinstance(a, _b_.int)){\n throw _b_.TypeError.$factory('wrong argument')\n }\n if(a.__class__ === $B.long_int){\n // In this implementation, seed() only accepts safe integers\n // Generate a random one from the underlying string value,\n // using an arbitrary seed (99) to always return the same\n // integer\n var numbers = a.value,\n res = '',\n pos\n self._random.seed(99)\n for(var i = 0; i < 17; i++){\n pos = parseInt(self._random() * numbers.length)\n res += numbers.charAt(pos)\n }\n a = parseInt(res)\n }\n }else{\n throw _b_.ValueError.$factory('version can only be 1 or 2')\n }\n\n self._random.seed(a)\n gauss_next = null\n}\n\nRandom.setstate = function(state){\n // Restore internal state from object returned by getstate().\n var $ = $B.args('setstate', 2, {self: null, state:null}, ['self', 'state'],\n arguments, {}, null, null),\n self = $.self\n var state = self._random.getstate()\n if(! Array.isArray($.state)){\n throw _b_.TypeError.$factory('state must be a list, not ' +\n $B.class_name($.state))\n }\n if($.state.length < state.length){\n throw _b_.ValueError.$factory(\"need more than \" + $.state.length +\n \" values to unpack\")\n }else if($.state.length > state.length){\n throw _b_.ValueError.$factory(\"too many values to unpack (expected \" +\n state.length + \")\")\n }\n if($.state[0] != 3){\n throw _b_.ValueError.$factory(\"ValueError: state with version \" +\n $.state[0] + \" passed to Random.setstate() of version 3\")\n }\n var second = _b_.list.$factory($.state[1])\n if(second.length !== state[1].length){\n throw _b_.ValueError.$factory('state vector is the wrong size')\n }\n for(var i = 0; i < second.length; i++){\n if(typeof second[i] != 'number'){\n throw _b_.ValueError.$factory('state vector items must be integers')\n }\n }\n self._random.setstate($.state)\n}\n\nRandom.shuffle = function(x, random){\n /*\n x, random = random.random -> shuffle list x in place; return None.\n\n Optional arg random is a 0-argument function returning a random\n float in [0.0, 1.0); by default, the standard random.random.\n */\n\n var $ = $B.args('shuffle', 3, {self: null, x: null, random: null},\n ['self', 'x','random'],\n arguments, {random: null}, null, null),\n self = $.self,\n x = $.x,\n random = $.random\n\n if(random === null){random = self._random}\n\n if(Array.isArray(x)){\n for(var i = x.length - 1; i >= 0;i--){\n var j = Math.floor(random() * (i + 1)),\n temp = x[j]\n x[j] = x[i]\n x[i] = temp\n }\n }else{\n var len = _b_.getattr(x, '__len__')(), temp,\n x_get = _b_.getattr(x, '__getitem__'),\n x_set = _b_.getattr(x, '__setitem__')\n\n for(i = len - 1; i >= 0; i--){\n var j = Math.floor(random() * (i + 1)),\n temp = x_get(j)\n x_set(j, x_get(i))\n x_set(i, temp)\n }\n }\n return _b_.None\n}\n\nRandom.triangular = function(){\n /*\n Triangular distribution.\n\n Continuous distribution bounded by given lower and upper limits,\n and having a given mode value in-between.\n\n http://en.wikipedia.org/wiki/Triangular_distribution\n */\n var $ = $B.args('triangular', 4,\n {self: null, low: null, high: null, mode: null},\n ['self', 'low', 'high', 'mode'],\n arguments, {low: 0, high: 1, mode: null}, null, null),\n low = $.low,\n high = $.high,\n mode = $.mode\n\n var u = $.self._random(),\n c = mode === null ? 0.5 : (mode - low) / (high - low)\n if(u > c){\n u = 1 - u\n c = 1 - c\n var temp = low\n low = high\n high = temp\n }\n return low + (high - low) * Math.pow(u * c, 0.5)\n}\n\nRandom.uniform = function(){\n var $ = $B.args('uniform', 3, {self: null, a: null, b: null},\n ['self', 'a', 'b'], arguments, {}, null, null),\n a = $B.$GetInt($.a),\n b = $B.$GetInt($.b)\n\n return a + (b - a) * $.self._random()\n}\n\nRandom.vonmisesvariate = function(){\n /* Circular data distribution.\n\n mu is the mean angle, expressed in radians between 0 and 2*pi, and\n kappa is the concentration parameter, which must be greater than or\n equal to zero. If kappa is equal to zero, this distribution reduces\n to a uniform random angle over the range 0 to 2*pi.\n\n */\n // mu: mean angle (in radians between 0 and 2*pi)\n // kappa: concentration parameter kappa (>= 0)\n // if kappa = 0 generate uniform random angle\n\n // Based upon an algorithm published in: Fisher, N.I.,\n // \"Statistical Analysis of Circular Data\", Cambridge\n // University Press, 1993.\n\n // Thanks to Magnus Kessler for a correction to the\n // implementation of step 4.\n\n var $ = $B.args('vonmisesvariate', 3,\n {self: null, mu: null, kappa:null}, ['self', 'mu', 'kappa'],\n arguments, {}, null, null),\n self = $.self,\n mu = $.mu,\n kappa = $.kappa,\n TWOPI = 2*Math.PI\n\n if(kappa <= 1e-6){return TWOPI * self._random()}\n\n var s = 0.5 / kappa,\n r = s + Math.sqrt(1.0 + s * s)\n\n while(true){\n var u1 = self._random(),\n z = Math.cos(Math.PI * u1),\n d = z / (r + z),\n u2 = self._random()\n if((u2 < 1.0 - d * d) ||\n (u2 <= (1.0 - d) * Math.exp(d))){\n break\n }\n }\n var q = 1.0 / r,\n f = (q + z) / (1.0 + q * z),\n u3 = self._random()\n if(u3 > 0.5){var theta = (mu + Math.acos(f)) % TWOPI}\n else{var theta = (mu - Math.acos(f)) % TWOPI}\n return theta\n}\n\nRandom.weibullvariate = function(){\n /*Weibull distribution.\n\n alpha is the scale parameter and beta is the shape parameter.\n\n */\n // Jain, pg. 499; bug fix courtesy Bill Arms\n var $ = $B.args(\"weibullvariate\", 3,\n {self: null, alpha: null, beta: null},\n [\"self\", \"alpha\", \"beta\"], arguments, {}, null, null)\n\n var u = 1 - $.self._random()\n return $.alpha * Math.pow(-Math.log(u), 1 / $.beta)\n}\n\n$B.set_func_names(Random, \"random\")\n\nvar $module = Random.$factory()\nfor(var attr in Random){\n $module[attr] = (function(x){\n return function(){return Random[x]($module, ...arguments)}\n })(attr)\n $module[attr].$infos = Random[attr].$infos\n}\n\n$module.Random = Random\n\nvar SystemRandom = $B.make_class(\"SystemRandom\",\n function(){\n return {__class__: SystemRandom}\n }\n)\nSystemRandom.__getattribute__ = function(){\n throw $B.builtins.NotImplementedError.$factory()\n}\n\n$module.SystemRandom = SystemRandom\n\nreturn $module\n\n})(__BRYTHON__)\n\n"], "unicodedata": [".js", "// Implementation of unicodedata\n\nvar $module = (function($B){\n\n var _b_ = $B.builtins\n\n // Load unicode table if not already loaded\n if($B.unicodedb === undefined){\n var xhr = new XMLHttpRequest\n xhr.open(\"GET\",\n $B.brython_path + \"unicode.txt\", false)\n xhr.onreadystatechange = function(){\n if(this.readyState == 4){\n if(this.status == 200){\n $B.unicodedb = this.responseText\n }else{\n console.log(\"Warning - could not \" +\n \"load unicode.txt\")\n }\n }\n }\n xhr.send()\n }\n\n function _info(chr){\n var ord = chr.codePointAt(0),\n hex = ord.toString(16).toUpperCase()\n while(hex.length < 4){hex = \"0\" + hex}\n var re = new RegExp(\"^\" + hex +\";(.+?);(.*?);(.*?);(.*?);(.*?);(.*);(.*);(.*)$\",\n \"m\"),\n search = re.exec($B.unicodedb)\n if(search === null){\n return null\n }else{\n return {\n name: search[1],\n category: search[2],\n combining: search[3],\n bidirectional: search[4],\n decomposition: search[5],\n decimal: search[6],\n digit: search[7],\n numeric: search[8]\n }\n }\n }\n\n function bidirectional(chr){\n var search = _info(chr)\n if(search === null){\n console.log(\"error\", chr, hex)\n throw _b_.KeyError.$factory(chr)\n }\n return search.bidirectional\n }\n\n function category(chr){\n // Returns the general category assigned to the character chr as\n // string.\n if($B.is_unicode_cn(chr.codePointAt(0))){ // in unicode_data.js\n return \"Cn\"\n }\n var search = _info(chr)\n if(search === null){\n console.log(\"error\", chr)\n throw _b_.KeyError.$factory(chr)\n }\n return search.category\n }\n\n function combining(chr){\n // Returns the general category assigned to the character chr as\n // string.\n var search = _info(chr)\n if(search === null){\n console.log(\"error\", chr)\n throw _b_.KeyError.$factory(chr)\n }\n return parseInt(search.combining)\n }\n\n function decimal(chr, _default){\n // Returns the decimal value assigned to the character chr as integer.\n // If no such value is defined, default is returned, or, if not given,\n // ValueError is raised.\n var search = _info(chr)\n if(search === null){\n console.log(\"error\", chr)\n throw _b_.KeyError.$factory(chr)\n }\n return parseInt(search.decimal)\n }\n\n function decomposition(chr, _default){\n // Returns the decimal value assigned to the character chr as integer.\n // If no such value is defined, default is returned, or, if not given,\n // ValueError is raised.\n var search = _info(chr)\n if(search === null){\n console.log(\"error\", chr)\n throw _b_.KeyError.$factory(chr)\n }\n return search.decomposition\n }\n\n function digit(chr, _default){\n // Returns the decimal value assigned to the character chr as integer.\n // If no such value is defined, default is returned, or, if not given,\n // ValueError is raised.\n var search = _info(chr)\n if(search === null){\n console.log(\"error\", chr)\n throw _b_.KeyError.$factory(chr)\n }\n return parseInt(search.digit)\n }\n\n function lookup(name){\n // Look up character by name. If a character with the given name is\n // found, return the corresponding character. If not found, KeyError\n // is raised.\n var re = new RegExp(\"^([0-9A-F]+);\" +\n name + \";(.*)$\", \"m\")\n search = re.exec($B.unicodedb)\n if(search === null){\n throw _b_.KeyError.$factory(\"undefined character name '\" +\n name + \"'\")\n }\n var res = parseInt(search[1], 16)\n return _b_.chr(res)\n }\n\n function name(chr, _default){\n // Returns the name assigned to the character chr as a string. If no\n // name is defined, default is returned, or, if not given, ValueError\n // is raised.\n var search = _info(chr)\n if(search === null){\n if(_default){return _default}\n throw _b_.KeyError.$factory(\"undefined character name '\" +\n chr + \"'\")\n }\n return search.name\n }\n\n function _norm(form, chr){\n var search = _info(chr)\n if(search === null){\n throw _b_.KeyError.$factory(chr)\n }\n switch(form){\n case \"NFC\":\n return chr\n case \"NFD\":\n var decomp = decomposition(chr),\n parts = decomp.split(\" \"),\n res = \"\"\n if(parts[0].startsWith(\"<\")){\n return chr\n }\n parts.forEach(function(part){\n if(! part.startsWith(\"<\")){\n res += _b_.chr(parseInt(part, 16))\n }\n })\n return res\n case \"NFKC\":\n var decomp = decomposition(chr),\n parts = decomp.split(\" \")\n if(parts[0] == \"\"){\n var res = \"\"\n parts.slice(1).forEach(function(part){\n res += _b_.chr(parseInt(part, 16))\n })\n return res\n }\n return chr\n case \"NFKD\":\n var decomp = decomposition(chr),\n parts = decomp.split(\" \")\n if(parts[0] == \"\"){\n var res = \"\"\n parts.slice(1).forEach(function(part){\n res += _b_.chr(parseInt(part, 16))\n })\n return res\n }\n return chr\n\n default:\n throw _b_.ValueError.$factory(\"invalid normalization form\")\n }\n }\n\n function normalize(form, unistr){\n var res = \"\"\n for(var i = 0, len = unistr.length; i < len; i++){\n res += _norm(form, unistr.charAt(i))\n }\n return res\n }\n\n function numeric(chr, _default){\n // Returns the decimal value assigned to the character chr as integer.\n // If no such value is defined, default is returned, or, if not given,\n // ValueError is raised.\n var search = _info(chr)\n if(search === null){\n if(_default){return _default}\n throw _b_.KeyError.$factory(chr)\n }\n return new Number(eval(search.numeric))\n }\n\n var module = {\n bidirectional: bidirectional,\n category: category,\n combining: combining,\n decimal: decimal,\n decomposition: decomposition,\n digit: digit,\n lookup: lookup,\n name: name,\n normalize: normalize,\n numeric: numeric,\n unidata_version: \"11.0.0\"\n }\n module.ucd_3_2_0 = {}\n for(var key in module){\n if(key == \"unidata_version\"){\n module.ucd_3_2_0[key] = '3.2.0'\n }else{\n module.ucd_3_2_0[key] = module[key] // approximation...\n }\n }\n return module\n\n})(__BRYTHON__)"], "_aio": [".js", "// Replacement for asyncio.\n//\n// CPython asyncio can't be implemented for Brython because it relies on\n// blocking function (eg run(), run_until_complete()), and such functions\n// can't be defined in Javascript. It also manages an event loop, and a\n// browser only has its own built-in event loop.\n//\n// This module exposes functions whose result can be \"await\"-ed inside\n// asynchrounous functions defined by \"async def\".\n\nvar $module = (function($B){\n\nvar _b_ = $B.builtins\n\nvar responseType = {\n \"text\": \"text\",\n \"binary\": \"arraybuffer\",\n \"dataURL\": \"arraybuffer\"\n}\n\nfunction handle_kwargs(kw, method){\n var data,\n cache = \"no-cache\",\n format = \"text\",\n headers = {},\n timeout = {}\n for(var key in kw.$string_dict){\n if(key == \"data\"){\n var params = kw.$string_dict[key][0]\n if(typeof params == \"string\"){\n data = params\n }else{\n if(params.__class__ !== _b_.dict){\n throw _b_.TypeError.$factory(\"wrong type for data, \" +\n \"expected dict or str, got \" + $B.class_name(params))\n }\n params = params.$string_dict\n var items = []\n for(var key in params){\n items.push(encodeURIComponent(key) + \"=\" +\n encodeURIComponent(params[key][0]))\n }\n data = items.join(\"&\")\n }\n }else if(key == \"headers\"){\n headers = _b_.dict.$to_obj(kw.$string_dict[key][0])\n }else if(key.startsWith(\"on\")){\n var event = key.substr(2)\n if(event == \"timeout\"){\n timeout.func = kw.$string_dict[key][0]\n }else{\n ajax.bind(self, event, kw.$string_dict[key][0])\n }\n }else if(key == \"timeout\"){\n timeout.seconds = kw.$string_dict[key][0]\n }else if(key == \"cache\"){\n cache = kw.$string_dict[key][0]\n }else if(key == \"format\"){\n format = kw.$string_dict[key][0]\n }\n }\n if(method == \"post\"){\n // For POST requests, set default header\n if(! headers.hasOwnProperty(\"Content-type\")){\n headers[\"Content-Type\"] = \"application/x-www-form-urlencoded\"\n }\n if(data && !headers.hasOwnProperty(\"Content-Length\")){\n headers[\"Content-Length\"] = data.length\n }\n }\n return {\n body: data,\n cache: cache,\n format: format,\n timeout: timeout,\n headers: headers\n }\n}\n\nfunction ajax(){\n var $ = $B.args(\"ajax\", 2, {method: null, url: null},\n [\"method\", \"url\"], arguments, {},\n null, \"kw\"),\n method = $.method.toUpperCase(),\n url = $.url,\n kw = $.kw\n var args = handle_kwargs(kw, \"get\")\n if(! args.cache){\n url = \"?ts\" + (new Date()).getTime() + \"=0\"\n }\n if(args.body && method == \"GET\"){\n url = url + (args.cache ? \"?\" : \"&\") + args.body\n }\n var func = function(){\n return new Promise(function(resolve, reject){\n var xhr = new XMLHttpRequest()\n xhr.open(method, url, true)\n for(key in args.headers){\n xhr.setRequestHeader(key, args.headers[key])\n }\n xhr.format = args.format\n xhr.responseType = responseType[args.format]\n xhr.onreadystatechange = function(){\n if(this.readyState == 4){\n this.__class__ = HTTPRequest\n resolve(this)\n }\n }\n if(method == \"POST\" && args.body){\n xhr.send(args.body)\n }else{\n xhr.send()\n }\n })\n }\n func.$infos = {\n __name__: \"ajax_\" + method\n }\n return {\n __class__: $B.coroutine,\n $args: [url, args],\n $func: func\n }\n}\n\nfunction event(){\n // event(element, *names) is a Promise on the events \"names\" happening on\n // the element. This promise always resolves (never rejects) with the\n // first triggered DOM event.\n var $ = $B.args(\"event\", 1, {element: null},\n [\"element\"], arguments, {}, \"names\", null),\n element = $.element,\n names = $.names\n return new Promise(function(resolve){\n var callbacks = []\n names.forEach(function(name){\n var callback = function(evt){\n // When one of the handled events is triggered, all bindings\n // are removed\n callbacks.forEach(function(items){\n $B.DOMNode.unbind(element, items[0], items[1])\n })\n resolve($B.$DOMEvent(evt))\n }\n callbacks.push([name, callback])\n $B.DOMNode.bind(element, name, callback)\n })\n })\n}\n\nvar HTTPRequest = $B.make_class(\"Request\")\n\nHTTPRequest.data = _b_.property.$factory(function(self){\n if(self.format == \"binary\"){\n var view = new Uint8Array(self.response)\n return _b_.bytes.$factory(Array.from(view))\n }else if(self.format == \"text\"){\n return self.responseText\n }else if(self.format == \"dataURL\"){\n var base64String = btoa(String.fromCharCode.apply(null,\n new Uint8Array(self.response)))\n return \"data:\" + self.getResponseHeader(\"Content-Type\") +\n \";base64,\" + base64String\n }\n})\n\nHTTPRequest.response_headers = _b_.property.$factory(function(self){\n var headers = self.getAllResponseHeaders()\n if(headers === null){return _b_.None}\n var res = $B.empty_dict()\n if(headers.length > 0){\n // Convert the header string into an array\n // of individual headers\n var lines = headers.trim().split(/[\\r\\n]+/)\n // Create a map of header names to values\n lines.forEach(function(line){\n var parts = line.split(': ')\n var header = parts.shift()\n var value = parts.join(': ')\n _b_.dict.$setitem(res, header, value)\n })\n }\n return res\n})\n\nfunction get(){\n return ajax.bind(null, \"GET\").apply(null, arguments)\n}\n\nfunction iscoroutine(f){\n return f.__class__ === $B.coroutine\n}\n\nfunction iscoroutinefunction(f){\n return (f.$infos.__code__.co_flags & 128) != 0\n}\n\nfunction post(){\n return ajax.bind(null, \"POST\").apply(null, arguments)\n}\n\nfunction run(coro){\n var handle_success = function(){\n $B.leave_frame()\n },\n handle_error = function(err){\n // coro.$stack is a snapshot of the frames stack when the async\n // function was called. Restore it to get the correct call tree\n console.log(\"Exception in asynchronous function\")\n err.$stack = coro.$stack.concat([$B.last(err.$stack)])\n $B.handle_error(err)\n }\n\n var $ = $B.args(\"run\", 3, {coro: null, onsuccess: null, onerror: null},\n [\"coro\", \"onsuccess\", \"onerror\"], arguments,\n {onsuccess: handle_success, onerror: handle_error},\n null, null),\n coro = $.coro,\n onsuccess = $.onsuccess,\n onerror = $.onerror\n\n if(onerror !== handle_error){\n function error_func(exc){\n try{\n onerror(exc)\n }catch(err){\n handle_error(err)\n }\n }\n }else{\n error_func = handle_error\n }\n var save_stack = $B.frames_stack.slice()\n $B.coroutine.send(coro).then(onsuccess).catch(error_func)\n $B.frames_stack = save_stack\n return _b_.None\n}\n\nfunction sleep(seconds){\n var func = function(){\n return new Promise(resolve => setTimeout(\n function(){resolve(_b_.None)}, 1000 * seconds))\n }\n func.$infos = {\n __name__: \"sleep\"\n }\n return {\n __class__: $B.coroutine,\n $args: [seconds],\n $func: func\n }\n}\n\nreturn {\n ajax: ajax,\n event: event,\n get: get,\n iscoroutine: iscoroutine,\n iscoroutinefunction: iscoroutinefunction,\n post: post,\n run: run,\n sleep: sleep\n}\n\n})(__BRYTHON__)\n"], "_ajax": [".js", "// ajax\nvar $module = (function($B){\n\neval($B.InjectBuiltins())\nvar $N = $B.builtins.None,\n _b_ = $B.builtins\n\nvar add_to_res = function(res, key, val) {\n if(isinstance(val, list)){\n for (j = 0; j < val.length; j++) {\n add_to_res(res, key, val[j])\n }\n }else if (val instanceof File || val instanceof Blob){\n res.append(key, val)\n }else{res.append(key,str.$factory(val))}\n}\n\nfunction set_timeout(self, timeout){\n if(timeout.seconds !== undefined){\n self.js.$requestTimer = setTimeout(\n function() {\n self.js.abort()\n if(timeout.func){\n timeout.func()\n }\n },\n timeout.seconds * 1000)\n }\n}\n\nfunction _read(req){\n var xhr = req.js,\n res\n if(xhr.responseType == \"json\"){\n return $B.structuredclone2pyobj(xhr.response)\n }\n var abuf = new Uint8Array(xhr.response)\n res = []\n for(var i = 0, len = abuf.length; i < len; i++){\n res.push(abuf[i])\n }\n var b = _b_.bytes.$factory(res)\n\n if(xhr.mode == \"binary\"){\n return b\n }else{\n var encoding = xhr.encoding || \"utf-8\"\n return _b_.bytes.decode(b, encoding)\n }\n}\n\nfunction handle_kwargs(self, kw, method){\n var data,\n encoding,\n headers,\n cache,\n mode = \"text\",\n timeout = {}\n for(var key in kw.$string_dict){\n if(key == \"data\"){\n var params = kw.$string_dict[key][0]\n if(typeof params == \"string\"){\n data = params\n }else if(params.__class__ === _b_.dict){\n params = params.$string_dict\n var items = []\n for(var key in params){\n items.push(encodeURIComponent(key) + \"=\" +\n encodeURIComponent(params[key][0]))\n }\n data = items.join(\"&\")\n }else{\n throw _b_.TypeError.$factory(\"wrong type for data: \" +\n $B.class_name(params))\n }\n }else if(key == \"encoding\"){\n encoding = kw.$string_dict[key][0]\n self.js.encoding = encoding\n }else if(key == \"headers\"){\n headers = kw.$string_dict[key].$string_dict\n for(var key in headers){\n self.js.setRequestHeader(key, headers[key][0])\n }\n }else if(key.startsWith(\"on\")){\n var event = key.substr(2)\n if(event == \"timeout\"){\n timeout.func = kw.$string_dict[key][0]\n }else{\n var f = kw.$string_dict[key][0]\n ajax.bind(self, event, f)\n }\n }else if(key == \"mode\"){\n var mode = kw.$string_dict[key][0]\n if(mode == \"json\"){\n self.js.responseType = \"json\"\n }else{\n self.js.responseType = \"arraybuffer\"\n if(mode != \"text\" && mode != \"binary\"){\n throw _b_.ValueError.$factory(\"invalid mode: \" + mode)\n }\n }\n self.js.mode = mode\n }else if(key == \"timeout\"){\n timeout.seconds = kw.$string_dict[key][0]\n }else if(key == \"cache\"){\n cache = kw.$string_dict[key][0]\n }\n }\n if(encoding && mode != \"text\"){\n throw _b_.ValueError.$factory(\"encoding not supported for mode \" +\n mode)\n }\n if((method == \"post\" || method == \"put\") && ! headers){\n // For POST requests, set default header\n self.js.setRequestHeader(\"Content-type\",\n \"application/x-www-form-urlencoded\")\n }\n return {\n cache: cache,\n data:data,\n encoding: encoding,\n mode: mode,\n timeout: timeout\n }\n}\n\nvar ajax = {\n __class__: _b_.type,\n __mro__: [_b_.object],\n\n __repr__ : function(self){return ''},\n __str__ : function(self){return ''},\n\n $infos: {\n __module__: \"builtins\",\n __name__: \"ajax\"\n },\n\n __getattribute__: function(self, attr){\n if(ajax[attr] !== undefined){\n return function(){\n return ajax[attr].call(null, self, ...arguments)\n }\n }else if(self.js[attr] !== undefined){\n if(typeof self.js[attr] == \"function\"){\n return function(){\n if(attr == \"setRequestHeader\"){\n self.$has_request_header = true\n }else if(attr == \"open\"){\n self.$method = arguments[0]\n }\n return self.js[attr](...arguments)\n }\n }else{\n return self.js[attr]\n }\n }else if(attr == \"text\"){\n return self.js.responseText\n }else if(attr == \"xml\"){\n return self.js.responseXML\n }\n },\n\n\n bind: function(self, evt, func){\n // req.bind(evt,func) is the same as req.onevt = func\n self.js['on' + evt] = function(){\n try{\n return func.apply(null, arguments)\n }catch(err){\n if(err.__class__ !== undefined){\n var msg = _b_.getattr(err, 'info') +\n '\\n' + err.__class__.$infos.__name__\n if(err.args){msg += ': ' + err.args[0]}\n try{getattr($B.stderr, \"write\")(msg)}\n catch(err){console.log(msg)}\n }else{\n try{getattr($B.stderr, \"write\")(err)}\n catch(err1){console.log(err)}\n }\n }\n }\n return $N\n },\n\n send: function(self, params){\n // params can be Python dictionary or string\n var res = ''\n if(!params){\n self.js.send()\n return $N\n }else if(isinstance(params, str)){\n res = params\n }else if(isinstance(params, dict)){\n if(self.headers['content-type'] == 'multipart/form-data'){\n // The FormData object serializes the data in the 'multipart/form-data'\n // content-type so we may as well override that header if it was set\n // by the user.\n res = new FormData()\n var items = _b_.list.$factory(_b_.dict.items(params))\n for(var i = 0, len = items.length; i < len; i++){\n add_to_res(res, str.$factory(items[i][0]), items[i][1])\n }\n }else{\n if(self.$method && self.$method.toUpperCase() == \"POST\" &&\n ! self.$has_request_header){\n self.js.setRequestHeader(\"Content-Type\",\n \"application/x-www-form-urlencoded\")\n }\n var items = _b_.list.$factory(_b_.dict.items(params))\n for(var i = 0, len = items.length; i < len; i++){\n var key = encodeURIComponent(str.$factory(items[i][0]));\n if(isinstance(items[i][1], list)){\n for (j = 0; j < items[i][1].length; j++) {\n res += key +'=' +\n encodeURIComponent(str.$factory(items[i][1][j])) + '&'\n }\n }else{\n res += key + '=' +\n encodeURIComponent(str.$factory(items[i][1])) + '&'\n }\n }\n res = res.substr(0, res.length - 1)\n }\n }else{\n throw _b_.TypeError.$factory(\n \"send() argument must be string or dictionary, not '\" +\n str.$factory(params.__class__) + \"'\")\n }\n self.js.send(res)\n return $N\n },\n\n set_header: function(self,key,value){\n self.js.setRequestHeader(key,value)\n self.headers[key.toLowerCase()] = value.toLowerCase()\n },\n\n set_timeout: function(self, seconds, func){\n self.js.$requestTimer = setTimeout(\n function() {self.js.abort();func()},\n seconds * 1000)\n }\n\n}\n\najax.$factory = function(){\n\n if(window.XMLHttpRequest){// code for IE7+, Firefox, Chrome, Opera, Safari\n var xmlhttp = new XMLHttpRequest()\n }else{// code for IE6, IE5\n var xmlhttp = new ActiveXObject(\"Microsoft.XMLHTTP\")\n }\n xmlhttp.onreadystatechange = function(){\n // here, \"this\" refers to xmlhttp\n var state = this.readyState\n if(this.responseType == \"\" || this.responseType == \"text\"){\n res.js.text = this.responseText\n }\n var timer = this.$requestTimer\n if(state == 0 && this.onuninitialized){this.onuninitialized(res)}\n else if(state == 1 && this.onloading){this.onloading(res)}\n else if(state == 2 && this.onloaded){this.onloaded(res)}\n else if(state == 3 && this.oninteractive){this.oninteractive(res)}\n else if(state == 4 && this.oncomplete){\n if(timer !== null){window.clearTimeout(timer)}\n this.oncomplete(res)\n }\n }\n var res = {\n __class__: ajax,\n js: xmlhttp,\n headers: {}\n }\n return res\n}\n\nfunction _request_without_body(method){\n var $ = $B.args(method, 3, {method: null, url: null, blocking: null},\n [\"method\", \"url\", \"blocking\"], arguments, {blocking: false},\n null, \"kw\"),\n method = $.method,\n url = $.url,\n async = !$.blocking,\n kw = $.kw\n var self = ajax.$factory(),\n items = handle_kwargs(self, kw, method),\n qs = items.data,\n timeout = items.timeout\n set_timeout(self, timeout)\n if(qs){\n url += \"?\" + qs\n }\n if(! (items.cache === true)){\n url += (qs ? \"&\" : \"?\") + (new Date()).getTime()\n }\n // Add function read() to return str or bytes according to mode\n self.js.read = function(){\n return _read(self)\n }\n self.js.open(method.toUpperCase(), url, async)\n self.js.send()\n}\n\nfunction _request_with_body(method){\n var $ = $B.args(method, 3, {method: null, url: null, blocking: null},\n [\"method\", \"url\", \"blocking\"], arguments, {blocking: false},\n null, \"kw\"),\n method = $.method,\n url = $.url,\n async = !$.blocking,\n kw = $.kw\n\n var self = ajax.$factory()\n self.js.open(method.toUpperCase(), url, async)\n var items = handle_kwargs(self, kw, method),\n data = items.data,\n timeout = items.timeout\n set_timeout(self, timeout)\n // Add function read() to return str or bytes according to mode\n self.js.read = function(){\n return _read(self)\n }\n self.js.send(data)\n}\n\nfunction _delete(){\n _request_without_body.call(null, \"delete\", ...arguments)\n}\n\nfunction get(){\n _request_without_body.call(null, \"get\", ...arguments)\n}\n\nfunction head(){\n _request_without_body.call(null, \"head\", ...arguments)\n}\n\nfunction options(){\n _request_without_body.call(null, \"options\", ...arguments)\n}\n\nfunction post(){\n _request_with_body.call(null, \"post\", ...arguments)\n}\n\nfunction put(){\n _request_with_body.call(null, \"put\", ...arguments)\n}\n\nfunction file_upload(){\n // ajax.file_upload(url, file, method=\"POST\", **callbacks)\n var $ = $B.args(\"file_upload\", 2, {url: null, \"file\": file},\n [\"url\", \"file\"], arguments, {}, null, \"kw\"),\n url = $.url,\n file = $.file,\n kw = $.kw\n\n var self = ajax.$factory(),\n method = 'POST',\n field_name = 'filetosave'\n\n if(kw.$string_dict.method !== undefined){\n method = kw.$string_dict.method[0]\n }\n\n if(kw.$string_dict.field_name !== undefined){\n field_name = kw.$string_dict.field_name[0]\n }\n\n var formdata = new FormData()\n formdata.append(field_name, file, file.name)\n\n self.js.open(method, url, True)\n self.js.send(formdata)\n\n for(key in kw.$string_dict){\n if(key.startsWith(\"on\")){\n ajax.bind(self, key.substr(2), kw.$string_dict[key][0])\n }\n }\n}\n\n$B.set_func_names(ajax)\n\nreturn {\n ajax: ajax,\n Ajax: ajax,\n delete: _delete,\n file_upload: file_upload,\n get: get,\n head: head,\n options: options,\n post: post,\n put: put\n}\n\n})(__BRYTHON__)\n"], "_base64": [".js", "var $module=(function($B){\n\nvar _b_ = $B.builtins,\n _keyStr = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\"\n\nfunction make_alphabet(altchars){\n var alphabet = _keyStr\n if(altchars !== undefined && altchars !== _b_.None){\n // altchars is an instance of Python bytes\n var source = altchars.source\n alphabet = alphabet.substr(0,alphabet.length-3) +\n _b_.chr(source[0]) + _b_.chr(source[1]) + '='\n }\n return alphabet\n}\n\nvar Base64 = {\n error: function(){return 'binascii_error'},\n\n encode: function(bytes, altchars){\n\n var input = bytes.source,\n output = \"\",\n chr1, chr2, chr3, enc1, enc2, enc3, enc4\n var i = 0\n\n var alphabet = make_alphabet(altchars)\n\n while(i < input.length){\n\n chr1 = input[i++]\n chr2 = input[i++]\n chr3 = input[i++]\n\n enc1 = chr1 >> 2\n enc2 = ((chr1 & 3) << 4) | (chr2 >> 4)\n enc3 = ((chr2 & 15) << 2) | (chr3 >> 6)\n enc4 = chr3 & 63\n\n if(isNaN(chr2)){\n enc3 = enc4 = 64\n }else if(isNaN(chr3)){\n enc4 = 64\n }\n\n output = output + alphabet.charAt(enc1) +\n alphabet.charAt(enc2) +\n alphabet.charAt(enc3) +\n alphabet.charAt(enc4)\n\n }\n return _b_.bytes.$factory(output, 'utf-8', 'strict')\n },\n\n\n decode: function(bytes, altchars, validate){\n var output = [],\n chr1, chr2, chr3,\n enc1, enc2, enc3, enc4\n\n var alphabet = make_alphabet(altchars)\n\n var input = bytes.source\n\n // If validate is set, check that all characters in input\n // are in the alphabet\n var _input = ''\n var padding = 0\n for(var i = 0, len = input.length; i < len; i++){\n var car = String.fromCharCode(input[i])\n var char_num = alphabet.indexOf(car)\n if(char_num == -1){\n if(validate){throw Base64.error(\"Non-base64 digit found: \" +\n car)}\n }else if(char_num == 64 && i < input.length - 2){\n if(validate){throw Base64.error(\"Non-base64 digit found: \" +\n car)}\n }else if(char_num == 64 && i >= input.length - 2){\n padding++\n _input += car\n }else{\n _input += car\n }\n }\n input = _input\n if(_input.length == padding){return _b_.bytes.$factory([])}\n if( _input.length % 4 > 0){throw Base64.error(\"Incorrect padding\")}\n\n var i = 0\n while(i < input.length){\n\n enc1 = alphabet.indexOf(input.charAt(i++))\n enc2 = alphabet.indexOf(input.charAt(i++))\n enc3 = alphabet.indexOf(input.charAt(i++))\n enc4 = alphabet.indexOf(input.charAt(i++))\n\n chr1 = (enc1 << 2) | (enc2 >> 4)\n chr2 = ((enc2 & 15) << 4) | (enc3 >> 2)\n chr3 = ((enc3 & 3) << 6) | enc4\n\n output.push(chr1)\n\n if(enc3 != 64){output.push(chr2)}\n if(enc4 != 64){output.push(chr3)}\n\n }\n // return Python bytes\n return _b_.bytes.$factory(output, 'utf-8', 'strict')\n\n },\n\n _utf8_encode: function(string) {\n string = string.replace(/\\r\\n/g, \"\\n\")\n var utftext = \"\";\n\n for(var n = 0; n < string.length; n++){\n\n var c = string.charCodeAt(n)\n\n if(c < 128){\n utftext += String.fromCharCode(c)\n }else if((c > 127) && (c < 2048)){\n utftext += String.fromCharCode((c >> 6) | 192)\n utftext += String.fromCharCode((c & 63) | 128)\n }else{\n utftext += String.fromCharCode((c >> 12) | 224)\n utftext += String.fromCharCode(((c >> 6) & 63) | 128)\n utftext += String.fromCharCode((c & 63) | 128)\n }\n\n }\n\n return utftext\n },\n\n _utf8_decode: function(utftext) {\n var string = \"\",\n i = 0,\n c = c1 = c2 = 0\n\n while(i < utftext.length){\n\n c = utftext.charCodeAt(i)\n\n if(c < 128){\n string += String.fromCharCode(c)\n i++\n }else if((c > 191) && (c < 224)){\n c2 = utftext.charCodeAt(i + 1)\n string += String.fromCharCode(((c & 31) << 6) | (c2 & 63))\n i += 2\n }else{\n c2 = utftext.charCodeAt(i + 1)\n c3 = utftext.charCodeAt(i + 2)\n string += String.fromCharCode(\n ((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63))\n i += 3\n }\n\n }\n\n return string\n }\n\n}\n\nreturn {Base64:Base64}\n}\n\n)(__BRYTHON__)"], "_binascii": [".js", "var $module=(function($B){\n\nvar _b_ = $B.builtins,\n _keyStr = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\"\n\nvar error = $B.make_class(\"error\", _b_.Exception.$factory)\nerror.__bases__ = [_b_.Exception]\n$B.set_func_names(error, \"binascii\")\n\nfunction decode(bytes, altchars, validate){\n var output = [],\n chr1, chr2, chr3,\n enc1, enc2, enc3, enc4\n\n var alphabet = make_alphabet(altchars)\n\n var input = bytes.source\n\n // If validate is set, check that all characters in input\n // are in the alphabet\n var _input = ''\n var padding = 0\n for(var i = 0, len = input.length; i < len; i++){\n var car = String.fromCharCode(input[i])\n var char_num = alphabet.indexOf(car)\n if(char_num == -1){\n if(validate){throw error.$factory(\"Non-base64 digit found: \" +\n car)}\n }else if(char_num == 64 && i < input.length - 2){\n if(validate){throw error.$factory(\"Non-base64 digit found: \" +\n car)}\n }else if(char_num == 64 && i >= input.length - 2){\n padding++\n _input += car\n }else{\n _input += car\n }\n }\n input = _input\n if(_input.length == padding){return _b_.bytes.$factory([])}\n if( _input.length % 4 > 0){throw error.$factory(\"Incorrect padding\")}\n\n var i = 0\n while(i < input.length){\n\n enc1 = alphabet.indexOf(input.charAt(i++))\n enc2 = alphabet.indexOf(input.charAt(i++))\n enc3 = alphabet.indexOf(input.charAt(i++))\n enc4 = alphabet.indexOf(input.charAt(i++))\n\n chr1 = (enc1 << 2) | (enc2 >> 4)\n chr2 = ((enc2 & 15) << 4) | (enc3 >> 2)\n chr3 = ((enc3 & 3) << 6) | enc4\n\n output.push(chr1)\n\n if(enc3 != 64){output.push(chr2)}\n if(enc4 != 64){output.push(chr3)}\n\n }\n // return Python bytes\n return _b_.bytes.$factory(output, 'utf-8', 'strict')\n}\n\n\nvar hex2int = {},\n hex = '0123456789abcdef'\nfor(var i = 0; i < hex.length; i++){\n hex2int[hex[i]] = i\n hex2int[hex[i].toUpperCase()] = i\n}\n\nfunction make_alphabet(altchars){\n var alphabet = _keyStr\n if(altchars !== undefined && altchars !== _b_.None){\n // altchars is an instance of Python bytes\n var source = altchars.source\n alphabet = alphabet.substr(0,alphabet.length-3) +\n _b_.chr(source[0]) + _b_.chr(source[1]) + '='\n }\n return alphabet\n}\n\nvar module = {\n a2b_base64: function(){\n var $ = $B.args(\"a2b_base64\", 1, {s: null}, ['s'],\n arguments, {}, null, null)\n return decode(_b_.str.encode($.s, 'ascii'))\n },\n a2b_hex: function(){\n var $ = $B.args(\"a2b_hex\", 1, {s: null}, ['s'],\n arguments, {}, null, null),\n s = $.s\n if(_b_.isinstance(s, _b_.bytes)){\n s = _b_.bytes.decode(s, 'ascii')\n }\n if(typeof s !== \"string\"){\n throw _b_.TypeError.$factory(\"argument should be bytes, \" +\n \"buffer or ASCII string, not '\" + $B.class_name(s) + \"'\")\n }\n \n var len = s.length\n if(len % 2 == 1){\n throw _b_.TypeError.$factory('Odd-length string')\n }\n \n var res = []\n for(var i = 0; i < len; i += 2){\n res.push((hex2int[s.charAt(i)] << 4) + hex2int[s.charAt(i + 1)])\n }\n return _b_.bytes.$factory(res)\n },\n b2a_base64: function(){\n var $ = $B.args(\"b2a_base64\", 1, {data: null}, ['data'],\n arguments, {}, null, \"kw\")\n var newline = false\n if($.kw && $.kw.$string_dict.newline){\n newline = $.kw.$string_dict.newline[0]\n }\n\n var string = $B.to_bytes($.data),\n res = btoa(String.fromCharCode.apply(null, string))\n if(newline){res += \"\\n\"}\n return _b_.bytes.$factory(res, \"ascii\")\n },\n b2a_hex: function(obj){\n var string = $B.to_bytes(obj),\n res = []\n function conv(c){\n if(c > 9){\n c = c + 'a'.charCodeAt(0) - 10\n }else{\n c = c + '0'.charCodeAt(0)\n }\n return c\n }\n string.forEach(function(char){\n res.push(conv((char >> 4) & 0xf))\n res.push(conv(char & 0xf))\n })\n return _b_.bytes.$factory(res, \"ascii\")\n },\n b2a_uu: function(obj){\n var string = $B.to_bytes(obj)\n var len = string.length,\n res = String.fromCharCode((0x20 + len) & 0x3F)\n while(string.length > 0){\n var s = string.slice(0, 3)\n while(s.length < 3){s.push(String.fromCharCode(0))}\n var A = s[0],\n B = s[1],\n C = s[2]\n var a = (A >> 2) & 0x3F,\n b = ((A << 4) | ((B >> 4) & 0xF)) & 0x3F,\n c = (((B << 2) | ((C >> 6) & 0x3)) & 0x3F),\n d = C & 0x3F\n res += String.fromCharCode(0x20 + a, 0x20 + b, 0x20 + c, 0x20 + d)\n string = string.slice(3)\n }\n return _b_.bytes.$factory(res + \"\\n\", \"ascii\")\n },\n error: error\n}\n\nmodule.hexlify = module.b2a_hex\nmodule.unhexlify = module.a2b_hex\n\nreturn module\n}\n)(__BRYTHON__)"], "_io_classes": [".js", "var _b_ = __BRYTHON__.builtins\n\nfunction get_self(name, args){\n return $B.args(name, 1, {self: null}, [\"self\"], args, {}, null, null).self\n}\n\nvar _IOBase = $B.make_class(\"_IOBase\")\n_IOBase.__mro__ = [_b_.object]\n\n_IOBase.close = function(){\n get_self(\"close\", arguments).__closed = true\n}\n\n_IOBase.flush = function(){\n get_self(\"flush\", arguments)\n return _b_.None\n}\n\n// Base class for binary streams that support some kind of buffering.\nvar _BufferedIOBase = $B.make_class(\"_BufferedIOBase\")\n_BufferedIOBase.__mro__ = [_IOBase, _b_.object]\n\n// Base class for raw binary I/O.\nvar _RawIOBase = $B.make_class(\"_RawIOBase\")\n\n_RawIOBase.__mro__ = [_IOBase, _b_.object]\n\n_RawIOBase.read = function(){\n var $ = $B.args(\"read\", 2, {self: null, size: null}, [\"self\", \"size\"],\n arguments, {size: -1}, null, null),\n self = $.self,\n size = $.size,\n res\n self.$pos = self.$pos || 0\n if(size == -1){\n if(self.$pos == 0){\n res = self.$content\n }else{\n res = _b_.bytes.$factory(self.$content.source.slice(self.$pos))\n }\n self.$pos = self.$content.source.length - 1\n }else{\n res = _b_.bytes.$factory(self.$content.source.slice(self.$pos, size))\n self.$pos += size\n }\n return res\n}\n\n_RawIOBase.readall = function(){\n return _RawIOBase.read(get_self(\"readall\", arguments))\n}\n\n// Base class for text streams.\n_TextIOBase = $B.make_class(\"_TextIOBase\")\n_TextIOBase.__mro__ = [_IOBase, _b_.object]\n\nvar StringIO = $B.make_class(\"StringIO\",\n function(){\n var $ = $B.args(\"StringIO\", 2, {value: null, newline: null},\n [\"value\", \"newline\"], arguments, {value: '', newline: \"\\n\"},\n null, null)\n return {\n __class__: StringIO,\n $counter: 0,\n $string: $.value\n }\n }\n)\nStringIO.__mro__ = [$B.Reader, _b_.object]\n\nStringIO.getvalue = function(){\n var $ = $B.args(\"getvalue\", 1, {self: null},\n [\"self\"], arguments, {}, null, null)\n return $.self.$string\n}\n\nStringIO.write = function(){\n var $ = $B.args(\"write\", 2, {self: null, data: null},\n [\"self\", \"data\"], arguments, {}, null, null)\n $.self.$string += $.data\n $.self.$counter += $.data.length\n return _b_.None\n}\n$B.set_func_names(StringIO, \"_io\")\n\nvar BytesIO = $B.make_class(\"BytesIO\",\n function(){\n var $ = $B.args(\"BytesIO\", 1, {value: null},\n [\"value\"], arguments, {value: _b_.bytes.$factory()},\n null, null)\n return {\n __class__: BytesIO,\n $binary: true,\n $bytes: $.value,\n $counter: 0\n }\n }\n)\nBytesIO.__mro__ = [$B.Reader, _b_.object]\n\nBytesIO.getbuffer = function(){\n var self = get_self(\"getbuffer\", arguments)\n return self.$bytes\n}\n\nBytesIO.getvalue = function(){\n var self = get_self(\"getvalue\", arguments)\n return self.$bytes\n}\n\nBytesIO.write = function(){\n var $ = $B.args(\"write\", 2, {self: null, data: null},\n [\"self\", \"data\"], arguments, {}, null, null)\n $.self.$bytes.source = $.self.$bytes.source.concat(\n $.data.source)\n $.self.$counter += $.data.source.length\n return _b_.None\n}\n$B.set_func_names(BytesIO, \"_io\")\n\nvar $module = (function($B){\n return {\n _BufferedIOBase: _BufferedIOBase,\n _IOBase: _IOBase,\n _RawIOBase: _RawIOBase,\n _TextIOBase: $B.make_class(\"_TextIOBase\",\n function(){\n return \"fileio\"\n }\n ),\n BytesIO: BytesIO,\n FileIO: $B.make_class(\"_TextIOBase\",\n function(){\n return \"fileio\"\n }\n ),\n StringIO: StringIO,\n BufferedReader: $B.BufferedReader,\n BufferedWriter: $B.make_class(\"_TextIOBase\",\n function(){\n return \"fileio\"\n }\n ),\n BufferedRWPair: $B.make_class(\"_TextIOBase\",\n function(){\n return \"fileio\"\n }\n ),\n BufferedRandom: $B.make_class(\"_TextIOBase\",\n function(){\n return \"fileio\"\n }\n ),\n IncrementalNewlineDecoder: $B.make_class(\"_TextIOBase\",\n function(){\n return \"fileio\"\n }\n ),\n TextIOWrapper: $B.TextIOWrapper\n }\n})(__BRYTHON__)\n$module._IOBase.__doc__ = \"_IOBase\""], "_json": [".js", "var $module=(function($B){\n\nvar _b_ = $B.builtins\n\nfunction simple(obj){\n switch(typeof obj){\n case 'string':\n case 'number':\n case 'boolean':\n return true\n }\n if(obj instanceof Number ||\n Array.isArray(obj) ||\n _b_.isinstance(obj, [_b_.list, _b_.tuple, _b_.dict])){\n return true\n }\n return false\n}\n\nfunction to_json(obj, level){\n var $defaults = {skipkeys:_b_.False, ensure_ascii:_b_.True,\n check_circular:_b_.True, allow_nan:_b_.True, cls:_b_.None,\n indent:_b_.None, separators:_b_.None, \"default\":_b_.None,\n sort_keys:_b_.False},\n $ = $B.args(\"to_json\", 2, {obj: null, level: null}, ['obj', 'level'],\n arguments, {level: 1}, null, \"kw\"),\n kw = $.kw.$string_dict\n\n for(key in $defaults){\n if(kw[key] === undefined){\n kw[key] = $defaults[key]\n }else{\n kw[key] = kw[key][0]\n }\n }\n\n var indent = kw.indent,\n ensure_ascii = kw.ensure_ascii,\n separators = kw.separators === _b_.None ?\n kw.indent === _b_.None ? [', ', ': '] : [',', ': '] :\n kw.separators,\n skipkeys = kw.skipkeys,\n $$default = kw.default,\n sort_keys = kw.sort_keys,\n allow_nan = kw.allow_nan,\n check_circular = kw.check_circular\n var item_separator = separators[0],\n key_separator = separators[1]\n if(indent !== _b_.None){\n var indent_str\n if(typeof indent == \"string\"){\n indent_str = indent\n }else if(typeof indent == \"number\" && indent >= 1){\n indent_str = \" \".repeat(indent)\n }else{\n throw _b_.ValueError.$factory(\"invalid indent: \" +\n _b_.str.$factory(indent))\n }\n }\n var kwarg = {$nat: \"kw\", kw: {}}\n for(var key in kw){\n kwarg.kw[key] = kw[key]\n }\n switch(typeof obj){\n case 'string':\n var res = JSON.stringify(obj)\n if(ensure_ascii){\n var escaped = ''\n for(var i = 0, len = res.length; i < len; i++){\n var u = res.codePointAt(i)\n if(u > 127){\n u = u.toString(16)\n while(u.length < 4){\n u = \"0\" + u\n }\n escaped += '\\\\u' + u\n }else{\n escaped += res.charAt(i)\n }\n }\n return escaped\n }\n return res\n case 'boolean':\n return obj.toString()\n case 'number':\n if([Infinity, -Infinity].indexOf(obj) > -1 ||\n isNaN(obj)){\n if(! allow_nan){\n throw _b_.ValueError.$factory(\n 'Out of range float values are not JSON compliant')\n }\n }\n return obj.toString()\n }\n if(_b_.isinstance(obj, _b_.list)){\n var res = []\n var sep = item_separator,\n first = '[',\n last = ']'\n if(indent !== _b_.None){\n sep += \"\\n\" + indent_str.repeat(level)\n first = '[' + '\\n' + indent_str.repeat(level)\n last = '\\n' + indent_str.repeat(level - 1) + ']'\n level++\n }\n for(var i = 0, len = obj.length; i < len; i++){\n res.push(to_json(obj[i], level, kwarg))\n }\n return first + res.join(sep) + last\n }else if(obj instanceof Number){\n return obj.valueOf()\n }else if(obj === _b_.None){\n return \"null\"\n }else if(_b_.isinstance(obj, _b_.dict)){\n var res = [],\n items = $B.dict_to_list(obj)\n if(sort_keys){\n // Sort keys by alphabetical order\n items.sort()\n }\n var sep = item_separator,\n first = '{',\n last = '}'\n if(indent !== _b_.None){\n sep += \"\\n\" + indent_str.repeat(level)\n first = '{' + '\\n' + indent_str.repeat(level)\n last = '\\n' + indent_str.repeat(level - 1) + '}'\n level++\n }\n for(var i = 0, len = items.length; i < len; i++){\n var item = items[i]\n if(! simple(item[0])){\n if(! skipkeys){\n throw _b_.TypeError.$factory(\"keys must be str, int, \" +\n \"float, bool or None, not \" + $B.class_name(obj))\n }\n }else{\n // In the result, key must be a string\n var key = _b_.str.$factory(item[0])\n // Check circular reference\n if(check_circular && $B.repr.enter(item[1])){\n throw _b_.ValueError.$factory(\"Circular reference detected\")\n }\n res.push(\n [to_json(key, level, kwarg), to_json(item[1], level, kwarg)].\n join(key_separator))\n if(check_circular){\n $B.repr.leave(item[1])\n }\n }\n }\n return first + res.join(sep) + last\n }\n // For other types, use function default if provided\n if($$default == _b_.None){\n throw _b_.TypeError.$factory(\"Object of type \" + $B.class_name(obj) +\n \" is not JSON serializable\")\n }else{\n return to_json($B.$call($$default)(obj), level, kwarg)\n }\n}\n\nfunction from_json(s){\n var $defaults = {cls: _b_.None, object_hook: _b_.None,\n parse_float: _b_.None, parse_int: _b_.None,\n parse_constant: _b_.None, object_pairs_hook: _b_.None},\n $ = $B.args(\"from_json\", 1, {s: null}, ['s'], arguments, {},\n null, \"kw\"),\n kw = $.kw.$string_dict\n if(Object.keys(kw).length == 0){\n // default\n return $B.structuredclone2pyobj(JSON.parse(s))\n }\n for(key in $defaults){\n if(kw[key] === undefined){\n kw[key] = $defaults[key]\n }else{\n kw[key] = kw[key][0]\n }\n }\n\n function reviver(key, value){\n if(typeof value == \"number\"){\n if(Number.isInteger(value) && kw.parse_int !== _b_.None){\n return $B.$call(kw.parse_int)(value.toString())\n }else if(! Number.isInteger(value) && kw.parse_float !== _b_.None){\n return $B.$call(kw.parse_float)(value.toString())\n }else if((value === Infinity || value === -Infinity) &&\n kw.parse_constant !== _b_.None){\n return $B.$call(kw.parse_constant)(value)\n }else{\n return value\n }\n }else if(isNaN(value) && kw.parse_constant !== _b_.None){\n return $B.$call(kw.parse_constant)(value)\n }else if(typeof value == \"object\" && !Array.isArray(value) &&\n (kw.object_hook !== _b_.None ||\n kw.object_pairs_hook !== _b_.None)){\n // Apply Python function object_hook to the Python dictionary\n // built from the Javascript object \"value\"\n var py_dict = $B.structuredclone2pyobj(value)\n if(kw.object_pairs_hook === _b_.None){\n var res = $B.$call(kw.object_hook)(py_dict)\n }else{\n var items = $B.dict_to_list(py_dict),\n res = $B.$call(kw.object_pairs_hook)(items)\n }\n // Transform the result of the Python function to a Javascript\n // object\n return $B.pyobj2structuredclone(res)\n }else{\n return value\n }\n }\n\n return $B.structuredclone2pyobj(JSON.parse(s, reviver))\n}\n\nreturn {\n dumps: function(){\n return _b_.str.$factory(to_json.apply(null, arguments))\n },\n loads: from_json\n}\n\n})(__BRYTHON__)"], "_jsre": [".js", "var $module = (function($B){\n\n var _b_ = $B.builtins\n var $s = []\n for(var $b in _b_) $s.push('var ' + $b +'=_b_[\"' + $b + '\"]')\n eval($s.join(';'))\n\n var MatchObject = $B.make_class(\"Match\",\n function(jsmatch, string, pattern){\n return {\n __class__: MatchObject,\n jsmatch: jsmatch,\n string: string\n }\n }\n )\n MatchObject.item = function(self, rank){\n return self.jsmatch[rank]\n }\n MatchObject.group = function(self){\n var res = []\n for(var i = 0, _len_i = arguments.length; i < _len_i; i++){\n if(self.jsmatch[arguments[i]] === undefined){res.push(None)}\n else{res.push(self.jsmatch[arguments[i]])}\n }\n if(arguments.length == 1){return res[0]}\n return tuple.$factory(res)\n }\n MatchObject.groups = function(self, _default){\n if(_default===undefined){_default=None}\n var res = []\n for(var i = 1, _len_i = self.length; i < _len_i; i++){\n if(self.jsmatch[i] === undefined){res.push(_default)}\n else{res.push(self.jsmatch[i])}\n }\n return tuple.$factory(res)\n }\n MatchObject.start = function(self){\n return self.index\n }\n MatchObject.end = function(self){\n return self.length - self.index\n }\n\n $B.set_func_names(MatchObject, '_jsre')\n\n var obj = {__class__: $module,\n __str__: function(){return \"\"}\n }\n obj.A = obj.ASCII = 256\n obj.I = obj.IGNORECASE = 2 // 'i'\n obj.L = obj.LOCALE = 4\n obj.M = obj.MULTILINE = 8 // 'm'\n obj.S = obj.DOTALL = 16\n obj.U = obj.UNICODE = 32\n obj.X = obj.VERBOSE = 64\n obj._is_valid = function(pattern) {\n if ($B.$options.re == 'pyre'){return false} //force use of python's re module\n if ($B.$options.re == 'jsre'){return true} //force use of brythons re module\n // FIXME: Improve\n\n if(! isinstance(pattern, str)){\n // this is probably a SRE_PATTERN, so return false, and let\n // python's re module handle this.\n return false\n }\n var is_valid = false\n try{\n new RegExp(pattern)\n is_valid = true\n }\n catch(e){}\n if(! is_valid){return false} //if js won't parse the pattern return false\n\n // using reference http://www.regular-expressions.info/\n // to compare python re and javascript regex libraries\n\n // look for things javascript does not support\n // check for name capturing group\n var mylist = ['?P=', '?P<', '(?#', '(?<=', '(? -1) return false\n }\n\n var re_list=['\\{,\\d+\\}']\n for(var i=0, _len_i = re_list.length; i < _len_i; i++) {\n var _re = new RegExp(re_list[i])\n if (_re.test(pattern)){return false}\n }\n\n // it looks like the pattern has passed all our tests so lets assume\n // javascript can handle this pattern.\n return true\n }\n var $SRE_PatternDict = {\n __class__:_b_.type,\n $infos:{\n __name__:'SRE_Pattern'\n }\n }\n $SRE_PatternDict.__mro__ = [object]\n $SRE_PatternDict.findall = function(self, string){\n return obj.findall(self.pattern, string, self.flags)\n }\n $SRE_PatternDict.finditer = function(self, string){\n return obj.finditer(self.pattern, string, self.flags)\n }\n $SRE_PatternDict.match = function(self, string){\n return obj.match(self.pattern, string, self.flags)\n }\n $SRE_PatternDict.search = function(self, string){\n return obj.search(self.pattern, string, self.flags)\n }\n $SRE_PatternDict.sub = function(self,repl,string){\n return obj.sub(self.pattern,repl,string,self.flags)\n }\n $B.set_func_names($SRE_PatternDict, \"_jsre\")\n // TODO: groups\n // TODO: groupindex\n function normflags(flags){\n return ((flags & obj.I)? 'i' : '') + ((flags & obj.M)? 'm' : '');\n }\n // TODO: fullmatch()\n // TODO: split()\n // TODO: subn()\n obj.compile = function(pattern, flags){\n return {\n __class__: $SRE_PatternDict,\n pattern: pattern,\n flags: normflags(flags)\n }\n }\n obj.escape = function(string){\n // Escape all the characters in pattern except ASCII letters, numbers\n // and '_'. This is useful if you want to match an arbitrary literal\n // string that may have regular expression metacharacters in it.\n var res = ''\n var ok = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_'\n for(var i = 0, _len_i = string.length; i < _len_i; i++){\n if(ok.search(string.charAt(i))>-1){res += string.charAt(i)}\n }\n return res\n }\n obj.findall = function(pattern, string, flags){\n var $ns=$B.args('re.findall', 2,\n {pattern:null, string:null}, ['pattern', 'string'],\n arguments,{}, 'args', 'kw') ,\n args = $ns['args'] ,\n _flags = 0;\n if(args.length>0){var flags = args[0]}\n else{var _flags = getattr($ns['kw'], 'get')('flags', 0)}\n\n var flags = normflags()\n flags += 'gm'\n var jsp = new RegExp(pattern,flags),\n jsmatch = string.match(jsp)\n if(jsmatch === null){return []}\n return jsmatch\n }\n obj.finditer = function(pattern, string, flags){\n var $ns=$B.args('re.finditer', 2,\n {pattern:null, string:null}, ['pattern', 'string'],\n arguments,{},'args','kw'),\n args = $ns['args'],\n _flags = 0;\n if(args.length>0){var flags=args[0]}\n else{var _flags = getattr($ns['kw'], 'get')('flags', 0)}\n\n var flags = normflags()\n flags += 'gm'\n var jsp = new RegExp(pattern, flags),\n jsmatch = string.match(jsp);\n if(jsmatch === null){return []}\n\n var _list = []\n for(var j = 0, _len_j = jsmatch.length; j < _len_j; j++) {\n var mo = {}\n mo._match=jsmatch[j]\n mo.group = function(){\n var res = []\n for(var i=0, _len_i = arguments.length; i < _len_i;i++){\n if(jsmatch[arguments[i]] === undefined){res.push(None)}\n else{res.push(jsmatch[arguments[i]])}\n }\n if(arguments.length == 1){return res[0]}\n return tuple.$factory(res)\n }\n mo.groups = function(_default){\n if(_default === undefined){_default=None}\n var res = []\n for(var i = 1, _len_i = jsmatch.length; i < _len_i; i++){\n if(jsmatch[i] === undefined){res.push(_default)}\n else{res.push(jsmatch[i])}\n }\n return tuple.$factory(res)\n }\n mo.start = function(){return mo._match.index}\n mo.end = function(){return mo._match.length - mo._match.index}\n mo.string = string\n _list.push(mo)\n }\n return _list\n }\n obj.search = function(pattern, string){\n var $ns = $B.args('re.search', 2,\n {pattern:null, string:null},['pattern', 'string'],\n arguments, {}, 'args', 'kw')\n var args = $ns['args']\n if(args.length>0){var flags = args[0]}\n else{var flags = getattr($ns['kw'], 'get')('flags', '')}\n flags = normflags(flags)\n var jsp = new RegExp(pattern, flags)\n var jsmatch = string.match(jsp)\n if(jsmatch === null){return None}\n return MatchObject.$factory(jsmatch, string, pattern)\n }\n obj.sub = function(pattern, repl, string){\n var $ns=$B.args('re.search', 3,\n {pattern: null, repl: null, string: null},\n ['pattern', 'repl', 'string'],\n arguments,{}, 'args', 'kw')\n for($var in $ns){eval(\"var \" + $var + \"=$ns[$var]\")}\n var args = $ns['args']\n var count = _b_.dict.get($ns['kw'], 'count', 0)\n var flags = _b_.dict.get($ns['kw'], 'flags', '')\n if(args.length > 0){var count = args[0]}\n if(args.length > 1){var flags = args[1]}\n flags = normflags(flags)\n if(typeof repl == \"string\"){\n // backreferences are \\1, \\2... in Python but $1,$2... in Javascript\n repl = repl.replace(/\\\\(\\d+)/g, '$$$1')\n }else if(typeof repl == \"function\"){\n // the argument passed to the Python function is the match object\n // the arguments passed to the Javascript function are :\n // - the matched substring\n // - the matched groups\n // - the offset of the matched substring inside the string\n // - the string being examined\n var $repl1 = function(){\n var mo = Object()\n mo.string = arguments[arguments.length - 1]\n var matched = arguments[0];\n var start = arguments[arguments.length - 2]\n var end = start + matched.length\n mo.start = function(){return start}\n mo.end = function(){return end}\n groups = []\n for(var i = 1, _len_i = arguments.length-2; i < _len_i; i++){\n groups.push(arguments[i])\n }\n mo.groups = function(_default){\n if(_default === undefined){_default = None}\n var res = []\n for(var i = 0, _len_i = groups.length; i < _len_i; i++){\n if(groups[i] === undefined){res.push(_default)}\n else{res.push(groups[i])}\n }\n return res\n }\n mo.group = function(i){\n if(i==0){return matched}\n return groups[i-1]\n }\n return repl(mo)\n }\n }\n if(count == 0){flags += 'g'}\n var jsp = new RegExp(pattern, flags)\n if(typeof repl == 'function'){return string.replace(jsp, $repl1)}\n else{return string.replace(jsp, repl)}\n }\n obj.match = (function(search_func){\n return function(){\n // match is like search but pattern must start with ^\n var pattern = arguments[0]\n if(pattern.charAt(0) != '^'){pattern = '^'+pattern}\n var args = [pattern]\n for(var i = 1, _len_i = arguments.length; i < _len_i; i++){\n args.push(arguments[i])\n }\n return search_func.apply(null, args)\n }\n })(obj.search)\n\n return obj\n}\n)(__BRYTHON__)\n"], "_locale": [".js", "var am = {\n \"C\": \"AM\",\n \"aa\": \"saaku\",\n \"ab\": \"AM\",\n \"ae\": \"AM\",\n \"af\": \"vm.\",\n \"ak\": \"AN\",\n \"am\": \"\\u1325\\u12cb\\u1275\",\n \"an\": \"AM\",\n \"ar\": \"\\u0635\",\n \"as\": \"\\u09f0\\u09be\\u09a4\\u09bf\\u09aa\\u09c1\",\n \"av\": \"AM\",\n \"ay\": \"AM\",\n \"az\": \"AM\",\n \"ba\": \"\",\n \"be\": \"\",\n \"bg\": \"\",\n \"bh\": \"AM\",\n \"bi\": \"AM\",\n \"bm\": \"AM\",\n \"bn\": \"AM\",\n \"bo\": \"\\u0f66\\u0f94\\u0f0b\\u0f51\\u0fb2\\u0f7c\",\n \"br\": \"A.M.\",\n \"bs\": \"prijepodne\",\n \"ca\": \"a. m.\",\n \"ce\": \"AM\",\n \"ch\": \"AM\",\n \"co\": \"\",\n \"cr\": \"AM\",\n \"cs\": \"dop.\",\n \"cu\": \"\\u0414\\u041f\",\n \"cv\": \"AM\",\n \"cy\": \"yb\",\n \"da\": \"\",\n \"de\": \"\",\n \"dv\": \"\\u0789\\u0786\",\n \"dz\": \"\\u0f66\\u0f94\\u0f0b\\u0f46\\u0f0b\",\n \"ee\": \"\\u014bdi\",\n \"el\": \"\\u03c0\\u03bc\",\n \"en\": \"AM\",\n \"eo\": \"atm\",\n \"es\": \"\",\n \"et\": \"AM\",\n \"eu\": \"AM\",\n \"fa\": \"\\u0642.\\u0638\",\n \"ff\": \"\",\n \"fi\": \"ap.\",\n \"fj\": \"AM\",\n \"fo\": \"um fyr.\",\n \"fr\": \"\",\n \"fy\": \"AM\",\n \"ga\": \"r.n.\",\n \"gd\": \"m\",\n \"gl\": \"a.m.\",\n \"gn\": \"a.m.\",\n \"gu\": \"\\u0aaa\\u0ac2\\u0ab0\\u0acd\\u0ab5\\u00a0\\u0aae\\u0aa7\\u0acd\\u0aaf\\u0abe\\u0ab9\\u0acd\\u0aa8\",\n \"gv\": \"a.m.\",\n \"ha\": \"AM\",\n \"he\": \"AM\",\n \"hi\": \"\\u092a\\u0942\\u0930\\u094d\\u0935\\u093e\\u0939\\u094d\\u0928\",\n \"ho\": \"AM\",\n \"hr\": \"\",\n \"ht\": \"AM\",\n \"hu\": \"de.\",\n \"hy\": \"\",\n \"hz\": \"AM\",\n \"ia\": \"a.m.\",\n \"id\": \"AM\",\n \"ie\": \"AM\",\n \"ig\": \"A.M.\",\n \"ii\": \"\\ua0b5\\ua1aa\\ua20c\\ua210\",\n \"ik\": \"AM\",\n \"io\": \"AM\",\n \"is\": \"f.h.\",\n \"it\": \"\",\n \"iu\": \"AM\",\n \"ja\": \"\\u5348\\u524d\",\n \"jv\": \"\",\n \"ka\": \"AM\",\n \"kg\": \"AM\",\n \"ki\": \"Kiroko\",\n \"kj\": \"AM\",\n \"kk\": \"AM\",\n \"kl\": \"\",\n \"km\": \"\\u1796\\u17d2\\u179a\\u17b9\\u1780\",\n \"kn\": \"\\u0caa\\u0cc2\\u0cb0\\u0ccd\\u0cb5\\u0cbe\\u0cb9\\u0ccd\\u0ca8\",\n \"ko\": \"\\uc624\\uc804\",\n \"kr\": \"AM\",\n \"ks\": \"AM\",\n \"ku\": \"\\u067e.\\u0646\",\n \"kv\": \"AM\",\n \"kw\": \"a.m.\",\n \"ky\": \"\",\n \"la\": \"\",\n \"lb\": \"\",\n \"lg\": \"AM\",\n \"li\": \"AM\",\n \"ln\": \"nt\\u0254\\u0301ng\\u0254\\u0301\",\n \"lo\": \"\\u0e81\\u0ec8\\u0ead\\u0e99\\u0e97\\u0ec8\\u0ebd\\u0e87\",\n \"lt\": \"prie\\u0161piet\",\n \"lu\": \"Dinda\",\n \"lv\": \"priek\\u0161p.\",\n \"mg\": \"AM\",\n \"mh\": \"AM\",\n \"mi\": \"a.m.\",\n \"mk\": \"\\u043f\\u0440\\u0435\\u0442\\u043f\\u043b.\",\n \"ml\": \"AM\",\n \"mn\": \"??\",\n \"mo\": \"AM\",\n \"mr\": \"\\u092e.\\u092a\\u0942.\",\n \"ms\": \"PG\",\n \"mt\": \"AM\",\n \"my\": \"\\u1014\\u1036\\u1014\\u1000\\u103a\",\n \"na\": \"AM\",\n \"nb\": \"a.m.\",\n \"nd\": \"AM\",\n \"ne\": \"\\u092a\\u0942\\u0930\\u094d\\u0935\\u093e\\u0939\\u094d\\u0928\",\n \"ng\": \"AM\",\n \"nl\": \"\",\n \"nn\": \"f.m.\",\n \"no\": \"a.m.\",\n \"nr\": \"AM\",\n \"nv\": \"AM\",\n \"ny\": \"AM\",\n \"oc\": \"AM\",\n \"oj\": \"AM\",\n \"om\": \"WD\",\n \"or\": \"AM\",\n \"os\": \"AM\",\n \"pa\": \"\\u0a38\\u0a35\\u0a47\\u0a30\",\n \"pi\": \"AM\",\n \"pl\": \"AM\",\n \"ps\": \"\\u063a.\\u0645.\",\n \"pt\": \"\",\n \"qu\": \"a.m.\",\n \"rc\": \"AM\",\n \"rm\": \"AM\",\n \"rn\": \"Z.MU.\",\n \"ro\": \"a.m.\",\n \"ru\": \"\",\n \"rw\": \"AM\",\n \"sa\": \"\\u092e\\u0927\\u094d\\u092f\\u093e\\u0928\\u092a\\u0942\\u0930\\u094d\\u0935\",\n \"sc\": \"AM\",\n \"sd\": \"AM\",\n \"se\": \"i.b.\",\n \"sg\": \"ND\",\n \"sh\": \"AM\",\n \"si\": \"\\u0db4\\u0dd9.\\u0dc0.\",\n \"sk\": \"AM\",\n \"sl\": \"dop.\",\n \"sm\": \"AM\",\n \"sn\": \"AM\",\n \"so\": \"sn.\",\n \"sq\": \"e paradites\",\n \"sr\": \"pre podne\",\n \"ss\": \"AM\",\n \"st\": \"AM\",\n \"su\": \"AM\",\n \"sv\": \"\",\n \"sw\": \"AM\",\n \"ta\": \"\\u0b95\\u0bbe\\u0bb2\\u0bc8\",\n \"te\": \"\\u0c2a\\u0c42\\u0c30\\u0c4d\\u0c35\\u0c3e\\u0c39\\u0c4d\\u0c28\",\n \"tg\": \"\",\n \"th\": \"AM\",\n \"ti\": \"\\u1295\\u1309\\u1206 \\u1230\\u12d3\\u1270\",\n \"tk\": \"\",\n \"tl\": \"AM\",\n \"tn\": \"AM\",\n \"to\": \"AM\",\n \"tr\": \"\\u00d6\\u00d6\",\n \"ts\": \"AM\",\n \"tt\": \"\",\n \"tw\": \"AM\",\n \"ty\": \"AM\",\n \"ug\": \"\\u0686?\\u0634\\u062a\\u0649\\u0646 \\u0628?\\u0631?\\u0646\",\n \"uk\": \"AM\",\n \"ur\": \"AM\",\n \"uz\": \"TO\",\n \"ve\": \"AM\",\n \"vi\": \"SA\",\n \"vo\": \"AM\",\n \"wa\": \"AM\",\n \"wo\": \"\",\n \"xh\": \"AM\",\n \"yi\": \"\\ua0b5\\ua1aa\\ua20c\\ua210\",\n \"yo\": \"\\u00c0\\u00e1r?`\",\n \"za\": \"AM\",\n \"zh\": \"\\u4e0a\\u5348\",\n \"zu\": \"AM\"\n}\nvar pm = {\n \"C\": \"PM\",\n \"aa\": \"carra\",\n \"ab\": \"PM\",\n \"ae\": \"PM\",\n \"af\": \"nm.\",\n \"ak\": \"EW\",\n \"am\": \"\\u12a8\\u1230\\u12d3\\u1275\",\n \"an\": \"PM\",\n \"ar\": \"\\u0645\",\n \"as\": \"\\u0986\\u09ac\\u09c7\\u09b2\\u09bf\",\n \"av\": \"PM\",\n \"ay\": \"PM\",\n \"az\": \"PM\",\n \"ba\": \"\",\n \"be\": \"\",\n \"bg\": \"\",\n \"bh\": \"PM\",\n \"bi\": \"PM\",\n \"bm\": \"PM\",\n \"bn\": \"PM\",\n \"bo\": \"\\u0f55\\u0fb1\\u0f72\\u0f0b\\u0f51\\u0fb2\\u0f7c\",\n \"br\": \"G.M.\",\n \"bs\": \"popodne\",\n \"ca\": \"p. m.\",\n \"ce\": \"PM\",\n \"ch\": \"PM\",\n \"co\": \"\",\n \"cr\": \"PM\",\n \"cs\": \"odp.\",\n \"cu\": \"\\u041f\\u041f\",\n \"cv\": \"PM\",\n \"cy\": \"yh\",\n \"da\": \"\",\n \"de\": \"\",\n \"dv\": \"\\u0789\\u078a\",\n \"dz\": \"\\u0f55\\u0fb1\\u0f72\\u0f0b\\u0f46\\u0f0b\",\n \"ee\": \"\\u0263etr\\u0254\",\n \"el\": \"\\u03bc\\u03bc\",\n \"en\": \"PM\",\n \"eo\": \"ptm\",\n \"es\": \"\",\n \"et\": \"PM\",\n \"eu\": \"PM\",\n \"fa\": \"\\u0628.\\u0638\",\n \"ff\": \"\",\n \"fi\": \"ip.\",\n \"fj\": \"PM\",\n \"fo\": \"um sein.\",\n \"fr\": \"\",\n \"fy\": \"PM\",\n \"ga\": \"i.n.\",\n \"gd\": \"f\",\n \"gl\": \"p.m.\",\n \"gn\": \"p.m.\",\n \"gu\": \"\\u0a89\\u0aa4\\u0acd\\u0aa4\\u0ab0\\u00a0\\u0aae\\u0aa7\\u0acd\\u0aaf\\u0abe\\u0ab9\\u0acd\\u0aa8\",\n \"gv\": \"p.m.\",\n \"ha\": \"PM\",\n \"he\": \"PM\",\n \"hi\": \"\\u0905\\u092a\\u0930\\u093e\\u0939\\u094d\\u0928\",\n \"ho\": \"PM\",\n \"hr\": \"\",\n \"ht\": \"PM\",\n \"hu\": \"du.\",\n \"hy\": \"\",\n \"hz\": \"PM\",\n \"ia\": \"p.m.\",\n \"id\": \"PM\",\n \"ie\": \"PM\",\n \"ig\": \"P.M.\",\n \"ii\": \"\\ua0b5\\ua1aa\\ua20c\\ua248\",\n \"ik\": \"PM\",\n \"io\": \"PM\",\n \"is\": \"e.h.\",\n \"it\": \"\",\n \"iu\": \"PM\",\n \"ja\": \"\\u5348\\u5f8c\",\n \"jv\": \"\",\n \"ka\": \"PM\",\n \"kg\": \"PM\",\n \"ki\": \"Hwa\\u0129-in\\u0129\",\n \"kj\": \"PM\",\n \"kk\": \"PM\",\n \"kl\": \"\",\n \"km\": \"\\u179b\\u17d2\\u1784\\u17b6\\u1785\",\n \"kn\": \"\\u0c85\\u0caa\\u0cb0\\u0cbe\\u0cb9\\u0ccd\\u0ca8\",\n \"ko\": \"\\uc624\\ud6c4\",\n \"kr\": \"PM\",\n \"ks\": \"PM\",\n \"ku\": \"\\u062f.\\u0646\",\n \"kv\": \"PM\",\n \"kw\": \"p.m.\",\n \"ky\": \"\",\n \"la\": \"\",\n \"lb\": \"\",\n \"lg\": \"PM\",\n \"li\": \"PM\",\n \"ln\": \"mp\\u00f3kwa\",\n \"lo\": \"\\u0eab\\u0ebc\\u0eb1\\u0e87\\u0e97\\u0ec8\\u0ebd\\u0e87\",\n \"lt\": \"popiet\",\n \"lu\": \"Dilolo\",\n \"lv\": \"p\\u0113cp.\",\n \"mg\": \"PM\",\n \"mh\": \"PM\",\n \"mi\": \"p.m.\",\n \"mk\": \"\\u043f\\u043e\\u043f\\u043b.\",\n \"ml\": \"PM\",\n \"mn\": \"?\\u0425\",\n \"mo\": \"PM\",\n \"mr\": \"\\u092e.\\u0928\\u0902.\",\n \"ms\": \"PTG\",\n \"mt\": \"PM\",\n \"my\": \"\\u100a\\u1014\\u1031\",\n \"na\": \"PM\",\n \"nb\": \"p.m.\",\n \"nd\": \"PM\",\n \"ne\": \"\\u0905\\u092a\\u0930\\u093e\\u0939\\u094d\\u0928\",\n \"ng\": \"PM\",\n \"nl\": \"\",\n \"nn\": \"e.m.\",\n \"no\": \"p.m.\",\n \"nr\": \"PM\",\n \"nv\": \"PM\",\n \"ny\": \"PM\",\n \"oc\": \"PM\",\n \"oj\": \"PM\",\n \"om\": \"WB\",\n \"or\": \"PM\",\n \"os\": \"PM\",\n \"pa\": \"\\u0a36\\u0a3e\\u0a2e\",\n \"pi\": \"PM\",\n \"pl\": \"PM\",\n \"ps\": \"\\u063a.\\u0648.\",\n \"pt\": \"\",\n \"qu\": \"p.m.\",\n \"rc\": \"PM\",\n \"rm\": \"PM\",\n \"rn\": \"Z.MW.\",\n \"ro\": \"p.m.\",\n \"ru\": \"\",\n \"rw\": \"PM\",\n \"sa\": \"\\u092e\\u0927\\u094d\\u092f\\u093e\\u0928\\u092a\\u091a\\u094d\\u092f\\u093e\\u0924\",\n \"sc\": \"PM\",\n \"sd\": \"PM\",\n \"se\": \"e.b.\",\n \"sg\": \"LK\",\n \"sh\": \"PM\",\n \"si\": \"\\u0db4.\\u0dc0.\",\n \"sk\": \"PM\",\n \"sl\": \"pop.\",\n \"sm\": \"PM\",\n \"sn\": \"PM\",\n \"so\": \"gn.\",\n \"sq\": \"e pasdites\",\n \"sr\": \"po podne\",\n \"ss\": \"PM\",\n \"st\": \"PM\",\n \"su\": \"PM\",\n \"sv\": \"\",\n \"sw\": \"PM\",\n \"ta\": \"\\u0bae\\u0bbe\\u0bb2\\u0bc8\",\n \"te\": \"\\u0c05\\u0c2a\\u0c30\\u0c3e\\u0c39\\u0c4d\\u0c28\",\n \"tg\": \"\",\n \"th\": \"PM\",\n \"ti\": \"\\u12f5\\u1215\\u122d \\u1230\\u12d3\\u1275\",\n \"tk\": \"\",\n \"tl\": \"PM\",\n \"tn\": \"PM\",\n \"to\": \"PM\",\n \"tr\": \"\\u00d6S\",\n \"ts\": \"PM\",\n \"tt\": \"\",\n \"tw\": \"PM\",\n \"ty\": \"PM\",\n \"ug\": \"\\u0686?\\u0634\\u062a\\u0649\\u0646 \\u0643?\\u064a\\u0649\\u0646\",\n \"uk\": \"PM\",\n \"ur\": \"PM\",\n \"uz\": \"TK\",\n \"ve\": \"PM\",\n \"vi\": \"CH\",\n \"vo\": \"PM\",\n \"wa\": \"PM\",\n \"wo\": \"\",\n \"xh\": \"PM\",\n \"yi\": \"\\ua0b5\\ua1aa\\ua20c\\ua248\",\n \"yo\": \"?`s\\u00e1n\",\n \"za\": \"PM\",\n \"zh\": \"\\u4e0b\\u5348\",\n \"zu\": \"PM\"\n}\n\nvar X_format = {\n \"%H:%M:%S\": [\n \"C\",\n \"ab\",\n \"ae\",\n \"af\",\n \"an\",\n \"av\",\n \"ay\",\n \"az\",\n \"ba\",\n \"be\",\n \"bg\",\n \"bh\",\n \"bi\",\n \"bm\",\n \"bo\",\n \"br\",\n \"bs\",\n \"ca\",\n \"ce\",\n \"ch\",\n \"co\",\n \"cr\",\n \"cs\",\n \"cu\",\n \"cv\",\n \"cy\",\n \"da\",\n \"de\",\n \"dv\",\n \"eo\",\n \"es\",\n \"et\",\n \"eu\",\n \"ff\",\n \"fj\",\n \"fo\",\n \"fr\",\n \"fy\",\n \"ga\",\n \"gd\",\n \"gl\",\n \"gn\",\n \"gu\",\n \"gv\",\n \"ha\",\n \"he\",\n \"hi\",\n \"ho\",\n \"hr\",\n \"ht\",\n \"hu\",\n \"hy\",\n \"hz\",\n \"ia\",\n \"ie\",\n \"ig\",\n \"ik\",\n \"io\",\n \"is\",\n \"it\",\n \"ja\",\n \"ka\",\n \"kg\",\n \"ki\",\n \"kj\",\n \"kk\",\n \"kl\",\n \"km\",\n \"kn\",\n \"kv\",\n \"kw\",\n \"ky\",\n \"la\",\n \"lb\",\n \"lg\",\n \"li\",\n \"ln\",\n \"lo\",\n \"lt\",\n \"lu\",\n \"lv\",\n \"mg\",\n \"mh\",\n \"mk\",\n \"mn\",\n \"mo\",\n \"mr\",\n \"mt\",\n \"my\",\n \"na\",\n \"nb\",\n \"nd\",\n \"ng\",\n \"nl\",\n \"nn\",\n \"no\",\n \"nr\",\n \"nv\",\n \"ny\",\n \"oj\",\n \"or\",\n \"os\",\n \"pi\",\n \"pl\",\n \"ps\",\n \"pt\",\n \"rc\",\n \"rm\",\n \"rn\",\n \"ro\",\n \"ru\",\n \"rw\",\n \"sa\",\n \"sc\",\n \"se\",\n \"sg\",\n \"sh\",\n \"sk\",\n \"sl\",\n \"sm\",\n \"sn\",\n \"sr\",\n \"ss\",\n \"st\",\n \"su\",\n \"sv\",\n \"sw\",\n \"ta\",\n \"te\",\n \"tg\",\n \"th\",\n \"tk\",\n \"tl\",\n \"tn\",\n \"tr\",\n \"ts\",\n \"tt\",\n \"tw\",\n \"ty\",\n \"ug\",\n \"uk\",\n \"uz\",\n \"ve\",\n \"vo\",\n \"wa\",\n \"wo\",\n \"xh\",\n \"yo\",\n \"za\",\n \"zh\",\n \"zu\"\n ],\n \"%i:%M:%S %p\": [\n \"aa\",\n \"ak\",\n \"am\",\n \"bn\",\n \"el\",\n \"en\",\n \"iu\",\n \"kr\",\n \"ks\",\n \"mi\",\n \"ml\",\n \"ms\",\n \"ne\",\n \"om\",\n \"sd\",\n \"so\",\n \"sq\",\n \"ti\",\n \"to\",\n \"ur\",\n \"vi\"\n ],\n \"%I:%M:%S %p\": [\n \"ar\",\n \"fa\",\n \"ku\",\n \"qu\"\n ],\n \"%p %i:%M:%S\": [\n \"as\",\n \"ii\",\n \"ko\",\n \"yi\"\n ],\n \"\\u0f46\\u0f74\\u0f0b\\u0f5a\\u0f7c\\u0f51\\u0f0b%i:%M:%S %p\": [\n \"dz\"\n ],\n \"%p ga %i:%M:%S\": [\n \"ee\"\n ],\n \"%H.%M.%S\": [\n \"fi\",\n \"id\",\n \"jv\",\n \"oc\",\n \"si\"\n ],\n \"%p %I:%M:%S\": [\n \"pa\"\n ]\n}\nvar x_format = {\n \"%m/%d/%y\": [\n \"C\"\n ],\n \"%d/%m/%Y\": [\n \"aa\",\n \"am\",\n \"bm\",\n \"bn\",\n \"ca\",\n \"co\",\n \"cy\",\n \"el\",\n \"es\",\n \"ff\",\n \"fr\",\n \"ga\",\n \"gd\",\n \"gl\",\n \"gn\",\n \"gv\",\n \"ha\",\n \"he\",\n \"id\",\n \"ig\",\n \"it\",\n \"iu\",\n \"jv\",\n \"ki\",\n \"kr\",\n \"kw\",\n \"la\",\n \"lg\",\n \"ln\",\n \"lo\",\n \"lu\",\n \"mi\",\n \"ml\",\n \"ms\",\n \"mt\",\n \"nd\",\n \"oc\",\n \"om\",\n \"pt\",\n \"qu\",\n \"rn\",\n \"sd\",\n \"sg\",\n \"so\",\n \"sw\",\n \"ti\",\n \"to\",\n \"uk\",\n \"ur\",\n \"uz\",\n \"vi\",\n \"wo\",\n \"yo\"\n ],\n \"%m/%d/%Y\": [\n \"ab\",\n \"ae\",\n \"an\",\n \"av\",\n \"ay\",\n \"bh\",\n \"bi\",\n \"ch\",\n \"cr\",\n \"cv\",\n \"ee\",\n \"en\",\n \"fj\",\n \"ho\",\n \"ht\",\n \"hz\",\n \"ie\",\n \"ik\",\n \"io\",\n \"kg\",\n \"kj\",\n \"ks\",\n \"kv\",\n \"li\",\n \"mh\",\n \"mo\",\n \"na\",\n \"ne\",\n \"ng\",\n \"nv\",\n \"ny\",\n \"oj\",\n \"pi\",\n \"rc\",\n \"sc\",\n \"sh\",\n \"sm\",\n \"su\",\n \"tl\",\n \"tw\",\n \"ty\",\n \"wa\",\n \"za\",\n \"zu\"\n ],\n \"%Y-%m-%d\": [\n \"af\",\n \"br\",\n \"ce\",\n \"dz\",\n \"eo\",\n \"ko\",\n \"lt\",\n \"mg\",\n \"nr\",\n \"rw\",\n \"se\",\n \"si\",\n \"sn\",\n \"ss\",\n \"st\",\n \"sv\",\n \"tn\",\n \"ts\",\n \"ug\",\n \"ve\",\n \"vo\",\n \"xh\"\n ],\n \"%Y/%m/%d\": [\n \"ak\",\n \"bo\",\n \"eu\",\n \"ia\",\n \"ii\",\n \"ja\",\n \"ku\",\n \"yi\",\n \"zh\"\n ],\n \"null\": [\n \"ar\",\n \"fa\",\n \"ps\",\n \"th\"\n ],\n \"%d-%m-%Y\": [\n \"as\",\n \"da\",\n \"fy\",\n \"hi\",\n \"kl\",\n \"mr\",\n \"my\",\n \"nl\",\n \"rm\",\n \"sa\",\n \"ta\"\n ],\n \"%d.%m.%Y\": [\n \"az\",\n \"cs\",\n \"de\",\n \"et\",\n \"fi\",\n \"fo\",\n \"hy\",\n \"is\",\n \"ka\",\n \"kk\",\n \"lv\",\n \"mk\",\n \"nb\",\n \"nn\",\n \"no\",\n \"os\",\n \"pl\",\n \"ro\",\n \"ru\",\n \"sq\",\n \"tg\",\n \"tr\",\n \"tt\"\n ],\n \"%d.%m.%y\": [\n \"ba\",\n \"be\",\n \"lb\"\n ],\n \"%d.%m.%Y \\u0433.\": [\n \"bg\"\n ],\n \"%d.%m.%Y.\": [\n \"bs\",\n \"hr\",\n \"sr\"\n ],\n \"%Y.%m.%d\": [\n \"cu\",\n \"mn\"\n ],\n \"%d/%m/%y\": [\n \"dv\",\n \"km\"\n ],\n \"%d-%m-%y\": [\n \"gu\",\n \"kn\",\n \"or\",\n \"pa\",\n \"te\"\n ],\n \"%Y. %m. %d.\": [\n \"hu\"\n ],\n \"%d-%b %y\": [\n \"ky\"\n ],\n \"%d. %m. %Y\": [\n \"sk\",\n \"sl\"\n ],\n \"%d.%m.%y \\u00fd.\": [\n \"tk\"\n ]\n}\n\n\nvar $module=(function($B){\n var _b_ = $B.builtins\n return {\n CHAR_MAX: 127,\n LC_ALL: 6,\n LC_COLLATE: 3,\n LC_CTYPE: 0,\n LC_MESSAGES: 5,\n LC_MONETARY: 4,\n LC_NUMERIC: 1,\n LC_TIME: 2,\n Error: _b_.ValueError,\n\n _date_format: function(spec, hour){\n var t,\n locale = __BRYTHON__.locale.substr(0, 2)\n\n if(spec == \"p\"){\n var res = hours < 12 ? am[locale] : pm[locale]\n if(res === undefined){\n throw _b_.ValueError.$factory(\"no format \" + spec + \" for locale \" +\n locale)\n }\n return res\n }\n else if(spec == \"x\"){\n t = x_format\n }else if(spec == \"X\"){\n t = X_format\n }else{\n throw _b_.ValueError.$factory(\"invalid format\", spec)\n }\n for(var key in t){\n if(t[key].indexOf(locale) > -1){\n return key\n }\n }\n throw _b_.ValueError.$factory(\"no format \" + spec + \" for locale \" +\n locale)\n },\n\n localeconv: function(){\n var conv = {'grouping': [127],\n 'currency_symbol': '',\n 'n_sign_posn': 127,\n 'p_cs_precedes': 127,\n 'n_cs_precedes': 127,\n 'mon_grouping': [],\n 'n_sep_by_space': 127,\n 'decimal_point': '.',\n 'negative_sign': '',\n 'positive_sign': '',\n 'p_sep_by_space': 127,\n 'int_curr_symbol': '',\n 'p_sign_posn': 127,\n 'thousands_sep': '',\n 'mon_thousands_sep': '',\n 'frac_digits': 127,\n 'mon_decimal_point': '',\n 'int_frac_digits': 127\n }\n var res = $B.empty_dict()\n for(var key in conv){\n res.$string_dict[key] = [conv, res.$order++]\n }\n return res\n },\n\n setlocale : function(){\n var $ = $B.args(\"setlocale\", 2, {category: null, locale: null},\n [\"category\", \"locale\"], arguments, {locale: _b_.None},\n null, null)\n /// XXX category is currently ignored\n if($.locale == \"\"){\n // use browser language setting, if it is set\n var LANG = ($B.language || \"\").substr(0, 2)\n if(am.hasOwnProperty(LANG)){\n $B.locale = LANG\n return LANG\n }else{\n console.log(\"Unknown locale: \" + LANG)\n }\n }else if($.locale === _b_.None){\n // return current locale\n return $B.locale\n }else{\n // Only use 2 first characters\n try{$.locale.substr(0, 2)}\n catch(err){\n throw $module.Error.$factory(\"Invalid locale: \" + $.locale)\n }\n if(am.hasOwnProperty($.locale.substr(0, 2))){\n $B.locale = $.locale\n return $.locale\n }else{\n throw $module.Error.$factory(\"Unknown locale: \" + $.locale)\n }\n }\n }\n }\n})(__BRYTHON__)\n"], "_multiprocessing": [".js", "// multiprocessing\nvar $module = (function($B){\n\nvar _b_ = $B.builtins\nvar $s=[]\nfor(var $b in _b_) $s.push('var ' + $b +'=_b_[\"'+$b+'\"]')\neval($s.join(';'))\n\n//for(var $py_builtin in _b_){eval(\"var \"+$py_builtin+\"=_b_[$py_builtin]\")}\n\nvar Process = {\n __class__:_b_.type,\n __mro__: [_b_.object],\n $infos:{\n __name__:'Process'\n },\n $is_class: true\n}\n\nvar $convert_args=function(args) {\n var _list=[]\n for(var i=0, _len_i = args.length; i < _len_i; i++) {\n var _a=args[i]\n if(isinstance(_a, str)){_list.push(\"'\"+_a+\"'\")} else {_list.push(_a)}\n }\n\n return _list.join(',')\n}\n\nProcess.is_alive = function(self){return self.$alive}\n\nProcess.join = function(self, timeout){\n // need to block until process is complete\n // could probably use a addEventListener to execute all existing code\n // after this join statement\n\n self.$worker.addEventListener('message', function (e) {\n var data=e.data\n if (data.stdout != '') { // output stdout from process\n $B.stdout.write(data.stdout)\n }\n }, false);\n}\n\nProcess.run = function(self){\n //fix me\n}\n\nProcess.start = function(self){\n self.$worker.postMessage({target: self.$target,\n args: $convert_args(self.$args),\n // kwargs: self.$kwargs\n })\n self.$worker.addEventListener('error', function(e) { throw e})\n self.$alive=true\n}\n\nProcess.terminate = function(self){\n self.$worker.terminate()\n self.$alive=false\n}\n\n// variables\n//name\n//daemon\n//pid\n//exitcode\n\nProcess. $factory = function(){\n //arguments group=None, target=None, name=None, args=(), kwargs=()\n\n var $ns=$B.args('Process',0,{},[],arguments,{},null,'kw')\n var kw=$ns['kw']\n\n var target=_b_.dict.get($ns['kw'],'target',None)\n var args=_b_.dict.get($ns['kw'],'args',tuple.$factory())\n\n var worker = new Worker('/src/web_workers/multiprocessing.js')\n\n var res = {\n __class__:Process,\n $worker: worker,\n name: $ns['name'] || None,\n $target: target+'',\n $args: args,\n //$kwargs: $ns['kw'],\n $alive: false\n }\n return res\n}\n\n$B.set_func_names(Process, \"multiprocessing\")\n\nvar Pool = $B.make_class(\"Pool\")\n\nPool.__enter__ = function(self){}\nPool.__exit__ = function(self){}\n\nPool.__str__ = Pool.toString = Pool.__repr__=function(self){\n return ''\n}\n\nPool.map = function(){\n\n var $ns=$B.args('Pool.map', 3,\n {self:null, func:null, fargs:null}, ['self', 'func', 'fargs'],\n arguments,{},'args','kw')\n var func=$ns['func']\n var fargs=$ns['fargs']\n\n var _results=[]\n\n fargs=iter(fargs)\n\n var _pos=0\n console.log(self.$processes)\n _workers=[]\n for(var i=0; i < self.$processes; i++) {\n _workers[i] = new Worker('/src/web_workers/multiprocessing.js')\n var arg\n\n try{arg=getattr(fargs, '__next__')()}\n catch(err) {\n if (err.__class__ !== _b_.StopIteration) throw err\n }\n console.log(arg)\n _workers[i].finished=false\n _workers[i].postMessage({target: func+'', pos: _pos,\n args: $convert_args([arg])})\n _pos++\n\n _workers[i].addEventListener('message', function(e) {\n _results[e.data.pos]=e.data.result\n if (_results.length == args.length) return _results\n\n try {\n arg=getattr(fargs, '__next__')()\n e.currentTarget.postMessage({target: func+'', pos: _pos,\n args: $convert_args([arg])})\n _pos++\n } catch(err) {\n if (err.__class__ !== _b_.StopIteration) throw err\n this.finished=true\n }\n }, false);\n }\n}\n\nPool.apply_async = function(){\n\n var $ns=$B.$MakeArgs('apply_async', 3,\n {self:null, func:null, fargs:null}, ['self', 'func', 'fargs'],\n arguments,{},'args','kw')\n var func=$ns['func']\n var fargs=$ns['fargs']\n\n fargs=iter(fargs)\n\n async_result = {}\n async_result.get=function(timeout){\n console.log(results)\n console.log(fargs)\n return this.results}\n async_result.results=[]\n\n var _pos=0\n\n _workers=[]\n for(var i=0; i < self.$processes; i++) {\n _workers[i] = new Worker('/src/web_workers/multiprocessing.js')\n var arg\n\n try{arg=getattr(fargs, '__next__')()}\n catch(err) {\n if (err.__class__ !== _b_.StopIteration) throw err\n }\n //console.log(arg)\n //_workers[i].finished=false\n _workers[i].postMessage({target: func+'', pos: _pos,\n args: $convert_args([arg])})\n _pos++\n\n _workers[i].addEventListener('message', function(e) {\n async_result.results[e.data.pos]=e.data.result\n //if (_results.length == args.length) return _results\n\n try {\n arg=getattr(fargs, '__next__')()\n e.currentTarget.postMessage({target: func+'', pos: _pos,\n args: $convert_args([arg])})\n _pos++\n } catch(err) {\n if (err.__class__ !== _b_.StopIteration) throw err\n this.finished=true\n }\n }, false);\n }\n\n console.log(\"return\", async_result)\n return async_result\n}\n\nPool.$factory = function(){\n console.log(\"pool\")\n console.log(arguments)\n var $ns=$B.args('Pool',1,\n {processes:null},['processes'],arguments,{},'args','kw')\n //var kw=$ns['kw']\n\n var processes=$ns['processes']\n\n if (processes == None) {\n // look to see if we have stored cpu_count in local storage\n // maybe we should create a brython config file with settings,etc..??\n\n // if not there use a tool such as Core Estimator to calculate number of cpu's\n // http://eligrey.com/blog/post/cpu-core-estimation-with-javascript\n }\n\n console.log(processes)\n var res = {\n __class__:Pool,\n $processes:processes\n }\n return res\n}\n\n$B.set_func_names(Pool, \"multiprocessing\")\n\nreturn {Process:Process, Pool:Pool}\n\n})(__BRYTHON__)\n"], "_posixsubprocess": [".js", "var $module=(function($B){\n\n return {\n cloexec_pipe: function() {} // fixme\n }\n})(__BRYTHON__)\n"], "_profile": [".js", "// Private interface to the profiling instrumentation implemented in py_utils.js.\n// Uses local a copy of the eval function from py_builtin_functions.js\n\nvar $module=(function($B) {\n eval($B.InjectBuiltins());\n return {\n brython:$B,\n data:$B.$profile_data,\n start:$B.$profile.start,\n stop:$B.$profile.stop,\n pause:$B.$profile.pause,\n status:$B.$profile.status,\n clear:$B.$profile.clear,\n elapsed:$B.$profile.elapsed,\n run:function(src,_globals,_locals,nruns) {\n var current_frame = $B.frames_stack[$B.frames_stack.length-1]\n if(current_frame!==undefined){\n var current_locals_id = current_frame[0].replace(/\\./,'_'),\n current_globals_id = current_frame[2].replace(/\\./,'_')\n }\n\n var is_exec = true,\n leave = false\n\n // code will be run in a specific block\n var globals_id = '$profile_'+$B.UUID(),\n locals_id\n\n if(_locals===_globals){\n locals_id = globals_id\n }else{\n locals_id = '$profile_'+$B.UUID()\n }\n // Initialise the object for block namespaces\n eval('var $locals_'+globals_id+' = {}\\nvar $locals_'+locals_id+' = {}')\n\n // Initialise block globals\n\n // A _globals dictionary is provided, set or reuse its attribute\n // globals_id\n _globals.globals_id = _globals.globals_id || globals_id\n globals_id = _globals.globals_id\n\n if(_locals === _globals || _locals === undefined){\n locals_id = globals_id\n parent_scope = $B.builtins_scope\n }else{\n // The parent block of locals must be set to globals\n parent_scope = {\n id: globals_id,\n parent_block: $B.builtins_scope,\n binding: {}\n }\n for(var attr in _globals.$string_dict){\n parent_scope.binding[attr] = true\n }\n }\n\n // Initialise block globals\n if(_globals.$jsobj){var items = _globals.$jsobj}\n else{var items = _globals.$string_dict}\n for(var item in items){\n item1 = to_alias(item)\n try{\n eval('$locals_' + globals_id + '[\"' + item1 +\n '\"] = items[item]')\n }catch(err){\n console.log(err)\n console.log('error setting', item)\n break\n }\n }\n\n // Initialise block locals\n var items = _b_.dict.items(_locals), item\n if(_locals.$jsobj){var items = _locals.$jsobj}\n else{var items = _locals.$string_dict}\n for(var item in items){\n item1 = to_alias(item)\n try{\n eval('$locals_' + locals_id + '[\"' + item[0] + '\"] = item[1]')\n }catch(err){\n console.log(err)\n console.log('error setting', item)\n break\n }\n }\n //var nb_modules = Object.keys(__BRYTHON__.modules).length\n //console.log('before exec', nb_modules)\n\n console.log(\"call py2js\", src, globals_id, locals_id, parent_scope)\n var root = $B.py2js(src, globals_id, locals_id, parent_scope),\n js, gns, lns\n\n try{\n\n var js = root.to_js()\n\n var i,res,gns;\n for(i=0;i 255){return false}\n return unicode_iscased(cp)\n }\n\n function unicode_tolower(cp){\n var letter = String.fromCodePoint(cp),\n lower = letter.toLowerCase()\n return lower.charCodeAt(0)\n }\n\n function ascii_tolower(cp){\n return unicode_tolower(cp)\n }\n\nreturn {\n unicode_iscased: unicode_iscased,\n ascii_iscased: ascii_iscased,\n unicode_tolower: unicode_tolower,\n ascii_tolower: ascii_tolower\n}\n\n}\n\n)(__BRYTHON__)"], "_string": [".js", "var $module=(function($B){\n\nvar _b_ = $B.builtins\n\nfunction parts(format_string){\n var result = [],\n _parts = $B.split_format(format_string) // defined in py_string.js\n for(var i = 0; i < _parts.length; i+= 2){\n result.push({pre: _parts[i], fmt: _parts[i + 1]})\n }\n return result\n}\n\nfunction Tuple(){\n var args = []\n for(var i=0, len=arguments.length; i < len; i++){\n args.push(arguments[i])\n }\n return _b_.tuple.$factory(args)\n}\n\nreturn{\n\n formatter_field_name_split: function(fieldname){\n // Split the argument as a field name\n var parsed = $B.parse_format(fieldname),\n first = parsed.name,\n rest = []\n if(first.match(/\\d+/)){first = parseInt(first)}\n parsed.name_ext.forEach(function(ext){\n if(ext.startsWith(\"[\")){\n var item = ext.substr(1, ext.length - 2)\n if(item.match(/\\d+/)){\n rest.push(Tuple(false, parseInt(item)))\n }else{\n rest.push(Tuple(false, item))\n }\n }else{\n rest.push(Tuple(true, ext.substr(1)))\n }\n })\n return Tuple(first, _b_.iter(rest))\n },\n formatter_parser: function(format_string){\n // Parse the argument as a format string\n\n if(! _b_.isinstance(format_string, _b_.str)){\n throw _b_.ValueError.$factory(\"Invalid format string type: \" +\n $B.class_name(format_string))\n }\n\n var result = []\n parts(format_string).forEach(function(item){\n var pre = item.pre === undefined ? \"\" : item.pre,\n fmt = item.fmt\n if(fmt === undefined){\n result.push(Tuple(pre, _b_.None, _b_.None, _b_.None))\n }else if(fmt.string == ''){\n result.push(Tuple(pre, '', '', _b_.None))\n }else{\n result.push(Tuple(pre,\n fmt.raw_name + fmt.name_ext.join(\"\"),\n fmt.raw_spec,\n fmt.conv || _b_.None))\n }\n })\n return result\n }\n}\n})(__BRYTHON__)"], "_strptime": [".js", "var _b_ = __BRYTHON__.builtins\n\nvar $module = (function($B){\n return {\n _strptime_datetime: function(cls, s, fmt){\n var pos_s = 0,\n pos_fmt = 0,\n dt = {}\n function error(){\n throw Error(\"no match \" + pos_s + \" \" + s.charAt(pos_s) + \" \"+\n pos_fmt + \" \" + fmt.charAt(pos_fmt))\n }\n\n var locale = __BRYTHON__.locale,\n shortdays = [],\n longdays = [],\n conv_func = locale == \"C\" ?\n function(d){return d.toDateString()} :\n function(d, options){\n return d.toLocaleDateString(locale, options)\n }\n\n for(var day = 16; day < 23; day++){\n var d = new Date(Date.UTC(2012, 11, day, 3, 0, 0))\n shortdays.push(conv_func(d, {weekday: 'short'}))\n longdays.push(conv_func(d, {weekday: 'long'}))\n }\n\n var shortmonths = [],\n longmonths = []\n\n for(var month = 0; month < 12; month++){\n var d = new Date(Date.UTC(2012, month, 1, 3, 0, 0))\n shortmonths.push(conv_func(d, {month: 'short'}))\n longmonths.push(conv_func(d, {month: 'long'}))\n }\n\n var shortdays_re = new RegExp(shortdays.join(\"|\").replace(\".\", \"\\\\.\")),\n longdays_re = new RegExp(longdays.join(\"|\")),\n shortmonths_re = new RegExp(shortmonths.join(\"|\").replace(\".\", \"\\\\.\")),\n longmonths_re = new RegExp(longmonths.join(\"|\"))\n\n var regexps = {\n d: [\"day\", new RegExp(\"0[1-9]|[123][0-9]\")],\n f: [\"microsecond\", new RegExp(\"(\\\\d{1,6})\")],\n H: [\"hour\", new RegExp(\"[01][0-9]|2[0-3]|\\\\d\")],\n I: [\"hour\", new RegExp(\"0[0-9]|1[0-2]\")],\n m: [\"month\", new RegExp(\"0[1-9]|1[012]\")],\n M: [\"minute\", new RegExp(\"[0-5][0-9]\")],\n S: [\"second\", new RegExp(\"([1-5]\\\\d)|(0?\\\\d)\")],\n y: [\"year\", new RegExp(\"0{0,2}\\\\d{2}\")],\n Y: [\"year\", new RegExp(\"\\\\d{4}\")],\n z: [\"tzinfo\", new RegExp(\"Z\")]\n }\n\n while(pos_fmt < fmt.length){\n var car = fmt.charAt(pos_fmt)\n if(car == \"%\"){\n var spec = fmt.charAt(pos_fmt + 1),\n regexp = regexps[spec]\n if(regexp !== undefined){\n var re = regexp[1],\n attr = regexp[0],\n res = re.exec(s.substr(pos_s))\n if(res === null){\n error()\n }else{\n if(dt[attr] !== undefined){\n throw Error(attr + \" is defined more than once\")\n }else{\n dt[attr] = parseInt(res[0])\n if(attr == \"microsecond\"){\n while(dt[attr] < 100000){\n dt[attr] *= 10\n }\n }else if(attr == \"tzinfo\"){\n // Only value supported for the moment : Z\n // (UTC)\n var dt_module = $B.imported[cls.__module__]\n dt.tzinfo = dt_module.timezone.utc\n }\n pos_fmt += 2\n pos_s += res[0].length\n }\n }\n }else if(spec == \"a\" || spec == \"A\"){\n // Locale's abbreviated (a) or full (A) weekday name\n var attr = \"weekday\",\n re = spec == \"a\" ? shortdays_re : longdays_re,\n t = spec == \"a\" ? shortdays : longdays\n res = re.exec(s.substr(pos_s))\n if(res === null){\n error()\n }else{\n var match = res[0],\n ix = t.indexOf(match)\n }\n if(dt.weekday !== undefined){\n throw Error(attr + \" is defined more than once\")\n }else{\n dt.weekday = ix\n }\n pos_fmt += 2\n pos_s += match.length\n }else if(spec == \"b\" || spec == \"B\"){\n // Locales's abbreviated (b) or full (B) month\n var attr = \"month\",\n re = spec == \"b\" ? shortmonths_re : longmonths_re,\n t = spec == \"b\" ? shortmonths : longmonths,\n res = re.exec(s.substr(pos_s))\n if(res === null){\n error()\n }else{\n var match = res[0],\n ix = t.indexOf(match)\n }\n if(dt.month !== undefined){\n throw Error(attr + \" is defined more than once\")\n }else{\n dt.month = ix + 1\n }\n pos_fmt += 2\n pos_s += match.length\n }else if(spec == \"c\"){\n // Locale's appropriate date and time representation\n var fmt1 = fmt.substr(0, pos_fmt - 1) + _locale_c_format() +\n fmt.substr(pos_fmt + 2)\n fmt = fmt1\n }else if(spec == \"%\"){\n if(s.charAt(pos_s) == \"%\"){\n pos_fmt++\n pos_s++\n }else{\n error()\n }\n }else{\n pos_fmt++\n }\n }else{\n if(car == s.charAt(pos_s)){\n pos_fmt++\n pos_s++\n }else{\n error()\n }\n }\n }\n return $B.$call(cls)(dt.year, dt.month, dt.day,\n dt.hour || 0, dt.minute || 0, dt.second || 0,\n dt.microsecond || 0, dt.tzinfo || _b_.None)\n }\n }\n})(__BRYTHON__)\n"], "_svg": [".js", "// creation of an HTML element\nvar $module = (function($B){\n\nvar _b_ = $B.builtins\nvar TagSum = $B.TagSum // defined in py_dom.js\n\nvar $s=[]\nfor(var $b in _b_) $s.push('var ' + $b +' = _b_[\"' + $b + '\"]')\neval($s.join(';'))\n\nvar $svgNS = \"http://www.w3.org/2000/svg\"\nvar $xlinkNS = \"http://www.w3.org/1999/xlink\"\n\nfunction makeTagDict(tagName){\n // return the dictionary for the class associated with tagName\n var dict = $B.make_class(tagName)\n\n dict.__init__ = function(){\n var $ns = $B.args('__init__', 1, {self: null}, ['self'],\n arguments, {}, 'args', 'kw'),\n self = $ns['self'],\n args = $ns['args']\n if(args.length == 1){\n var first = args[0]\n if(isinstance(first, [str, int, float])){\n self.appendChild(document.createTextNode(str.$factory(first)))\n }else if(first.__class__ === TagSum){\n for(var i = 0, len = first.children.length; i < len; i++){\n self.appendChild(first.children[i].elt)\n }\n }else{ // argument is another DOMNode instance\n try{self.appendChild(first.elt)}\n catch(err){throw ValueError.$factory('wrong element ' + first)}\n }\n }\n\n // attributes\n var items = _b_.list.$factory(_b_.dict.items($ns['kw']))\n for(var i = 0, len = items.length; i < len; i++){\n // keyword arguments\n var arg = items[i][0],\n value = items[i][1]\n if(arg.toLowerCase().substr(0,2) == \"on\"){\n // Event binding passed as argument \"onclick\", \"onfocus\"...\n // Better use method bind of DOMNode objects\n var js = '$B.DOMNode.bind(self,\"' +\n arg.toLowerCase().substr(2)\n eval(js+'\",function(){'+value+'})')\n }else if(arg.toLowerCase() == \"style\"){\n $B.DOMNode.set_style(self,value)\n }else if(arg.toLowerCase().indexOf(\"href\") !== -1){ // xlink:href\n self.setAttributeNS( \"http://www.w3.org/1999/xlink\",\n \"href\",value)\n }else{\n if(value !== false){\n // option.selected=false sets it to true :-)\n try{\n arg = arg.replace('_', '-')\n self.setAttributeNS(null, arg, value)\n }catch(err){\n throw ValueError.$factory(\"can't set attribute \" + arg)\n }\n }\n }\n }\n }\n\n dict.__mro__ = [$B.DOMNode, $B.builtins.object]\n\n dict.__new__ = function(cls){\n var res = $B.DOMNode.$factory(document.createElementNS($svgNS, tagName))\n res.__class__ = cls\n return res\n }\n\n dict.$factory = function(){\n var res = $B.DOMNode.$factory(\n document.createElementNS($svgNS, tagName))\n res.__class__ = dict\n // apply __init__\n dict.__init__(res, ...arguments)\n return res\n }\n\n $B.set_func_names(dict, \"browser.svg\")\n\n return dict\n}\n\n\n// SVG\nvar $svg_tags = ['a',\n'altGlyph',\n'altGlyphDef',\n'altGlyphItem',\n'animate',\n'animateColor',\n'animateMotion',\n'animateTransform',\n'circle',\n'clipPath',\n'color_profile', // instead of color-profile\n'cursor',\n'defs',\n'desc',\n'ellipse',\n'feBlend',\n'foreignObject', //patch to enable foreign objects\n'g',\n'image',\n'line',\n'linearGradient',\n'marker',\n'mask',\n'path',\n'pattern',\n'polygon',\n'polyline',\n'radialGradient',\n'rect',\n'set',\n'stop',\n'svg',\n'text',\n'tref',\n'tspan',\n'use']\n\n// create classes\nvar obj = new Object()\nvar dicts = {}\nfor(var i = 0, len = $svg_tags.length; i < len; i++){\n var tag = $svg_tags[i]\n obj[tag] = makeTagDict(tag)\n}\n\nreturn obj\n})(__BRYTHON__)\n"], "_warnings": [".js", "var $module = (function($B){\n\n_b_ = $B.builtins\n\nreturn {\n __doc__: \"_warnings provides basic warning filtering support.\\n \" +\n \"It is a helper module to speed up interpreter start-up.\",\n\n default_action: \"default\",\n\n filters: [\n ['ignore', _b_.None, _b_.DeprecationWarning, _b_.None, 0],\n ['ignore', _b_.None, _b_.PendingDeprecationWarning, _b_.None, 0],\n ['ignore', _b_.None, _b_.ImportWarning, _b_.None, 0],\n ['ignore', _b_.None, _b_.BytesWarning, _b_.None, 0]].map(\n function(x){return _b_.tuple.$factory(x)}),\n\n once_registry: $B.empty_dict(),\n\n warn: function(){},\n\n warn_explicit: function(){}\n\n}\n\n})(__BRYTHON__)\n"], "_webcomponent": [".js", "// module for Web Components\nvar $module = (function($B){\n\nvar _b_ = $B.builtins\n\nfunction define(tag_name, cls){\n var $ = $B.args(\"define\", 2, {tag_name: null, cls: null},\n [\"tag_name\", \"cls\"], arguments, {}, null, null),\n tag_name = $.tag_name,\n cls = $.cls\n if(typeof tag_name != \"string\"){\n throw _b_.TypeError.$factory(\"first argument of define() \" +\n \"must be a string, not '\" + $B.class_name(tag_name) + \"'\")\n }else if(tag_name.indexOf(\"-\") == -1){\n throw _b_.ValueError.$factory(\"custom tag name must \" +\n \"contain a hyphen (-)\")\n }\n if(!_b_.isinstance(cls, _b_.type)){\n throw _b_.TypeError.$factory(\"second argument of define() \" +\n \"must be a class, not '\" + $B.class_name(tag_name) + \"'\")\n }\n\n // Create the Javascript class used for the component. It must have\n // the same name as the Python class\n var src = String.raw`var WebComponent = class extends HTMLElement {\n constructor(){\n // Always call super first in constructor\n super()\n if(cls.__init__){\n try{\n var _self = $B.DOMNode.$factory(this)\n _self.__class__ = cls\n $B.$call(cls.__init__)(_self)\n }catch(err){\n $B.handle_error(err)\n }\n }\n }\n static get observedAttributes(){\n if(cls.observedAttributes){\n return cls.observedAttributes(cls)\n }else{\n return []\n }\n }\n }\n `\n var name = cls.$infos.__name__\n eval(src.replace(\"WebComponent\", name))\n var webcomp = eval(name) // JS class for component\n webcomp.$cls = cls\n\n for(key in cls){\n // Wrap other methods such as connectedCallback\n if(typeof cls[key] == \"function\"){\n webcomp.prototype[key] = (function(attr){\n return function(){\n return $B.pyobj2jsobj(cls[attr]).call(null,\n $B.DOMNode.$factory(this), ...arguments)\n }\n })(key)\n }\n }\n\n // Override __getattribute__ to handle DOMNode attributes such as\n // attachShadow\n cls.__getattribute__ = function(self, attr){\n try{\n return $B.DOMNode.__getattribute__(self, attr)\n }catch(err){\n if(err.__class__ === _b_.AttributeError){\n var ga = $B.$getattr(cls, \"__getattribute__\")\n return ga(self, attr)\n }else{\n throw err\n }\n }\n }\n\n // define WebComp as the class to use for the specified tag name\n customElements.define(tag_name, webcomp)\n}\n\nfunction get(name){\n var ce = customElements.get(name)\n if(ce && ce.$cls){return ce.$cls}\n return _b_.None\n}\n\nreturn {\n define: define,\n get: get\n}\n\n})(__BRYTHON__)"], "_webworker": [".js", "// Web Worker implementation\n\nvar $module = (function($B){\n\nvar _b_ = $B.builtins\n\nvar brython_scripts = ['brython', 'brython_stdlib']\n\nvar wclass = $B.make_class(\"Worker\",\n function(worker){\n var res = worker\n res.send = res.postMessage\n return res\n }\n)\nwclass.__mro__ = [$B.JSObj, _b_.object]\n\n$B.set_func_names(wclass, \"browser.worker\")\n\nvar _Worker = $B.make_class(\"Worker\", function(id, onmessage, onerror){\n var $ = $B.args(\"__init__\", 3, {id: null, onmessage: null, onerror: null},\n ['id', 'onmessage', 'onerror'], arguments,\n {onmessage: _b_.None, onerror: _b_.None}, null, null),\n id = $.id,\n src = $B.webworkers[id]\n if(src === undefined){\n throw _b_.KeyError.$factory(id)\n }\n var script_id = \"worker\" + $B.UUID(),\n js = __BRYTHON__.imported.javascript.py2js(src,\n script_id),\n header = 'var $locals_' + script_id +' = {}\\n';\n brython_scripts.forEach(function(script){\n var url = $B.brython_path + script + \".js?\" +\n (new Date()).getTime()\n header += 'importScripts(\"' + url + '\")\\n'\n })\n // restore brython_path\n header += '__BRYTHON__.brython_path = \"' + $B.brython_path +\n '\"\\n'\n // restore path for imports (cf. issue #1305)\n header += '__BRYTHON__.path = \"' + $B.path +'\".split(\",\")\\n'\n // Call brython() to initialize internal Brython values\n header += 'brython(1)\\n'\n js = header + js\n var blob = new Blob([js], {type: \"application/js\"}),\n url = URL.createObjectURL(blob),\n w = new Worker(url),\n res = wclass.$factory(w)\n return res\n})\n\nreturn {\n Worker: _Worker\n}\n\n})(__BRYTHON__)\n"], "_zlib_utils": [".js", "\nfunction rfind(buf, seq){\n var buflen = buf.length,\n len = seq.length\n for(var i = buflen - len; i >= 0; i--){\n var chunk = buf.slice(i, i + len),\n found = true\n for(var j = 0; j < len; j++){\n if(chunk[j] != seq[j]){\n found = false\n break\n }\n }\n if(found){return i}\n }\n return -1\n}\n\n\nvar c;\nvar crcTable = [];\nfor(var n =0; n < 256; n++){\n c = n;\n for(var k =0; k < 8; k++){\n c = ((c&1) ? (0xEDB88320 ^ (c >>> 1)) : (c >>> 1));\n }\n crcTable[n] = c;\n}\n\nvar $module = (function($B){\n\n return {\n crc32: function(str) {\n var crc = 0 ^ (-1);\n \n for (var i = 0; i < str.length; i++ ) {\n crc = (crc >>> 8) ^ crcTable[(crc ^ str.charCodeAt(i)) & 0xFF];\n }\n \n return (crc ^ (-1)) >>> 0;\n },\n\n lz_generator: function(text, size, min_len){\n /*\n Returns a list of items based on the LZ algorithm, using the\n specified window size and a minimum match length.\n The items are a tuple (length, distance) if a match has been\n found, and a byte otherwise.\n */\n // 'text' is an instance of Python 'bytes' class, the actual\n // bytes are in text.source\n text = text.source\n if(min_len === undefined){\n min_len = 3\n }\n var pos = 0, // position in text\n items = [] // returned items\n while(pos < text.length){\n sequence = text.slice(pos, pos + min_len)\n if(sequence.length < 3){\n for(var i = pos; i < text.length; i++){\n items.push(text[i])\n }\n break\n }\n // Search the sequence in the 'size' previous bytes\n buf = text.slice(pos - size, pos)\n buf_pos = rfind(buf, sequence)\n if(buf_pos > -1){\n // Match of length 3 found; search a longer one\n var len = 1\n while(len < 259 &&\n buf_pos + len < buf.length &&\n pos + len < text.length &&\n text[pos + len] == buf[buf_pos + len]){\n len += 1\n }\n match = text.slice(pos, pos + len)\n // \"Lazy matching\": search longer match starting at next\n // position\n longer_match = false\n if(pos + len < text.length - 2){\n match2 = text.slice(pos + 1, pos + len + 2)\n longer_buf_pos = rfind(buf, match2)\n if(longer_buf_pos > -1){\n // found longer match : emit current byte as\n // literal and move 1 byte forward\n longer_match = true\n char = text[pos]\n items.push(char)\n pos += 1\n }\n }\n if(! longer_match){\n distance = buf.length - buf_pos\n items.push($B.fast_tuple([len, distance]))\n if(pos + len == text.length){\n break\n }else{\n pos += len\n items.push(text[pos])\n pos += 1\n }\n }\n }else{\n char = text[pos]\n items.push(char)\n pos += 1\n }\n }\n return items\n }\n }\n})(__BRYTHON__)"], "crypto_js": [".py", "", [], 1], "crypto_js.rollups": [".py", "", [], 1], "crypto_js.rollups.md5": [".js", "/*\nCryptoJS v3.1.2\ncode.google.com/p/crypto-js\n(c) 2009-2013 by Jeff Mott. All rights reserved.\ncode.google.com/p/crypto-js/wiki/License\n*/\nvar CryptoJS=CryptoJS||function(s,p){var m={},l=m.lib={},n=function(){},r=l.Base={extend:function(b){n.prototype=this;var h=new n;b&&h.mixIn(b);h.hasOwnProperty(\"init\")||(h.init=function(){h.$super.init.apply(this,arguments)});h.init.prototype=h;h.$super=this;return h},create:function(){var b=this.extend();b.init.apply(b,arguments);return b},init:function(){},mixIn:function(b){for(var h in b)b.hasOwnProperty(h)&&(this[h]=b[h]);b.hasOwnProperty(\"toString\")&&(this.toString=b.toString)},clone:function(){return this.init.prototype.extend(this)}},\nq=l.WordArray=r.extend({init:function(b,h){b=this.words=b||[];this.sigBytes=h!=p?h:4*b.length},toString:function(b){return(b||t).stringify(this)},concat:function(b){var h=this.words,a=b.words,j=this.sigBytes;b=b.sigBytes;this.clamp();if(j%4)for(var g=0;g>>2]|=(a[g>>>2]>>>24-8*(g%4)&255)<<24-8*((j+g)%4);else if(65535>>2]=a[g>>>2];else h.push.apply(h,a);this.sigBytes+=b;return this},clamp:function(){var b=this.words,h=this.sigBytes;b[h>>>2]&=4294967295<<\n32-8*(h%4);b.length=s.ceil(h/4)},clone:function(){var b=r.clone.call(this);b.words=this.words.slice(0);return b},random:function(b){for(var h=[],a=0;a>>2]>>>24-8*(j%4)&255;g.push((k>>>4).toString(16));g.push((k&15).toString(16))}return g.join(\"\")},parse:function(b){for(var a=b.length,g=[],j=0;j>>3]|=parseInt(b.substr(j,\n2),16)<<24-4*(j%8);return new q.init(g,a/2)}},a=v.Latin1={stringify:function(b){var a=b.words;b=b.sigBytes;for(var g=[],j=0;j>>2]>>>24-8*(j%4)&255));return g.join(\"\")},parse:function(b){for(var a=b.length,g=[],j=0;j>>2]|=(b.charCodeAt(j)&255)<<24-8*(j%4);return new q.init(g,a)}},u=v.Utf8={stringify:function(b){try{return decodeURIComponent(escape(a.stringify(b)))}catch(g){throw Error(\"Malformed UTF-8 data\");}},parse:function(b){return a.parse(unescape(encodeURIComponent(b)))}},\ng=l.BufferedBlockAlgorithm=r.extend({reset:function(){this._data=new q.init;this._nDataBytes=0},_append:function(b){\"string\"==typeof b&&(b=u.parse(b));this._data.concat(b);this._nDataBytes+=b.sigBytes},_process:function(b){var a=this._data,g=a.words,j=a.sigBytes,k=this.blockSize,m=j/(4*k),m=b?s.ceil(m):s.max((m|0)-this._minBufferSize,0);b=m*k;j=s.min(4*b,j);if(b){for(var l=0;l>>32-j)+k}function m(a,k,b,h,l,j,m){a=a+(k&h|b&~h)+l+m;return(a<>>32-j)+k}function l(a,k,b,h,l,j,m){a=a+(k^b^h)+l+m;return(a<>>32-j)+k}function n(a,k,b,h,l,j,m){a=a+(b^(k|~h))+l+m;return(a<>>32-j)+k}for(var r=CryptoJS,q=r.lib,v=q.WordArray,t=q.Hasher,q=r.algo,a=[],u=0;64>u;u++)a[u]=4294967296*s.abs(s.sin(u+1))|0;q=q.MD5=t.extend({_doReset:function(){this._hash=new v.init([1732584193,4023233417,2562383102,271733878])},\n_doProcessBlock:function(g,k){for(var b=0;16>b;b++){var h=k+b,w=g[h];g[h]=(w<<8|w>>>24)&16711935|(w<<24|w>>>8)&4278255360}var b=this._hash.words,h=g[k+0],w=g[k+1],j=g[k+2],q=g[k+3],r=g[k+4],s=g[k+5],t=g[k+6],u=g[k+7],v=g[k+8],x=g[k+9],y=g[k+10],z=g[k+11],A=g[k+12],B=g[k+13],C=g[k+14],D=g[k+15],c=b[0],d=b[1],e=b[2],f=b[3],c=p(c,d,e,f,h,7,a[0]),f=p(f,c,d,e,w,12,a[1]),e=p(e,f,c,d,j,17,a[2]),d=p(d,e,f,c,q,22,a[3]),c=p(c,d,e,f,r,7,a[4]),f=p(f,c,d,e,s,12,a[5]),e=p(e,f,c,d,t,17,a[6]),d=p(d,e,f,c,u,22,a[7]),\nc=p(c,d,e,f,v,7,a[8]),f=p(f,c,d,e,x,12,a[9]),e=p(e,f,c,d,y,17,a[10]),d=p(d,e,f,c,z,22,a[11]),c=p(c,d,e,f,A,7,a[12]),f=p(f,c,d,e,B,12,a[13]),e=p(e,f,c,d,C,17,a[14]),d=p(d,e,f,c,D,22,a[15]),c=m(c,d,e,f,w,5,a[16]),f=m(f,c,d,e,t,9,a[17]),e=m(e,f,c,d,z,14,a[18]),d=m(d,e,f,c,h,20,a[19]),c=m(c,d,e,f,s,5,a[20]),f=m(f,c,d,e,y,9,a[21]),e=m(e,f,c,d,D,14,a[22]),d=m(d,e,f,c,r,20,a[23]),c=m(c,d,e,f,x,5,a[24]),f=m(f,c,d,e,C,9,a[25]),e=m(e,f,c,d,q,14,a[26]),d=m(d,e,f,c,v,20,a[27]),c=m(c,d,e,f,B,5,a[28]),f=m(f,c,\nd,e,j,9,a[29]),e=m(e,f,c,d,u,14,a[30]),d=m(d,e,f,c,A,20,a[31]),c=l(c,d,e,f,s,4,a[32]),f=l(f,c,d,e,v,11,a[33]),e=l(e,f,c,d,z,16,a[34]),d=l(d,e,f,c,C,23,a[35]),c=l(c,d,e,f,w,4,a[36]),f=l(f,c,d,e,r,11,a[37]),e=l(e,f,c,d,u,16,a[38]),d=l(d,e,f,c,y,23,a[39]),c=l(c,d,e,f,B,4,a[40]),f=l(f,c,d,e,h,11,a[41]),e=l(e,f,c,d,q,16,a[42]),d=l(d,e,f,c,t,23,a[43]),c=l(c,d,e,f,x,4,a[44]),f=l(f,c,d,e,A,11,a[45]),e=l(e,f,c,d,D,16,a[46]),d=l(d,e,f,c,j,23,a[47]),c=n(c,d,e,f,h,6,a[48]),f=n(f,c,d,e,u,10,a[49]),e=n(e,f,c,d,\nC,15,a[50]),d=n(d,e,f,c,s,21,a[51]),c=n(c,d,e,f,A,6,a[52]),f=n(f,c,d,e,q,10,a[53]),e=n(e,f,c,d,y,15,a[54]),d=n(d,e,f,c,w,21,a[55]),c=n(c,d,e,f,v,6,a[56]),f=n(f,c,d,e,D,10,a[57]),e=n(e,f,c,d,t,15,a[58]),d=n(d,e,f,c,B,21,a[59]),c=n(c,d,e,f,r,6,a[60]),f=n(f,c,d,e,z,10,a[61]),e=n(e,f,c,d,j,15,a[62]),d=n(d,e,f,c,x,21,a[63]);b[0]=b[0]+c|0;b[1]=b[1]+d|0;b[2]=b[2]+e|0;b[3]=b[3]+f|0},_doFinalize:function(){var a=this._data,k=a.words,b=8*this._nDataBytes,h=8*a.sigBytes;k[h>>>5]|=128<<24-h%32;var l=s.floor(b/\n4294967296);k[(h+64>>>9<<4)+15]=(l<<8|l>>>24)&16711935|(l<<24|l>>>8)&4278255360;k[(h+64>>>9<<4)+14]=(b<<8|b>>>24)&16711935|(b<<24|b>>>8)&4278255360;a.sigBytes=4*(k.length+1);this._process();a=this._hash;k=a.words;for(b=0;4>b;b++)h=k[b],k[b]=(h<<8|h>>>24)&16711935|(h<<24|h>>>8)&4278255360;return a},clone:function(){var a=t.clone.call(this);a._hash=this._hash.clone();return a}});r.MD5=t._createHelper(q);r.HmacMD5=t._createHmacHelper(q)})(Math);\n"], "crypto_js.rollups.sha1": [".js", "/*\nCryptoJS v3.1.2\ncode.google.com/p/crypto-js\n(c) 2009-2013 by Jeff Mott. All rights reserved.\ncode.google.com/p/crypto-js/wiki/License\n*/\nvar CryptoJS=CryptoJS||function(e,m){var p={},j=p.lib={},l=function(){},f=j.Base={extend:function(a){l.prototype=this;var c=new l;a&&c.mixIn(a);c.hasOwnProperty(\"init\")||(c.init=function(){c.$super.init.apply(this,arguments)});c.init.prototype=c;c.$super=this;return c},create:function(){var a=this.extend();a.init.apply(a,arguments);return a},init:function(){},mixIn:function(a){for(var c in a)a.hasOwnProperty(c)&&(this[c]=a[c]);a.hasOwnProperty(\"toString\")&&(this.toString=a.toString)},clone:function(){return this.init.prototype.extend(this)}},\nn=j.WordArray=f.extend({init:function(a,c){a=this.words=a||[];this.sigBytes=c!=m?c:4*a.length},toString:function(a){return(a||h).stringify(this)},concat:function(a){var c=this.words,q=a.words,d=this.sigBytes;a=a.sigBytes;this.clamp();if(d%4)for(var b=0;b>>2]|=(q[b>>>2]>>>24-8*(b%4)&255)<<24-8*((d+b)%4);else if(65535>>2]=q[b>>>2];else c.push.apply(c,q);this.sigBytes+=a;return this},clamp:function(){var a=this.words,c=this.sigBytes;a[c>>>2]&=4294967295<<\n32-8*(c%4);a.length=e.ceil(c/4)},clone:function(){var a=f.clone.call(this);a.words=this.words.slice(0);return a},random:function(a){for(var c=[],b=0;b>>2]>>>24-8*(d%4)&255;b.push((f>>>4).toString(16));b.push((f&15).toString(16))}return b.join(\"\")},parse:function(a){for(var c=a.length,b=[],d=0;d>>3]|=parseInt(a.substr(d,\n2),16)<<24-4*(d%8);return new n.init(b,c/2)}},g=b.Latin1={stringify:function(a){var c=a.words;a=a.sigBytes;for(var b=[],d=0;d>>2]>>>24-8*(d%4)&255));return b.join(\"\")},parse:function(a){for(var c=a.length,b=[],d=0;d>>2]|=(a.charCodeAt(d)&255)<<24-8*(d%4);return new n.init(b,c)}},r=b.Utf8={stringify:function(a){try{return decodeURIComponent(escape(g.stringify(a)))}catch(c){throw Error(\"Malformed UTF-8 data\");}},parse:function(a){return g.parse(unescape(encodeURIComponent(a)))}},\nk=j.BufferedBlockAlgorithm=f.extend({reset:function(){this._data=new n.init;this._nDataBytes=0},_append:function(a){\"string\"==typeof a&&(a=r.parse(a));this._data.concat(a);this._nDataBytes+=a.sigBytes},_process:function(a){var c=this._data,b=c.words,d=c.sigBytes,f=this.blockSize,h=d/(4*f),h=a?e.ceil(h):e.max((h|0)-this._minBufferSize,0);a=h*f;d=e.min(4*a,d);if(a){for(var g=0;ga;a++){if(16>a)l[a]=f[n+a]|0;else{var c=l[a-3]^l[a-8]^l[a-14]^l[a-16];l[a]=c<<1|c>>>31}c=(h<<5|h>>>27)+j+l[a];c=20>a?c+((g&e|~g&k)+1518500249):40>a?c+((g^e^k)+1859775393):60>a?c+((g&e|g&k|e&k)-1894007588):c+((g^e^\nk)-899497514);j=k;k=e;e=g<<30|g>>>2;g=h;h=c}b[0]=b[0]+h|0;b[1]=b[1]+g|0;b[2]=b[2]+e|0;b[3]=b[3]+k|0;b[4]=b[4]+j|0},_doFinalize:function(){var f=this._data,e=f.words,b=8*this._nDataBytes,h=8*f.sigBytes;e[h>>>5]|=128<<24-h%32;e[(h+64>>>9<<4)+14]=Math.floor(b/4294967296);e[(h+64>>>9<<4)+15]=b;f.sigBytes=4*e.length;this._process();return this._hash},clone:function(){var e=j.clone.call(this);e._hash=this._hash.clone();return e}});e.SHA1=j._createHelper(m);e.HmacSHA1=j._createHmacHelper(m)})();\n"], "crypto_js.rollups.sha224": [".js", "/*\nCryptoJS v3.1.2\ncode.google.com/p/crypto-js\n(c) 2009-2013 by Jeff Mott. All rights reserved.\ncode.google.com/p/crypto-js/wiki/License\n*/\nvar CryptoJS=CryptoJS||function(g,l){var f={},k=f.lib={},h=function(){},m=k.Base={extend:function(a){h.prototype=this;var c=new h;a&&c.mixIn(a);c.hasOwnProperty(\"init\")||(c.init=function(){c.$super.init.apply(this,arguments)});c.init.prototype=c;c.$super=this;return c},create:function(){var a=this.extend();a.init.apply(a,arguments);return a},init:function(){},mixIn:function(a){for(var c in a)a.hasOwnProperty(c)&&(this[c]=a[c]);a.hasOwnProperty(\"toString\")&&(this.toString=a.toString)},clone:function(){return this.init.prototype.extend(this)}},\nq=k.WordArray=m.extend({init:function(a,c){a=this.words=a||[];this.sigBytes=c!=l?c:4*a.length},toString:function(a){return(a||s).stringify(this)},concat:function(a){var c=this.words,d=a.words,b=this.sigBytes;a=a.sigBytes;this.clamp();if(b%4)for(var e=0;e>>2]|=(d[e>>>2]>>>24-8*(e%4)&255)<<24-8*((b+e)%4);else if(65535>>2]=d[e>>>2];else c.push.apply(c,d);this.sigBytes+=a;return this},clamp:function(){var a=this.words,c=this.sigBytes;a[c>>>2]&=4294967295<<\n32-8*(c%4);a.length=g.ceil(c/4)},clone:function(){var a=m.clone.call(this);a.words=this.words.slice(0);return a},random:function(a){for(var c=[],d=0;d>>2]>>>24-8*(b%4)&255;d.push((e>>>4).toString(16));d.push((e&15).toString(16))}return d.join(\"\")},parse:function(a){for(var c=a.length,d=[],b=0;b>>3]|=parseInt(a.substr(b,\n2),16)<<24-4*(b%8);return new q.init(d,c/2)}},n=t.Latin1={stringify:function(a){var c=a.words;a=a.sigBytes;for(var d=[],b=0;b>>2]>>>24-8*(b%4)&255));return d.join(\"\")},parse:function(a){for(var c=a.length,d=[],b=0;b>>2]|=(a.charCodeAt(b)&255)<<24-8*(b%4);return new q.init(d,c)}},j=t.Utf8={stringify:function(a){try{return decodeURIComponent(escape(n.stringify(a)))}catch(c){throw Error(\"Malformed UTF-8 data\");}},parse:function(a){return n.parse(unescape(encodeURIComponent(a)))}},\nw=k.BufferedBlockAlgorithm=m.extend({reset:function(){this._data=new q.init;this._nDataBytes=0},_append:function(a){\"string\"==typeof a&&(a=j.parse(a));this._data.concat(a);this._nDataBytes+=a.sigBytes},_process:function(a){var c=this._data,d=c.words,b=c.sigBytes,e=this.blockSize,f=b/(4*e),f=a?g.ceil(f):g.max((f|0)-this._minBufferSize,0);a=f*e;b=g.min(4*a,b);if(a){for(var u=0;un;){var j;a:{j=s;for(var w=g.sqrt(j),v=2;v<=w;v++)if(!(j%v)){j=!1;break a}j=!0}j&&(8>n&&(m[n]=t(g.pow(s,0.5))),q[n]=t(g.pow(s,1/3)),n++);s++}var a=[],f=f.SHA256=h.extend({_doReset:function(){this._hash=new k.init(m.slice(0))},_doProcessBlock:function(c,d){for(var b=this._hash.words,e=b[0],f=b[1],g=b[2],k=b[3],h=b[4],l=b[5],m=b[6],n=b[7],p=0;64>p;p++){if(16>p)a[p]=\nc[d+p]|0;else{var j=a[p-15],r=a[p-2];a[p]=((j<<25|j>>>7)^(j<<14|j>>>18)^j>>>3)+a[p-7]+((r<<15|r>>>17)^(r<<13|r>>>19)^r>>>10)+a[p-16]}j=n+((h<<26|h>>>6)^(h<<21|h>>>11)^(h<<7|h>>>25))+(h&l^~h&m)+q[p]+a[p];r=((e<<30|e>>>2)^(e<<19|e>>>13)^(e<<10|e>>>22))+(e&f^e&g^f&g);n=m;m=l;l=h;h=k+j|0;k=g;g=f;f=e;e=j+r|0}b[0]=b[0]+e|0;b[1]=b[1]+f|0;b[2]=b[2]+g|0;b[3]=b[3]+k|0;b[4]=b[4]+h|0;b[5]=b[5]+l|0;b[6]=b[6]+m|0;b[7]=b[7]+n|0},_doFinalize:function(){var a=this._data,d=a.words,b=8*this._nDataBytes,e=8*a.sigBytes;\nd[e>>>5]|=128<<24-e%32;d[(e+64>>>9<<4)+14]=g.floor(b/4294967296);d[(e+64>>>9<<4)+15]=b;a.sigBytes=4*d.length;this._process();return this._hash},clone:function(){var a=h.clone.call(this);a._hash=this._hash.clone();return a}});l.SHA256=h._createHelper(f);l.HmacSHA256=h._createHmacHelper(f)})(Math);\n(function(){var g=CryptoJS,l=g.lib.WordArray,f=g.algo,k=f.SHA256,f=f.SHA224=k.extend({_doReset:function(){this._hash=new l.init([3238371032,914150663,812702999,4144912697,4290775857,1750603025,1694076839,3204075428])},_doFinalize:function(){var f=k._doFinalize.call(this);f.sigBytes-=4;return f}});g.SHA224=k._createHelper(f);g.HmacSHA224=k._createHmacHelper(f)})();\n"], "crypto_js.rollups.sha256": [".js", "/*\nCryptoJS v3.1.2\ncode.google.com/p/crypto-js\n(c) 2009-2013 by Jeff Mott. All rights reserved.\ncode.google.com/p/crypto-js/wiki/License\n*/\nvar CryptoJS=CryptoJS||function(h,s){var f={},t=f.lib={},g=function(){},j=t.Base={extend:function(a){g.prototype=this;var c=new g;a&&c.mixIn(a);c.hasOwnProperty(\"init\")||(c.init=function(){c.$super.init.apply(this,arguments)});c.init.prototype=c;c.$super=this;return c},create:function(){var a=this.extend();a.init.apply(a,arguments);return a},init:function(){},mixIn:function(a){for(var c in a)a.hasOwnProperty(c)&&(this[c]=a[c]);a.hasOwnProperty(\"toString\")&&(this.toString=a.toString)},clone:function(){return this.init.prototype.extend(this)}},\nq=t.WordArray=j.extend({init:function(a,c){a=this.words=a||[];this.sigBytes=c!=s?c:4*a.length},toString:function(a){return(a||u).stringify(this)},concat:function(a){var c=this.words,d=a.words,b=this.sigBytes;a=a.sigBytes;this.clamp();if(b%4)for(var e=0;e>>2]|=(d[e>>>2]>>>24-8*(e%4)&255)<<24-8*((b+e)%4);else if(65535>>2]=d[e>>>2];else c.push.apply(c,d);this.sigBytes+=a;return this},clamp:function(){var a=this.words,c=this.sigBytes;a[c>>>2]&=4294967295<<\n32-8*(c%4);a.length=h.ceil(c/4)},clone:function(){var a=j.clone.call(this);a.words=this.words.slice(0);return a},random:function(a){for(var c=[],d=0;d>>2]>>>24-8*(b%4)&255;d.push((e>>>4).toString(16));d.push((e&15).toString(16))}return d.join(\"\")},parse:function(a){for(var c=a.length,d=[],b=0;b>>3]|=parseInt(a.substr(b,\n2),16)<<24-4*(b%8);return new q.init(d,c/2)}},k=v.Latin1={stringify:function(a){var c=a.words;a=a.sigBytes;for(var d=[],b=0;b>>2]>>>24-8*(b%4)&255));return d.join(\"\")},parse:function(a){for(var c=a.length,d=[],b=0;b>>2]|=(a.charCodeAt(b)&255)<<24-8*(b%4);return new q.init(d,c)}},l=v.Utf8={stringify:function(a){try{return decodeURIComponent(escape(k.stringify(a)))}catch(c){throw Error(\"Malformed UTF-8 data\");}},parse:function(a){return k.parse(unescape(encodeURIComponent(a)))}},\nx=t.BufferedBlockAlgorithm=j.extend({reset:function(){this._data=new q.init;this._nDataBytes=0},_append:function(a){\"string\"==typeof a&&(a=l.parse(a));this._data.concat(a);this._nDataBytes+=a.sigBytes},_process:function(a){var c=this._data,d=c.words,b=c.sigBytes,e=this.blockSize,f=b/(4*e),f=a?h.ceil(f):h.max((f|0)-this._minBufferSize,0);a=f*e;b=h.min(4*a,b);if(a){for(var m=0;mk;){var l;a:{l=u;for(var x=h.sqrt(l),w=2;w<=x;w++)if(!(l%w)){l=!1;break a}l=!0}l&&(8>k&&(j[k]=v(h.pow(u,0.5))),q[k]=v(h.pow(u,1/3)),k++);u++}var a=[],f=f.SHA256=g.extend({_doReset:function(){this._hash=new t.init(j.slice(0))},_doProcessBlock:function(c,d){for(var b=this._hash.words,e=b[0],f=b[1],m=b[2],h=b[3],p=b[4],j=b[5],k=b[6],l=b[7],n=0;64>n;n++){if(16>n)a[n]=\nc[d+n]|0;else{var r=a[n-15],g=a[n-2];a[n]=((r<<25|r>>>7)^(r<<14|r>>>18)^r>>>3)+a[n-7]+((g<<15|g>>>17)^(g<<13|g>>>19)^g>>>10)+a[n-16]}r=l+((p<<26|p>>>6)^(p<<21|p>>>11)^(p<<7|p>>>25))+(p&j^~p&k)+q[n]+a[n];g=((e<<30|e>>>2)^(e<<19|e>>>13)^(e<<10|e>>>22))+(e&f^e&m^f&m);l=k;k=j;j=p;p=h+r|0;h=m;m=f;f=e;e=r+g|0}b[0]=b[0]+e|0;b[1]=b[1]+f|0;b[2]=b[2]+m|0;b[3]=b[3]+h|0;b[4]=b[4]+p|0;b[5]=b[5]+j|0;b[6]=b[6]+k|0;b[7]=b[7]+l|0},_doFinalize:function(){var a=this._data,d=a.words,b=8*this._nDataBytes,e=8*a.sigBytes;\nd[e>>>5]|=128<<24-e%32;d[(e+64>>>9<<4)+14]=h.floor(b/4294967296);d[(e+64>>>9<<4)+15]=b;a.sigBytes=4*d.length;this._process();return this._hash},clone:function(){var a=g.clone.call(this);a._hash=this._hash.clone();return a}});s.SHA256=g._createHelper(f);s.HmacSHA256=g._createHmacHelper(f)})(Math);\n"], "crypto_js.rollups.sha3": [".js", "/*\nCryptoJS v3.1.2\ncode.google.com/p/crypto-js\n(c) 2009-2013 by Jeff Mott. All rights reserved.\ncode.google.com/p/crypto-js/wiki/License\n*/\nvar CryptoJS=CryptoJS||function(v,p){var d={},u=d.lib={},r=function(){},f=u.Base={extend:function(a){r.prototype=this;var b=new r;a&&b.mixIn(a);b.hasOwnProperty(\"init\")||(b.init=function(){b.$super.init.apply(this,arguments)});b.init.prototype=b;b.$super=this;return b},create:function(){var a=this.extend();a.init.apply(a,arguments);return a},init:function(){},mixIn:function(a){for(var b in a)a.hasOwnProperty(b)&&(this[b]=a[b]);a.hasOwnProperty(\"toString\")&&(this.toString=a.toString)},clone:function(){return this.init.prototype.extend(this)}},\ns=u.WordArray=f.extend({init:function(a,b){a=this.words=a||[];this.sigBytes=b!=p?b:4*a.length},toString:function(a){return(a||y).stringify(this)},concat:function(a){var b=this.words,c=a.words,j=this.sigBytes;a=a.sigBytes;this.clamp();if(j%4)for(var n=0;n>>2]|=(c[n>>>2]>>>24-8*(n%4)&255)<<24-8*((j+n)%4);else if(65535>>2]=c[n>>>2];else b.push.apply(b,c);this.sigBytes+=a;return this},clamp:function(){var a=this.words,b=this.sigBytes;a[b>>>2]&=4294967295<<\n32-8*(b%4);a.length=v.ceil(b/4)},clone:function(){var a=f.clone.call(this);a.words=this.words.slice(0);return a},random:function(a){for(var b=[],c=0;c>>2]>>>24-8*(j%4)&255;c.push((n>>>4).toString(16));c.push((n&15).toString(16))}return c.join(\"\")},parse:function(a){for(var b=a.length,c=[],j=0;j>>3]|=parseInt(a.substr(j,\n2),16)<<24-4*(j%8);return new s.init(c,b/2)}},e=x.Latin1={stringify:function(a){var b=a.words;a=a.sigBytes;for(var c=[],j=0;j>>2]>>>24-8*(j%4)&255));return c.join(\"\")},parse:function(a){for(var b=a.length,c=[],j=0;j>>2]|=(a.charCodeAt(j)&255)<<24-8*(j%4);return new s.init(c,b)}},q=x.Utf8={stringify:function(a){try{return decodeURIComponent(escape(e.stringify(a)))}catch(b){throw Error(\"Malformed UTF-8 data\");}},parse:function(a){return e.parse(unescape(encodeURIComponent(a)))}},\nt=u.BufferedBlockAlgorithm=f.extend({reset:function(){this._data=new s.init;this._nDataBytes=0},_append:function(a){\"string\"==typeof a&&(a=q.parse(a));this._data.concat(a);this._nDataBytes+=a.sigBytes},_process:function(a){var b=this._data,c=b.words,j=b.sigBytes,n=this.blockSize,e=j/(4*n),e=a?v.ceil(e):v.max((e|0)-this._minBufferSize,0);a=e*n;j=v.min(4*a,j);if(a){for(var f=0;ft;t++){s[e+5*q]=(t+1)*(t+2)/2%64;var w=(2*e+3*q)%5,e=q%5,q=w}for(e=0;5>e;e++)for(q=0;5>q;q++)x[e+5*q]=q+5*((2*e+3*q)%5);e=1;for(q=0;24>q;q++){for(var a=w=t=0;7>a;a++){if(e&1){var b=(1<b?w^=1<e;e++)c[e]=f.create();d=d.SHA3=r.extend({cfg:r.cfg.extend({outputLength:512}),_doReset:function(){for(var a=this._state=\n[],b=0;25>b;b++)a[b]=new f.init;this.blockSize=(1600-2*this.cfg.outputLength)/32},_doProcessBlock:function(a,b){for(var e=this._state,f=this.blockSize/2,h=0;h>>24)&16711935|(l<<24|l>>>8)&4278255360,m=(m<<8|m>>>24)&16711935|(m<<24|m>>>8)&4278255360,g=e[h];g.high^=m;g.low^=l}for(f=0;24>f;f++){for(h=0;5>h;h++){for(var d=l=0,k=0;5>k;k++)g=e[h+5*k],l^=g.high,d^=g.low;g=c[h];g.high=l;g.low=d}for(h=0;5>h;h++){g=c[(h+4)%5];l=c[(h+1)%5];m=l.high;k=l.low;l=g.high^\n(m<<1|k>>>31);d=g.low^(k<<1|m>>>31);for(k=0;5>k;k++)g=e[h+5*k],g.high^=l,g.low^=d}for(m=1;25>m;m++)g=e[m],h=g.high,g=g.low,k=s[m],32>k?(l=h<>>32-k,d=g<>>32-k):(l=g<>>64-k,d=h<>>64-k),g=c[x[m]],g.high=l,g.low=d;g=c[0];h=e[0];g.high=h.high;g.low=h.low;for(h=0;5>h;h++)for(k=0;5>k;k++)m=h+5*k,g=e[m],l=c[m],m=c[(h+1)%5+5*k],d=c[(h+2)%5+5*k],g.high=l.high^~m.high&d.high,g.low=l.low^~m.low&d.low;g=e[0];h=y[f];g.high^=h.high;g.low^=h.low}},_doFinalize:function(){var a=this._data,\nb=a.words,c=8*a.sigBytes,e=32*this.blockSize;b[c>>>5]|=1<<24-c%32;b[(v.ceil((c+1)/e)*e>>>5)-1]|=128;a.sigBytes=4*b.length;this._process();for(var a=this._state,b=this.cfg.outputLength/8,c=b/8,e=[],h=0;h>>24)&16711935|(f<<24|f>>>8)&4278255360,d=(d<<8|d>>>24)&16711935|(d<<24|d>>>8)&4278255360;e.push(d);e.push(f)}return new u.init(e,b)},clone:function(){for(var a=r.clone.call(this),b=a._state=this._state.slice(0),c=0;25>c;c++)b[c]=b[c].clone();return a}});\np.SHA3=r._createHelper(d);p.HmacSHA3=r._createHmacHelper(d)})(Math);\n"], "crypto_js.rollups.sha384": [".js", "/*\nCryptoJS v3.1.2\ncode.google.com/p/crypto-js\n(c) 2009-2013 by Jeff Mott. All rights reserved.\ncode.google.com/p/crypto-js/wiki/License\n*/\nvar CryptoJS=CryptoJS||function(a,c){var d={},j=d.lib={},f=function(){},m=j.Base={extend:function(a){f.prototype=this;var b=new f;a&&b.mixIn(a);b.hasOwnProperty(\"init\")||(b.init=function(){b.$super.init.apply(this,arguments)});b.init.prototype=b;b.$super=this;return b},create:function(){var a=this.extend();a.init.apply(a,arguments);return a},init:function(){},mixIn:function(a){for(var b in a)a.hasOwnProperty(b)&&(this[b]=a[b]);a.hasOwnProperty(\"toString\")&&(this.toString=a.toString)},clone:function(){return this.init.prototype.extend(this)}},\nB=j.WordArray=m.extend({init:function(a,b){a=this.words=a||[];this.sigBytes=b!=c?b:4*a.length},toString:function(a){return(a||y).stringify(this)},concat:function(a){var b=this.words,g=a.words,e=this.sigBytes;a=a.sigBytes;this.clamp();if(e%4)for(var k=0;k>>2]|=(g[k>>>2]>>>24-8*(k%4)&255)<<24-8*((e+k)%4);else if(65535>>2]=g[k>>>2];else b.push.apply(b,g);this.sigBytes+=a;return this},clamp:function(){var n=this.words,b=this.sigBytes;n[b>>>2]&=4294967295<<\n32-8*(b%4);n.length=a.ceil(b/4)},clone:function(){var a=m.clone.call(this);a.words=this.words.slice(0);return a},random:function(n){for(var b=[],g=0;g>>2]>>>24-8*(e%4)&255;g.push((k>>>4).toString(16));g.push((k&15).toString(16))}return g.join(\"\")},parse:function(a){for(var b=a.length,g=[],e=0;e>>3]|=parseInt(a.substr(e,\n2),16)<<24-4*(e%8);return new B.init(g,b/2)}},F=v.Latin1={stringify:function(a){var b=a.words;a=a.sigBytes;for(var g=[],e=0;e>>2]>>>24-8*(e%4)&255));return g.join(\"\")},parse:function(a){for(var b=a.length,g=[],e=0;e>>2]|=(a.charCodeAt(e)&255)<<24-8*(e%4);return new B.init(g,b)}},ha=v.Utf8={stringify:function(a){try{return decodeURIComponent(escape(F.stringify(a)))}catch(b){throw Error(\"Malformed UTF-8 data\");}},parse:function(a){return F.parse(unescape(encodeURIComponent(a)))}},\nZ=j.BufferedBlockAlgorithm=m.extend({reset:function(){this._data=new B.init;this._nDataBytes=0},_append:function(a){\"string\"==typeof a&&(a=ha.parse(a));this._data.concat(a);this._nDataBytes+=a.sigBytes},_process:function(n){var b=this._data,g=b.words,e=b.sigBytes,k=this.blockSize,m=e/(4*k),m=n?a.ceil(m):a.max((m|0)-this._minBufferSize,0);n=m*k;e=a.min(4*n,e);if(n){for(var c=0;cy;y++)v[y]=a();j=j.SHA512=d.extend({_doReset:function(){this._hash=new m.init([new f.init(1779033703,4089235720),new f.init(3144134277,2227873595),new f.init(1013904242,4271175723),new f.init(2773480762,1595750129),new f.init(1359893119,2917565137),new f.init(2600822924,725511199),new f.init(528734635,4215389547),new f.init(1541459225,327033209)])},_doProcessBlock:function(a,c){for(var d=this._hash.words,\nf=d[0],j=d[1],b=d[2],g=d[3],e=d[4],k=d[5],m=d[6],d=d[7],y=f.high,M=f.low,$=j.high,N=j.low,aa=b.high,O=b.low,ba=g.high,P=g.low,ca=e.high,Q=e.low,da=k.high,R=k.low,ea=m.high,S=m.low,fa=d.high,T=d.low,s=y,p=M,G=$,D=N,H=aa,E=O,W=ba,I=P,t=ca,q=Q,U=da,J=R,V=ea,K=S,X=fa,L=T,u=0;80>u;u++){var z=v[u];if(16>u)var r=z.high=a[c+2*u]|0,h=z.low=a[c+2*u+1]|0;else{var r=v[u-15],h=r.high,w=r.low,r=(h>>>1|w<<31)^(h>>>8|w<<24)^h>>>7,w=(w>>>1|h<<31)^(w>>>8|h<<24)^(w>>>7|h<<25),C=v[u-2],h=C.high,l=C.low,C=(h>>>19|l<<\n13)^(h<<3|l>>>29)^h>>>6,l=(l>>>19|h<<13)^(l<<3|h>>>29)^(l>>>6|h<<26),h=v[u-7],Y=h.high,A=v[u-16],x=A.high,A=A.low,h=w+h.low,r=r+Y+(h>>>0>>0?1:0),h=h+l,r=r+C+(h>>>0>>0?1:0),h=h+A,r=r+x+(h>>>0>>0?1:0);z.high=r;z.low=h}var Y=t&U^~t&V,A=q&J^~q&K,z=s&G^s&H^G&H,ja=p&D^p&E^D&E,w=(s>>>28|p<<4)^(s<<30|p>>>2)^(s<<25|p>>>7),C=(p>>>28|s<<4)^(p<<30|s>>>2)^(p<<25|s>>>7),l=B[u],ka=l.high,ga=l.low,l=L+((q>>>14|t<<18)^(q>>>18|t<<14)^(q<<23|t>>>9)),x=X+((t>>>14|q<<18)^(t>>>18|q<<14)^(t<<23|q>>>9))+(l>>>0<\nL>>>0?1:0),l=l+A,x=x+Y+(l>>>0>>0?1:0),l=l+ga,x=x+ka+(l>>>0>>0?1:0),l=l+h,x=x+r+(l>>>0>>0?1:0),h=C+ja,z=w+z+(h>>>0>>0?1:0),X=V,L=K,V=U,K=J,U=t,J=q,q=I+l|0,t=W+x+(q>>>0>>0?1:0)|0,W=H,I=E,H=G,E=D,G=s,D=p,p=l+h|0,s=x+z+(p>>>0>>0?1:0)|0}M=f.low=M+p;f.high=y+s+(M>>>0>>0?1:0);N=j.low=N+D;j.high=$+G+(N>>>0>>0?1:0);O=b.low=O+E;b.high=aa+H+(O>>>0>>0?1:0);P=g.low=P+I;g.high=ba+W+(P>>>0>>0?1:0);Q=e.low=Q+q;e.high=ca+t+(Q>>>0>>0?1:0);R=k.low=R+J;k.high=da+U+(R>>>0>>0?1:0);\nS=m.low=S+K;m.high=ea+V+(S>>>0>>0?1:0);T=d.low=T+L;d.high=fa+X+(T>>>0>>0?1:0)},_doFinalize:function(){var a=this._data,c=a.words,d=8*this._nDataBytes,f=8*a.sigBytes;c[f>>>5]|=128<<24-f%32;c[(f+128>>>10<<5)+30]=Math.floor(d/4294967296);c[(f+128>>>10<<5)+31]=d;a.sigBytes=4*c.length;this._process();return this._hash.toX32()},clone:function(){var a=d.clone.call(this);a._hash=this._hash.clone();return a},blockSize:32});c.SHA512=d._createHelper(j);c.HmacSHA512=d._createHmacHelper(j)})();\n(function(){var a=CryptoJS,c=a.x64,d=c.Word,j=c.WordArray,c=a.algo,f=c.SHA512,c=c.SHA384=f.extend({_doReset:function(){this._hash=new j.init([new d.init(3418070365,3238371032),new d.init(1654270250,914150663),new d.init(2438529370,812702999),new d.init(355462360,4144912697),new d.init(1731405415,4290775857),new d.init(2394180231,1750603025),new d.init(3675008525,1694076839),new d.init(1203062813,3204075428)])},_doFinalize:function(){var a=f._doFinalize.call(this);a.sigBytes-=16;return a}});a.SHA384=\nf._createHelper(c);a.HmacSHA384=f._createHmacHelper(c)})();\n"], "crypto_js.rollups.sha512": [".js", "/*\nCryptoJS v3.1.2\ncode.google.com/p/crypto-js\n(c) 2009-2013 by Jeff Mott. All rights reserved.\ncode.google.com/p/crypto-js/wiki/License\n*/\nvar CryptoJS=CryptoJS||function(a,m){var r={},f=r.lib={},g=function(){},l=f.Base={extend:function(a){g.prototype=this;var b=new g;a&&b.mixIn(a);b.hasOwnProperty(\"init\")||(b.init=function(){b.$super.init.apply(this,arguments)});b.init.prototype=b;b.$super=this;return b},create:function(){var a=this.extend();a.init.apply(a,arguments);return a},init:function(){},mixIn:function(a){for(var b in a)a.hasOwnProperty(b)&&(this[b]=a[b]);a.hasOwnProperty(\"toString\")&&(this.toString=a.toString)},clone:function(){return this.init.prototype.extend(this)}},\np=f.WordArray=l.extend({init:function(a,b){a=this.words=a||[];this.sigBytes=b!=m?b:4*a.length},toString:function(a){return(a||q).stringify(this)},concat:function(a){var b=this.words,d=a.words,c=this.sigBytes;a=a.sigBytes;this.clamp();if(c%4)for(var j=0;j>>2]|=(d[j>>>2]>>>24-8*(j%4)&255)<<24-8*((c+j)%4);else if(65535>>2]=d[j>>>2];else b.push.apply(b,d);this.sigBytes+=a;return this},clamp:function(){var n=this.words,b=this.sigBytes;n[b>>>2]&=4294967295<<\n32-8*(b%4);n.length=a.ceil(b/4)},clone:function(){var a=l.clone.call(this);a.words=this.words.slice(0);return a},random:function(n){for(var b=[],d=0;d>>2]>>>24-8*(c%4)&255;d.push((j>>>4).toString(16));d.push((j&15).toString(16))}return d.join(\"\")},parse:function(a){for(var b=a.length,d=[],c=0;c>>3]|=parseInt(a.substr(c,\n2),16)<<24-4*(c%8);return new p.init(d,b/2)}},G=y.Latin1={stringify:function(a){var b=a.words;a=a.sigBytes;for(var d=[],c=0;c>>2]>>>24-8*(c%4)&255));return d.join(\"\")},parse:function(a){for(var b=a.length,d=[],c=0;c>>2]|=(a.charCodeAt(c)&255)<<24-8*(c%4);return new p.init(d,b)}},fa=y.Utf8={stringify:function(a){try{return decodeURIComponent(escape(G.stringify(a)))}catch(b){throw Error(\"Malformed UTF-8 data\");}},parse:function(a){return G.parse(unescape(encodeURIComponent(a)))}},\nh=f.BufferedBlockAlgorithm=l.extend({reset:function(){this._data=new p.init;this._nDataBytes=0},_append:function(a){\"string\"==typeof a&&(a=fa.parse(a));this._data.concat(a);this._nDataBytes+=a.sigBytes},_process:function(n){var b=this._data,d=b.words,c=b.sigBytes,j=this.blockSize,l=c/(4*j),l=n?a.ceil(l):a.max((l|0)-this._minBufferSize,0);n=l*j;c=a.min(4*n,c);if(n){for(var h=0;hq;q++)y[q]=a();f=f.SHA512=r.extend({_doReset:function(){this._hash=new l.init([new g.init(1779033703,4089235720),new g.init(3144134277,2227873595),new g.init(1013904242,4271175723),new g.init(2773480762,1595750129),new g.init(1359893119,2917565137),new g.init(2600822924,725511199),new g.init(528734635,4215389547),new g.init(1541459225,327033209)])},_doProcessBlock:function(a,f){for(var h=this._hash.words,\ng=h[0],n=h[1],b=h[2],d=h[3],c=h[4],j=h[5],l=h[6],h=h[7],q=g.high,m=g.low,r=n.high,N=n.low,Z=b.high,O=b.low,$=d.high,P=d.low,aa=c.high,Q=c.low,ba=j.high,R=j.low,ca=l.high,S=l.low,da=h.high,T=h.low,v=q,s=m,H=r,E=N,I=Z,F=O,W=$,J=P,w=aa,t=Q,U=ba,K=R,V=ca,L=S,X=da,M=T,x=0;80>x;x++){var B=y[x];if(16>x)var u=B.high=a[f+2*x]|0,e=B.low=a[f+2*x+1]|0;else{var u=y[x-15],e=u.high,z=u.low,u=(e>>>1|z<<31)^(e>>>8|z<<24)^e>>>7,z=(z>>>1|e<<31)^(z>>>8|e<<24)^(z>>>7|e<<25),D=y[x-2],e=D.high,k=D.low,D=(e>>>19|k<<13)^\n(e<<3|k>>>29)^e>>>6,k=(k>>>19|e<<13)^(k<<3|e>>>29)^(k>>>6|e<<26),e=y[x-7],Y=e.high,C=y[x-16],A=C.high,C=C.low,e=z+e.low,u=u+Y+(e>>>0>>0?1:0),e=e+k,u=u+D+(e>>>0>>0?1:0),e=e+C,u=u+A+(e>>>0>>0?1:0);B.high=u;B.low=e}var Y=w&U^~w&V,C=t&K^~t&L,B=v&H^v&I^H&I,ha=s&E^s&F^E&F,z=(v>>>28|s<<4)^(v<<30|s>>>2)^(v<<25|s>>>7),D=(s>>>28|v<<4)^(s<<30|v>>>2)^(s<<25|v>>>7),k=p[x],ia=k.high,ea=k.low,k=M+((t>>>14|w<<18)^(t>>>18|w<<14)^(t<<23|w>>>9)),A=X+((w>>>14|t<<18)^(w>>>18|t<<14)^(w<<23|t>>>9))+(k>>>0>>\n0?1:0),k=k+C,A=A+Y+(k>>>0>>0?1:0),k=k+ea,A=A+ia+(k>>>0>>0?1:0),k=k+e,A=A+u+(k>>>0>>0?1:0),e=D+ha,B=z+B+(e>>>0>>0?1:0),X=V,M=L,V=U,L=K,U=w,K=t,t=J+k|0,w=W+A+(t>>>0>>0?1:0)|0,W=I,J=F,I=H,F=E,H=v,E=s,s=k+e|0,v=A+B+(s>>>0>>0?1:0)|0}m=g.low=m+s;g.high=q+v+(m>>>0>>0?1:0);N=n.low=N+E;n.high=r+H+(N>>>0>>0?1:0);O=b.low=O+F;b.high=Z+I+(O>>>0>>0?1:0);P=d.low=P+J;d.high=$+W+(P>>>0>>0?1:0);Q=c.low=Q+t;c.high=aa+w+(Q>>>0>>0?1:0);R=j.low=R+K;j.high=ba+U+(R>>>0>>0?1:0);S=l.low=\nS+L;l.high=ca+V+(S>>>0>>0?1:0);T=h.low=T+M;h.high=da+X+(T>>>0>>0?1:0)},_doFinalize:function(){var a=this._data,f=a.words,h=8*this._nDataBytes,g=8*a.sigBytes;f[g>>>5]|=128<<24-g%32;f[(g+128>>>10<<5)+30]=Math.floor(h/4294967296);f[(g+128>>>10<<5)+31]=h;a.sigBytes=4*f.length;this._process();return this._hash.toX32()},clone:function(){var a=r.clone.call(this);a._hash=this._hash.clone();return a},blockSize:32});m.SHA512=r._createHelper(f);m.HmacSHA512=r._createHmacHelper(f)})();\n"], "abc": [".py", "\n\n\n\"\"\"Abstract Base Classes (ABCs) according to PEP 3119.\"\"\"\n\n\ndef abstractmethod(funcobj):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n funcobj.__isabstractmethod__=True\n return funcobj\n \n \nclass abstractclassmethod(classmethod):\n ''\n\n\n \n \n __isabstractmethod__=True\n \n def __init__(self,callable):\n callable.__isabstractmethod__=True\n super().__init__(callable)\n \n \nclass abstractstaticmethod(staticmethod):\n ''\n\n\n \n \n __isabstractmethod__=True\n \n def __init__(self,callable):\n callable.__isabstractmethod__=True\n super().__init__(callable)\n \n \nclass abstractproperty(property):\n ''\n\n\n \n \n __isabstractmethod__=True\n \n \ntry :\n from _abc import (get_cache_token,_abc_init,_abc_register,\n _abc_instancecheck,_abc_subclasscheck,_get_dump,\n _reset_registry,_reset_caches)\nexcept ImportError:\n from _py_abc import ABCMeta,get_cache_token\n ABCMeta.__module__='abc'\nelse :\n class ABCMeta(type):\n ''\n\n\n\n\n\n\n\n\n\n\n \n def __new__(mcls,name,bases,namespace,**kwargs):\n cls=super().__new__(mcls,name,bases,namespace,**kwargs)\n _abc_init(cls)\n return cls\n \n def register(cls,subclass):\n ''\n\n\n \n return _abc_register(cls,subclass)\n \n def __instancecheck__(cls,instance):\n ''\n return _abc_instancecheck(cls,instance)\n \n def __subclasscheck__(cls,subclass):\n ''\n return _abc_subclasscheck(cls,subclass)\n \n def _dump_registry(cls,file=None ):\n ''\n print(f\"Class: {cls.__module__}.{cls.__qualname__}\",file=file)\n print(f\"Inv. counter: {get_cache_token()}\",file=file)\n (_abc_registry,_abc_cache,_abc_negative_cache,\n _abc_negative_cache_version)=_get_dump(cls)\n print(f\"_abc_registry: {_abc_registry!r}\",file=file)\n print(f\"_abc_cache: {_abc_cache!r}\",file=file)\n print(f\"_abc_negative_cache: {_abc_negative_cache!r}\",file=file)\n print(f\"_abc_negative_cache_version: {_abc_negative_cache_version!r}\",\n file=file)\n \n def _abc_registry_clear(cls):\n ''\n _reset_registry(cls)\n \n def _abc_caches_clear(cls):\n ''\n _reset_caches(cls)\n \n \nclass ABC(metaclass=ABCMeta):\n ''\n\n \n __slots__=()\n", ["_abc", "_py_abc"]], "antigravity": [".py", "\nimport webbrowser\nimport hashlib\n\nwebbrowser.open(\"https://xkcd.com/353/\")\n\ndef geohash(latitude,longitude,datedow):\n ''\n\n\n\n\n \n \n h=hashlib.md5(datedow).hexdigest()\n p,q=[('%f'%float.fromhex('0.'+x))for x in (h[:16],h[16:32])]\n print('%d%s %d%s'%(latitude,p[1:],longitude,q[1:]))\n", ["hashlib", "webbrowser"]], "argparse": [".py", "\n\n\n\"\"\"Command-line parsing library\n\nThis module is an optparse-inspired command-line parsing library that:\n\n - handles both optional and positional arguments\n - produces highly informative usage messages\n - supports parsers that dispatch to sub-parsers\n\nThe following is a simple usage example that sums integers from the\ncommand-line and writes the result to a file::\n\n parser = argparse.ArgumentParser(\n description='sum the integers at the command line')\n parser.add_argument(\n 'integers', metavar='int', nargs='+', type=int,\n help='an integer to be summed')\n parser.add_argument(\n '--log', default=sys.stdout, type=argparse.FileType('w'),\n help='the file where the sum should be written')\n args = parser.parse_args()\n args.log.write('%s' % sum(args.integers))\n args.log.close()\n\nThe module contains the following public classes:\n\n - ArgumentParser -- The main entry point for command-line parsing. As the\n example above shows, the add_argument() method is used to populate\n the parser with actions for optional and positional arguments. Then\n the parse_args() method is invoked to convert the args at the\n command-line into an object with attributes.\n\n - ArgumentError -- The exception raised by ArgumentParser objects when\n there are errors with the parser's actions. Errors raised while\n parsing the command-line are caught by ArgumentParser and emitted\n as command-line messages.\n\n - FileType -- A factory for defining types of files to be created. As the\n example above shows, instances of FileType are typically passed as\n the type= argument of add_argument() calls.\n\n - Action -- The base class for parser actions. Typically actions are\n selected by passing strings like 'store_true' or 'append_const' to\n the action= argument of add_argument(). However, for greater\n customization of ArgumentParser actions, subclasses of Action may\n be defined and passed as the action= argument.\n\n - HelpFormatter, RawDescriptionHelpFormatter, RawTextHelpFormatter,\n ArgumentDefaultsHelpFormatter -- Formatter classes which\n may be passed as the formatter_class= argument to the\n ArgumentParser constructor. HelpFormatter is the default,\n RawDescriptionHelpFormatter and RawTextHelpFormatter tell the parser\n not to change the formatting for help text, and\n ArgumentDefaultsHelpFormatter adds information about argument defaults\n to the help.\n\nAll other classes in this module are considered implementation details.\n(Also note that HelpFormatter and RawDescriptionHelpFormatter are only\nconsidered public as object names -- the API of the formatter objects is\nstill considered an implementation detail.)\n\"\"\"\n\n__version__='1.1'\n__all__=[\n'ArgumentParser',\n'ArgumentError',\n'ArgumentTypeError',\n'FileType',\n'HelpFormatter',\n'ArgumentDefaultsHelpFormatter',\n'RawDescriptionHelpFormatter',\n'RawTextHelpFormatter',\n'MetavarTypeHelpFormatter',\n'Namespace',\n'Action',\n'ONE_OR_MORE',\n'OPTIONAL',\n'PARSER',\n'REMAINDER',\n'SUPPRESS',\n'ZERO_OR_MORE',\n]\n\n\nimport os as _os\nimport re as _re\nimport shutil as _shutil\nimport sys as _sys\n\nfrom gettext import gettext as _,ngettext\n\nSUPPRESS='==SUPPRESS=='\n\nOPTIONAL='?'\nZERO_OR_MORE='*'\nONE_OR_MORE='+'\nPARSER='A...'\nREMAINDER='...'\n_UNRECOGNIZED_ARGS_ATTR='_unrecognized_args'\n\n\n\n\n\nclass _AttributeHolder(object):\n ''\n\n\n\n\n\n \n \n def __repr__(self):\n type_name=type(self).__name__\n arg_strings=[]\n star_args={}\n for arg in self._get_args():\n arg_strings.append(repr(arg))\n for name,value in self._get_kwargs():\n if name.isidentifier():\n arg_strings.append('%s=%r'%(name,value))\n else :\n star_args[name]=value\n if star_args:\n arg_strings.append('**%s'%repr(star_args))\n return '%s(%s)'%(type_name,', '.join(arg_strings))\n \n def _get_kwargs(self):\n return sorted(self.__dict__.items())\n \n def _get_args(self):\n return []\n \n \ndef _copy_items(items):\n if items is None :\n return []\n \n \n \n if type(items)is list:\n return items[:]\n import copy\n return copy.copy(items)\n \n \n \n \n \n \nclass HelpFormatter(object):\n ''\n\n\n\n \n \n def __init__(self,\n prog,\n indent_increment=2,\n max_help_position=24,\n width=None ):\n \n \n if width is None :\n width=_shutil.get_terminal_size().columns\n width -=2\n \n self._prog=prog\n self._indent_increment=indent_increment\n self._max_help_position=min(max_help_position,\n max(width -20,indent_increment *2))\n self._width=width\n \n self._current_indent=0\n self._level=0\n self._action_max_length=0\n \n self._root_section=self._Section(self,None )\n self._current_section=self._root_section\n \n self._whitespace_matcher=_re.compile(r'\\s+',_re.ASCII)\n self._long_break_matcher=_re.compile(r'\\n\\n\\n+')\n \n \n \n \n def _indent(self):\n self._current_indent +=self._indent_increment\n self._level +=1\n \n def _dedent(self):\n self._current_indent -=self._indent_increment\n assert self._current_indent >=0,'Indent decreased below 0.'\n self._level -=1\n \n class _Section(object):\n \n def __init__(self,formatter,parent,heading=None ):\n self.formatter=formatter\n self.parent=parent\n self.heading=heading\n self.items=[]\n \n def format_help(self):\n \n if self.parent is not None :\n self.formatter._indent()\n join=self.formatter._join_parts\n item_help=join([func(*args)for func,args in self.items])\n if self.parent is not None :\n self.formatter._dedent()\n \n \n if not item_help:\n return ''\n \n \n if self.heading is not SUPPRESS and self.heading is not None :\n current_indent=self.formatter._current_indent\n heading='%*s%s:\\n'%(current_indent,'',self.heading)\n else :\n heading=''\n \n \n return join(['\\n',heading,item_help,'\\n'])\n \n def _add_item(self,func,args):\n self._current_section.items.append((func,args))\n \n \n \n \n def start_section(self,heading):\n self._indent()\n section=self._Section(self,self._current_section,heading)\n self._add_item(section.format_help,[])\n self._current_section=section\n \n def end_section(self):\n self._current_section=self._current_section.parent\n self._dedent()\n \n def add_text(self,text):\n if text is not SUPPRESS and text is not None :\n self._add_item(self._format_text,[text])\n \n def add_usage(self,usage,actions,groups,prefix=None ):\n if usage is not SUPPRESS:\n args=usage,actions,groups,prefix\n self._add_item(self._format_usage,args)\n \n def add_argument(self,action):\n if action.help is not SUPPRESS:\n \n \n get_invocation=self._format_action_invocation\n invocations=[get_invocation(action)]\n for subaction in self._iter_indented_subactions(action):\n invocations.append(get_invocation(subaction))\n \n \n invocation_length=max([len(s)for s in invocations])\n action_length=invocation_length+self._current_indent\n self._action_max_length=max(self._action_max_length,\n action_length)\n \n \n self._add_item(self._format_action,[action])\n \n def add_arguments(self,actions):\n for action in actions:\n self.add_argument(action)\n \n \n \n \n def format_help(self):\n help=self._root_section.format_help()\n if help:\n help=self._long_break_matcher.sub('\\n\\n',help)\n help=help.strip('\\n')+'\\n'\n return help\n \n def _join_parts(self,part_strings):\n return ''.join([part\n for part in part_strings\n if part and part is not SUPPRESS])\n \n def _format_usage(self,usage,actions,groups,prefix):\n if prefix is None :\n prefix=_('usage: ')\n \n \n if usage is not None :\n usage=usage %dict(prog=self._prog)\n \n \n elif usage is None and not actions:\n usage='%(prog)s'%dict(prog=self._prog)\n \n \n elif usage is None :\n prog='%(prog)s'%dict(prog=self._prog)\n \n \n optionals=[]\n positionals=[]\n for action in actions:\n if action.option_strings:\n optionals.append(action)\n else :\n positionals.append(action)\n \n \n format=self._format_actions_usage\n action_usage=format(optionals+positionals,groups)\n usage=' '.join([s for s in [prog,action_usage]if s])\n \n \n text_width=self._width -self._current_indent\n if len(prefix)+len(usage)>text_width:\n \n \n part_regexp=(\n r'\\(.*?\\)+(?=\\s|$)|'\n r'\\[.*?\\]+(?=\\s|$)|'\n r'\\S+'\n )\n opt_usage=format(optionals,groups)\n pos_usage=format(positionals,groups)\n opt_parts=_re.findall(part_regexp,opt_usage)\n pos_parts=_re.findall(part_regexp,pos_usage)\n assert ' '.join(opt_parts)==opt_usage\n assert ' '.join(pos_parts)==pos_usage\n \n \n def get_lines(parts,indent,prefix=None ):\n lines=[]\n line=[]\n if prefix is not None :\n line_len=len(prefix)-1\n else :\n line_len=len(indent)-1\n for part in parts:\n if line_len+1+len(part)>text_width and line:\n lines.append(indent+' '.join(line))\n line=[]\n line_len=len(indent)-1\n line.append(part)\n line_len +=len(part)+1\n if line:\n lines.append(indent+' '.join(line))\n if prefix is not None :\n lines[0]=lines[0][len(indent):]\n return lines\n \n \n if len(prefix)+len(prog)<=0.75 *text_width:\n indent=' '*(len(prefix)+len(prog)+1)\n if opt_parts:\n lines=get_lines([prog]+opt_parts,indent,prefix)\n lines.extend(get_lines(pos_parts,indent))\n elif pos_parts:\n lines=get_lines([prog]+pos_parts,indent,prefix)\n else :\n lines=[prog]\n \n \n else :\n indent=' '*len(prefix)\n parts=opt_parts+pos_parts\n lines=get_lines(parts,indent)\n if len(lines)>1:\n lines=[]\n lines.extend(get_lines(opt_parts,indent))\n lines.extend(get_lines(pos_parts,indent))\n lines=[prog]+lines\n \n \n usage='\\n'.join(lines)\n \n \n return '%s%s\\n\\n'%(prefix,usage)\n \n def _format_actions_usage(self,actions,groups):\n \n group_actions=set()\n inserts={}\n for group in groups:\n try :\n start=actions.index(group._group_actions[0])\n except ValueError:\n continue\n else :\n end=start+len(group._group_actions)\n if actions[start:end]==group._group_actions:\n for action in group._group_actions:\n group_actions.add(action)\n if not group.required:\n if start in inserts:\n inserts[start]+=' ['\n else :\n inserts[start]='['\n if end in inserts:\n inserts[end]+=']'\n else :\n inserts[end]=']'\n else :\n if start in inserts:\n inserts[start]+=' ('\n else :\n inserts[start]='('\n if end in inserts:\n inserts[end]+=')'\n else :\n inserts[end]=')'\n for i in range(start+1,end):\n inserts[i]='|'\n \n \n parts=[]\n for i,action in enumerate(actions):\n \n \n \n if action.help is SUPPRESS:\n parts.append(None )\n if inserts.get(i)=='|':\n inserts.pop(i)\n elif inserts.get(i+1)=='|':\n inserts.pop(i+1)\n \n \n elif not action.option_strings:\n default=self._get_default_metavar_for_positional(action)\n part=self._format_args(action,default)\n \n \n if action in group_actions:\n if part[0]=='['and part[-1]==']':\n part=part[1:-1]\n \n \n parts.append(part)\n \n \n else :\n option_string=action.option_strings[0]\n \n \n \n if action.nargs ==0:\n part='%s'%option_string\n \n \n \n else :\n default=self._get_default_metavar_for_optional(action)\n args_string=self._format_args(action,default)\n part='%s %s'%(option_string,args_string)\n \n \n if not action.required and action not in group_actions:\n part='[%s]'%part\n \n \n parts.append(part)\n \n \n for i in sorted(inserts,reverse=True ):\n parts[i:i]=[inserts[i]]\n \n \n text=' '.join([item for item in parts if item is not None ])\n \n \n open=r'[\\[(]'\n close=r'[\\])]'\n text=_re.sub(r'(%s) '%open,r'\\1',text)\n text=_re.sub(r' (%s)'%close,r'\\1',text)\n text=_re.sub(r'%s *%s'%(open,close),r'',text)\n text=_re.sub(r'\\(([^|]*)\\)',r'\\1',text)\n text=text.strip()\n \n \n return text\n \n def _format_text(self,text):\n if '%(prog)'in text:\n text=text %dict(prog=self._prog)\n text_width=max(self._width -self._current_indent,11)\n indent=' '*self._current_indent\n return self._fill_text(text,text_width,indent)+'\\n\\n'\n \n def _format_action(self,action):\n \n help_position=min(self._action_max_length+2,\n self._max_help_position)\n help_width=max(self._width -help_position,11)\n action_width=help_position -self._current_indent -2\n action_header=self._format_action_invocation(action)\n \n \n if not action.help:\n tup=self._current_indent,'',action_header\n action_header='%*s%s\\n'%tup\n \n \n elif len(action_header)<=action_width:\n tup=self._current_indent,'',action_width,action_header\n action_header='%*s%-*s '%tup\n indent_first=0\n \n \n else :\n tup=self._current_indent,'',action_header\n action_header='%*s%s\\n'%tup\n indent_first=help_position\n \n \n parts=[action_header]\n \n \n if action.help:\n help_text=self._expand_help(action)\n help_lines=self._split_lines(help_text,help_width)\n parts.append('%*s%s\\n'%(indent_first,'',help_lines[0]))\n for line in help_lines[1:]:\n parts.append('%*s%s\\n'%(help_position,'',line))\n \n \n elif not action_header.endswith('\\n'):\n parts.append('\\n')\n \n \n for subaction in self._iter_indented_subactions(action):\n parts.append(self._format_action(subaction))\n \n \n return self._join_parts(parts)\n \n def _format_action_invocation(self,action):\n if not action.option_strings:\n default=self._get_default_metavar_for_positional(action)\n metavar,=self._metavar_formatter(action,default)(1)\n return metavar\n \n else :\n parts=[]\n \n \n \n if action.nargs ==0:\n parts.extend(action.option_strings)\n \n \n \n else :\n default=self._get_default_metavar_for_optional(action)\n args_string=self._format_args(action,default)\n for option_string in action.option_strings:\n parts.append('%s %s'%(option_string,args_string))\n \n return ', '.join(parts)\n \n def _metavar_formatter(self,action,default_metavar):\n if action.metavar is not None :\n result=action.metavar\n elif action.choices is not None :\n choice_strs=[str(choice)for choice in action.choices]\n result='{%s}'%','.join(choice_strs)\n else :\n result=default_metavar\n \n def format(tuple_size):\n if isinstance(result,tuple):\n return result\n else :\n return (result,)*tuple_size\n return format\n \n def _format_args(self,action,default_metavar):\n get_metavar=self._metavar_formatter(action,default_metavar)\n if action.nargs is None :\n result='%s'%get_metavar(1)\n elif action.nargs ==OPTIONAL:\n result='[%s]'%get_metavar(1)\n elif action.nargs ==ZERO_OR_MORE:\n result='[%s [%s ...]]'%get_metavar(2)\n elif action.nargs ==ONE_OR_MORE:\n result='%s [%s ...]'%get_metavar(2)\n elif action.nargs ==REMAINDER:\n result='...'\n elif action.nargs ==PARSER:\n result='%s ...'%get_metavar(1)\n elif action.nargs ==SUPPRESS:\n result=''\n else :\n try :\n formats=['%s'for _ in range(action.nargs)]\n except TypeError:\n raise ValueError(\"invalid nargs value\")from None\n result=' '.join(formats)%get_metavar(action.nargs)\n return result\n \n def _expand_help(self,action):\n params=dict(vars(action),prog=self._prog)\n for name in list(params):\n if params[name]is SUPPRESS:\n del params[name]\n for name in list(params):\n if hasattr(params[name],'__name__'):\n params[name]=params[name].__name__\n if params.get('choices')is not None :\n choices_str=', '.join([str(c)for c in params['choices']])\n params['choices']=choices_str\n return self._get_help_string(action)%params\n \n def _iter_indented_subactions(self,action):\n try :\n get_subactions=action._get_subactions\n except AttributeError:\n pass\n else :\n self._indent()\n yield from get_subactions()\n self._dedent()\n \n def _split_lines(self,text,width):\n text=self._whitespace_matcher.sub(' ',text).strip()\n \n \n import textwrap\n return textwrap.wrap(text,width)\n \n def _fill_text(self,text,width,indent):\n text=self._whitespace_matcher.sub(' ',text).strip()\n import textwrap\n return textwrap.fill(text,width,\n initial_indent=indent,\n subsequent_indent=indent)\n \n def _get_help_string(self,action):\n return action.help\n \n def _get_default_metavar_for_optional(self,action):\n return action.dest.upper()\n \n def _get_default_metavar_for_positional(self,action):\n return action.dest\n \n \nclass RawDescriptionHelpFormatter(HelpFormatter):\n ''\n\n\n\n \n \n def _fill_text(self,text,width,indent):\n return ''.join(indent+line for line in text.splitlines(keepends=True ))\n \n \nclass RawTextHelpFormatter(RawDescriptionHelpFormatter):\n ''\n\n\n\n \n \n def _split_lines(self,text,width):\n return text.splitlines()\n \n \nclass ArgumentDefaultsHelpFormatter(HelpFormatter):\n ''\n\n\n\n \n \n def _get_help_string(self,action):\n help=action.help\n if '%(default)'not in action.help:\n if action.default is not SUPPRESS:\n defaulting_nargs=[OPTIONAL,ZERO_OR_MORE]\n if action.option_strings or action.nargs in defaulting_nargs:\n help +=' (default: %(default)s)'\n return help\n \n \nclass MetavarTypeHelpFormatter(HelpFormatter):\n ''\n\n\n\n\n \n \n def _get_default_metavar_for_optional(self,action):\n return action.type.__name__\n \n def _get_default_metavar_for_positional(self,action):\n return action.type.__name__\n \n \n \n \n \n \n \ndef _get_action_name(argument):\n if argument is None :\n return None\n elif argument.option_strings:\n return '/'.join(argument.option_strings)\n elif argument.metavar not in (None ,SUPPRESS):\n return argument.metavar\n elif argument.dest not in (None ,SUPPRESS):\n return argument.dest\n else :\n return None\n \n \nclass ArgumentError(Exception):\n ''\n\n\n\n \n \n def __init__(self,argument,message):\n self.argument_name=_get_action_name(argument)\n self.message=message\n \n def __str__(self):\n if self.argument_name is None :\n format='%(message)s'\n else :\n format='argument %(argument_name)s: %(message)s'\n return format %dict(message=self.message,\n argument_name=self.argument_name)\n \n \nclass ArgumentTypeError(Exception):\n ''\n pass\n \n \n \n \n \n \nclass Action(_AttributeHolder):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n def __init__(self,\n option_strings,\n dest,\n nargs=None ,\n const=None ,\n default=None ,\n type=None ,\n choices=None ,\n required=False ,\n help=None ,\n metavar=None ):\n self.option_strings=option_strings\n self.dest=dest\n self.nargs=nargs\n self.const=const\n self.default=default\n self.type=type\n self.choices=choices\n self.required=required\n self.help=help\n self.metavar=metavar\n \n def _get_kwargs(self):\n names=[\n 'option_strings',\n 'dest',\n 'nargs',\n 'const',\n 'default',\n 'type',\n 'choices',\n 'help',\n 'metavar',\n ]\n return [(name,getattr(self,name))for name in names]\n \n def __call__(self,parser,namespace,values,option_string=None ):\n raise NotImplementedError(_('.__call__() not defined'))\n \n \nclass _StoreAction(Action):\n\n def __init__(self,\n option_strings,\n dest,\n nargs=None ,\n const=None ,\n default=None ,\n type=None ,\n choices=None ,\n required=False ,\n help=None ,\n metavar=None ):\n if nargs ==0:\n raise ValueError('nargs for store actions must be != 0; if you '\n 'have nothing to store, actions such as store '\n 'true or store const may be more appropriate')\n if const is not None and nargs !=OPTIONAL:\n raise ValueError('nargs must be %r to supply const'%OPTIONAL)\n super(_StoreAction,self).__init__(\n option_strings=option_strings,\n dest=dest,\n nargs=nargs,\n const=const,\n default=default,\n type=type,\n choices=choices,\n required=required,\n help=help,\n metavar=metavar)\n \n def __call__(self,parser,namespace,values,option_string=None ):\n setattr(namespace,self.dest,values)\n \n \nclass _StoreConstAction(Action):\n\n def __init__(self,\n option_strings,\n dest,\n const,\n default=None ,\n required=False ,\n help=None ,\n metavar=None ):\n super(_StoreConstAction,self).__init__(\n option_strings=option_strings,\n dest=dest,\n nargs=0,\n const=const,\n default=default,\n required=required,\n help=help)\n \n def __call__(self,parser,namespace,values,option_string=None ):\n setattr(namespace,self.dest,self.const)\n \n \nclass _StoreTrueAction(_StoreConstAction):\n\n def __init__(self,\n option_strings,\n dest,\n default=False ,\n required=False ,\n help=None ):\n super(_StoreTrueAction,self).__init__(\n option_strings=option_strings,\n dest=dest,\n const=True ,\n default=default,\n required=required,\n help=help)\n \n \nclass _StoreFalseAction(_StoreConstAction):\n\n def __init__(self,\n option_strings,\n dest,\n default=True ,\n required=False ,\n help=None ):\n super(_StoreFalseAction,self).__init__(\n option_strings=option_strings,\n dest=dest,\n const=False ,\n default=default,\n required=required,\n help=help)\n \n \nclass _AppendAction(Action):\n\n def __init__(self,\n option_strings,\n dest,\n nargs=None ,\n const=None ,\n default=None ,\n type=None ,\n choices=None ,\n required=False ,\n help=None ,\n metavar=None ):\n if nargs ==0:\n raise ValueError('nargs for append actions must be != 0; if arg '\n 'strings are not supplying the value to append, '\n 'the append const action may be more appropriate')\n if const is not None and nargs !=OPTIONAL:\n raise ValueError('nargs must be %r to supply const'%OPTIONAL)\n super(_AppendAction,self).__init__(\n option_strings=option_strings,\n dest=dest,\n nargs=nargs,\n const=const,\n default=default,\n type=type,\n choices=choices,\n required=required,\n help=help,\n metavar=metavar)\n \n def __call__(self,parser,namespace,values,option_string=None ):\n items=getattr(namespace,self.dest,None )\n items=_copy_items(items)\n items.append(values)\n setattr(namespace,self.dest,items)\n \n \nclass _AppendConstAction(Action):\n\n def __init__(self,\n option_strings,\n dest,\n const,\n default=None ,\n required=False ,\n help=None ,\n metavar=None ):\n super(_AppendConstAction,self).__init__(\n option_strings=option_strings,\n dest=dest,\n nargs=0,\n const=const,\n default=default,\n required=required,\n help=help,\n metavar=metavar)\n \n def __call__(self,parser,namespace,values,option_string=None ):\n items=getattr(namespace,self.dest,None )\n items=_copy_items(items)\n items.append(self.const)\n setattr(namespace,self.dest,items)\n \n \nclass _CountAction(Action):\n\n def __init__(self,\n option_strings,\n dest,\n default=None ,\n required=False ,\n help=None ):\n super(_CountAction,self).__init__(\n option_strings=option_strings,\n dest=dest,\n nargs=0,\n default=default,\n required=required,\n help=help)\n \n def __call__(self,parser,namespace,values,option_string=None ):\n count=getattr(namespace,self.dest,None )\n if count is None :\n count=0\n setattr(namespace,self.dest,count+1)\n \n \nclass _HelpAction(Action):\n\n def __init__(self,\n option_strings,\n dest=SUPPRESS,\n default=SUPPRESS,\n help=None ):\n super(_HelpAction,self).__init__(\n option_strings=option_strings,\n dest=dest,\n default=default,\n nargs=0,\n help=help)\n \n def __call__(self,parser,namespace,values,option_string=None ):\n parser.print_help()\n parser.exit()\n \n \nclass _VersionAction(Action):\n\n def __init__(self,\n option_strings,\n version=None ,\n dest=SUPPRESS,\n default=SUPPRESS,\n help=\"show program's version number and exit\"):\n super(_VersionAction,self).__init__(\n option_strings=option_strings,\n dest=dest,\n default=default,\n nargs=0,\n help=help)\n self.version=version\n \n def __call__(self,parser,namespace,values,option_string=None ):\n version=self.version\n if version is None :\n version=parser.version\n formatter=parser._get_formatter()\n formatter.add_text(version)\n parser._print_message(formatter.format_help(),_sys.stdout)\n parser.exit()\n \n \nclass _SubParsersAction(Action):\n\n class _ChoicesPseudoAction(Action):\n \n def __init__(self,name,aliases,help):\n metavar=dest=name\n if aliases:\n metavar +=' (%s)'%', '.join(aliases)\n sup=super(_SubParsersAction._ChoicesPseudoAction,self)\n sup.__init__(option_strings=[],dest=dest,help=help,\n metavar=metavar)\n \n def __init__(self,\n option_strings,\n prog,\n parser_class,\n dest=SUPPRESS,\n required=False ,\n help=None ,\n metavar=None ):\n \n self._prog_prefix=prog\n self._parser_class=parser_class\n self._name_parser_map={}\n self._choices_actions=[]\n \n super(_SubParsersAction,self).__init__(\n option_strings=option_strings,\n dest=dest,\n nargs=PARSER,\n choices=self._name_parser_map,\n required=required,\n help=help,\n metavar=metavar)\n \n def add_parser(self,name,**kwargs):\n \n if kwargs.get('prog')is None :\n kwargs['prog']='%s %s'%(self._prog_prefix,name)\n \n aliases=kwargs.pop('aliases',())\n \n \n if 'help'in kwargs:\n help=kwargs.pop('help')\n choice_action=self._ChoicesPseudoAction(name,aliases,help)\n self._choices_actions.append(choice_action)\n \n \n parser=self._parser_class(**kwargs)\n self._name_parser_map[name]=parser\n \n \n for alias in aliases:\n self._name_parser_map[alias]=parser\n \n return parser\n \n def _get_subactions(self):\n return self._choices_actions\n \n def __call__(self,parser,namespace,values,option_string=None ):\n parser_name=values[0]\n arg_strings=values[1:]\n \n \n if self.dest is not SUPPRESS:\n setattr(namespace,self.dest,parser_name)\n \n \n try :\n parser=self._name_parser_map[parser_name]\n except KeyError:\n args={'parser_name':parser_name,\n 'choices':', '.join(self._name_parser_map)}\n msg=_('unknown parser %(parser_name)r (choices: %(choices)s)')%args\n raise ArgumentError(self,msg)\n \n \n \n \n \n \n \n \n subnamespace,arg_strings=parser.parse_known_args(arg_strings,None )\n for key,value in vars(subnamespace).items():\n setattr(namespace,key,value)\n \n if arg_strings:\n vars(namespace).setdefault(_UNRECOGNIZED_ARGS_ATTR,[])\n getattr(namespace,_UNRECOGNIZED_ARGS_ATTR).extend(arg_strings)\n \nclass _ExtendAction(_AppendAction):\n def __call__(self,parser,namespace,values,option_string=None ):\n items=getattr(namespace,self.dest,None )\n items=_copy_items(items)\n items.extend(values)\n setattr(namespace,self.dest,items)\n \n \n \n \n \nclass FileType(object):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n def __init__(self,mode='r',bufsize=-1,encoding=None ,errors=None ):\n self._mode=mode\n self._bufsize=bufsize\n self._encoding=encoding\n self._errors=errors\n \n def __call__(self,string):\n \n if string =='-':\n if 'r'in self._mode:\n return _sys.stdin\n elif 'w'in self._mode:\n return _sys.stdout\n else :\n msg=_('argument \"-\" with mode %r')%self._mode\n raise ValueError(msg)\n \n \n try :\n return open(string,self._mode,self._bufsize,self._encoding,\n self._errors)\n except OSError as e:\n args={'filename':string,'error':e}\n message=_(\"can't open '%(filename)s': %(error)s\")\n raise ArgumentTypeError(message %args)\n \n def __repr__(self):\n args=self._mode,self._bufsize\n kwargs=[('encoding',self._encoding),('errors',self._errors)]\n args_str=', '.join([repr(arg)for arg in args if arg !=-1]+\n ['%s=%r'%(kw,arg)for kw,arg in kwargs\n if arg is not None ])\n return '%s(%s)'%(type(self).__name__,args_str)\n \n \n \n \n \nclass Namespace(_AttributeHolder):\n ''\n\n\n\n \n \n def __init__(self,**kwargs):\n for name in kwargs:\n setattr(self,name,kwargs[name])\n \n def __eq__(self,other):\n if not isinstance(other,Namespace):\n return NotImplemented\n return vars(self)==vars(other)\n \n def __contains__(self,key):\n return key in self.__dict__\n \n \nclass _ActionsContainer(object):\n\n def __init__(self,\n description,\n prefix_chars,\n argument_default,\n conflict_handler):\n super(_ActionsContainer,self).__init__()\n \n self.description=description\n self.argument_default=argument_default\n self.prefix_chars=prefix_chars\n self.conflict_handler=conflict_handler\n \n \n self._registries={}\n \n \n self.register('action',None ,_StoreAction)\n self.register('action','store',_StoreAction)\n self.register('action','store_const',_StoreConstAction)\n self.register('action','store_true',_StoreTrueAction)\n self.register('action','store_false',_StoreFalseAction)\n self.register('action','append',_AppendAction)\n self.register('action','append_const',_AppendConstAction)\n self.register('action','count',_CountAction)\n self.register('action','help',_HelpAction)\n self.register('action','version',_VersionAction)\n self.register('action','parsers',_SubParsersAction)\n self.register('action','extend',_ExtendAction)\n \n \n self._get_handler()\n \n \n self._actions=[]\n self._option_string_actions={}\n \n \n self._action_groups=[]\n self._mutually_exclusive_groups=[]\n \n \n self._defaults={}\n \n \n self._negative_number_matcher=_re.compile(r'^-\\d+$|^-\\d*\\.\\d+$')\n \n \n \n self._has_negative_number_optionals=[]\n \n \n \n \n def register(self,registry_name,value,object):\n registry=self._registries.setdefault(registry_name,{})\n registry[value]=object\n \n def _registry_get(self,registry_name,value,default=None ):\n return self._registries[registry_name].get(value,default)\n \n \n \n \n def set_defaults(self,**kwargs):\n self._defaults.update(kwargs)\n \n \n \n for action in self._actions:\n if action.dest in kwargs:\n action.default=kwargs[action.dest]\n \n def get_default(self,dest):\n for action in self._actions:\n if action.dest ==dest and action.default is not None :\n return action.default\n return self._defaults.get(dest,None )\n \n \n \n \n \n def add_argument(self,*args,**kwargs):\n ''\n\n\n \n \n \n \n \n chars=self.prefix_chars\n if not args or len(args)==1 and args[0][0]not in chars:\n if args and 'dest'in kwargs:\n raise ValueError('dest supplied twice for positional argument')\n kwargs=self._get_positional_kwargs(*args,**kwargs)\n \n \n else :\n kwargs=self._get_optional_kwargs(*args,**kwargs)\n \n \n if 'default'not in kwargs:\n dest=kwargs['dest']\n if dest in self._defaults:\n kwargs['default']=self._defaults[dest]\n elif self.argument_default is not None :\n kwargs['default']=self.argument_default\n \n \n action_class=self._pop_action_class(kwargs)\n if not callable(action_class):\n raise ValueError('unknown action \"%s\"'%(action_class,))\n action=action_class(**kwargs)\n \n \n type_func=self._registry_get('type',action.type,action.type)\n if not callable(type_func):\n raise ValueError('%r is not callable'%(type_func,))\n \n if type_func is FileType:\n raise ValueError('%r is a FileType class object, instance of it'\n ' must be passed'%(type_func,))\n \n \n if hasattr(self,\"_get_formatter\"):\n try :\n self._get_formatter()._format_args(action,None )\n except TypeError:\n raise ValueError(\"length of metavar tuple does not match nargs\")\n \n return self._add_action(action)\n \n def add_argument_group(self,*args,**kwargs):\n group=_ArgumentGroup(self,*args,**kwargs)\n self._action_groups.append(group)\n return group\n \n def add_mutually_exclusive_group(self,**kwargs):\n group=_MutuallyExclusiveGroup(self,**kwargs)\n self._mutually_exclusive_groups.append(group)\n return group\n \n def _add_action(self,action):\n \n self._check_conflict(action)\n \n \n self._actions.append(action)\n action.container=self\n \n \n for option_string in action.option_strings:\n self._option_string_actions[option_string]=action\n \n \n for option_string in action.option_strings:\n if self._negative_number_matcher.match(option_string):\n if not self._has_negative_number_optionals:\n self._has_negative_number_optionals.append(True )\n \n \n return action\n \n def _remove_action(self,action):\n self._actions.remove(action)\n \n def _add_container_actions(self,container):\n \n title_group_map={}\n for group in self._action_groups:\n if group.title in title_group_map:\n msg=_('cannot merge actions - two groups are named %r')\n raise ValueError(msg %(group.title))\n title_group_map[group.title]=group\n \n \n group_map={}\n for group in container._action_groups:\n \n \n \n if group.title not in title_group_map:\n title_group_map[group.title]=self.add_argument_group(\n title=group.title,\n description=group.description,\n conflict_handler=group.conflict_handler)\n \n \n for action in group._group_actions:\n group_map[action]=title_group_map[group.title]\n \n \n \n \n for group in container._mutually_exclusive_groups:\n mutex_group=self.add_mutually_exclusive_group(\n required=group.required)\n \n \n for action in group._group_actions:\n group_map[action]=mutex_group\n \n \n for action in container._actions:\n group_map.get(action,self)._add_action(action)\n \n def _get_positional_kwargs(self,dest,**kwargs):\n \n if 'required'in kwargs:\n msg=_(\"'required' is an invalid argument for positionals\")\n raise TypeError(msg)\n \n \n \n if kwargs.get('nargs')not in [OPTIONAL,ZERO_OR_MORE]:\n kwargs['required']=True\n if kwargs.get('nargs')==ZERO_OR_MORE and 'default'not in kwargs:\n kwargs['required']=True\n \n \n return dict(kwargs,dest=dest,option_strings=[])\n \n def _get_optional_kwargs(self,*args,**kwargs):\n \n option_strings=[]\n long_option_strings=[]\n for option_string in args:\n \n if not option_string[0]in self.prefix_chars:\n args={'option':option_string,\n 'prefix_chars':self.prefix_chars}\n msg=_('invalid option string %(option)r: '\n 'must start with a character %(prefix_chars)r')\n raise ValueError(msg %args)\n \n \n option_strings.append(option_string)\n if option_string[0]in self.prefix_chars:\n if len(option_string)>1:\n if option_string[1]in self.prefix_chars:\n long_option_strings.append(option_string)\n \n \n dest=kwargs.pop('dest',None )\n if dest is None :\n if long_option_strings:\n dest_option_string=long_option_strings[0]\n else :\n dest_option_string=option_strings[0]\n dest=dest_option_string.lstrip(self.prefix_chars)\n if not dest:\n msg=_('dest= is required for options like %r')\n raise ValueError(msg %option_string)\n dest=dest.replace('-','_')\n \n \n return dict(kwargs,dest=dest,option_strings=option_strings)\n \n def _pop_action_class(self,kwargs,default=None ):\n action=kwargs.pop('action',default)\n return self._registry_get('action',action,action)\n \n def _get_handler(self):\n \n handler_func_name='_handle_conflict_%s'%self.conflict_handler\n try :\n return getattr(self,handler_func_name)\n except AttributeError:\n msg=_('invalid conflict_resolution value: %r')\n raise ValueError(msg %self.conflict_handler)\n \n def _check_conflict(self,action):\n \n \n confl_optionals=[]\n for option_string in action.option_strings:\n if option_string in self._option_string_actions:\n confl_optional=self._option_string_actions[option_string]\n confl_optionals.append((option_string,confl_optional))\n \n \n if confl_optionals:\n conflict_handler=self._get_handler()\n conflict_handler(action,confl_optionals)\n \n def _handle_conflict_error(self,action,conflicting_actions):\n message=ngettext('conflicting option string: %s',\n 'conflicting option strings: %s',\n len(conflicting_actions))\n conflict_string=', '.join([option_string\n for option_string,action\n in conflicting_actions])\n raise ArgumentError(action,message %conflict_string)\n \n def _handle_conflict_resolve(self,action,conflicting_actions):\n \n \n for option_string,action in conflicting_actions:\n \n \n action.option_strings.remove(option_string)\n self._option_string_actions.pop(option_string,None )\n \n \n \n if not action.option_strings:\n action.container._remove_action(action)\n \n \nclass _ArgumentGroup(_ActionsContainer):\n\n def __init__(self,container,title=None ,description=None ,**kwargs):\n \n update=kwargs.setdefault\n update('conflict_handler',container.conflict_handler)\n update('prefix_chars',container.prefix_chars)\n update('argument_default',container.argument_default)\n super_init=super(_ArgumentGroup,self).__init__\n super_init(description=description,**kwargs)\n \n \n self.title=title\n self._group_actions=[]\n \n \n self._registries=container._registries\n self._actions=container._actions\n self._option_string_actions=container._option_string_actions\n self._defaults=container._defaults\n self._has_negative_number_optionals=\\\n container._has_negative_number_optionals\n self._mutually_exclusive_groups=container._mutually_exclusive_groups\n \n def _add_action(self,action):\n action=super(_ArgumentGroup,self)._add_action(action)\n self._group_actions.append(action)\n return action\n \n def _remove_action(self,action):\n super(_ArgumentGroup,self)._remove_action(action)\n self._group_actions.remove(action)\n \n \nclass _MutuallyExclusiveGroup(_ArgumentGroup):\n\n def __init__(self,container,required=False ):\n super(_MutuallyExclusiveGroup,self).__init__(container)\n self.required=required\n self._container=container\n \n def _add_action(self,action):\n if action.required:\n msg=_('mutually exclusive arguments must be optional')\n raise ValueError(msg)\n action=self._container._add_action(action)\n self._group_actions.append(action)\n return action\n \n def _remove_action(self,action):\n self._container._remove_action(action)\n self._group_actions.remove(action)\n \n \nclass ArgumentParser(_AttributeHolder,_ActionsContainer):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n def __init__(self,\n prog=None ,\n usage=None ,\n description=None ,\n epilog=None ,\n parents=[],\n formatter_class=HelpFormatter,\n prefix_chars='-',\n fromfile_prefix_chars=None ,\n argument_default=None ,\n conflict_handler='error',\n add_help=True ,\n allow_abbrev=True ):\n \n superinit=super(ArgumentParser,self).__init__\n superinit(description=description,\n prefix_chars=prefix_chars,\n argument_default=argument_default,\n conflict_handler=conflict_handler)\n \n \n if prog is None :\n prog=_os.path.basename(_sys.argv[0])\n \n self.prog=prog\n self.usage=usage\n self.epilog=epilog\n self.formatter_class=formatter_class\n self.fromfile_prefix_chars=fromfile_prefix_chars\n self.add_help=add_help\n self.allow_abbrev=allow_abbrev\n \n add_group=self.add_argument_group\n self._positionals=add_group(_('positional arguments'))\n self._optionals=add_group(_('optional arguments'))\n self._subparsers=None\n \n \n def identity(string):\n return string\n self.register('type',None ,identity)\n \n \n \n default_prefix='-'if '-'in prefix_chars else prefix_chars[0]\n if self.add_help:\n self.add_argument(\n default_prefix+'h',default_prefix *2+'help',\n action='help',default=SUPPRESS,\n help=_('show this help message and exit'))\n \n \n for parent in parents:\n self._add_container_actions(parent)\n try :\n defaults=parent._defaults\n except AttributeError:\n pass\n else :\n self._defaults.update(defaults)\n \n \n \n \n def _get_kwargs(self):\n names=[\n 'prog',\n 'usage',\n 'description',\n 'formatter_class',\n 'conflict_handler',\n 'add_help',\n ]\n return [(name,getattr(self,name))for name in names]\n \n \n \n \n def add_subparsers(self,**kwargs):\n if self._subparsers is not None :\n self.error(_('cannot have multiple subparser arguments'))\n \n \n kwargs.setdefault('parser_class',type(self))\n \n if 'title'in kwargs or 'description'in kwargs:\n title=_(kwargs.pop('title','subcommands'))\n description=_(kwargs.pop('description',None ))\n self._subparsers=self.add_argument_group(title,description)\n else :\n self._subparsers=self._positionals\n \n \n \n if kwargs.get('prog')is None :\n formatter=self._get_formatter()\n positionals=self._get_positional_actions()\n groups=self._mutually_exclusive_groups\n formatter.add_usage(self.usage,positionals,groups,'')\n kwargs['prog']=formatter.format_help().strip()\n \n \n parsers_class=self._pop_action_class(kwargs,'parsers')\n action=parsers_class(option_strings=[],**kwargs)\n self._subparsers._add_action(action)\n \n \n return action\n \n def _add_action(self,action):\n if action.option_strings:\n self._optionals._add_action(action)\n else :\n self._positionals._add_action(action)\n return action\n \n def _get_optional_actions(self):\n return [action\n for action in self._actions\n if action.option_strings]\n \n def _get_positional_actions(self):\n return [action\n for action in self._actions\n if not action.option_strings]\n \n \n \n \n def parse_args(self,args=None ,namespace=None ):\n args,argv=self.parse_known_args(args,namespace)\n if argv:\n msg=_('unrecognized arguments: %s')\n self.error(msg %' '.join(argv))\n return args\n \n def parse_known_args(self,args=None ,namespace=None ):\n if args is None :\n \n args=_sys.argv[1:]\n else :\n \n args=list(args)\n \n \n if namespace is None :\n namespace=Namespace()\n \n \n for action in self._actions:\n if action.dest is not SUPPRESS:\n if not hasattr(namespace,action.dest):\n if action.default is not SUPPRESS:\n setattr(namespace,action.dest,action.default)\n \n \n for dest in self._defaults:\n if not hasattr(namespace,dest):\n setattr(namespace,dest,self._defaults[dest])\n \n \n try :\n namespace,args=self._parse_known_args(args,namespace)\n if hasattr(namespace,_UNRECOGNIZED_ARGS_ATTR):\n args.extend(getattr(namespace,_UNRECOGNIZED_ARGS_ATTR))\n delattr(namespace,_UNRECOGNIZED_ARGS_ATTR)\n return namespace,args\n except ArgumentError:\n err=_sys.exc_info()[1]\n self.error(str(err))\n \n def _parse_known_args(self,arg_strings,namespace):\n \n if self.fromfile_prefix_chars is not None :\n arg_strings=self._read_args_from_files(arg_strings)\n \n \n \n action_conflicts={}\n for mutex_group in self._mutually_exclusive_groups:\n group_actions=mutex_group._group_actions\n for i,mutex_action in enumerate(mutex_group._group_actions):\n conflicts=action_conflicts.setdefault(mutex_action,[])\n conflicts.extend(group_actions[:i])\n conflicts.extend(group_actions[i+1:])\n \n \n \n \n option_string_indices={}\n arg_string_pattern_parts=[]\n arg_strings_iter=iter(arg_strings)\n for i,arg_string in enumerate(arg_strings_iter):\n \n \n if arg_string =='--':\n arg_string_pattern_parts.append('-')\n for arg_string in arg_strings_iter:\n arg_string_pattern_parts.append('A')\n \n \n \n else :\n option_tuple=self._parse_optional(arg_string)\n if option_tuple is None :\n pattern='A'\n else :\n option_string_indices[i]=option_tuple\n pattern='O'\n arg_string_pattern_parts.append(pattern)\n \n \n arg_strings_pattern=''.join(arg_string_pattern_parts)\n \n \n seen_actions=set()\n seen_non_default_actions=set()\n \n def take_action(action,argument_strings,option_string=None ):\n seen_actions.add(action)\n argument_values=self._get_values(action,argument_strings)\n \n \n \n \n if argument_values is not action.default:\n seen_non_default_actions.add(action)\n for conflict_action in action_conflicts.get(action,[]):\n if conflict_action in seen_non_default_actions:\n msg=_('not allowed with argument %s')\n action_name=_get_action_name(conflict_action)\n raise ArgumentError(action,msg %action_name)\n \n \n \n if argument_values is not SUPPRESS:\n action(self,namespace,argument_values,option_string)\n \n \n def consume_optional(start_index):\n \n \n option_tuple=option_string_indices[start_index]\n action,option_string,explicit_arg=option_tuple\n \n \n \n match_argument=self._match_argument\n action_tuples=[]\n while True :\n \n \n if action is None :\n extras.append(arg_strings[start_index])\n return start_index+1\n \n \n \n if explicit_arg is not None :\n arg_count=match_argument(action,'A')\n \n \n \n \n chars=self.prefix_chars\n if arg_count ==0 and option_string[1]not in chars:\n action_tuples.append((action,[],option_string))\n char=option_string[0]\n option_string=char+explicit_arg[0]\n new_explicit_arg=explicit_arg[1:]or None\n optionals_map=self._option_string_actions\n if option_string in optionals_map:\n action=optionals_map[option_string]\n explicit_arg=new_explicit_arg\n else :\n msg=_('ignored explicit argument %r')\n raise ArgumentError(action,msg %explicit_arg)\n \n \n \n elif arg_count ==1:\n stop=start_index+1\n args=[explicit_arg]\n action_tuples.append((action,args,option_string))\n break\n \n \n \n else :\n msg=_('ignored explicit argument %r')\n raise ArgumentError(action,msg %explicit_arg)\n \n \n \n \n else :\n start=start_index+1\n selected_patterns=arg_strings_pattern[start:]\n arg_count=match_argument(action,selected_patterns)\n stop=start+arg_count\n args=arg_strings[start:stop]\n action_tuples.append((action,args,option_string))\n break\n \n \n \n assert action_tuples\n for action,args,option_string in action_tuples:\n take_action(action,args,option_string)\n return stop\n \n \n \n positionals=self._get_positional_actions()\n \n \n def consume_positionals(start_index):\n \n match_partial=self._match_arguments_partial\n selected_pattern=arg_strings_pattern[start_index:]\n arg_counts=match_partial(positionals,selected_pattern)\n \n \n \n for action,arg_count in zip(positionals,arg_counts):\n args=arg_strings[start_index:start_index+arg_count]\n start_index +=arg_count\n take_action(action,args)\n \n \n \n positionals[:]=positionals[len(arg_counts):]\n return start_index\n \n \n \n extras=[]\n start_index=0\n if option_string_indices:\n max_option_string_index=max(option_string_indices)\n else :\n max_option_string_index=-1\n while start_index <=max_option_string_index:\n \n \n next_option_string_index=min([\n index\n for index in option_string_indices\n if index >=start_index])\n if start_index !=next_option_string_index:\n positionals_end_index=consume_positionals(start_index)\n \n \n \n if positionals_end_index >start_index:\n start_index=positionals_end_index\n continue\n else :\n start_index=positionals_end_index\n \n \n \n if start_index not in option_string_indices:\n strings=arg_strings[start_index:next_option_string_index]\n extras.extend(strings)\n start_index=next_option_string_index\n \n \n start_index=consume_optional(start_index)\n \n \n stop_index=consume_positionals(start_index)\n \n \n extras.extend(arg_strings[stop_index:])\n \n \n \n required_actions=[]\n for action in self._actions:\n if action not in seen_actions:\n if action.required:\n required_actions.append(_get_action_name(action))\n else :\n \n \n \n \n if (action.default is not None and\n isinstance(action.default,str)and\n hasattr(namespace,action.dest)and\n action.default is getattr(namespace,action.dest)):\n setattr(namespace,action.dest,\n self._get_value(action,action.default))\n \n if required_actions:\n self.error(_('the following arguments are required: %s')%\n ', '.join(required_actions))\n \n \n for group in self._mutually_exclusive_groups:\n if group.required:\n for action in group._group_actions:\n if action in seen_non_default_actions:\n break\n \n \n else :\n names=[_get_action_name(action)\n for action in group._group_actions\n if action.help is not SUPPRESS]\n msg=_('one of the arguments %s is required')\n self.error(msg %' '.join(names))\n \n \n return namespace,extras\n \n def _read_args_from_files(self,arg_strings):\n \n new_arg_strings=[]\n for arg_string in arg_strings:\n \n \n if not arg_string or arg_string[0]not in self.fromfile_prefix_chars:\n new_arg_strings.append(arg_string)\n \n \n else :\n try :\n with open(arg_string[1:])as args_file:\n arg_strings=[]\n for arg_line in args_file.read().splitlines():\n for arg in self.convert_arg_line_to_args(arg_line):\n arg_strings.append(arg)\n arg_strings=self._read_args_from_files(arg_strings)\n new_arg_strings.extend(arg_strings)\n except OSError:\n err=_sys.exc_info()[1]\n self.error(str(err))\n \n \n return new_arg_strings\n \n def convert_arg_line_to_args(self,arg_line):\n return [arg_line]\n \n def _match_argument(self,action,arg_strings_pattern):\n \n nargs_pattern=self._get_nargs_pattern(action)\n match=_re.match(nargs_pattern,arg_strings_pattern)\n \n \n if match is None :\n nargs_errors={\n None :_('expected one argument'),\n OPTIONAL:_('expected at most one argument'),\n ONE_OR_MORE:_('expected at least one argument'),\n }\n default=ngettext('expected %s argument',\n 'expected %s arguments',\n action.nargs)%action.nargs\n msg=nargs_errors.get(action.nargs,default)\n raise ArgumentError(action,msg)\n \n \n return len(match.group(1))\n \n def _match_arguments_partial(self,actions,arg_strings_pattern):\n \n \n result=[]\n for i in range(len(actions),0,-1):\n actions_slice=actions[:i]\n pattern=''.join([self._get_nargs_pattern(action)\n for action in actions_slice])\n match=_re.match(pattern,arg_strings_pattern)\n if match is not None :\n result.extend([len(string)for string in match.groups()])\n break\n \n \n return result\n \n def _parse_optional(self,arg_string):\n \n if not arg_string:\n return None\n \n \n if not arg_string[0]in self.prefix_chars:\n return None\n \n \n if arg_string in self._option_string_actions:\n action=self._option_string_actions[arg_string]\n return action,arg_string,None\n \n \n if len(arg_string)==1:\n return None\n \n \n if '='in arg_string:\n option_string,explicit_arg=arg_string.split('=',1)\n if option_string in self._option_string_actions:\n action=self._option_string_actions[option_string]\n return action,option_string,explicit_arg\n \n if self.allow_abbrev or not arg_string.startswith('--'):\n \n \n option_tuples=self._get_option_tuples(arg_string)\n \n \n if len(option_tuples)>1:\n options=', '.join([option_string\n for action,option_string,explicit_arg in option_tuples])\n args={'option':arg_string,'matches':options}\n msg=_('ambiguous option: %(option)s could match %(matches)s')\n self.error(msg %args)\n \n \n \n elif len(option_tuples)==1:\n option_tuple,=option_tuples\n return option_tuple\n \n \n \n \n if self._negative_number_matcher.match(arg_string):\n if not self._has_negative_number_optionals:\n return None\n \n \n if ' 'in arg_string:\n return None\n \n \n \n return None ,arg_string,None\n \n def _get_option_tuples(self,option_string):\n result=[]\n \n \n \n chars=self.prefix_chars\n if option_string[0]in chars and option_string[1]in chars:\n if '='in option_string:\n option_prefix,explicit_arg=option_string.split('=',1)\n else :\n option_prefix=option_string\n explicit_arg=None\n for option_string in self._option_string_actions:\n if option_string.startswith(option_prefix):\n action=self._option_string_actions[option_string]\n tup=action,option_string,explicit_arg\n result.append(tup)\n \n \n \n \n elif option_string[0]in chars and option_string[1]not in chars:\n option_prefix=option_string\n explicit_arg=None\n short_option_prefix=option_string[:2]\n short_explicit_arg=option_string[2:]\n \n for option_string in self._option_string_actions:\n if option_string ==short_option_prefix:\n action=self._option_string_actions[option_string]\n tup=action,option_string,short_explicit_arg\n result.append(tup)\n elif option_string.startswith(option_prefix):\n action=self._option_string_actions[option_string]\n tup=action,option_string,explicit_arg\n result.append(tup)\n \n \n else :\n self.error(_('unexpected option string: %s')%option_string)\n \n \n return result\n \n def _get_nargs_pattern(self,action):\n \n \n nargs=action.nargs\n \n \n if nargs is None :\n nargs_pattern='(-*A-*)'\n \n \n elif nargs ==OPTIONAL:\n nargs_pattern='(-*A?-*)'\n \n \n elif nargs ==ZERO_OR_MORE:\n nargs_pattern='(-*[A-]*)'\n \n \n elif nargs ==ONE_OR_MORE:\n nargs_pattern='(-*A[A-]*)'\n \n \n elif nargs ==REMAINDER:\n nargs_pattern='([-AO]*)'\n \n \n elif nargs ==PARSER:\n nargs_pattern='(-*A[-AO]*)'\n \n \n elif nargs ==SUPPRESS:\n nargs_pattern='(-*-*)'\n \n \n else :\n nargs_pattern='(-*%s-*)'%'-*'.join('A'*nargs)\n \n \n if action.option_strings:\n nargs_pattern=nargs_pattern.replace('-*','')\n nargs_pattern=nargs_pattern.replace('-','')\n \n \n return nargs_pattern\n \n \n \n \n \n def parse_intermixed_args(self,args=None ,namespace=None ):\n args,argv=self.parse_known_intermixed_args(args,namespace)\n if argv:\n msg=_('unrecognized arguments: %s')\n self.error(msg %' '.join(argv))\n return args\n \n def parse_known_intermixed_args(self,args=None ,namespace=None ):\n \n \n \n \n \n \n \n \n \n \n \n \n positionals=self._get_positional_actions()\n a=[action for action in positionals\n if action.nargs in [PARSER,REMAINDER]]\n if a:\n raise TypeError('parse_intermixed_args: positional arg'\n ' with nargs=%s'%a[0].nargs)\n \n if [action.dest for group in self._mutually_exclusive_groups\n for action in group._group_actions if action in positionals]:\n raise TypeError('parse_intermixed_args: positional in'\n ' mutuallyExclusiveGroup')\n \n try :\n save_usage=self.usage\n try :\n if self.usage is None :\n \n self.usage=self.format_usage()[7:]\n for action in positionals:\n \n action.save_nargs=action.nargs\n \n action.nargs=SUPPRESS\n action.save_default=action.default\n action.default=SUPPRESS\n namespace,remaining_args=self.parse_known_args(args,\n namespace)\n for action in positionals:\n \n if (hasattr(namespace,action.dest)\n and getattr(namespace,action.dest)==[]):\n from warnings import warn\n warn('Do not expect %s in %s'%(action.dest,namespace))\n delattr(namespace,action.dest)\n finally :\n \n for action in positionals:\n action.nargs=action.save_nargs\n action.default=action.save_default\n optionals=self._get_optional_actions()\n try :\n \n \n for action in optionals:\n action.save_required=action.required\n action.required=False\n for group in self._mutually_exclusive_groups:\n group.save_required=group.required\n group.required=False\n namespace,extras=self.parse_known_args(remaining_args,\n namespace)\n finally :\n \n for action in optionals:\n action.required=action.save_required\n for group in self._mutually_exclusive_groups:\n group.required=group.save_required\n finally :\n self.usage=save_usage\n return namespace,extras\n \n \n \n \n def _get_values(self,action,arg_strings):\n \n if action.nargs not in [PARSER,REMAINDER]:\n try :\n arg_strings.remove('--')\n except ValueError:\n pass\n \n \n if not arg_strings and action.nargs ==OPTIONAL:\n if action.option_strings:\n value=action.const\n else :\n value=action.default\n if isinstance(value,str):\n value=self._get_value(action,value)\n self._check_value(action,value)\n \n \n \n elif (not arg_strings and action.nargs ==ZERO_OR_MORE and\n not action.option_strings):\n if action.default is not None :\n value=action.default\n else :\n value=arg_strings\n self._check_value(action,value)\n \n \n elif len(arg_strings)==1 and action.nargs in [None ,OPTIONAL]:\n arg_string,=arg_strings\n value=self._get_value(action,arg_string)\n self._check_value(action,value)\n \n \n elif action.nargs ==REMAINDER:\n value=[self._get_value(action,v)for v in arg_strings]\n \n \n elif action.nargs ==PARSER:\n value=[self._get_value(action,v)for v in arg_strings]\n self._check_value(action,value[0])\n \n \n elif action.nargs ==SUPPRESS:\n value=SUPPRESS\n \n \n else :\n value=[self._get_value(action,v)for v in arg_strings]\n for v in value:\n self._check_value(action,v)\n \n \n return value\n \n def _get_value(self,action,arg_string):\n type_func=self._registry_get('type',action.type,action.type)\n if not callable(type_func):\n msg=_('%r is not callable')\n raise ArgumentError(action,msg %type_func)\n \n \n try :\n result=type_func(arg_string)\n \n \n except ArgumentTypeError:\n name=getattr(action.type,'__name__',repr(action.type))\n msg=str(_sys.exc_info()[1])\n raise ArgumentError(action,msg)\n \n \n except (TypeError,ValueError):\n name=getattr(action.type,'__name__',repr(action.type))\n args={'type':name,'value':arg_string}\n msg=_('invalid %(type)s value: %(value)r')\n raise ArgumentError(action,msg %args)\n \n \n return result\n \n def _check_value(self,action,value):\n \n if action.choices is not None and value not in action.choices:\n args={'value':value,\n 'choices':', '.join(map(repr,action.choices))}\n msg=_('invalid choice: %(value)r (choose from %(choices)s)')\n raise ArgumentError(action,msg %args)\n \n \n \n \n def format_usage(self):\n formatter=self._get_formatter()\n formatter.add_usage(self.usage,self._actions,\n self._mutually_exclusive_groups)\n return formatter.format_help()\n \n def format_help(self):\n formatter=self._get_formatter()\n \n \n formatter.add_usage(self.usage,self._actions,\n self._mutually_exclusive_groups)\n \n \n formatter.add_text(self.description)\n \n \n for action_group in self._action_groups:\n formatter.start_section(action_group.title)\n formatter.add_text(action_group.description)\n formatter.add_arguments(action_group._group_actions)\n formatter.end_section()\n \n \n formatter.add_text(self.epilog)\n \n \n return formatter.format_help()\n \n def _get_formatter(self):\n return self.formatter_class(prog=self.prog)\n \n \n \n \n def print_usage(self,file=None ):\n if file is None :\n file=_sys.stdout\n self._print_message(self.format_usage(),file)\n \n def print_help(self,file=None ):\n if file is None :\n file=_sys.stdout\n self._print_message(self.format_help(),file)\n \n def _print_message(self,message,file=None ):\n if message:\n if file is None :\n file=_sys.stderr\n file.write(message)\n \n \n \n \n def exit(self,status=0,message=None ):\n if message:\n self._print_message(message,_sys.stderr)\n _sys.exit(status)\n \n def error(self,message):\n ''\n\n\n\n\n\n\n \n self.print_usage(_sys.stderr)\n args={'prog':self.prog,'message':message}\n self.exit(2,_('%(prog)s: error: %(message)s\\n')%args)\n", ["copy", "gettext", "os", "re", "shutil", "sys", "textwrap", "warnings"]], "atexit": [".py", "''\n\n\n\n\n\nclass __loader__(object):\n pass\n \ndef _clear(*args,**kw):\n ''\n \n pass\n \ndef _run_exitfuncs(*args,**kw):\n ''\n \n pass\n \ndef register(*args,**kw):\n ''\n\n\n\n\n\n\n \n pass\n \ndef unregister(*args,**kw):\n ''\n\n\n\n \n pass\n", []], "base64": [".py", "#! /usr/bin/env python3\n\n\"\"\"Base16, Base32, Base64 (RFC 3548), Base85 and Ascii85 data encodings\"\"\"\n\n\n\n\n\nimport re\nimport struct\nimport binascii\n\n\n__all__=[\n\n'encode','decode','encodebytes','decodebytes',\n\n'b64encode','b64decode','b32encode','b32decode',\n'b16encode','b16decode',\n\n'b85encode','b85decode','a85encode','a85decode',\n\n'standard_b64encode','standard_b64decode',\n\n\n\n\n'urlsafe_b64encode','urlsafe_b64decode',\n]\n\n\nbytes_types=(bytes,bytearray)\n\ndef _bytes_from_decode_data(s):\n if isinstance(s,str):\n try :\n return s.encode('ascii')\n except UnicodeEncodeError:\n raise ValueError('string argument should contain only ASCII characters')\n if isinstance(s,bytes_types):\n return s\n try :\n return memoryview(s).tobytes()\n except TypeError:\n raise TypeError(\"argument should be a bytes-like object or ASCII \"\n \"string, not %r\"%s.__class__.__name__)from None\n \n \n \n \ndef b64encode(s,altchars=None ):\n ''\n\n\n\n\n \n encoded=binascii.b2a_base64(s,newline=False )\n if altchars is not None :\n assert len(altchars)==2,repr(altchars)\n return encoded.translate(bytes.maketrans(b'+/',altchars))\n return encoded\n \n \ndef b64decode(s,altchars=None ,validate=False ):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n \n s=_bytes_from_decode_data(s)\n if altchars is not None :\n altchars=_bytes_from_decode_data(altchars)\n assert len(altchars)==2,repr(altchars)\n s=s.translate(bytes.maketrans(altchars,b'+/'))\n if validate and not re.match(b'^[A-Za-z0-9+/]*={0,2}$',s):\n raise binascii.Error('Non-base64 digit found')\n return binascii.a2b_base64(s)\n \n \ndef standard_b64encode(s):\n ''\n\n\n \n return b64encode(s)\n \ndef standard_b64decode(s):\n ''\n\n\n\n\n\n \n return b64decode(s)\n \n \n_urlsafe_encode_translation=bytes.maketrans(b'+/',b'-_')\n_urlsafe_decode_translation=bytes.maketrans(b'-_',b'+/')\n\ndef urlsafe_b64encode(s):\n ''\n\n\n\n\n \n return b64encode(s).translate(_urlsafe_encode_translation)\n \ndef urlsafe_b64decode(s):\n ''\n\n\n\n\n\n\n\n\n \n s=_bytes_from_decode_data(s)\n s=s.translate(_urlsafe_decode_translation)\n return b64decode(s)\n \n \n \n \n_b32alphabet=b'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567'\n_b32tab2=None\n_b32rev=None\n\ndef b32encode(s):\n ''\n \n global _b32tab2\n \n \n if _b32tab2 is None :\n b32tab=[bytes((i,))for i in _b32alphabet]\n _b32tab2=[a+b for a in b32tab for b in b32tab]\n b32tab=None\n \n if not isinstance(s,bytes_types):\n s=memoryview(s).tobytes()\n leftover=len(s)%5\n \n if leftover:\n s=s+b'\\0'*(5 -leftover)\n encoded=bytearray()\n from_bytes=int.from_bytes\n b32tab2=_b32tab2\n for i in range(0,len(s),5):\n c=from_bytes(s[i:i+5],'big')\n encoded +=(b32tab2[c >>30]+\n b32tab2[(c >>20)&0x3ff]+\n b32tab2[(c >>10)&0x3ff]+\n b32tab2[c&0x3ff]\n )\n \n if leftover ==1:\n encoded[-6:]=b'======'\n elif leftover ==2:\n encoded[-4:]=b'===='\n elif leftover ==3:\n encoded[-3:]=b'==='\n elif leftover ==4:\n encoded[-1:]=b'='\n return bytes(encoded)\n \ndef b32decode(s,casefold=False ,map01=None ):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n global _b32rev\n \n \n if _b32rev is None :\n _b32rev={v:k for k,v in enumerate(_b32alphabet)}\n s=_bytes_from_decode_data(s)\n if len(s)%8:\n raise binascii.Error('Incorrect padding')\n \n \n \n if map01 is not None :\n map01=_bytes_from_decode_data(map01)\n assert len(map01)==1,repr(map01)\n s=s.translate(bytes.maketrans(b'01',b'O'+map01))\n if casefold:\n s=s.upper()\n \n \n \n l=len(s)\n s=s.rstrip(b'=')\n padchars=l -len(s)\n \n decoded=bytearray()\n b32rev=_b32rev\n for i in range(0,len(s),8):\n quanta=s[i:i+8]\n acc=0\n try :\n for c in quanta:\n acc=(acc <<5)+b32rev[c]\n except KeyError:\n raise binascii.Error('Non-base32 digit found')from None\n decoded +=acc.to_bytes(5,'big')\n \n if l %8 or padchars not in {0,1,3,4,6}:\n raise binascii.Error('Incorrect padding')\n if padchars and decoded:\n acc <<=5 *padchars\n last=acc.to_bytes(5,'big')\n leftover=(43 -5 *padchars)//8\n decoded[-5:]=last[:leftover]\n return bytes(decoded)\n \n \n \n \n \ndef b16encode(s):\n ''\n \n return binascii.hexlify(s).upper()\n \n \ndef b16decode(s,casefold=False ):\n ''\n\n\n\n\n\n\n\n \n s=_bytes_from_decode_data(s)\n if casefold:\n s=s.upper()\n if re.search(b'[^0-9A-F]',s):\n raise binascii.Error('Non-base16 digit found')\n return binascii.unhexlify(s)\n \n \n \n \n \n_a85chars=None\n_a85chars2=None\n_A85START=b\"<~\"\n_A85END=b\"~>\"\n\ndef _85encode(b,chars,chars2,pad=False ,foldnuls=False ,foldspaces=False ):\n\n if not isinstance(b,bytes_types):\n b=memoryview(b).tobytes()\n \n padding=(-len(b))%4\n if padding:\n b=b+b'\\0'*padding\n words=struct.Struct('!%dI'%(len(b)//4)).unpack(b)\n \n chunks=[b'z'if foldnuls and not word else\n b'y'if foldspaces and word ==0x20202020 else\n (chars2[word //614125]+\n chars2[word //85 %7225]+\n chars[word %85])\n for word in words]\n \n if padding and not pad:\n if chunks[-1]==b'z':\n chunks[-1]=chars[0]*5\n chunks[-1]=chunks[-1][:-padding]\n \n return b''.join(chunks)\n \ndef a85encode(b,*,foldspaces=False ,wrapcol=0,pad=False ,adobe=False ):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n global _a85chars,_a85chars2\n \n \n if _a85chars is None :\n _a85chars=[bytes((i,))for i in range(33,118)]\n _a85chars2=[(a+b)for a in _a85chars for b in _a85chars]\n \n result=_85encode(b,_a85chars,_a85chars2,pad,True ,foldspaces)\n \n if adobe:\n result=_A85START+result\n if wrapcol:\n wrapcol=max(2 if adobe else 1,wrapcol)\n chunks=[result[i:i+wrapcol]\n for i in range(0,len(result),wrapcol)]\n if adobe:\n if len(chunks[-1])+2 >wrapcol:\n chunks.append(b'')\n result=b'\\n'.join(chunks)\n if adobe:\n result +=_A85END\n \n return result\n \ndef a85decode(b,*,foldspaces=False ,adobe=False ,ignorechars=b' \\t\\n\\r\\v'):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n b=_bytes_from_decode_data(b)\n if adobe:\n if not b.endswith(_A85END):\n raise ValueError(\n \"Ascii85 encoded byte sequences must end \"\n \"with {!r}\".format(_A85END)\n )\n if b.startswith(_A85START):\n b=b[2:-2]\n else :\n b=b[:-2]\n \n \n \n \n packI=struct.Struct('!I').pack\n decoded=[]\n decoded_append=decoded.append\n curr=[]\n curr_append=curr.append\n curr_clear=curr.clear\n for x in b+b'u'*4:\n if b'!'[0]<=x <=b'u'[0]:\n curr_append(x)\n if len(curr)==5:\n acc=0\n for x in curr:\n acc=85 *acc+(x -33)\n try :\n decoded_append(packI(acc))\n except struct.error:\n raise ValueError('Ascii85 overflow')from None\n curr_clear()\n elif x ==b'z'[0]:\n if curr:\n raise ValueError('z inside Ascii85 5-tuple')\n decoded_append(b'\\0\\0\\0\\0')\n elif foldspaces and x ==b'y'[0]:\n if curr:\n raise ValueError('y inside Ascii85 5-tuple')\n decoded_append(b'\\x20\\x20\\x20\\x20')\n elif x in ignorechars:\n \n continue\n else :\n raise ValueError('Non-Ascii85 digit found: %c'%x)\n \n result=b''.join(decoded)\n padding=4 -len(curr)\n if padding:\n \n result=result[:-padding]\n return result\n \n \n \n_b85alphabet=(b\"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ\"\nb\"abcdefghijklmnopqrstuvwxyz!#$%&()*+-;<=>?@^_`{|}~\")\n_b85chars=None\n_b85chars2=None\n_b85dec=None\n\ndef b85encode(b,pad=False ):\n ''\n\n\n\n \n global _b85chars,_b85chars2\n \n \n if _b85chars is None :\n _b85chars=[bytes((i,))for i in _b85alphabet]\n _b85chars2=[(a+b)for a in _b85chars for b in _b85chars]\n return _85encode(b,_b85chars,_b85chars2,pad)\n \ndef b85decode(b):\n ''\n\n\n \n global _b85dec\n \n \n if _b85dec is None :\n _b85dec=[None ]*256\n for i,c in enumerate(_b85alphabet):\n _b85dec[c]=i\n \n b=_bytes_from_decode_data(b)\n padding=(-len(b))%5\n b=b+b'~'*padding\n out=[]\n packI=struct.Struct('!I').pack\n for i in range(0,len(b),5):\n chunk=b[i:i+5]\n acc=0\n try :\n for c in chunk:\n acc=acc *85+_b85dec[c]\n except TypeError:\n for j,c in enumerate(chunk):\n if _b85dec[c]is None :\n raise ValueError('bad base85 character at position %d'\n %(i+j))from None\n raise\n try :\n out.append(packI(acc))\n except struct.error:\n raise ValueError('base85 overflow in hunk starting at byte %d'\n %i)from None\n \n result=b''.join(out)\n if padding:\n result=result[:-padding]\n return result\n \n \n \n \n \nMAXLINESIZE=76\nMAXBINSIZE=(MAXLINESIZE //4)*3\n\ndef encode(input,output):\n ''\n while True :\n s=input.read(MAXBINSIZE)\n if not s:\n break\n while len(s)\":\n return filename\n canonic=self.fncache.get(filename)\n if not canonic:\n canonic=os.path.abspath(filename)\n canonic=os.path.normcase(canonic)\n self.fncache[filename]=canonic\n return canonic\n \n def reset(self):\n ''\n import linecache\n linecache.checkcache()\n self.botframe=None\n self._set_stopinfo(None ,None )\n \n def trace_dispatch(self,frame,event,arg):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n if self.quitting:\n return\n if event =='line':\n return self.dispatch_line(frame)\n if event =='call':\n return self.dispatch_call(frame,arg)\n if event =='return':\n return self.dispatch_return(frame,arg)\n if event =='exception':\n return self.dispatch_exception(frame,arg)\n if event =='c_call':\n return self.trace_dispatch\n if event =='c_exception':\n return self.trace_dispatch\n if event =='c_return':\n return self.trace_dispatch\n print('bdb.Bdb.dispatch: unknown debugging event:',repr(event))\n return self.trace_dispatch\n \n def dispatch_line(self,frame):\n ''\n\n\n\n\n \n if self.stop_here(frame)or self.break_here(frame):\n self.user_line(frame)\n if self.quitting:raise BdbQuit\n return self.trace_dispatch\n \n def dispatch_call(self,frame,arg):\n ''\n\n\n\n\n \n \n if self.botframe is None :\n \n self.botframe=frame.f_back\n return self.trace_dispatch\n if not (self.stop_here(frame)or self.break_anywhere(frame)):\n \n return\n \n if self.stopframe and frame.f_code.co_flags&GENERATOR_AND_COROUTINE_FLAGS:\n return self.trace_dispatch\n self.user_call(frame,arg)\n if self.quitting:raise BdbQuit\n return self.trace_dispatch\n \n def dispatch_return(self,frame,arg):\n ''\n\n\n\n\n \n if self.stop_here(frame)or frame ==self.returnframe:\n \n if self.stopframe and frame.f_code.co_flags&GENERATOR_AND_COROUTINE_FLAGS:\n return self.trace_dispatch\n try :\n self.frame_returning=frame\n self.user_return(frame,arg)\n finally :\n self.frame_returning=None\n if self.quitting:raise BdbQuit\n \n if self.stopframe is frame and self.stoplineno !=-1:\n self._set_stopinfo(None ,None )\n return self.trace_dispatch\n \n def dispatch_exception(self,frame,arg):\n ''\n\n\n\n\n \n if self.stop_here(frame):\n \n \n \n if not (frame.f_code.co_flags&GENERATOR_AND_COROUTINE_FLAGS\n and arg[0]is StopIteration and arg[2]is None ):\n self.user_exception(frame,arg)\n if self.quitting:raise BdbQuit\n \n \n \n \n elif (self.stopframe and frame is not self.stopframe\n and self.stopframe.f_code.co_flags&GENERATOR_AND_COROUTINE_FLAGS\n and arg[0]in (StopIteration,GeneratorExit)):\n self.user_exception(frame,arg)\n if self.quitting:raise BdbQuit\n \n return self.trace_dispatch\n \n \n \n \n \n def is_skipped_module(self,module_name):\n ''\n if module_name is None :\n return False\n for pattern in self.skip:\n if fnmatch.fnmatch(module_name,pattern):\n return True\n return False\n \n def stop_here(self,frame):\n ''\n \n \n if self.skip and\\\n self.is_skipped_module(frame.f_globals.get('__name__')):\n return False\n if frame is self.stopframe:\n if self.stoplineno ==-1:\n return False\n return frame.f_lineno >=self.stoplineno\n if not self.stopframe:\n return True\n return False\n \n def break_here(self,frame):\n ''\n\n\n\n \n filename=self.canonic(frame.f_code.co_filename)\n if filename not in self.breaks:\n return False\n lineno=frame.f_lineno\n if lineno not in self.breaks[filename]:\n \n \n lineno=frame.f_code.co_firstlineno\n if lineno not in self.breaks[filename]:\n return False\n \n \n (bp,flag)=effective(filename,lineno,frame)\n if bp:\n self.currentbp=bp.number\n if (flag and bp.temporary):\n self.do_clear(str(bp.number))\n return True\n else :\n return False\n \n def do_clear(self,arg):\n ''\n\n\n \n raise NotImplementedError(\"subclass of bdb must implement do_clear()\")\n \n def break_anywhere(self,frame):\n ''\n \n return self.canonic(frame.f_code.co_filename)in self.breaks\n \n \n \n \n def user_call(self,frame,argument_list):\n ''\n pass\n \n def user_line(self,frame):\n ''\n pass\n \n def user_return(self,frame,return_value):\n ''\n pass\n \n def user_exception(self,frame,exc_info):\n ''\n pass\n \n def _set_stopinfo(self,stopframe,returnframe,stoplineno=0):\n ''\n\n\n\n\n \n self.stopframe=stopframe\n self.returnframe=returnframe\n self.quitting=False\n \n \n self.stoplineno=stoplineno\n \n \n \n \n def set_until(self,frame,lineno=None ):\n ''\n \n \n if lineno is None :\n lineno=frame.f_lineno+1\n self._set_stopinfo(frame,frame,lineno)\n \n def set_step(self):\n ''\n \n \n \n \n if self.frame_returning:\n caller_frame=self.frame_returning.f_back\n if caller_frame and not caller_frame.f_trace:\n caller_frame.f_trace=self.trace_dispatch\n self._set_stopinfo(None ,None )\n \n def set_next(self,frame):\n ''\n self._set_stopinfo(frame,None )\n \n def set_return(self,frame):\n ''\n if frame.f_code.co_flags&GENERATOR_AND_COROUTINE_FLAGS:\n self._set_stopinfo(frame,None ,-1)\n else :\n self._set_stopinfo(frame.f_back,frame)\n \n def set_trace(self,frame=None ):\n ''\n\n\n \n if frame is None :\n frame=sys._getframe().f_back\n self.reset()\n while frame:\n frame.f_trace=self.trace_dispatch\n self.botframe=frame\n frame=frame.f_back\n self.set_step()\n sys.settrace(self.trace_dispatch)\n \n def set_continue(self):\n ''\n\n\n \n \n self._set_stopinfo(self.botframe,None ,-1)\n if not self.breaks:\n \n sys.settrace(None )\n frame=sys._getframe().f_back\n while frame and frame is not self.botframe:\n del frame.f_trace\n frame=frame.f_back\n \n def set_quit(self):\n ''\n\n\n \n self.stopframe=self.botframe\n self.returnframe=None\n self.quitting=True\n sys.settrace(None )\n \n \n \n \n \n \n \n \n def set_break(self,filename,lineno,temporary=False ,cond=None ,\n funcname=None ):\n ''\n\n\n\n \n filename=self.canonic(filename)\n import linecache\n line=linecache.getline(filename,lineno)\n if not line:\n return 'Line %s:%d does not exist'%(filename,lineno)\n list=self.breaks.setdefault(filename,[])\n if lineno not in list:\n list.append(lineno)\n bp=Breakpoint(filename,lineno,temporary,cond,funcname)\n return None\n \n def _prune_breaks(self,filename,lineno):\n ''\n\n\n\n\n\n \n if (filename,lineno)not in Breakpoint.bplist:\n self.breaks[filename].remove(lineno)\n if not self.breaks[filename]:\n del self.breaks[filename]\n \n def clear_break(self,filename,lineno):\n ''\n\n\n \n filename=self.canonic(filename)\n if filename not in self.breaks:\n return 'There are no breakpoints in %s'%filename\n if lineno not in self.breaks[filename]:\n return 'There is no breakpoint at %s:%d'%(filename,lineno)\n \n \n for bp in Breakpoint.bplist[filename,lineno][:]:\n bp.deleteMe()\n self._prune_breaks(filename,lineno)\n return None\n \n def clear_bpbynumber(self,arg):\n ''\n\n\n \n try :\n bp=self.get_bpbynumber(arg)\n except ValueError as err:\n return str(err)\n bp.deleteMe()\n self._prune_breaks(bp.file,bp.line)\n return None\n \n def clear_all_file_breaks(self,filename):\n ''\n\n\n \n filename=self.canonic(filename)\n if filename not in self.breaks:\n return 'There are no breakpoints in %s'%filename\n for line in self.breaks[filename]:\n blist=Breakpoint.bplist[filename,line]\n for bp in blist:\n bp.deleteMe()\n del self.breaks[filename]\n return None\n \n def clear_all_breaks(self):\n ''\n\n\n \n if not self.breaks:\n return 'There are no breakpoints'\n for bp in Breakpoint.bpbynumber:\n if bp:\n bp.deleteMe()\n self.breaks={}\n return None\n \n def get_bpbynumber(self,arg):\n ''\n\n\n\n \n if not arg:\n raise ValueError('Breakpoint number expected')\n try :\n number=int(arg)\n except ValueError:\n raise ValueError('Non-numeric breakpoint number %s'%arg)from None\n try :\n bp=Breakpoint.bpbynumber[number]\n except IndexError:\n raise ValueError('Breakpoint number %d out of range'%number)from None\n if bp is None :\n raise ValueError('Breakpoint %d already deleted'%number)\n return bp\n \n def get_break(self,filename,lineno):\n ''\n filename=self.canonic(filename)\n return filename in self.breaks and\\\n lineno in self.breaks[filename]\n \n def get_breaks(self,filename,lineno):\n ''\n\n\n \n filename=self.canonic(filename)\n return filename in self.breaks and\\\n lineno in self.breaks[filename]and\\\n Breakpoint.bplist[filename,lineno]or []\n \n def get_file_breaks(self,filename):\n ''\n\n\n \n filename=self.canonic(filename)\n if filename in self.breaks:\n return self.breaks[filename]\n else :\n return []\n \n def get_all_breaks(self):\n ''\n return self.breaks\n \n \n \n \n def get_stack(self,f,t):\n ''\n\n\n\n \n stack=[]\n if t and t.tb_frame is f:\n t=t.tb_next\n while f is not None :\n stack.append((f,f.f_lineno))\n if f is self.botframe:\n break\n f=f.f_back\n stack.reverse()\n i=max(0,len(stack)-1)\n while t is not None :\n stack.append((t.tb_frame,t.tb_lineno))\n t=t.tb_next\n if f is None :\n i=max(0,len(stack)-1)\n return stack,i\n \n def format_stack_entry(self,frame_lineno,lprefix=': '):\n ''\n\n\n\n\n\n\n \n import linecache,reprlib\n frame,lineno=frame_lineno\n filename=self.canonic(frame.f_code.co_filename)\n s='%s(%r)'%(filename,lineno)\n if frame.f_code.co_name:\n s +=frame.f_code.co_name\n else :\n s +=\"\"\n if '__args__'in frame.f_locals:\n args=frame.f_locals['__args__']\n else :\n args=None\n if args:\n s +=reprlib.repr(args)\n else :\n s +='()'\n if '__return__'in frame.f_locals:\n rv=frame.f_locals['__return__']\n s +='->'\n s +=reprlib.repr(rv)\n line=linecache.getline(filename,lineno,frame.f_globals)\n if line:\n s +=lprefix+line.strip()\n return s\n \n \n \n \n \n def run(self,cmd,globals=None ,locals=None ):\n ''\n\n\n \n if globals is None :\n import __main__\n globals=__main__.__dict__\n if locals is None :\n locals=globals\n self.reset()\n if isinstance(cmd,str):\n cmd=compile(cmd,\"\",\"exec\")\n sys.settrace(self.trace_dispatch)\n try :\n exec(cmd,globals,locals)\n except BdbQuit:\n pass\n finally :\n self.quitting=True\n sys.settrace(None )\n \n def runeval(self,expr,globals=None ,locals=None ):\n ''\n\n\n \n if globals is None :\n import __main__\n globals=__main__.__dict__\n if locals is None :\n locals=globals\n self.reset()\n sys.settrace(self.trace_dispatch)\n try :\n return eval(expr,globals,locals)\n except BdbQuit:\n pass\n finally :\n self.quitting=True\n sys.settrace(None )\n \n def runctx(self,cmd,globals,locals):\n ''\n \n self.run(cmd,globals,locals)\n \n \n \n def runcall(*args,**kwds):\n ''\n\n\n \n if len(args)>=2:\n self,func,*args=args\n elif not args:\n raise TypeError(\"descriptor 'runcall' of 'Bdb' object \"\n \"needs an argument\")\n elif 'func'in kwds:\n func=kwds.pop('func')\n self,*args=args\n import warnings\n warnings.warn(\"Passing 'func' as keyword argument is deprecated\",\n DeprecationWarning,stacklevel=2)\n else :\n raise TypeError('runcall expected at least 1 positional argument, '\n 'got %d'%(len(args)-1))\n \n self.reset()\n sys.settrace(self.trace_dispatch)\n res=None\n try :\n res=func(*args,**kwds)\n except BdbQuit:\n pass\n finally :\n self.quitting=True\n sys.settrace(None )\n return res\n runcall.__text_signature__='($self, func, /, *args, **kwds)'\n \n \ndef set_trace():\n ''\n Bdb().set_trace()\n \n \nclass Breakpoint:\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n \n \n \n next=1\n bplist={}\n bpbynumber=[None ]\n \n \n \n def __init__(self,file,line,temporary=False ,cond=None ,funcname=None ):\n self.funcname=funcname\n \n self.func_first_executable_line=None\n self.file=file\n self.line=line\n self.temporary=temporary\n self.cond=cond\n self.enabled=True\n self.ignore=0\n self.hits=0\n self.number=Breakpoint.next\n Breakpoint.next +=1\n \n self.bpbynumber.append(self)\n if (file,line)in self.bplist:\n self.bplist[file,line].append(self)\n else :\n self.bplist[file,line]=[self]\n \n def deleteMe(self):\n ''\n\n\n\n \n \n index=(self.file,self.line)\n self.bpbynumber[self.number]=None\n self.bplist[index].remove(self)\n if not self.bplist[index]:\n \n del self.bplist[index]\n \n def enable(self):\n ''\n self.enabled=True\n \n def disable(self):\n ''\n self.enabled=False\n \n def bpprint(self,out=None ):\n ''\n\n\n\n \n if out is None :\n out=sys.stdout\n print(self.bpformat(),file=out)\n \n def bpformat(self):\n ''\n\n\n\n\n\n \n if self.temporary:\n disp='del '\n else :\n disp='keep '\n if self.enabled:\n disp=disp+'yes '\n else :\n disp=disp+'no '\n ret='%-4dbreakpoint %s at %s:%d'%(self.number,disp,\n self.file,self.line)\n if self.cond:\n ret +='\\n\\tstop only if %s'%(self.cond,)\n if self.ignore:\n ret +='\\n\\tignore next %d hits'%(self.ignore,)\n if self.hits:\n if self.hits >1:\n ss='s'\n else :\n ss=''\n ret +='\\n\\tbreakpoint already hit %d time%s'%(self.hits,ss)\n return ret\n \n def __str__(self):\n ''\n return 'breakpoint %s at %s:%s'%(self.number,self.file,self.line)\n \n \n \n \ndef checkfuncname(b,frame):\n ''\n\n\n\n\n\n \n if not b.funcname:\n \n if b.line !=frame.f_lineno:\n \n \n return False\n return True\n \n \n if frame.f_code.co_name !=b.funcname:\n \n return False\n \n \n if not b.func_first_executable_line:\n \n b.func_first_executable_line=frame.f_lineno\n \n if b.func_first_executable_line !=frame.f_lineno:\n \n return False\n return True\n \n \n \n \ndef effective(file,line,frame):\n ''\n\n\n\n\n\n \n possibles=Breakpoint.bplist[file,line]\n for b in possibles:\n if not b.enabled:\n continue\n if not checkfuncname(b,frame):\n continue\n \n b.hits +=1\n if not b.cond:\n \n if b.ignore >0:\n b.ignore -=1\n continue\n else :\n \n return (b,True )\n else :\n \n \n \n try :\n val=eval(b.cond,frame.f_globals,frame.f_locals)\n if val:\n if b.ignore >0:\n b.ignore -=1\n \n else :\n return (b,True )\n \n \n except :\n \n \n \n return (b,False )\n return (None ,None )\n \n \n \n \nclass Tdb(Bdb):\n def user_call(self,frame,args):\n name=frame.f_code.co_name\n if not name:name='???'\n print('+++ call',name,args)\n def user_line(self,frame):\n import linecache\n name=frame.f_code.co_name\n if not name:name='???'\n fn=self.canonic(frame.f_code.co_filename)\n line=linecache.getline(fn,frame.f_lineno,frame.f_globals)\n print('+++',fn,frame.f_lineno,name,':',line.strip())\n def user_return(self,frame,retval):\n print('+++ return',retval)\n def user_exception(self,frame,exc_stuff):\n print('+++ exception',exc_stuff)\n self.set_continue()\n \ndef foo(n):\n print('foo(',n,')')\n x=bar(n *10)\n print('bar returned',x)\n \ndef bar(a):\n print('bar(',a,')')\n return a /2\n \ndef test():\n t=Tdb()\n t.run('import bdb; bdb.foo(10)')\n", ["__main__", "fnmatch", "inspect", "linecache", "os", "reprlib", "sys", "warnings"]], "binascii": [".py", "''\n\n\n\n\n\n\n\nimport _base64\n\nfrom _binascii import *\n\nclass Error(ValueError):\n def __init__(self,msg=''):\n self._msg=msg\n \n def __str__(self):\n return \" binascii.Error: \"+self._msg\n \n \nclass Done(Exception):\n pass\n \nclass Incomplete(Error):\n pass\n \ndef a2b_uu(s):\n if not s:\n return ''\n \n length=(ord(s[0])-0x20)%64\n \n def quadruplets_gen(s):\n while s:\n try :\n yield ord(s[0]),ord(s[1]),ord(s[2]),ord(s[3])\n except IndexError:\n s +=' '\n yield ord(s[0]),ord(s[1]),ord(s[2]),ord(s[3])\n return\n s=s[4:]\n \n try :\n result=[''.join(\n [chr((A -0x20)<<2 |(((B -0x20)>>4)&0x3)),\n chr(((B -0x20)&0xf)<<4 |(((C -0x20)>>2)&0xf)),\n chr(((C -0x20)&0x3)<<6 |((D -0x20)&0x3f))\n ])for A,B,C,D in quadruplets_gen(s[1:].rstrip())]\n except ValueError:\n raise Error('Illegal char')\n result=''.join(result)\n trailingdata=result[length:]\n if trailingdata.strip('\\x00'):\n raise Error('Trailing garbage')\n result=result[:length]\n if len(result)>2)&0x3F],\n table_b2a_base64[((A <<4)|((B >>4)&0xF))&0x3F],\n table_b2a_base64[((B <<2)|((C >>6)&0x3))&0x3F],\n table_b2a_base64[(C)&0x3F]])\n for A,B,C in a]\n \n final=s[length -final_length:]\n if final_length ==0:\n snippet=''\n elif final_length ==1:\n a=final[0]\n snippet=table_b2a_base64[(a >>2)&0x3F]+\\\n table_b2a_base64[(a <<4)&0x3F]+'=='\n else :\n a=final[0]\n b=final[1]\n snippet=table_b2a_base64[(a >>2)&0x3F]+\\\n table_b2a_base64[((a <<4)|(b >>4)&0xF)&0x3F]+\\\n table_b2a_base64[(b <<2)&0x3F]+'='\n \n result=''.join(result)+snippet\n if newline:\n result +='\\n'\n return bytes(result,__BRYTHON__.charset)\n \ndef a2b_qp(s,header=False ):\n inp=0\n odata=[]\n while inp =len(s):\n break\n \n if (s[inp]=='\\n')or (s[inp]=='\\r'):\n if s[inp]!='\\n':\n while inp 0 and data[lf -1]=='\\r'\n \n inp=0\n linelen=0\n odata=[]\n while inp '~'or\n c =='='or\n (header and c =='_')or\n (c =='.'and linelen ==0 and (inp+1 ==len(data)or\n data[inp+1]=='\\n'or\n data[inp+1]=='\\r'))or\n (not istext and (c =='\\r'or c =='\\n'))or\n ((c =='\\t'or c ==' ')and (inp+1 ==len(data)))or\n (c <=' 'and c !='\\r'and c !='\\n'and\n (quotetabs or (not quotetabs and (c !='\\t'and c !=' '))))):\n linelen +=3\n if linelen >=MAXLINESIZE:\n odata.append('=')\n if crlf:odata.append('\\r')\n odata.append('\\n')\n linelen=3\n odata.append('='+two_hex_digits(ord(c)))\n inp +=1\n else :\n if (istext and\n (c =='\\n'or (inp+1 0 and\n (odata[-1]==' 'or odata[-1]=='\\t')):\n ch=ord(odata[-1])\n odata[-1]='='\n odata.append(two_hex_digits(ch))\n \n if crlf:odata.append('\\r')\n odata.append('\\n')\n if c =='\\r':\n inp +=2\n else :\n inp +=1\n else :\n if (inp+1 =MAXLINESIZE):\n odata.append('=')\n if crlf:odata.append('\\r')\n odata.append('\\n')\n linelen=0\n \n linelen +=1\n if header and c ==' ':\n c='_'\n odata.append(c)\n inp +=1\n return ''.join(odata)\n \nhex_numbers='0123456789ABCDEF'\ndef hex(n):\n if n ==0:\n return '0'\n \n if n <0:\n n=-n\n sign='-'\n else :\n sign=''\n arr=[]\n \n def hex_gen(n):\n ''\n while n:\n yield n %0x10\n n=n /0x10\n \n for nibble in hex_gen(n):\n arr=[hex_numbers[nibble]]+arr\n return sign+''.join(arr)\n \ndef two_hex_digits(n):\n return hex_numbers[n /0x10]+hex_numbers[n %0x10]\n \n \ndef strhex_to_int(s):\n i=0\n for c in s:\n i=i *0x10+hex_numbers.index(c)\n return i\n \nhqx_encoding='!\"#$%&\\'()*+,-012345689@ABCDEFGHIJKLMNPQRSTUVXYZ[`abcdefhijklmpqr'\n\nDONE=0x7f\nSKIP=0x7e\nFAIL=0x7d\n\ntable_a2b_hqx=[\n\nFAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,\n\nFAIL,FAIL,SKIP,FAIL,FAIL,SKIP,FAIL,FAIL,\n\nFAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,\n\nFAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,\n\nFAIL,0x00,0x01,0x02,0x03,0x04,0x05,0x06,\n\n0x07,0x08,0x09,0x0A,0x0B,0x0C,FAIL,FAIL,\n\n0x0D,0x0E,0x0F,0x10,0x11,0x12,0x13,FAIL,\n\n0x14,0x15,DONE,FAIL,FAIL,FAIL,FAIL,FAIL,\n\n0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,\n\n0x1E,0x1F,0x20,0x21,0x22,0x23,0x24,FAIL,\n\n0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,FAIL,\n\n0x2C,0x2D,0x2E,0x2F,FAIL,FAIL,FAIL,FAIL,\n\n0x30,0x31,0x32,0x33,0x34,0x35,0x36,FAIL,\n\n0x37,0x38,0x39,0x3A,0x3B,0x3C,FAIL,FAIL,\n\n0x3D,0x3E,0x3F,FAIL,FAIL,FAIL,FAIL,FAIL,\n\nFAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,\nFAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,\nFAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,\nFAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,\nFAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,\nFAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,\nFAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,\nFAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,\nFAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,\nFAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,\nFAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,\nFAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,\nFAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,\nFAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,\nFAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,\nFAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,\nFAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,\n]\n\ndef a2b_hqx(s):\n result=[]\n \n def quadruples_gen(s):\n t=[]\n for c in s:\n res=table_a2b_hqx[ord(c)]\n if res ==SKIP:\n continue\n elif res ==FAIL:\n raise Error('Illegal character')\n elif res ==DONE:\n yield t\n raise Done\n else :\n t.append(res)\n if len(t)==4:\n yield t\n t=[]\n yield t\n \n done=0\n try :\n for snippet in quadruples_gen(s):\n length=len(snippet)\n if length ==4:\n result.append(chr(((snippet[0]&0x3f)<<2)|(snippet[1]>>4)))\n result.append(chr(((snippet[1]&0x0f)<<4)|(snippet[2]>>2)))\n result.append(chr(((snippet[2]&0x03)<<6)|(snippet[3])))\n elif length ==3:\n result.append(chr(((snippet[0]&0x3f)<<2)|(snippet[1]>>4)))\n result.append(chr(((snippet[1]&0x0f)<<4)|(snippet[2]>>2)))\n elif length ==2:\n result.append(chr(((snippet[0]&0x3f)<<2)|(snippet[1]>>4)))\n except Done:\n done=1\n except Error:\n raise\n return (''.join(result),done)\n \n \n \ndef b2a_hqx(s):\n result=[]\n \n def triples_gen(s):\n while s:\n try :\n yield ord(s[0]),ord(s[1]),ord(s[2])\n except IndexError:\n yield tuple([ord(c)for c in s])\n s=s[3:]\n \n for snippet in triples_gen(s):\n length=len(snippet)\n if length ==3:\n result.append(\n hqx_encoding[(snippet[0]&0xfc)>>2])\n result.append(hqx_encoding[\n ((snippet[0]&0x03)<<4)|((snippet[1]&0xf0)>>4)])\n result.append(hqx_encoding[\n (snippet[1]&0x0f)<<2 |((snippet[2]&0xc0)>>6)])\n result.append(hqx_encoding[snippet[2]&0x3f])\n elif length ==2:\n result.append(\n hqx_encoding[(snippet[0]&0xfc)>>2])\n result.append(hqx_encoding[\n ((snippet[0]&0x03)<<4)|((snippet[1]&0xf0)>>4)])\n result.append(hqx_encoding[\n (snippet[1]&0x0f)<<2])\n elif length ==1:\n result.append(\n hqx_encoding[(snippet[0]&0xfc)>>2])\n result.append(hqx_encoding[\n ((snippet[0]&0x03)<<4)])\n return ''.join(result)\n \ncrctab_hqx=[\n0x0000,0x1021,0x2042,0x3063,0x4084,0x50a5,0x60c6,0x70e7,\n0x8108,0x9129,0xa14a,0xb16b,0xc18c,0xd1ad,0xe1ce,0xf1ef,\n0x1231,0x0210,0x3273,0x2252,0x52b5,0x4294,0x72f7,0x62d6,\n0x9339,0x8318,0xb37b,0xa35a,0xd3bd,0xc39c,0xf3ff,0xe3de,\n0x2462,0x3443,0x0420,0x1401,0x64e6,0x74c7,0x44a4,0x5485,\n0xa56a,0xb54b,0x8528,0x9509,0xe5ee,0xf5cf,0xc5ac,0xd58d,\n0x3653,0x2672,0x1611,0x0630,0x76d7,0x66f6,0x5695,0x46b4,\n0xb75b,0xa77a,0x9719,0x8738,0xf7df,0xe7fe,0xd79d,0xc7bc,\n0x48c4,0x58e5,0x6886,0x78a7,0x0840,0x1861,0x2802,0x3823,\n0xc9cc,0xd9ed,0xe98e,0xf9af,0x8948,0x9969,0xa90a,0xb92b,\n0x5af5,0x4ad4,0x7ab7,0x6a96,0x1a71,0x0a50,0x3a33,0x2a12,\n0xdbfd,0xcbdc,0xfbbf,0xeb9e,0x9b79,0x8b58,0xbb3b,0xab1a,\n0x6ca6,0x7c87,0x4ce4,0x5cc5,0x2c22,0x3c03,0x0c60,0x1c41,\n0xedae,0xfd8f,0xcdec,0xddcd,0xad2a,0xbd0b,0x8d68,0x9d49,\n0x7e97,0x6eb6,0x5ed5,0x4ef4,0x3e13,0x2e32,0x1e51,0x0e70,\n0xff9f,0xefbe,0xdfdd,0xcffc,0xbf1b,0xaf3a,0x9f59,0x8f78,\n0x9188,0x81a9,0xb1ca,0xa1eb,0xd10c,0xc12d,0xf14e,0xe16f,\n0x1080,0x00a1,0x30c2,0x20e3,0x5004,0x4025,0x7046,0x6067,\n0x83b9,0x9398,0xa3fb,0xb3da,0xc33d,0xd31c,0xe37f,0xf35e,\n0x02b1,0x1290,0x22f3,0x32d2,0x4235,0x5214,0x6277,0x7256,\n0xb5ea,0xa5cb,0x95a8,0x8589,0xf56e,0xe54f,0xd52c,0xc50d,\n0x34e2,0x24c3,0x14a0,0x0481,0x7466,0x6447,0x5424,0x4405,\n0xa7db,0xb7fa,0x8799,0x97b8,0xe75f,0xf77e,0xc71d,0xd73c,\n0x26d3,0x36f2,0x0691,0x16b0,0x6657,0x7676,0x4615,0x5634,\n0xd94c,0xc96d,0xf90e,0xe92f,0x99c8,0x89e9,0xb98a,0xa9ab,\n0x5844,0x4865,0x7806,0x6827,0x18c0,0x08e1,0x3882,0x28a3,\n0xcb7d,0xdb5c,0xeb3f,0xfb1e,0x8bf9,0x9bd8,0xabbb,0xbb9a,\n0x4a75,0x5a54,0x6a37,0x7a16,0x0af1,0x1ad0,0x2ab3,0x3a92,\n0xfd2e,0xed0f,0xdd6c,0xcd4d,0xbdaa,0xad8b,0x9de8,0x8dc9,\n0x7c26,0x6c07,0x5c64,0x4c45,0x3ca2,0x2c83,0x1ce0,0x0cc1,\n0xef1f,0xff3e,0xcf5d,0xdf7c,0xaf9b,0xbfba,0x8fd9,0x9ff8,\n0x6e17,0x7e36,0x4e55,0x5e74,0x2e93,0x3eb2,0x0ed1,0x1ef0,\n]\n\ndef crc_hqx(s,crc):\n for c in s:\n crc=((crc <<8)&0xff00)^crctab_hqx[((crc >>8)&0xff)^ord(c)]\n \n return crc\n \ndef rlecode_hqx(s):\n ''\n\n\n\n \n if not s:\n return ''\n result=[]\n prev=s[0]\n count=1\n \n \n \n \n if s[-1]=='!':\n s=s[1:]+'?'\n else :\n s=s[1:]+'!'\n \n for c in s:\n if c ==prev and count <255:\n count +=1\n else :\n if count ==1:\n if prev !='\\x90':\n result.append(prev)\n else :\n result.extend(['\\x90','\\x00'])\n elif count <4:\n if prev !='\\x90':\n result.extend([prev]*count)\n else :\n result.extend(['\\x90','\\x00']*count)\n else :\n if prev !='\\x90':\n result.extend([prev,'\\x90',chr(count)])\n else :\n result.extend(['\\x90','\\x00','\\x90',chr(count)])\n count=1\n prev=c\n \n return ''.join(result)\n \ndef rledecode_hqx(s):\n s=s.split('\\x90')\n result=[s[0]]\n prev=s[0]\n for snippet in s[1:]:\n count=ord(snippet[0])\n if count >0:\n result.append(prev[-1]*(count -1))\n prev=snippet\n else :\n result.append('\\x90')\n prev='\\x90'\n result.append(snippet[1:])\n \n return ''.join(result)\n \ncrc_32_tab=[\n0x00000000,0x77073096,0xee0e612c,0x990951ba,0x076dc419,\n0x706af48f,0xe963a535,0x9e6495a3,0x0edb8832,0x79dcb8a4,\n0xe0d5e91e,0x97d2d988,0x09b64c2b,0x7eb17cbd,0xe7b82d07,\n0x90bf1d91,0x1db71064,0x6ab020f2,0xf3b97148,0x84be41de,\n0x1adad47d,0x6ddde4eb,0xf4d4b551,0x83d385c7,0x136c9856,\n0x646ba8c0,0xfd62f97a,0x8a65c9ec,0x14015c4f,0x63066cd9,\n0xfa0f3d63,0x8d080df5,0x3b6e20c8,0x4c69105e,0xd56041e4,\n0xa2677172,0x3c03e4d1,0x4b04d447,0xd20d85fd,0xa50ab56b,\n0x35b5a8fa,0x42b2986c,0xdbbbc9d6,0xacbcf940,0x32d86ce3,\n0x45df5c75,0xdcd60dcf,0xabd13d59,0x26d930ac,0x51de003a,\n0xc8d75180,0xbfd06116,0x21b4f4b5,0x56b3c423,0xcfba9599,\n0xb8bda50f,0x2802b89e,0x5f058808,0xc60cd9b2,0xb10be924,\n0x2f6f7c87,0x58684c11,0xc1611dab,0xb6662d3d,0x76dc4190,\n0x01db7106,0x98d220bc,0xefd5102a,0x71b18589,0x06b6b51f,\n0x9fbfe4a5,0xe8b8d433,0x7807c9a2,0x0f00f934,0x9609a88e,\n0xe10e9818,0x7f6a0dbb,0x086d3d2d,0x91646c97,0xe6635c01,\n0x6b6b51f4,0x1c6c6162,0x856530d8,0xf262004e,0x6c0695ed,\n0x1b01a57b,0x8208f4c1,0xf50fc457,0x65b0d9c6,0x12b7e950,\n0x8bbeb8ea,0xfcb9887c,0x62dd1ddf,0x15da2d49,0x8cd37cf3,\n0xfbd44c65,0x4db26158,0x3ab551ce,0xa3bc0074,0xd4bb30e2,\n0x4adfa541,0x3dd895d7,0xa4d1c46d,0xd3d6f4fb,0x4369e96a,\n0x346ed9fc,0xad678846,0xda60b8d0,0x44042d73,0x33031de5,\n0xaa0a4c5f,0xdd0d7cc9,0x5005713c,0x270241aa,0xbe0b1010,\n0xc90c2086,0x5768b525,0x206f85b3,0xb966d409,0xce61e49f,\n0x5edef90e,0x29d9c998,0xb0d09822,0xc7d7a8b4,0x59b33d17,\n0x2eb40d81,0xb7bd5c3b,0xc0ba6cad,0xedb88320,0x9abfb3b6,\n0x03b6e20c,0x74b1d29a,0xead54739,0x9dd277af,0x04db2615,\n0x73dc1683,0xe3630b12,0x94643b84,0x0d6d6a3e,0x7a6a5aa8,\n0xe40ecf0b,0x9309ff9d,0x0a00ae27,0x7d079eb1,0xf00f9344,\n0x8708a3d2,0x1e01f268,0x6906c2fe,0xf762575d,0x806567cb,\n0x196c3671,0x6e6b06e7,0xfed41b76,0x89d32be0,0x10da7a5a,\n0x67dd4acc,0xf9b9df6f,0x8ebeeff9,0x17b7be43,0x60b08ed5,\n0xd6d6a3e8,0xa1d1937e,0x38d8c2c4,0x4fdff252,0xd1bb67f1,\n0xa6bc5767,0x3fb506dd,0x48b2364b,0xd80d2bda,0xaf0a1b4c,\n0x36034af6,0x41047a60,0xdf60efc3,0xa867df55,0x316e8eef,\n0x4669be79,0xcb61b38c,0xbc66831a,0x256fd2a0,0x5268e236,\n0xcc0c7795,0xbb0b4703,0x220216b9,0x5505262f,0xc5ba3bbe,\n0xb2bd0b28,0x2bb45a92,0x5cb36a04,0xc2d7ffa7,0xb5d0cf31,\n0x2cd99e8b,0x5bdeae1d,0x9b64c2b0,0xec63f226,0x756aa39c,\n0x026d930a,0x9c0906a9,0xeb0e363f,0x72076785,0x05005713,\n0x95bf4a82,0xe2b87a14,0x7bb12bae,0x0cb61b38,0x92d28e9b,\n0xe5d5be0d,0x7cdcefb7,0x0bdbdf21,0x86d3d2d4,0xf1d4e242,\n0x68ddb3f8,0x1fda836e,0x81be16cd,0xf6b9265b,0x6fb077e1,\n0x18b74777,0x88085ae6,0xff0f6a70,0x66063bca,0x11010b5c,\n0x8f659eff,0xf862ae69,0x616bffd3,0x166ccf45,0xa00ae278,\n0xd70dd2ee,0x4e048354,0x3903b3c2,0xa7672661,0xd06016f7,\n0x4969474d,0x3e6e77db,0xaed16a4a,0xd9d65adc,0x40df0b66,\n0x37d83bf0,0xa9bcae53,0xdebb9ec5,0x47b2cf7f,0x30b5ffe9,\n0xbdbdf21c,0xcabac28a,0x53b39330,0x24b4a3a6,0xbad03605,\n0xcdd70693,0x54de5729,0x23d967bf,0xb3667a2e,0xc4614ab8,\n0x5d681b02,0x2a6f2b94,0xb40bbe37,0xc30c8ea1,0x5a05df1b,\n0x2d02ef8d\n]\n\ndef crc32(s,crc=0):\n result=0\n crc=~int(crc)&0xffffffff\n \n for c in s:\n crc=crc_32_tab[(crc ^int(ord(c)))&0xff]^(crc >>8)\n \n \n \n result=crc ^0xffffffff\n \n if result >2 **31:\n result=((result+2 **31)%2 **32)-2 **31\n \n return result\n", ["_base64", "_binascii"]], "bisect": [".py", "''\n\ndef insort_right(a,x,lo=0,hi=None ):\n ''\n\n\n\n\n\n \n \n lo=bisect_right(a,x,lo,hi)\n a.insert(lo,x)\n \ndef bisect_right(a,x,lo=0,hi=None ):\n ''\n\n\n\n\n\n\n\n \n \n if lo <0:\n raise ValueError('lo must be non-negative')\n if hi is None :\n hi=len(a)\n while lo =9:\n names=day_name\n else :\n names=day_abbr\n return names[day][:width].center(width)\n \n def formatweekheader(self,width):\n ''\n\n \n return ' '.join(self.formatweekday(i,width)for i in self.iterweekdays())\n \n def formatmonthname(self,theyear,themonth,width,withyear=True ):\n ''\n\n \n s=month_name[themonth]\n if withyear:\n s=\"%s %r\"%(s,theyear)\n return s.center(width)\n \n def prmonth(self,theyear,themonth,w=0,l=0):\n ''\n\n \n print(self.formatmonth(theyear,themonth,w,l),end='')\n \n def formatmonth(self,theyear,themonth,w=0,l=0):\n ''\n\n \n w=max(2,w)\n l=max(1,l)\n s=self.formatmonthname(theyear,themonth,7 *(w+1)-1)\n s=s.rstrip()\n s +='\\n'*l\n s +=self.formatweekheader(w).rstrip()\n s +='\\n'*l\n for week in self.monthdays2calendar(theyear,themonth):\n s +=self.formatweek(week,w).rstrip()\n s +='\\n'*l\n return s\n \n def formatyear(self,theyear,w=2,l=1,c=6,m=3):\n ''\n\n \n w=max(2,w)\n l=max(1,l)\n c=max(2,c)\n colwidth=(w+1)*7 -1\n v=[]\n a=v.append\n a(repr(theyear).center(colwidth *m+c *(m -1)).rstrip())\n a('\\n'*l)\n header=self.formatweekheader(w)\n for (i,row)in enumerate(self.yeardays2calendar(theyear,m)):\n \n months=range(m *i+1,min(m *(i+1)+1,13))\n a('\\n'*l)\n names=(self.formatmonthname(theyear,k,colwidth,False )\n for k in months)\n a(formatstring(names,colwidth,c).rstrip())\n a('\\n'*l)\n headers=(header for k in months)\n a(formatstring(headers,colwidth,c).rstrip())\n a('\\n'*l)\n \n height=max(len(cal)for cal in row)\n for j in range(height):\n weeks=[]\n for cal in row:\n if j >=len(cal):\n weeks.append('')\n else :\n weeks.append(self.formatweek(cal[j],w))\n a(formatstring(weeks,colwidth,c).rstrip())\n a('\\n'*l)\n return ''.join(v)\n \n def pryear(self,theyear,w=0,l=0,c=6,m=3):\n ''\n print(self.formatyear(theyear,w,l,c,m),end='')\n \n \nclass HTMLCalendar(Calendar):\n ''\n\n \n \n \n cssclasses=[\"mon\",\"tue\",\"wed\",\"thu\",\"fri\",\"sat\",\"sun\"]\n \n \n cssclasses_weekday_head=cssclasses\n \n \n cssclass_noday=\"noday\"\n \n \n cssclass_month_head=\"month\"\n \n \n cssclass_month=\"month\"\n \n \n cssclass_year_head=\"year\"\n \n \n cssclass_year=\"year\"\n \n def formatday(self,day,weekday):\n ''\n\n \n if day ==0:\n \n return ' '%self.cssclass_noday\n else :\n return '%d'%(self.cssclasses[weekday],day)\n \n def formatweek(self,theweek):\n ''\n\n \n s=''.join(self.formatday(d,wd)for (d,wd)in theweek)\n return '%s'%s\n \n def formatweekday(self,day):\n ''\n\n \n return '%s'%(\n self.cssclasses_weekday_head[day],day_abbr[day])\n \n def formatweekheader(self):\n ''\n\n \n s=''.join(self.formatweekday(i)for i in self.iterweekdays())\n return '%s'%s\n \n def formatmonthname(self,theyear,themonth,withyear=True ):\n ''\n\n \n if withyear:\n s='%s %s'%(month_name[themonth],theyear)\n else :\n s='%s'%month_name[themonth]\n return '%s'%(\n self.cssclass_month_head,s)\n \n def formatmonth(self,theyear,themonth,withyear=True ):\n ''\n\n \n v=[]\n a=v.append\n a(''%(\n self.cssclass_month))\n a('\\n')\n a(self.formatmonthname(theyear,themonth,withyear=withyear))\n a('\\n')\n a(self.formatweekheader())\n a('\\n')\n for week in self.monthdays2calendar(theyear,themonth):\n a(self.formatweek(week))\n a('\\n')\n a('')\n a('\\n')\n return ''.join(v)\n \n def formatyear(self,theyear,width=3):\n ''\n\n \n v=[]\n a=v.append\n width=max(width,1)\n a(''%\n self.cssclass_year)\n a('\\n')\n a('%s'%(\n width,self.cssclass_year_head,theyear))\n for i in range(January,January+12,width):\n \n months=range(i,min(i+width,13))\n a('')\n for m in months:\n a('')\n a(self.formatmonth(theyear,m,withyear=False ))\n a('')\n a('')\n a('')\n return ''.join(v)\n \n def formatyearpage(self,theyear,width=3,css='calendar.css',encoding=None ):\n ''\n\n \n if encoding is None :\n encoding=sys.getdefaultencoding()\n v=[]\n a=v.append\n a('\\n'%encoding)\n a('\\n')\n a('\\n')\n a('\\n')\n a('\\n'%encoding)\n if css is not None :\n a('\\n'%css)\n a('Calendar for %d\\n'%theyear)\n a('\\n')\n a('\\n')\n a(self.formatyear(theyear,width))\n a('\\n')\n a('\\n')\n return ''.join(v).encode(encoding,\"xmlcharrefreplace\")\n \n \nclass different_locale:\n def __init__(self,locale):\n self.locale=locale\n \n def __enter__(self):\n self.oldlocale=_locale.getlocale(_locale.LC_TIME)\n _locale.setlocale(_locale.LC_TIME,self.locale)\n \n def __exit__(self,*args):\n _locale.setlocale(_locale.LC_TIME,self.oldlocale)\n \n \nclass LocaleTextCalendar(TextCalendar):\n ''\n\n\n\n\n \n \n def __init__(self,firstweekday=0,locale=None ):\n TextCalendar.__init__(self,firstweekday)\n if locale is None :\n locale=_locale.getdefaultlocale()\n self.locale=locale\n \n def formatweekday(self,day,width):\n with different_locale(self.locale):\n if width >=9:\n names=day_name\n else :\n names=day_abbr\n name=names[day]\n return name[:width].center(width)\n \n def formatmonthname(self,theyear,themonth,width,withyear=True ):\n with different_locale(self.locale):\n s=month_name[themonth]\n if withyear:\n s=\"%s %r\"%(s,theyear)\n return s.center(width)\n \n \nclass LocaleHTMLCalendar(HTMLCalendar):\n ''\n\n\n\n\n \n def __init__(self,firstweekday=0,locale=None ):\n HTMLCalendar.__init__(self,firstweekday)\n if locale is None :\n locale=_locale.getdefaultlocale()\n self.locale=locale\n \n def formatweekday(self,day):\n with different_locale(self.locale):\n s=day_abbr[day]\n return '%s'%(self.cssclasses[day],s)\n \n def formatmonthname(self,theyear,themonth,withyear=True ):\n with different_locale(self.locale):\n s=month_name[themonth]\n if withyear:\n s='%s %s'%(s,theyear)\n return '%s'%s\n \n \n \nc=TextCalendar()\n\nfirstweekday=c.getfirstweekday\n\ndef setfirstweekday(firstweekday):\n if not MONDAY <=firstweekday <=SUNDAY:\n raise IllegalWeekdayError(firstweekday)\n c.firstweekday=firstweekday\n \nmonthcalendar=c.monthdayscalendar\nprweek=c.prweek\nweek=c.formatweek\nweekheader=c.formatweekheader\nprmonth=c.prmonth\nmonth=c.formatmonth\ncalendar=c.formatyear\nprcal=c.pryear\n\n\n\n_colwidth=7 *3 -1\n_spacing=6\n\n\ndef format(cols,colwidth=_colwidth,spacing=_spacing):\n ''\n print(formatstring(cols,colwidth,spacing))\n \n \ndef formatstring(cols,colwidth=_colwidth,spacing=_spacing):\n ''\n spacing *=' '\n return spacing.join(c.center(colwidth)for c in cols)\n \n \nEPOCH=1970\n_EPOCH_ORD=datetime.date(EPOCH,1,1).toordinal()\n\n\ndef timegm(tuple):\n ''\n year,month,day,hour,minute,second=tuple[:6]\n days=datetime.date(year,month,1).toordinal()-_EPOCH_ORD+day -1\n hours=days *24+hour\n minutes=hours *60+minute\n seconds=minutes *60+second\n return seconds\n \n \ndef main(args):\n import argparse\n parser=argparse.ArgumentParser()\n textgroup=parser.add_argument_group('text only arguments')\n htmlgroup=parser.add_argument_group('html only arguments')\n textgroup.add_argument(\n \"-w\",\"--width\",\n type=int,default=2,\n help=\"width of date column (default 2)\"\n )\n textgroup.add_argument(\n \"-l\",\"--lines\",\n type=int,default=1,\n help=\"number of lines for each week (default 1)\"\n )\n textgroup.add_argument(\n \"-s\",\"--spacing\",\n type=int,default=6,\n help=\"spacing between months (default 6)\"\n )\n textgroup.add_argument(\n \"-m\",\"--months\",\n type=int,default=3,\n help=\"months per row (default 3)\"\n )\n htmlgroup.add_argument(\n \"-c\",\"--css\",\n default=\"calendar.css\",\n help=\"CSS to use for page\"\n )\n parser.add_argument(\n \"-L\",\"--locale\",\n default=None ,\n help=\"locale to be used from month and weekday names\"\n )\n parser.add_argument(\n \"-e\",\"--encoding\",\n default=None ,\n help=\"encoding to use for output\"\n )\n parser.add_argument(\n \"-t\",\"--type\",\n default=\"text\",\n choices=(\"text\",\"html\"),\n help=\"output type (text or html)\"\n )\n parser.add_argument(\n \"year\",\n nargs='?',type=int,\n help=\"year number (1-9999)\"\n )\n parser.add_argument(\n \"month\",\n nargs='?',type=int,\n help=\"month number (1-12, text only)\"\n )\n \n options=parser.parse_args(args[1:])\n \n if options.locale and not options.encoding:\n parser.error(\"if --locale is specified --encoding is required\")\n sys.exit(1)\n \n locale=options.locale,options.encoding\n \n if options.type ==\"html\":\n if options.locale:\n cal=LocaleHTMLCalendar(locale=locale)\n else :\n cal=HTMLCalendar()\n encoding=options.encoding\n if encoding is None :\n encoding=sys.getdefaultencoding()\n optdict=dict(encoding=encoding,css=options.css)\n write=sys.stdout.buffer.write\n if options.year is None :\n write(cal.formatyearpage(datetime.date.today().year,**optdict))\n elif options.month is None :\n write(cal.formatyearpage(options.year,**optdict))\n else :\n parser.error(\"incorrect number of arguments\")\n sys.exit(1)\n else :\n if options.locale:\n cal=LocaleTextCalendar(locale=locale)\n else :\n cal=TextCalendar()\n optdict=dict(w=options.width,l=options.lines)\n if options.month is None :\n optdict[\"c\"]=options.spacing\n optdict[\"m\"]=options.months\n if options.year is None :\n result=cal.formatyear(datetime.date.today().year,**optdict)\n elif options.month is None :\n result=cal.formatyear(options.year,**optdict)\n else :\n result=cal.formatmonth(options.year,options.month,**optdict)\n write=sys.stdout.write\n if options.encoding:\n result=result.encode(options.encoding)\n write=sys.stdout.buffer.write\n write(result)\n \n \nif __name__ ==\"__main__\":\n main(sys.argv)\n", ["argparse", "datetime", "itertools", "locale", "sys"]], "cmath": [".py", "\n\n\n\n\n\n\n\n\n\nimport math\nimport sys\n\ndef takes_complex(func):\n def decorated(x):\n if isinstance(x,complex):\n return func(x)\n elif type(x)in [int,float]:\n return func(complex(x))\n elif hasattr(x,'__complex__'):\n c=x.__complex__()\n if not isinstance(c,complex):\n raise TypeError(\"A complex number is required\")\n else :\n return func(c)\n elif hasattr(x,'__float__'):\n try :\n c=complex(x.__float__(),0)\n except :\n raise TypeError(\"A complex number is required\")\n return func(c)\n else :\n raise TypeError(\"A complex number is required\")\n if hasattr(func,'__doc__'):\n decorated.__doc__=func.__doc__\n if hasattr(func,'__name__'):\n decorated.__name__=func.__name__\n return decorated\n \n@takes_complex\ndef isfinite(x):\n return math.isfinite(x.imag)and math.isfinite(x.real)\n \n@takes_complex\ndef phase(x):\n ''\n return math.atan2(x.imag,x.real)\n \n@takes_complex\ndef polar(x):\n ''\n\n\n\n\n \n phi=math.atan2(x.imag,x.real)\n r=math.sqrt(x.real **2+x.imag **2)\n return r,phi\n \ndef rect(r,phi):\n ''\n\n \n if math.isinf(r)or math.isinf(phi):\n \n \n if math.isinf(phi)and r !=.0 and not math.isnan(r):\n raise ValueError(\"math domain error\")\n \n \n \n \n if -_INF 0:\n _real=math.copysign(_INF,math.cos(phi))\n _imag=math.copysign(_INF,math.sin(phi))\n else :\n _real=-math.copysign(_INF,cos(phi));\n _imag=-math.copysign(_INF,sin(phi));\n return complex(_real,_imag)\n return _SPECIAL_VALUE(complex(r,phi),_rect_special_values)\n \n else :\n if phi ==.0:\n \n \n \n return complex(r,phi *r)\n else :\n return complex(r *math.cos(phi),r *math.sin(phi))\n \n@takes_complex\ndef sqrt(x):\n ''\n\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n s,d,ax,ay=.0,.0,math.fabs(x.real),math.fabs(x.imag)\n \n ret=_SPECIAL_VALUE(x,_sqrt_special_values)\n if ret is not None :\n return ret\n \n if x.real ==.0 and x.imag ==.0:\n _real=.0\n _imag=x.imag\n return complex(_real,_imag)\n \n if ax 0. or ay >0.):\n \n ax=math.ldexp(ax,_CM_SCALE_UP);\n s=math.ldexp(math.sqrt(ax+math.hypot(ax,math.ldexp(ay,_CM_SCALE_UP))),_CM_SCALE_DOWN)\n else :\n ax /=8.0 ;\n s=2.0 *math.sqrt(ax+math.hypot(ax,ay /8.0));\n \n d=ay /(2.0 *s)\n \n if x.real >=.0:\n _real=s ;\n _imag=math.copysign(d,x.imag)\n else :\n _real=d ;\n _imag=math.copysign(s,x.imag)\n \n return complex(_real,_imag)\n \n@takes_complex\ndef acos(x):\n ''\n\n\n\n\n \n \n ret=_SPECIAL_VALUE(x,_acos_special_values)\n if ret is not None :\n return ret\n \n if math.fabs(x.real)>_CM_LARGE_DOUBLE or math.fabs(x.imag)>_CM_LARGE_DOUBLE:\n \n \n _real=math.atan2(math.fabs(x.imag),x.real)\n \n \n \n if x.real <0:\n _imag=-math.copysign(math.log(math.hypot(x.real /2.,x.imag /2.))+_M_LN2 *2.,x.imag);\n else :\n _imag=math.copysign(math.log(math.hypot(x.real /2.,x.imag /2.))+_M_LN2 *2.,-x.imag);\n else :\n s1=complex(float(1 -x.real),-x.imag)\n s1=sqrt(s1)\n s2=complex(1.0+x.real,x.imag)\n s2=sqrt(s2)\n _real=2.0 *math.atan2(s1.real,s2.real);\n _imag=math.asinh(s2.real *s1.imag -s2.imag *s1.real)\n \n return complex(_real,_imag)\n \n@takes_complex\ndef acosh(x):\n ''\n\n\n\n \n ret=_SPECIAL_VALUE(x,_acosh_special_values)\n if ret is not None :\n return ret\n \n if math.fabs(x.real)>_CM_LARGE_DOUBLE or math.fabs(x.imag)>_CM_LARGE_DOUBLE:\n \n _real=math.log(math.hypot(x.real /2.0,x.imag /2.0))+_M_LN2 *2.0\n _imag=math.atan2(x.imag,x.real);\n else :\n s1=sqrt(complex(x.real -1.0,x.imag))\n s2=sqrt(complex(x.real+1.0,x.imag))\n _real=math.asinh(s1.real *s2.real+s1.imag *s2.imag)\n _imag=2. *math.atan2(s1.imag,s2.real)\n \n return complex(_real,_imag)\n \n@takes_complex\ndef asin(x):\n ''\n\n\n\n \n \n s=complex(-x.imag,x.real)\n s=asinh(s)\n return complex(s.imag,-s.real)\n \n@takes_complex\ndef asinh(x):\n ''\n\n\n\n\n \n ret=_SPECIAL_VALUE(x,_asinh_special_values)\n if ret is not None :\n return ret\n \n if math.fabs(x.real)>_CM_LARGE_DOUBLE or math.fabs(x.imag)>_CM_LARGE_DOUBLE:\n if x.imag >=.0:\n _real=math.copysign(math.log(math.hypot(x.real /2.,x.imag /2.))+_M_LN2 *2.,x.real)\n else :\n _real=-math.copysign(math.log(math.hypot(x.real /2.,x.imag /2.))+_M_LN2 *2.,-x.real)\n _imag=math.atan2(x.imag,math.fabs(x.real))\n else :\n s1=sqrt(complex(1.0+x.imag,-x.real))\n s2=sqrt(complex(1.0 -x.imag,x.real))\n _real=math.asinh(s1.real *s2.imag -s2.real *s1.imag)\n _imag=math.atan2(x.imag,s1.real *s2.real -s1.imag *s2.imag)\n return complex(_real,_imag)\n \n@takes_complex\ndef atan(x):\n ''\n\n\n\n\n \n s=atanh(complex(-x.imag,x.real))\n return complex(s.imag,-s.real)\n \n@takes_complex\ndef atanh(x):\n ''\n\n\n\n\n \n \n ret=_SPECIAL_VALUE(x,_atanh_special_values)\n if ret is not None :\n return ret\n \n \n if x.real <.0:\n return -(atanh(-x))\n \n ay=math.fabs(x.imag)\n \n if x.real >_CM_SQRT_LARGE_DOUBLE or ay >_CM_SQRT_LARGE_DOUBLE:\n \n \n \n \n \n h=math.hypot(x.real /2.,x.imag /2.)\n _real=x.real /4. /h /h\n \n \n \n \n \n \n _imag=-math.copysign(math.pi /2.,-x.imag)\n \n elif x.real ==1.0 and ay <_CM_SQRT_DBL_MIN:\n \n \n if (ay ==.0):\n raise ValueError(\"math domain error\")\n else :\n _real=-math.log(math.sqrt(ay)/math.sqrt(math.hypot(ay,2.)))\n _imag=math.copysign(math.atan2(2.0,-ay)/2,x.imag)\n \n else :\n \n _real=math.log1p(4. *x.real /((1 -x.real)*(1 -x.real)+ay *ay))/4.\n _imag=-math.atan2(-2. *x.imag,(1 -x.real)*(1+x.real)-ay *ay)/2.\n errno=0\n \n return complex(_real,_imag)\n \n@takes_complex\ndef cos(x):\n ''\n return cosh(complex(-x.imag,x.real))\n \n@takes_complex\ndef cosh(x):\n ''\n \n \n if isinf(x):\n if -_INF 0:\n _real=math.copysign(_INF,math.cos(x.imag))\n _imag=math.copysign(_INF,math.sin(x.imag))\n else :\n _real=math.copysign(_INF,math.cos(x.imag))\n _imag=-math.copysign(_INF,math.sin(x.imag))\n return complex(_real,_imag)\n else :\n \n if x.imag !=.0 and not math.isnan(x.real):\n raise ValueError(\"math domain error\")\n return _SPECIAL_VALUE(x,_cosh_special_values)\n \n if math.fabs(x.real)>_CM_LOG_LARGE_DOUBLE:\n \n \n x_minus_one=x.real -math.copysign(1.0,x.real)\n _real=cos(x.imag)*math.cosh(x_minus_one)*math.e\n _imag=sin(x.imag)*math.sinh(x_minus_one)*math.e\n else :\n _real=math.cos(x.imag)*math.cosh(x.real)\n _imag=math.sin(x.imag)*math.sinh(x.real)\n \n ret=complex(_real,_imag)\n \n if isinf(ret):\n raise OverflowError()\n return ret\n \n@takes_complex\ndef exp(x):\n ''\n if math.isinf(x.real)or math.isinf(x.imag):\n \n if math.isinf(x.imag)and (-_INF 0):\n raise ValueError(\"math domain error\")\n \n if math.isinf(x.real)and -_INF 0:\n _real=math.copysign(_INF,cos(x.imag))\n _imag=math.copysign(_INF,sin(x.imag))\n else :\n _real=math.copysign(.0,cos(x.imag))\n _imag=math.copysign(.0,sin(x.imag))\n return complex(_real,_imag)\n \n return _SPECIAL_VALUE(x,_exp_special_values)\n \n \n if x.real >_CM_LOG_LARGE_DOUBLE:\n l=math.exp(x.real -1.);\n _real=l *math.cos(x.imag)*math.e\n _imag=l *math.sin(x.imag)*math.e\n else :\n l=math.exp(x.real);\n _real=l *math.cos(x.imag)\n _imag=l *math.sin(x.imag)\n \n if math.isinf(_real)or math.isinf(_imag):\n raise OverflowError()\n \n return complex(_real,_imag)\n \ndef isclose(x,y,*,rel_tol=1e-09,abs_tol=0.0):\n rel_tol=float(rel_tol)\n abs_tol=float(abs_tol)\n return abs(x -y)<=max(rel_tol *max(abs(x),abs(y)),abs_tol)\n \n@takes_complex\ndef isinf(x):\n ''\n return math.isinf(x.real)or math.isinf(x.imag)\n \n@takes_complex\ndef isnan(x):\n ''\n return math.isnan(x.real)or math.isnan(x.imag)\n \n \n@takes_complex\ndef _to_complex(x):\n return x\n \ndef log(x,base=None ):\n ''\n\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n x=_to_complex(x)\n \n \n \n \n \n \n if base is not None :\n x=log(x)\n base=log(base)\n x=x /base\n \n ret=_SPECIAL_VALUE(x,_log_special_values)\n if ret is not None :\n return ret\n \n ax=math.fabs(x.real)\n ay=math.fabs(x.imag)\n \n if ax >_CM_LARGE_DOUBLE or ay >_CM_LARGE_DOUBLE:\n _real=math.log(math.hypot(ax /2.0,ay /2.0))+_M_LN2\n elif ax .0 or ay >.0:\n \n _real=math.log(math.hypot(math.ldexp(ax,sys.float_info.mant_dig),math.ldexp(ay,sys.float_info.mant_dig)))-sys.float_info.mant_dig *_M_LN2\n else :\n \n raise ValueError(\"math domain error\")\n _real=-_INF\n _imag=math.atan2(x.imag,x.real)\n else :\n h=math.hypot(ax,ay)\n if 0.71 <=h and h <=1.73:\n am=max(ax,ay)\n an=min(ax,ay)\n _real=math.log1p((am -1)*(am+1)+an *an)/2.\n else :\n _real=math.log(h)\n _imag=math.atan2(x.imag,x.real)\n return complex(_real,_imag)\n \n@takes_complex\ndef log10(x):\n ''\n\n\n\n \n ret=log(x);\n _real=ret.real /_M_LN10\n _imag=ret.imag /_M_LN10\n return complex(_real,_imag)\n \n@takes_complex\ndef sin(x):\n ''\n \n s=complex(-x.imag,x.real)\n s=sinh(s)\n return complex(s.imag,-s.real)\n \n@takes_complex\ndef sinh(x):\n ''\n \n if math.isinf(x.real)or math.isinf(x.imag):\n \n \n if math.isinf(x.imag)and not math.isnan(x.real):\n raise ValueError(\"math domain error\")\n \n if math.isinf(x.real)and -_INF 0:\n _real=math.copysign(_INF,cos(x.imag))\n _imag=math.copysign(_INF,sin(x.imag))\n else :\n _real=-math.copysign(_INF,cos(x.imag))\n _imag=math.copysign(_INF,sin(x.imag))\n return complex(_real,_imag)\n \n return _SPECIAL_VALUE(x,_sinh_special_values)\n \n if math.fabs(x.real)>_CM_LOG_LARGE_DOUBLE:\n x_minus_one=x.real -math.copysign(1.0,x.real)\n _real=math.cos(x.imag)*math.sinh(x.imag)*math.e\n _imag=math.sin(x.imag)*math.cosh(x.imag)*math.e\n else :\n _real=math.cos(x.imag)*math.sinh(x.real)\n _imag=math.sin(x.imag)*math.cosh(x.real)\n \n if math.isinf(_real)or math.isinf(_imag):\n raise OverflowError()\n \n return complex(_real,_imag)\n \n@takes_complex\ndef tan(x):\n ''\n s=atanh(complex(-x.imag,x.real))\n return complex(s.imag,-s.real)\n \n@takes_complex\ndef tanh(x):\n ''\n ''\n\n\n \n \n \n \n \n \n \n \n \n \n \n if isinf(x):\n if math.isinf(x.imag)and -_INF 0:\n _real=1.0\n _imag=math.copysign(.0,2.0 *math.sin(x.imag)*math.cos(x.imag))\n else :\n _real=-1.0\n _imag=math.copysign(.0,2. *math.sin(x.imag)*math.cos(x.imag))\n return complex(_real,_imag)\n return _SPECIAL_VALUE(x,_tanh_special_values)\n \n \n if math.fabs(x.real)>_CM_LOG_LARGE_DOUBLE:\n _real=math.copysign(1.,x.real)\n _imag=4. *math.sin(x.imag)*math.cos(x.imag)*math.exp(-2. *math.fabs(x.real))\n else :\n tx=math.tanh(x.real)\n ty=math.tan(x.imag)\n cx=1.0 /math.cosh(x.real)\n txty=tx *ty\n denom=1.+txty *txty\n _real=tx *(1.+ty *ty)/denom\n _imag=((ty /denom)*cx)*cx\n return complex(_real,_imag)\n \n \npi=math.pi\ne=math.e\n\n_CM_LARGE_DOUBLE=sys.float_info.max /4\n_CM_SQRT_LARGE_DOUBLE=math.sqrt(_CM_LARGE_DOUBLE)\n_CM_LOG_LARGE_DOUBLE=math.log(_CM_LARGE_DOUBLE)\n_CM_SQRT_DBL_MIN=math.sqrt(sys.float_info.min)\n_M_LN2=0.6931471805599453094\n_M_LN10=2.302585092994045684\n\nif sys.float_info.radix ==2:\n _CM_SCALE_UP=int((2 *(sys.float_info.mant_dig /2)+1))\nelif sys.float_info.radix ==16:\n _CM_SCALE_UP=int((4 *sys.float_info.mant_dig+1))\nelse :\n raise (\"cmath implementation expects the float base to be either 2 or 16, got \"+str(sys.float_info.radix)+\" instead.\")\n_CM_SCALE_DOWN=int((-(_CM_SCALE_UP+1)/2))\n\n_INF=float('inf')\n_NAN=float('nan')\n_PI=math.pi\n_P14=0.25 *math.pi\n_P12=0.5 *math.pi\n_P34=0.75 *math.pi\n_U=-9.5426319407711027e33\n\n\n_ST_NINF=0\n_ST_NEG=1\n_ST_NZERO=2\n_ST_PZERO=3\n_ST_POS=4\n_ST_PINF=5\n_ST_NAN=6\n\n\ndef _SPECIAL_VALUE(z,table):\n if not math.isfinite(z.real)or not math.isfinite(z.imag):\n return table[_special_type(z.real)][_special_type(z.imag)]\n else :\n return None\n \ndef _special_type(x):\n if -_INF ):\"\n misc_header=\"Miscellaneous help topics:\"\n undoc_header=\"Undocumented commands:\"\n nohelp=\"*** No help on %s\"\n use_rawinput=1\n \n def __init__(self,completekey='tab',stdin=None ,stdout=None ):\n ''\n\n\n\n\n\n\n\n\n \n if stdin is not None :\n self.stdin=stdin\n else :\n self.stdin=sys.stdin\n if stdout is not None :\n self.stdout=stdout\n else :\n self.stdout=sys.stdout\n self.cmdqueue=[]\n self.completekey=completekey\n \n def cmdloop(self,intro=None ):\n ''\n\n\n\n \n \n self.preloop()\n if self.use_rawinput and self.completekey:\n try :\n import readline\n self.old_completer=readline.get_completer()\n readline.set_completer(self.complete)\n readline.parse_and_bind(self.completekey+\": complete\")\n except ImportError:\n pass\n try :\n if intro is not None :\n self.intro=intro\n if self.intro:\n self.stdout.write(str(self.intro)+\"\\n\")\n stop=None\n while not stop:\n if self.cmdqueue:\n line=self.cmdqueue.pop(0)\n else :\n if self.use_rawinput:\n try :\n line=input(self.prompt)\n except EOFError:\n line='EOF'\n else :\n self.stdout.write(self.prompt)\n self.stdout.flush()\n line=self.stdin.readline()\n if not len(line):\n line='EOF'\n else :\n line=line.rstrip('\\r\\n')\n line=self.precmd(line)\n stop=self.onecmd(line)\n stop=self.postcmd(stop,line)\n self.postloop()\n finally :\n if self.use_rawinput and self.completekey:\n try :\n import readline\n readline.set_completer(self.old_completer)\n except ImportError:\n pass\n \n \n def precmd(self,line):\n ''\n\n\n \n return line\n \n def postcmd(self,stop,line):\n ''\n return stop\n \n def preloop(self):\n ''\n pass\n \n def postloop(self):\n ''\n\n\n \n pass\n \n def parseline(self,line):\n ''\n\n\n \n line=line.strip()\n if not line:\n return None ,None ,line\n elif line[0]=='?':\n line='help '+line[1:]\n elif line[0]=='!':\n if hasattr(self,'do_shell'):\n line='shell '+line[1:]\n else :\n return None ,None ,line\n i,n=0,len(line)\n while i 0:\n cmd,args,foo=self.parseline(line)\n if cmd =='':\n compfunc=self.completedefault\n else :\n try :\n compfunc=getattr(self,'complete_'+cmd)\n except AttributeError:\n compfunc=self.completedefault\n else :\n compfunc=self.completenames\n self.completion_matches=compfunc(text,line,begidx,endidx)\n try :\n return self.completion_matches[state]\n except IndexError:\n return None\n \n def get_names(self):\n \n \n return dir(self.__class__)\n \n def complete_help(self,*args):\n commands=set(self.completenames(*args))\n topics=set(a[5:]for a in self.get_names()\n if a.startswith('help_'+args[0]))\n return list(commands |topics)\n \n def do_help(self,arg):\n ''\n if arg:\n \n try :\n func=getattr(self,'help_'+arg)\n except AttributeError:\n try :\n doc=getattr(self,'do_'+arg).__doc__\n if doc:\n self.stdout.write(\"%s\\n\"%str(doc))\n return\n except AttributeError:\n pass\n self.stdout.write(\"%s\\n\"%str(self.nohelp %(arg,)))\n return\n func()\n else :\n names=self.get_names()\n cmds_doc=[]\n cmds_undoc=[]\n help={}\n for name in names:\n if name[:5]=='help_':\n help[name[5:]]=1\n names.sort()\n \n prevname=''\n for name in names:\n if name[:3]=='do_':\n if name ==prevname:\n continue\n prevname=name\n cmd=name[3:]\n if cmd in help:\n cmds_doc.append(cmd)\n del help[cmd]\n elif getattr(self,name).__doc__:\n cmds_doc.append(cmd)\n else :\n cmds_undoc.append(cmd)\n self.stdout.write(\"%s\\n\"%str(self.doc_leader))\n self.print_topics(self.doc_header,cmds_doc,15,80)\n self.print_topics(self.misc_header,list(help.keys()),15,80)\n self.print_topics(self.undoc_header,cmds_undoc,15,80)\n \n def print_topics(self,header,cmds,cmdlen,maxcol):\n if cmds:\n self.stdout.write(\"%s\\n\"%str(header))\n if self.ruler:\n self.stdout.write(\"%s\\n\"%str(self.ruler *len(header)))\n self.columnize(cmds,maxcol -1)\n self.stdout.write(\"\\n\")\n \n def columnize(self,list,displaywidth=80):\n ''\n\n\n\n \n if not list:\n self.stdout.write(\"\\n\")\n return\n \n nonstrings=[i for i in range(len(list))\n if not isinstance(list[i],str)]\n if nonstrings:\n raise TypeError(\"list[i] not a string for i in %s\"\n %\", \".join(map(str,nonstrings)))\n size=len(list)\n if size ==1:\n self.stdout.write('%s\\n'%str(list[0]))\n return\n \n for nrows in range(1,len(list)):\n ncols=(size+nrows -1)//nrows\n colwidths=[]\n totwidth=-2\n for col in range(ncols):\n colwidth=0\n for row in range(nrows):\n i=row+nrows *col\n if i >=size:\n break\n x=list[i]\n colwidth=max(colwidth,len(x))\n colwidths.append(colwidth)\n totwidth +=colwidth+2\n if totwidth >displaywidth:\n break\n if totwidth <=displaywidth:\n break\n else :\n nrows=len(list)\n ncols=1\n colwidths=[0]\n for row in range(nrows):\n texts=[]\n for col in range(ncols):\n i=row+nrows *col\n if i >=size:\n x=\"\"\n else :\n x=list[i]\n texts.append(x)\n while texts and not texts[-1]:\n del texts[-1]\n for col in range(len(texts)):\n texts[col]=texts[col].ljust(colwidths[col])\n self.stdout.write(\"%s\\n\"%str(\" \".join(texts)))\n", ["readline", "string", "sys"]], "code": [".py", "''\n\n\n\n\n\n\nimport sys\nimport traceback\nfrom codeop import CommandCompiler,compile_command\n\n__all__=[\"InteractiveInterpreter\",\"InteractiveConsole\",\"interact\",\n\"compile_command\"]\n\nclass InteractiveInterpreter:\n ''\n\n\n\n\n\n \n \n def __init__(self,locals=None ):\n ''\n\n\n\n\n\n\n \n if locals is None :\n locals={\"__name__\":\"__console__\",\"__doc__\":None }\n self.locals=locals\n self.compile=CommandCompiler()\n \n def runsource(self,source,filename=\"\",symbol=\"single\"):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n try :\n code=self.compile(source,filename,symbol)\n except (OverflowError,SyntaxError,ValueError):\n \n self.showsyntaxerror(filename)\n return False\n \n if code is None :\n \n return True\n \n \n self.runcode(code)\n return False\n \n def runcode(self,code):\n ''\n\n\n\n\n\n\n\n\n\n \n try :\n exec(code,self.locals)\n except SystemExit:\n raise\n except :\n self.showtraceback()\n \n def showsyntaxerror(self,filename=None ):\n ''\n\n\n\n\n\n\n\n\n\n \n type,value,tb=sys.exc_info()\n sys.last_type=type\n sys.last_value=value\n sys.last_traceback=tb\n if filename and type is SyntaxError:\n \n try :\n msg,(dummy_filename,lineno,offset,line)=value.args\n except ValueError:\n \n pass\n else :\n \n value=SyntaxError(msg,(filename,lineno,offset,line))\n sys.last_value=value\n if sys.excepthook is sys.__excepthook__:\n lines=traceback.format_exception_only(type,value)\n self.write(''.join(lines))\n else :\n \n \n sys.excepthook(type,value,tb)\n \n def showtraceback(self):\n ''\n\n\n\n\n\n \n sys.last_type,sys.last_value,last_tb=ei=sys.exc_info()\n sys.last_traceback=last_tb\n try :\n lines=traceback.format_exception(ei[0],ei[1],last_tb.tb_next)\n if sys.excepthook is sys.__excepthook__:\n self.write(''.join(lines))\n else :\n \n \n sys.excepthook(ei[0],ei[1],last_tb)\n finally :\n last_tb=ei=None\n \n def write(self,data):\n ''\n\n\n\n\n \n sys.stderr.write(data)\n \n \nclass InteractiveConsole(InteractiveInterpreter):\n ''\n\n\n\n\n \n \n def __init__(self,locals=None ,filename=\"\"):\n ''\n\n\n\n\n\n\n\n \n InteractiveInterpreter.__init__(self,locals)\n self.filename=filename\n self.resetbuffer()\n \n def resetbuffer(self):\n ''\n self.buffer=[]\n \n def interact(self,banner=None ,exitmsg=None ):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n try :\n sys.ps1\n except AttributeError:\n sys.ps1=\">>> \"\n try :\n sys.ps2\n except AttributeError:\n sys.ps2=\"... \"\n cprt='Type \"help\", \"copyright\", \"credits\" or \"license\" for more information.'\n if banner is None :\n self.write(\"Python %s on %s\\n%s\\n(%s)\\n\"%\n (sys.version,sys.platform,cprt,\n self.__class__.__name__))\n elif banner:\n self.write(\"%s\\n\"%str(banner))\n more=0\n while 1:\n try :\n if more:\n prompt=sys.ps2\n else :\n prompt=sys.ps1\n try :\n line=self.raw_input(prompt)\n except EOFError:\n self.write(\"\\n\")\n break\n else :\n more=self.push(line)\n except KeyboardInterrupt:\n self.write(\"\\nKeyboardInterrupt\\n\")\n self.resetbuffer()\n more=0\n if exitmsg is None :\n self.write('now exiting %s...\\n'%self.__class__.__name__)\n elif exitmsg !='':\n self.write('%s\\n'%exitmsg)\n \n def push(self,line):\n ''\n\n\n\n\n\n\n\n\n\n\n\n \n self.buffer.append(line)\n source=\"\\n\".join(self.buffer)\n more=self.runsource(source,self.filename)\n if not more:\n self.resetbuffer()\n return more\n \n def raw_input(self,prompt=\"\"):\n ''\n\n\n\n\n\n\n\n\n \n return input(prompt)\n \n \n \ndef interact(banner=None ,readfunc=None ,local=None ,exitmsg=None ):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n \n console=InteractiveConsole(local)\n if readfunc is not None :\n console.raw_input=readfunc\n else :\n try :\n import readline\n except ImportError:\n pass\n console.interact(banner,exitmsg)\n \n \nif __name__ ==\"__main__\":\n import argparse\n \n parser=argparse.ArgumentParser()\n parser.add_argument('-q',action='store_true',\n help=\"don't print version and copyright messages\")\n args=parser.parse_args()\n if args.q or sys.flags.quiet:\n banner=''\n else :\n banner=None\n interact(banner)\n", ["argparse", "codeop", "readline", "sys", "traceback"]], "codecs": [".py", "''\n\n\n\n\n\n\n\n\nimport builtins\nimport sys\n\n\n\ntry :\n from _codecs import *\nexcept ImportError as why:\n raise SystemError('Failed to load the builtin codecs: %s'%why)\n \n__all__=[\"register\",\"lookup\",\"open\",\"EncodedFile\",\"BOM\",\"BOM_BE\",\n\"BOM_LE\",\"BOM32_BE\",\"BOM32_LE\",\"BOM64_BE\",\"BOM64_LE\",\n\"BOM_UTF8\",\"BOM_UTF16\",\"BOM_UTF16_LE\",\"BOM_UTF16_BE\",\n\"BOM_UTF32\",\"BOM_UTF32_LE\",\"BOM_UTF32_BE\",\n\"CodecInfo\",\"Codec\",\"IncrementalEncoder\",\"IncrementalDecoder\",\n\"StreamReader\",\"StreamWriter\",\n\"StreamReaderWriter\",\"StreamRecoder\",\n\"getencoder\",\"getdecoder\",\"getincrementalencoder\",\n\"getincrementaldecoder\",\"getreader\",\"getwriter\",\n\"encode\",\"decode\",\"iterencode\",\"iterdecode\",\n\"strict_errors\",\"ignore_errors\",\"replace_errors\",\n\"xmlcharrefreplace_errors\",\n\"backslashreplace_errors\",\"namereplace_errors\",\n\"register_error\",\"lookup_error\"]\n\n\n\n\n\n\n\n\n\n\nBOM_UTF8=b'\\xef\\xbb\\xbf'\n\n\nBOM_LE=BOM_UTF16_LE=b'\\xff\\xfe'\n\n\nBOM_BE=BOM_UTF16_BE=b'\\xfe\\xff'\n\n\nBOM_UTF32_LE=b'\\xff\\xfe\\x00\\x00'\n\n\nBOM_UTF32_BE=b'\\x00\\x00\\xfe\\xff'\n\nif sys.byteorder =='little':\n\n\n BOM=BOM_UTF16=BOM_UTF16_LE\n \n \n BOM_UTF32=BOM_UTF32_LE\n \nelse :\n\n\n BOM=BOM_UTF16=BOM_UTF16_BE\n \n \n BOM_UTF32=BOM_UTF32_BE\n \n \nBOM32_LE=BOM_UTF16_LE\nBOM32_BE=BOM_UTF16_BE\nBOM64_LE=BOM_UTF32_LE\nBOM64_BE=BOM_UTF32_BE\n\n\n\n\nclass CodecInfo(tuple):\n ''\n \n \n \n \n \n \n \n _is_text_encoding=True\n \n def __new__(cls,encode,decode,streamreader=None ,streamwriter=None ,\n incrementalencoder=None ,incrementaldecoder=None ,name=None ,\n *,_is_text_encoding=None ):\n self=tuple.__new__(cls,(encode,decode,streamreader,streamwriter))\n self.name=name\n self.encode=encode\n self.decode=decode\n self.incrementalencoder=incrementalencoder\n self.incrementaldecoder=incrementaldecoder\n self.streamwriter=streamwriter\n self.streamreader=streamreader\n if _is_text_encoding is not None :\n self._is_text_encoding=_is_text_encoding\n return self\n \n def __repr__(self):\n return \"<%s.%s object for encoding %s at %#x>\"%\\\n (self.__class__.__module__,self.__class__.__qualname__,\n self.name,id(self))\n \nclass Codec:\n\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n def encode(self,input,errors='strict'):\n \n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n raise NotImplementedError\n \n def decode(self,input,errors='strict'):\n \n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n raise NotImplementedError\n \nclass IncrementalEncoder(object):\n ''\n\n\n\n \n def __init__(self,errors='strict'):\n ''\n\n\n\n\n\n \n self.errors=errors\n self.buffer=\"\"\n \n def encode(self,input,final=False ):\n ''\n\n \n raise NotImplementedError\n \n def reset(self):\n ''\n\n \n \n def getstate(self):\n ''\n\n \n return 0\n \n def setstate(self,state):\n ''\n\n\n \n \nclass BufferedIncrementalEncoder(IncrementalEncoder):\n ''\n\n\n\n \n def __init__(self,errors='strict'):\n IncrementalEncoder.__init__(self,errors)\n \n self.buffer=\"\"\n \n def _buffer_encode(self,input,errors,final):\n \n \n raise NotImplementedError\n \n def encode(self,input,final=False ):\n \n data=self.buffer+input\n (result,consumed)=self._buffer_encode(data,self.errors,final)\n \n self.buffer=data[consumed:]\n return result\n \n def reset(self):\n IncrementalEncoder.reset(self)\n self.buffer=\"\"\n \n def getstate(self):\n return self.buffer or 0\n \n def setstate(self,state):\n self.buffer=state or \"\"\n \nclass IncrementalDecoder(object):\n ''\n\n\n\n \n def __init__(self,errors='strict'):\n ''\n\n\n\n\n\n \n self.errors=errors\n \n def decode(self,input,final=False ):\n ''\n\n \n raise NotImplementedError\n \n def reset(self):\n ''\n\n \n \n def getstate(self):\n ''\n\n\n\n\n\n\n\n\n\n \n return (b\"\",0)\n \n def setstate(self,state):\n ''\n\n\n\n\n \n \nclass BufferedIncrementalDecoder(IncrementalDecoder):\n ''\n\n\n\n \n def __init__(self,errors='strict'):\n IncrementalDecoder.__init__(self,errors)\n \n self.buffer=b\"\"\n \n def _buffer_decode(self,input,errors,final):\n \n \n raise NotImplementedError\n \n def decode(self,input,final=False ):\n \n data=self.buffer+input\n (result,consumed)=self._buffer_decode(data,self.errors,final)\n \n self.buffer=data[consumed:]\n return result\n \n def reset(self):\n IncrementalDecoder.reset(self)\n self.buffer=b\"\"\n \n def getstate(self):\n \n return (self.buffer,0)\n \n def setstate(self,state):\n \n self.buffer=state[0]\n \n \n \n \n \n \n \n \nclass StreamWriter(Codec):\n\n def __init__(self,stream,errors='strict'):\n \n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n self.stream=stream\n self.errors=errors\n \n def write(self,object):\n \n ''\n \n data,consumed=self.encode(object,self.errors)\n self.stream.write(data)\n \n def writelines(self,list):\n \n ''\n\n \n self.write(''.join(list))\n \n def reset(self):\n \n ''\n\n\n\n\n\n\n \n pass\n \n def seek(self,offset,whence=0):\n self.stream.seek(offset,whence)\n if whence ==0 and offset ==0:\n self.reset()\n \n def __getattr__(self,name,\n getattr=getattr):\n \n ''\n \n return getattr(self.stream,name)\n \n def __enter__(self):\n return self\n \n def __exit__(self,type,value,tb):\n self.stream.close()\n \n \n \nclass StreamReader(Codec):\n\n charbuffertype=str\n \n def __init__(self,stream,errors='strict'):\n \n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n self.stream=stream\n self.errors=errors\n self.bytebuffer=b\"\"\n self._empty_charbuffer=self.charbuffertype()\n self.charbuffer=self._empty_charbuffer\n self.linebuffer=None\n \n def decode(self,input,errors='strict'):\n raise NotImplementedError\n \n def read(self,size=-1,chars=-1,firstline=False ):\n \n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n if self.linebuffer:\n self.charbuffer=self._empty_charbuffer.join(self.linebuffer)\n self.linebuffer=None\n \n if chars <0:\n \n \n chars=size\n \n \n while True :\n \n if chars >=0:\n if len(self.charbuffer)>=chars:\n break\n \n if size <0:\n newdata=self.stream.read()\n else :\n newdata=self.stream.read(size)\n \n data=self.bytebuffer+newdata\n if not data:\n break\n try :\n newchars,decodedbytes=self.decode(data,self.errors)\n except UnicodeDecodeError as exc:\n if firstline:\n newchars,decodedbytes=\\\n self.decode(data[:exc.start],self.errors)\n lines=newchars.splitlines(keepends=True )\n if len(lines)<=1:\n raise\n else :\n raise\n \n self.bytebuffer=data[decodedbytes:]\n \n self.charbuffer +=newchars\n \n if not newdata:\n break\n if chars <0:\n \n result=self.charbuffer\n self.charbuffer=self._empty_charbuffer\n else :\n \n result=self.charbuffer[:chars]\n self.charbuffer=self.charbuffer[chars:]\n return result\n \n def readline(self,size=None ,keepends=True ):\n \n ''\n\n\n\n\n\n \n \n \n if self.linebuffer:\n line=self.linebuffer[0]\n del self.linebuffer[0]\n if len(self.linebuffer)==1:\n \n \n self.charbuffer=self.linebuffer[0]\n self.linebuffer=None\n if not keepends:\n line=line.splitlines(keepends=False )[0]\n return line\n \n readsize=size or 72\n line=self._empty_charbuffer\n \n while True :\n data=self.read(readsize,firstline=True )\n if data:\n \n \n \n if (isinstance(data,str)and data.endswith(\"\\r\"))or\\\n (isinstance(data,bytes)and data.endswith(b\"\\r\")):\n data +=self.read(size=1,chars=1)\n \n line +=data\n lines=line.splitlines(keepends=True )\n if lines:\n if len(lines)>1:\n \n \n line=lines[0]\n del lines[0]\n if len(lines)>1:\n \n lines[-1]+=self.charbuffer\n self.linebuffer=lines\n self.charbuffer=None\n else :\n \n self.charbuffer=lines[0]+self.charbuffer\n if not keepends:\n line=line.splitlines(keepends=False )[0]\n break\n line0withend=lines[0]\n line0withoutend=lines[0].splitlines(keepends=False )[0]\n if line0withend !=line0withoutend:\n \n self.charbuffer=self._empty_charbuffer.join(lines[1:])+\\\n self.charbuffer\n if keepends:\n line=line0withend\n else :\n line=line0withoutend\n break\n \n if not data or size is not None :\n if line and not keepends:\n line=line.splitlines(keepends=False )[0]\n break\n if readsize <8000:\n readsize *=2\n return line\n \n def readlines(self,sizehint=None ,keepends=True ):\n \n ''\n\n\n\n\n\n\n\n\n \n data=self.read()\n return data.splitlines(keepends)\n \n def reset(self):\n \n ''\n\n\n\n\n\n \n self.bytebuffer=b\"\"\n self.charbuffer=self._empty_charbuffer\n self.linebuffer=None\n \n def seek(self,offset,whence=0):\n ''\n\n\n \n self.stream.seek(offset,whence)\n self.reset()\n \n def __next__(self):\n \n ''\n line=self.readline()\n if line:\n return line\n raise StopIteration\n \n def __iter__(self):\n return self\n \n def __getattr__(self,name,\n getattr=getattr):\n \n ''\n \n return getattr(self.stream,name)\n \n def __enter__(self):\n return self\n \n def __exit__(self,type,value,tb):\n self.stream.close()\n \n \n \nclass StreamReaderWriter:\n\n ''\n\n\n\n\n\n\n \n \n encoding='unknown'\n \n def __init__(self,stream,Reader,Writer,errors='strict'):\n \n ''\n\n\n\n\n\n\n\n\n\n \n self.stream=stream\n self.reader=Reader(stream,errors)\n self.writer=Writer(stream,errors)\n self.errors=errors\n \n def read(self,size=-1):\n \n return self.reader.read(size)\n \n def readline(self,size=None ):\n \n return self.reader.readline(size)\n \n def readlines(self,sizehint=None ):\n \n return self.reader.readlines(sizehint)\n \n def __next__(self):\n \n ''\n return next(self.reader)\n \n def __iter__(self):\n return self\n \n def write(self,data):\n \n return self.writer.write(data)\n \n def writelines(self,list):\n \n return self.writer.writelines(list)\n \n def reset(self):\n \n self.reader.reset()\n self.writer.reset()\n \n def seek(self,offset,whence=0):\n self.stream.seek(offset,whence)\n self.reader.reset()\n if whence ==0 and offset ==0:\n self.writer.reset()\n \n def __getattr__(self,name,\n getattr=getattr):\n \n ''\n \n return getattr(self.stream,name)\n \n \n \n def __enter__(self):\n return self\n \n def __exit__(self,type,value,tb):\n self.stream.close()\n \n \n \nclass StreamRecoder:\n\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n data_encoding='unknown'\n file_encoding='unknown'\n \n def __init__(self,stream,encode,decode,Reader,Writer,\n errors='strict'):\n \n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n self.stream=stream\n self.encode=encode\n self.decode=decode\n self.reader=Reader(stream,errors)\n self.writer=Writer(stream,errors)\n self.errors=errors\n \n def read(self,size=-1):\n \n data=self.reader.read(size)\n data,bytesencoded=self.encode(data,self.errors)\n return data\n \n def readline(self,size=None ):\n \n if size is None :\n data=self.reader.readline()\n else :\n data=self.reader.readline(size)\n data,bytesencoded=self.encode(data,self.errors)\n return data\n \n def readlines(self,sizehint=None ):\n \n data=self.reader.read()\n data,bytesencoded=self.encode(data,self.errors)\n return data.splitlines(keepends=True )\n \n def __next__(self):\n \n ''\n data=next(self.reader)\n data,bytesencoded=self.encode(data,self.errors)\n return data\n \n def __iter__(self):\n return self\n \n def write(self,data):\n \n data,bytesdecoded=self.decode(data,self.errors)\n return self.writer.write(data)\n \n def writelines(self,list):\n \n data=b''.join(list)\n data,bytesdecoded=self.decode(data,self.errors)\n return self.writer.write(data)\n \n def reset(self):\n \n self.reader.reset()\n self.writer.reset()\n \n def seek(self,offset,whence=0):\n \n \n self.reader.seek(offset,whence)\n self.writer.seek(offset,whence)\n \n def __getattr__(self,name,\n getattr=getattr):\n \n ''\n \n return getattr(self.stream,name)\n \n def __enter__(self):\n return self\n \n def __exit__(self,type,value,tb):\n self.stream.close()\n \n \n \ndef open(filename,mode='r',encoding=None ,errors='strict',buffering=-1):\n\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n if encoding is not None and\\\n 'b'not in mode:\n \n mode=mode+'b'\n file=builtins.open(filename,mode,buffering)\n if encoding is None :\n return file\n info=lookup(encoding)\n srw=StreamReaderWriter(file,info.streamreader,info.streamwriter,errors)\n \n srw.encoding=encoding\n return srw\n \ndef EncodedFile(file,data_encoding,file_encoding=None ,errors='strict'):\n\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n if file_encoding is None :\n file_encoding=data_encoding\n data_info=lookup(data_encoding)\n file_info=lookup(file_encoding)\n sr=StreamRecoder(file,data_info.encode,data_info.decode,\n file_info.streamreader,file_info.streamwriter,errors)\n \n sr.data_encoding=data_encoding\n sr.file_encoding=file_encoding\n return sr\n \n \n \ndef getencoder(encoding):\n\n ''\n\n\n\n\n \n return lookup(encoding).encode\n \ndef getdecoder(encoding):\n\n ''\n\n\n\n\n \n return lookup(encoding).decode\n \ndef getincrementalencoder(encoding):\n\n ''\n\n\n\n\n\n \n encoder=lookup(encoding).incrementalencoder\n if encoder is None :\n raise LookupError(encoding)\n return encoder\n \ndef getincrementaldecoder(encoding):\n\n ''\n\n\n\n\n\n \n decoder=lookup(encoding).incrementaldecoder\n if decoder is None :\n raise LookupError(encoding)\n return decoder\n \ndef getreader(encoding):\n\n ''\n\n\n\n\n \n return lookup(encoding).streamreader\n \ndef getwriter(encoding):\n\n ''\n\n\n\n\n \n return lookup(encoding).streamwriter\n \ndef iterencode(iterator,encoding,errors='strict',**kwargs):\n ''\n\n\n\n\n\n\n \n encoder=getincrementalencoder(encoding)(errors,**kwargs)\n for input in iterator:\n output=encoder.encode(input)\n if output:\n yield output\n output=encoder.encode(\"\",True )\n if output:\n yield output\n \ndef iterdecode(iterator,encoding,errors='strict',**kwargs):\n ''\n\n\n\n\n\n\n \n decoder=getincrementaldecoder(encoding)(errors,**kwargs)\n for input in iterator:\n output=decoder.decode(input)\n if output:\n yield output\n output=decoder.decode(b\"\",True )\n if output:\n yield output\n \n \n \ndef make_identity_dict(rng):\n\n ''\n\n\n\n\n \n return {i:i for i in rng}\n \ndef make_encoding_map(decoding_map):\n\n ''\n\n\n\n\n\n\n\n\n\n \n m={}\n for k,v in decoding_map.items():\n if not v in m:\n m[v]=k\n else :\n m[v]=None\n return m\n \n \n \ntry :\n strict_errors=lookup_error(\"strict\")\n ignore_errors=lookup_error(\"ignore\")\n replace_errors=lookup_error(\"replace\")\n xmlcharrefreplace_errors=lookup_error(\"xmlcharrefreplace\")\n backslashreplace_errors=lookup_error(\"backslashreplace\")\n namereplace_errors=lookup_error(\"namereplace\")\nexcept LookupError:\n\n strict_errors=None\n ignore_errors=None\n replace_errors=None\n xmlcharrefreplace_errors=None\n backslashreplace_errors=None\n namereplace_errors=None\n \n \n \n_false=0\nif _false:\n import encodings\n \n \n \nif __name__ =='__main__':\n\n\n sys.stdout=EncodedFile(sys.stdout,'latin-1','utf-8')\n \n \n sys.stdin=EncodedFile(sys.stdin,'utf-8','latin-1')\n", ["_codecs", "builtins", "encodings", "sys"]], "codeop": [".py", "''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport __future__\n\n_features=[getattr(__future__,fname)\nfor fname in __future__.all_feature_names]\n\n__all__=[\"compile_command\",\"Compile\",\"CommandCompiler\"]\n\nPyCF_DONT_IMPLY_DEDENT=0x200\n\ndef _maybe_compile(compiler,source,filename,symbol):\n\n for line in source.split(\"\\n\"):\n line=line.strip()\n if line and line[0]!='#':\n break\n else :\n if symbol !=\"eval\":\n source=\"pass\"\n \n err=err1=err2=None\n code=code1=code2=None\n \n try :\n code=compiler(source,filename,symbol)\n except SyntaxError as err:\n pass\n \n try :\n code1=compiler(source+\"\\n\",filename,symbol)\n except SyntaxError as e:\n err1=e\n \n try :\n code2=compiler(source+\"\\n\\n\",filename,symbol)\n except SyntaxError as e:\n err2=e\n \n if code:\n return code\n if not code1 and repr(err1)==repr(err2):\n raise err1\n \ndef _compile(source,filename,symbol):\n return compile(source,filename,symbol,PyCF_DONT_IMPLY_DEDENT)\n \ndef compile_command(source,filename=\"\",symbol=\"single\"):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n return _maybe_compile(_compile,source,filename,symbol)\n \nclass Compile:\n ''\n\n\n \n def __init__(self):\n self.flags=PyCF_DONT_IMPLY_DEDENT\n \n def __call__(self,source,filename,symbol):\n codeob=compile(source,filename,symbol,self.flags,1)\n for feature in _features:\n if codeob.co_flags&feature.compiler_flag:\n self.flags |=feature.compiler_flag\n return codeob\n \nclass CommandCompiler:\n ''\n\n\n\n \n \n def __init__(self,):\n self.compiler=Compile()\n \n def __call__(self,source,filename=\"\",symbol=\"single\"):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n return _maybe_compile(self.compiler,source,filename,symbol)\n", ["__future__"]], "colorsys": [".py", "''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n__all__=[\"rgb_to_yiq\",\"yiq_to_rgb\",\"rgb_to_hls\",\"hls_to_rgb\",\n\"rgb_to_hsv\",\"hsv_to_rgb\"]\n\n\n\nONE_THIRD=1.0 /3.0\nONE_SIXTH=1.0 /6.0\nTWO_THIRD=2.0 /3.0\n\n\n\n\n\n\n\n\ndef rgb_to_yiq(r,g,b):\n y=0.30 *r+0.59 *g+0.11 *b\n i=0.74 *(r -y)-0.27 *(b -y)\n q=0.48 *(r -y)+0.41 *(b -y)\n return (y,i,q)\n \ndef yiq_to_rgb(y,i,q):\n\n\n\n\n r=y+0.9468822170900693 *i+0.6235565819861433 *q\n g=y -0.27478764629897834 *i -0.6356910791873801 *q\n b=y -1.1085450346420322 *i+1.7090069284064666 *q\n \n if r <0.0:\n r=0.0\n if g <0.0:\n g=0.0\n if b <0.0:\n b=0.0\n if r >1.0:\n r=1.0\n if g >1.0:\n g=1.0\n if b >1.0:\n b=1.0\n return (r,g,b)\n \n \n \n \n \n \n \ndef rgb_to_hls(r,g,b):\n maxc=max(r,g,b)\n minc=min(r,g,b)\n \n l=(minc+maxc)/2.0\n if minc ==maxc:\n return 0.0,l,0.0\n if l <=0.5:\n s=(maxc -minc)/(maxc+minc)\n else :\n s=(maxc -minc)/(2.0 -maxc -minc)\n rc=(maxc -r)/(maxc -minc)\n gc=(maxc -g)/(maxc -minc)\n bc=(maxc -b)/(maxc -minc)\n if r ==maxc:\n h=bc -gc\n elif g ==maxc:\n h=2.0+rc -bc\n else :\n h=4.0+gc -rc\n h=(h /6.0)%1.0\n return h,l,s\n \ndef hls_to_rgb(h,l,s):\n if s ==0.0:\n return l,l,l\n if l <=0.5:\n m2=l *(1.0+s)\n else :\n m2=l+s -(l *s)\n m1=2.0 *l -m2\n return (_v(m1,m2,h+ONE_THIRD),_v(m1,m2,h),_v(m1,m2,h -ONE_THIRD))\n \ndef _v(m1,m2,hue):\n hue=hue %1.0\n if hue MAX_INTERPOLATION_DEPTH:\n raise InterpolationDepthError(option,section,rawval)\n while rest:\n p=rest.find(\"%\")\n if p <0:\n accum.append(rest)\n return\n if p >0:\n accum.append(rest[:p])\n rest=rest[p:]\n \n c=rest[1:2]\n if c ==\"%\":\n accum.append(\"%\")\n rest=rest[2:]\n elif c ==\"(\":\n m=self._KEYCRE.match(rest)\n if m is None :\n raise InterpolationSyntaxError(option,section,\n \"bad interpolation variable reference %r\"%rest)\n var=parser.optionxform(m.group(1))\n rest=rest[m.end():]\n try :\n v=map[var]\n except KeyError:\n raise InterpolationMissingOptionError(\n option,section,rawval,var)from None\n if \"%\"in v:\n self._interpolate_some(parser,option,accum,v,\n section,map,depth+1)\n else :\n accum.append(v)\n else :\n raise InterpolationSyntaxError(\n option,section,\n \"'%%' must be followed by '%%' or '(', \"\n \"found: %r\"%(rest,))\n \n \nclass ExtendedInterpolation(Interpolation):\n ''\n \n \n _KEYCRE=re.compile(r\"\\$\\{([^}]+)\\}\")\n \n def before_get(self,parser,section,option,value,defaults):\n L=[]\n self._interpolate_some(parser,option,L,value,section,defaults,1)\n return ''.join(L)\n \n def before_set(self,parser,section,option,value):\n tmp_value=value.replace('$$','')\n tmp_value=self._KEYCRE.sub('',tmp_value)\n if '$'in tmp_value:\n raise ValueError(\"invalid interpolation syntax in %r at \"\n \"position %d\"%(value,tmp_value.find('$')))\n return value\n \n def _interpolate_some(self,parser,option,accum,rest,section,map,\n depth):\n rawval=parser.get(section,option,raw=True ,fallback=rest)\n if depth >MAX_INTERPOLATION_DEPTH:\n raise InterpolationDepthError(option,section,rawval)\n while rest:\n p=rest.find(\"$\")\n if p <0:\n accum.append(rest)\n return\n if p >0:\n accum.append(rest[:p])\n rest=rest[p:]\n \n c=rest[1:2]\n if c ==\"$\":\n accum.append(\"$\")\n rest=rest[2:]\n elif c ==\"{\":\n m=self._KEYCRE.match(rest)\n if m is None :\n raise InterpolationSyntaxError(option,section,\n \"bad interpolation variable reference %r\"%rest)\n path=m.group(1).split(':')\n rest=rest[m.end():]\n sect=section\n opt=option\n try :\n if len(path)==1:\n opt=parser.optionxform(path[0])\n v=map[opt]\n elif len(path)==2:\n sect=path[0]\n opt=parser.optionxform(path[1])\n v=parser.get(sect,opt,raw=True )\n else :\n raise InterpolationSyntaxError(\n option,section,\n \"More than one ':' found: %r\"%(rest,))\n except (KeyError,NoSectionError,NoOptionError):\n raise InterpolationMissingOptionError(\n option,section,rawval,\":\".join(path))from None\n if \"$\"in v:\n self._interpolate_some(parser,opt,accum,v,sect,\n dict(parser.items(sect,raw=True )),\n depth+1)\n else :\n accum.append(v)\n else :\n raise InterpolationSyntaxError(\n option,section,\n \"'$' must be followed by '$' or '{', \"\n \"found: %r\"%(rest,))\n \n \nclass LegacyInterpolation(Interpolation):\n ''\n \n \n _KEYCRE=re.compile(r\"%\\(([^)]*)\\)s|.\")\n \n def before_get(self,parser,section,option,value,vars):\n rawval=value\n depth=MAX_INTERPOLATION_DEPTH\n while depth:\n depth -=1\n if value and \"%(\"in value:\n replace=functools.partial(self._interpolation_replace,\n parser=parser)\n value=self._KEYCRE.sub(replace,value)\n try :\n value=value %vars\n except KeyError as e:\n raise InterpolationMissingOptionError(\n option,section,rawval,e.args[0])from None\n else :\n break\n if value and \"%(\"in value:\n raise InterpolationDepthError(option,section,rawval)\n return value\n \n def before_set(self,parser,section,option,value):\n return value\n \n @staticmethod\n def _interpolation_replace(match,parser):\n s=match.group(1)\n if s is None :\n return match.group()\n else :\n return \"%%(%s)s\"%parser.optionxform(s)\n \n \nclass RawConfigParser(MutableMapping):\n ''\n \n \n _SECT_TMPL=r\"\"\"\n \\[ # [\n (?P[^]]+) # very permissive!\n \\] # ]\n \"\"\"\n _OPT_TMPL=r\"\"\"\n (?P.*?) # very permissive!\n \\s*(?P{delim})\\s* # any number of space/tab,\n # followed by any of the\n # allowed delimiters,\n # followed by any space/tab\n (?P.*)$ # everything up to eol\n \"\"\"\n _OPT_NV_TMPL=r\"\"\"\n (?P.*?) # very permissive!\n \\s*(?: # any number of space/tab,\n (?P{delim})\\s* # optionally followed by\n # any of the allowed\n # delimiters, followed by any\n # space/tab\n (?P.*))?$ # everything up to eol\n \"\"\"\n \n _DEFAULT_INTERPOLATION=Interpolation()\n \n SECTCRE=re.compile(_SECT_TMPL,re.VERBOSE)\n \n OPTCRE=re.compile(_OPT_TMPL.format(delim=\"=|:\"),re.VERBOSE)\n \n \n OPTCRE_NV=re.compile(_OPT_NV_TMPL.format(delim=\"=|:\"),re.VERBOSE)\n \n NONSPACECRE=re.compile(r\"\\S\")\n \n BOOLEAN_STATES={'1':True ,'yes':True ,'true':True ,'on':True ,\n '0':False ,'no':False ,'false':False ,'off':False }\n \n def __init__(self,defaults=None ,dict_type=_default_dict,\n allow_no_value=False ,*,delimiters=('=',':'),\n comment_prefixes=('#',';'),inline_comment_prefixes=None ,\n strict=True ,empty_lines_in_values=True ,\n default_section=DEFAULTSECT,\n interpolation=_UNSET,converters=_UNSET):\n \n self._dict=dict_type\n self._sections=self._dict()\n self._defaults=self._dict()\n self._converters=ConverterMapping(self)\n self._proxies=self._dict()\n self._proxies[default_section]=SectionProxy(self,default_section)\n self._delimiters=tuple(delimiters)\n if delimiters ==('=',':'):\n self._optcre=self.OPTCRE_NV if allow_no_value else self.OPTCRE\n else :\n d=\"|\".join(re.escape(d)for d in delimiters)\n if allow_no_value:\n self._optcre=re.compile(self._OPT_NV_TMPL.format(delim=d),\n re.VERBOSE)\n else :\n self._optcre=re.compile(self._OPT_TMPL.format(delim=d),\n re.VERBOSE)\n self._comment_prefixes=tuple(comment_prefixes or ())\n self._inline_comment_prefixes=tuple(inline_comment_prefixes or ())\n self._strict=strict\n self._allow_no_value=allow_no_value\n self._empty_lines_in_values=empty_lines_in_values\n self.default_section=default_section\n self._interpolation=interpolation\n if self._interpolation is _UNSET:\n self._interpolation=self._DEFAULT_INTERPOLATION\n if self._interpolation is None :\n self._interpolation=Interpolation()\n if converters is not _UNSET:\n self._converters.update(converters)\n if defaults:\n self._read_defaults(defaults)\n \n def defaults(self):\n return self._defaults\n \n def sections(self):\n ''\n \n return list(self._sections.keys())\n \n def add_section(self,section):\n ''\n\n\n\n \n if section ==self.default_section:\n raise ValueError('Invalid section name: %r'%section)\n \n if section in self._sections:\n raise DuplicateSectionError(section)\n self._sections[section]=self._dict()\n self._proxies[section]=SectionProxy(self,section)\n \n def has_section(self,section):\n ''\n\n\n \n return section in self._sections\n \n def options(self,section):\n ''\n try :\n opts=self._sections[section].copy()\n except KeyError:\n raise NoSectionError(section)from None\n opts.update(self._defaults)\n return list(opts.keys())\n \n def read(self,filenames,encoding=None ):\n ''\n\n\n\n\n\n\n\n\n\n \n if isinstance(filenames,(str,bytes,os.PathLike)):\n filenames=[filenames]\n read_ok=[]\n for filename in filenames:\n try :\n with open(filename,encoding=encoding)as fp:\n self._read(fp,filename)\n except OSError:\n continue\n if isinstance(filename,os.PathLike):\n filename=os.fspath(filename)\n read_ok.append(filename)\n return read_ok\n \n def read_file(self,f,source=None ):\n ''\n\n\n\n\n\n \n if source is None :\n try :\n source=f.name\n except AttributeError:\n source='??>'\n self._read(f,source)\n \n def read_string(self,string,source=''):\n ''\n sfile=io.StringIO(string)\n self.read_file(sfile,source)\n \n def read_dict(self,dictionary,source=''):\n ''\n\n\n\n\n\n\n\n\n\n\n \n elements_added=set()\n for section,keys in dictionary.items():\n section=str(section)\n try :\n self.add_section(section)\n except (DuplicateSectionError,ValueError):\n if self._strict and section in elements_added:\n raise\n elements_added.add(section)\n for key,value in keys.items():\n key=self.optionxform(str(key))\n if value is not None :\n value=str(value)\n if self._strict and (section,key)in elements_added:\n raise DuplicateOptionError(section,key,source)\n elements_added.add((section,key))\n self.set(section,key,value)\n \n def readfp(self,fp,filename=None ):\n ''\n warnings.warn(\n \"This method will be removed in future versions. \"\n \"Use 'parser.read_file()' instead.\",\n DeprecationWarning,stacklevel=2\n )\n self.read_file(fp,source=filename)\n \n def get(self,section,option,*,raw=False ,vars=None ,fallback=_UNSET):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n \n try :\n d=self._unify_values(section,vars)\n except NoSectionError:\n if fallback is _UNSET:\n raise\n else :\n return fallback\n option=self.optionxform(option)\n try :\n value=d[option]\n except KeyError:\n if fallback is _UNSET:\n raise NoOptionError(option,section)\n else :\n return fallback\n \n if raw or value is None :\n return value\n else :\n return self._interpolation.before_get(self,section,option,value,\n d)\n \n def _get(self,section,conv,option,**kwargs):\n return conv(self.get(section,option,**kwargs))\n \n def _get_conv(self,section,option,conv,*,raw=False ,vars=None ,\n fallback=_UNSET,**kwargs):\n try :\n return self._get(section,conv,option,raw=raw,vars=vars,\n **kwargs)\n except (NoSectionError,NoOptionError):\n if fallback is _UNSET:\n raise\n return fallback\n \n \n def getint(self,section,option,*,raw=False ,vars=None ,\n fallback=_UNSET,**kwargs):\n return self._get_conv(section,option,int,raw=raw,vars=vars,\n fallback=fallback,**kwargs)\n \n def getfloat(self,section,option,*,raw=False ,vars=None ,\n fallback=_UNSET,**kwargs):\n return self._get_conv(section,option,float,raw=raw,vars=vars,\n fallback=fallback,**kwargs)\n \n def getboolean(self,section,option,*,raw=False ,vars=None ,\n fallback=_UNSET,**kwargs):\n return self._get_conv(section,option,self._convert_to_boolean,\n raw=raw,vars=vars,fallback=fallback,**kwargs)\n \n def items(self,section=_UNSET,raw=False ,vars=None ):\n ''\n\n\n\n\n\n\n\n\n \n if section is _UNSET:\n return super().items()\n d=self._defaults.copy()\n try :\n d.update(self._sections[section])\n except KeyError:\n if section !=self.default_section:\n raise NoSectionError(section)\n orig_keys=list(d.keys())\n \n if vars:\n for key,value in vars.items():\n d[self.optionxform(key)]=value\n value_getter=lambda option:self._interpolation.before_get(self,\n section,option,d[option],d)\n if raw:\n value_getter=lambda option:d[option]\n return [(option,value_getter(option))for option in orig_keys]\n \n def popitem(self):\n ''\n\n\n\n\n \n for key in self.sections():\n value=self[key]\n del self[key]\n return key,value\n raise KeyError\n \n def optionxform(self,optionstr):\n return optionstr.lower()\n \n def has_option(self,section,option):\n ''\n\n \n if not section or section ==self.default_section:\n option=self.optionxform(option)\n return option in self._defaults\n elif section not in self._sections:\n return False\n else :\n option=self.optionxform(option)\n return (option in self._sections[section]\n or option in self._defaults)\n \n def set(self,section,option,value=None ):\n ''\n if value:\n value=self._interpolation.before_set(self,section,option,\n value)\n if not section or section ==self.default_section:\n sectdict=self._defaults\n else :\n try :\n sectdict=self._sections[section]\n except KeyError:\n raise NoSectionError(section)from None\n sectdict[self.optionxform(option)]=value\n \n def write(self,fp,space_around_delimiters=True ):\n ''\n\n\n\n \n if space_around_delimiters:\n d=\" {} \".format(self._delimiters[0])\n else :\n d=self._delimiters[0]\n if self._defaults:\n self._write_section(fp,self.default_section,\n self._defaults.items(),d)\n for section in self._sections:\n self._write_section(fp,section,\n self._sections[section].items(),d)\n \n def _write_section(self,fp,section_name,section_items,delimiter):\n ''\n fp.write(\"[{}]\\n\".format(section_name))\n for key,value in section_items:\n value=self._interpolation.before_write(self,section_name,key,\n value)\n if value is not None or not self._allow_no_value:\n value=delimiter+str(value).replace('\\n','\\n\\t')\n else :\n value=\"\"\n fp.write(\"{}{}\\n\".format(key,value))\n fp.write(\"\\n\")\n \n def remove_option(self,section,option):\n ''\n if not section or section ==self.default_section:\n sectdict=self._defaults\n else :\n try :\n sectdict=self._sections[section]\n except KeyError:\n raise NoSectionError(section)from None\n option=self.optionxform(option)\n existed=option in sectdict\n if existed:\n del sectdict[option]\n return existed\n \n def remove_section(self,section):\n ''\n existed=section in self._sections\n if existed:\n del self._sections[section]\n del self._proxies[section]\n return existed\n \n def __getitem__(self,key):\n if key !=self.default_section and not self.has_section(key):\n raise KeyError(key)\n return self._proxies[key]\n \n def __setitem__(self,key,value):\n \n \n if key in self and self[key]is value:\n return\n \n \n if key ==self.default_section:\n self._defaults.clear()\n elif key in self._sections:\n self._sections[key].clear()\n self.read_dict({key:value})\n \n def __delitem__(self,key):\n if key ==self.default_section:\n raise ValueError(\"Cannot remove the default section.\")\n if not self.has_section(key):\n raise KeyError(key)\n self.remove_section(key)\n \n def __contains__(self,key):\n return key ==self.default_section or self.has_section(key)\n \n def __len__(self):\n return len(self._sections)+1\n \n def __iter__(self):\n \n return itertools.chain((self.default_section,),self._sections.keys())\n \n def _read(self,fp,fpname):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n elements_added=set()\n cursect=None\n sectname=None\n optname=None\n lineno=0\n indent_level=0\n e=None\n for lineno,line in enumerate(fp,start=1):\n comment_start=sys.maxsize\n \n inline_prefixes={p:-1 for p in self._inline_comment_prefixes}\n while comment_start ==sys.maxsize and inline_prefixes:\n next_prefixes={}\n for prefix,index in inline_prefixes.items():\n index=line.find(prefix,index+1)\n if index ==-1:\n continue\n next_prefixes[prefix]=index\n if index ==0 or (index >0 and line[index -1].isspace()):\n comment_start=min(comment_start,index)\n inline_prefixes=next_prefixes\n \n for prefix in self._comment_prefixes:\n if line.strip().startswith(prefix):\n comment_start=0\n break\n if comment_start ==sys.maxsize:\n comment_start=None\n value=line[:comment_start].strip()\n if not value:\n if self._empty_lines_in_values:\n \n \n if (comment_start is None and\n cursect is not None and\n optname and\n cursect[optname]is not None ):\n cursect[optname].append('')\n else :\n \n indent_level=sys.maxsize\n continue\n \n first_nonspace=self.NONSPACECRE.search(line)\n cur_indent_level=first_nonspace.start()if first_nonspace else 0\n if (cursect is not None and optname and\n cur_indent_level >indent_level):\n cursect[optname].append(value)\n \n else :\n indent_level=cur_indent_level\n \n mo=self.SECTCRE.match(value)\n if mo:\n sectname=mo.group('header')\n if sectname in self._sections:\n if self._strict and sectname in elements_added:\n raise DuplicateSectionError(sectname,fpname,\n lineno)\n cursect=self._sections[sectname]\n elements_added.add(sectname)\n elif sectname ==self.default_section:\n cursect=self._defaults\n else :\n cursect=self._dict()\n self._sections[sectname]=cursect\n self._proxies[sectname]=SectionProxy(self,sectname)\n elements_added.add(sectname)\n \n optname=None\n \n elif cursect is None :\n raise MissingSectionHeaderError(fpname,lineno,line)\n \n else :\n mo=self._optcre.match(value)\n if mo:\n optname,vi,optval=mo.group('option','vi','value')\n if not optname:\n e=self._handle_error(e,fpname,lineno,line)\n optname=self.optionxform(optname.rstrip())\n if (self._strict and\n (sectname,optname)in elements_added):\n raise DuplicateOptionError(sectname,optname,\n fpname,lineno)\n elements_added.add((sectname,optname))\n \n \n if optval is not None :\n optval=optval.strip()\n cursect[optname]=[optval]\n else :\n \n cursect[optname]=None\n else :\n \n \n \n \n e=self._handle_error(e,fpname,lineno,line)\n self._join_multiline_values()\n \n if e:\n raise e\n \n def _join_multiline_values(self):\n defaults=self.default_section,self._defaults\n all_sections=itertools.chain((defaults,),\n self._sections.items())\n for section,options in all_sections:\n for name,val in options.items():\n if isinstance(val,list):\n val='\\n'.join(val).rstrip()\n options[name]=self._interpolation.before_read(self,\n section,\n name,val)\n \n def _read_defaults(self,defaults):\n ''\n \n for key,value in defaults.items():\n self._defaults[self.optionxform(key)]=value\n \n def _handle_error(self,exc,fpname,lineno,line):\n if not exc:\n exc=ParsingError(fpname)\n exc.append(lineno,repr(line))\n return exc\n \n def _unify_values(self,section,vars):\n ''\n\n\n \n sectiondict={}\n try :\n sectiondict=self._sections[section]\n except KeyError:\n if section !=self.default_section:\n raise NoSectionError(section)from None\n \n vardict={}\n if vars:\n for key,value in vars.items():\n if value is not None :\n value=str(value)\n vardict[self.optionxform(key)]=value\n return _ChainMap(vardict,sectiondict,self._defaults)\n \n def _convert_to_boolean(self,value):\n ''\n \n if value.lower()not in self.BOOLEAN_STATES:\n raise ValueError('Not a boolean: %s'%value)\n return self.BOOLEAN_STATES[value.lower()]\n \n def _validate_value_types(self,*,section=\"\",option=\"\",value=\"\"):\n ''\n\n\n\n\n\n\n\n\n\n\n \n if not isinstance(section,str):\n raise TypeError(\"section names must be strings\")\n if not isinstance(option,str):\n raise TypeError(\"option keys must be strings\")\n if not self._allow_no_value or value:\n if not isinstance(value,str):\n raise TypeError(\"option values must be strings\")\n \n @property\n def converters(self):\n return self._converters\n \n \nclass ConfigParser(RawConfigParser):\n ''\n \n _DEFAULT_INTERPOLATION=BasicInterpolation()\n \n def set(self,section,option,value=None ):\n ''\n \n self._validate_value_types(option=option,value=value)\n super().set(section,option,value)\n \n def add_section(self,section):\n ''\n\n \n self._validate_value_types(section=section)\n super().add_section(section)\n \n def _read_defaults(self,defaults):\n ''\n\n\n\n \n try :\n hold_interpolation=self._interpolation\n self._interpolation=Interpolation()\n self.read_dict({self.default_section:defaults})\n finally :\n self._interpolation=hold_interpolation\n \n \nclass SafeConfigParser(ConfigParser):\n ''\n \n def __init__(self,*args,**kwargs):\n super().__init__(*args,**kwargs)\n warnings.warn(\n \"The SafeConfigParser class has been renamed to ConfigParser \"\n \"in Python 3.2. This alias will be removed in future versions.\"\n \" Use ConfigParser directly instead.\",\n DeprecationWarning,stacklevel=2\n )\n \n \nclass SectionProxy(MutableMapping):\n ''\n \n def __init__(self,parser,name):\n ''\n self._parser=parser\n self._name=name\n for conv in parser.converters:\n key='get'+conv\n getter=functools.partial(self.get,_impl=getattr(parser,key))\n setattr(self,key,getter)\n \n def __repr__(self):\n return ''.format(self._name)\n \n def __getitem__(self,key):\n if not self._parser.has_option(self._name,key):\n raise KeyError(key)\n return self._parser.get(self._name,key)\n \n def __setitem__(self,key,value):\n self._parser._validate_value_types(option=key,value=value)\n return self._parser.set(self._name,key,value)\n \n def __delitem__(self,key):\n if not (self._parser.has_option(self._name,key)and\n self._parser.remove_option(self._name,key)):\n raise KeyError(key)\n \n def __contains__(self,key):\n return self._parser.has_option(self._name,key)\n \n def __len__(self):\n return len(self._options())\n \n def __iter__(self):\n return self._options().__iter__()\n \n def _options(self):\n if self._name !=self._parser.default_section:\n return self._parser.options(self._name)\n else :\n return self._parser.defaults()\n \n @property\n def parser(self):\n \n return self._parser\n \n @property\n def name(self):\n \n return self._name\n \n def get(self,option,fallback=None ,*,raw=False ,vars=None ,\n _impl=None ,**kwargs):\n ''\n\n\n\n\n \n \n \n if not _impl:\n _impl=self._parser.get\n return _impl(self._name,option,raw=raw,vars=vars,\n fallback=fallback,**kwargs)\n \n \nclass ConverterMapping(MutableMapping):\n ''\n\n\n\n\n \n \n GETTERCRE=re.compile(r\"^get(?P.+)$\")\n \n def __init__(self,parser):\n self._parser=parser\n self._data={}\n for getter in dir(self._parser):\n m=self.GETTERCRE.match(getter)\n if not m or not callable(getattr(self._parser,getter)):\n continue\n self._data[m.group('name')]=None\n \n def __getitem__(self,key):\n return self._data[key]\n \n def __setitem__(self,key,value):\n try :\n k='get'+key\n except TypeError:\n raise ValueError('Incompatible key: {} (type: {})'\n ''.format(key,type(key)))\n if k =='get':\n raise ValueError('Incompatible key: cannot use \"\" as a name')\n self._data[key]=value\n func=functools.partial(self._parser._get_conv,conv=value)\n func.converter=value\n setattr(self._parser,k,func)\n for proxy in self._parser.values():\n getter=functools.partial(proxy.get,_impl=func)\n setattr(proxy,k,getter)\n \n def __delitem__(self,key):\n try :\n k='get'+(key or None )\n except TypeError:\n raise KeyError(key)\n del self._data[key]\n for inst in itertools.chain((self._parser,),self._parser.values()):\n try :\n delattr(inst,k)\n except AttributeError:\n \n \n continue\n \n def __iter__(self):\n return iter(self._data)\n \n def __len__(self):\n return len(self._data)\n", ["collections", "collections.abc", "functools", "io", "itertools", "os", "re", "sys", "warnings"]], "contextlib": [".py", "''\nimport abc\nimport sys\nimport _collections_abc\nfrom collections import deque\nfrom functools import wraps\nfrom types import MethodType\n\n__all__=[\"asynccontextmanager\",\"contextmanager\",\"closing\",\"nullcontext\",\n\"AbstractContextManager\",\"AbstractAsyncContextManager\",\n\"AsyncExitStack\",\"ContextDecorator\",\"ExitStack\",\n\"redirect_stdout\",\"redirect_stderr\",\"suppress\"]\n\n\nclass AbstractContextManager(abc.ABC):\n\n ''\n \n def __enter__(self):\n ''\n return self\n \n @abc.abstractmethod\n def __exit__(self,exc_type,exc_value,traceback):\n ''\n return None\n \n @classmethod\n def __subclasshook__(cls,C):\n if cls is AbstractContextManager:\n return _collections_abc._check_methods(C,\"__enter__\",\"__exit__\")\n return NotImplemented\n \n \nclass AbstractAsyncContextManager(abc.ABC):\n\n ''\n \n async def __aenter__(self):\n ''\n return self\n \n @abc.abstractmethod\n async def __aexit__(self,exc_type,exc_value,traceback):\n ''\n return None\n \n @classmethod\n def __subclasshook__(cls,C):\n if cls is AbstractAsyncContextManager:\n return _collections_abc._check_methods(C,\"__aenter__\",\n \"__aexit__\")\n return NotImplemented\n \n \nclass ContextDecorator(object):\n ''\n \n def _recreate_cm(self):\n ''\n\n\n\n\n\n\n\n \n return self\n \n def __call__(self,func):\n @wraps(func)\n def inner(*args,**kwds):\n with self._recreate_cm():\n return func(*args,**kwds)\n return inner\n \n \nclass _GeneratorContextManagerBase:\n ''\n \n def __init__(self,func,args,kwds):\n self.gen=func(*args,**kwds)\n self.func,self.args,self.kwds=func,args,kwds\n \n doc=getattr(func,\"__doc__\",None )\n if doc is None :\n doc=type(self).__doc__\n self.__doc__=doc\n \n \n \n \n \n \n \nclass _GeneratorContextManager(_GeneratorContextManagerBase,\nAbstractContextManager,\nContextDecorator):\n ''\n \n def _recreate_cm(self):\n \n \n \n return self.__class__(self.func,self.args,self.kwds)\n \n def __enter__(self):\n \n \n del self.args,self.kwds,self.func\n try :\n return next(self.gen)\n except StopIteration:\n raise RuntimeError(\"generator didn't yield\")from None\n \n def __exit__(self,type,value,traceback):\n if type is None :\n try :\n next(self.gen)\n except StopIteration:\n return False\n else :\n raise RuntimeError(\"generator didn't stop\")\n else :\n if value is None :\n \n \n value=type()\n try :\n self.gen.throw(type,value,traceback)\n except StopIteration as exc:\n \n \n \n return exc is not value\n except RuntimeError as exc:\n \n if exc is value:\n return False\n \n \n \n if type is StopIteration and exc.__cause__ is value:\n return False\n raise\n except :\n \n \n \n \n \n \n \n \n \n \n \n if sys.exc_info()[1]is value:\n return False\n raise\n raise RuntimeError(\"generator didn't stop after throw()\")\n \n \nclass _AsyncGeneratorContextManager(_GeneratorContextManagerBase,\nAbstractAsyncContextManager):\n ''\n \n async def __aenter__(self):\n try :\n return await self.gen.__anext__()\n except StopAsyncIteration:\n raise RuntimeError(\"generator didn't yield\")from None\n \n async def __aexit__(self,typ,value,traceback):\n if typ is None :\n try :\n await self.gen.__anext__()\n except StopAsyncIteration:\n return\n else :\n raise RuntimeError(\"generator didn't stop\")\n else :\n if value is None :\n value=typ()\n \n \n try :\n await self.gen.athrow(typ,value,traceback)\n raise RuntimeError(\"generator didn't stop after athrow()\")\n except StopAsyncIteration as exc:\n return exc is not value\n except RuntimeError as exc:\n if exc is value:\n return False\n \n \n \n \n \n \n if isinstance(value,(StopIteration,StopAsyncIteration)):\n if exc.__cause__ is value:\n return False\n raise\n except BaseException as exc:\n if exc is not value:\n raise\n \n \ndef contextmanager(func):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n @wraps(func)\n def helper(*args,**kwds):\n return _GeneratorContextManager(func,args,kwds)\n return helper\n \n \ndef asynccontextmanager(func):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n @wraps(func)\n def helper(*args,**kwds):\n return _AsyncGeneratorContextManager(func,args,kwds)\n return helper\n \n \nclass closing(AbstractContextManager):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n def __init__(self,thing):\n self.thing=thing\n def __enter__(self):\n return self.thing\n def __exit__(self,*exc_info):\n self.thing.close()\n \n \nclass _RedirectStream(AbstractContextManager):\n\n _stream=None\n \n def __init__(self,new_target):\n self._new_target=new_target\n \n self._old_targets=[]\n \n def __enter__(self):\n self._old_targets.append(getattr(sys,self._stream))\n setattr(sys,self._stream,self._new_target)\n return self._new_target\n \n def __exit__(self,exctype,excinst,exctb):\n setattr(sys,self._stream,self._old_targets.pop())\n \n \nclass redirect_stdout(_RedirectStream):\n ''\n\n\n\n\n\n\n\n\n\n \n \n _stream=\"stdout\"\n \n \nclass redirect_stderr(_RedirectStream):\n ''\n \n _stream=\"stderr\"\n \n \nclass suppress(AbstractContextManager):\n ''\n\n\n\n\n\n\n\n \n \n def __init__(self,*exceptions):\n self._exceptions=exceptions\n \n def __enter__(self):\n pass\n \n def __exit__(self,exctype,excinst,exctb):\n \n \n \n \n \n \n \n \n \n return exctype is not None and issubclass(exctype,self._exceptions)\n \n \nclass _BaseExitStack:\n ''\n \n @staticmethod\n def _create_exit_wrapper(cm,cm_exit):\n return MethodType(cm_exit,cm)\n \n @staticmethod\n def _create_cb_wrapper(callback,/,*args,**kwds):\n def _exit_wrapper(exc_type,exc,tb):\n callback(*args,**kwds)\n return _exit_wrapper\n \n def __init__(self):\n self._exit_callbacks=deque()\n \n def pop_all(self):\n ''\n new_stack=type(self)()\n new_stack._exit_callbacks=self._exit_callbacks\n self._exit_callbacks=deque()\n return new_stack\n \n def push(self,exit):\n ''\n\n\n\n\n \n \n \n _cb_type=type(exit)\n \n try :\n exit_method=_cb_type.__exit__\n except AttributeError:\n \n self._push_exit_callback(exit)\n else :\n self._push_cm_exit(exit,exit_method)\n return exit\n \n def enter_context(self,cm):\n ''\n\n\n\n \n \n \n _cm_type=type(cm)\n _exit=_cm_type.__exit__\n result=_cm_type.__enter__(cm)\n self._push_cm_exit(cm,_exit)\n return result\n \n def callback(*args,**kwds):\n ''\n\n\n \n if len(args)>=2:\n self,callback,*args=args\n elif not args:\n raise TypeError(\"descriptor 'callback' of '_BaseExitStack' object \"\n \"needs an argument\")\n elif 'callback'in kwds:\n callback=kwds.pop('callback')\n self,*args=args\n import warnings\n warnings.warn(\"Passing 'callback' as keyword argument is deprecated\",\n DeprecationWarning,stacklevel=2)\n else :\n raise TypeError('callback expected at least 1 positional argument, '\n 'got %d'%(len(args)-1))\n \n _exit_wrapper=self._create_cb_wrapper(callback,*args,**kwds)\n \n \n \n _exit_wrapper.__wrapped__=callback\n self._push_exit_callback(_exit_wrapper)\n return callback\n callback.__text_signature__='($self, callback, /, *args, **kwds)'\n \n def _push_cm_exit(self,cm,cm_exit):\n ''\n _exit_wrapper=self._create_exit_wrapper(cm,cm_exit)\n self._push_exit_callback(_exit_wrapper,True )\n \n def _push_exit_callback(self,callback,is_sync=True ):\n self._exit_callbacks.append((is_sync,callback))\n \n \n \nclass ExitStack(_BaseExitStack,AbstractContextManager):\n ''\n\n\n\n\n\n\n\n \n \n def __enter__(self):\n return self\n \n def __exit__(self,*exc_details):\n received_exc=exc_details[0]is not None\n \n \n \n frame_exc=sys.exc_info()[1]\n def _fix_exception_context(new_exc,old_exc):\n \n while 1:\n exc_context=new_exc.__context__\n if exc_context is old_exc:\n \n return\n if exc_context is None or exc_context is frame_exc:\n break\n new_exc=exc_context\n \n \n new_exc.__context__=old_exc\n \n \n \n suppressed_exc=False\n pending_raise=False\n while self._exit_callbacks:\n is_sync,cb=self._exit_callbacks.pop()\n assert is_sync\n try :\n if cb(*exc_details):\n suppressed_exc=True\n pending_raise=False\n exc_details=(None ,None ,None )\n except :\n new_exc_details=sys.exc_info()\n \n _fix_exception_context(new_exc_details[1],exc_details[1])\n pending_raise=True\n exc_details=new_exc_details\n if pending_raise:\n try :\n \n \n fixed_ctx=exc_details[1].__context__\n raise exc_details[1]\n except BaseException:\n exc_details[1].__context__=fixed_ctx\n raise\n return received_exc and suppressed_exc\n \n def close(self):\n ''\n self.__exit__(None ,None ,None )\n \n \n \nclass AsyncExitStack(_BaseExitStack,AbstractAsyncContextManager):\n ''\n\n\n\n\n\n\n\n\n\n \n \n @staticmethod\n def _create_async_exit_wrapper(cm,cm_exit):\n return MethodType(cm_exit,cm)\n \n @staticmethod\n def _create_async_cb_wrapper(callback,/,*args,**kwds):\n async def _exit_wrapper(exc_type,exc,tb):\n await callback(*args,**kwds)\n return _exit_wrapper\n \n async def enter_async_context(self,cm):\n ''\n\n\n\n \n _cm_type=type(cm)\n _exit=_cm_type.__aexit__\n result=await _cm_type.__aenter__(cm)\n self._push_async_cm_exit(cm,_exit)\n return result\n \n def push_async_exit(self,exit):\n ''\n\n\n\n\n\n \n _cb_type=type(exit)\n try :\n exit_method=_cb_type.__aexit__\n except AttributeError:\n \n self._push_exit_callback(exit,False )\n else :\n self._push_async_cm_exit(exit,exit_method)\n return exit\n \n def push_async_callback(*args,**kwds):\n ''\n\n\n \n if len(args)>=2:\n self,callback,*args=args\n elif not args:\n raise TypeError(\"descriptor 'push_async_callback' of \"\n \"'AsyncExitStack' object needs an argument\")\n elif 'callback'in kwds:\n callback=kwds.pop('callback')\n self,*args=args\n import warnings\n warnings.warn(\"Passing 'callback' as keyword argument is deprecated\",\n DeprecationWarning,stacklevel=2)\n else :\n raise TypeError('push_async_callback expected at least 1 '\n 'positional argument, got %d'%(len(args)-1))\n \n _exit_wrapper=self._create_async_cb_wrapper(callback,*args,**kwds)\n \n \n \n _exit_wrapper.__wrapped__=callback\n self._push_exit_callback(_exit_wrapper,False )\n return callback\n push_async_callback.__text_signature__='($self, callback, /, *args, **kwds)'\n \n async def aclose(self):\n ''\n await self.__aexit__(None ,None ,None )\n \n def _push_async_cm_exit(self,cm,cm_exit):\n ''\n \n _exit_wrapper=self._create_async_exit_wrapper(cm,cm_exit)\n self._push_exit_callback(_exit_wrapper,False )\n \n async def __aenter__(self):\n return self\n \n async def __aexit__(self,*exc_details):\n received_exc=exc_details[0]is not None\n \n \n \n frame_exc=sys.exc_info()[1]\n def _fix_exception_context(new_exc,old_exc):\n \n while 1:\n exc_context=new_exc.__context__\n if exc_context is old_exc:\n \n return\n if exc_context is None or exc_context is frame_exc:\n break\n new_exc=exc_context\n \n \n new_exc.__context__=old_exc\n \n \n \n suppressed_exc=False\n pending_raise=False\n while self._exit_callbacks:\n is_sync,cb=self._exit_callbacks.pop()\n try :\n if is_sync:\n cb_suppress=cb(*exc_details)\n else :\n cb_suppress=await cb(*exc_details)\n \n if cb_suppress:\n suppressed_exc=True\n pending_raise=False\n exc_details=(None ,None ,None )\n except :\n new_exc_details=sys.exc_info()\n \n _fix_exception_context(new_exc_details[1],exc_details[1])\n pending_raise=True\n exc_details=new_exc_details\n if pending_raise:\n try :\n \n \n fixed_ctx=exc_details[1].__context__\n raise exc_details[1]\n except BaseException:\n exc_details[1].__context__=fixed_ctx\n raise\n return received_exc and suppressed_exc\n \n \nclass nullcontext(AbstractContextManager):\n ''\n\n\n\n\n\n\n\n \n \n def __init__(self,enter_result=None ):\n self.enter_result=enter_result\n \n def __enter__(self):\n return self.enter_result\n \n def __exit__(self,*excinfo):\n pass\n", ["_collections_abc", "abc", "collections", "functools", "sys", "types", "warnings"]], "contextvars": [".py", "from _contextvars import Context,ContextVar,Token,copy_context\n\n\n__all__=('Context','ContextVar','Token','copy_context')\n", ["_contextvars"]], "copy": [".py", "''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport types\nimport weakref\nfrom copyreg import dispatch_table\n\nclass Error(Exception):\n pass\nerror=Error\n\ntry :\n from org.python.core import PyStringMap\nexcept ImportError:\n PyStringMap=None\n \n__all__=[\"Error\",\"copy\",\"deepcopy\"]\n\ndef copy(x):\n ''\n\n\n \n \n cls=type(x)\n \n copier=_copy_dispatch.get(cls)\n if copier:\n return copier(x)\n \n if issubclass(cls,type):\n \n return _copy_immutable(x)\n \n copier=getattr(cls,\"__copy__\",None )\n if copier is not None :\n return copier(x)\n \n reductor=dispatch_table.get(cls)\n if reductor is not None :\n rv=reductor(x)\n else :\n reductor=getattr(x,\"__reduce_ex__\",None )\n if reductor is not None :\n rv=reductor(4)\n else :\n reductor=getattr(x,\"__reduce__\",None )\n if reductor:\n rv=reductor()\n else :\n raise Error(\"un(shallow)copyable object of type %s\"%cls)\n \n if isinstance(rv,str):\n return x\n return _reconstruct(x,None ,*rv)\n \n \n_copy_dispatch=d={}\n\ndef _copy_immutable(x):\n return x\nfor t in (type(None ),int,float,bool,complex,str,tuple,\nbytes,frozenset,type,range,slice,\ntypes.BuiltinFunctionType,type(Ellipsis),type(NotImplemented),\ntypes.FunctionType,weakref.ref):\n d[t]=_copy_immutable\nt=getattr(types,\"CodeType\",None )\nif t is not None :\n d[t]=_copy_immutable\n \nd[list]=list.copy\nd[dict]=dict.copy\nd[set]=set.copy\nd[bytearray]=bytearray.copy\n\nif PyStringMap is not None :\n d[PyStringMap]=PyStringMap.copy\n \ndel d,t\n\ndef deepcopy(x,memo=None ,_nil=[]):\n ''\n\n\n \n \n if memo is None :\n memo={}\n \n d=id(x)\n y=memo.get(d,_nil)\n if y is not _nil:\n return y\n \n cls=type(x)\n \n copier=_deepcopy_dispatch.get(cls)\n if copier is not None :\n y=copier(x,memo)\n else :\n if issubclass(cls,type):\n y=_deepcopy_atomic(x,memo)\n else :\n copier=getattr(x,\"__deepcopy__\",None )\n if copier is not None :\n y=copier(memo)\n else :\n reductor=dispatch_table.get(cls)\n if reductor:\n rv=reductor(x)\n else :\n reductor=getattr(x,\"__reduce_ex__\",None )\n if reductor is not None :\n rv=reductor(4)\n else :\n reductor=getattr(x,\"__reduce__\",None )\n if reductor:\n rv=reductor()\n else :\n raise Error(\n \"un(deep)copyable object of type %s\"%cls)\n if isinstance(rv,str):\n y=x\n else :\n y=_reconstruct(x,memo,*rv)\n \n \n if y is not x:\n memo[d]=y\n _keep_alive(x,memo)\n return y\n \n_deepcopy_dispatch=d={}\n\ndef _deepcopy_atomic(x,memo):\n return x\nd[type(None )]=_deepcopy_atomic\nd[type(Ellipsis)]=_deepcopy_atomic\nd[type(NotImplemented)]=_deepcopy_atomic\nd[int]=_deepcopy_atomic\nd[float]=_deepcopy_atomic\nd[bool]=_deepcopy_atomic\nd[complex]=_deepcopy_atomic\nd[bytes]=_deepcopy_atomic\nd[str]=_deepcopy_atomic\nd[types.CodeType]=_deepcopy_atomic\nd[type]=_deepcopy_atomic\nd[types.BuiltinFunctionType]=_deepcopy_atomic\nd[types.FunctionType]=_deepcopy_atomic\nd[weakref.ref]=_deepcopy_atomic\n\ndef _deepcopy_list(x,memo,deepcopy=deepcopy):\n y=[]\n memo[id(x)]=y\n append=y.append\n for a in x:\n append(deepcopy(a,memo))\n return y\nd[list]=_deepcopy_list\n\ndef _deepcopy_tuple(x,memo,deepcopy=deepcopy):\n y=[deepcopy(a,memo)for a in x]\n \n \n try :\n return memo[id(x)]\n except KeyError:\n pass\n for k,j in zip(x,y):\n if k is not j:\n y=tuple(y)\n break\n else :\n y=x\n return y\nd[tuple]=_deepcopy_tuple\n\ndef _deepcopy_dict(x,memo,deepcopy=deepcopy):\n y={}\n memo[id(x)]=y\n for key,value in x.items():\n y[deepcopy(key,memo)]=deepcopy(value,memo)\n return y\nd[dict]=_deepcopy_dict\nif PyStringMap is not None :\n d[PyStringMap]=_deepcopy_dict\n \ndef _deepcopy_method(x,memo):\n return type(x)(x.__func__,deepcopy(x.__self__,memo))\nd[types.MethodType]=_deepcopy_method\n\ndel d\n\ndef _keep_alive(x,memo):\n ''\n\n\n\n\n\n\n\n \n try :\n memo[id(memo)].append(x)\n except KeyError:\n \n memo[id(memo)]=[x]\n \ndef _reconstruct(x,memo,func,args,\nstate=None ,listiter=None ,dictiter=None ,\ndeepcopy=deepcopy):\n deep=memo is not None\n if deep and args:\n args=(deepcopy(arg,memo)for arg in args)\n y=func(*args)\n if deep:\n memo[id(x)]=y\n \n if state is not None :\n if deep:\n state=deepcopy(state,memo)\n if hasattr(y,'__setstate__'):\n y.__setstate__(state)\n else :\n if isinstance(state,tuple)and len(state)==2:\n state,slotstate=state\n else :\n slotstate=None\n if state is not None :\n y.__dict__.update(state)\n if slotstate is not None :\n for key,value in slotstate.items():\n setattr(y,key,value)\n \n if listiter is not None :\n if deep:\n for item in listiter:\n item=deepcopy(item,memo)\n y.append(item)\n else :\n for item in listiter:\n y.append(item)\n if dictiter is not None :\n if deep:\n for key,value in dictiter:\n key=deepcopy(key,memo)\n value=deepcopy(value,memo)\n y[key]=value\n else :\n for key,value in dictiter:\n y[key]=value\n return y\n \ndel types,weakref,PyStringMap\n", ["copyreg", "org.python.core", "types", "weakref"]], "copyreg": [".py", "''\n\n\n\n\n\n__all__=[\"pickle\",\"constructor\",\n\"add_extension\",\"remove_extension\",\"clear_extension_cache\"]\n\ndispatch_table={}\n\ndef pickle(ob_type,pickle_function,constructor_ob=None ):\n if not callable(pickle_function):\n raise TypeError(\"reduction functions must be callable\")\n dispatch_table[ob_type]=pickle_function\n \n \n \n if constructor_ob is not None :\n constructor(constructor_ob)\n \ndef constructor(object):\n if not callable(object):\n raise TypeError(\"constructors must be callable\")\n \n \n \ntry :\n complex\nexcept NameError:\n pass\nelse :\n\n def pickle_complex(c):\n return complex,(c.real,c.imag)\n \n pickle(complex,pickle_complex,complex)\n \n \n \ndef _reconstructor(cls,base,state):\n if base is object:\n obj=object.__new__(cls)\n else :\n obj=base.__new__(cls,state)\n if base.__init__ !=object.__init__:\n base.__init__(obj,state)\n return obj\n \n_HEAPTYPE=1 <<9\n\n\n\ndef _reduce_ex(self,proto):\n assert proto <2\n cls=self.__class__\n for base in cls.__mro__:\n if hasattr(base,'__flags__')and not base.__flags__&_HEAPTYPE:\n break\n else :\n base=object\n if base is object:\n state=None\n else :\n if base is cls:\n raise TypeError(f\"cannot pickle {cls.__name__!r} object\")\n state=base(self)\n args=(cls,base,state)\n try :\n getstate=self.__getstate__\n except AttributeError:\n if getattr(self,\"__slots__\",None ):\n raise TypeError(f\"cannot pickle {cls.__name__!r} object: \"\n f\"a class that defines __slots__ without \"\n f\"defining __getstate__ cannot be pickled \"\n f\"with protocol {proto}\")from None\n try :\n dict=self.__dict__\n except AttributeError:\n dict=None\n else :\n dict=getstate()\n if dict:\n return _reconstructor,args,dict\n else :\n return _reconstructor,args\n \n \n \ndef __newobj__(cls,*args):\n return cls.__new__(cls,*args)\n \ndef __newobj_ex__(cls,args,kwargs):\n ''\n\n \n return cls.__new__(cls,*args,**kwargs)\n \ndef _slotnames(cls):\n ''\n\n\n\n\n\n\n\n \n \n \n names=cls.__dict__.get(\"__slotnames__\")\n if names is not None :\n return names\n \n \n names=[]\n if not hasattr(cls,\"__slots__\"):\n \n pass\n else :\n \n for c in cls.__mro__:\n if \"__slots__\"in c.__dict__:\n slots=c.__dict__['__slots__']\n \n if isinstance(slots,str):\n slots=(slots,)\n for name in slots:\n \n if name in (\"__dict__\",\"__weakref__\"):\n continue\n \n elif name.startswith('__')and not name.endswith('__'):\n stripped=c.__name__.lstrip('_')\n if stripped:\n names.append('_%s%s'%(stripped,name))\n else :\n names.append(name)\n else :\n names.append(name)\n \n \n try :\n cls.__slotnames__=names\n except :\n pass\n \n return names\n \n \n \n \n \n \n \n \n \n \n_extension_registry={}\n_inverted_registry={}\n_extension_cache={}\n\n\n\ndef add_extension(module,name,code):\n ''\n code=int(code)\n if not 1 <=code <=0x7fffffff:\n raise ValueError(\"code out of range\")\n key=(module,name)\n if (_extension_registry.get(key)==code and\n _inverted_registry.get(code)==key):\n return\n if key in _extension_registry:\n raise ValueError(\"key %s is already registered with code %s\"%\n (key,_extension_registry[key]))\n if code in _inverted_registry:\n raise ValueError(\"code %s is already in use for key %s\"%\n (code,_inverted_registry[code]))\n _extension_registry[key]=code\n _inverted_registry[code]=key\n \ndef remove_extension(module,name,code):\n ''\n key=(module,name)\n if (_extension_registry.get(key)!=code or\n _inverted_registry.get(code)!=key):\n raise ValueError(\"key %s is not registered with code %s\"%\n (key,code))\n del _extension_registry[key]\n del _inverted_registry[code]\n if code in _extension_cache:\n del _extension_cache[code]\n \ndef clear_extension_cache():\n _extension_cache.clear()\n \n \n \n \n \n \n \n \n \n \n \n \n \n", []], "csv": [".py", "\n\"\"\"\ncsv.py - read/write/investigate CSV files\n\"\"\"\n\nimport re\nfrom _csv import Error,__version__,writer,reader,register_dialect,\\\nunregister_dialect,get_dialect,list_dialects,\\\nfield_size_limit,\\\nQUOTE_MINIMAL,QUOTE_ALL,QUOTE_NONNUMERIC,QUOTE_NONE,\\\n__doc__\nfrom _csv import Dialect as _Dialect\n\nfrom io import StringIO\n\n__all__=[\"QUOTE_MINIMAL\",\"QUOTE_ALL\",\"QUOTE_NONNUMERIC\",\"QUOTE_NONE\",\n\"Error\",\"Dialect\",\"__doc__\",\"excel\",\"excel_tab\",\n\"field_size_limit\",\"reader\",\"writer\",\n\"register_dialect\",\"get_dialect\",\"list_dialects\",\"Sniffer\",\n\"unregister_dialect\",\"__version__\",\"DictReader\",\"DictWriter\",\n\"unix_dialect\"]\n\nclass Dialect:\n ''\n\n\n\n\n\n \n _name=\"\"\n _valid=False\n \n delimiter=None\n quotechar=None\n escapechar=None\n doublequote=None\n skipinitialspace=None\n lineterminator=None\n quoting=None\n \n def __init__(self):\n if self.__class__ !=Dialect:\n self._valid=True\n self._validate()\n \n def _validate(self):\n try :\n _Dialect(self)\n except TypeError as e:\n \n raise Error(str(e))\n \nclass excel(Dialect):\n ''\n delimiter=','\n quotechar='\"'\n doublequote=True\n skipinitialspace=False\n lineterminator='\\r\\n'\n quoting=QUOTE_MINIMAL\nregister_dialect(\"excel\",excel)\n\nclass excel_tab(excel):\n ''\n delimiter='\\t'\nregister_dialect(\"excel-tab\",excel_tab)\n\nclass unix_dialect(Dialect):\n ''\n delimiter=','\n quotechar='\"'\n doublequote=True\n skipinitialspace=False\n lineterminator='\\n'\n quoting=QUOTE_ALL\nregister_dialect(\"unix\",unix_dialect)\n\n\nclass DictReader:\n def __init__(self,f,fieldnames=None ,restkey=None ,restval=None ,\n dialect=\"excel\",*args,**kwds):\n self._fieldnames=fieldnames\n self.restkey=restkey\n self.restval=restval\n self.reader=reader(f,dialect,*args,**kwds)\n self.dialect=dialect\n self.line_num=0\n \n def __iter__(self):\n return self\n \n @property\n def fieldnames(self):\n if self._fieldnames is None :\n try :\n self._fieldnames=next(self.reader)\n except StopIteration:\n pass\n self.line_num=self.reader.line_num\n return self._fieldnames\n \n @fieldnames.setter\n def fieldnames(self,value):\n self._fieldnames=value\n \n def __next__(self):\n if self.line_num ==0:\n \n self.fieldnames\n row=next(self.reader)\n self.line_num=self.reader.line_num\n \n \n \n \n while row ==[]:\n row=next(self.reader)\n d=dict(zip(self.fieldnames,row))\n lf=len(self.fieldnames)\n lr=len(row)\n if lf lr:\n for key in self.fieldnames[lr:]:\n d[key]=self.restval\n return d\n \n \nclass DictWriter:\n def __init__(self,f,fieldnames,restval=\"\",extrasaction=\"raise\",\n dialect=\"excel\",*args,**kwds):\n self.fieldnames=fieldnames\n self.restval=restval\n if extrasaction.lower()not in (\"raise\",\"ignore\"):\n raise ValueError(\"extrasaction (%s) must be 'raise' or 'ignore'\"\n %extrasaction)\n self.extrasaction=extrasaction\n self.writer=writer(f,dialect,*args,**kwds)\n \n def writeheader(self):\n header=dict(zip(self.fieldnames,self.fieldnames))\n return self.writerow(header)\n \n def _dict_to_list(self,rowdict):\n if self.extrasaction ==\"raise\":\n wrong_fields=rowdict.keys()-self.fieldnames\n if wrong_fields:\n raise ValueError(\"dict contains fields not in fieldnames: \"\n +\", \".join([repr(x)for x in wrong_fields]))\n return (rowdict.get(key,self.restval)for key in self.fieldnames)\n \n def writerow(self,rowdict):\n return self.writer.writerow(self._dict_to_list(rowdict))\n \n def writerows(self,rowdicts):\n return self.writer.writerows(map(self._dict_to_list,rowdicts))\n \n \ntry :\n complex\nexcept NameError:\n complex=float\n \nclass Sniffer:\n ''\n\n\n \n def __init__(self):\n \n self.preferred=[',','\\t',';',' ',':']\n \n \n def sniff(self,sample,delimiters=None ):\n ''\n\n \n \n quotechar,doublequote,delimiter,skipinitialspace=\\\n self._guess_quote_and_delimiter(sample,delimiters)\n if not delimiter:\n delimiter,skipinitialspace=self._guess_delimiter(sample,\n delimiters)\n \n if not delimiter:\n raise Error(\"Could not determine delimiter\")\n \n class dialect(Dialect):\n _name=\"sniffed\"\n lineterminator='\\r\\n'\n quoting=QUOTE_MINIMAL\n \n \n dialect.doublequote=doublequote\n dialect.delimiter=delimiter\n \n dialect.quotechar=quotechar or '\"'\n dialect.skipinitialspace=skipinitialspace\n \n return dialect\n \n \n def _guess_quote_and_delimiter(self,data,delimiters):\n ''\n\n\n\n\n\n\n\n\n \n \n matches=[]\n for restr in (r'(?P[^\\w\\n\"\\'])(?P ?)(?P[\"\\']).*?(?P=quote)(?P=delim)',\n r'(?:^|\\n)(?P[\"\\']).*?(?P=quote)(?P[^\\w\\n\"\\'])(?P ?)',\n r'(?P[^\\w\\n\"\\'])(?P ?)(?P[\"\\']).*?(?P=quote)(?:$|\\n)',\n r'(?:^|\\n)(?P[\"\\']).*?(?P=quote)(?:$|\\n)'):\n regexp=re.compile(restr,re.DOTALL |re.MULTILINE)\n matches=regexp.findall(data)\n if matches:\n break\n \n if not matches:\n \n return ('',False ,None ,0)\n quotes={}\n delims={}\n spaces=0\n groupindex=regexp.groupindex\n for m in matches:\n n=groupindex['quote']-1\n key=m[n]\n if key:\n quotes[key]=quotes.get(key,0)+1\n try :\n n=groupindex['delim']-1\n key=m[n]\n except KeyError:\n continue\n if key and (delimiters is None or key in delimiters):\n delims[key]=delims.get(key,0)+1\n try :\n n=groupindex['space']-1\n except KeyError:\n continue\n if m[n]:\n spaces +=1\n \n quotechar=max(quotes,key=quotes.get)\n \n if delims:\n delim=max(delims,key=delims.get)\n skipinitialspace=delims[delim]==spaces\n if delim =='\\n':\n delim=''\n else :\n \n delim=''\n skipinitialspace=0\n \n \n \n dq_regexp=re.compile(\n r\"((%(delim)s)|^)\\W*%(quote)s[^%(delim)s\\n]*%(quote)s[^%(delim)s\\n]*%(quote)s\\W*((%(delim)s)|$)\"%\\\n {'delim':re.escape(delim),'quote':quotechar},re.MULTILINE)\n \n \n \n if dq_regexp.search(data):\n doublequote=True\n else :\n doublequote=False\n \n return (quotechar,doublequote,delim,skipinitialspace)\n \n \n def _guess_delimiter(self,data,delimiters):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n data=list(filter(None ,data.split('\\n')))\n \n ascii=[chr(c)for c in range(127)]\n \n \n chunkLength=min(10,len(data))\n iteration=0\n charFrequency={}\n modes={}\n delims={}\n start,end=0,chunkLength\n while start 1:\n modes[char]=max(items,key=lambda x:x[1])\n \n \n items.remove(modes[char])\n modes[char]=(modes[char][0],modes[char][1]\n -sum(item[1]for item in items))\n else :\n modes[char]=items[0]\n \n \n modeList=modes.items()\n total=float(min(chunkLength *iteration,len(data)))\n \n consistency=1.0\n \n threshold=0.9\n while len(delims)==0 and consistency >=threshold:\n for k,v in modeList:\n if v[0]>0 and v[1]>0:\n if ((v[1]/total)>=consistency and\n (delimiters is None or k in delimiters)):\n delims[k]=v\n consistency -=0.01\n \n if len(delims)==1:\n delim=list(delims.keys())[0]\n skipinitialspace=(data[0].count(delim)==\n data[0].count(\"%c \"%delim))\n return (delim,skipinitialspace)\n \n \n start=end\n end +=chunkLength\n \n if not delims:\n return ('',0)\n \n \n if len(delims)>1:\n for d in self.preferred:\n if d in delims.keys():\n skipinitialspace=(data[0].count(d)==\n data[0].count(\"%c \"%d))\n return (d,skipinitialspace)\n \n \n \n items=[(v,k)for (k,v)in delims.items()]\n items.sort()\n delim=items[-1][1]\n \n skipinitialspace=(data[0].count(delim)==\n data[0].count(\"%c \"%delim))\n return (delim,skipinitialspace)\n \n \n def has_header(self,sample):\n \n \n \n \n \n \n \n \n \n rdr=reader(StringIO(sample),self.sniff(sample))\n \n header=next(rdr)\n \n columns=len(header)\n columnTypes={}\n for i in range(columns):columnTypes[i]=None\n \n checked=0\n for row in rdr:\n \n if checked >20:\n break\n checked +=1\n \n if len(row)!=columns:\n continue\n \n for col in list(columnTypes.keys()):\n \n for thisType in [int,float,complex]:\n try :\n thisType(row[col])\n break\n except (ValueError,OverflowError):\n pass\n else :\n \n thisType=len(row[col])\n \n if thisType !=columnTypes[col]:\n if columnTypes[col]is None :\n columnTypes[col]=thisType\n else :\n \n \n del columnTypes[col]\n \n \n \n hasHeader=0\n for col,colType in columnTypes.items():\n if type(colType)==type(0):\n if len(header[col])!=colType:\n hasHeader +=1\n else :\n hasHeader -=1\n else :\n try :\n colType(header[col])\n except (ValueError,TypeError):\n hasHeader +=1\n else :\n hasHeader -=1\n \n return hasHeader >0\n", ["_csv", "io", "re"]], "dataclasses": [".py", "import re\nimport sys\nimport copy\nimport types\nimport inspect\nimport keyword\nimport builtins\nimport functools\nimport _thread\n\n\n__all__=['dataclass',\n'field',\n'Field',\n'FrozenInstanceError',\n'InitVar',\n'MISSING',\n\n\n'fields',\n'asdict',\n'astuple',\n'make_dataclass',\n'replace',\n'is_dataclass',\n]\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nclass FrozenInstanceError(AttributeError):pass\n\n\n\n\nclass _HAS_DEFAULT_FACTORY_CLASS:\n def __repr__(self):\n return ''\n_HAS_DEFAULT_FACTORY=_HAS_DEFAULT_FACTORY_CLASS()\n\n\n\nclass _MISSING_TYPE:\n pass\nMISSING=_MISSING_TYPE()\n\n\n\n_EMPTY_METADATA=types.MappingProxyType({})\n\n\nclass _FIELD_BASE:\n def __init__(self,name):\n self.name=name\n def __repr__(self):\n return self.name\n_FIELD=_FIELD_BASE('_FIELD')\n_FIELD_CLASSVAR=_FIELD_BASE('_FIELD_CLASSVAR')\n_FIELD_INITVAR=_FIELD_BASE('_FIELD_INITVAR')\n\n\n\n_FIELDS='__dataclass_fields__'\n\n\n\n_PARAMS='__dataclass_params__'\n\n\n\n_POST_INIT_NAME='__post_init__'\n\n\n\n\n_MODULE_IDENTIFIER_RE=re.compile(r'^(?:\\s*(\\w+)\\s*\\.)?\\s*(\\w+)')\n\nclass _InitVarMeta(type):\n def __getitem__(self,params):\n return InitVar(params)\n \nclass InitVar(metaclass=_InitVarMeta):\n __slots__=('type',)\n \n def __init__(self,type):\n self.type=type\n \n def __repr__(self):\n return f'dataclasses.InitVar[{self.type.__name__}]'\n \n \n \n \n \n \n \n \n \n \n \n \nclass Field:\n __slots__=('name',\n 'type',\n 'default',\n 'default_factory',\n 'repr',\n 'hash',\n 'init',\n 'compare',\n 'metadata',\n '_field_type',\n )\n \n def __init__(self,default,default_factory,init,repr,hash,compare,\n metadata):\n self.name=None\n self.type=None\n self.default=default\n self.default_factory=default_factory\n self.init=init\n self.repr=repr\n self.hash=hash\n self.compare=compare\n self.metadata=(_EMPTY_METADATA\n if metadata is None else\n types.MappingProxyType(metadata))\n self._field_type=None\n \n def __repr__(self):\n return ('Field('\n f'name={self.name!r},'\n f'type={self.type!r},'\n f'default={self.default!r},'\n f'default_factory={self.default_factory!r},'\n f'init={self.init!r},'\n f'repr={self.repr!r},'\n f'hash={self.hash!r},'\n f'compare={self.compare!r},'\n f'metadata={self.metadata!r},'\n f'_field_type={self._field_type}'\n ')')\n \n \n \n \n \n \n \n \n \n def __set_name__(self,owner,name):\n func=getattr(type(self.default),'__set_name__',None )\n if func:\n \n \n func(self.default,owner,name)\n \n \nclass _DataclassParams:\n __slots__=('init',\n 'repr',\n 'eq',\n 'order',\n 'unsafe_hash',\n 'frozen',\n )\n \n def __init__(self,init,repr,eq,order,unsafe_hash,frozen):\n self.init=init\n self.repr=repr\n self.eq=eq\n self.order=order\n self.unsafe_hash=unsafe_hash\n self.frozen=frozen\n \n def __repr__(self):\n return ('_DataclassParams('\n f'init={self.init!r},'\n f'repr={self.repr!r},'\n f'eq={self.eq!r},'\n f'order={self.order!r},'\n f'unsafe_hash={self.unsafe_hash!r},'\n f'frozen={self.frozen!r}'\n ')')\n \n \n \n \n \ndef field(*,default=MISSING,default_factory=MISSING,init=True ,repr=True ,\nhash=None ,compare=True ,metadata=None ):\n ''\n\n\n\n\n\n\n\n\n\n\n\n \n \n if default is not MISSING and default_factory is not MISSING:\n raise ValueError('cannot specify both default and default_factory')\n return Field(default,default_factory,init,repr,hash,compare,\n metadata)\n \n \ndef _tuple_str(obj_name,fields):\n\n\n\n\n\n if not fields:\n return '()'\n \n return f'({\",\".join([f\"{obj_name}.{f.name}\" for f in fields])},)'\n \n \n \n \ndef _recursive_repr(user_function):\n\n\n repr_running=set()\n \n @functools.wraps(user_function)\n def wrapper(self):\n key=id(self),_thread.get_ident()\n if key in repr_running:\n return '...'\n repr_running.add(key)\n try :\n result=user_function(self)\n finally :\n repr_running.discard(key)\n return result\n return wrapper\n \n \ndef _create_fn(name,args,body,*,globals=None ,locals=None ,\nreturn_type=MISSING):\n\n\n\n if locals is None :\n locals={}\n \n \n \n if globals is not None and '__builtins__'not in globals:\n globals['__builtins__']=builtins\n return_annotation=''\n if return_type is not MISSING:\n locals['_return_type']=return_type\n return_annotation='->_return_type'\n args=','.join(args)\n body='\\n'.join(f' {b}'for b in body)\n \n \n txt=f'def {name}({args}){return_annotation}:\\n{body}'\n \n exec(txt,globals,locals)\n return locals[name]\n \n \ndef _field_assign(frozen,name,value,self_name):\n\n\n\n\n\n\n if frozen:\n return f'__builtins__.object.__setattr__({self_name},{name!r},{value})'\n return f'{self_name}.{name}={value}'\n \n \ndef _field_init(f,frozen,globals,self_name):\n\n\n\n default_name=f'_dflt_{f.name}'\n if f.default_factory is not MISSING:\n if f.init:\n \n \n globals[default_name]=f.default_factory\n value=(f'{default_name}() '\n f'if {f.name} is _HAS_DEFAULT_FACTORY '\n f'else {f.name}')\n else :\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n globals[default_name]=f.default_factory\n value=f'{default_name}()'\n else :\n \n if f.init:\n if f.default is MISSING:\n \n value=f.name\n elif f.default is not MISSING:\n globals[default_name]=f.default\n value=f.name\n else :\n \n \n return None\n \n \n \n \n if f._field_type is _FIELD_INITVAR:\n return None\n \n \n return _field_assign(frozen,f.name,value,self_name)\n \n \ndef _init_param(f):\n\n\n\n\n if f.default is MISSING and f.default_factory is MISSING:\n \n \n default=''\n elif f.default is not MISSING:\n \n \n default=f'=_dflt_{f.name}'\n elif f.default_factory is not MISSING:\n \n default='=_HAS_DEFAULT_FACTORY'\n return f'{f.name}:_type_{f.name}{default}'\n \n \ndef _init_fn(fields,frozen,has_post_init,self_name):\n\n\n\n\n\n\n\n seen_default=False\n for f in fields:\n \n if f.init:\n if not (f.default is MISSING and f.default_factory is MISSING):\n seen_default=True\n elif seen_default:\n raise TypeError(f'non-default argument {f.name!r} '\n 'follows default argument')\n \n globals={'MISSING':MISSING,\n '_HAS_DEFAULT_FACTORY':_HAS_DEFAULT_FACTORY}\n \n body_lines=[]\n for f in fields:\n line=_field_init(f,frozen,globals,self_name)\n \n \n if line:\n body_lines.append(line)\n \n \n if has_post_init:\n params_str=','.join(f.name for f in fields\n if f._field_type is _FIELD_INITVAR)\n body_lines.append(f'{self_name}.{_POST_INIT_NAME}({params_str})')\n \n \n if not body_lines:\n body_lines=['pass']\n \n locals={f'_type_{f.name}':f.type for f in fields}\n return _create_fn('__init__',\n [self_name]+[_init_param(f)for f in fields if f.init],\n body_lines,\n locals=locals,\n globals=globals,\n return_type=None )\n \n \ndef _repr_fn(fields):\n fn=_create_fn('__repr__',\n ('self',),\n ['return self.__class__.__qualname__ + f\"('+\n ', '.join([f\"{f.name}={{self.{f.name}!r}}\"\n for f in fields])+\n ')\"'])\n return _recursive_repr(fn)\n \n \ndef _frozen_get_del_attr(cls,fields):\n\n\n globals={'cls':cls,\n 'FrozenInstanceError':FrozenInstanceError}\n if fields:\n fields_str='('+','.join(repr(f.name)for f in fields)+',)'\n else :\n \n fields_str='()'\n return (_create_fn('__setattr__',\n ('self','name','value'),\n (f'if type(self) is cls or name in {fields_str}:',\n ' raise FrozenInstanceError(f\"cannot assign to field {name!r}\")',\n f'super(cls, self).__setattr__(name, value)'),\n globals=globals),\n _create_fn('__delattr__',\n ('self','name'),\n (f'if type(self) is cls or name in {fields_str}:',\n ' raise FrozenInstanceError(f\"cannot delete field {name!r}\")',\n f'super(cls, self).__delattr__(name)'),\n globals=globals),\n )\n \n \ndef _cmp_fn(name,op,self_tuple,other_tuple):\n\n\n\n\n\n return _create_fn(name,\n ('self','other'),\n ['if other.__class__ is self.__class__:',\n f' return {self_tuple}{op}{other_tuple}',\n 'return NotImplemented'])\n \n \ndef _hash_fn(fields):\n self_tuple=_tuple_str('self',fields)\n return _create_fn('__hash__',\n ('self',),\n [f'return hash({self_tuple})'])\n \n \ndef _is_classvar(a_type,typing):\n\n\n return (a_type is typing.ClassVar\n or (type(a_type)is typing._GenericAlias\n and a_type.__origin__ is typing.ClassVar))\n \n \ndef _is_initvar(a_type,dataclasses):\n\n\n return (a_type is dataclasses.InitVar\n or type(a_type)is dataclasses.InitVar)\n \n \ndef _is_type(annotation,cls,a_module,a_type,is_type_predicate):\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n match=_MODULE_IDENTIFIER_RE.match(annotation)\n if match:\n ns=None\n module_name=match.group(1)\n if not module_name:\n \n \n ns=sys.modules.get(cls.__module__).__dict__\n else :\n \n module=sys.modules.get(cls.__module__)\n if module and module.__dict__.get(module_name)is a_module:\n ns=sys.modules.get(a_type.__module__).__dict__\n if ns and is_type_predicate(ns.get(match.group(2)),a_module):\n return True\n return False\n \n \ndef _get_field(cls,a_name,a_type):\n\n\n\n\n\n\n default=getattr(cls,a_name,MISSING)\n if isinstance(default,Field):\n f=default\n else :\n if isinstance(default,types.MemberDescriptorType):\n \n default=MISSING\n f=field(default=default)\n \n \n f.name=a_name\n f.type=a_type\n \n \n \n \n f._field_type=_FIELD\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n typing=sys.modules.get('typing')\n if typing:\n if (_is_classvar(a_type,typing)\n or (isinstance(f.type,str)\n and _is_type(f.type,cls,typing,typing.ClassVar,\n _is_classvar))):\n f._field_type=_FIELD_CLASSVAR\n \n \n \n if f._field_type is _FIELD:\n \n \n dataclasses=sys.modules[__name__]\n if (_is_initvar(a_type,dataclasses)\n or (isinstance(f.type,str)\n and _is_type(f.type,cls,dataclasses,dataclasses.InitVar,\n _is_initvar))):\n f._field_type=_FIELD_INITVAR\n \n \n \n \n \n \n if f._field_type in (_FIELD_CLASSVAR,_FIELD_INITVAR):\n if f.default_factory is not MISSING:\n raise TypeError(f'field {f.name} cannot have a '\n 'default factory')\n \n \n \n \n \n \n \n if f._field_type is _FIELD and isinstance(f.default,(list,dict,set)):\n raise ValueError(f'mutable default {type(f.default)} for field '\n f'{f.name} is not allowed: use default_factory')\n \n return f\n \n \ndef _set_new_attribute(cls,name,value):\n\n\n if name in cls.__dict__:\n return True\n setattr(cls,name,value)\n return False\n \n \n \n \n \n \n \ndef _hash_set_none(cls,fields):\n return None\n \ndef _hash_add(cls,fields):\n flds=[f for f in fields if (f.compare if f.hash is None else f.hash)]\n return _hash_fn(flds)\n \ndef _hash_exception(cls,fields):\n\n raise TypeError(f'Cannot overwrite attribute __hash__ '\n f'in class {cls.__name__}')\n \n \n \n \n \n \n \n \n \n \n_hash_action={(False ,False ,False ,False ):None ,\n(False ,False ,False ,True ):None ,\n(False ,False ,True ,False ):None ,\n(False ,False ,True ,True ):None ,\n(False ,True ,False ,False ):_hash_set_none,\n(False ,True ,False ,True ):None ,\n(False ,True ,True ,False ):_hash_add,\n(False ,True ,True ,True ):None ,\n(True ,False ,False ,False ):_hash_add,\n(True ,False ,False ,True ):_hash_exception,\n(True ,False ,True ,False ):_hash_add,\n(True ,False ,True ,True ):_hash_exception,\n(True ,True ,False ,False ):_hash_add,\n(True ,True ,False ,True ):_hash_exception,\n(True ,True ,True ,False ):_hash_add,\n(True ,True ,True ,True ):_hash_exception,\n}\n\n\n\n\ndef _process_class(cls,init,repr,eq,order,unsafe_hash,frozen):\n\n\n\n\n fields={}\n \n setattr(cls,_PARAMS,_DataclassParams(init,repr,eq,order,\n unsafe_hash,frozen))\n \n \n \n \n \n any_frozen_base=False\n has_dataclass_bases=False\n for b in cls.__mro__[-1:0:-1]:\n \n \n base_fields=getattr(b,_FIELDS,None )\n if base_fields:\n has_dataclass_bases=True\n for f in base_fields.values():\n fields[f.name]=f\n if getattr(b,_PARAMS).frozen:\n any_frozen_base=True\n \n \n \n \n \n \n \n \n \n \n \n \n \n cls_annotations=cls.__dict__.get('__annotations__',{})\n \n \n \n \n cls_fields=[_get_field(cls,name,type)\n for name,type in cls_annotations.items()]\n for f in cls_fields:\n fields[f.name]=f\n \n \n \n \n \n if isinstance(getattr(cls,f.name,None ),Field):\n if f.default is MISSING:\n \n \n \n \n \n \n delattr(cls,f.name)\n else :\n setattr(cls,f.name,f.default)\n \n \n for name,value in cls.__dict__.items():\n if isinstance(value,Field)and not name in cls_annotations:\n raise TypeError(f'{name!r} is a field but has no type annotation')\n \n \n if has_dataclass_bases:\n \n if any_frozen_base and not frozen:\n raise TypeError('cannot inherit non-frozen dataclass from a '\n 'frozen one')\n \n \n if not any_frozen_base and frozen:\n raise TypeError('cannot inherit frozen dataclass from a '\n 'non-frozen one')\n \n \n \n setattr(cls,_FIELDS,fields)\n \n \n \n \n \n \n class_hash=cls.__dict__.get('__hash__',MISSING)\n has_explicit_hash=not (class_hash is MISSING or\n (class_hash is None and '__eq__'in cls.__dict__))\n \n \n \n if order and not eq:\n raise ValueError('eq must be true if order is true')\n \n if init:\n \n has_post_init=hasattr(cls,_POST_INIT_NAME)\n \n \n flds=[f for f in fields.values()\n if f._field_type in (_FIELD,_FIELD_INITVAR)]\n _set_new_attribute(cls,'__init__',\n _init_fn(flds,\n frozen,\n has_post_init,\n \n \n \n '__dataclass_self__'if 'self'in fields\n else 'self',\n ))\n \n \n \n field_list=[f for f in fields.values()if f._field_type is _FIELD]\n \n if repr:\n flds=[f for f in field_list if f.repr]\n _set_new_attribute(cls,'__repr__',_repr_fn(flds))\n \n if eq:\n \n \n flds=[f for f in field_list if f.compare]\n self_tuple=_tuple_str('self',flds)\n other_tuple=_tuple_str('other',flds)\n _set_new_attribute(cls,'__eq__',\n _cmp_fn('__eq__','==',\n self_tuple,other_tuple))\n \n if order:\n \n flds=[f for f in field_list if f.compare]\n self_tuple=_tuple_str('self',flds)\n other_tuple=_tuple_str('other',flds)\n for name,op in [('__lt__','<'),\n ('__le__','<='),\n ('__gt__','>'),\n ('__ge__','>='),\n ]:\n if _set_new_attribute(cls,name,\n _cmp_fn(name,op,self_tuple,other_tuple)):\n raise TypeError(f'Cannot overwrite attribute {name} '\n f'in class {cls.__name__}. Consider using '\n 'functools.total_ordering')\n \n if frozen:\n for fn in _frozen_get_del_attr(cls,field_list):\n if _set_new_attribute(cls,fn.__name__,fn):\n raise TypeError(f'Cannot overwrite attribute {fn.__name__} '\n f'in class {cls.__name__}')\n \n \n hash_action=_hash_action[bool(unsafe_hash),\n bool(eq),\n bool(frozen),\n has_explicit_hash]\n if hash_action:\n \n \n cls.__hash__=hash_action(cls,field_list)\n \n if not getattr(cls,'__doc__'):\n \n cls.__doc__=(cls.__name__+\n str(inspect.signature(cls)).replace(' -> None',''))\n \n return cls\n \n \ndef dataclass(cls=None ,/,*,init=True ,repr=True ,eq=True ,order=False ,\nunsafe_hash=False ,frozen=False ):\n ''\n\n\n\n\n\n\n\n\n\n \n \n def wrap(cls):\n return _process_class(cls,init,repr,eq,order,unsafe_hash,frozen)\n \n \n if cls is None :\n \n return wrap\n \n \n return wrap(cls)\n \n \ndef fields(class_or_instance):\n ''\n\n\n\n \n \n \n try :\n fields=getattr(class_or_instance,_FIELDS)\n except AttributeError:\n raise TypeError('must be called with a dataclass type or instance')\n \n \n \n return tuple(f for f in fields.values()if f._field_type is _FIELD)\n \n \ndef _is_dataclass_instance(obj):\n ''\n return hasattr(type(obj),_FIELDS)\n \n \ndef is_dataclass(obj):\n ''\n \n cls=obj if isinstance(obj,type)else type(obj)\n return hasattr(cls,_FIELDS)\n \n \ndef asdict(obj,*,dict_factory=dict):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n if not _is_dataclass_instance(obj):\n raise TypeError(\"asdict() should be called on dataclass instances\")\n return _asdict_inner(obj,dict_factory)\n \n \ndef _asdict_inner(obj,dict_factory):\n if _is_dataclass_instance(obj):\n result=[]\n for f in fields(obj):\n value=_asdict_inner(getattr(obj,f.name),dict_factory)\n result.append((f.name,value))\n return dict_factory(result)\n elif isinstance(obj,tuple)and hasattr(obj,'_fields'):\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n return type(obj)(*[_asdict_inner(v,dict_factory)for v in obj])\n elif isinstance(obj,(list,tuple)):\n \n \n \n return type(obj)(_asdict_inner(v,dict_factory)for v in obj)\n elif isinstance(obj,dict):\n return type(obj)((_asdict_inner(k,dict_factory),\n _asdict_inner(v,dict_factory))\n for k,v in obj.items())\n else :\n return copy.deepcopy(obj)\n \n \ndef astuple(obj,*,tuple_factory=tuple):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n if not _is_dataclass_instance(obj):\n raise TypeError(\"astuple() should be called on dataclass instances\")\n return _astuple_inner(obj,tuple_factory)\n \n \ndef _astuple_inner(obj,tuple_factory):\n if _is_dataclass_instance(obj):\n result=[]\n for f in fields(obj):\n value=_astuple_inner(getattr(obj,f.name),tuple_factory)\n result.append(value)\n return tuple_factory(result)\n elif isinstance(obj,tuple)and hasattr(obj,'_fields'):\n \n \n \n \n \n \n return type(obj)(*[_astuple_inner(v,tuple_factory)for v in obj])\n elif isinstance(obj,(list,tuple)):\n \n \n \n return type(obj)(_astuple_inner(v,tuple_factory)for v in obj)\n elif isinstance(obj,dict):\n return type(obj)((_astuple_inner(k,tuple_factory),_astuple_inner(v,tuple_factory))\n for k,v in obj.items())\n else :\n return copy.deepcopy(obj)\n \n \ndef make_dataclass(cls_name,fields,*,bases=(),namespace=None ,init=True ,\nrepr=True ,eq=True ,order=False ,unsafe_hash=False ,\nfrozen=False ):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n if namespace is None :\n namespace={}\n else :\n \n namespace=namespace.copy()\n \n \n \n seen=set()\n anns={}\n for item in fields:\n if isinstance(item,str):\n name=item\n tp='typing.Any'\n elif len(item)==2:\n name,tp,=item\n elif len(item)==3:\n name,tp,spec=item\n namespace[name]=spec\n else :\n raise TypeError(f'Invalid field: {item!r}')\n \n if not isinstance(name,str)or not name.isidentifier():\n raise TypeError(f'Field names must be valid identifiers: {name!r}')\n if keyword.iskeyword(name):\n raise TypeError(f'Field names must not be keywords: {name!r}')\n if name in seen:\n raise TypeError(f'Field name duplicated: {name!r}')\n \n seen.add(name)\n anns[name]=tp\n \n namespace['__annotations__']=anns\n \n \n cls=types.new_class(cls_name,bases,{},lambda ns:ns.update(namespace))\n return dataclass(cls,init=init,repr=repr,eq=eq,order=order,\n unsafe_hash=unsafe_hash,frozen=frozen)\n \n \ndef replace(*args,**changes):\n ''\n\n\n\n\n\n\n\n\n\n\n\n \n if len(args)>1:\n raise TypeError(f'replace() takes 1 positional argument but {len(args)} were given')\n if args:\n obj,=args\n elif 'obj'in changes:\n obj=changes.pop('obj')\n import warnings\n warnings.warn(\"Passing 'obj' as keyword argument is deprecated\",\n DeprecationWarning,stacklevel=2)\n else :\n raise TypeError(\"replace() missing 1 required positional argument: 'obj'\")\n \n \n \n \n if not _is_dataclass_instance(obj):\n raise TypeError(\"replace() should be called on dataclass instances\")\n \n \n \n \n for f in getattr(obj,_FIELDS).values():\n \n if f._field_type is _FIELD_CLASSVAR:\n continue\n \n if not f.init:\n \n if f.name in changes:\n raise ValueError(f'field {f.name} is declared with '\n 'init=False, it cannot be specified with '\n 'replace()')\n continue\n \n if f.name not in changes:\n if f._field_type is _FIELD_INITVAR:\n raise ValueError(f\"InitVar {f.name!r} \"\n 'must be specified with replace()')\n changes[f.name]=getattr(obj,f.name)\n \n \n \n \n \n \n return obj.__class__(**changes)\nreplace.__text_signature__='(obj, /, **kwargs)'\n", ["_thread", "builtins", "copy", "functools", "inspect", "keyword", "re", "sys", "types", "warnings"]], "datetime": [".py", "''\n\n\n\n\n\nimport time as _time\nimport math as _math\nimport sys\n\ndef _cmp(x,y):\n return 0 if x ==y else 1 if x >y else -1\n \nMINYEAR=1\nMAXYEAR=9999\n_MAXORDINAL=3652059\n\n\n\n\n\n\n\n\n\n\n\n_DAYS_IN_MONTH=[-1,31,28,31,30,31,30,31,31,30,31,30,31]\n\n_DAYS_BEFORE_MONTH=[-1]\ndbm=0\nfor dim in _DAYS_IN_MONTH[1:]:\n _DAYS_BEFORE_MONTH.append(dbm)\n dbm +=dim\ndel dbm,dim\n\ndef _is_leap(year):\n ''\n return year %4 ==0 and (year %100 !=0 or year %400 ==0)\n \ndef _days_before_year(year):\n ''\n y=year -1\n return y *365+y //4 -y //100+y //400\n \ndef _days_in_month(year,month):\n ''\n assert 1 <=month <=12,month\n if month ==2 and _is_leap(year):\n return 29\n return _DAYS_IN_MONTH[month]\n \ndef _days_before_month(year,month):\n ''\n assert 1 <=month <=12,'month must be in 1..12'\n return _DAYS_BEFORE_MONTH[month]+(month >2 and _is_leap(year))\n \ndef _ymd2ord(year,month,day):\n ''\n assert 1 <=month <=12,'month must be in 1..12'\n dim=_days_in_month(year,month)\n assert 1 <=day <=dim,('day must be in 1..%d'%dim)\n return (_days_before_year(year)+\n _days_before_month(year,month)+\n day)\n \n_DI400Y=_days_before_year(401)\n_DI100Y=_days_before_year(101)\n_DI4Y=_days_before_year(5)\n\n\n\nassert _DI4Y ==4 *365+1\n\n\n\nassert _DI400Y ==4 *_DI100Y+1\n\n\n\nassert _DI100Y ==25 *_DI4Y -1\n\ndef _ord2ymd(n):\n ''\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n n -=1\n n400,n=divmod(n,_DI400Y)\n year=n400 *400+1\n \n \n \n \n \n \n n100,n=divmod(n,_DI100Y)\n \n \n n4,n=divmod(n,_DI4Y)\n \n \n \n n1,n=divmod(n,365)\n \n year +=n100 *100+n4 *4+n1\n if n1 ==4 or n100 ==4:\n assert n ==0\n return year -1,12,31\n \n \n \n leapyear=n1 ==3 and (n4 !=24 or n100 ==3)\n assert leapyear ==_is_leap(year)\n month=(n+50)>>5\n preceding=_DAYS_BEFORE_MONTH[month]+(month >2 and leapyear)\n if preceding >n:\n month -=1\n preceding -=_DAYS_IN_MONTH[month]+(month ==2 and leapyear)\n n -=preceding\n assert 0 <=n <_days_in_month(year,month)\n \n \n \n return year,month,n+1\n \n \n_MONTHNAMES=[None ,\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\n\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"]\n_DAYNAMES=[None ,\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\",\"Sun\"]\n\n\ndef _build_struct_time(y,m,d,hh,mm,ss,dstflag):\n wday=(_ymd2ord(y,m,d)+6)%7\n dnum=_days_before_month(y,m)+d\n return _time.struct_time((y,m,d,hh,mm,ss,wday,dnum,dstflag))\n \ndef _format_time(hh,mm,ss,us,timespec='auto'):\n specs={\n 'hours':'{:02d}',\n 'minutes':'{:02d}:{:02d}',\n 'seconds':'{:02d}:{:02d}:{:02d}',\n 'milliseconds':'{:02d}:{:02d}:{:02d}.{:03d}',\n 'microseconds':'{:02d}:{:02d}:{:02d}.{:06d}'\n }\n \n if timespec =='auto':\n \n timespec='microseconds'if us else 'seconds'\n elif timespec =='milliseconds':\n us //=1000\n try :\n fmt=specs[timespec]\n except KeyError:\n raise ValueError('Unknown timespec value')\n else :\n return fmt.format(hh,mm,ss,us)\n \ndef _format_offset(off):\n s=''\n if off is not None :\n if off.days <0:\n sign=\"-\"\n off=-off\n else :\n sign=\"+\"\n hh,mm=divmod(off,timedelta(hours=1))\n mm,ss=divmod(mm,timedelta(minutes=1))\n s +=\"%s%02d:%02d\"%(sign,hh,mm)\n if ss or ss.microseconds:\n s +=\":%02d\"%ss.seconds\n \n if ss.microseconds:\n s +='.%06d'%ss.microseconds\n return s\n \n \ndef _wrap_strftime(object,format,timetuple):\n\n freplace=None\n zreplace=None\n Zreplace=None\n \n \n newformat=[]\n push=newformat.append\n i,n=0,len(format)\n while i =2:\n break\n \n if next_char !=':':\n raise ValueError('Invalid time separator: %c'%next_char)\n \n pos +=1\n \n if pos 0 else tstr\n \n time_comps=_parse_hh_mm_ss_ff(timestr)\n \n tzi=None\n if tz_pos >0:\n tzstr=tstr[tz_pos:]\n \n \n \n \n \n \n if len(tzstr)not in (5,8,15):\n raise ValueError('Malformed time zone string')\n \n tz_comps=_parse_hh_mm_ss_ff(tzstr)\n if all(x ==0 for x in tz_comps):\n tzi=timezone.utc\n else :\n tzsign=-1 if tstr[tz_pos -1]=='-'else 1\n \n td=timedelta(hours=tz_comps[0],minutes=tz_comps[1],\n seconds=tz_comps[2],microseconds=tz_comps[3])\n \n tzi=timezone(tzsign *td)\n \n time_comps.append(tzi)\n \n return time_comps\n \n \n \ndef _check_tzname(name):\n if name is not None and not isinstance(name,str):\n raise TypeError(\"tzinfo.tzname() must return None or string, \"\n \"not '%s'\"%type(name))\n \n \n \n \n \n \n \ndef _check_utc_offset(name,offset):\n assert name in (\"utcoffset\",\"dst\")\n if offset is None :\n return\n if not isinstance(offset,timedelta):\n raise TypeError(\"tzinfo.%s() must return None \"\n \"or timedelta, not '%s'\"%(name,type(offset)))\n if not -timedelta(1)b if b >0 else r 999999999:\n raise OverflowError(\"timedelta # of days is too large: %d\"%d)\n \n self=object.__new__(cls)\n self._days=d\n self._seconds=s\n self._microseconds=us\n self._hashcode=-1\n return self\n \n def __repr__(self):\n args=[]\n if self._days:\n args.append(\"days=%d\"%self._days)\n if self._seconds:\n args.append(\"seconds=%d\"%self._seconds)\n if self._microseconds:\n args.append(\"microseconds=%d\"%self._microseconds)\n if not args:\n args.append('0')\n return \"%s.%s(%s)\"%(self.__class__.__module__,\n self.__class__.__qualname__,\n ', '.join(args))\n \n def __str__(self):\n mm,ss=divmod(self._seconds,60)\n hh,mm=divmod(mm,60)\n s=\"%d:%02d:%02d\"%(hh,mm,ss)\n if self._days:\n def plural(n):\n return n,abs(n)!=1 and \"s\"or \"\"\n s=(\"%d day%s, \"%plural(self._days))+s\n if self._microseconds:\n s=s+\".%06d\"%self._microseconds\n return s\n \n def total_seconds(self):\n ''\n return ((self.days *86400+self.seconds)*10 **6+\n self.microseconds)/10 **6\n \n \n @property\n def days(self):\n ''\n return self._days\n \n @property\n def seconds(self):\n ''\n return self._seconds\n \n @property\n def microseconds(self):\n ''\n return self._microseconds\n \n def __add__(self,other):\n if isinstance(other,timedelta):\n \n \n return timedelta(self._days+other._days,\n self._seconds+other._seconds,\n self._microseconds+other._microseconds)\n return NotImplemented\n \n __radd__=__add__\n \n def __sub__(self,other):\n if isinstance(other,timedelta):\n \n \n return timedelta(self._days -other._days,\n self._seconds -other._seconds,\n self._microseconds -other._microseconds)\n return NotImplemented\n \n def __rsub__(self,other):\n if isinstance(other,timedelta):\n return -self+other\n return NotImplemented\n \n def __neg__(self):\n \n \n return timedelta(-self._days,\n -self._seconds,\n -self._microseconds)\n \n def __pos__(self):\n return self\n \n def __abs__(self):\n if self._days <0:\n return -self\n else :\n return self\n \n def __mul__(self,other):\n if isinstance(other,int):\n \n \n return timedelta(self._days *other,\n self._seconds *other,\n self._microseconds *other)\n if isinstance(other,float):\n usec=self._to_microseconds()\n a,b=other.as_integer_ratio()\n return timedelta(0,0,_divide_and_round(usec *a,b))\n return NotImplemented\n \n __rmul__=__mul__\n \n def _to_microseconds(self):\n return ((self._days *(24 *3600)+self._seconds)*1000000+\n self._microseconds)\n \n def __floordiv__(self,other):\n if not isinstance(other,(int,timedelta)):\n return NotImplemented\n usec=self._to_microseconds()\n if isinstance(other,timedelta):\n return usec //other._to_microseconds()\n if isinstance(other,int):\n return timedelta(0,0,usec //other)\n \n def __truediv__(self,other):\n if not isinstance(other,(int,float,timedelta)):\n return NotImplemented\n usec=self._to_microseconds()\n if isinstance(other,timedelta):\n return usec /other._to_microseconds()\n if isinstance(other,int):\n return timedelta(0,0,_divide_and_round(usec,other))\n if isinstance(other,float):\n a,b=other.as_integer_ratio()\n return timedelta(0,0,_divide_and_round(b *usec,a))\n \n def __mod__(self,other):\n if isinstance(other,timedelta):\n r=self._to_microseconds()%other._to_microseconds()\n return timedelta(0,0,r)\n return NotImplemented\n \n def __divmod__(self,other):\n if isinstance(other,timedelta):\n q,r=divmod(self._to_microseconds(),\n other._to_microseconds())\n return q,timedelta(0,0,r)\n return NotImplemented\n \n \n \n def __eq__(self,other):\n if isinstance(other,timedelta):\n return self._cmp(other)==0\n else :\n return NotImplemented\n \n def __le__(self,other):\n if isinstance(other,timedelta):\n return self._cmp(other)<=0\n else :\n return NotImplemented\n \n def __lt__(self,other):\n if isinstance(other,timedelta):\n return self._cmp(other)<0\n else :\n return NotImplemented\n \n def __ge__(self,other):\n if isinstance(other,timedelta):\n return self._cmp(other)>=0\n else :\n return NotImplemented\n \n def __gt__(self,other):\n if isinstance(other,timedelta):\n return self._cmp(other)>0\n else :\n return NotImplemented\n \n def _cmp(self,other):\n assert isinstance(other,timedelta)\n return _cmp(self._getstate(),other._getstate())\n \n def __hash__(self):\n if self._hashcode ==-1:\n self._hashcode=hash(self._getstate())\n return self._hashcode\n \n def __bool__(self):\n return (self._days !=0 or\n self._seconds !=0 or\n self._microseconds !=0)\n \n \n \n def _getstate(self):\n return (self._days,self._seconds,self._microseconds)\n \n def __reduce__(self):\n return (self.__class__,self._getstate())\n \ntimedelta.min=timedelta(-999999999)\ntimedelta.max=timedelta(days=999999999,hours=23,minutes=59,seconds=59,\nmicroseconds=999999)\ntimedelta.resolution=timedelta(microseconds=1)\n\nclass date:\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n __slots__='_year','_month','_day','_hashcode'\n \n def __new__(cls,year,month=None ,day=None ):\n ''\n\n\n\n\n \n if (month is None and\n isinstance(year,(bytes,str))and len(year)==4 and\n 1 <=ord(year[2:3])<=12):\n \n if isinstance(year,str):\n try :\n year=year.encode('latin1')\n except UnicodeEncodeError:\n \n raise ValueError(\n \"Failed to encode latin1 string when unpickling \"\n \"a date object. \"\n \"pickle.load(data, encoding='latin1') is assumed.\")\n self=object.__new__(cls)\n self.__setstate(year)\n self._hashcode=-1\n return self\n year,month,day=_check_date_fields(year,month,day)\n self=object.__new__(cls)\n self._year=year\n self._month=month\n self._day=day\n self._hashcode=-1\n return self\n \n \n \n @classmethod\n def fromtimestamp(cls,t):\n ''\n y,m,d,hh,mm,ss,weekday,jday,dst=_time.localtime(t)\n return cls(y,m,d)\n \n @classmethod\n def today(cls):\n ''\n t=_time.time()\n return cls.fromtimestamp(t)\n \n @classmethod\n def fromordinal(cls,n):\n ''\n\n\n\n \n y,m,d=_ord2ymd(n)\n return cls(y,m,d)\n \n @classmethod\n def fromisoformat(cls,date_string):\n ''\n if not isinstance(date_string,str):\n raise TypeError('fromisoformat: argument must be str')\n \n try :\n assert len(date_string)==10\n return cls(*_parse_isoformat_date(date_string))\n except Exception:\n raise ValueError(f'Invalid isoformat string: {date_string!r}')\n \n @classmethod\n def fromisocalendar(cls,year,week,day):\n ''\n\n \n \n if not MINYEAR <=year <=MAXYEAR:\n raise ValueError(f\"Year is out of range: {year}\")\n \n if not 0 =0\n return NotImplemented\n \n def __gt__(self,other):\n if isinstance(other,date):\n return self._cmp(other)>0\n return NotImplemented\n \n def _cmp(self,other):\n assert isinstance(other,date)\n y,m,d=self._year,self._month,self._day\n y2,m2,d2=other._year,other._month,other._day\n return _cmp((y,m,d),(y2,m2,d2))\n \n def __hash__(self):\n ''\n if self._hashcode ==-1:\n self._hashcode=hash(self._getstate())\n return self._hashcode\n \n \n \n def __add__(self,other):\n ''\n if isinstance(other,timedelta):\n o=self.toordinal()+other.days\n if 0 =52:\n if today >=_isoweek1monday(year+1):\n year +=1\n week=0\n return year,week+1,day+1\n \n \n \n def _getstate(self):\n yhi,ylo=divmod(self._year,256)\n return bytes([yhi,ylo,self._month,self._day]),\n \n def __setstate(self,string):\n yhi,ylo,self._month,self._day=string\n self._year=yhi *256+ylo\n \n def __reduce__(self):\n return (self.__class__,self._getstate())\n \n_date_class=date\n\ndate.min=date(1,1,1)\ndate.max=date(9999,12,31)\ndate.resolution=timedelta(days=1)\n\n\nclass tzinfo:\n ''\n\n\n \n __slots__=()\n \n def tzname(self,dt):\n ''\n raise NotImplementedError(\"tzinfo subclass must override tzname()\")\n \n def utcoffset(self,dt):\n ''\n raise NotImplementedError(\"tzinfo subclass must override utcoffset()\")\n \n def dst(self,dt):\n ''\n\n\n\n \n raise NotImplementedError(\"tzinfo subclass must override dst()\")\n \n def fromutc(self,dt):\n ''\n \n if not isinstance(dt,datetime):\n raise TypeError(\"fromutc() requires a datetime argument\")\n if dt.tzinfo is not self:\n raise ValueError(\"dt.tzinfo is not self\")\n \n dtoff=dt.utcoffset()\n if dtoff is None :\n raise ValueError(\"fromutc() requires a non-None utcoffset() \"\n \"result\")\n \n \n \n dtdst=dt.dst()\n if dtdst is None :\n raise ValueError(\"fromutc() requires a non-None dst() result\")\n delta=dtoff -dtdst\n if delta:\n dt +=delta\n dtdst=dt.dst()\n if dtdst is None :\n raise ValueError(\"fromutc(): dt.dst gave inconsistent \"\n \"results; cannot convert\")\n return dt+dtdst\n \n \n \n def __reduce__(self):\n getinitargs=getattr(self,\"__getinitargs__\",None )\n if getinitargs:\n args=getinitargs()\n else :\n args=()\n getstate=getattr(self,\"__getstate__\",None )\n if getstate:\n state=getstate()\n else :\n state=getattr(self,\"__dict__\",None )or None\n if state is None :\n return (self.__class__,args)\n else :\n return (self.__class__,args,state)\n \n_tzinfo_class=tzinfo\n\nclass time:\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n __slots__='_hour','_minute','_second','_microsecond','_tzinfo','_hashcode','_fold'\n \n def __new__(cls,hour=0,minute=0,second=0,microsecond=0,tzinfo=None ,*,fold=0):\n ''\n\n\n\n\n\n\n\n \n if (isinstance(hour,(bytes,str))and len(hour)==6 and\n ord(hour[0:1])&0x7F <24):\n \n if isinstance(hour,str):\n try :\n hour=hour.encode('latin1')\n except UnicodeEncodeError:\n \n raise ValueError(\n \"Failed to encode latin1 string when unpickling \"\n \"a time object. \"\n \"pickle.load(data, encoding='latin1') is assumed.\")\n self=object.__new__(cls)\n self.__setstate(hour,minute or None )\n self._hashcode=-1\n return self\n hour,minute,second,microsecond,fold=_check_time_fields(\n hour,minute,second,microsecond,fold)\n _check_tzinfo_arg(tzinfo)\n self=object.__new__(cls)\n self._hour=hour\n self._minute=minute\n self._second=second\n self._microsecond=microsecond\n self._tzinfo=tzinfo\n self._hashcode=-1\n self._fold=fold\n return self\n \n \n @property\n def hour(self):\n ''\n return self._hour\n \n @property\n def minute(self):\n ''\n return self._minute\n \n @property\n def second(self):\n ''\n return self._second\n \n @property\n def microsecond(self):\n ''\n return self._microsecond\n \n @property\n def tzinfo(self):\n ''\n return self._tzinfo\n \n @property\n def fold(self):\n return self._fold\n \n \n \n \n \n def __eq__(self,other):\n if isinstance(other,time):\n return self._cmp(other,allow_mixed=True )==0\n else :\n return NotImplemented\n \n def __le__(self,other):\n if isinstance(other,time):\n return self._cmp(other)<=0\n else :\n return NotImplemented\n \n def __lt__(self,other):\n if isinstance(other,time):\n return self._cmp(other)<0\n else :\n return NotImplemented\n \n def __ge__(self,other):\n if isinstance(other,time):\n return self._cmp(other)>=0\n else :\n return NotImplemented\n \n def __gt__(self,other):\n if isinstance(other,time):\n return self._cmp(other)>0\n else :\n return NotImplemented\n \n def _cmp(self,other,allow_mixed=False ):\n assert isinstance(other,time)\n mytz=self._tzinfo\n ottz=other._tzinfo\n myoff=otoff=None\n \n if mytz is ottz:\n base_compare=True\n else :\n myoff=self.utcoffset()\n otoff=other.utcoffset()\n base_compare=myoff ==otoff\n \n if base_compare:\n return _cmp((self._hour,self._minute,self._second,\n self._microsecond),\n (other._hour,other._minute,other._second,\n other._microsecond))\n if myoff is None or otoff is None :\n if allow_mixed:\n return 2\n else :\n raise TypeError(\"cannot compare naive and aware times\")\n myhhmm=self._hour *60+self._minute -myoff //timedelta(minutes=1)\n othhmm=other._hour *60+other._minute -otoff //timedelta(minutes=1)\n return _cmp((myhhmm,self._second,self._microsecond),\n (othhmm,other._second,other._microsecond))\n \n def __hash__(self):\n ''\n if self._hashcode ==-1:\n if self.fold:\n t=self.replace(fold=0)\n else :\n t=self\n tzoff=t.utcoffset()\n if not tzoff:\n self._hashcode=hash(t._getstate()[0])\n else :\n h,m=divmod(timedelta(hours=self.hour,minutes=self.minute)-tzoff,\n timedelta(hours=1))\n assert not m %timedelta(minutes=1),\"whole minute\"\n m //=timedelta(minutes=1)\n if 0 <=h <24:\n self._hashcode=hash(time(h,m,self.second,self.microsecond))\n else :\n self._hashcode=hash((h,m,self.second,self.microsecond))\n return self._hashcode\n \n \n \n def _tzstr(self):\n ''\n off=self.utcoffset()\n return _format_offset(off)\n \n def __repr__(self):\n ''\n if self._microsecond !=0:\n s=\", %d, %d\"%(self._second,self._microsecond)\n elif self._second !=0:\n s=\", %d\"%self._second\n else :\n s=\"\"\n s=\"%s.%s(%d, %d%s)\"%(self.__class__.__module__,\n self.__class__.__qualname__,\n self._hour,self._minute,s)\n if self._tzinfo is not None :\n assert s[-1:]==\")\"\n s=s[:-1]+\", tzinfo=%r\"%self._tzinfo+\")\"\n if self._fold:\n assert s[-1:]==\")\"\n s=s[:-1]+\", fold=1)\"\n return s\n \n def isoformat(self,timespec='auto'):\n ''\n\n\n\n\n\n\n \n s=_format_time(self._hour,self._minute,self._second,\n self._microsecond,timespec)\n tz=self._tzstr()\n if tz:\n s +=tz\n return s\n \n __str__=isoformat\n \n @classmethod\n def fromisoformat(cls,time_string):\n ''\n if not isinstance(time_string,str):\n raise TypeError('fromisoformat: argument must be str')\n \n try :\n return cls(*_parse_isoformat_time(time_string))\n except Exception:\n raise ValueError(f'Invalid isoformat string: {time_string!r}')\n \n \n def strftime(self,fmt):\n ''\n\n \n \n \n timetuple=(1900,1,1,\n self._hour,self._minute,self._second,\n 0,1,-1)\n return _wrap_strftime(self,fmt,timetuple)\n \n def __format__(self,fmt):\n if not isinstance(fmt,str):\n raise TypeError(\"must be str, not %s\"%type(fmt).__name__)\n if len(fmt)!=0:\n return self.strftime(fmt)\n return str(self)\n \n \n \n def utcoffset(self):\n ''\n \n if self._tzinfo is None :\n return None\n offset=self._tzinfo.utcoffset(None )\n _check_utc_offset(\"utcoffset\",offset)\n return offset\n \n def tzname(self):\n ''\n\n\n\n\n \n if self._tzinfo is None :\n return None\n name=self._tzinfo.tzname(None )\n _check_tzname(name)\n return name\n \n def dst(self):\n ''\n\n\n\n\n\n\n \n if self._tzinfo is None :\n return None\n offset=self._tzinfo.dst(None )\n _check_utc_offset(\"dst\",offset)\n return offset\n \n def replace(self,hour=None ,minute=None ,second=None ,microsecond=None ,\n tzinfo=True ,*,fold=None ):\n ''\n if hour is None :\n hour=self.hour\n if minute is None :\n minute=self.minute\n if second is None :\n second=self.second\n if microsecond is None :\n microsecond=self.microsecond\n if tzinfo is True :\n tzinfo=self.tzinfo\n if fold is None :\n fold=self._fold\n return type(self)(hour,minute,second,microsecond,tzinfo,fold=fold)\n \n \n \n def _getstate(self,protocol=3):\n us2,us3=divmod(self._microsecond,256)\n us1,us2=divmod(us2,256)\n h=self._hour\n if self._fold and protocol >3:\n h +=128\n basestate=bytes([h,self._minute,self._second,\n us1,us2,us3])\n if self._tzinfo is None :\n return (basestate,)\n else :\n return (basestate,self._tzinfo)\n \n def __setstate(self,string,tzinfo):\n if tzinfo is not None and not isinstance(tzinfo,_tzinfo_class):\n raise TypeError(\"bad tzinfo state arg\")\n h,self._minute,self._second,us1,us2,us3=string\n if h >127:\n self._fold=1\n self._hour=h -128\n else :\n self._fold=0\n self._hour=h\n self._microsecond=(((us1 <<8)|us2)<<8)|us3\n self._tzinfo=tzinfo\n \n def __reduce_ex__(self,protocol):\n return (time,self._getstate(protocol))\n \n def __reduce__(self):\n return self.__reduce_ex__(2)\n \n_time_class=time\n\ntime.min=time(0,0,0)\ntime.max=time(23,59,59,999999)\ntime.resolution=timedelta(microseconds=1)\n\nclass datetime(date):\n ''\n\n\n\n \n __slots__=date.__slots__+time.__slots__\n \n def __new__(cls,year,month=None ,day=None ,hour=0,minute=0,second=0,\n microsecond=0,tzinfo=None ,*,fold=0):\n if (isinstance(year,(bytes,str))and len(year)==10 and\n 1 <=ord(year[2:3])&0x7F <=12):\n \n if isinstance(year,str):\n try :\n year=bytes(year,'latin1')\n except UnicodeEncodeError:\n \n raise ValueError(\n \"Failed to encode latin1 string when unpickling \"\n \"a datetime object. \"\n \"pickle.load(data, encoding='latin1') is assumed.\")\n self=object.__new__(cls)\n self.__setstate(year,month)\n self._hashcode=-1\n return self\n year,month,day=_check_date_fields(year,month,day)\n hour,minute,second,microsecond,fold=_check_time_fields(\n hour,minute,second,microsecond,fold)\n _check_tzinfo_arg(tzinfo)\n self=object.__new__(cls)\n self._year=year\n self._month=month\n self._day=day\n self._hour=hour\n self._minute=minute\n self._second=second\n self._microsecond=microsecond\n self._tzinfo=tzinfo\n self._hashcode=-1\n self._fold=fold\n return self\n \n \n @property\n def hour(self):\n ''\n return self._hour\n \n @property\n def minute(self):\n ''\n return self._minute\n \n @property\n def second(self):\n ''\n return self._second\n \n @property\n def microsecond(self):\n ''\n return self._microsecond\n \n @property\n def tzinfo(self):\n ''\n return self._tzinfo\n \n @property\n def fold(self):\n return self._fold\n \n @classmethod\n def _fromtimestamp(cls,t,utc,tz):\n ''\n\n\n \n frac,t=_math.modf(t)\n us=round(frac *1e6)\n if us >=1000000:\n t +=1\n us -=1000000\n elif us <0:\n t -=1\n us +=1000000\n \n converter=_time.gmtime if utc else _time.localtime\n y,m,d,hh,mm,ss,weekday,jday,dst=converter(t)\n ss=min(ss,59)\n result=cls(y,m,d,hh,mm,ss,us,tz)\n if tz is None :\n \n \n \n max_fold_seconds=24 *3600\n \n \n \n \n \n if t =0\n elif not isinstance(other,date):\n return NotImplemented\n else :\n _cmperror(self,other)\n \n def __gt__(self,other):\n if isinstance(other,datetime):\n return self._cmp(other)>0\n elif not isinstance(other,date):\n return NotImplemented\n else :\n _cmperror(self,other)\n \n def _cmp(self,other,allow_mixed=False ):\n assert isinstance(other,datetime)\n mytz=self._tzinfo\n ottz=other._tzinfo\n myoff=otoff=None\n \n if mytz is ottz:\n base_compare=True\n else :\n myoff=self.utcoffset()\n otoff=other.utcoffset()\n \n if allow_mixed:\n if myoff !=self.replace(fold=not self.fold).utcoffset():\n return 2\n if otoff !=other.replace(fold=not other.fold).utcoffset():\n return 2\n base_compare=myoff ==otoff\n \n if base_compare:\n return _cmp((self._year,self._month,self._day,\n self._hour,self._minute,self._second,\n self._microsecond),\n (other._year,other._month,other._day,\n other._hour,other._minute,other._second,\n other._microsecond))\n if myoff is None or otoff is None :\n if allow_mixed:\n return 2\n else :\n raise TypeError(\"cannot compare naive and aware datetimes\")\n \n diff=self -other\n if diff.days <0:\n return -1\n return diff and 1 or 0\n \n def __add__(self,other):\n ''\n if not isinstance(other,timedelta):\n return NotImplemented\n delta=timedelta(self.toordinal(),\n hours=self._hour,\n minutes=self._minute,\n seconds=self._second,\n microseconds=self._microsecond)\n delta +=other\n hour,rem=divmod(delta.seconds,3600)\n minute,second=divmod(rem,60)\n if 0 3:\n m +=128\n basestate=bytes([yhi,ylo,m,self._day,\n self._hour,self._minute,self._second,\n us1,us2,us3])\n if self._tzinfo is None :\n return (basestate,)\n else :\n return (basestate,self._tzinfo)\n \n def __setstate(self,string,tzinfo):\n if tzinfo is not None and not isinstance(tzinfo,_tzinfo_class):\n raise TypeError(\"bad tzinfo state arg\")\n (yhi,ylo,m,self._day,self._hour,\n self._minute,self._second,us1,us2,us3)=string\n if m >127:\n self._fold=1\n self._month=m -128\n else :\n self._fold=0\n self._month=m\n self._year=yhi *256+ylo\n self._microsecond=(((us1 <<8)|us2)<<8)|us3\n self._tzinfo=tzinfo\n \n def __reduce_ex__(self,protocol):\n return (self.__class__,self._getstate(protocol))\n \n def __reduce__(self):\n return self.__reduce_ex__(2)\n \n \ndatetime.min=datetime(1,1,1)\ndatetime.max=datetime(9999,12,31,23,59,59,999999)\ndatetime.resolution=timedelta(microseconds=1)\n\n\ndef _isoweek1monday(year):\n\n\n THURSDAY=3\n firstday=_ymd2ord(year,1,1)\n firstweekday=(firstday+6)%7\n week1monday=firstday -firstweekday\n if firstweekday >THURSDAY:\n week1monday +=7\n return week1monday\n \n \nclass timezone(tzinfo):\n __slots__='_offset','_name'\n \n \n _Omitted=object()\n def __new__(cls,offset,name=_Omitted):\n if not isinstance(offset,timedelta):\n raise TypeError(\"offset must be a timedelta\")\n if name is cls._Omitted:\n if not offset:\n return cls.utc\n name=None\n elif not isinstance(name,str):\n raise TypeError(\"name must be a string\")\n if not cls._minoffset <=offset <=cls._maxoffset:\n raise ValueError(\"offset must be a timedelta \"\n \"strictly between -timedelta(hours=24) and \"\n \"timedelta(hours=24).\")\n return cls._create(offset,name)\n \n @classmethod\n def _create(cls,offset,name=None ):\n self=tzinfo.__new__(cls)\n self._offset=offset\n self._name=name\n return self\n \n def __getinitargs__(self):\n ''\n if self._name is None :\n return (self._offset,)\n return (self._offset,self._name)\n \n def __eq__(self,other):\n if isinstance(other,timezone):\n return self._offset ==other._offset\n return NotImplemented\n \n def __hash__(self):\n return hash(self._offset)\n \n def __repr__(self):\n ''\n\n\n\n\n\n\n\n \n if self is self.utc:\n return 'datetime.timezone.utc'\n if self._name is None :\n return \"%s.%s(%r)\"%(self.__class__.__module__,\n self.__class__.__qualname__,\n self._offset)\n return \"%s.%s(%r, %r)\"%(self.__class__.__module__,\n self.__class__.__qualname__,\n self._offset,self._name)\n \n def __str__(self):\n return self.tzname(None )\n \n def utcoffset(self,dt):\n if isinstance(dt,datetime)or dt is None :\n return self._offset\n raise TypeError(\"utcoffset() argument must be a datetime instance\"\n \" or None\")\n \n def tzname(self,dt):\n if isinstance(dt,datetime)or dt is None :\n if self._name is None :\n return self._name_from_offset(self._offset)\n return self._name\n raise TypeError(\"tzname() argument must be a datetime instance\"\n \" or None\")\n \n def dst(self,dt):\n if isinstance(dt,datetime)or dt is None :\n return None\n raise TypeError(\"dst() argument must be a datetime instance\"\n \" or None\")\n \n def fromutc(self,dt):\n if isinstance(dt,datetime):\n if dt.tzinfo is not self:\n raise ValueError(\"fromutc: dt.tzinfo \"\n \"is not self\")\n return dt+self._offset\n raise TypeError(\"fromutc() argument must be a datetime instance\"\n \" or None\")\n \n _maxoffset=timedelta(hours=24,microseconds=-1)\n _minoffset=-_maxoffset\n \n @staticmethod\n def _name_from_offset(delta):\n if not delta:\n return 'UTC'\n if delta
>>0?1:0);N=j.low=N+D;j.high=$+G+(N>>>0>>0?1:0);O=b.low=O+E;b.high=aa+H+(O>>>0>>0?1:0);P=g.low=P+I;g.high=ba+W+(P>>>0>>0?1:0);Q=e.low=Q+q;e.high=ca+t+(Q>>>0>>0?1:0);R=k.low=R+J;k.high=da+U+(R>>>0>>0?1:0);\nS=m.low=S+K;m.high=ea+V+(S>>>0>>0?1:0);T=d.low=T+L;d.high=fa+X+(T>>>0>>0?1:0)},_doFinalize:function(){var a=this._data,c=a.words,d=8*this._nDataBytes,f=8*a.sigBytes;c[f>>>5]|=128<<24-f%32;c[(f+128>>>10<<5)+30]=Math.floor(d/4294967296);c[(f+128>>>10<<5)+31]=d;a.sigBytes=4*c.length;this._process();return this._hash.toX32()},clone:function(){var a=d.clone.call(this);a._hash=this._hash.clone();return a},blockSize:32});c.SHA512=d._createHelper(j);c.HmacSHA512=d._createHmacHelper(j)})();\n(function(){var a=CryptoJS,c=a.x64,d=c.Word,j=c.WordArray,c=a.algo,f=c.SHA512,c=c.SHA384=f.extend({_doReset:function(){this._hash=new j.init([new d.init(3418070365,3238371032),new d.init(1654270250,914150663),new d.init(2438529370,812702999),new d.init(355462360,4144912697),new d.init(1731405415,4290775857),new d.init(2394180231,1750603025),new d.init(3675008525,1694076839),new d.init(1203062813,3204075428)])},_doFinalize:function(){var a=f._doFinalize.call(this);a.sigBytes-=16;return a}});a.SHA384=\nf._createHelper(c);a.HmacSHA384=f._createHmacHelper(c)})();\n"], "crypto_js.rollups.sha512": [".js", "/*\nCryptoJS v3.1.2\ncode.google.com/p/crypto-js\n(c) 2009-2013 by Jeff Mott. All rights reserved.\ncode.google.com/p/crypto-js/wiki/License\n*/\nvar CryptoJS=CryptoJS||function(a,m){var r={},f=r.lib={},g=function(){},l=f.Base={extend:function(a){g.prototype=this;var b=new g;a&&b.mixIn(a);b.hasOwnProperty(\"init\")||(b.init=function(){b.$super.init.apply(this,arguments)});b.init.prototype=b;b.$super=this;return b},create:function(){var a=this.extend();a.init.apply(a,arguments);return a},init:function(){},mixIn:function(a){for(var b in a)a.hasOwnProperty(b)&&(this[b]=a[b]);a.hasOwnProperty(\"toString\")&&(this.toString=a.toString)},clone:function(){return this.init.prototype.extend(this)}},\np=f.WordArray=l.extend({init:function(a,b){a=this.words=a||[];this.sigBytes=b!=m?b:4*a.length},toString:function(a){return(a||q).stringify(this)},concat:function(a){var b=this.words,d=a.words,c=this.sigBytes;a=a.sigBytes;this.clamp();if(c%4)for(var j=0;j>>2]|=(d[j>>>2]>>>24-8*(j%4)&255)<<24-8*((c+j)%4);else if(65535>>2]=d[j>>>2];else b.push.apply(b,d);this.sigBytes+=a;return this},clamp:function(){var n=this.words,b=this.sigBytes;n[b>>>2]&=4294967295<<\n32-8*(b%4);n.length=a.ceil(b/4)},clone:function(){var a=l.clone.call(this);a.words=this.words.slice(0);return a},random:function(n){for(var b=[],d=0;d>>2]>>>24-8*(c%4)&255;d.push((j>>>4).toString(16));d.push((j&15).toString(16))}return d.join(\"\")},parse:function(a){for(var b=a.length,d=[],c=0;c>>3]|=parseInt(a.substr(c,\n2),16)<<24-4*(c%8);return new p.init(d,b/2)}},G=y.Latin1={stringify:function(a){var b=a.words;a=a.sigBytes;for(var d=[],c=0;c>>2]>>>24-8*(c%4)&255));return d.join(\"\")},parse:function(a){for(var b=a.length,d=[],c=0;c>>2]|=(a.charCodeAt(c)&255)<<24-8*(c%4);return new p.init(d,b)}},fa=y.Utf8={stringify:function(a){try{return decodeURIComponent(escape(G.stringify(a)))}catch(b){throw Error(\"Malformed UTF-8 data\");}},parse:function(a){return G.parse(unescape(encodeURIComponent(a)))}},\nh=f.BufferedBlockAlgorithm=l.extend({reset:function(){this._data=new p.init;this._nDataBytes=0},_append:function(a){\"string\"==typeof a&&(a=fa.parse(a));this._data.concat(a);this._nDataBytes+=a.sigBytes},_process:function(n){var b=this._data,d=b.words,c=b.sigBytes,j=this.blockSize,l=c/(4*j),l=n?a.ceil(l):a.max((l|0)-this._minBufferSize,0);n=l*j;c=a.min(4*n,c);if(n){for(var h=0;hq;q++)y[q]=a();f=f.SHA512=r.extend({_doReset:function(){this._hash=new l.init([new g.init(1779033703,4089235720),new g.init(3144134277,2227873595),new g.init(1013904242,4271175723),new g.init(2773480762,1595750129),new g.init(1359893119,2917565137),new g.init(2600822924,725511199),new g.init(528734635,4215389547),new g.init(1541459225,327033209)])},_doProcessBlock:function(a,f){for(var h=this._hash.words,\ng=h[0],n=h[1],b=h[2],d=h[3],c=h[4],j=h[5],l=h[6],h=h[7],q=g.high,m=g.low,r=n.high,N=n.low,Z=b.high,O=b.low,$=d.high,P=d.low,aa=c.high,Q=c.low,ba=j.high,R=j.low,ca=l.high,S=l.low,da=h.high,T=h.low,v=q,s=m,H=r,E=N,I=Z,F=O,W=$,J=P,w=aa,t=Q,U=ba,K=R,V=ca,L=S,X=da,M=T,x=0;80>x;x++){var B=y[x];if(16>x)var u=B.high=a[f+2*x]|0,e=B.low=a[f+2*x+1]|0;else{var u=y[x-15],e=u.high,z=u.low,u=(e>>>1|z<<31)^(e>>>8|z<<24)^e>>>7,z=(z>>>1|e<<31)^(z>>>8|e<<24)^(z>>>7|e<<25),D=y[x-2],e=D.high,k=D.low,D=(e>>>19|k<<13)^\n(e<<3|k>>>29)^e>>>6,k=(k>>>19|e<<13)^(k<<3|e>>>29)^(k>>>6|e<<26),e=y[x-7],Y=e.high,C=y[x-16],A=C.high,C=C.low,e=z+e.low,u=u+Y+(e>>>0>>0?1:0),e=e+k,u=u+D+(e>>>0>>0?1:0),e=e+C,u=u+A+(e>>>0>>0?1:0);B.high=u;B.low=e}var Y=w&U^~w&V,C=t&K^~t&L,B=v&H^v&I^H&I,ha=s&E^s&F^E&F,z=(v>>>28|s<<4)^(v<<30|s>>>2)^(v<<25|s>>>7),D=(s>>>28|v<<4)^(s<<30|v>>>2)^(s<<25|v>>>7),k=p[x],ia=k.high,ea=k.low,k=M+((t>>>14|w<<18)^(t>>>18|w<<14)^(t<<23|w>>>9)),A=X+((w>>>14|t<<18)^(w>>>18|t<<14)^(w<<23|t>>>9))+(k>>>0>>\n0?1:0),k=k+C,A=A+Y+(k>>>0>>0?1:0),k=k+ea,A=A+ia+(k>>>0>>0?1:0),k=k+e,A=A+u+(k>>>0>>0?1:0),e=D+ha,B=z+B+(e>>>0>>0?1:0),X=V,M=L,V=U,L=K,U=w,K=t,t=J+k|0,w=W+A+(t>>>0>>0?1:0)|0,W=I,J=F,I=H,F=E,H=v,E=s,s=k+e|0,v=A+B+(s>>>0>>0?1:0)|0}m=g.low=m+s;g.high=q+v+(m>>>0>>0?1:0);N=n.low=N+E;n.high=r+H+(N>>>0>>0?1:0);O=b.low=O+F;b.high=Z+I+(O>>>0>>0?1:0);P=d.low=P+J;d.high=$+W+(P>>>0>>0?1:0);Q=c.low=Q+t;c.high=aa+w+(Q>>>0>>0?1:0);R=j.low=R+K;j.high=ba+U+(R>>>0>>0?1:0);S=l.low=\nS+L;l.high=ca+V+(S>>>0>>0?1:0);T=h.low=T+M;h.high=da+X+(T>>>0>>0?1:0)},_doFinalize:function(){var a=this._data,f=a.words,h=8*this._nDataBytes,g=8*a.sigBytes;f[g>>>5]|=128<<24-g%32;f[(g+128>>>10<<5)+30]=Math.floor(h/4294967296);f[(g+128>>>10<<5)+31]=h;a.sigBytes=4*f.length;this._process();return this._hash.toX32()},clone:function(){var a=r.clone.call(this);a._hash=this._hash.clone();return a},blockSize:32});m.SHA512=r._createHelper(f);m.HmacSHA512=r._createHmacHelper(f)})();\n"], "abc": [".py", "\n\n\n\"\"\"Abstract Base Classes (ABCs) according to PEP 3119.\"\"\"\n\n\ndef abstractmethod(funcobj):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n funcobj.__isabstractmethod__=True\n return funcobj\n \n \nclass abstractclassmethod(classmethod):\n ''\n\n\n \n \n __isabstractmethod__=True\n \n def __init__(self,callable):\n callable.__isabstractmethod__=True\n super().__init__(callable)\n \n \nclass abstractstaticmethod(staticmethod):\n ''\n\n\n \n \n __isabstractmethod__=True\n \n def __init__(self,callable):\n callable.__isabstractmethod__=True\n super().__init__(callable)\n \n \nclass abstractproperty(property):\n ''\n\n\n \n \n __isabstractmethod__=True\n \n \ntry :\n from _abc import (get_cache_token,_abc_init,_abc_register,\n _abc_instancecheck,_abc_subclasscheck,_get_dump,\n _reset_registry,_reset_caches)\nexcept ImportError:\n from _py_abc import ABCMeta,get_cache_token\n ABCMeta.__module__='abc'\nelse :\n class ABCMeta(type):\n ''\n\n\n\n\n\n\n\n\n\n\n \n def __new__(mcls,name,bases,namespace,**kwargs):\n cls=super().__new__(mcls,name,bases,namespace,**kwargs)\n _abc_init(cls)\n return cls\n \n def register(cls,subclass):\n ''\n\n\n \n return _abc_register(cls,subclass)\n \n def __instancecheck__(cls,instance):\n ''\n return _abc_instancecheck(cls,instance)\n \n def __subclasscheck__(cls,subclass):\n ''\n return _abc_subclasscheck(cls,subclass)\n \n def _dump_registry(cls,file=None ):\n ''\n print(f\"Class: {cls.__module__}.{cls.__qualname__}\",file=file)\n print(f\"Inv. counter: {get_cache_token()}\",file=file)\n (_abc_registry,_abc_cache,_abc_negative_cache,\n _abc_negative_cache_version)=_get_dump(cls)\n print(f\"_abc_registry: {_abc_registry!r}\",file=file)\n print(f\"_abc_cache: {_abc_cache!r}\",file=file)\n print(f\"_abc_negative_cache: {_abc_negative_cache!r}\",file=file)\n print(f\"_abc_negative_cache_version: {_abc_negative_cache_version!r}\",\n file=file)\n \n def _abc_registry_clear(cls):\n ''\n _reset_registry(cls)\n \n def _abc_caches_clear(cls):\n ''\n _reset_caches(cls)\n \n \nclass ABC(metaclass=ABCMeta):\n ''\n\n \n __slots__=()\n", ["_abc", "_py_abc"]], "antigravity": [".py", "\nimport webbrowser\nimport hashlib\n\nwebbrowser.open(\"https://xkcd.com/353/\")\n\ndef geohash(latitude,longitude,datedow):\n ''\n\n\n\n\n \n \n h=hashlib.md5(datedow).hexdigest()\n p,q=[('%f'%float.fromhex('0.'+x))for x in (h[:16],h[16:32])]\n print('%d%s %d%s'%(latitude,p[1:],longitude,q[1:]))\n", ["hashlib", "webbrowser"]], "argparse": [".py", "\n\n\n\"\"\"Command-line parsing library\n\nThis module is an optparse-inspired command-line parsing library that:\n\n - handles both optional and positional arguments\n - produces highly informative usage messages\n - supports parsers that dispatch to sub-parsers\n\nThe following is a simple usage example that sums integers from the\ncommand-line and writes the result to a file::\n\n parser = argparse.ArgumentParser(\n description='sum the integers at the command line')\n parser.add_argument(\n 'integers', metavar='int', nargs='+', type=int,\n help='an integer to be summed')\n parser.add_argument(\n '--log', default=sys.stdout, type=argparse.FileType('w'),\n help='the file where the sum should be written')\n args = parser.parse_args()\n args.log.write('%s' % sum(args.integers))\n args.log.close()\n\nThe module contains the following public classes:\n\n - ArgumentParser -- The main entry point for command-line parsing. As the\n example above shows, the add_argument() method is used to populate\n the parser with actions for optional and positional arguments. Then\n the parse_args() method is invoked to convert the args at the\n command-line into an object with attributes.\n\n - ArgumentError -- The exception raised by ArgumentParser objects when\n there are errors with the parser's actions. Errors raised while\n parsing the command-line are caught by ArgumentParser and emitted\n as command-line messages.\n\n - FileType -- A factory for defining types of files to be created. As the\n example above shows, instances of FileType are typically passed as\n the type= argument of add_argument() calls.\n\n - Action -- The base class for parser actions. Typically actions are\n selected by passing strings like 'store_true' or 'append_const' to\n the action= argument of add_argument(). However, for greater\n customization of ArgumentParser actions, subclasses of Action may\n be defined and passed as the action= argument.\n\n - HelpFormatter, RawDescriptionHelpFormatter, RawTextHelpFormatter,\n ArgumentDefaultsHelpFormatter -- Formatter classes which\n may be passed as the formatter_class= argument to the\n ArgumentParser constructor. HelpFormatter is the default,\n RawDescriptionHelpFormatter and RawTextHelpFormatter tell the parser\n not to change the formatting for help text, and\n ArgumentDefaultsHelpFormatter adds information about argument defaults\n to the help.\n\nAll other classes in this module are considered implementation details.\n(Also note that HelpFormatter and RawDescriptionHelpFormatter are only\nconsidered public as object names -- the API of the formatter objects is\nstill considered an implementation detail.)\n\"\"\"\n\n__version__='1.1'\n__all__=[\n'ArgumentParser',\n'ArgumentError',\n'ArgumentTypeError',\n'FileType',\n'HelpFormatter',\n'ArgumentDefaultsHelpFormatter',\n'RawDescriptionHelpFormatter',\n'RawTextHelpFormatter',\n'MetavarTypeHelpFormatter',\n'Namespace',\n'Action',\n'ONE_OR_MORE',\n'OPTIONAL',\n'PARSER',\n'REMAINDER',\n'SUPPRESS',\n'ZERO_OR_MORE',\n]\n\n\nimport os as _os\nimport re as _re\nimport shutil as _shutil\nimport sys as _sys\n\nfrom gettext import gettext as _,ngettext\n\nSUPPRESS='==SUPPRESS=='\n\nOPTIONAL='?'\nZERO_OR_MORE='*'\nONE_OR_MORE='+'\nPARSER='A...'\nREMAINDER='...'\n_UNRECOGNIZED_ARGS_ATTR='_unrecognized_args'\n\n\n\n\n\nclass _AttributeHolder(object):\n ''\n\n\n\n\n\n \n \n def __repr__(self):\n type_name=type(self).__name__\n arg_strings=[]\n star_args={}\n for arg in self._get_args():\n arg_strings.append(repr(arg))\n for name,value in self._get_kwargs():\n if name.isidentifier():\n arg_strings.append('%s=%r'%(name,value))\n else :\n star_args[name]=value\n if star_args:\n arg_strings.append('**%s'%repr(star_args))\n return '%s(%s)'%(type_name,', '.join(arg_strings))\n \n def _get_kwargs(self):\n return sorted(self.__dict__.items())\n \n def _get_args(self):\n return []\n \n \ndef _copy_items(items):\n if items is None :\n return []\n \n \n \n if type(items)is list:\n return items[:]\n import copy\n return copy.copy(items)\n \n \n \n \n \n \nclass HelpFormatter(object):\n ''\n\n\n\n \n \n def __init__(self,\n prog,\n indent_increment=2,\n max_help_position=24,\n width=None ):\n \n \n if width is None :\n width=_shutil.get_terminal_size().columns\n width -=2\n \n self._prog=prog\n self._indent_increment=indent_increment\n self._max_help_position=min(max_help_position,\n max(width -20,indent_increment *2))\n self._width=width\n \n self._current_indent=0\n self._level=0\n self._action_max_length=0\n \n self._root_section=self._Section(self,None )\n self._current_section=self._root_section\n \n self._whitespace_matcher=_re.compile(r'\\s+',_re.ASCII)\n self._long_break_matcher=_re.compile(r'\\n\\n\\n+')\n \n \n \n \n def _indent(self):\n self._current_indent +=self._indent_increment\n self._level +=1\n \n def _dedent(self):\n self._current_indent -=self._indent_increment\n assert self._current_indent >=0,'Indent decreased below 0.'\n self._level -=1\n \n class _Section(object):\n \n def __init__(self,formatter,parent,heading=None ):\n self.formatter=formatter\n self.parent=parent\n self.heading=heading\n self.items=[]\n \n def format_help(self):\n \n if self.parent is not None :\n self.formatter._indent()\n join=self.formatter._join_parts\n item_help=join([func(*args)for func,args in self.items])\n if self.parent is not None :\n self.formatter._dedent()\n \n \n if not item_help:\n return ''\n \n \n if self.heading is not SUPPRESS and self.heading is not None :\n current_indent=self.formatter._current_indent\n heading='%*s%s:\\n'%(current_indent,'',self.heading)\n else :\n heading=''\n \n \n return join(['\\n',heading,item_help,'\\n'])\n \n def _add_item(self,func,args):\n self._current_section.items.append((func,args))\n \n \n \n \n def start_section(self,heading):\n self._indent()\n section=self._Section(self,self._current_section,heading)\n self._add_item(section.format_help,[])\n self._current_section=section\n \n def end_section(self):\n self._current_section=self._current_section.parent\n self._dedent()\n \n def add_text(self,text):\n if text is not SUPPRESS and text is not None :\n self._add_item(self._format_text,[text])\n \n def add_usage(self,usage,actions,groups,prefix=None ):\n if usage is not SUPPRESS:\n args=usage,actions,groups,prefix\n self._add_item(self._format_usage,args)\n \n def add_argument(self,action):\n if action.help is not SUPPRESS:\n \n \n get_invocation=self._format_action_invocation\n invocations=[get_invocation(action)]\n for subaction in self._iter_indented_subactions(action):\n invocations.append(get_invocation(subaction))\n \n \n invocation_length=max([len(s)for s in invocations])\n action_length=invocation_length+self._current_indent\n self._action_max_length=max(self._action_max_length,\n action_length)\n \n \n self._add_item(self._format_action,[action])\n \n def add_arguments(self,actions):\n for action in actions:\n self.add_argument(action)\n \n \n \n \n def format_help(self):\n help=self._root_section.format_help()\n if help:\n help=self._long_break_matcher.sub('\\n\\n',help)\n help=help.strip('\\n')+'\\n'\n return help\n \n def _join_parts(self,part_strings):\n return ''.join([part\n for part in part_strings\n if part and part is not SUPPRESS])\n \n def _format_usage(self,usage,actions,groups,prefix):\n if prefix is None :\n prefix=_('usage: ')\n \n \n if usage is not None :\n usage=usage %dict(prog=self._prog)\n \n \n elif usage is None and not actions:\n usage='%(prog)s'%dict(prog=self._prog)\n \n \n elif usage is None :\n prog='%(prog)s'%dict(prog=self._prog)\n \n \n optionals=[]\n positionals=[]\n for action in actions:\n if action.option_strings:\n optionals.append(action)\n else :\n positionals.append(action)\n \n \n format=self._format_actions_usage\n action_usage=format(optionals+positionals,groups)\n usage=' '.join([s for s in [prog,action_usage]if s])\n \n \n text_width=self._width -self._current_indent\n if len(prefix)+len(usage)>text_width:\n \n \n part_regexp=(\n r'\\(.*?\\)+(?=\\s|$)|'\n r'\\[.*?\\]+(?=\\s|$)|'\n r'\\S+'\n )\n opt_usage=format(optionals,groups)\n pos_usage=format(positionals,groups)\n opt_parts=_re.findall(part_regexp,opt_usage)\n pos_parts=_re.findall(part_regexp,pos_usage)\n assert ' '.join(opt_parts)==opt_usage\n assert ' '.join(pos_parts)==pos_usage\n \n \n def get_lines(parts,indent,prefix=None ):\n lines=[]\n line=[]\n if prefix is not None :\n line_len=len(prefix)-1\n else :\n line_len=len(indent)-1\n for part in parts:\n if line_len+1+len(part)>text_width and line:\n lines.append(indent+' '.join(line))\n line=[]\n line_len=len(indent)-1\n line.append(part)\n line_len +=len(part)+1\n if line:\n lines.append(indent+' '.join(line))\n if prefix is not None :\n lines[0]=lines[0][len(indent):]\n return lines\n \n \n if len(prefix)+len(prog)<=0.75 *text_width:\n indent=' '*(len(prefix)+len(prog)+1)\n if opt_parts:\n lines=get_lines([prog]+opt_parts,indent,prefix)\n lines.extend(get_lines(pos_parts,indent))\n elif pos_parts:\n lines=get_lines([prog]+pos_parts,indent,prefix)\n else :\n lines=[prog]\n \n \n else :\n indent=' '*len(prefix)\n parts=opt_parts+pos_parts\n lines=get_lines(parts,indent)\n if len(lines)>1:\n lines=[]\n lines.extend(get_lines(opt_parts,indent))\n lines.extend(get_lines(pos_parts,indent))\n lines=[prog]+lines\n \n \n usage='\\n'.join(lines)\n \n \n return '%s%s\\n\\n'%(prefix,usage)\n \n def _format_actions_usage(self,actions,groups):\n \n group_actions=set()\n inserts={}\n for group in groups:\n try :\n start=actions.index(group._group_actions[0])\n except ValueError:\n continue\n else :\n end=start+len(group._group_actions)\n if actions[start:end]==group._group_actions:\n for action in group._group_actions:\n group_actions.add(action)\n if not group.required:\n if start in inserts:\n inserts[start]+=' ['\n else :\n inserts[start]='['\n if end in inserts:\n inserts[end]+=']'\n else :\n inserts[end]=']'\n else :\n if start in inserts:\n inserts[start]+=' ('\n else :\n inserts[start]='('\n if end in inserts:\n inserts[end]+=')'\n else :\n inserts[end]=')'\n for i in range(start+1,end):\n inserts[i]='|'\n \n \n parts=[]\n for i,action in enumerate(actions):\n \n \n \n if action.help is SUPPRESS:\n parts.append(None )\n if inserts.get(i)=='|':\n inserts.pop(i)\n elif inserts.get(i+1)=='|':\n inserts.pop(i+1)\n \n \n elif not action.option_strings:\n default=self._get_default_metavar_for_positional(action)\n part=self._format_args(action,default)\n \n \n if action in group_actions:\n if part[0]=='['and part[-1]==']':\n part=part[1:-1]\n \n \n parts.append(part)\n \n \n else :\n option_string=action.option_strings[0]\n \n \n \n if action.nargs ==0:\n part='%s'%option_string\n \n \n \n else :\n default=self._get_default_metavar_for_optional(action)\n args_string=self._format_args(action,default)\n part='%s %s'%(option_string,args_string)\n \n \n if not action.required and action not in group_actions:\n part='[%s]'%part\n \n \n parts.append(part)\n \n \n for i in sorted(inserts,reverse=True ):\n parts[i:i]=[inserts[i]]\n \n \n text=' '.join([item for item in parts if item is not None ])\n \n \n open=r'[\\[(]'\n close=r'[\\])]'\n text=_re.sub(r'(%s) '%open,r'\\1',text)\n text=_re.sub(r' (%s)'%close,r'\\1',text)\n text=_re.sub(r'%s *%s'%(open,close),r'',text)\n text=_re.sub(r'\\(([^|]*)\\)',r'\\1',text)\n text=text.strip()\n \n \n return text\n \n def _format_text(self,text):\n if '%(prog)'in text:\n text=text %dict(prog=self._prog)\n text_width=max(self._width -self._current_indent,11)\n indent=' '*self._current_indent\n return self._fill_text(text,text_width,indent)+'\\n\\n'\n \n def _format_action(self,action):\n \n help_position=min(self._action_max_length+2,\n self._max_help_position)\n help_width=max(self._width -help_position,11)\n action_width=help_position -self._current_indent -2\n action_header=self._format_action_invocation(action)\n \n \n if not action.help:\n tup=self._current_indent,'',action_header\n action_header='%*s%s\\n'%tup\n \n \n elif len(action_header)<=action_width:\n tup=self._current_indent,'',action_width,action_header\n action_header='%*s%-*s '%tup\n indent_first=0\n \n \n else :\n tup=self._current_indent,'',action_header\n action_header='%*s%s\\n'%tup\n indent_first=help_position\n \n \n parts=[action_header]\n \n \n if action.help:\n help_text=self._expand_help(action)\n help_lines=self._split_lines(help_text,help_width)\n parts.append('%*s%s\\n'%(indent_first,'',help_lines[0]))\n for line in help_lines[1:]:\n parts.append('%*s%s\\n'%(help_position,'',line))\n \n \n elif not action_header.endswith('\\n'):\n parts.append('\\n')\n \n \n for subaction in self._iter_indented_subactions(action):\n parts.append(self._format_action(subaction))\n \n \n return self._join_parts(parts)\n \n def _format_action_invocation(self,action):\n if not action.option_strings:\n default=self._get_default_metavar_for_positional(action)\n metavar,=self._metavar_formatter(action,default)(1)\n return metavar\n \n else :\n parts=[]\n \n \n \n if action.nargs ==0:\n parts.extend(action.option_strings)\n \n \n \n else :\n default=self._get_default_metavar_for_optional(action)\n args_string=self._format_args(action,default)\n for option_string in action.option_strings:\n parts.append('%s %s'%(option_string,args_string))\n \n return ', '.join(parts)\n \n def _metavar_formatter(self,action,default_metavar):\n if action.metavar is not None :\n result=action.metavar\n elif action.choices is not None :\n choice_strs=[str(choice)for choice in action.choices]\n result='{%s}'%','.join(choice_strs)\n else :\n result=default_metavar\n \n def format(tuple_size):\n if isinstance(result,tuple):\n return result\n else :\n return (result,)*tuple_size\n return format\n \n def _format_args(self,action,default_metavar):\n get_metavar=self._metavar_formatter(action,default_metavar)\n if action.nargs is None :\n result='%s'%get_metavar(1)\n elif action.nargs ==OPTIONAL:\n result='[%s]'%get_metavar(1)\n elif action.nargs ==ZERO_OR_MORE:\n result='[%s [%s ...]]'%get_metavar(2)\n elif action.nargs ==ONE_OR_MORE:\n result='%s [%s ...]'%get_metavar(2)\n elif action.nargs ==REMAINDER:\n result='...'\n elif action.nargs ==PARSER:\n result='%s ...'%get_metavar(1)\n elif action.nargs ==SUPPRESS:\n result=''\n else :\n try :\n formats=['%s'for _ in range(action.nargs)]\n except TypeError:\n raise ValueError(\"invalid nargs value\")from None\n result=' '.join(formats)%get_metavar(action.nargs)\n return result\n \n def _expand_help(self,action):\n params=dict(vars(action),prog=self._prog)\n for name in list(params):\n if params[name]is SUPPRESS:\n del params[name]\n for name in list(params):\n if hasattr(params[name],'__name__'):\n params[name]=params[name].__name__\n if params.get('choices')is not None :\n choices_str=', '.join([str(c)for c in params['choices']])\n params['choices']=choices_str\n return self._get_help_string(action)%params\n \n def _iter_indented_subactions(self,action):\n try :\n get_subactions=action._get_subactions\n except AttributeError:\n pass\n else :\n self._indent()\n yield from get_subactions()\n self._dedent()\n \n def _split_lines(self,text,width):\n text=self._whitespace_matcher.sub(' ',text).strip()\n \n \n import textwrap\n return textwrap.wrap(text,width)\n \n def _fill_text(self,text,width,indent):\n text=self._whitespace_matcher.sub(' ',text).strip()\n import textwrap\n return textwrap.fill(text,width,\n initial_indent=indent,\n subsequent_indent=indent)\n \n def _get_help_string(self,action):\n return action.help\n \n def _get_default_metavar_for_optional(self,action):\n return action.dest.upper()\n \n def _get_default_metavar_for_positional(self,action):\n return action.dest\n \n \nclass RawDescriptionHelpFormatter(HelpFormatter):\n ''\n\n\n\n \n \n def _fill_text(self,text,width,indent):\n return ''.join(indent+line for line in text.splitlines(keepends=True ))\n \n \nclass RawTextHelpFormatter(RawDescriptionHelpFormatter):\n ''\n\n\n\n \n \n def _split_lines(self,text,width):\n return text.splitlines()\n \n \nclass ArgumentDefaultsHelpFormatter(HelpFormatter):\n ''\n\n\n\n \n \n def _get_help_string(self,action):\n help=action.help\n if '%(default)'not in action.help:\n if action.default is not SUPPRESS:\n defaulting_nargs=[OPTIONAL,ZERO_OR_MORE]\n if action.option_strings or action.nargs in defaulting_nargs:\n help +=' (default: %(default)s)'\n return help\n \n \nclass MetavarTypeHelpFormatter(HelpFormatter):\n ''\n\n\n\n\n \n \n def _get_default_metavar_for_optional(self,action):\n return action.type.__name__\n \n def _get_default_metavar_for_positional(self,action):\n return action.type.__name__\n \n \n \n \n \n \n \ndef _get_action_name(argument):\n if argument is None :\n return None\n elif argument.option_strings:\n return '/'.join(argument.option_strings)\n elif argument.metavar not in (None ,SUPPRESS):\n return argument.metavar\n elif argument.dest not in (None ,SUPPRESS):\n return argument.dest\n else :\n return None\n \n \nclass ArgumentError(Exception):\n ''\n\n\n\n \n \n def __init__(self,argument,message):\n self.argument_name=_get_action_name(argument)\n self.message=message\n \n def __str__(self):\n if self.argument_name is None :\n format='%(message)s'\n else :\n format='argument %(argument_name)s: %(message)s'\n return format %dict(message=self.message,\n argument_name=self.argument_name)\n \n \nclass ArgumentTypeError(Exception):\n ''\n pass\n \n \n \n \n \n \nclass Action(_AttributeHolder):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n def __init__(self,\n option_strings,\n dest,\n nargs=None ,\n const=None ,\n default=None ,\n type=None ,\n choices=None ,\n required=False ,\n help=None ,\n metavar=None ):\n self.option_strings=option_strings\n self.dest=dest\n self.nargs=nargs\n self.const=const\n self.default=default\n self.type=type\n self.choices=choices\n self.required=required\n self.help=help\n self.metavar=metavar\n \n def _get_kwargs(self):\n names=[\n 'option_strings',\n 'dest',\n 'nargs',\n 'const',\n 'default',\n 'type',\n 'choices',\n 'help',\n 'metavar',\n ]\n return [(name,getattr(self,name))for name in names]\n \n def __call__(self,parser,namespace,values,option_string=None ):\n raise NotImplementedError(_('.__call__() not defined'))\n \n \nclass _StoreAction(Action):\n\n def __init__(self,\n option_strings,\n dest,\n nargs=None ,\n const=None ,\n default=None ,\n type=None ,\n choices=None ,\n required=False ,\n help=None ,\n metavar=None ):\n if nargs ==0:\n raise ValueError('nargs for store actions must be != 0; if you '\n 'have nothing to store, actions such as store '\n 'true or store const may be more appropriate')\n if const is not None and nargs !=OPTIONAL:\n raise ValueError('nargs must be %r to supply const'%OPTIONAL)\n super(_StoreAction,self).__init__(\n option_strings=option_strings,\n dest=dest,\n nargs=nargs,\n const=const,\n default=default,\n type=type,\n choices=choices,\n required=required,\n help=help,\n metavar=metavar)\n \n def __call__(self,parser,namespace,values,option_string=None ):\n setattr(namespace,self.dest,values)\n \n \nclass _StoreConstAction(Action):\n\n def __init__(self,\n option_strings,\n dest,\n const,\n default=None ,\n required=False ,\n help=None ,\n metavar=None ):\n super(_StoreConstAction,self).__init__(\n option_strings=option_strings,\n dest=dest,\n nargs=0,\n const=const,\n default=default,\n required=required,\n help=help)\n \n def __call__(self,parser,namespace,values,option_string=None ):\n setattr(namespace,self.dest,self.const)\n \n \nclass _StoreTrueAction(_StoreConstAction):\n\n def __init__(self,\n option_strings,\n dest,\n default=False ,\n required=False ,\n help=None ):\n super(_StoreTrueAction,self).__init__(\n option_strings=option_strings,\n dest=dest,\n const=True ,\n default=default,\n required=required,\n help=help)\n \n \nclass _StoreFalseAction(_StoreConstAction):\n\n def __init__(self,\n option_strings,\n dest,\n default=True ,\n required=False ,\n help=None ):\n super(_StoreFalseAction,self).__init__(\n option_strings=option_strings,\n dest=dest,\n const=False ,\n default=default,\n required=required,\n help=help)\n \n \nclass _AppendAction(Action):\n\n def __init__(self,\n option_strings,\n dest,\n nargs=None ,\n const=None ,\n default=None ,\n type=None ,\n choices=None ,\n required=False ,\n help=None ,\n metavar=None ):\n if nargs ==0:\n raise ValueError('nargs for append actions must be != 0; if arg '\n 'strings are not supplying the value to append, '\n 'the append const action may be more appropriate')\n if const is not None and nargs !=OPTIONAL:\n raise ValueError('nargs must be %r to supply const'%OPTIONAL)\n super(_AppendAction,self).__init__(\n option_strings=option_strings,\n dest=dest,\n nargs=nargs,\n const=const,\n default=default,\n type=type,\n choices=choices,\n required=required,\n help=help,\n metavar=metavar)\n \n def __call__(self,parser,namespace,values,option_string=None ):\n items=getattr(namespace,self.dest,None )\n items=_copy_items(items)\n items.append(values)\n setattr(namespace,self.dest,items)\n \n \nclass _AppendConstAction(Action):\n\n def __init__(self,\n option_strings,\n dest,\n const,\n default=None ,\n required=False ,\n help=None ,\n metavar=None ):\n super(_AppendConstAction,self).__init__(\n option_strings=option_strings,\n dest=dest,\n nargs=0,\n const=const,\n default=default,\n required=required,\n help=help,\n metavar=metavar)\n \n def __call__(self,parser,namespace,values,option_string=None ):\n items=getattr(namespace,self.dest,None )\n items=_copy_items(items)\n items.append(self.const)\n setattr(namespace,self.dest,items)\n \n \nclass _CountAction(Action):\n\n def __init__(self,\n option_strings,\n dest,\n default=None ,\n required=False ,\n help=None ):\n super(_CountAction,self).__init__(\n option_strings=option_strings,\n dest=dest,\n nargs=0,\n default=default,\n required=required,\n help=help)\n \n def __call__(self,parser,namespace,values,option_string=None ):\n count=getattr(namespace,self.dest,None )\n if count is None :\n count=0\n setattr(namespace,self.dest,count+1)\n \n \nclass _HelpAction(Action):\n\n def __init__(self,\n option_strings,\n dest=SUPPRESS,\n default=SUPPRESS,\n help=None ):\n super(_HelpAction,self).__init__(\n option_strings=option_strings,\n dest=dest,\n default=default,\n nargs=0,\n help=help)\n \n def __call__(self,parser,namespace,values,option_string=None ):\n parser.print_help()\n parser.exit()\n \n \nclass _VersionAction(Action):\n\n def __init__(self,\n option_strings,\n version=None ,\n dest=SUPPRESS,\n default=SUPPRESS,\n help=\"show program's version number and exit\"):\n super(_VersionAction,self).__init__(\n option_strings=option_strings,\n dest=dest,\n default=default,\n nargs=0,\n help=help)\n self.version=version\n \n def __call__(self,parser,namespace,values,option_string=None ):\n version=self.version\n if version is None :\n version=parser.version\n formatter=parser._get_formatter()\n formatter.add_text(version)\n parser._print_message(formatter.format_help(),_sys.stdout)\n parser.exit()\n \n \nclass _SubParsersAction(Action):\n\n class _ChoicesPseudoAction(Action):\n \n def __init__(self,name,aliases,help):\n metavar=dest=name\n if aliases:\n metavar +=' (%s)'%', '.join(aliases)\n sup=super(_SubParsersAction._ChoicesPseudoAction,self)\n sup.__init__(option_strings=[],dest=dest,help=help,\n metavar=metavar)\n \n def __init__(self,\n option_strings,\n prog,\n parser_class,\n dest=SUPPRESS,\n required=False ,\n help=None ,\n metavar=None ):\n \n self._prog_prefix=prog\n self._parser_class=parser_class\n self._name_parser_map={}\n self._choices_actions=[]\n \n super(_SubParsersAction,self).__init__(\n option_strings=option_strings,\n dest=dest,\n nargs=PARSER,\n choices=self._name_parser_map,\n required=required,\n help=help,\n metavar=metavar)\n \n def add_parser(self,name,**kwargs):\n \n if kwargs.get('prog')is None :\n kwargs['prog']='%s %s'%(self._prog_prefix,name)\n \n aliases=kwargs.pop('aliases',())\n \n \n if 'help'in kwargs:\n help=kwargs.pop('help')\n choice_action=self._ChoicesPseudoAction(name,aliases,help)\n self._choices_actions.append(choice_action)\n \n \n parser=self._parser_class(**kwargs)\n self._name_parser_map[name]=parser\n \n \n for alias in aliases:\n self._name_parser_map[alias]=parser\n \n return parser\n \n def _get_subactions(self):\n return self._choices_actions\n \n def __call__(self,parser,namespace,values,option_string=None ):\n parser_name=values[0]\n arg_strings=values[1:]\n \n \n if self.dest is not SUPPRESS:\n setattr(namespace,self.dest,parser_name)\n \n \n try :\n parser=self._name_parser_map[parser_name]\n except KeyError:\n args={'parser_name':parser_name,\n 'choices':', '.join(self._name_parser_map)}\n msg=_('unknown parser %(parser_name)r (choices: %(choices)s)')%args\n raise ArgumentError(self,msg)\n \n \n \n \n \n \n \n \n subnamespace,arg_strings=parser.parse_known_args(arg_strings,None )\n for key,value in vars(subnamespace).items():\n setattr(namespace,key,value)\n \n if arg_strings:\n vars(namespace).setdefault(_UNRECOGNIZED_ARGS_ATTR,[])\n getattr(namespace,_UNRECOGNIZED_ARGS_ATTR).extend(arg_strings)\n \nclass _ExtendAction(_AppendAction):\n def __call__(self,parser,namespace,values,option_string=None ):\n items=getattr(namespace,self.dest,None )\n items=_copy_items(items)\n items.extend(values)\n setattr(namespace,self.dest,items)\n \n \n \n \n \nclass FileType(object):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n def __init__(self,mode='r',bufsize=-1,encoding=None ,errors=None ):\n self._mode=mode\n self._bufsize=bufsize\n self._encoding=encoding\n self._errors=errors\n \n def __call__(self,string):\n \n if string =='-':\n if 'r'in self._mode:\n return _sys.stdin\n elif 'w'in self._mode:\n return _sys.stdout\n else :\n msg=_('argument \"-\" with mode %r')%self._mode\n raise ValueError(msg)\n \n \n try :\n return open(string,self._mode,self._bufsize,self._encoding,\n self._errors)\n except OSError as e:\n args={'filename':string,'error':e}\n message=_(\"can't open '%(filename)s': %(error)s\")\n raise ArgumentTypeError(message %args)\n \n def __repr__(self):\n args=self._mode,self._bufsize\n kwargs=[('encoding',self._encoding),('errors',self._errors)]\n args_str=', '.join([repr(arg)for arg in args if arg !=-1]+\n ['%s=%r'%(kw,arg)for kw,arg in kwargs\n if arg is not None ])\n return '%s(%s)'%(type(self).__name__,args_str)\n \n \n \n \n \nclass Namespace(_AttributeHolder):\n ''\n\n\n\n \n \n def __init__(self,**kwargs):\n for name in kwargs:\n setattr(self,name,kwargs[name])\n \n def __eq__(self,other):\n if not isinstance(other,Namespace):\n return NotImplemented\n return vars(self)==vars(other)\n \n def __contains__(self,key):\n return key in self.__dict__\n \n \nclass _ActionsContainer(object):\n\n def __init__(self,\n description,\n prefix_chars,\n argument_default,\n conflict_handler):\n super(_ActionsContainer,self).__init__()\n \n self.description=description\n self.argument_default=argument_default\n self.prefix_chars=prefix_chars\n self.conflict_handler=conflict_handler\n \n \n self._registries={}\n \n \n self.register('action',None ,_StoreAction)\n self.register('action','store',_StoreAction)\n self.register('action','store_const',_StoreConstAction)\n self.register('action','store_true',_StoreTrueAction)\n self.register('action','store_false',_StoreFalseAction)\n self.register('action','append',_AppendAction)\n self.register('action','append_const',_AppendConstAction)\n self.register('action','count',_CountAction)\n self.register('action','help',_HelpAction)\n self.register('action','version',_VersionAction)\n self.register('action','parsers',_SubParsersAction)\n self.register('action','extend',_ExtendAction)\n \n \n self._get_handler()\n \n \n self._actions=[]\n self._option_string_actions={}\n \n \n self._action_groups=[]\n self._mutually_exclusive_groups=[]\n \n \n self._defaults={}\n \n \n self._negative_number_matcher=_re.compile(r'^-\\d+$|^-\\d*\\.\\d+$')\n \n \n \n self._has_negative_number_optionals=[]\n \n \n \n \n def register(self,registry_name,value,object):\n registry=self._registries.setdefault(registry_name,{})\n registry[value]=object\n \n def _registry_get(self,registry_name,value,default=None ):\n return self._registries[registry_name].get(value,default)\n \n \n \n \n def set_defaults(self,**kwargs):\n self._defaults.update(kwargs)\n \n \n \n for action in self._actions:\n if action.dest in kwargs:\n action.default=kwargs[action.dest]\n \n def get_default(self,dest):\n for action in self._actions:\n if action.dest ==dest and action.default is not None :\n return action.default\n return self._defaults.get(dest,None )\n \n \n \n \n \n def add_argument(self,*args,**kwargs):\n ''\n\n\n \n \n \n \n \n chars=self.prefix_chars\n if not args or len(args)==1 and args[0][0]not in chars:\n if args and 'dest'in kwargs:\n raise ValueError('dest supplied twice for positional argument')\n kwargs=self._get_positional_kwargs(*args,**kwargs)\n \n \n else :\n kwargs=self._get_optional_kwargs(*args,**kwargs)\n \n \n if 'default'not in kwargs:\n dest=kwargs['dest']\n if dest in self._defaults:\n kwargs['default']=self._defaults[dest]\n elif self.argument_default is not None :\n kwargs['default']=self.argument_default\n \n \n action_class=self._pop_action_class(kwargs)\n if not callable(action_class):\n raise ValueError('unknown action \"%s\"'%(action_class,))\n action=action_class(**kwargs)\n \n \n type_func=self._registry_get('type',action.type,action.type)\n if not callable(type_func):\n raise ValueError('%r is not callable'%(type_func,))\n \n if type_func is FileType:\n raise ValueError('%r is a FileType class object, instance of it'\n ' must be passed'%(type_func,))\n \n \n if hasattr(self,\"_get_formatter\"):\n try :\n self._get_formatter()._format_args(action,None )\n except TypeError:\n raise ValueError(\"length of metavar tuple does not match nargs\")\n \n return self._add_action(action)\n \n def add_argument_group(self,*args,**kwargs):\n group=_ArgumentGroup(self,*args,**kwargs)\n self._action_groups.append(group)\n return group\n \n def add_mutually_exclusive_group(self,**kwargs):\n group=_MutuallyExclusiveGroup(self,**kwargs)\n self._mutually_exclusive_groups.append(group)\n return group\n \n def _add_action(self,action):\n \n self._check_conflict(action)\n \n \n self._actions.append(action)\n action.container=self\n \n \n for option_string in action.option_strings:\n self._option_string_actions[option_string]=action\n \n \n for option_string in action.option_strings:\n if self._negative_number_matcher.match(option_string):\n if not self._has_negative_number_optionals:\n self._has_negative_number_optionals.append(True )\n \n \n return action\n \n def _remove_action(self,action):\n self._actions.remove(action)\n \n def _add_container_actions(self,container):\n \n title_group_map={}\n for group in self._action_groups:\n if group.title in title_group_map:\n msg=_('cannot merge actions - two groups are named %r')\n raise ValueError(msg %(group.title))\n title_group_map[group.title]=group\n \n \n group_map={}\n for group in container._action_groups:\n \n \n \n if group.title not in title_group_map:\n title_group_map[group.title]=self.add_argument_group(\n title=group.title,\n description=group.description,\n conflict_handler=group.conflict_handler)\n \n \n for action in group._group_actions:\n group_map[action]=title_group_map[group.title]\n \n \n \n \n for group in container._mutually_exclusive_groups:\n mutex_group=self.add_mutually_exclusive_group(\n required=group.required)\n \n \n for action in group._group_actions:\n group_map[action]=mutex_group\n \n \n for action in container._actions:\n group_map.get(action,self)._add_action(action)\n \n def _get_positional_kwargs(self,dest,**kwargs):\n \n if 'required'in kwargs:\n msg=_(\"'required' is an invalid argument for positionals\")\n raise TypeError(msg)\n \n \n \n if kwargs.get('nargs')not in [OPTIONAL,ZERO_OR_MORE]:\n kwargs['required']=True\n if kwargs.get('nargs')==ZERO_OR_MORE and 'default'not in kwargs:\n kwargs['required']=True\n \n \n return dict(kwargs,dest=dest,option_strings=[])\n \n def _get_optional_kwargs(self,*args,**kwargs):\n \n option_strings=[]\n long_option_strings=[]\n for option_string in args:\n \n if not option_string[0]in self.prefix_chars:\n args={'option':option_string,\n 'prefix_chars':self.prefix_chars}\n msg=_('invalid option string %(option)r: '\n 'must start with a character %(prefix_chars)r')\n raise ValueError(msg %args)\n \n \n option_strings.append(option_string)\n if option_string[0]in self.prefix_chars:\n if len(option_string)>1:\n if option_string[1]in self.prefix_chars:\n long_option_strings.append(option_string)\n \n \n dest=kwargs.pop('dest',None )\n if dest is None :\n if long_option_strings:\n dest_option_string=long_option_strings[0]\n else :\n dest_option_string=option_strings[0]\n dest=dest_option_string.lstrip(self.prefix_chars)\n if not dest:\n msg=_('dest= is required for options like %r')\n raise ValueError(msg %option_string)\n dest=dest.replace('-','_')\n \n \n return dict(kwargs,dest=dest,option_strings=option_strings)\n \n def _pop_action_class(self,kwargs,default=None ):\n action=kwargs.pop('action',default)\n return self._registry_get('action',action,action)\n \n def _get_handler(self):\n \n handler_func_name='_handle_conflict_%s'%self.conflict_handler\n try :\n return getattr(self,handler_func_name)\n except AttributeError:\n msg=_('invalid conflict_resolution value: %r')\n raise ValueError(msg %self.conflict_handler)\n \n def _check_conflict(self,action):\n \n \n confl_optionals=[]\n for option_string in action.option_strings:\n if option_string in self._option_string_actions:\n confl_optional=self._option_string_actions[option_string]\n confl_optionals.append((option_string,confl_optional))\n \n \n if confl_optionals:\n conflict_handler=self._get_handler()\n conflict_handler(action,confl_optionals)\n \n def _handle_conflict_error(self,action,conflicting_actions):\n message=ngettext('conflicting option string: %s',\n 'conflicting option strings: %s',\n len(conflicting_actions))\n conflict_string=', '.join([option_string\n for option_string,action\n in conflicting_actions])\n raise ArgumentError(action,message %conflict_string)\n \n def _handle_conflict_resolve(self,action,conflicting_actions):\n \n \n for option_string,action in conflicting_actions:\n \n \n action.option_strings.remove(option_string)\n self._option_string_actions.pop(option_string,None )\n \n \n \n if not action.option_strings:\n action.container._remove_action(action)\n \n \nclass _ArgumentGroup(_ActionsContainer):\n\n def __init__(self,container,title=None ,description=None ,**kwargs):\n \n update=kwargs.setdefault\n update('conflict_handler',container.conflict_handler)\n update('prefix_chars',container.prefix_chars)\n update('argument_default',container.argument_default)\n super_init=super(_ArgumentGroup,self).__init__\n super_init(description=description,**kwargs)\n \n \n self.title=title\n self._group_actions=[]\n \n \n self._registries=container._registries\n self._actions=container._actions\n self._option_string_actions=container._option_string_actions\n self._defaults=container._defaults\n self._has_negative_number_optionals=\\\n container._has_negative_number_optionals\n self._mutually_exclusive_groups=container._mutually_exclusive_groups\n \n def _add_action(self,action):\n action=super(_ArgumentGroup,self)._add_action(action)\n self._group_actions.append(action)\n return action\n \n def _remove_action(self,action):\n super(_ArgumentGroup,self)._remove_action(action)\n self._group_actions.remove(action)\n \n \nclass _MutuallyExclusiveGroup(_ArgumentGroup):\n\n def __init__(self,container,required=False ):\n super(_MutuallyExclusiveGroup,self).__init__(container)\n self.required=required\n self._container=container\n \n def _add_action(self,action):\n if action.required:\n msg=_('mutually exclusive arguments must be optional')\n raise ValueError(msg)\n action=self._container._add_action(action)\n self._group_actions.append(action)\n return action\n \n def _remove_action(self,action):\n self._container._remove_action(action)\n self._group_actions.remove(action)\n \n \nclass ArgumentParser(_AttributeHolder,_ActionsContainer):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n def __init__(self,\n prog=None ,\n usage=None ,\n description=None ,\n epilog=None ,\n parents=[],\n formatter_class=HelpFormatter,\n prefix_chars='-',\n fromfile_prefix_chars=None ,\n argument_default=None ,\n conflict_handler='error',\n add_help=True ,\n allow_abbrev=True ):\n \n superinit=super(ArgumentParser,self).__init__\n superinit(description=description,\n prefix_chars=prefix_chars,\n argument_default=argument_default,\n conflict_handler=conflict_handler)\n \n \n if prog is None :\n prog=_os.path.basename(_sys.argv[0])\n \n self.prog=prog\n self.usage=usage\n self.epilog=epilog\n self.formatter_class=formatter_class\n self.fromfile_prefix_chars=fromfile_prefix_chars\n self.add_help=add_help\n self.allow_abbrev=allow_abbrev\n \n add_group=self.add_argument_group\n self._positionals=add_group(_('positional arguments'))\n self._optionals=add_group(_('optional arguments'))\n self._subparsers=None\n \n \n def identity(string):\n return string\n self.register('type',None ,identity)\n \n \n \n default_prefix='-'if '-'in prefix_chars else prefix_chars[0]\n if self.add_help:\n self.add_argument(\n default_prefix+'h',default_prefix *2+'help',\n action='help',default=SUPPRESS,\n help=_('show this help message and exit'))\n \n \n for parent in parents:\n self._add_container_actions(parent)\n try :\n defaults=parent._defaults\n except AttributeError:\n pass\n else :\n self._defaults.update(defaults)\n \n \n \n \n def _get_kwargs(self):\n names=[\n 'prog',\n 'usage',\n 'description',\n 'formatter_class',\n 'conflict_handler',\n 'add_help',\n ]\n return [(name,getattr(self,name))for name in names]\n \n \n \n \n def add_subparsers(self,**kwargs):\n if self._subparsers is not None :\n self.error(_('cannot have multiple subparser arguments'))\n \n \n kwargs.setdefault('parser_class',type(self))\n \n if 'title'in kwargs or 'description'in kwargs:\n title=_(kwargs.pop('title','subcommands'))\n description=_(kwargs.pop('description',None ))\n self._subparsers=self.add_argument_group(title,description)\n else :\n self._subparsers=self._positionals\n \n \n \n if kwargs.get('prog')is None :\n formatter=self._get_formatter()\n positionals=self._get_positional_actions()\n groups=self._mutually_exclusive_groups\n formatter.add_usage(self.usage,positionals,groups,'')\n kwargs['prog']=formatter.format_help().strip()\n \n \n parsers_class=self._pop_action_class(kwargs,'parsers')\n action=parsers_class(option_strings=[],**kwargs)\n self._subparsers._add_action(action)\n \n \n return action\n \n def _add_action(self,action):\n if action.option_strings:\n self._optionals._add_action(action)\n else :\n self._positionals._add_action(action)\n return action\n \n def _get_optional_actions(self):\n return [action\n for action in self._actions\n if action.option_strings]\n \n def _get_positional_actions(self):\n return [action\n for action in self._actions\n if not action.option_strings]\n \n \n \n \n def parse_args(self,args=None ,namespace=None ):\n args,argv=self.parse_known_args(args,namespace)\n if argv:\n msg=_('unrecognized arguments: %s')\n self.error(msg %' '.join(argv))\n return args\n \n def parse_known_args(self,args=None ,namespace=None ):\n if args is None :\n \n args=_sys.argv[1:]\n else :\n \n args=list(args)\n \n \n if namespace is None :\n namespace=Namespace()\n \n \n for action in self._actions:\n if action.dest is not SUPPRESS:\n if not hasattr(namespace,action.dest):\n if action.default is not SUPPRESS:\n setattr(namespace,action.dest,action.default)\n \n \n for dest in self._defaults:\n if not hasattr(namespace,dest):\n setattr(namespace,dest,self._defaults[dest])\n \n \n try :\n namespace,args=self._parse_known_args(args,namespace)\n if hasattr(namespace,_UNRECOGNIZED_ARGS_ATTR):\n args.extend(getattr(namespace,_UNRECOGNIZED_ARGS_ATTR))\n delattr(namespace,_UNRECOGNIZED_ARGS_ATTR)\n return namespace,args\n except ArgumentError:\n err=_sys.exc_info()[1]\n self.error(str(err))\n \n def _parse_known_args(self,arg_strings,namespace):\n \n if self.fromfile_prefix_chars is not None :\n arg_strings=self._read_args_from_files(arg_strings)\n \n \n \n action_conflicts={}\n for mutex_group in self._mutually_exclusive_groups:\n group_actions=mutex_group._group_actions\n for i,mutex_action in enumerate(mutex_group._group_actions):\n conflicts=action_conflicts.setdefault(mutex_action,[])\n conflicts.extend(group_actions[:i])\n conflicts.extend(group_actions[i+1:])\n \n \n \n \n option_string_indices={}\n arg_string_pattern_parts=[]\n arg_strings_iter=iter(arg_strings)\n for i,arg_string in enumerate(arg_strings_iter):\n \n \n if arg_string =='--':\n arg_string_pattern_parts.append('-')\n for arg_string in arg_strings_iter:\n arg_string_pattern_parts.append('A')\n \n \n \n else :\n option_tuple=self._parse_optional(arg_string)\n if option_tuple is None :\n pattern='A'\n else :\n option_string_indices[i]=option_tuple\n pattern='O'\n arg_string_pattern_parts.append(pattern)\n \n \n arg_strings_pattern=''.join(arg_string_pattern_parts)\n \n \n seen_actions=set()\n seen_non_default_actions=set()\n \n def take_action(action,argument_strings,option_string=None ):\n seen_actions.add(action)\n argument_values=self._get_values(action,argument_strings)\n \n \n \n \n if argument_values is not action.default:\n seen_non_default_actions.add(action)\n for conflict_action in action_conflicts.get(action,[]):\n if conflict_action in seen_non_default_actions:\n msg=_('not allowed with argument %s')\n action_name=_get_action_name(conflict_action)\n raise ArgumentError(action,msg %action_name)\n \n \n \n if argument_values is not SUPPRESS:\n action(self,namespace,argument_values,option_string)\n \n \n def consume_optional(start_index):\n \n \n option_tuple=option_string_indices[start_index]\n action,option_string,explicit_arg=option_tuple\n \n \n \n match_argument=self._match_argument\n action_tuples=[]\n while True :\n \n \n if action is None :\n extras.append(arg_strings[start_index])\n return start_index+1\n \n \n \n if explicit_arg is not None :\n arg_count=match_argument(action,'A')\n \n \n \n \n chars=self.prefix_chars\n if arg_count ==0 and option_string[1]not in chars:\n action_tuples.append((action,[],option_string))\n char=option_string[0]\n option_string=char+explicit_arg[0]\n new_explicit_arg=explicit_arg[1:]or None\n optionals_map=self._option_string_actions\n if option_string in optionals_map:\n action=optionals_map[option_string]\n explicit_arg=new_explicit_arg\n else :\n msg=_('ignored explicit argument %r')\n raise ArgumentError(action,msg %explicit_arg)\n \n \n \n elif arg_count ==1:\n stop=start_index+1\n args=[explicit_arg]\n action_tuples.append((action,args,option_string))\n break\n \n \n \n else :\n msg=_('ignored explicit argument %r')\n raise ArgumentError(action,msg %explicit_arg)\n \n \n \n \n else :\n start=start_index+1\n selected_patterns=arg_strings_pattern[start:]\n arg_count=match_argument(action,selected_patterns)\n stop=start+arg_count\n args=arg_strings[start:stop]\n action_tuples.append((action,args,option_string))\n break\n \n \n \n assert action_tuples\n for action,args,option_string in action_tuples:\n take_action(action,args,option_string)\n return stop\n \n \n \n positionals=self._get_positional_actions()\n \n \n def consume_positionals(start_index):\n \n match_partial=self._match_arguments_partial\n selected_pattern=arg_strings_pattern[start_index:]\n arg_counts=match_partial(positionals,selected_pattern)\n \n \n \n for action,arg_count in zip(positionals,arg_counts):\n args=arg_strings[start_index:start_index+arg_count]\n start_index +=arg_count\n take_action(action,args)\n \n \n \n positionals[:]=positionals[len(arg_counts):]\n return start_index\n \n \n \n extras=[]\n start_index=0\n if option_string_indices:\n max_option_string_index=max(option_string_indices)\n else :\n max_option_string_index=-1\n while start_index <=max_option_string_index:\n \n \n next_option_string_index=min([\n index\n for index in option_string_indices\n if index >=start_index])\n if start_index !=next_option_string_index:\n positionals_end_index=consume_positionals(start_index)\n \n \n \n if positionals_end_index >start_index:\n start_index=positionals_end_index\n continue\n else :\n start_index=positionals_end_index\n \n \n \n if start_index not in option_string_indices:\n strings=arg_strings[start_index:next_option_string_index]\n extras.extend(strings)\n start_index=next_option_string_index\n \n \n start_index=consume_optional(start_index)\n \n \n stop_index=consume_positionals(start_index)\n \n \n extras.extend(arg_strings[stop_index:])\n \n \n \n required_actions=[]\n for action in self._actions:\n if action not in seen_actions:\n if action.required:\n required_actions.append(_get_action_name(action))\n else :\n \n \n \n \n if (action.default is not None and\n isinstance(action.default,str)and\n hasattr(namespace,action.dest)and\n action.default is getattr(namespace,action.dest)):\n setattr(namespace,action.dest,\n self._get_value(action,action.default))\n \n if required_actions:\n self.error(_('the following arguments are required: %s')%\n ', '.join(required_actions))\n \n \n for group in self._mutually_exclusive_groups:\n if group.required:\n for action in group._group_actions:\n if action in seen_non_default_actions:\n break\n \n \n else :\n names=[_get_action_name(action)\n for action in group._group_actions\n if action.help is not SUPPRESS]\n msg=_('one of the arguments %s is required')\n self.error(msg %' '.join(names))\n \n \n return namespace,extras\n \n def _read_args_from_files(self,arg_strings):\n \n new_arg_strings=[]\n for arg_string in arg_strings:\n \n \n if not arg_string or arg_string[0]not in self.fromfile_prefix_chars:\n new_arg_strings.append(arg_string)\n \n \n else :\n try :\n with open(arg_string[1:])as args_file:\n arg_strings=[]\n for arg_line in args_file.read().splitlines():\n for arg in self.convert_arg_line_to_args(arg_line):\n arg_strings.append(arg)\n arg_strings=self._read_args_from_files(arg_strings)\n new_arg_strings.extend(arg_strings)\n except OSError:\n err=_sys.exc_info()[1]\n self.error(str(err))\n \n \n return new_arg_strings\n \n def convert_arg_line_to_args(self,arg_line):\n return [arg_line]\n \n def _match_argument(self,action,arg_strings_pattern):\n \n nargs_pattern=self._get_nargs_pattern(action)\n match=_re.match(nargs_pattern,arg_strings_pattern)\n \n \n if match is None :\n nargs_errors={\n None :_('expected one argument'),\n OPTIONAL:_('expected at most one argument'),\n ONE_OR_MORE:_('expected at least one argument'),\n }\n default=ngettext('expected %s argument',\n 'expected %s arguments',\n action.nargs)%action.nargs\n msg=nargs_errors.get(action.nargs,default)\n raise ArgumentError(action,msg)\n \n \n return len(match.group(1))\n \n def _match_arguments_partial(self,actions,arg_strings_pattern):\n \n \n result=[]\n for i in range(len(actions),0,-1):\n actions_slice=actions[:i]\n pattern=''.join([self._get_nargs_pattern(action)\n for action in actions_slice])\n match=_re.match(pattern,arg_strings_pattern)\n if match is not None :\n result.extend([len(string)for string in match.groups()])\n break\n \n \n return result\n \n def _parse_optional(self,arg_string):\n \n if not arg_string:\n return None\n \n \n if not arg_string[0]in self.prefix_chars:\n return None\n \n \n if arg_string in self._option_string_actions:\n action=self._option_string_actions[arg_string]\n return action,arg_string,None\n \n \n if len(arg_string)==1:\n return None\n \n \n if '='in arg_string:\n option_string,explicit_arg=arg_string.split('=',1)\n if option_string in self._option_string_actions:\n action=self._option_string_actions[option_string]\n return action,option_string,explicit_arg\n \n if self.allow_abbrev or not arg_string.startswith('--'):\n \n \n option_tuples=self._get_option_tuples(arg_string)\n \n \n if len(option_tuples)>1:\n options=', '.join([option_string\n for action,option_string,explicit_arg in option_tuples])\n args={'option':arg_string,'matches':options}\n msg=_('ambiguous option: %(option)s could match %(matches)s')\n self.error(msg %args)\n \n \n \n elif len(option_tuples)==1:\n option_tuple,=option_tuples\n return option_tuple\n \n \n \n \n if self._negative_number_matcher.match(arg_string):\n if not self._has_negative_number_optionals:\n return None\n \n \n if ' 'in arg_string:\n return None\n \n \n \n return None ,arg_string,None\n \n def _get_option_tuples(self,option_string):\n result=[]\n \n \n \n chars=self.prefix_chars\n if option_string[0]in chars and option_string[1]in chars:\n if '='in option_string:\n option_prefix,explicit_arg=option_string.split('=',1)\n else :\n option_prefix=option_string\n explicit_arg=None\n for option_string in self._option_string_actions:\n if option_string.startswith(option_prefix):\n action=self._option_string_actions[option_string]\n tup=action,option_string,explicit_arg\n result.append(tup)\n \n \n \n \n elif option_string[0]in chars and option_string[1]not in chars:\n option_prefix=option_string\n explicit_arg=None\n short_option_prefix=option_string[:2]\n short_explicit_arg=option_string[2:]\n \n for option_string in self._option_string_actions:\n if option_string ==short_option_prefix:\n action=self._option_string_actions[option_string]\n tup=action,option_string,short_explicit_arg\n result.append(tup)\n elif option_string.startswith(option_prefix):\n action=self._option_string_actions[option_string]\n tup=action,option_string,explicit_arg\n result.append(tup)\n \n \n else :\n self.error(_('unexpected option string: %s')%option_string)\n \n \n return result\n \n def _get_nargs_pattern(self,action):\n \n \n nargs=action.nargs\n \n \n if nargs is None :\n nargs_pattern='(-*A-*)'\n \n \n elif nargs ==OPTIONAL:\n nargs_pattern='(-*A?-*)'\n \n \n elif nargs ==ZERO_OR_MORE:\n nargs_pattern='(-*[A-]*)'\n \n \n elif nargs ==ONE_OR_MORE:\n nargs_pattern='(-*A[A-]*)'\n \n \n elif nargs ==REMAINDER:\n nargs_pattern='([-AO]*)'\n \n \n elif nargs ==PARSER:\n nargs_pattern='(-*A[-AO]*)'\n \n \n elif nargs ==SUPPRESS:\n nargs_pattern='(-*-*)'\n \n \n else :\n nargs_pattern='(-*%s-*)'%'-*'.join('A'*nargs)\n \n \n if action.option_strings:\n nargs_pattern=nargs_pattern.replace('-*','')\n nargs_pattern=nargs_pattern.replace('-','')\n \n \n return nargs_pattern\n \n \n \n \n \n def parse_intermixed_args(self,args=None ,namespace=None ):\n args,argv=self.parse_known_intermixed_args(args,namespace)\n if argv:\n msg=_('unrecognized arguments: %s')\n self.error(msg %' '.join(argv))\n return args\n \n def parse_known_intermixed_args(self,args=None ,namespace=None ):\n \n \n \n \n \n \n \n \n \n \n \n \n positionals=self._get_positional_actions()\n a=[action for action in positionals\n if action.nargs in [PARSER,REMAINDER]]\n if a:\n raise TypeError('parse_intermixed_args: positional arg'\n ' with nargs=%s'%a[0].nargs)\n \n if [action.dest for group in self._mutually_exclusive_groups\n for action in group._group_actions if action in positionals]:\n raise TypeError('parse_intermixed_args: positional in'\n ' mutuallyExclusiveGroup')\n \n try :\n save_usage=self.usage\n try :\n if self.usage is None :\n \n self.usage=self.format_usage()[7:]\n for action in positionals:\n \n action.save_nargs=action.nargs\n \n action.nargs=SUPPRESS\n action.save_default=action.default\n action.default=SUPPRESS\n namespace,remaining_args=self.parse_known_args(args,\n namespace)\n for action in positionals:\n \n if (hasattr(namespace,action.dest)\n and getattr(namespace,action.dest)==[]):\n from warnings import warn\n warn('Do not expect %s in %s'%(action.dest,namespace))\n delattr(namespace,action.dest)\n finally :\n \n for action in positionals:\n action.nargs=action.save_nargs\n action.default=action.save_default\n optionals=self._get_optional_actions()\n try :\n \n \n for action in optionals:\n action.save_required=action.required\n action.required=False\n for group in self._mutually_exclusive_groups:\n group.save_required=group.required\n group.required=False\n namespace,extras=self.parse_known_args(remaining_args,\n namespace)\n finally :\n \n for action in optionals:\n action.required=action.save_required\n for group in self._mutually_exclusive_groups:\n group.required=group.save_required\n finally :\n self.usage=save_usage\n return namespace,extras\n \n \n \n \n def _get_values(self,action,arg_strings):\n \n if action.nargs not in [PARSER,REMAINDER]:\n try :\n arg_strings.remove('--')\n except ValueError:\n pass\n \n \n if not arg_strings and action.nargs ==OPTIONAL:\n if action.option_strings:\n value=action.const\n else :\n value=action.default\n if isinstance(value,str):\n value=self._get_value(action,value)\n self._check_value(action,value)\n \n \n \n elif (not arg_strings and action.nargs ==ZERO_OR_MORE and\n not action.option_strings):\n if action.default is not None :\n value=action.default\n else :\n value=arg_strings\n self._check_value(action,value)\n \n \n elif len(arg_strings)==1 and action.nargs in [None ,OPTIONAL]:\n arg_string,=arg_strings\n value=self._get_value(action,arg_string)\n self._check_value(action,value)\n \n \n elif action.nargs ==REMAINDER:\n value=[self._get_value(action,v)for v in arg_strings]\n \n \n elif action.nargs ==PARSER:\n value=[self._get_value(action,v)for v in arg_strings]\n self._check_value(action,value[0])\n \n \n elif action.nargs ==SUPPRESS:\n value=SUPPRESS\n \n \n else :\n value=[self._get_value(action,v)for v in arg_strings]\n for v in value:\n self._check_value(action,v)\n \n \n return value\n \n def _get_value(self,action,arg_string):\n type_func=self._registry_get('type',action.type,action.type)\n if not callable(type_func):\n msg=_('%r is not callable')\n raise ArgumentError(action,msg %type_func)\n \n \n try :\n result=type_func(arg_string)\n \n \n except ArgumentTypeError:\n name=getattr(action.type,'__name__',repr(action.type))\n msg=str(_sys.exc_info()[1])\n raise ArgumentError(action,msg)\n \n \n except (TypeError,ValueError):\n name=getattr(action.type,'__name__',repr(action.type))\n args={'type':name,'value':arg_string}\n msg=_('invalid %(type)s value: %(value)r')\n raise ArgumentError(action,msg %args)\n \n \n return result\n \n def _check_value(self,action,value):\n \n if action.choices is not None and value not in action.choices:\n args={'value':value,\n 'choices':', '.join(map(repr,action.choices))}\n msg=_('invalid choice: %(value)r (choose from %(choices)s)')\n raise ArgumentError(action,msg %args)\n \n \n \n \n def format_usage(self):\n formatter=self._get_formatter()\n formatter.add_usage(self.usage,self._actions,\n self._mutually_exclusive_groups)\n return formatter.format_help()\n \n def format_help(self):\n formatter=self._get_formatter()\n \n \n formatter.add_usage(self.usage,self._actions,\n self._mutually_exclusive_groups)\n \n \n formatter.add_text(self.description)\n \n \n for action_group in self._action_groups:\n formatter.start_section(action_group.title)\n formatter.add_text(action_group.description)\n formatter.add_arguments(action_group._group_actions)\n formatter.end_section()\n \n \n formatter.add_text(self.epilog)\n \n \n return formatter.format_help()\n \n def _get_formatter(self):\n return self.formatter_class(prog=self.prog)\n \n \n \n \n def print_usage(self,file=None ):\n if file is None :\n file=_sys.stdout\n self._print_message(self.format_usage(),file)\n \n def print_help(self,file=None ):\n if file is None :\n file=_sys.stdout\n self._print_message(self.format_help(),file)\n \n def _print_message(self,message,file=None ):\n if message:\n if file is None :\n file=_sys.stderr\n file.write(message)\n \n \n \n \n def exit(self,status=0,message=None ):\n if message:\n self._print_message(message,_sys.stderr)\n _sys.exit(status)\n \n def error(self,message):\n ''\n\n\n\n\n\n\n \n self.print_usage(_sys.stderr)\n args={'prog':self.prog,'message':message}\n self.exit(2,_('%(prog)s: error: %(message)s\\n')%args)\n", ["copy", "gettext", "os", "re", "shutil", "sys", "textwrap", "warnings"]], "atexit": [".py", "''\n\n\n\n\n\nclass __loader__(object):\n pass\n \ndef _clear(*args,**kw):\n ''\n \n pass\n \ndef _run_exitfuncs(*args,**kw):\n ''\n \n pass\n \ndef register(*args,**kw):\n ''\n\n\n\n\n\n\n \n pass\n \ndef unregister(*args,**kw):\n ''\n\n\n\n \n pass\n", []], "base64": [".py", "#! /usr/bin/env python3\n\n\"\"\"Base16, Base32, Base64 (RFC 3548), Base85 and Ascii85 data encodings\"\"\"\n\n\n\n\n\nimport re\nimport struct\nimport binascii\n\n\n__all__=[\n\n'encode','decode','encodebytes','decodebytes',\n\n'b64encode','b64decode','b32encode','b32decode',\n'b16encode','b16decode',\n\n'b85encode','b85decode','a85encode','a85decode',\n\n'standard_b64encode','standard_b64decode',\n\n\n\n\n'urlsafe_b64encode','urlsafe_b64decode',\n]\n\n\nbytes_types=(bytes,bytearray)\n\ndef _bytes_from_decode_data(s):\n if isinstance(s,str):\n try :\n return s.encode('ascii')\n except UnicodeEncodeError:\n raise ValueError('string argument should contain only ASCII characters')\n if isinstance(s,bytes_types):\n return s\n try :\n return memoryview(s).tobytes()\n except TypeError:\n raise TypeError(\"argument should be a bytes-like object or ASCII \"\n \"string, not %r\"%s.__class__.__name__)from None\n \n \n \n \ndef b64encode(s,altchars=None ):\n ''\n\n\n\n\n \n encoded=binascii.b2a_base64(s,newline=False )\n if altchars is not None :\n assert len(altchars)==2,repr(altchars)\n return encoded.translate(bytes.maketrans(b'+/',altchars))\n return encoded\n \n \ndef b64decode(s,altchars=None ,validate=False ):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n \n s=_bytes_from_decode_data(s)\n if altchars is not None :\n altchars=_bytes_from_decode_data(altchars)\n assert len(altchars)==2,repr(altchars)\n s=s.translate(bytes.maketrans(altchars,b'+/'))\n if validate and not re.match(b'^[A-Za-z0-9+/]*={0,2}$',s):\n raise binascii.Error('Non-base64 digit found')\n return binascii.a2b_base64(s)\n \n \ndef standard_b64encode(s):\n ''\n\n\n \n return b64encode(s)\n \ndef standard_b64decode(s):\n ''\n\n\n\n\n\n \n return b64decode(s)\n \n \n_urlsafe_encode_translation=bytes.maketrans(b'+/',b'-_')\n_urlsafe_decode_translation=bytes.maketrans(b'-_',b'+/')\n\ndef urlsafe_b64encode(s):\n ''\n\n\n\n\n \n return b64encode(s).translate(_urlsafe_encode_translation)\n \ndef urlsafe_b64decode(s):\n ''\n\n\n\n\n\n\n\n\n \n s=_bytes_from_decode_data(s)\n s=s.translate(_urlsafe_decode_translation)\n return b64decode(s)\n \n \n \n \n_b32alphabet=b'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567'\n_b32tab2=None\n_b32rev=None\n\ndef b32encode(s):\n ''\n \n global _b32tab2\n \n \n if _b32tab2 is None :\n b32tab=[bytes((i,))for i in _b32alphabet]\n _b32tab2=[a+b for a in b32tab for b in b32tab]\n b32tab=None\n \n if not isinstance(s,bytes_types):\n s=memoryview(s).tobytes()\n leftover=len(s)%5\n \n if leftover:\n s=s+b'\\0'*(5 -leftover)\n encoded=bytearray()\n from_bytes=int.from_bytes\n b32tab2=_b32tab2\n for i in range(0,len(s),5):\n c=from_bytes(s[i:i+5],'big')\n encoded +=(b32tab2[c >>30]+\n b32tab2[(c >>20)&0x3ff]+\n b32tab2[(c >>10)&0x3ff]+\n b32tab2[c&0x3ff]\n )\n \n if leftover ==1:\n encoded[-6:]=b'======'\n elif leftover ==2:\n encoded[-4:]=b'===='\n elif leftover ==3:\n encoded[-3:]=b'==='\n elif leftover ==4:\n encoded[-1:]=b'='\n return bytes(encoded)\n \ndef b32decode(s,casefold=False ,map01=None ):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n global _b32rev\n \n \n if _b32rev is None :\n _b32rev={v:k for k,v in enumerate(_b32alphabet)}\n s=_bytes_from_decode_data(s)\n if len(s)%8:\n raise binascii.Error('Incorrect padding')\n \n \n \n if map01 is not None :\n map01=_bytes_from_decode_data(map01)\n assert len(map01)==1,repr(map01)\n s=s.translate(bytes.maketrans(b'01',b'O'+map01))\n if casefold:\n s=s.upper()\n \n \n \n l=len(s)\n s=s.rstrip(b'=')\n padchars=l -len(s)\n \n decoded=bytearray()\n b32rev=_b32rev\n for i in range(0,len(s),8):\n quanta=s[i:i+8]\n acc=0\n try :\n for c in quanta:\n acc=(acc <<5)+b32rev[c]\n except KeyError:\n raise binascii.Error('Non-base32 digit found')from None\n decoded +=acc.to_bytes(5,'big')\n \n if l %8 or padchars not in {0,1,3,4,6}:\n raise binascii.Error('Incorrect padding')\n if padchars and decoded:\n acc <<=5 *padchars\n last=acc.to_bytes(5,'big')\n leftover=(43 -5 *padchars)//8\n decoded[-5:]=last[:leftover]\n return bytes(decoded)\n \n \n \n \n \ndef b16encode(s):\n ''\n \n return binascii.hexlify(s).upper()\n \n \ndef b16decode(s,casefold=False ):\n ''\n\n\n\n\n\n\n\n \n s=_bytes_from_decode_data(s)\n if casefold:\n s=s.upper()\n if re.search(b'[^0-9A-F]',s):\n raise binascii.Error('Non-base16 digit found')\n return binascii.unhexlify(s)\n \n \n \n \n \n_a85chars=None\n_a85chars2=None\n_A85START=b\"<~\"\n_A85END=b\"~>\"\n\ndef _85encode(b,chars,chars2,pad=False ,foldnuls=False ,foldspaces=False ):\n\n if not isinstance(b,bytes_types):\n b=memoryview(b).tobytes()\n \n padding=(-len(b))%4\n if padding:\n b=b+b'\\0'*padding\n words=struct.Struct('!%dI'%(len(b)//4)).unpack(b)\n \n chunks=[b'z'if foldnuls and not word else\n b'y'if foldspaces and word ==0x20202020 else\n (chars2[word //614125]+\n chars2[word //85 %7225]+\n chars[word %85])\n for word in words]\n \n if padding and not pad:\n if chunks[-1]==b'z':\n chunks[-1]=chars[0]*5\n chunks[-1]=chunks[-1][:-padding]\n \n return b''.join(chunks)\n \ndef a85encode(b,*,foldspaces=False ,wrapcol=0,pad=False ,adobe=False ):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n global _a85chars,_a85chars2\n \n \n if _a85chars is None :\n _a85chars=[bytes((i,))for i in range(33,118)]\n _a85chars2=[(a+b)for a in _a85chars for b in _a85chars]\n \n result=_85encode(b,_a85chars,_a85chars2,pad,True ,foldspaces)\n \n if adobe:\n result=_A85START+result\n if wrapcol:\n wrapcol=max(2 if adobe else 1,wrapcol)\n chunks=[result[i:i+wrapcol]\n for i in range(0,len(result),wrapcol)]\n if adobe:\n if len(chunks[-1])+2 >wrapcol:\n chunks.append(b'')\n result=b'\\n'.join(chunks)\n if adobe:\n result +=_A85END\n \n return result\n \ndef a85decode(b,*,foldspaces=False ,adobe=False ,ignorechars=b' \\t\\n\\r\\v'):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n b=_bytes_from_decode_data(b)\n if adobe:\n if not b.endswith(_A85END):\n raise ValueError(\n \"Ascii85 encoded byte sequences must end \"\n \"with {!r}\".format(_A85END)\n )\n if b.startswith(_A85START):\n b=b[2:-2]\n else :\n b=b[:-2]\n \n \n \n \n packI=struct.Struct('!I').pack\n decoded=[]\n decoded_append=decoded.append\n curr=[]\n curr_append=curr.append\n curr_clear=curr.clear\n for x in b+b'u'*4:\n if b'!'[0]<=x <=b'u'[0]:\n curr_append(x)\n if len(curr)==5:\n acc=0\n for x in curr:\n acc=85 *acc+(x -33)\n try :\n decoded_append(packI(acc))\n except struct.error:\n raise ValueError('Ascii85 overflow')from None\n curr_clear()\n elif x ==b'z'[0]:\n if curr:\n raise ValueError('z inside Ascii85 5-tuple')\n decoded_append(b'\\0\\0\\0\\0')\n elif foldspaces and x ==b'y'[0]:\n if curr:\n raise ValueError('y inside Ascii85 5-tuple')\n decoded_append(b'\\x20\\x20\\x20\\x20')\n elif x in ignorechars:\n \n continue\n else :\n raise ValueError('Non-Ascii85 digit found: %c'%x)\n \n result=b''.join(decoded)\n padding=4 -len(curr)\n if padding:\n \n result=result[:-padding]\n return result\n \n \n \n_b85alphabet=(b\"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ\"\nb\"abcdefghijklmnopqrstuvwxyz!#$%&()*+-;<=>?@^_`{|}~\")\n_b85chars=None\n_b85chars2=None\n_b85dec=None\n\ndef b85encode(b,pad=False ):\n ''\n\n\n\n \n global _b85chars,_b85chars2\n \n \n if _b85chars is None :\n _b85chars=[bytes((i,))for i in _b85alphabet]\n _b85chars2=[(a+b)for a in _b85chars for b in _b85chars]\n return _85encode(b,_b85chars,_b85chars2,pad)\n \ndef b85decode(b):\n ''\n\n\n \n global _b85dec\n \n \n if _b85dec is None :\n _b85dec=[None ]*256\n for i,c in enumerate(_b85alphabet):\n _b85dec[c]=i\n \n b=_bytes_from_decode_data(b)\n padding=(-len(b))%5\n b=b+b'~'*padding\n out=[]\n packI=struct.Struct('!I').pack\n for i in range(0,len(b),5):\n chunk=b[i:i+5]\n acc=0\n try :\n for c in chunk:\n acc=acc *85+_b85dec[c]\n except TypeError:\n for j,c in enumerate(chunk):\n if _b85dec[c]is None :\n raise ValueError('bad base85 character at position %d'\n %(i+j))from None\n raise\n try :\n out.append(packI(acc))\n except struct.error:\n raise ValueError('base85 overflow in hunk starting at byte %d'\n %i)from None\n \n result=b''.join(out)\n if padding:\n result=result[:-padding]\n return result\n \n \n \n \n \nMAXLINESIZE=76\nMAXBINSIZE=(MAXLINESIZE //4)*3\n\ndef encode(input,output):\n ''\n while True :\n s=input.read(MAXBINSIZE)\n if not s:\n break\n while len(s)\":\n return filename\n canonic=self.fncache.get(filename)\n if not canonic:\n canonic=os.path.abspath(filename)\n canonic=os.path.normcase(canonic)\n self.fncache[filename]=canonic\n return canonic\n \n def reset(self):\n ''\n import linecache\n linecache.checkcache()\n self.botframe=None\n self._set_stopinfo(None ,None )\n \n def trace_dispatch(self,frame,event,arg):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n if self.quitting:\n return\n if event =='line':\n return self.dispatch_line(frame)\n if event =='call':\n return self.dispatch_call(frame,arg)\n if event =='return':\n return self.dispatch_return(frame,arg)\n if event =='exception':\n return self.dispatch_exception(frame,arg)\n if event =='c_call':\n return self.trace_dispatch\n if event =='c_exception':\n return self.trace_dispatch\n if event =='c_return':\n return self.trace_dispatch\n print('bdb.Bdb.dispatch: unknown debugging event:',repr(event))\n return self.trace_dispatch\n \n def dispatch_line(self,frame):\n ''\n\n\n\n\n \n if self.stop_here(frame)or self.break_here(frame):\n self.user_line(frame)\n if self.quitting:raise BdbQuit\n return self.trace_dispatch\n \n def dispatch_call(self,frame,arg):\n ''\n\n\n\n\n \n \n if self.botframe is None :\n \n self.botframe=frame.f_back\n return self.trace_dispatch\n if not (self.stop_here(frame)or self.break_anywhere(frame)):\n \n return\n \n if self.stopframe and frame.f_code.co_flags&GENERATOR_AND_COROUTINE_FLAGS:\n return self.trace_dispatch\n self.user_call(frame,arg)\n if self.quitting:raise BdbQuit\n return self.trace_dispatch\n \n def dispatch_return(self,frame,arg):\n ''\n\n\n\n\n \n if self.stop_here(frame)or frame ==self.returnframe:\n \n if self.stopframe and frame.f_code.co_flags&GENERATOR_AND_COROUTINE_FLAGS:\n return self.trace_dispatch\n try :\n self.frame_returning=frame\n self.user_return(frame,arg)\n finally :\n self.frame_returning=None\n if self.quitting:raise BdbQuit\n \n if self.stopframe is frame and self.stoplineno !=-1:\n self._set_stopinfo(None ,None )\n return self.trace_dispatch\n \n def dispatch_exception(self,frame,arg):\n ''\n\n\n\n\n \n if self.stop_here(frame):\n \n \n \n if not (frame.f_code.co_flags&GENERATOR_AND_COROUTINE_FLAGS\n and arg[0]is StopIteration and arg[2]is None ):\n self.user_exception(frame,arg)\n if self.quitting:raise BdbQuit\n \n \n \n \n elif (self.stopframe and frame is not self.stopframe\n and self.stopframe.f_code.co_flags&GENERATOR_AND_COROUTINE_FLAGS\n and arg[0]in (StopIteration,GeneratorExit)):\n self.user_exception(frame,arg)\n if self.quitting:raise BdbQuit\n \n return self.trace_dispatch\n \n \n \n \n \n def is_skipped_module(self,module_name):\n ''\n if module_name is None :\n return False\n for pattern in self.skip:\n if fnmatch.fnmatch(module_name,pattern):\n return True\n return False\n \n def stop_here(self,frame):\n ''\n \n \n if self.skip and\\\n self.is_skipped_module(frame.f_globals.get('__name__')):\n return False\n if frame is self.stopframe:\n if self.stoplineno ==-1:\n return False\n return frame.f_lineno >=self.stoplineno\n if not self.stopframe:\n return True\n return False\n \n def break_here(self,frame):\n ''\n\n\n\n \n filename=self.canonic(frame.f_code.co_filename)\n if filename not in self.breaks:\n return False\n lineno=frame.f_lineno\n if lineno not in self.breaks[filename]:\n \n \n lineno=frame.f_code.co_firstlineno\n if lineno not in self.breaks[filename]:\n return False\n \n \n (bp,flag)=effective(filename,lineno,frame)\n if bp:\n self.currentbp=bp.number\n if (flag and bp.temporary):\n self.do_clear(str(bp.number))\n return True\n else :\n return False\n \n def do_clear(self,arg):\n ''\n\n\n \n raise NotImplementedError(\"subclass of bdb must implement do_clear()\")\n \n def break_anywhere(self,frame):\n ''\n \n return self.canonic(frame.f_code.co_filename)in self.breaks\n \n \n \n \n def user_call(self,frame,argument_list):\n ''\n pass\n \n def user_line(self,frame):\n ''\n pass\n \n def user_return(self,frame,return_value):\n ''\n pass\n \n def user_exception(self,frame,exc_info):\n ''\n pass\n \n def _set_stopinfo(self,stopframe,returnframe,stoplineno=0):\n ''\n\n\n\n\n \n self.stopframe=stopframe\n self.returnframe=returnframe\n self.quitting=False\n \n \n self.stoplineno=stoplineno\n \n \n \n \n def set_until(self,frame,lineno=None ):\n ''\n \n \n if lineno is None :\n lineno=frame.f_lineno+1\n self._set_stopinfo(frame,frame,lineno)\n \n def set_step(self):\n ''\n \n \n \n \n if self.frame_returning:\n caller_frame=self.frame_returning.f_back\n if caller_frame and not caller_frame.f_trace:\n caller_frame.f_trace=self.trace_dispatch\n self._set_stopinfo(None ,None )\n \n def set_next(self,frame):\n ''\n self._set_stopinfo(frame,None )\n \n def set_return(self,frame):\n ''\n if frame.f_code.co_flags&GENERATOR_AND_COROUTINE_FLAGS:\n self._set_stopinfo(frame,None ,-1)\n else :\n self._set_stopinfo(frame.f_back,frame)\n \n def set_trace(self,frame=None ):\n ''\n\n\n \n if frame is None :\n frame=sys._getframe().f_back\n self.reset()\n while frame:\n frame.f_trace=self.trace_dispatch\n self.botframe=frame\n frame=frame.f_back\n self.set_step()\n sys.settrace(self.trace_dispatch)\n \n def set_continue(self):\n ''\n\n\n \n \n self._set_stopinfo(self.botframe,None ,-1)\n if not self.breaks:\n \n sys.settrace(None )\n frame=sys._getframe().f_back\n while frame and frame is not self.botframe:\n del frame.f_trace\n frame=frame.f_back\n \n def set_quit(self):\n ''\n\n\n \n self.stopframe=self.botframe\n self.returnframe=None\n self.quitting=True\n sys.settrace(None )\n \n \n \n \n \n \n \n \n def set_break(self,filename,lineno,temporary=False ,cond=None ,\n funcname=None ):\n ''\n\n\n\n \n filename=self.canonic(filename)\n import linecache\n line=linecache.getline(filename,lineno)\n if not line:\n return 'Line %s:%d does not exist'%(filename,lineno)\n list=self.breaks.setdefault(filename,[])\n if lineno not in list:\n list.append(lineno)\n bp=Breakpoint(filename,lineno,temporary,cond,funcname)\n return None\n \n def _prune_breaks(self,filename,lineno):\n ''\n\n\n\n\n\n \n if (filename,lineno)not in Breakpoint.bplist:\n self.breaks[filename].remove(lineno)\n if not self.breaks[filename]:\n del self.breaks[filename]\n \n def clear_break(self,filename,lineno):\n ''\n\n\n \n filename=self.canonic(filename)\n if filename not in self.breaks:\n return 'There are no breakpoints in %s'%filename\n if lineno not in self.breaks[filename]:\n return 'There is no breakpoint at %s:%d'%(filename,lineno)\n \n \n for bp in Breakpoint.bplist[filename,lineno][:]:\n bp.deleteMe()\n self._prune_breaks(filename,lineno)\n return None\n \n def clear_bpbynumber(self,arg):\n ''\n\n\n \n try :\n bp=self.get_bpbynumber(arg)\n except ValueError as err:\n return str(err)\n bp.deleteMe()\n self._prune_breaks(bp.file,bp.line)\n return None\n \n def clear_all_file_breaks(self,filename):\n ''\n\n\n \n filename=self.canonic(filename)\n if filename not in self.breaks:\n return 'There are no breakpoints in %s'%filename\n for line in self.breaks[filename]:\n blist=Breakpoint.bplist[filename,line]\n for bp in blist:\n bp.deleteMe()\n del self.breaks[filename]\n return None\n \n def clear_all_breaks(self):\n ''\n\n\n \n if not self.breaks:\n return 'There are no breakpoints'\n for bp in Breakpoint.bpbynumber:\n if bp:\n bp.deleteMe()\n self.breaks={}\n return None\n \n def get_bpbynumber(self,arg):\n ''\n\n\n\n \n if not arg:\n raise ValueError('Breakpoint number expected')\n try :\n number=int(arg)\n except ValueError:\n raise ValueError('Non-numeric breakpoint number %s'%arg)from None\n try :\n bp=Breakpoint.bpbynumber[number]\n except IndexError:\n raise ValueError('Breakpoint number %d out of range'%number)from None\n if bp is None :\n raise ValueError('Breakpoint %d already deleted'%number)\n return bp\n \n def get_break(self,filename,lineno):\n ''\n filename=self.canonic(filename)\n return filename in self.breaks and\\\n lineno in self.breaks[filename]\n \n def get_breaks(self,filename,lineno):\n ''\n\n\n \n filename=self.canonic(filename)\n return filename in self.breaks and\\\n lineno in self.breaks[filename]and\\\n Breakpoint.bplist[filename,lineno]or []\n \n def get_file_breaks(self,filename):\n ''\n\n\n \n filename=self.canonic(filename)\n if filename in self.breaks:\n return self.breaks[filename]\n else :\n return []\n \n def get_all_breaks(self):\n ''\n return self.breaks\n \n \n \n \n def get_stack(self,f,t):\n ''\n\n\n\n \n stack=[]\n if t and t.tb_frame is f:\n t=t.tb_next\n while f is not None :\n stack.append((f,f.f_lineno))\n if f is self.botframe:\n break\n f=f.f_back\n stack.reverse()\n i=max(0,len(stack)-1)\n while t is not None :\n stack.append((t.tb_frame,t.tb_lineno))\n t=t.tb_next\n if f is None :\n i=max(0,len(stack)-1)\n return stack,i\n \n def format_stack_entry(self,frame_lineno,lprefix=': '):\n ''\n\n\n\n\n\n\n \n import linecache,reprlib\n frame,lineno=frame_lineno\n filename=self.canonic(frame.f_code.co_filename)\n s='%s(%r)'%(filename,lineno)\n if frame.f_code.co_name:\n s +=frame.f_code.co_name\n else :\n s +=\"\"\n if '__args__'in frame.f_locals:\n args=frame.f_locals['__args__']\n else :\n args=None\n if args:\n s +=reprlib.repr(args)\n else :\n s +='()'\n if '__return__'in frame.f_locals:\n rv=frame.f_locals['__return__']\n s +='->'\n s +=reprlib.repr(rv)\n line=linecache.getline(filename,lineno,frame.f_globals)\n if line:\n s +=lprefix+line.strip()\n return s\n \n \n \n \n \n def run(self,cmd,globals=None ,locals=None ):\n ''\n\n\n \n if globals is None :\n import __main__\n globals=__main__.__dict__\n if locals is None :\n locals=globals\n self.reset()\n if isinstance(cmd,str):\n cmd=compile(cmd,\"\",\"exec\")\n sys.settrace(self.trace_dispatch)\n try :\n exec(cmd,globals,locals)\n except BdbQuit:\n pass\n finally :\n self.quitting=True\n sys.settrace(None )\n \n def runeval(self,expr,globals=None ,locals=None ):\n ''\n\n\n \n if globals is None :\n import __main__\n globals=__main__.__dict__\n if locals is None :\n locals=globals\n self.reset()\n sys.settrace(self.trace_dispatch)\n try :\n return eval(expr,globals,locals)\n except BdbQuit:\n pass\n finally :\n self.quitting=True\n sys.settrace(None )\n \n def runctx(self,cmd,globals,locals):\n ''\n \n self.run(cmd,globals,locals)\n \n \n \n def runcall(*args,**kwds):\n ''\n\n\n \n if len(args)>=2:\n self,func,*args=args\n elif not args:\n raise TypeError(\"descriptor 'runcall' of 'Bdb' object \"\n \"needs an argument\")\n elif 'func'in kwds:\n func=kwds.pop('func')\n self,*args=args\n import warnings\n warnings.warn(\"Passing 'func' as keyword argument is deprecated\",\n DeprecationWarning,stacklevel=2)\n else :\n raise TypeError('runcall expected at least 1 positional argument, '\n 'got %d'%(len(args)-1))\n \n self.reset()\n sys.settrace(self.trace_dispatch)\n res=None\n try :\n res=func(*args,**kwds)\n except BdbQuit:\n pass\n finally :\n self.quitting=True\n sys.settrace(None )\n return res\n runcall.__text_signature__='($self, func, /, *args, **kwds)'\n \n \ndef set_trace():\n ''\n Bdb().set_trace()\n \n \nclass Breakpoint:\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n \n \n \n next=1\n bplist={}\n bpbynumber=[None ]\n \n \n \n def __init__(self,file,line,temporary=False ,cond=None ,funcname=None ):\n self.funcname=funcname\n \n self.func_first_executable_line=None\n self.file=file\n self.line=line\n self.temporary=temporary\n self.cond=cond\n self.enabled=True\n self.ignore=0\n self.hits=0\n self.number=Breakpoint.next\n Breakpoint.next +=1\n \n self.bpbynumber.append(self)\n if (file,line)in self.bplist:\n self.bplist[file,line].append(self)\n else :\n self.bplist[file,line]=[self]\n \n def deleteMe(self):\n ''\n\n\n\n \n \n index=(self.file,self.line)\n self.bpbynumber[self.number]=None\n self.bplist[index].remove(self)\n if not self.bplist[index]:\n \n del self.bplist[index]\n \n def enable(self):\n ''\n self.enabled=True\n \n def disable(self):\n ''\n self.enabled=False\n \n def bpprint(self,out=None ):\n ''\n\n\n\n \n if out is None :\n out=sys.stdout\n print(self.bpformat(),file=out)\n \n def bpformat(self):\n ''\n\n\n\n\n\n \n if self.temporary:\n disp='del '\n else :\n disp='keep '\n if self.enabled:\n disp=disp+'yes '\n else :\n disp=disp+'no '\n ret='%-4dbreakpoint %s at %s:%d'%(self.number,disp,\n self.file,self.line)\n if self.cond:\n ret +='\\n\\tstop only if %s'%(self.cond,)\n if self.ignore:\n ret +='\\n\\tignore next %d hits'%(self.ignore,)\n if self.hits:\n if self.hits >1:\n ss='s'\n else :\n ss=''\n ret +='\\n\\tbreakpoint already hit %d time%s'%(self.hits,ss)\n return ret\n \n def __str__(self):\n ''\n return 'breakpoint %s at %s:%s'%(self.number,self.file,self.line)\n \n \n \n \ndef checkfuncname(b,frame):\n ''\n\n\n\n\n\n \n if not b.funcname:\n \n if b.line !=frame.f_lineno:\n \n \n return False\n return True\n \n \n if frame.f_code.co_name !=b.funcname:\n \n return False\n \n \n if not b.func_first_executable_line:\n \n b.func_first_executable_line=frame.f_lineno\n \n if b.func_first_executable_line !=frame.f_lineno:\n \n return False\n return True\n \n \n \n \ndef effective(file,line,frame):\n ''\n\n\n\n\n\n \n possibles=Breakpoint.bplist[file,line]\n for b in possibles:\n if not b.enabled:\n continue\n if not checkfuncname(b,frame):\n continue\n \n b.hits +=1\n if not b.cond:\n \n if b.ignore >0:\n b.ignore -=1\n continue\n else :\n \n return (b,True )\n else :\n \n \n \n try :\n val=eval(b.cond,frame.f_globals,frame.f_locals)\n if val:\n if b.ignore >0:\n b.ignore -=1\n \n else :\n return (b,True )\n \n \n except :\n \n \n \n return (b,False )\n return (None ,None )\n \n \n \n \nclass Tdb(Bdb):\n def user_call(self,frame,args):\n name=frame.f_code.co_name\n if not name:name='???'\n print('+++ call',name,args)\n def user_line(self,frame):\n import linecache\n name=frame.f_code.co_name\n if not name:name='???'\n fn=self.canonic(frame.f_code.co_filename)\n line=linecache.getline(fn,frame.f_lineno,frame.f_globals)\n print('+++',fn,frame.f_lineno,name,':',line.strip())\n def user_return(self,frame,retval):\n print('+++ return',retval)\n def user_exception(self,frame,exc_stuff):\n print('+++ exception',exc_stuff)\n self.set_continue()\n \ndef foo(n):\n print('foo(',n,')')\n x=bar(n *10)\n print('bar returned',x)\n \ndef bar(a):\n print('bar(',a,')')\n return a /2\n \ndef test():\n t=Tdb()\n t.run('import bdb; bdb.foo(10)')\n", ["__main__", "fnmatch", "inspect", "linecache", "os", "reprlib", "sys", "warnings"]], "binascii": [".py", "''\n\n\n\n\n\n\n\nimport _base64\n\nfrom _binascii import *\n\nclass Error(ValueError):\n def __init__(self,msg=''):\n self._msg=msg\n \n def __str__(self):\n return \" binascii.Error: \"+self._msg\n \n \nclass Done(Exception):\n pass\n \nclass Incomplete(Error):\n pass\n \ndef a2b_uu(s):\n if not s:\n return ''\n \n length=(ord(s[0])-0x20)%64\n \n def quadruplets_gen(s):\n while s:\n try :\n yield ord(s[0]),ord(s[1]),ord(s[2]),ord(s[3])\n except IndexError:\n s +=' '\n yield ord(s[0]),ord(s[1]),ord(s[2]),ord(s[3])\n return\n s=s[4:]\n \n try :\n result=[''.join(\n [chr((A -0x20)<<2 |(((B -0x20)>>4)&0x3)),\n chr(((B -0x20)&0xf)<<4 |(((C -0x20)>>2)&0xf)),\n chr(((C -0x20)&0x3)<<6 |((D -0x20)&0x3f))\n ])for A,B,C,D in quadruplets_gen(s[1:].rstrip())]\n except ValueError:\n raise Error('Illegal char')\n result=''.join(result)\n trailingdata=result[length:]\n if trailingdata.strip('\\x00'):\n raise Error('Trailing garbage')\n result=result[:length]\n if len(result)>2)&0x3F],\n table_b2a_base64[((A <<4)|((B >>4)&0xF))&0x3F],\n table_b2a_base64[((B <<2)|((C >>6)&0x3))&0x3F],\n table_b2a_base64[(C)&0x3F]])\n for A,B,C in a]\n \n final=s[length -final_length:]\n if final_length ==0:\n snippet=''\n elif final_length ==1:\n a=final[0]\n snippet=table_b2a_base64[(a >>2)&0x3F]+\\\n table_b2a_base64[(a <<4)&0x3F]+'=='\n else :\n a=final[0]\n b=final[1]\n snippet=table_b2a_base64[(a >>2)&0x3F]+\\\n table_b2a_base64[((a <<4)|(b >>4)&0xF)&0x3F]+\\\n table_b2a_base64[(b <<2)&0x3F]+'='\n \n result=''.join(result)+snippet\n if newline:\n result +='\\n'\n return bytes(result,__BRYTHON__.charset)\n \ndef a2b_qp(s,header=False ):\n inp=0\n odata=[]\n while inp =len(s):\n break\n \n if (s[inp]=='\\n')or (s[inp]=='\\r'):\n if s[inp]!='\\n':\n while inp 0 and data[lf -1]=='\\r'\n \n inp=0\n linelen=0\n odata=[]\n while inp '~'or\n c =='='or\n (header and c =='_')or\n (c =='.'and linelen ==0 and (inp+1 ==len(data)or\n data[inp+1]=='\\n'or\n data[inp+1]=='\\r'))or\n (not istext and (c =='\\r'or c =='\\n'))or\n ((c =='\\t'or c ==' ')and (inp+1 ==len(data)))or\n (c <=' 'and c !='\\r'and c !='\\n'and\n (quotetabs or (not quotetabs and (c !='\\t'and c !=' '))))):\n linelen +=3\n if linelen >=MAXLINESIZE:\n odata.append('=')\n if crlf:odata.append('\\r')\n odata.append('\\n')\n linelen=3\n odata.append('='+two_hex_digits(ord(c)))\n inp +=1\n else :\n if (istext and\n (c =='\\n'or (inp+1 0 and\n (odata[-1]==' 'or odata[-1]=='\\t')):\n ch=ord(odata[-1])\n odata[-1]='='\n odata.append(two_hex_digits(ch))\n \n if crlf:odata.append('\\r')\n odata.append('\\n')\n if c =='\\r':\n inp +=2\n else :\n inp +=1\n else :\n if (inp+1 =MAXLINESIZE):\n odata.append('=')\n if crlf:odata.append('\\r')\n odata.append('\\n')\n linelen=0\n \n linelen +=1\n if header and c ==' ':\n c='_'\n odata.append(c)\n inp +=1\n return ''.join(odata)\n \nhex_numbers='0123456789ABCDEF'\ndef hex(n):\n if n ==0:\n return '0'\n \n if n <0:\n n=-n\n sign='-'\n else :\n sign=''\n arr=[]\n \n def hex_gen(n):\n ''\n while n:\n yield n %0x10\n n=n /0x10\n \n for nibble in hex_gen(n):\n arr=[hex_numbers[nibble]]+arr\n return sign+''.join(arr)\n \ndef two_hex_digits(n):\n return hex_numbers[n /0x10]+hex_numbers[n %0x10]\n \n \ndef strhex_to_int(s):\n i=0\n for c in s:\n i=i *0x10+hex_numbers.index(c)\n return i\n \nhqx_encoding='!\"#$%&\\'()*+,-012345689@ABCDEFGHIJKLMNPQRSTUVXYZ[`abcdefhijklmpqr'\n\nDONE=0x7f\nSKIP=0x7e\nFAIL=0x7d\n\ntable_a2b_hqx=[\n\nFAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,\n\nFAIL,FAIL,SKIP,FAIL,FAIL,SKIP,FAIL,FAIL,\n\nFAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,\n\nFAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,\n\nFAIL,0x00,0x01,0x02,0x03,0x04,0x05,0x06,\n\n0x07,0x08,0x09,0x0A,0x0B,0x0C,FAIL,FAIL,\n\n0x0D,0x0E,0x0F,0x10,0x11,0x12,0x13,FAIL,\n\n0x14,0x15,DONE,FAIL,FAIL,FAIL,FAIL,FAIL,\n\n0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,\n\n0x1E,0x1F,0x20,0x21,0x22,0x23,0x24,FAIL,\n\n0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,FAIL,\n\n0x2C,0x2D,0x2E,0x2F,FAIL,FAIL,FAIL,FAIL,\n\n0x30,0x31,0x32,0x33,0x34,0x35,0x36,FAIL,\n\n0x37,0x38,0x39,0x3A,0x3B,0x3C,FAIL,FAIL,\n\n0x3D,0x3E,0x3F,FAIL,FAIL,FAIL,FAIL,FAIL,\n\nFAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,\nFAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,\nFAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,\nFAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,\nFAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,\nFAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,\nFAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,\nFAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,\nFAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,\nFAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,\nFAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,\nFAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,\nFAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,\nFAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,\nFAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,\nFAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,\nFAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,\n]\n\ndef a2b_hqx(s):\n result=[]\n \n def quadruples_gen(s):\n t=[]\n for c in s:\n res=table_a2b_hqx[ord(c)]\n if res ==SKIP:\n continue\n elif res ==FAIL:\n raise Error('Illegal character')\n elif res ==DONE:\n yield t\n raise Done\n else :\n t.append(res)\n if len(t)==4:\n yield t\n t=[]\n yield t\n \n done=0\n try :\n for snippet in quadruples_gen(s):\n length=len(snippet)\n if length ==4:\n result.append(chr(((snippet[0]&0x3f)<<2)|(snippet[1]>>4)))\n result.append(chr(((snippet[1]&0x0f)<<4)|(snippet[2]>>2)))\n result.append(chr(((snippet[2]&0x03)<<6)|(snippet[3])))\n elif length ==3:\n result.append(chr(((snippet[0]&0x3f)<<2)|(snippet[1]>>4)))\n result.append(chr(((snippet[1]&0x0f)<<4)|(snippet[2]>>2)))\n elif length ==2:\n result.append(chr(((snippet[0]&0x3f)<<2)|(snippet[1]>>4)))\n except Done:\n done=1\n except Error:\n raise\n return (''.join(result),done)\n \n \n \ndef b2a_hqx(s):\n result=[]\n \n def triples_gen(s):\n while s:\n try :\n yield ord(s[0]),ord(s[1]),ord(s[2])\n except IndexError:\n yield tuple([ord(c)for c in s])\n s=s[3:]\n \n for snippet in triples_gen(s):\n length=len(snippet)\n if length ==3:\n result.append(\n hqx_encoding[(snippet[0]&0xfc)>>2])\n result.append(hqx_encoding[\n ((snippet[0]&0x03)<<4)|((snippet[1]&0xf0)>>4)])\n result.append(hqx_encoding[\n (snippet[1]&0x0f)<<2 |((snippet[2]&0xc0)>>6)])\n result.append(hqx_encoding[snippet[2]&0x3f])\n elif length ==2:\n result.append(\n hqx_encoding[(snippet[0]&0xfc)>>2])\n result.append(hqx_encoding[\n ((snippet[0]&0x03)<<4)|((snippet[1]&0xf0)>>4)])\n result.append(hqx_encoding[\n (snippet[1]&0x0f)<<2])\n elif length ==1:\n result.append(\n hqx_encoding[(snippet[0]&0xfc)>>2])\n result.append(hqx_encoding[\n ((snippet[0]&0x03)<<4)])\n return ''.join(result)\n \ncrctab_hqx=[\n0x0000,0x1021,0x2042,0x3063,0x4084,0x50a5,0x60c6,0x70e7,\n0x8108,0x9129,0xa14a,0xb16b,0xc18c,0xd1ad,0xe1ce,0xf1ef,\n0x1231,0x0210,0x3273,0x2252,0x52b5,0x4294,0x72f7,0x62d6,\n0x9339,0x8318,0xb37b,0xa35a,0xd3bd,0xc39c,0xf3ff,0xe3de,\n0x2462,0x3443,0x0420,0x1401,0x64e6,0x74c7,0x44a4,0x5485,\n0xa56a,0xb54b,0x8528,0x9509,0xe5ee,0xf5cf,0xc5ac,0xd58d,\n0x3653,0x2672,0x1611,0x0630,0x76d7,0x66f6,0x5695,0x46b4,\n0xb75b,0xa77a,0x9719,0x8738,0xf7df,0xe7fe,0xd79d,0xc7bc,\n0x48c4,0x58e5,0x6886,0x78a7,0x0840,0x1861,0x2802,0x3823,\n0xc9cc,0xd9ed,0xe98e,0xf9af,0x8948,0x9969,0xa90a,0xb92b,\n0x5af5,0x4ad4,0x7ab7,0x6a96,0x1a71,0x0a50,0x3a33,0x2a12,\n0xdbfd,0xcbdc,0xfbbf,0xeb9e,0x9b79,0x8b58,0xbb3b,0xab1a,\n0x6ca6,0x7c87,0x4ce4,0x5cc5,0x2c22,0x3c03,0x0c60,0x1c41,\n0xedae,0xfd8f,0xcdec,0xddcd,0xad2a,0xbd0b,0x8d68,0x9d49,\n0x7e97,0x6eb6,0x5ed5,0x4ef4,0x3e13,0x2e32,0x1e51,0x0e70,\n0xff9f,0xefbe,0xdfdd,0xcffc,0xbf1b,0xaf3a,0x9f59,0x8f78,\n0x9188,0x81a9,0xb1ca,0xa1eb,0xd10c,0xc12d,0xf14e,0xe16f,\n0x1080,0x00a1,0x30c2,0x20e3,0x5004,0x4025,0x7046,0x6067,\n0x83b9,0x9398,0xa3fb,0xb3da,0xc33d,0xd31c,0xe37f,0xf35e,\n0x02b1,0x1290,0x22f3,0x32d2,0x4235,0x5214,0x6277,0x7256,\n0xb5ea,0xa5cb,0x95a8,0x8589,0xf56e,0xe54f,0xd52c,0xc50d,\n0x34e2,0x24c3,0x14a0,0x0481,0x7466,0x6447,0x5424,0x4405,\n0xa7db,0xb7fa,0x8799,0x97b8,0xe75f,0xf77e,0xc71d,0xd73c,\n0x26d3,0x36f2,0x0691,0x16b0,0x6657,0x7676,0x4615,0x5634,\n0xd94c,0xc96d,0xf90e,0xe92f,0x99c8,0x89e9,0xb98a,0xa9ab,\n0x5844,0x4865,0x7806,0x6827,0x18c0,0x08e1,0x3882,0x28a3,\n0xcb7d,0xdb5c,0xeb3f,0xfb1e,0x8bf9,0x9bd8,0xabbb,0xbb9a,\n0x4a75,0x5a54,0x6a37,0x7a16,0x0af1,0x1ad0,0x2ab3,0x3a92,\n0xfd2e,0xed0f,0xdd6c,0xcd4d,0xbdaa,0xad8b,0x9de8,0x8dc9,\n0x7c26,0x6c07,0x5c64,0x4c45,0x3ca2,0x2c83,0x1ce0,0x0cc1,\n0xef1f,0xff3e,0xcf5d,0xdf7c,0xaf9b,0xbfba,0x8fd9,0x9ff8,\n0x6e17,0x7e36,0x4e55,0x5e74,0x2e93,0x3eb2,0x0ed1,0x1ef0,\n]\n\ndef crc_hqx(s,crc):\n for c in s:\n crc=((crc <<8)&0xff00)^crctab_hqx[((crc >>8)&0xff)^ord(c)]\n \n return crc\n \ndef rlecode_hqx(s):\n ''\n\n\n\n \n if not s:\n return ''\n result=[]\n prev=s[0]\n count=1\n \n \n \n \n if s[-1]=='!':\n s=s[1:]+'?'\n else :\n s=s[1:]+'!'\n \n for c in s:\n if c ==prev and count <255:\n count +=1\n else :\n if count ==1:\n if prev !='\\x90':\n result.append(prev)\n else :\n result.extend(['\\x90','\\x00'])\n elif count <4:\n if prev !='\\x90':\n result.extend([prev]*count)\n else :\n result.extend(['\\x90','\\x00']*count)\n else :\n if prev !='\\x90':\n result.extend([prev,'\\x90',chr(count)])\n else :\n result.extend(['\\x90','\\x00','\\x90',chr(count)])\n count=1\n prev=c\n \n return ''.join(result)\n \ndef rledecode_hqx(s):\n s=s.split('\\x90')\n result=[s[0]]\n prev=s[0]\n for snippet in s[1:]:\n count=ord(snippet[0])\n if count >0:\n result.append(prev[-1]*(count -1))\n prev=snippet\n else :\n result.append('\\x90')\n prev='\\x90'\n result.append(snippet[1:])\n \n return ''.join(result)\n \ncrc_32_tab=[\n0x00000000,0x77073096,0xee0e612c,0x990951ba,0x076dc419,\n0x706af48f,0xe963a535,0x9e6495a3,0x0edb8832,0x79dcb8a4,\n0xe0d5e91e,0x97d2d988,0x09b64c2b,0x7eb17cbd,0xe7b82d07,\n0x90bf1d91,0x1db71064,0x6ab020f2,0xf3b97148,0x84be41de,\n0x1adad47d,0x6ddde4eb,0xf4d4b551,0x83d385c7,0x136c9856,\n0x646ba8c0,0xfd62f97a,0x8a65c9ec,0x14015c4f,0x63066cd9,\n0xfa0f3d63,0x8d080df5,0x3b6e20c8,0x4c69105e,0xd56041e4,\n0xa2677172,0x3c03e4d1,0x4b04d447,0xd20d85fd,0xa50ab56b,\n0x35b5a8fa,0x42b2986c,0xdbbbc9d6,0xacbcf940,0x32d86ce3,\n0x45df5c75,0xdcd60dcf,0xabd13d59,0x26d930ac,0x51de003a,\n0xc8d75180,0xbfd06116,0x21b4f4b5,0x56b3c423,0xcfba9599,\n0xb8bda50f,0x2802b89e,0x5f058808,0xc60cd9b2,0xb10be924,\n0x2f6f7c87,0x58684c11,0xc1611dab,0xb6662d3d,0x76dc4190,\n0x01db7106,0x98d220bc,0xefd5102a,0x71b18589,0x06b6b51f,\n0x9fbfe4a5,0xe8b8d433,0x7807c9a2,0x0f00f934,0x9609a88e,\n0xe10e9818,0x7f6a0dbb,0x086d3d2d,0x91646c97,0xe6635c01,\n0x6b6b51f4,0x1c6c6162,0x856530d8,0xf262004e,0x6c0695ed,\n0x1b01a57b,0x8208f4c1,0xf50fc457,0x65b0d9c6,0x12b7e950,\n0x8bbeb8ea,0xfcb9887c,0x62dd1ddf,0x15da2d49,0x8cd37cf3,\n0xfbd44c65,0x4db26158,0x3ab551ce,0xa3bc0074,0xd4bb30e2,\n0x4adfa541,0x3dd895d7,0xa4d1c46d,0xd3d6f4fb,0x4369e96a,\n0x346ed9fc,0xad678846,0xda60b8d0,0x44042d73,0x33031de5,\n0xaa0a4c5f,0xdd0d7cc9,0x5005713c,0x270241aa,0xbe0b1010,\n0xc90c2086,0x5768b525,0x206f85b3,0xb966d409,0xce61e49f,\n0x5edef90e,0x29d9c998,0xb0d09822,0xc7d7a8b4,0x59b33d17,\n0x2eb40d81,0xb7bd5c3b,0xc0ba6cad,0xedb88320,0x9abfb3b6,\n0x03b6e20c,0x74b1d29a,0xead54739,0x9dd277af,0x04db2615,\n0x73dc1683,0xe3630b12,0x94643b84,0x0d6d6a3e,0x7a6a5aa8,\n0xe40ecf0b,0x9309ff9d,0x0a00ae27,0x7d079eb1,0xf00f9344,\n0x8708a3d2,0x1e01f268,0x6906c2fe,0xf762575d,0x806567cb,\n0x196c3671,0x6e6b06e7,0xfed41b76,0x89d32be0,0x10da7a5a,\n0x67dd4acc,0xf9b9df6f,0x8ebeeff9,0x17b7be43,0x60b08ed5,\n0xd6d6a3e8,0xa1d1937e,0x38d8c2c4,0x4fdff252,0xd1bb67f1,\n0xa6bc5767,0x3fb506dd,0x48b2364b,0xd80d2bda,0xaf0a1b4c,\n0x36034af6,0x41047a60,0xdf60efc3,0xa867df55,0x316e8eef,\n0x4669be79,0xcb61b38c,0xbc66831a,0x256fd2a0,0x5268e236,\n0xcc0c7795,0xbb0b4703,0x220216b9,0x5505262f,0xc5ba3bbe,\n0xb2bd0b28,0x2bb45a92,0x5cb36a04,0xc2d7ffa7,0xb5d0cf31,\n0x2cd99e8b,0x5bdeae1d,0x9b64c2b0,0xec63f226,0x756aa39c,\n0x026d930a,0x9c0906a9,0xeb0e363f,0x72076785,0x05005713,\n0x95bf4a82,0xe2b87a14,0x7bb12bae,0x0cb61b38,0x92d28e9b,\n0xe5d5be0d,0x7cdcefb7,0x0bdbdf21,0x86d3d2d4,0xf1d4e242,\n0x68ddb3f8,0x1fda836e,0x81be16cd,0xf6b9265b,0x6fb077e1,\n0x18b74777,0x88085ae6,0xff0f6a70,0x66063bca,0x11010b5c,\n0x8f659eff,0xf862ae69,0x616bffd3,0x166ccf45,0xa00ae278,\n0xd70dd2ee,0x4e048354,0x3903b3c2,0xa7672661,0xd06016f7,\n0x4969474d,0x3e6e77db,0xaed16a4a,0xd9d65adc,0x40df0b66,\n0x37d83bf0,0xa9bcae53,0xdebb9ec5,0x47b2cf7f,0x30b5ffe9,\n0xbdbdf21c,0xcabac28a,0x53b39330,0x24b4a3a6,0xbad03605,\n0xcdd70693,0x54de5729,0x23d967bf,0xb3667a2e,0xc4614ab8,\n0x5d681b02,0x2a6f2b94,0xb40bbe37,0xc30c8ea1,0x5a05df1b,\n0x2d02ef8d\n]\n\ndef crc32(s,crc=0):\n result=0\n crc=~int(crc)&0xffffffff\n \n for c in s:\n crc=crc_32_tab[(crc ^int(ord(c)))&0xff]^(crc >>8)\n \n \n \n result=crc ^0xffffffff\n \n if result >2 **31:\n result=((result+2 **31)%2 **32)-2 **31\n \n return result\n", ["_base64", "_binascii"]], "bisect": [".py", "''\n\ndef insort_right(a,x,lo=0,hi=None ):\n ''\n\n\n\n\n\n \n \n lo=bisect_right(a,x,lo,hi)\n a.insert(lo,x)\n \ndef bisect_right(a,x,lo=0,hi=None ):\n ''\n\n\n\n\n\n\n\n \n \n if lo <0:\n raise ValueError('lo must be non-negative')\n if hi is None :\n hi=len(a)\n while lo =9:\n names=day_name\n else :\n names=day_abbr\n return names[day][:width].center(width)\n \n def formatweekheader(self,width):\n ''\n\n \n return ' '.join(self.formatweekday(i,width)for i in self.iterweekdays())\n \n def formatmonthname(self,theyear,themonth,width,withyear=True ):\n ''\n\n \n s=month_name[themonth]\n if withyear:\n s=\"%s %r\"%(s,theyear)\n return s.center(width)\n \n def prmonth(self,theyear,themonth,w=0,l=0):\n ''\n\n \n print(self.formatmonth(theyear,themonth,w,l),end='')\n \n def formatmonth(self,theyear,themonth,w=0,l=0):\n ''\n\n \n w=max(2,w)\n l=max(1,l)\n s=self.formatmonthname(theyear,themonth,7 *(w+1)-1)\n s=s.rstrip()\n s +='\\n'*l\n s +=self.formatweekheader(w).rstrip()\n s +='\\n'*l\n for week in self.monthdays2calendar(theyear,themonth):\n s +=self.formatweek(week,w).rstrip()\n s +='\\n'*l\n return s\n \n def formatyear(self,theyear,w=2,l=1,c=6,m=3):\n ''\n\n \n w=max(2,w)\n l=max(1,l)\n c=max(2,c)\n colwidth=(w+1)*7 -1\n v=[]\n a=v.append\n a(repr(theyear).center(colwidth *m+c *(m -1)).rstrip())\n a('\\n'*l)\n header=self.formatweekheader(w)\n for (i,row)in enumerate(self.yeardays2calendar(theyear,m)):\n \n months=range(m *i+1,min(m *(i+1)+1,13))\n a('\\n'*l)\n names=(self.formatmonthname(theyear,k,colwidth,False )\n for k in months)\n a(formatstring(names,colwidth,c).rstrip())\n a('\\n'*l)\n headers=(header for k in months)\n a(formatstring(headers,colwidth,c).rstrip())\n a('\\n'*l)\n \n height=max(len(cal)for cal in row)\n for j in range(height):\n weeks=[]\n for cal in row:\n if j >=len(cal):\n weeks.append('')\n else :\n weeks.append(self.formatweek(cal[j],w))\n a(formatstring(weeks,colwidth,c).rstrip())\n a('\\n'*l)\n return ''.join(v)\n \n def pryear(self,theyear,w=0,l=0,c=6,m=3):\n ''\n print(self.formatyear(theyear,w,l,c,m),end='')\n \n \nclass HTMLCalendar(Calendar):\n ''\n\n \n \n \n cssclasses=[\"mon\",\"tue\",\"wed\",\"thu\",\"fri\",\"sat\",\"sun\"]\n \n \n cssclasses_weekday_head=cssclasses\n \n \n cssclass_noday=\"noday\"\n \n \n cssclass_month_head=\"month\"\n \n \n cssclass_month=\"month\"\n \n \n cssclass_year_head=\"year\"\n \n \n cssclass_year=\"year\"\n \n def formatday(self,day,weekday):\n ''\n\n \n if day ==0:\n \n return ' '%self.cssclass_noday\n else :\n return '%d'%(self.cssclasses[weekday],day)\n \n def formatweek(self,theweek):\n ''\n\n \n s=''.join(self.formatday(d,wd)for (d,wd)in theweek)\n return '%s'%s\n \n def formatweekday(self,day):\n ''\n\n \n return '%s'%(\n self.cssclasses_weekday_head[day],day_abbr[day])\n \n def formatweekheader(self):\n ''\n\n \n s=''.join(self.formatweekday(i)for i in self.iterweekdays())\n return '%s'%s\n \n def formatmonthname(self,theyear,themonth,withyear=True ):\n ''\n\n \n if withyear:\n s='%s %s'%(month_name[themonth],theyear)\n else :\n s='%s'%month_name[themonth]\n return '%s'%(\n self.cssclass_month_head,s)\n \n def formatmonth(self,theyear,themonth,withyear=True ):\n ''\n\n \n v=[]\n a=v.append\n a(''%(\n self.cssclass_month))\n a('\\n')\n a(self.formatmonthname(theyear,themonth,withyear=withyear))\n a('\\n')\n a(self.formatweekheader())\n a('\\n')\n for week in self.monthdays2calendar(theyear,themonth):\n a(self.formatweek(week))\n a('\\n')\n a('')\n a('\\n')\n return ''.join(v)\n \n def formatyear(self,theyear,width=3):\n ''\n\n \n v=[]\n a=v.append\n width=max(width,1)\n a(''%\n self.cssclass_year)\n a('\\n')\n a('%s'%(\n width,self.cssclass_year_head,theyear))\n for i in range(January,January+12,width):\n \n months=range(i,min(i+width,13))\n a('')\n for m in months:\n a('')\n a(self.formatmonth(theyear,m,withyear=False ))\n a('')\n a('')\n a('')\n return ''.join(v)\n \n def formatyearpage(self,theyear,width=3,css='calendar.css',encoding=None ):\n ''\n\n \n if encoding is None :\n encoding=sys.getdefaultencoding()\n v=[]\n a=v.append\n a('\\n'%encoding)\n a('\\n')\n a('\\n')\n a('\\n')\n a('\\n'%encoding)\n if css is not None :\n a('\\n'%css)\n a('Calendar for %d\\n'%theyear)\n a('\\n')\n a('\\n')\n a(self.formatyear(theyear,width))\n a('\\n')\n a('\\n')\n return ''.join(v).encode(encoding,\"xmlcharrefreplace\")\n \n \nclass different_locale:\n def __init__(self,locale):\n self.locale=locale\n \n def __enter__(self):\n self.oldlocale=_locale.getlocale(_locale.LC_TIME)\n _locale.setlocale(_locale.LC_TIME,self.locale)\n \n def __exit__(self,*args):\n _locale.setlocale(_locale.LC_TIME,self.oldlocale)\n \n \nclass LocaleTextCalendar(TextCalendar):\n ''\n\n\n\n\n \n \n def __init__(self,firstweekday=0,locale=None ):\n TextCalendar.__init__(self,firstweekday)\n if locale is None :\n locale=_locale.getdefaultlocale()\n self.locale=locale\n \n def formatweekday(self,day,width):\n with different_locale(self.locale):\n if width >=9:\n names=day_name\n else :\n names=day_abbr\n name=names[day]\n return name[:width].center(width)\n \n def formatmonthname(self,theyear,themonth,width,withyear=True ):\n with different_locale(self.locale):\n s=month_name[themonth]\n if withyear:\n s=\"%s %r\"%(s,theyear)\n return s.center(width)\n \n \nclass LocaleHTMLCalendar(HTMLCalendar):\n ''\n\n\n\n\n \n def __init__(self,firstweekday=0,locale=None ):\n HTMLCalendar.__init__(self,firstweekday)\n if locale is None :\n locale=_locale.getdefaultlocale()\n self.locale=locale\n \n def formatweekday(self,day):\n with different_locale(self.locale):\n s=day_abbr[day]\n return '%s'%(self.cssclasses[day],s)\n \n def formatmonthname(self,theyear,themonth,withyear=True ):\n with different_locale(self.locale):\n s=month_name[themonth]\n if withyear:\n s='%s %s'%(s,theyear)\n return '%s'%s\n \n \n \nc=TextCalendar()\n\nfirstweekday=c.getfirstweekday\n\ndef setfirstweekday(firstweekday):\n if not MONDAY <=firstweekday <=SUNDAY:\n raise IllegalWeekdayError(firstweekday)\n c.firstweekday=firstweekday\n \nmonthcalendar=c.monthdayscalendar\nprweek=c.prweek\nweek=c.formatweek\nweekheader=c.formatweekheader\nprmonth=c.prmonth\nmonth=c.formatmonth\ncalendar=c.formatyear\nprcal=c.pryear\n\n\n\n_colwidth=7 *3 -1\n_spacing=6\n\n\ndef format(cols,colwidth=_colwidth,spacing=_spacing):\n ''\n print(formatstring(cols,colwidth,spacing))\n \n \ndef formatstring(cols,colwidth=_colwidth,spacing=_spacing):\n ''\n spacing *=' '\n return spacing.join(c.center(colwidth)for c in cols)\n \n \nEPOCH=1970\n_EPOCH_ORD=datetime.date(EPOCH,1,1).toordinal()\n\n\ndef timegm(tuple):\n ''\n year,month,day,hour,minute,second=tuple[:6]\n days=datetime.date(year,month,1).toordinal()-_EPOCH_ORD+day -1\n hours=days *24+hour\n minutes=hours *60+minute\n seconds=minutes *60+second\n return seconds\n \n \ndef main(args):\n import argparse\n parser=argparse.ArgumentParser()\n textgroup=parser.add_argument_group('text only arguments')\n htmlgroup=parser.add_argument_group('html only arguments')\n textgroup.add_argument(\n \"-w\",\"--width\",\n type=int,default=2,\n help=\"width of date column (default 2)\"\n )\n textgroup.add_argument(\n \"-l\",\"--lines\",\n type=int,default=1,\n help=\"number of lines for each week (default 1)\"\n )\n textgroup.add_argument(\n \"-s\",\"--spacing\",\n type=int,default=6,\n help=\"spacing between months (default 6)\"\n )\n textgroup.add_argument(\n \"-m\",\"--months\",\n type=int,default=3,\n help=\"months per row (default 3)\"\n )\n htmlgroup.add_argument(\n \"-c\",\"--css\",\n default=\"calendar.css\",\n help=\"CSS to use for page\"\n )\n parser.add_argument(\n \"-L\",\"--locale\",\n default=None ,\n help=\"locale to be used from month and weekday names\"\n )\n parser.add_argument(\n \"-e\",\"--encoding\",\n default=None ,\n help=\"encoding to use for output\"\n )\n parser.add_argument(\n \"-t\",\"--type\",\n default=\"text\",\n choices=(\"text\",\"html\"),\n help=\"output type (text or html)\"\n )\n parser.add_argument(\n \"year\",\n nargs='?',type=int,\n help=\"year number (1-9999)\"\n )\n parser.add_argument(\n \"month\",\n nargs='?',type=int,\n help=\"month number (1-12, text only)\"\n )\n \n options=parser.parse_args(args[1:])\n \n if options.locale and not options.encoding:\n parser.error(\"if --locale is specified --encoding is required\")\n sys.exit(1)\n \n locale=options.locale,options.encoding\n \n if options.type ==\"html\":\n if options.locale:\n cal=LocaleHTMLCalendar(locale=locale)\n else :\n cal=HTMLCalendar()\n encoding=options.encoding\n if encoding is None :\n encoding=sys.getdefaultencoding()\n optdict=dict(encoding=encoding,css=options.css)\n write=sys.stdout.buffer.write\n if options.year is None :\n write(cal.formatyearpage(datetime.date.today().year,**optdict))\n elif options.month is None :\n write(cal.formatyearpage(options.year,**optdict))\n else :\n parser.error(\"incorrect number of arguments\")\n sys.exit(1)\n else :\n if options.locale:\n cal=LocaleTextCalendar(locale=locale)\n else :\n cal=TextCalendar()\n optdict=dict(w=options.width,l=options.lines)\n if options.month is None :\n optdict[\"c\"]=options.spacing\n optdict[\"m\"]=options.months\n if options.year is None :\n result=cal.formatyear(datetime.date.today().year,**optdict)\n elif options.month is None :\n result=cal.formatyear(options.year,**optdict)\n else :\n result=cal.formatmonth(options.year,options.month,**optdict)\n write=sys.stdout.write\n if options.encoding:\n result=result.encode(options.encoding)\n write=sys.stdout.buffer.write\n write(result)\n \n \nif __name__ ==\"__main__\":\n main(sys.argv)\n", ["argparse", "datetime", "itertools", "locale", "sys"]], "cmath": [".py", "\n\n\n\n\n\n\n\n\n\nimport math\nimport sys\n\ndef takes_complex(func):\n def decorated(x):\n if isinstance(x,complex):\n return func(x)\n elif type(x)in [int,float]:\n return func(complex(x))\n elif hasattr(x,'__complex__'):\n c=x.__complex__()\n if not isinstance(c,complex):\n raise TypeError(\"A complex number is required\")\n else :\n return func(c)\n elif hasattr(x,'__float__'):\n try :\n c=complex(x.__float__(),0)\n except :\n raise TypeError(\"A complex number is required\")\n return func(c)\n else :\n raise TypeError(\"A complex number is required\")\n if hasattr(func,'__doc__'):\n decorated.__doc__=func.__doc__\n if hasattr(func,'__name__'):\n decorated.__name__=func.__name__\n return decorated\n \n@takes_complex\ndef isfinite(x):\n return math.isfinite(x.imag)and math.isfinite(x.real)\n \n@takes_complex\ndef phase(x):\n ''\n return math.atan2(x.imag,x.real)\n \n@takes_complex\ndef polar(x):\n ''\n\n\n\n\n \n phi=math.atan2(x.imag,x.real)\n r=math.sqrt(x.real **2+x.imag **2)\n return r,phi\n \ndef rect(r,phi):\n ''\n\n \n if math.isinf(r)or math.isinf(phi):\n \n \n if math.isinf(phi)and r !=.0 and not math.isnan(r):\n raise ValueError(\"math domain error\")\n \n \n \n \n if -_INF 0:\n _real=math.copysign(_INF,math.cos(phi))\n _imag=math.copysign(_INF,math.sin(phi))\n else :\n _real=-math.copysign(_INF,cos(phi));\n _imag=-math.copysign(_INF,sin(phi));\n return complex(_real,_imag)\n return _SPECIAL_VALUE(complex(r,phi),_rect_special_values)\n \n else :\n if phi ==.0:\n \n \n \n return complex(r,phi *r)\n else :\n return complex(r *math.cos(phi),r *math.sin(phi))\n \n@takes_complex\ndef sqrt(x):\n ''\n\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n s,d,ax,ay=.0,.0,math.fabs(x.real),math.fabs(x.imag)\n \n ret=_SPECIAL_VALUE(x,_sqrt_special_values)\n if ret is not None :\n return ret\n \n if x.real ==.0 and x.imag ==.0:\n _real=.0\n _imag=x.imag\n return complex(_real,_imag)\n \n if ax 0. or ay >0.):\n \n ax=math.ldexp(ax,_CM_SCALE_UP);\n s=math.ldexp(math.sqrt(ax+math.hypot(ax,math.ldexp(ay,_CM_SCALE_UP))),_CM_SCALE_DOWN)\n else :\n ax /=8.0 ;\n s=2.0 *math.sqrt(ax+math.hypot(ax,ay /8.0));\n \n d=ay /(2.0 *s)\n \n if x.real >=.0:\n _real=s ;\n _imag=math.copysign(d,x.imag)\n else :\n _real=d ;\n _imag=math.copysign(s,x.imag)\n \n return complex(_real,_imag)\n \n@takes_complex\ndef acos(x):\n ''\n\n\n\n\n \n \n ret=_SPECIAL_VALUE(x,_acos_special_values)\n if ret is not None :\n return ret\n \n if math.fabs(x.real)>_CM_LARGE_DOUBLE or math.fabs(x.imag)>_CM_LARGE_DOUBLE:\n \n \n _real=math.atan2(math.fabs(x.imag),x.real)\n \n \n \n if x.real <0:\n _imag=-math.copysign(math.log(math.hypot(x.real /2.,x.imag /2.))+_M_LN2 *2.,x.imag);\n else :\n _imag=math.copysign(math.log(math.hypot(x.real /2.,x.imag /2.))+_M_LN2 *2.,-x.imag);\n else :\n s1=complex(float(1 -x.real),-x.imag)\n s1=sqrt(s1)\n s2=complex(1.0+x.real,x.imag)\n s2=sqrt(s2)\n _real=2.0 *math.atan2(s1.real,s2.real);\n _imag=math.asinh(s2.real *s1.imag -s2.imag *s1.real)\n \n return complex(_real,_imag)\n \n@takes_complex\ndef acosh(x):\n ''\n\n\n\n \n ret=_SPECIAL_VALUE(x,_acosh_special_values)\n if ret is not None :\n return ret\n \n if math.fabs(x.real)>_CM_LARGE_DOUBLE or math.fabs(x.imag)>_CM_LARGE_DOUBLE:\n \n _real=math.log(math.hypot(x.real /2.0,x.imag /2.0))+_M_LN2 *2.0\n _imag=math.atan2(x.imag,x.real);\n else :\n s1=sqrt(complex(x.real -1.0,x.imag))\n s2=sqrt(complex(x.real+1.0,x.imag))\n _real=math.asinh(s1.real *s2.real+s1.imag *s2.imag)\n _imag=2. *math.atan2(s1.imag,s2.real)\n \n return complex(_real,_imag)\n \n@takes_complex\ndef asin(x):\n ''\n\n\n\n \n \n s=complex(-x.imag,x.real)\n s=asinh(s)\n return complex(s.imag,-s.real)\n \n@takes_complex\ndef asinh(x):\n ''\n\n\n\n\n \n ret=_SPECIAL_VALUE(x,_asinh_special_values)\n if ret is not None :\n return ret\n \n if math.fabs(x.real)>_CM_LARGE_DOUBLE or math.fabs(x.imag)>_CM_LARGE_DOUBLE:\n if x.imag >=.0:\n _real=math.copysign(math.log(math.hypot(x.real /2.,x.imag /2.))+_M_LN2 *2.,x.real)\n else :\n _real=-math.copysign(math.log(math.hypot(x.real /2.,x.imag /2.))+_M_LN2 *2.,-x.real)\n _imag=math.atan2(x.imag,math.fabs(x.real))\n else :\n s1=sqrt(complex(1.0+x.imag,-x.real))\n s2=sqrt(complex(1.0 -x.imag,x.real))\n _real=math.asinh(s1.real *s2.imag -s2.real *s1.imag)\n _imag=math.atan2(x.imag,s1.real *s2.real -s1.imag *s2.imag)\n return complex(_real,_imag)\n \n@takes_complex\ndef atan(x):\n ''\n\n\n\n\n \n s=atanh(complex(-x.imag,x.real))\n return complex(s.imag,-s.real)\n \n@takes_complex\ndef atanh(x):\n ''\n\n\n\n\n \n \n ret=_SPECIAL_VALUE(x,_atanh_special_values)\n if ret is not None :\n return ret\n \n \n if x.real <.0:\n return -(atanh(-x))\n \n ay=math.fabs(x.imag)\n \n if x.real >_CM_SQRT_LARGE_DOUBLE or ay >_CM_SQRT_LARGE_DOUBLE:\n \n \n \n \n \n h=math.hypot(x.real /2.,x.imag /2.)\n _real=x.real /4. /h /h\n \n \n \n \n \n \n _imag=-math.copysign(math.pi /2.,-x.imag)\n \n elif x.real ==1.0 and ay <_CM_SQRT_DBL_MIN:\n \n \n if (ay ==.0):\n raise ValueError(\"math domain error\")\n else :\n _real=-math.log(math.sqrt(ay)/math.sqrt(math.hypot(ay,2.)))\n _imag=math.copysign(math.atan2(2.0,-ay)/2,x.imag)\n \n else :\n \n _real=math.log1p(4. *x.real /((1 -x.real)*(1 -x.real)+ay *ay))/4.\n _imag=-math.atan2(-2. *x.imag,(1 -x.real)*(1+x.real)-ay *ay)/2.\n errno=0\n \n return complex(_real,_imag)\n \n@takes_complex\ndef cos(x):\n ''\n return cosh(complex(-x.imag,x.real))\n \n@takes_complex\ndef cosh(x):\n ''\n \n \n if isinf(x):\n if -_INF 0:\n _real=math.copysign(_INF,math.cos(x.imag))\n _imag=math.copysign(_INF,math.sin(x.imag))\n else :\n _real=math.copysign(_INF,math.cos(x.imag))\n _imag=-math.copysign(_INF,math.sin(x.imag))\n return complex(_real,_imag)\n else :\n \n if x.imag !=.0 and not math.isnan(x.real):\n raise ValueError(\"math domain error\")\n return _SPECIAL_VALUE(x,_cosh_special_values)\n \n if math.fabs(x.real)>_CM_LOG_LARGE_DOUBLE:\n \n \n x_minus_one=x.real -math.copysign(1.0,x.real)\n _real=cos(x.imag)*math.cosh(x_minus_one)*math.e\n _imag=sin(x.imag)*math.sinh(x_minus_one)*math.e\n else :\n _real=math.cos(x.imag)*math.cosh(x.real)\n _imag=math.sin(x.imag)*math.sinh(x.real)\n \n ret=complex(_real,_imag)\n \n if isinf(ret):\n raise OverflowError()\n return ret\n \n@takes_complex\ndef exp(x):\n ''\n if math.isinf(x.real)or math.isinf(x.imag):\n \n if math.isinf(x.imag)and (-_INF 0):\n raise ValueError(\"math domain error\")\n \n if math.isinf(x.real)and -_INF 0:\n _real=math.copysign(_INF,cos(x.imag))\n _imag=math.copysign(_INF,sin(x.imag))\n else :\n _real=math.copysign(.0,cos(x.imag))\n _imag=math.copysign(.0,sin(x.imag))\n return complex(_real,_imag)\n \n return _SPECIAL_VALUE(x,_exp_special_values)\n \n \n if x.real >_CM_LOG_LARGE_DOUBLE:\n l=math.exp(x.real -1.);\n _real=l *math.cos(x.imag)*math.e\n _imag=l *math.sin(x.imag)*math.e\n else :\n l=math.exp(x.real);\n _real=l *math.cos(x.imag)\n _imag=l *math.sin(x.imag)\n \n if math.isinf(_real)or math.isinf(_imag):\n raise OverflowError()\n \n return complex(_real,_imag)\n \ndef isclose(x,y,*,rel_tol=1e-09,abs_tol=0.0):\n rel_tol=float(rel_tol)\n abs_tol=float(abs_tol)\n return abs(x -y)<=max(rel_tol *max(abs(x),abs(y)),abs_tol)\n \n@takes_complex\ndef isinf(x):\n ''\n return math.isinf(x.real)or math.isinf(x.imag)\n \n@takes_complex\ndef isnan(x):\n ''\n return math.isnan(x.real)or math.isnan(x.imag)\n \n \n@takes_complex\ndef _to_complex(x):\n return x\n \ndef log(x,base=None ):\n ''\n\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n x=_to_complex(x)\n \n \n \n \n \n \n if base is not None :\n x=log(x)\n base=log(base)\n x=x /base\n \n ret=_SPECIAL_VALUE(x,_log_special_values)\n if ret is not None :\n return ret\n \n ax=math.fabs(x.real)\n ay=math.fabs(x.imag)\n \n if ax >_CM_LARGE_DOUBLE or ay >_CM_LARGE_DOUBLE:\n _real=math.log(math.hypot(ax /2.0,ay /2.0))+_M_LN2\n elif ax .0 or ay >.0:\n \n _real=math.log(math.hypot(math.ldexp(ax,sys.float_info.mant_dig),math.ldexp(ay,sys.float_info.mant_dig)))-sys.float_info.mant_dig *_M_LN2\n else :\n \n raise ValueError(\"math domain error\")\n _real=-_INF\n _imag=math.atan2(x.imag,x.real)\n else :\n h=math.hypot(ax,ay)\n if 0.71 <=h and h <=1.73:\n am=max(ax,ay)\n an=min(ax,ay)\n _real=math.log1p((am -1)*(am+1)+an *an)/2.\n else :\n _real=math.log(h)\n _imag=math.atan2(x.imag,x.real)\n return complex(_real,_imag)\n \n@takes_complex\ndef log10(x):\n ''\n\n\n\n \n ret=log(x);\n _real=ret.real /_M_LN10\n _imag=ret.imag /_M_LN10\n return complex(_real,_imag)\n \n@takes_complex\ndef sin(x):\n ''\n \n s=complex(-x.imag,x.real)\n s=sinh(s)\n return complex(s.imag,-s.real)\n \n@takes_complex\ndef sinh(x):\n ''\n \n if math.isinf(x.real)or math.isinf(x.imag):\n \n \n if math.isinf(x.imag)and not math.isnan(x.real):\n raise ValueError(\"math domain error\")\n \n if math.isinf(x.real)and -_INF 0:\n _real=math.copysign(_INF,cos(x.imag))\n _imag=math.copysign(_INF,sin(x.imag))\n else :\n _real=-math.copysign(_INF,cos(x.imag))\n _imag=math.copysign(_INF,sin(x.imag))\n return complex(_real,_imag)\n \n return _SPECIAL_VALUE(x,_sinh_special_values)\n \n if math.fabs(x.real)>_CM_LOG_LARGE_DOUBLE:\n x_minus_one=x.real -math.copysign(1.0,x.real)\n _real=math.cos(x.imag)*math.sinh(x.imag)*math.e\n _imag=math.sin(x.imag)*math.cosh(x.imag)*math.e\n else :\n _real=math.cos(x.imag)*math.sinh(x.real)\n _imag=math.sin(x.imag)*math.cosh(x.real)\n \n if math.isinf(_real)or math.isinf(_imag):\n raise OverflowError()\n \n return complex(_real,_imag)\n \n@takes_complex\ndef tan(x):\n ''\n s=atanh(complex(-x.imag,x.real))\n return complex(s.imag,-s.real)\n \n@takes_complex\ndef tanh(x):\n ''\n ''\n\n\n \n \n \n \n \n \n \n \n \n \n \n if isinf(x):\n if math.isinf(x.imag)and -_INF 0:\n _real=1.0\n _imag=math.copysign(.0,2.0 *math.sin(x.imag)*math.cos(x.imag))\n else :\n _real=-1.0\n _imag=math.copysign(.0,2. *math.sin(x.imag)*math.cos(x.imag))\n return complex(_real,_imag)\n return _SPECIAL_VALUE(x,_tanh_special_values)\n \n \n if math.fabs(x.real)>_CM_LOG_LARGE_DOUBLE:\n _real=math.copysign(1.,x.real)\n _imag=4. *math.sin(x.imag)*math.cos(x.imag)*math.exp(-2. *math.fabs(x.real))\n else :\n tx=math.tanh(x.real)\n ty=math.tan(x.imag)\n cx=1.0 /math.cosh(x.real)\n txty=tx *ty\n denom=1.+txty *txty\n _real=tx *(1.+ty *ty)/denom\n _imag=((ty /denom)*cx)*cx\n return complex(_real,_imag)\n \n \npi=math.pi\ne=math.e\n\n_CM_LARGE_DOUBLE=sys.float_info.max /4\n_CM_SQRT_LARGE_DOUBLE=math.sqrt(_CM_LARGE_DOUBLE)\n_CM_LOG_LARGE_DOUBLE=math.log(_CM_LARGE_DOUBLE)\n_CM_SQRT_DBL_MIN=math.sqrt(sys.float_info.min)\n_M_LN2=0.6931471805599453094\n_M_LN10=2.302585092994045684\n\nif sys.float_info.radix ==2:\n _CM_SCALE_UP=int((2 *(sys.float_info.mant_dig /2)+1))\nelif sys.float_info.radix ==16:\n _CM_SCALE_UP=int((4 *sys.float_info.mant_dig+1))\nelse :\n raise (\"cmath implementation expects the float base to be either 2 or 16, got \"+str(sys.float_info.radix)+\" instead.\")\n_CM_SCALE_DOWN=int((-(_CM_SCALE_UP+1)/2))\n\n_INF=float('inf')\n_NAN=float('nan')\n_PI=math.pi\n_P14=0.25 *math.pi\n_P12=0.5 *math.pi\n_P34=0.75 *math.pi\n_U=-9.5426319407711027e33\n\n\n_ST_NINF=0\n_ST_NEG=1\n_ST_NZERO=2\n_ST_PZERO=3\n_ST_POS=4\n_ST_PINF=5\n_ST_NAN=6\n\n\ndef _SPECIAL_VALUE(z,table):\n if not math.isfinite(z.real)or not math.isfinite(z.imag):\n return table[_special_type(z.real)][_special_type(z.imag)]\n else :\n return None\n \ndef _special_type(x):\n if -_INF ):\"\n misc_header=\"Miscellaneous help topics:\"\n undoc_header=\"Undocumented commands:\"\n nohelp=\"*** No help on %s\"\n use_rawinput=1\n \n def __init__(self,completekey='tab',stdin=None ,stdout=None ):\n ''\n\n\n\n\n\n\n\n\n \n if stdin is not None :\n self.stdin=stdin\n else :\n self.stdin=sys.stdin\n if stdout is not None :\n self.stdout=stdout\n else :\n self.stdout=sys.stdout\n self.cmdqueue=[]\n self.completekey=completekey\n \n def cmdloop(self,intro=None ):\n ''\n\n\n\n \n \n self.preloop()\n if self.use_rawinput and self.completekey:\n try :\n import readline\n self.old_completer=readline.get_completer()\n readline.set_completer(self.complete)\n readline.parse_and_bind(self.completekey+\": complete\")\n except ImportError:\n pass\n try :\n if intro is not None :\n self.intro=intro\n if self.intro:\n self.stdout.write(str(self.intro)+\"\\n\")\n stop=None\n while not stop:\n if self.cmdqueue:\n line=self.cmdqueue.pop(0)\n else :\n if self.use_rawinput:\n try :\n line=input(self.prompt)\n except EOFError:\n line='EOF'\n else :\n self.stdout.write(self.prompt)\n self.stdout.flush()\n line=self.stdin.readline()\n if not len(line):\n line='EOF'\n else :\n line=line.rstrip('\\r\\n')\n line=self.precmd(line)\n stop=self.onecmd(line)\n stop=self.postcmd(stop,line)\n self.postloop()\n finally :\n if self.use_rawinput and self.completekey:\n try :\n import readline\n readline.set_completer(self.old_completer)\n except ImportError:\n pass\n \n \n def precmd(self,line):\n ''\n\n\n \n return line\n \n def postcmd(self,stop,line):\n ''\n return stop\n \n def preloop(self):\n ''\n pass\n \n def postloop(self):\n ''\n\n\n \n pass\n \n def parseline(self,line):\n ''\n\n\n \n line=line.strip()\n if not line:\n return None ,None ,line\n elif line[0]=='?':\n line='help '+line[1:]\n elif line[0]=='!':\n if hasattr(self,'do_shell'):\n line='shell '+line[1:]\n else :\n return None ,None ,line\n i,n=0,len(line)\n while i 0:\n cmd,args,foo=self.parseline(line)\n if cmd =='':\n compfunc=self.completedefault\n else :\n try :\n compfunc=getattr(self,'complete_'+cmd)\n except AttributeError:\n compfunc=self.completedefault\n else :\n compfunc=self.completenames\n self.completion_matches=compfunc(text,line,begidx,endidx)\n try :\n return self.completion_matches[state]\n except IndexError:\n return None\n \n def get_names(self):\n \n \n return dir(self.__class__)\n \n def complete_help(self,*args):\n commands=set(self.completenames(*args))\n topics=set(a[5:]for a in self.get_names()\n if a.startswith('help_'+args[0]))\n return list(commands |topics)\n \n def do_help(self,arg):\n ''\n if arg:\n \n try :\n func=getattr(self,'help_'+arg)\n except AttributeError:\n try :\n doc=getattr(self,'do_'+arg).__doc__\n if doc:\n self.stdout.write(\"%s\\n\"%str(doc))\n return\n except AttributeError:\n pass\n self.stdout.write(\"%s\\n\"%str(self.nohelp %(arg,)))\n return\n func()\n else :\n names=self.get_names()\n cmds_doc=[]\n cmds_undoc=[]\n help={}\n for name in names:\n if name[:5]=='help_':\n help[name[5:]]=1\n names.sort()\n \n prevname=''\n for name in names:\n if name[:3]=='do_':\n if name ==prevname:\n continue\n prevname=name\n cmd=name[3:]\n if cmd in help:\n cmds_doc.append(cmd)\n del help[cmd]\n elif getattr(self,name).__doc__:\n cmds_doc.append(cmd)\n else :\n cmds_undoc.append(cmd)\n self.stdout.write(\"%s\\n\"%str(self.doc_leader))\n self.print_topics(self.doc_header,cmds_doc,15,80)\n self.print_topics(self.misc_header,list(help.keys()),15,80)\n self.print_topics(self.undoc_header,cmds_undoc,15,80)\n \n def print_topics(self,header,cmds,cmdlen,maxcol):\n if cmds:\n self.stdout.write(\"%s\\n\"%str(header))\n if self.ruler:\n self.stdout.write(\"%s\\n\"%str(self.ruler *len(header)))\n self.columnize(cmds,maxcol -1)\n self.stdout.write(\"\\n\")\n \n def columnize(self,list,displaywidth=80):\n ''\n\n\n\n \n if not list:\n self.stdout.write(\"\\n\")\n return\n \n nonstrings=[i for i in range(len(list))\n if not isinstance(list[i],str)]\n if nonstrings:\n raise TypeError(\"list[i] not a string for i in %s\"\n %\", \".join(map(str,nonstrings)))\n size=len(list)\n if size ==1:\n self.stdout.write('%s\\n'%str(list[0]))\n return\n \n for nrows in range(1,len(list)):\n ncols=(size+nrows -1)//nrows\n colwidths=[]\n totwidth=-2\n for col in range(ncols):\n colwidth=0\n for row in range(nrows):\n i=row+nrows *col\n if i >=size:\n break\n x=list[i]\n colwidth=max(colwidth,len(x))\n colwidths.append(colwidth)\n totwidth +=colwidth+2\n if totwidth >displaywidth:\n break\n if totwidth <=displaywidth:\n break\n else :\n nrows=len(list)\n ncols=1\n colwidths=[0]\n for row in range(nrows):\n texts=[]\n for col in range(ncols):\n i=row+nrows *col\n if i >=size:\n x=\"\"\n else :\n x=list[i]\n texts.append(x)\n while texts and not texts[-1]:\n del texts[-1]\n for col in range(len(texts)):\n texts[col]=texts[col].ljust(colwidths[col])\n self.stdout.write(\"%s\\n\"%str(\" \".join(texts)))\n", ["readline", "string", "sys"]], "code": [".py", "''\n\n\n\n\n\n\nimport sys\nimport traceback\nfrom codeop import CommandCompiler,compile_command\n\n__all__=[\"InteractiveInterpreter\",\"InteractiveConsole\",\"interact\",\n\"compile_command\"]\n\nclass InteractiveInterpreter:\n ''\n\n\n\n\n\n \n \n def __init__(self,locals=None ):\n ''\n\n\n\n\n\n\n \n if locals is None :\n locals={\"__name__\":\"__console__\",\"__doc__\":None }\n self.locals=locals\n self.compile=CommandCompiler()\n \n def runsource(self,source,filename=\"\",symbol=\"single\"):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n try :\n code=self.compile(source,filename,symbol)\n except (OverflowError,SyntaxError,ValueError):\n \n self.showsyntaxerror(filename)\n return False\n \n if code is None :\n \n return True\n \n \n self.runcode(code)\n return False\n \n def runcode(self,code):\n ''\n\n\n\n\n\n\n\n\n\n \n try :\n exec(code,self.locals)\n except SystemExit:\n raise\n except :\n self.showtraceback()\n \n def showsyntaxerror(self,filename=None ):\n ''\n\n\n\n\n\n\n\n\n\n \n type,value,tb=sys.exc_info()\n sys.last_type=type\n sys.last_value=value\n sys.last_traceback=tb\n if filename and type is SyntaxError:\n \n try :\n msg,(dummy_filename,lineno,offset,line)=value.args\n except ValueError:\n \n pass\n else :\n \n value=SyntaxError(msg,(filename,lineno,offset,line))\n sys.last_value=value\n if sys.excepthook is sys.__excepthook__:\n lines=traceback.format_exception_only(type,value)\n self.write(''.join(lines))\n else :\n \n \n sys.excepthook(type,value,tb)\n \n def showtraceback(self):\n ''\n\n\n\n\n\n \n sys.last_type,sys.last_value,last_tb=ei=sys.exc_info()\n sys.last_traceback=last_tb\n try :\n lines=traceback.format_exception(ei[0],ei[1],last_tb.tb_next)\n if sys.excepthook is sys.__excepthook__:\n self.write(''.join(lines))\n else :\n \n \n sys.excepthook(ei[0],ei[1],last_tb)\n finally :\n last_tb=ei=None\n \n def write(self,data):\n ''\n\n\n\n\n \n sys.stderr.write(data)\n \n \nclass InteractiveConsole(InteractiveInterpreter):\n ''\n\n\n\n\n \n \n def __init__(self,locals=None ,filename=\"\"):\n ''\n\n\n\n\n\n\n\n \n InteractiveInterpreter.__init__(self,locals)\n self.filename=filename\n self.resetbuffer()\n \n def resetbuffer(self):\n ''\n self.buffer=[]\n \n def interact(self,banner=None ,exitmsg=None ):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n try :\n sys.ps1\n except AttributeError:\n sys.ps1=\">>> \"\n try :\n sys.ps2\n except AttributeError:\n sys.ps2=\"... \"\n cprt='Type \"help\", \"copyright\", \"credits\" or \"license\" for more information.'\n if banner is None :\n self.write(\"Python %s on %s\\n%s\\n(%s)\\n\"%\n (sys.version,sys.platform,cprt,\n self.__class__.__name__))\n elif banner:\n self.write(\"%s\\n\"%str(banner))\n more=0\n while 1:\n try :\n if more:\n prompt=sys.ps2\n else :\n prompt=sys.ps1\n try :\n line=self.raw_input(prompt)\n except EOFError:\n self.write(\"\\n\")\n break\n else :\n more=self.push(line)\n except KeyboardInterrupt:\n self.write(\"\\nKeyboardInterrupt\\n\")\n self.resetbuffer()\n more=0\n if exitmsg is None :\n self.write('now exiting %s...\\n'%self.__class__.__name__)\n elif exitmsg !='':\n self.write('%s\\n'%exitmsg)\n \n def push(self,line):\n ''\n\n\n\n\n\n\n\n\n\n\n\n \n self.buffer.append(line)\n source=\"\\n\".join(self.buffer)\n more=self.runsource(source,self.filename)\n if not more:\n self.resetbuffer()\n return more\n \n def raw_input(self,prompt=\"\"):\n ''\n\n\n\n\n\n\n\n\n \n return input(prompt)\n \n \n \ndef interact(banner=None ,readfunc=None ,local=None ,exitmsg=None ):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n \n console=InteractiveConsole(local)\n if readfunc is not None :\n console.raw_input=readfunc\n else :\n try :\n import readline\n except ImportError:\n pass\n console.interact(banner,exitmsg)\n \n \nif __name__ ==\"__main__\":\n import argparse\n \n parser=argparse.ArgumentParser()\n parser.add_argument('-q',action='store_true',\n help=\"don't print version and copyright messages\")\n args=parser.parse_args()\n if args.q or sys.flags.quiet:\n banner=''\n else :\n banner=None\n interact(banner)\n", ["argparse", "codeop", "readline", "sys", "traceback"]], "codecs": [".py", "''\n\n\n\n\n\n\n\n\nimport builtins\nimport sys\n\n\n\ntry :\n from _codecs import *\nexcept ImportError as why:\n raise SystemError('Failed to load the builtin codecs: %s'%why)\n \n__all__=[\"register\",\"lookup\",\"open\",\"EncodedFile\",\"BOM\",\"BOM_BE\",\n\"BOM_LE\",\"BOM32_BE\",\"BOM32_LE\",\"BOM64_BE\",\"BOM64_LE\",\n\"BOM_UTF8\",\"BOM_UTF16\",\"BOM_UTF16_LE\",\"BOM_UTF16_BE\",\n\"BOM_UTF32\",\"BOM_UTF32_LE\",\"BOM_UTF32_BE\",\n\"CodecInfo\",\"Codec\",\"IncrementalEncoder\",\"IncrementalDecoder\",\n\"StreamReader\",\"StreamWriter\",\n\"StreamReaderWriter\",\"StreamRecoder\",\n\"getencoder\",\"getdecoder\",\"getincrementalencoder\",\n\"getincrementaldecoder\",\"getreader\",\"getwriter\",\n\"encode\",\"decode\",\"iterencode\",\"iterdecode\",\n\"strict_errors\",\"ignore_errors\",\"replace_errors\",\n\"xmlcharrefreplace_errors\",\n\"backslashreplace_errors\",\"namereplace_errors\",\n\"register_error\",\"lookup_error\"]\n\n\n\n\n\n\n\n\n\n\nBOM_UTF8=b'\\xef\\xbb\\xbf'\n\n\nBOM_LE=BOM_UTF16_LE=b'\\xff\\xfe'\n\n\nBOM_BE=BOM_UTF16_BE=b'\\xfe\\xff'\n\n\nBOM_UTF32_LE=b'\\xff\\xfe\\x00\\x00'\n\n\nBOM_UTF32_BE=b'\\x00\\x00\\xfe\\xff'\n\nif sys.byteorder =='little':\n\n\n BOM=BOM_UTF16=BOM_UTF16_LE\n \n \n BOM_UTF32=BOM_UTF32_LE\n \nelse :\n\n\n BOM=BOM_UTF16=BOM_UTF16_BE\n \n \n BOM_UTF32=BOM_UTF32_BE\n \n \nBOM32_LE=BOM_UTF16_LE\nBOM32_BE=BOM_UTF16_BE\nBOM64_LE=BOM_UTF32_LE\nBOM64_BE=BOM_UTF32_BE\n\n\n\n\nclass CodecInfo(tuple):\n ''\n \n \n \n \n \n \n \n _is_text_encoding=True\n \n def __new__(cls,encode,decode,streamreader=None ,streamwriter=None ,\n incrementalencoder=None ,incrementaldecoder=None ,name=None ,\n *,_is_text_encoding=None ):\n self=tuple.__new__(cls,(encode,decode,streamreader,streamwriter))\n self.name=name\n self.encode=encode\n self.decode=decode\n self.incrementalencoder=incrementalencoder\n self.incrementaldecoder=incrementaldecoder\n self.streamwriter=streamwriter\n self.streamreader=streamreader\n if _is_text_encoding is not None :\n self._is_text_encoding=_is_text_encoding\n return self\n \n def __repr__(self):\n return \"<%s.%s object for encoding %s at %#x>\"%\\\n (self.__class__.__module__,self.__class__.__qualname__,\n self.name,id(self))\n \nclass Codec:\n\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n def encode(self,input,errors='strict'):\n \n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n raise NotImplementedError\n \n def decode(self,input,errors='strict'):\n \n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n raise NotImplementedError\n \nclass IncrementalEncoder(object):\n ''\n\n\n\n \n def __init__(self,errors='strict'):\n ''\n\n\n\n\n\n \n self.errors=errors\n self.buffer=\"\"\n \n def encode(self,input,final=False ):\n ''\n\n \n raise NotImplementedError\n \n def reset(self):\n ''\n\n \n \n def getstate(self):\n ''\n\n \n return 0\n \n def setstate(self,state):\n ''\n\n\n \n \nclass BufferedIncrementalEncoder(IncrementalEncoder):\n ''\n\n\n\n \n def __init__(self,errors='strict'):\n IncrementalEncoder.__init__(self,errors)\n \n self.buffer=\"\"\n \n def _buffer_encode(self,input,errors,final):\n \n \n raise NotImplementedError\n \n def encode(self,input,final=False ):\n \n data=self.buffer+input\n (result,consumed)=self._buffer_encode(data,self.errors,final)\n \n self.buffer=data[consumed:]\n return result\n \n def reset(self):\n IncrementalEncoder.reset(self)\n self.buffer=\"\"\n \n def getstate(self):\n return self.buffer or 0\n \n def setstate(self,state):\n self.buffer=state or \"\"\n \nclass IncrementalDecoder(object):\n ''\n\n\n\n \n def __init__(self,errors='strict'):\n ''\n\n\n\n\n\n \n self.errors=errors\n \n def decode(self,input,final=False ):\n ''\n\n \n raise NotImplementedError\n \n def reset(self):\n ''\n\n \n \n def getstate(self):\n ''\n\n\n\n\n\n\n\n\n\n \n return (b\"\",0)\n \n def setstate(self,state):\n ''\n\n\n\n\n \n \nclass BufferedIncrementalDecoder(IncrementalDecoder):\n ''\n\n\n\n \n def __init__(self,errors='strict'):\n IncrementalDecoder.__init__(self,errors)\n \n self.buffer=b\"\"\n \n def _buffer_decode(self,input,errors,final):\n \n \n raise NotImplementedError\n \n def decode(self,input,final=False ):\n \n data=self.buffer+input\n (result,consumed)=self._buffer_decode(data,self.errors,final)\n \n self.buffer=data[consumed:]\n return result\n \n def reset(self):\n IncrementalDecoder.reset(self)\n self.buffer=b\"\"\n \n def getstate(self):\n \n return (self.buffer,0)\n \n def setstate(self,state):\n \n self.buffer=state[0]\n \n \n \n \n \n \n \n \nclass StreamWriter(Codec):\n\n def __init__(self,stream,errors='strict'):\n \n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n self.stream=stream\n self.errors=errors\n \n def write(self,object):\n \n ''\n \n data,consumed=self.encode(object,self.errors)\n self.stream.write(data)\n \n def writelines(self,list):\n \n ''\n\n \n self.write(''.join(list))\n \n def reset(self):\n \n ''\n\n\n\n\n\n\n \n pass\n \n def seek(self,offset,whence=0):\n self.stream.seek(offset,whence)\n if whence ==0 and offset ==0:\n self.reset()\n \n def __getattr__(self,name,\n getattr=getattr):\n \n ''\n \n return getattr(self.stream,name)\n \n def __enter__(self):\n return self\n \n def __exit__(self,type,value,tb):\n self.stream.close()\n \n \n \nclass StreamReader(Codec):\n\n charbuffertype=str\n \n def __init__(self,stream,errors='strict'):\n \n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n self.stream=stream\n self.errors=errors\n self.bytebuffer=b\"\"\n self._empty_charbuffer=self.charbuffertype()\n self.charbuffer=self._empty_charbuffer\n self.linebuffer=None\n \n def decode(self,input,errors='strict'):\n raise NotImplementedError\n \n def read(self,size=-1,chars=-1,firstline=False ):\n \n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n if self.linebuffer:\n self.charbuffer=self._empty_charbuffer.join(self.linebuffer)\n self.linebuffer=None\n \n if chars <0:\n \n \n chars=size\n \n \n while True :\n \n if chars >=0:\n if len(self.charbuffer)>=chars:\n break\n \n if size <0:\n newdata=self.stream.read()\n else :\n newdata=self.stream.read(size)\n \n data=self.bytebuffer+newdata\n if not data:\n break\n try :\n newchars,decodedbytes=self.decode(data,self.errors)\n except UnicodeDecodeError as exc:\n if firstline:\n newchars,decodedbytes=\\\n self.decode(data[:exc.start],self.errors)\n lines=newchars.splitlines(keepends=True )\n if len(lines)<=1:\n raise\n else :\n raise\n \n self.bytebuffer=data[decodedbytes:]\n \n self.charbuffer +=newchars\n \n if not newdata:\n break\n if chars <0:\n \n result=self.charbuffer\n self.charbuffer=self._empty_charbuffer\n else :\n \n result=self.charbuffer[:chars]\n self.charbuffer=self.charbuffer[chars:]\n return result\n \n def readline(self,size=None ,keepends=True ):\n \n ''\n\n\n\n\n\n \n \n \n if self.linebuffer:\n line=self.linebuffer[0]\n del self.linebuffer[0]\n if len(self.linebuffer)==1:\n \n \n self.charbuffer=self.linebuffer[0]\n self.linebuffer=None\n if not keepends:\n line=line.splitlines(keepends=False )[0]\n return line\n \n readsize=size or 72\n line=self._empty_charbuffer\n \n while True :\n data=self.read(readsize,firstline=True )\n if data:\n \n \n \n if (isinstance(data,str)and data.endswith(\"\\r\"))or\\\n (isinstance(data,bytes)and data.endswith(b\"\\r\")):\n data +=self.read(size=1,chars=1)\n \n line +=data\n lines=line.splitlines(keepends=True )\n if lines:\n if len(lines)>1:\n \n \n line=lines[0]\n del lines[0]\n if len(lines)>1:\n \n lines[-1]+=self.charbuffer\n self.linebuffer=lines\n self.charbuffer=None\n else :\n \n self.charbuffer=lines[0]+self.charbuffer\n if not keepends:\n line=line.splitlines(keepends=False )[0]\n break\n line0withend=lines[0]\n line0withoutend=lines[0].splitlines(keepends=False )[0]\n if line0withend !=line0withoutend:\n \n self.charbuffer=self._empty_charbuffer.join(lines[1:])+\\\n self.charbuffer\n if keepends:\n line=line0withend\n else :\n line=line0withoutend\n break\n \n if not data or size is not None :\n if line and not keepends:\n line=line.splitlines(keepends=False )[0]\n break\n if readsize <8000:\n readsize *=2\n return line\n \n def readlines(self,sizehint=None ,keepends=True ):\n \n ''\n\n\n\n\n\n\n\n\n \n data=self.read()\n return data.splitlines(keepends)\n \n def reset(self):\n \n ''\n\n\n\n\n\n \n self.bytebuffer=b\"\"\n self.charbuffer=self._empty_charbuffer\n self.linebuffer=None\n \n def seek(self,offset,whence=0):\n ''\n\n\n \n self.stream.seek(offset,whence)\n self.reset()\n \n def __next__(self):\n \n ''\n line=self.readline()\n if line:\n return line\n raise StopIteration\n \n def __iter__(self):\n return self\n \n def __getattr__(self,name,\n getattr=getattr):\n \n ''\n \n return getattr(self.stream,name)\n \n def __enter__(self):\n return self\n \n def __exit__(self,type,value,tb):\n self.stream.close()\n \n \n \nclass StreamReaderWriter:\n\n ''\n\n\n\n\n\n\n \n \n encoding='unknown'\n \n def __init__(self,stream,Reader,Writer,errors='strict'):\n \n ''\n\n\n\n\n\n\n\n\n\n \n self.stream=stream\n self.reader=Reader(stream,errors)\n self.writer=Writer(stream,errors)\n self.errors=errors\n \n def read(self,size=-1):\n \n return self.reader.read(size)\n \n def readline(self,size=None ):\n \n return self.reader.readline(size)\n \n def readlines(self,sizehint=None ):\n \n return self.reader.readlines(sizehint)\n \n def __next__(self):\n \n ''\n return next(self.reader)\n \n def __iter__(self):\n return self\n \n def write(self,data):\n \n return self.writer.write(data)\n \n def writelines(self,list):\n \n return self.writer.writelines(list)\n \n def reset(self):\n \n self.reader.reset()\n self.writer.reset()\n \n def seek(self,offset,whence=0):\n self.stream.seek(offset,whence)\n self.reader.reset()\n if whence ==0 and offset ==0:\n self.writer.reset()\n \n def __getattr__(self,name,\n getattr=getattr):\n \n ''\n \n return getattr(self.stream,name)\n \n \n \n def __enter__(self):\n return self\n \n def __exit__(self,type,value,tb):\n self.stream.close()\n \n \n \nclass StreamRecoder:\n\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n data_encoding='unknown'\n file_encoding='unknown'\n \n def __init__(self,stream,encode,decode,Reader,Writer,\n errors='strict'):\n \n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n self.stream=stream\n self.encode=encode\n self.decode=decode\n self.reader=Reader(stream,errors)\n self.writer=Writer(stream,errors)\n self.errors=errors\n \n def read(self,size=-1):\n \n data=self.reader.read(size)\n data,bytesencoded=self.encode(data,self.errors)\n return data\n \n def readline(self,size=None ):\n \n if size is None :\n data=self.reader.readline()\n else :\n data=self.reader.readline(size)\n data,bytesencoded=self.encode(data,self.errors)\n return data\n \n def readlines(self,sizehint=None ):\n \n data=self.reader.read()\n data,bytesencoded=self.encode(data,self.errors)\n return data.splitlines(keepends=True )\n \n def __next__(self):\n \n ''\n data=next(self.reader)\n data,bytesencoded=self.encode(data,self.errors)\n return data\n \n def __iter__(self):\n return self\n \n def write(self,data):\n \n data,bytesdecoded=self.decode(data,self.errors)\n return self.writer.write(data)\n \n def writelines(self,list):\n \n data=b''.join(list)\n data,bytesdecoded=self.decode(data,self.errors)\n return self.writer.write(data)\n \n def reset(self):\n \n self.reader.reset()\n self.writer.reset()\n \n def seek(self,offset,whence=0):\n \n \n self.reader.seek(offset,whence)\n self.writer.seek(offset,whence)\n \n def __getattr__(self,name,\n getattr=getattr):\n \n ''\n \n return getattr(self.stream,name)\n \n def __enter__(self):\n return self\n \n def __exit__(self,type,value,tb):\n self.stream.close()\n \n \n \ndef open(filename,mode='r',encoding=None ,errors='strict',buffering=-1):\n\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n if encoding is not None and\\\n 'b'not in mode:\n \n mode=mode+'b'\n file=builtins.open(filename,mode,buffering)\n if encoding is None :\n return file\n info=lookup(encoding)\n srw=StreamReaderWriter(file,info.streamreader,info.streamwriter,errors)\n \n srw.encoding=encoding\n return srw\n \ndef EncodedFile(file,data_encoding,file_encoding=None ,errors='strict'):\n\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n if file_encoding is None :\n file_encoding=data_encoding\n data_info=lookup(data_encoding)\n file_info=lookup(file_encoding)\n sr=StreamRecoder(file,data_info.encode,data_info.decode,\n file_info.streamreader,file_info.streamwriter,errors)\n \n sr.data_encoding=data_encoding\n sr.file_encoding=file_encoding\n return sr\n \n \n \ndef getencoder(encoding):\n\n ''\n\n\n\n\n \n return lookup(encoding).encode\n \ndef getdecoder(encoding):\n\n ''\n\n\n\n\n \n return lookup(encoding).decode\n \ndef getincrementalencoder(encoding):\n\n ''\n\n\n\n\n\n \n encoder=lookup(encoding).incrementalencoder\n if encoder is None :\n raise LookupError(encoding)\n return encoder\n \ndef getincrementaldecoder(encoding):\n\n ''\n\n\n\n\n\n \n decoder=lookup(encoding).incrementaldecoder\n if decoder is None :\n raise LookupError(encoding)\n return decoder\n \ndef getreader(encoding):\n\n ''\n\n\n\n\n \n return lookup(encoding).streamreader\n \ndef getwriter(encoding):\n\n ''\n\n\n\n\n \n return lookup(encoding).streamwriter\n \ndef iterencode(iterator,encoding,errors='strict',**kwargs):\n ''\n\n\n\n\n\n\n \n encoder=getincrementalencoder(encoding)(errors,**kwargs)\n for input in iterator:\n output=encoder.encode(input)\n if output:\n yield output\n output=encoder.encode(\"\",True )\n if output:\n yield output\n \ndef iterdecode(iterator,encoding,errors='strict',**kwargs):\n ''\n\n\n\n\n\n\n \n decoder=getincrementaldecoder(encoding)(errors,**kwargs)\n for input in iterator:\n output=decoder.decode(input)\n if output:\n yield output\n output=decoder.decode(b\"\",True )\n if output:\n yield output\n \n \n \ndef make_identity_dict(rng):\n\n ''\n\n\n\n\n \n return {i:i for i in rng}\n \ndef make_encoding_map(decoding_map):\n\n ''\n\n\n\n\n\n\n\n\n\n \n m={}\n for k,v in decoding_map.items():\n if not v in m:\n m[v]=k\n else :\n m[v]=None\n return m\n \n \n \ntry :\n strict_errors=lookup_error(\"strict\")\n ignore_errors=lookup_error(\"ignore\")\n replace_errors=lookup_error(\"replace\")\n xmlcharrefreplace_errors=lookup_error(\"xmlcharrefreplace\")\n backslashreplace_errors=lookup_error(\"backslashreplace\")\n namereplace_errors=lookup_error(\"namereplace\")\nexcept LookupError:\n\n strict_errors=None\n ignore_errors=None\n replace_errors=None\n xmlcharrefreplace_errors=None\n backslashreplace_errors=None\n namereplace_errors=None\n \n \n \n_false=0\nif _false:\n import encodings\n \n \n \nif __name__ =='__main__':\n\n\n sys.stdout=EncodedFile(sys.stdout,'latin-1','utf-8')\n \n \n sys.stdin=EncodedFile(sys.stdin,'utf-8','latin-1')\n", ["_codecs", "builtins", "encodings", "sys"]], "codeop": [".py", "''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport __future__\n\n_features=[getattr(__future__,fname)\nfor fname in __future__.all_feature_names]\n\n__all__=[\"compile_command\",\"Compile\",\"CommandCompiler\"]\n\nPyCF_DONT_IMPLY_DEDENT=0x200\n\ndef _maybe_compile(compiler,source,filename,symbol):\n\n for line in source.split(\"\\n\"):\n line=line.strip()\n if line and line[0]!='#':\n break\n else :\n if symbol !=\"eval\":\n source=\"pass\"\n \n err=err1=err2=None\n code=code1=code2=None\n \n try :\n code=compiler(source,filename,symbol)\n except SyntaxError as err:\n pass\n \n try :\n code1=compiler(source+\"\\n\",filename,symbol)\n except SyntaxError as e:\n err1=e\n \n try :\n code2=compiler(source+\"\\n\\n\",filename,symbol)\n except SyntaxError as e:\n err2=e\n \n if code:\n return code\n if not code1 and repr(err1)==repr(err2):\n raise err1\n \ndef _compile(source,filename,symbol):\n return compile(source,filename,symbol,PyCF_DONT_IMPLY_DEDENT)\n \ndef compile_command(source,filename=\"\",symbol=\"single\"):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n return _maybe_compile(_compile,source,filename,symbol)\n \nclass Compile:\n ''\n\n\n \n def __init__(self):\n self.flags=PyCF_DONT_IMPLY_DEDENT\n \n def __call__(self,source,filename,symbol):\n codeob=compile(source,filename,symbol,self.flags,1)\n for feature in _features:\n if codeob.co_flags&feature.compiler_flag:\n self.flags |=feature.compiler_flag\n return codeob\n \nclass CommandCompiler:\n ''\n\n\n\n \n \n def __init__(self,):\n self.compiler=Compile()\n \n def __call__(self,source,filename=\"\",symbol=\"single\"):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n return _maybe_compile(self.compiler,source,filename,symbol)\n", ["__future__"]], "colorsys": [".py", "''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n__all__=[\"rgb_to_yiq\",\"yiq_to_rgb\",\"rgb_to_hls\",\"hls_to_rgb\",\n\"rgb_to_hsv\",\"hsv_to_rgb\"]\n\n\n\nONE_THIRD=1.0 /3.0\nONE_SIXTH=1.0 /6.0\nTWO_THIRD=2.0 /3.0\n\n\n\n\n\n\n\n\ndef rgb_to_yiq(r,g,b):\n y=0.30 *r+0.59 *g+0.11 *b\n i=0.74 *(r -y)-0.27 *(b -y)\n q=0.48 *(r -y)+0.41 *(b -y)\n return (y,i,q)\n \ndef yiq_to_rgb(y,i,q):\n\n\n\n\n r=y+0.9468822170900693 *i+0.6235565819861433 *q\n g=y -0.27478764629897834 *i -0.6356910791873801 *q\n b=y -1.1085450346420322 *i+1.7090069284064666 *q\n \n if r <0.0:\n r=0.0\n if g <0.0:\n g=0.0\n if b <0.0:\n b=0.0\n if r >1.0:\n r=1.0\n if g >1.0:\n g=1.0\n if b >1.0:\n b=1.0\n return (r,g,b)\n \n \n \n \n \n \n \ndef rgb_to_hls(r,g,b):\n maxc=max(r,g,b)\n minc=min(r,g,b)\n \n l=(minc+maxc)/2.0\n if minc ==maxc:\n return 0.0,l,0.0\n if l <=0.5:\n s=(maxc -minc)/(maxc+minc)\n else :\n s=(maxc -minc)/(2.0 -maxc -minc)\n rc=(maxc -r)/(maxc -minc)\n gc=(maxc -g)/(maxc -minc)\n bc=(maxc -b)/(maxc -minc)\n if r ==maxc:\n h=bc -gc\n elif g ==maxc:\n h=2.0+rc -bc\n else :\n h=4.0+gc -rc\n h=(h /6.0)%1.0\n return h,l,s\n \ndef hls_to_rgb(h,l,s):\n if s ==0.0:\n return l,l,l\n if l <=0.5:\n m2=l *(1.0+s)\n else :\n m2=l+s -(l *s)\n m1=2.0 *l -m2\n return (_v(m1,m2,h+ONE_THIRD),_v(m1,m2,h),_v(m1,m2,h -ONE_THIRD))\n \ndef _v(m1,m2,hue):\n hue=hue %1.0\n if hue MAX_INTERPOLATION_DEPTH:\n raise InterpolationDepthError(option,section,rawval)\n while rest:\n p=rest.find(\"%\")\n if p <0:\n accum.append(rest)\n return\n if p >0:\n accum.append(rest[:p])\n rest=rest[p:]\n \n c=rest[1:2]\n if c ==\"%\":\n accum.append(\"%\")\n rest=rest[2:]\n elif c ==\"(\":\n m=self._KEYCRE.match(rest)\n if m is None :\n raise InterpolationSyntaxError(option,section,\n \"bad interpolation variable reference %r\"%rest)\n var=parser.optionxform(m.group(1))\n rest=rest[m.end():]\n try :\n v=map[var]\n except KeyError:\n raise InterpolationMissingOptionError(\n option,section,rawval,var)from None\n if \"%\"in v:\n self._interpolate_some(parser,option,accum,v,\n section,map,depth+1)\n else :\n accum.append(v)\n else :\n raise InterpolationSyntaxError(\n option,section,\n \"'%%' must be followed by '%%' or '(', \"\n \"found: %r\"%(rest,))\n \n \nclass ExtendedInterpolation(Interpolation):\n ''\n \n \n _KEYCRE=re.compile(r\"\\$\\{([^}]+)\\}\")\n \n def before_get(self,parser,section,option,value,defaults):\n L=[]\n self._interpolate_some(parser,option,L,value,section,defaults,1)\n return ''.join(L)\n \n def before_set(self,parser,section,option,value):\n tmp_value=value.replace('$$','')\n tmp_value=self._KEYCRE.sub('',tmp_value)\n if '$'in tmp_value:\n raise ValueError(\"invalid interpolation syntax in %r at \"\n \"position %d\"%(value,tmp_value.find('$')))\n return value\n \n def _interpolate_some(self,parser,option,accum,rest,section,map,\n depth):\n rawval=parser.get(section,option,raw=True ,fallback=rest)\n if depth >MAX_INTERPOLATION_DEPTH:\n raise InterpolationDepthError(option,section,rawval)\n while rest:\n p=rest.find(\"$\")\n if p <0:\n accum.append(rest)\n return\n if p >0:\n accum.append(rest[:p])\n rest=rest[p:]\n \n c=rest[1:2]\n if c ==\"$\":\n accum.append(\"$\")\n rest=rest[2:]\n elif c ==\"{\":\n m=self._KEYCRE.match(rest)\n if m is None :\n raise InterpolationSyntaxError(option,section,\n \"bad interpolation variable reference %r\"%rest)\n path=m.group(1).split(':')\n rest=rest[m.end():]\n sect=section\n opt=option\n try :\n if len(path)==1:\n opt=parser.optionxform(path[0])\n v=map[opt]\n elif len(path)==2:\n sect=path[0]\n opt=parser.optionxform(path[1])\n v=parser.get(sect,opt,raw=True )\n else :\n raise InterpolationSyntaxError(\n option,section,\n \"More than one ':' found: %r\"%(rest,))\n except (KeyError,NoSectionError,NoOptionError):\n raise InterpolationMissingOptionError(\n option,section,rawval,\":\".join(path))from None\n if \"$\"in v:\n self._interpolate_some(parser,opt,accum,v,sect,\n dict(parser.items(sect,raw=True )),\n depth+1)\n else :\n accum.append(v)\n else :\n raise InterpolationSyntaxError(\n option,section,\n \"'$' must be followed by '$' or '{', \"\n \"found: %r\"%(rest,))\n \n \nclass LegacyInterpolation(Interpolation):\n ''\n \n \n _KEYCRE=re.compile(r\"%\\(([^)]*)\\)s|.\")\n \n def before_get(self,parser,section,option,value,vars):\n rawval=value\n depth=MAX_INTERPOLATION_DEPTH\n while depth:\n depth -=1\n if value and \"%(\"in value:\n replace=functools.partial(self._interpolation_replace,\n parser=parser)\n value=self._KEYCRE.sub(replace,value)\n try :\n value=value %vars\n except KeyError as e:\n raise InterpolationMissingOptionError(\n option,section,rawval,e.args[0])from None\n else :\n break\n if value and \"%(\"in value:\n raise InterpolationDepthError(option,section,rawval)\n return value\n \n def before_set(self,parser,section,option,value):\n return value\n \n @staticmethod\n def _interpolation_replace(match,parser):\n s=match.group(1)\n if s is None :\n return match.group()\n else :\n return \"%%(%s)s\"%parser.optionxform(s)\n \n \nclass RawConfigParser(MutableMapping):\n ''\n \n \n _SECT_TMPL=r\"\"\"\n \\[ # [\n (?P[^]]+) # very permissive!\n \\] # ]\n \"\"\"\n _OPT_TMPL=r\"\"\"\n (?P.*?) # very permissive!\n \\s*(?P{delim})\\s* # any number of space/tab,\n # followed by any of the\n # allowed delimiters,\n # followed by any space/tab\n (?P.*)$ # everything up to eol\n \"\"\"\n _OPT_NV_TMPL=r\"\"\"\n (?P.*?) # very permissive!\n \\s*(?: # any number of space/tab,\n (?P{delim})\\s* # optionally followed by\n # any of the allowed\n # delimiters, followed by any\n # space/tab\n (?P.*))?$ # everything up to eol\n \"\"\"\n \n _DEFAULT_INTERPOLATION=Interpolation()\n \n SECTCRE=re.compile(_SECT_TMPL,re.VERBOSE)\n \n OPTCRE=re.compile(_OPT_TMPL.format(delim=\"=|:\"),re.VERBOSE)\n \n \n OPTCRE_NV=re.compile(_OPT_NV_TMPL.format(delim=\"=|:\"),re.VERBOSE)\n \n NONSPACECRE=re.compile(r\"\\S\")\n \n BOOLEAN_STATES={'1':True ,'yes':True ,'true':True ,'on':True ,\n '0':False ,'no':False ,'false':False ,'off':False }\n \n def __init__(self,defaults=None ,dict_type=_default_dict,\n allow_no_value=False ,*,delimiters=('=',':'),\n comment_prefixes=('#',';'),inline_comment_prefixes=None ,\n strict=True ,empty_lines_in_values=True ,\n default_section=DEFAULTSECT,\n interpolation=_UNSET,converters=_UNSET):\n \n self._dict=dict_type\n self._sections=self._dict()\n self._defaults=self._dict()\n self._converters=ConverterMapping(self)\n self._proxies=self._dict()\n self._proxies[default_section]=SectionProxy(self,default_section)\n self._delimiters=tuple(delimiters)\n if delimiters ==('=',':'):\n self._optcre=self.OPTCRE_NV if allow_no_value else self.OPTCRE\n else :\n d=\"|\".join(re.escape(d)for d in delimiters)\n if allow_no_value:\n self._optcre=re.compile(self._OPT_NV_TMPL.format(delim=d),\n re.VERBOSE)\n else :\n self._optcre=re.compile(self._OPT_TMPL.format(delim=d),\n re.VERBOSE)\n self._comment_prefixes=tuple(comment_prefixes or ())\n self._inline_comment_prefixes=tuple(inline_comment_prefixes or ())\n self._strict=strict\n self._allow_no_value=allow_no_value\n self._empty_lines_in_values=empty_lines_in_values\n self.default_section=default_section\n self._interpolation=interpolation\n if self._interpolation is _UNSET:\n self._interpolation=self._DEFAULT_INTERPOLATION\n if self._interpolation is None :\n self._interpolation=Interpolation()\n if converters is not _UNSET:\n self._converters.update(converters)\n if defaults:\n self._read_defaults(defaults)\n \n def defaults(self):\n return self._defaults\n \n def sections(self):\n ''\n \n return list(self._sections.keys())\n \n def add_section(self,section):\n ''\n\n\n\n \n if section ==self.default_section:\n raise ValueError('Invalid section name: %r'%section)\n \n if section in self._sections:\n raise DuplicateSectionError(section)\n self._sections[section]=self._dict()\n self._proxies[section]=SectionProxy(self,section)\n \n def has_section(self,section):\n ''\n\n\n \n return section in self._sections\n \n def options(self,section):\n ''\n try :\n opts=self._sections[section].copy()\n except KeyError:\n raise NoSectionError(section)from None\n opts.update(self._defaults)\n return list(opts.keys())\n \n def read(self,filenames,encoding=None ):\n ''\n\n\n\n\n\n\n\n\n\n \n if isinstance(filenames,(str,bytes,os.PathLike)):\n filenames=[filenames]\n read_ok=[]\n for filename in filenames:\n try :\n with open(filename,encoding=encoding)as fp:\n self._read(fp,filename)\n except OSError:\n continue\n if isinstance(filename,os.PathLike):\n filename=os.fspath(filename)\n read_ok.append(filename)\n return read_ok\n \n def read_file(self,f,source=None ):\n ''\n\n\n\n\n\n \n if source is None :\n try :\n source=f.name\n except AttributeError:\n source='??>'\n self._read(f,source)\n \n def read_string(self,string,source=''):\n ''\n sfile=io.StringIO(string)\n self.read_file(sfile,source)\n \n def read_dict(self,dictionary,source=''):\n ''\n\n\n\n\n\n\n\n\n\n\n \n elements_added=set()\n for section,keys in dictionary.items():\n section=str(section)\n try :\n self.add_section(section)\n except (DuplicateSectionError,ValueError):\n if self._strict and section in elements_added:\n raise\n elements_added.add(section)\n for key,value in keys.items():\n key=self.optionxform(str(key))\n if value is not None :\n value=str(value)\n if self._strict and (section,key)in elements_added:\n raise DuplicateOptionError(section,key,source)\n elements_added.add((section,key))\n self.set(section,key,value)\n \n def readfp(self,fp,filename=None ):\n ''\n warnings.warn(\n \"This method will be removed in future versions. \"\n \"Use 'parser.read_file()' instead.\",\n DeprecationWarning,stacklevel=2\n )\n self.read_file(fp,source=filename)\n \n def get(self,section,option,*,raw=False ,vars=None ,fallback=_UNSET):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n \n try :\n d=self._unify_values(section,vars)\n except NoSectionError:\n if fallback is _UNSET:\n raise\n else :\n return fallback\n option=self.optionxform(option)\n try :\n value=d[option]\n except KeyError:\n if fallback is _UNSET:\n raise NoOptionError(option,section)\n else :\n return fallback\n \n if raw or value is None :\n return value\n else :\n return self._interpolation.before_get(self,section,option,value,\n d)\n \n def _get(self,section,conv,option,**kwargs):\n return conv(self.get(section,option,**kwargs))\n \n def _get_conv(self,section,option,conv,*,raw=False ,vars=None ,\n fallback=_UNSET,**kwargs):\n try :\n return self._get(section,conv,option,raw=raw,vars=vars,\n **kwargs)\n except (NoSectionError,NoOptionError):\n if fallback is _UNSET:\n raise\n return fallback\n \n \n def getint(self,section,option,*,raw=False ,vars=None ,\n fallback=_UNSET,**kwargs):\n return self._get_conv(section,option,int,raw=raw,vars=vars,\n fallback=fallback,**kwargs)\n \n def getfloat(self,section,option,*,raw=False ,vars=None ,\n fallback=_UNSET,**kwargs):\n return self._get_conv(section,option,float,raw=raw,vars=vars,\n fallback=fallback,**kwargs)\n \n def getboolean(self,section,option,*,raw=False ,vars=None ,\n fallback=_UNSET,**kwargs):\n return self._get_conv(section,option,self._convert_to_boolean,\n raw=raw,vars=vars,fallback=fallback,**kwargs)\n \n def items(self,section=_UNSET,raw=False ,vars=None ):\n ''\n\n\n\n\n\n\n\n\n \n if section is _UNSET:\n return super().items()\n d=self._defaults.copy()\n try :\n d.update(self._sections[section])\n except KeyError:\n if section !=self.default_section:\n raise NoSectionError(section)\n orig_keys=list(d.keys())\n \n if vars:\n for key,value in vars.items():\n d[self.optionxform(key)]=value\n value_getter=lambda option:self._interpolation.before_get(self,\n section,option,d[option],d)\n if raw:\n value_getter=lambda option:d[option]\n return [(option,value_getter(option))for option in orig_keys]\n \n def popitem(self):\n ''\n\n\n\n\n \n for key in self.sections():\n value=self[key]\n del self[key]\n return key,value\n raise KeyError\n \n def optionxform(self,optionstr):\n return optionstr.lower()\n \n def has_option(self,section,option):\n ''\n\n \n if not section or section ==self.default_section:\n option=self.optionxform(option)\n return option in self._defaults\n elif section not in self._sections:\n return False\n else :\n option=self.optionxform(option)\n return (option in self._sections[section]\n or option in self._defaults)\n \n def set(self,section,option,value=None ):\n ''\n if value:\n value=self._interpolation.before_set(self,section,option,\n value)\n if not section or section ==self.default_section:\n sectdict=self._defaults\n else :\n try :\n sectdict=self._sections[section]\n except KeyError:\n raise NoSectionError(section)from None\n sectdict[self.optionxform(option)]=value\n \n def write(self,fp,space_around_delimiters=True ):\n ''\n\n\n\n \n if space_around_delimiters:\n d=\" {} \".format(self._delimiters[0])\n else :\n d=self._delimiters[0]\n if self._defaults:\n self._write_section(fp,self.default_section,\n self._defaults.items(),d)\n for section in self._sections:\n self._write_section(fp,section,\n self._sections[section].items(),d)\n \n def _write_section(self,fp,section_name,section_items,delimiter):\n ''\n fp.write(\"[{}]\\n\".format(section_name))\n for key,value in section_items:\n value=self._interpolation.before_write(self,section_name,key,\n value)\n if value is not None or not self._allow_no_value:\n value=delimiter+str(value).replace('\\n','\\n\\t')\n else :\n value=\"\"\n fp.write(\"{}{}\\n\".format(key,value))\n fp.write(\"\\n\")\n \n def remove_option(self,section,option):\n ''\n if not section or section ==self.default_section:\n sectdict=self._defaults\n else :\n try :\n sectdict=self._sections[section]\n except KeyError:\n raise NoSectionError(section)from None\n option=self.optionxform(option)\n existed=option in sectdict\n if existed:\n del sectdict[option]\n return existed\n \n def remove_section(self,section):\n ''\n existed=section in self._sections\n if existed:\n del self._sections[section]\n del self._proxies[section]\n return existed\n \n def __getitem__(self,key):\n if key !=self.default_section and not self.has_section(key):\n raise KeyError(key)\n return self._proxies[key]\n \n def __setitem__(self,key,value):\n \n \n if key in self and self[key]is value:\n return\n \n \n if key ==self.default_section:\n self._defaults.clear()\n elif key in self._sections:\n self._sections[key].clear()\n self.read_dict({key:value})\n \n def __delitem__(self,key):\n if key ==self.default_section:\n raise ValueError(\"Cannot remove the default section.\")\n if not self.has_section(key):\n raise KeyError(key)\n self.remove_section(key)\n \n def __contains__(self,key):\n return key ==self.default_section or self.has_section(key)\n \n def __len__(self):\n return len(self._sections)+1\n \n def __iter__(self):\n \n return itertools.chain((self.default_section,),self._sections.keys())\n \n def _read(self,fp,fpname):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n elements_added=set()\n cursect=None\n sectname=None\n optname=None\n lineno=0\n indent_level=0\n e=None\n for lineno,line in enumerate(fp,start=1):\n comment_start=sys.maxsize\n \n inline_prefixes={p:-1 for p in self._inline_comment_prefixes}\n while comment_start ==sys.maxsize and inline_prefixes:\n next_prefixes={}\n for prefix,index in inline_prefixes.items():\n index=line.find(prefix,index+1)\n if index ==-1:\n continue\n next_prefixes[prefix]=index\n if index ==0 or (index >0 and line[index -1].isspace()):\n comment_start=min(comment_start,index)\n inline_prefixes=next_prefixes\n \n for prefix in self._comment_prefixes:\n if line.strip().startswith(prefix):\n comment_start=0\n break\n if comment_start ==sys.maxsize:\n comment_start=None\n value=line[:comment_start].strip()\n if not value:\n if self._empty_lines_in_values:\n \n \n if (comment_start is None and\n cursect is not None and\n optname and\n cursect[optname]is not None ):\n cursect[optname].append('')\n else :\n \n indent_level=sys.maxsize\n continue\n \n first_nonspace=self.NONSPACECRE.search(line)\n cur_indent_level=first_nonspace.start()if first_nonspace else 0\n if (cursect is not None and optname and\n cur_indent_level >indent_level):\n cursect[optname].append(value)\n \n else :\n indent_level=cur_indent_level\n \n mo=self.SECTCRE.match(value)\n if mo:\n sectname=mo.group('header')\n if sectname in self._sections:\n if self._strict and sectname in elements_added:\n raise DuplicateSectionError(sectname,fpname,\n lineno)\n cursect=self._sections[sectname]\n elements_added.add(sectname)\n elif sectname ==self.default_section:\n cursect=self._defaults\n else :\n cursect=self._dict()\n self._sections[sectname]=cursect\n self._proxies[sectname]=SectionProxy(self,sectname)\n elements_added.add(sectname)\n \n optname=None\n \n elif cursect is None :\n raise MissingSectionHeaderError(fpname,lineno,line)\n \n else :\n mo=self._optcre.match(value)\n if mo:\n optname,vi,optval=mo.group('option','vi','value')\n if not optname:\n e=self._handle_error(e,fpname,lineno,line)\n optname=self.optionxform(optname.rstrip())\n if (self._strict and\n (sectname,optname)in elements_added):\n raise DuplicateOptionError(sectname,optname,\n fpname,lineno)\n elements_added.add((sectname,optname))\n \n \n if optval is not None :\n optval=optval.strip()\n cursect[optname]=[optval]\n else :\n \n cursect[optname]=None\n else :\n \n \n \n \n e=self._handle_error(e,fpname,lineno,line)\n self._join_multiline_values()\n \n if e:\n raise e\n \n def _join_multiline_values(self):\n defaults=self.default_section,self._defaults\n all_sections=itertools.chain((defaults,),\n self._sections.items())\n for section,options in all_sections:\n for name,val in options.items():\n if isinstance(val,list):\n val='\\n'.join(val).rstrip()\n options[name]=self._interpolation.before_read(self,\n section,\n name,val)\n \n def _read_defaults(self,defaults):\n ''\n \n for key,value in defaults.items():\n self._defaults[self.optionxform(key)]=value\n \n def _handle_error(self,exc,fpname,lineno,line):\n if not exc:\n exc=ParsingError(fpname)\n exc.append(lineno,repr(line))\n return exc\n \n def _unify_values(self,section,vars):\n ''\n\n\n \n sectiondict={}\n try :\n sectiondict=self._sections[section]\n except KeyError:\n if section !=self.default_section:\n raise NoSectionError(section)from None\n \n vardict={}\n if vars:\n for key,value in vars.items():\n if value is not None :\n value=str(value)\n vardict[self.optionxform(key)]=value\n return _ChainMap(vardict,sectiondict,self._defaults)\n \n def _convert_to_boolean(self,value):\n ''\n \n if value.lower()not in self.BOOLEAN_STATES:\n raise ValueError('Not a boolean: %s'%value)\n return self.BOOLEAN_STATES[value.lower()]\n \n def _validate_value_types(self,*,section=\"\",option=\"\",value=\"\"):\n ''\n\n\n\n\n\n\n\n\n\n\n \n if not isinstance(section,str):\n raise TypeError(\"section names must be strings\")\n if not isinstance(option,str):\n raise TypeError(\"option keys must be strings\")\n if not self._allow_no_value or value:\n if not isinstance(value,str):\n raise TypeError(\"option values must be strings\")\n \n @property\n def converters(self):\n return self._converters\n \n \nclass ConfigParser(RawConfigParser):\n ''\n \n _DEFAULT_INTERPOLATION=BasicInterpolation()\n \n def set(self,section,option,value=None ):\n ''\n \n self._validate_value_types(option=option,value=value)\n super().set(section,option,value)\n \n def add_section(self,section):\n ''\n\n \n self._validate_value_types(section=section)\n super().add_section(section)\n \n def _read_defaults(self,defaults):\n ''\n\n\n\n \n try :\n hold_interpolation=self._interpolation\n self._interpolation=Interpolation()\n self.read_dict({self.default_section:defaults})\n finally :\n self._interpolation=hold_interpolation\n \n \nclass SafeConfigParser(ConfigParser):\n ''\n \n def __init__(self,*args,**kwargs):\n super().__init__(*args,**kwargs)\n warnings.warn(\n \"The SafeConfigParser class has been renamed to ConfigParser \"\n \"in Python 3.2. This alias will be removed in future versions.\"\n \" Use ConfigParser directly instead.\",\n DeprecationWarning,stacklevel=2\n )\n \n \nclass SectionProxy(MutableMapping):\n ''\n \n def __init__(self,parser,name):\n ''\n self._parser=parser\n self._name=name\n for conv in parser.converters:\n key='get'+conv\n getter=functools.partial(self.get,_impl=getattr(parser,key))\n setattr(self,key,getter)\n \n def __repr__(self):\n return ''.format(self._name)\n \n def __getitem__(self,key):\n if not self._parser.has_option(self._name,key):\n raise KeyError(key)\n return self._parser.get(self._name,key)\n \n def __setitem__(self,key,value):\n self._parser._validate_value_types(option=key,value=value)\n return self._parser.set(self._name,key,value)\n \n def __delitem__(self,key):\n if not (self._parser.has_option(self._name,key)and\n self._parser.remove_option(self._name,key)):\n raise KeyError(key)\n \n def __contains__(self,key):\n return self._parser.has_option(self._name,key)\n \n def __len__(self):\n return len(self._options())\n \n def __iter__(self):\n return self._options().__iter__()\n \n def _options(self):\n if self._name !=self._parser.default_section:\n return self._parser.options(self._name)\n else :\n return self._parser.defaults()\n \n @property\n def parser(self):\n \n return self._parser\n \n @property\n def name(self):\n \n return self._name\n \n def get(self,option,fallback=None ,*,raw=False ,vars=None ,\n _impl=None ,**kwargs):\n ''\n\n\n\n\n \n \n \n if not _impl:\n _impl=self._parser.get\n return _impl(self._name,option,raw=raw,vars=vars,\n fallback=fallback,**kwargs)\n \n \nclass ConverterMapping(MutableMapping):\n ''\n\n\n\n\n \n \n GETTERCRE=re.compile(r\"^get(?P.+)$\")\n \n def __init__(self,parser):\n self._parser=parser\n self._data={}\n for getter in dir(self._parser):\n m=self.GETTERCRE.match(getter)\n if not m or not callable(getattr(self._parser,getter)):\n continue\n self._data[m.group('name')]=None\n \n def __getitem__(self,key):\n return self._data[key]\n \n def __setitem__(self,key,value):\n try :\n k='get'+key\n except TypeError:\n raise ValueError('Incompatible key: {} (type: {})'\n ''.format(key,type(key)))\n if k =='get':\n raise ValueError('Incompatible key: cannot use \"\" as a name')\n self._data[key]=value\n func=functools.partial(self._parser._get_conv,conv=value)\n func.converter=value\n setattr(self._parser,k,func)\n for proxy in self._parser.values():\n getter=functools.partial(proxy.get,_impl=func)\n setattr(proxy,k,getter)\n \n def __delitem__(self,key):\n try :\n k='get'+(key or None )\n except TypeError:\n raise KeyError(key)\n del self._data[key]\n for inst in itertools.chain((self._parser,),self._parser.values()):\n try :\n delattr(inst,k)\n except AttributeError:\n \n \n continue\n \n def __iter__(self):\n return iter(self._data)\n \n def __len__(self):\n return len(self._data)\n", ["collections", "collections.abc", "functools", "io", "itertools", "os", "re", "sys", "warnings"]], "contextlib": [".py", "''\nimport abc\nimport sys\nimport _collections_abc\nfrom collections import deque\nfrom functools import wraps\nfrom types import MethodType\n\n__all__=[\"asynccontextmanager\",\"contextmanager\",\"closing\",\"nullcontext\",\n\"AbstractContextManager\",\"AbstractAsyncContextManager\",\n\"AsyncExitStack\",\"ContextDecorator\",\"ExitStack\",\n\"redirect_stdout\",\"redirect_stderr\",\"suppress\"]\n\n\nclass AbstractContextManager(abc.ABC):\n\n ''\n \n def __enter__(self):\n ''\n return self\n \n @abc.abstractmethod\n def __exit__(self,exc_type,exc_value,traceback):\n ''\n return None\n \n @classmethod\n def __subclasshook__(cls,C):\n if cls is AbstractContextManager:\n return _collections_abc._check_methods(C,\"__enter__\",\"__exit__\")\n return NotImplemented\n \n \nclass AbstractAsyncContextManager(abc.ABC):\n\n ''\n \n async def __aenter__(self):\n ''\n return self\n \n @abc.abstractmethod\n async def __aexit__(self,exc_type,exc_value,traceback):\n ''\n return None\n \n @classmethod\n def __subclasshook__(cls,C):\n if cls is AbstractAsyncContextManager:\n return _collections_abc._check_methods(C,\"__aenter__\",\n \"__aexit__\")\n return NotImplemented\n \n \nclass ContextDecorator(object):\n ''\n \n def _recreate_cm(self):\n ''\n\n\n\n\n\n\n\n \n return self\n \n def __call__(self,func):\n @wraps(func)\n def inner(*args,**kwds):\n with self._recreate_cm():\n return func(*args,**kwds)\n return inner\n \n \nclass _GeneratorContextManagerBase:\n ''\n \n def __init__(self,func,args,kwds):\n self.gen=func(*args,**kwds)\n self.func,self.args,self.kwds=func,args,kwds\n \n doc=getattr(func,\"__doc__\",None )\n if doc is None :\n doc=type(self).__doc__\n self.__doc__=doc\n \n \n \n \n \n \n \nclass _GeneratorContextManager(_GeneratorContextManagerBase,\nAbstractContextManager,\nContextDecorator):\n ''\n \n def _recreate_cm(self):\n \n \n \n return self.__class__(self.func,self.args,self.kwds)\n \n def __enter__(self):\n \n \n del self.args,self.kwds,self.func\n try :\n return next(self.gen)\n except StopIteration:\n raise RuntimeError(\"generator didn't yield\")from None\n \n def __exit__(self,type,value,traceback):\n if type is None :\n try :\n next(self.gen)\n except StopIteration:\n return False\n else :\n raise RuntimeError(\"generator didn't stop\")\n else :\n if value is None :\n \n \n value=type()\n try :\n self.gen.throw(type,value,traceback)\n except StopIteration as exc:\n \n \n \n return exc is not value\n except RuntimeError as exc:\n \n if exc is value:\n return False\n \n \n \n if type is StopIteration and exc.__cause__ is value:\n return False\n raise\n except :\n \n \n \n \n \n \n \n \n \n \n \n if sys.exc_info()[1]is value:\n return False\n raise\n raise RuntimeError(\"generator didn't stop after throw()\")\n \n \nclass _AsyncGeneratorContextManager(_GeneratorContextManagerBase,\nAbstractAsyncContextManager):\n ''\n \n async def __aenter__(self):\n try :\n return await self.gen.__anext__()\n except StopAsyncIteration:\n raise RuntimeError(\"generator didn't yield\")from None\n \n async def __aexit__(self,typ,value,traceback):\n if typ is None :\n try :\n await self.gen.__anext__()\n except StopAsyncIteration:\n return\n else :\n raise RuntimeError(\"generator didn't stop\")\n else :\n if value is None :\n value=typ()\n \n \n try :\n await self.gen.athrow(typ,value,traceback)\n raise RuntimeError(\"generator didn't stop after athrow()\")\n except StopAsyncIteration as exc:\n return exc is not value\n except RuntimeError as exc:\n if exc is value:\n return False\n \n \n \n \n \n \n if isinstance(value,(StopIteration,StopAsyncIteration)):\n if exc.__cause__ is value:\n return False\n raise\n except BaseException as exc:\n if exc is not value:\n raise\n \n \ndef contextmanager(func):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n @wraps(func)\n def helper(*args,**kwds):\n return _GeneratorContextManager(func,args,kwds)\n return helper\n \n \ndef asynccontextmanager(func):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n @wraps(func)\n def helper(*args,**kwds):\n return _AsyncGeneratorContextManager(func,args,kwds)\n return helper\n \n \nclass closing(AbstractContextManager):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n def __init__(self,thing):\n self.thing=thing\n def __enter__(self):\n return self.thing\n def __exit__(self,*exc_info):\n self.thing.close()\n \n \nclass _RedirectStream(AbstractContextManager):\n\n _stream=None\n \n def __init__(self,new_target):\n self._new_target=new_target\n \n self._old_targets=[]\n \n def __enter__(self):\n self._old_targets.append(getattr(sys,self._stream))\n setattr(sys,self._stream,self._new_target)\n return self._new_target\n \n def __exit__(self,exctype,excinst,exctb):\n setattr(sys,self._stream,self._old_targets.pop())\n \n \nclass redirect_stdout(_RedirectStream):\n ''\n\n\n\n\n\n\n\n\n\n \n \n _stream=\"stdout\"\n \n \nclass redirect_stderr(_RedirectStream):\n ''\n \n _stream=\"stderr\"\n \n \nclass suppress(AbstractContextManager):\n ''\n\n\n\n\n\n\n\n \n \n def __init__(self,*exceptions):\n self._exceptions=exceptions\n \n def __enter__(self):\n pass\n \n def __exit__(self,exctype,excinst,exctb):\n \n \n \n \n \n \n \n \n \n return exctype is not None and issubclass(exctype,self._exceptions)\n \n \nclass _BaseExitStack:\n ''\n \n @staticmethod\n def _create_exit_wrapper(cm,cm_exit):\n return MethodType(cm_exit,cm)\n \n @staticmethod\n def _create_cb_wrapper(callback,/,*args,**kwds):\n def _exit_wrapper(exc_type,exc,tb):\n callback(*args,**kwds)\n return _exit_wrapper\n \n def __init__(self):\n self._exit_callbacks=deque()\n \n def pop_all(self):\n ''\n new_stack=type(self)()\n new_stack._exit_callbacks=self._exit_callbacks\n self._exit_callbacks=deque()\n return new_stack\n \n def push(self,exit):\n ''\n\n\n\n\n \n \n \n _cb_type=type(exit)\n \n try :\n exit_method=_cb_type.__exit__\n except AttributeError:\n \n self._push_exit_callback(exit)\n else :\n self._push_cm_exit(exit,exit_method)\n return exit\n \n def enter_context(self,cm):\n ''\n\n\n\n \n \n \n _cm_type=type(cm)\n _exit=_cm_type.__exit__\n result=_cm_type.__enter__(cm)\n self._push_cm_exit(cm,_exit)\n return result\n \n def callback(*args,**kwds):\n ''\n\n\n \n if len(args)>=2:\n self,callback,*args=args\n elif not args:\n raise TypeError(\"descriptor 'callback' of '_BaseExitStack' object \"\n \"needs an argument\")\n elif 'callback'in kwds:\n callback=kwds.pop('callback')\n self,*args=args\n import warnings\n warnings.warn(\"Passing 'callback' as keyword argument is deprecated\",\n DeprecationWarning,stacklevel=2)\n else :\n raise TypeError('callback expected at least 1 positional argument, '\n 'got %d'%(len(args)-1))\n \n _exit_wrapper=self._create_cb_wrapper(callback,*args,**kwds)\n \n \n \n _exit_wrapper.__wrapped__=callback\n self._push_exit_callback(_exit_wrapper)\n return callback\n callback.__text_signature__='($self, callback, /, *args, **kwds)'\n \n def _push_cm_exit(self,cm,cm_exit):\n ''\n _exit_wrapper=self._create_exit_wrapper(cm,cm_exit)\n self._push_exit_callback(_exit_wrapper,True )\n \n def _push_exit_callback(self,callback,is_sync=True ):\n self._exit_callbacks.append((is_sync,callback))\n \n \n \nclass ExitStack(_BaseExitStack,AbstractContextManager):\n ''\n\n\n\n\n\n\n\n \n \n def __enter__(self):\n return self\n \n def __exit__(self,*exc_details):\n received_exc=exc_details[0]is not None\n \n \n \n frame_exc=sys.exc_info()[1]\n def _fix_exception_context(new_exc,old_exc):\n \n while 1:\n exc_context=new_exc.__context__\n if exc_context is old_exc:\n \n return\n if exc_context is None or exc_context is frame_exc:\n break\n new_exc=exc_context\n \n \n new_exc.__context__=old_exc\n \n \n \n suppressed_exc=False\n pending_raise=False\n while self._exit_callbacks:\n is_sync,cb=self._exit_callbacks.pop()\n assert is_sync\n try :\n if cb(*exc_details):\n suppressed_exc=True\n pending_raise=False\n exc_details=(None ,None ,None )\n except :\n new_exc_details=sys.exc_info()\n \n _fix_exception_context(new_exc_details[1],exc_details[1])\n pending_raise=True\n exc_details=new_exc_details\n if pending_raise:\n try :\n \n \n fixed_ctx=exc_details[1].__context__\n raise exc_details[1]\n except BaseException:\n exc_details[1].__context__=fixed_ctx\n raise\n return received_exc and suppressed_exc\n \n def close(self):\n ''\n self.__exit__(None ,None ,None )\n \n \n \nclass AsyncExitStack(_BaseExitStack,AbstractAsyncContextManager):\n ''\n\n\n\n\n\n\n\n\n\n \n \n @staticmethod\n def _create_async_exit_wrapper(cm,cm_exit):\n return MethodType(cm_exit,cm)\n \n @staticmethod\n def _create_async_cb_wrapper(callback,/,*args,**kwds):\n async def _exit_wrapper(exc_type,exc,tb):\n await callback(*args,**kwds)\n return _exit_wrapper\n \n async def enter_async_context(self,cm):\n ''\n\n\n\n \n _cm_type=type(cm)\n _exit=_cm_type.__aexit__\n result=await _cm_type.__aenter__(cm)\n self._push_async_cm_exit(cm,_exit)\n return result\n \n def push_async_exit(self,exit):\n ''\n\n\n\n\n\n \n _cb_type=type(exit)\n try :\n exit_method=_cb_type.__aexit__\n except AttributeError:\n \n self._push_exit_callback(exit,False )\n else :\n self._push_async_cm_exit(exit,exit_method)\n return exit\n \n def push_async_callback(*args,**kwds):\n ''\n\n\n \n if len(args)>=2:\n self,callback,*args=args\n elif not args:\n raise TypeError(\"descriptor 'push_async_callback' of \"\n \"'AsyncExitStack' object needs an argument\")\n elif 'callback'in kwds:\n callback=kwds.pop('callback')\n self,*args=args\n import warnings\n warnings.warn(\"Passing 'callback' as keyword argument is deprecated\",\n DeprecationWarning,stacklevel=2)\n else :\n raise TypeError('push_async_callback expected at least 1 '\n 'positional argument, got %d'%(len(args)-1))\n \n _exit_wrapper=self._create_async_cb_wrapper(callback,*args,**kwds)\n \n \n \n _exit_wrapper.__wrapped__=callback\n self._push_exit_callback(_exit_wrapper,False )\n return callback\n push_async_callback.__text_signature__='($self, callback, /, *args, **kwds)'\n \n async def aclose(self):\n ''\n await self.__aexit__(None ,None ,None )\n \n def _push_async_cm_exit(self,cm,cm_exit):\n ''\n \n _exit_wrapper=self._create_async_exit_wrapper(cm,cm_exit)\n self._push_exit_callback(_exit_wrapper,False )\n \n async def __aenter__(self):\n return self\n \n async def __aexit__(self,*exc_details):\n received_exc=exc_details[0]is not None\n \n \n \n frame_exc=sys.exc_info()[1]\n def _fix_exception_context(new_exc,old_exc):\n \n while 1:\n exc_context=new_exc.__context__\n if exc_context is old_exc:\n \n return\n if exc_context is None or exc_context is frame_exc:\n break\n new_exc=exc_context\n \n \n new_exc.__context__=old_exc\n \n \n \n suppressed_exc=False\n pending_raise=False\n while self._exit_callbacks:\n is_sync,cb=self._exit_callbacks.pop()\n try :\n if is_sync:\n cb_suppress=cb(*exc_details)\n else :\n cb_suppress=await cb(*exc_details)\n \n if cb_suppress:\n suppressed_exc=True\n pending_raise=False\n exc_details=(None ,None ,None )\n except :\n new_exc_details=sys.exc_info()\n \n _fix_exception_context(new_exc_details[1],exc_details[1])\n pending_raise=True\n exc_details=new_exc_details\n if pending_raise:\n try :\n \n \n fixed_ctx=exc_details[1].__context__\n raise exc_details[1]\n except BaseException:\n exc_details[1].__context__=fixed_ctx\n raise\n return received_exc and suppressed_exc\n \n \nclass nullcontext(AbstractContextManager):\n ''\n\n\n\n\n\n\n\n \n \n def __init__(self,enter_result=None ):\n self.enter_result=enter_result\n \n def __enter__(self):\n return self.enter_result\n \n def __exit__(self,*excinfo):\n pass\n", ["_collections_abc", "abc", "collections", "functools", "sys", "types", "warnings"]], "contextvars": [".py", "from _contextvars import Context,ContextVar,Token,copy_context\n\n\n__all__=('Context','ContextVar','Token','copy_context')\n", ["_contextvars"]], "copy": [".py", "''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport types\nimport weakref\nfrom copyreg import dispatch_table\n\nclass Error(Exception):\n pass\nerror=Error\n\ntry :\n from org.python.core import PyStringMap\nexcept ImportError:\n PyStringMap=None\n \n__all__=[\"Error\",\"copy\",\"deepcopy\"]\n\ndef copy(x):\n ''\n\n\n \n \n cls=type(x)\n \n copier=_copy_dispatch.get(cls)\n if copier:\n return copier(x)\n \n if issubclass(cls,type):\n \n return _copy_immutable(x)\n \n copier=getattr(cls,\"__copy__\",None )\n if copier is not None :\n return copier(x)\n \n reductor=dispatch_table.get(cls)\n if reductor is not None :\n rv=reductor(x)\n else :\n reductor=getattr(x,\"__reduce_ex__\",None )\n if reductor is not None :\n rv=reductor(4)\n else :\n reductor=getattr(x,\"__reduce__\",None )\n if reductor:\n rv=reductor()\n else :\n raise Error(\"un(shallow)copyable object of type %s\"%cls)\n \n if isinstance(rv,str):\n return x\n return _reconstruct(x,None ,*rv)\n \n \n_copy_dispatch=d={}\n\ndef _copy_immutable(x):\n return x\nfor t in (type(None ),int,float,bool,complex,str,tuple,\nbytes,frozenset,type,range,slice,\ntypes.BuiltinFunctionType,type(Ellipsis),type(NotImplemented),\ntypes.FunctionType,weakref.ref):\n d[t]=_copy_immutable\nt=getattr(types,\"CodeType\",None )\nif t is not None :\n d[t]=_copy_immutable\n \nd[list]=list.copy\nd[dict]=dict.copy\nd[set]=set.copy\nd[bytearray]=bytearray.copy\n\nif PyStringMap is not None :\n d[PyStringMap]=PyStringMap.copy\n \ndel d,t\n\ndef deepcopy(x,memo=None ,_nil=[]):\n ''\n\n\n \n \n if memo is None :\n memo={}\n \n d=id(x)\n y=memo.get(d,_nil)\n if y is not _nil:\n return y\n \n cls=type(x)\n \n copier=_deepcopy_dispatch.get(cls)\n if copier is not None :\n y=copier(x,memo)\n else :\n if issubclass(cls,type):\n y=_deepcopy_atomic(x,memo)\n else :\n copier=getattr(x,\"__deepcopy__\",None )\n if copier is not None :\n y=copier(memo)\n else :\n reductor=dispatch_table.get(cls)\n if reductor:\n rv=reductor(x)\n else :\n reductor=getattr(x,\"__reduce_ex__\",None )\n if reductor is not None :\n rv=reductor(4)\n else :\n reductor=getattr(x,\"__reduce__\",None )\n if reductor:\n rv=reductor()\n else :\n raise Error(\n \"un(deep)copyable object of type %s\"%cls)\n if isinstance(rv,str):\n y=x\n else :\n y=_reconstruct(x,memo,*rv)\n \n \n if y is not x:\n memo[d]=y\n _keep_alive(x,memo)\n return y\n \n_deepcopy_dispatch=d={}\n\ndef _deepcopy_atomic(x,memo):\n return x\nd[type(None )]=_deepcopy_atomic\nd[type(Ellipsis)]=_deepcopy_atomic\nd[type(NotImplemented)]=_deepcopy_atomic\nd[int]=_deepcopy_atomic\nd[float]=_deepcopy_atomic\nd[bool]=_deepcopy_atomic\nd[complex]=_deepcopy_atomic\nd[bytes]=_deepcopy_atomic\nd[str]=_deepcopy_atomic\nd[types.CodeType]=_deepcopy_atomic\nd[type]=_deepcopy_atomic\nd[types.BuiltinFunctionType]=_deepcopy_atomic\nd[types.FunctionType]=_deepcopy_atomic\nd[weakref.ref]=_deepcopy_atomic\n\ndef _deepcopy_list(x,memo,deepcopy=deepcopy):\n y=[]\n memo[id(x)]=y\n append=y.append\n for a in x:\n append(deepcopy(a,memo))\n return y\nd[list]=_deepcopy_list\n\ndef _deepcopy_tuple(x,memo,deepcopy=deepcopy):\n y=[deepcopy(a,memo)for a in x]\n \n \n try :\n return memo[id(x)]\n except KeyError:\n pass\n for k,j in zip(x,y):\n if k is not j:\n y=tuple(y)\n break\n else :\n y=x\n return y\nd[tuple]=_deepcopy_tuple\n\ndef _deepcopy_dict(x,memo,deepcopy=deepcopy):\n y={}\n memo[id(x)]=y\n for key,value in x.items():\n y[deepcopy(key,memo)]=deepcopy(value,memo)\n return y\nd[dict]=_deepcopy_dict\nif PyStringMap is not None :\n d[PyStringMap]=_deepcopy_dict\n \ndef _deepcopy_method(x,memo):\n return type(x)(x.__func__,deepcopy(x.__self__,memo))\nd[types.MethodType]=_deepcopy_method\n\ndel d\n\ndef _keep_alive(x,memo):\n ''\n\n\n\n\n\n\n\n \n try :\n memo[id(memo)].append(x)\n except KeyError:\n \n memo[id(memo)]=[x]\n \ndef _reconstruct(x,memo,func,args,\nstate=None ,listiter=None ,dictiter=None ,\ndeepcopy=deepcopy):\n deep=memo is not None\n if deep and args:\n args=(deepcopy(arg,memo)for arg in args)\n y=func(*args)\n if deep:\n memo[id(x)]=y\n \n if state is not None :\n if deep:\n state=deepcopy(state,memo)\n if hasattr(y,'__setstate__'):\n y.__setstate__(state)\n else :\n if isinstance(state,tuple)and len(state)==2:\n state,slotstate=state\n else :\n slotstate=None\n if state is not None :\n y.__dict__.update(state)\n if slotstate is not None :\n for key,value in slotstate.items():\n setattr(y,key,value)\n \n if listiter is not None :\n if deep:\n for item in listiter:\n item=deepcopy(item,memo)\n y.append(item)\n else :\n for item in listiter:\n y.append(item)\n if dictiter is not None :\n if deep:\n for key,value in dictiter:\n key=deepcopy(key,memo)\n value=deepcopy(value,memo)\n y[key]=value\n else :\n for key,value in dictiter:\n y[key]=value\n return y\n \ndel types,weakref,PyStringMap\n", ["copyreg", "org.python.core", "types", "weakref"]], "copyreg": [".py", "''\n\n\n\n\n\n__all__=[\"pickle\",\"constructor\",\n\"add_extension\",\"remove_extension\",\"clear_extension_cache\"]\n\ndispatch_table={}\n\ndef pickle(ob_type,pickle_function,constructor_ob=None ):\n if not callable(pickle_function):\n raise TypeError(\"reduction functions must be callable\")\n dispatch_table[ob_type]=pickle_function\n \n \n \n if constructor_ob is not None :\n constructor(constructor_ob)\n \ndef constructor(object):\n if not callable(object):\n raise TypeError(\"constructors must be callable\")\n \n \n \ntry :\n complex\nexcept NameError:\n pass\nelse :\n\n def pickle_complex(c):\n return complex,(c.real,c.imag)\n \n pickle(complex,pickle_complex,complex)\n \n \n \ndef _reconstructor(cls,base,state):\n if base is object:\n obj=object.__new__(cls)\n else :\n obj=base.__new__(cls,state)\n if base.__init__ !=object.__init__:\n base.__init__(obj,state)\n return obj\n \n_HEAPTYPE=1 <<9\n\n\n\ndef _reduce_ex(self,proto):\n assert proto <2\n cls=self.__class__\n for base in cls.__mro__:\n if hasattr(base,'__flags__')and not base.__flags__&_HEAPTYPE:\n break\n else :\n base=object\n if base is object:\n state=None\n else :\n if base is cls:\n raise TypeError(f\"cannot pickle {cls.__name__!r} object\")\n state=base(self)\n args=(cls,base,state)\n try :\n getstate=self.__getstate__\n except AttributeError:\n if getattr(self,\"__slots__\",None ):\n raise TypeError(f\"cannot pickle {cls.__name__!r} object: \"\n f\"a class that defines __slots__ without \"\n f\"defining __getstate__ cannot be pickled \"\n f\"with protocol {proto}\")from None\n try :\n dict=self.__dict__\n except AttributeError:\n dict=None\n else :\n dict=getstate()\n if dict:\n return _reconstructor,args,dict\n else :\n return _reconstructor,args\n \n \n \ndef __newobj__(cls,*args):\n return cls.__new__(cls,*args)\n \ndef __newobj_ex__(cls,args,kwargs):\n ''\n\n \n return cls.__new__(cls,*args,**kwargs)\n \ndef _slotnames(cls):\n ''\n\n\n\n\n\n\n\n \n \n \n names=cls.__dict__.get(\"__slotnames__\")\n if names is not None :\n return names\n \n \n names=[]\n if not hasattr(cls,\"__slots__\"):\n \n pass\n else :\n \n for c in cls.__mro__:\n if \"__slots__\"in c.__dict__:\n slots=c.__dict__['__slots__']\n \n if isinstance(slots,str):\n slots=(slots,)\n for name in slots:\n \n if name in (\"__dict__\",\"__weakref__\"):\n continue\n \n elif name.startswith('__')and not name.endswith('__'):\n stripped=c.__name__.lstrip('_')\n if stripped:\n names.append('_%s%s'%(stripped,name))\n else :\n names.append(name)\n else :\n names.append(name)\n \n \n try :\n cls.__slotnames__=names\n except :\n pass\n \n return names\n \n \n \n \n \n \n \n \n \n \n_extension_registry={}\n_inverted_registry={}\n_extension_cache={}\n\n\n\ndef add_extension(module,name,code):\n ''\n code=int(code)\n if not 1 <=code <=0x7fffffff:\n raise ValueError(\"code out of range\")\n key=(module,name)\n if (_extension_registry.get(key)==code and\n _inverted_registry.get(code)==key):\n return\n if key in _extension_registry:\n raise ValueError(\"key %s is already registered with code %s\"%\n (key,_extension_registry[key]))\n if code in _inverted_registry:\n raise ValueError(\"code %s is already in use for key %s\"%\n (code,_inverted_registry[code]))\n _extension_registry[key]=code\n _inverted_registry[code]=key\n \ndef remove_extension(module,name,code):\n ''\n key=(module,name)\n if (_extension_registry.get(key)!=code or\n _inverted_registry.get(code)!=key):\n raise ValueError(\"key %s is not registered with code %s\"%\n (key,code))\n del _extension_registry[key]\n del _inverted_registry[code]\n if code in _extension_cache:\n del _extension_cache[code]\n \ndef clear_extension_cache():\n _extension_cache.clear()\n \n \n \n \n \n \n \n \n \n \n \n \n \n", []], "csv": [".py", "\n\"\"\"\ncsv.py - read/write/investigate CSV files\n\"\"\"\n\nimport re\nfrom _csv import Error,__version__,writer,reader,register_dialect,\\\nunregister_dialect,get_dialect,list_dialects,\\\nfield_size_limit,\\\nQUOTE_MINIMAL,QUOTE_ALL,QUOTE_NONNUMERIC,QUOTE_NONE,\\\n__doc__\nfrom _csv import Dialect as _Dialect\n\nfrom io import StringIO\n\n__all__=[\"QUOTE_MINIMAL\",\"QUOTE_ALL\",\"QUOTE_NONNUMERIC\",\"QUOTE_NONE\",\n\"Error\",\"Dialect\",\"__doc__\",\"excel\",\"excel_tab\",\n\"field_size_limit\",\"reader\",\"writer\",\n\"register_dialect\",\"get_dialect\",\"list_dialects\",\"Sniffer\",\n\"unregister_dialect\",\"__version__\",\"DictReader\",\"DictWriter\",\n\"unix_dialect\"]\n\nclass Dialect:\n ''\n\n\n\n\n\n \n _name=\"\"\n _valid=False\n \n delimiter=None\n quotechar=None\n escapechar=None\n doublequote=None\n skipinitialspace=None\n lineterminator=None\n quoting=None\n \n def __init__(self):\n if self.__class__ !=Dialect:\n self._valid=True\n self._validate()\n \n def _validate(self):\n try :\n _Dialect(self)\n except TypeError as e:\n \n raise Error(str(e))\n \nclass excel(Dialect):\n ''\n delimiter=','\n quotechar='\"'\n doublequote=True\n skipinitialspace=False\n lineterminator='\\r\\n'\n quoting=QUOTE_MINIMAL\nregister_dialect(\"excel\",excel)\n\nclass excel_tab(excel):\n ''\n delimiter='\\t'\nregister_dialect(\"excel-tab\",excel_tab)\n\nclass unix_dialect(Dialect):\n ''\n delimiter=','\n quotechar='\"'\n doublequote=True\n skipinitialspace=False\n lineterminator='\\n'\n quoting=QUOTE_ALL\nregister_dialect(\"unix\",unix_dialect)\n\n\nclass DictReader:\n def __init__(self,f,fieldnames=None ,restkey=None ,restval=None ,\n dialect=\"excel\",*args,**kwds):\n self._fieldnames=fieldnames\n self.restkey=restkey\n self.restval=restval\n self.reader=reader(f,dialect,*args,**kwds)\n self.dialect=dialect\n self.line_num=0\n \n def __iter__(self):\n return self\n \n @property\n def fieldnames(self):\n if self._fieldnames is None :\n try :\n self._fieldnames=next(self.reader)\n except StopIteration:\n pass\n self.line_num=self.reader.line_num\n return self._fieldnames\n \n @fieldnames.setter\n def fieldnames(self,value):\n self._fieldnames=value\n \n def __next__(self):\n if self.line_num ==0:\n \n self.fieldnames\n row=next(self.reader)\n self.line_num=self.reader.line_num\n \n \n \n \n while row ==[]:\n row=next(self.reader)\n d=dict(zip(self.fieldnames,row))\n lf=len(self.fieldnames)\n lr=len(row)\n if lf lr:\n for key in self.fieldnames[lr:]:\n d[key]=self.restval\n return d\n \n \nclass DictWriter:\n def __init__(self,f,fieldnames,restval=\"\",extrasaction=\"raise\",\n dialect=\"excel\",*args,**kwds):\n self.fieldnames=fieldnames\n self.restval=restval\n if extrasaction.lower()not in (\"raise\",\"ignore\"):\n raise ValueError(\"extrasaction (%s) must be 'raise' or 'ignore'\"\n %extrasaction)\n self.extrasaction=extrasaction\n self.writer=writer(f,dialect,*args,**kwds)\n \n def writeheader(self):\n header=dict(zip(self.fieldnames,self.fieldnames))\n return self.writerow(header)\n \n def _dict_to_list(self,rowdict):\n if self.extrasaction ==\"raise\":\n wrong_fields=rowdict.keys()-self.fieldnames\n if wrong_fields:\n raise ValueError(\"dict contains fields not in fieldnames: \"\n +\", \".join([repr(x)for x in wrong_fields]))\n return (rowdict.get(key,self.restval)for key in self.fieldnames)\n \n def writerow(self,rowdict):\n return self.writer.writerow(self._dict_to_list(rowdict))\n \n def writerows(self,rowdicts):\n return self.writer.writerows(map(self._dict_to_list,rowdicts))\n \n \ntry :\n complex\nexcept NameError:\n complex=float\n \nclass Sniffer:\n ''\n\n\n \n def __init__(self):\n \n self.preferred=[',','\\t',';',' ',':']\n \n \n def sniff(self,sample,delimiters=None ):\n ''\n\n \n \n quotechar,doublequote,delimiter,skipinitialspace=\\\n self._guess_quote_and_delimiter(sample,delimiters)\n if not delimiter:\n delimiter,skipinitialspace=self._guess_delimiter(sample,\n delimiters)\n \n if not delimiter:\n raise Error(\"Could not determine delimiter\")\n \n class dialect(Dialect):\n _name=\"sniffed\"\n lineterminator='\\r\\n'\n quoting=QUOTE_MINIMAL\n \n \n dialect.doublequote=doublequote\n dialect.delimiter=delimiter\n \n dialect.quotechar=quotechar or '\"'\n dialect.skipinitialspace=skipinitialspace\n \n return dialect\n \n \n def _guess_quote_and_delimiter(self,data,delimiters):\n ''\n\n\n\n\n\n\n\n\n \n \n matches=[]\n for restr in (r'(?P[^\\w\\n\"\\'])(?P ?)(?P[\"\\']).*?(?P=quote)(?P=delim)',\n r'(?:^|\\n)(?P[\"\\']).*?(?P=quote)(?P[^\\w\\n\"\\'])(?P ?)',\n r'(?P[^\\w\\n\"\\'])(?P ?)(?P[\"\\']).*?(?P=quote)(?:$|\\n)',\n r'(?:^|\\n)(?P[\"\\']).*?(?P=quote)(?:$|\\n)'):\n regexp=re.compile(restr,re.DOTALL |re.MULTILINE)\n matches=regexp.findall(data)\n if matches:\n break\n \n if not matches:\n \n return ('',False ,None ,0)\n quotes={}\n delims={}\n spaces=0\n groupindex=regexp.groupindex\n for m in matches:\n n=groupindex['quote']-1\n key=m[n]\n if key:\n quotes[key]=quotes.get(key,0)+1\n try :\n n=groupindex['delim']-1\n key=m[n]\n except KeyError:\n continue\n if key and (delimiters is None or key in delimiters):\n delims[key]=delims.get(key,0)+1\n try :\n n=groupindex['space']-1\n except KeyError:\n continue\n if m[n]:\n spaces +=1\n \n quotechar=max(quotes,key=quotes.get)\n \n if delims:\n delim=max(delims,key=delims.get)\n skipinitialspace=delims[delim]==spaces\n if delim =='\\n':\n delim=''\n else :\n \n delim=''\n skipinitialspace=0\n \n \n \n dq_regexp=re.compile(\n r\"((%(delim)s)|^)\\W*%(quote)s[^%(delim)s\\n]*%(quote)s[^%(delim)s\\n]*%(quote)s\\W*((%(delim)s)|$)\"%\\\n {'delim':re.escape(delim),'quote':quotechar},re.MULTILINE)\n \n \n \n if dq_regexp.search(data):\n doublequote=True\n else :\n doublequote=False\n \n return (quotechar,doublequote,delim,skipinitialspace)\n \n \n def _guess_delimiter(self,data,delimiters):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n data=list(filter(None ,data.split('\\n')))\n \n ascii=[chr(c)for c in range(127)]\n \n \n chunkLength=min(10,len(data))\n iteration=0\n charFrequency={}\n modes={}\n delims={}\n start,end=0,chunkLength\n while start 1:\n modes[char]=max(items,key=lambda x:x[1])\n \n \n items.remove(modes[char])\n modes[char]=(modes[char][0],modes[char][1]\n -sum(item[1]for item in items))\n else :\n modes[char]=items[0]\n \n \n modeList=modes.items()\n total=float(min(chunkLength *iteration,len(data)))\n \n consistency=1.0\n \n threshold=0.9\n while len(delims)==0 and consistency >=threshold:\n for k,v in modeList:\n if v[0]>0 and v[1]>0:\n if ((v[1]/total)>=consistency and\n (delimiters is None or k in delimiters)):\n delims[k]=v\n consistency -=0.01\n \n if len(delims)==1:\n delim=list(delims.keys())[0]\n skipinitialspace=(data[0].count(delim)==\n data[0].count(\"%c \"%delim))\n return (delim,skipinitialspace)\n \n \n start=end\n end +=chunkLength\n \n if not delims:\n return ('',0)\n \n \n if len(delims)>1:\n for d in self.preferred:\n if d in delims.keys():\n skipinitialspace=(data[0].count(d)==\n data[0].count(\"%c \"%d))\n return (d,skipinitialspace)\n \n \n \n items=[(v,k)for (k,v)in delims.items()]\n items.sort()\n delim=items[-1][1]\n \n skipinitialspace=(data[0].count(delim)==\n data[0].count(\"%c \"%delim))\n return (delim,skipinitialspace)\n \n \n def has_header(self,sample):\n \n \n \n \n \n \n \n \n \n rdr=reader(StringIO(sample),self.sniff(sample))\n \n header=next(rdr)\n \n columns=len(header)\n columnTypes={}\n for i in range(columns):columnTypes[i]=None\n \n checked=0\n for row in rdr:\n \n if checked >20:\n break\n checked +=1\n \n if len(row)!=columns:\n continue\n \n for col in list(columnTypes.keys()):\n \n for thisType in [int,float,complex]:\n try :\n thisType(row[col])\n break\n except (ValueError,OverflowError):\n pass\n else :\n \n thisType=len(row[col])\n \n if thisType !=columnTypes[col]:\n if columnTypes[col]is None :\n columnTypes[col]=thisType\n else :\n \n \n del columnTypes[col]\n \n \n \n hasHeader=0\n for col,colType in columnTypes.items():\n if type(colType)==type(0):\n if len(header[col])!=colType:\n hasHeader +=1\n else :\n hasHeader -=1\n else :\n try :\n colType(header[col])\n except (ValueError,TypeError):\n hasHeader +=1\n else :\n hasHeader -=1\n \n return hasHeader >0\n", ["_csv", "io", "re"]], "dataclasses": [".py", "import re\nimport sys\nimport copy\nimport types\nimport inspect\nimport keyword\nimport builtins\nimport functools\nimport _thread\n\n\n__all__=['dataclass',\n'field',\n'Field',\n'FrozenInstanceError',\n'InitVar',\n'MISSING',\n\n\n'fields',\n'asdict',\n'astuple',\n'make_dataclass',\n'replace',\n'is_dataclass',\n]\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nclass FrozenInstanceError(AttributeError):pass\n\n\n\n\nclass _HAS_DEFAULT_FACTORY_CLASS:\n def __repr__(self):\n return ''\n_HAS_DEFAULT_FACTORY=_HAS_DEFAULT_FACTORY_CLASS()\n\n\n\nclass _MISSING_TYPE:\n pass\nMISSING=_MISSING_TYPE()\n\n\n\n_EMPTY_METADATA=types.MappingProxyType({})\n\n\nclass _FIELD_BASE:\n def __init__(self,name):\n self.name=name\n def __repr__(self):\n return self.name\n_FIELD=_FIELD_BASE('_FIELD')\n_FIELD_CLASSVAR=_FIELD_BASE('_FIELD_CLASSVAR')\n_FIELD_INITVAR=_FIELD_BASE('_FIELD_INITVAR')\n\n\n\n_FIELDS='__dataclass_fields__'\n\n\n\n_PARAMS='__dataclass_params__'\n\n\n\n_POST_INIT_NAME='__post_init__'\n\n\n\n\n_MODULE_IDENTIFIER_RE=re.compile(r'^(?:\\s*(\\w+)\\s*\\.)?\\s*(\\w+)')\n\nclass _InitVarMeta(type):\n def __getitem__(self,params):\n return InitVar(params)\n \nclass InitVar(metaclass=_InitVarMeta):\n __slots__=('type',)\n \n def __init__(self,type):\n self.type=type\n \n def __repr__(self):\n return f'dataclasses.InitVar[{self.type.__name__}]'\n \n \n \n \n \n \n \n \n \n \n \n \nclass Field:\n __slots__=('name',\n 'type',\n 'default',\n 'default_factory',\n 'repr',\n 'hash',\n 'init',\n 'compare',\n 'metadata',\n '_field_type',\n )\n \n def __init__(self,default,default_factory,init,repr,hash,compare,\n metadata):\n self.name=None\n self.type=None\n self.default=default\n self.default_factory=default_factory\n self.init=init\n self.repr=repr\n self.hash=hash\n self.compare=compare\n self.metadata=(_EMPTY_METADATA\n if metadata is None else\n types.MappingProxyType(metadata))\n self._field_type=None\n \n def __repr__(self):\n return ('Field('\n f'name={self.name!r},'\n f'type={self.type!r},'\n f'default={self.default!r},'\n f'default_factory={self.default_factory!r},'\n f'init={self.init!r},'\n f'repr={self.repr!r},'\n f'hash={self.hash!r},'\n f'compare={self.compare!r},'\n f'metadata={self.metadata!r},'\n f'_field_type={self._field_type}'\n ')')\n \n \n \n \n \n \n \n \n \n def __set_name__(self,owner,name):\n func=getattr(type(self.default),'__set_name__',None )\n if func:\n \n \n func(self.default,owner,name)\n \n \nclass _DataclassParams:\n __slots__=('init',\n 'repr',\n 'eq',\n 'order',\n 'unsafe_hash',\n 'frozen',\n )\n \n def __init__(self,init,repr,eq,order,unsafe_hash,frozen):\n self.init=init\n self.repr=repr\n self.eq=eq\n self.order=order\n self.unsafe_hash=unsafe_hash\n self.frozen=frozen\n \n def __repr__(self):\n return ('_DataclassParams('\n f'init={self.init!r},'\n f'repr={self.repr!r},'\n f'eq={self.eq!r},'\n f'order={self.order!r},'\n f'unsafe_hash={self.unsafe_hash!r},'\n f'frozen={self.frozen!r}'\n ')')\n \n \n \n \n \ndef field(*,default=MISSING,default_factory=MISSING,init=True ,repr=True ,\nhash=None ,compare=True ,metadata=None ):\n ''\n\n\n\n\n\n\n\n\n\n\n\n \n \n if default is not MISSING and default_factory is not MISSING:\n raise ValueError('cannot specify both default and default_factory')\n return Field(default,default_factory,init,repr,hash,compare,\n metadata)\n \n \ndef _tuple_str(obj_name,fields):\n\n\n\n\n\n if not fields:\n return '()'\n \n return f'({\",\".join([f\"{obj_name}.{f.name}\" for f in fields])},)'\n \n \n \n \ndef _recursive_repr(user_function):\n\n\n repr_running=set()\n \n @functools.wraps(user_function)\n def wrapper(self):\n key=id(self),_thread.get_ident()\n if key in repr_running:\n return '...'\n repr_running.add(key)\n try :\n result=user_function(self)\n finally :\n repr_running.discard(key)\n return result\n return wrapper\n \n \ndef _create_fn(name,args,body,*,globals=None ,locals=None ,\nreturn_type=MISSING):\n\n\n\n if locals is None :\n locals={}\n \n \n \n if globals is not None and '__builtins__'not in globals:\n globals['__builtins__']=builtins\n return_annotation=''\n if return_type is not MISSING:\n locals['_return_type']=return_type\n return_annotation='->_return_type'\n args=','.join(args)\n body='\\n'.join(f' {b}'for b in body)\n \n \n txt=f'def {name}({args}){return_annotation}:\\n{body}'\n \n exec(txt,globals,locals)\n return locals[name]\n \n \ndef _field_assign(frozen,name,value,self_name):\n\n\n\n\n\n\n if frozen:\n return f'__builtins__.object.__setattr__({self_name},{name!r},{value})'\n return f'{self_name}.{name}={value}'\n \n \ndef _field_init(f,frozen,globals,self_name):\n\n\n\n default_name=f'_dflt_{f.name}'\n if f.default_factory is not MISSING:\n if f.init:\n \n \n globals[default_name]=f.default_factory\n value=(f'{default_name}() '\n f'if {f.name} is _HAS_DEFAULT_FACTORY '\n f'else {f.name}')\n else :\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n globals[default_name]=f.default_factory\n value=f'{default_name}()'\n else :\n \n if f.init:\n if f.default is MISSING:\n \n value=f.name\n elif f.default is not MISSING:\n globals[default_name]=f.default\n value=f.name\n else :\n \n \n return None\n \n \n \n \n if f._field_type is _FIELD_INITVAR:\n return None\n \n \n return _field_assign(frozen,f.name,value,self_name)\n \n \ndef _init_param(f):\n\n\n\n\n if f.default is MISSING and f.default_factory is MISSING:\n \n \n default=''\n elif f.default is not MISSING:\n \n \n default=f'=_dflt_{f.name}'\n elif f.default_factory is not MISSING:\n \n default='=_HAS_DEFAULT_FACTORY'\n return f'{f.name}:_type_{f.name}{default}'\n \n \ndef _init_fn(fields,frozen,has_post_init,self_name):\n\n\n\n\n\n\n\n seen_default=False\n for f in fields:\n \n if f.init:\n if not (f.default is MISSING and f.default_factory is MISSING):\n seen_default=True\n elif seen_default:\n raise TypeError(f'non-default argument {f.name!r} '\n 'follows default argument')\n \n globals={'MISSING':MISSING,\n '_HAS_DEFAULT_FACTORY':_HAS_DEFAULT_FACTORY}\n \n body_lines=[]\n for f in fields:\n line=_field_init(f,frozen,globals,self_name)\n \n \n if line:\n body_lines.append(line)\n \n \n if has_post_init:\n params_str=','.join(f.name for f in fields\n if f._field_type is _FIELD_INITVAR)\n body_lines.append(f'{self_name}.{_POST_INIT_NAME}({params_str})')\n \n \n if not body_lines:\n body_lines=['pass']\n \n locals={f'_type_{f.name}':f.type for f in fields}\n return _create_fn('__init__',\n [self_name]+[_init_param(f)for f in fields if f.init],\n body_lines,\n locals=locals,\n globals=globals,\n return_type=None )\n \n \ndef _repr_fn(fields):\n fn=_create_fn('__repr__',\n ('self',),\n ['return self.__class__.__qualname__ + f\"('+\n ', '.join([f\"{f.name}={{self.{f.name}!r}}\"\n for f in fields])+\n ')\"'])\n return _recursive_repr(fn)\n \n \ndef _frozen_get_del_attr(cls,fields):\n\n\n globals={'cls':cls,\n 'FrozenInstanceError':FrozenInstanceError}\n if fields:\n fields_str='('+','.join(repr(f.name)for f in fields)+',)'\n else :\n \n fields_str='()'\n return (_create_fn('__setattr__',\n ('self','name','value'),\n (f'if type(self) is cls or name in {fields_str}:',\n ' raise FrozenInstanceError(f\"cannot assign to field {name!r}\")',\n f'super(cls, self).__setattr__(name, value)'),\n globals=globals),\n _create_fn('__delattr__',\n ('self','name'),\n (f'if type(self) is cls or name in {fields_str}:',\n ' raise FrozenInstanceError(f\"cannot delete field {name!r}\")',\n f'super(cls, self).__delattr__(name)'),\n globals=globals),\n )\n \n \ndef _cmp_fn(name,op,self_tuple,other_tuple):\n\n\n\n\n\n return _create_fn(name,\n ('self','other'),\n ['if other.__class__ is self.__class__:',\n f' return {self_tuple}{op}{other_tuple}',\n 'return NotImplemented'])\n \n \ndef _hash_fn(fields):\n self_tuple=_tuple_str('self',fields)\n return _create_fn('__hash__',\n ('self',),\n [f'return hash({self_tuple})'])\n \n \ndef _is_classvar(a_type,typing):\n\n\n return (a_type is typing.ClassVar\n or (type(a_type)is typing._GenericAlias\n and a_type.__origin__ is typing.ClassVar))\n \n \ndef _is_initvar(a_type,dataclasses):\n\n\n return (a_type is dataclasses.InitVar\n or type(a_type)is dataclasses.InitVar)\n \n \ndef _is_type(annotation,cls,a_module,a_type,is_type_predicate):\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n match=_MODULE_IDENTIFIER_RE.match(annotation)\n if match:\n ns=None\n module_name=match.group(1)\n if not module_name:\n \n \n ns=sys.modules.get(cls.__module__).__dict__\n else :\n \n module=sys.modules.get(cls.__module__)\n if module and module.__dict__.get(module_name)is a_module:\n ns=sys.modules.get(a_type.__module__).__dict__\n if ns and is_type_predicate(ns.get(match.group(2)),a_module):\n return True\n return False\n \n \ndef _get_field(cls,a_name,a_type):\n\n\n\n\n\n\n default=getattr(cls,a_name,MISSING)\n if isinstance(default,Field):\n f=default\n else :\n if isinstance(default,types.MemberDescriptorType):\n \n default=MISSING\n f=field(default=default)\n \n \n f.name=a_name\n f.type=a_type\n \n \n \n \n f._field_type=_FIELD\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n typing=sys.modules.get('typing')\n if typing:\n if (_is_classvar(a_type,typing)\n or (isinstance(f.type,str)\n and _is_type(f.type,cls,typing,typing.ClassVar,\n _is_classvar))):\n f._field_type=_FIELD_CLASSVAR\n \n \n \n if f._field_type is _FIELD:\n \n \n dataclasses=sys.modules[__name__]\n if (_is_initvar(a_type,dataclasses)\n or (isinstance(f.type,str)\n and _is_type(f.type,cls,dataclasses,dataclasses.InitVar,\n _is_initvar))):\n f._field_type=_FIELD_INITVAR\n \n \n \n \n \n \n if f._field_type in (_FIELD_CLASSVAR,_FIELD_INITVAR):\n if f.default_factory is not MISSING:\n raise TypeError(f'field {f.name} cannot have a '\n 'default factory')\n \n \n \n \n \n \n \n if f._field_type is _FIELD and isinstance(f.default,(list,dict,set)):\n raise ValueError(f'mutable default {type(f.default)} for field '\n f'{f.name} is not allowed: use default_factory')\n \n return f\n \n \ndef _set_new_attribute(cls,name,value):\n\n\n if name in cls.__dict__:\n return True\n setattr(cls,name,value)\n return False\n \n \n \n \n \n \n \ndef _hash_set_none(cls,fields):\n return None\n \ndef _hash_add(cls,fields):\n flds=[f for f in fields if (f.compare if f.hash is None else f.hash)]\n return _hash_fn(flds)\n \ndef _hash_exception(cls,fields):\n\n raise TypeError(f'Cannot overwrite attribute __hash__ '\n f'in class {cls.__name__}')\n \n \n \n \n \n \n \n \n \n \n_hash_action={(False ,False ,False ,False ):None ,\n(False ,False ,False ,True ):None ,\n(False ,False ,True ,False ):None ,\n(False ,False ,True ,True ):None ,\n(False ,True ,False ,False ):_hash_set_none,\n(False ,True ,False ,True ):None ,\n(False ,True ,True ,False ):_hash_add,\n(False ,True ,True ,True ):None ,\n(True ,False ,False ,False ):_hash_add,\n(True ,False ,False ,True ):_hash_exception,\n(True ,False ,True ,False ):_hash_add,\n(True ,False ,True ,True ):_hash_exception,\n(True ,True ,False ,False ):_hash_add,\n(True ,True ,False ,True ):_hash_exception,\n(True ,True ,True ,False ):_hash_add,\n(True ,True ,True ,True ):_hash_exception,\n}\n\n\n\n\ndef _process_class(cls,init,repr,eq,order,unsafe_hash,frozen):\n\n\n\n\n fields={}\n \n setattr(cls,_PARAMS,_DataclassParams(init,repr,eq,order,\n unsafe_hash,frozen))\n \n \n \n \n \n any_frozen_base=False\n has_dataclass_bases=False\n for b in cls.__mro__[-1:0:-1]:\n \n \n base_fields=getattr(b,_FIELDS,None )\n if base_fields:\n has_dataclass_bases=True\n for f in base_fields.values():\n fields[f.name]=f\n if getattr(b,_PARAMS).frozen:\n any_frozen_base=True\n \n \n \n \n \n \n \n \n \n \n \n \n \n cls_annotations=cls.__dict__.get('__annotations__',{})\n \n \n \n \n cls_fields=[_get_field(cls,name,type)\n for name,type in cls_annotations.items()]\n for f in cls_fields:\n fields[f.name]=f\n \n \n \n \n \n if isinstance(getattr(cls,f.name,None ),Field):\n if f.default is MISSING:\n \n \n \n \n \n \n delattr(cls,f.name)\n else :\n setattr(cls,f.name,f.default)\n \n \n for name,value in cls.__dict__.items():\n if isinstance(value,Field)and not name in cls_annotations:\n raise TypeError(f'{name!r} is a field but has no type annotation')\n \n \n if has_dataclass_bases:\n \n if any_frozen_base and not frozen:\n raise TypeError('cannot inherit non-frozen dataclass from a '\n 'frozen one')\n \n \n if not any_frozen_base and frozen:\n raise TypeError('cannot inherit frozen dataclass from a '\n 'non-frozen one')\n \n \n \n setattr(cls,_FIELDS,fields)\n \n \n \n \n \n \n class_hash=cls.__dict__.get('__hash__',MISSING)\n has_explicit_hash=not (class_hash is MISSING or\n (class_hash is None and '__eq__'in cls.__dict__))\n \n \n \n if order and not eq:\n raise ValueError('eq must be true if order is true')\n \n if init:\n \n has_post_init=hasattr(cls,_POST_INIT_NAME)\n \n \n flds=[f for f in fields.values()\n if f._field_type in (_FIELD,_FIELD_INITVAR)]\n _set_new_attribute(cls,'__init__',\n _init_fn(flds,\n frozen,\n has_post_init,\n \n \n \n '__dataclass_self__'if 'self'in fields\n else 'self',\n ))\n \n \n \n field_list=[f for f in fields.values()if f._field_type is _FIELD]\n \n if repr:\n flds=[f for f in field_list if f.repr]\n _set_new_attribute(cls,'__repr__',_repr_fn(flds))\n \n if eq:\n \n \n flds=[f for f in field_list if f.compare]\n self_tuple=_tuple_str('self',flds)\n other_tuple=_tuple_str('other',flds)\n _set_new_attribute(cls,'__eq__',\n _cmp_fn('__eq__','==',\n self_tuple,other_tuple))\n \n if order:\n \n flds=[f for f in field_list if f.compare]\n self_tuple=_tuple_str('self',flds)\n other_tuple=_tuple_str('other',flds)\n for name,op in [('__lt__','<'),\n ('__le__','<='),\n ('__gt__','>'),\n ('__ge__','>='),\n ]:\n if _set_new_attribute(cls,name,\n _cmp_fn(name,op,self_tuple,other_tuple)):\n raise TypeError(f'Cannot overwrite attribute {name} '\n f'in class {cls.__name__}. Consider using '\n 'functools.total_ordering')\n \n if frozen:\n for fn in _frozen_get_del_attr(cls,field_list):\n if _set_new_attribute(cls,fn.__name__,fn):\n raise TypeError(f'Cannot overwrite attribute {fn.__name__} '\n f'in class {cls.__name__}')\n \n \n hash_action=_hash_action[bool(unsafe_hash),\n bool(eq),\n bool(frozen),\n has_explicit_hash]\n if hash_action:\n \n \n cls.__hash__=hash_action(cls,field_list)\n \n if not getattr(cls,'__doc__'):\n \n cls.__doc__=(cls.__name__+\n str(inspect.signature(cls)).replace(' -> None',''))\n \n return cls\n \n \ndef dataclass(cls=None ,/,*,init=True ,repr=True ,eq=True ,order=False ,\nunsafe_hash=False ,frozen=False ):\n ''\n\n\n\n\n\n\n\n\n\n \n \n def wrap(cls):\n return _process_class(cls,init,repr,eq,order,unsafe_hash,frozen)\n \n \n if cls is None :\n \n return wrap\n \n \n return wrap(cls)\n \n \ndef fields(class_or_instance):\n ''\n\n\n\n \n \n \n try :\n fields=getattr(class_or_instance,_FIELDS)\n except AttributeError:\n raise TypeError('must be called with a dataclass type or instance')\n \n \n \n return tuple(f for f in fields.values()if f._field_type is _FIELD)\n \n \ndef _is_dataclass_instance(obj):\n ''\n return hasattr(type(obj),_FIELDS)\n \n \ndef is_dataclass(obj):\n ''\n \n cls=obj if isinstance(obj,type)else type(obj)\n return hasattr(cls,_FIELDS)\n \n \ndef asdict(obj,*,dict_factory=dict):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n if not _is_dataclass_instance(obj):\n raise TypeError(\"asdict() should be called on dataclass instances\")\n return _asdict_inner(obj,dict_factory)\n \n \ndef _asdict_inner(obj,dict_factory):\n if _is_dataclass_instance(obj):\n result=[]\n for f in fields(obj):\n value=_asdict_inner(getattr(obj,f.name),dict_factory)\n result.append((f.name,value))\n return dict_factory(result)\n elif isinstance(obj,tuple)and hasattr(obj,'_fields'):\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n return type(obj)(*[_asdict_inner(v,dict_factory)for v in obj])\n elif isinstance(obj,(list,tuple)):\n \n \n \n return type(obj)(_asdict_inner(v,dict_factory)for v in obj)\n elif isinstance(obj,dict):\n return type(obj)((_asdict_inner(k,dict_factory),\n _asdict_inner(v,dict_factory))\n for k,v in obj.items())\n else :\n return copy.deepcopy(obj)\n \n \ndef astuple(obj,*,tuple_factory=tuple):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n if not _is_dataclass_instance(obj):\n raise TypeError(\"astuple() should be called on dataclass instances\")\n return _astuple_inner(obj,tuple_factory)\n \n \ndef _astuple_inner(obj,tuple_factory):\n if _is_dataclass_instance(obj):\n result=[]\n for f in fields(obj):\n value=_astuple_inner(getattr(obj,f.name),tuple_factory)\n result.append(value)\n return tuple_factory(result)\n elif isinstance(obj,tuple)and hasattr(obj,'_fields'):\n \n \n \n \n \n \n return type(obj)(*[_astuple_inner(v,tuple_factory)for v in obj])\n elif isinstance(obj,(list,tuple)):\n \n \n \n return type(obj)(_astuple_inner(v,tuple_factory)for v in obj)\n elif isinstance(obj,dict):\n return type(obj)((_astuple_inner(k,tuple_factory),_astuple_inner(v,tuple_factory))\n for k,v in obj.items())\n else :\n return copy.deepcopy(obj)\n \n \ndef make_dataclass(cls_name,fields,*,bases=(),namespace=None ,init=True ,\nrepr=True ,eq=True ,order=False ,unsafe_hash=False ,\nfrozen=False ):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n if namespace is None :\n namespace={}\n else :\n \n namespace=namespace.copy()\n \n \n \n seen=set()\n anns={}\n for item in fields:\n if isinstance(item,str):\n name=item\n tp='typing.Any'\n elif len(item)==2:\n name,tp,=item\n elif len(item)==3:\n name,tp,spec=item\n namespace[name]=spec\n else :\n raise TypeError(f'Invalid field: {item!r}')\n \n if not isinstance(name,str)or not name.isidentifier():\n raise TypeError(f'Field names must be valid identifiers: {name!r}')\n if keyword.iskeyword(name):\n raise TypeError(f'Field names must not be keywords: {name!r}')\n if name in seen:\n raise TypeError(f'Field name duplicated: {name!r}')\n \n seen.add(name)\n anns[name]=tp\n \n namespace['__annotations__']=anns\n \n \n cls=types.new_class(cls_name,bases,{},lambda ns:ns.update(namespace))\n return dataclass(cls,init=init,repr=repr,eq=eq,order=order,\n unsafe_hash=unsafe_hash,frozen=frozen)\n \n \ndef replace(*args,**changes):\n ''\n\n\n\n\n\n\n\n\n\n\n\n \n if len(args)>1:\n raise TypeError(f'replace() takes 1 positional argument but {len(args)} were given')\n if args:\n obj,=args\n elif 'obj'in changes:\n obj=changes.pop('obj')\n import warnings\n warnings.warn(\"Passing 'obj' as keyword argument is deprecated\",\n DeprecationWarning,stacklevel=2)\n else :\n raise TypeError(\"replace() missing 1 required positional argument: 'obj'\")\n \n \n \n \n if not _is_dataclass_instance(obj):\n raise TypeError(\"replace() should be called on dataclass instances\")\n \n \n \n \n for f in getattr(obj,_FIELDS).values():\n \n if f._field_type is _FIELD_CLASSVAR:\n continue\n \n if not f.init:\n \n if f.name in changes:\n raise ValueError(f'field {f.name} is declared with '\n 'init=False, it cannot be specified with '\n 'replace()')\n continue\n \n if f.name not in changes:\n if f._field_type is _FIELD_INITVAR:\n raise ValueError(f\"InitVar {f.name!r} \"\n 'must be specified with replace()')\n changes[f.name]=getattr(obj,f.name)\n \n \n \n \n \n \n return obj.__class__(**changes)\nreplace.__text_signature__='(obj, /, **kwargs)'\n", ["_thread", "builtins", "copy", "functools", "inspect", "keyword", "re", "sys", "types", "warnings"]], "datetime": [".py", "''\n\n\n\n\n\nimport time as _time\nimport math as _math\nimport sys\n\ndef _cmp(x,y):\n return 0 if x ==y else 1 if x >y else -1\n \nMINYEAR=1\nMAXYEAR=9999\n_MAXORDINAL=3652059\n\n\n\n\n\n\n\n\n\n\n\n_DAYS_IN_MONTH=[-1,31,28,31,30,31,30,31,31,30,31,30,31]\n\n_DAYS_BEFORE_MONTH=[-1]\ndbm=0\nfor dim in _DAYS_IN_MONTH[1:]:\n _DAYS_BEFORE_MONTH.append(dbm)\n dbm +=dim\ndel dbm,dim\n\ndef _is_leap(year):\n ''\n return year %4 ==0 and (year %100 !=0 or year %400 ==0)\n \ndef _days_before_year(year):\n ''\n y=year -1\n return y *365+y //4 -y //100+y //400\n \ndef _days_in_month(year,month):\n ''\n assert 1 <=month <=12,month\n if month ==2 and _is_leap(year):\n return 29\n return _DAYS_IN_MONTH[month]\n \ndef _days_before_month(year,month):\n ''\n assert 1 <=month <=12,'month must be in 1..12'\n return _DAYS_BEFORE_MONTH[month]+(month >2 and _is_leap(year))\n \ndef _ymd2ord(year,month,day):\n ''\n assert 1 <=month <=12,'month must be in 1..12'\n dim=_days_in_month(year,month)\n assert 1 <=day <=dim,('day must be in 1..%d'%dim)\n return (_days_before_year(year)+\n _days_before_month(year,month)+\n day)\n \n_DI400Y=_days_before_year(401)\n_DI100Y=_days_before_year(101)\n_DI4Y=_days_before_year(5)\n\n\n\nassert _DI4Y ==4 *365+1\n\n\n\nassert _DI400Y ==4 *_DI100Y+1\n\n\n\nassert _DI100Y ==25 *_DI4Y -1\n\ndef _ord2ymd(n):\n ''\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n n -=1\n n400,n=divmod(n,_DI400Y)\n year=n400 *400+1\n \n \n \n \n \n \n n100,n=divmod(n,_DI100Y)\n \n \n n4,n=divmod(n,_DI4Y)\n \n \n \n n1,n=divmod(n,365)\n \n year +=n100 *100+n4 *4+n1\n if n1 ==4 or n100 ==4:\n assert n ==0\n return year -1,12,31\n \n \n \n leapyear=n1 ==3 and (n4 !=24 or n100 ==3)\n assert leapyear ==_is_leap(year)\n month=(n+50)>>5\n preceding=_DAYS_BEFORE_MONTH[month]+(month >2 and leapyear)\n if preceding >n:\n month -=1\n preceding -=_DAYS_IN_MONTH[month]+(month ==2 and leapyear)\n n -=preceding\n assert 0 <=n <_days_in_month(year,month)\n \n \n \n return year,month,n+1\n \n \n_MONTHNAMES=[None ,\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\n\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"]\n_DAYNAMES=[None ,\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\",\"Sun\"]\n\n\ndef _build_struct_time(y,m,d,hh,mm,ss,dstflag):\n wday=(_ymd2ord(y,m,d)+6)%7\n dnum=_days_before_month(y,m)+d\n return _time.struct_time((y,m,d,hh,mm,ss,wday,dnum,dstflag))\n \ndef _format_time(hh,mm,ss,us,timespec='auto'):\n specs={\n 'hours':'{:02d}',\n 'minutes':'{:02d}:{:02d}',\n 'seconds':'{:02d}:{:02d}:{:02d}',\n 'milliseconds':'{:02d}:{:02d}:{:02d}.{:03d}',\n 'microseconds':'{:02d}:{:02d}:{:02d}.{:06d}'\n }\n \n if timespec =='auto':\n \n timespec='microseconds'if us else 'seconds'\n elif timespec =='milliseconds':\n us //=1000\n try :\n fmt=specs[timespec]\n except KeyError:\n raise ValueError('Unknown timespec value')\n else :\n return fmt.format(hh,mm,ss,us)\n \ndef _format_offset(off):\n s=''\n if off is not None :\n if off.days <0:\n sign=\"-\"\n off=-off\n else :\n sign=\"+\"\n hh,mm=divmod(off,timedelta(hours=1))\n mm,ss=divmod(mm,timedelta(minutes=1))\n s +=\"%s%02d:%02d\"%(sign,hh,mm)\n if ss or ss.microseconds:\n s +=\":%02d\"%ss.seconds\n \n if ss.microseconds:\n s +='.%06d'%ss.microseconds\n return s\n \n \ndef _wrap_strftime(object,format,timetuple):\n\n freplace=None\n zreplace=None\n Zreplace=None\n \n \n newformat=[]\n push=newformat.append\n i,n=0,len(format)\n while i =2:\n break\n \n if next_char !=':':\n raise ValueError('Invalid time separator: %c'%next_char)\n \n pos +=1\n \n if pos 0 else tstr\n \n time_comps=_parse_hh_mm_ss_ff(timestr)\n \n tzi=None\n if tz_pos >0:\n tzstr=tstr[tz_pos:]\n \n \n \n \n \n \n if len(tzstr)not in (5,8,15):\n raise ValueError('Malformed time zone string')\n \n tz_comps=_parse_hh_mm_ss_ff(tzstr)\n if all(x ==0 for x in tz_comps):\n tzi=timezone.utc\n else :\n tzsign=-1 if tstr[tz_pos -1]=='-'else 1\n \n td=timedelta(hours=tz_comps[0],minutes=tz_comps[1],\n seconds=tz_comps[2],microseconds=tz_comps[3])\n \n tzi=timezone(tzsign *td)\n \n time_comps.append(tzi)\n \n return time_comps\n \n \n \ndef _check_tzname(name):\n if name is not None and not isinstance(name,str):\n raise TypeError(\"tzinfo.tzname() must return None or string, \"\n \"not '%s'\"%type(name))\n \n \n \n \n \n \n \ndef _check_utc_offset(name,offset):\n assert name in (\"utcoffset\",\"dst\")\n if offset is None :\n return\n if not isinstance(offset,timedelta):\n raise TypeError(\"tzinfo.%s() must return None \"\n \"or timedelta, not '%s'\"%(name,type(offset)))\n if not -timedelta(1)b if b >0 else r 999999999:\n raise OverflowError(\"timedelta # of days is too large: %d\"%d)\n \n self=object.__new__(cls)\n self._days=d\n self._seconds=s\n self._microseconds=us\n self._hashcode=-1\n return self\n \n def __repr__(self):\n args=[]\n if self._days:\n args.append(\"days=%d\"%self._days)\n if self._seconds:\n args.append(\"seconds=%d\"%self._seconds)\n if self._microseconds:\n args.append(\"microseconds=%d\"%self._microseconds)\n if not args:\n args.append('0')\n return \"%s.%s(%s)\"%(self.__class__.__module__,\n self.__class__.__qualname__,\n ', '.join(args))\n \n def __str__(self):\n mm,ss=divmod(self._seconds,60)\n hh,mm=divmod(mm,60)\n s=\"%d:%02d:%02d\"%(hh,mm,ss)\n if self._days:\n def plural(n):\n return n,abs(n)!=1 and \"s\"or \"\"\n s=(\"%d day%s, \"%plural(self._days))+s\n if self._microseconds:\n s=s+\".%06d\"%self._microseconds\n return s\n \n def total_seconds(self):\n ''\n return ((self.days *86400+self.seconds)*10 **6+\n self.microseconds)/10 **6\n \n \n @property\n def days(self):\n ''\n return self._days\n \n @property\n def seconds(self):\n ''\n return self._seconds\n \n @property\n def microseconds(self):\n ''\n return self._microseconds\n \n def __add__(self,other):\n if isinstance(other,timedelta):\n \n \n return timedelta(self._days+other._days,\n self._seconds+other._seconds,\n self._microseconds+other._microseconds)\n return NotImplemented\n \n __radd__=__add__\n \n def __sub__(self,other):\n if isinstance(other,timedelta):\n \n \n return timedelta(self._days -other._days,\n self._seconds -other._seconds,\n self._microseconds -other._microseconds)\n return NotImplemented\n \n def __rsub__(self,other):\n if isinstance(other,timedelta):\n return -self+other\n return NotImplemented\n \n def __neg__(self):\n \n \n return timedelta(-self._days,\n -self._seconds,\n -self._microseconds)\n \n def __pos__(self):\n return self\n \n def __abs__(self):\n if self._days <0:\n return -self\n else :\n return self\n \n def __mul__(self,other):\n if isinstance(other,int):\n \n \n return timedelta(self._days *other,\n self._seconds *other,\n self._microseconds *other)\n if isinstance(other,float):\n usec=self._to_microseconds()\n a,b=other.as_integer_ratio()\n return timedelta(0,0,_divide_and_round(usec *a,b))\n return NotImplemented\n \n __rmul__=__mul__\n \n def _to_microseconds(self):\n return ((self._days *(24 *3600)+self._seconds)*1000000+\n self._microseconds)\n \n def __floordiv__(self,other):\n if not isinstance(other,(int,timedelta)):\n return NotImplemented\n usec=self._to_microseconds()\n if isinstance(other,timedelta):\n return usec //other._to_microseconds()\n if isinstance(other,int):\n return timedelta(0,0,usec //other)\n \n def __truediv__(self,other):\n if not isinstance(other,(int,float,timedelta)):\n return NotImplemented\n usec=self._to_microseconds()\n if isinstance(other,timedelta):\n return usec /other._to_microseconds()\n if isinstance(other,int):\n return timedelta(0,0,_divide_and_round(usec,other))\n if isinstance(other,float):\n a,b=other.as_integer_ratio()\n return timedelta(0,0,_divide_and_round(b *usec,a))\n \n def __mod__(self,other):\n if isinstance(other,timedelta):\n r=self._to_microseconds()%other._to_microseconds()\n return timedelta(0,0,r)\n return NotImplemented\n \n def __divmod__(self,other):\n if isinstance(other,timedelta):\n q,r=divmod(self._to_microseconds(),\n other._to_microseconds())\n return q,timedelta(0,0,r)\n return NotImplemented\n \n \n \n def __eq__(self,other):\n if isinstance(other,timedelta):\n return self._cmp(other)==0\n else :\n return NotImplemented\n \n def __le__(self,other):\n if isinstance(other,timedelta):\n return self._cmp(other)<=0\n else :\n return NotImplemented\n \n def __lt__(self,other):\n if isinstance(other,timedelta):\n return self._cmp(other)<0\n else :\n return NotImplemented\n \n def __ge__(self,other):\n if isinstance(other,timedelta):\n return self._cmp(other)>=0\n else :\n return NotImplemented\n \n def __gt__(self,other):\n if isinstance(other,timedelta):\n return self._cmp(other)>0\n else :\n return NotImplemented\n \n def _cmp(self,other):\n assert isinstance(other,timedelta)\n return _cmp(self._getstate(),other._getstate())\n \n def __hash__(self):\n if self._hashcode ==-1:\n self._hashcode=hash(self._getstate())\n return self._hashcode\n \n def __bool__(self):\n return (self._days !=0 or\n self._seconds !=0 or\n self._microseconds !=0)\n \n \n \n def _getstate(self):\n return (self._days,self._seconds,self._microseconds)\n \n def __reduce__(self):\n return (self.__class__,self._getstate())\n \ntimedelta.min=timedelta(-999999999)\ntimedelta.max=timedelta(days=999999999,hours=23,minutes=59,seconds=59,\nmicroseconds=999999)\ntimedelta.resolution=timedelta(microseconds=1)\n\nclass date:\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n __slots__='_year','_month','_day','_hashcode'\n \n def __new__(cls,year,month=None ,day=None ):\n ''\n\n\n\n\n \n if (month is None and\n isinstance(year,(bytes,str))and len(year)==4 and\n 1 <=ord(year[2:3])<=12):\n \n if isinstance(year,str):\n try :\n year=year.encode('latin1')\n except UnicodeEncodeError:\n \n raise ValueError(\n \"Failed to encode latin1 string when unpickling \"\n \"a date object. \"\n \"pickle.load(data, encoding='latin1') is assumed.\")\n self=object.__new__(cls)\n self.__setstate(year)\n self._hashcode=-1\n return self\n year,month,day=_check_date_fields(year,month,day)\n self=object.__new__(cls)\n self._year=year\n self._month=month\n self._day=day\n self._hashcode=-1\n return self\n \n \n \n @classmethod\n def fromtimestamp(cls,t):\n ''\n y,m,d,hh,mm,ss,weekday,jday,dst=_time.localtime(t)\n return cls(y,m,d)\n \n @classmethod\n def today(cls):\n ''\n t=_time.time()\n return cls.fromtimestamp(t)\n \n @classmethod\n def fromordinal(cls,n):\n ''\n\n\n\n \n y,m,d=_ord2ymd(n)\n return cls(y,m,d)\n \n @classmethod\n def fromisoformat(cls,date_string):\n ''\n if not isinstance(date_string,str):\n raise TypeError('fromisoformat: argument must be str')\n \n try :\n assert len(date_string)==10\n return cls(*_parse_isoformat_date(date_string))\n except Exception:\n raise ValueError(f'Invalid isoformat string: {date_string!r}')\n \n @classmethod\n def fromisocalendar(cls,year,week,day):\n ''\n\n \n \n if not MINYEAR <=year <=MAXYEAR:\n raise ValueError(f\"Year is out of range: {year}\")\n \n if not 0 =0\n return NotImplemented\n \n def __gt__(self,other):\n if isinstance(other,date):\n return self._cmp(other)>0\n return NotImplemented\n \n def _cmp(self,other):\n assert isinstance(other,date)\n y,m,d=self._year,self._month,self._day\n y2,m2,d2=other._year,other._month,other._day\n return _cmp((y,m,d),(y2,m2,d2))\n \n def __hash__(self):\n ''\n if self._hashcode ==-1:\n self._hashcode=hash(self._getstate())\n return self._hashcode\n \n \n \n def __add__(self,other):\n ''\n if isinstance(other,timedelta):\n o=self.toordinal()+other.days\n if 0 =52:\n if today >=_isoweek1monday(year+1):\n year +=1\n week=0\n return year,week+1,day+1\n \n \n \n def _getstate(self):\n yhi,ylo=divmod(self._year,256)\n return bytes([yhi,ylo,self._month,self._day]),\n \n def __setstate(self,string):\n yhi,ylo,self._month,self._day=string\n self._year=yhi *256+ylo\n \n def __reduce__(self):\n return (self.__class__,self._getstate())\n \n_date_class=date\n\ndate.min=date(1,1,1)\ndate.max=date(9999,12,31)\ndate.resolution=timedelta(days=1)\n\n\nclass tzinfo:\n ''\n\n\n \n __slots__=()\n \n def tzname(self,dt):\n ''\n raise NotImplementedError(\"tzinfo subclass must override tzname()\")\n \n def utcoffset(self,dt):\n ''\n raise NotImplementedError(\"tzinfo subclass must override utcoffset()\")\n \n def dst(self,dt):\n ''\n\n\n\n \n raise NotImplementedError(\"tzinfo subclass must override dst()\")\n \n def fromutc(self,dt):\n ''\n \n if not isinstance(dt,datetime):\n raise TypeError(\"fromutc() requires a datetime argument\")\n if dt.tzinfo is not self:\n raise ValueError(\"dt.tzinfo is not self\")\n \n dtoff=dt.utcoffset()\n if dtoff is None :\n raise ValueError(\"fromutc() requires a non-None utcoffset() \"\n \"result\")\n \n \n \n dtdst=dt.dst()\n if dtdst is None :\n raise ValueError(\"fromutc() requires a non-None dst() result\")\n delta=dtoff -dtdst\n if delta:\n dt +=delta\n dtdst=dt.dst()\n if dtdst is None :\n raise ValueError(\"fromutc(): dt.dst gave inconsistent \"\n \"results; cannot convert\")\n return dt+dtdst\n \n \n \n def __reduce__(self):\n getinitargs=getattr(self,\"__getinitargs__\",None )\n if getinitargs:\n args=getinitargs()\n else :\n args=()\n getstate=getattr(self,\"__getstate__\",None )\n if getstate:\n state=getstate()\n else :\n state=getattr(self,\"__dict__\",None )or None\n if state is None :\n return (self.__class__,args)\n else :\n return (self.__class__,args,state)\n \n_tzinfo_class=tzinfo\n\nclass time:\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n __slots__='_hour','_minute','_second','_microsecond','_tzinfo','_hashcode','_fold'\n \n def __new__(cls,hour=0,minute=0,second=0,microsecond=0,tzinfo=None ,*,fold=0):\n ''\n\n\n\n\n\n\n\n \n if (isinstance(hour,(bytes,str))and len(hour)==6 and\n ord(hour[0:1])&0x7F <24):\n \n if isinstance(hour,str):\n try :\n hour=hour.encode('latin1')\n except UnicodeEncodeError:\n \n raise ValueError(\n \"Failed to encode latin1 string when unpickling \"\n \"a time object. \"\n \"pickle.load(data, encoding='latin1') is assumed.\")\n self=object.__new__(cls)\n self.__setstate(hour,minute or None )\n self._hashcode=-1\n return self\n hour,minute,second,microsecond,fold=_check_time_fields(\n hour,minute,second,microsecond,fold)\n _check_tzinfo_arg(tzinfo)\n self=object.__new__(cls)\n self._hour=hour\n self._minute=minute\n self._second=second\n self._microsecond=microsecond\n self._tzinfo=tzinfo\n self._hashcode=-1\n self._fold=fold\n return self\n \n \n @property\n def hour(self):\n ''\n return self._hour\n \n @property\n def minute(self):\n ''\n return self._minute\n \n @property\n def second(self):\n ''\n return self._second\n \n @property\n def microsecond(self):\n ''\n return self._microsecond\n \n @property\n def tzinfo(self):\n ''\n return self._tzinfo\n \n @property\n def fold(self):\n return self._fold\n \n \n \n \n \n def __eq__(self,other):\n if isinstance(other,time):\n return self._cmp(other,allow_mixed=True )==0\n else :\n return NotImplemented\n \n def __le__(self,other):\n if isinstance(other,time):\n return self._cmp(other)<=0\n else :\n return NotImplemented\n \n def __lt__(self,other):\n if isinstance(other,time):\n return self._cmp(other)<0\n else :\n return NotImplemented\n \n def __ge__(self,other):\n if isinstance(other,time):\n return self._cmp(other)>=0\n else :\n return NotImplemented\n \n def __gt__(self,other):\n if isinstance(other,time):\n return self._cmp(other)>0\n else :\n return NotImplemented\n \n def _cmp(self,other,allow_mixed=False ):\n assert isinstance(other,time)\n mytz=self._tzinfo\n ottz=other._tzinfo\n myoff=otoff=None\n \n if mytz is ottz:\n base_compare=True\n else :\n myoff=self.utcoffset()\n otoff=other.utcoffset()\n base_compare=myoff ==otoff\n \n if base_compare:\n return _cmp((self._hour,self._minute,self._second,\n self._microsecond),\n (other._hour,other._minute,other._second,\n other._microsecond))\n if myoff is None or otoff is None :\n if allow_mixed:\n return 2\n else :\n raise TypeError(\"cannot compare naive and aware times\")\n myhhmm=self._hour *60+self._minute -myoff //timedelta(minutes=1)\n othhmm=other._hour *60+other._minute -otoff //timedelta(minutes=1)\n return _cmp((myhhmm,self._second,self._microsecond),\n (othhmm,other._second,other._microsecond))\n \n def __hash__(self):\n ''\n if self._hashcode ==-1:\n if self.fold:\n t=self.replace(fold=0)\n else :\n t=self\n tzoff=t.utcoffset()\n if not tzoff:\n self._hashcode=hash(t._getstate()[0])\n else :\n h,m=divmod(timedelta(hours=self.hour,minutes=self.minute)-tzoff,\n timedelta(hours=1))\n assert not m %timedelta(minutes=1),\"whole minute\"\n m //=timedelta(minutes=1)\n if 0 <=h <24:\n self._hashcode=hash(time(h,m,self.second,self.microsecond))\n else :\n self._hashcode=hash((h,m,self.second,self.microsecond))\n return self._hashcode\n \n \n \n def _tzstr(self):\n ''\n off=self.utcoffset()\n return _format_offset(off)\n \n def __repr__(self):\n ''\n if self._microsecond !=0:\n s=\", %d, %d\"%(self._second,self._microsecond)\n elif self._second !=0:\n s=\", %d\"%self._second\n else :\n s=\"\"\n s=\"%s.%s(%d, %d%s)\"%(self.__class__.__module__,\n self.__class__.__qualname__,\n self._hour,self._minute,s)\n if self._tzinfo is not None :\n assert s[-1:]==\")\"\n s=s[:-1]+\", tzinfo=%r\"%self._tzinfo+\")\"\n if self._fold:\n assert s[-1:]==\")\"\n s=s[:-1]+\", fold=1)\"\n return s\n \n def isoformat(self,timespec='auto'):\n ''\n\n\n\n\n\n\n \n s=_format_time(self._hour,self._minute,self._second,\n self._microsecond,timespec)\n tz=self._tzstr()\n if tz:\n s +=tz\n return s\n \n __str__=isoformat\n \n @classmethod\n def fromisoformat(cls,time_string):\n ''\n if not isinstance(time_string,str):\n raise TypeError('fromisoformat: argument must be str')\n \n try :\n return cls(*_parse_isoformat_time(time_string))\n except Exception:\n raise ValueError(f'Invalid isoformat string: {time_string!r}')\n \n \n def strftime(self,fmt):\n ''\n\n \n \n \n timetuple=(1900,1,1,\n self._hour,self._minute,self._second,\n 0,1,-1)\n return _wrap_strftime(self,fmt,timetuple)\n \n def __format__(self,fmt):\n if not isinstance(fmt,str):\n raise TypeError(\"must be str, not %s\"%type(fmt).__name__)\n if len(fmt)!=0:\n return self.strftime(fmt)\n return str(self)\n \n \n \n def utcoffset(self):\n ''\n \n if self._tzinfo is None :\n return None\n offset=self._tzinfo.utcoffset(None )\n _check_utc_offset(\"utcoffset\",offset)\n return offset\n \n def tzname(self):\n ''\n\n\n\n\n \n if self._tzinfo is None :\n return None\n name=self._tzinfo.tzname(None )\n _check_tzname(name)\n return name\n \n def dst(self):\n ''\n\n\n\n\n\n\n \n if self._tzinfo is None :\n return None\n offset=self._tzinfo.dst(None )\n _check_utc_offset(\"dst\",offset)\n return offset\n \n def replace(self,hour=None ,minute=None ,second=None ,microsecond=None ,\n tzinfo=True ,*,fold=None ):\n ''\n if hour is None :\n hour=self.hour\n if minute is None :\n minute=self.minute\n if second is None :\n second=self.second\n if microsecond is None :\n microsecond=self.microsecond\n if tzinfo is True :\n tzinfo=self.tzinfo\n if fold is None :\n fold=self._fold\n return type(self)(hour,minute,second,microsecond,tzinfo,fold=fold)\n \n \n \n def _getstate(self,protocol=3):\n us2,us3=divmod(self._microsecond,256)\n us1,us2=divmod(us2,256)\n h=self._hour\n if self._fold and protocol >3:\n h +=128\n basestate=bytes([h,self._minute,self._second,\n us1,us2,us3])\n if self._tzinfo is None :\n return (basestate,)\n else :\n return (basestate,self._tzinfo)\n \n def __setstate(self,string,tzinfo):\n if tzinfo is not None and not isinstance(tzinfo,_tzinfo_class):\n raise TypeError(\"bad tzinfo state arg\")\n h,self._minute,self._second,us1,us2,us3=string\n if h >127:\n self._fold=1\n self._hour=h -128\n else :\n self._fold=0\n self._hour=h\n self._microsecond=(((us1 <<8)|us2)<<8)|us3\n self._tzinfo=tzinfo\n \n def __reduce_ex__(self,protocol):\n return (time,self._getstate(protocol))\n \n def __reduce__(self):\n return self.__reduce_ex__(2)\n \n_time_class=time\n\ntime.min=time(0,0,0)\ntime.max=time(23,59,59,999999)\ntime.resolution=timedelta(microseconds=1)\n\nclass datetime(date):\n ''\n\n\n\n \n __slots__=date.__slots__+time.__slots__\n \n def __new__(cls,year,month=None ,day=None ,hour=0,minute=0,second=0,\n microsecond=0,tzinfo=None ,*,fold=0):\n if (isinstance(year,(bytes,str))and len(year)==10 and\n 1 <=ord(year[2:3])&0x7F <=12):\n \n if isinstance(year,str):\n try :\n year=bytes(year,'latin1')\n except UnicodeEncodeError:\n \n raise ValueError(\n \"Failed to encode latin1 string when unpickling \"\n \"a datetime object. \"\n \"pickle.load(data, encoding='latin1') is assumed.\")\n self=object.__new__(cls)\n self.__setstate(year,month)\n self._hashcode=-1\n return self\n year,month,day=_check_date_fields(year,month,day)\n hour,minute,second,microsecond,fold=_check_time_fields(\n hour,minute,second,microsecond,fold)\n _check_tzinfo_arg(tzinfo)\n self=object.__new__(cls)\n self._year=year\n self._month=month\n self._day=day\n self._hour=hour\n self._minute=minute\n self._second=second\n self._microsecond=microsecond\n self._tzinfo=tzinfo\n self._hashcode=-1\n self._fold=fold\n return self\n \n \n @property\n def hour(self):\n ''\n return self._hour\n \n @property\n def minute(self):\n ''\n return self._minute\n \n @property\n def second(self):\n ''\n return self._second\n \n @property\n def microsecond(self):\n ''\n return self._microsecond\n \n @property\n def tzinfo(self):\n ''\n return self._tzinfo\n \n @property\n def fold(self):\n return self._fold\n \n @classmethod\n def _fromtimestamp(cls,t,utc,tz):\n ''\n\n\n \n frac,t=_math.modf(t)\n us=round(frac *1e6)\n if us >=1000000:\n t +=1\n us -=1000000\n elif us <0:\n t -=1\n us +=1000000\n \n converter=_time.gmtime if utc else _time.localtime\n y,m,d,hh,mm,ss,weekday,jday,dst=converter(t)\n ss=min(ss,59)\n result=cls(y,m,d,hh,mm,ss,us,tz)\n if tz is None :\n \n \n \n max_fold_seconds=24 *3600\n \n \n \n \n \n if t =0\n elif not isinstance(other,date):\n return NotImplemented\n else :\n _cmperror(self,other)\n \n def __gt__(self,other):\n if isinstance(other,datetime):\n return self._cmp(other)>0\n elif not isinstance(other,date):\n return NotImplemented\n else :\n _cmperror(self,other)\n \n def _cmp(self,other,allow_mixed=False ):\n assert isinstance(other,datetime)\n mytz=self._tzinfo\n ottz=other._tzinfo\n myoff=otoff=None\n \n if mytz is ottz:\n base_compare=True\n else :\n myoff=self.utcoffset()\n otoff=other.utcoffset()\n \n if allow_mixed:\n if myoff !=self.replace(fold=not self.fold).utcoffset():\n return 2\n if otoff !=other.replace(fold=not other.fold).utcoffset():\n return 2\n base_compare=myoff ==otoff\n \n if base_compare:\n return _cmp((self._year,self._month,self._day,\n self._hour,self._minute,self._second,\n self._microsecond),\n (other._year,other._month,other._day,\n other._hour,other._minute,other._second,\n other._microsecond))\n if myoff is None or otoff is None :\n if allow_mixed:\n return 2\n else :\n raise TypeError(\"cannot compare naive and aware datetimes\")\n \n diff=self -other\n if diff.days <0:\n return -1\n return diff and 1 or 0\n \n def __add__(self,other):\n ''\n if not isinstance(other,timedelta):\n return NotImplemented\n delta=timedelta(self.toordinal(),\n hours=self._hour,\n minutes=self._minute,\n seconds=self._second,\n microseconds=self._microsecond)\n delta +=other\n hour,rem=divmod(delta.seconds,3600)\n minute,second=divmod(rem,60)\n if 0 3:\n m +=128\n basestate=bytes([yhi,ylo,m,self._day,\n self._hour,self._minute,self._second,\n us1,us2,us3])\n if self._tzinfo is None :\n return (basestate,)\n else :\n return (basestate,self._tzinfo)\n \n def __setstate(self,string,tzinfo):\n if tzinfo is not None and not isinstance(tzinfo,_tzinfo_class):\n raise TypeError(\"bad tzinfo state arg\")\n (yhi,ylo,m,self._day,self._hour,\n self._minute,self._second,us1,us2,us3)=string\n if m >127:\n self._fold=1\n self._month=m -128\n else :\n self._fold=0\n self._month=m\n self._year=yhi *256+ylo\n self._microsecond=(((us1 <<8)|us2)<<8)|us3\n self._tzinfo=tzinfo\n \n def __reduce_ex__(self,protocol):\n return (self.__class__,self._getstate(protocol))\n \n def __reduce__(self):\n return self.__reduce_ex__(2)\n \n \ndatetime.min=datetime(1,1,1)\ndatetime.max=datetime(9999,12,31,23,59,59,999999)\ndatetime.resolution=timedelta(microseconds=1)\n\n\ndef _isoweek1monday(year):\n\n\n THURSDAY=3\n firstday=_ymd2ord(year,1,1)\n firstweekday=(firstday+6)%7\n week1monday=firstday -firstweekday\n if firstweekday >THURSDAY:\n week1monday +=7\n return week1monday\n \n \nclass timezone(tzinfo):\n __slots__='_offset','_name'\n \n \n _Omitted=object()\n def __new__(cls,offset,name=_Omitted):\n if not isinstance(offset,timedelta):\n raise TypeError(\"offset must be a timedelta\")\n if name is cls._Omitted:\n if not offset:\n return cls.utc\n name=None\n elif not isinstance(name,str):\n raise TypeError(\"name must be a string\")\n if not cls._minoffset <=offset <=cls._maxoffset:\n raise ValueError(\"offset must be a timedelta \"\n \"strictly between -timedelta(hours=24) and \"\n \"timedelta(hours=24).\")\n return cls._create(offset,name)\n \n @classmethod\n def _create(cls,offset,name=None ):\n self=tzinfo.__new__(cls)\n self._offset=offset\n self._name=name\n return self\n \n def __getinitargs__(self):\n ''\n if self._name is None :\n return (self._offset,)\n return (self._offset,self._name)\n \n def __eq__(self,other):\n if isinstance(other,timezone):\n return self._offset ==other._offset\n return NotImplemented\n \n def __hash__(self):\n return hash(self._offset)\n \n def __repr__(self):\n ''\n\n\n\n\n\n\n\n \n if self is self.utc:\n return 'datetime.timezone.utc'\n if self._name is None :\n return \"%s.%s(%r)\"%(self.__class__.__module__,\n self.__class__.__qualname__,\n self._offset)\n return \"%s.%s(%r, %r)\"%(self.__class__.__module__,\n self.__class__.__qualname__,\n self._offset,self._name)\n \n def __str__(self):\n return self.tzname(None )\n \n def utcoffset(self,dt):\n if isinstance(dt,datetime)or dt is None :\n return self._offset\n raise TypeError(\"utcoffset() argument must be a datetime instance\"\n \" or None\")\n \n def tzname(self,dt):\n if isinstance(dt,datetime)or dt is None :\n if self._name is None :\n return self._name_from_offset(self._offset)\n return self._name\n raise TypeError(\"tzname() argument must be a datetime instance\"\n \" or None\")\n \n def dst(self,dt):\n if isinstance(dt,datetime)or dt is None :\n return None\n raise TypeError(\"dst() argument must be a datetime instance\"\n \" or None\")\n \n def fromutc(self,dt):\n if isinstance(dt,datetime):\n if dt.tzinfo is not self:\n raise ValueError(\"fromutc: dt.tzinfo \"\n \"is not self\")\n return dt+self._offset\n raise TypeError(\"fromutc() argument must be a datetime instance\"\n \" or None\")\n \n _maxoffset=timedelta(hours=24,microseconds=-1)\n _minoffset=-_maxoffset\n \n @staticmethod\n def _name_from_offset(delta):\n if not delta:\n return 'UTC'\n if delta
>>0?1:0);R=k.low=R+J;k.high=da+U+(R>>>0>>0?1:0);\nS=m.low=S+K;m.high=ea+V+(S>>>0>>0?1:0);T=d.low=T+L;d.high=fa+X+(T>>>0>>0?1:0)},_doFinalize:function(){var a=this._data,c=a.words,d=8*this._nDataBytes,f=8*a.sigBytes;c[f>>>5]|=128<<24-f%32;c[(f+128>>>10<<5)+30]=Math.floor(d/4294967296);c[(f+128>>>10<<5)+31]=d;a.sigBytes=4*c.length;this._process();return this._hash.toX32()},clone:function(){var a=d.clone.call(this);a._hash=this._hash.clone();return a},blockSize:32});c.SHA512=d._createHelper(j);c.HmacSHA512=d._createHmacHelper(j)})();\n(function(){var a=CryptoJS,c=a.x64,d=c.Word,j=c.WordArray,c=a.algo,f=c.SHA512,c=c.SHA384=f.extend({_doReset:function(){this._hash=new j.init([new d.init(3418070365,3238371032),new d.init(1654270250,914150663),new d.init(2438529370,812702999),new d.init(355462360,4144912697),new d.init(1731405415,4290775857),new d.init(2394180231,1750603025),new d.init(3675008525,1694076839),new d.init(1203062813,3204075428)])},_doFinalize:function(){var a=f._doFinalize.call(this);a.sigBytes-=16;return a}});a.SHA384=\nf._createHelper(c);a.HmacSHA384=f._createHmacHelper(c)})();\n"], "crypto_js.rollups.sha512": [".js", "/*\nCryptoJS v3.1.2\ncode.google.com/p/crypto-js\n(c) 2009-2013 by Jeff Mott. All rights reserved.\ncode.google.com/p/crypto-js/wiki/License\n*/\nvar CryptoJS=CryptoJS||function(a,m){var r={},f=r.lib={},g=function(){},l=f.Base={extend:function(a){g.prototype=this;var b=new g;a&&b.mixIn(a);b.hasOwnProperty(\"init\")||(b.init=function(){b.$super.init.apply(this,arguments)});b.init.prototype=b;b.$super=this;return b},create:function(){var a=this.extend();a.init.apply(a,arguments);return a},init:function(){},mixIn:function(a){for(var b in a)a.hasOwnProperty(b)&&(this[b]=a[b]);a.hasOwnProperty(\"toString\")&&(this.toString=a.toString)},clone:function(){return this.init.prototype.extend(this)}},\np=f.WordArray=l.extend({init:function(a,b){a=this.words=a||[];this.sigBytes=b!=m?b:4*a.length},toString:function(a){return(a||q).stringify(this)},concat:function(a){var b=this.words,d=a.words,c=this.sigBytes;a=a.sigBytes;this.clamp();if(c%4)for(var j=0;j>>2]|=(d[j>>>2]>>>24-8*(j%4)&255)<<24-8*((c+j)%4);else if(65535>>2]=d[j>>>2];else b.push.apply(b,d);this.sigBytes+=a;return this},clamp:function(){var n=this.words,b=this.sigBytes;n[b>>>2]&=4294967295<<\n32-8*(b%4);n.length=a.ceil(b/4)},clone:function(){var a=l.clone.call(this);a.words=this.words.slice(0);return a},random:function(n){for(var b=[],d=0;d>>2]>>>24-8*(c%4)&255;d.push((j>>>4).toString(16));d.push((j&15).toString(16))}return d.join(\"\")},parse:function(a){for(var b=a.length,d=[],c=0;c>>3]|=parseInt(a.substr(c,\n2),16)<<24-4*(c%8);return new p.init(d,b/2)}},G=y.Latin1={stringify:function(a){var b=a.words;a=a.sigBytes;for(var d=[],c=0;c>>2]>>>24-8*(c%4)&255));return d.join(\"\")},parse:function(a){for(var b=a.length,d=[],c=0;c>>2]|=(a.charCodeAt(c)&255)<<24-8*(c%4);return new p.init(d,b)}},fa=y.Utf8={stringify:function(a){try{return decodeURIComponent(escape(G.stringify(a)))}catch(b){throw Error(\"Malformed UTF-8 data\");}},parse:function(a){return G.parse(unescape(encodeURIComponent(a)))}},\nh=f.BufferedBlockAlgorithm=l.extend({reset:function(){this._data=new p.init;this._nDataBytes=0},_append:function(a){\"string\"==typeof a&&(a=fa.parse(a));this._data.concat(a);this._nDataBytes+=a.sigBytes},_process:function(n){var b=this._data,d=b.words,c=b.sigBytes,j=this.blockSize,l=c/(4*j),l=n?a.ceil(l):a.max((l|0)-this._minBufferSize,0);n=l*j;c=a.min(4*n,c);if(n){for(var h=0;hq;q++)y[q]=a();f=f.SHA512=r.extend({_doReset:function(){this._hash=new l.init([new g.init(1779033703,4089235720),new g.init(3144134277,2227873595),new g.init(1013904242,4271175723),new g.init(2773480762,1595750129),new g.init(1359893119,2917565137),new g.init(2600822924,725511199),new g.init(528734635,4215389547),new g.init(1541459225,327033209)])},_doProcessBlock:function(a,f){for(var h=this._hash.words,\ng=h[0],n=h[1],b=h[2],d=h[3],c=h[4],j=h[5],l=h[6],h=h[7],q=g.high,m=g.low,r=n.high,N=n.low,Z=b.high,O=b.low,$=d.high,P=d.low,aa=c.high,Q=c.low,ba=j.high,R=j.low,ca=l.high,S=l.low,da=h.high,T=h.low,v=q,s=m,H=r,E=N,I=Z,F=O,W=$,J=P,w=aa,t=Q,U=ba,K=R,V=ca,L=S,X=da,M=T,x=0;80>x;x++){var B=y[x];if(16>x)var u=B.high=a[f+2*x]|0,e=B.low=a[f+2*x+1]|0;else{var u=y[x-15],e=u.high,z=u.low,u=(e>>>1|z<<31)^(e>>>8|z<<24)^e>>>7,z=(z>>>1|e<<31)^(z>>>8|e<<24)^(z>>>7|e<<25),D=y[x-2],e=D.high,k=D.low,D=(e>>>19|k<<13)^\n(e<<3|k>>>29)^e>>>6,k=(k>>>19|e<<13)^(k<<3|e>>>29)^(k>>>6|e<<26),e=y[x-7],Y=e.high,C=y[x-16],A=C.high,C=C.low,e=z+e.low,u=u+Y+(e>>>0>>0?1:0),e=e+k,u=u+D+(e>>>0>>0?1:0),e=e+C,u=u+A+(e>>>0>>0?1:0);B.high=u;B.low=e}var Y=w&U^~w&V,C=t&K^~t&L,B=v&H^v&I^H&I,ha=s&E^s&F^E&F,z=(v>>>28|s<<4)^(v<<30|s>>>2)^(v<<25|s>>>7),D=(s>>>28|v<<4)^(s<<30|v>>>2)^(s<<25|v>>>7),k=p[x],ia=k.high,ea=k.low,k=M+((t>>>14|w<<18)^(t>>>18|w<<14)^(t<<23|w>>>9)),A=X+((w>>>14|t<<18)^(w>>>18|t<<14)^(w<<23|t>>>9))+(k>>>0>>\n0?1:0),k=k+C,A=A+Y+(k>>>0>>0?1:0),k=k+ea,A=A+ia+(k>>>0>>0?1:0),k=k+e,A=A+u+(k>>>0>>0?1:0),e=D+ha,B=z+B+(e>>>0>>0?1:0),X=V,M=L,V=U,L=K,U=w,K=t,t=J+k|0,w=W+A+(t>>>0>>0?1:0)|0,W=I,J=F,I=H,F=E,H=v,E=s,s=k+e|0,v=A+B+(s>>>0>>0?1:0)|0}m=g.low=m+s;g.high=q+v+(m>>>0>>0?1:0);N=n.low=N+E;n.high=r+H+(N>>>0>>0?1:0);O=b.low=O+F;b.high=Z+I+(O>>>0>>0?1:0);P=d.low=P+J;d.high=$+W+(P>>>0>>0?1:0);Q=c.low=Q+t;c.high=aa+w+(Q>>>0>>0?1:0);R=j.low=R+K;j.high=ba+U+(R>>>0>>0?1:0);S=l.low=\nS+L;l.high=ca+V+(S>>>0>>0?1:0);T=h.low=T+M;h.high=da+X+(T>>>0>>0?1:0)},_doFinalize:function(){var a=this._data,f=a.words,h=8*this._nDataBytes,g=8*a.sigBytes;f[g>>>5]|=128<<24-g%32;f[(g+128>>>10<<5)+30]=Math.floor(h/4294967296);f[(g+128>>>10<<5)+31]=h;a.sigBytes=4*f.length;this._process();return this._hash.toX32()},clone:function(){var a=r.clone.call(this);a._hash=this._hash.clone();return a},blockSize:32});m.SHA512=r._createHelper(f);m.HmacSHA512=r._createHmacHelper(f)})();\n"], "abc": [".py", "\n\n\n\"\"\"Abstract Base Classes (ABCs) according to PEP 3119.\"\"\"\n\n\ndef abstractmethod(funcobj):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n funcobj.__isabstractmethod__=True\n return funcobj\n \n \nclass abstractclassmethod(classmethod):\n ''\n\n\n \n \n __isabstractmethod__=True\n \n def __init__(self,callable):\n callable.__isabstractmethod__=True\n super().__init__(callable)\n \n \nclass abstractstaticmethod(staticmethod):\n ''\n\n\n \n \n __isabstractmethod__=True\n \n def __init__(self,callable):\n callable.__isabstractmethod__=True\n super().__init__(callable)\n \n \nclass abstractproperty(property):\n ''\n\n\n \n \n __isabstractmethod__=True\n \n \ntry :\n from _abc import (get_cache_token,_abc_init,_abc_register,\n _abc_instancecheck,_abc_subclasscheck,_get_dump,\n _reset_registry,_reset_caches)\nexcept ImportError:\n from _py_abc import ABCMeta,get_cache_token\n ABCMeta.__module__='abc'\nelse :\n class ABCMeta(type):\n ''\n\n\n\n\n\n\n\n\n\n\n \n def __new__(mcls,name,bases,namespace,**kwargs):\n cls=super().__new__(mcls,name,bases,namespace,**kwargs)\n _abc_init(cls)\n return cls\n \n def register(cls,subclass):\n ''\n\n\n \n return _abc_register(cls,subclass)\n \n def __instancecheck__(cls,instance):\n ''\n return _abc_instancecheck(cls,instance)\n \n def __subclasscheck__(cls,subclass):\n ''\n return _abc_subclasscheck(cls,subclass)\n \n def _dump_registry(cls,file=None ):\n ''\n print(f\"Class: {cls.__module__}.{cls.__qualname__}\",file=file)\n print(f\"Inv. counter: {get_cache_token()}\",file=file)\n (_abc_registry,_abc_cache,_abc_negative_cache,\n _abc_negative_cache_version)=_get_dump(cls)\n print(f\"_abc_registry: {_abc_registry!r}\",file=file)\n print(f\"_abc_cache: {_abc_cache!r}\",file=file)\n print(f\"_abc_negative_cache: {_abc_negative_cache!r}\",file=file)\n print(f\"_abc_negative_cache_version: {_abc_negative_cache_version!r}\",\n file=file)\n \n def _abc_registry_clear(cls):\n ''\n _reset_registry(cls)\n \n def _abc_caches_clear(cls):\n ''\n _reset_caches(cls)\n \n \nclass ABC(metaclass=ABCMeta):\n ''\n\n \n __slots__=()\n", ["_abc", "_py_abc"]], "antigravity": [".py", "\nimport webbrowser\nimport hashlib\n\nwebbrowser.open(\"https://xkcd.com/353/\")\n\ndef geohash(latitude,longitude,datedow):\n ''\n\n\n\n\n \n \n h=hashlib.md5(datedow).hexdigest()\n p,q=[('%f'%float.fromhex('0.'+x))for x in (h[:16],h[16:32])]\n print('%d%s %d%s'%(latitude,p[1:],longitude,q[1:]))\n", ["hashlib", "webbrowser"]], "argparse": [".py", "\n\n\n\"\"\"Command-line parsing library\n\nThis module is an optparse-inspired command-line parsing library that:\n\n - handles both optional and positional arguments\n - produces highly informative usage messages\n - supports parsers that dispatch to sub-parsers\n\nThe following is a simple usage example that sums integers from the\ncommand-line and writes the result to a file::\n\n parser = argparse.ArgumentParser(\n description='sum the integers at the command line')\n parser.add_argument(\n 'integers', metavar='int', nargs='+', type=int,\n help='an integer to be summed')\n parser.add_argument(\n '--log', default=sys.stdout, type=argparse.FileType('w'),\n help='the file where the sum should be written')\n args = parser.parse_args()\n args.log.write('%s' % sum(args.integers))\n args.log.close()\n\nThe module contains the following public classes:\n\n - ArgumentParser -- The main entry point for command-line parsing. As the\n example above shows, the add_argument() method is used to populate\n the parser with actions for optional and positional arguments. Then\n the parse_args() method is invoked to convert the args at the\n command-line into an object with attributes.\n\n - ArgumentError -- The exception raised by ArgumentParser objects when\n there are errors with the parser's actions. Errors raised while\n parsing the command-line are caught by ArgumentParser and emitted\n as command-line messages.\n\n - FileType -- A factory for defining types of files to be created. As the\n example above shows, instances of FileType are typically passed as\n the type= argument of add_argument() calls.\n\n - Action -- The base class for parser actions. Typically actions are\n selected by passing strings like 'store_true' or 'append_const' to\n the action= argument of add_argument(). However, for greater\n customization of ArgumentParser actions, subclasses of Action may\n be defined and passed as the action= argument.\n\n - HelpFormatter, RawDescriptionHelpFormatter, RawTextHelpFormatter,\n ArgumentDefaultsHelpFormatter -- Formatter classes which\n may be passed as the formatter_class= argument to the\n ArgumentParser constructor. HelpFormatter is the default,\n RawDescriptionHelpFormatter and RawTextHelpFormatter tell the parser\n not to change the formatting for help text, and\n ArgumentDefaultsHelpFormatter adds information about argument defaults\n to the help.\n\nAll other classes in this module are considered implementation details.\n(Also note that HelpFormatter and RawDescriptionHelpFormatter are only\nconsidered public as object names -- the API of the formatter objects is\nstill considered an implementation detail.)\n\"\"\"\n\n__version__='1.1'\n__all__=[\n'ArgumentParser',\n'ArgumentError',\n'ArgumentTypeError',\n'FileType',\n'HelpFormatter',\n'ArgumentDefaultsHelpFormatter',\n'RawDescriptionHelpFormatter',\n'RawTextHelpFormatter',\n'MetavarTypeHelpFormatter',\n'Namespace',\n'Action',\n'ONE_OR_MORE',\n'OPTIONAL',\n'PARSER',\n'REMAINDER',\n'SUPPRESS',\n'ZERO_OR_MORE',\n]\n\n\nimport os as _os\nimport re as _re\nimport shutil as _shutil\nimport sys as _sys\n\nfrom gettext import gettext as _,ngettext\n\nSUPPRESS='==SUPPRESS=='\n\nOPTIONAL='?'\nZERO_OR_MORE='*'\nONE_OR_MORE='+'\nPARSER='A...'\nREMAINDER='...'\n_UNRECOGNIZED_ARGS_ATTR='_unrecognized_args'\n\n\n\n\n\nclass _AttributeHolder(object):\n ''\n\n\n\n\n\n \n \n def __repr__(self):\n type_name=type(self).__name__\n arg_strings=[]\n star_args={}\n for arg in self._get_args():\n arg_strings.append(repr(arg))\n for name,value in self._get_kwargs():\n if name.isidentifier():\n arg_strings.append('%s=%r'%(name,value))\n else :\n star_args[name]=value\n if star_args:\n arg_strings.append('**%s'%repr(star_args))\n return '%s(%s)'%(type_name,', '.join(arg_strings))\n \n def _get_kwargs(self):\n return sorted(self.__dict__.items())\n \n def _get_args(self):\n return []\n \n \ndef _copy_items(items):\n if items is None :\n return []\n \n \n \n if type(items)is list:\n return items[:]\n import copy\n return copy.copy(items)\n \n \n \n \n \n \nclass HelpFormatter(object):\n ''\n\n\n\n \n \n def __init__(self,\n prog,\n indent_increment=2,\n max_help_position=24,\n width=None ):\n \n \n if width is None :\n width=_shutil.get_terminal_size().columns\n width -=2\n \n self._prog=prog\n self._indent_increment=indent_increment\n self._max_help_position=min(max_help_position,\n max(width -20,indent_increment *2))\n self._width=width\n \n self._current_indent=0\n self._level=0\n self._action_max_length=0\n \n self._root_section=self._Section(self,None )\n self._current_section=self._root_section\n \n self._whitespace_matcher=_re.compile(r'\\s+',_re.ASCII)\n self._long_break_matcher=_re.compile(r'\\n\\n\\n+')\n \n \n \n \n def _indent(self):\n self._current_indent +=self._indent_increment\n self._level +=1\n \n def _dedent(self):\n self._current_indent -=self._indent_increment\n assert self._current_indent >=0,'Indent decreased below 0.'\n self._level -=1\n \n class _Section(object):\n \n def __init__(self,formatter,parent,heading=None ):\n self.formatter=formatter\n self.parent=parent\n self.heading=heading\n self.items=[]\n \n def format_help(self):\n \n if self.parent is not None :\n self.formatter._indent()\n join=self.formatter._join_parts\n item_help=join([func(*args)for func,args in self.items])\n if self.parent is not None :\n self.formatter._dedent()\n \n \n if not item_help:\n return ''\n \n \n if self.heading is not SUPPRESS and self.heading is not None :\n current_indent=self.formatter._current_indent\n heading='%*s%s:\\n'%(current_indent,'',self.heading)\n else :\n heading=''\n \n \n return join(['\\n',heading,item_help,'\\n'])\n \n def _add_item(self,func,args):\n self._current_section.items.append((func,args))\n \n \n \n \n def start_section(self,heading):\n self._indent()\n section=self._Section(self,self._current_section,heading)\n self._add_item(section.format_help,[])\n self._current_section=section\n \n def end_section(self):\n self._current_section=self._current_section.parent\n self._dedent()\n \n def add_text(self,text):\n if text is not SUPPRESS and text is not None :\n self._add_item(self._format_text,[text])\n \n def add_usage(self,usage,actions,groups,prefix=None ):\n if usage is not SUPPRESS:\n args=usage,actions,groups,prefix\n self._add_item(self._format_usage,args)\n \n def add_argument(self,action):\n if action.help is not SUPPRESS:\n \n \n get_invocation=self._format_action_invocation\n invocations=[get_invocation(action)]\n for subaction in self._iter_indented_subactions(action):\n invocations.append(get_invocation(subaction))\n \n \n invocation_length=max([len(s)for s in invocations])\n action_length=invocation_length+self._current_indent\n self._action_max_length=max(self._action_max_length,\n action_length)\n \n \n self._add_item(self._format_action,[action])\n \n def add_arguments(self,actions):\n for action in actions:\n self.add_argument(action)\n \n \n \n \n def format_help(self):\n help=self._root_section.format_help()\n if help:\n help=self._long_break_matcher.sub('\\n\\n',help)\n help=help.strip('\\n')+'\\n'\n return help\n \n def _join_parts(self,part_strings):\n return ''.join([part\n for part in part_strings\n if part and part is not SUPPRESS])\n \n def _format_usage(self,usage,actions,groups,prefix):\n if prefix is None :\n prefix=_('usage: ')\n \n \n if usage is not None :\n usage=usage %dict(prog=self._prog)\n \n \n elif usage is None and not actions:\n usage='%(prog)s'%dict(prog=self._prog)\n \n \n elif usage is None :\n prog='%(prog)s'%dict(prog=self._prog)\n \n \n optionals=[]\n positionals=[]\n for action in actions:\n if action.option_strings:\n optionals.append(action)\n else :\n positionals.append(action)\n \n \n format=self._format_actions_usage\n action_usage=format(optionals+positionals,groups)\n usage=' '.join([s for s in [prog,action_usage]if s])\n \n \n text_width=self._width -self._current_indent\n if len(prefix)+len(usage)>text_width:\n \n \n part_regexp=(\n r'\\(.*?\\)+(?=\\s|$)|'\n r'\\[.*?\\]+(?=\\s|$)|'\n r'\\S+'\n )\n opt_usage=format(optionals,groups)\n pos_usage=format(positionals,groups)\n opt_parts=_re.findall(part_regexp,opt_usage)\n pos_parts=_re.findall(part_regexp,pos_usage)\n assert ' '.join(opt_parts)==opt_usage\n assert ' '.join(pos_parts)==pos_usage\n \n \n def get_lines(parts,indent,prefix=None ):\n lines=[]\n line=[]\n if prefix is not None :\n line_len=len(prefix)-1\n else :\n line_len=len(indent)-1\n for part in parts:\n if line_len+1+len(part)>text_width and line:\n lines.append(indent+' '.join(line))\n line=[]\n line_len=len(indent)-1\n line.append(part)\n line_len +=len(part)+1\n if line:\n lines.append(indent+' '.join(line))\n if prefix is not None :\n lines[0]=lines[0][len(indent):]\n return lines\n \n \n if len(prefix)+len(prog)<=0.75 *text_width:\n indent=' '*(len(prefix)+len(prog)+1)\n if opt_parts:\n lines=get_lines([prog]+opt_parts,indent,prefix)\n lines.extend(get_lines(pos_parts,indent))\n elif pos_parts:\n lines=get_lines([prog]+pos_parts,indent,prefix)\n else :\n lines=[prog]\n \n \n else :\n indent=' '*len(prefix)\n parts=opt_parts+pos_parts\n lines=get_lines(parts,indent)\n if len(lines)>1:\n lines=[]\n lines.extend(get_lines(opt_parts,indent))\n lines.extend(get_lines(pos_parts,indent))\n lines=[prog]+lines\n \n \n usage='\\n'.join(lines)\n \n \n return '%s%s\\n\\n'%(prefix,usage)\n \n def _format_actions_usage(self,actions,groups):\n \n group_actions=set()\n inserts={}\n for group in groups:\n try :\n start=actions.index(group._group_actions[0])\n except ValueError:\n continue\n else :\n end=start+len(group._group_actions)\n if actions[start:end]==group._group_actions:\n for action in group._group_actions:\n group_actions.add(action)\n if not group.required:\n if start in inserts:\n inserts[start]+=' ['\n else :\n inserts[start]='['\n if end in inserts:\n inserts[end]+=']'\n else :\n inserts[end]=']'\n else :\n if start in inserts:\n inserts[start]+=' ('\n else :\n inserts[start]='('\n if end in inserts:\n inserts[end]+=')'\n else :\n inserts[end]=')'\n for i in range(start+1,end):\n inserts[i]='|'\n \n \n parts=[]\n for i,action in enumerate(actions):\n \n \n \n if action.help is SUPPRESS:\n parts.append(None )\n if inserts.get(i)=='|':\n inserts.pop(i)\n elif inserts.get(i+1)=='|':\n inserts.pop(i+1)\n \n \n elif not action.option_strings:\n default=self._get_default_metavar_for_positional(action)\n part=self._format_args(action,default)\n \n \n if action in group_actions:\n if part[0]=='['and part[-1]==']':\n part=part[1:-1]\n \n \n parts.append(part)\n \n \n else :\n option_string=action.option_strings[0]\n \n \n \n if action.nargs ==0:\n part='%s'%option_string\n \n \n \n else :\n default=self._get_default_metavar_for_optional(action)\n args_string=self._format_args(action,default)\n part='%s %s'%(option_string,args_string)\n \n \n if not action.required and action not in group_actions:\n part='[%s]'%part\n \n \n parts.append(part)\n \n \n for i in sorted(inserts,reverse=True ):\n parts[i:i]=[inserts[i]]\n \n \n text=' '.join([item for item in parts if item is not None ])\n \n \n open=r'[\\[(]'\n close=r'[\\])]'\n text=_re.sub(r'(%s) '%open,r'\\1',text)\n text=_re.sub(r' (%s)'%close,r'\\1',text)\n text=_re.sub(r'%s *%s'%(open,close),r'',text)\n text=_re.sub(r'\\(([^|]*)\\)',r'\\1',text)\n text=text.strip()\n \n \n return text\n \n def _format_text(self,text):\n if '%(prog)'in text:\n text=text %dict(prog=self._prog)\n text_width=max(self._width -self._current_indent,11)\n indent=' '*self._current_indent\n return self._fill_text(text,text_width,indent)+'\\n\\n'\n \n def _format_action(self,action):\n \n help_position=min(self._action_max_length+2,\n self._max_help_position)\n help_width=max(self._width -help_position,11)\n action_width=help_position -self._current_indent -2\n action_header=self._format_action_invocation(action)\n \n \n if not action.help:\n tup=self._current_indent,'',action_header\n action_header='%*s%s\\n'%tup\n \n \n elif len(action_header)<=action_width:\n tup=self._current_indent,'',action_width,action_header\n action_header='%*s%-*s '%tup\n indent_first=0\n \n \n else :\n tup=self._current_indent,'',action_header\n action_header='%*s%s\\n'%tup\n indent_first=help_position\n \n \n parts=[action_header]\n \n \n if action.help:\n help_text=self._expand_help(action)\n help_lines=self._split_lines(help_text,help_width)\n parts.append('%*s%s\\n'%(indent_first,'',help_lines[0]))\n for line in help_lines[1:]:\n parts.append('%*s%s\\n'%(help_position,'',line))\n \n \n elif not action_header.endswith('\\n'):\n parts.append('\\n')\n \n \n for subaction in self._iter_indented_subactions(action):\n parts.append(self._format_action(subaction))\n \n \n return self._join_parts(parts)\n \n def _format_action_invocation(self,action):\n if not action.option_strings:\n default=self._get_default_metavar_for_positional(action)\n metavar,=self._metavar_formatter(action,default)(1)\n return metavar\n \n else :\n parts=[]\n \n \n \n if action.nargs ==0:\n parts.extend(action.option_strings)\n \n \n \n else :\n default=self._get_default_metavar_for_optional(action)\n args_string=self._format_args(action,default)\n for option_string in action.option_strings:\n parts.append('%s %s'%(option_string,args_string))\n \n return ', '.join(parts)\n \n def _metavar_formatter(self,action,default_metavar):\n if action.metavar is not None :\n result=action.metavar\n elif action.choices is not None :\n choice_strs=[str(choice)for choice in action.choices]\n result='{%s}'%','.join(choice_strs)\n else :\n result=default_metavar\n \n def format(tuple_size):\n if isinstance(result,tuple):\n return result\n else :\n return (result,)*tuple_size\n return format\n \n def _format_args(self,action,default_metavar):\n get_metavar=self._metavar_formatter(action,default_metavar)\n if action.nargs is None :\n result='%s'%get_metavar(1)\n elif action.nargs ==OPTIONAL:\n result='[%s]'%get_metavar(1)\n elif action.nargs ==ZERO_OR_MORE:\n result='[%s [%s ...]]'%get_metavar(2)\n elif action.nargs ==ONE_OR_MORE:\n result='%s [%s ...]'%get_metavar(2)\n elif action.nargs ==REMAINDER:\n result='...'\n elif action.nargs ==PARSER:\n result='%s ...'%get_metavar(1)\n elif action.nargs ==SUPPRESS:\n result=''\n else :\n try :\n formats=['%s'for _ in range(action.nargs)]\n except TypeError:\n raise ValueError(\"invalid nargs value\")from None\n result=' '.join(formats)%get_metavar(action.nargs)\n return result\n \n def _expand_help(self,action):\n params=dict(vars(action),prog=self._prog)\n for name in list(params):\n if params[name]is SUPPRESS:\n del params[name]\n for name in list(params):\n if hasattr(params[name],'__name__'):\n params[name]=params[name].__name__\n if params.get('choices')is not None :\n choices_str=', '.join([str(c)for c in params['choices']])\n params['choices']=choices_str\n return self._get_help_string(action)%params\n \n def _iter_indented_subactions(self,action):\n try :\n get_subactions=action._get_subactions\n except AttributeError:\n pass\n else :\n self._indent()\n yield from get_subactions()\n self._dedent()\n \n def _split_lines(self,text,width):\n text=self._whitespace_matcher.sub(' ',text).strip()\n \n \n import textwrap\n return textwrap.wrap(text,width)\n \n def _fill_text(self,text,width,indent):\n text=self._whitespace_matcher.sub(' ',text).strip()\n import textwrap\n return textwrap.fill(text,width,\n initial_indent=indent,\n subsequent_indent=indent)\n \n def _get_help_string(self,action):\n return action.help\n \n def _get_default_metavar_for_optional(self,action):\n return action.dest.upper()\n \n def _get_default_metavar_for_positional(self,action):\n return action.dest\n \n \nclass RawDescriptionHelpFormatter(HelpFormatter):\n ''\n\n\n\n \n \n def _fill_text(self,text,width,indent):\n return ''.join(indent+line for line in text.splitlines(keepends=True ))\n \n \nclass RawTextHelpFormatter(RawDescriptionHelpFormatter):\n ''\n\n\n\n \n \n def _split_lines(self,text,width):\n return text.splitlines()\n \n \nclass ArgumentDefaultsHelpFormatter(HelpFormatter):\n ''\n\n\n\n \n \n def _get_help_string(self,action):\n help=action.help\n if '%(default)'not in action.help:\n if action.default is not SUPPRESS:\n defaulting_nargs=[OPTIONAL,ZERO_OR_MORE]\n if action.option_strings or action.nargs in defaulting_nargs:\n help +=' (default: %(default)s)'\n return help\n \n \nclass MetavarTypeHelpFormatter(HelpFormatter):\n ''\n\n\n\n\n \n \n def _get_default_metavar_for_optional(self,action):\n return action.type.__name__\n \n def _get_default_metavar_for_positional(self,action):\n return action.type.__name__\n \n \n \n \n \n \n \ndef _get_action_name(argument):\n if argument is None :\n return None\n elif argument.option_strings:\n return '/'.join(argument.option_strings)\n elif argument.metavar not in (None ,SUPPRESS):\n return argument.metavar\n elif argument.dest not in (None ,SUPPRESS):\n return argument.dest\n else :\n return None\n \n \nclass ArgumentError(Exception):\n ''\n\n\n\n \n \n def __init__(self,argument,message):\n self.argument_name=_get_action_name(argument)\n self.message=message\n \n def __str__(self):\n if self.argument_name is None :\n format='%(message)s'\n else :\n format='argument %(argument_name)s: %(message)s'\n return format %dict(message=self.message,\n argument_name=self.argument_name)\n \n \nclass ArgumentTypeError(Exception):\n ''\n pass\n \n \n \n \n \n \nclass Action(_AttributeHolder):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n def __init__(self,\n option_strings,\n dest,\n nargs=None ,\n const=None ,\n default=None ,\n type=None ,\n choices=None ,\n required=False ,\n help=None ,\n metavar=None ):\n self.option_strings=option_strings\n self.dest=dest\n self.nargs=nargs\n self.const=const\n self.default=default\n self.type=type\n self.choices=choices\n self.required=required\n self.help=help\n self.metavar=metavar\n \n def _get_kwargs(self):\n names=[\n 'option_strings',\n 'dest',\n 'nargs',\n 'const',\n 'default',\n 'type',\n 'choices',\n 'help',\n 'metavar',\n ]\n return [(name,getattr(self,name))for name in names]\n \n def __call__(self,parser,namespace,values,option_string=None ):\n raise NotImplementedError(_('.__call__() not defined'))\n \n \nclass _StoreAction(Action):\n\n def __init__(self,\n option_strings,\n dest,\n nargs=None ,\n const=None ,\n default=None ,\n type=None ,\n choices=None ,\n required=False ,\n help=None ,\n metavar=None ):\n if nargs ==0:\n raise ValueError('nargs for store actions must be != 0; if you '\n 'have nothing to store, actions such as store '\n 'true or store const may be more appropriate')\n if const is not None and nargs !=OPTIONAL:\n raise ValueError('nargs must be %r to supply const'%OPTIONAL)\n super(_StoreAction,self).__init__(\n option_strings=option_strings,\n dest=dest,\n nargs=nargs,\n const=const,\n default=default,\n type=type,\n choices=choices,\n required=required,\n help=help,\n metavar=metavar)\n \n def __call__(self,parser,namespace,values,option_string=None ):\n setattr(namespace,self.dest,values)\n \n \nclass _StoreConstAction(Action):\n\n def __init__(self,\n option_strings,\n dest,\n const,\n default=None ,\n required=False ,\n help=None ,\n metavar=None ):\n super(_StoreConstAction,self).__init__(\n option_strings=option_strings,\n dest=dest,\n nargs=0,\n const=const,\n default=default,\n required=required,\n help=help)\n \n def __call__(self,parser,namespace,values,option_string=None ):\n setattr(namespace,self.dest,self.const)\n \n \nclass _StoreTrueAction(_StoreConstAction):\n\n def __init__(self,\n option_strings,\n dest,\n default=False ,\n required=False ,\n help=None ):\n super(_StoreTrueAction,self).__init__(\n option_strings=option_strings,\n dest=dest,\n const=True ,\n default=default,\n required=required,\n help=help)\n \n \nclass _StoreFalseAction(_StoreConstAction):\n\n def __init__(self,\n option_strings,\n dest,\n default=True ,\n required=False ,\n help=None ):\n super(_StoreFalseAction,self).__init__(\n option_strings=option_strings,\n dest=dest,\n const=False ,\n default=default,\n required=required,\n help=help)\n \n \nclass _AppendAction(Action):\n\n def __init__(self,\n option_strings,\n dest,\n nargs=None ,\n const=None ,\n default=None ,\n type=None ,\n choices=None ,\n required=False ,\n help=None ,\n metavar=None ):\n if nargs ==0:\n raise ValueError('nargs for append actions must be != 0; if arg '\n 'strings are not supplying the value to append, '\n 'the append const action may be more appropriate')\n if const is not None and nargs !=OPTIONAL:\n raise ValueError('nargs must be %r to supply const'%OPTIONAL)\n super(_AppendAction,self).__init__(\n option_strings=option_strings,\n dest=dest,\n nargs=nargs,\n const=const,\n default=default,\n type=type,\n choices=choices,\n required=required,\n help=help,\n metavar=metavar)\n \n def __call__(self,parser,namespace,values,option_string=None ):\n items=getattr(namespace,self.dest,None )\n items=_copy_items(items)\n items.append(values)\n setattr(namespace,self.dest,items)\n \n \nclass _AppendConstAction(Action):\n\n def __init__(self,\n option_strings,\n dest,\n const,\n default=None ,\n required=False ,\n help=None ,\n metavar=None ):\n super(_AppendConstAction,self).__init__(\n option_strings=option_strings,\n dest=dest,\n nargs=0,\n const=const,\n default=default,\n required=required,\n help=help,\n metavar=metavar)\n \n def __call__(self,parser,namespace,values,option_string=None ):\n items=getattr(namespace,self.dest,None )\n items=_copy_items(items)\n items.append(self.const)\n setattr(namespace,self.dest,items)\n \n \nclass _CountAction(Action):\n\n def __init__(self,\n option_strings,\n dest,\n default=None ,\n required=False ,\n help=None ):\n super(_CountAction,self).__init__(\n option_strings=option_strings,\n dest=dest,\n nargs=0,\n default=default,\n required=required,\n help=help)\n \n def __call__(self,parser,namespace,values,option_string=None ):\n count=getattr(namespace,self.dest,None )\n if count is None :\n count=0\n setattr(namespace,self.dest,count+1)\n \n \nclass _HelpAction(Action):\n\n def __init__(self,\n option_strings,\n dest=SUPPRESS,\n default=SUPPRESS,\n help=None ):\n super(_HelpAction,self).__init__(\n option_strings=option_strings,\n dest=dest,\n default=default,\n nargs=0,\n help=help)\n \n def __call__(self,parser,namespace,values,option_string=None ):\n parser.print_help()\n parser.exit()\n \n \nclass _VersionAction(Action):\n\n def __init__(self,\n option_strings,\n version=None ,\n dest=SUPPRESS,\n default=SUPPRESS,\n help=\"show program's version number and exit\"):\n super(_VersionAction,self).__init__(\n option_strings=option_strings,\n dest=dest,\n default=default,\n nargs=0,\n help=help)\n self.version=version\n \n def __call__(self,parser,namespace,values,option_string=None ):\n version=self.version\n if version is None :\n version=parser.version\n formatter=parser._get_formatter()\n formatter.add_text(version)\n parser._print_message(formatter.format_help(),_sys.stdout)\n parser.exit()\n \n \nclass _SubParsersAction(Action):\n\n class _ChoicesPseudoAction(Action):\n \n def __init__(self,name,aliases,help):\n metavar=dest=name\n if aliases:\n metavar +=' (%s)'%', '.join(aliases)\n sup=super(_SubParsersAction._ChoicesPseudoAction,self)\n sup.__init__(option_strings=[],dest=dest,help=help,\n metavar=metavar)\n \n def __init__(self,\n option_strings,\n prog,\n parser_class,\n dest=SUPPRESS,\n required=False ,\n help=None ,\n metavar=None ):\n \n self._prog_prefix=prog\n self._parser_class=parser_class\n self._name_parser_map={}\n self._choices_actions=[]\n \n super(_SubParsersAction,self).__init__(\n option_strings=option_strings,\n dest=dest,\n nargs=PARSER,\n choices=self._name_parser_map,\n required=required,\n help=help,\n metavar=metavar)\n \n def add_parser(self,name,**kwargs):\n \n if kwargs.get('prog')is None :\n kwargs['prog']='%s %s'%(self._prog_prefix,name)\n \n aliases=kwargs.pop('aliases',())\n \n \n if 'help'in kwargs:\n help=kwargs.pop('help')\n choice_action=self._ChoicesPseudoAction(name,aliases,help)\n self._choices_actions.append(choice_action)\n \n \n parser=self._parser_class(**kwargs)\n self._name_parser_map[name]=parser\n \n \n for alias in aliases:\n self._name_parser_map[alias]=parser\n \n return parser\n \n def _get_subactions(self):\n return self._choices_actions\n \n def __call__(self,parser,namespace,values,option_string=None ):\n parser_name=values[0]\n arg_strings=values[1:]\n \n \n if self.dest is not SUPPRESS:\n setattr(namespace,self.dest,parser_name)\n \n \n try :\n parser=self._name_parser_map[parser_name]\n except KeyError:\n args={'parser_name':parser_name,\n 'choices':', '.join(self._name_parser_map)}\n msg=_('unknown parser %(parser_name)r (choices: %(choices)s)')%args\n raise ArgumentError(self,msg)\n \n \n \n \n \n \n \n \n subnamespace,arg_strings=parser.parse_known_args(arg_strings,None )\n for key,value in vars(subnamespace).items():\n setattr(namespace,key,value)\n \n if arg_strings:\n vars(namespace).setdefault(_UNRECOGNIZED_ARGS_ATTR,[])\n getattr(namespace,_UNRECOGNIZED_ARGS_ATTR).extend(arg_strings)\n \nclass _ExtendAction(_AppendAction):\n def __call__(self,parser,namespace,values,option_string=None ):\n items=getattr(namespace,self.dest,None )\n items=_copy_items(items)\n items.extend(values)\n setattr(namespace,self.dest,items)\n \n \n \n \n \nclass FileType(object):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n def __init__(self,mode='r',bufsize=-1,encoding=None ,errors=None ):\n self._mode=mode\n self._bufsize=bufsize\n self._encoding=encoding\n self._errors=errors\n \n def __call__(self,string):\n \n if string =='-':\n if 'r'in self._mode:\n return _sys.stdin\n elif 'w'in self._mode:\n return _sys.stdout\n else :\n msg=_('argument \"-\" with mode %r')%self._mode\n raise ValueError(msg)\n \n \n try :\n return open(string,self._mode,self._bufsize,self._encoding,\n self._errors)\n except OSError as e:\n args={'filename':string,'error':e}\n message=_(\"can't open '%(filename)s': %(error)s\")\n raise ArgumentTypeError(message %args)\n \n def __repr__(self):\n args=self._mode,self._bufsize\n kwargs=[('encoding',self._encoding),('errors',self._errors)]\n args_str=', '.join([repr(arg)for arg in args if arg !=-1]+\n ['%s=%r'%(kw,arg)for kw,arg in kwargs\n if arg is not None ])\n return '%s(%s)'%(type(self).__name__,args_str)\n \n \n \n \n \nclass Namespace(_AttributeHolder):\n ''\n\n\n\n \n \n def __init__(self,**kwargs):\n for name in kwargs:\n setattr(self,name,kwargs[name])\n \n def __eq__(self,other):\n if not isinstance(other,Namespace):\n return NotImplemented\n return vars(self)==vars(other)\n \n def __contains__(self,key):\n return key in self.__dict__\n \n \nclass _ActionsContainer(object):\n\n def __init__(self,\n description,\n prefix_chars,\n argument_default,\n conflict_handler):\n super(_ActionsContainer,self).__init__()\n \n self.description=description\n self.argument_default=argument_default\n self.prefix_chars=prefix_chars\n self.conflict_handler=conflict_handler\n \n \n self._registries={}\n \n \n self.register('action',None ,_StoreAction)\n self.register('action','store',_StoreAction)\n self.register('action','store_const',_StoreConstAction)\n self.register('action','store_true',_StoreTrueAction)\n self.register('action','store_false',_StoreFalseAction)\n self.register('action','append',_AppendAction)\n self.register('action','append_const',_AppendConstAction)\n self.register('action','count',_CountAction)\n self.register('action','help',_HelpAction)\n self.register('action','version',_VersionAction)\n self.register('action','parsers',_SubParsersAction)\n self.register('action','extend',_ExtendAction)\n \n \n self._get_handler()\n \n \n self._actions=[]\n self._option_string_actions={}\n \n \n self._action_groups=[]\n self._mutually_exclusive_groups=[]\n \n \n self._defaults={}\n \n \n self._negative_number_matcher=_re.compile(r'^-\\d+$|^-\\d*\\.\\d+$')\n \n \n \n self._has_negative_number_optionals=[]\n \n \n \n \n def register(self,registry_name,value,object):\n registry=self._registries.setdefault(registry_name,{})\n registry[value]=object\n \n def _registry_get(self,registry_name,value,default=None ):\n return self._registries[registry_name].get(value,default)\n \n \n \n \n def set_defaults(self,**kwargs):\n self._defaults.update(kwargs)\n \n \n \n for action in self._actions:\n if action.dest in kwargs:\n action.default=kwargs[action.dest]\n \n def get_default(self,dest):\n for action in self._actions:\n if action.dest ==dest and action.default is not None :\n return action.default\n return self._defaults.get(dest,None )\n \n \n \n \n \n def add_argument(self,*args,**kwargs):\n ''\n\n\n \n \n \n \n \n chars=self.prefix_chars\n if not args or len(args)==1 and args[0][0]not in chars:\n if args and 'dest'in kwargs:\n raise ValueError('dest supplied twice for positional argument')\n kwargs=self._get_positional_kwargs(*args,**kwargs)\n \n \n else :\n kwargs=self._get_optional_kwargs(*args,**kwargs)\n \n \n if 'default'not in kwargs:\n dest=kwargs['dest']\n if dest in self._defaults:\n kwargs['default']=self._defaults[dest]\n elif self.argument_default is not None :\n kwargs['default']=self.argument_default\n \n \n action_class=self._pop_action_class(kwargs)\n if not callable(action_class):\n raise ValueError('unknown action \"%s\"'%(action_class,))\n action=action_class(**kwargs)\n \n \n type_func=self._registry_get('type',action.type,action.type)\n if not callable(type_func):\n raise ValueError('%r is not callable'%(type_func,))\n \n if type_func is FileType:\n raise ValueError('%r is a FileType class object, instance of it'\n ' must be passed'%(type_func,))\n \n \n if hasattr(self,\"_get_formatter\"):\n try :\n self._get_formatter()._format_args(action,None )\n except TypeError:\n raise ValueError(\"length of metavar tuple does not match nargs\")\n \n return self._add_action(action)\n \n def add_argument_group(self,*args,**kwargs):\n group=_ArgumentGroup(self,*args,**kwargs)\n self._action_groups.append(group)\n return group\n \n def add_mutually_exclusive_group(self,**kwargs):\n group=_MutuallyExclusiveGroup(self,**kwargs)\n self._mutually_exclusive_groups.append(group)\n return group\n \n def _add_action(self,action):\n \n self._check_conflict(action)\n \n \n self._actions.append(action)\n action.container=self\n \n \n for option_string in action.option_strings:\n self._option_string_actions[option_string]=action\n \n \n for option_string in action.option_strings:\n if self._negative_number_matcher.match(option_string):\n if not self._has_negative_number_optionals:\n self._has_negative_number_optionals.append(True )\n \n \n return action\n \n def _remove_action(self,action):\n self._actions.remove(action)\n \n def _add_container_actions(self,container):\n \n title_group_map={}\n for group in self._action_groups:\n if group.title in title_group_map:\n msg=_('cannot merge actions - two groups are named %r')\n raise ValueError(msg %(group.title))\n title_group_map[group.title]=group\n \n \n group_map={}\n for group in container._action_groups:\n \n \n \n if group.title not in title_group_map:\n title_group_map[group.title]=self.add_argument_group(\n title=group.title,\n description=group.description,\n conflict_handler=group.conflict_handler)\n \n \n for action in group._group_actions:\n group_map[action]=title_group_map[group.title]\n \n \n \n \n for group in container._mutually_exclusive_groups:\n mutex_group=self.add_mutually_exclusive_group(\n required=group.required)\n \n \n for action in group._group_actions:\n group_map[action]=mutex_group\n \n \n for action in container._actions:\n group_map.get(action,self)._add_action(action)\n \n def _get_positional_kwargs(self,dest,**kwargs):\n \n if 'required'in kwargs:\n msg=_(\"'required' is an invalid argument for positionals\")\n raise TypeError(msg)\n \n \n \n if kwargs.get('nargs')not in [OPTIONAL,ZERO_OR_MORE]:\n kwargs['required']=True\n if kwargs.get('nargs')==ZERO_OR_MORE and 'default'not in kwargs:\n kwargs['required']=True\n \n \n return dict(kwargs,dest=dest,option_strings=[])\n \n def _get_optional_kwargs(self,*args,**kwargs):\n \n option_strings=[]\n long_option_strings=[]\n for option_string in args:\n \n if not option_string[0]in self.prefix_chars:\n args={'option':option_string,\n 'prefix_chars':self.prefix_chars}\n msg=_('invalid option string %(option)r: '\n 'must start with a character %(prefix_chars)r')\n raise ValueError(msg %args)\n \n \n option_strings.append(option_string)\n if option_string[0]in self.prefix_chars:\n if len(option_string)>1:\n if option_string[1]in self.prefix_chars:\n long_option_strings.append(option_string)\n \n \n dest=kwargs.pop('dest',None )\n if dest is None :\n if long_option_strings:\n dest_option_string=long_option_strings[0]\n else :\n dest_option_string=option_strings[0]\n dest=dest_option_string.lstrip(self.prefix_chars)\n if not dest:\n msg=_('dest= is required for options like %r')\n raise ValueError(msg %option_string)\n dest=dest.replace('-','_')\n \n \n return dict(kwargs,dest=dest,option_strings=option_strings)\n \n def _pop_action_class(self,kwargs,default=None ):\n action=kwargs.pop('action',default)\n return self._registry_get('action',action,action)\n \n def _get_handler(self):\n \n handler_func_name='_handle_conflict_%s'%self.conflict_handler\n try :\n return getattr(self,handler_func_name)\n except AttributeError:\n msg=_('invalid conflict_resolution value: %r')\n raise ValueError(msg %self.conflict_handler)\n \n def _check_conflict(self,action):\n \n \n confl_optionals=[]\n for option_string in action.option_strings:\n if option_string in self._option_string_actions:\n confl_optional=self._option_string_actions[option_string]\n confl_optionals.append((option_string,confl_optional))\n \n \n if confl_optionals:\n conflict_handler=self._get_handler()\n conflict_handler(action,confl_optionals)\n \n def _handle_conflict_error(self,action,conflicting_actions):\n message=ngettext('conflicting option string: %s',\n 'conflicting option strings: %s',\n len(conflicting_actions))\n conflict_string=', '.join([option_string\n for option_string,action\n in conflicting_actions])\n raise ArgumentError(action,message %conflict_string)\n \n def _handle_conflict_resolve(self,action,conflicting_actions):\n \n \n for option_string,action in conflicting_actions:\n \n \n action.option_strings.remove(option_string)\n self._option_string_actions.pop(option_string,None )\n \n \n \n if not action.option_strings:\n action.container._remove_action(action)\n \n \nclass _ArgumentGroup(_ActionsContainer):\n\n def __init__(self,container,title=None ,description=None ,**kwargs):\n \n update=kwargs.setdefault\n update('conflict_handler',container.conflict_handler)\n update('prefix_chars',container.prefix_chars)\n update('argument_default',container.argument_default)\n super_init=super(_ArgumentGroup,self).__init__\n super_init(description=description,**kwargs)\n \n \n self.title=title\n self._group_actions=[]\n \n \n self._registries=container._registries\n self._actions=container._actions\n self._option_string_actions=container._option_string_actions\n self._defaults=container._defaults\n self._has_negative_number_optionals=\\\n container._has_negative_number_optionals\n self._mutually_exclusive_groups=container._mutually_exclusive_groups\n \n def _add_action(self,action):\n action=super(_ArgumentGroup,self)._add_action(action)\n self._group_actions.append(action)\n return action\n \n def _remove_action(self,action):\n super(_ArgumentGroup,self)._remove_action(action)\n self._group_actions.remove(action)\n \n \nclass _MutuallyExclusiveGroup(_ArgumentGroup):\n\n def __init__(self,container,required=False ):\n super(_MutuallyExclusiveGroup,self).__init__(container)\n self.required=required\n self._container=container\n \n def _add_action(self,action):\n if action.required:\n msg=_('mutually exclusive arguments must be optional')\n raise ValueError(msg)\n action=self._container._add_action(action)\n self._group_actions.append(action)\n return action\n \n def _remove_action(self,action):\n self._container._remove_action(action)\n self._group_actions.remove(action)\n \n \nclass ArgumentParser(_AttributeHolder,_ActionsContainer):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n def __init__(self,\n prog=None ,\n usage=None ,\n description=None ,\n epilog=None ,\n parents=[],\n formatter_class=HelpFormatter,\n prefix_chars='-',\n fromfile_prefix_chars=None ,\n argument_default=None ,\n conflict_handler='error',\n add_help=True ,\n allow_abbrev=True ):\n \n superinit=super(ArgumentParser,self).__init__\n superinit(description=description,\n prefix_chars=prefix_chars,\n argument_default=argument_default,\n conflict_handler=conflict_handler)\n \n \n if prog is None :\n prog=_os.path.basename(_sys.argv[0])\n \n self.prog=prog\n self.usage=usage\n self.epilog=epilog\n self.formatter_class=formatter_class\n self.fromfile_prefix_chars=fromfile_prefix_chars\n self.add_help=add_help\n self.allow_abbrev=allow_abbrev\n \n add_group=self.add_argument_group\n self._positionals=add_group(_('positional arguments'))\n self._optionals=add_group(_('optional arguments'))\n self._subparsers=None\n \n \n def identity(string):\n return string\n self.register('type',None ,identity)\n \n \n \n default_prefix='-'if '-'in prefix_chars else prefix_chars[0]\n if self.add_help:\n self.add_argument(\n default_prefix+'h',default_prefix *2+'help',\n action='help',default=SUPPRESS,\n help=_('show this help message and exit'))\n \n \n for parent in parents:\n self._add_container_actions(parent)\n try :\n defaults=parent._defaults\n except AttributeError:\n pass\n else :\n self._defaults.update(defaults)\n \n \n \n \n def _get_kwargs(self):\n names=[\n 'prog',\n 'usage',\n 'description',\n 'formatter_class',\n 'conflict_handler',\n 'add_help',\n ]\n return [(name,getattr(self,name))for name in names]\n \n \n \n \n def add_subparsers(self,**kwargs):\n if self._subparsers is not None :\n self.error(_('cannot have multiple subparser arguments'))\n \n \n kwargs.setdefault('parser_class',type(self))\n \n if 'title'in kwargs or 'description'in kwargs:\n title=_(kwargs.pop('title','subcommands'))\n description=_(kwargs.pop('description',None ))\n self._subparsers=self.add_argument_group(title,description)\n else :\n self._subparsers=self._positionals\n \n \n \n if kwargs.get('prog')is None :\n formatter=self._get_formatter()\n positionals=self._get_positional_actions()\n groups=self._mutually_exclusive_groups\n formatter.add_usage(self.usage,positionals,groups,'')\n kwargs['prog']=formatter.format_help().strip()\n \n \n parsers_class=self._pop_action_class(kwargs,'parsers')\n action=parsers_class(option_strings=[],**kwargs)\n self._subparsers._add_action(action)\n \n \n return action\n \n def _add_action(self,action):\n if action.option_strings:\n self._optionals._add_action(action)\n else :\n self._positionals._add_action(action)\n return action\n \n def _get_optional_actions(self):\n return [action\n for action in self._actions\n if action.option_strings]\n \n def _get_positional_actions(self):\n return [action\n for action in self._actions\n if not action.option_strings]\n \n \n \n \n def parse_args(self,args=None ,namespace=None ):\n args,argv=self.parse_known_args(args,namespace)\n if argv:\n msg=_('unrecognized arguments: %s')\n self.error(msg %' '.join(argv))\n return args\n \n def parse_known_args(self,args=None ,namespace=None ):\n if args is None :\n \n args=_sys.argv[1:]\n else :\n \n args=list(args)\n \n \n if namespace is None :\n namespace=Namespace()\n \n \n for action in self._actions:\n if action.dest is not SUPPRESS:\n if not hasattr(namespace,action.dest):\n if action.default is not SUPPRESS:\n setattr(namespace,action.dest,action.default)\n \n \n for dest in self._defaults:\n if not hasattr(namespace,dest):\n setattr(namespace,dest,self._defaults[dest])\n \n \n try :\n namespace,args=self._parse_known_args(args,namespace)\n if hasattr(namespace,_UNRECOGNIZED_ARGS_ATTR):\n args.extend(getattr(namespace,_UNRECOGNIZED_ARGS_ATTR))\n delattr(namespace,_UNRECOGNIZED_ARGS_ATTR)\n return namespace,args\n except ArgumentError:\n err=_sys.exc_info()[1]\n self.error(str(err))\n \n def _parse_known_args(self,arg_strings,namespace):\n \n if self.fromfile_prefix_chars is not None :\n arg_strings=self._read_args_from_files(arg_strings)\n \n \n \n action_conflicts={}\n for mutex_group in self._mutually_exclusive_groups:\n group_actions=mutex_group._group_actions\n for i,mutex_action in enumerate(mutex_group._group_actions):\n conflicts=action_conflicts.setdefault(mutex_action,[])\n conflicts.extend(group_actions[:i])\n conflicts.extend(group_actions[i+1:])\n \n \n \n \n option_string_indices={}\n arg_string_pattern_parts=[]\n arg_strings_iter=iter(arg_strings)\n for i,arg_string in enumerate(arg_strings_iter):\n \n \n if arg_string =='--':\n arg_string_pattern_parts.append('-')\n for arg_string in arg_strings_iter:\n arg_string_pattern_parts.append('A')\n \n \n \n else :\n option_tuple=self._parse_optional(arg_string)\n if option_tuple is None :\n pattern='A'\n else :\n option_string_indices[i]=option_tuple\n pattern='O'\n arg_string_pattern_parts.append(pattern)\n \n \n arg_strings_pattern=''.join(arg_string_pattern_parts)\n \n \n seen_actions=set()\n seen_non_default_actions=set()\n \n def take_action(action,argument_strings,option_string=None ):\n seen_actions.add(action)\n argument_values=self._get_values(action,argument_strings)\n \n \n \n \n if argument_values is not action.default:\n seen_non_default_actions.add(action)\n for conflict_action in action_conflicts.get(action,[]):\n if conflict_action in seen_non_default_actions:\n msg=_('not allowed with argument %s')\n action_name=_get_action_name(conflict_action)\n raise ArgumentError(action,msg %action_name)\n \n \n \n if argument_values is not SUPPRESS:\n action(self,namespace,argument_values,option_string)\n \n \n def consume_optional(start_index):\n \n \n option_tuple=option_string_indices[start_index]\n action,option_string,explicit_arg=option_tuple\n \n \n \n match_argument=self._match_argument\n action_tuples=[]\n while True :\n \n \n if action is None :\n extras.append(arg_strings[start_index])\n return start_index+1\n \n \n \n if explicit_arg is not None :\n arg_count=match_argument(action,'A')\n \n \n \n \n chars=self.prefix_chars\n if arg_count ==0 and option_string[1]not in chars:\n action_tuples.append((action,[],option_string))\n char=option_string[0]\n option_string=char+explicit_arg[0]\n new_explicit_arg=explicit_arg[1:]or None\n optionals_map=self._option_string_actions\n if option_string in optionals_map:\n action=optionals_map[option_string]\n explicit_arg=new_explicit_arg\n else :\n msg=_('ignored explicit argument %r')\n raise ArgumentError(action,msg %explicit_arg)\n \n \n \n elif arg_count ==1:\n stop=start_index+1\n args=[explicit_arg]\n action_tuples.append((action,args,option_string))\n break\n \n \n \n else :\n msg=_('ignored explicit argument %r')\n raise ArgumentError(action,msg %explicit_arg)\n \n \n \n \n else :\n start=start_index+1\n selected_patterns=arg_strings_pattern[start:]\n arg_count=match_argument(action,selected_patterns)\n stop=start+arg_count\n args=arg_strings[start:stop]\n action_tuples.append((action,args,option_string))\n break\n \n \n \n assert action_tuples\n for action,args,option_string in action_tuples:\n take_action(action,args,option_string)\n return stop\n \n \n \n positionals=self._get_positional_actions()\n \n \n def consume_positionals(start_index):\n \n match_partial=self._match_arguments_partial\n selected_pattern=arg_strings_pattern[start_index:]\n arg_counts=match_partial(positionals,selected_pattern)\n \n \n \n for action,arg_count in zip(positionals,arg_counts):\n args=arg_strings[start_index:start_index+arg_count]\n start_index +=arg_count\n take_action(action,args)\n \n \n \n positionals[:]=positionals[len(arg_counts):]\n return start_index\n \n \n \n extras=[]\n start_index=0\n if option_string_indices:\n max_option_string_index=max(option_string_indices)\n else :\n max_option_string_index=-1\n while start_index <=max_option_string_index:\n \n \n next_option_string_index=min([\n index\n for index in option_string_indices\n if index >=start_index])\n if start_index !=next_option_string_index:\n positionals_end_index=consume_positionals(start_index)\n \n \n \n if positionals_end_index >start_index:\n start_index=positionals_end_index\n continue\n else :\n start_index=positionals_end_index\n \n \n \n if start_index not in option_string_indices:\n strings=arg_strings[start_index:next_option_string_index]\n extras.extend(strings)\n start_index=next_option_string_index\n \n \n start_index=consume_optional(start_index)\n \n \n stop_index=consume_positionals(start_index)\n \n \n extras.extend(arg_strings[stop_index:])\n \n \n \n required_actions=[]\n for action in self._actions:\n if action not in seen_actions:\n if action.required:\n required_actions.append(_get_action_name(action))\n else :\n \n \n \n \n if (action.default is not None and\n isinstance(action.default,str)and\n hasattr(namespace,action.dest)and\n action.default is getattr(namespace,action.dest)):\n setattr(namespace,action.dest,\n self._get_value(action,action.default))\n \n if required_actions:\n self.error(_('the following arguments are required: %s')%\n ', '.join(required_actions))\n \n \n for group in self._mutually_exclusive_groups:\n if group.required:\n for action in group._group_actions:\n if action in seen_non_default_actions:\n break\n \n \n else :\n names=[_get_action_name(action)\n for action in group._group_actions\n if action.help is not SUPPRESS]\n msg=_('one of the arguments %s is required')\n self.error(msg %' '.join(names))\n \n \n return namespace,extras\n \n def _read_args_from_files(self,arg_strings):\n \n new_arg_strings=[]\n for arg_string in arg_strings:\n \n \n if not arg_string or arg_string[0]not in self.fromfile_prefix_chars:\n new_arg_strings.append(arg_string)\n \n \n else :\n try :\n with open(arg_string[1:])as args_file:\n arg_strings=[]\n for arg_line in args_file.read().splitlines():\n for arg in self.convert_arg_line_to_args(arg_line):\n arg_strings.append(arg)\n arg_strings=self._read_args_from_files(arg_strings)\n new_arg_strings.extend(arg_strings)\n except OSError:\n err=_sys.exc_info()[1]\n self.error(str(err))\n \n \n return new_arg_strings\n \n def convert_arg_line_to_args(self,arg_line):\n return [arg_line]\n \n def _match_argument(self,action,arg_strings_pattern):\n \n nargs_pattern=self._get_nargs_pattern(action)\n match=_re.match(nargs_pattern,arg_strings_pattern)\n \n \n if match is None :\n nargs_errors={\n None :_('expected one argument'),\n OPTIONAL:_('expected at most one argument'),\n ONE_OR_MORE:_('expected at least one argument'),\n }\n default=ngettext('expected %s argument',\n 'expected %s arguments',\n action.nargs)%action.nargs\n msg=nargs_errors.get(action.nargs,default)\n raise ArgumentError(action,msg)\n \n \n return len(match.group(1))\n \n def _match_arguments_partial(self,actions,arg_strings_pattern):\n \n \n result=[]\n for i in range(len(actions),0,-1):\n actions_slice=actions[:i]\n pattern=''.join([self._get_nargs_pattern(action)\n for action in actions_slice])\n match=_re.match(pattern,arg_strings_pattern)\n if match is not None :\n result.extend([len(string)for string in match.groups()])\n break\n \n \n return result\n \n def _parse_optional(self,arg_string):\n \n if not arg_string:\n return None\n \n \n if not arg_string[0]in self.prefix_chars:\n return None\n \n \n if arg_string in self._option_string_actions:\n action=self._option_string_actions[arg_string]\n return action,arg_string,None\n \n \n if len(arg_string)==1:\n return None\n \n \n if '='in arg_string:\n option_string,explicit_arg=arg_string.split('=',1)\n if option_string in self._option_string_actions:\n action=self._option_string_actions[option_string]\n return action,option_string,explicit_arg\n \n if self.allow_abbrev or not arg_string.startswith('--'):\n \n \n option_tuples=self._get_option_tuples(arg_string)\n \n \n if len(option_tuples)>1:\n options=', '.join([option_string\n for action,option_string,explicit_arg in option_tuples])\n args={'option':arg_string,'matches':options}\n msg=_('ambiguous option: %(option)s could match %(matches)s')\n self.error(msg %args)\n \n \n \n elif len(option_tuples)==1:\n option_tuple,=option_tuples\n return option_tuple\n \n \n \n \n if self._negative_number_matcher.match(arg_string):\n if not self._has_negative_number_optionals:\n return None\n \n \n if ' 'in arg_string:\n return None\n \n \n \n return None ,arg_string,None\n \n def _get_option_tuples(self,option_string):\n result=[]\n \n \n \n chars=self.prefix_chars\n if option_string[0]in chars and option_string[1]in chars:\n if '='in option_string:\n option_prefix,explicit_arg=option_string.split('=',1)\n else :\n option_prefix=option_string\n explicit_arg=None\n for option_string in self._option_string_actions:\n if option_string.startswith(option_prefix):\n action=self._option_string_actions[option_string]\n tup=action,option_string,explicit_arg\n result.append(tup)\n \n \n \n \n elif option_string[0]in chars and option_string[1]not in chars:\n option_prefix=option_string\n explicit_arg=None\n short_option_prefix=option_string[:2]\n short_explicit_arg=option_string[2:]\n \n for option_string in self._option_string_actions:\n if option_string ==short_option_prefix:\n action=self._option_string_actions[option_string]\n tup=action,option_string,short_explicit_arg\n result.append(tup)\n elif option_string.startswith(option_prefix):\n action=self._option_string_actions[option_string]\n tup=action,option_string,explicit_arg\n result.append(tup)\n \n \n else :\n self.error(_('unexpected option string: %s')%option_string)\n \n \n return result\n \n def _get_nargs_pattern(self,action):\n \n \n nargs=action.nargs\n \n \n if nargs is None :\n nargs_pattern='(-*A-*)'\n \n \n elif nargs ==OPTIONAL:\n nargs_pattern='(-*A?-*)'\n \n \n elif nargs ==ZERO_OR_MORE:\n nargs_pattern='(-*[A-]*)'\n \n \n elif nargs ==ONE_OR_MORE:\n nargs_pattern='(-*A[A-]*)'\n \n \n elif nargs ==REMAINDER:\n nargs_pattern='([-AO]*)'\n \n \n elif nargs ==PARSER:\n nargs_pattern='(-*A[-AO]*)'\n \n \n elif nargs ==SUPPRESS:\n nargs_pattern='(-*-*)'\n \n \n else :\n nargs_pattern='(-*%s-*)'%'-*'.join('A'*nargs)\n \n \n if action.option_strings:\n nargs_pattern=nargs_pattern.replace('-*','')\n nargs_pattern=nargs_pattern.replace('-','')\n \n \n return nargs_pattern\n \n \n \n \n \n def parse_intermixed_args(self,args=None ,namespace=None ):\n args,argv=self.parse_known_intermixed_args(args,namespace)\n if argv:\n msg=_('unrecognized arguments: %s')\n self.error(msg %' '.join(argv))\n return args\n \n def parse_known_intermixed_args(self,args=None ,namespace=None ):\n \n \n \n \n \n \n \n \n \n \n \n \n positionals=self._get_positional_actions()\n a=[action for action in positionals\n if action.nargs in [PARSER,REMAINDER]]\n if a:\n raise TypeError('parse_intermixed_args: positional arg'\n ' with nargs=%s'%a[0].nargs)\n \n if [action.dest for group in self._mutually_exclusive_groups\n for action in group._group_actions if action in positionals]:\n raise TypeError('parse_intermixed_args: positional in'\n ' mutuallyExclusiveGroup')\n \n try :\n save_usage=self.usage\n try :\n if self.usage is None :\n \n self.usage=self.format_usage()[7:]\n for action in positionals:\n \n action.save_nargs=action.nargs\n \n action.nargs=SUPPRESS\n action.save_default=action.default\n action.default=SUPPRESS\n namespace,remaining_args=self.parse_known_args(args,\n namespace)\n for action in positionals:\n \n if (hasattr(namespace,action.dest)\n and getattr(namespace,action.dest)==[]):\n from warnings import warn\n warn('Do not expect %s in %s'%(action.dest,namespace))\n delattr(namespace,action.dest)\n finally :\n \n for action in positionals:\n action.nargs=action.save_nargs\n action.default=action.save_default\n optionals=self._get_optional_actions()\n try :\n \n \n for action in optionals:\n action.save_required=action.required\n action.required=False\n for group in self._mutually_exclusive_groups:\n group.save_required=group.required\n group.required=False\n namespace,extras=self.parse_known_args(remaining_args,\n namespace)\n finally :\n \n for action in optionals:\n action.required=action.save_required\n for group in self._mutually_exclusive_groups:\n group.required=group.save_required\n finally :\n self.usage=save_usage\n return namespace,extras\n \n \n \n \n def _get_values(self,action,arg_strings):\n \n if action.nargs not in [PARSER,REMAINDER]:\n try :\n arg_strings.remove('--')\n except ValueError:\n pass\n \n \n if not arg_strings and action.nargs ==OPTIONAL:\n if action.option_strings:\n value=action.const\n else :\n value=action.default\n if isinstance(value,str):\n value=self._get_value(action,value)\n self._check_value(action,value)\n \n \n \n elif (not arg_strings and action.nargs ==ZERO_OR_MORE and\n not action.option_strings):\n if action.default is not None :\n value=action.default\n else :\n value=arg_strings\n self._check_value(action,value)\n \n \n elif len(arg_strings)==1 and action.nargs in [None ,OPTIONAL]:\n arg_string,=arg_strings\n value=self._get_value(action,arg_string)\n self._check_value(action,value)\n \n \n elif action.nargs ==REMAINDER:\n value=[self._get_value(action,v)for v in arg_strings]\n \n \n elif action.nargs ==PARSER:\n value=[self._get_value(action,v)for v in arg_strings]\n self._check_value(action,value[0])\n \n \n elif action.nargs ==SUPPRESS:\n value=SUPPRESS\n \n \n else :\n value=[self._get_value(action,v)for v in arg_strings]\n for v in value:\n self._check_value(action,v)\n \n \n return value\n \n def _get_value(self,action,arg_string):\n type_func=self._registry_get('type',action.type,action.type)\n if not callable(type_func):\n msg=_('%r is not callable')\n raise ArgumentError(action,msg %type_func)\n \n \n try :\n result=type_func(arg_string)\n \n \n except ArgumentTypeError:\n name=getattr(action.type,'__name__',repr(action.type))\n msg=str(_sys.exc_info()[1])\n raise ArgumentError(action,msg)\n \n \n except (TypeError,ValueError):\n name=getattr(action.type,'__name__',repr(action.type))\n args={'type':name,'value':arg_string}\n msg=_('invalid %(type)s value: %(value)r')\n raise ArgumentError(action,msg %args)\n \n \n return result\n \n def _check_value(self,action,value):\n \n if action.choices is not None and value not in action.choices:\n args={'value':value,\n 'choices':', '.join(map(repr,action.choices))}\n msg=_('invalid choice: %(value)r (choose from %(choices)s)')\n raise ArgumentError(action,msg %args)\n \n \n \n \n def format_usage(self):\n formatter=self._get_formatter()\n formatter.add_usage(self.usage,self._actions,\n self._mutually_exclusive_groups)\n return formatter.format_help()\n \n def format_help(self):\n formatter=self._get_formatter()\n \n \n formatter.add_usage(self.usage,self._actions,\n self._mutually_exclusive_groups)\n \n \n formatter.add_text(self.description)\n \n \n for action_group in self._action_groups:\n formatter.start_section(action_group.title)\n formatter.add_text(action_group.description)\n formatter.add_arguments(action_group._group_actions)\n formatter.end_section()\n \n \n formatter.add_text(self.epilog)\n \n \n return formatter.format_help()\n \n def _get_formatter(self):\n return self.formatter_class(prog=self.prog)\n \n \n \n \n def print_usage(self,file=None ):\n if file is None :\n file=_sys.stdout\n self._print_message(self.format_usage(),file)\n \n def print_help(self,file=None ):\n if file is None :\n file=_sys.stdout\n self._print_message(self.format_help(),file)\n \n def _print_message(self,message,file=None ):\n if message:\n if file is None :\n file=_sys.stderr\n file.write(message)\n \n \n \n \n def exit(self,status=0,message=None ):\n if message:\n self._print_message(message,_sys.stderr)\n _sys.exit(status)\n \n def error(self,message):\n ''\n\n\n\n\n\n\n \n self.print_usage(_sys.stderr)\n args={'prog':self.prog,'message':message}\n self.exit(2,_('%(prog)s: error: %(message)s\\n')%args)\n", ["copy", "gettext", "os", "re", "shutil", "sys", "textwrap", "warnings"]], "atexit": [".py", "''\n\n\n\n\n\nclass __loader__(object):\n pass\n \ndef _clear(*args,**kw):\n ''\n \n pass\n \ndef _run_exitfuncs(*args,**kw):\n ''\n \n pass\n \ndef register(*args,**kw):\n ''\n\n\n\n\n\n\n \n pass\n \ndef unregister(*args,**kw):\n ''\n\n\n\n \n pass\n", []], "base64": [".py", "#! /usr/bin/env python3\n\n\"\"\"Base16, Base32, Base64 (RFC 3548), Base85 and Ascii85 data encodings\"\"\"\n\n\n\n\n\nimport re\nimport struct\nimport binascii\n\n\n__all__=[\n\n'encode','decode','encodebytes','decodebytes',\n\n'b64encode','b64decode','b32encode','b32decode',\n'b16encode','b16decode',\n\n'b85encode','b85decode','a85encode','a85decode',\n\n'standard_b64encode','standard_b64decode',\n\n\n\n\n'urlsafe_b64encode','urlsafe_b64decode',\n]\n\n\nbytes_types=(bytes,bytearray)\n\ndef _bytes_from_decode_data(s):\n if isinstance(s,str):\n try :\n return s.encode('ascii')\n except UnicodeEncodeError:\n raise ValueError('string argument should contain only ASCII characters')\n if isinstance(s,bytes_types):\n return s\n try :\n return memoryview(s).tobytes()\n except TypeError:\n raise TypeError(\"argument should be a bytes-like object or ASCII \"\n \"string, not %r\"%s.__class__.__name__)from None\n \n \n \n \ndef b64encode(s,altchars=None ):\n ''\n\n\n\n\n \n encoded=binascii.b2a_base64(s,newline=False )\n if altchars is not None :\n assert len(altchars)==2,repr(altchars)\n return encoded.translate(bytes.maketrans(b'+/',altchars))\n return encoded\n \n \ndef b64decode(s,altchars=None ,validate=False ):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n \n s=_bytes_from_decode_data(s)\n if altchars is not None :\n altchars=_bytes_from_decode_data(altchars)\n assert len(altchars)==2,repr(altchars)\n s=s.translate(bytes.maketrans(altchars,b'+/'))\n if validate and not re.match(b'^[A-Za-z0-9+/]*={0,2}$',s):\n raise binascii.Error('Non-base64 digit found')\n return binascii.a2b_base64(s)\n \n \ndef standard_b64encode(s):\n ''\n\n\n \n return b64encode(s)\n \ndef standard_b64decode(s):\n ''\n\n\n\n\n\n \n return b64decode(s)\n \n \n_urlsafe_encode_translation=bytes.maketrans(b'+/',b'-_')\n_urlsafe_decode_translation=bytes.maketrans(b'-_',b'+/')\n\ndef urlsafe_b64encode(s):\n ''\n\n\n\n\n \n return b64encode(s).translate(_urlsafe_encode_translation)\n \ndef urlsafe_b64decode(s):\n ''\n\n\n\n\n\n\n\n\n \n s=_bytes_from_decode_data(s)\n s=s.translate(_urlsafe_decode_translation)\n return b64decode(s)\n \n \n \n \n_b32alphabet=b'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567'\n_b32tab2=None\n_b32rev=None\n\ndef b32encode(s):\n ''\n \n global _b32tab2\n \n \n if _b32tab2 is None :\n b32tab=[bytes((i,))for i in _b32alphabet]\n _b32tab2=[a+b for a in b32tab for b in b32tab]\n b32tab=None\n \n if not isinstance(s,bytes_types):\n s=memoryview(s).tobytes()\n leftover=len(s)%5\n \n if leftover:\n s=s+b'\\0'*(5 -leftover)\n encoded=bytearray()\n from_bytes=int.from_bytes\n b32tab2=_b32tab2\n for i in range(0,len(s),5):\n c=from_bytes(s[i:i+5],'big')\n encoded +=(b32tab2[c >>30]+\n b32tab2[(c >>20)&0x3ff]+\n b32tab2[(c >>10)&0x3ff]+\n b32tab2[c&0x3ff]\n )\n \n if leftover ==1:\n encoded[-6:]=b'======'\n elif leftover ==2:\n encoded[-4:]=b'===='\n elif leftover ==3:\n encoded[-3:]=b'==='\n elif leftover ==4:\n encoded[-1:]=b'='\n return bytes(encoded)\n \ndef b32decode(s,casefold=False ,map01=None ):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n global _b32rev\n \n \n if _b32rev is None :\n _b32rev={v:k for k,v in enumerate(_b32alphabet)}\n s=_bytes_from_decode_data(s)\n if len(s)%8:\n raise binascii.Error('Incorrect padding')\n \n \n \n if map01 is not None :\n map01=_bytes_from_decode_data(map01)\n assert len(map01)==1,repr(map01)\n s=s.translate(bytes.maketrans(b'01',b'O'+map01))\n if casefold:\n s=s.upper()\n \n \n \n l=len(s)\n s=s.rstrip(b'=')\n padchars=l -len(s)\n \n decoded=bytearray()\n b32rev=_b32rev\n for i in range(0,len(s),8):\n quanta=s[i:i+8]\n acc=0\n try :\n for c in quanta:\n acc=(acc <<5)+b32rev[c]\n except KeyError:\n raise binascii.Error('Non-base32 digit found')from None\n decoded +=acc.to_bytes(5,'big')\n \n if l %8 or padchars not in {0,1,3,4,6}:\n raise binascii.Error('Incorrect padding')\n if padchars and decoded:\n acc <<=5 *padchars\n last=acc.to_bytes(5,'big')\n leftover=(43 -5 *padchars)//8\n decoded[-5:]=last[:leftover]\n return bytes(decoded)\n \n \n \n \n \ndef b16encode(s):\n ''\n \n return binascii.hexlify(s).upper()\n \n \ndef b16decode(s,casefold=False ):\n ''\n\n\n\n\n\n\n\n \n s=_bytes_from_decode_data(s)\n if casefold:\n s=s.upper()\n if re.search(b'[^0-9A-F]',s):\n raise binascii.Error('Non-base16 digit found')\n return binascii.unhexlify(s)\n \n \n \n \n \n_a85chars=None\n_a85chars2=None\n_A85START=b\"<~\"\n_A85END=b\"~>\"\n\ndef _85encode(b,chars,chars2,pad=False ,foldnuls=False ,foldspaces=False ):\n\n if not isinstance(b,bytes_types):\n b=memoryview(b).tobytes()\n \n padding=(-len(b))%4\n if padding:\n b=b+b'\\0'*padding\n words=struct.Struct('!%dI'%(len(b)//4)).unpack(b)\n \n chunks=[b'z'if foldnuls and not word else\n b'y'if foldspaces and word ==0x20202020 else\n (chars2[word //614125]+\n chars2[word //85 %7225]+\n chars[word %85])\n for word in words]\n \n if padding and not pad:\n if chunks[-1]==b'z':\n chunks[-1]=chars[0]*5\n chunks[-1]=chunks[-1][:-padding]\n \n return b''.join(chunks)\n \ndef a85encode(b,*,foldspaces=False ,wrapcol=0,pad=False ,adobe=False ):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n global _a85chars,_a85chars2\n \n \n if _a85chars is None :\n _a85chars=[bytes((i,))for i in range(33,118)]\n _a85chars2=[(a+b)for a in _a85chars for b in _a85chars]\n \n result=_85encode(b,_a85chars,_a85chars2,pad,True ,foldspaces)\n \n if adobe:\n result=_A85START+result\n if wrapcol:\n wrapcol=max(2 if adobe else 1,wrapcol)\n chunks=[result[i:i+wrapcol]\n for i in range(0,len(result),wrapcol)]\n if adobe:\n if len(chunks[-1])+2 >wrapcol:\n chunks.append(b'')\n result=b'\\n'.join(chunks)\n if adobe:\n result +=_A85END\n \n return result\n \ndef a85decode(b,*,foldspaces=False ,adobe=False ,ignorechars=b' \\t\\n\\r\\v'):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n b=_bytes_from_decode_data(b)\n if adobe:\n if not b.endswith(_A85END):\n raise ValueError(\n \"Ascii85 encoded byte sequences must end \"\n \"with {!r}\".format(_A85END)\n )\n if b.startswith(_A85START):\n b=b[2:-2]\n else :\n b=b[:-2]\n \n \n \n \n packI=struct.Struct('!I').pack\n decoded=[]\n decoded_append=decoded.append\n curr=[]\n curr_append=curr.append\n curr_clear=curr.clear\n for x in b+b'u'*4:\n if b'!'[0]<=x <=b'u'[0]:\n curr_append(x)\n if len(curr)==5:\n acc=0\n for x in curr:\n acc=85 *acc+(x -33)\n try :\n decoded_append(packI(acc))\n except struct.error:\n raise ValueError('Ascii85 overflow')from None\n curr_clear()\n elif x ==b'z'[0]:\n if curr:\n raise ValueError('z inside Ascii85 5-tuple')\n decoded_append(b'\\0\\0\\0\\0')\n elif foldspaces and x ==b'y'[0]:\n if curr:\n raise ValueError('y inside Ascii85 5-tuple')\n decoded_append(b'\\x20\\x20\\x20\\x20')\n elif x in ignorechars:\n \n continue\n else :\n raise ValueError('Non-Ascii85 digit found: %c'%x)\n \n result=b''.join(decoded)\n padding=4 -len(curr)\n if padding:\n \n result=result[:-padding]\n return result\n \n \n \n_b85alphabet=(b\"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ\"\nb\"abcdefghijklmnopqrstuvwxyz!#$%&()*+-;<=>?@^_`{|}~\")\n_b85chars=None\n_b85chars2=None\n_b85dec=None\n\ndef b85encode(b,pad=False ):\n ''\n\n\n\n \n global _b85chars,_b85chars2\n \n \n if _b85chars is None :\n _b85chars=[bytes((i,))for i in _b85alphabet]\n _b85chars2=[(a+b)for a in _b85chars for b in _b85chars]\n return _85encode(b,_b85chars,_b85chars2,pad)\n \ndef b85decode(b):\n ''\n\n\n \n global _b85dec\n \n \n if _b85dec is None :\n _b85dec=[None ]*256\n for i,c in enumerate(_b85alphabet):\n _b85dec[c]=i\n \n b=_bytes_from_decode_data(b)\n padding=(-len(b))%5\n b=b+b'~'*padding\n out=[]\n packI=struct.Struct('!I').pack\n for i in range(0,len(b),5):\n chunk=b[i:i+5]\n acc=0\n try :\n for c in chunk:\n acc=acc *85+_b85dec[c]\n except TypeError:\n for j,c in enumerate(chunk):\n if _b85dec[c]is None :\n raise ValueError('bad base85 character at position %d'\n %(i+j))from None\n raise\n try :\n out.append(packI(acc))\n except struct.error:\n raise ValueError('base85 overflow in hunk starting at byte %d'\n %i)from None\n \n result=b''.join(out)\n if padding:\n result=result[:-padding]\n return result\n \n \n \n \n \nMAXLINESIZE=76\nMAXBINSIZE=(MAXLINESIZE //4)*3\n\ndef encode(input,output):\n ''\n while True :\n s=input.read(MAXBINSIZE)\n if not s:\n break\n while len(s)\":\n return filename\n canonic=self.fncache.get(filename)\n if not canonic:\n canonic=os.path.abspath(filename)\n canonic=os.path.normcase(canonic)\n self.fncache[filename]=canonic\n return canonic\n \n def reset(self):\n ''\n import linecache\n linecache.checkcache()\n self.botframe=None\n self._set_stopinfo(None ,None )\n \n def trace_dispatch(self,frame,event,arg):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n if self.quitting:\n return\n if event =='line':\n return self.dispatch_line(frame)\n if event =='call':\n return self.dispatch_call(frame,arg)\n if event =='return':\n return self.dispatch_return(frame,arg)\n if event =='exception':\n return self.dispatch_exception(frame,arg)\n if event =='c_call':\n return self.trace_dispatch\n if event =='c_exception':\n return self.trace_dispatch\n if event =='c_return':\n return self.trace_dispatch\n print('bdb.Bdb.dispatch: unknown debugging event:',repr(event))\n return self.trace_dispatch\n \n def dispatch_line(self,frame):\n ''\n\n\n\n\n \n if self.stop_here(frame)or self.break_here(frame):\n self.user_line(frame)\n if self.quitting:raise BdbQuit\n return self.trace_dispatch\n \n def dispatch_call(self,frame,arg):\n ''\n\n\n\n\n \n \n if self.botframe is None :\n \n self.botframe=frame.f_back\n return self.trace_dispatch\n if not (self.stop_here(frame)or self.break_anywhere(frame)):\n \n return\n \n if self.stopframe and frame.f_code.co_flags&GENERATOR_AND_COROUTINE_FLAGS:\n return self.trace_dispatch\n self.user_call(frame,arg)\n if self.quitting:raise BdbQuit\n return self.trace_dispatch\n \n def dispatch_return(self,frame,arg):\n ''\n\n\n\n\n \n if self.stop_here(frame)or frame ==self.returnframe:\n \n if self.stopframe and frame.f_code.co_flags&GENERATOR_AND_COROUTINE_FLAGS:\n return self.trace_dispatch\n try :\n self.frame_returning=frame\n self.user_return(frame,arg)\n finally :\n self.frame_returning=None\n if self.quitting:raise BdbQuit\n \n if self.stopframe is frame and self.stoplineno !=-1:\n self._set_stopinfo(None ,None )\n return self.trace_dispatch\n \n def dispatch_exception(self,frame,arg):\n ''\n\n\n\n\n \n if self.stop_here(frame):\n \n \n \n if not (frame.f_code.co_flags&GENERATOR_AND_COROUTINE_FLAGS\n and arg[0]is StopIteration and arg[2]is None ):\n self.user_exception(frame,arg)\n if self.quitting:raise BdbQuit\n \n \n \n \n elif (self.stopframe and frame is not self.stopframe\n and self.stopframe.f_code.co_flags&GENERATOR_AND_COROUTINE_FLAGS\n and arg[0]in (StopIteration,GeneratorExit)):\n self.user_exception(frame,arg)\n if self.quitting:raise BdbQuit\n \n return self.trace_dispatch\n \n \n \n \n \n def is_skipped_module(self,module_name):\n ''\n if module_name is None :\n return False\n for pattern in self.skip:\n if fnmatch.fnmatch(module_name,pattern):\n return True\n return False\n \n def stop_here(self,frame):\n ''\n \n \n if self.skip and\\\n self.is_skipped_module(frame.f_globals.get('__name__')):\n return False\n if frame is self.stopframe:\n if self.stoplineno ==-1:\n return False\n return frame.f_lineno >=self.stoplineno\n if not self.stopframe:\n return True\n return False\n \n def break_here(self,frame):\n ''\n\n\n\n \n filename=self.canonic(frame.f_code.co_filename)\n if filename not in self.breaks:\n return False\n lineno=frame.f_lineno\n if lineno not in self.breaks[filename]:\n \n \n lineno=frame.f_code.co_firstlineno\n if lineno not in self.breaks[filename]:\n return False\n \n \n (bp,flag)=effective(filename,lineno,frame)\n if bp:\n self.currentbp=bp.number\n if (flag and bp.temporary):\n self.do_clear(str(bp.number))\n return True\n else :\n return False\n \n def do_clear(self,arg):\n ''\n\n\n \n raise NotImplementedError(\"subclass of bdb must implement do_clear()\")\n \n def break_anywhere(self,frame):\n ''\n \n return self.canonic(frame.f_code.co_filename)in self.breaks\n \n \n \n \n def user_call(self,frame,argument_list):\n ''\n pass\n \n def user_line(self,frame):\n ''\n pass\n \n def user_return(self,frame,return_value):\n ''\n pass\n \n def user_exception(self,frame,exc_info):\n ''\n pass\n \n def _set_stopinfo(self,stopframe,returnframe,stoplineno=0):\n ''\n\n\n\n\n \n self.stopframe=stopframe\n self.returnframe=returnframe\n self.quitting=False\n \n \n self.stoplineno=stoplineno\n \n \n \n \n def set_until(self,frame,lineno=None ):\n ''\n \n \n if lineno is None :\n lineno=frame.f_lineno+1\n self._set_stopinfo(frame,frame,lineno)\n \n def set_step(self):\n ''\n \n \n \n \n if self.frame_returning:\n caller_frame=self.frame_returning.f_back\n if caller_frame and not caller_frame.f_trace:\n caller_frame.f_trace=self.trace_dispatch\n self._set_stopinfo(None ,None )\n \n def set_next(self,frame):\n ''\n self._set_stopinfo(frame,None )\n \n def set_return(self,frame):\n ''\n if frame.f_code.co_flags&GENERATOR_AND_COROUTINE_FLAGS:\n self._set_stopinfo(frame,None ,-1)\n else :\n self._set_stopinfo(frame.f_back,frame)\n \n def set_trace(self,frame=None ):\n ''\n\n\n \n if frame is None :\n frame=sys._getframe().f_back\n self.reset()\n while frame:\n frame.f_trace=self.trace_dispatch\n self.botframe=frame\n frame=frame.f_back\n self.set_step()\n sys.settrace(self.trace_dispatch)\n \n def set_continue(self):\n ''\n\n\n \n \n self._set_stopinfo(self.botframe,None ,-1)\n if not self.breaks:\n \n sys.settrace(None )\n frame=sys._getframe().f_back\n while frame and frame is not self.botframe:\n del frame.f_trace\n frame=frame.f_back\n \n def set_quit(self):\n ''\n\n\n \n self.stopframe=self.botframe\n self.returnframe=None\n self.quitting=True\n sys.settrace(None )\n \n \n \n \n \n \n \n \n def set_break(self,filename,lineno,temporary=False ,cond=None ,\n funcname=None ):\n ''\n\n\n\n \n filename=self.canonic(filename)\n import linecache\n line=linecache.getline(filename,lineno)\n if not line:\n return 'Line %s:%d does not exist'%(filename,lineno)\n list=self.breaks.setdefault(filename,[])\n if lineno not in list:\n list.append(lineno)\n bp=Breakpoint(filename,lineno,temporary,cond,funcname)\n return None\n \n def _prune_breaks(self,filename,lineno):\n ''\n\n\n\n\n\n \n if (filename,lineno)not in Breakpoint.bplist:\n self.breaks[filename].remove(lineno)\n if not self.breaks[filename]:\n del self.breaks[filename]\n \n def clear_break(self,filename,lineno):\n ''\n\n\n \n filename=self.canonic(filename)\n if filename not in self.breaks:\n return 'There are no breakpoints in %s'%filename\n if lineno not in self.breaks[filename]:\n return 'There is no breakpoint at %s:%d'%(filename,lineno)\n \n \n for bp in Breakpoint.bplist[filename,lineno][:]:\n bp.deleteMe()\n self._prune_breaks(filename,lineno)\n return None\n \n def clear_bpbynumber(self,arg):\n ''\n\n\n \n try :\n bp=self.get_bpbynumber(arg)\n except ValueError as err:\n return str(err)\n bp.deleteMe()\n self._prune_breaks(bp.file,bp.line)\n return None\n \n def clear_all_file_breaks(self,filename):\n ''\n\n\n \n filename=self.canonic(filename)\n if filename not in self.breaks:\n return 'There are no breakpoints in %s'%filename\n for line in self.breaks[filename]:\n blist=Breakpoint.bplist[filename,line]\n for bp in blist:\n bp.deleteMe()\n del self.breaks[filename]\n return None\n \n def clear_all_breaks(self):\n ''\n\n\n \n if not self.breaks:\n return 'There are no breakpoints'\n for bp in Breakpoint.bpbynumber:\n if bp:\n bp.deleteMe()\n self.breaks={}\n return None\n \n def get_bpbynumber(self,arg):\n ''\n\n\n\n \n if not arg:\n raise ValueError('Breakpoint number expected')\n try :\n number=int(arg)\n except ValueError:\n raise ValueError('Non-numeric breakpoint number %s'%arg)from None\n try :\n bp=Breakpoint.bpbynumber[number]\n except IndexError:\n raise ValueError('Breakpoint number %d out of range'%number)from None\n if bp is None :\n raise ValueError('Breakpoint %d already deleted'%number)\n return bp\n \n def get_break(self,filename,lineno):\n ''\n filename=self.canonic(filename)\n return filename in self.breaks and\\\n lineno in self.breaks[filename]\n \n def get_breaks(self,filename,lineno):\n ''\n\n\n \n filename=self.canonic(filename)\n return filename in self.breaks and\\\n lineno in self.breaks[filename]and\\\n Breakpoint.bplist[filename,lineno]or []\n \n def get_file_breaks(self,filename):\n ''\n\n\n \n filename=self.canonic(filename)\n if filename in self.breaks:\n return self.breaks[filename]\n else :\n return []\n \n def get_all_breaks(self):\n ''\n return self.breaks\n \n \n \n \n def get_stack(self,f,t):\n ''\n\n\n\n \n stack=[]\n if t and t.tb_frame is f:\n t=t.tb_next\n while f is not None :\n stack.append((f,f.f_lineno))\n if f is self.botframe:\n break\n f=f.f_back\n stack.reverse()\n i=max(0,len(stack)-1)\n while t is not None :\n stack.append((t.tb_frame,t.tb_lineno))\n t=t.tb_next\n if f is None :\n i=max(0,len(stack)-1)\n return stack,i\n \n def format_stack_entry(self,frame_lineno,lprefix=': '):\n ''\n\n\n\n\n\n\n \n import linecache,reprlib\n frame,lineno=frame_lineno\n filename=self.canonic(frame.f_code.co_filename)\n s='%s(%r)'%(filename,lineno)\n if frame.f_code.co_name:\n s +=frame.f_code.co_name\n else :\n s +=\"\"\n if '__args__'in frame.f_locals:\n args=frame.f_locals['__args__']\n else :\n args=None\n if args:\n s +=reprlib.repr(args)\n else :\n s +='()'\n if '__return__'in frame.f_locals:\n rv=frame.f_locals['__return__']\n s +='->'\n s +=reprlib.repr(rv)\n line=linecache.getline(filename,lineno,frame.f_globals)\n if line:\n s +=lprefix+line.strip()\n return s\n \n \n \n \n \n def run(self,cmd,globals=None ,locals=None ):\n ''\n\n\n \n if globals is None :\n import __main__\n globals=__main__.__dict__\n if locals is None :\n locals=globals\n self.reset()\n if isinstance(cmd,str):\n cmd=compile(cmd,\"\",\"exec\")\n sys.settrace(self.trace_dispatch)\n try :\n exec(cmd,globals,locals)\n except BdbQuit:\n pass\n finally :\n self.quitting=True\n sys.settrace(None )\n \n def runeval(self,expr,globals=None ,locals=None ):\n ''\n\n\n \n if globals is None :\n import __main__\n globals=__main__.__dict__\n if locals is None :\n locals=globals\n self.reset()\n sys.settrace(self.trace_dispatch)\n try :\n return eval(expr,globals,locals)\n except BdbQuit:\n pass\n finally :\n self.quitting=True\n sys.settrace(None )\n \n def runctx(self,cmd,globals,locals):\n ''\n \n self.run(cmd,globals,locals)\n \n \n \n def runcall(*args,**kwds):\n ''\n\n\n \n if len(args)>=2:\n self,func,*args=args\n elif not args:\n raise TypeError(\"descriptor 'runcall' of 'Bdb' object \"\n \"needs an argument\")\n elif 'func'in kwds:\n func=kwds.pop('func')\n self,*args=args\n import warnings\n warnings.warn(\"Passing 'func' as keyword argument is deprecated\",\n DeprecationWarning,stacklevel=2)\n else :\n raise TypeError('runcall expected at least 1 positional argument, '\n 'got %d'%(len(args)-1))\n \n self.reset()\n sys.settrace(self.trace_dispatch)\n res=None\n try :\n res=func(*args,**kwds)\n except BdbQuit:\n pass\n finally :\n self.quitting=True\n sys.settrace(None )\n return res\n runcall.__text_signature__='($self, func, /, *args, **kwds)'\n \n \ndef set_trace():\n ''\n Bdb().set_trace()\n \n \nclass Breakpoint:\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n \n \n \n next=1\n bplist={}\n bpbynumber=[None ]\n \n \n \n def __init__(self,file,line,temporary=False ,cond=None ,funcname=None ):\n self.funcname=funcname\n \n self.func_first_executable_line=None\n self.file=file\n self.line=line\n self.temporary=temporary\n self.cond=cond\n self.enabled=True\n self.ignore=0\n self.hits=0\n self.number=Breakpoint.next\n Breakpoint.next +=1\n \n self.bpbynumber.append(self)\n if (file,line)in self.bplist:\n self.bplist[file,line].append(self)\n else :\n self.bplist[file,line]=[self]\n \n def deleteMe(self):\n ''\n\n\n\n \n \n index=(self.file,self.line)\n self.bpbynumber[self.number]=None\n self.bplist[index].remove(self)\n if not self.bplist[index]:\n \n del self.bplist[index]\n \n def enable(self):\n ''\n self.enabled=True\n \n def disable(self):\n ''\n self.enabled=False\n \n def bpprint(self,out=None ):\n ''\n\n\n\n \n if out is None :\n out=sys.stdout\n print(self.bpformat(),file=out)\n \n def bpformat(self):\n ''\n\n\n\n\n\n \n if self.temporary:\n disp='del '\n else :\n disp='keep '\n if self.enabled:\n disp=disp+'yes '\n else :\n disp=disp+'no '\n ret='%-4dbreakpoint %s at %s:%d'%(self.number,disp,\n self.file,self.line)\n if self.cond:\n ret +='\\n\\tstop only if %s'%(self.cond,)\n if self.ignore:\n ret +='\\n\\tignore next %d hits'%(self.ignore,)\n if self.hits:\n if self.hits >1:\n ss='s'\n else :\n ss=''\n ret +='\\n\\tbreakpoint already hit %d time%s'%(self.hits,ss)\n return ret\n \n def __str__(self):\n ''\n return 'breakpoint %s at %s:%s'%(self.number,self.file,self.line)\n \n \n \n \ndef checkfuncname(b,frame):\n ''\n\n\n\n\n\n \n if not b.funcname:\n \n if b.line !=frame.f_lineno:\n \n \n return False\n return True\n \n \n if frame.f_code.co_name !=b.funcname:\n \n return False\n \n \n if not b.func_first_executable_line:\n \n b.func_first_executable_line=frame.f_lineno\n \n if b.func_first_executable_line !=frame.f_lineno:\n \n return False\n return True\n \n \n \n \ndef effective(file,line,frame):\n ''\n\n\n\n\n\n \n possibles=Breakpoint.bplist[file,line]\n for b in possibles:\n if not b.enabled:\n continue\n if not checkfuncname(b,frame):\n continue\n \n b.hits +=1\n if not b.cond:\n \n if b.ignore >0:\n b.ignore -=1\n continue\n else :\n \n return (b,True )\n else :\n \n \n \n try :\n val=eval(b.cond,frame.f_globals,frame.f_locals)\n if val:\n if b.ignore >0:\n b.ignore -=1\n \n else :\n return (b,True )\n \n \n except :\n \n \n \n return (b,False )\n return (None ,None )\n \n \n \n \nclass Tdb(Bdb):\n def user_call(self,frame,args):\n name=frame.f_code.co_name\n if not name:name='???'\n print('+++ call',name,args)\n def user_line(self,frame):\n import linecache\n name=frame.f_code.co_name\n if not name:name='???'\n fn=self.canonic(frame.f_code.co_filename)\n line=linecache.getline(fn,frame.f_lineno,frame.f_globals)\n print('+++',fn,frame.f_lineno,name,':',line.strip())\n def user_return(self,frame,retval):\n print('+++ return',retval)\n def user_exception(self,frame,exc_stuff):\n print('+++ exception',exc_stuff)\n self.set_continue()\n \ndef foo(n):\n print('foo(',n,')')\n x=bar(n *10)\n print('bar returned',x)\n \ndef bar(a):\n print('bar(',a,')')\n return a /2\n \ndef test():\n t=Tdb()\n t.run('import bdb; bdb.foo(10)')\n", ["__main__", "fnmatch", "inspect", "linecache", "os", "reprlib", "sys", "warnings"]], "binascii": [".py", "''\n\n\n\n\n\n\n\nimport _base64\n\nfrom _binascii import *\n\nclass Error(ValueError):\n def __init__(self,msg=''):\n self._msg=msg\n \n def __str__(self):\n return \" binascii.Error: \"+self._msg\n \n \nclass Done(Exception):\n pass\n \nclass Incomplete(Error):\n pass\n \ndef a2b_uu(s):\n if not s:\n return ''\n \n length=(ord(s[0])-0x20)%64\n \n def quadruplets_gen(s):\n while s:\n try :\n yield ord(s[0]),ord(s[1]),ord(s[2]),ord(s[3])\n except IndexError:\n s +=' '\n yield ord(s[0]),ord(s[1]),ord(s[2]),ord(s[3])\n return\n s=s[4:]\n \n try :\n result=[''.join(\n [chr((A -0x20)<<2 |(((B -0x20)>>4)&0x3)),\n chr(((B -0x20)&0xf)<<4 |(((C -0x20)>>2)&0xf)),\n chr(((C -0x20)&0x3)<<6 |((D -0x20)&0x3f))\n ])for A,B,C,D in quadruplets_gen(s[1:].rstrip())]\n except ValueError:\n raise Error('Illegal char')\n result=''.join(result)\n trailingdata=result[length:]\n if trailingdata.strip('\\x00'):\n raise Error('Trailing garbage')\n result=result[:length]\n if len(result)>2)&0x3F],\n table_b2a_base64[((A <<4)|((B >>4)&0xF))&0x3F],\n table_b2a_base64[((B <<2)|((C >>6)&0x3))&0x3F],\n table_b2a_base64[(C)&0x3F]])\n for A,B,C in a]\n \n final=s[length -final_length:]\n if final_length ==0:\n snippet=''\n elif final_length ==1:\n a=final[0]\n snippet=table_b2a_base64[(a >>2)&0x3F]+\\\n table_b2a_base64[(a <<4)&0x3F]+'=='\n else :\n a=final[0]\n b=final[1]\n snippet=table_b2a_base64[(a >>2)&0x3F]+\\\n table_b2a_base64[((a <<4)|(b >>4)&0xF)&0x3F]+\\\n table_b2a_base64[(b <<2)&0x3F]+'='\n \n result=''.join(result)+snippet\n if newline:\n result +='\\n'\n return bytes(result,__BRYTHON__.charset)\n \ndef a2b_qp(s,header=False ):\n inp=0\n odata=[]\n while inp =len(s):\n break\n \n if (s[inp]=='\\n')or (s[inp]=='\\r'):\n if s[inp]!='\\n':\n while inp 0 and data[lf -1]=='\\r'\n \n inp=0\n linelen=0\n odata=[]\n while inp '~'or\n c =='='or\n (header and c =='_')or\n (c =='.'and linelen ==0 and (inp+1 ==len(data)or\n data[inp+1]=='\\n'or\n data[inp+1]=='\\r'))or\n (not istext and (c =='\\r'or c =='\\n'))or\n ((c =='\\t'or c ==' ')and (inp+1 ==len(data)))or\n (c <=' 'and c !='\\r'and c !='\\n'and\n (quotetabs or (not quotetabs and (c !='\\t'and c !=' '))))):\n linelen +=3\n if linelen >=MAXLINESIZE:\n odata.append('=')\n if crlf:odata.append('\\r')\n odata.append('\\n')\n linelen=3\n odata.append('='+two_hex_digits(ord(c)))\n inp +=1\n else :\n if (istext and\n (c =='\\n'or (inp+1 0 and\n (odata[-1]==' 'or odata[-1]=='\\t')):\n ch=ord(odata[-1])\n odata[-1]='='\n odata.append(two_hex_digits(ch))\n \n if crlf:odata.append('\\r')\n odata.append('\\n')\n if c =='\\r':\n inp +=2\n else :\n inp +=1\n else :\n if (inp+1 =MAXLINESIZE):\n odata.append('=')\n if crlf:odata.append('\\r')\n odata.append('\\n')\n linelen=0\n \n linelen +=1\n if header and c ==' ':\n c='_'\n odata.append(c)\n inp +=1\n return ''.join(odata)\n \nhex_numbers='0123456789ABCDEF'\ndef hex(n):\n if n ==0:\n return '0'\n \n if n <0:\n n=-n\n sign='-'\n else :\n sign=''\n arr=[]\n \n def hex_gen(n):\n ''\n while n:\n yield n %0x10\n n=n /0x10\n \n for nibble in hex_gen(n):\n arr=[hex_numbers[nibble]]+arr\n return sign+''.join(arr)\n \ndef two_hex_digits(n):\n return hex_numbers[n /0x10]+hex_numbers[n %0x10]\n \n \ndef strhex_to_int(s):\n i=0\n for c in s:\n i=i *0x10+hex_numbers.index(c)\n return i\n \nhqx_encoding='!\"#$%&\\'()*+,-012345689@ABCDEFGHIJKLMNPQRSTUVXYZ[`abcdefhijklmpqr'\n\nDONE=0x7f\nSKIP=0x7e\nFAIL=0x7d\n\ntable_a2b_hqx=[\n\nFAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,\n\nFAIL,FAIL,SKIP,FAIL,FAIL,SKIP,FAIL,FAIL,\n\nFAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,\n\nFAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,\n\nFAIL,0x00,0x01,0x02,0x03,0x04,0x05,0x06,\n\n0x07,0x08,0x09,0x0A,0x0B,0x0C,FAIL,FAIL,\n\n0x0D,0x0E,0x0F,0x10,0x11,0x12,0x13,FAIL,\n\n0x14,0x15,DONE,FAIL,FAIL,FAIL,FAIL,FAIL,\n\n0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,\n\n0x1E,0x1F,0x20,0x21,0x22,0x23,0x24,FAIL,\n\n0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,FAIL,\n\n0x2C,0x2D,0x2E,0x2F,FAIL,FAIL,FAIL,FAIL,\n\n0x30,0x31,0x32,0x33,0x34,0x35,0x36,FAIL,\n\n0x37,0x38,0x39,0x3A,0x3B,0x3C,FAIL,FAIL,\n\n0x3D,0x3E,0x3F,FAIL,FAIL,FAIL,FAIL,FAIL,\n\nFAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,\nFAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,\nFAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,\nFAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,\nFAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,\nFAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,\nFAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,\nFAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,\nFAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,\nFAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,\nFAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,\nFAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,\nFAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,\nFAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,\nFAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,\nFAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,\nFAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,FAIL,\n]\n\ndef a2b_hqx(s):\n result=[]\n \n def quadruples_gen(s):\n t=[]\n for c in s:\n res=table_a2b_hqx[ord(c)]\n if res ==SKIP:\n continue\n elif res ==FAIL:\n raise Error('Illegal character')\n elif res ==DONE:\n yield t\n raise Done\n else :\n t.append(res)\n if len(t)==4:\n yield t\n t=[]\n yield t\n \n done=0\n try :\n for snippet in quadruples_gen(s):\n length=len(snippet)\n if length ==4:\n result.append(chr(((snippet[0]&0x3f)<<2)|(snippet[1]>>4)))\n result.append(chr(((snippet[1]&0x0f)<<4)|(snippet[2]>>2)))\n result.append(chr(((snippet[2]&0x03)<<6)|(snippet[3])))\n elif length ==3:\n result.append(chr(((snippet[0]&0x3f)<<2)|(snippet[1]>>4)))\n result.append(chr(((snippet[1]&0x0f)<<4)|(snippet[2]>>2)))\n elif length ==2:\n result.append(chr(((snippet[0]&0x3f)<<2)|(snippet[1]>>4)))\n except Done:\n done=1\n except Error:\n raise\n return (''.join(result),done)\n \n \n \ndef b2a_hqx(s):\n result=[]\n \n def triples_gen(s):\n while s:\n try :\n yield ord(s[0]),ord(s[1]),ord(s[2])\n except IndexError:\n yield tuple([ord(c)for c in s])\n s=s[3:]\n \n for snippet in triples_gen(s):\n length=len(snippet)\n if length ==3:\n result.append(\n hqx_encoding[(snippet[0]&0xfc)>>2])\n result.append(hqx_encoding[\n ((snippet[0]&0x03)<<4)|((snippet[1]&0xf0)>>4)])\n result.append(hqx_encoding[\n (snippet[1]&0x0f)<<2 |((snippet[2]&0xc0)>>6)])\n result.append(hqx_encoding[snippet[2]&0x3f])\n elif length ==2:\n result.append(\n hqx_encoding[(snippet[0]&0xfc)>>2])\n result.append(hqx_encoding[\n ((snippet[0]&0x03)<<4)|((snippet[1]&0xf0)>>4)])\n result.append(hqx_encoding[\n (snippet[1]&0x0f)<<2])\n elif length ==1:\n result.append(\n hqx_encoding[(snippet[0]&0xfc)>>2])\n result.append(hqx_encoding[\n ((snippet[0]&0x03)<<4)])\n return ''.join(result)\n \ncrctab_hqx=[\n0x0000,0x1021,0x2042,0x3063,0x4084,0x50a5,0x60c6,0x70e7,\n0x8108,0x9129,0xa14a,0xb16b,0xc18c,0xd1ad,0xe1ce,0xf1ef,\n0x1231,0x0210,0x3273,0x2252,0x52b5,0x4294,0x72f7,0x62d6,\n0x9339,0x8318,0xb37b,0xa35a,0xd3bd,0xc39c,0xf3ff,0xe3de,\n0x2462,0x3443,0x0420,0x1401,0x64e6,0x74c7,0x44a4,0x5485,\n0xa56a,0xb54b,0x8528,0x9509,0xe5ee,0xf5cf,0xc5ac,0xd58d,\n0x3653,0x2672,0x1611,0x0630,0x76d7,0x66f6,0x5695,0x46b4,\n0xb75b,0xa77a,0x9719,0x8738,0xf7df,0xe7fe,0xd79d,0xc7bc,\n0x48c4,0x58e5,0x6886,0x78a7,0x0840,0x1861,0x2802,0x3823,\n0xc9cc,0xd9ed,0xe98e,0xf9af,0x8948,0x9969,0xa90a,0xb92b,\n0x5af5,0x4ad4,0x7ab7,0x6a96,0x1a71,0x0a50,0x3a33,0x2a12,\n0xdbfd,0xcbdc,0xfbbf,0xeb9e,0x9b79,0x8b58,0xbb3b,0xab1a,\n0x6ca6,0x7c87,0x4ce4,0x5cc5,0x2c22,0x3c03,0x0c60,0x1c41,\n0xedae,0xfd8f,0xcdec,0xddcd,0xad2a,0xbd0b,0x8d68,0x9d49,\n0x7e97,0x6eb6,0x5ed5,0x4ef4,0x3e13,0x2e32,0x1e51,0x0e70,\n0xff9f,0xefbe,0xdfdd,0xcffc,0xbf1b,0xaf3a,0x9f59,0x8f78,\n0x9188,0x81a9,0xb1ca,0xa1eb,0xd10c,0xc12d,0xf14e,0xe16f,\n0x1080,0x00a1,0x30c2,0x20e3,0x5004,0x4025,0x7046,0x6067,\n0x83b9,0x9398,0xa3fb,0xb3da,0xc33d,0xd31c,0xe37f,0xf35e,\n0x02b1,0x1290,0x22f3,0x32d2,0x4235,0x5214,0x6277,0x7256,\n0xb5ea,0xa5cb,0x95a8,0x8589,0xf56e,0xe54f,0xd52c,0xc50d,\n0x34e2,0x24c3,0x14a0,0x0481,0x7466,0x6447,0x5424,0x4405,\n0xa7db,0xb7fa,0x8799,0x97b8,0xe75f,0xf77e,0xc71d,0xd73c,\n0x26d3,0x36f2,0x0691,0x16b0,0x6657,0x7676,0x4615,0x5634,\n0xd94c,0xc96d,0xf90e,0xe92f,0x99c8,0x89e9,0xb98a,0xa9ab,\n0x5844,0x4865,0x7806,0x6827,0x18c0,0x08e1,0x3882,0x28a3,\n0xcb7d,0xdb5c,0xeb3f,0xfb1e,0x8bf9,0x9bd8,0xabbb,0xbb9a,\n0x4a75,0x5a54,0x6a37,0x7a16,0x0af1,0x1ad0,0x2ab3,0x3a92,\n0xfd2e,0xed0f,0xdd6c,0xcd4d,0xbdaa,0xad8b,0x9de8,0x8dc9,\n0x7c26,0x6c07,0x5c64,0x4c45,0x3ca2,0x2c83,0x1ce0,0x0cc1,\n0xef1f,0xff3e,0xcf5d,0xdf7c,0xaf9b,0xbfba,0x8fd9,0x9ff8,\n0x6e17,0x7e36,0x4e55,0x5e74,0x2e93,0x3eb2,0x0ed1,0x1ef0,\n]\n\ndef crc_hqx(s,crc):\n for c in s:\n crc=((crc <<8)&0xff00)^crctab_hqx[((crc >>8)&0xff)^ord(c)]\n \n return crc\n \ndef rlecode_hqx(s):\n ''\n\n\n\n \n if not s:\n return ''\n result=[]\n prev=s[0]\n count=1\n \n \n \n \n if s[-1]=='!':\n s=s[1:]+'?'\n else :\n s=s[1:]+'!'\n \n for c in s:\n if c ==prev and count <255:\n count +=1\n else :\n if count ==1:\n if prev !='\\x90':\n result.append(prev)\n else :\n result.extend(['\\x90','\\x00'])\n elif count <4:\n if prev !='\\x90':\n result.extend([prev]*count)\n else :\n result.extend(['\\x90','\\x00']*count)\n else :\n if prev !='\\x90':\n result.extend([prev,'\\x90',chr(count)])\n else :\n result.extend(['\\x90','\\x00','\\x90',chr(count)])\n count=1\n prev=c\n \n return ''.join(result)\n \ndef rledecode_hqx(s):\n s=s.split('\\x90')\n result=[s[0]]\n prev=s[0]\n for snippet in s[1:]:\n count=ord(snippet[0])\n if count >0:\n result.append(prev[-1]*(count -1))\n prev=snippet\n else :\n result.append('\\x90')\n prev='\\x90'\n result.append(snippet[1:])\n \n return ''.join(result)\n \ncrc_32_tab=[\n0x00000000,0x77073096,0xee0e612c,0x990951ba,0x076dc419,\n0x706af48f,0xe963a535,0x9e6495a3,0x0edb8832,0x79dcb8a4,\n0xe0d5e91e,0x97d2d988,0x09b64c2b,0x7eb17cbd,0xe7b82d07,\n0x90bf1d91,0x1db71064,0x6ab020f2,0xf3b97148,0x84be41de,\n0x1adad47d,0x6ddde4eb,0xf4d4b551,0x83d385c7,0x136c9856,\n0x646ba8c0,0xfd62f97a,0x8a65c9ec,0x14015c4f,0x63066cd9,\n0xfa0f3d63,0x8d080df5,0x3b6e20c8,0x4c69105e,0xd56041e4,\n0xa2677172,0x3c03e4d1,0x4b04d447,0xd20d85fd,0xa50ab56b,\n0x35b5a8fa,0x42b2986c,0xdbbbc9d6,0xacbcf940,0x32d86ce3,\n0x45df5c75,0xdcd60dcf,0xabd13d59,0x26d930ac,0x51de003a,\n0xc8d75180,0xbfd06116,0x21b4f4b5,0x56b3c423,0xcfba9599,\n0xb8bda50f,0x2802b89e,0x5f058808,0xc60cd9b2,0xb10be924,\n0x2f6f7c87,0x58684c11,0xc1611dab,0xb6662d3d,0x76dc4190,\n0x01db7106,0x98d220bc,0xefd5102a,0x71b18589,0x06b6b51f,\n0x9fbfe4a5,0xe8b8d433,0x7807c9a2,0x0f00f934,0x9609a88e,\n0xe10e9818,0x7f6a0dbb,0x086d3d2d,0x91646c97,0xe6635c01,\n0x6b6b51f4,0x1c6c6162,0x856530d8,0xf262004e,0x6c0695ed,\n0x1b01a57b,0x8208f4c1,0xf50fc457,0x65b0d9c6,0x12b7e950,\n0x8bbeb8ea,0xfcb9887c,0x62dd1ddf,0x15da2d49,0x8cd37cf3,\n0xfbd44c65,0x4db26158,0x3ab551ce,0xa3bc0074,0xd4bb30e2,\n0x4adfa541,0x3dd895d7,0xa4d1c46d,0xd3d6f4fb,0x4369e96a,\n0x346ed9fc,0xad678846,0xda60b8d0,0x44042d73,0x33031de5,\n0xaa0a4c5f,0xdd0d7cc9,0x5005713c,0x270241aa,0xbe0b1010,\n0xc90c2086,0x5768b525,0x206f85b3,0xb966d409,0xce61e49f,\n0x5edef90e,0x29d9c998,0xb0d09822,0xc7d7a8b4,0x59b33d17,\n0x2eb40d81,0xb7bd5c3b,0xc0ba6cad,0xedb88320,0x9abfb3b6,\n0x03b6e20c,0x74b1d29a,0xead54739,0x9dd277af,0x04db2615,\n0x73dc1683,0xe3630b12,0x94643b84,0x0d6d6a3e,0x7a6a5aa8,\n0xe40ecf0b,0x9309ff9d,0x0a00ae27,0x7d079eb1,0xf00f9344,\n0x8708a3d2,0x1e01f268,0x6906c2fe,0xf762575d,0x806567cb,\n0x196c3671,0x6e6b06e7,0xfed41b76,0x89d32be0,0x10da7a5a,\n0x67dd4acc,0xf9b9df6f,0x8ebeeff9,0x17b7be43,0x60b08ed5,\n0xd6d6a3e8,0xa1d1937e,0x38d8c2c4,0x4fdff252,0xd1bb67f1,\n0xa6bc5767,0x3fb506dd,0x48b2364b,0xd80d2bda,0xaf0a1b4c,\n0x36034af6,0x41047a60,0xdf60efc3,0xa867df55,0x316e8eef,\n0x4669be79,0xcb61b38c,0xbc66831a,0x256fd2a0,0x5268e236,\n0xcc0c7795,0xbb0b4703,0x220216b9,0x5505262f,0xc5ba3bbe,\n0xb2bd0b28,0x2bb45a92,0x5cb36a04,0xc2d7ffa7,0xb5d0cf31,\n0x2cd99e8b,0x5bdeae1d,0x9b64c2b0,0xec63f226,0x756aa39c,\n0x026d930a,0x9c0906a9,0xeb0e363f,0x72076785,0x05005713,\n0x95bf4a82,0xe2b87a14,0x7bb12bae,0x0cb61b38,0x92d28e9b,\n0xe5d5be0d,0x7cdcefb7,0x0bdbdf21,0x86d3d2d4,0xf1d4e242,\n0x68ddb3f8,0x1fda836e,0x81be16cd,0xf6b9265b,0x6fb077e1,\n0x18b74777,0x88085ae6,0xff0f6a70,0x66063bca,0x11010b5c,\n0x8f659eff,0xf862ae69,0x616bffd3,0x166ccf45,0xa00ae278,\n0xd70dd2ee,0x4e048354,0x3903b3c2,0xa7672661,0xd06016f7,\n0x4969474d,0x3e6e77db,0xaed16a4a,0xd9d65adc,0x40df0b66,\n0x37d83bf0,0xa9bcae53,0xdebb9ec5,0x47b2cf7f,0x30b5ffe9,\n0xbdbdf21c,0xcabac28a,0x53b39330,0x24b4a3a6,0xbad03605,\n0xcdd70693,0x54de5729,0x23d967bf,0xb3667a2e,0xc4614ab8,\n0x5d681b02,0x2a6f2b94,0xb40bbe37,0xc30c8ea1,0x5a05df1b,\n0x2d02ef8d\n]\n\ndef crc32(s,crc=0):\n result=0\n crc=~int(crc)&0xffffffff\n \n for c in s:\n crc=crc_32_tab[(crc ^int(ord(c)))&0xff]^(crc >>8)\n \n \n \n result=crc ^0xffffffff\n \n if result >2 **31:\n result=((result+2 **31)%2 **32)-2 **31\n \n return result\n", ["_base64", "_binascii"]], "bisect": [".py", "''\n\ndef insort_right(a,x,lo=0,hi=None ):\n ''\n\n\n\n\n\n \n \n lo=bisect_right(a,x,lo,hi)\n a.insert(lo,x)\n \ndef bisect_right(a,x,lo=0,hi=None ):\n ''\n\n\n\n\n\n\n\n \n \n if lo <0:\n raise ValueError('lo must be non-negative')\n if hi is None :\n hi=len(a)\n while lo =9:\n names=day_name\n else :\n names=day_abbr\n return names[day][:width].center(width)\n \n def formatweekheader(self,width):\n ''\n\n \n return ' '.join(self.formatweekday(i,width)for i in self.iterweekdays())\n \n def formatmonthname(self,theyear,themonth,width,withyear=True ):\n ''\n\n \n s=month_name[themonth]\n if withyear:\n s=\"%s %r\"%(s,theyear)\n return s.center(width)\n \n def prmonth(self,theyear,themonth,w=0,l=0):\n ''\n\n \n print(self.formatmonth(theyear,themonth,w,l),end='')\n \n def formatmonth(self,theyear,themonth,w=0,l=0):\n ''\n\n \n w=max(2,w)\n l=max(1,l)\n s=self.formatmonthname(theyear,themonth,7 *(w+1)-1)\n s=s.rstrip()\n s +='\\n'*l\n s +=self.formatweekheader(w).rstrip()\n s +='\\n'*l\n for week in self.monthdays2calendar(theyear,themonth):\n s +=self.formatweek(week,w).rstrip()\n s +='\\n'*l\n return s\n \n def formatyear(self,theyear,w=2,l=1,c=6,m=3):\n ''\n\n \n w=max(2,w)\n l=max(1,l)\n c=max(2,c)\n colwidth=(w+1)*7 -1\n v=[]\n a=v.append\n a(repr(theyear).center(colwidth *m+c *(m -1)).rstrip())\n a('\\n'*l)\n header=self.formatweekheader(w)\n for (i,row)in enumerate(self.yeardays2calendar(theyear,m)):\n \n months=range(m *i+1,min(m *(i+1)+1,13))\n a('\\n'*l)\n names=(self.formatmonthname(theyear,k,colwidth,False )\n for k in months)\n a(formatstring(names,colwidth,c).rstrip())\n a('\\n'*l)\n headers=(header for k in months)\n a(formatstring(headers,colwidth,c).rstrip())\n a('\\n'*l)\n \n height=max(len(cal)for cal in row)\n for j in range(height):\n weeks=[]\n for cal in row:\n if j >=len(cal):\n weeks.append('')\n else :\n weeks.append(self.formatweek(cal[j],w))\n a(formatstring(weeks,colwidth,c).rstrip())\n a('\\n'*l)\n return ''.join(v)\n \n def pryear(self,theyear,w=0,l=0,c=6,m=3):\n ''\n print(self.formatyear(theyear,w,l,c,m),end='')\n \n \nclass HTMLCalendar(Calendar):\n ''\n\n \n \n \n cssclasses=[\"mon\",\"tue\",\"wed\",\"thu\",\"fri\",\"sat\",\"sun\"]\n \n \n cssclasses_weekday_head=cssclasses\n \n \n cssclass_noday=\"noday\"\n \n \n cssclass_month_head=\"month\"\n \n \n cssclass_month=\"month\"\n \n \n cssclass_year_head=\"year\"\n \n \n cssclass_year=\"year\"\n \n def formatday(self,day,weekday):\n ''\n\n \n if day ==0:\n \n return ' '%self.cssclass_noday\n else :\n return '%d'%(self.cssclasses[weekday],day)\n \n def formatweek(self,theweek):\n ''\n\n \n s=''.join(self.formatday(d,wd)for (d,wd)in theweek)\n return '%s'%s\n \n def formatweekday(self,day):\n ''\n\n \n return '%s'%(\n self.cssclasses_weekday_head[day],day_abbr[day])\n \n def formatweekheader(self):\n ''\n\n \n s=''.join(self.formatweekday(i)for i in self.iterweekdays())\n return '%s'%s\n \n def formatmonthname(self,theyear,themonth,withyear=True ):\n ''\n\n \n if withyear:\n s='%s %s'%(month_name[themonth],theyear)\n else :\n s='%s'%month_name[themonth]\n return '%s'%(\n self.cssclass_month_head,s)\n \n def formatmonth(self,theyear,themonth,withyear=True ):\n ''\n\n \n v=[]\n a=v.append\n a(''%(\n self.cssclass_month))\n a('\\n')\n a(self.formatmonthname(theyear,themonth,withyear=withyear))\n a('\\n')\n a(self.formatweekheader())\n a('\\n')\n for week in self.monthdays2calendar(theyear,themonth):\n a(self.formatweek(week))\n a('\\n')\n a('')\n a('\\n')\n return ''.join(v)\n \n def formatyear(self,theyear,width=3):\n ''\n\n \n v=[]\n a=v.append\n width=max(width,1)\n a(''%\n self.cssclass_year)\n a('\\n')\n a('%s'%(\n width,self.cssclass_year_head,theyear))\n for i in range(January,January+12,width):\n \n months=range(i,min(i+width,13))\n a('')\n for m in months:\n a('')\n a(self.formatmonth(theyear,m,withyear=False ))\n a('')\n a('')\n a('')\n return ''.join(v)\n \n def formatyearpage(self,theyear,width=3,css='calendar.css',encoding=None ):\n ''\n\n \n if encoding is None :\n encoding=sys.getdefaultencoding()\n v=[]\n a=v.append\n a('\\n'%encoding)\n a('\\n')\n a('\\n')\n a('\\n')\n a('\\n'%encoding)\n if css is not None :\n a('\\n'%css)\n a('Calendar for %d\\n'%theyear)\n a('\\n')\n a('\\n')\n a(self.formatyear(theyear,width))\n a('\\n')\n a('\\n')\n return ''.join(v).encode(encoding,\"xmlcharrefreplace\")\n \n \nclass different_locale:\n def __init__(self,locale):\n self.locale=locale\n \n def __enter__(self):\n self.oldlocale=_locale.getlocale(_locale.LC_TIME)\n _locale.setlocale(_locale.LC_TIME,self.locale)\n \n def __exit__(self,*args):\n _locale.setlocale(_locale.LC_TIME,self.oldlocale)\n \n \nclass LocaleTextCalendar(TextCalendar):\n ''\n\n\n\n\n \n \n def __init__(self,firstweekday=0,locale=None ):\n TextCalendar.__init__(self,firstweekday)\n if locale is None :\n locale=_locale.getdefaultlocale()\n self.locale=locale\n \n def formatweekday(self,day,width):\n with different_locale(self.locale):\n if width >=9:\n names=day_name\n else :\n names=day_abbr\n name=names[day]\n return name[:width].center(width)\n \n def formatmonthname(self,theyear,themonth,width,withyear=True ):\n with different_locale(self.locale):\n s=month_name[themonth]\n if withyear:\n s=\"%s %r\"%(s,theyear)\n return s.center(width)\n \n \nclass LocaleHTMLCalendar(HTMLCalendar):\n ''\n\n\n\n\n \n def __init__(self,firstweekday=0,locale=None ):\n HTMLCalendar.__init__(self,firstweekday)\n if locale is None :\n locale=_locale.getdefaultlocale()\n self.locale=locale\n \n def formatweekday(self,day):\n with different_locale(self.locale):\n s=day_abbr[day]\n return '%s'%(self.cssclasses[day],s)\n \n def formatmonthname(self,theyear,themonth,withyear=True ):\n with different_locale(self.locale):\n s=month_name[themonth]\n if withyear:\n s='%s %s'%(s,theyear)\n return '%s'%s\n \n \n \nc=TextCalendar()\n\nfirstweekday=c.getfirstweekday\n\ndef setfirstweekday(firstweekday):\n if not MONDAY <=firstweekday <=SUNDAY:\n raise IllegalWeekdayError(firstweekday)\n c.firstweekday=firstweekday\n \nmonthcalendar=c.monthdayscalendar\nprweek=c.prweek\nweek=c.formatweek\nweekheader=c.formatweekheader\nprmonth=c.prmonth\nmonth=c.formatmonth\ncalendar=c.formatyear\nprcal=c.pryear\n\n\n\n_colwidth=7 *3 -1\n_spacing=6\n\n\ndef format(cols,colwidth=_colwidth,spacing=_spacing):\n ''\n print(formatstring(cols,colwidth,spacing))\n \n \ndef formatstring(cols,colwidth=_colwidth,spacing=_spacing):\n ''\n spacing *=' '\n return spacing.join(c.center(colwidth)for c in cols)\n \n \nEPOCH=1970\n_EPOCH_ORD=datetime.date(EPOCH,1,1).toordinal()\n\n\ndef timegm(tuple):\n ''\n year,month,day,hour,minute,second=tuple[:6]\n days=datetime.date(year,month,1).toordinal()-_EPOCH_ORD+day -1\n hours=days *24+hour\n minutes=hours *60+minute\n seconds=minutes *60+second\n return seconds\n \n \ndef main(args):\n import argparse\n parser=argparse.ArgumentParser()\n textgroup=parser.add_argument_group('text only arguments')\n htmlgroup=parser.add_argument_group('html only arguments')\n textgroup.add_argument(\n \"-w\",\"--width\",\n type=int,default=2,\n help=\"width of date column (default 2)\"\n )\n textgroup.add_argument(\n \"-l\",\"--lines\",\n type=int,default=1,\n help=\"number of lines for each week (default 1)\"\n )\n textgroup.add_argument(\n \"-s\",\"--spacing\",\n type=int,default=6,\n help=\"spacing between months (default 6)\"\n )\n textgroup.add_argument(\n \"-m\",\"--months\",\n type=int,default=3,\n help=\"months per row (default 3)\"\n )\n htmlgroup.add_argument(\n \"-c\",\"--css\",\n default=\"calendar.css\",\n help=\"CSS to use for page\"\n )\n parser.add_argument(\n \"-L\",\"--locale\",\n default=None ,\n help=\"locale to be used from month and weekday names\"\n )\n parser.add_argument(\n \"-e\",\"--encoding\",\n default=None ,\n help=\"encoding to use for output\"\n )\n parser.add_argument(\n \"-t\",\"--type\",\n default=\"text\",\n choices=(\"text\",\"html\"),\n help=\"output type (text or html)\"\n )\n parser.add_argument(\n \"year\",\n nargs='?',type=int,\n help=\"year number (1-9999)\"\n )\n parser.add_argument(\n \"month\",\n nargs='?',type=int,\n help=\"month number (1-12, text only)\"\n )\n \n options=parser.parse_args(args[1:])\n \n if options.locale and not options.encoding:\n parser.error(\"if --locale is specified --encoding is required\")\n sys.exit(1)\n \n locale=options.locale,options.encoding\n \n if options.type ==\"html\":\n if options.locale:\n cal=LocaleHTMLCalendar(locale=locale)\n else :\n cal=HTMLCalendar()\n encoding=options.encoding\n if encoding is None :\n encoding=sys.getdefaultencoding()\n optdict=dict(encoding=encoding,css=options.css)\n write=sys.stdout.buffer.write\n if options.year is None :\n write(cal.formatyearpage(datetime.date.today().year,**optdict))\n elif options.month is None :\n write(cal.formatyearpage(options.year,**optdict))\n else :\n parser.error(\"incorrect number of arguments\")\n sys.exit(1)\n else :\n if options.locale:\n cal=LocaleTextCalendar(locale=locale)\n else :\n cal=TextCalendar()\n optdict=dict(w=options.width,l=options.lines)\n if options.month is None :\n optdict[\"c\"]=options.spacing\n optdict[\"m\"]=options.months\n if options.year is None :\n result=cal.formatyear(datetime.date.today().year,**optdict)\n elif options.month is None :\n result=cal.formatyear(options.year,**optdict)\n else :\n result=cal.formatmonth(options.year,options.month,**optdict)\n write=sys.stdout.write\n if options.encoding:\n result=result.encode(options.encoding)\n write=sys.stdout.buffer.write\n write(result)\n \n \nif __name__ ==\"__main__\":\n main(sys.argv)\n", ["argparse", "datetime", "itertools", "locale", "sys"]], "cmath": [".py", "\n\n\n\n\n\n\n\n\n\nimport math\nimport sys\n\ndef takes_complex(func):\n def decorated(x):\n if isinstance(x,complex):\n return func(x)\n elif type(x)in [int,float]:\n return func(complex(x))\n elif hasattr(x,'__complex__'):\n c=x.__complex__()\n if not isinstance(c,complex):\n raise TypeError(\"A complex number is required\")\n else :\n return func(c)\n elif hasattr(x,'__float__'):\n try :\n c=complex(x.__float__(),0)\n except :\n raise TypeError(\"A complex number is required\")\n return func(c)\n else :\n raise TypeError(\"A complex number is required\")\n if hasattr(func,'__doc__'):\n decorated.__doc__=func.__doc__\n if hasattr(func,'__name__'):\n decorated.__name__=func.__name__\n return decorated\n \n@takes_complex\ndef isfinite(x):\n return math.isfinite(x.imag)and math.isfinite(x.real)\n \n@takes_complex\ndef phase(x):\n ''\n return math.atan2(x.imag,x.real)\n \n@takes_complex\ndef polar(x):\n ''\n\n\n\n\n \n phi=math.atan2(x.imag,x.real)\n r=math.sqrt(x.real **2+x.imag **2)\n return r,phi\n \ndef rect(r,phi):\n ''\n\n \n if math.isinf(r)or math.isinf(phi):\n \n \n if math.isinf(phi)and r !=.0 and not math.isnan(r):\n raise ValueError(\"math domain error\")\n \n \n \n \n if -_INF 0:\n _real=math.copysign(_INF,math.cos(phi))\n _imag=math.copysign(_INF,math.sin(phi))\n else :\n _real=-math.copysign(_INF,cos(phi));\n _imag=-math.copysign(_INF,sin(phi));\n return complex(_real,_imag)\n return _SPECIAL_VALUE(complex(r,phi),_rect_special_values)\n \n else :\n if phi ==.0:\n \n \n \n return complex(r,phi *r)\n else :\n return complex(r *math.cos(phi),r *math.sin(phi))\n \n@takes_complex\ndef sqrt(x):\n ''\n\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n s,d,ax,ay=.0,.0,math.fabs(x.real),math.fabs(x.imag)\n \n ret=_SPECIAL_VALUE(x,_sqrt_special_values)\n if ret is not None :\n return ret\n \n if x.real ==.0 and x.imag ==.0:\n _real=.0\n _imag=x.imag\n return complex(_real,_imag)\n \n if ax 0. or ay >0.):\n \n ax=math.ldexp(ax,_CM_SCALE_UP);\n s=math.ldexp(math.sqrt(ax+math.hypot(ax,math.ldexp(ay,_CM_SCALE_UP))),_CM_SCALE_DOWN)\n else :\n ax /=8.0 ;\n s=2.0 *math.sqrt(ax+math.hypot(ax,ay /8.0));\n \n d=ay /(2.0 *s)\n \n if x.real >=.0:\n _real=s ;\n _imag=math.copysign(d,x.imag)\n else :\n _real=d ;\n _imag=math.copysign(s,x.imag)\n \n return complex(_real,_imag)\n \n@takes_complex\ndef acos(x):\n ''\n\n\n\n\n \n \n ret=_SPECIAL_VALUE(x,_acos_special_values)\n if ret is not None :\n return ret\n \n if math.fabs(x.real)>_CM_LARGE_DOUBLE or math.fabs(x.imag)>_CM_LARGE_DOUBLE:\n \n \n _real=math.atan2(math.fabs(x.imag),x.real)\n \n \n \n if x.real <0:\n _imag=-math.copysign(math.log(math.hypot(x.real /2.,x.imag /2.))+_M_LN2 *2.,x.imag);\n else :\n _imag=math.copysign(math.log(math.hypot(x.real /2.,x.imag /2.))+_M_LN2 *2.,-x.imag);\n else :\n s1=complex(float(1 -x.real),-x.imag)\n s1=sqrt(s1)\n s2=complex(1.0+x.real,x.imag)\n s2=sqrt(s2)\n _real=2.0 *math.atan2(s1.real,s2.real);\n _imag=math.asinh(s2.real *s1.imag -s2.imag *s1.real)\n \n return complex(_real,_imag)\n \n@takes_complex\ndef acosh(x):\n ''\n\n\n\n \n ret=_SPECIAL_VALUE(x,_acosh_special_values)\n if ret is not None :\n return ret\n \n if math.fabs(x.real)>_CM_LARGE_DOUBLE or math.fabs(x.imag)>_CM_LARGE_DOUBLE:\n \n _real=math.log(math.hypot(x.real /2.0,x.imag /2.0))+_M_LN2 *2.0\n _imag=math.atan2(x.imag,x.real);\n else :\n s1=sqrt(complex(x.real -1.0,x.imag))\n s2=sqrt(complex(x.real+1.0,x.imag))\n _real=math.asinh(s1.real *s2.real+s1.imag *s2.imag)\n _imag=2. *math.atan2(s1.imag,s2.real)\n \n return complex(_real,_imag)\n \n@takes_complex\ndef asin(x):\n ''\n\n\n\n \n \n s=complex(-x.imag,x.real)\n s=asinh(s)\n return complex(s.imag,-s.real)\n \n@takes_complex\ndef asinh(x):\n ''\n\n\n\n\n \n ret=_SPECIAL_VALUE(x,_asinh_special_values)\n if ret is not None :\n return ret\n \n if math.fabs(x.real)>_CM_LARGE_DOUBLE or math.fabs(x.imag)>_CM_LARGE_DOUBLE:\n if x.imag >=.0:\n _real=math.copysign(math.log(math.hypot(x.real /2.,x.imag /2.))+_M_LN2 *2.,x.real)\n else :\n _real=-math.copysign(math.log(math.hypot(x.real /2.,x.imag /2.))+_M_LN2 *2.,-x.real)\n _imag=math.atan2(x.imag,math.fabs(x.real))\n else :\n s1=sqrt(complex(1.0+x.imag,-x.real))\n s2=sqrt(complex(1.0 -x.imag,x.real))\n _real=math.asinh(s1.real *s2.imag -s2.real *s1.imag)\n _imag=math.atan2(x.imag,s1.real *s2.real -s1.imag *s2.imag)\n return complex(_real,_imag)\n \n@takes_complex\ndef atan(x):\n ''\n\n\n\n\n \n s=atanh(complex(-x.imag,x.real))\n return complex(s.imag,-s.real)\n \n@takes_complex\ndef atanh(x):\n ''\n\n\n\n\n \n \n ret=_SPECIAL_VALUE(x,_atanh_special_values)\n if ret is not None :\n return ret\n \n \n if x.real <.0:\n return -(atanh(-x))\n \n ay=math.fabs(x.imag)\n \n if x.real >_CM_SQRT_LARGE_DOUBLE or ay >_CM_SQRT_LARGE_DOUBLE:\n \n \n \n \n \n h=math.hypot(x.real /2.,x.imag /2.)\n _real=x.real /4. /h /h\n \n \n \n \n \n \n _imag=-math.copysign(math.pi /2.,-x.imag)\n \n elif x.real ==1.0 and ay <_CM_SQRT_DBL_MIN:\n \n \n if (ay ==.0):\n raise ValueError(\"math domain error\")\n else :\n _real=-math.log(math.sqrt(ay)/math.sqrt(math.hypot(ay,2.)))\n _imag=math.copysign(math.atan2(2.0,-ay)/2,x.imag)\n \n else :\n \n _real=math.log1p(4. *x.real /((1 -x.real)*(1 -x.real)+ay *ay))/4.\n _imag=-math.atan2(-2. *x.imag,(1 -x.real)*(1+x.real)-ay *ay)/2.\n errno=0\n \n return complex(_real,_imag)\n \n@takes_complex\ndef cos(x):\n ''\n return cosh(complex(-x.imag,x.real))\n \n@takes_complex\ndef cosh(x):\n ''\n \n \n if isinf(x):\n if -_INF 0:\n _real=math.copysign(_INF,math.cos(x.imag))\n _imag=math.copysign(_INF,math.sin(x.imag))\n else :\n _real=math.copysign(_INF,math.cos(x.imag))\n _imag=-math.copysign(_INF,math.sin(x.imag))\n return complex(_real,_imag)\n else :\n \n if x.imag !=.0 and not math.isnan(x.real):\n raise ValueError(\"math domain error\")\n return _SPECIAL_VALUE(x,_cosh_special_values)\n \n if math.fabs(x.real)>_CM_LOG_LARGE_DOUBLE:\n \n \n x_minus_one=x.real -math.copysign(1.0,x.real)\n _real=cos(x.imag)*math.cosh(x_minus_one)*math.e\n _imag=sin(x.imag)*math.sinh(x_minus_one)*math.e\n else :\n _real=math.cos(x.imag)*math.cosh(x.real)\n _imag=math.sin(x.imag)*math.sinh(x.real)\n \n ret=complex(_real,_imag)\n \n if isinf(ret):\n raise OverflowError()\n return ret\n \n@takes_complex\ndef exp(x):\n ''\n if math.isinf(x.real)or math.isinf(x.imag):\n \n if math.isinf(x.imag)and (-_INF 0):\n raise ValueError(\"math domain error\")\n \n if math.isinf(x.real)and -_INF 0:\n _real=math.copysign(_INF,cos(x.imag))\n _imag=math.copysign(_INF,sin(x.imag))\n else :\n _real=math.copysign(.0,cos(x.imag))\n _imag=math.copysign(.0,sin(x.imag))\n return complex(_real,_imag)\n \n return _SPECIAL_VALUE(x,_exp_special_values)\n \n \n if x.real >_CM_LOG_LARGE_DOUBLE:\n l=math.exp(x.real -1.);\n _real=l *math.cos(x.imag)*math.e\n _imag=l *math.sin(x.imag)*math.e\n else :\n l=math.exp(x.real);\n _real=l *math.cos(x.imag)\n _imag=l *math.sin(x.imag)\n \n if math.isinf(_real)or math.isinf(_imag):\n raise OverflowError()\n \n return complex(_real,_imag)\n \ndef isclose(x,y,*,rel_tol=1e-09,abs_tol=0.0):\n rel_tol=float(rel_tol)\n abs_tol=float(abs_tol)\n return abs(x -y)<=max(rel_tol *max(abs(x),abs(y)),abs_tol)\n \n@takes_complex\ndef isinf(x):\n ''\n return math.isinf(x.real)or math.isinf(x.imag)\n \n@takes_complex\ndef isnan(x):\n ''\n return math.isnan(x.real)or math.isnan(x.imag)\n \n \n@takes_complex\ndef _to_complex(x):\n return x\n \ndef log(x,base=None ):\n ''\n\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n x=_to_complex(x)\n \n \n \n \n \n \n if base is not None :\n x=log(x)\n base=log(base)\n x=x /base\n \n ret=_SPECIAL_VALUE(x,_log_special_values)\n if ret is not None :\n return ret\n \n ax=math.fabs(x.real)\n ay=math.fabs(x.imag)\n \n if ax >_CM_LARGE_DOUBLE or ay >_CM_LARGE_DOUBLE:\n _real=math.log(math.hypot(ax /2.0,ay /2.0))+_M_LN2\n elif ax .0 or ay >.0:\n \n _real=math.log(math.hypot(math.ldexp(ax,sys.float_info.mant_dig),math.ldexp(ay,sys.float_info.mant_dig)))-sys.float_info.mant_dig *_M_LN2\n else :\n \n raise ValueError(\"math domain error\")\n _real=-_INF\n _imag=math.atan2(x.imag,x.real)\n else :\n h=math.hypot(ax,ay)\n if 0.71 <=h and h <=1.73:\n am=max(ax,ay)\n an=min(ax,ay)\n _real=math.log1p((am -1)*(am+1)+an *an)/2.\n else :\n _real=math.log(h)\n _imag=math.atan2(x.imag,x.real)\n return complex(_real,_imag)\n \n@takes_complex\ndef log10(x):\n ''\n\n\n\n \n ret=log(x);\n _real=ret.real /_M_LN10\n _imag=ret.imag /_M_LN10\n return complex(_real,_imag)\n \n@takes_complex\ndef sin(x):\n ''\n \n s=complex(-x.imag,x.real)\n s=sinh(s)\n return complex(s.imag,-s.real)\n \n@takes_complex\ndef sinh(x):\n ''\n \n if math.isinf(x.real)or math.isinf(x.imag):\n \n \n if math.isinf(x.imag)and not math.isnan(x.real):\n raise ValueError(\"math domain error\")\n \n if math.isinf(x.real)and -_INF 0:\n _real=math.copysign(_INF,cos(x.imag))\n _imag=math.copysign(_INF,sin(x.imag))\n else :\n _real=-math.copysign(_INF,cos(x.imag))\n _imag=math.copysign(_INF,sin(x.imag))\n return complex(_real,_imag)\n \n return _SPECIAL_VALUE(x,_sinh_special_values)\n \n if math.fabs(x.real)>_CM_LOG_LARGE_DOUBLE:\n x_minus_one=x.real -math.copysign(1.0,x.real)\n _real=math.cos(x.imag)*math.sinh(x.imag)*math.e\n _imag=math.sin(x.imag)*math.cosh(x.imag)*math.e\n else :\n _real=math.cos(x.imag)*math.sinh(x.real)\n _imag=math.sin(x.imag)*math.cosh(x.real)\n \n if math.isinf(_real)or math.isinf(_imag):\n raise OverflowError()\n \n return complex(_real,_imag)\n \n@takes_complex\ndef tan(x):\n ''\n s=atanh(complex(-x.imag,x.real))\n return complex(s.imag,-s.real)\n \n@takes_complex\ndef tanh(x):\n ''\n ''\n\n\n \n \n \n \n \n \n \n \n \n \n \n if isinf(x):\n if math.isinf(x.imag)and -_INF 0:\n _real=1.0\n _imag=math.copysign(.0,2.0 *math.sin(x.imag)*math.cos(x.imag))\n else :\n _real=-1.0\n _imag=math.copysign(.0,2. *math.sin(x.imag)*math.cos(x.imag))\n return complex(_real,_imag)\n return _SPECIAL_VALUE(x,_tanh_special_values)\n \n \n if math.fabs(x.real)>_CM_LOG_LARGE_DOUBLE:\n _real=math.copysign(1.,x.real)\n _imag=4. *math.sin(x.imag)*math.cos(x.imag)*math.exp(-2. *math.fabs(x.real))\n else :\n tx=math.tanh(x.real)\n ty=math.tan(x.imag)\n cx=1.0 /math.cosh(x.real)\n txty=tx *ty\n denom=1.+txty *txty\n _real=tx *(1.+ty *ty)/denom\n _imag=((ty /denom)*cx)*cx\n return complex(_real,_imag)\n \n \npi=math.pi\ne=math.e\n\n_CM_LARGE_DOUBLE=sys.float_info.max /4\n_CM_SQRT_LARGE_DOUBLE=math.sqrt(_CM_LARGE_DOUBLE)\n_CM_LOG_LARGE_DOUBLE=math.log(_CM_LARGE_DOUBLE)\n_CM_SQRT_DBL_MIN=math.sqrt(sys.float_info.min)\n_M_LN2=0.6931471805599453094\n_M_LN10=2.302585092994045684\n\nif sys.float_info.radix ==2:\n _CM_SCALE_UP=int((2 *(sys.float_info.mant_dig /2)+1))\nelif sys.float_info.radix ==16:\n _CM_SCALE_UP=int((4 *sys.float_info.mant_dig+1))\nelse :\n raise (\"cmath implementation expects the float base to be either 2 or 16, got \"+str(sys.float_info.radix)+\" instead.\")\n_CM_SCALE_DOWN=int((-(_CM_SCALE_UP+1)/2))\n\n_INF=float('inf')\n_NAN=float('nan')\n_PI=math.pi\n_P14=0.25 *math.pi\n_P12=0.5 *math.pi\n_P34=0.75 *math.pi\n_U=-9.5426319407711027e33\n\n\n_ST_NINF=0\n_ST_NEG=1\n_ST_NZERO=2\n_ST_PZERO=3\n_ST_POS=4\n_ST_PINF=5\n_ST_NAN=6\n\n\ndef _SPECIAL_VALUE(z,table):\n if not math.isfinite(z.real)or not math.isfinite(z.imag):\n return table[_special_type(z.real)][_special_type(z.imag)]\n else :\n return None\n \ndef _special_type(x):\n if -_INF ):\"\n misc_header=\"Miscellaneous help topics:\"\n undoc_header=\"Undocumented commands:\"\n nohelp=\"*** No help on %s\"\n use_rawinput=1\n \n def __init__(self,completekey='tab',stdin=None ,stdout=None ):\n ''\n\n\n\n\n\n\n\n\n \n if stdin is not None :\n self.stdin=stdin\n else :\n self.stdin=sys.stdin\n if stdout is not None :\n self.stdout=stdout\n else :\n self.stdout=sys.stdout\n self.cmdqueue=[]\n self.completekey=completekey\n \n def cmdloop(self,intro=None ):\n ''\n\n\n\n \n \n self.preloop()\n if self.use_rawinput and self.completekey:\n try :\n import readline\n self.old_completer=readline.get_completer()\n readline.set_completer(self.complete)\n readline.parse_and_bind(self.completekey+\": complete\")\n except ImportError:\n pass\n try :\n if intro is not None :\n self.intro=intro\n if self.intro:\n self.stdout.write(str(self.intro)+\"\\n\")\n stop=None\n while not stop:\n if self.cmdqueue:\n line=self.cmdqueue.pop(0)\n else :\n if self.use_rawinput:\n try :\n line=input(self.prompt)\n except EOFError:\n line='EOF'\n else :\n self.stdout.write(self.prompt)\n self.stdout.flush()\n line=self.stdin.readline()\n if not len(line):\n line='EOF'\n else :\n line=line.rstrip('\\r\\n')\n line=self.precmd(line)\n stop=self.onecmd(line)\n stop=self.postcmd(stop,line)\n self.postloop()\n finally :\n if self.use_rawinput and self.completekey:\n try :\n import readline\n readline.set_completer(self.old_completer)\n except ImportError:\n pass\n \n \n def precmd(self,line):\n ''\n\n\n \n return line\n \n def postcmd(self,stop,line):\n ''\n return stop\n \n def preloop(self):\n ''\n pass\n \n def postloop(self):\n ''\n\n\n \n pass\n \n def parseline(self,line):\n ''\n\n\n \n line=line.strip()\n if not line:\n return None ,None ,line\n elif line[0]=='?':\n line='help '+line[1:]\n elif line[0]=='!':\n if hasattr(self,'do_shell'):\n line='shell '+line[1:]\n else :\n return None ,None ,line\n i,n=0,len(line)\n while i 0:\n cmd,args,foo=self.parseline(line)\n if cmd =='':\n compfunc=self.completedefault\n else :\n try :\n compfunc=getattr(self,'complete_'+cmd)\n except AttributeError:\n compfunc=self.completedefault\n else :\n compfunc=self.completenames\n self.completion_matches=compfunc(text,line,begidx,endidx)\n try :\n return self.completion_matches[state]\n except IndexError:\n return None\n \n def get_names(self):\n \n \n return dir(self.__class__)\n \n def complete_help(self,*args):\n commands=set(self.completenames(*args))\n topics=set(a[5:]for a in self.get_names()\n if a.startswith('help_'+args[0]))\n return list(commands |topics)\n \n def do_help(self,arg):\n ''\n if arg:\n \n try :\n func=getattr(self,'help_'+arg)\n except AttributeError:\n try :\n doc=getattr(self,'do_'+arg).__doc__\n if doc:\n self.stdout.write(\"%s\\n\"%str(doc))\n return\n except AttributeError:\n pass\n self.stdout.write(\"%s\\n\"%str(self.nohelp %(arg,)))\n return\n func()\n else :\n names=self.get_names()\n cmds_doc=[]\n cmds_undoc=[]\n help={}\n for name in names:\n if name[:5]=='help_':\n help[name[5:]]=1\n names.sort()\n \n prevname=''\n for name in names:\n if name[:3]=='do_':\n if name ==prevname:\n continue\n prevname=name\n cmd=name[3:]\n if cmd in help:\n cmds_doc.append(cmd)\n del help[cmd]\n elif getattr(self,name).__doc__:\n cmds_doc.append(cmd)\n else :\n cmds_undoc.append(cmd)\n self.stdout.write(\"%s\\n\"%str(self.doc_leader))\n self.print_topics(self.doc_header,cmds_doc,15,80)\n self.print_topics(self.misc_header,list(help.keys()),15,80)\n self.print_topics(self.undoc_header,cmds_undoc,15,80)\n \n def print_topics(self,header,cmds,cmdlen,maxcol):\n if cmds:\n self.stdout.write(\"%s\\n\"%str(header))\n if self.ruler:\n self.stdout.write(\"%s\\n\"%str(self.ruler *len(header)))\n self.columnize(cmds,maxcol -1)\n self.stdout.write(\"\\n\")\n \n def columnize(self,list,displaywidth=80):\n ''\n\n\n\n \n if not list:\n self.stdout.write(\"\\n\")\n return\n \n nonstrings=[i for i in range(len(list))\n if not isinstance(list[i],str)]\n if nonstrings:\n raise TypeError(\"list[i] not a string for i in %s\"\n %\", \".join(map(str,nonstrings)))\n size=len(list)\n if size ==1:\n self.stdout.write('%s\\n'%str(list[0]))\n return\n \n for nrows in range(1,len(list)):\n ncols=(size+nrows -1)//nrows\n colwidths=[]\n totwidth=-2\n for col in range(ncols):\n colwidth=0\n for row in range(nrows):\n i=row+nrows *col\n if i >=size:\n break\n x=list[i]\n colwidth=max(colwidth,len(x))\n colwidths.append(colwidth)\n totwidth +=colwidth+2\n if totwidth >displaywidth:\n break\n if totwidth <=displaywidth:\n break\n else :\n nrows=len(list)\n ncols=1\n colwidths=[0]\n for row in range(nrows):\n texts=[]\n for col in range(ncols):\n i=row+nrows *col\n if i >=size:\n x=\"\"\n else :\n x=list[i]\n texts.append(x)\n while texts and not texts[-1]:\n del texts[-1]\n for col in range(len(texts)):\n texts[col]=texts[col].ljust(colwidths[col])\n self.stdout.write(\"%s\\n\"%str(\" \".join(texts)))\n", ["readline", "string", "sys"]], "code": [".py", "''\n\n\n\n\n\n\nimport sys\nimport traceback\nfrom codeop import CommandCompiler,compile_command\n\n__all__=[\"InteractiveInterpreter\",\"InteractiveConsole\",\"interact\",\n\"compile_command\"]\n\nclass InteractiveInterpreter:\n ''\n\n\n\n\n\n \n \n def __init__(self,locals=None ):\n ''\n\n\n\n\n\n\n \n if locals is None :\n locals={\"__name__\":\"__console__\",\"__doc__\":None }\n self.locals=locals\n self.compile=CommandCompiler()\n \n def runsource(self,source,filename=\"\",symbol=\"single\"):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n try :\n code=self.compile(source,filename,symbol)\n except (OverflowError,SyntaxError,ValueError):\n \n self.showsyntaxerror(filename)\n return False\n \n if code is None :\n \n return True\n \n \n self.runcode(code)\n return False\n \n def runcode(self,code):\n ''\n\n\n\n\n\n\n\n\n\n \n try :\n exec(code,self.locals)\n except SystemExit:\n raise\n except :\n self.showtraceback()\n \n def showsyntaxerror(self,filename=None ):\n ''\n\n\n\n\n\n\n\n\n\n \n type,value,tb=sys.exc_info()\n sys.last_type=type\n sys.last_value=value\n sys.last_traceback=tb\n if filename and type is SyntaxError:\n \n try :\n msg,(dummy_filename,lineno,offset,line)=value.args\n except ValueError:\n \n pass\n else :\n \n value=SyntaxError(msg,(filename,lineno,offset,line))\n sys.last_value=value\n if sys.excepthook is sys.__excepthook__:\n lines=traceback.format_exception_only(type,value)\n self.write(''.join(lines))\n else :\n \n \n sys.excepthook(type,value,tb)\n \n def showtraceback(self):\n ''\n\n\n\n\n\n \n sys.last_type,sys.last_value,last_tb=ei=sys.exc_info()\n sys.last_traceback=last_tb\n try :\n lines=traceback.format_exception(ei[0],ei[1],last_tb.tb_next)\n if sys.excepthook is sys.__excepthook__:\n self.write(''.join(lines))\n else :\n \n \n sys.excepthook(ei[0],ei[1],last_tb)\n finally :\n last_tb=ei=None\n \n def write(self,data):\n ''\n\n\n\n\n \n sys.stderr.write(data)\n \n \nclass InteractiveConsole(InteractiveInterpreter):\n ''\n\n\n\n\n \n \n def __init__(self,locals=None ,filename=\"\"):\n ''\n\n\n\n\n\n\n\n \n InteractiveInterpreter.__init__(self,locals)\n self.filename=filename\n self.resetbuffer()\n \n def resetbuffer(self):\n ''\n self.buffer=[]\n \n def interact(self,banner=None ,exitmsg=None ):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n try :\n sys.ps1\n except AttributeError:\n sys.ps1=\">>> \"\n try :\n sys.ps2\n except AttributeError:\n sys.ps2=\"... \"\n cprt='Type \"help\", \"copyright\", \"credits\" or \"license\" for more information.'\n if banner is None :\n self.write(\"Python %s on %s\\n%s\\n(%s)\\n\"%\n (sys.version,sys.platform,cprt,\n self.__class__.__name__))\n elif banner:\n self.write(\"%s\\n\"%str(banner))\n more=0\n while 1:\n try :\n if more:\n prompt=sys.ps2\n else :\n prompt=sys.ps1\n try :\n line=self.raw_input(prompt)\n except EOFError:\n self.write(\"\\n\")\n break\n else :\n more=self.push(line)\n except KeyboardInterrupt:\n self.write(\"\\nKeyboardInterrupt\\n\")\n self.resetbuffer()\n more=0\n if exitmsg is None :\n self.write('now exiting %s...\\n'%self.__class__.__name__)\n elif exitmsg !='':\n self.write('%s\\n'%exitmsg)\n \n def push(self,line):\n ''\n\n\n\n\n\n\n\n\n\n\n\n \n self.buffer.append(line)\n source=\"\\n\".join(self.buffer)\n more=self.runsource(source,self.filename)\n if not more:\n self.resetbuffer()\n return more\n \n def raw_input(self,prompt=\"\"):\n ''\n\n\n\n\n\n\n\n\n \n return input(prompt)\n \n \n \ndef interact(banner=None ,readfunc=None ,local=None ,exitmsg=None ):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n \n console=InteractiveConsole(local)\n if readfunc is not None :\n console.raw_input=readfunc\n else :\n try :\n import readline\n except ImportError:\n pass\n console.interact(banner,exitmsg)\n \n \nif __name__ ==\"__main__\":\n import argparse\n \n parser=argparse.ArgumentParser()\n parser.add_argument('-q',action='store_true',\n help=\"don't print version and copyright messages\")\n args=parser.parse_args()\n if args.q or sys.flags.quiet:\n banner=''\n else :\n banner=None\n interact(banner)\n", ["argparse", "codeop", "readline", "sys", "traceback"]], "codecs": [".py", "''\n\n\n\n\n\n\n\n\nimport builtins\nimport sys\n\n\n\ntry :\n from _codecs import *\nexcept ImportError as why:\n raise SystemError('Failed to load the builtin codecs: %s'%why)\n \n__all__=[\"register\",\"lookup\",\"open\",\"EncodedFile\",\"BOM\",\"BOM_BE\",\n\"BOM_LE\",\"BOM32_BE\",\"BOM32_LE\",\"BOM64_BE\",\"BOM64_LE\",\n\"BOM_UTF8\",\"BOM_UTF16\",\"BOM_UTF16_LE\",\"BOM_UTF16_BE\",\n\"BOM_UTF32\",\"BOM_UTF32_LE\",\"BOM_UTF32_BE\",\n\"CodecInfo\",\"Codec\",\"IncrementalEncoder\",\"IncrementalDecoder\",\n\"StreamReader\",\"StreamWriter\",\n\"StreamReaderWriter\",\"StreamRecoder\",\n\"getencoder\",\"getdecoder\",\"getincrementalencoder\",\n\"getincrementaldecoder\",\"getreader\",\"getwriter\",\n\"encode\",\"decode\",\"iterencode\",\"iterdecode\",\n\"strict_errors\",\"ignore_errors\",\"replace_errors\",\n\"xmlcharrefreplace_errors\",\n\"backslashreplace_errors\",\"namereplace_errors\",\n\"register_error\",\"lookup_error\"]\n\n\n\n\n\n\n\n\n\n\nBOM_UTF8=b'\\xef\\xbb\\xbf'\n\n\nBOM_LE=BOM_UTF16_LE=b'\\xff\\xfe'\n\n\nBOM_BE=BOM_UTF16_BE=b'\\xfe\\xff'\n\n\nBOM_UTF32_LE=b'\\xff\\xfe\\x00\\x00'\n\n\nBOM_UTF32_BE=b'\\x00\\x00\\xfe\\xff'\n\nif sys.byteorder =='little':\n\n\n BOM=BOM_UTF16=BOM_UTF16_LE\n \n \n BOM_UTF32=BOM_UTF32_LE\n \nelse :\n\n\n BOM=BOM_UTF16=BOM_UTF16_BE\n \n \n BOM_UTF32=BOM_UTF32_BE\n \n \nBOM32_LE=BOM_UTF16_LE\nBOM32_BE=BOM_UTF16_BE\nBOM64_LE=BOM_UTF32_LE\nBOM64_BE=BOM_UTF32_BE\n\n\n\n\nclass CodecInfo(tuple):\n ''\n \n \n \n \n \n \n \n _is_text_encoding=True\n \n def __new__(cls,encode,decode,streamreader=None ,streamwriter=None ,\n incrementalencoder=None ,incrementaldecoder=None ,name=None ,\n *,_is_text_encoding=None ):\n self=tuple.__new__(cls,(encode,decode,streamreader,streamwriter))\n self.name=name\n self.encode=encode\n self.decode=decode\n self.incrementalencoder=incrementalencoder\n self.incrementaldecoder=incrementaldecoder\n self.streamwriter=streamwriter\n self.streamreader=streamreader\n if _is_text_encoding is not None :\n self._is_text_encoding=_is_text_encoding\n return self\n \n def __repr__(self):\n return \"<%s.%s object for encoding %s at %#x>\"%\\\n (self.__class__.__module__,self.__class__.__qualname__,\n self.name,id(self))\n \nclass Codec:\n\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n def encode(self,input,errors='strict'):\n \n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n raise NotImplementedError\n \n def decode(self,input,errors='strict'):\n \n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n raise NotImplementedError\n \nclass IncrementalEncoder(object):\n ''\n\n\n\n \n def __init__(self,errors='strict'):\n ''\n\n\n\n\n\n \n self.errors=errors\n self.buffer=\"\"\n \n def encode(self,input,final=False ):\n ''\n\n \n raise NotImplementedError\n \n def reset(self):\n ''\n\n \n \n def getstate(self):\n ''\n\n \n return 0\n \n def setstate(self,state):\n ''\n\n\n \n \nclass BufferedIncrementalEncoder(IncrementalEncoder):\n ''\n\n\n\n \n def __init__(self,errors='strict'):\n IncrementalEncoder.__init__(self,errors)\n \n self.buffer=\"\"\n \n def _buffer_encode(self,input,errors,final):\n \n \n raise NotImplementedError\n \n def encode(self,input,final=False ):\n \n data=self.buffer+input\n (result,consumed)=self._buffer_encode(data,self.errors,final)\n \n self.buffer=data[consumed:]\n return result\n \n def reset(self):\n IncrementalEncoder.reset(self)\n self.buffer=\"\"\n \n def getstate(self):\n return self.buffer or 0\n \n def setstate(self,state):\n self.buffer=state or \"\"\n \nclass IncrementalDecoder(object):\n ''\n\n\n\n \n def __init__(self,errors='strict'):\n ''\n\n\n\n\n\n \n self.errors=errors\n \n def decode(self,input,final=False ):\n ''\n\n \n raise NotImplementedError\n \n def reset(self):\n ''\n\n \n \n def getstate(self):\n ''\n\n\n\n\n\n\n\n\n\n \n return (b\"\",0)\n \n def setstate(self,state):\n ''\n\n\n\n\n \n \nclass BufferedIncrementalDecoder(IncrementalDecoder):\n ''\n\n\n\n \n def __init__(self,errors='strict'):\n IncrementalDecoder.__init__(self,errors)\n \n self.buffer=b\"\"\n \n def _buffer_decode(self,input,errors,final):\n \n \n raise NotImplementedError\n \n def decode(self,input,final=False ):\n \n data=self.buffer+input\n (result,consumed)=self._buffer_decode(data,self.errors,final)\n \n self.buffer=data[consumed:]\n return result\n \n def reset(self):\n IncrementalDecoder.reset(self)\n self.buffer=b\"\"\n \n def getstate(self):\n \n return (self.buffer,0)\n \n def setstate(self,state):\n \n self.buffer=state[0]\n \n \n \n \n \n \n \n \nclass StreamWriter(Codec):\n\n def __init__(self,stream,errors='strict'):\n \n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n self.stream=stream\n self.errors=errors\n \n def write(self,object):\n \n ''\n \n data,consumed=self.encode(object,self.errors)\n self.stream.write(data)\n \n def writelines(self,list):\n \n ''\n\n \n self.write(''.join(list))\n \n def reset(self):\n \n ''\n\n\n\n\n\n\n \n pass\n \n def seek(self,offset,whence=0):\n self.stream.seek(offset,whence)\n if whence ==0 and offset ==0:\n self.reset()\n \n def __getattr__(self,name,\n getattr=getattr):\n \n ''\n \n return getattr(self.stream,name)\n \n def __enter__(self):\n return self\n \n def __exit__(self,type,value,tb):\n self.stream.close()\n \n \n \nclass StreamReader(Codec):\n\n charbuffertype=str\n \n def __init__(self,stream,errors='strict'):\n \n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n self.stream=stream\n self.errors=errors\n self.bytebuffer=b\"\"\n self._empty_charbuffer=self.charbuffertype()\n self.charbuffer=self._empty_charbuffer\n self.linebuffer=None\n \n def decode(self,input,errors='strict'):\n raise NotImplementedError\n \n def read(self,size=-1,chars=-1,firstline=False ):\n \n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n if self.linebuffer:\n self.charbuffer=self._empty_charbuffer.join(self.linebuffer)\n self.linebuffer=None\n \n if chars <0:\n \n \n chars=size\n \n \n while True :\n \n if chars >=0:\n if len(self.charbuffer)>=chars:\n break\n \n if size <0:\n newdata=self.stream.read()\n else :\n newdata=self.stream.read(size)\n \n data=self.bytebuffer+newdata\n if not data:\n break\n try :\n newchars,decodedbytes=self.decode(data,self.errors)\n except UnicodeDecodeError as exc:\n if firstline:\n newchars,decodedbytes=\\\n self.decode(data[:exc.start],self.errors)\n lines=newchars.splitlines(keepends=True )\n if len(lines)<=1:\n raise\n else :\n raise\n \n self.bytebuffer=data[decodedbytes:]\n \n self.charbuffer +=newchars\n \n if not newdata:\n break\n if chars <0:\n \n result=self.charbuffer\n self.charbuffer=self._empty_charbuffer\n else :\n \n result=self.charbuffer[:chars]\n self.charbuffer=self.charbuffer[chars:]\n return result\n \n def readline(self,size=None ,keepends=True ):\n \n ''\n\n\n\n\n\n \n \n \n if self.linebuffer:\n line=self.linebuffer[0]\n del self.linebuffer[0]\n if len(self.linebuffer)==1:\n \n \n self.charbuffer=self.linebuffer[0]\n self.linebuffer=None\n if not keepends:\n line=line.splitlines(keepends=False )[0]\n return line\n \n readsize=size or 72\n line=self._empty_charbuffer\n \n while True :\n data=self.read(readsize,firstline=True )\n if data:\n \n \n \n if (isinstance(data,str)and data.endswith(\"\\r\"))or\\\n (isinstance(data,bytes)and data.endswith(b\"\\r\")):\n data +=self.read(size=1,chars=1)\n \n line +=data\n lines=line.splitlines(keepends=True )\n if lines:\n if len(lines)>1:\n \n \n line=lines[0]\n del lines[0]\n if len(lines)>1:\n \n lines[-1]+=self.charbuffer\n self.linebuffer=lines\n self.charbuffer=None\n else :\n \n self.charbuffer=lines[0]+self.charbuffer\n if not keepends:\n line=line.splitlines(keepends=False )[0]\n break\n line0withend=lines[0]\n line0withoutend=lines[0].splitlines(keepends=False )[0]\n if line0withend !=line0withoutend:\n \n self.charbuffer=self._empty_charbuffer.join(lines[1:])+\\\n self.charbuffer\n if keepends:\n line=line0withend\n else :\n line=line0withoutend\n break\n \n if not data or size is not None :\n if line and not keepends:\n line=line.splitlines(keepends=False )[0]\n break\n if readsize <8000:\n readsize *=2\n return line\n \n def readlines(self,sizehint=None ,keepends=True ):\n \n ''\n\n\n\n\n\n\n\n\n \n data=self.read()\n return data.splitlines(keepends)\n \n def reset(self):\n \n ''\n\n\n\n\n\n \n self.bytebuffer=b\"\"\n self.charbuffer=self._empty_charbuffer\n self.linebuffer=None\n \n def seek(self,offset,whence=0):\n ''\n\n\n \n self.stream.seek(offset,whence)\n self.reset()\n \n def __next__(self):\n \n ''\n line=self.readline()\n if line:\n return line\n raise StopIteration\n \n def __iter__(self):\n return self\n \n def __getattr__(self,name,\n getattr=getattr):\n \n ''\n \n return getattr(self.stream,name)\n \n def __enter__(self):\n return self\n \n def __exit__(self,type,value,tb):\n self.stream.close()\n \n \n \nclass StreamReaderWriter:\n\n ''\n\n\n\n\n\n\n \n \n encoding='unknown'\n \n def __init__(self,stream,Reader,Writer,errors='strict'):\n \n ''\n\n\n\n\n\n\n\n\n\n \n self.stream=stream\n self.reader=Reader(stream,errors)\n self.writer=Writer(stream,errors)\n self.errors=errors\n \n def read(self,size=-1):\n \n return self.reader.read(size)\n \n def readline(self,size=None ):\n \n return self.reader.readline(size)\n \n def readlines(self,sizehint=None ):\n \n return self.reader.readlines(sizehint)\n \n def __next__(self):\n \n ''\n return next(self.reader)\n \n def __iter__(self):\n return self\n \n def write(self,data):\n \n return self.writer.write(data)\n \n def writelines(self,list):\n \n return self.writer.writelines(list)\n \n def reset(self):\n \n self.reader.reset()\n self.writer.reset()\n \n def seek(self,offset,whence=0):\n self.stream.seek(offset,whence)\n self.reader.reset()\n if whence ==0 and offset ==0:\n self.writer.reset()\n \n def __getattr__(self,name,\n getattr=getattr):\n \n ''\n \n return getattr(self.stream,name)\n \n \n \n def __enter__(self):\n return self\n \n def __exit__(self,type,value,tb):\n self.stream.close()\n \n \n \nclass StreamRecoder:\n\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n data_encoding='unknown'\n file_encoding='unknown'\n \n def __init__(self,stream,encode,decode,Reader,Writer,\n errors='strict'):\n \n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n self.stream=stream\n self.encode=encode\n self.decode=decode\n self.reader=Reader(stream,errors)\n self.writer=Writer(stream,errors)\n self.errors=errors\n \n def read(self,size=-1):\n \n data=self.reader.read(size)\n data,bytesencoded=self.encode(data,self.errors)\n return data\n \n def readline(self,size=None ):\n \n if size is None :\n data=self.reader.readline()\n else :\n data=self.reader.readline(size)\n data,bytesencoded=self.encode(data,self.errors)\n return data\n \n def readlines(self,sizehint=None ):\n \n data=self.reader.read()\n data,bytesencoded=self.encode(data,self.errors)\n return data.splitlines(keepends=True )\n \n def __next__(self):\n \n ''\n data=next(self.reader)\n data,bytesencoded=self.encode(data,self.errors)\n return data\n \n def __iter__(self):\n return self\n \n def write(self,data):\n \n data,bytesdecoded=self.decode(data,self.errors)\n return self.writer.write(data)\n \n def writelines(self,list):\n \n data=b''.join(list)\n data,bytesdecoded=self.decode(data,self.errors)\n return self.writer.write(data)\n \n def reset(self):\n \n self.reader.reset()\n self.writer.reset()\n \n def seek(self,offset,whence=0):\n \n \n self.reader.seek(offset,whence)\n self.writer.seek(offset,whence)\n \n def __getattr__(self,name,\n getattr=getattr):\n \n ''\n \n return getattr(self.stream,name)\n \n def __enter__(self):\n return self\n \n def __exit__(self,type,value,tb):\n self.stream.close()\n \n \n \ndef open(filename,mode='r',encoding=None ,errors='strict',buffering=-1):\n\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n if encoding is not None and\\\n 'b'not in mode:\n \n mode=mode+'b'\n file=builtins.open(filename,mode,buffering)\n if encoding is None :\n return file\n info=lookup(encoding)\n srw=StreamReaderWriter(file,info.streamreader,info.streamwriter,errors)\n \n srw.encoding=encoding\n return srw\n \ndef EncodedFile(file,data_encoding,file_encoding=None ,errors='strict'):\n\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n if file_encoding is None :\n file_encoding=data_encoding\n data_info=lookup(data_encoding)\n file_info=lookup(file_encoding)\n sr=StreamRecoder(file,data_info.encode,data_info.decode,\n file_info.streamreader,file_info.streamwriter,errors)\n \n sr.data_encoding=data_encoding\n sr.file_encoding=file_encoding\n return sr\n \n \n \ndef getencoder(encoding):\n\n ''\n\n\n\n\n \n return lookup(encoding).encode\n \ndef getdecoder(encoding):\n\n ''\n\n\n\n\n \n return lookup(encoding).decode\n \ndef getincrementalencoder(encoding):\n\n ''\n\n\n\n\n\n \n encoder=lookup(encoding).incrementalencoder\n if encoder is None :\n raise LookupError(encoding)\n return encoder\n \ndef getincrementaldecoder(encoding):\n\n ''\n\n\n\n\n\n \n decoder=lookup(encoding).incrementaldecoder\n if decoder is None :\n raise LookupError(encoding)\n return decoder\n \ndef getreader(encoding):\n\n ''\n\n\n\n\n \n return lookup(encoding).streamreader\n \ndef getwriter(encoding):\n\n ''\n\n\n\n\n \n return lookup(encoding).streamwriter\n \ndef iterencode(iterator,encoding,errors='strict',**kwargs):\n ''\n\n\n\n\n\n\n \n encoder=getincrementalencoder(encoding)(errors,**kwargs)\n for input in iterator:\n output=encoder.encode(input)\n if output:\n yield output\n output=encoder.encode(\"\",True )\n if output:\n yield output\n \ndef iterdecode(iterator,encoding,errors='strict',**kwargs):\n ''\n\n\n\n\n\n\n \n decoder=getincrementaldecoder(encoding)(errors,**kwargs)\n for input in iterator:\n output=decoder.decode(input)\n if output:\n yield output\n output=decoder.decode(b\"\",True )\n if output:\n yield output\n \n \n \ndef make_identity_dict(rng):\n\n ''\n\n\n\n\n \n return {i:i for i in rng}\n \ndef make_encoding_map(decoding_map):\n\n ''\n\n\n\n\n\n\n\n\n\n \n m={}\n for k,v in decoding_map.items():\n if not v in m:\n m[v]=k\n else :\n m[v]=None\n return m\n \n \n \ntry :\n strict_errors=lookup_error(\"strict\")\n ignore_errors=lookup_error(\"ignore\")\n replace_errors=lookup_error(\"replace\")\n xmlcharrefreplace_errors=lookup_error(\"xmlcharrefreplace\")\n backslashreplace_errors=lookup_error(\"backslashreplace\")\n namereplace_errors=lookup_error(\"namereplace\")\nexcept LookupError:\n\n strict_errors=None\n ignore_errors=None\n replace_errors=None\n xmlcharrefreplace_errors=None\n backslashreplace_errors=None\n namereplace_errors=None\n \n \n \n_false=0\nif _false:\n import encodings\n \n \n \nif __name__ =='__main__':\n\n\n sys.stdout=EncodedFile(sys.stdout,'latin-1','utf-8')\n \n \n sys.stdin=EncodedFile(sys.stdin,'utf-8','latin-1')\n", ["_codecs", "builtins", "encodings", "sys"]], "codeop": [".py", "''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport __future__\n\n_features=[getattr(__future__,fname)\nfor fname in __future__.all_feature_names]\n\n__all__=[\"compile_command\",\"Compile\",\"CommandCompiler\"]\n\nPyCF_DONT_IMPLY_DEDENT=0x200\n\ndef _maybe_compile(compiler,source,filename,symbol):\n\n for line in source.split(\"\\n\"):\n line=line.strip()\n if line and line[0]!='#':\n break\n else :\n if symbol !=\"eval\":\n source=\"pass\"\n \n err=err1=err2=None\n code=code1=code2=None\n \n try :\n code=compiler(source,filename,symbol)\n except SyntaxError as err:\n pass\n \n try :\n code1=compiler(source+\"\\n\",filename,symbol)\n except SyntaxError as e:\n err1=e\n \n try :\n code2=compiler(source+\"\\n\\n\",filename,symbol)\n except SyntaxError as e:\n err2=e\n \n if code:\n return code\n if not code1 and repr(err1)==repr(err2):\n raise err1\n \ndef _compile(source,filename,symbol):\n return compile(source,filename,symbol,PyCF_DONT_IMPLY_DEDENT)\n \ndef compile_command(source,filename=\"\",symbol=\"single\"):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n return _maybe_compile(_compile,source,filename,symbol)\n \nclass Compile:\n ''\n\n\n \n def __init__(self):\n self.flags=PyCF_DONT_IMPLY_DEDENT\n \n def __call__(self,source,filename,symbol):\n codeob=compile(source,filename,symbol,self.flags,1)\n for feature in _features:\n if codeob.co_flags&feature.compiler_flag:\n self.flags |=feature.compiler_flag\n return codeob\n \nclass CommandCompiler:\n ''\n\n\n\n \n \n def __init__(self,):\n self.compiler=Compile()\n \n def __call__(self,source,filename=\"\",symbol=\"single\"):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n return _maybe_compile(self.compiler,source,filename,symbol)\n", ["__future__"]], "colorsys": [".py", "''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n__all__=[\"rgb_to_yiq\",\"yiq_to_rgb\",\"rgb_to_hls\",\"hls_to_rgb\",\n\"rgb_to_hsv\",\"hsv_to_rgb\"]\n\n\n\nONE_THIRD=1.0 /3.0\nONE_SIXTH=1.0 /6.0\nTWO_THIRD=2.0 /3.0\n\n\n\n\n\n\n\n\ndef rgb_to_yiq(r,g,b):\n y=0.30 *r+0.59 *g+0.11 *b\n i=0.74 *(r -y)-0.27 *(b -y)\n q=0.48 *(r -y)+0.41 *(b -y)\n return (y,i,q)\n \ndef yiq_to_rgb(y,i,q):\n\n\n\n\n r=y+0.9468822170900693 *i+0.6235565819861433 *q\n g=y -0.27478764629897834 *i -0.6356910791873801 *q\n b=y -1.1085450346420322 *i+1.7090069284064666 *q\n \n if r <0.0:\n r=0.0\n if g <0.0:\n g=0.0\n if b <0.0:\n b=0.0\n if r >1.0:\n r=1.0\n if g >1.0:\n g=1.0\n if b >1.0:\n b=1.0\n return (r,g,b)\n \n \n \n \n \n \n \ndef rgb_to_hls(r,g,b):\n maxc=max(r,g,b)\n minc=min(r,g,b)\n \n l=(minc+maxc)/2.0\n if minc ==maxc:\n return 0.0,l,0.0\n if l <=0.5:\n s=(maxc -minc)/(maxc+minc)\n else :\n s=(maxc -minc)/(2.0 -maxc -minc)\n rc=(maxc -r)/(maxc -minc)\n gc=(maxc -g)/(maxc -minc)\n bc=(maxc -b)/(maxc -minc)\n if r ==maxc:\n h=bc -gc\n elif g ==maxc:\n h=2.0+rc -bc\n else :\n h=4.0+gc -rc\n h=(h /6.0)%1.0\n return h,l,s\n \ndef hls_to_rgb(h,l,s):\n if s ==0.0:\n return l,l,l\n if l <=0.5:\n m2=l *(1.0+s)\n else :\n m2=l+s -(l *s)\n m1=2.0 *l -m2\n return (_v(m1,m2,h+ONE_THIRD),_v(m1,m2,h),_v(m1,m2,h -ONE_THIRD))\n \ndef _v(m1,m2,hue):\n hue=hue %1.0\n if hue MAX_INTERPOLATION_DEPTH:\n raise InterpolationDepthError(option,section,rawval)\n while rest:\n p=rest.find(\"%\")\n if p <0:\n accum.append(rest)\n return\n if p >0:\n accum.append(rest[:p])\n rest=rest[p:]\n \n c=rest[1:2]\n if c ==\"%\":\n accum.append(\"%\")\n rest=rest[2:]\n elif c ==\"(\":\n m=self._KEYCRE.match(rest)\n if m is None :\n raise InterpolationSyntaxError(option,section,\n \"bad interpolation variable reference %r\"%rest)\n var=parser.optionxform(m.group(1))\n rest=rest[m.end():]\n try :\n v=map[var]\n except KeyError:\n raise InterpolationMissingOptionError(\n option,section,rawval,var)from None\n if \"%\"in v:\n self._interpolate_some(parser,option,accum,v,\n section,map,depth+1)\n else :\n accum.append(v)\n else :\n raise InterpolationSyntaxError(\n option,section,\n \"'%%' must be followed by '%%' or '(', \"\n \"found: %r\"%(rest,))\n \n \nclass ExtendedInterpolation(Interpolation):\n ''\n \n \n _KEYCRE=re.compile(r\"\\$\\{([^}]+)\\}\")\n \n def before_get(self,parser,section,option,value,defaults):\n L=[]\n self._interpolate_some(parser,option,L,value,section,defaults,1)\n return ''.join(L)\n \n def before_set(self,parser,section,option,value):\n tmp_value=value.replace('$$','')\n tmp_value=self._KEYCRE.sub('',tmp_value)\n if '$'in tmp_value:\n raise ValueError(\"invalid interpolation syntax in %r at \"\n \"position %d\"%(value,tmp_value.find('$')))\n return value\n \n def _interpolate_some(self,parser,option,accum,rest,section,map,\n depth):\n rawval=parser.get(section,option,raw=True ,fallback=rest)\n if depth >MAX_INTERPOLATION_DEPTH:\n raise InterpolationDepthError(option,section,rawval)\n while rest:\n p=rest.find(\"$\")\n if p <0:\n accum.append(rest)\n return\n if p >0:\n accum.append(rest[:p])\n rest=rest[p:]\n \n c=rest[1:2]\n if c ==\"$\":\n accum.append(\"$\")\n rest=rest[2:]\n elif c ==\"{\":\n m=self._KEYCRE.match(rest)\n if m is None :\n raise InterpolationSyntaxError(option,section,\n \"bad interpolation variable reference %r\"%rest)\n path=m.group(1).split(':')\n rest=rest[m.end():]\n sect=section\n opt=option\n try :\n if len(path)==1:\n opt=parser.optionxform(path[0])\n v=map[opt]\n elif len(path)==2:\n sect=path[0]\n opt=parser.optionxform(path[1])\n v=parser.get(sect,opt,raw=True )\n else :\n raise InterpolationSyntaxError(\n option,section,\n \"More than one ':' found: %r\"%(rest,))\n except (KeyError,NoSectionError,NoOptionError):\n raise InterpolationMissingOptionError(\n option,section,rawval,\":\".join(path))from None\n if \"$\"in v:\n self._interpolate_some(parser,opt,accum,v,sect,\n dict(parser.items(sect,raw=True )),\n depth+1)\n else :\n accum.append(v)\n else :\n raise InterpolationSyntaxError(\n option,section,\n \"'$' must be followed by '$' or '{', \"\n \"found: %r\"%(rest,))\n \n \nclass LegacyInterpolation(Interpolation):\n ''\n \n \n _KEYCRE=re.compile(r\"%\\(([^)]*)\\)s|.\")\n \n def before_get(self,parser,section,option,value,vars):\n rawval=value\n depth=MAX_INTERPOLATION_DEPTH\n while depth:\n depth -=1\n if value and \"%(\"in value:\n replace=functools.partial(self._interpolation_replace,\n parser=parser)\n value=self._KEYCRE.sub(replace,value)\n try :\n value=value %vars\n except KeyError as e:\n raise InterpolationMissingOptionError(\n option,section,rawval,e.args[0])from None\n else :\n break\n if value and \"%(\"in value:\n raise InterpolationDepthError(option,section,rawval)\n return value\n \n def before_set(self,parser,section,option,value):\n return value\n \n @staticmethod\n def _interpolation_replace(match,parser):\n s=match.group(1)\n if s is None :\n return match.group()\n else :\n return \"%%(%s)s\"%parser.optionxform(s)\n \n \nclass RawConfigParser(MutableMapping):\n ''\n \n \n _SECT_TMPL=r\"\"\"\n \\[ # [\n (?P[^]]+) # very permissive!\n \\] # ]\n \"\"\"\n _OPT_TMPL=r\"\"\"\n (?P.*?) # very permissive!\n \\s*(?P{delim})\\s* # any number of space/tab,\n # followed by any of the\n # allowed delimiters,\n # followed by any space/tab\n (?P.*)$ # everything up to eol\n \"\"\"\n _OPT_NV_TMPL=r\"\"\"\n (?P.*?) # very permissive!\n \\s*(?: # any number of space/tab,\n (?P{delim})\\s* # optionally followed by\n # any of the allowed\n # delimiters, followed by any\n # space/tab\n (?P.*))?$ # everything up to eol\n \"\"\"\n \n _DEFAULT_INTERPOLATION=Interpolation()\n \n SECTCRE=re.compile(_SECT_TMPL,re.VERBOSE)\n \n OPTCRE=re.compile(_OPT_TMPL.format(delim=\"=|:\"),re.VERBOSE)\n \n \n OPTCRE_NV=re.compile(_OPT_NV_TMPL.format(delim=\"=|:\"),re.VERBOSE)\n \n NONSPACECRE=re.compile(r\"\\S\")\n \n BOOLEAN_STATES={'1':True ,'yes':True ,'true':True ,'on':True ,\n '0':False ,'no':False ,'false':False ,'off':False }\n \n def __init__(self,defaults=None ,dict_type=_default_dict,\n allow_no_value=False ,*,delimiters=('=',':'),\n comment_prefixes=('#',';'),inline_comment_prefixes=None ,\n strict=True ,empty_lines_in_values=True ,\n default_section=DEFAULTSECT,\n interpolation=_UNSET,converters=_UNSET):\n \n self._dict=dict_type\n self._sections=self._dict()\n self._defaults=self._dict()\n self._converters=ConverterMapping(self)\n self._proxies=self._dict()\n self._proxies[default_section]=SectionProxy(self,default_section)\n self._delimiters=tuple(delimiters)\n if delimiters ==('=',':'):\n self._optcre=self.OPTCRE_NV if allow_no_value else self.OPTCRE\n else :\n d=\"|\".join(re.escape(d)for d in delimiters)\n if allow_no_value:\n self._optcre=re.compile(self._OPT_NV_TMPL.format(delim=d),\n re.VERBOSE)\n else :\n self._optcre=re.compile(self._OPT_TMPL.format(delim=d),\n re.VERBOSE)\n self._comment_prefixes=tuple(comment_prefixes or ())\n self._inline_comment_prefixes=tuple(inline_comment_prefixes or ())\n self._strict=strict\n self._allow_no_value=allow_no_value\n self._empty_lines_in_values=empty_lines_in_values\n self.default_section=default_section\n self._interpolation=interpolation\n if self._interpolation is _UNSET:\n self._interpolation=self._DEFAULT_INTERPOLATION\n if self._interpolation is None :\n self._interpolation=Interpolation()\n if converters is not _UNSET:\n self._converters.update(converters)\n if defaults:\n self._read_defaults(defaults)\n \n def defaults(self):\n return self._defaults\n \n def sections(self):\n ''\n \n return list(self._sections.keys())\n \n def add_section(self,section):\n ''\n\n\n\n \n if section ==self.default_section:\n raise ValueError('Invalid section name: %r'%section)\n \n if section in self._sections:\n raise DuplicateSectionError(section)\n self._sections[section]=self._dict()\n self._proxies[section]=SectionProxy(self,section)\n \n def has_section(self,section):\n ''\n\n\n \n return section in self._sections\n \n def options(self,section):\n ''\n try :\n opts=self._sections[section].copy()\n except KeyError:\n raise NoSectionError(section)from None\n opts.update(self._defaults)\n return list(opts.keys())\n \n def read(self,filenames,encoding=None ):\n ''\n\n\n\n\n\n\n\n\n\n \n if isinstance(filenames,(str,bytes,os.PathLike)):\n filenames=[filenames]\n read_ok=[]\n for filename in filenames:\n try :\n with open(filename,encoding=encoding)as fp:\n self._read(fp,filename)\n except OSError:\n continue\n if isinstance(filename,os.PathLike):\n filename=os.fspath(filename)\n read_ok.append(filename)\n return read_ok\n \n def read_file(self,f,source=None ):\n ''\n\n\n\n\n\n \n if source is None :\n try :\n source=f.name\n except AttributeError:\n source='??>'\n self._read(f,source)\n \n def read_string(self,string,source=''):\n ''\n sfile=io.StringIO(string)\n self.read_file(sfile,source)\n \n def read_dict(self,dictionary,source=''):\n ''\n\n\n\n\n\n\n\n\n\n\n \n elements_added=set()\n for section,keys in dictionary.items():\n section=str(section)\n try :\n self.add_section(section)\n except (DuplicateSectionError,ValueError):\n if self._strict and section in elements_added:\n raise\n elements_added.add(section)\n for key,value in keys.items():\n key=self.optionxform(str(key))\n if value is not None :\n value=str(value)\n if self._strict and (section,key)in elements_added:\n raise DuplicateOptionError(section,key,source)\n elements_added.add((section,key))\n self.set(section,key,value)\n \n def readfp(self,fp,filename=None ):\n ''\n warnings.warn(\n \"This method will be removed in future versions. \"\n \"Use 'parser.read_file()' instead.\",\n DeprecationWarning,stacklevel=2\n )\n self.read_file(fp,source=filename)\n \n def get(self,section,option,*,raw=False ,vars=None ,fallback=_UNSET):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n \n try :\n d=self._unify_values(section,vars)\n except NoSectionError:\n if fallback is _UNSET:\n raise\n else :\n return fallback\n option=self.optionxform(option)\n try :\n value=d[option]\n except KeyError:\n if fallback is _UNSET:\n raise NoOptionError(option,section)\n else :\n return fallback\n \n if raw or value is None :\n return value\n else :\n return self._interpolation.before_get(self,section,option,value,\n d)\n \n def _get(self,section,conv,option,**kwargs):\n return conv(self.get(section,option,**kwargs))\n \n def _get_conv(self,section,option,conv,*,raw=False ,vars=None ,\n fallback=_UNSET,**kwargs):\n try :\n return self._get(section,conv,option,raw=raw,vars=vars,\n **kwargs)\n except (NoSectionError,NoOptionError):\n if fallback is _UNSET:\n raise\n return fallback\n \n \n def getint(self,section,option,*,raw=False ,vars=None ,\n fallback=_UNSET,**kwargs):\n return self._get_conv(section,option,int,raw=raw,vars=vars,\n fallback=fallback,**kwargs)\n \n def getfloat(self,section,option,*,raw=False ,vars=None ,\n fallback=_UNSET,**kwargs):\n return self._get_conv(section,option,float,raw=raw,vars=vars,\n fallback=fallback,**kwargs)\n \n def getboolean(self,section,option,*,raw=False ,vars=None ,\n fallback=_UNSET,**kwargs):\n return self._get_conv(section,option,self._convert_to_boolean,\n raw=raw,vars=vars,fallback=fallback,**kwargs)\n \n def items(self,section=_UNSET,raw=False ,vars=None ):\n ''\n\n\n\n\n\n\n\n\n \n if section is _UNSET:\n return super().items()\n d=self._defaults.copy()\n try :\n d.update(self._sections[section])\n except KeyError:\n if section !=self.default_section:\n raise NoSectionError(section)\n orig_keys=list(d.keys())\n \n if vars:\n for key,value in vars.items():\n d[self.optionxform(key)]=value\n value_getter=lambda option:self._interpolation.before_get(self,\n section,option,d[option],d)\n if raw:\n value_getter=lambda option:d[option]\n return [(option,value_getter(option))for option in orig_keys]\n \n def popitem(self):\n ''\n\n\n\n\n \n for key in self.sections():\n value=self[key]\n del self[key]\n return key,value\n raise KeyError\n \n def optionxform(self,optionstr):\n return optionstr.lower()\n \n def has_option(self,section,option):\n ''\n\n \n if not section or section ==self.default_section:\n option=self.optionxform(option)\n return option in self._defaults\n elif section not in self._sections:\n return False\n else :\n option=self.optionxform(option)\n return (option in self._sections[section]\n or option in self._defaults)\n \n def set(self,section,option,value=None ):\n ''\n if value:\n value=self._interpolation.before_set(self,section,option,\n value)\n if not section or section ==self.default_section:\n sectdict=self._defaults\n else :\n try :\n sectdict=self._sections[section]\n except KeyError:\n raise NoSectionError(section)from None\n sectdict[self.optionxform(option)]=value\n \n def write(self,fp,space_around_delimiters=True ):\n ''\n\n\n\n \n if space_around_delimiters:\n d=\" {} \".format(self._delimiters[0])\n else :\n d=self._delimiters[0]\n if self._defaults:\n self._write_section(fp,self.default_section,\n self._defaults.items(),d)\n for section in self._sections:\n self._write_section(fp,section,\n self._sections[section].items(),d)\n \n def _write_section(self,fp,section_name,section_items,delimiter):\n ''\n fp.write(\"[{}]\\n\".format(section_name))\n for key,value in section_items:\n value=self._interpolation.before_write(self,section_name,key,\n value)\n if value is not None or not self._allow_no_value:\n value=delimiter+str(value).replace('\\n','\\n\\t')\n else :\n value=\"\"\n fp.write(\"{}{}\\n\".format(key,value))\n fp.write(\"\\n\")\n \n def remove_option(self,section,option):\n ''\n if not section or section ==self.default_section:\n sectdict=self._defaults\n else :\n try :\n sectdict=self._sections[section]\n except KeyError:\n raise NoSectionError(section)from None\n option=self.optionxform(option)\n existed=option in sectdict\n if existed:\n del sectdict[option]\n return existed\n \n def remove_section(self,section):\n ''\n existed=section in self._sections\n if existed:\n del self._sections[section]\n del self._proxies[section]\n return existed\n \n def __getitem__(self,key):\n if key !=self.default_section and not self.has_section(key):\n raise KeyError(key)\n return self._proxies[key]\n \n def __setitem__(self,key,value):\n \n \n if key in self and self[key]is value:\n return\n \n \n if key ==self.default_section:\n self._defaults.clear()\n elif key in self._sections:\n self._sections[key].clear()\n self.read_dict({key:value})\n \n def __delitem__(self,key):\n if key ==self.default_section:\n raise ValueError(\"Cannot remove the default section.\")\n if not self.has_section(key):\n raise KeyError(key)\n self.remove_section(key)\n \n def __contains__(self,key):\n return key ==self.default_section or self.has_section(key)\n \n def __len__(self):\n return len(self._sections)+1\n \n def __iter__(self):\n \n return itertools.chain((self.default_section,),self._sections.keys())\n \n def _read(self,fp,fpname):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n elements_added=set()\n cursect=None\n sectname=None\n optname=None\n lineno=0\n indent_level=0\n e=None\n for lineno,line in enumerate(fp,start=1):\n comment_start=sys.maxsize\n \n inline_prefixes={p:-1 for p in self._inline_comment_prefixes}\n while comment_start ==sys.maxsize and inline_prefixes:\n next_prefixes={}\n for prefix,index in inline_prefixes.items():\n index=line.find(prefix,index+1)\n if index ==-1:\n continue\n next_prefixes[prefix]=index\n if index ==0 or (index >0 and line[index -1].isspace()):\n comment_start=min(comment_start,index)\n inline_prefixes=next_prefixes\n \n for prefix in self._comment_prefixes:\n if line.strip().startswith(prefix):\n comment_start=0\n break\n if comment_start ==sys.maxsize:\n comment_start=None\n value=line[:comment_start].strip()\n if not value:\n if self._empty_lines_in_values:\n \n \n if (comment_start is None and\n cursect is not None and\n optname and\n cursect[optname]is not None ):\n cursect[optname].append('')\n else :\n \n indent_level=sys.maxsize\n continue\n \n first_nonspace=self.NONSPACECRE.search(line)\n cur_indent_level=first_nonspace.start()if first_nonspace else 0\n if (cursect is not None and optname and\n cur_indent_level >indent_level):\n cursect[optname].append(value)\n \n else :\n indent_level=cur_indent_level\n \n mo=self.SECTCRE.match(value)\n if mo:\n sectname=mo.group('header')\n if sectname in self._sections:\n if self._strict and sectname in elements_added:\n raise DuplicateSectionError(sectname,fpname,\n lineno)\n cursect=self._sections[sectname]\n elements_added.add(sectname)\n elif sectname ==self.default_section:\n cursect=self._defaults\n else :\n cursect=self._dict()\n self._sections[sectname]=cursect\n self._proxies[sectname]=SectionProxy(self,sectname)\n elements_added.add(sectname)\n \n optname=None\n \n elif cursect is None :\n raise MissingSectionHeaderError(fpname,lineno,line)\n \n else :\n mo=self._optcre.match(value)\n if mo:\n optname,vi,optval=mo.group('option','vi','value')\n if not optname:\n e=self._handle_error(e,fpname,lineno,line)\n optname=self.optionxform(optname.rstrip())\n if (self._strict and\n (sectname,optname)in elements_added):\n raise DuplicateOptionError(sectname,optname,\n fpname,lineno)\n elements_added.add((sectname,optname))\n \n \n if optval is not None :\n optval=optval.strip()\n cursect[optname]=[optval]\n else :\n \n cursect[optname]=None\n else :\n \n \n \n \n e=self._handle_error(e,fpname,lineno,line)\n self._join_multiline_values()\n \n if e:\n raise e\n \n def _join_multiline_values(self):\n defaults=self.default_section,self._defaults\n all_sections=itertools.chain((defaults,),\n self._sections.items())\n for section,options in all_sections:\n for name,val in options.items():\n if isinstance(val,list):\n val='\\n'.join(val).rstrip()\n options[name]=self._interpolation.before_read(self,\n section,\n name,val)\n \n def _read_defaults(self,defaults):\n ''\n \n for key,value in defaults.items():\n self._defaults[self.optionxform(key)]=value\n \n def _handle_error(self,exc,fpname,lineno,line):\n if not exc:\n exc=ParsingError(fpname)\n exc.append(lineno,repr(line))\n return exc\n \n def _unify_values(self,section,vars):\n ''\n\n\n \n sectiondict={}\n try :\n sectiondict=self._sections[section]\n except KeyError:\n if section !=self.default_section:\n raise NoSectionError(section)from None\n \n vardict={}\n if vars:\n for key,value in vars.items():\n if value is not None :\n value=str(value)\n vardict[self.optionxform(key)]=value\n return _ChainMap(vardict,sectiondict,self._defaults)\n \n def _convert_to_boolean(self,value):\n ''\n \n if value.lower()not in self.BOOLEAN_STATES:\n raise ValueError('Not a boolean: %s'%value)\n return self.BOOLEAN_STATES[value.lower()]\n \n def _validate_value_types(self,*,section=\"\",option=\"\",value=\"\"):\n ''\n\n\n\n\n\n\n\n\n\n\n \n if not isinstance(section,str):\n raise TypeError(\"section names must be strings\")\n if not isinstance(option,str):\n raise TypeError(\"option keys must be strings\")\n if not self._allow_no_value or value:\n if not isinstance(value,str):\n raise TypeError(\"option values must be strings\")\n \n @property\n def converters(self):\n return self._converters\n \n \nclass ConfigParser(RawConfigParser):\n ''\n \n _DEFAULT_INTERPOLATION=BasicInterpolation()\n \n def set(self,section,option,value=None ):\n ''\n \n self._validate_value_types(option=option,value=value)\n super().set(section,option,value)\n \n def add_section(self,section):\n ''\n\n \n self._validate_value_types(section=section)\n super().add_section(section)\n \n def _read_defaults(self,defaults):\n ''\n\n\n\n \n try :\n hold_interpolation=self._interpolation\n self._interpolation=Interpolation()\n self.read_dict({self.default_section:defaults})\n finally :\n self._interpolation=hold_interpolation\n \n \nclass SafeConfigParser(ConfigParser):\n ''\n \n def __init__(self,*args,**kwargs):\n super().__init__(*args,**kwargs)\n warnings.warn(\n \"The SafeConfigParser class has been renamed to ConfigParser \"\n \"in Python 3.2. This alias will be removed in future versions.\"\n \" Use ConfigParser directly instead.\",\n DeprecationWarning,stacklevel=2\n )\n \n \nclass SectionProxy(MutableMapping):\n ''\n \n def __init__(self,parser,name):\n ''\n self._parser=parser\n self._name=name\n for conv in parser.converters:\n key='get'+conv\n getter=functools.partial(self.get,_impl=getattr(parser,key))\n setattr(self,key,getter)\n \n def __repr__(self):\n return ''.format(self._name)\n \n def __getitem__(self,key):\n if not self._parser.has_option(self._name,key):\n raise KeyError(key)\n return self._parser.get(self._name,key)\n \n def __setitem__(self,key,value):\n self._parser._validate_value_types(option=key,value=value)\n return self._parser.set(self._name,key,value)\n \n def __delitem__(self,key):\n if not (self._parser.has_option(self._name,key)and\n self._parser.remove_option(self._name,key)):\n raise KeyError(key)\n \n def __contains__(self,key):\n return self._parser.has_option(self._name,key)\n \n def __len__(self):\n return len(self._options())\n \n def __iter__(self):\n return self._options().__iter__()\n \n def _options(self):\n if self._name !=self._parser.default_section:\n return self._parser.options(self._name)\n else :\n return self._parser.defaults()\n \n @property\n def parser(self):\n \n return self._parser\n \n @property\n def name(self):\n \n return self._name\n \n def get(self,option,fallback=None ,*,raw=False ,vars=None ,\n _impl=None ,**kwargs):\n ''\n\n\n\n\n \n \n \n if not _impl:\n _impl=self._parser.get\n return _impl(self._name,option,raw=raw,vars=vars,\n fallback=fallback,**kwargs)\n \n \nclass ConverterMapping(MutableMapping):\n ''\n\n\n\n\n \n \n GETTERCRE=re.compile(r\"^get(?P.+)$\")\n \n def __init__(self,parser):\n self._parser=parser\n self._data={}\n for getter in dir(self._parser):\n m=self.GETTERCRE.match(getter)\n if not m or not callable(getattr(self._parser,getter)):\n continue\n self._data[m.group('name')]=None\n \n def __getitem__(self,key):\n return self._data[key]\n \n def __setitem__(self,key,value):\n try :\n k='get'+key\n except TypeError:\n raise ValueError('Incompatible key: {} (type: {})'\n ''.format(key,type(key)))\n if k =='get':\n raise ValueError('Incompatible key: cannot use \"\" as a name')\n self._data[key]=value\n func=functools.partial(self._parser._get_conv,conv=value)\n func.converter=value\n setattr(self._parser,k,func)\n for proxy in self._parser.values():\n getter=functools.partial(proxy.get,_impl=func)\n setattr(proxy,k,getter)\n \n def __delitem__(self,key):\n try :\n k='get'+(key or None )\n except TypeError:\n raise KeyError(key)\n del self._data[key]\n for inst in itertools.chain((self._parser,),self._parser.values()):\n try :\n delattr(inst,k)\n except AttributeError:\n \n \n continue\n \n def __iter__(self):\n return iter(self._data)\n \n def __len__(self):\n return len(self._data)\n", ["collections", "collections.abc", "functools", "io", "itertools", "os", "re", "sys", "warnings"]], "contextlib": [".py", "''\nimport abc\nimport sys\nimport _collections_abc\nfrom collections import deque\nfrom functools import wraps\nfrom types import MethodType\n\n__all__=[\"asynccontextmanager\",\"contextmanager\",\"closing\",\"nullcontext\",\n\"AbstractContextManager\",\"AbstractAsyncContextManager\",\n\"AsyncExitStack\",\"ContextDecorator\",\"ExitStack\",\n\"redirect_stdout\",\"redirect_stderr\",\"suppress\"]\n\n\nclass AbstractContextManager(abc.ABC):\n\n ''\n \n def __enter__(self):\n ''\n return self\n \n @abc.abstractmethod\n def __exit__(self,exc_type,exc_value,traceback):\n ''\n return None\n \n @classmethod\n def __subclasshook__(cls,C):\n if cls is AbstractContextManager:\n return _collections_abc._check_methods(C,\"__enter__\",\"__exit__\")\n return NotImplemented\n \n \nclass AbstractAsyncContextManager(abc.ABC):\n\n ''\n \n async def __aenter__(self):\n ''\n return self\n \n @abc.abstractmethod\n async def __aexit__(self,exc_type,exc_value,traceback):\n ''\n return None\n \n @classmethod\n def __subclasshook__(cls,C):\n if cls is AbstractAsyncContextManager:\n return _collections_abc._check_methods(C,\"__aenter__\",\n \"__aexit__\")\n return NotImplemented\n \n \nclass ContextDecorator(object):\n ''\n \n def _recreate_cm(self):\n ''\n\n\n\n\n\n\n\n \n return self\n \n def __call__(self,func):\n @wraps(func)\n def inner(*args,**kwds):\n with self._recreate_cm():\n return func(*args,**kwds)\n return inner\n \n \nclass _GeneratorContextManagerBase:\n ''\n \n def __init__(self,func,args,kwds):\n self.gen=func(*args,**kwds)\n self.func,self.args,self.kwds=func,args,kwds\n \n doc=getattr(func,\"__doc__\",None )\n if doc is None :\n doc=type(self).__doc__\n self.__doc__=doc\n \n \n \n \n \n \n \nclass _GeneratorContextManager(_GeneratorContextManagerBase,\nAbstractContextManager,\nContextDecorator):\n ''\n \n def _recreate_cm(self):\n \n \n \n return self.__class__(self.func,self.args,self.kwds)\n \n def __enter__(self):\n \n \n del self.args,self.kwds,self.func\n try :\n return next(self.gen)\n except StopIteration:\n raise RuntimeError(\"generator didn't yield\")from None\n \n def __exit__(self,type,value,traceback):\n if type is None :\n try :\n next(self.gen)\n except StopIteration:\n return False\n else :\n raise RuntimeError(\"generator didn't stop\")\n else :\n if value is None :\n \n \n value=type()\n try :\n self.gen.throw(type,value,traceback)\n except StopIteration as exc:\n \n \n \n return exc is not value\n except RuntimeError as exc:\n \n if exc is value:\n return False\n \n \n \n if type is StopIteration and exc.__cause__ is value:\n return False\n raise\n except :\n \n \n \n \n \n \n \n \n \n \n \n if sys.exc_info()[1]is value:\n return False\n raise\n raise RuntimeError(\"generator didn't stop after throw()\")\n \n \nclass _AsyncGeneratorContextManager(_GeneratorContextManagerBase,\nAbstractAsyncContextManager):\n ''\n \n async def __aenter__(self):\n try :\n return await self.gen.__anext__()\n except StopAsyncIteration:\n raise RuntimeError(\"generator didn't yield\")from None\n \n async def __aexit__(self,typ,value,traceback):\n if typ is None :\n try :\n await self.gen.__anext__()\n except StopAsyncIteration:\n return\n else :\n raise RuntimeError(\"generator didn't stop\")\n else :\n if value is None :\n value=typ()\n \n \n try :\n await self.gen.athrow(typ,value,traceback)\n raise RuntimeError(\"generator didn't stop after athrow()\")\n except StopAsyncIteration as exc:\n return exc is not value\n except RuntimeError as exc:\n if exc is value:\n return False\n \n \n \n \n \n \n if isinstance(value,(StopIteration,StopAsyncIteration)):\n if exc.__cause__ is value:\n return False\n raise\n except BaseException as exc:\n if exc is not value:\n raise\n \n \ndef contextmanager(func):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n @wraps(func)\n def helper(*args,**kwds):\n return _GeneratorContextManager(func,args,kwds)\n return helper\n \n \ndef asynccontextmanager(func):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n @wraps(func)\n def helper(*args,**kwds):\n return _AsyncGeneratorContextManager(func,args,kwds)\n return helper\n \n \nclass closing(AbstractContextManager):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n def __init__(self,thing):\n self.thing=thing\n def __enter__(self):\n return self.thing\n def __exit__(self,*exc_info):\n self.thing.close()\n \n \nclass _RedirectStream(AbstractContextManager):\n\n _stream=None\n \n def __init__(self,new_target):\n self._new_target=new_target\n \n self._old_targets=[]\n \n def __enter__(self):\n self._old_targets.append(getattr(sys,self._stream))\n setattr(sys,self._stream,self._new_target)\n return self._new_target\n \n def __exit__(self,exctype,excinst,exctb):\n setattr(sys,self._stream,self._old_targets.pop())\n \n \nclass redirect_stdout(_RedirectStream):\n ''\n\n\n\n\n\n\n\n\n\n \n \n _stream=\"stdout\"\n \n \nclass redirect_stderr(_RedirectStream):\n ''\n \n _stream=\"stderr\"\n \n \nclass suppress(AbstractContextManager):\n ''\n\n\n\n\n\n\n\n \n \n def __init__(self,*exceptions):\n self._exceptions=exceptions\n \n def __enter__(self):\n pass\n \n def __exit__(self,exctype,excinst,exctb):\n \n \n \n \n \n \n \n \n \n return exctype is not None and issubclass(exctype,self._exceptions)\n \n \nclass _BaseExitStack:\n ''\n \n @staticmethod\n def _create_exit_wrapper(cm,cm_exit):\n return MethodType(cm_exit,cm)\n \n @staticmethod\n def _create_cb_wrapper(callback,/,*args,**kwds):\n def _exit_wrapper(exc_type,exc,tb):\n callback(*args,**kwds)\n return _exit_wrapper\n \n def __init__(self):\n self._exit_callbacks=deque()\n \n def pop_all(self):\n ''\n new_stack=type(self)()\n new_stack._exit_callbacks=self._exit_callbacks\n self._exit_callbacks=deque()\n return new_stack\n \n def push(self,exit):\n ''\n\n\n\n\n \n \n \n _cb_type=type(exit)\n \n try :\n exit_method=_cb_type.__exit__\n except AttributeError:\n \n self._push_exit_callback(exit)\n else :\n self._push_cm_exit(exit,exit_method)\n return exit\n \n def enter_context(self,cm):\n ''\n\n\n\n \n \n \n _cm_type=type(cm)\n _exit=_cm_type.__exit__\n result=_cm_type.__enter__(cm)\n self._push_cm_exit(cm,_exit)\n return result\n \n def callback(*args,**kwds):\n ''\n\n\n \n if len(args)>=2:\n self,callback,*args=args\n elif not args:\n raise TypeError(\"descriptor 'callback' of '_BaseExitStack' object \"\n \"needs an argument\")\n elif 'callback'in kwds:\n callback=kwds.pop('callback')\n self,*args=args\n import warnings\n warnings.warn(\"Passing 'callback' as keyword argument is deprecated\",\n DeprecationWarning,stacklevel=2)\n else :\n raise TypeError('callback expected at least 1 positional argument, '\n 'got %d'%(len(args)-1))\n \n _exit_wrapper=self._create_cb_wrapper(callback,*args,**kwds)\n \n \n \n _exit_wrapper.__wrapped__=callback\n self._push_exit_callback(_exit_wrapper)\n return callback\n callback.__text_signature__='($self, callback, /, *args, **kwds)'\n \n def _push_cm_exit(self,cm,cm_exit):\n ''\n _exit_wrapper=self._create_exit_wrapper(cm,cm_exit)\n self._push_exit_callback(_exit_wrapper,True )\n \n def _push_exit_callback(self,callback,is_sync=True ):\n self._exit_callbacks.append((is_sync,callback))\n \n \n \nclass ExitStack(_BaseExitStack,AbstractContextManager):\n ''\n\n\n\n\n\n\n\n \n \n def __enter__(self):\n return self\n \n def __exit__(self,*exc_details):\n received_exc=exc_details[0]is not None\n \n \n \n frame_exc=sys.exc_info()[1]\n def _fix_exception_context(new_exc,old_exc):\n \n while 1:\n exc_context=new_exc.__context__\n if exc_context is old_exc:\n \n return\n if exc_context is None or exc_context is frame_exc:\n break\n new_exc=exc_context\n \n \n new_exc.__context__=old_exc\n \n \n \n suppressed_exc=False\n pending_raise=False\n while self._exit_callbacks:\n is_sync,cb=self._exit_callbacks.pop()\n assert is_sync\n try :\n if cb(*exc_details):\n suppressed_exc=True\n pending_raise=False\n exc_details=(None ,None ,None )\n except :\n new_exc_details=sys.exc_info()\n \n _fix_exception_context(new_exc_details[1],exc_details[1])\n pending_raise=True\n exc_details=new_exc_details\n if pending_raise:\n try :\n \n \n fixed_ctx=exc_details[1].__context__\n raise exc_details[1]\n except BaseException:\n exc_details[1].__context__=fixed_ctx\n raise\n return received_exc and suppressed_exc\n \n def close(self):\n ''\n self.__exit__(None ,None ,None )\n \n \n \nclass AsyncExitStack(_BaseExitStack,AbstractAsyncContextManager):\n ''\n\n\n\n\n\n\n\n\n\n \n \n @staticmethod\n def _create_async_exit_wrapper(cm,cm_exit):\n return MethodType(cm_exit,cm)\n \n @staticmethod\n def _create_async_cb_wrapper(callback,/,*args,**kwds):\n async def _exit_wrapper(exc_type,exc,tb):\n await callback(*args,**kwds)\n return _exit_wrapper\n \n async def enter_async_context(self,cm):\n ''\n\n\n\n \n _cm_type=type(cm)\n _exit=_cm_type.__aexit__\n result=await _cm_type.__aenter__(cm)\n self._push_async_cm_exit(cm,_exit)\n return result\n \n def push_async_exit(self,exit):\n ''\n\n\n\n\n\n \n _cb_type=type(exit)\n try :\n exit_method=_cb_type.__aexit__\n except AttributeError:\n \n self._push_exit_callback(exit,False )\n else :\n self._push_async_cm_exit(exit,exit_method)\n return exit\n \n def push_async_callback(*args,**kwds):\n ''\n\n\n \n if len(args)>=2:\n self,callback,*args=args\n elif not args:\n raise TypeError(\"descriptor 'push_async_callback' of \"\n \"'AsyncExitStack' object needs an argument\")\n elif 'callback'in kwds:\n callback=kwds.pop('callback')\n self,*args=args\n import warnings\n warnings.warn(\"Passing 'callback' as keyword argument is deprecated\",\n DeprecationWarning,stacklevel=2)\n else :\n raise TypeError('push_async_callback expected at least 1 '\n 'positional argument, got %d'%(len(args)-1))\n \n _exit_wrapper=self._create_async_cb_wrapper(callback,*args,**kwds)\n \n \n \n _exit_wrapper.__wrapped__=callback\n self._push_exit_callback(_exit_wrapper,False )\n return callback\n push_async_callback.__text_signature__='($self, callback, /, *args, **kwds)'\n \n async def aclose(self):\n ''\n await self.__aexit__(None ,None ,None )\n \n def _push_async_cm_exit(self,cm,cm_exit):\n ''\n \n _exit_wrapper=self._create_async_exit_wrapper(cm,cm_exit)\n self._push_exit_callback(_exit_wrapper,False )\n \n async def __aenter__(self):\n return self\n \n async def __aexit__(self,*exc_details):\n received_exc=exc_details[0]is not None\n \n \n \n frame_exc=sys.exc_info()[1]\n def _fix_exception_context(new_exc,old_exc):\n \n while 1:\n exc_context=new_exc.__context__\n if exc_context is old_exc:\n \n return\n if exc_context is None or exc_context is frame_exc:\n break\n new_exc=exc_context\n \n \n new_exc.__context__=old_exc\n \n \n \n suppressed_exc=False\n pending_raise=False\n while self._exit_callbacks:\n is_sync,cb=self._exit_callbacks.pop()\n try :\n if is_sync:\n cb_suppress=cb(*exc_details)\n else :\n cb_suppress=await cb(*exc_details)\n \n if cb_suppress:\n suppressed_exc=True\n pending_raise=False\n exc_details=(None ,None ,None )\n except :\n new_exc_details=sys.exc_info()\n \n _fix_exception_context(new_exc_details[1],exc_details[1])\n pending_raise=True\n exc_details=new_exc_details\n if pending_raise:\n try :\n \n \n fixed_ctx=exc_details[1].__context__\n raise exc_details[1]\n except BaseException:\n exc_details[1].__context__=fixed_ctx\n raise\n return received_exc and suppressed_exc\n \n \nclass nullcontext(AbstractContextManager):\n ''\n\n\n\n\n\n\n\n \n \n def __init__(self,enter_result=None ):\n self.enter_result=enter_result\n \n def __enter__(self):\n return self.enter_result\n \n def __exit__(self,*excinfo):\n pass\n", ["_collections_abc", "abc", "collections", "functools", "sys", "types", "warnings"]], "contextvars": [".py", "from _contextvars import Context,ContextVar,Token,copy_context\n\n\n__all__=('Context','ContextVar','Token','copy_context')\n", ["_contextvars"]], "copy": [".py", "''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport types\nimport weakref\nfrom copyreg import dispatch_table\n\nclass Error(Exception):\n pass\nerror=Error\n\ntry :\n from org.python.core import PyStringMap\nexcept ImportError:\n PyStringMap=None\n \n__all__=[\"Error\",\"copy\",\"deepcopy\"]\n\ndef copy(x):\n ''\n\n\n \n \n cls=type(x)\n \n copier=_copy_dispatch.get(cls)\n if copier:\n return copier(x)\n \n if issubclass(cls,type):\n \n return _copy_immutable(x)\n \n copier=getattr(cls,\"__copy__\",None )\n if copier is not None :\n return copier(x)\n \n reductor=dispatch_table.get(cls)\n if reductor is not None :\n rv=reductor(x)\n else :\n reductor=getattr(x,\"__reduce_ex__\",None )\n if reductor is not None :\n rv=reductor(4)\n else :\n reductor=getattr(x,\"__reduce__\",None )\n if reductor:\n rv=reductor()\n else :\n raise Error(\"un(shallow)copyable object of type %s\"%cls)\n \n if isinstance(rv,str):\n return x\n return _reconstruct(x,None ,*rv)\n \n \n_copy_dispatch=d={}\n\ndef _copy_immutable(x):\n return x\nfor t in (type(None ),int,float,bool,complex,str,tuple,\nbytes,frozenset,type,range,slice,\ntypes.BuiltinFunctionType,type(Ellipsis),type(NotImplemented),\ntypes.FunctionType,weakref.ref):\n d[t]=_copy_immutable\nt=getattr(types,\"CodeType\",None )\nif t is not None :\n d[t]=_copy_immutable\n \nd[list]=list.copy\nd[dict]=dict.copy\nd[set]=set.copy\nd[bytearray]=bytearray.copy\n\nif PyStringMap is not None :\n d[PyStringMap]=PyStringMap.copy\n \ndel d,t\n\ndef deepcopy(x,memo=None ,_nil=[]):\n ''\n\n\n \n \n if memo is None :\n memo={}\n \n d=id(x)\n y=memo.get(d,_nil)\n if y is not _nil:\n return y\n \n cls=type(x)\n \n copier=_deepcopy_dispatch.get(cls)\n if copier is not None :\n y=copier(x,memo)\n else :\n if issubclass(cls,type):\n y=_deepcopy_atomic(x,memo)\n else :\n copier=getattr(x,\"__deepcopy__\",None )\n if copier is not None :\n y=copier(memo)\n else :\n reductor=dispatch_table.get(cls)\n if reductor:\n rv=reductor(x)\n else :\n reductor=getattr(x,\"__reduce_ex__\",None )\n if reductor is not None :\n rv=reductor(4)\n else :\n reductor=getattr(x,\"__reduce__\",None )\n if reductor:\n rv=reductor()\n else :\n raise Error(\n \"un(deep)copyable object of type %s\"%cls)\n if isinstance(rv,str):\n y=x\n else :\n y=_reconstruct(x,memo,*rv)\n \n \n if y is not x:\n memo[d]=y\n _keep_alive(x,memo)\n return y\n \n_deepcopy_dispatch=d={}\n\ndef _deepcopy_atomic(x,memo):\n return x\nd[type(None )]=_deepcopy_atomic\nd[type(Ellipsis)]=_deepcopy_atomic\nd[type(NotImplemented)]=_deepcopy_atomic\nd[int]=_deepcopy_atomic\nd[float]=_deepcopy_atomic\nd[bool]=_deepcopy_atomic\nd[complex]=_deepcopy_atomic\nd[bytes]=_deepcopy_atomic\nd[str]=_deepcopy_atomic\nd[types.CodeType]=_deepcopy_atomic\nd[type]=_deepcopy_atomic\nd[types.BuiltinFunctionType]=_deepcopy_atomic\nd[types.FunctionType]=_deepcopy_atomic\nd[weakref.ref]=_deepcopy_atomic\n\ndef _deepcopy_list(x,memo,deepcopy=deepcopy):\n y=[]\n memo[id(x)]=y\n append=y.append\n for a in x:\n append(deepcopy(a,memo))\n return y\nd[list]=_deepcopy_list\n\ndef _deepcopy_tuple(x,memo,deepcopy=deepcopy):\n y=[deepcopy(a,memo)for a in x]\n \n \n try :\n return memo[id(x)]\n except KeyError:\n pass\n for k,j in zip(x,y):\n if k is not j:\n y=tuple(y)\n break\n else :\n y=x\n return y\nd[tuple]=_deepcopy_tuple\n\ndef _deepcopy_dict(x,memo,deepcopy=deepcopy):\n y={}\n memo[id(x)]=y\n for key,value in x.items():\n y[deepcopy(key,memo)]=deepcopy(value,memo)\n return y\nd[dict]=_deepcopy_dict\nif PyStringMap is not None :\n d[PyStringMap]=_deepcopy_dict\n \ndef _deepcopy_method(x,memo):\n return type(x)(x.__func__,deepcopy(x.__self__,memo))\nd[types.MethodType]=_deepcopy_method\n\ndel d\n\ndef _keep_alive(x,memo):\n ''\n\n\n\n\n\n\n\n \n try :\n memo[id(memo)].append(x)\n except KeyError:\n \n memo[id(memo)]=[x]\n \ndef _reconstruct(x,memo,func,args,\nstate=None ,listiter=None ,dictiter=None ,\ndeepcopy=deepcopy):\n deep=memo is not None\n if deep and args:\n args=(deepcopy(arg,memo)for arg in args)\n y=func(*args)\n if deep:\n memo[id(x)]=y\n \n if state is not None :\n if deep:\n state=deepcopy(state,memo)\n if hasattr(y,'__setstate__'):\n y.__setstate__(state)\n else :\n if isinstance(state,tuple)and len(state)==2:\n state,slotstate=state\n else :\n slotstate=None\n if state is not None :\n y.__dict__.update(state)\n if slotstate is not None :\n for key,value in slotstate.items():\n setattr(y,key,value)\n \n if listiter is not None :\n if deep:\n for item in listiter:\n item=deepcopy(item,memo)\n y.append(item)\n else :\n for item in listiter:\n y.append(item)\n if dictiter is not None :\n if deep:\n for key,value in dictiter:\n key=deepcopy(key,memo)\n value=deepcopy(value,memo)\n y[key]=value\n else :\n for key,value in dictiter:\n y[key]=value\n return y\n \ndel types,weakref,PyStringMap\n", ["copyreg", "org.python.core", "types", "weakref"]], "copyreg": [".py", "''\n\n\n\n\n\n__all__=[\"pickle\",\"constructor\",\n\"add_extension\",\"remove_extension\",\"clear_extension_cache\"]\n\ndispatch_table={}\n\ndef pickle(ob_type,pickle_function,constructor_ob=None ):\n if not callable(pickle_function):\n raise TypeError(\"reduction functions must be callable\")\n dispatch_table[ob_type]=pickle_function\n \n \n \n if constructor_ob is not None :\n constructor(constructor_ob)\n \ndef constructor(object):\n if not callable(object):\n raise TypeError(\"constructors must be callable\")\n \n \n \ntry :\n complex\nexcept NameError:\n pass\nelse :\n\n def pickle_complex(c):\n return complex,(c.real,c.imag)\n \n pickle(complex,pickle_complex,complex)\n \n \n \ndef _reconstructor(cls,base,state):\n if base is object:\n obj=object.__new__(cls)\n else :\n obj=base.__new__(cls,state)\n if base.__init__ !=object.__init__:\n base.__init__(obj,state)\n return obj\n \n_HEAPTYPE=1 <<9\n\n\n\ndef _reduce_ex(self,proto):\n assert proto <2\n cls=self.__class__\n for base in cls.__mro__:\n if hasattr(base,'__flags__')and not base.__flags__&_HEAPTYPE:\n break\n else :\n base=object\n if base is object:\n state=None\n else :\n if base is cls:\n raise TypeError(f\"cannot pickle {cls.__name__!r} object\")\n state=base(self)\n args=(cls,base,state)\n try :\n getstate=self.__getstate__\n except AttributeError:\n if getattr(self,\"__slots__\",None ):\n raise TypeError(f\"cannot pickle {cls.__name__!r} object: \"\n f\"a class that defines __slots__ without \"\n f\"defining __getstate__ cannot be pickled \"\n f\"with protocol {proto}\")from None\n try :\n dict=self.__dict__\n except AttributeError:\n dict=None\n else :\n dict=getstate()\n if dict:\n return _reconstructor,args,dict\n else :\n return _reconstructor,args\n \n \n \ndef __newobj__(cls,*args):\n return cls.__new__(cls,*args)\n \ndef __newobj_ex__(cls,args,kwargs):\n ''\n\n \n return cls.__new__(cls,*args,**kwargs)\n \ndef _slotnames(cls):\n ''\n\n\n\n\n\n\n\n \n \n \n names=cls.__dict__.get(\"__slotnames__\")\n if names is not None :\n return names\n \n \n names=[]\n if not hasattr(cls,\"__slots__\"):\n \n pass\n else :\n \n for c in cls.__mro__:\n if \"__slots__\"in c.__dict__:\n slots=c.__dict__['__slots__']\n \n if isinstance(slots,str):\n slots=(slots,)\n for name in slots:\n \n if name in (\"__dict__\",\"__weakref__\"):\n continue\n \n elif name.startswith('__')and not name.endswith('__'):\n stripped=c.__name__.lstrip('_')\n if stripped:\n names.append('_%s%s'%(stripped,name))\n else :\n names.append(name)\n else :\n names.append(name)\n \n \n try :\n cls.__slotnames__=names\n except :\n pass\n \n return names\n \n \n \n \n \n \n \n \n \n \n_extension_registry={}\n_inverted_registry={}\n_extension_cache={}\n\n\n\ndef add_extension(module,name,code):\n ''\n code=int(code)\n if not 1 <=code <=0x7fffffff:\n raise ValueError(\"code out of range\")\n key=(module,name)\n if (_extension_registry.get(key)==code and\n _inverted_registry.get(code)==key):\n return\n if key in _extension_registry:\n raise ValueError(\"key %s is already registered with code %s\"%\n (key,_extension_registry[key]))\n if code in _inverted_registry:\n raise ValueError(\"code %s is already in use for key %s\"%\n (code,_inverted_registry[code]))\n _extension_registry[key]=code\n _inverted_registry[code]=key\n \ndef remove_extension(module,name,code):\n ''\n key=(module,name)\n if (_extension_registry.get(key)!=code or\n _inverted_registry.get(code)!=key):\n raise ValueError(\"key %s is not registered with code %s\"%\n (key,code))\n del _extension_registry[key]\n del _inverted_registry[code]\n if code in _extension_cache:\n del _extension_cache[code]\n \ndef clear_extension_cache():\n _extension_cache.clear()\n \n \n \n \n \n \n \n \n \n \n \n \n \n", []], "csv": [".py", "\n\"\"\"\ncsv.py - read/write/investigate CSV files\n\"\"\"\n\nimport re\nfrom _csv import Error,__version__,writer,reader,register_dialect,\\\nunregister_dialect,get_dialect,list_dialects,\\\nfield_size_limit,\\\nQUOTE_MINIMAL,QUOTE_ALL,QUOTE_NONNUMERIC,QUOTE_NONE,\\\n__doc__\nfrom _csv import Dialect as _Dialect\n\nfrom io import StringIO\n\n__all__=[\"QUOTE_MINIMAL\",\"QUOTE_ALL\",\"QUOTE_NONNUMERIC\",\"QUOTE_NONE\",\n\"Error\",\"Dialect\",\"__doc__\",\"excel\",\"excel_tab\",\n\"field_size_limit\",\"reader\",\"writer\",\n\"register_dialect\",\"get_dialect\",\"list_dialects\",\"Sniffer\",\n\"unregister_dialect\",\"__version__\",\"DictReader\",\"DictWriter\",\n\"unix_dialect\"]\n\nclass Dialect:\n ''\n\n\n\n\n\n \n _name=\"\"\n _valid=False\n \n delimiter=None\n quotechar=None\n escapechar=None\n doublequote=None\n skipinitialspace=None\n lineterminator=None\n quoting=None\n \n def __init__(self):\n if self.__class__ !=Dialect:\n self._valid=True\n self._validate()\n \n def _validate(self):\n try :\n _Dialect(self)\n except TypeError as e:\n \n raise Error(str(e))\n \nclass excel(Dialect):\n ''\n delimiter=','\n quotechar='\"'\n doublequote=True\n skipinitialspace=False\n lineterminator='\\r\\n'\n quoting=QUOTE_MINIMAL\nregister_dialect(\"excel\",excel)\n\nclass excel_tab(excel):\n ''\n delimiter='\\t'\nregister_dialect(\"excel-tab\",excel_tab)\n\nclass unix_dialect(Dialect):\n ''\n delimiter=','\n quotechar='\"'\n doublequote=True\n skipinitialspace=False\n lineterminator='\\n'\n quoting=QUOTE_ALL\nregister_dialect(\"unix\",unix_dialect)\n\n\nclass DictReader:\n def __init__(self,f,fieldnames=None ,restkey=None ,restval=None ,\n dialect=\"excel\",*args,**kwds):\n self._fieldnames=fieldnames\n self.restkey=restkey\n self.restval=restval\n self.reader=reader(f,dialect,*args,**kwds)\n self.dialect=dialect\n self.line_num=0\n \n def __iter__(self):\n return self\n \n @property\n def fieldnames(self):\n if self._fieldnames is None :\n try :\n self._fieldnames=next(self.reader)\n except StopIteration:\n pass\n self.line_num=self.reader.line_num\n return self._fieldnames\n \n @fieldnames.setter\n def fieldnames(self,value):\n self._fieldnames=value\n \n def __next__(self):\n if self.line_num ==0:\n \n self.fieldnames\n row=next(self.reader)\n self.line_num=self.reader.line_num\n \n \n \n \n while row ==[]:\n row=next(self.reader)\n d=dict(zip(self.fieldnames,row))\n lf=len(self.fieldnames)\n lr=len(row)\n if lf lr:\n for key in self.fieldnames[lr:]:\n d[key]=self.restval\n return d\n \n \nclass DictWriter:\n def __init__(self,f,fieldnames,restval=\"\",extrasaction=\"raise\",\n dialect=\"excel\",*args,**kwds):\n self.fieldnames=fieldnames\n self.restval=restval\n if extrasaction.lower()not in (\"raise\",\"ignore\"):\n raise ValueError(\"extrasaction (%s) must be 'raise' or 'ignore'\"\n %extrasaction)\n self.extrasaction=extrasaction\n self.writer=writer(f,dialect,*args,**kwds)\n \n def writeheader(self):\n header=dict(zip(self.fieldnames,self.fieldnames))\n return self.writerow(header)\n \n def _dict_to_list(self,rowdict):\n if self.extrasaction ==\"raise\":\n wrong_fields=rowdict.keys()-self.fieldnames\n if wrong_fields:\n raise ValueError(\"dict contains fields not in fieldnames: \"\n +\", \".join([repr(x)for x in wrong_fields]))\n return (rowdict.get(key,self.restval)for key in self.fieldnames)\n \n def writerow(self,rowdict):\n return self.writer.writerow(self._dict_to_list(rowdict))\n \n def writerows(self,rowdicts):\n return self.writer.writerows(map(self._dict_to_list,rowdicts))\n \n \ntry :\n complex\nexcept NameError:\n complex=float\n \nclass Sniffer:\n ''\n\n\n \n def __init__(self):\n \n self.preferred=[',','\\t',';',' ',':']\n \n \n def sniff(self,sample,delimiters=None ):\n ''\n\n \n \n quotechar,doublequote,delimiter,skipinitialspace=\\\n self._guess_quote_and_delimiter(sample,delimiters)\n if not delimiter:\n delimiter,skipinitialspace=self._guess_delimiter(sample,\n delimiters)\n \n if not delimiter:\n raise Error(\"Could not determine delimiter\")\n \n class dialect(Dialect):\n _name=\"sniffed\"\n lineterminator='\\r\\n'\n quoting=QUOTE_MINIMAL\n \n \n dialect.doublequote=doublequote\n dialect.delimiter=delimiter\n \n dialect.quotechar=quotechar or '\"'\n dialect.skipinitialspace=skipinitialspace\n \n return dialect\n \n \n def _guess_quote_and_delimiter(self,data,delimiters):\n ''\n\n\n\n\n\n\n\n\n \n \n matches=[]\n for restr in (r'(?P[^\\w\\n\"\\'])(?P ?)(?P[\"\\']).*?(?P=quote)(?P=delim)',\n r'(?:^|\\n)(?P[\"\\']).*?(?P=quote)(?P[^\\w\\n\"\\'])(?P ?)',\n r'(?P[^\\w\\n\"\\'])(?P ?)(?P[\"\\']).*?(?P=quote)(?:$|\\n)',\n r'(?:^|\\n)(?P[\"\\']).*?(?P=quote)(?:$|\\n)'):\n regexp=re.compile(restr,re.DOTALL |re.MULTILINE)\n matches=regexp.findall(data)\n if matches:\n break\n \n if not matches:\n \n return ('',False ,None ,0)\n quotes={}\n delims={}\n spaces=0\n groupindex=regexp.groupindex\n for m in matches:\n n=groupindex['quote']-1\n key=m[n]\n if key:\n quotes[key]=quotes.get(key,0)+1\n try :\n n=groupindex['delim']-1\n key=m[n]\n except KeyError:\n continue\n if key and (delimiters is None or key in delimiters):\n delims[key]=delims.get(key,0)+1\n try :\n n=groupindex['space']-1\n except KeyError:\n continue\n if m[n]:\n spaces +=1\n \n quotechar=max(quotes,key=quotes.get)\n \n if delims:\n delim=max(delims,key=delims.get)\n skipinitialspace=delims[delim]==spaces\n if delim =='\\n':\n delim=''\n else :\n \n delim=''\n skipinitialspace=0\n \n \n \n dq_regexp=re.compile(\n r\"((%(delim)s)|^)\\W*%(quote)s[^%(delim)s\\n]*%(quote)s[^%(delim)s\\n]*%(quote)s\\W*((%(delim)s)|$)\"%\\\n {'delim':re.escape(delim),'quote':quotechar},re.MULTILINE)\n \n \n \n if dq_regexp.search(data):\n doublequote=True\n else :\n doublequote=False\n \n return (quotechar,doublequote,delim,skipinitialspace)\n \n \n def _guess_delimiter(self,data,delimiters):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n data=list(filter(None ,data.split('\\n')))\n \n ascii=[chr(c)for c in range(127)]\n \n \n chunkLength=min(10,len(data))\n iteration=0\n charFrequency={}\n modes={}\n delims={}\n start,end=0,chunkLength\n while start 1:\n modes[char]=max(items,key=lambda x:x[1])\n \n \n items.remove(modes[char])\n modes[char]=(modes[char][0],modes[char][1]\n -sum(item[1]for item in items))\n else :\n modes[char]=items[0]\n \n \n modeList=modes.items()\n total=float(min(chunkLength *iteration,len(data)))\n \n consistency=1.0\n \n threshold=0.9\n while len(delims)==0 and consistency >=threshold:\n for k,v in modeList:\n if v[0]>0 and v[1]>0:\n if ((v[1]/total)>=consistency and\n (delimiters is None or k in delimiters)):\n delims[k]=v\n consistency -=0.01\n \n if len(delims)==1:\n delim=list(delims.keys())[0]\n skipinitialspace=(data[0].count(delim)==\n data[0].count(\"%c \"%delim))\n return (delim,skipinitialspace)\n \n \n start=end\n end +=chunkLength\n \n if not delims:\n return ('',0)\n \n \n if len(delims)>1:\n for d in self.preferred:\n if d in delims.keys():\n skipinitialspace=(data[0].count(d)==\n data[0].count(\"%c \"%d))\n return (d,skipinitialspace)\n \n \n \n items=[(v,k)for (k,v)in delims.items()]\n items.sort()\n delim=items[-1][1]\n \n skipinitialspace=(data[0].count(delim)==\n data[0].count(\"%c \"%delim))\n return (delim,skipinitialspace)\n \n \n def has_header(self,sample):\n \n \n \n \n \n \n \n \n \n rdr=reader(StringIO(sample),self.sniff(sample))\n \n header=next(rdr)\n \n columns=len(header)\n columnTypes={}\n for i in range(columns):columnTypes[i]=None\n \n checked=0\n for row in rdr:\n \n if checked >20:\n break\n checked +=1\n \n if len(row)!=columns:\n continue\n \n for col in list(columnTypes.keys()):\n \n for thisType in [int,float,complex]:\n try :\n thisType(row[col])\n break\n except (ValueError,OverflowError):\n pass\n else :\n \n thisType=len(row[col])\n \n if thisType !=columnTypes[col]:\n if columnTypes[col]is None :\n columnTypes[col]=thisType\n else :\n \n \n del columnTypes[col]\n \n \n \n hasHeader=0\n for col,colType in columnTypes.items():\n if type(colType)==type(0):\n if len(header[col])!=colType:\n hasHeader +=1\n else :\n hasHeader -=1\n else :\n try :\n colType(header[col])\n except (ValueError,TypeError):\n hasHeader +=1\n else :\n hasHeader -=1\n \n return hasHeader >0\n", ["_csv", "io", "re"]], "dataclasses": [".py", "import re\nimport sys\nimport copy\nimport types\nimport inspect\nimport keyword\nimport builtins\nimport functools\nimport _thread\n\n\n__all__=['dataclass',\n'field',\n'Field',\n'FrozenInstanceError',\n'InitVar',\n'MISSING',\n\n\n'fields',\n'asdict',\n'astuple',\n'make_dataclass',\n'replace',\n'is_dataclass',\n]\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nclass FrozenInstanceError(AttributeError):pass\n\n\n\n\nclass _HAS_DEFAULT_FACTORY_CLASS:\n def __repr__(self):\n return ''\n_HAS_DEFAULT_FACTORY=_HAS_DEFAULT_FACTORY_CLASS()\n\n\n\nclass _MISSING_TYPE:\n pass\nMISSING=_MISSING_TYPE()\n\n\n\n_EMPTY_METADATA=types.MappingProxyType({})\n\n\nclass _FIELD_BASE:\n def __init__(self,name):\n self.name=name\n def __repr__(self):\n return self.name\n_FIELD=_FIELD_BASE('_FIELD')\n_FIELD_CLASSVAR=_FIELD_BASE('_FIELD_CLASSVAR')\n_FIELD_INITVAR=_FIELD_BASE('_FIELD_INITVAR')\n\n\n\n_FIELDS='__dataclass_fields__'\n\n\n\n_PARAMS='__dataclass_params__'\n\n\n\n_POST_INIT_NAME='__post_init__'\n\n\n\n\n_MODULE_IDENTIFIER_RE=re.compile(r'^(?:\\s*(\\w+)\\s*\\.)?\\s*(\\w+)')\n\nclass _InitVarMeta(type):\n def __getitem__(self,params):\n return InitVar(params)\n \nclass InitVar(metaclass=_InitVarMeta):\n __slots__=('type',)\n \n def __init__(self,type):\n self.type=type\n \n def __repr__(self):\n return f'dataclasses.InitVar[{self.type.__name__}]'\n \n \n \n \n \n \n \n \n \n \n \n \nclass Field:\n __slots__=('name',\n 'type',\n 'default',\n 'default_factory',\n 'repr',\n 'hash',\n 'init',\n 'compare',\n 'metadata',\n '_field_type',\n )\n \n def __init__(self,default,default_factory,init,repr,hash,compare,\n metadata):\n self.name=None\n self.type=None\n self.default=default\n self.default_factory=default_factory\n self.init=init\n self.repr=repr\n self.hash=hash\n self.compare=compare\n self.metadata=(_EMPTY_METADATA\n if metadata is None else\n types.MappingProxyType(metadata))\n self._field_type=None\n \n def __repr__(self):\n return ('Field('\n f'name={self.name!r},'\n f'type={self.type!r},'\n f'default={self.default!r},'\n f'default_factory={self.default_factory!r},'\n f'init={self.init!r},'\n f'repr={self.repr!r},'\n f'hash={self.hash!r},'\n f'compare={self.compare!r},'\n f'metadata={self.metadata!r},'\n f'_field_type={self._field_type}'\n ')')\n \n \n \n \n \n \n \n \n \n def __set_name__(self,owner,name):\n func=getattr(type(self.default),'__set_name__',None )\n if func:\n \n \n func(self.default,owner,name)\n \n \nclass _DataclassParams:\n __slots__=('init',\n 'repr',\n 'eq',\n 'order',\n 'unsafe_hash',\n 'frozen',\n )\n \n def __init__(self,init,repr,eq,order,unsafe_hash,frozen):\n self.init=init\n self.repr=repr\n self.eq=eq\n self.order=order\n self.unsafe_hash=unsafe_hash\n self.frozen=frozen\n \n def __repr__(self):\n return ('_DataclassParams('\n f'init={self.init!r},'\n f'repr={self.repr!r},'\n f'eq={self.eq!r},'\n f'order={self.order!r},'\n f'unsafe_hash={self.unsafe_hash!r},'\n f'frozen={self.frozen!r}'\n ')')\n \n \n \n \n \ndef field(*,default=MISSING,default_factory=MISSING,init=True ,repr=True ,\nhash=None ,compare=True ,metadata=None ):\n ''\n\n\n\n\n\n\n\n\n\n\n\n \n \n if default is not MISSING and default_factory is not MISSING:\n raise ValueError('cannot specify both default and default_factory')\n return Field(default,default_factory,init,repr,hash,compare,\n metadata)\n \n \ndef _tuple_str(obj_name,fields):\n\n\n\n\n\n if not fields:\n return '()'\n \n return f'({\",\".join([f\"{obj_name}.{f.name}\" for f in fields])},)'\n \n \n \n \ndef _recursive_repr(user_function):\n\n\n repr_running=set()\n \n @functools.wraps(user_function)\n def wrapper(self):\n key=id(self),_thread.get_ident()\n if key in repr_running:\n return '...'\n repr_running.add(key)\n try :\n result=user_function(self)\n finally :\n repr_running.discard(key)\n return result\n return wrapper\n \n \ndef _create_fn(name,args,body,*,globals=None ,locals=None ,\nreturn_type=MISSING):\n\n\n\n if locals is None :\n locals={}\n \n \n \n if globals is not None and '__builtins__'not in globals:\n globals['__builtins__']=builtins\n return_annotation=''\n if return_type is not MISSING:\n locals['_return_type']=return_type\n return_annotation='->_return_type'\n args=','.join(args)\n body='\\n'.join(f' {b}'for b in body)\n \n \n txt=f'def {name}({args}){return_annotation}:\\n{body}'\n \n exec(txt,globals,locals)\n return locals[name]\n \n \ndef _field_assign(frozen,name,value,self_name):\n\n\n\n\n\n\n if frozen:\n return f'__builtins__.object.__setattr__({self_name},{name!r},{value})'\n return f'{self_name}.{name}={value}'\n \n \ndef _field_init(f,frozen,globals,self_name):\n\n\n\n default_name=f'_dflt_{f.name}'\n if f.default_factory is not MISSING:\n if f.init:\n \n \n globals[default_name]=f.default_factory\n value=(f'{default_name}() '\n f'if {f.name} is _HAS_DEFAULT_FACTORY '\n f'else {f.name}')\n else :\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n globals[default_name]=f.default_factory\n value=f'{default_name}()'\n else :\n \n if f.init:\n if f.default is MISSING:\n \n value=f.name\n elif f.default is not MISSING:\n globals[default_name]=f.default\n value=f.name\n else :\n \n \n return None\n \n \n \n \n if f._field_type is _FIELD_INITVAR:\n return None\n \n \n return _field_assign(frozen,f.name,value,self_name)\n \n \ndef _init_param(f):\n\n\n\n\n if f.default is MISSING and f.default_factory is MISSING:\n \n \n default=''\n elif f.default is not MISSING:\n \n \n default=f'=_dflt_{f.name}'\n elif f.default_factory is not MISSING:\n \n default='=_HAS_DEFAULT_FACTORY'\n return f'{f.name}:_type_{f.name}{default}'\n \n \ndef _init_fn(fields,frozen,has_post_init,self_name):\n\n\n\n\n\n\n\n seen_default=False\n for f in fields:\n \n if f.init:\n if not (f.default is MISSING and f.default_factory is MISSING):\n seen_default=True\n elif seen_default:\n raise TypeError(f'non-default argument {f.name!r} '\n 'follows default argument')\n \n globals={'MISSING':MISSING,\n '_HAS_DEFAULT_FACTORY':_HAS_DEFAULT_FACTORY}\n \n body_lines=[]\n for f in fields:\n line=_field_init(f,frozen,globals,self_name)\n \n \n if line:\n body_lines.append(line)\n \n \n if has_post_init:\n params_str=','.join(f.name for f in fields\n if f._field_type is _FIELD_INITVAR)\n body_lines.append(f'{self_name}.{_POST_INIT_NAME}({params_str})')\n \n \n if not body_lines:\n body_lines=['pass']\n \n locals={f'_type_{f.name}':f.type for f in fields}\n return _create_fn('__init__',\n [self_name]+[_init_param(f)for f in fields if f.init],\n body_lines,\n locals=locals,\n globals=globals,\n return_type=None )\n \n \ndef _repr_fn(fields):\n fn=_create_fn('__repr__',\n ('self',),\n ['return self.__class__.__qualname__ + f\"('+\n ', '.join([f\"{f.name}={{self.{f.name}!r}}\"\n for f in fields])+\n ')\"'])\n return _recursive_repr(fn)\n \n \ndef _frozen_get_del_attr(cls,fields):\n\n\n globals={'cls':cls,\n 'FrozenInstanceError':FrozenInstanceError}\n if fields:\n fields_str='('+','.join(repr(f.name)for f in fields)+',)'\n else :\n \n fields_str='()'\n return (_create_fn('__setattr__',\n ('self','name','value'),\n (f'if type(self) is cls or name in {fields_str}:',\n ' raise FrozenInstanceError(f\"cannot assign to field {name!r}\")',\n f'super(cls, self).__setattr__(name, value)'),\n globals=globals),\n _create_fn('__delattr__',\n ('self','name'),\n (f'if type(self) is cls or name in {fields_str}:',\n ' raise FrozenInstanceError(f\"cannot delete field {name!r}\")',\n f'super(cls, self).__delattr__(name)'),\n globals=globals),\n )\n \n \ndef _cmp_fn(name,op,self_tuple,other_tuple):\n\n\n\n\n\n return _create_fn(name,\n ('self','other'),\n ['if other.__class__ is self.__class__:',\n f' return {self_tuple}{op}{other_tuple}',\n 'return NotImplemented'])\n \n \ndef _hash_fn(fields):\n self_tuple=_tuple_str('self',fields)\n return _create_fn('__hash__',\n ('self',),\n [f'return hash({self_tuple})'])\n \n \ndef _is_classvar(a_type,typing):\n\n\n return (a_type is typing.ClassVar\n or (type(a_type)is typing._GenericAlias\n and a_type.__origin__ is typing.ClassVar))\n \n \ndef _is_initvar(a_type,dataclasses):\n\n\n return (a_type is dataclasses.InitVar\n or type(a_type)is dataclasses.InitVar)\n \n \ndef _is_type(annotation,cls,a_module,a_type,is_type_predicate):\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n match=_MODULE_IDENTIFIER_RE.match(annotation)\n if match:\n ns=None\n module_name=match.group(1)\n if not module_name:\n \n \n ns=sys.modules.get(cls.__module__).__dict__\n else :\n \n module=sys.modules.get(cls.__module__)\n if module and module.__dict__.get(module_name)is a_module:\n ns=sys.modules.get(a_type.__module__).__dict__\n if ns and is_type_predicate(ns.get(match.group(2)),a_module):\n return True\n return False\n \n \ndef _get_field(cls,a_name,a_type):\n\n\n\n\n\n\n default=getattr(cls,a_name,MISSING)\n if isinstance(default,Field):\n f=default\n else :\n if isinstance(default,types.MemberDescriptorType):\n \n default=MISSING\n f=field(default=default)\n \n \n f.name=a_name\n f.type=a_type\n \n \n \n \n f._field_type=_FIELD\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n typing=sys.modules.get('typing')\n if typing:\n if (_is_classvar(a_type,typing)\n or (isinstance(f.type,str)\n and _is_type(f.type,cls,typing,typing.ClassVar,\n _is_classvar))):\n f._field_type=_FIELD_CLASSVAR\n \n \n \n if f._field_type is _FIELD:\n \n \n dataclasses=sys.modules[__name__]\n if (_is_initvar(a_type,dataclasses)\n or (isinstance(f.type,str)\n and _is_type(f.type,cls,dataclasses,dataclasses.InitVar,\n _is_initvar))):\n f._field_type=_FIELD_INITVAR\n \n \n \n \n \n \n if f._field_type in (_FIELD_CLASSVAR,_FIELD_INITVAR):\n if f.default_factory is not MISSING:\n raise TypeError(f'field {f.name} cannot have a '\n 'default factory')\n \n \n \n \n \n \n \n if f._field_type is _FIELD and isinstance(f.default,(list,dict,set)):\n raise ValueError(f'mutable default {type(f.default)} for field '\n f'{f.name} is not allowed: use default_factory')\n \n return f\n \n \ndef _set_new_attribute(cls,name,value):\n\n\n if name in cls.__dict__:\n return True\n setattr(cls,name,value)\n return False\n \n \n \n \n \n \n \ndef _hash_set_none(cls,fields):\n return None\n \ndef _hash_add(cls,fields):\n flds=[f for f in fields if (f.compare if f.hash is None else f.hash)]\n return _hash_fn(flds)\n \ndef _hash_exception(cls,fields):\n\n raise TypeError(f'Cannot overwrite attribute __hash__ '\n f'in class {cls.__name__}')\n \n \n \n \n \n \n \n \n \n \n_hash_action={(False ,False ,False ,False ):None ,\n(False ,False ,False ,True ):None ,\n(False ,False ,True ,False ):None ,\n(False ,False ,True ,True ):None ,\n(False ,True ,False ,False ):_hash_set_none,\n(False ,True ,False ,True ):None ,\n(False ,True ,True ,False ):_hash_add,\n(False ,True ,True ,True ):None ,\n(True ,False ,False ,False ):_hash_add,\n(True ,False ,False ,True ):_hash_exception,\n(True ,False ,True ,False ):_hash_add,\n(True ,False ,True ,True ):_hash_exception,\n(True ,True ,False ,False ):_hash_add,\n(True ,True ,False ,True ):_hash_exception,\n(True ,True ,True ,False ):_hash_add,\n(True ,True ,True ,True ):_hash_exception,\n}\n\n\n\n\ndef _process_class(cls,init,repr,eq,order,unsafe_hash,frozen):\n\n\n\n\n fields={}\n \n setattr(cls,_PARAMS,_DataclassParams(init,repr,eq,order,\n unsafe_hash,frozen))\n \n \n \n \n \n any_frozen_base=False\n has_dataclass_bases=False\n for b in cls.__mro__[-1:0:-1]:\n \n \n base_fields=getattr(b,_FIELDS,None )\n if base_fields:\n has_dataclass_bases=True\n for f in base_fields.values():\n fields[f.name]=f\n if getattr(b,_PARAMS).frozen:\n any_frozen_base=True\n \n \n \n \n \n \n \n \n \n \n \n \n \n cls_annotations=cls.__dict__.get('__annotations__',{})\n \n \n \n \n cls_fields=[_get_field(cls,name,type)\n for name,type in cls_annotations.items()]\n for f in cls_fields:\n fields[f.name]=f\n \n \n \n \n \n if isinstance(getattr(cls,f.name,None ),Field):\n if f.default is MISSING:\n \n \n \n \n \n \n delattr(cls,f.name)\n else :\n setattr(cls,f.name,f.default)\n \n \n for name,value in cls.__dict__.items():\n if isinstance(value,Field)and not name in cls_annotations:\n raise TypeError(f'{name!r} is a field but has no type annotation')\n \n \n if has_dataclass_bases:\n \n if any_frozen_base and not frozen:\n raise TypeError('cannot inherit non-frozen dataclass from a '\n 'frozen one')\n \n \n if not any_frozen_base and frozen:\n raise TypeError('cannot inherit frozen dataclass from a '\n 'non-frozen one')\n \n \n \n setattr(cls,_FIELDS,fields)\n \n \n \n \n \n \n class_hash=cls.__dict__.get('__hash__',MISSING)\n has_explicit_hash=not (class_hash is MISSING or\n (class_hash is None and '__eq__'in cls.__dict__))\n \n \n \n if order and not eq:\n raise ValueError('eq must be true if order is true')\n \n if init:\n \n has_post_init=hasattr(cls,_POST_INIT_NAME)\n \n \n flds=[f for f in fields.values()\n if f._field_type in (_FIELD,_FIELD_INITVAR)]\n _set_new_attribute(cls,'__init__',\n _init_fn(flds,\n frozen,\n has_post_init,\n \n \n \n '__dataclass_self__'if 'self'in fields\n else 'self',\n ))\n \n \n \n field_list=[f for f in fields.values()if f._field_type is _FIELD]\n \n if repr:\n flds=[f for f in field_list if f.repr]\n _set_new_attribute(cls,'__repr__',_repr_fn(flds))\n \n if eq:\n \n \n flds=[f for f in field_list if f.compare]\n self_tuple=_tuple_str('self',flds)\n other_tuple=_tuple_str('other',flds)\n _set_new_attribute(cls,'__eq__',\n _cmp_fn('__eq__','==',\n self_tuple,other_tuple))\n \n if order:\n \n flds=[f for f in field_list if f.compare]\n self_tuple=_tuple_str('self',flds)\n other_tuple=_tuple_str('other',flds)\n for name,op in [('__lt__','<'),\n ('__le__','<='),\n ('__gt__','>'),\n ('__ge__','>='),\n ]:\n if _set_new_attribute(cls,name,\n _cmp_fn(name,op,self_tuple,other_tuple)):\n raise TypeError(f'Cannot overwrite attribute {name} '\n f'in class {cls.__name__}. Consider using '\n 'functools.total_ordering')\n \n if frozen:\n for fn in _frozen_get_del_attr(cls,field_list):\n if _set_new_attribute(cls,fn.__name__,fn):\n raise TypeError(f'Cannot overwrite attribute {fn.__name__} '\n f'in class {cls.__name__}')\n \n \n hash_action=_hash_action[bool(unsafe_hash),\n bool(eq),\n bool(frozen),\n has_explicit_hash]\n if hash_action:\n \n \n cls.__hash__=hash_action(cls,field_list)\n \n if not getattr(cls,'__doc__'):\n \n cls.__doc__=(cls.__name__+\n str(inspect.signature(cls)).replace(' -> None',''))\n \n return cls\n \n \ndef dataclass(cls=None ,/,*,init=True ,repr=True ,eq=True ,order=False ,\nunsafe_hash=False ,frozen=False ):\n ''\n\n\n\n\n\n\n\n\n\n \n \n def wrap(cls):\n return _process_class(cls,init,repr,eq,order,unsafe_hash,frozen)\n \n \n if cls is None :\n \n return wrap\n \n \n return wrap(cls)\n \n \ndef fields(class_or_instance):\n ''\n\n\n\n \n \n \n try :\n fields=getattr(class_or_instance,_FIELDS)\n except AttributeError:\n raise TypeError('must be called with a dataclass type or instance')\n \n \n \n return tuple(f for f in fields.values()if f._field_type is _FIELD)\n \n \ndef _is_dataclass_instance(obj):\n ''\n return hasattr(type(obj),_FIELDS)\n \n \ndef is_dataclass(obj):\n ''\n \n cls=obj if isinstance(obj,type)else type(obj)\n return hasattr(cls,_FIELDS)\n \n \ndef asdict(obj,*,dict_factory=dict):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n if not _is_dataclass_instance(obj):\n raise TypeError(\"asdict() should be called on dataclass instances\")\n return _asdict_inner(obj,dict_factory)\n \n \ndef _asdict_inner(obj,dict_factory):\n if _is_dataclass_instance(obj):\n result=[]\n for f in fields(obj):\n value=_asdict_inner(getattr(obj,f.name),dict_factory)\n result.append((f.name,value))\n return dict_factory(result)\n elif isinstance(obj,tuple)and hasattr(obj,'_fields'):\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n return type(obj)(*[_asdict_inner(v,dict_factory)for v in obj])\n elif isinstance(obj,(list,tuple)):\n \n \n \n return type(obj)(_asdict_inner(v,dict_factory)for v in obj)\n elif isinstance(obj,dict):\n return type(obj)((_asdict_inner(k,dict_factory),\n _asdict_inner(v,dict_factory))\n for k,v in obj.items())\n else :\n return copy.deepcopy(obj)\n \n \ndef astuple(obj,*,tuple_factory=tuple):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n if not _is_dataclass_instance(obj):\n raise TypeError(\"astuple() should be called on dataclass instances\")\n return _astuple_inner(obj,tuple_factory)\n \n \ndef _astuple_inner(obj,tuple_factory):\n if _is_dataclass_instance(obj):\n result=[]\n for f in fields(obj):\n value=_astuple_inner(getattr(obj,f.name),tuple_factory)\n result.append(value)\n return tuple_factory(result)\n elif isinstance(obj,tuple)and hasattr(obj,'_fields'):\n \n \n \n \n \n \n return type(obj)(*[_astuple_inner(v,tuple_factory)for v in obj])\n elif isinstance(obj,(list,tuple)):\n \n \n \n return type(obj)(_astuple_inner(v,tuple_factory)for v in obj)\n elif isinstance(obj,dict):\n return type(obj)((_astuple_inner(k,tuple_factory),_astuple_inner(v,tuple_factory))\n for k,v in obj.items())\n else :\n return copy.deepcopy(obj)\n \n \ndef make_dataclass(cls_name,fields,*,bases=(),namespace=None ,init=True ,\nrepr=True ,eq=True ,order=False ,unsafe_hash=False ,\nfrozen=False ):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n if namespace is None :\n namespace={}\n else :\n \n namespace=namespace.copy()\n \n \n \n seen=set()\n anns={}\n for item in fields:\n if isinstance(item,str):\n name=item\n tp='typing.Any'\n elif len(item)==2:\n name,tp,=item\n elif len(item)==3:\n name,tp,spec=item\n namespace[name]=spec\n else :\n raise TypeError(f'Invalid field: {item!r}')\n \n if not isinstance(name,str)or not name.isidentifier():\n raise TypeError(f'Field names must be valid identifiers: {name!r}')\n if keyword.iskeyword(name):\n raise TypeError(f'Field names must not be keywords: {name!r}')\n if name in seen:\n raise TypeError(f'Field name duplicated: {name!r}')\n \n seen.add(name)\n anns[name]=tp\n \n namespace['__annotations__']=anns\n \n \n cls=types.new_class(cls_name,bases,{},lambda ns:ns.update(namespace))\n return dataclass(cls,init=init,repr=repr,eq=eq,order=order,\n unsafe_hash=unsafe_hash,frozen=frozen)\n \n \ndef replace(*args,**changes):\n ''\n\n\n\n\n\n\n\n\n\n\n\n \n if len(args)>1:\n raise TypeError(f'replace() takes 1 positional argument but {len(args)} were given')\n if args:\n obj,=args\n elif 'obj'in changes:\n obj=changes.pop('obj')\n import warnings\n warnings.warn(\"Passing 'obj' as keyword argument is deprecated\",\n DeprecationWarning,stacklevel=2)\n else :\n raise TypeError(\"replace() missing 1 required positional argument: 'obj'\")\n \n \n \n \n if not _is_dataclass_instance(obj):\n raise TypeError(\"replace() should be called on dataclass instances\")\n \n \n \n \n for f in getattr(obj,_FIELDS).values():\n \n if f._field_type is _FIELD_CLASSVAR:\n continue\n \n if not f.init:\n \n if f.name in changes:\n raise ValueError(f'field {f.name} is declared with '\n 'init=False, it cannot be specified with '\n 'replace()')\n continue\n \n if f.name not in changes:\n if f._field_type is _FIELD_INITVAR:\n raise ValueError(f\"InitVar {f.name!r} \"\n 'must be specified with replace()')\n changes[f.name]=getattr(obj,f.name)\n \n \n \n \n \n \n return obj.__class__(**changes)\nreplace.__text_signature__='(obj, /, **kwargs)'\n", ["_thread", "builtins", "copy", "functools", "inspect", "keyword", "re", "sys", "types", "warnings"]], "datetime": [".py", "''\n\n\n\n\n\nimport time as _time\nimport math as _math\nimport sys\n\ndef _cmp(x,y):\n return 0 if x ==y else 1 if x >y else -1\n \nMINYEAR=1\nMAXYEAR=9999\n_MAXORDINAL=3652059\n\n\n\n\n\n\n\n\n\n\n\n_DAYS_IN_MONTH=[-1,31,28,31,30,31,30,31,31,30,31,30,31]\n\n_DAYS_BEFORE_MONTH=[-1]\ndbm=0\nfor dim in _DAYS_IN_MONTH[1:]:\n _DAYS_BEFORE_MONTH.append(dbm)\n dbm +=dim\ndel dbm,dim\n\ndef _is_leap(year):\n ''\n return year %4 ==0 and (year %100 !=0 or year %400 ==0)\n \ndef _days_before_year(year):\n ''\n y=year -1\n return y *365+y //4 -y //100+y //400\n \ndef _days_in_month(year,month):\n ''\n assert 1 <=month <=12,month\n if month ==2 and _is_leap(year):\n return 29\n return _DAYS_IN_MONTH[month]\n \ndef _days_before_month(year,month):\n ''\n assert 1 <=month <=12,'month must be in 1..12'\n return _DAYS_BEFORE_MONTH[month]+(month >2 and _is_leap(year))\n \ndef _ymd2ord(year,month,day):\n ''\n assert 1 <=month <=12,'month must be in 1..12'\n dim=_days_in_month(year,month)\n assert 1 <=day <=dim,('day must be in 1..%d'%dim)\n return (_days_before_year(year)+\n _days_before_month(year,month)+\n day)\n \n_DI400Y=_days_before_year(401)\n_DI100Y=_days_before_year(101)\n_DI4Y=_days_before_year(5)\n\n\n\nassert _DI4Y ==4 *365+1\n\n\n\nassert _DI400Y ==4 *_DI100Y+1\n\n\n\nassert _DI100Y ==25 *_DI4Y -1\n\ndef _ord2ymd(n):\n ''\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n n -=1\n n400,n=divmod(n,_DI400Y)\n year=n400 *400+1\n \n \n \n \n \n \n n100,n=divmod(n,_DI100Y)\n \n \n n4,n=divmod(n,_DI4Y)\n \n \n \n n1,n=divmod(n,365)\n \n year +=n100 *100+n4 *4+n1\n if n1 ==4 or n100 ==4:\n assert n ==0\n return year -1,12,31\n \n \n \n leapyear=n1 ==3 and (n4 !=24 or n100 ==3)\n assert leapyear ==_is_leap(year)\n month=(n+50)>>5\n preceding=_DAYS_BEFORE_MONTH[month]+(month >2 and leapyear)\n if preceding >n:\n month -=1\n preceding -=_DAYS_IN_MONTH[month]+(month ==2 and leapyear)\n n -=preceding\n assert 0 <=n <_days_in_month(year,month)\n \n \n \n return year,month,n+1\n \n \n_MONTHNAMES=[None ,\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\n\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"]\n_DAYNAMES=[None ,\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\",\"Sun\"]\n\n\ndef _build_struct_time(y,m,d,hh,mm,ss,dstflag):\n wday=(_ymd2ord(y,m,d)+6)%7\n dnum=_days_before_month(y,m)+d\n return _time.struct_time((y,m,d,hh,mm,ss,wday,dnum,dstflag))\n \ndef _format_time(hh,mm,ss,us,timespec='auto'):\n specs={\n 'hours':'{:02d}',\n 'minutes':'{:02d}:{:02d}',\n 'seconds':'{:02d}:{:02d}:{:02d}',\n 'milliseconds':'{:02d}:{:02d}:{:02d}.{:03d}',\n 'microseconds':'{:02d}:{:02d}:{:02d}.{:06d}'\n }\n \n if timespec =='auto':\n \n timespec='microseconds'if us else 'seconds'\n elif timespec =='milliseconds':\n us //=1000\n try :\n fmt=specs[timespec]\n except KeyError:\n raise ValueError('Unknown timespec value')\n else :\n return fmt.format(hh,mm,ss,us)\n \ndef _format_offset(off):\n s=''\n if off is not None :\n if off.days <0:\n sign=\"-\"\n off=-off\n else :\n sign=\"+\"\n hh,mm=divmod(off,timedelta(hours=1))\n mm,ss=divmod(mm,timedelta(minutes=1))\n s +=\"%s%02d:%02d\"%(sign,hh,mm)\n if ss or ss.microseconds:\n s +=\":%02d\"%ss.seconds\n \n if ss.microseconds:\n s +='.%06d'%ss.microseconds\n return s\n \n \ndef _wrap_strftime(object,format,timetuple):\n\n freplace=None\n zreplace=None\n Zreplace=None\n \n \n newformat=[]\n push=newformat.append\n i,n=0,len(format)\n while i =2:\n break\n \n if next_char !=':':\n raise ValueError('Invalid time separator: %c'%next_char)\n \n pos +=1\n \n if pos 0 else tstr\n \n time_comps=_parse_hh_mm_ss_ff(timestr)\n \n tzi=None\n if tz_pos >0:\n tzstr=tstr[tz_pos:]\n \n \n \n \n \n \n if len(tzstr)not in (5,8,15):\n raise ValueError('Malformed time zone string')\n \n tz_comps=_parse_hh_mm_ss_ff(tzstr)\n if all(x ==0 for x in tz_comps):\n tzi=timezone.utc\n else :\n tzsign=-1 if tstr[tz_pos -1]=='-'else 1\n \n td=timedelta(hours=tz_comps[0],minutes=tz_comps[1],\n seconds=tz_comps[2],microseconds=tz_comps[3])\n \n tzi=timezone(tzsign *td)\n \n time_comps.append(tzi)\n \n return time_comps\n \n \n \ndef _check_tzname(name):\n if name is not None and not isinstance(name,str):\n raise TypeError(\"tzinfo.tzname() must return None or string, \"\n \"not '%s'\"%type(name))\n \n \n \n \n \n \n \ndef _check_utc_offset(name,offset):\n assert name in (\"utcoffset\",\"dst\")\n if offset is None :\n return\n if not isinstance(offset,timedelta):\n raise TypeError(\"tzinfo.%s() must return None \"\n \"or timedelta, not '%s'\"%(name,type(offset)))\n if not -timedelta(1)b if b >0 else r 999999999:\n raise OverflowError(\"timedelta # of days is too large: %d\"%d)\n \n self=object.__new__(cls)\n self._days=d\n self._seconds=s\n self._microseconds=us\n self._hashcode=-1\n return self\n \n def __repr__(self):\n args=[]\n if self._days:\n args.append(\"days=%d\"%self._days)\n if self._seconds:\n args.append(\"seconds=%d\"%self._seconds)\n if self._microseconds:\n args.append(\"microseconds=%d\"%self._microseconds)\n if not args:\n args.append('0')\n return \"%s.%s(%s)\"%(self.__class__.__module__,\n self.__class__.__qualname__,\n ', '.join(args))\n \n def __str__(self):\n mm,ss=divmod(self._seconds,60)\n hh,mm=divmod(mm,60)\n s=\"%d:%02d:%02d\"%(hh,mm,ss)\n if self._days:\n def plural(n):\n return n,abs(n)!=1 and \"s\"or \"\"\n s=(\"%d day%s, \"%plural(self._days))+s\n if self._microseconds:\n s=s+\".%06d\"%self._microseconds\n return s\n \n def total_seconds(self):\n ''\n return ((self.days *86400+self.seconds)*10 **6+\n self.microseconds)/10 **6\n \n \n @property\n def days(self):\n ''\n return self._days\n \n @property\n def seconds(self):\n ''\n return self._seconds\n \n @property\n def microseconds(self):\n ''\n return self._microseconds\n \n def __add__(self,other):\n if isinstance(other,timedelta):\n \n \n return timedelta(self._days+other._days,\n self._seconds+other._seconds,\n self._microseconds+other._microseconds)\n return NotImplemented\n \n __radd__=__add__\n \n def __sub__(self,other):\n if isinstance(other,timedelta):\n \n \n return timedelta(self._days -other._days,\n self._seconds -other._seconds,\n self._microseconds -other._microseconds)\n return NotImplemented\n \n def __rsub__(self,other):\n if isinstance(other,timedelta):\n return -self+other\n return NotImplemented\n \n def __neg__(self):\n \n \n return timedelta(-self._days,\n -self._seconds,\n -self._microseconds)\n \n def __pos__(self):\n return self\n \n def __abs__(self):\n if self._days <0:\n return -self\n else :\n return self\n \n def __mul__(self,other):\n if isinstance(other,int):\n \n \n return timedelta(self._days *other,\n self._seconds *other,\n self._microseconds *other)\n if isinstance(other,float):\n usec=self._to_microseconds()\n a,b=other.as_integer_ratio()\n return timedelta(0,0,_divide_and_round(usec *a,b))\n return NotImplemented\n \n __rmul__=__mul__\n \n def _to_microseconds(self):\n return ((self._days *(24 *3600)+self._seconds)*1000000+\n self._microseconds)\n \n def __floordiv__(self,other):\n if not isinstance(other,(int,timedelta)):\n return NotImplemented\n usec=self._to_microseconds()\n if isinstance(other,timedelta):\n return usec //other._to_microseconds()\n if isinstance(other,int):\n return timedelta(0,0,usec //other)\n \n def __truediv__(self,other):\n if not isinstance(other,(int,float,timedelta)):\n return NotImplemented\n usec=self._to_microseconds()\n if isinstance(other,timedelta):\n return usec /other._to_microseconds()\n if isinstance(other,int):\n return timedelta(0,0,_divide_and_round(usec,other))\n if isinstance(other,float):\n a,b=other.as_integer_ratio()\n return timedelta(0,0,_divide_and_round(b *usec,a))\n \n def __mod__(self,other):\n if isinstance(other,timedelta):\n r=self._to_microseconds()%other._to_microseconds()\n return timedelta(0,0,r)\n return NotImplemented\n \n def __divmod__(self,other):\n if isinstance(other,timedelta):\n q,r=divmod(self._to_microseconds(),\n other._to_microseconds())\n return q,timedelta(0,0,r)\n return NotImplemented\n \n \n \n def __eq__(self,other):\n if isinstance(other,timedelta):\n return self._cmp(other)==0\n else :\n return NotImplemented\n \n def __le__(self,other):\n if isinstance(other,timedelta):\n return self._cmp(other)<=0\n else :\n return NotImplemented\n \n def __lt__(self,other):\n if isinstance(other,timedelta):\n return self._cmp(other)<0\n else :\n return NotImplemented\n \n def __ge__(self,other):\n if isinstance(other,timedelta):\n return self._cmp(other)>=0\n else :\n return NotImplemented\n \n def __gt__(self,other):\n if isinstance(other,timedelta):\n return self._cmp(other)>0\n else :\n return NotImplemented\n \n def _cmp(self,other):\n assert isinstance(other,timedelta)\n return _cmp(self._getstate(),other._getstate())\n \n def __hash__(self):\n if self._hashcode ==-1:\n self._hashcode=hash(self._getstate())\n return self._hashcode\n \n def __bool__(self):\n return (self._days !=0 or\n self._seconds !=0 or\n self._microseconds !=0)\n \n \n \n def _getstate(self):\n return (self._days,self._seconds,self._microseconds)\n \n def __reduce__(self):\n return (self.__class__,self._getstate())\n \ntimedelta.min=timedelta(-999999999)\ntimedelta.max=timedelta(days=999999999,hours=23,minutes=59,seconds=59,\nmicroseconds=999999)\ntimedelta.resolution=timedelta(microseconds=1)\n\nclass date:\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n __slots__='_year','_month','_day','_hashcode'\n \n def __new__(cls,year,month=None ,day=None ):\n ''\n\n\n\n\n \n if (month is None and\n isinstance(year,(bytes,str))and len(year)==4 and\n 1 <=ord(year[2:3])<=12):\n \n if isinstance(year,str):\n try :\n year=year.encode('latin1')\n except UnicodeEncodeError:\n \n raise ValueError(\n \"Failed to encode latin1 string when unpickling \"\n \"a date object. \"\n \"pickle.load(data, encoding='latin1') is assumed.\")\n self=object.__new__(cls)\n self.__setstate(year)\n self._hashcode=-1\n return self\n year,month,day=_check_date_fields(year,month,day)\n self=object.__new__(cls)\n self._year=year\n self._month=month\n self._day=day\n self._hashcode=-1\n return self\n \n \n \n @classmethod\n def fromtimestamp(cls,t):\n ''\n y,m,d,hh,mm,ss,weekday,jday,dst=_time.localtime(t)\n return cls(y,m,d)\n \n @classmethod\n def today(cls):\n ''\n t=_time.time()\n return cls.fromtimestamp(t)\n \n @classmethod\n def fromordinal(cls,n):\n ''\n\n\n\n \n y,m,d=_ord2ymd(n)\n return cls(y,m,d)\n \n @classmethod\n def fromisoformat(cls,date_string):\n ''\n if not isinstance(date_string,str):\n raise TypeError('fromisoformat: argument must be str')\n \n try :\n assert len(date_string)==10\n return cls(*_parse_isoformat_date(date_string))\n except Exception:\n raise ValueError(f'Invalid isoformat string: {date_string!r}')\n \n @classmethod\n def fromisocalendar(cls,year,week,day):\n ''\n\n \n \n if not MINYEAR <=year <=MAXYEAR:\n raise ValueError(f\"Year is out of range: {year}\")\n \n if not 0 =0\n return NotImplemented\n \n def __gt__(self,other):\n if isinstance(other,date):\n return self._cmp(other)>0\n return NotImplemented\n \n def _cmp(self,other):\n assert isinstance(other,date)\n y,m,d=self._year,self._month,self._day\n y2,m2,d2=other._year,other._month,other._day\n return _cmp((y,m,d),(y2,m2,d2))\n \n def __hash__(self):\n ''\n if self._hashcode ==-1:\n self._hashcode=hash(self._getstate())\n return self._hashcode\n \n \n \n def __add__(self,other):\n ''\n if isinstance(other,timedelta):\n o=self.toordinal()+other.days\n if 0 =52:\n if today >=_isoweek1monday(year+1):\n year +=1\n week=0\n return year,week+1,day+1\n \n \n \n def _getstate(self):\n yhi,ylo=divmod(self._year,256)\n return bytes([yhi,ylo,self._month,self._day]),\n \n def __setstate(self,string):\n yhi,ylo,self._month,self._day=string\n self._year=yhi *256+ylo\n \n def __reduce__(self):\n return (self.__class__,self._getstate())\n \n_date_class=date\n\ndate.min=date(1,1,1)\ndate.max=date(9999,12,31)\ndate.resolution=timedelta(days=1)\n\n\nclass tzinfo:\n ''\n\n\n \n __slots__=()\n \n def tzname(self,dt):\n ''\n raise NotImplementedError(\"tzinfo subclass must override tzname()\")\n \n def utcoffset(self,dt):\n ''\n raise NotImplementedError(\"tzinfo subclass must override utcoffset()\")\n \n def dst(self,dt):\n ''\n\n\n\n \n raise NotImplementedError(\"tzinfo subclass must override dst()\")\n \n def fromutc(self,dt):\n ''\n \n if not isinstance(dt,datetime):\n raise TypeError(\"fromutc() requires a datetime argument\")\n if dt.tzinfo is not self:\n raise ValueError(\"dt.tzinfo is not self\")\n \n dtoff=dt.utcoffset()\n if dtoff is None :\n raise ValueError(\"fromutc() requires a non-None utcoffset() \"\n \"result\")\n \n \n \n dtdst=dt.dst()\n if dtdst is None :\n raise ValueError(\"fromutc() requires a non-None dst() result\")\n delta=dtoff -dtdst\n if delta:\n dt +=delta\n dtdst=dt.dst()\n if dtdst is None :\n raise ValueError(\"fromutc(): dt.dst gave inconsistent \"\n \"results; cannot convert\")\n return dt+dtdst\n \n \n \n def __reduce__(self):\n getinitargs=getattr(self,\"__getinitargs__\",None )\n if getinitargs:\n args=getinitargs()\n else :\n args=()\n getstate=getattr(self,\"__getstate__\",None )\n if getstate:\n state=getstate()\n else :\n state=getattr(self,\"__dict__\",None )or None\n if state is None :\n return (self.__class__,args)\n else :\n return (self.__class__,args,state)\n \n_tzinfo_class=tzinfo\n\nclass time:\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n __slots__='_hour','_minute','_second','_microsecond','_tzinfo','_hashcode','_fold'\n \n def __new__(cls,hour=0,minute=0,second=0,microsecond=0,tzinfo=None ,*,fold=0):\n ''\n\n\n\n\n\n\n\n \n if (isinstance(hour,(bytes,str))and len(hour)==6 and\n ord(hour[0:1])&0x7F <24):\n \n if isinstance(hour,str):\n try :\n hour=hour.encode('latin1')\n except UnicodeEncodeError:\n \n raise ValueError(\n \"Failed to encode latin1 string when unpickling \"\n \"a time object. \"\n \"pickle.load(data, encoding='latin1') is assumed.\")\n self=object.__new__(cls)\n self.__setstate(hour,minute or None )\n self._hashcode=-1\n return self\n hour,minute,second,microsecond,fold=_check_time_fields(\n hour,minute,second,microsecond,fold)\n _check_tzinfo_arg(tzinfo)\n self=object.__new__(cls)\n self._hour=hour\n self._minute=minute\n self._second=second\n self._microsecond=microsecond\n self._tzinfo=tzinfo\n self._hashcode=-1\n self._fold=fold\n return self\n \n \n @property\n def hour(self):\n ''\n return self._hour\n \n @property\n def minute(self):\n ''\n return self._minute\n \n @property\n def second(self):\n ''\n return self._second\n \n @property\n def microsecond(self):\n ''\n return self._microsecond\n \n @property\n def tzinfo(self):\n ''\n return self._tzinfo\n \n @property\n def fold(self):\n return self._fold\n \n \n \n \n \n def __eq__(self,other):\n if isinstance(other,time):\n return self._cmp(other,allow_mixed=True )==0\n else :\n return NotImplemented\n \n def __le__(self,other):\n if isinstance(other,time):\n return self._cmp(other)<=0\n else :\n return NotImplemented\n \n def __lt__(self,other):\n if isinstance(other,time):\n return self._cmp(other)<0\n else :\n return NotImplemented\n \n def __ge__(self,other):\n if isinstance(other,time):\n return self._cmp(other)>=0\n else :\n return NotImplemented\n \n def __gt__(self,other):\n if isinstance(other,time):\n return self._cmp(other)>0\n else :\n return NotImplemented\n \n def _cmp(self,other,allow_mixed=False ):\n assert isinstance(other,time)\n mytz=self._tzinfo\n ottz=other._tzinfo\n myoff=otoff=None\n \n if mytz is ottz:\n base_compare=True\n else :\n myoff=self.utcoffset()\n otoff=other.utcoffset()\n base_compare=myoff ==otoff\n \n if base_compare:\n return _cmp((self._hour,self._minute,self._second,\n self._microsecond),\n (other._hour,other._minute,other._second,\n other._microsecond))\n if myoff is None or otoff is None :\n if allow_mixed:\n return 2\n else :\n raise TypeError(\"cannot compare naive and aware times\")\n myhhmm=self._hour *60+self._minute -myoff //timedelta(minutes=1)\n othhmm=other._hour *60+other._minute -otoff //timedelta(minutes=1)\n return _cmp((myhhmm,self._second,self._microsecond),\n (othhmm,other._second,other._microsecond))\n \n def __hash__(self):\n ''\n if self._hashcode ==-1:\n if self.fold:\n t=self.replace(fold=0)\n else :\n t=self\n tzoff=t.utcoffset()\n if not tzoff:\n self._hashcode=hash(t._getstate()[0])\n else :\n h,m=divmod(timedelta(hours=self.hour,minutes=self.minute)-tzoff,\n timedelta(hours=1))\n assert not m %timedelta(minutes=1),\"whole minute\"\n m //=timedelta(minutes=1)\n if 0 <=h <24:\n self._hashcode=hash(time(h,m,self.second,self.microsecond))\n else :\n self._hashcode=hash((h,m,self.second,self.microsecond))\n return self._hashcode\n \n \n \n def _tzstr(self):\n ''\n off=self.utcoffset()\n return _format_offset(off)\n \n def __repr__(self):\n ''\n if self._microsecond !=0:\n s=\", %d, %d\"%(self._second,self._microsecond)\n elif self._second !=0:\n s=\", %d\"%self._second\n else :\n s=\"\"\n s=\"%s.%s(%d, %d%s)\"%(self.__class__.__module__,\n self.__class__.__qualname__,\n self._hour,self._minute,s)\n if self._tzinfo is not None :\n assert s[-1:]==\")\"\n s=s[:-1]+\", tzinfo=%r\"%self._tzinfo+\")\"\n if self._fold:\n assert s[-1:]==\")\"\n s=s[:-1]+\", fold=1)\"\n return s\n \n def isoformat(self,timespec='auto'):\n ''\n\n\n\n\n\n\n \n s=_format_time(self._hour,self._minute,self._second,\n self._microsecond,timespec)\n tz=self._tzstr()\n if tz:\n s +=tz\n return s\n \n __str__=isoformat\n \n @classmethod\n def fromisoformat(cls,time_string):\n ''\n if not isinstance(time_string,str):\n raise TypeError('fromisoformat: argument must be str')\n \n try :\n return cls(*_parse_isoformat_time(time_string))\n except Exception:\n raise ValueError(f'Invalid isoformat string: {time_string!r}')\n \n \n def strftime(self,fmt):\n ''\n\n \n \n \n timetuple=(1900,1,1,\n self._hour,self._minute,self._second,\n 0,1,-1)\n return _wrap_strftime(self,fmt,timetuple)\n \n def __format__(self,fmt):\n if not isinstance(fmt,str):\n raise TypeError(\"must be str, not %s\"%type(fmt).__name__)\n if len(fmt)!=0:\n return self.strftime(fmt)\n return str(self)\n \n \n \n def utcoffset(self):\n ''\n \n if self._tzinfo is None :\n return None\n offset=self._tzinfo.utcoffset(None )\n _check_utc_offset(\"utcoffset\",offset)\n return offset\n \n def tzname(self):\n ''\n\n\n\n\n \n if self._tzinfo is None :\n return None\n name=self._tzinfo.tzname(None )\n _check_tzname(name)\n return name\n \n def dst(self):\n ''\n\n\n\n\n\n\n \n if self._tzinfo is None :\n return None\n offset=self._tzinfo.dst(None )\n _check_utc_offset(\"dst\",offset)\n return offset\n \n def replace(self,hour=None ,minute=None ,second=None ,microsecond=None ,\n tzinfo=True ,*,fold=None ):\n ''\n if hour is None :\n hour=self.hour\n if minute is None :\n minute=self.minute\n if second is None :\n second=self.second\n if microsecond is None :\n microsecond=self.microsecond\n if tzinfo is True :\n tzinfo=self.tzinfo\n if fold is None :\n fold=self._fold\n return type(self)(hour,minute,second,microsecond,tzinfo,fold=fold)\n \n \n \n def _getstate(self,protocol=3):\n us2,us3=divmod(self._microsecond,256)\n us1,us2=divmod(us2,256)\n h=self._hour\n if self._fold and protocol >3:\n h +=128\n basestate=bytes([h,self._minute,self._second,\n us1,us2,us3])\n if self._tzinfo is None :\n return (basestate,)\n else :\n return (basestate,self._tzinfo)\n \n def __setstate(self,string,tzinfo):\n if tzinfo is not None and not isinstance(tzinfo,_tzinfo_class):\n raise TypeError(\"bad tzinfo state arg\")\n h,self._minute,self._second,us1,us2,us3=string\n if h >127:\n self._fold=1\n self._hour=h -128\n else :\n self._fold=0\n self._hour=h\n self._microsecond=(((us1 <<8)|us2)<<8)|us3\n self._tzinfo=tzinfo\n \n def __reduce_ex__(self,protocol):\n return (time,self._getstate(protocol))\n \n def __reduce__(self):\n return self.__reduce_ex__(2)\n \n_time_class=time\n\ntime.min=time(0,0,0)\ntime.max=time(23,59,59,999999)\ntime.resolution=timedelta(microseconds=1)\n\nclass datetime(date):\n ''\n\n\n\n \n __slots__=date.__slots__+time.__slots__\n \n def __new__(cls,year,month=None ,day=None ,hour=0,minute=0,second=0,\n microsecond=0,tzinfo=None ,*,fold=0):\n if (isinstance(year,(bytes,str))and len(year)==10 and\n 1 <=ord(year[2:3])&0x7F <=12):\n \n if isinstance(year,str):\n try :\n year=bytes(year,'latin1')\n except UnicodeEncodeError:\n \n raise ValueError(\n \"Failed to encode latin1 string when unpickling \"\n \"a datetime object. \"\n \"pickle.load(data, encoding='latin1') is assumed.\")\n self=object.__new__(cls)\n self.__setstate(year,month)\n self._hashcode=-1\n return self\n year,month,day=_check_date_fields(year,month,day)\n hour,minute,second,microsecond,fold=_check_time_fields(\n hour,minute,second,microsecond,fold)\n _check_tzinfo_arg(tzinfo)\n self=object.__new__(cls)\n self._year=year\n self._month=month\n self._day=day\n self._hour=hour\n self._minute=minute\n self._second=second\n self._microsecond=microsecond\n self._tzinfo=tzinfo\n self._hashcode=-1\n self._fold=fold\n return self\n \n \n @property\n def hour(self):\n ''\n return self._hour\n \n @property\n def minute(self):\n ''\n return self._minute\n \n @property\n def second(self):\n ''\n return self._second\n \n @property\n def microsecond(self):\n ''\n return self._microsecond\n \n @property\n def tzinfo(self):\n ''\n return self._tzinfo\n \n @property\n def fold(self):\n return self._fold\n \n @classmethod\n def _fromtimestamp(cls,t,utc,tz):\n ''\n\n\n \n frac,t=_math.modf(t)\n us=round(frac *1e6)\n if us >=1000000:\n t +=1\n us -=1000000\n elif us <0:\n t -=1\n us +=1000000\n \n converter=_time.gmtime if utc else _time.localtime\n y,m,d,hh,mm,ss,weekday,jday,dst=converter(t)\n ss=min(ss,59)\n result=cls(y,m,d,hh,mm,ss,us,tz)\n if tz is None :\n \n \n \n max_fold_seconds=24 *3600\n \n \n \n \n \n if t =0\n elif not isinstance(other,date):\n return NotImplemented\n else :\n _cmperror(self,other)\n \n def __gt__(self,other):\n if isinstance(other,datetime):\n return self._cmp(other)>0\n elif not isinstance(other,date):\n return NotImplemented\n else :\n _cmperror(self,other)\n \n def _cmp(self,other,allow_mixed=False ):\n assert isinstance(other,datetime)\n mytz=self._tzinfo\n ottz=other._tzinfo\n myoff=otoff=None\n \n if mytz is ottz:\n base_compare=True\n else :\n myoff=self.utcoffset()\n otoff=other.utcoffset()\n \n if allow_mixed:\n if myoff !=self.replace(fold=not self.fold).utcoffset():\n return 2\n if otoff !=other.replace(fold=not other.fold).utcoffset():\n return 2\n base_compare=myoff ==otoff\n \n if base_compare:\n return _cmp((self._year,self._month,self._day,\n self._hour,self._minute,self._second,\n self._microsecond),\n (other._year,other._month,other._day,\n other._hour,other._minute,other._second,\n other._microsecond))\n if myoff is None or otoff is None :\n if allow_mixed:\n return 2\n else :\n raise TypeError(\"cannot compare naive and aware datetimes\")\n \n diff=self -other\n if diff.days <0:\n return -1\n return diff and 1 or 0\n \n def __add__(self,other):\n ''\n if not isinstance(other,timedelta):\n return NotImplemented\n delta=timedelta(self.toordinal(),\n hours=self._hour,\n minutes=self._minute,\n seconds=self._second,\n microseconds=self._microsecond)\n delta +=other\n hour,rem=divmod(delta.seconds,3600)\n minute,second=divmod(rem,60)\n if 0 3:\n m +=128\n basestate=bytes([yhi,ylo,m,self._day,\n self._hour,self._minute,self._second,\n us1,us2,us3])\n if self._tzinfo is None :\n return (basestate,)\n else :\n return (basestate,self._tzinfo)\n \n def __setstate(self,string,tzinfo):\n if tzinfo is not None and not isinstance(tzinfo,_tzinfo_class):\n raise TypeError(\"bad tzinfo state arg\")\n (yhi,ylo,m,self._day,self._hour,\n self._minute,self._second,us1,us2,us3)=string\n if m >127:\n self._fold=1\n self._month=m -128\n else :\n self._fold=0\n self._month=m\n self._year=yhi *256+ylo\n self._microsecond=(((us1 <<8)|us2)<<8)|us3\n self._tzinfo=tzinfo\n \n def __reduce_ex__(self,protocol):\n return (self.__class__,self._getstate(protocol))\n \n def __reduce__(self):\n return self.__reduce_ex__(2)\n \n \ndatetime.min=datetime(1,1,1)\ndatetime.max=datetime(9999,12,31,23,59,59,999999)\ndatetime.resolution=timedelta(microseconds=1)\n\n\ndef _isoweek1monday(year):\n\n\n THURSDAY=3\n firstday=_ymd2ord(year,1,1)\n firstweekday=(firstday+6)%7\n week1monday=firstday -firstweekday\n if firstweekday >THURSDAY:\n week1monday +=7\n return week1monday\n \n \nclass timezone(tzinfo):\n __slots__='_offset','_name'\n \n \n _Omitted=object()\n def __new__(cls,offset,name=_Omitted):\n if not isinstance(offset,timedelta):\n raise TypeError(\"offset must be a timedelta\")\n if name is cls._Omitted:\n if not offset:\n return cls.utc\n name=None\n elif not isinstance(name,str):\n raise TypeError(\"name must be a string\")\n if not cls._minoffset <=offset <=cls._maxoffset:\n raise ValueError(\"offset must be a timedelta \"\n \"strictly between -timedelta(hours=24) and \"\n \"timedelta(hours=24).\")\n return cls._create(offset,name)\n \n @classmethod\n def _create(cls,offset,name=None ):\n self=tzinfo.__new__(cls)\n self._offset=offset\n self._name=name\n return self\n \n def __getinitargs__(self):\n ''\n if self._name is None :\n return (self._offset,)\n return (self._offset,self._name)\n \n def __eq__(self,other):\n if isinstance(other,timezone):\n return self._offset ==other._offset\n return NotImplemented\n \n def __hash__(self):\n return hash(self._offset)\n \n def __repr__(self):\n ''\n\n\n\n\n\n\n\n \n if self is self.utc:\n return 'datetime.timezone.utc'\n if self._name is None :\n return \"%s.%s(%r)\"%(self.__class__.__module__,\n self.__class__.__qualname__,\n self._offset)\n return \"%s.%s(%r, %r)\"%(self.__class__.__module__,\n self.__class__.__qualname__,\n self._offset,self._name)\n \n def __str__(self):\n return self.tzname(None )\n \n def utcoffset(self,dt):\n if isinstance(dt,datetime)or dt is None :\n return self._offset\n raise TypeError(\"utcoffset() argument must be a datetime instance\"\n \" or None\")\n \n def tzname(self,dt):\n if isinstance(dt,datetime)or dt is None :\n if self._name is None :\n return self._name_from_offset(self._offset)\n return self._name\n raise TypeError(\"tzname() argument must be a datetime instance\"\n \" or None\")\n \n def dst(self,dt):\n if isinstance(dt,datetime)or dt is None :\n return None\n raise TypeError(\"dst() argument must be a datetime instance\"\n \" or None\")\n \n def fromutc(self,dt):\n if isinstance(dt,datetime):\n if dt.tzinfo is not self:\n raise ValueError(\"fromutc: dt.tzinfo \"\n \"is not self\")\n return dt+self._offset\n raise TypeError(\"fromutc() argument must be a datetime instance\"\n \" or None\")\n \n _maxoffset=timedelta(hours=24,microseconds=-1)\n _minoffset=-_maxoffset\n \n @staticmethod\n def _name_from_offset(delta):\n if not delta:\n return 'UTC'\n if delta
[\"\\']).*?(?P=quote)(?P=delim)',\n r'(?:^|\\n)(?P[\"\\']).*?(?P=quote)(?P[^\\w\\n\"\\'])(?P ?)',\n r'(?P[^\\w\\n\"\\'])(?P ?)(?P[\"\\']).*?(?P=quote)(?:$|\\n)',\n r'(?:^|\\n)(?P[\"\\']).*?(?P=quote)(?:$|\\n)'):\n regexp=re.compile(restr,re.DOTALL |re.MULTILINE)\n matches=regexp.findall(data)\n if matches:\n break\n \n if not matches:\n \n return ('',False ,None ,0)\n quotes={}\n delims={}\n spaces=0\n groupindex=regexp.groupindex\n for m in matches:\n n=groupindex['quote']-1\n key=m[n]\n if key:\n quotes[key]=quotes.get(key,0)+1\n try :\n n=groupindex['delim']-1\n key=m[n]\n except KeyError:\n continue\n if key and (delimiters is None or key in delimiters):\n delims[key]=delims.get(key,0)+1\n try :\n n=groupindex['space']-1\n except KeyError:\n continue\n if m[n]:\n spaces +=1\n \n quotechar=max(quotes,key=quotes.get)\n \n if delims:\n delim=max(delims,key=delims.get)\n skipinitialspace=delims[delim]==spaces\n if delim =='\\n':\n delim=''\n else :\n \n delim=''\n skipinitialspace=0\n \n \n \n dq_regexp=re.compile(\n r\"((%(delim)s)|^)\\W*%(quote)s[^%(delim)s\\n]*%(quote)s[^%(delim)s\\n]*%(quote)s\\W*((%(delim)s)|$)\"%\\\n {'delim':re.escape(delim),'quote':quotechar},re.MULTILINE)\n \n \n \n if dq_regexp.search(data):\n doublequote=True\n else :\n doublequote=False\n \n return (quotechar,doublequote,delim,skipinitialspace)\n \n \n def _guess_delimiter(self,data,delimiters):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n data=list(filter(None ,data.split('\\n')))\n \n ascii=[chr(c)for c in range(127)]\n \n \n chunkLength=min(10,len(data))\n iteration=0\n charFrequency={}\n modes={}\n delims={}\n start,end=0,chunkLength\n while start 1:\n modes[char]=max(items,key=lambda x:x[1])\n \n \n items.remove(modes[char])\n modes[char]=(modes[char][0],modes[char][1]\n -sum(item[1]for item in items))\n else :\n modes[char]=items[0]\n \n \n modeList=modes.items()\n total=float(min(chunkLength *iteration,len(data)))\n \n consistency=1.0\n \n threshold=0.9\n while len(delims)==0 and consistency >=threshold:\n for k,v in modeList:\n if v[0]>0 and v[1]>0:\n if ((v[1]/total)>=consistency and\n (delimiters is None or k in delimiters)):\n delims[k]=v\n consistency -=0.01\n \n if len(delims)==1:\n delim=list(delims.keys())[0]\n skipinitialspace=(data[0].count(delim)==\n data[0].count(\"%c \"%delim))\n return (delim,skipinitialspace)\n \n \n start=end\n end +=chunkLength\n \n if not delims:\n return ('',0)\n \n \n if len(delims)>1:\n for d in self.preferred:\n if d in delims.keys():\n skipinitialspace=(data[0].count(d)==\n data[0].count(\"%c \"%d))\n return (d,skipinitialspace)\n \n \n \n items=[(v,k)for (k,v)in delims.items()]\n items.sort()\n delim=items[-1][1]\n \n skipinitialspace=(data[0].count(delim)==\n data[0].count(\"%c \"%delim))\n return (delim,skipinitialspace)\n \n \n def has_header(self,sample):\n \n \n \n \n \n \n \n \n \n rdr=reader(StringIO(sample),self.sniff(sample))\n \n header=next(rdr)\n \n columns=len(header)\n columnTypes={}\n for i in range(columns):columnTypes[i]=None\n \n checked=0\n for row in rdr:\n \n if checked >20:\n break\n checked +=1\n \n if len(row)!=columns:\n continue\n \n for col in list(columnTypes.keys()):\n \n for thisType in [int,float,complex]:\n try :\n thisType(row[col])\n break\n except (ValueError,OverflowError):\n pass\n else :\n \n thisType=len(row[col])\n \n if thisType !=columnTypes[col]:\n if columnTypes[col]is None :\n columnTypes[col]=thisType\n else :\n \n \n del columnTypes[col]\n \n \n \n hasHeader=0\n for col,colType in columnTypes.items():\n if type(colType)==type(0):\n if len(header[col])!=colType:\n hasHeader +=1\n else :\n hasHeader -=1\n else :\n try :\n colType(header[col])\n except (ValueError,TypeError):\n hasHeader +=1\n else :\n hasHeader -=1\n \n return hasHeader >0\n", ["_csv", "io", "re"]], "dataclasses": [".py", "import re\nimport sys\nimport copy\nimport types\nimport inspect\nimport keyword\nimport builtins\nimport functools\nimport _thread\n\n\n__all__=['dataclass',\n'field',\n'Field',\n'FrozenInstanceError',\n'InitVar',\n'MISSING',\n\n\n'fields',\n'asdict',\n'astuple',\n'make_dataclass',\n'replace',\n'is_dataclass',\n]\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nclass FrozenInstanceError(AttributeError):pass\n\n\n\n\nclass _HAS_DEFAULT_FACTORY_CLASS:\n def __repr__(self):\n return ''\n_HAS_DEFAULT_FACTORY=_HAS_DEFAULT_FACTORY_CLASS()\n\n\n\nclass _MISSING_TYPE:\n pass\nMISSING=_MISSING_TYPE()\n\n\n\n_EMPTY_METADATA=types.MappingProxyType({})\n\n\nclass _FIELD_BASE:\n def __init__(self,name):\n self.name=name\n def __repr__(self):\n return self.name\n_FIELD=_FIELD_BASE('_FIELD')\n_FIELD_CLASSVAR=_FIELD_BASE('_FIELD_CLASSVAR')\n_FIELD_INITVAR=_FIELD_BASE('_FIELD_INITVAR')\n\n\n\n_FIELDS='__dataclass_fields__'\n\n\n\n_PARAMS='__dataclass_params__'\n\n\n\n_POST_INIT_NAME='__post_init__'\n\n\n\n\n_MODULE_IDENTIFIER_RE=re.compile(r'^(?:\\s*(\\w+)\\s*\\.)?\\s*(\\w+)')\n\nclass _InitVarMeta(type):\n def __getitem__(self,params):\n return InitVar(params)\n \nclass InitVar(metaclass=_InitVarMeta):\n __slots__=('type',)\n \n def __init__(self,type):\n self.type=type\n \n def __repr__(self):\n return f'dataclasses.InitVar[{self.type.__name__}]'\n \n \n \n \n \n \n \n \n \n \n \n \nclass Field:\n __slots__=('name',\n 'type',\n 'default',\n 'default_factory',\n 'repr',\n 'hash',\n 'init',\n 'compare',\n 'metadata',\n '_field_type',\n )\n \n def __init__(self,default,default_factory,init,repr,hash,compare,\n metadata):\n self.name=None\n self.type=None\n self.default=default\n self.default_factory=default_factory\n self.init=init\n self.repr=repr\n self.hash=hash\n self.compare=compare\n self.metadata=(_EMPTY_METADATA\n if metadata is None else\n types.MappingProxyType(metadata))\n self._field_type=None\n \n def __repr__(self):\n return ('Field('\n f'name={self.name!r},'\n f'type={self.type!r},'\n f'default={self.default!r},'\n f'default_factory={self.default_factory!r},'\n f'init={self.init!r},'\n f'repr={self.repr!r},'\n f'hash={self.hash!r},'\n f'compare={self.compare!r},'\n f'metadata={self.metadata!r},'\n f'_field_type={self._field_type}'\n ')')\n \n \n \n \n \n \n \n \n \n def __set_name__(self,owner,name):\n func=getattr(type(self.default),'__set_name__',None )\n if func:\n \n \n func(self.default,owner,name)\n \n \nclass _DataclassParams:\n __slots__=('init',\n 'repr',\n 'eq',\n 'order',\n 'unsafe_hash',\n 'frozen',\n )\n \n def __init__(self,init,repr,eq,order,unsafe_hash,frozen):\n self.init=init\n self.repr=repr\n self.eq=eq\n self.order=order\n self.unsafe_hash=unsafe_hash\n self.frozen=frozen\n \n def __repr__(self):\n return ('_DataclassParams('\n f'init={self.init!r},'\n f'repr={self.repr!r},'\n f'eq={self.eq!r},'\n f'order={self.order!r},'\n f'unsafe_hash={self.unsafe_hash!r},'\n f'frozen={self.frozen!r}'\n ')')\n \n \n \n \n \ndef field(*,default=MISSING,default_factory=MISSING,init=True ,repr=True ,\nhash=None ,compare=True ,metadata=None ):\n ''\n\n\n\n\n\n\n\n\n\n\n\n \n \n if default is not MISSING and default_factory is not MISSING:\n raise ValueError('cannot specify both default and default_factory')\n return Field(default,default_factory,init,repr,hash,compare,\n metadata)\n \n \ndef _tuple_str(obj_name,fields):\n\n\n\n\n\n if not fields:\n return '()'\n \n return f'({\",\".join([f\"{obj_name}.{f.name}\" for f in fields])},)'\n \n \n \n \ndef _recursive_repr(user_function):\n\n\n repr_running=set()\n \n @functools.wraps(user_function)\n def wrapper(self):\n key=id(self),_thread.get_ident()\n if key in repr_running:\n return '...'\n repr_running.add(key)\n try :\n result=user_function(self)\n finally :\n repr_running.discard(key)\n return result\n return wrapper\n \n \ndef _create_fn(name,args,body,*,globals=None ,locals=None ,\nreturn_type=MISSING):\n\n\n\n if locals is None :\n locals={}\n \n \n \n if globals is not None and '__builtins__'not in globals:\n globals['__builtins__']=builtins\n return_annotation=''\n if return_type is not MISSING:\n locals['_return_type']=return_type\n return_annotation='->_return_type'\n args=','.join(args)\n body='\\n'.join(f' {b}'for b in body)\n \n \n txt=f'def {name}({args}){return_annotation}:\\n{body}'\n \n exec(txt,globals,locals)\n return locals[name]\n \n \ndef _field_assign(frozen,name,value,self_name):\n\n\n\n\n\n\n if frozen:\n return f'__builtins__.object.__setattr__({self_name},{name!r},{value})'\n return f'{self_name}.{name}={value}'\n \n \ndef _field_init(f,frozen,globals,self_name):\n\n\n\n default_name=f'_dflt_{f.name}'\n if f.default_factory is not MISSING:\n if f.init:\n \n \n globals[default_name]=f.default_factory\n value=(f'{default_name}() '\n f'if {f.name} is _HAS_DEFAULT_FACTORY '\n f'else {f.name}')\n else :\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n globals[default_name]=f.default_factory\n value=f'{default_name}()'\n else :\n \n if f.init:\n if f.default is MISSING:\n \n value=f.name\n elif f.default is not MISSING:\n globals[default_name]=f.default\n value=f.name\n else :\n \n \n return None\n \n \n \n \n if f._field_type is _FIELD_INITVAR:\n return None\n \n \n return _field_assign(frozen,f.name,value,self_name)\n \n \ndef _init_param(f):\n\n\n\n\n if f.default is MISSING and f.default_factory is MISSING:\n \n \n default=''\n elif f.default is not MISSING:\n \n \n default=f'=_dflt_{f.name}'\n elif f.default_factory is not MISSING:\n \n default='=_HAS_DEFAULT_FACTORY'\n return f'{f.name}:_type_{f.name}{default}'\n \n \ndef _init_fn(fields,frozen,has_post_init,self_name):\n\n\n\n\n\n\n\n seen_default=False\n for f in fields:\n \n if f.init:\n if not (f.default is MISSING and f.default_factory is MISSING):\n seen_default=True\n elif seen_default:\n raise TypeError(f'non-default argument {f.name!r} '\n 'follows default argument')\n \n globals={'MISSING':MISSING,\n '_HAS_DEFAULT_FACTORY':_HAS_DEFAULT_FACTORY}\n \n body_lines=[]\n for f in fields:\n line=_field_init(f,frozen,globals,self_name)\n \n \n if line:\n body_lines.append(line)\n \n \n if has_post_init:\n params_str=','.join(f.name for f in fields\n if f._field_type is _FIELD_INITVAR)\n body_lines.append(f'{self_name}.{_POST_INIT_NAME}({params_str})')\n \n \n if not body_lines:\n body_lines=['pass']\n \n locals={f'_type_{f.name}':f.type for f in fields}\n return _create_fn('__init__',\n [self_name]+[_init_param(f)for f in fields if f.init],\n body_lines,\n locals=locals,\n globals=globals,\n return_type=None )\n \n \ndef _repr_fn(fields):\n fn=_create_fn('__repr__',\n ('self',),\n ['return self.__class__.__qualname__ + f\"('+\n ', '.join([f\"{f.name}={{self.{f.name}!r}}\"\n for f in fields])+\n ')\"'])\n return _recursive_repr(fn)\n \n \ndef _frozen_get_del_attr(cls,fields):\n\n\n globals={'cls':cls,\n 'FrozenInstanceError':FrozenInstanceError}\n if fields:\n fields_str='('+','.join(repr(f.name)for f in fields)+',)'\n else :\n \n fields_str='()'\n return (_create_fn('__setattr__',\n ('self','name','value'),\n (f'if type(self) is cls or name in {fields_str}:',\n ' raise FrozenInstanceError(f\"cannot assign to field {name!r}\")',\n f'super(cls, self).__setattr__(name, value)'),\n globals=globals),\n _create_fn('__delattr__',\n ('self','name'),\n (f'if type(self) is cls or name in {fields_str}:',\n ' raise FrozenInstanceError(f\"cannot delete field {name!r}\")',\n f'super(cls, self).__delattr__(name)'),\n globals=globals),\n )\n \n \ndef _cmp_fn(name,op,self_tuple,other_tuple):\n\n\n\n\n\n return _create_fn(name,\n ('self','other'),\n ['if other.__class__ is self.__class__:',\n f' return {self_tuple}{op}{other_tuple}',\n 'return NotImplemented'])\n \n \ndef _hash_fn(fields):\n self_tuple=_tuple_str('self',fields)\n return _create_fn('__hash__',\n ('self',),\n [f'return hash({self_tuple})'])\n \n \ndef _is_classvar(a_type,typing):\n\n\n return (a_type is typing.ClassVar\n or (type(a_type)is typing._GenericAlias\n and a_type.__origin__ is typing.ClassVar))\n \n \ndef _is_initvar(a_type,dataclasses):\n\n\n return (a_type is dataclasses.InitVar\n or type(a_type)is dataclasses.InitVar)\n \n \ndef _is_type(annotation,cls,a_module,a_type,is_type_predicate):\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n match=_MODULE_IDENTIFIER_RE.match(annotation)\n if match:\n ns=None\n module_name=match.group(1)\n if not module_name:\n \n \n ns=sys.modules.get(cls.__module__).__dict__\n else :\n \n module=sys.modules.get(cls.__module__)\n if module and module.__dict__.get(module_name)is a_module:\n ns=sys.modules.get(a_type.__module__).__dict__\n if ns and is_type_predicate(ns.get(match.group(2)),a_module):\n return True\n return False\n \n \ndef _get_field(cls,a_name,a_type):\n\n\n\n\n\n\n default=getattr(cls,a_name,MISSING)\n if isinstance(default,Field):\n f=default\n else :\n if isinstance(default,types.MemberDescriptorType):\n \n default=MISSING\n f=field(default=default)\n \n \n f.name=a_name\n f.type=a_type\n \n \n \n \n f._field_type=_FIELD\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n typing=sys.modules.get('typing')\n if typing:\n if (_is_classvar(a_type,typing)\n or (isinstance(f.type,str)\n and _is_type(f.type,cls,typing,typing.ClassVar,\n _is_classvar))):\n f._field_type=_FIELD_CLASSVAR\n \n \n \n if f._field_type is _FIELD:\n \n \n dataclasses=sys.modules[__name__]\n if (_is_initvar(a_type,dataclasses)\n or (isinstance(f.type,str)\n and _is_type(f.type,cls,dataclasses,dataclasses.InitVar,\n _is_initvar))):\n f._field_type=_FIELD_INITVAR\n \n \n \n \n \n \n if f._field_type in (_FIELD_CLASSVAR,_FIELD_INITVAR):\n if f.default_factory is not MISSING:\n raise TypeError(f'field {f.name} cannot have a '\n 'default factory')\n \n \n \n \n \n \n \n if f._field_type is _FIELD and isinstance(f.default,(list,dict,set)):\n raise ValueError(f'mutable default {type(f.default)} for field '\n f'{f.name} is not allowed: use default_factory')\n \n return f\n \n \ndef _set_new_attribute(cls,name,value):\n\n\n if name in cls.__dict__:\n return True\n setattr(cls,name,value)\n return False\n \n \n \n \n \n \n \ndef _hash_set_none(cls,fields):\n return None\n \ndef _hash_add(cls,fields):\n flds=[f for f in fields if (f.compare if f.hash is None else f.hash)]\n return _hash_fn(flds)\n \ndef _hash_exception(cls,fields):\n\n raise TypeError(f'Cannot overwrite attribute __hash__ '\n f'in class {cls.__name__}')\n \n \n \n \n \n \n \n \n \n \n_hash_action={(False ,False ,False ,False ):None ,\n(False ,False ,False ,True ):None ,\n(False ,False ,True ,False ):None ,\n(False ,False ,True ,True ):None ,\n(False ,True ,False ,False ):_hash_set_none,\n(False ,True ,False ,True ):None ,\n(False ,True ,True ,False ):_hash_add,\n(False ,True ,True ,True ):None ,\n(True ,False ,False ,False ):_hash_add,\n(True ,False ,False ,True ):_hash_exception,\n(True ,False ,True ,False ):_hash_add,\n(True ,False ,True ,True ):_hash_exception,\n(True ,True ,False ,False ):_hash_add,\n(True ,True ,False ,True ):_hash_exception,\n(True ,True ,True ,False ):_hash_add,\n(True ,True ,True ,True ):_hash_exception,\n}\n\n\n\n\ndef _process_class(cls,init,repr,eq,order,unsafe_hash,frozen):\n\n\n\n\n fields={}\n \n setattr(cls,_PARAMS,_DataclassParams(init,repr,eq,order,\n unsafe_hash,frozen))\n \n \n \n \n \n any_frozen_base=False\n has_dataclass_bases=False\n for b in cls.__mro__[-1:0:-1]:\n \n \n base_fields=getattr(b,_FIELDS,None )\n if base_fields:\n has_dataclass_bases=True\n for f in base_fields.values():\n fields[f.name]=f\n if getattr(b,_PARAMS).frozen:\n any_frozen_base=True\n \n \n \n \n \n \n \n \n \n \n \n \n \n cls_annotations=cls.__dict__.get('__annotations__',{})\n \n \n \n \n cls_fields=[_get_field(cls,name,type)\n for name,type in cls_annotations.items()]\n for f in cls_fields:\n fields[f.name]=f\n \n \n \n \n \n if isinstance(getattr(cls,f.name,None ),Field):\n if f.default is MISSING:\n \n \n \n \n \n \n delattr(cls,f.name)\n else :\n setattr(cls,f.name,f.default)\n \n \n for name,value in cls.__dict__.items():\n if isinstance(value,Field)and not name in cls_annotations:\n raise TypeError(f'{name!r} is a field but has no type annotation')\n \n \n if has_dataclass_bases:\n \n if any_frozen_base and not frozen:\n raise TypeError('cannot inherit non-frozen dataclass from a '\n 'frozen one')\n \n \n if not any_frozen_base and frozen:\n raise TypeError('cannot inherit frozen dataclass from a '\n 'non-frozen one')\n \n \n \n setattr(cls,_FIELDS,fields)\n \n \n \n \n \n \n class_hash=cls.__dict__.get('__hash__',MISSING)\n has_explicit_hash=not (class_hash is MISSING or\n (class_hash is None and '__eq__'in cls.__dict__))\n \n \n \n if order and not eq:\n raise ValueError('eq must be true if order is true')\n \n if init:\n \n has_post_init=hasattr(cls,_POST_INIT_NAME)\n \n \n flds=[f for f in fields.values()\n if f._field_type in (_FIELD,_FIELD_INITVAR)]\n _set_new_attribute(cls,'__init__',\n _init_fn(flds,\n frozen,\n has_post_init,\n \n \n \n '__dataclass_self__'if 'self'in fields\n else 'self',\n ))\n \n \n \n field_list=[f for f in fields.values()if f._field_type is _FIELD]\n \n if repr:\n flds=[f for f in field_list if f.repr]\n _set_new_attribute(cls,'__repr__',_repr_fn(flds))\n \n if eq:\n \n \n flds=[f for f in field_list if f.compare]\n self_tuple=_tuple_str('self',flds)\n other_tuple=_tuple_str('other',flds)\n _set_new_attribute(cls,'__eq__',\n _cmp_fn('__eq__','==',\n self_tuple,other_tuple))\n \n if order:\n \n flds=[f for f in field_list if f.compare]\n self_tuple=_tuple_str('self',flds)\n other_tuple=_tuple_str('other',flds)\n for name,op in [('__lt__','<'),\n ('__le__','<='),\n ('__gt__','>'),\n ('__ge__','>='),\n ]:\n if _set_new_attribute(cls,name,\n _cmp_fn(name,op,self_tuple,other_tuple)):\n raise TypeError(f'Cannot overwrite attribute {name} '\n f'in class {cls.__name__}. Consider using '\n 'functools.total_ordering')\n \n if frozen:\n for fn in _frozen_get_del_attr(cls,field_list):\n if _set_new_attribute(cls,fn.__name__,fn):\n raise TypeError(f'Cannot overwrite attribute {fn.__name__} '\n f'in class {cls.__name__}')\n \n \n hash_action=_hash_action[bool(unsafe_hash),\n bool(eq),\n bool(frozen),\n has_explicit_hash]\n if hash_action:\n \n \n cls.__hash__=hash_action(cls,field_list)\n \n if not getattr(cls,'__doc__'):\n \n cls.__doc__=(cls.__name__+\n str(inspect.signature(cls)).replace(' -> None',''))\n \n return cls\n \n \ndef dataclass(cls=None ,/,*,init=True ,repr=True ,eq=True ,order=False ,\nunsafe_hash=False ,frozen=False ):\n ''\n\n\n\n\n\n\n\n\n\n \n \n def wrap(cls):\n return _process_class(cls,init,repr,eq,order,unsafe_hash,frozen)\n \n \n if cls is None :\n \n return wrap\n \n \n return wrap(cls)\n \n \ndef fields(class_or_instance):\n ''\n\n\n\n \n \n \n try :\n fields=getattr(class_or_instance,_FIELDS)\n except AttributeError:\n raise TypeError('must be called with a dataclass type or instance')\n \n \n \n return tuple(f for f in fields.values()if f._field_type is _FIELD)\n \n \ndef _is_dataclass_instance(obj):\n ''\n return hasattr(type(obj),_FIELDS)\n \n \ndef is_dataclass(obj):\n ''\n \n cls=obj if isinstance(obj,type)else type(obj)\n return hasattr(cls,_FIELDS)\n \n \ndef asdict(obj,*,dict_factory=dict):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n if not _is_dataclass_instance(obj):\n raise TypeError(\"asdict() should be called on dataclass instances\")\n return _asdict_inner(obj,dict_factory)\n \n \ndef _asdict_inner(obj,dict_factory):\n if _is_dataclass_instance(obj):\n result=[]\n for f in fields(obj):\n value=_asdict_inner(getattr(obj,f.name),dict_factory)\n result.append((f.name,value))\n return dict_factory(result)\n elif isinstance(obj,tuple)and hasattr(obj,'_fields'):\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n return type(obj)(*[_asdict_inner(v,dict_factory)for v in obj])\n elif isinstance(obj,(list,tuple)):\n \n \n \n return type(obj)(_asdict_inner(v,dict_factory)for v in obj)\n elif isinstance(obj,dict):\n return type(obj)((_asdict_inner(k,dict_factory),\n _asdict_inner(v,dict_factory))\n for k,v in obj.items())\n else :\n return copy.deepcopy(obj)\n \n \ndef astuple(obj,*,tuple_factory=tuple):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n if not _is_dataclass_instance(obj):\n raise TypeError(\"astuple() should be called on dataclass instances\")\n return _astuple_inner(obj,tuple_factory)\n \n \ndef _astuple_inner(obj,tuple_factory):\n if _is_dataclass_instance(obj):\n result=[]\n for f in fields(obj):\n value=_astuple_inner(getattr(obj,f.name),tuple_factory)\n result.append(value)\n return tuple_factory(result)\n elif isinstance(obj,tuple)and hasattr(obj,'_fields'):\n \n \n \n \n \n \n return type(obj)(*[_astuple_inner(v,tuple_factory)for v in obj])\n elif isinstance(obj,(list,tuple)):\n \n \n \n return type(obj)(_astuple_inner(v,tuple_factory)for v in obj)\n elif isinstance(obj,dict):\n return type(obj)((_astuple_inner(k,tuple_factory),_astuple_inner(v,tuple_factory))\n for k,v in obj.items())\n else :\n return copy.deepcopy(obj)\n \n \ndef make_dataclass(cls_name,fields,*,bases=(),namespace=None ,init=True ,\nrepr=True ,eq=True ,order=False ,unsafe_hash=False ,\nfrozen=False ):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n if namespace is None :\n namespace={}\n else :\n \n namespace=namespace.copy()\n \n \n \n seen=set()\n anns={}\n for item in fields:\n if isinstance(item,str):\n name=item\n tp='typing.Any'\n elif len(item)==2:\n name,tp,=item\n elif len(item)==3:\n name,tp,spec=item\n namespace[name]=spec\n else :\n raise TypeError(f'Invalid field: {item!r}')\n \n if not isinstance(name,str)or not name.isidentifier():\n raise TypeError(f'Field names must be valid identifiers: {name!r}')\n if keyword.iskeyword(name):\n raise TypeError(f'Field names must not be keywords: {name!r}')\n if name in seen:\n raise TypeError(f'Field name duplicated: {name!r}')\n \n seen.add(name)\n anns[name]=tp\n \n namespace['__annotations__']=anns\n \n \n cls=types.new_class(cls_name,bases,{},lambda ns:ns.update(namespace))\n return dataclass(cls,init=init,repr=repr,eq=eq,order=order,\n unsafe_hash=unsafe_hash,frozen=frozen)\n \n \ndef replace(*args,**changes):\n ''\n\n\n\n\n\n\n\n\n\n\n\n \n if len(args)>1:\n raise TypeError(f'replace() takes 1 positional argument but {len(args)} were given')\n if args:\n obj,=args\n elif 'obj'in changes:\n obj=changes.pop('obj')\n import warnings\n warnings.warn(\"Passing 'obj' as keyword argument is deprecated\",\n DeprecationWarning,stacklevel=2)\n else :\n raise TypeError(\"replace() missing 1 required positional argument: 'obj'\")\n \n \n \n \n if not _is_dataclass_instance(obj):\n raise TypeError(\"replace() should be called on dataclass instances\")\n \n \n \n \n for f in getattr(obj,_FIELDS).values():\n \n if f._field_type is _FIELD_CLASSVAR:\n continue\n \n if not f.init:\n \n if f.name in changes:\n raise ValueError(f'field {f.name} is declared with '\n 'init=False, it cannot be specified with '\n 'replace()')\n continue\n \n if f.name not in changes:\n if f._field_type is _FIELD_INITVAR:\n raise ValueError(f\"InitVar {f.name!r} \"\n 'must be specified with replace()')\n changes[f.name]=getattr(obj,f.name)\n \n \n \n \n \n \n return obj.__class__(**changes)\nreplace.__text_signature__='(obj, /, **kwargs)'\n", ["_thread", "builtins", "copy", "functools", "inspect", "keyword", "re", "sys", "types", "warnings"]], "datetime": [".py", "''\n\n\n\n\n\nimport time as _time\nimport math as _math\nimport sys\n\ndef _cmp(x,y):\n return 0 if x ==y else 1 if x >y else -1\n \nMINYEAR=1\nMAXYEAR=9999\n_MAXORDINAL=3652059\n\n\n\n\n\n\n\n\n\n\n\n_DAYS_IN_MONTH=[-1,31,28,31,30,31,30,31,31,30,31,30,31]\n\n_DAYS_BEFORE_MONTH=[-1]\ndbm=0\nfor dim in _DAYS_IN_MONTH[1:]:\n _DAYS_BEFORE_MONTH.append(dbm)\n dbm +=dim\ndel dbm,dim\n\ndef _is_leap(year):\n ''\n return year %4 ==0 and (year %100 !=0 or year %400 ==0)\n \ndef _days_before_year(year):\n ''\n y=year -1\n return y *365+y //4 -y //100+y //400\n \ndef _days_in_month(year,month):\n ''\n assert 1 <=month <=12,month\n if month ==2 and _is_leap(year):\n return 29\n return _DAYS_IN_MONTH[month]\n \ndef _days_before_month(year,month):\n ''\n assert 1 <=month <=12,'month must be in 1..12'\n return _DAYS_BEFORE_MONTH[month]+(month >2 and _is_leap(year))\n \ndef _ymd2ord(year,month,day):\n ''\n assert 1 <=month <=12,'month must be in 1..12'\n dim=_days_in_month(year,month)\n assert 1 <=day <=dim,('day must be in 1..%d'%dim)\n return (_days_before_year(year)+\n _days_before_month(year,month)+\n day)\n \n_DI400Y=_days_before_year(401)\n_DI100Y=_days_before_year(101)\n_DI4Y=_days_before_year(5)\n\n\n\nassert _DI4Y ==4 *365+1\n\n\n\nassert _DI400Y ==4 *_DI100Y+1\n\n\n\nassert _DI100Y ==25 *_DI4Y -1\n\ndef _ord2ymd(n):\n ''\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n n -=1\n n400,n=divmod(n,_DI400Y)\n year=n400 *400+1\n \n \n \n \n \n \n n100,n=divmod(n,_DI100Y)\n \n \n n4,n=divmod(n,_DI4Y)\n \n \n \n n1,n=divmod(n,365)\n \n year +=n100 *100+n4 *4+n1\n if n1 ==4 or n100 ==4:\n assert n ==0\n return year -1,12,31\n \n \n \n leapyear=n1 ==3 and (n4 !=24 or n100 ==3)\n assert leapyear ==_is_leap(year)\n month=(n+50)>>5\n preceding=_DAYS_BEFORE_MONTH[month]+(month >2 and leapyear)\n if preceding >n:\n month -=1\n preceding -=_DAYS_IN_MONTH[month]+(month ==2 and leapyear)\n n -=preceding\n assert 0 <=n <_days_in_month(year,month)\n \n \n \n return year,month,n+1\n \n \n_MONTHNAMES=[None ,\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\n\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"]\n_DAYNAMES=[None ,\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\",\"Sun\"]\n\n\ndef _build_struct_time(y,m,d,hh,mm,ss,dstflag):\n wday=(_ymd2ord(y,m,d)+6)%7\n dnum=_days_before_month(y,m)+d\n return _time.struct_time((y,m,d,hh,mm,ss,wday,dnum,dstflag))\n \ndef _format_time(hh,mm,ss,us,timespec='auto'):\n specs={\n 'hours':'{:02d}',\n 'minutes':'{:02d}:{:02d}',\n 'seconds':'{:02d}:{:02d}:{:02d}',\n 'milliseconds':'{:02d}:{:02d}:{:02d}.{:03d}',\n 'microseconds':'{:02d}:{:02d}:{:02d}.{:06d}'\n }\n \n if timespec =='auto':\n \n timespec='microseconds'if us else 'seconds'\n elif timespec =='milliseconds':\n us //=1000\n try :\n fmt=specs[timespec]\n except KeyError:\n raise ValueError('Unknown timespec value')\n else :\n return fmt.format(hh,mm,ss,us)\n \ndef _format_offset(off):\n s=''\n if off is not None :\n if off.days <0:\n sign=\"-\"\n off=-off\n else :\n sign=\"+\"\n hh,mm=divmod(off,timedelta(hours=1))\n mm,ss=divmod(mm,timedelta(minutes=1))\n s +=\"%s%02d:%02d\"%(sign,hh,mm)\n if ss or ss.microseconds:\n s +=\":%02d\"%ss.seconds\n \n if ss.microseconds:\n s +='.%06d'%ss.microseconds\n return s\n \n \ndef _wrap_strftime(object,format,timetuple):\n\n freplace=None\n zreplace=None\n Zreplace=None\n \n \n newformat=[]\n push=newformat.append\n i,n=0,len(format)\n while i =2:\n break\n \n if next_char !=':':\n raise ValueError('Invalid time separator: %c'%next_char)\n \n pos +=1\n \n if pos 0 else tstr\n \n time_comps=_parse_hh_mm_ss_ff(timestr)\n \n tzi=None\n if tz_pos >0:\n tzstr=tstr[tz_pos:]\n \n \n \n \n \n \n if len(tzstr)not in (5,8,15):\n raise ValueError('Malformed time zone string')\n \n tz_comps=_parse_hh_mm_ss_ff(tzstr)\n if all(x ==0 for x in tz_comps):\n tzi=timezone.utc\n else :\n tzsign=-1 if tstr[tz_pos -1]=='-'else 1\n \n td=timedelta(hours=tz_comps[0],minutes=tz_comps[1],\n seconds=tz_comps[2],microseconds=tz_comps[3])\n \n tzi=timezone(tzsign *td)\n \n time_comps.append(tzi)\n \n return time_comps\n \n \n \ndef _check_tzname(name):\n if name is not None and not isinstance(name,str):\n raise TypeError(\"tzinfo.tzname() must return None or string, \"\n \"not '%s'\"%type(name))\n \n \n \n \n \n \n \ndef _check_utc_offset(name,offset):\n assert name in (\"utcoffset\",\"dst\")\n if offset is None :\n return\n if not isinstance(offset,timedelta):\n raise TypeError(\"tzinfo.%s() must return None \"\n \"or timedelta, not '%s'\"%(name,type(offset)))\n if not -timedelta(1)b if b >0 else r 999999999:\n raise OverflowError(\"timedelta # of days is too large: %d\"%d)\n \n self=object.__new__(cls)\n self._days=d\n self._seconds=s\n self._microseconds=us\n self._hashcode=-1\n return self\n \n def __repr__(self):\n args=[]\n if self._days:\n args.append(\"days=%d\"%self._days)\n if self._seconds:\n args.append(\"seconds=%d\"%self._seconds)\n if self._microseconds:\n args.append(\"microseconds=%d\"%self._microseconds)\n if not args:\n args.append('0')\n return \"%s.%s(%s)\"%(self.__class__.__module__,\n self.__class__.__qualname__,\n ', '.join(args))\n \n def __str__(self):\n mm,ss=divmod(self._seconds,60)\n hh,mm=divmod(mm,60)\n s=\"%d:%02d:%02d\"%(hh,mm,ss)\n if self._days:\n def plural(n):\n return n,abs(n)!=1 and \"s\"or \"\"\n s=(\"%d day%s, \"%plural(self._days))+s\n if self._microseconds:\n s=s+\".%06d\"%self._microseconds\n return s\n \n def total_seconds(self):\n ''\n return ((self.days *86400+self.seconds)*10 **6+\n self.microseconds)/10 **6\n \n \n @property\n def days(self):\n ''\n return self._days\n \n @property\n def seconds(self):\n ''\n return self._seconds\n \n @property\n def microseconds(self):\n ''\n return self._microseconds\n \n def __add__(self,other):\n if isinstance(other,timedelta):\n \n \n return timedelta(self._days+other._days,\n self._seconds+other._seconds,\n self._microseconds+other._microseconds)\n return NotImplemented\n \n __radd__=__add__\n \n def __sub__(self,other):\n if isinstance(other,timedelta):\n \n \n return timedelta(self._days -other._days,\n self._seconds -other._seconds,\n self._microseconds -other._microseconds)\n return NotImplemented\n \n def __rsub__(self,other):\n if isinstance(other,timedelta):\n return -self+other\n return NotImplemented\n \n def __neg__(self):\n \n \n return timedelta(-self._days,\n -self._seconds,\n -self._microseconds)\n \n def __pos__(self):\n return self\n \n def __abs__(self):\n if self._days <0:\n return -self\n else :\n return self\n \n def __mul__(self,other):\n if isinstance(other,int):\n \n \n return timedelta(self._days *other,\n self._seconds *other,\n self._microseconds *other)\n if isinstance(other,float):\n usec=self._to_microseconds()\n a,b=other.as_integer_ratio()\n return timedelta(0,0,_divide_and_round(usec *a,b))\n return NotImplemented\n \n __rmul__=__mul__\n \n def _to_microseconds(self):\n return ((self._days *(24 *3600)+self._seconds)*1000000+\n self._microseconds)\n \n def __floordiv__(self,other):\n if not isinstance(other,(int,timedelta)):\n return NotImplemented\n usec=self._to_microseconds()\n if isinstance(other,timedelta):\n return usec //other._to_microseconds()\n if isinstance(other,int):\n return timedelta(0,0,usec //other)\n \n def __truediv__(self,other):\n if not isinstance(other,(int,float,timedelta)):\n return NotImplemented\n usec=self._to_microseconds()\n if isinstance(other,timedelta):\n return usec /other._to_microseconds()\n if isinstance(other,int):\n return timedelta(0,0,_divide_and_round(usec,other))\n if isinstance(other,float):\n a,b=other.as_integer_ratio()\n return timedelta(0,0,_divide_and_round(b *usec,a))\n \n def __mod__(self,other):\n if isinstance(other,timedelta):\n r=self._to_microseconds()%other._to_microseconds()\n return timedelta(0,0,r)\n return NotImplemented\n \n def __divmod__(self,other):\n if isinstance(other,timedelta):\n q,r=divmod(self._to_microseconds(),\n other._to_microseconds())\n return q,timedelta(0,0,r)\n return NotImplemented\n \n \n \n def __eq__(self,other):\n if isinstance(other,timedelta):\n return self._cmp(other)==0\n else :\n return NotImplemented\n \n def __le__(self,other):\n if isinstance(other,timedelta):\n return self._cmp(other)<=0\n else :\n return NotImplemented\n \n def __lt__(self,other):\n if isinstance(other,timedelta):\n return self._cmp(other)<0\n else :\n return NotImplemented\n \n def __ge__(self,other):\n if isinstance(other,timedelta):\n return self._cmp(other)>=0\n else :\n return NotImplemented\n \n def __gt__(self,other):\n if isinstance(other,timedelta):\n return self._cmp(other)>0\n else :\n return NotImplemented\n \n def _cmp(self,other):\n assert isinstance(other,timedelta)\n return _cmp(self._getstate(),other._getstate())\n \n def __hash__(self):\n if self._hashcode ==-1:\n self._hashcode=hash(self._getstate())\n return self._hashcode\n \n def __bool__(self):\n return (self._days !=0 or\n self._seconds !=0 or\n self._microseconds !=0)\n \n \n \n def _getstate(self):\n return (self._days,self._seconds,self._microseconds)\n \n def __reduce__(self):\n return (self.__class__,self._getstate())\n \ntimedelta.min=timedelta(-999999999)\ntimedelta.max=timedelta(days=999999999,hours=23,minutes=59,seconds=59,\nmicroseconds=999999)\ntimedelta.resolution=timedelta(microseconds=1)\n\nclass date:\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n __slots__='_year','_month','_day','_hashcode'\n \n def __new__(cls,year,month=None ,day=None ):\n ''\n\n\n\n\n \n if (month is None and\n isinstance(year,(bytes,str))and len(year)==4 and\n 1 <=ord(year[2:3])<=12):\n \n if isinstance(year,str):\n try :\n year=year.encode('latin1')\n except UnicodeEncodeError:\n \n raise ValueError(\n \"Failed to encode latin1 string when unpickling \"\n \"a date object. \"\n \"pickle.load(data, encoding='latin1') is assumed.\")\n self=object.__new__(cls)\n self.__setstate(year)\n self._hashcode=-1\n return self\n year,month,day=_check_date_fields(year,month,day)\n self=object.__new__(cls)\n self._year=year\n self._month=month\n self._day=day\n self._hashcode=-1\n return self\n \n \n \n @classmethod\n def fromtimestamp(cls,t):\n ''\n y,m,d,hh,mm,ss,weekday,jday,dst=_time.localtime(t)\n return cls(y,m,d)\n \n @classmethod\n def today(cls):\n ''\n t=_time.time()\n return cls.fromtimestamp(t)\n \n @classmethod\n def fromordinal(cls,n):\n ''\n\n\n\n \n y,m,d=_ord2ymd(n)\n return cls(y,m,d)\n \n @classmethod\n def fromisoformat(cls,date_string):\n ''\n if not isinstance(date_string,str):\n raise TypeError('fromisoformat: argument must be str')\n \n try :\n assert len(date_string)==10\n return cls(*_parse_isoformat_date(date_string))\n except Exception:\n raise ValueError(f'Invalid isoformat string: {date_string!r}')\n \n @classmethod\n def fromisocalendar(cls,year,week,day):\n ''\n\n \n \n if not MINYEAR <=year <=MAXYEAR:\n raise ValueError(f\"Year is out of range: {year}\")\n \n if not 0 =0\n return NotImplemented\n \n def __gt__(self,other):\n if isinstance(other,date):\n return self._cmp(other)>0\n return NotImplemented\n \n def _cmp(self,other):\n assert isinstance(other,date)\n y,m,d=self._year,self._month,self._day\n y2,m2,d2=other._year,other._month,other._day\n return _cmp((y,m,d),(y2,m2,d2))\n \n def __hash__(self):\n ''\n if self._hashcode ==-1:\n self._hashcode=hash(self._getstate())\n return self._hashcode\n \n \n \n def __add__(self,other):\n ''\n if isinstance(other,timedelta):\n o=self.toordinal()+other.days\n if 0 =52:\n if today >=_isoweek1monday(year+1):\n year +=1\n week=0\n return year,week+1,day+1\n \n \n \n def _getstate(self):\n yhi,ylo=divmod(self._year,256)\n return bytes([yhi,ylo,self._month,self._day]),\n \n def __setstate(self,string):\n yhi,ylo,self._month,self._day=string\n self._year=yhi *256+ylo\n \n def __reduce__(self):\n return (self.__class__,self._getstate())\n \n_date_class=date\n\ndate.min=date(1,1,1)\ndate.max=date(9999,12,31)\ndate.resolution=timedelta(days=1)\n\n\nclass tzinfo:\n ''\n\n\n \n __slots__=()\n \n def tzname(self,dt):\n ''\n raise NotImplementedError(\"tzinfo subclass must override tzname()\")\n \n def utcoffset(self,dt):\n ''\n raise NotImplementedError(\"tzinfo subclass must override utcoffset()\")\n \n def dst(self,dt):\n ''\n\n\n\n \n raise NotImplementedError(\"tzinfo subclass must override dst()\")\n \n def fromutc(self,dt):\n ''\n \n if not isinstance(dt,datetime):\n raise TypeError(\"fromutc() requires a datetime argument\")\n if dt.tzinfo is not self:\n raise ValueError(\"dt.tzinfo is not self\")\n \n dtoff=dt.utcoffset()\n if dtoff is None :\n raise ValueError(\"fromutc() requires a non-None utcoffset() \"\n \"result\")\n \n \n \n dtdst=dt.dst()\n if dtdst is None :\n raise ValueError(\"fromutc() requires a non-None dst() result\")\n delta=dtoff -dtdst\n if delta:\n dt +=delta\n dtdst=dt.dst()\n if dtdst is None :\n raise ValueError(\"fromutc(): dt.dst gave inconsistent \"\n \"results; cannot convert\")\n return dt+dtdst\n \n \n \n def __reduce__(self):\n getinitargs=getattr(self,\"__getinitargs__\",None )\n if getinitargs:\n args=getinitargs()\n else :\n args=()\n getstate=getattr(self,\"__getstate__\",None )\n if getstate:\n state=getstate()\n else :\n state=getattr(self,\"__dict__\",None )or None\n if state is None :\n return (self.__class__,args)\n else :\n return (self.__class__,args,state)\n \n_tzinfo_class=tzinfo\n\nclass time:\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n __slots__='_hour','_minute','_second','_microsecond','_tzinfo','_hashcode','_fold'\n \n def __new__(cls,hour=0,minute=0,second=0,microsecond=0,tzinfo=None ,*,fold=0):\n ''\n\n\n\n\n\n\n\n \n if (isinstance(hour,(bytes,str))and len(hour)==6 and\n ord(hour[0:1])&0x7F <24):\n \n if isinstance(hour,str):\n try :\n hour=hour.encode('latin1')\n except UnicodeEncodeError:\n \n raise ValueError(\n \"Failed to encode latin1 string when unpickling \"\n \"a time object. \"\n \"pickle.load(data, encoding='latin1') is assumed.\")\n self=object.__new__(cls)\n self.__setstate(hour,minute or None )\n self._hashcode=-1\n return self\n hour,minute,second,microsecond,fold=_check_time_fields(\n hour,minute,second,microsecond,fold)\n _check_tzinfo_arg(tzinfo)\n self=object.__new__(cls)\n self._hour=hour\n self._minute=minute\n self._second=second\n self._microsecond=microsecond\n self._tzinfo=tzinfo\n self._hashcode=-1\n self._fold=fold\n return self\n \n \n @property\n def hour(self):\n ''\n return self._hour\n \n @property\n def minute(self):\n ''\n return self._minute\n \n @property\n def second(self):\n ''\n return self._second\n \n @property\n def microsecond(self):\n ''\n return self._microsecond\n \n @property\n def tzinfo(self):\n ''\n return self._tzinfo\n \n @property\n def fold(self):\n return self._fold\n \n \n \n \n \n def __eq__(self,other):\n if isinstance(other,time):\n return self._cmp(other,allow_mixed=True )==0\n else :\n return NotImplemented\n \n def __le__(self,other):\n if isinstance(other,time):\n return self._cmp(other)<=0\n else :\n return NotImplemented\n \n def __lt__(self,other):\n if isinstance(other,time):\n return self._cmp(other)<0\n else :\n return NotImplemented\n \n def __ge__(self,other):\n if isinstance(other,time):\n return self._cmp(other)>=0\n else :\n return NotImplemented\n \n def __gt__(self,other):\n if isinstance(other,time):\n return self._cmp(other)>0\n else :\n return NotImplemented\n \n def _cmp(self,other,allow_mixed=False ):\n assert isinstance(other,time)\n mytz=self._tzinfo\n ottz=other._tzinfo\n myoff=otoff=None\n \n if mytz is ottz:\n base_compare=True\n else :\n myoff=self.utcoffset()\n otoff=other.utcoffset()\n base_compare=myoff ==otoff\n \n if base_compare:\n return _cmp((self._hour,self._minute,self._second,\n self._microsecond),\n (other._hour,other._minute,other._second,\n other._microsecond))\n if myoff is None or otoff is None :\n if allow_mixed:\n return 2\n else :\n raise TypeError(\"cannot compare naive and aware times\")\n myhhmm=self._hour *60+self._minute -myoff //timedelta(minutes=1)\n othhmm=other._hour *60+other._minute -otoff //timedelta(minutes=1)\n return _cmp((myhhmm,self._second,self._microsecond),\n (othhmm,other._second,other._microsecond))\n \n def __hash__(self):\n ''\n if self._hashcode ==-1:\n if self.fold:\n t=self.replace(fold=0)\n else :\n t=self\n tzoff=t.utcoffset()\n if not tzoff:\n self._hashcode=hash(t._getstate()[0])\n else :\n h,m=divmod(timedelta(hours=self.hour,minutes=self.minute)-tzoff,\n timedelta(hours=1))\n assert not m %timedelta(minutes=1),\"whole minute\"\n m //=timedelta(minutes=1)\n if 0 <=h <24:\n self._hashcode=hash(time(h,m,self.second,self.microsecond))\n else :\n self._hashcode=hash((h,m,self.second,self.microsecond))\n return self._hashcode\n \n \n \n def _tzstr(self):\n ''\n off=self.utcoffset()\n return _format_offset(off)\n \n def __repr__(self):\n ''\n if self._microsecond !=0:\n s=\", %d, %d\"%(self._second,self._microsecond)\n elif self._second !=0:\n s=\", %d\"%self._second\n else :\n s=\"\"\n s=\"%s.%s(%d, %d%s)\"%(self.__class__.__module__,\n self.__class__.__qualname__,\n self._hour,self._minute,s)\n if self._tzinfo is not None :\n assert s[-1:]==\")\"\n s=s[:-1]+\", tzinfo=%r\"%self._tzinfo+\")\"\n if self._fold:\n assert s[-1:]==\")\"\n s=s[:-1]+\", fold=1)\"\n return s\n \n def isoformat(self,timespec='auto'):\n ''\n\n\n\n\n\n\n \n s=_format_time(self._hour,self._minute,self._second,\n self._microsecond,timespec)\n tz=self._tzstr()\n if tz:\n s +=tz\n return s\n \n __str__=isoformat\n \n @classmethod\n def fromisoformat(cls,time_string):\n ''\n if not isinstance(time_string,str):\n raise TypeError('fromisoformat: argument must be str')\n \n try :\n return cls(*_parse_isoformat_time(time_string))\n except Exception:\n raise ValueError(f'Invalid isoformat string: {time_string!r}')\n \n \n def strftime(self,fmt):\n ''\n\n \n \n \n timetuple=(1900,1,1,\n self._hour,self._minute,self._second,\n 0,1,-1)\n return _wrap_strftime(self,fmt,timetuple)\n \n def __format__(self,fmt):\n if not isinstance(fmt,str):\n raise TypeError(\"must be str, not %s\"%type(fmt).__name__)\n if len(fmt)!=0:\n return self.strftime(fmt)\n return str(self)\n \n \n \n def utcoffset(self):\n ''\n \n if self._tzinfo is None :\n return None\n offset=self._tzinfo.utcoffset(None )\n _check_utc_offset(\"utcoffset\",offset)\n return offset\n \n def tzname(self):\n ''\n\n\n\n\n \n if self._tzinfo is None :\n return None\n name=self._tzinfo.tzname(None )\n _check_tzname(name)\n return name\n \n def dst(self):\n ''\n\n\n\n\n\n\n \n if self._tzinfo is None :\n return None\n offset=self._tzinfo.dst(None )\n _check_utc_offset(\"dst\",offset)\n return offset\n \n def replace(self,hour=None ,minute=None ,second=None ,microsecond=None ,\n tzinfo=True ,*,fold=None ):\n ''\n if hour is None :\n hour=self.hour\n if minute is None :\n minute=self.minute\n if second is None :\n second=self.second\n if microsecond is None :\n microsecond=self.microsecond\n if tzinfo is True :\n tzinfo=self.tzinfo\n if fold is None :\n fold=self._fold\n return type(self)(hour,minute,second,microsecond,tzinfo,fold=fold)\n \n \n \n def _getstate(self,protocol=3):\n us2,us3=divmod(self._microsecond,256)\n us1,us2=divmod(us2,256)\n h=self._hour\n if self._fold and protocol >3:\n h +=128\n basestate=bytes([h,self._minute,self._second,\n us1,us2,us3])\n if self._tzinfo is None :\n return (basestate,)\n else :\n return (basestate,self._tzinfo)\n \n def __setstate(self,string,tzinfo):\n if tzinfo is not None and not isinstance(tzinfo,_tzinfo_class):\n raise TypeError(\"bad tzinfo state arg\")\n h,self._minute,self._second,us1,us2,us3=string\n if h >127:\n self._fold=1\n self._hour=h -128\n else :\n self._fold=0\n self._hour=h\n self._microsecond=(((us1 <<8)|us2)<<8)|us3\n self._tzinfo=tzinfo\n \n def __reduce_ex__(self,protocol):\n return (time,self._getstate(protocol))\n \n def __reduce__(self):\n return self.__reduce_ex__(2)\n \n_time_class=time\n\ntime.min=time(0,0,0)\ntime.max=time(23,59,59,999999)\ntime.resolution=timedelta(microseconds=1)\n\nclass datetime(date):\n ''\n\n\n\n \n __slots__=date.__slots__+time.__slots__\n \n def __new__(cls,year,month=None ,day=None ,hour=0,minute=0,second=0,\n microsecond=0,tzinfo=None ,*,fold=0):\n if (isinstance(year,(bytes,str))and len(year)==10 and\n 1 <=ord(year[2:3])&0x7F <=12):\n \n if isinstance(year,str):\n try :\n year=bytes(year,'latin1')\n except UnicodeEncodeError:\n \n raise ValueError(\n \"Failed to encode latin1 string when unpickling \"\n \"a datetime object. \"\n \"pickle.load(data, encoding='latin1') is assumed.\")\n self=object.__new__(cls)\n self.__setstate(year,month)\n self._hashcode=-1\n return self\n year,month,day=_check_date_fields(year,month,day)\n hour,minute,second,microsecond,fold=_check_time_fields(\n hour,minute,second,microsecond,fold)\n _check_tzinfo_arg(tzinfo)\n self=object.__new__(cls)\n self._year=year\n self._month=month\n self._day=day\n self._hour=hour\n self._minute=minute\n self._second=second\n self._microsecond=microsecond\n self._tzinfo=tzinfo\n self._hashcode=-1\n self._fold=fold\n return self\n \n \n @property\n def hour(self):\n ''\n return self._hour\n \n @property\n def minute(self):\n ''\n return self._minute\n \n @property\n def second(self):\n ''\n return self._second\n \n @property\n def microsecond(self):\n ''\n return self._microsecond\n \n @property\n def tzinfo(self):\n ''\n return self._tzinfo\n \n @property\n def fold(self):\n return self._fold\n \n @classmethod\n def _fromtimestamp(cls,t,utc,tz):\n ''\n\n\n \n frac,t=_math.modf(t)\n us=round(frac *1e6)\n if us >=1000000:\n t +=1\n us -=1000000\n elif us <0:\n t -=1\n us +=1000000\n \n converter=_time.gmtime if utc else _time.localtime\n y,m,d,hh,mm,ss,weekday,jday,dst=converter(t)\n ss=min(ss,59)\n result=cls(y,m,d,hh,mm,ss,us,tz)\n if tz is None :\n \n \n \n max_fold_seconds=24 *3600\n \n \n \n \n \n if t =0\n elif not isinstance(other,date):\n return NotImplemented\n else :\n _cmperror(self,other)\n \n def __gt__(self,other):\n if isinstance(other,datetime):\n return self._cmp(other)>0\n elif not isinstance(other,date):\n return NotImplemented\n else :\n _cmperror(self,other)\n \n def _cmp(self,other,allow_mixed=False ):\n assert isinstance(other,datetime)\n mytz=self._tzinfo\n ottz=other._tzinfo\n myoff=otoff=None\n \n if mytz is ottz:\n base_compare=True\n else :\n myoff=self.utcoffset()\n otoff=other.utcoffset()\n \n if allow_mixed:\n if myoff !=self.replace(fold=not self.fold).utcoffset():\n return 2\n if otoff !=other.replace(fold=not other.fold).utcoffset():\n return 2\n base_compare=myoff ==otoff\n \n if base_compare:\n return _cmp((self._year,self._month,self._day,\n self._hour,self._minute,self._second,\n self._microsecond),\n (other._year,other._month,other._day,\n other._hour,other._minute,other._second,\n other._microsecond))\n if myoff is None or otoff is None :\n if allow_mixed:\n return 2\n else :\n raise TypeError(\"cannot compare naive and aware datetimes\")\n \n diff=self -other\n if diff.days <0:\n return -1\n return diff and 1 or 0\n \n def __add__(self,other):\n ''\n if not isinstance(other,timedelta):\n return NotImplemented\n delta=timedelta(self.toordinal(),\n hours=self._hour,\n minutes=self._minute,\n seconds=self._second,\n microseconds=self._microsecond)\n delta +=other\n hour,rem=divmod(delta.seconds,3600)\n minute,second=divmod(rem,60)\n if 0 3:\n m +=128\n basestate=bytes([yhi,ylo,m,self._day,\n self._hour,self._minute,self._second,\n us1,us2,us3])\n if self._tzinfo is None :\n return (basestate,)\n else :\n return (basestate,self._tzinfo)\n \n def __setstate(self,string,tzinfo):\n if tzinfo is not None and not isinstance(tzinfo,_tzinfo_class):\n raise TypeError(\"bad tzinfo state arg\")\n (yhi,ylo,m,self._day,self._hour,\n self._minute,self._second,us1,us2,us3)=string\n if m >127:\n self._fold=1\n self._month=m -128\n else :\n self._fold=0\n self._month=m\n self._year=yhi *256+ylo\n self._microsecond=(((us1 <<8)|us2)<<8)|us3\n self._tzinfo=tzinfo\n \n def __reduce_ex__(self,protocol):\n return (self.__class__,self._getstate(protocol))\n \n def __reduce__(self):\n return self.__reduce_ex__(2)\n \n \ndatetime.min=datetime(1,1,1)\ndatetime.max=datetime(9999,12,31,23,59,59,999999)\ndatetime.resolution=timedelta(microseconds=1)\n\n\ndef _isoweek1monday(year):\n\n\n THURSDAY=3\n firstday=_ymd2ord(year,1,1)\n firstweekday=(firstday+6)%7\n week1monday=firstday -firstweekday\n if firstweekday >THURSDAY:\n week1monday +=7\n return week1monday\n \n \nclass timezone(tzinfo):\n __slots__='_offset','_name'\n \n \n _Omitted=object()\n def __new__(cls,offset,name=_Omitted):\n if not isinstance(offset,timedelta):\n raise TypeError(\"offset must be a timedelta\")\n if name is cls._Omitted:\n if not offset:\n return cls.utc\n name=None\n elif not isinstance(name,str):\n raise TypeError(\"name must be a string\")\n if not cls._minoffset <=offset <=cls._maxoffset:\n raise ValueError(\"offset must be a timedelta \"\n \"strictly between -timedelta(hours=24) and \"\n \"timedelta(hours=24).\")\n return cls._create(offset,name)\n \n @classmethod\n def _create(cls,offset,name=None ):\n self=tzinfo.__new__(cls)\n self._offset=offset\n self._name=name\n return self\n \n def __getinitargs__(self):\n ''\n if self._name is None :\n return (self._offset,)\n return (self._offset,self._name)\n \n def __eq__(self,other):\n if isinstance(other,timezone):\n return self._offset ==other._offset\n return NotImplemented\n \n def __hash__(self):\n return hash(self._offset)\n \n def __repr__(self):\n ''\n\n\n\n\n\n\n\n \n if self is self.utc:\n return 'datetime.timezone.utc'\n if self._name is None :\n return \"%s.%s(%r)\"%(self.__class__.__module__,\n self.__class__.__qualname__,\n self._offset)\n return \"%s.%s(%r, %r)\"%(self.__class__.__module__,\n self.__class__.__qualname__,\n self._offset,self._name)\n \n def __str__(self):\n return self.tzname(None )\n \n def utcoffset(self,dt):\n if isinstance(dt,datetime)or dt is None :\n return self._offset\n raise TypeError(\"utcoffset() argument must be a datetime instance\"\n \" or None\")\n \n def tzname(self,dt):\n if isinstance(dt,datetime)or dt is None :\n if self._name is None :\n return self._name_from_offset(self._offset)\n return self._name\n raise TypeError(\"tzname() argument must be a datetime instance\"\n \" or None\")\n \n def dst(self,dt):\n if isinstance(dt,datetime)or dt is None :\n return None\n raise TypeError(\"dst() argument must be a datetime instance\"\n \" or None\")\n \n def fromutc(self,dt):\n if isinstance(dt,datetime):\n if dt.tzinfo is not self:\n raise ValueError(\"fromutc: dt.tzinfo \"\n \"is not self\")\n return dt+self._offset\n raise TypeError(\"fromutc() argument must be a datetime instance\"\n \" or None\")\n \n _maxoffset=timedelta(hours=24,microseconds=-1)\n _minoffset=-_maxoffset\n \n @staticmethod\n def _name_from_offset(delta):\n if not delta:\n return 'UTC'\n if delta
[\"\\']).*?(?P=quote)(?P[^\\w\\n\"\\'])(?P ?)',\n r'(?P[^\\w\\n\"\\'])(?P ?)(?P[\"\\']).*?(?P=quote)(?:$|\\n)',\n r'(?:^|\\n)(?P[\"\\']).*?(?P=quote)(?:$|\\n)'):\n regexp=re.compile(restr,re.DOTALL |re.MULTILINE)\n matches=regexp.findall(data)\n if matches:\n break\n \n if not matches:\n \n return ('',False ,None ,0)\n quotes={}\n delims={}\n spaces=0\n groupindex=regexp.groupindex\n for m in matches:\n n=groupindex['quote']-1\n key=m[n]\n if key:\n quotes[key]=quotes.get(key,0)+1\n try :\n n=groupindex['delim']-1\n key=m[n]\n except KeyError:\n continue\n if key and (delimiters is None or key in delimiters):\n delims[key]=delims.get(key,0)+1\n try :\n n=groupindex['space']-1\n except KeyError:\n continue\n if m[n]:\n spaces +=1\n \n quotechar=max(quotes,key=quotes.get)\n \n if delims:\n delim=max(delims,key=delims.get)\n skipinitialspace=delims[delim]==spaces\n if delim =='\\n':\n delim=''\n else :\n \n delim=''\n skipinitialspace=0\n \n \n \n dq_regexp=re.compile(\n r\"((%(delim)s)|^)\\W*%(quote)s[^%(delim)s\\n]*%(quote)s[^%(delim)s\\n]*%(quote)s\\W*((%(delim)s)|$)\"%\\\n {'delim':re.escape(delim),'quote':quotechar},re.MULTILINE)\n \n \n \n if dq_regexp.search(data):\n doublequote=True\n else :\n doublequote=False\n \n return (quotechar,doublequote,delim,skipinitialspace)\n \n \n def _guess_delimiter(self,data,delimiters):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n data=list(filter(None ,data.split('\\n')))\n \n ascii=[chr(c)for c in range(127)]\n \n \n chunkLength=min(10,len(data))\n iteration=0\n charFrequency={}\n modes={}\n delims={}\n start,end=0,chunkLength\n while start 1:\n modes[char]=max(items,key=lambda x:x[1])\n \n \n items.remove(modes[char])\n modes[char]=(modes[char][0],modes[char][1]\n -sum(item[1]for item in items))\n else :\n modes[char]=items[0]\n \n \n modeList=modes.items()\n total=float(min(chunkLength *iteration,len(data)))\n \n consistency=1.0\n \n threshold=0.9\n while len(delims)==0 and consistency >=threshold:\n for k,v in modeList:\n if v[0]>0 and v[1]>0:\n if ((v[1]/total)>=consistency and\n (delimiters is None or k in delimiters)):\n delims[k]=v\n consistency -=0.01\n \n if len(delims)==1:\n delim=list(delims.keys())[0]\n skipinitialspace=(data[0].count(delim)==\n data[0].count(\"%c \"%delim))\n return (delim,skipinitialspace)\n \n \n start=end\n end +=chunkLength\n \n if not delims:\n return ('',0)\n \n \n if len(delims)>1:\n for d in self.preferred:\n if d in delims.keys():\n skipinitialspace=(data[0].count(d)==\n data[0].count(\"%c \"%d))\n return (d,skipinitialspace)\n \n \n \n items=[(v,k)for (k,v)in delims.items()]\n items.sort()\n delim=items[-1][1]\n \n skipinitialspace=(data[0].count(delim)==\n data[0].count(\"%c \"%delim))\n return (delim,skipinitialspace)\n \n \n def has_header(self,sample):\n \n \n \n \n \n \n \n \n \n rdr=reader(StringIO(sample),self.sniff(sample))\n \n header=next(rdr)\n \n columns=len(header)\n columnTypes={}\n for i in range(columns):columnTypes[i]=None\n \n checked=0\n for row in rdr:\n \n if checked >20:\n break\n checked +=1\n \n if len(row)!=columns:\n continue\n \n for col in list(columnTypes.keys()):\n \n for thisType in [int,float,complex]:\n try :\n thisType(row[col])\n break\n except (ValueError,OverflowError):\n pass\n else :\n \n thisType=len(row[col])\n \n if thisType !=columnTypes[col]:\n if columnTypes[col]is None :\n columnTypes[col]=thisType\n else :\n \n \n del columnTypes[col]\n \n \n \n hasHeader=0\n for col,colType in columnTypes.items():\n if type(colType)==type(0):\n if len(header[col])!=colType:\n hasHeader +=1\n else :\n hasHeader -=1\n else :\n try :\n colType(header[col])\n except (ValueError,TypeError):\n hasHeader +=1\n else :\n hasHeader -=1\n \n return hasHeader >0\n", ["_csv", "io", "re"]], "dataclasses": [".py", "import re\nimport sys\nimport copy\nimport types\nimport inspect\nimport keyword\nimport builtins\nimport functools\nimport _thread\n\n\n__all__=['dataclass',\n'field',\n'Field',\n'FrozenInstanceError',\n'InitVar',\n'MISSING',\n\n\n'fields',\n'asdict',\n'astuple',\n'make_dataclass',\n'replace',\n'is_dataclass',\n]\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nclass FrozenInstanceError(AttributeError):pass\n\n\n\n\nclass _HAS_DEFAULT_FACTORY_CLASS:\n def __repr__(self):\n return ''\n_HAS_DEFAULT_FACTORY=_HAS_DEFAULT_FACTORY_CLASS()\n\n\n\nclass _MISSING_TYPE:\n pass\nMISSING=_MISSING_TYPE()\n\n\n\n_EMPTY_METADATA=types.MappingProxyType({})\n\n\nclass _FIELD_BASE:\n def __init__(self,name):\n self.name=name\n def __repr__(self):\n return self.name\n_FIELD=_FIELD_BASE('_FIELD')\n_FIELD_CLASSVAR=_FIELD_BASE('_FIELD_CLASSVAR')\n_FIELD_INITVAR=_FIELD_BASE('_FIELD_INITVAR')\n\n\n\n_FIELDS='__dataclass_fields__'\n\n\n\n_PARAMS='__dataclass_params__'\n\n\n\n_POST_INIT_NAME='__post_init__'\n\n\n\n\n_MODULE_IDENTIFIER_RE=re.compile(r'^(?:\\s*(\\w+)\\s*\\.)?\\s*(\\w+)')\n\nclass _InitVarMeta(type):\n def __getitem__(self,params):\n return InitVar(params)\n \nclass InitVar(metaclass=_InitVarMeta):\n __slots__=('type',)\n \n def __init__(self,type):\n self.type=type\n \n def __repr__(self):\n return f'dataclasses.InitVar[{self.type.__name__}]'\n \n \n \n \n \n \n \n \n \n \n \n \nclass Field:\n __slots__=('name',\n 'type',\n 'default',\n 'default_factory',\n 'repr',\n 'hash',\n 'init',\n 'compare',\n 'metadata',\n '_field_type',\n )\n \n def __init__(self,default,default_factory,init,repr,hash,compare,\n metadata):\n self.name=None\n self.type=None\n self.default=default\n self.default_factory=default_factory\n self.init=init\n self.repr=repr\n self.hash=hash\n self.compare=compare\n self.metadata=(_EMPTY_METADATA\n if metadata is None else\n types.MappingProxyType(metadata))\n self._field_type=None\n \n def __repr__(self):\n return ('Field('\n f'name={self.name!r},'\n f'type={self.type!r},'\n f'default={self.default!r},'\n f'default_factory={self.default_factory!r},'\n f'init={self.init!r},'\n f'repr={self.repr!r},'\n f'hash={self.hash!r},'\n f'compare={self.compare!r},'\n f'metadata={self.metadata!r},'\n f'_field_type={self._field_type}'\n ')')\n \n \n \n \n \n \n \n \n \n def __set_name__(self,owner,name):\n func=getattr(type(self.default),'__set_name__',None )\n if func:\n \n \n func(self.default,owner,name)\n \n \nclass _DataclassParams:\n __slots__=('init',\n 'repr',\n 'eq',\n 'order',\n 'unsafe_hash',\n 'frozen',\n )\n \n def __init__(self,init,repr,eq,order,unsafe_hash,frozen):\n self.init=init\n self.repr=repr\n self.eq=eq\n self.order=order\n self.unsafe_hash=unsafe_hash\n self.frozen=frozen\n \n def __repr__(self):\n return ('_DataclassParams('\n f'init={self.init!r},'\n f'repr={self.repr!r},'\n f'eq={self.eq!r},'\n f'order={self.order!r},'\n f'unsafe_hash={self.unsafe_hash!r},'\n f'frozen={self.frozen!r}'\n ')')\n \n \n \n \n \ndef field(*,default=MISSING,default_factory=MISSING,init=True ,repr=True ,\nhash=None ,compare=True ,metadata=None ):\n ''\n\n\n\n\n\n\n\n\n\n\n\n \n \n if default is not MISSING and default_factory is not MISSING:\n raise ValueError('cannot specify both default and default_factory')\n return Field(default,default_factory,init,repr,hash,compare,\n metadata)\n \n \ndef _tuple_str(obj_name,fields):\n\n\n\n\n\n if not fields:\n return '()'\n \n return f'({\",\".join([f\"{obj_name}.{f.name}\" for f in fields])},)'\n \n \n \n \ndef _recursive_repr(user_function):\n\n\n repr_running=set()\n \n @functools.wraps(user_function)\n def wrapper(self):\n key=id(self),_thread.get_ident()\n if key in repr_running:\n return '...'\n repr_running.add(key)\n try :\n result=user_function(self)\n finally :\n repr_running.discard(key)\n return result\n return wrapper\n \n \ndef _create_fn(name,args,body,*,globals=None ,locals=None ,\nreturn_type=MISSING):\n\n\n\n if locals is None :\n locals={}\n \n \n \n if globals is not None and '__builtins__'not in globals:\n globals['__builtins__']=builtins\n return_annotation=''\n if return_type is not MISSING:\n locals['_return_type']=return_type\n return_annotation='->_return_type'\n args=','.join(args)\n body='\\n'.join(f' {b}'for b in body)\n \n \n txt=f'def {name}({args}){return_annotation}:\\n{body}'\n \n exec(txt,globals,locals)\n return locals[name]\n \n \ndef _field_assign(frozen,name,value,self_name):\n\n\n\n\n\n\n if frozen:\n return f'__builtins__.object.__setattr__({self_name},{name!r},{value})'\n return f'{self_name}.{name}={value}'\n \n \ndef _field_init(f,frozen,globals,self_name):\n\n\n\n default_name=f'_dflt_{f.name}'\n if f.default_factory is not MISSING:\n if f.init:\n \n \n globals[default_name]=f.default_factory\n value=(f'{default_name}() '\n f'if {f.name} is _HAS_DEFAULT_FACTORY '\n f'else {f.name}')\n else :\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n globals[default_name]=f.default_factory\n value=f'{default_name}()'\n else :\n \n if f.init:\n if f.default is MISSING:\n \n value=f.name\n elif f.default is not MISSING:\n globals[default_name]=f.default\n value=f.name\n else :\n \n \n return None\n \n \n \n \n if f._field_type is _FIELD_INITVAR:\n return None\n \n \n return _field_assign(frozen,f.name,value,self_name)\n \n \ndef _init_param(f):\n\n\n\n\n if f.default is MISSING and f.default_factory is MISSING:\n \n \n default=''\n elif f.default is not MISSING:\n \n \n default=f'=_dflt_{f.name}'\n elif f.default_factory is not MISSING:\n \n default='=_HAS_DEFAULT_FACTORY'\n return f'{f.name}:_type_{f.name}{default}'\n \n \ndef _init_fn(fields,frozen,has_post_init,self_name):\n\n\n\n\n\n\n\n seen_default=False\n for f in fields:\n \n if f.init:\n if not (f.default is MISSING and f.default_factory is MISSING):\n seen_default=True\n elif seen_default:\n raise TypeError(f'non-default argument {f.name!r} '\n 'follows default argument')\n \n globals={'MISSING':MISSING,\n '_HAS_DEFAULT_FACTORY':_HAS_DEFAULT_FACTORY}\n \n body_lines=[]\n for f in fields:\n line=_field_init(f,frozen,globals,self_name)\n \n \n if line:\n body_lines.append(line)\n \n \n if has_post_init:\n params_str=','.join(f.name for f in fields\n if f._field_type is _FIELD_INITVAR)\n body_lines.append(f'{self_name}.{_POST_INIT_NAME}({params_str})')\n \n \n if not body_lines:\n body_lines=['pass']\n \n locals={f'_type_{f.name}':f.type for f in fields}\n return _create_fn('__init__',\n [self_name]+[_init_param(f)for f in fields if f.init],\n body_lines,\n locals=locals,\n globals=globals,\n return_type=None )\n \n \ndef _repr_fn(fields):\n fn=_create_fn('__repr__',\n ('self',),\n ['return self.__class__.__qualname__ + f\"('+\n ', '.join([f\"{f.name}={{self.{f.name}!r}}\"\n for f in fields])+\n ')\"'])\n return _recursive_repr(fn)\n \n \ndef _frozen_get_del_attr(cls,fields):\n\n\n globals={'cls':cls,\n 'FrozenInstanceError':FrozenInstanceError}\n if fields:\n fields_str='('+','.join(repr(f.name)for f in fields)+',)'\n else :\n \n fields_str='()'\n return (_create_fn('__setattr__',\n ('self','name','value'),\n (f'if type(self) is cls or name in {fields_str}:',\n ' raise FrozenInstanceError(f\"cannot assign to field {name!r}\")',\n f'super(cls, self).__setattr__(name, value)'),\n globals=globals),\n _create_fn('__delattr__',\n ('self','name'),\n (f'if type(self) is cls or name in {fields_str}:',\n ' raise FrozenInstanceError(f\"cannot delete field {name!r}\")',\n f'super(cls, self).__delattr__(name)'),\n globals=globals),\n )\n \n \ndef _cmp_fn(name,op,self_tuple,other_tuple):\n\n\n\n\n\n return _create_fn(name,\n ('self','other'),\n ['if other.__class__ is self.__class__:',\n f' return {self_tuple}{op}{other_tuple}',\n 'return NotImplemented'])\n \n \ndef _hash_fn(fields):\n self_tuple=_tuple_str('self',fields)\n return _create_fn('__hash__',\n ('self',),\n [f'return hash({self_tuple})'])\n \n \ndef _is_classvar(a_type,typing):\n\n\n return (a_type is typing.ClassVar\n or (type(a_type)is typing._GenericAlias\n and a_type.__origin__ is typing.ClassVar))\n \n \ndef _is_initvar(a_type,dataclasses):\n\n\n return (a_type is dataclasses.InitVar\n or type(a_type)is dataclasses.InitVar)\n \n \ndef _is_type(annotation,cls,a_module,a_type,is_type_predicate):\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n match=_MODULE_IDENTIFIER_RE.match(annotation)\n if match:\n ns=None\n module_name=match.group(1)\n if not module_name:\n \n \n ns=sys.modules.get(cls.__module__).__dict__\n else :\n \n module=sys.modules.get(cls.__module__)\n if module and module.__dict__.get(module_name)is a_module:\n ns=sys.modules.get(a_type.__module__).__dict__\n if ns and is_type_predicate(ns.get(match.group(2)),a_module):\n return True\n return False\n \n \ndef _get_field(cls,a_name,a_type):\n\n\n\n\n\n\n default=getattr(cls,a_name,MISSING)\n if isinstance(default,Field):\n f=default\n else :\n if isinstance(default,types.MemberDescriptorType):\n \n default=MISSING\n f=field(default=default)\n \n \n f.name=a_name\n f.type=a_type\n \n \n \n \n f._field_type=_FIELD\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n typing=sys.modules.get('typing')\n if typing:\n if (_is_classvar(a_type,typing)\n or (isinstance(f.type,str)\n and _is_type(f.type,cls,typing,typing.ClassVar,\n _is_classvar))):\n f._field_type=_FIELD_CLASSVAR\n \n \n \n if f._field_type is _FIELD:\n \n \n dataclasses=sys.modules[__name__]\n if (_is_initvar(a_type,dataclasses)\n or (isinstance(f.type,str)\n and _is_type(f.type,cls,dataclasses,dataclasses.InitVar,\n _is_initvar))):\n f._field_type=_FIELD_INITVAR\n \n \n \n \n \n \n if f._field_type in (_FIELD_CLASSVAR,_FIELD_INITVAR):\n if f.default_factory is not MISSING:\n raise TypeError(f'field {f.name} cannot have a '\n 'default factory')\n \n \n \n \n \n \n \n if f._field_type is _FIELD and isinstance(f.default,(list,dict,set)):\n raise ValueError(f'mutable default {type(f.default)} for field '\n f'{f.name} is not allowed: use default_factory')\n \n return f\n \n \ndef _set_new_attribute(cls,name,value):\n\n\n if name in cls.__dict__:\n return True\n setattr(cls,name,value)\n return False\n \n \n \n \n \n \n \ndef _hash_set_none(cls,fields):\n return None\n \ndef _hash_add(cls,fields):\n flds=[f for f in fields if (f.compare if f.hash is None else f.hash)]\n return _hash_fn(flds)\n \ndef _hash_exception(cls,fields):\n\n raise TypeError(f'Cannot overwrite attribute __hash__ '\n f'in class {cls.__name__}')\n \n \n \n \n \n \n \n \n \n \n_hash_action={(False ,False ,False ,False ):None ,\n(False ,False ,False ,True ):None ,\n(False ,False ,True ,False ):None ,\n(False ,False ,True ,True ):None ,\n(False ,True ,False ,False ):_hash_set_none,\n(False ,True ,False ,True ):None ,\n(False ,True ,True ,False ):_hash_add,\n(False ,True ,True ,True ):None ,\n(True ,False ,False ,False ):_hash_add,\n(True ,False ,False ,True ):_hash_exception,\n(True ,False ,True ,False ):_hash_add,\n(True ,False ,True ,True ):_hash_exception,\n(True ,True ,False ,False ):_hash_add,\n(True ,True ,False ,True ):_hash_exception,\n(True ,True ,True ,False ):_hash_add,\n(True ,True ,True ,True ):_hash_exception,\n}\n\n\n\n\ndef _process_class(cls,init,repr,eq,order,unsafe_hash,frozen):\n\n\n\n\n fields={}\n \n setattr(cls,_PARAMS,_DataclassParams(init,repr,eq,order,\n unsafe_hash,frozen))\n \n \n \n \n \n any_frozen_base=False\n has_dataclass_bases=False\n for b in cls.__mro__[-1:0:-1]:\n \n \n base_fields=getattr(b,_FIELDS,None )\n if base_fields:\n has_dataclass_bases=True\n for f in base_fields.values():\n fields[f.name]=f\n if getattr(b,_PARAMS).frozen:\n any_frozen_base=True\n \n \n \n \n \n \n \n \n \n \n \n \n \n cls_annotations=cls.__dict__.get('__annotations__',{})\n \n \n \n \n cls_fields=[_get_field(cls,name,type)\n for name,type in cls_annotations.items()]\n for f in cls_fields:\n fields[f.name]=f\n \n \n \n \n \n if isinstance(getattr(cls,f.name,None ),Field):\n if f.default is MISSING:\n \n \n \n \n \n \n delattr(cls,f.name)\n else :\n setattr(cls,f.name,f.default)\n \n \n for name,value in cls.__dict__.items():\n if isinstance(value,Field)and not name in cls_annotations:\n raise TypeError(f'{name!r} is a field but has no type annotation')\n \n \n if has_dataclass_bases:\n \n if any_frozen_base and not frozen:\n raise TypeError('cannot inherit non-frozen dataclass from a '\n 'frozen one')\n \n \n if not any_frozen_base and frozen:\n raise TypeError('cannot inherit frozen dataclass from a '\n 'non-frozen one')\n \n \n \n setattr(cls,_FIELDS,fields)\n \n \n \n \n \n \n class_hash=cls.__dict__.get('__hash__',MISSING)\n has_explicit_hash=not (class_hash is MISSING or\n (class_hash is None and '__eq__'in cls.__dict__))\n \n \n \n if order and not eq:\n raise ValueError('eq must be true if order is true')\n \n if init:\n \n has_post_init=hasattr(cls,_POST_INIT_NAME)\n \n \n flds=[f for f in fields.values()\n if f._field_type in (_FIELD,_FIELD_INITVAR)]\n _set_new_attribute(cls,'__init__',\n _init_fn(flds,\n frozen,\n has_post_init,\n \n \n \n '__dataclass_self__'if 'self'in fields\n else 'self',\n ))\n \n \n \n field_list=[f for f in fields.values()if f._field_type is _FIELD]\n \n if repr:\n flds=[f for f in field_list if f.repr]\n _set_new_attribute(cls,'__repr__',_repr_fn(flds))\n \n if eq:\n \n \n flds=[f for f in field_list if f.compare]\n self_tuple=_tuple_str('self',flds)\n other_tuple=_tuple_str('other',flds)\n _set_new_attribute(cls,'__eq__',\n _cmp_fn('__eq__','==',\n self_tuple,other_tuple))\n \n if order:\n \n flds=[f for f in field_list if f.compare]\n self_tuple=_tuple_str('self',flds)\n other_tuple=_tuple_str('other',flds)\n for name,op in [('__lt__','<'),\n ('__le__','<='),\n ('__gt__','>'),\n ('__ge__','>='),\n ]:\n if _set_new_attribute(cls,name,\n _cmp_fn(name,op,self_tuple,other_tuple)):\n raise TypeError(f'Cannot overwrite attribute {name} '\n f'in class {cls.__name__}. Consider using '\n 'functools.total_ordering')\n \n if frozen:\n for fn in _frozen_get_del_attr(cls,field_list):\n if _set_new_attribute(cls,fn.__name__,fn):\n raise TypeError(f'Cannot overwrite attribute {fn.__name__} '\n f'in class {cls.__name__}')\n \n \n hash_action=_hash_action[bool(unsafe_hash),\n bool(eq),\n bool(frozen),\n has_explicit_hash]\n if hash_action:\n \n \n cls.__hash__=hash_action(cls,field_list)\n \n if not getattr(cls,'__doc__'):\n \n cls.__doc__=(cls.__name__+\n str(inspect.signature(cls)).replace(' -> None',''))\n \n return cls\n \n \ndef dataclass(cls=None ,/,*,init=True ,repr=True ,eq=True ,order=False ,\nunsafe_hash=False ,frozen=False ):\n ''\n\n\n\n\n\n\n\n\n\n \n \n def wrap(cls):\n return _process_class(cls,init,repr,eq,order,unsafe_hash,frozen)\n \n \n if cls is None :\n \n return wrap\n \n \n return wrap(cls)\n \n \ndef fields(class_or_instance):\n ''\n\n\n\n \n \n \n try :\n fields=getattr(class_or_instance,_FIELDS)\n except AttributeError:\n raise TypeError('must be called with a dataclass type or instance')\n \n \n \n return tuple(f for f in fields.values()if f._field_type is _FIELD)\n \n \ndef _is_dataclass_instance(obj):\n ''\n return hasattr(type(obj),_FIELDS)\n \n \ndef is_dataclass(obj):\n ''\n \n cls=obj if isinstance(obj,type)else type(obj)\n return hasattr(cls,_FIELDS)\n \n \ndef asdict(obj,*,dict_factory=dict):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n if not _is_dataclass_instance(obj):\n raise TypeError(\"asdict() should be called on dataclass instances\")\n return _asdict_inner(obj,dict_factory)\n \n \ndef _asdict_inner(obj,dict_factory):\n if _is_dataclass_instance(obj):\n result=[]\n for f in fields(obj):\n value=_asdict_inner(getattr(obj,f.name),dict_factory)\n result.append((f.name,value))\n return dict_factory(result)\n elif isinstance(obj,tuple)and hasattr(obj,'_fields'):\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n return type(obj)(*[_asdict_inner(v,dict_factory)for v in obj])\n elif isinstance(obj,(list,tuple)):\n \n \n \n return type(obj)(_asdict_inner(v,dict_factory)for v in obj)\n elif isinstance(obj,dict):\n return type(obj)((_asdict_inner(k,dict_factory),\n _asdict_inner(v,dict_factory))\n for k,v in obj.items())\n else :\n return copy.deepcopy(obj)\n \n \ndef astuple(obj,*,tuple_factory=tuple):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n if not _is_dataclass_instance(obj):\n raise TypeError(\"astuple() should be called on dataclass instances\")\n return _astuple_inner(obj,tuple_factory)\n \n \ndef _astuple_inner(obj,tuple_factory):\n if _is_dataclass_instance(obj):\n result=[]\n for f in fields(obj):\n value=_astuple_inner(getattr(obj,f.name),tuple_factory)\n result.append(value)\n return tuple_factory(result)\n elif isinstance(obj,tuple)and hasattr(obj,'_fields'):\n \n \n \n \n \n \n return type(obj)(*[_astuple_inner(v,tuple_factory)for v in obj])\n elif isinstance(obj,(list,tuple)):\n \n \n \n return type(obj)(_astuple_inner(v,tuple_factory)for v in obj)\n elif isinstance(obj,dict):\n return type(obj)((_astuple_inner(k,tuple_factory),_astuple_inner(v,tuple_factory))\n for k,v in obj.items())\n else :\n return copy.deepcopy(obj)\n \n \ndef make_dataclass(cls_name,fields,*,bases=(),namespace=None ,init=True ,\nrepr=True ,eq=True ,order=False ,unsafe_hash=False ,\nfrozen=False ):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n if namespace is None :\n namespace={}\n else :\n \n namespace=namespace.copy()\n \n \n \n seen=set()\n anns={}\n for item in fields:\n if isinstance(item,str):\n name=item\n tp='typing.Any'\n elif len(item)==2:\n name,tp,=item\n elif len(item)==3:\n name,tp,spec=item\n namespace[name]=spec\n else :\n raise TypeError(f'Invalid field: {item!r}')\n \n if not isinstance(name,str)or not name.isidentifier():\n raise TypeError(f'Field names must be valid identifiers: {name!r}')\n if keyword.iskeyword(name):\n raise TypeError(f'Field names must not be keywords: {name!r}')\n if name in seen:\n raise TypeError(f'Field name duplicated: {name!r}')\n \n seen.add(name)\n anns[name]=tp\n \n namespace['__annotations__']=anns\n \n \n cls=types.new_class(cls_name,bases,{},lambda ns:ns.update(namespace))\n return dataclass(cls,init=init,repr=repr,eq=eq,order=order,\n unsafe_hash=unsafe_hash,frozen=frozen)\n \n \ndef replace(*args,**changes):\n ''\n\n\n\n\n\n\n\n\n\n\n\n \n if len(args)>1:\n raise TypeError(f'replace() takes 1 positional argument but {len(args)} were given')\n if args:\n obj,=args\n elif 'obj'in changes:\n obj=changes.pop('obj')\n import warnings\n warnings.warn(\"Passing 'obj' as keyword argument is deprecated\",\n DeprecationWarning,stacklevel=2)\n else :\n raise TypeError(\"replace() missing 1 required positional argument: 'obj'\")\n \n \n \n \n if not _is_dataclass_instance(obj):\n raise TypeError(\"replace() should be called on dataclass instances\")\n \n \n \n \n for f in getattr(obj,_FIELDS).values():\n \n if f._field_type is _FIELD_CLASSVAR:\n continue\n \n if not f.init:\n \n if f.name in changes:\n raise ValueError(f'field {f.name} is declared with '\n 'init=False, it cannot be specified with '\n 'replace()')\n continue\n \n if f.name not in changes:\n if f._field_type is _FIELD_INITVAR:\n raise ValueError(f\"InitVar {f.name!r} \"\n 'must be specified with replace()')\n changes[f.name]=getattr(obj,f.name)\n \n \n \n \n \n \n return obj.__class__(**changes)\nreplace.__text_signature__='(obj, /, **kwargs)'\n", ["_thread", "builtins", "copy", "functools", "inspect", "keyword", "re", "sys", "types", "warnings"]], "datetime": [".py", "''\n\n\n\n\n\nimport time as _time\nimport math as _math\nimport sys\n\ndef _cmp(x,y):\n return 0 if x ==y else 1 if x >y else -1\n \nMINYEAR=1\nMAXYEAR=9999\n_MAXORDINAL=3652059\n\n\n\n\n\n\n\n\n\n\n\n_DAYS_IN_MONTH=[-1,31,28,31,30,31,30,31,31,30,31,30,31]\n\n_DAYS_BEFORE_MONTH=[-1]\ndbm=0\nfor dim in _DAYS_IN_MONTH[1:]:\n _DAYS_BEFORE_MONTH.append(dbm)\n dbm +=dim\ndel dbm,dim\n\ndef _is_leap(year):\n ''\n return year %4 ==0 and (year %100 !=0 or year %400 ==0)\n \ndef _days_before_year(year):\n ''\n y=year -1\n return y *365+y //4 -y //100+y //400\n \ndef _days_in_month(year,month):\n ''\n assert 1 <=month <=12,month\n if month ==2 and _is_leap(year):\n return 29\n return _DAYS_IN_MONTH[month]\n \ndef _days_before_month(year,month):\n ''\n assert 1 <=month <=12,'month must be in 1..12'\n return _DAYS_BEFORE_MONTH[month]+(month >2 and _is_leap(year))\n \ndef _ymd2ord(year,month,day):\n ''\n assert 1 <=month <=12,'month must be in 1..12'\n dim=_days_in_month(year,month)\n assert 1 <=day <=dim,('day must be in 1..%d'%dim)\n return (_days_before_year(year)+\n _days_before_month(year,month)+\n day)\n \n_DI400Y=_days_before_year(401)\n_DI100Y=_days_before_year(101)\n_DI4Y=_days_before_year(5)\n\n\n\nassert _DI4Y ==4 *365+1\n\n\n\nassert _DI400Y ==4 *_DI100Y+1\n\n\n\nassert _DI100Y ==25 *_DI4Y -1\n\ndef _ord2ymd(n):\n ''\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n n -=1\n n400,n=divmod(n,_DI400Y)\n year=n400 *400+1\n \n \n \n \n \n \n n100,n=divmod(n,_DI100Y)\n \n \n n4,n=divmod(n,_DI4Y)\n \n \n \n n1,n=divmod(n,365)\n \n year +=n100 *100+n4 *4+n1\n if n1 ==4 or n100 ==4:\n assert n ==0\n return year -1,12,31\n \n \n \n leapyear=n1 ==3 and (n4 !=24 or n100 ==3)\n assert leapyear ==_is_leap(year)\n month=(n+50)>>5\n preceding=_DAYS_BEFORE_MONTH[month]+(month >2 and leapyear)\n if preceding >n:\n month -=1\n preceding -=_DAYS_IN_MONTH[month]+(month ==2 and leapyear)\n n -=preceding\n assert 0 <=n <_days_in_month(year,month)\n \n \n \n return year,month,n+1\n \n \n_MONTHNAMES=[None ,\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\n\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"]\n_DAYNAMES=[None ,\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\",\"Sun\"]\n\n\ndef _build_struct_time(y,m,d,hh,mm,ss,dstflag):\n wday=(_ymd2ord(y,m,d)+6)%7\n dnum=_days_before_month(y,m)+d\n return _time.struct_time((y,m,d,hh,mm,ss,wday,dnum,dstflag))\n \ndef _format_time(hh,mm,ss,us,timespec='auto'):\n specs={\n 'hours':'{:02d}',\n 'minutes':'{:02d}:{:02d}',\n 'seconds':'{:02d}:{:02d}:{:02d}',\n 'milliseconds':'{:02d}:{:02d}:{:02d}.{:03d}',\n 'microseconds':'{:02d}:{:02d}:{:02d}.{:06d}'\n }\n \n if timespec =='auto':\n \n timespec='microseconds'if us else 'seconds'\n elif timespec =='milliseconds':\n us //=1000\n try :\n fmt=specs[timespec]\n except KeyError:\n raise ValueError('Unknown timespec value')\n else :\n return fmt.format(hh,mm,ss,us)\n \ndef _format_offset(off):\n s=''\n if off is not None :\n if off.days <0:\n sign=\"-\"\n off=-off\n else :\n sign=\"+\"\n hh,mm=divmod(off,timedelta(hours=1))\n mm,ss=divmod(mm,timedelta(minutes=1))\n s +=\"%s%02d:%02d\"%(sign,hh,mm)\n if ss or ss.microseconds:\n s +=\":%02d\"%ss.seconds\n \n if ss.microseconds:\n s +='.%06d'%ss.microseconds\n return s\n \n \ndef _wrap_strftime(object,format,timetuple):\n\n freplace=None\n zreplace=None\n Zreplace=None\n \n \n newformat=[]\n push=newformat.append\n i,n=0,len(format)\n while i =2:\n break\n \n if next_char !=':':\n raise ValueError('Invalid time separator: %c'%next_char)\n \n pos +=1\n \n if pos 0 else tstr\n \n time_comps=_parse_hh_mm_ss_ff(timestr)\n \n tzi=None\n if tz_pos >0:\n tzstr=tstr[tz_pos:]\n \n \n \n \n \n \n if len(tzstr)not in (5,8,15):\n raise ValueError('Malformed time zone string')\n \n tz_comps=_parse_hh_mm_ss_ff(tzstr)\n if all(x ==0 for x in tz_comps):\n tzi=timezone.utc\n else :\n tzsign=-1 if tstr[tz_pos -1]=='-'else 1\n \n td=timedelta(hours=tz_comps[0],minutes=tz_comps[1],\n seconds=tz_comps[2],microseconds=tz_comps[3])\n \n tzi=timezone(tzsign *td)\n \n time_comps.append(tzi)\n \n return time_comps\n \n \n \ndef _check_tzname(name):\n if name is not None and not isinstance(name,str):\n raise TypeError(\"tzinfo.tzname() must return None or string, \"\n \"not '%s'\"%type(name))\n \n \n \n \n \n \n \ndef _check_utc_offset(name,offset):\n assert name in (\"utcoffset\",\"dst\")\n if offset is None :\n return\n if not isinstance(offset,timedelta):\n raise TypeError(\"tzinfo.%s() must return None \"\n \"or timedelta, not '%s'\"%(name,type(offset)))\n if not -timedelta(1)b if b >0 else r 999999999:\n raise OverflowError(\"timedelta # of days is too large: %d\"%d)\n \n self=object.__new__(cls)\n self._days=d\n self._seconds=s\n self._microseconds=us\n self._hashcode=-1\n return self\n \n def __repr__(self):\n args=[]\n if self._days:\n args.append(\"days=%d\"%self._days)\n if self._seconds:\n args.append(\"seconds=%d\"%self._seconds)\n if self._microseconds:\n args.append(\"microseconds=%d\"%self._microseconds)\n if not args:\n args.append('0')\n return \"%s.%s(%s)\"%(self.__class__.__module__,\n self.__class__.__qualname__,\n ', '.join(args))\n \n def __str__(self):\n mm,ss=divmod(self._seconds,60)\n hh,mm=divmod(mm,60)\n s=\"%d:%02d:%02d\"%(hh,mm,ss)\n if self._days:\n def plural(n):\n return n,abs(n)!=1 and \"s\"or \"\"\n s=(\"%d day%s, \"%plural(self._days))+s\n if self._microseconds:\n s=s+\".%06d\"%self._microseconds\n return s\n \n def total_seconds(self):\n ''\n return ((self.days *86400+self.seconds)*10 **6+\n self.microseconds)/10 **6\n \n \n @property\n def days(self):\n ''\n return self._days\n \n @property\n def seconds(self):\n ''\n return self._seconds\n \n @property\n def microseconds(self):\n ''\n return self._microseconds\n \n def __add__(self,other):\n if isinstance(other,timedelta):\n \n \n return timedelta(self._days+other._days,\n self._seconds+other._seconds,\n self._microseconds+other._microseconds)\n return NotImplemented\n \n __radd__=__add__\n \n def __sub__(self,other):\n if isinstance(other,timedelta):\n \n \n return timedelta(self._days -other._days,\n self._seconds -other._seconds,\n self._microseconds -other._microseconds)\n return NotImplemented\n \n def __rsub__(self,other):\n if isinstance(other,timedelta):\n return -self+other\n return NotImplemented\n \n def __neg__(self):\n \n \n return timedelta(-self._days,\n -self._seconds,\n -self._microseconds)\n \n def __pos__(self):\n return self\n \n def __abs__(self):\n if self._days <0:\n return -self\n else :\n return self\n \n def __mul__(self,other):\n if isinstance(other,int):\n \n \n return timedelta(self._days *other,\n self._seconds *other,\n self._microseconds *other)\n if isinstance(other,float):\n usec=self._to_microseconds()\n a,b=other.as_integer_ratio()\n return timedelta(0,0,_divide_and_round(usec *a,b))\n return NotImplemented\n \n __rmul__=__mul__\n \n def _to_microseconds(self):\n return ((self._days *(24 *3600)+self._seconds)*1000000+\n self._microseconds)\n \n def __floordiv__(self,other):\n if not isinstance(other,(int,timedelta)):\n return NotImplemented\n usec=self._to_microseconds()\n if isinstance(other,timedelta):\n return usec //other._to_microseconds()\n if isinstance(other,int):\n return timedelta(0,0,usec //other)\n \n def __truediv__(self,other):\n if not isinstance(other,(int,float,timedelta)):\n return NotImplemented\n usec=self._to_microseconds()\n if isinstance(other,timedelta):\n return usec /other._to_microseconds()\n if isinstance(other,int):\n return timedelta(0,0,_divide_and_round(usec,other))\n if isinstance(other,float):\n a,b=other.as_integer_ratio()\n return timedelta(0,0,_divide_and_round(b *usec,a))\n \n def __mod__(self,other):\n if isinstance(other,timedelta):\n r=self._to_microseconds()%other._to_microseconds()\n return timedelta(0,0,r)\n return NotImplemented\n \n def __divmod__(self,other):\n if isinstance(other,timedelta):\n q,r=divmod(self._to_microseconds(),\n other._to_microseconds())\n return q,timedelta(0,0,r)\n return NotImplemented\n \n \n \n def __eq__(self,other):\n if isinstance(other,timedelta):\n return self._cmp(other)==0\n else :\n return NotImplemented\n \n def __le__(self,other):\n if isinstance(other,timedelta):\n return self._cmp(other)<=0\n else :\n return NotImplemented\n \n def __lt__(self,other):\n if isinstance(other,timedelta):\n return self._cmp(other)<0\n else :\n return NotImplemented\n \n def __ge__(self,other):\n if isinstance(other,timedelta):\n return self._cmp(other)>=0\n else :\n return NotImplemented\n \n def __gt__(self,other):\n if isinstance(other,timedelta):\n return self._cmp(other)>0\n else :\n return NotImplemented\n \n def _cmp(self,other):\n assert isinstance(other,timedelta)\n return _cmp(self._getstate(),other._getstate())\n \n def __hash__(self):\n if self._hashcode ==-1:\n self._hashcode=hash(self._getstate())\n return self._hashcode\n \n def __bool__(self):\n return (self._days !=0 or\n self._seconds !=0 or\n self._microseconds !=0)\n \n \n \n def _getstate(self):\n return (self._days,self._seconds,self._microseconds)\n \n def __reduce__(self):\n return (self.__class__,self._getstate())\n \ntimedelta.min=timedelta(-999999999)\ntimedelta.max=timedelta(days=999999999,hours=23,minutes=59,seconds=59,\nmicroseconds=999999)\ntimedelta.resolution=timedelta(microseconds=1)\n\nclass date:\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n __slots__='_year','_month','_day','_hashcode'\n \n def __new__(cls,year,month=None ,day=None ):\n ''\n\n\n\n\n \n if (month is None and\n isinstance(year,(bytes,str))and len(year)==4 and\n 1 <=ord(year[2:3])<=12):\n \n if isinstance(year,str):\n try :\n year=year.encode('latin1')\n except UnicodeEncodeError:\n \n raise ValueError(\n \"Failed to encode latin1 string when unpickling \"\n \"a date object. \"\n \"pickle.load(data, encoding='latin1') is assumed.\")\n self=object.__new__(cls)\n self.__setstate(year)\n self._hashcode=-1\n return self\n year,month,day=_check_date_fields(year,month,day)\n self=object.__new__(cls)\n self._year=year\n self._month=month\n self._day=day\n self._hashcode=-1\n return self\n \n \n \n @classmethod\n def fromtimestamp(cls,t):\n ''\n y,m,d,hh,mm,ss,weekday,jday,dst=_time.localtime(t)\n return cls(y,m,d)\n \n @classmethod\n def today(cls):\n ''\n t=_time.time()\n return cls.fromtimestamp(t)\n \n @classmethod\n def fromordinal(cls,n):\n ''\n\n\n\n \n y,m,d=_ord2ymd(n)\n return cls(y,m,d)\n \n @classmethod\n def fromisoformat(cls,date_string):\n ''\n if not isinstance(date_string,str):\n raise TypeError('fromisoformat: argument must be str')\n \n try :\n assert len(date_string)==10\n return cls(*_parse_isoformat_date(date_string))\n except Exception:\n raise ValueError(f'Invalid isoformat string: {date_string!r}')\n \n @classmethod\n def fromisocalendar(cls,year,week,day):\n ''\n\n \n \n if not MINYEAR <=year <=MAXYEAR:\n raise ValueError(f\"Year is out of range: {year}\")\n \n if not 0 =0\n return NotImplemented\n \n def __gt__(self,other):\n if isinstance(other,date):\n return self._cmp(other)>0\n return NotImplemented\n \n def _cmp(self,other):\n assert isinstance(other,date)\n y,m,d=self._year,self._month,self._day\n y2,m2,d2=other._year,other._month,other._day\n return _cmp((y,m,d),(y2,m2,d2))\n \n def __hash__(self):\n ''\n if self._hashcode ==-1:\n self._hashcode=hash(self._getstate())\n return self._hashcode\n \n \n \n def __add__(self,other):\n ''\n if isinstance(other,timedelta):\n o=self.toordinal()+other.days\n if 0 =52:\n if today >=_isoweek1monday(year+1):\n year +=1\n week=0\n return year,week+1,day+1\n \n \n \n def _getstate(self):\n yhi,ylo=divmod(self._year,256)\n return bytes([yhi,ylo,self._month,self._day]),\n \n def __setstate(self,string):\n yhi,ylo,self._month,self._day=string\n self._year=yhi *256+ylo\n \n def __reduce__(self):\n return (self.__class__,self._getstate())\n \n_date_class=date\n\ndate.min=date(1,1,1)\ndate.max=date(9999,12,31)\ndate.resolution=timedelta(days=1)\n\n\nclass tzinfo:\n ''\n\n\n \n __slots__=()\n \n def tzname(self,dt):\n ''\n raise NotImplementedError(\"tzinfo subclass must override tzname()\")\n \n def utcoffset(self,dt):\n ''\n raise NotImplementedError(\"tzinfo subclass must override utcoffset()\")\n \n def dst(self,dt):\n ''\n\n\n\n \n raise NotImplementedError(\"tzinfo subclass must override dst()\")\n \n def fromutc(self,dt):\n ''\n \n if not isinstance(dt,datetime):\n raise TypeError(\"fromutc() requires a datetime argument\")\n if dt.tzinfo is not self:\n raise ValueError(\"dt.tzinfo is not self\")\n \n dtoff=dt.utcoffset()\n if dtoff is None :\n raise ValueError(\"fromutc() requires a non-None utcoffset() \"\n \"result\")\n \n \n \n dtdst=dt.dst()\n if dtdst is None :\n raise ValueError(\"fromutc() requires a non-None dst() result\")\n delta=dtoff -dtdst\n if delta:\n dt +=delta\n dtdst=dt.dst()\n if dtdst is None :\n raise ValueError(\"fromutc(): dt.dst gave inconsistent \"\n \"results; cannot convert\")\n return dt+dtdst\n \n \n \n def __reduce__(self):\n getinitargs=getattr(self,\"__getinitargs__\",None )\n if getinitargs:\n args=getinitargs()\n else :\n args=()\n getstate=getattr(self,\"__getstate__\",None )\n if getstate:\n state=getstate()\n else :\n state=getattr(self,\"__dict__\",None )or None\n if state is None :\n return (self.__class__,args)\n else :\n return (self.__class__,args,state)\n \n_tzinfo_class=tzinfo\n\nclass time:\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n __slots__='_hour','_minute','_second','_microsecond','_tzinfo','_hashcode','_fold'\n \n def __new__(cls,hour=0,minute=0,second=0,microsecond=0,tzinfo=None ,*,fold=0):\n ''\n\n\n\n\n\n\n\n \n if (isinstance(hour,(bytes,str))and len(hour)==6 and\n ord(hour[0:1])&0x7F <24):\n \n if isinstance(hour,str):\n try :\n hour=hour.encode('latin1')\n except UnicodeEncodeError:\n \n raise ValueError(\n \"Failed to encode latin1 string when unpickling \"\n \"a time object. \"\n \"pickle.load(data, encoding='latin1') is assumed.\")\n self=object.__new__(cls)\n self.__setstate(hour,minute or None )\n self._hashcode=-1\n return self\n hour,minute,second,microsecond,fold=_check_time_fields(\n hour,minute,second,microsecond,fold)\n _check_tzinfo_arg(tzinfo)\n self=object.__new__(cls)\n self._hour=hour\n self._minute=minute\n self._second=second\n self._microsecond=microsecond\n self._tzinfo=tzinfo\n self._hashcode=-1\n self._fold=fold\n return self\n \n \n @property\n def hour(self):\n ''\n return self._hour\n \n @property\n def minute(self):\n ''\n return self._minute\n \n @property\n def second(self):\n ''\n return self._second\n \n @property\n def microsecond(self):\n ''\n return self._microsecond\n \n @property\n def tzinfo(self):\n ''\n return self._tzinfo\n \n @property\n def fold(self):\n return self._fold\n \n \n \n \n \n def __eq__(self,other):\n if isinstance(other,time):\n return self._cmp(other,allow_mixed=True )==0\n else :\n return NotImplemented\n \n def __le__(self,other):\n if isinstance(other,time):\n return self._cmp(other)<=0\n else :\n return NotImplemented\n \n def __lt__(self,other):\n if isinstance(other,time):\n return self._cmp(other)<0\n else :\n return NotImplemented\n \n def __ge__(self,other):\n if isinstance(other,time):\n return self._cmp(other)>=0\n else :\n return NotImplemented\n \n def __gt__(self,other):\n if isinstance(other,time):\n return self._cmp(other)>0\n else :\n return NotImplemented\n \n def _cmp(self,other,allow_mixed=False ):\n assert isinstance(other,time)\n mytz=self._tzinfo\n ottz=other._tzinfo\n myoff=otoff=None\n \n if mytz is ottz:\n base_compare=True\n else :\n myoff=self.utcoffset()\n otoff=other.utcoffset()\n base_compare=myoff ==otoff\n \n if base_compare:\n return _cmp((self._hour,self._minute,self._second,\n self._microsecond),\n (other._hour,other._minute,other._second,\n other._microsecond))\n if myoff is None or otoff is None :\n if allow_mixed:\n return 2\n else :\n raise TypeError(\"cannot compare naive and aware times\")\n myhhmm=self._hour *60+self._minute -myoff //timedelta(minutes=1)\n othhmm=other._hour *60+other._minute -otoff //timedelta(minutes=1)\n return _cmp((myhhmm,self._second,self._microsecond),\n (othhmm,other._second,other._microsecond))\n \n def __hash__(self):\n ''\n if self._hashcode ==-1:\n if self.fold:\n t=self.replace(fold=0)\n else :\n t=self\n tzoff=t.utcoffset()\n if not tzoff:\n self._hashcode=hash(t._getstate()[0])\n else :\n h,m=divmod(timedelta(hours=self.hour,minutes=self.minute)-tzoff,\n timedelta(hours=1))\n assert not m %timedelta(minutes=1),\"whole minute\"\n m //=timedelta(minutes=1)\n if 0 <=h <24:\n self._hashcode=hash(time(h,m,self.second,self.microsecond))\n else :\n self._hashcode=hash((h,m,self.second,self.microsecond))\n return self._hashcode\n \n \n \n def _tzstr(self):\n ''\n off=self.utcoffset()\n return _format_offset(off)\n \n def __repr__(self):\n ''\n if self._microsecond !=0:\n s=\", %d, %d\"%(self._second,self._microsecond)\n elif self._second !=0:\n s=\", %d\"%self._second\n else :\n s=\"\"\n s=\"%s.%s(%d, %d%s)\"%(self.__class__.__module__,\n self.__class__.__qualname__,\n self._hour,self._minute,s)\n if self._tzinfo is not None :\n assert s[-1:]==\")\"\n s=s[:-1]+\", tzinfo=%r\"%self._tzinfo+\")\"\n if self._fold:\n assert s[-1:]==\")\"\n s=s[:-1]+\", fold=1)\"\n return s\n \n def isoformat(self,timespec='auto'):\n ''\n\n\n\n\n\n\n \n s=_format_time(self._hour,self._minute,self._second,\n self._microsecond,timespec)\n tz=self._tzstr()\n if tz:\n s +=tz\n return s\n \n __str__=isoformat\n \n @classmethod\n def fromisoformat(cls,time_string):\n ''\n if not isinstance(time_string,str):\n raise TypeError('fromisoformat: argument must be str')\n \n try :\n return cls(*_parse_isoformat_time(time_string))\n except Exception:\n raise ValueError(f'Invalid isoformat string: {time_string!r}')\n \n \n def strftime(self,fmt):\n ''\n\n \n \n \n timetuple=(1900,1,1,\n self._hour,self._minute,self._second,\n 0,1,-1)\n return _wrap_strftime(self,fmt,timetuple)\n \n def __format__(self,fmt):\n if not isinstance(fmt,str):\n raise TypeError(\"must be str, not %s\"%type(fmt).__name__)\n if len(fmt)!=0:\n return self.strftime(fmt)\n return str(self)\n \n \n \n def utcoffset(self):\n ''\n \n if self._tzinfo is None :\n return None\n offset=self._tzinfo.utcoffset(None )\n _check_utc_offset(\"utcoffset\",offset)\n return offset\n \n def tzname(self):\n ''\n\n\n\n\n \n if self._tzinfo is None :\n return None\n name=self._tzinfo.tzname(None )\n _check_tzname(name)\n return name\n \n def dst(self):\n ''\n\n\n\n\n\n\n \n if self._tzinfo is None :\n return None\n offset=self._tzinfo.dst(None )\n _check_utc_offset(\"dst\",offset)\n return offset\n \n def replace(self,hour=None ,minute=None ,second=None ,microsecond=None ,\n tzinfo=True ,*,fold=None ):\n ''\n if hour is None :\n hour=self.hour\n if minute is None :\n minute=self.minute\n if second is None :\n second=self.second\n if microsecond is None :\n microsecond=self.microsecond\n if tzinfo is True :\n tzinfo=self.tzinfo\n if fold is None :\n fold=self._fold\n return type(self)(hour,minute,second,microsecond,tzinfo,fold=fold)\n \n \n \n def _getstate(self,protocol=3):\n us2,us3=divmod(self._microsecond,256)\n us1,us2=divmod(us2,256)\n h=self._hour\n if self._fold and protocol >3:\n h +=128\n basestate=bytes([h,self._minute,self._second,\n us1,us2,us3])\n if self._tzinfo is None :\n return (basestate,)\n else :\n return (basestate,self._tzinfo)\n \n def __setstate(self,string,tzinfo):\n if tzinfo is not None and not isinstance(tzinfo,_tzinfo_class):\n raise TypeError(\"bad tzinfo state arg\")\n h,self._minute,self._second,us1,us2,us3=string\n if h >127:\n self._fold=1\n self._hour=h -128\n else :\n self._fold=0\n self._hour=h\n self._microsecond=(((us1 <<8)|us2)<<8)|us3\n self._tzinfo=tzinfo\n \n def __reduce_ex__(self,protocol):\n return (time,self._getstate(protocol))\n \n def __reduce__(self):\n return self.__reduce_ex__(2)\n \n_time_class=time\n\ntime.min=time(0,0,0)\ntime.max=time(23,59,59,999999)\ntime.resolution=timedelta(microseconds=1)\n\nclass datetime(date):\n ''\n\n\n\n \n __slots__=date.__slots__+time.__slots__\n \n def __new__(cls,year,month=None ,day=None ,hour=0,minute=0,second=0,\n microsecond=0,tzinfo=None ,*,fold=0):\n if (isinstance(year,(bytes,str))and len(year)==10 and\n 1 <=ord(year[2:3])&0x7F <=12):\n \n if isinstance(year,str):\n try :\n year=bytes(year,'latin1')\n except UnicodeEncodeError:\n \n raise ValueError(\n \"Failed to encode latin1 string when unpickling \"\n \"a datetime object. \"\n \"pickle.load(data, encoding='latin1') is assumed.\")\n self=object.__new__(cls)\n self.__setstate(year,month)\n self._hashcode=-1\n return self\n year,month,day=_check_date_fields(year,month,day)\n hour,minute,second,microsecond,fold=_check_time_fields(\n hour,minute,second,microsecond,fold)\n _check_tzinfo_arg(tzinfo)\n self=object.__new__(cls)\n self._year=year\n self._month=month\n self._day=day\n self._hour=hour\n self._minute=minute\n self._second=second\n self._microsecond=microsecond\n self._tzinfo=tzinfo\n self._hashcode=-1\n self._fold=fold\n return self\n \n \n @property\n def hour(self):\n ''\n return self._hour\n \n @property\n def minute(self):\n ''\n return self._minute\n \n @property\n def second(self):\n ''\n return self._second\n \n @property\n def microsecond(self):\n ''\n return self._microsecond\n \n @property\n def tzinfo(self):\n ''\n return self._tzinfo\n \n @property\n def fold(self):\n return self._fold\n \n @classmethod\n def _fromtimestamp(cls,t,utc,tz):\n ''\n\n\n \n frac,t=_math.modf(t)\n us=round(frac *1e6)\n if us >=1000000:\n t +=1\n us -=1000000\n elif us <0:\n t -=1\n us +=1000000\n \n converter=_time.gmtime if utc else _time.localtime\n y,m,d,hh,mm,ss,weekday,jday,dst=converter(t)\n ss=min(ss,59)\n result=cls(y,m,d,hh,mm,ss,us,tz)\n if tz is None :\n \n \n \n max_fold_seconds=24 *3600\n \n \n \n \n \n if t =0\n elif not isinstance(other,date):\n return NotImplemented\n else :\n _cmperror(self,other)\n \n def __gt__(self,other):\n if isinstance(other,datetime):\n return self._cmp(other)>0\n elif not isinstance(other,date):\n return NotImplemented\n else :\n _cmperror(self,other)\n \n def _cmp(self,other,allow_mixed=False ):\n assert isinstance(other,datetime)\n mytz=self._tzinfo\n ottz=other._tzinfo\n myoff=otoff=None\n \n if mytz is ottz:\n base_compare=True\n else :\n myoff=self.utcoffset()\n otoff=other.utcoffset()\n \n if allow_mixed:\n if myoff !=self.replace(fold=not self.fold).utcoffset():\n return 2\n if otoff !=other.replace(fold=not other.fold).utcoffset():\n return 2\n base_compare=myoff ==otoff\n \n if base_compare:\n return _cmp((self._year,self._month,self._day,\n self._hour,self._minute,self._second,\n self._microsecond),\n (other._year,other._month,other._day,\n other._hour,other._minute,other._second,\n other._microsecond))\n if myoff is None or otoff is None :\n if allow_mixed:\n return 2\n else :\n raise TypeError(\"cannot compare naive and aware datetimes\")\n \n diff=self -other\n if diff.days <0:\n return -1\n return diff and 1 or 0\n \n def __add__(self,other):\n ''\n if not isinstance(other,timedelta):\n return NotImplemented\n delta=timedelta(self.toordinal(),\n hours=self._hour,\n minutes=self._minute,\n seconds=self._second,\n microseconds=self._microsecond)\n delta +=other\n hour,rem=divmod(delta.seconds,3600)\n minute,second=divmod(rem,60)\n if 0 3:\n m +=128\n basestate=bytes([yhi,ylo,m,self._day,\n self._hour,self._minute,self._second,\n us1,us2,us3])\n if self._tzinfo is None :\n return (basestate,)\n else :\n return (basestate,self._tzinfo)\n \n def __setstate(self,string,tzinfo):\n if tzinfo is not None and not isinstance(tzinfo,_tzinfo_class):\n raise TypeError(\"bad tzinfo state arg\")\n (yhi,ylo,m,self._day,self._hour,\n self._minute,self._second,us1,us2,us3)=string\n if m >127:\n self._fold=1\n self._month=m -128\n else :\n self._fold=0\n self._month=m\n self._year=yhi *256+ylo\n self._microsecond=(((us1 <<8)|us2)<<8)|us3\n self._tzinfo=tzinfo\n \n def __reduce_ex__(self,protocol):\n return (self.__class__,self._getstate(protocol))\n \n def __reduce__(self):\n return self.__reduce_ex__(2)\n \n \ndatetime.min=datetime(1,1,1)\ndatetime.max=datetime(9999,12,31,23,59,59,999999)\ndatetime.resolution=timedelta(microseconds=1)\n\n\ndef _isoweek1monday(year):\n\n\n THURSDAY=3\n firstday=_ymd2ord(year,1,1)\n firstweekday=(firstday+6)%7\n week1monday=firstday -firstweekday\n if firstweekday >THURSDAY:\n week1monday +=7\n return week1monday\n \n \nclass timezone(tzinfo):\n __slots__='_offset','_name'\n \n \n _Omitted=object()\n def __new__(cls,offset,name=_Omitted):\n if not isinstance(offset,timedelta):\n raise TypeError(\"offset must be a timedelta\")\n if name is cls._Omitted:\n if not offset:\n return cls.utc\n name=None\n elif not isinstance(name,str):\n raise TypeError(\"name must be a string\")\n if not cls._minoffset <=offset <=cls._maxoffset:\n raise ValueError(\"offset must be a timedelta \"\n \"strictly between -timedelta(hours=24) and \"\n \"timedelta(hours=24).\")\n return cls._create(offset,name)\n \n @classmethod\n def _create(cls,offset,name=None ):\n self=tzinfo.__new__(cls)\n self._offset=offset\n self._name=name\n return self\n \n def __getinitargs__(self):\n ''\n if self._name is None :\n return (self._offset,)\n return (self._offset,self._name)\n \n def __eq__(self,other):\n if isinstance(other,timezone):\n return self._offset ==other._offset\n return NotImplemented\n \n def __hash__(self):\n return hash(self._offset)\n \n def __repr__(self):\n ''\n\n\n\n\n\n\n\n \n if self is self.utc:\n return 'datetime.timezone.utc'\n if self._name is None :\n return \"%s.%s(%r)\"%(self.__class__.__module__,\n self.__class__.__qualname__,\n self._offset)\n return \"%s.%s(%r, %r)\"%(self.__class__.__module__,\n self.__class__.__qualname__,\n self._offset,self._name)\n \n def __str__(self):\n return self.tzname(None )\n \n def utcoffset(self,dt):\n if isinstance(dt,datetime)or dt is None :\n return self._offset\n raise TypeError(\"utcoffset() argument must be a datetime instance\"\n \" or None\")\n \n def tzname(self,dt):\n if isinstance(dt,datetime)or dt is None :\n if self._name is None :\n return self._name_from_offset(self._offset)\n return self._name\n raise TypeError(\"tzname() argument must be a datetime instance\"\n \" or None\")\n \n def dst(self,dt):\n if isinstance(dt,datetime)or dt is None :\n return None\n raise TypeError(\"dst() argument must be a datetime instance\"\n \" or None\")\n \n def fromutc(self,dt):\n if isinstance(dt,datetime):\n if dt.tzinfo is not self:\n raise ValueError(\"fromutc: dt.tzinfo \"\n \"is not self\")\n return dt+self._offset\n raise TypeError(\"fromutc() argument must be a datetime instance\"\n \" or None\")\n \n _maxoffset=timedelta(hours=24,microseconds=-1)\n _minoffset=-_maxoffset\n \n @staticmethod\n def _name_from_offset(delta):\n if not delta:\n return 'UTC'\n if delta
[\"\\']).*?(?P=quote)(?:$|\\n)',\n r'(?:^|\\n)(?P[\"\\']).*?(?P=quote)(?:$|\\n)'):\n regexp=re.compile(restr,re.DOTALL |re.MULTILINE)\n matches=regexp.findall(data)\n if matches:\n break\n \n if not matches:\n \n return ('',False ,None ,0)\n quotes={}\n delims={}\n spaces=0\n groupindex=regexp.groupindex\n for m in matches:\n n=groupindex['quote']-1\n key=m[n]\n if key:\n quotes[key]=quotes.get(key,0)+1\n try :\n n=groupindex['delim']-1\n key=m[n]\n except KeyError:\n continue\n if key and (delimiters is None or key in delimiters):\n delims[key]=delims.get(key,0)+1\n try :\n n=groupindex['space']-1\n except KeyError:\n continue\n if m[n]:\n spaces +=1\n \n quotechar=max(quotes,key=quotes.get)\n \n if delims:\n delim=max(delims,key=delims.get)\n skipinitialspace=delims[delim]==spaces\n if delim =='\\n':\n delim=''\n else :\n \n delim=''\n skipinitialspace=0\n \n \n \n dq_regexp=re.compile(\n r\"((%(delim)s)|^)\\W*%(quote)s[^%(delim)s\\n]*%(quote)s[^%(delim)s\\n]*%(quote)s\\W*((%(delim)s)|$)\"%\\\n {'delim':re.escape(delim),'quote':quotechar},re.MULTILINE)\n \n \n \n if dq_regexp.search(data):\n doublequote=True\n else :\n doublequote=False\n \n return (quotechar,doublequote,delim,skipinitialspace)\n \n \n def _guess_delimiter(self,data,delimiters):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n data=list(filter(None ,data.split('\\n')))\n \n ascii=[chr(c)for c in range(127)]\n \n \n chunkLength=min(10,len(data))\n iteration=0\n charFrequency={}\n modes={}\n delims={}\n start,end=0,chunkLength\n while start 1:\n modes[char]=max(items,key=lambda x:x[1])\n \n \n items.remove(modes[char])\n modes[char]=(modes[char][0],modes[char][1]\n -sum(item[1]for item in items))\n else :\n modes[char]=items[0]\n \n \n modeList=modes.items()\n total=float(min(chunkLength *iteration,len(data)))\n \n consistency=1.0\n \n threshold=0.9\n while len(delims)==0 and consistency >=threshold:\n for k,v in modeList:\n if v[0]>0 and v[1]>0:\n if ((v[1]/total)>=consistency and\n (delimiters is None or k in delimiters)):\n delims[k]=v\n consistency -=0.01\n \n if len(delims)==1:\n delim=list(delims.keys())[0]\n skipinitialspace=(data[0].count(delim)==\n data[0].count(\"%c \"%delim))\n return (delim,skipinitialspace)\n \n \n start=end\n end +=chunkLength\n \n if not delims:\n return ('',0)\n \n \n if len(delims)>1:\n for d in self.preferred:\n if d in delims.keys():\n skipinitialspace=(data[0].count(d)==\n data[0].count(\"%c \"%d))\n return (d,skipinitialspace)\n \n \n \n items=[(v,k)for (k,v)in delims.items()]\n items.sort()\n delim=items[-1][1]\n \n skipinitialspace=(data[0].count(delim)==\n data[0].count(\"%c \"%delim))\n return (delim,skipinitialspace)\n \n \n def has_header(self,sample):\n \n \n \n \n \n \n \n \n \n rdr=reader(StringIO(sample),self.sniff(sample))\n \n header=next(rdr)\n \n columns=len(header)\n columnTypes={}\n for i in range(columns):columnTypes[i]=None\n \n checked=0\n for row in rdr:\n \n if checked >20:\n break\n checked +=1\n \n if len(row)!=columns:\n continue\n \n for col in list(columnTypes.keys()):\n \n for thisType in [int,float,complex]:\n try :\n thisType(row[col])\n break\n except (ValueError,OverflowError):\n pass\n else :\n \n thisType=len(row[col])\n \n if thisType !=columnTypes[col]:\n if columnTypes[col]is None :\n columnTypes[col]=thisType\n else :\n \n \n del columnTypes[col]\n \n \n \n hasHeader=0\n for col,colType in columnTypes.items():\n if type(colType)==type(0):\n if len(header[col])!=colType:\n hasHeader +=1\n else :\n hasHeader -=1\n else :\n try :\n colType(header[col])\n except (ValueError,TypeError):\n hasHeader +=1\n else :\n hasHeader -=1\n \n return hasHeader >0\n", ["_csv", "io", "re"]], "dataclasses": [".py", "import re\nimport sys\nimport copy\nimport types\nimport inspect\nimport keyword\nimport builtins\nimport functools\nimport _thread\n\n\n__all__=['dataclass',\n'field',\n'Field',\n'FrozenInstanceError',\n'InitVar',\n'MISSING',\n\n\n'fields',\n'asdict',\n'astuple',\n'make_dataclass',\n'replace',\n'is_dataclass',\n]\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nclass FrozenInstanceError(AttributeError):pass\n\n\n\n\nclass _HAS_DEFAULT_FACTORY_CLASS:\n def __repr__(self):\n return ''\n_HAS_DEFAULT_FACTORY=_HAS_DEFAULT_FACTORY_CLASS()\n\n\n\nclass _MISSING_TYPE:\n pass\nMISSING=_MISSING_TYPE()\n\n\n\n_EMPTY_METADATA=types.MappingProxyType({})\n\n\nclass _FIELD_BASE:\n def __init__(self,name):\n self.name=name\n def __repr__(self):\n return self.name\n_FIELD=_FIELD_BASE('_FIELD')\n_FIELD_CLASSVAR=_FIELD_BASE('_FIELD_CLASSVAR')\n_FIELD_INITVAR=_FIELD_BASE('_FIELD_INITVAR')\n\n\n\n_FIELDS='__dataclass_fields__'\n\n\n\n_PARAMS='__dataclass_params__'\n\n\n\n_POST_INIT_NAME='__post_init__'\n\n\n\n\n_MODULE_IDENTIFIER_RE=re.compile(r'^(?:\\s*(\\w+)\\s*\\.)?\\s*(\\w+)')\n\nclass _InitVarMeta(type):\n def __getitem__(self,params):\n return InitVar(params)\n \nclass InitVar(metaclass=_InitVarMeta):\n __slots__=('type',)\n \n def __init__(self,type):\n self.type=type\n \n def __repr__(self):\n return f'dataclasses.InitVar[{self.type.__name__}]'\n \n \n \n \n \n \n \n \n \n \n \n \nclass Field:\n __slots__=('name',\n 'type',\n 'default',\n 'default_factory',\n 'repr',\n 'hash',\n 'init',\n 'compare',\n 'metadata',\n '_field_type',\n )\n \n def __init__(self,default,default_factory,init,repr,hash,compare,\n metadata):\n self.name=None\n self.type=None\n self.default=default\n self.default_factory=default_factory\n self.init=init\n self.repr=repr\n self.hash=hash\n self.compare=compare\n self.metadata=(_EMPTY_METADATA\n if metadata is None else\n types.MappingProxyType(metadata))\n self._field_type=None\n \n def __repr__(self):\n return ('Field('\n f'name={self.name!r},'\n f'type={self.type!r},'\n f'default={self.default!r},'\n f'default_factory={self.default_factory!r},'\n f'init={self.init!r},'\n f'repr={self.repr!r},'\n f'hash={self.hash!r},'\n f'compare={self.compare!r},'\n f'metadata={self.metadata!r},'\n f'_field_type={self._field_type}'\n ')')\n \n \n \n \n \n \n \n \n \n def __set_name__(self,owner,name):\n func=getattr(type(self.default),'__set_name__',None )\n if func:\n \n \n func(self.default,owner,name)\n \n \nclass _DataclassParams:\n __slots__=('init',\n 'repr',\n 'eq',\n 'order',\n 'unsafe_hash',\n 'frozen',\n )\n \n def __init__(self,init,repr,eq,order,unsafe_hash,frozen):\n self.init=init\n self.repr=repr\n self.eq=eq\n self.order=order\n self.unsafe_hash=unsafe_hash\n self.frozen=frozen\n \n def __repr__(self):\n return ('_DataclassParams('\n f'init={self.init!r},'\n f'repr={self.repr!r},'\n f'eq={self.eq!r},'\n f'order={self.order!r},'\n f'unsafe_hash={self.unsafe_hash!r},'\n f'frozen={self.frozen!r}'\n ')')\n \n \n \n \n \ndef field(*,default=MISSING,default_factory=MISSING,init=True ,repr=True ,\nhash=None ,compare=True ,metadata=None ):\n ''\n\n\n\n\n\n\n\n\n\n\n\n \n \n if default is not MISSING and default_factory is not MISSING:\n raise ValueError('cannot specify both default and default_factory')\n return Field(default,default_factory,init,repr,hash,compare,\n metadata)\n \n \ndef _tuple_str(obj_name,fields):\n\n\n\n\n\n if not fields:\n return '()'\n \n return f'({\",\".join([f\"{obj_name}.{f.name}\" for f in fields])},)'\n \n \n \n \ndef _recursive_repr(user_function):\n\n\n repr_running=set()\n \n @functools.wraps(user_function)\n def wrapper(self):\n key=id(self),_thread.get_ident()\n if key in repr_running:\n return '...'\n repr_running.add(key)\n try :\n result=user_function(self)\n finally :\n repr_running.discard(key)\n return result\n return wrapper\n \n \ndef _create_fn(name,args,body,*,globals=None ,locals=None ,\nreturn_type=MISSING):\n\n\n\n if locals is None :\n locals={}\n \n \n \n if globals is not None and '__builtins__'not in globals:\n globals['__builtins__']=builtins\n return_annotation=''\n if return_type is not MISSING:\n locals['_return_type']=return_type\n return_annotation='->_return_type'\n args=','.join(args)\n body='\\n'.join(f' {b}'for b in body)\n \n \n txt=f'def {name}({args}){return_annotation}:\\n{body}'\n \n exec(txt,globals,locals)\n return locals[name]\n \n \ndef _field_assign(frozen,name,value,self_name):\n\n\n\n\n\n\n if frozen:\n return f'__builtins__.object.__setattr__({self_name},{name!r},{value})'\n return f'{self_name}.{name}={value}'\n \n \ndef _field_init(f,frozen,globals,self_name):\n\n\n\n default_name=f'_dflt_{f.name}'\n if f.default_factory is not MISSING:\n if f.init:\n \n \n globals[default_name]=f.default_factory\n value=(f'{default_name}() '\n f'if {f.name} is _HAS_DEFAULT_FACTORY '\n f'else {f.name}')\n else :\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n globals[default_name]=f.default_factory\n value=f'{default_name}()'\n else :\n \n if f.init:\n if f.default is MISSING:\n \n value=f.name\n elif f.default is not MISSING:\n globals[default_name]=f.default\n value=f.name\n else :\n \n \n return None\n \n \n \n \n if f._field_type is _FIELD_INITVAR:\n return None\n \n \n return _field_assign(frozen,f.name,value,self_name)\n \n \ndef _init_param(f):\n\n\n\n\n if f.default is MISSING and f.default_factory is MISSING:\n \n \n default=''\n elif f.default is not MISSING:\n \n \n default=f'=_dflt_{f.name}'\n elif f.default_factory is not MISSING:\n \n default='=_HAS_DEFAULT_FACTORY'\n return f'{f.name}:_type_{f.name}{default}'\n \n \ndef _init_fn(fields,frozen,has_post_init,self_name):\n\n\n\n\n\n\n\n seen_default=False\n for f in fields:\n \n if f.init:\n if not (f.default is MISSING and f.default_factory is MISSING):\n seen_default=True\n elif seen_default:\n raise TypeError(f'non-default argument {f.name!r} '\n 'follows default argument')\n \n globals={'MISSING':MISSING,\n '_HAS_DEFAULT_FACTORY':_HAS_DEFAULT_FACTORY}\n \n body_lines=[]\n for f in fields:\n line=_field_init(f,frozen,globals,self_name)\n \n \n if line:\n body_lines.append(line)\n \n \n if has_post_init:\n params_str=','.join(f.name for f in fields\n if f._field_type is _FIELD_INITVAR)\n body_lines.append(f'{self_name}.{_POST_INIT_NAME}({params_str})')\n \n \n if not body_lines:\n body_lines=['pass']\n \n locals={f'_type_{f.name}':f.type for f in fields}\n return _create_fn('__init__',\n [self_name]+[_init_param(f)for f in fields if f.init],\n body_lines,\n locals=locals,\n globals=globals,\n return_type=None )\n \n \ndef _repr_fn(fields):\n fn=_create_fn('__repr__',\n ('self',),\n ['return self.__class__.__qualname__ + f\"('+\n ', '.join([f\"{f.name}={{self.{f.name}!r}}\"\n for f in fields])+\n ')\"'])\n return _recursive_repr(fn)\n \n \ndef _frozen_get_del_attr(cls,fields):\n\n\n globals={'cls':cls,\n 'FrozenInstanceError':FrozenInstanceError}\n if fields:\n fields_str='('+','.join(repr(f.name)for f in fields)+',)'\n else :\n \n fields_str='()'\n return (_create_fn('__setattr__',\n ('self','name','value'),\n (f'if type(self) is cls or name in {fields_str}:',\n ' raise FrozenInstanceError(f\"cannot assign to field {name!r}\")',\n f'super(cls, self).__setattr__(name, value)'),\n globals=globals),\n _create_fn('__delattr__',\n ('self','name'),\n (f'if type(self) is cls or name in {fields_str}:',\n ' raise FrozenInstanceError(f\"cannot delete field {name!r}\")',\n f'super(cls, self).__delattr__(name)'),\n globals=globals),\n )\n \n \ndef _cmp_fn(name,op,self_tuple,other_tuple):\n\n\n\n\n\n return _create_fn(name,\n ('self','other'),\n ['if other.__class__ is self.__class__:',\n f' return {self_tuple}{op}{other_tuple}',\n 'return NotImplemented'])\n \n \ndef _hash_fn(fields):\n self_tuple=_tuple_str('self',fields)\n return _create_fn('__hash__',\n ('self',),\n [f'return hash({self_tuple})'])\n \n \ndef _is_classvar(a_type,typing):\n\n\n return (a_type is typing.ClassVar\n or (type(a_type)is typing._GenericAlias\n and a_type.__origin__ is typing.ClassVar))\n \n \ndef _is_initvar(a_type,dataclasses):\n\n\n return (a_type is dataclasses.InitVar\n or type(a_type)is dataclasses.InitVar)\n \n \ndef _is_type(annotation,cls,a_module,a_type,is_type_predicate):\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n match=_MODULE_IDENTIFIER_RE.match(annotation)\n if match:\n ns=None\n module_name=match.group(1)\n if not module_name:\n \n \n ns=sys.modules.get(cls.__module__).__dict__\n else :\n \n module=sys.modules.get(cls.__module__)\n if module and module.__dict__.get(module_name)is a_module:\n ns=sys.modules.get(a_type.__module__).__dict__\n if ns and is_type_predicate(ns.get(match.group(2)),a_module):\n return True\n return False\n \n \ndef _get_field(cls,a_name,a_type):\n\n\n\n\n\n\n default=getattr(cls,a_name,MISSING)\n if isinstance(default,Field):\n f=default\n else :\n if isinstance(default,types.MemberDescriptorType):\n \n default=MISSING\n f=field(default=default)\n \n \n f.name=a_name\n f.type=a_type\n \n \n \n \n f._field_type=_FIELD\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n typing=sys.modules.get('typing')\n if typing:\n if (_is_classvar(a_type,typing)\n or (isinstance(f.type,str)\n and _is_type(f.type,cls,typing,typing.ClassVar,\n _is_classvar))):\n f._field_type=_FIELD_CLASSVAR\n \n \n \n if f._field_type is _FIELD:\n \n \n dataclasses=sys.modules[__name__]\n if (_is_initvar(a_type,dataclasses)\n or (isinstance(f.type,str)\n and _is_type(f.type,cls,dataclasses,dataclasses.InitVar,\n _is_initvar))):\n f._field_type=_FIELD_INITVAR\n \n \n \n \n \n \n if f._field_type in (_FIELD_CLASSVAR,_FIELD_INITVAR):\n if f.default_factory is not MISSING:\n raise TypeError(f'field {f.name} cannot have a '\n 'default factory')\n \n \n \n \n \n \n \n if f._field_type is _FIELD and isinstance(f.default,(list,dict,set)):\n raise ValueError(f'mutable default {type(f.default)} for field '\n f'{f.name} is not allowed: use default_factory')\n \n return f\n \n \ndef _set_new_attribute(cls,name,value):\n\n\n if name in cls.__dict__:\n return True\n setattr(cls,name,value)\n return False\n \n \n \n \n \n \n \ndef _hash_set_none(cls,fields):\n return None\n \ndef _hash_add(cls,fields):\n flds=[f for f in fields if (f.compare if f.hash is None else f.hash)]\n return _hash_fn(flds)\n \ndef _hash_exception(cls,fields):\n\n raise TypeError(f'Cannot overwrite attribute __hash__ '\n f'in class {cls.__name__}')\n \n \n \n \n \n \n \n \n \n \n_hash_action={(False ,False ,False ,False ):None ,\n(False ,False ,False ,True ):None ,\n(False ,False ,True ,False ):None ,\n(False ,False ,True ,True ):None ,\n(False ,True ,False ,False ):_hash_set_none,\n(False ,True ,False ,True ):None ,\n(False ,True ,True ,False ):_hash_add,\n(False ,True ,True ,True ):None ,\n(True ,False ,False ,False ):_hash_add,\n(True ,False ,False ,True ):_hash_exception,\n(True ,False ,True ,False ):_hash_add,\n(True ,False ,True ,True ):_hash_exception,\n(True ,True ,False ,False ):_hash_add,\n(True ,True ,False ,True ):_hash_exception,\n(True ,True ,True ,False ):_hash_add,\n(True ,True ,True ,True ):_hash_exception,\n}\n\n\n\n\ndef _process_class(cls,init,repr,eq,order,unsafe_hash,frozen):\n\n\n\n\n fields={}\n \n setattr(cls,_PARAMS,_DataclassParams(init,repr,eq,order,\n unsafe_hash,frozen))\n \n \n \n \n \n any_frozen_base=False\n has_dataclass_bases=False\n for b in cls.__mro__[-1:0:-1]:\n \n \n base_fields=getattr(b,_FIELDS,None )\n if base_fields:\n has_dataclass_bases=True\n for f in base_fields.values():\n fields[f.name]=f\n if getattr(b,_PARAMS).frozen:\n any_frozen_base=True\n \n \n \n \n \n \n \n \n \n \n \n \n \n cls_annotations=cls.__dict__.get('__annotations__',{})\n \n \n \n \n cls_fields=[_get_field(cls,name,type)\n for name,type in cls_annotations.items()]\n for f in cls_fields:\n fields[f.name]=f\n \n \n \n \n \n if isinstance(getattr(cls,f.name,None ),Field):\n if f.default is MISSING:\n \n \n \n \n \n \n delattr(cls,f.name)\n else :\n setattr(cls,f.name,f.default)\n \n \n for name,value in cls.__dict__.items():\n if isinstance(value,Field)and not name in cls_annotations:\n raise TypeError(f'{name!r} is a field but has no type annotation')\n \n \n if has_dataclass_bases:\n \n if any_frozen_base and not frozen:\n raise TypeError('cannot inherit non-frozen dataclass from a '\n 'frozen one')\n \n \n if not any_frozen_base and frozen:\n raise TypeError('cannot inherit frozen dataclass from a '\n 'non-frozen one')\n \n \n \n setattr(cls,_FIELDS,fields)\n \n \n \n \n \n \n class_hash=cls.__dict__.get('__hash__',MISSING)\n has_explicit_hash=not (class_hash is MISSING or\n (class_hash is None and '__eq__'in cls.__dict__))\n \n \n \n if order and not eq:\n raise ValueError('eq must be true if order is true')\n \n if init:\n \n has_post_init=hasattr(cls,_POST_INIT_NAME)\n \n \n flds=[f for f in fields.values()\n if f._field_type in (_FIELD,_FIELD_INITVAR)]\n _set_new_attribute(cls,'__init__',\n _init_fn(flds,\n frozen,\n has_post_init,\n \n \n \n '__dataclass_self__'if 'self'in fields\n else 'self',\n ))\n \n \n \n field_list=[f for f in fields.values()if f._field_type is _FIELD]\n \n if repr:\n flds=[f for f in field_list if f.repr]\n _set_new_attribute(cls,'__repr__',_repr_fn(flds))\n \n if eq:\n \n \n flds=[f for f in field_list if f.compare]\n self_tuple=_tuple_str('self',flds)\n other_tuple=_tuple_str('other',flds)\n _set_new_attribute(cls,'__eq__',\n _cmp_fn('__eq__','==',\n self_tuple,other_tuple))\n \n if order:\n \n flds=[f for f in field_list if f.compare]\n self_tuple=_tuple_str('self',flds)\n other_tuple=_tuple_str('other',flds)\n for name,op in [('__lt__','<'),\n ('__le__','<='),\n ('__gt__','>'),\n ('__ge__','>='),\n ]:\n if _set_new_attribute(cls,name,\n _cmp_fn(name,op,self_tuple,other_tuple)):\n raise TypeError(f'Cannot overwrite attribute {name} '\n f'in class {cls.__name__}. Consider using '\n 'functools.total_ordering')\n \n if frozen:\n for fn in _frozen_get_del_attr(cls,field_list):\n if _set_new_attribute(cls,fn.__name__,fn):\n raise TypeError(f'Cannot overwrite attribute {fn.__name__} '\n f'in class {cls.__name__}')\n \n \n hash_action=_hash_action[bool(unsafe_hash),\n bool(eq),\n bool(frozen),\n has_explicit_hash]\n if hash_action:\n \n \n cls.__hash__=hash_action(cls,field_list)\n \n if not getattr(cls,'__doc__'):\n \n cls.__doc__=(cls.__name__+\n str(inspect.signature(cls)).replace(' -> None',''))\n \n return cls\n \n \ndef dataclass(cls=None ,/,*,init=True ,repr=True ,eq=True ,order=False ,\nunsafe_hash=False ,frozen=False ):\n ''\n\n\n\n\n\n\n\n\n\n \n \n def wrap(cls):\n return _process_class(cls,init,repr,eq,order,unsafe_hash,frozen)\n \n \n if cls is None :\n \n return wrap\n \n \n return wrap(cls)\n \n \ndef fields(class_or_instance):\n ''\n\n\n\n \n \n \n try :\n fields=getattr(class_or_instance,_FIELDS)\n except AttributeError:\n raise TypeError('must be called with a dataclass type or instance')\n \n \n \n return tuple(f for f in fields.values()if f._field_type is _FIELD)\n \n \ndef _is_dataclass_instance(obj):\n ''\n return hasattr(type(obj),_FIELDS)\n \n \ndef is_dataclass(obj):\n ''\n \n cls=obj if isinstance(obj,type)else type(obj)\n return hasattr(cls,_FIELDS)\n \n \ndef asdict(obj,*,dict_factory=dict):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n if not _is_dataclass_instance(obj):\n raise TypeError(\"asdict() should be called on dataclass instances\")\n return _asdict_inner(obj,dict_factory)\n \n \ndef _asdict_inner(obj,dict_factory):\n if _is_dataclass_instance(obj):\n result=[]\n for f in fields(obj):\n value=_asdict_inner(getattr(obj,f.name),dict_factory)\n result.append((f.name,value))\n return dict_factory(result)\n elif isinstance(obj,tuple)and hasattr(obj,'_fields'):\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n return type(obj)(*[_asdict_inner(v,dict_factory)for v in obj])\n elif isinstance(obj,(list,tuple)):\n \n \n \n return type(obj)(_asdict_inner(v,dict_factory)for v in obj)\n elif isinstance(obj,dict):\n return type(obj)((_asdict_inner(k,dict_factory),\n _asdict_inner(v,dict_factory))\n for k,v in obj.items())\n else :\n return copy.deepcopy(obj)\n \n \ndef astuple(obj,*,tuple_factory=tuple):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n if not _is_dataclass_instance(obj):\n raise TypeError(\"astuple() should be called on dataclass instances\")\n return _astuple_inner(obj,tuple_factory)\n \n \ndef _astuple_inner(obj,tuple_factory):\n if _is_dataclass_instance(obj):\n result=[]\n for f in fields(obj):\n value=_astuple_inner(getattr(obj,f.name),tuple_factory)\n result.append(value)\n return tuple_factory(result)\n elif isinstance(obj,tuple)and hasattr(obj,'_fields'):\n \n \n \n \n \n \n return type(obj)(*[_astuple_inner(v,tuple_factory)for v in obj])\n elif isinstance(obj,(list,tuple)):\n \n \n \n return type(obj)(_astuple_inner(v,tuple_factory)for v in obj)\n elif isinstance(obj,dict):\n return type(obj)((_astuple_inner(k,tuple_factory),_astuple_inner(v,tuple_factory))\n for k,v in obj.items())\n else :\n return copy.deepcopy(obj)\n \n \ndef make_dataclass(cls_name,fields,*,bases=(),namespace=None ,init=True ,\nrepr=True ,eq=True ,order=False ,unsafe_hash=False ,\nfrozen=False ):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n if namespace is None :\n namespace={}\n else :\n \n namespace=namespace.copy()\n \n \n \n seen=set()\n anns={}\n for item in fields:\n if isinstance(item,str):\n name=item\n tp='typing.Any'\n elif len(item)==2:\n name,tp,=item\n elif len(item)==3:\n name,tp,spec=item\n namespace[name]=spec\n else :\n raise TypeError(f'Invalid field: {item!r}')\n \n if not isinstance(name,str)or not name.isidentifier():\n raise TypeError(f'Field names must be valid identifiers: {name!r}')\n if keyword.iskeyword(name):\n raise TypeError(f'Field names must not be keywords: {name!r}')\n if name in seen:\n raise TypeError(f'Field name duplicated: {name!r}')\n \n seen.add(name)\n anns[name]=tp\n \n namespace['__annotations__']=anns\n \n \n cls=types.new_class(cls_name,bases,{},lambda ns:ns.update(namespace))\n return dataclass(cls,init=init,repr=repr,eq=eq,order=order,\n unsafe_hash=unsafe_hash,frozen=frozen)\n \n \ndef replace(*args,**changes):\n ''\n\n\n\n\n\n\n\n\n\n\n\n \n if len(args)>1:\n raise TypeError(f'replace() takes 1 positional argument but {len(args)} were given')\n if args:\n obj,=args\n elif 'obj'in changes:\n obj=changes.pop('obj')\n import warnings\n warnings.warn(\"Passing 'obj' as keyword argument is deprecated\",\n DeprecationWarning,stacklevel=2)\n else :\n raise TypeError(\"replace() missing 1 required positional argument: 'obj'\")\n \n \n \n \n if not _is_dataclass_instance(obj):\n raise TypeError(\"replace() should be called on dataclass instances\")\n \n \n \n \n for f in getattr(obj,_FIELDS).values():\n \n if f._field_type is _FIELD_CLASSVAR:\n continue\n \n if not f.init:\n \n if f.name in changes:\n raise ValueError(f'field {f.name} is declared with '\n 'init=False, it cannot be specified with '\n 'replace()')\n continue\n \n if f.name not in changes:\n if f._field_type is _FIELD_INITVAR:\n raise ValueError(f\"InitVar {f.name!r} \"\n 'must be specified with replace()')\n changes[f.name]=getattr(obj,f.name)\n \n \n \n \n \n \n return obj.__class__(**changes)\nreplace.__text_signature__='(obj, /, **kwargs)'\n", ["_thread", "builtins", "copy", "functools", "inspect", "keyword", "re", "sys", "types", "warnings"]], "datetime": [".py", "''\n\n\n\n\n\nimport time as _time\nimport math as _math\nimport sys\n\ndef _cmp(x,y):\n return 0 if x ==y else 1 if x >y else -1\n \nMINYEAR=1\nMAXYEAR=9999\n_MAXORDINAL=3652059\n\n\n\n\n\n\n\n\n\n\n\n_DAYS_IN_MONTH=[-1,31,28,31,30,31,30,31,31,30,31,30,31]\n\n_DAYS_BEFORE_MONTH=[-1]\ndbm=0\nfor dim in _DAYS_IN_MONTH[1:]:\n _DAYS_BEFORE_MONTH.append(dbm)\n dbm +=dim\ndel dbm,dim\n\ndef _is_leap(year):\n ''\n return year %4 ==0 and (year %100 !=0 or year %400 ==0)\n \ndef _days_before_year(year):\n ''\n y=year -1\n return y *365+y //4 -y //100+y //400\n \ndef _days_in_month(year,month):\n ''\n assert 1 <=month <=12,month\n if month ==2 and _is_leap(year):\n return 29\n return _DAYS_IN_MONTH[month]\n \ndef _days_before_month(year,month):\n ''\n assert 1 <=month <=12,'month must be in 1..12'\n return _DAYS_BEFORE_MONTH[month]+(month >2 and _is_leap(year))\n \ndef _ymd2ord(year,month,day):\n ''\n assert 1 <=month <=12,'month must be in 1..12'\n dim=_days_in_month(year,month)\n assert 1 <=day <=dim,('day must be in 1..%d'%dim)\n return (_days_before_year(year)+\n _days_before_month(year,month)+\n day)\n \n_DI400Y=_days_before_year(401)\n_DI100Y=_days_before_year(101)\n_DI4Y=_days_before_year(5)\n\n\n\nassert _DI4Y ==4 *365+1\n\n\n\nassert _DI400Y ==4 *_DI100Y+1\n\n\n\nassert _DI100Y ==25 *_DI4Y -1\n\ndef _ord2ymd(n):\n ''\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n n -=1\n n400,n=divmod(n,_DI400Y)\n year=n400 *400+1\n \n \n \n \n \n \n n100,n=divmod(n,_DI100Y)\n \n \n n4,n=divmod(n,_DI4Y)\n \n \n \n n1,n=divmod(n,365)\n \n year +=n100 *100+n4 *4+n1\n if n1 ==4 or n100 ==4:\n assert n ==0\n return year -1,12,31\n \n \n \n leapyear=n1 ==3 and (n4 !=24 or n100 ==3)\n assert leapyear ==_is_leap(year)\n month=(n+50)>>5\n preceding=_DAYS_BEFORE_MONTH[month]+(month >2 and leapyear)\n if preceding >n:\n month -=1\n preceding -=_DAYS_IN_MONTH[month]+(month ==2 and leapyear)\n n -=preceding\n assert 0 <=n <_days_in_month(year,month)\n \n \n \n return year,month,n+1\n \n \n_MONTHNAMES=[None ,\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\n\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"]\n_DAYNAMES=[None ,\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\",\"Sun\"]\n\n\ndef _build_struct_time(y,m,d,hh,mm,ss,dstflag):\n wday=(_ymd2ord(y,m,d)+6)%7\n dnum=_days_before_month(y,m)+d\n return _time.struct_time((y,m,d,hh,mm,ss,wday,dnum,dstflag))\n \ndef _format_time(hh,mm,ss,us,timespec='auto'):\n specs={\n 'hours':'{:02d}',\n 'minutes':'{:02d}:{:02d}',\n 'seconds':'{:02d}:{:02d}:{:02d}',\n 'milliseconds':'{:02d}:{:02d}:{:02d}.{:03d}',\n 'microseconds':'{:02d}:{:02d}:{:02d}.{:06d}'\n }\n \n if timespec =='auto':\n \n timespec='microseconds'if us else 'seconds'\n elif timespec =='milliseconds':\n us //=1000\n try :\n fmt=specs[timespec]\n except KeyError:\n raise ValueError('Unknown timespec value')\n else :\n return fmt.format(hh,mm,ss,us)\n \ndef _format_offset(off):\n s=''\n if off is not None :\n if off.days <0:\n sign=\"-\"\n off=-off\n else :\n sign=\"+\"\n hh,mm=divmod(off,timedelta(hours=1))\n mm,ss=divmod(mm,timedelta(minutes=1))\n s +=\"%s%02d:%02d\"%(sign,hh,mm)\n if ss or ss.microseconds:\n s +=\":%02d\"%ss.seconds\n \n if ss.microseconds:\n s +='.%06d'%ss.microseconds\n return s\n \n \ndef _wrap_strftime(object,format,timetuple):\n\n freplace=None\n zreplace=None\n Zreplace=None\n \n \n newformat=[]\n push=newformat.append\n i,n=0,len(format)\n while i =2:\n break\n \n if next_char !=':':\n raise ValueError('Invalid time separator: %c'%next_char)\n \n pos +=1\n \n if pos 0 else tstr\n \n time_comps=_parse_hh_mm_ss_ff(timestr)\n \n tzi=None\n if tz_pos >0:\n tzstr=tstr[tz_pos:]\n \n \n \n \n \n \n if len(tzstr)not in (5,8,15):\n raise ValueError('Malformed time zone string')\n \n tz_comps=_parse_hh_mm_ss_ff(tzstr)\n if all(x ==0 for x in tz_comps):\n tzi=timezone.utc\n else :\n tzsign=-1 if tstr[tz_pos -1]=='-'else 1\n \n td=timedelta(hours=tz_comps[0],minutes=tz_comps[1],\n seconds=tz_comps[2],microseconds=tz_comps[3])\n \n tzi=timezone(tzsign *td)\n \n time_comps.append(tzi)\n \n return time_comps\n \n \n \ndef _check_tzname(name):\n if name is not None and not isinstance(name,str):\n raise TypeError(\"tzinfo.tzname() must return None or string, \"\n \"not '%s'\"%type(name))\n \n \n \n \n \n \n \ndef _check_utc_offset(name,offset):\n assert name in (\"utcoffset\",\"dst\")\n if offset is None :\n return\n if not isinstance(offset,timedelta):\n raise TypeError(\"tzinfo.%s() must return None \"\n \"or timedelta, not '%s'\"%(name,type(offset)))\n if not -timedelta(1)b if b >0 else r 999999999:\n raise OverflowError(\"timedelta # of days is too large: %d\"%d)\n \n self=object.__new__(cls)\n self._days=d\n self._seconds=s\n self._microseconds=us\n self._hashcode=-1\n return self\n \n def __repr__(self):\n args=[]\n if self._days:\n args.append(\"days=%d\"%self._days)\n if self._seconds:\n args.append(\"seconds=%d\"%self._seconds)\n if self._microseconds:\n args.append(\"microseconds=%d\"%self._microseconds)\n if not args:\n args.append('0')\n return \"%s.%s(%s)\"%(self.__class__.__module__,\n self.__class__.__qualname__,\n ', '.join(args))\n \n def __str__(self):\n mm,ss=divmod(self._seconds,60)\n hh,mm=divmod(mm,60)\n s=\"%d:%02d:%02d\"%(hh,mm,ss)\n if self._days:\n def plural(n):\n return n,abs(n)!=1 and \"s\"or \"\"\n s=(\"%d day%s, \"%plural(self._days))+s\n if self._microseconds:\n s=s+\".%06d\"%self._microseconds\n return s\n \n def total_seconds(self):\n ''\n return ((self.days *86400+self.seconds)*10 **6+\n self.microseconds)/10 **6\n \n \n @property\n def days(self):\n ''\n return self._days\n \n @property\n def seconds(self):\n ''\n return self._seconds\n \n @property\n def microseconds(self):\n ''\n return self._microseconds\n \n def __add__(self,other):\n if isinstance(other,timedelta):\n \n \n return timedelta(self._days+other._days,\n self._seconds+other._seconds,\n self._microseconds+other._microseconds)\n return NotImplemented\n \n __radd__=__add__\n \n def __sub__(self,other):\n if isinstance(other,timedelta):\n \n \n return timedelta(self._days -other._days,\n self._seconds -other._seconds,\n self._microseconds -other._microseconds)\n return NotImplemented\n \n def __rsub__(self,other):\n if isinstance(other,timedelta):\n return -self+other\n return NotImplemented\n \n def __neg__(self):\n \n \n return timedelta(-self._days,\n -self._seconds,\n -self._microseconds)\n \n def __pos__(self):\n return self\n \n def __abs__(self):\n if self._days <0:\n return -self\n else :\n return self\n \n def __mul__(self,other):\n if isinstance(other,int):\n \n \n return timedelta(self._days *other,\n self._seconds *other,\n self._microseconds *other)\n if isinstance(other,float):\n usec=self._to_microseconds()\n a,b=other.as_integer_ratio()\n return timedelta(0,0,_divide_and_round(usec *a,b))\n return NotImplemented\n \n __rmul__=__mul__\n \n def _to_microseconds(self):\n return ((self._days *(24 *3600)+self._seconds)*1000000+\n self._microseconds)\n \n def __floordiv__(self,other):\n if not isinstance(other,(int,timedelta)):\n return NotImplemented\n usec=self._to_microseconds()\n if isinstance(other,timedelta):\n return usec //other._to_microseconds()\n if isinstance(other,int):\n return timedelta(0,0,usec //other)\n \n def __truediv__(self,other):\n if not isinstance(other,(int,float,timedelta)):\n return NotImplemented\n usec=self._to_microseconds()\n if isinstance(other,timedelta):\n return usec /other._to_microseconds()\n if isinstance(other,int):\n return timedelta(0,0,_divide_and_round(usec,other))\n if isinstance(other,float):\n a,b=other.as_integer_ratio()\n return timedelta(0,0,_divide_and_round(b *usec,a))\n \n def __mod__(self,other):\n if isinstance(other,timedelta):\n r=self._to_microseconds()%other._to_microseconds()\n return timedelta(0,0,r)\n return NotImplemented\n \n def __divmod__(self,other):\n if isinstance(other,timedelta):\n q,r=divmod(self._to_microseconds(),\n other._to_microseconds())\n return q,timedelta(0,0,r)\n return NotImplemented\n \n \n \n def __eq__(self,other):\n if isinstance(other,timedelta):\n return self._cmp(other)==0\n else :\n return NotImplemented\n \n def __le__(self,other):\n if isinstance(other,timedelta):\n return self._cmp(other)<=0\n else :\n return NotImplemented\n \n def __lt__(self,other):\n if isinstance(other,timedelta):\n return self._cmp(other)<0\n else :\n return NotImplemented\n \n def __ge__(self,other):\n if isinstance(other,timedelta):\n return self._cmp(other)>=0\n else :\n return NotImplemented\n \n def __gt__(self,other):\n if isinstance(other,timedelta):\n return self._cmp(other)>0\n else :\n return NotImplemented\n \n def _cmp(self,other):\n assert isinstance(other,timedelta)\n return _cmp(self._getstate(),other._getstate())\n \n def __hash__(self):\n if self._hashcode ==-1:\n self._hashcode=hash(self._getstate())\n return self._hashcode\n \n def __bool__(self):\n return (self._days !=0 or\n self._seconds !=0 or\n self._microseconds !=0)\n \n \n \n def _getstate(self):\n return (self._days,self._seconds,self._microseconds)\n \n def __reduce__(self):\n return (self.__class__,self._getstate())\n \ntimedelta.min=timedelta(-999999999)\ntimedelta.max=timedelta(days=999999999,hours=23,minutes=59,seconds=59,\nmicroseconds=999999)\ntimedelta.resolution=timedelta(microseconds=1)\n\nclass date:\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n __slots__='_year','_month','_day','_hashcode'\n \n def __new__(cls,year,month=None ,day=None ):\n ''\n\n\n\n\n \n if (month is None and\n isinstance(year,(bytes,str))and len(year)==4 and\n 1 <=ord(year[2:3])<=12):\n \n if isinstance(year,str):\n try :\n year=year.encode('latin1')\n except UnicodeEncodeError:\n \n raise ValueError(\n \"Failed to encode latin1 string when unpickling \"\n \"a date object. \"\n \"pickle.load(data, encoding='latin1') is assumed.\")\n self=object.__new__(cls)\n self.__setstate(year)\n self._hashcode=-1\n return self\n year,month,day=_check_date_fields(year,month,day)\n self=object.__new__(cls)\n self._year=year\n self._month=month\n self._day=day\n self._hashcode=-1\n return self\n \n \n \n @classmethod\n def fromtimestamp(cls,t):\n ''\n y,m,d,hh,mm,ss,weekday,jday,dst=_time.localtime(t)\n return cls(y,m,d)\n \n @classmethod\n def today(cls):\n ''\n t=_time.time()\n return cls.fromtimestamp(t)\n \n @classmethod\n def fromordinal(cls,n):\n ''\n\n\n\n \n y,m,d=_ord2ymd(n)\n return cls(y,m,d)\n \n @classmethod\n def fromisoformat(cls,date_string):\n ''\n if not isinstance(date_string,str):\n raise TypeError('fromisoformat: argument must be str')\n \n try :\n assert len(date_string)==10\n return cls(*_parse_isoformat_date(date_string))\n except Exception:\n raise ValueError(f'Invalid isoformat string: {date_string!r}')\n \n @classmethod\n def fromisocalendar(cls,year,week,day):\n ''\n\n \n \n if not MINYEAR <=year <=MAXYEAR:\n raise ValueError(f\"Year is out of range: {year}\")\n \n if not 0 =0\n return NotImplemented\n \n def __gt__(self,other):\n if isinstance(other,date):\n return self._cmp(other)>0\n return NotImplemented\n \n def _cmp(self,other):\n assert isinstance(other,date)\n y,m,d=self._year,self._month,self._day\n y2,m2,d2=other._year,other._month,other._day\n return _cmp((y,m,d),(y2,m2,d2))\n \n def __hash__(self):\n ''\n if self._hashcode ==-1:\n self._hashcode=hash(self._getstate())\n return self._hashcode\n \n \n \n def __add__(self,other):\n ''\n if isinstance(other,timedelta):\n o=self.toordinal()+other.days\n if 0 =52:\n if today >=_isoweek1monday(year+1):\n year +=1\n week=0\n return year,week+1,day+1\n \n \n \n def _getstate(self):\n yhi,ylo=divmod(self._year,256)\n return bytes([yhi,ylo,self._month,self._day]),\n \n def __setstate(self,string):\n yhi,ylo,self._month,self._day=string\n self._year=yhi *256+ylo\n \n def __reduce__(self):\n return (self.__class__,self._getstate())\n \n_date_class=date\n\ndate.min=date(1,1,1)\ndate.max=date(9999,12,31)\ndate.resolution=timedelta(days=1)\n\n\nclass tzinfo:\n ''\n\n\n \n __slots__=()\n \n def tzname(self,dt):\n ''\n raise NotImplementedError(\"tzinfo subclass must override tzname()\")\n \n def utcoffset(self,dt):\n ''\n raise NotImplementedError(\"tzinfo subclass must override utcoffset()\")\n \n def dst(self,dt):\n ''\n\n\n\n \n raise NotImplementedError(\"tzinfo subclass must override dst()\")\n \n def fromutc(self,dt):\n ''\n \n if not isinstance(dt,datetime):\n raise TypeError(\"fromutc() requires a datetime argument\")\n if dt.tzinfo is not self:\n raise ValueError(\"dt.tzinfo is not self\")\n \n dtoff=dt.utcoffset()\n if dtoff is None :\n raise ValueError(\"fromutc() requires a non-None utcoffset() \"\n \"result\")\n \n \n \n dtdst=dt.dst()\n if dtdst is None :\n raise ValueError(\"fromutc() requires a non-None dst() result\")\n delta=dtoff -dtdst\n if delta:\n dt +=delta\n dtdst=dt.dst()\n if dtdst is None :\n raise ValueError(\"fromutc(): dt.dst gave inconsistent \"\n \"results; cannot convert\")\n return dt+dtdst\n \n \n \n def __reduce__(self):\n getinitargs=getattr(self,\"__getinitargs__\",None )\n if getinitargs:\n args=getinitargs()\n else :\n args=()\n getstate=getattr(self,\"__getstate__\",None )\n if getstate:\n state=getstate()\n else :\n state=getattr(self,\"__dict__\",None )or None\n if state is None :\n return (self.__class__,args)\n else :\n return (self.__class__,args,state)\n \n_tzinfo_class=tzinfo\n\nclass time:\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n __slots__='_hour','_minute','_second','_microsecond','_tzinfo','_hashcode','_fold'\n \n def __new__(cls,hour=0,minute=0,second=0,microsecond=0,tzinfo=None ,*,fold=0):\n ''\n\n\n\n\n\n\n\n \n if (isinstance(hour,(bytes,str))and len(hour)==6 and\n ord(hour[0:1])&0x7F <24):\n \n if isinstance(hour,str):\n try :\n hour=hour.encode('latin1')\n except UnicodeEncodeError:\n \n raise ValueError(\n \"Failed to encode latin1 string when unpickling \"\n \"a time object. \"\n \"pickle.load(data, encoding='latin1') is assumed.\")\n self=object.__new__(cls)\n self.__setstate(hour,minute or None )\n self._hashcode=-1\n return self\n hour,minute,second,microsecond,fold=_check_time_fields(\n hour,minute,second,microsecond,fold)\n _check_tzinfo_arg(tzinfo)\n self=object.__new__(cls)\n self._hour=hour\n self._minute=minute\n self._second=second\n self._microsecond=microsecond\n self._tzinfo=tzinfo\n self._hashcode=-1\n self._fold=fold\n return self\n \n \n @property\n def hour(self):\n ''\n return self._hour\n \n @property\n def minute(self):\n ''\n return self._minute\n \n @property\n def second(self):\n ''\n return self._second\n \n @property\n def microsecond(self):\n ''\n return self._microsecond\n \n @property\n def tzinfo(self):\n ''\n return self._tzinfo\n \n @property\n def fold(self):\n return self._fold\n \n \n \n \n \n def __eq__(self,other):\n if isinstance(other,time):\n return self._cmp(other,allow_mixed=True )==0\n else :\n return NotImplemented\n \n def __le__(self,other):\n if isinstance(other,time):\n return self._cmp(other)<=0\n else :\n return NotImplemented\n \n def __lt__(self,other):\n if isinstance(other,time):\n return self._cmp(other)<0\n else :\n return NotImplemented\n \n def __ge__(self,other):\n if isinstance(other,time):\n return self._cmp(other)>=0\n else :\n return NotImplemented\n \n def __gt__(self,other):\n if isinstance(other,time):\n return self._cmp(other)>0\n else :\n return NotImplemented\n \n def _cmp(self,other,allow_mixed=False ):\n assert isinstance(other,time)\n mytz=self._tzinfo\n ottz=other._tzinfo\n myoff=otoff=None\n \n if mytz is ottz:\n base_compare=True\n else :\n myoff=self.utcoffset()\n otoff=other.utcoffset()\n base_compare=myoff ==otoff\n \n if base_compare:\n return _cmp((self._hour,self._minute,self._second,\n self._microsecond),\n (other._hour,other._minute,other._second,\n other._microsecond))\n if myoff is None or otoff is None :\n if allow_mixed:\n return 2\n else :\n raise TypeError(\"cannot compare naive and aware times\")\n myhhmm=self._hour *60+self._minute -myoff //timedelta(minutes=1)\n othhmm=other._hour *60+other._minute -otoff //timedelta(minutes=1)\n return _cmp((myhhmm,self._second,self._microsecond),\n (othhmm,other._second,other._microsecond))\n \n def __hash__(self):\n ''\n if self._hashcode ==-1:\n if self.fold:\n t=self.replace(fold=0)\n else :\n t=self\n tzoff=t.utcoffset()\n if not tzoff:\n self._hashcode=hash(t._getstate()[0])\n else :\n h,m=divmod(timedelta(hours=self.hour,minutes=self.minute)-tzoff,\n timedelta(hours=1))\n assert not m %timedelta(minutes=1),\"whole minute\"\n m //=timedelta(minutes=1)\n if 0 <=h <24:\n self._hashcode=hash(time(h,m,self.second,self.microsecond))\n else :\n self._hashcode=hash((h,m,self.second,self.microsecond))\n return self._hashcode\n \n \n \n def _tzstr(self):\n ''\n off=self.utcoffset()\n return _format_offset(off)\n \n def __repr__(self):\n ''\n if self._microsecond !=0:\n s=\", %d, %d\"%(self._second,self._microsecond)\n elif self._second !=0:\n s=\", %d\"%self._second\n else :\n s=\"\"\n s=\"%s.%s(%d, %d%s)\"%(self.__class__.__module__,\n self.__class__.__qualname__,\n self._hour,self._minute,s)\n if self._tzinfo is not None :\n assert s[-1:]==\")\"\n s=s[:-1]+\", tzinfo=%r\"%self._tzinfo+\")\"\n if self._fold:\n assert s[-1:]==\")\"\n s=s[:-1]+\", fold=1)\"\n return s\n \n def isoformat(self,timespec='auto'):\n ''\n\n\n\n\n\n\n \n s=_format_time(self._hour,self._minute,self._second,\n self._microsecond,timespec)\n tz=self._tzstr()\n if tz:\n s +=tz\n return s\n \n __str__=isoformat\n \n @classmethod\n def fromisoformat(cls,time_string):\n ''\n if not isinstance(time_string,str):\n raise TypeError('fromisoformat: argument must be str')\n \n try :\n return cls(*_parse_isoformat_time(time_string))\n except Exception:\n raise ValueError(f'Invalid isoformat string: {time_string!r}')\n \n \n def strftime(self,fmt):\n ''\n\n \n \n \n timetuple=(1900,1,1,\n self._hour,self._minute,self._second,\n 0,1,-1)\n return _wrap_strftime(self,fmt,timetuple)\n \n def __format__(self,fmt):\n if not isinstance(fmt,str):\n raise TypeError(\"must be str, not %s\"%type(fmt).__name__)\n if len(fmt)!=0:\n return self.strftime(fmt)\n return str(self)\n \n \n \n def utcoffset(self):\n ''\n \n if self._tzinfo is None :\n return None\n offset=self._tzinfo.utcoffset(None )\n _check_utc_offset(\"utcoffset\",offset)\n return offset\n \n def tzname(self):\n ''\n\n\n\n\n \n if self._tzinfo is None :\n return None\n name=self._tzinfo.tzname(None )\n _check_tzname(name)\n return name\n \n def dst(self):\n ''\n\n\n\n\n\n\n \n if self._tzinfo is None :\n return None\n offset=self._tzinfo.dst(None )\n _check_utc_offset(\"dst\",offset)\n return offset\n \n def replace(self,hour=None ,minute=None ,second=None ,microsecond=None ,\n tzinfo=True ,*,fold=None ):\n ''\n if hour is None :\n hour=self.hour\n if minute is None :\n minute=self.minute\n if second is None :\n second=self.second\n if microsecond is None :\n microsecond=self.microsecond\n if tzinfo is True :\n tzinfo=self.tzinfo\n if fold is None :\n fold=self._fold\n return type(self)(hour,minute,second,microsecond,tzinfo,fold=fold)\n \n \n \n def _getstate(self,protocol=3):\n us2,us3=divmod(self._microsecond,256)\n us1,us2=divmod(us2,256)\n h=self._hour\n if self._fold and protocol >3:\n h +=128\n basestate=bytes([h,self._minute,self._second,\n us1,us2,us3])\n if self._tzinfo is None :\n return (basestate,)\n else :\n return (basestate,self._tzinfo)\n \n def __setstate(self,string,tzinfo):\n if tzinfo is not None and not isinstance(tzinfo,_tzinfo_class):\n raise TypeError(\"bad tzinfo state arg\")\n h,self._minute,self._second,us1,us2,us3=string\n if h >127:\n self._fold=1\n self._hour=h -128\n else :\n self._fold=0\n self._hour=h\n self._microsecond=(((us1 <<8)|us2)<<8)|us3\n self._tzinfo=tzinfo\n \n def __reduce_ex__(self,protocol):\n return (time,self._getstate(protocol))\n \n def __reduce__(self):\n return self.__reduce_ex__(2)\n \n_time_class=time\n\ntime.min=time(0,0,0)\ntime.max=time(23,59,59,999999)\ntime.resolution=timedelta(microseconds=1)\n\nclass datetime(date):\n ''\n\n\n\n \n __slots__=date.__slots__+time.__slots__\n \n def __new__(cls,year,month=None ,day=None ,hour=0,minute=0,second=0,\n microsecond=0,tzinfo=None ,*,fold=0):\n if (isinstance(year,(bytes,str))and len(year)==10 and\n 1 <=ord(year[2:3])&0x7F <=12):\n \n if isinstance(year,str):\n try :\n year=bytes(year,'latin1')\n except UnicodeEncodeError:\n \n raise ValueError(\n \"Failed to encode latin1 string when unpickling \"\n \"a datetime object. \"\n \"pickle.load(data, encoding='latin1') is assumed.\")\n self=object.__new__(cls)\n self.__setstate(year,month)\n self._hashcode=-1\n return self\n year,month,day=_check_date_fields(year,month,day)\n hour,minute,second,microsecond,fold=_check_time_fields(\n hour,minute,second,microsecond,fold)\n _check_tzinfo_arg(tzinfo)\n self=object.__new__(cls)\n self._year=year\n self._month=month\n self._day=day\n self._hour=hour\n self._minute=minute\n self._second=second\n self._microsecond=microsecond\n self._tzinfo=tzinfo\n self._hashcode=-1\n self._fold=fold\n return self\n \n \n @property\n def hour(self):\n ''\n return self._hour\n \n @property\n def minute(self):\n ''\n return self._minute\n \n @property\n def second(self):\n ''\n return self._second\n \n @property\n def microsecond(self):\n ''\n return self._microsecond\n \n @property\n def tzinfo(self):\n ''\n return self._tzinfo\n \n @property\n def fold(self):\n return self._fold\n \n @classmethod\n def _fromtimestamp(cls,t,utc,tz):\n ''\n\n\n \n frac,t=_math.modf(t)\n us=round(frac *1e6)\n if us >=1000000:\n t +=1\n us -=1000000\n elif us <0:\n t -=1\n us +=1000000\n \n converter=_time.gmtime if utc else _time.localtime\n y,m,d,hh,mm,ss,weekday,jday,dst=converter(t)\n ss=min(ss,59)\n result=cls(y,m,d,hh,mm,ss,us,tz)\n if tz is None :\n \n \n \n max_fold_seconds=24 *3600\n \n \n \n \n \n if t =0\n elif not isinstance(other,date):\n return NotImplemented\n else :\n _cmperror(self,other)\n \n def __gt__(self,other):\n if isinstance(other,datetime):\n return self._cmp(other)>0\n elif not isinstance(other,date):\n return NotImplemented\n else :\n _cmperror(self,other)\n \n def _cmp(self,other,allow_mixed=False ):\n assert isinstance(other,datetime)\n mytz=self._tzinfo\n ottz=other._tzinfo\n myoff=otoff=None\n \n if mytz is ottz:\n base_compare=True\n else :\n myoff=self.utcoffset()\n otoff=other.utcoffset()\n \n if allow_mixed:\n if myoff !=self.replace(fold=not self.fold).utcoffset():\n return 2\n if otoff !=other.replace(fold=not other.fold).utcoffset():\n return 2\n base_compare=myoff ==otoff\n \n if base_compare:\n return _cmp((self._year,self._month,self._day,\n self._hour,self._minute,self._second,\n self._microsecond),\n (other._year,other._month,other._day,\n other._hour,other._minute,other._second,\n other._microsecond))\n if myoff is None or otoff is None :\n if allow_mixed:\n return 2\n else :\n raise TypeError(\"cannot compare naive and aware datetimes\")\n \n diff=self -other\n if diff.days <0:\n return -1\n return diff and 1 or 0\n \n def __add__(self,other):\n ''\n if not isinstance(other,timedelta):\n return NotImplemented\n delta=timedelta(self.toordinal(),\n hours=self._hour,\n minutes=self._minute,\n seconds=self._second,\n microseconds=self._microsecond)\n delta +=other\n hour,rem=divmod(delta.seconds,3600)\n minute,second=divmod(rem,60)\n if 0 3:\n m +=128\n basestate=bytes([yhi,ylo,m,self._day,\n self._hour,self._minute,self._second,\n us1,us2,us3])\n if self._tzinfo is None :\n return (basestate,)\n else :\n return (basestate,self._tzinfo)\n \n def __setstate(self,string,tzinfo):\n if tzinfo is not None and not isinstance(tzinfo,_tzinfo_class):\n raise TypeError(\"bad tzinfo state arg\")\n (yhi,ylo,m,self._day,self._hour,\n self._minute,self._second,us1,us2,us3)=string\n if m >127:\n self._fold=1\n self._month=m -128\n else :\n self._fold=0\n self._month=m\n self._year=yhi *256+ylo\n self._microsecond=(((us1 <<8)|us2)<<8)|us3\n self._tzinfo=tzinfo\n \n def __reduce_ex__(self,protocol):\n return (self.__class__,self._getstate(protocol))\n \n def __reduce__(self):\n return self.__reduce_ex__(2)\n \n \ndatetime.min=datetime(1,1,1)\ndatetime.max=datetime(9999,12,31,23,59,59,999999)\ndatetime.resolution=timedelta(microseconds=1)\n\n\ndef _isoweek1monday(year):\n\n\n THURSDAY=3\n firstday=_ymd2ord(year,1,1)\n firstweekday=(firstday+6)%7\n week1monday=firstday -firstweekday\n if firstweekday >THURSDAY:\n week1monday +=7\n return week1monday\n \n \nclass timezone(tzinfo):\n __slots__='_offset','_name'\n \n \n _Omitted=object()\n def __new__(cls,offset,name=_Omitted):\n if not isinstance(offset,timedelta):\n raise TypeError(\"offset must be a timedelta\")\n if name is cls._Omitted:\n if not offset:\n return cls.utc\n name=None\n elif not isinstance(name,str):\n raise TypeError(\"name must be a string\")\n if not cls._minoffset <=offset <=cls._maxoffset:\n raise ValueError(\"offset must be a timedelta \"\n \"strictly between -timedelta(hours=24) and \"\n \"timedelta(hours=24).\")\n return cls._create(offset,name)\n \n @classmethod\n def _create(cls,offset,name=None ):\n self=tzinfo.__new__(cls)\n self._offset=offset\n self._name=name\n return self\n \n def __getinitargs__(self):\n ''\n if self._name is None :\n return (self._offset,)\n return (self._offset,self._name)\n \n def __eq__(self,other):\n if isinstance(other,timezone):\n return self._offset ==other._offset\n return NotImplemented\n \n def __hash__(self):\n return hash(self._offset)\n \n def __repr__(self):\n ''\n\n\n\n\n\n\n\n \n if self is self.utc:\n return 'datetime.timezone.utc'\n if self._name is None :\n return \"%s.%s(%r)\"%(self.__class__.__module__,\n self.__class__.__qualname__,\n self._offset)\n return \"%s.%s(%r, %r)\"%(self.__class__.__module__,\n self.__class__.__qualname__,\n self._offset,self._name)\n \n def __str__(self):\n return self.tzname(None )\n \n def utcoffset(self,dt):\n if isinstance(dt,datetime)or dt is None :\n return self._offset\n raise TypeError(\"utcoffset() argument must be a datetime instance\"\n \" or None\")\n \n def tzname(self,dt):\n if isinstance(dt,datetime)or dt is None :\n if self._name is None :\n return self._name_from_offset(self._offset)\n return self._name\n raise TypeError(\"tzname() argument must be a datetime instance\"\n \" or None\")\n \n def dst(self,dt):\n if isinstance(dt,datetime)or dt is None :\n return None\n raise TypeError(\"dst() argument must be a datetime instance\"\n \" or None\")\n \n def fromutc(self,dt):\n if isinstance(dt,datetime):\n if dt.tzinfo is not self:\n raise ValueError(\"fromutc: dt.tzinfo \"\n \"is not self\")\n return dt+self._offset\n raise TypeError(\"fromutc() argument must be a datetime instance\"\n \" or None\")\n \n _maxoffset=timedelta(hours=24,microseconds=-1)\n _minoffset=-_maxoffset\n \n @staticmethod\n def _name_from_offset(delta):\n if not delta:\n return 'UTC'\n if delta
[\"\\']).*?(?P=quote)(?:$|\\n)'):\n regexp=re.compile(restr,re.DOTALL |re.MULTILINE)\n matches=regexp.findall(data)\n if matches:\n break\n \n if not matches:\n \n return ('',False ,None ,0)\n quotes={}\n delims={}\n spaces=0\n groupindex=regexp.groupindex\n for m in matches:\n n=groupindex['quote']-1\n key=m[n]\n if key:\n quotes[key]=quotes.get(key,0)+1\n try :\n n=groupindex['delim']-1\n key=m[n]\n except KeyError:\n continue\n if key and (delimiters is None or key in delimiters):\n delims[key]=delims.get(key,0)+1\n try :\n n=groupindex['space']-1\n except KeyError:\n continue\n if m[n]:\n spaces +=1\n \n quotechar=max(quotes,key=quotes.get)\n \n if delims:\n delim=max(delims,key=delims.get)\n skipinitialspace=delims[delim]==spaces\n if delim =='\\n':\n delim=''\n else :\n \n delim=''\n skipinitialspace=0\n \n \n \n dq_regexp=re.compile(\n r\"((%(delim)s)|^)\\W*%(quote)s[^%(delim)s\\n]*%(quote)s[^%(delim)s\\n]*%(quote)s\\W*((%(delim)s)|$)\"%\\\n {'delim':re.escape(delim),'quote':quotechar},re.MULTILINE)\n \n \n \n if dq_regexp.search(data):\n doublequote=True\n else :\n doublequote=False\n \n return (quotechar,doublequote,delim,skipinitialspace)\n \n \n def _guess_delimiter(self,data,delimiters):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n data=list(filter(None ,data.split('\\n')))\n \n ascii=[chr(c)for c in range(127)]\n \n \n chunkLength=min(10,len(data))\n iteration=0\n charFrequency={}\n modes={}\n delims={}\n start,end=0,chunkLength\n while start 1:\n modes[char]=max(items,key=lambda x:x[1])\n \n \n items.remove(modes[char])\n modes[char]=(modes[char][0],modes[char][1]\n -sum(item[1]for item in items))\n else :\n modes[char]=items[0]\n \n \n modeList=modes.items()\n total=float(min(chunkLength *iteration,len(data)))\n \n consistency=1.0\n \n threshold=0.9\n while len(delims)==0 and consistency >=threshold:\n for k,v in modeList:\n if v[0]>0 and v[1]>0:\n if ((v[1]/total)>=consistency and\n (delimiters is None or k in delimiters)):\n delims[k]=v\n consistency -=0.01\n \n if len(delims)==1:\n delim=list(delims.keys())[0]\n skipinitialspace=(data[0].count(delim)==\n data[0].count(\"%c \"%delim))\n return (delim,skipinitialspace)\n \n \n start=end\n end +=chunkLength\n \n if not delims:\n return ('',0)\n \n \n if len(delims)>1:\n for d in self.preferred:\n if d in delims.keys():\n skipinitialspace=(data[0].count(d)==\n data[0].count(\"%c \"%d))\n return (d,skipinitialspace)\n \n \n \n items=[(v,k)for (k,v)in delims.items()]\n items.sort()\n delim=items[-1][1]\n \n skipinitialspace=(data[0].count(delim)==\n data[0].count(\"%c \"%delim))\n return (delim,skipinitialspace)\n \n \n def has_header(self,sample):\n \n \n \n \n \n \n \n \n \n rdr=reader(StringIO(sample),self.sniff(sample))\n \n header=next(rdr)\n \n columns=len(header)\n columnTypes={}\n for i in range(columns):columnTypes[i]=None\n \n checked=0\n for row in rdr:\n \n if checked >20:\n break\n checked +=1\n \n if len(row)!=columns:\n continue\n \n for col in list(columnTypes.keys()):\n \n for thisType in [int,float,complex]:\n try :\n thisType(row[col])\n break\n except (ValueError,OverflowError):\n pass\n else :\n \n thisType=len(row[col])\n \n if thisType !=columnTypes[col]:\n if columnTypes[col]is None :\n columnTypes[col]=thisType\n else :\n \n \n del columnTypes[col]\n \n \n \n hasHeader=0\n for col,colType in columnTypes.items():\n if type(colType)==type(0):\n if len(header[col])!=colType:\n hasHeader +=1\n else :\n hasHeader -=1\n else :\n try :\n colType(header[col])\n except (ValueError,TypeError):\n hasHeader +=1\n else :\n hasHeader -=1\n \n return hasHeader >0\n", ["_csv", "io", "re"]], "dataclasses": [".py", "import re\nimport sys\nimport copy\nimport types\nimport inspect\nimport keyword\nimport builtins\nimport functools\nimport _thread\n\n\n__all__=['dataclass',\n'field',\n'Field',\n'FrozenInstanceError',\n'InitVar',\n'MISSING',\n\n\n'fields',\n'asdict',\n'astuple',\n'make_dataclass',\n'replace',\n'is_dataclass',\n]\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nclass FrozenInstanceError(AttributeError):pass\n\n\n\n\nclass _HAS_DEFAULT_FACTORY_CLASS:\n def __repr__(self):\n return ''\n_HAS_DEFAULT_FACTORY=_HAS_DEFAULT_FACTORY_CLASS()\n\n\n\nclass _MISSING_TYPE:\n pass\nMISSING=_MISSING_TYPE()\n\n\n\n_EMPTY_METADATA=types.MappingProxyType({})\n\n\nclass _FIELD_BASE:\n def __init__(self,name):\n self.name=name\n def __repr__(self):\n return self.name\n_FIELD=_FIELD_BASE('_FIELD')\n_FIELD_CLASSVAR=_FIELD_BASE('_FIELD_CLASSVAR')\n_FIELD_INITVAR=_FIELD_BASE('_FIELD_INITVAR')\n\n\n\n_FIELDS='__dataclass_fields__'\n\n\n\n_PARAMS='__dataclass_params__'\n\n\n\n_POST_INIT_NAME='__post_init__'\n\n\n\n\n_MODULE_IDENTIFIER_RE=re.compile(r'^(?:\\s*(\\w+)\\s*\\.)?\\s*(\\w+)')\n\nclass _InitVarMeta(type):\n def __getitem__(self,params):\n return InitVar(params)\n \nclass InitVar(metaclass=_InitVarMeta):\n __slots__=('type',)\n \n def __init__(self,type):\n self.type=type\n \n def __repr__(self):\n return f'dataclasses.InitVar[{self.type.__name__}]'\n \n \n \n \n \n \n \n \n \n \n \n \nclass Field:\n __slots__=('name',\n 'type',\n 'default',\n 'default_factory',\n 'repr',\n 'hash',\n 'init',\n 'compare',\n 'metadata',\n '_field_type',\n )\n \n def __init__(self,default,default_factory,init,repr,hash,compare,\n metadata):\n self.name=None\n self.type=None\n self.default=default\n self.default_factory=default_factory\n self.init=init\n self.repr=repr\n self.hash=hash\n self.compare=compare\n self.metadata=(_EMPTY_METADATA\n if metadata is None else\n types.MappingProxyType(metadata))\n self._field_type=None\n \n def __repr__(self):\n return ('Field('\n f'name={self.name!r},'\n f'type={self.type!r},'\n f'default={self.default!r},'\n f'default_factory={self.default_factory!r},'\n f'init={self.init!r},'\n f'repr={self.repr!r},'\n f'hash={self.hash!r},'\n f'compare={self.compare!r},'\n f'metadata={self.metadata!r},'\n f'_field_type={self._field_type}'\n ')')\n \n \n \n \n \n \n \n \n \n def __set_name__(self,owner,name):\n func=getattr(type(self.default),'__set_name__',None )\n if func:\n \n \n func(self.default,owner,name)\n \n \nclass _DataclassParams:\n __slots__=('init',\n 'repr',\n 'eq',\n 'order',\n 'unsafe_hash',\n 'frozen',\n )\n \n def __init__(self,init,repr,eq,order,unsafe_hash,frozen):\n self.init=init\n self.repr=repr\n self.eq=eq\n self.order=order\n self.unsafe_hash=unsafe_hash\n self.frozen=frozen\n \n def __repr__(self):\n return ('_DataclassParams('\n f'init={self.init!r},'\n f'repr={self.repr!r},'\n f'eq={self.eq!r},'\n f'order={self.order!r},'\n f'unsafe_hash={self.unsafe_hash!r},'\n f'frozen={self.frozen!r}'\n ')')\n \n \n \n \n \ndef field(*,default=MISSING,default_factory=MISSING,init=True ,repr=True ,\nhash=None ,compare=True ,metadata=None ):\n ''\n\n\n\n\n\n\n\n\n\n\n\n \n \n if default is not MISSING and default_factory is not MISSING:\n raise ValueError('cannot specify both default and default_factory')\n return Field(default,default_factory,init,repr,hash,compare,\n metadata)\n \n \ndef _tuple_str(obj_name,fields):\n\n\n\n\n\n if not fields:\n return '()'\n \n return f'({\",\".join([f\"{obj_name}.{f.name}\" for f in fields])},)'\n \n \n \n \ndef _recursive_repr(user_function):\n\n\n repr_running=set()\n \n @functools.wraps(user_function)\n def wrapper(self):\n key=id(self),_thread.get_ident()\n if key in repr_running:\n return '...'\n repr_running.add(key)\n try :\n result=user_function(self)\n finally :\n repr_running.discard(key)\n return result\n return wrapper\n \n \ndef _create_fn(name,args,body,*,globals=None ,locals=None ,\nreturn_type=MISSING):\n\n\n\n if locals is None :\n locals={}\n \n \n \n if globals is not None and '__builtins__'not in globals:\n globals['__builtins__']=builtins\n return_annotation=''\n if return_type is not MISSING:\n locals['_return_type']=return_type\n return_annotation='->_return_type'\n args=','.join(args)\n body='\\n'.join(f' {b}'for b in body)\n \n \n txt=f'def {name}({args}){return_annotation}:\\n{body}'\n \n exec(txt,globals,locals)\n return locals[name]\n \n \ndef _field_assign(frozen,name,value,self_name):\n\n\n\n\n\n\n if frozen:\n return f'__builtins__.object.__setattr__({self_name},{name!r},{value})'\n return f'{self_name}.{name}={value}'\n \n \ndef _field_init(f,frozen,globals,self_name):\n\n\n\n default_name=f'_dflt_{f.name}'\n if f.default_factory is not MISSING:\n if f.init:\n \n \n globals[default_name]=f.default_factory\n value=(f'{default_name}() '\n f'if {f.name} is _HAS_DEFAULT_FACTORY '\n f'else {f.name}')\n else :\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n globals[default_name]=f.default_factory\n value=f'{default_name}()'\n else :\n \n if f.init:\n if f.default is MISSING:\n \n value=f.name\n elif f.default is not MISSING:\n globals[default_name]=f.default\n value=f.name\n else :\n \n \n return None\n \n \n \n \n if f._field_type is _FIELD_INITVAR:\n return None\n \n \n return _field_assign(frozen,f.name,value,self_name)\n \n \ndef _init_param(f):\n\n\n\n\n if f.default is MISSING and f.default_factory is MISSING:\n \n \n default=''\n elif f.default is not MISSING:\n \n \n default=f'=_dflt_{f.name}'\n elif f.default_factory is not MISSING:\n \n default='=_HAS_DEFAULT_FACTORY'\n return f'{f.name}:_type_{f.name}{default}'\n \n \ndef _init_fn(fields,frozen,has_post_init,self_name):\n\n\n\n\n\n\n\n seen_default=False\n for f in fields:\n \n if f.init:\n if not (f.default is MISSING and f.default_factory is MISSING):\n seen_default=True\n elif seen_default:\n raise TypeError(f'non-default argument {f.name!r} '\n 'follows default argument')\n \n globals={'MISSING':MISSING,\n '_HAS_DEFAULT_FACTORY':_HAS_DEFAULT_FACTORY}\n \n body_lines=[]\n for f in fields:\n line=_field_init(f,frozen,globals,self_name)\n \n \n if line:\n body_lines.append(line)\n \n \n if has_post_init:\n params_str=','.join(f.name for f in fields\n if f._field_type is _FIELD_INITVAR)\n body_lines.append(f'{self_name}.{_POST_INIT_NAME}({params_str})')\n \n \n if not body_lines:\n body_lines=['pass']\n \n locals={f'_type_{f.name}':f.type for f in fields}\n return _create_fn('__init__',\n [self_name]+[_init_param(f)for f in fields if f.init],\n body_lines,\n locals=locals,\n globals=globals,\n return_type=None )\n \n \ndef _repr_fn(fields):\n fn=_create_fn('__repr__',\n ('self',),\n ['return self.__class__.__qualname__ + f\"('+\n ', '.join([f\"{f.name}={{self.{f.name}!r}}\"\n for f in fields])+\n ')\"'])\n return _recursive_repr(fn)\n \n \ndef _frozen_get_del_attr(cls,fields):\n\n\n globals={'cls':cls,\n 'FrozenInstanceError':FrozenInstanceError}\n if fields:\n fields_str='('+','.join(repr(f.name)for f in fields)+',)'\n else :\n \n fields_str='()'\n return (_create_fn('__setattr__',\n ('self','name','value'),\n (f'if type(self) is cls or name in {fields_str}:',\n ' raise FrozenInstanceError(f\"cannot assign to field {name!r}\")',\n f'super(cls, self).__setattr__(name, value)'),\n globals=globals),\n _create_fn('__delattr__',\n ('self','name'),\n (f'if type(self) is cls or name in {fields_str}:',\n ' raise FrozenInstanceError(f\"cannot delete field {name!r}\")',\n f'super(cls, self).__delattr__(name)'),\n globals=globals),\n )\n \n \ndef _cmp_fn(name,op,self_tuple,other_tuple):\n\n\n\n\n\n return _create_fn(name,\n ('self','other'),\n ['if other.__class__ is self.__class__:',\n f' return {self_tuple}{op}{other_tuple}',\n 'return NotImplemented'])\n \n \ndef _hash_fn(fields):\n self_tuple=_tuple_str('self',fields)\n return _create_fn('__hash__',\n ('self',),\n [f'return hash({self_tuple})'])\n \n \ndef _is_classvar(a_type,typing):\n\n\n return (a_type is typing.ClassVar\n or (type(a_type)is typing._GenericAlias\n and a_type.__origin__ is typing.ClassVar))\n \n \ndef _is_initvar(a_type,dataclasses):\n\n\n return (a_type is dataclasses.InitVar\n or type(a_type)is dataclasses.InitVar)\n \n \ndef _is_type(annotation,cls,a_module,a_type,is_type_predicate):\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n match=_MODULE_IDENTIFIER_RE.match(annotation)\n if match:\n ns=None\n module_name=match.group(1)\n if not module_name:\n \n \n ns=sys.modules.get(cls.__module__).__dict__\n else :\n \n module=sys.modules.get(cls.__module__)\n if module and module.__dict__.get(module_name)is a_module:\n ns=sys.modules.get(a_type.__module__).__dict__\n if ns and is_type_predicate(ns.get(match.group(2)),a_module):\n return True\n return False\n \n \ndef _get_field(cls,a_name,a_type):\n\n\n\n\n\n\n default=getattr(cls,a_name,MISSING)\n if isinstance(default,Field):\n f=default\n else :\n if isinstance(default,types.MemberDescriptorType):\n \n default=MISSING\n f=field(default=default)\n \n \n f.name=a_name\n f.type=a_type\n \n \n \n \n f._field_type=_FIELD\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n typing=sys.modules.get('typing')\n if typing:\n if (_is_classvar(a_type,typing)\n or (isinstance(f.type,str)\n and _is_type(f.type,cls,typing,typing.ClassVar,\n _is_classvar))):\n f._field_type=_FIELD_CLASSVAR\n \n \n \n if f._field_type is _FIELD:\n \n \n dataclasses=sys.modules[__name__]\n if (_is_initvar(a_type,dataclasses)\n or (isinstance(f.type,str)\n and _is_type(f.type,cls,dataclasses,dataclasses.InitVar,\n _is_initvar))):\n f._field_type=_FIELD_INITVAR\n \n \n \n \n \n \n if f._field_type in (_FIELD_CLASSVAR,_FIELD_INITVAR):\n if f.default_factory is not MISSING:\n raise TypeError(f'field {f.name} cannot have a '\n 'default factory')\n \n \n \n \n \n \n \n if f._field_type is _FIELD and isinstance(f.default,(list,dict,set)):\n raise ValueError(f'mutable default {type(f.default)} for field '\n f'{f.name} is not allowed: use default_factory')\n \n return f\n \n \ndef _set_new_attribute(cls,name,value):\n\n\n if name in cls.__dict__:\n return True\n setattr(cls,name,value)\n return False\n \n \n \n \n \n \n \ndef _hash_set_none(cls,fields):\n return None\n \ndef _hash_add(cls,fields):\n flds=[f for f in fields if (f.compare if f.hash is None else f.hash)]\n return _hash_fn(flds)\n \ndef _hash_exception(cls,fields):\n\n raise TypeError(f'Cannot overwrite attribute __hash__ '\n f'in class {cls.__name__}')\n \n \n \n \n \n \n \n \n \n \n_hash_action={(False ,False ,False ,False ):None ,\n(False ,False ,False ,True ):None ,\n(False ,False ,True ,False ):None ,\n(False ,False ,True ,True ):None ,\n(False ,True ,False ,False ):_hash_set_none,\n(False ,True ,False ,True ):None ,\n(False ,True ,True ,False ):_hash_add,\n(False ,True ,True ,True ):None ,\n(True ,False ,False ,False ):_hash_add,\n(True ,False ,False ,True ):_hash_exception,\n(True ,False ,True ,False ):_hash_add,\n(True ,False ,True ,True ):_hash_exception,\n(True ,True ,False ,False ):_hash_add,\n(True ,True ,False ,True ):_hash_exception,\n(True ,True ,True ,False ):_hash_add,\n(True ,True ,True ,True ):_hash_exception,\n}\n\n\n\n\ndef _process_class(cls,init,repr,eq,order,unsafe_hash,frozen):\n\n\n\n\n fields={}\n \n setattr(cls,_PARAMS,_DataclassParams(init,repr,eq,order,\n unsafe_hash,frozen))\n \n \n \n \n \n any_frozen_base=False\n has_dataclass_bases=False\n for b in cls.__mro__[-1:0:-1]:\n \n \n base_fields=getattr(b,_FIELDS,None )\n if base_fields:\n has_dataclass_bases=True\n for f in base_fields.values():\n fields[f.name]=f\n if getattr(b,_PARAMS).frozen:\n any_frozen_base=True\n \n \n \n \n \n \n \n \n \n \n \n \n \n cls_annotations=cls.__dict__.get('__annotations__',{})\n \n \n \n \n cls_fields=[_get_field(cls,name,type)\n for name,type in cls_annotations.items()]\n for f in cls_fields:\n fields[f.name]=f\n \n \n \n \n \n if isinstance(getattr(cls,f.name,None ),Field):\n if f.default is MISSING:\n \n \n \n \n \n \n delattr(cls,f.name)\n else :\n setattr(cls,f.name,f.default)\n \n \n for name,value in cls.__dict__.items():\n if isinstance(value,Field)and not name in cls_annotations:\n raise TypeError(f'{name!r} is a field but has no type annotation')\n \n \n if has_dataclass_bases:\n \n if any_frozen_base and not frozen:\n raise TypeError('cannot inherit non-frozen dataclass from a '\n 'frozen one')\n \n \n if not any_frozen_base and frozen:\n raise TypeError('cannot inherit frozen dataclass from a '\n 'non-frozen one')\n \n \n \n setattr(cls,_FIELDS,fields)\n \n \n \n \n \n \n class_hash=cls.__dict__.get('__hash__',MISSING)\n has_explicit_hash=not (class_hash is MISSING or\n (class_hash is None and '__eq__'in cls.__dict__))\n \n \n \n if order and not eq:\n raise ValueError('eq must be true if order is true')\n \n if init:\n \n has_post_init=hasattr(cls,_POST_INIT_NAME)\n \n \n flds=[f for f in fields.values()\n if f._field_type in (_FIELD,_FIELD_INITVAR)]\n _set_new_attribute(cls,'__init__',\n _init_fn(flds,\n frozen,\n has_post_init,\n \n \n \n '__dataclass_self__'if 'self'in fields\n else 'self',\n ))\n \n \n \n field_list=[f for f in fields.values()if f._field_type is _FIELD]\n \n if repr:\n flds=[f for f in field_list if f.repr]\n _set_new_attribute(cls,'__repr__',_repr_fn(flds))\n \n if eq:\n \n \n flds=[f for f in field_list if f.compare]\n self_tuple=_tuple_str('self',flds)\n other_tuple=_tuple_str('other',flds)\n _set_new_attribute(cls,'__eq__',\n _cmp_fn('__eq__','==',\n self_tuple,other_tuple))\n \n if order:\n \n flds=[f for f in field_list if f.compare]\n self_tuple=_tuple_str('self',flds)\n other_tuple=_tuple_str('other',flds)\n for name,op in [('__lt__','<'),\n ('__le__','<='),\n ('__gt__','>'),\n ('__ge__','>='),\n ]:\n if _set_new_attribute(cls,name,\n _cmp_fn(name,op,self_tuple,other_tuple)):\n raise TypeError(f'Cannot overwrite attribute {name} '\n f'in class {cls.__name__}. Consider using '\n 'functools.total_ordering')\n \n if frozen:\n for fn in _frozen_get_del_attr(cls,field_list):\n if _set_new_attribute(cls,fn.__name__,fn):\n raise TypeError(f'Cannot overwrite attribute {fn.__name__} '\n f'in class {cls.__name__}')\n \n \n hash_action=_hash_action[bool(unsafe_hash),\n bool(eq),\n bool(frozen),\n has_explicit_hash]\n if hash_action:\n \n \n cls.__hash__=hash_action(cls,field_list)\n \n if not getattr(cls,'__doc__'):\n \n cls.__doc__=(cls.__name__+\n str(inspect.signature(cls)).replace(' -> None',''))\n \n return cls\n \n \ndef dataclass(cls=None ,/,*,init=True ,repr=True ,eq=True ,order=False ,\nunsafe_hash=False ,frozen=False ):\n ''\n\n\n\n\n\n\n\n\n\n \n \n def wrap(cls):\n return _process_class(cls,init,repr,eq,order,unsafe_hash,frozen)\n \n \n if cls is None :\n \n return wrap\n \n \n return wrap(cls)\n \n \ndef fields(class_or_instance):\n ''\n\n\n\n \n \n \n try :\n fields=getattr(class_or_instance,_FIELDS)\n except AttributeError:\n raise TypeError('must be called with a dataclass type or instance')\n \n \n \n return tuple(f for f in fields.values()if f._field_type is _FIELD)\n \n \ndef _is_dataclass_instance(obj):\n ''\n return hasattr(type(obj),_FIELDS)\n \n \ndef is_dataclass(obj):\n ''\n \n cls=obj if isinstance(obj,type)else type(obj)\n return hasattr(cls,_FIELDS)\n \n \ndef asdict(obj,*,dict_factory=dict):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n if not _is_dataclass_instance(obj):\n raise TypeError(\"asdict() should be called on dataclass instances\")\n return _asdict_inner(obj,dict_factory)\n \n \ndef _asdict_inner(obj,dict_factory):\n if _is_dataclass_instance(obj):\n result=[]\n for f in fields(obj):\n value=_asdict_inner(getattr(obj,f.name),dict_factory)\n result.append((f.name,value))\n return dict_factory(result)\n elif isinstance(obj,tuple)and hasattr(obj,'_fields'):\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n return type(obj)(*[_asdict_inner(v,dict_factory)for v in obj])\n elif isinstance(obj,(list,tuple)):\n \n \n \n return type(obj)(_asdict_inner(v,dict_factory)for v in obj)\n elif isinstance(obj,dict):\n return type(obj)((_asdict_inner(k,dict_factory),\n _asdict_inner(v,dict_factory))\n for k,v in obj.items())\n else :\n return copy.deepcopy(obj)\n \n \ndef astuple(obj,*,tuple_factory=tuple):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n if not _is_dataclass_instance(obj):\n raise TypeError(\"astuple() should be called on dataclass instances\")\n return _astuple_inner(obj,tuple_factory)\n \n \ndef _astuple_inner(obj,tuple_factory):\n if _is_dataclass_instance(obj):\n result=[]\n for f in fields(obj):\n value=_astuple_inner(getattr(obj,f.name),tuple_factory)\n result.append(value)\n return tuple_factory(result)\n elif isinstance(obj,tuple)and hasattr(obj,'_fields'):\n \n \n \n \n \n \n return type(obj)(*[_astuple_inner(v,tuple_factory)for v in obj])\n elif isinstance(obj,(list,tuple)):\n \n \n \n return type(obj)(_astuple_inner(v,tuple_factory)for v in obj)\n elif isinstance(obj,dict):\n return type(obj)((_astuple_inner(k,tuple_factory),_astuple_inner(v,tuple_factory))\n for k,v in obj.items())\n else :\n return copy.deepcopy(obj)\n \n \ndef make_dataclass(cls_name,fields,*,bases=(),namespace=None ,init=True ,\nrepr=True ,eq=True ,order=False ,unsafe_hash=False ,\nfrozen=False ):\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n if namespace is None :\n namespace={}\n else :\n \n namespace=namespace.copy()\n \n \n \n seen=set()\n anns={}\n for item in fields:\n if isinstance(item,str):\n name=item\n tp='typing.Any'\n elif len(item)==2:\n name,tp,=item\n elif len(item)==3:\n name,tp,spec=item\n namespace[name]=spec\n else :\n raise TypeError(f'Invalid field: {item!r}')\n \n if not isinstance(name,str)or not name.isidentifier():\n raise TypeError(f'Field names must be valid identifiers: {name!r}')\n if keyword.iskeyword(name):\n raise TypeError(f'Field names must not be keywords: {name!r}')\n if name in seen:\n raise TypeError(f'Field name duplicated: {name!r}')\n \n seen.add(name)\n anns[name]=tp\n \n namespace['__annotations__']=anns\n \n \n cls=types.new_class(cls_name,bases,{},lambda ns:ns.update(namespace))\n return dataclass(cls,init=init,repr=repr,eq=eq,order=order,\n unsafe_hash=unsafe_hash,frozen=frozen)\n \n \ndef replace(*args,**changes):\n ''\n\n\n\n\n\n\n\n\n\n\n\n \n if len(args)>1:\n raise TypeError(f'replace() takes 1 positional argument but {len(args)} were given')\n if args:\n obj,=args\n elif 'obj'in changes:\n obj=changes.pop('obj')\n import warnings\n warnings.warn(\"Passing 'obj' as keyword argument is deprecated\",\n DeprecationWarning,stacklevel=2)\n else :\n raise TypeError(\"replace() missing 1 required positional argument: 'obj'\")\n \n \n \n \n if not _is_dataclass_instance(obj):\n raise TypeError(\"replace() should be called on dataclass instances\")\n \n \n \n \n for f in getattr(obj,_FIELDS).values():\n \n if f._field_type is _FIELD_CLASSVAR:\n continue\n \n if not f.init:\n \n if f.name in changes:\n raise ValueError(f'field {f.name} is declared with '\n 'init=False, it cannot be specified with '\n 'replace()')\n continue\n \n if f.name not in changes:\n if f._field_type is _FIELD_INITVAR:\n raise ValueError(f\"InitVar {f.name!r} \"\n 'must be specified with replace()')\n changes[f.name]=getattr(obj,f.name)\n \n \n \n \n \n \n return obj.__class__(**changes)\nreplace.__text_signature__='(obj, /, **kwargs)'\n", ["_thread", "builtins", "copy", "functools", "inspect", "keyword", "re", "sys", "types", "warnings"]], "datetime": [".py", "''\n\n\n\n\n\nimport time as _time\nimport math as _math\nimport sys\n\ndef _cmp(x,y):\n return 0 if x ==y else 1 if x >y else -1\n \nMINYEAR=1\nMAXYEAR=9999\n_MAXORDINAL=3652059\n\n\n\n\n\n\n\n\n\n\n\n_DAYS_IN_MONTH=[-1,31,28,31,30,31,30,31,31,30,31,30,31]\n\n_DAYS_BEFORE_MONTH=[-1]\ndbm=0\nfor dim in _DAYS_IN_MONTH[1:]:\n _DAYS_BEFORE_MONTH.append(dbm)\n dbm +=dim\ndel dbm,dim\n\ndef _is_leap(year):\n ''\n return year %4 ==0 and (year %100 !=0 or year %400 ==0)\n \ndef _days_before_year(year):\n ''\n y=year -1\n return y *365+y //4 -y //100+y //400\n \ndef _days_in_month(year,month):\n ''\n assert 1 <=month <=12,month\n if month ==2 and _is_leap(year):\n return 29\n return _DAYS_IN_MONTH[month]\n \ndef _days_before_month(year,month):\n ''\n assert 1 <=month <=12,'month must be in 1..12'\n return _DAYS_BEFORE_MONTH[month]+(month >2 and _is_leap(year))\n \ndef _ymd2ord(year,month,day):\n ''\n assert 1 <=month <=12,'month must be in 1..12'\n dim=_days_in_month(year,month)\n assert 1 <=day <=dim,('day must be in 1..%d'%dim)\n return (_days_before_year(year)+\n _days_before_month(year,month)+\n day)\n \n_DI400Y=_days_before_year(401)\n_DI100Y=_days_before_year(101)\n_DI4Y=_days_before_year(5)\n\n\n\nassert _DI4Y ==4 *365+1\n\n\n\nassert _DI400Y ==4 *_DI100Y+1\n\n\n\nassert _DI100Y ==25 *_DI4Y -1\n\ndef _ord2ymd(n):\n ''\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n n -=1\n n400,n=divmod(n,_DI400Y)\n year=n400 *400+1\n \n \n \n \n \n \n n100,n=divmod(n,_DI100Y)\n \n \n n4,n=divmod(n,_DI4Y)\n \n \n \n n1,n=divmod(n,365)\n \n year +=n100 *100+n4 *4+n1\n if n1 ==4 or n100 ==4:\n assert n ==0\n return year -1,12,31\n \n \n \n leapyear=n1 ==3 and (n4 !=24 or n100 ==3)\n assert leapyear ==_is_leap(year)\n month=(n+50)>>5\n preceding=_DAYS_BEFORE_MONTH[month]+(month >2 and leapyear)\n if preceding >n:\n month -=1\n preceding -=_DAYS_IN_MONTH[month]+(month ==2 and leapyear)\n n -=preceding\n assert 0 <=n <_days_in_month(year,month)\n \n \n \n return year,month,n+1\n \n \n_MONTHNAMES=[None ,\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\n\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"]\n_DAYNAMES=[None ,\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\",\"Sun\"]\n\n\ndef _build_struct_time(y,m,d,hh,mm,ss,dstflag):\n wday=(_ymd2ord(y,m,d)+6)%7\n dnum=_days_before_month(y,m)+d\n return _time.struct_time((y,m,d,hh,mm,ss,wday,dnum,dstflag))\n \ndef _format_time(hh,mm,ss,us,timespec='auto'):\n specs={\n 'hours':'{:02d}',\n 'minutes':'{:02d}:{:02d}',\n 'seconds':'{:02d}:{:02d}:{:02d}',\n 'milliseconds':'{:02d}:{:02d}:{:02d}.{:03d}',\n 'microseconds':'{:02d}:{:02d}:{:02d}.{:06d}'\n }\n \n if timespec =='auto':\n \n timespec='microseconds'if us else 'seconds'\n elif timespec =='milliseconds':\n us //=1000\n try :\n fmt=specs[timespec]\n except KeyError:\n raise ValueError('Unknown timespec value')\n else :\n return fmt.format(hh,mm,ss,us)\n \ndef _format_offset(off):\n s=''\n if off is not None :\n if off.days <0:\n sign=\"-\"\n off=-off\n else :\n sign=\"+\"\n hh,mm=divmod(off,timedelta(hours=1))\n mm,ss=divmod(mm,timedelta(minutes=1))\n s +=\"%s%02d:%02d\"%(sign,hh,mm)\n if ss or ss.microseconds:\n s +=\":%02d\"%ss.seconds\n \n if ss.microseconds:\n s +='.%06d'%ss.microseconds\n return s\n \n \ndef _wrap_strftime(object,format,timetuple):\n\n freplace=None\n zreplace=None\n Zreplace=None\n \n \n newformat=[]\n push=newformat.append\n i,n=0,len(format)\n while i =2:\n break\n \n if next_char !=':':\n raise ValueError('Invalid time separator: %c'%next_char)\n \n pos +=1\n \n if pos 0 else tstr\n \n time_comps=_parse_hh_mm_ss_ff(timestr)\n \n tzi=None\n if tz_pos >0:\n tzstr=tstr[tz_pos:]\n \n \n \n \n \n \n if len(tzstr)not in (5,8,15):\n raise ValueError('Malformed time zone string')\n \n tz_comps=_parse_hh_mm_ss_ff(tzstr)\n if all(x ==0 for x in tz_comps):\n tzi=timezone.utc\n else :\n tzsign=-1 if tstr[tz_pos -1]=='-'else 1\n \n td=timedelta(hours=tz_comps[0],minutes=tz_comps[1],\n seconds=tz_comps[2],microseconds=tz_comps[3])\n \n tzi=timezone(tzsign *td)\n \n time_comps.append(tzi)\n \n return time_comps\n \n \n \ndef _check_tzname(name):\n if name is not None and not isinstance(name,str):\n raise TypeError(\"tzinfo.tzname() must return None or string, \"\n \"not '%s'\"%type(name))\n \n \n \n \n \n \n \ndef _check_utc_offset(name,offset):\n assert name in (\"utcoffset\",\"dst\")\n if offset is None :\n return\n if not isinstance(offset,timedelta):\n raise TypeError(\"tzinfo.%s() must return None \"\n \"or timedelta, not '%s'\"%(name,type(offset)))\n if not -timedelta(1)b if b >0 else r 999999999:\n raise OverflowError(\"timedelta # of days is too large: %d\"%d)\n \n self=object.__new__(cls)\n self._days=d\n self._seconds=s\n self._microseconds=us\n self._hashcode=-1\n return self\n \n def __repr__(self):\n args=[]\n if self._days:\n args.append(\"days=%d\"%self._days)\n if self._seconds:\n args.append(\"seconds=%d\"%self._seconds)\n if self._microseconds:\n args.append(\"microseconds=%d\"%self._microseconds)\n if not args:\n args.append('0')\n return \"%s.%s(%s)\"%(self.__class__.__module__,\n self.__class__.__qualname__,\n ', '.join(args))\n \n def __str__(self):\n mm,ss=divmod(self._seconds,60)\n hh,mm=divmod(mm,60)\n s=\"%d:%02d:%02d\"%(hh,mm,ss)\n if self._days:\n def plural(n):\n return n,abs(n)!=1 and \"s\"or \"\"\n s=(\"%d day%s, \"%plural(self._days))+s\n if self._microseconds:\n s=s+\".%06d\"%self._microseconds\n return s\n \n def total_seconds(self):\n ''\n return ((self.days *86400+self.seconds)*10 **6+\n self.microseconds)/10 **6\n \n \n @property\n def days(self):\n ''\n return self._days\n \n @property\n def seconds(self):\n ''\n return self._seconds\n \n @property\n def microseconds(self):\n ''\n return self._microseconds\n \n def __add__(self,other):\n if isinstance(other,timedelta):\n \n \n return timedelta(self._days+other._days,\n self._seconds+other._seconds,\n self._microseconds+other._microseconds)\n return NotImplemented\n \n __radd__=__add__\n \n def __sub__(self,other):\n if isinstance(other,timedelta):\n \n \n return timedelta(self._days -other._days,\n self._seconds -other._seconds,\n self._microseconds -other._microseconds)\n return NotImplemented\n \n def __rsub__(self,other):\n if isinstance(other,timedelta):\n return -self+other\n return NotImplemented\n \n def __neg__(self):\n \n \n return timedelta(-self._days,\n -self._seconds,\n -self._microseconds)\n \n def __pos__(self):\n return self\n \n def __abs__(self):\n if self._days <0:\n return -self\n else :\n return self\n \n def __mul__(self,other):\n if isinstance(other,int):\n \n \n return timedelta(self._days *other,\n self._seconds *other,\n self._microseconds *other)\n if isinstance(other,float):\n usec=self._to_microseconds()\n a,b=other.as_integer_ratio()\n return timedelta(0,0,_divide_and_round(usec *a,b))\n return NotImplemented\n \n __rmul__=__mul__\n \n def _to_microseconds(self):\n return ((self._days *(24 *3600)+self._seconds)*1000000+\n self._microseconds)\n \n def __floordiv__(self,other):\n if not isinstance(other,(int,timedelta)):\n return NotImplemented\n usec=self._to_microseconds()\n if isinstance(other,timedelta):\n return usec //other._to_microseconds()\n if isinstance(other,int):\n return timedelta(0,0,usec //other)\n \n def __truediv__(self,other):\n if not isinstance(other,(int,float,timedelta)):\n return NotImplemented\n usec=self._to_microseconds()\n if isinstance(other,timedelta):\n return usec /other._to_microseconds()\n if isinstance(other,int):\n return timedelta(0,0,_divide_and_round(usec,other))\n if isinstance(other,float):\n a,b=other.as_integer_ratio()\n return timedelta(0,0,_divide_and_round(b *usec,a))\n \n def __mod__(self,other):\n if isinstance(other,timedelta):\n r=self._to_microseconds()%other._to_microseconds()\n return timedelta(0,0,r)\n return NotImplemented\n \n def __divmod__(self,other):\n if isinstance(other,timedelta):\n q,r=divmod(self._to_microseconds(),\n other._to_microseconds())\n return q,timedelta(0,0,r)\n return NotImplemented\n \n \n \n def __eq__(self,other):\n if isinstance(other,timedelta):\n return self._cmp(other)==0\n else :\n return NotImplemented\n \n def __le__(self,other):\n if isinstance(other,timedelta):\n return self._cmp(other)<=0\n else :\n return NotImplemented\n \n def __lt__(self,other):\n if isinstance(other,timedelta):\n return self._cmp(other)<0\n else :\n return NotImplemented\n \n def __ge__(self,other):\n if isinstance(other,timedelta):\n return self._cmp(other)>=0\n else :\n return NotImplemented\n \n def __gt__(self,other):\n if isinstance(other,timedelta):\n return self._cmp(other)>0\n else :\n return NotImplemented\n \n def _cmp(self,other):\n assert isinstance(other,timedelta)\n return _cmp(self._getstate(),other._getstate())\n \n def __hash__(self):\n if self._hashcode ==-1:\n self._hashcode=hash(self._getstate())\n return self._hashcode\n \n def __bool__(self):\n return (self._days !=0 or\n self._seconds !=0 or\n self._microseconds !=0)\n \n \n \n def _getstate(self):\n return (self._days,self._seconds,self._microseconds)\n \n def __reduce__(self):\n return (self.__class__,self._getstate())\n \ntimedelta.min=timedelta(-999999999)\ntimedelta.max=timedelta(days=999999999,hours=23,minutes=59,seconds=59,\nmicroseconds=999999)\ntimedelta.resolution=timedelta(microseconds=1)\n\nclass date:\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n __slots__='_year','_month','_day','_hashcode'\n \n def __new__(cls,year,month=None ,day=None ):\n ''\n\n\n\n\n \n if (month is None and\n isinstance(year,(bytes,str))and len(year)==4 and\n 1 <=ord(year[2:3])<=12):\n \n if isinstance(year,str):\n try :\n year=year.encode('latin1')\n except UnicodeEncodeError:\n \n raise ValueError(\n \"Failed to encode latin1 string when unpickling \"\n \"a date object. \"\n \"pickle.load(data, encoding='latin1') is assumed.\")\n self=object.__new__(cls)\n self.__setstate(year)\n self._hashcode=-1\n return self\n year,month,day=_check_date_fields(year,month,day)\n self=object.__new__(cls)\n self._year=year\n self._month=month\n self._day=day\n self._hashcode=-1\n return self\n \n \n \n @classmethod\n def fromtimestamp(cls,t):\n ''\n y,m,d,hh,mm,ss,weekday,jday,dst=_time.localtime(t)\n return cls(y,m,d)\n \n @classmethod\n def today(cls):\n ''\n t=_time.time()\n return cls.fromtimestamp(t)\n \n @classmethod\n def fromordinal(cls,n):\n ''\n\n\n\n \n y,m,d=_ord2ymd(n)\n return cls(y,m,d)\n \n @classmethod\n def fromisoformat(cls,date_string):\n ''\n if not isinstance(date_string,str):\n raise TypeError('fromisoformat: argument must be str')\n \n try :\n assert len(date_string)==10\n return cls(*_parse_isoformat_date(date_string))\n except Exception:\n raise ValueError(f'Invalid isoformat string: {date_string!r}')\n \n @classmethod\n def fromisocalendar(cls,year,week,day):\n ''\n\n \n \n if not MINYEAR <=year <=MAXYEAR:\n raise ValueError(f\"Year is out of range: {year}\")\n \n if not 0 =0\n return NotImplemented\n \n def __gt__(self,other):\n if isinstance(other,date):\n return self._cmp(other)>0\n return NotImplemented\n \n def _cmp(self,other):\n assert isinstance(other,date)\n y,m,d=self._year,self._month,self._day\n y2,m2,d2=other._year,other._month,other._day\n return _cmp((y,m,d),(y2,m2,d2))\n \n def __hash__(self):\n ''\n if self._hashcode ==-1:\n self._hashcode=hash(self._getstate())\n return self._hashcode\n \n \n \n def __add__(self,other):\n ''\n if isinstance(other,timedelta):\n o=self.toordinal()+other.days\n if 0 =52:\n if today >=_isoweek1monday(year+1):\n year +=1\n week=0\n return year,week+1,day+1\n \n \n \n def _getstate(self):\n yhi,ylo=divmod(self._year,256)\n return bytes([yhi,ylo,self._month,self._day]),\n \n def __setstate(self,string):\n yhi,ylo,self._month,self._day=string\n self._year=yhi *256+ylo\n \n def __reduce__(self):\n return (self.__class__,self._getstate())\n \n_date_class=date\n\ndate.min=date(1,1,1)\ndate.max=date(9999,12,31)\ndate.resolution=timedelta(days=1)\n\n\nclass tzinfo:\n ''\n\n\n \n __slots__=()\n \n def tzname(self,dt):\n ''\n raise NotImplementedError(\"tzinfo subclass must override tzname()\")\n \n def utcoffset(self,dt):\n ''\n raise NotImplementedError(\"tzinfo subclass must override utcoffset()\")\n \n def dst(self,dt):\n ''\n\n\n\n \n raise NotImplementedError(\"tzinfo subclass must override dst()\")\n \n def fromutc(self,dt):\n ''\n \n if not isinstance(dt,datetime):\n raise TypeError(\"fromutc() requires a datetime argument\")\n if dt.tzinfo is not self:\n raise ValueError(\"dt.tzinfo is not self\")\n \n dtoff=dt.utcoffset()\n if dtoff is None :\n raise ValueError(\"fromutc() requires a non-None utcoffset() \"\n \"result\")\n \n \n \n dtdst=dt.dst()\n if dtdst is None :\n raise ValueError(\"fromutc() requires a non-None dst() result\")\n delta=dtoff -dtdst\n if delta:\n dt +=delta\n dtdst=dt.dst()\n if dtdst is None :\n raise ValueError(\"fromutc(): dt.dst gave inconsistent \"\n \"results; cannot convert\")\n return dt+dtdst\n \n \n \n def __reduce__(self):\n getinitargs=getattr(self,\"__getinitargs__\",None )\n if getinitargs:\n args=getinitargs()\n else :\n args=()\n getstate=getattr(self,\"__getstate__\",None )\n if getstate:\n state=getstate()\n else :\n state=getattr(self,\"__dict__\",None )or None\n if state is None :\n return (self.__class__,args)\n else :\n return (self.__class__,args,state)\n \n_tzinfo_class=tzinfo\n\nclass time:\n ''\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n __slots__='_hour','_minute','_second','_microsecond','_tzinfo','_hashcode','_fold'\n \n def __new__(cls,hour=0,minute=0,second=0,microsecond=0,tzinfo=None ,*,fold=0):\n ''\n\n\n\n\n\n\n\n \n if (isinstance(hour,(bytes,str))and len(hour)==6 and\n ord(hour[0:1])&0x7F <24):\n \n if isinstance(hour,str):\n try :\n hour=hour.encode('latin1')\n except UnicodeEncodeError:\n \n raise ValueError(\n \"Failed to encode latin1 string when unpickling \"\n \"a time object. \"\n \"pickle.load(data, encoding='latin1') is assumed.\")\n self=object.__new__(cls)\n self.__setstate(hour,minute or None )\n self._hashcode=-1\n return self\n hour,minute,second,microsecond,fold=_check_time_fields(\n hour,minute,second,microsecond,fold)\n _check_tzinfo_arg(tzinfo)\n self=object.__new__(cls)\n self._hour=hour\n self._minute=minute\n self._second=second\n self._microsecond=microsecond\n self._tzinfo=tzinfo\n self._hashcode=-1\n self._fold=fold\n return self\n \n \n @property\n def hour(self):\n ''\n return self._hour\n \n @property\n def minute(self):\n ''\n return self._minute\n \n @property\n def second(self):\n ''\n return self._second\n \n @property\n def microsecond(self):\n ''\n return self._microsecond\n \n @property\n def tzinfo(self):\n ''\n return self._tzinfo\n \n @property\n def fold(self):\n return self._fold\n \n \n \n \n \n def __eq__(self,other):\n if isinstance(other,time):\n return self._cmp(other,allow_mixed=True )==0\n else :\n return NotImplemented\n \n def __le__(self,other):\n if isinstance(other,time):\n return self._cmp(other)<=0\n else :\n return NotImplemented\n \n def __lt__(self,other):\n if isinstance(other,time):\n return self._cmp(other)<0\n else :\n return NotImplemented\n \n def __ge__(self,other):\n if isinstance(other,time):\n return self._cmp(other)>=0\n else :\n return NotImplemented\n \n def __gt__(self,other):\n if isinstance(other,time):\n return self._cmp(other)>0\n else :\n return NotImplemented\n \n def _cmp(self,other,allow_mixed=False ):\n assert isinstance(other,time)\n mytz=self._tzinfo\n ottz=other._tzinfo\n myoff=otoff=None\n \n if mytz is ottz:\n base_compare=True\n else :\n myoff=self.utcoffset()\n otoff=other.utcoffset()\n base_compare=myoff ==otoff\n \n if base_compare:\n return _cmp((self._hour,self._minute,self._second,\n self._microsecond),\n (other._hour,other._minute,other._second,\n other._microsecond))\n if myoff is None or otoff is None :\n if allow_mixed:\n return 2\n else :\n raise TypeError(\"cannot compare naive and aware times\")\n myhhmm=self._hour *60+self._minute -myoff //timedelta(minutes=1)\n othhmm=other._hour *60+other._minute -otoff //timedelta(minutes=1)\n return _cmp((myhhmm,self._second,self._microsecond),\n (othhmm,other._second,other._microsecond))\n \n def __hash__(self):\n ''\n if self._hashcode ==-1:\n if self.fold:\n t=self.replace(fold=0)\n else :\n t=self\n tzoff=t.utcoffset()\n if not tzoff:\n self._hashcode=hash(t._getstate()[0])\n else :\n h,m=divmod(timedelta(hours=self.hour,minutes=self.minute)-tzoff,\n timedelta(hours=1))\n assert not m %timedelta(minutes=1),\"whole minute\"\n m //=timedelta(minutes=1)\n if 0 <=h <24:\n self._hashcode=hash(time(h,m,self.second,self.microsecond))\n else :\n self._hashcode=hash((h,m,self.second,self.microsecond))\n return self._hashcode\n \n \n \n def _tzstr(self):\n ''\n off=self.utcoffset()\n return _format_offset(off)\n \n def __repr__(self):\n ''\n if self._microsecond !=0:\n s=\", %d, %d\"%(self._second,self._microsecond)\n elif self._second !=0:\n s=\", %d\"%self._second\n else :\n s=\"\"\n s=\"%s.%s(%d, %d%s)\"%(self.__class__.__module__,\n self.__class__.__qualname__,\n self._hour,self._minute,s)\n if self._tzinfo is not None :\n assert s[-1:]==\")\"\n s=s[:-1]+\", tzinfo=%r\"%self._tzinfo+\")\"\n if self._fold:\n assert s[-1:]==\")\"\n s=s[:-1]+\", fold=1)\"\n return s\n \n def isoformat(self,timespec='auto'):\n ''\n\n\n\n\n\n\n \n s=_format_time(self._hour,self._minute,self._second,\n self._microsecond,timespec)\n tz=self._tzstr()\n if tz:\n s +=tz\n return s\n \n __str__=isoformat\n \n @classmethod\n def fromisoformat(cls,time_string):\n ''\n if not isinstance(time_string,str):\n raise TypeError('fromisoformat: argument must be str')\n \n try :\n return cls(*_parse_isoformat_time(time_string))\n except Exception:\n raise ValueError(f'Invalid isoformat string: {time_string!r}')\n \n \n def strftime(self,fmt):\n ''\n\n \n \n \n timetuple=(1900,1,1,\n self._hour,self._minute,self._second,\n 0,1,-1)\n return _wrap_strftime(self,fmt,timetuple)\n \n def __format__(self,fmt):\n if not isinstance(fmt,str):\n raise TypeError(\"must be str, not %s\"%type(fmt).__name__)\n if len(fmt)!=0:\n return self.strftime(fmt)\n return str(self)\n \n \n \n def utcoffset(self):\n ''\n \n if self._tzinfo is None :\n return None\n offset=self._tzinfo.utcoffset(None )\n _check_utc_offset(\"utcoffset\",offset)\n return offset\n \n def tzname(self):\n ''\n\n\n\n\n \n if self._tzinfo is None :\n return None\n name=self._tzinfo.tzname(None )\n _check_tzname(name)\n return name\n \n def dst(self):\n ''\n\n\n\n\n\n\n \n if self._tzinfo is None :\n return None\n offset=self._tzinfo.dst(None )\n _check_utc_offset(\"dst\",offset)\n return offset\n \n def replace(self,hour=None ,minute=None ,second=None ,microsecond=None ,\n tzinfo=True ,*,fold=None ):\n ''\n if hour is None :\n hour=self.hour\n if minute is None :\n minute=self.minute\n if second is None :\n second=self.second\n if microsecond is None :\n microsecond=self.microsecond\n if tzinfo is True :\n tzinfo=self.tzinfo\n if fold is None :\n fold=self._fold\n return type(self)(hour,minute,second,microsecond,tzinfo,fold=fold)\n \n \n \n def _getstate(self,protocol=3):\n us2,us3=divmod(self._microsecond,256)\n us1,us2=divmod(us2,256)\n h=self._hour\n if self._fold and protocol >3:\n h +=128\n basestate=bytes([h,self._minute,self._second,\n us1,us2,us3])\n if self._tzinfo is None :\n return (basestate,)\n else :\n return (basestate,self._tzinfo)\n \n def __setstate(self,string,tzinfo):\n if tzinfo is not None and not isinstance(tzinfo,_tzinfo_class):\n raise TypeError(\"bad tzinfo state arg\")\n h,self._minute,self._second,us1,us2,us3=string\n if h >127:\n self._fold=1\n self._hour=h -128\n else :\n self._fold=0\n self._hour=h\n self._microsecond=(((us1 <<8)|us2)<<8)|us3\n self._tzinfo=tzinfo\n \n def __reduce_ex__(self,protocol):\n return (time,self._getstate(protocol))\n \n def __reduce__(self):\n return self.__reduce_ex__(2)\n \n_time_class=time\n\ntime.min=time(0,0,0)\ntime.max=time(23,59,59,999999)\ntime.resolution=timedelta(microseconds=1)\n\nclass datetime(date):\n ''\n\n\n\n \n __slots__=date.__slots__+time.__slots__\n \n def __new__(cls,year,month=None ,day=None ,hour=0,minute=0,second=0,\n microsecond=0,tzinfo=None ,*,fold=0):\n if (isinstance(year,(bytes,str))and len(year)==10 and\n 1 <=ord(year[2:3])&0x7F <=12):\n \n if isinstance(year,str):\n try :\n year=bytes(year,'latin1')\n except UnicodeEncodeError:\n \n raise ValueError(\n \"Failed to encode latin1 string when unpickling \"\n \"a datetime object. \"\n \"pickle.load(data, encoding='latin1') is assumed.\")\n self=object.__new__(cls)\n self.__setstate(year,month)\n self._hashcode=-1\n return self\n year,month,day=_check_date_fields(year,month,day)\n hour,minute,second,microsecond,fold=_check_time_fields(\n hour,minute,second,microsecond,fold)\n _check_tzinfo_arg(tzinfo)\n self=object.__new__(cls)\n self._year=year\n self._month=month\n self._day=day\n self._hour=hour\n self._minute=minute\n self._second=second\n self._microsecond=microsecond\n self._tzinfo=tzinfo\n self._hashcode=-1\n self._fold=fold\n return self\n \n \n @property\n def hour(self):\n ''\n return self._hour\n \n @property\n def minute(self):\n ''\n return self._minute\n \n @property\n def second(self):\n ''\n return self._second\n \n @property\n def microsecond(self):\n ''\n return self._microsecond\n \n @property\n def tzinfo(self):\n ''\n return self._tzinfo\n \n @property\n def fold(self):\n return self._fold\n \n @classmethod\n def _fromtimestamp(cls,t,utc,tz):\n ''\n\n\n \n frac,t=_math.modf(t)\n us=round(frac *1e6)\n if us >=1000000:\n t +=1\n us -=1000000\n elif us <0:\n t -=1\n us +=1000000\n \n converter=_time.gmtime if utc else _time.localtime\n y,m,d,hh,mm,ss,weekday,jday,dst=converter(t)\n ss=min(ss,59)\n result=cls(y,m,d,hh,mm,ss,us,tz)\n if tz is None :\n \n \n \n max_fold_seconds=24 *3600\n \n \n \n \n \n if t =0\n elif not isinstance(other,date):\n return NotImplemented\n else :\n _cmperror(self,other)\n \n def __gt__(self,other):\n if isinstance(other,datetime):\n return self._cmp(other)>0\n elif not isinstance(other,date):\n return NotImplemented\n else :\n _cmperror(self,other)\n \n def _cmp(self,other,allow_mixed=False ):\n assert isinstance(other,datetime)\n mytz=self._tzinfo\n ottz=other._tzinfo\n myoff=otoff=None\n \n if mytz is ottz:\n base_compare=True\n else :\n myoff=self.utcoffset()\n otoff=other.utcoffset()\n \n if allow_mixed:\n if myoff !=self.replace(fold=not self.fold).utcoffset():\n return 2\n if otoff !=other.replace(fold=not other.fold).utcoffset():\n return 2\n base_compare=myoff ==otoff\n \n if base_compare:\n return _cmp((self._year,self._month,self._day,\n self._hour,self._minute,self._second,\n self._microsecond),\n (other._year,other._month,other._day,\n other._hour,other._minute,other._second,\n other._microsecond))\n if myoff is None or otoff is None :\n if allow_mixed:\n return 2\n else :\n raise TypeError(\"cannot compare naive and aware datetimes\")\n \n diff=self -other\n if diff.days <0:\n return -1\n return diff and 1 or 0\n \n def __add__(self,other):\n ''\n if not isinstance(other,timedelta):\n return NotImplemented\n delta=timedelta(self.toordinal(),\n hours=self._hour,\n minutes=self._minute,\n seconds=self._second,\n microseconds=self._microsecond)\n delta +=other\n hour,rem=divmod(delta.seconds,3600)\n minute,second=divmod(rem,60)\n if 0 3:\n m +=128\n basestate=bytes([yhi,ylo,m,self._day,\n self._hour,self._minute,self._second,\n us1,us2,us3])\n if self._tzinfo is None :\n return (basestate,)\n else :\n return (basestate,self._tzinfo)\n \n def __setstate(self,string,tzinfo):\n if tzinfo is not None and not isinstance(tzinfo,_tzinfo_class):\n raise TypeError(\"bad tzinfo state arg\")\n (yhi,ylo,m,self._day,self._hour,\n self._minute,self._second,us1,us2,us3)=string\n if m >127:\n self._fold=1\n self._month=m -128\n else :\n self._fold=0\n self._month=m\n self._year=yhi *256+ylo\n self._microsecond=(((us1 <<8)|us2)<<8)|us3\n self._tzinfo=tzinfo\n \n def __reduce_ex__(self,protocol):\n return (self.__class__,self._getstate(protocol))\n \n def __reduce__(self):\n return self.__reduce_ex__(2)\n \n \ndatetime.min=datetime(1,1,1)\ndatetime.max=datetime(9999,12,31,23,59,59,999999)\ndatetime.resolution=timedelta(microseconds=1)\n\n\ndef _isoweek1monday(year):\n\n\n THURSDAY=3\n firstday=_ymd2ord(year,1,1)\n firstweekday=(firstday+6)%7\n week1monday=firstday -firstweekday\n if firstweekday >THURSDAY:\n week1monday +=7\n return week1monday\n \n \nclass timezone(tzinfo):\n __slots__='_offset','_name'\n \n \n _Omitted=object()\n def __new__(cls,offset,name=_Omitted):\n if not isinstance(offset,timedelta):\n raise TypeError(\"offset must be a timedelta\")\n if name is cls._Omitted:\n if not offset:\n return cls.utc\n name=None\n elif not isinstance(name,str):\n raise TypeError(\"name must be a string\")\n if not cls._minoffset <=offset <=cls._maxoffset:\n raise ValueError(\"offset must be a timedelta \"\n \"strictly between -timedelta(hours=24) and \"\n \"timedelta(hours=24).\")\n return cls._create(offset,name)\n \n @classmethod\n def _create(cls,offset,name=None ):\n self=tzinfo.__new__(cls)\n self._offset=offset\n self._name=name\n return self\n \n def __getinitargs__(self):\n ''\n if self._name is None :\n return (self._offset,)\n return (self._offset,self._name)\n \n def __eq__(self,other):\n if isinstance(other,timezone):\n return self._offset ==other._offset\n return NotImplemented\n \n def __hash__(self):\n return hash(self._offset)\n \n def __repr__(self):\n ''\n\n\n\n\n\n\n\n \n if self is self.utc:\n return 'datetime.timezone.utc'\n if self._name is None :\n return \"%s.%s(%r)\"%(self.__class__.__module__,\n self.__class__.__qualname__,\n self._offset)\n return \"%s.%s(%r, %r)\"%(self.__class__.__module__,\n self.__class__.__qualname__,\n self._offset,self._name)\n \n def __str__(self):\n return self.tzname(None )\n \n def utcoffset(self,dt):\n if isinstance(dt,datetime)or dt is None :\n return self._offset\n raise TypeError(\"utcoffset() argument must be a datetime instance\"\n \" or None\")\n \n def tzname(self,dt):\n if isinstance(dt,datetime)or dt is None :\n if self._name is None :\n return self._name_from_offset(self._offset)\n return self._name\n raise TypeError(\"tzname() argument must be a datetime instance\"\n \" or None\")\n \n def dst(self,dt):\n if isinstance(dt,datetime)or dt is None :\n return None\n raise TypeError(\"dst() argument must be a datetime instance\"\n \" or None\")\n \n def fromutc(self,dt):\n if isinstance(dt,datetime):\n if dt.tzinfo is not self:\n raise ValueError(\"fromutc: dt.tzinfo \"\n \"is not self\")\n return dt+self._offset\n raise TypeError(\"fromutc() argument must be a datetime instance\"\n \" or None\")\n \n _maxoffset=timedelta(hours=24,microseconds=-1)\n _minoffset=-_maxoffset\n \n @staticmethod\n def _name_from_offset(delta):\n if not delta:\n return 'UTC'\n if delta